@runtypelabs/cli 0.2.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@1.21.7_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","../src/auth/credential-store.ts","../src/index.ts","../src/commands/auth.ts","../src/auth/oauth-manager.ts","../src/auth/callback-server.ts","../src/auth/api-key-manager.ts","../src/config/env.ts","../src/commands/flows.ts","../src/lib/ensure-auth.ts","../src/lib/interactive.ts","../src/lib/api-client.ts","../src/lib/output.ts","../src/commands/records.ts","../src/commands/prompts.ts","../src/commands/batch.ts","../src/commands/talk.ts","../src/chat/session-manager.ts","../src/chat/stream-handler.ts","../src/commands/config.ts","../src/commands/products.ts","../src/commands/init.ts","../src/commands/dispatch.ts","../src/commands/agents.ts","../src/commands/agents-task.ts","../src/commands/models.ts","../src/commands/schedules.ts","../src/commands/eval.ts","../src/commands/api-keys.ts","../src/commands/analytics.ts","../src/commands/billing.ts","../src/commands/flow-versions.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.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import Conf from 'conf'\nimport crypto from 'crypto'\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\ninterface StoredCredentials {\n apiKey?: string\n userId?: string\n orgId?: string\n apiUrl?: string\n createdAt?: string\n lastUsed?: string\n [key: string]: string | undefined\n}\n\nconst CREDENTIALS_DIR = path.join(os.homedir(), '.runtype')\nconst CREDENTIALS_FILENAME = 'credentials.json'\nconst CREDENTIALS_PATH = path.join(CREDENTIALS_DIR, CREDENTIALS_FILENAME)\n\nfunction createConf(encryptionKey: string): Conf<StoredCredentials> {\n return new Conf<StoredCredentials>({\n projectName: 'runtype-cli',\n projectSuffix: '',\n configName: 'credentials',\n encryptionKey,\n cwd: CREDENTIALS_DIR,\n })\n}\n\nfunction isCorruptStoreError(error: unknown): boolean {\n if (error instanceof SyntaxError) return true\n const message = error instanceof Error ? error.message : String(error)\n return typeof message === 'string' && message.includes('JSON')\n}\n\nexport class CredentialStore {\n private config: Conf<StoredCredentials>\n private encryptionKey: string\n\n constructor() {\n this.encryptionKey = this.getMachineKey()\n\n try {\n this.config = createConf(this.encryptionKey)\n } catch (error) {\n if (isCorruptStoreError(error)) {\n try {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n fs.unlinkSync(CREDENTIALS_PATH)\n }\n } catch {\n // Ignore unlink errors\n }\n this.config = createConf(this.encryptionKey)\n } else {\n throw error\n }\n }\n }\n\n private getMachineKey(): string {\n // Generate a machine-specific key based on hostname and username\n const hostname = os.hostname()\n const username = os.userInfo().username\n return crypto\n .createHash('sha256')\n .update(`runtype-cli-${hostname}-${username}`)\n .digest('hex')\n .substring(0, 32)\n }\n\n async saveCredentials(credentials: {\n apiKey: string\n userId: string\n orgId?: string\n apiUrl?: string\n }): Promise<void> {\n const configData: StoredCredentials & {\n apiKey: string\n createdAt: string\n lastUsed: string\n } = {\n apiKey: this.encrypt(credentials.apiKey),\n userId: credentials.userId,\n createdAt: new Date().toISOString(),\n lastUsed: new Date().toISOString(),\n }\n\n // Only include orgId if it's not undefined\n if (credentials.orgId !== undefined) {\n configData.orgId = credentials.orgId\n }\n\n // Only include apiUrl if it's not undefined\n if (credentials.apiUrl !== undefined) {\n configData.apiUrl = credentials.apiUrl\n }\n\n this.config.set(configData)\n }\n\n async getApiKey(): Promise<string | null> {\n const encrypted = this.config.get('apiKey')\n if (!encrypted) return null\n\n // Update last used timestamp\n this.config.set('lastUsed', new Date().toISOString())\n\n return this.decrypt(encrypted)\n }\n\n async getCredentials(): Promise<StoredCredentials | null> {\n const stored = this.config.store\n if (!stored.apiKey) return null\n\n return {\n ...stored,\n apiKey: this.decrypt(stored.apiKey),\n }\n }\n\n async clearCredentials(): Promise<void> {\n this.config.clear()\n }\n\n async hasCredentials(): Promise<boolean> {\n return !!this.config.get('apiKey')\n }\n\n private encrypt(text: string): string {\n const algorithm = 'aes-256-cbc'\n const key = Buffer.from(this.encryptionKey)\n const iv = crypto.randomBytes(16)\n\n const cipher = crypto.createCipheriv(algorithm, key, iv)\n let encrypted = cipher.update(text, 'utf8', 'hex')\n encrypted += cipher.final('hex')\n\n return iv.toString('hex') + ':' + encrypted\n }\n\n private decrypt(text: string): string {\n const algorithm = 'aes-256-cbc'\n const key = Buffer.from(this.encryptionKey)\n const [ivHex, encrypted] = text.split(':')\n const iv = Buffer.from(ivHex, 'hex')\n\n const decipher = crypto.createDecipheriv(algorithm, key, iv)\n let decrypted = decipher.update(encrypted, 'hex', 'utf8')\n decrypted += decipher.final('utf8')\n\n return decrypted\n }\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { config } from 'dotenv'\nimport { readFileSync } from 'fs'\nimport { join } from 'path'\nimport { authCommand } from './commands/auth'\nimport { flowsCommand } from './commands/flows'\nimport { recordsCommand } from './commands/records'\nimport { promptsCommand } from './commands/prompts'\nimport { batchCommand } from './commands/batch'\nimport { talkCommand } from './commands/talk'\nimport { configCommand } from './commands/config'\nimport { productsCommand } from './commands/products'\nimport { initCommand } from './commands/init'\nimport { dispatchCommand } from './commands/dispatch'\nimport { agentsCommand } from './commands/agents'\nimport { modelsCommand } from './commands/models'\nimport { schedulesCommand } from './commands/schedules'\nimport { evalCommand } from './commands/eval'\nimport { apiKeysCommand } from './commands/api-keys'\nimport { analyticsCommand } from './commands/analytics'\nimport { billingCommand } from './commands/billing'\nimport { flowVersionsCommand } from './commands/flow-versions'\nimport { createMarathonCommand } from './commands/agents-task'\nimport { CredentialStore } from './auth/credential-store'\n\n// Load environment variables\nconfig()\n\n// Read version from package.json so it stays in sync with npm\nfunction getPackageVersion(): string {\n try {\n const pkgPath = join(__dirname, '..', 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'))\n return pkg.version || '0.0.0'\n } catch {\n return '0.0.0'\n }\n}\n\nconst program = new Command()\n\nprogram\n .name('runtype')\n .description('CLI for Runtype AI Platform')\n .version(getPackageVersion())\n .option('-v, --verbose', 'Enable verbose output')\n .option('--api-url <url>', 'Override API URL')\n .option('--json', 'Output in JSON format')\n\n// Add commands\nprogram.addCommand(initCommand)\nprogram.addCommand(authCommand)\nprogram.addCommand(flowsCommand)\nprogram.addCommand(recordsCommand)\nprogram.addCommand(promptsCommand)\nprogram.addCommand(batchCommand)\nprogram.addCommand(talkCommand)\nprogram.addCommand(configCommand)\nprogram.addCommand(productsCommand)\nprogram.addCommand(dispatchCommand)\nprogram.addCommand(agentsCommand)\nprogram.addCommand(modelsCommand)\nprogram.addCommand(schedulesCommand)\nprogram.addCommand(evalCommand)\nprogram.addCommand(apiKeysCommand)\nprogram.addCommand(analyticsCommand)\nprogram.addCommand(billingCommand)\nprogram.addCommand(flowVersionsCommand)\nprogram.addCommand(createMarathonCommand())\n\n// Error handling\nprogram.exitOverride()\n\ntry {\n // Strip leading '--' that tsx watch injects when forwarding script args\n const userArgs = process.argv.slice(2)\n const cleanArgs = userArgs[0] === '--' ? userArgs.slice(1) : userArgs\n\n // If no arguments, check if first-time user and guide them\n if (!cleanArgs.length) {\n handleNoCommand()\n } else {\n program.parse(cleanArgs, { from: 'user' })\n }\n} catch (error: unknown) {\n const commanderError = error as { code?: string; message?: string }\n if (commanderError.code === 'commander.missingArgument') {\n console.error(chalk.red(`Error: ${commanderError.message}`))\n process.exit(1)\n } else if (commanderError.code === 'commander.unknownOption') {\n console.error(chalk.red(`Error: ${commanderError.message}`))\n process.exit(1)\n } else if (commanderError.code === 'commander.help' || commanderError.code === 'commander.version') {\n // Help or version was displayed, exit normally\n process.exit(0)\n } else {\n console.error(chalk.red('An unexpected error occurred:'))\n console.error(error)\n process.exit(1)\n }\n}\n\nasync function handleNoCommand(): Promise<void> {\n const store = new CredentialStore()\n const hasCredentials = await store.hasCredentials()\n\n if (!hasCredentials) {\n // First-time user: suggest init\n console.log(chalk.cyan('\\nWelcome to Runtype CLI!\\n'))\n console.log('It looks like this is your first time. Run the setup wizard:')\n console.log(` ${chalk.green('runtype init')}\\n`)\n console.log('Or see all available commands:')\n console.log(` ${chalk.green('runtype --help')}\\n`)\n } else {\n // Returning user: show help\n try {\n program.outputHelp()\n } catch (error: unknown) {\n const commanderError = error as { code?: string }\n if (commanderError.code === 'commander.help') {\n process.exit(0)\n } else {\n throw error\n }\n }\n }\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { OAuthManager } from '../auth/oauth-manager'\nimport { ApiKeyManager } from '../auth/api-key-manager'\nimport { CredentialStore } from '../auth/credential-store'\nimport { getApiUrl, getApiVersion, getDashboardUrl, getClerkPublishableKey } from '../config/env'\n\nexport const authCommand = new Command('auth').description('Manage authentication')\n\nauthCommand\n .command('signup')\n .description('Create a new Runtype account')\n .option('--api-url <url>', 'Custom API URL')\n .action(async (options) => {\n const spinner = ora('Initializing authentication...').start()\n\n try {\n // Initialize OAuth flow\n const oauth = new OAuthManager({\n clerkPublishableKey: getClerkPublishableKey(),\n dashboardUrl: options.dashboardUrl || getDashboardUrl(),\n })\n\n spinner.text = 'Waiting for browser authentication...'\n const sessionToken = await oauth.authenticate('sign-up')\n\n // Exchange for API key\n spinner.text = 'Creating API key...'\n const apiKeyManager = new ApiKeyManager()\n const { key, userId, orgId } = await apiKeyManager.exchangeSessionForApiKey(\n sessionToken,\n options.apiUrl || getApiUrl(),\n )\n\n // Store credentials\n spinner.text = 'Storing credentials securely...'\n const store = new CredentialStore()\n await store.saveCredentials({\n apiKey: key,\n userId,\n orgId,\n apiUrl: options.apiUrl || getApiUrl(),\n })\n\n spinner.succeed('Authentication successful!')\n\n console.log(chalk.green('\\n✨ Welcome to Runtype!'))\n console.log(chalk.gray('Your API key has been saved securely.'))\n console.log(chalk.cyan('\\nGet started with:'))\n console.log(' runtype flows list')\n console.log(' runtype records create --help')\n console.log(' runtype talk')\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Authentication failed')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nauthCommand\n .command('login')\n .description('Login to existing account')\n .option('--api-url <url>', 'Custom API URL')\n .option('--api-key <key>', 'Use API key directly')\n .action(async (options) => {\n const store = new CredentialStore()\n\n // If API key provided directly\n if (options.apiKey) {\n const spinner = ora('Validating API key...').start()\n\n try {\n const apiKeyManager = new ApiKeyManager()\n const isValid = await apiKeyManager.validateApiKey(options.apiKey, options.apiUrl)\n\n if (!isValid) {\n spinner.fail('Invalid API key')\n process.exit(1)\n }\n\n const userData = await apiKeyManager.getCurrentUser(options.apiKey, options.apiUrl)\n\n await store.saveCredentials({\n apiKey: options.apiKey,\n userId: userData.user_id, // @snake-case-ok: API auth/me response\n orgId: userData.org_id ?? undefined, // @snake-case-ok: API auth/me response\n apiUrl: options.apiUrl || getApiUrl(),\n })\n\n spinner.succeed('Logged in successfully!')\n console.log(chalk.green(`Welcome back! User ID: ${userData.user_id}`)) // @snake-case-ok: API auth/me response\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Login failed')\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n // OAuth flow for existing account\n const spinner = ora('Initializing authentication...').start()\n\n try {\n const oauth = new OAuthManager({\n clerkPublishableKey: getClerkPublishableKey(),\n dashboardUrl: options.dashboardUrl || getDashboardUrl(),\n })\n\n spinner.text = 'Waiting for browser authentication...'\n const sessionToken = await oauth.authenticate('sign-in')\n\n spinner.text = 'Getting API key...'\n const apiKeyManager = new ApiKeyManager()\n const { key, userId, orgId } = await apiKeyManager.exchangeSessionForApiKey(\n sessionToken,\n options.apiUrl || getApiUrl(),\n )\n\n spinner.text = 'Storing credentials...'\n await store.saveCredentials({\n apiKey: key,\n userId,\n orgId,\n apiUrl: options.apiUrl || getApiUrl(),\n })\n\n spinner.succeed('Logged in successfully!')\n console.log(chalk.green(`Welcome back! User ID: ${userId}`))\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Login failed')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nauthCommand\n .command('status')\n .description('Show authentication status')\n .action(async () => {\n const store = new CredentialStore()\n\n try {\n const hasCredentials = await store.hasCredentials()\n\n if (!hasCredentials) {\n console.log(chalk.yellow('Not authenticated'))\n console.log('Run runtype auth signup or runtype auth login to get started')\n return\n }\n\n const credentials = await store.getCredentials()\n if (credentials) {\n console.log(chalk.green('✓ Authenticated'))\n console.log(`User ID: ${credentials.userId}`)\n console.log(`API URL: ${credentials.apiUrl || 'default'}`)\n console.log(\n `API Key: ${credentials.apiKey ? credentials.apiKey.substring(0, 12) + '...' : 'missing'}`\n )\n console.log(`Org ID: ${credentials.orgId || 'none'}`)\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Error checking auth status:'), message)\n }\n })\n\nauthCommand\n .command('logout')\n .description('Remove stored credentials')\n .action(async () => {\n const store = new CredentialStore()\n\n const hasCredentials = await store.hasCredentials()\n if (!hasCredentials) {\n console.log(chalk.yellow('No stored credentials found'))\n return\n }\n\n await store.clearCredentials()\n console.log(chalk.green('✓ Logged out successfully'))\n })\n\nauthCommand\n .command('whoami')\n .description('Display current user information')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const store = new CredentialStore()\n const credentials = await store.getCredentials()\n\n if (!credentials || !credentials.apiKey) {\n console.log(chalk.yellow('Not logged in'))\n console.log('Run: runtype auth login')\n return\n }\n\n const spinner = ora('Fetching user information...').start()\n\n try {\n const apiKeyManager = new ApiKeyManager()\n const user = await apiKeyManager.getCurrentUser(credentials.apiKey, credentials.apiUrl)\n\n // Also fetch billing status for plan info\n let billingInfo: Record<string, unknown> | null = null\n try {\n const baseUrl = credentials.apiUrl || getApiUrl()\n const billingResponse = await fetch(`${baseUrl}/${getApiVersion()}/billing/status`, {\n headers: {\n Authorization: `Bearer ${credentials.apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n if (billingResponse.ok) {\n billingInfo = (await billingResponse.json()) as Record<string, unknown>\n }\n } catch {\n // billing info is optional, don't fail on it\n }\n\n spinner.stop()\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n // @snake-case-ok: API auth/me response uses snake_case\n userId: user.user_id,\n // @snake-case-ok: API auth/me response uses snake_case\n orgId: user.org_id,\n apiUrl: credentials.apiUrl || getApiUrl(),\n billing: billingInfo,\n },\n null,\n 2\n )\n )\n return\n }\n\n console.log(chalk.cyan('Current User:'))\n console.log(` User ID: ${user.user_id}`) // @snake-case-ok: API auth/me response\n console.log(` Organization: ${user.org_id || 'Personal'}`) // @snake-case-ok: API auth/me response\n console.log(` API Key: ${credentials.apiKey.substring(0, 10)}...`)\n console.log(` API URL: ${credentials.apiUrl || getApiUrl()}`)\n console.log(` Created: ${credentials.createdAt}`)\n console.log(` Last Used: ${credentials.lastUsed}`)\n\n if (billingInfo) {\n const plan = (billingInfo.planName as string) || (billingInfo.plan as string)\n if (plan) {\n console.log(` Plan: ${chalk.green(plan)}`)\n }\n const usage = billingInfo.usage as { executionsUsed?: number; executionsLimit?: number } | undefined\n if (usage) {\n const limit = usage.executionsLimit ? `/${usage.executionsLimit}` : ''\n console.log(` Executions: ${usage.executionsUsed ?? 0}${limit}`)\n }\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to get user information')\n console.error(chalk.red(message))\n console.log('\\nYou may need to login again: runtype auth login')\n process.exit(1)\n }\n })\n","import open from 'open'\nimport crypto from 'crypto'\nimport { CallbackServer } from './callback-server'\n\nexport interface OAuthConfig {\n clerkPublishableKey: string\n dashboardUrl: string\n}\n\nexport class OAuthManager {\n private readonly clerkPublishableKey: string\n private readonly dashboardUrl: string\n\n constructor(config: OAuthConfig) {\n this.clerkPublishableKey = config.clerkPublishableKey\n this.dashboardUrl = config.dashboardUrl\n }\n\n async authenticate(mode: 'sign-up' | 'sign-in'): Promise<string> {\n // Generate PKCE parameters\n const state = crypto.randomBytes(32).toString('base64url')\n const codeVerifier = crypto.randomBytes(32).toString('base64url')\n const codeChallenge = crypto.createHash('sha256').update(codeVerifier).digest('base64url')\n\n // Start callback server and get actual port (in case requested port was in use)\n const callbackServer = new CallbackServer()\n const requestedPort = await this.findAvailablePort()\n const { actualPort, codePromise } = await callbackServer.start(requestedPort)\n\n // Build OAuth URL with the port the server is actually listening on\n const redirectUri = `http://localhost:${actualPort}/callback`\n const authUrl = new URL(`${this.dashboardUrl.replace(/\\/$/, '')}/${mode}`)\n authUrl.searchParams.set('redirect_uri', redirectUri)\n authUrl.searchParams.set('cli', 'true')\n authUrl.searchParams.set('state', state)\n authUrl.searchParams.set('code_challenge', codeChallenge)\n authUrl.searchParams.set('code_challenge_method', 'S256')\n authUrl.searchParams.set('publishable_key', this.clerkPublishableKey)\n\n // Open browser\n console.log('🌐 Opening browser for authentication...')\n console.log(`If the browser doesn't open, visit: ${authUrl}`)\n\n try {\n await open(authUrl.toString())\n } catch (_error) {\n console.log('Failed to open browser automatically. Please visit the URL above.')\n }\n\n // Wait for callback\n console.log('⏳ Waiting for authentication...')\n const code = await codePromise\n\n // Exchange code for session token\n return this.exchangeCodeForSession(code, codeVerifier, redirectUri)\n }\n\n private async findAvailablePort(): Promise<number> {\n const defaultPort = 8765\n // Simple port check - the CallbackServer handles port conflicts\n return defaultPort\n }\n\n private async exchangeCodeForSession(\n code: string,\n codeVerifier: string,\n redirectUri: string\n ): Promise<string> {\n void codeVerifier\n void redirectUri\n\n // For MVP, we'll return the code directly and let the API key manager handle the exchange\n // In a production setup, this would exchange with Clerk's token endpoint\n return code\n }\n}\n","import express, { Express } from 'express'\nimport { Server } from 'http'\n\nexport interface CallbackServerStartResult {\n actualPort: number\n codePromise: Promise<string>\n}\n\nexport class CallbackServer {\n private server: Server | null = null\n private app: Express\n private codeResolve!: (code: string) => void\n private codeReject!: (error: Error) => void\n private codePromise: Promise<string>\n\n constructor() {\n this.app = express()\n this.codePromise = new Promise<string>((resolve, reject) => {\n this.codeResolve = resolve\n this.codeReject = reject\n })\n\n this.app.get('/callback', (req, res) => {\n const { token, error } = req.query\n\n if (error) {\n res.send(this.errorHTML(error as string))\n this.codeReject(new Error(error as string))\n return\n }\n\n if (!token) {\n res.send(this.errorHTML('No authentication token received'))\n this.codeReject(new Error('No authentication token received'))\n return\n }\n\n res.send(this.successHTML())\n this.codeResolve(token as string)\n\n // Auto-close server after callback\n setTimeout(() => this.stop(), 1000)\n })\n\n this.app.get('/health', (_req, res) => {\n res.json({ status: 'ok' })\n })\n }\n\n async start(port: number = 8765): Promise<CallbackServerStartResult> {\n return new Promise((resolveStart, rejectStart) => {\n this.server = this.app.listen(port, () => {\n const address = this.server?.address()\n const actualPort =\n address && typeof address === 'object' && 'port' in address\n ? address.port\n : port\n console.log(`Callback server listening on port ${actualPort}`)\n resolveStart({ actualPort, codePromise: this.codePromise })\n })\n\n this.server.on('error', (error: NodeJS.ErrnoException) => {\n if (error.code === 'EADDRINUSE') {\n console.log(`Port ${port} is in use, trying ${port + 1}...`)\n this.server = null\n this.start(port + 1).then(resolveStart).catch(rejectStart)\n } else {\n rejectStart(error)\n }\n })\n })\n }\n\n stop() {\n if (this.server) {\n this.server.close()\n this.server = null\n }\n }\n\n private successHTML(): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>Authentication Successful</title>\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n height: 100vh;\n overflow: hidden;\n background: #0a0a0a;\n }\n .grid-bg {\n position: absolute;\n inset: 0;\n z-index: 0;\n overflow: hidden;\n }\n .grid-bg .gradient {\n position: absolute;\n inset: 0;\n background: linear-gradient(to bottom, #0a0a0a 0%, #171717 50%, #262626 100%);\n }\n @keyframes gridMove {\n 0% { background-position-y: 0; }\n 100% { background-position-y: 30px; }\n }\n .grid-bg .grid-vertical-wrap {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 40%;\n transform-origin: top center;\n transform: perspective(500px) rotateX(60deg);\n }\n .grid-bg .grid-vertical-wrap .fade {\n position: absolute;\n inset: 0;\n background: linear-gradient(to bottom, transparent 0%, rgba(255,255,255,0.02) 100%);\n }\n .grid-bg .grid-vertical-wrap .lines {\n position: absolute;\n inset: 0;\n background-image: repeating-linear-gradient(\n 90deg,\n transparent 0,\n transparent 49px,\n rgba(255,255,255,0.08) 49px,\n rgba(255,255,255,0.08) 50px\n );\n background-size: 50px 100%;\n }\n .grid-bg .grid-horizontal {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 40%;\n transform-origin: top center;\n transform: perspective(500px) rotateX(60deg);\n background-image: repeating-linear-gradient(\n 0deg,\n transparent 0,\n transparent 29px,\n rgba(255,255,255,0.06) 29px,\n rgba(255,255,255,0.06) 30px\n );\n background-size: 100% 30px;\n animation: gridMove 2s linear infinite;\n }\n .card-wrap {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 10;\n width: 100%;\n max-width: 400px;\n perspective: 1400px;\n animation: cardIn 0.4s ease-out;\n }\n @keyframes cardIn {\n from { opacity: 0; transform: translate(-50%, -50%) translateY(16px); }\n to { opacity: 1; transform: translate(-50%, -50%) translateY(0); }\n }\n .card-inner {\n position: relative;\n }\n .card-layer-back,\n .card-layer-mid {\n position: absolute;\n inset: 0;\n border-radius: 12px;\n border: 1px solid #e5e7eb;\n pointer-events: none;\n }\n .card-layer-back {\n background: rgba(0, 0, 0, 0.08);\n transform: translate3d(0, -18px, -36px) rotateX(6deg);\n }\n .card-layer-mid {\n background: rgba(0, 0, 0, 0.05);\n transform: translate3d(0, -10px, -20px) rotateX(3deg);\n }\n .card-front {\n position: relative;\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 1);\n background: rgba(0, 0, 0, .5);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n padding: 2rem 2.5rem;\n text-align: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n transform: rotateX(-10deg) translateZ(0);\n transform-style: preserve-3d;\n }\n .card-front .section-title {\n color: #ffffff;\n font-size: 0.8125rem;\n font-weight: 600;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n margin-bottom: 1rem;\n }\n .card-front .flow-arrow {\n color: rgba(255, 255, 255, 0.7);\n font-size: 1rem;\n margin-bottom: 1rem;\n line-height: 1;\n }\n .card-front .message {\n color: #ffffff;\n font-size: 0.75rem;\n font-weight: 100;\n margin-bottom: 0.5rem;\n font-family: monospace;\n }\n .card-front .progress {\n color: rgba(255, 255, 255, 0.75);\n font-size: 0.8125rem;\n }\n </style>\n</head>\n<body>\n <div class=\"grid-bg\">\n <div class=\"gradient\"></div>\n <div class=\"grid-vertical-wrap\">\n <div class=\"fade\"></div>\n <div class=\"lines\"></div>\n </div>\n <div class=\"grid-horizontal\"></div>\n </div>\n <div id=\"card-wrap\" class=\"card-wrap\">\n <div class=\"card-inner\">\n <div class=\"card-layer-back\" aria-hidden=\"true\"></div>\n <div class=\"card-layer-mid\" aria-hidden=\"true\"></div>\n <div id=\"card\" class=\"card-front\">\n <div class=\"section-title\">Authentication Successful</div>\n <div class=\"flow-arrow\" aria-hidden=\"true\">↓</div>\n <p class=\"message\">You can close this window and return to your terminal.</p>\n <p class=\"progress\" id=\"progress\">Closing automatically in 3 seconds…</p>\n </div>\n </div>\n </div>\n <script>\n setTimeout(function() {\n window.close();\n var prog = document.getElementById('progress');\n if (prog) prog.textContent = 'You can now close this window.';\n var card = document.getElementById('card');\n if (card) card.innerHTML = '<div class=\"section-title\">Runtype is Ready</div><p class=\"message\">You can now close this window</p>';\n }, 3000);\n </script>\n</body>\n</html>`\n }\n\n private errorHTML(error: string): string {\n return `\n <!DOCTYPE html>\n <html>\n <head>\n <title>Authentication Failed</title>\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n body { \n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n display: flex; \n align-items: center; \n justify-content: center; \n height: 100vh;\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n }\n .container {\n background: white;\n padding: 3rem;\n border-radius: 12px;\n text-align: center;\n box-shadow: 0 20px 40px rgba(0,0,0,0.1);\n max-width: 400px;\n }\n .error-icon { \n color: #ef4444; \n font-size: 64px;\n margin-bottom: 1rem;\n }\n h1 {\n color: #1f2937;\n margin-bottom: 0.5rem;\n font-size: 1.5rem;\n }\n p {\n color: #6b7280;\n font-size: 1rem;\n margin-bottom: 1rem;\n }\n .error-details {\n background: #fef2f2;\n color: #991b1b;\n padding: 0.75rem;\n border-radius: 6px;\n font-size: 0.875rem;\n font-family: monospace;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <div class=\"error-icon\">✕</div>\n <h1>Authentication Failed</h1>\n <p>There was an error during authentication.</p>\n <div class=\"error-details\">${error}</div>\n </div>\n </body>\n </html>\n `\n }\n}\n","import { getApiUrl, getApiVersion } from '../config/env'\n\ninterface CliTokenResponse {\n apiKey: string\n userId: string\n orgId?: string | null\n}\n\n// @snake-case-ok-start: API auth/me response uses snake_case per Clerk conventions\nexport interface AuthMeResponse {\n user_id: string\n session_id?: string | null\n org_id?: string | null\n org_role?: string | null\n org_slug?: string | null\n has_organization?: boolean\n // Allow additional properties returned by the API without losing type-safety\n [key: string]: unknown\n}\n// @snake-case-ok-end\n\nconst isCliTokenResponse = (value: unknown): value is CliTokenResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n return typeof record.apiKey === 'string' && typeof record.userId === 'string'\n}\n\nconst isAuthMeResponse = (value: unknown): value is AuthMeResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n // @snake-case-ok: API auth/me response uses snake_case\n return typeof record.user_id === 'string'\n}\n\nexport class ApiKeyManager {\n /**\n * Exchange a Clerk session JWT for a persistent API key.\n *\n * Calls POST /v1/auth/cli-token on the Runtype API directly,\n * passing the Clerk JWT as a Bearer token. The API verifies the JWT\n * with Clerk and creates an API key for the CLI.\n */\n async exchangeSessionForApiKey(\n clerkJwt: string,\n apiUrl?: string,\n ): Promise<{ key: string; userId: string; orgId?: string }> {\n const baseUrl = apiUrl || getApiUrl()\n\n const response = await fetch(`${baseUrl}/${getApiVersion()}/auth/cli-token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${clerkJwt}`,\n },\n })\n\n if (!response.ok) {\n const error = await response.text()\n throw new Error(`Authentication failed: ${error}`)\n }\n\n const data = (await response.json()) as unknown\n\n if (!isCliTokenResponse(data)) {\n throw new Error('Invalid authentication response format')\n }\n\n const result: { key: string; userId: string; orgId?: string } = {\n key: data.apiKey,\n userId: data.userId,\n }\n\n if (data.orgId) {\n result.orgId = data.orgId\n }\n\n return result\n }\n\n async validateApiKey(apiKey: string, apiUrl?: string): Promise<boolean> {\n const baseUrl = apiUrl || getApiUrl()\n\n try {\n const response = await fetch(`${baseUrl}/${getApiVersion()}/auth/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n return response.ok\n } catch {\n return false\n }\n }\n\n async getCurrentUser(apiKey: string, apiUrl?: string): Promise<AuthMeResponse> {\n const baseUrl = apiUrl || getApiUrl()\n\n const response = await fetch(`${baseUrl}/${getApiVersion()}/auth/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n throw new Error('Failed to get user information')\n }\n\n const data = (await response.json()) as unknown\n\n if (!isAuthMeResponse(data)) {\n throw new Error('Invalid user response format')\n }\n\n return data\n }\n}\n","export function getApiUrl(): string {\n return process.env.RUNTYPE_API_URL || 'https://api.runtype.com'\n}\n\nexport function getApiVersion(): string {\n return process.env.RUNTYPE_API_VERSION || 'v1'\n}\n\nexport function getDashboardUrl(): string {\n return process.env.RUNTYPE_DASHBOARD_URL || 'https://use.runtype.com'\n}\n\nexport function getClerkPublishableKey(): string {\n return process.env.CLERK_PUBLISHABLE_KEY || 'pk_live_default_key'\n}\n\nexport function isDebugMode(): boolean {\n return process.env.DEBUG === 'true' || process.env.NODE_ENV === 'development'\n}\n\nexport function getDefaultModel(): string {\n return process.env.RUNTYPE_DEFAULT_MODEL || 'meta/llama3.1-8b-instruct-free'\n}\n\nexport function getDefaultTemperature(): number {\n const temp = process.env.RUNTYPE_DEFAULT_TEMPERATURE\n return temp ? parseFloat(temp) : 0.7\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { readFileSync } from 'fs'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printList, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\n\ninterface FlowSummary {\n id: string\n name: string\n description?: string | null\n}\n\nexport const flowsCommand = new Command('flows').description('Manage flows')\n\nflowsCommand\n .command('list')\n .description('List all flows')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching flows...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<PaginatedResponse<FlowSummary>>('/flows')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const flows = data.data ?? []\n printList(flows as unknown as Array<Record<string, unknown>>, {\n title: 'Your Flows',\n columns: [\n { key: 'id', color: 'green' },\n { key: 'name' },\n { key: 'description', color: 'gray' },\n ],\n emptyMessage: 'No flows found',\n total: getTotalCount(data.pagination),\n })\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch flows')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nflowsCommand\n .command('get <id>')\n .description('Get flow details')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching flow...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<FlowSummary & { steps?: unknown[] }>(`/flows/${id}`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Flow', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Description', value: data.description },\n { label: 'Steps', value: (data.steps as unknown[])?.length },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch flow')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nflowsCommand\n .command('run <id>')\n .description('Execute a flow via dispatch')\n .option('-r, --record <id>', 'Record ID to run with')\n .option('-m, --message <text>', 'Message to send')\n .option('--stream', 'Stream the response (default)', true)\n .option('--no-stream', 'Wait for complete response')\n .option('--json', 'Output as JSON')\n .action(\n async (\n flowId: string,\n options: { record?: string; message?: string; stream: boolean; json?: boolean }\n ) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n const payload: Record<string, unknown> = {\n flow: { id: flowId },\n }\n\n if (options.record) {\n payload.record = { id: options.record }\n }\n\n if (options.message) {\n payload.messages = [{ role: 'user', content: options.message }]\n }\n\n if (options.stream) {\n const spinner = ora('Starting flow...').start()\n\n try {\n const response = await client.stream('/dispatch', payload)\n spinner.stop()\n\n const callbacks: StreamCallbacks = {\n onStepChunk: (chunk: string) => {\n process.stdout.write(chunk)\n },\n onFlowComplete: (event: Record<string, unknown>) => {\n if (options.json) {\n console.log()\n printJson(event)\n }\n },\n onError: (err: Error) => {\n console.error(chalk.red(`\\nError: ${err.message}`))\n },\n }\n\n await processStream(response, callbacks)\n console.log()\n } catch (error) {\n spinner.fail('Flow execution failed')\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\n process.exit(1)\n }\n } else {\n const spinner = ora('Executing flow...').start()\n\n try {\n payload.streamResponse = false\n const result = await client.post<Record<string, unknown>>('/dispatch', payload)\n spinner.succeed('Flow execution complete')\n printJson(result)\n } catch (error) {\n spinner.fail('Flow execution failed')\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\n process.exit(1)\n }\n }\n }\n )\n\nflowsCommand\n .command('create')\n .description('Create a new flow')\n .requiredOption('-n, --name <name>', 'Flow name')\n .option('-d, --description <desc>', 'Flow description')\n .option('--from-file <file>', 'Import flow from JSON file')\n .option('--json', 'Output as JSON')\n .action(\n async (options: { name: string; description?: string; fromFile?: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Creating flow...').start()\n\n try {\n const client = new ApiClient(apiKey)\n\n let body: Record<string, unknown> = {\n name: options.name,\n description: options.description,\n }\n\n if (options.fromFile) {\n try {\n const fileContent = JSON.parse(readFileSync(options.fromFile, 'utf-8'))\n // Support the standard export format\n if (fileContent.flow) {\n body = { ...fileContent.flow, name: options.name || fileContent.flow.name }\n } else {\n body = { ...fileContent, name: options.name || fileContent.name }\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to read flow file')\n console.error(chalk.red(msg))\n process.exit(1)\n }\n }\n\n const data = await client.post<FlowSummary>('/flows', body)\n spinner.succeed('Flow created')\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(` ID: ${chalk.green(data.id)}`)\n console.log(` Name: ${data.name}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to create flow')\n console.error(chalk.red(message))\n process.exit(1)\n }\n }\n )\n\nflowsCommand\n .command('delete <id>')\n .description('Delete a flow')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Deleting flow...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.delete(`/flows/${id}`)\n spinner.succeed('Flow deleted')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to delete flow')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n","import chalk from 'chalk'\nimport ora from 'ora'\nimport { CredentialStore } from '../auth/credential-store'\nimport { OAuthManager } from '../auth/oauth-manager'\nimport { ApiKeyManager } from '../auth/api-key-manager'\nimport { getApiUrl, getClerkPublishableKey, getDashboardUrl } from '../config/env'\nimport { promptConfirm, promptText, promptSelect } from './interactive'\n\n/**\n * Ensure the user is authenticated, offering interactive login if not.\n * Returns the API key on success, or null if the user declines to authenticate.\n *\n * When `exitOnFailure` is true (default), the process exits with code 1\n * if authentication is declined. Set to false to return null instead.\n */\nexport async function ensureAuth(options?: {\n apiUrl?: string\n exitOnFailure?: boolean\n}): Promise<string | null> {\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (apiKey) {\n return apiKey\n }\n\n console.log(chalk.yellow('\\nAuthentication required.'))\n\n const shouldLogin = await promptConfirm('Would you like to log in now?', { default: true })\n\n if (!shouldLogin) {\n console.log(chalk.gray('Run \"runtype auth login\" when you\\'re ready.'))\n if (options?.exitOnFailure !== false) {\n process.exit(1)\n }\n return null\n }\n\n const method = await promptSelect('How would you like to authenticate?', [\n { label: 'Browser login', value: 'browser' as const, description: 'Sign in via your browser' },\n { label: 'API key', value: 'apikey' as const, description: 'Paste an existing API key' },\n ])\n\n if (method === 'apikey') {\n return handleApiKeyLogin(store, options?.apiUrl)\n }\n\n return handleBrowserLogin(store, options?.apiUrl)\n}\n\nasync function handleApiKeyLogin(\n store: CredentialStore,\n apiUrl?: string\n): Promise<string | null> {\n const key = await promptText('Enter your API key')\n\n if (!key) {\n console.log(chalk.red('No API key provided.'))\n return null\n }\n\n const spinner = ora('Validating API key...').start()\n\n try {\n const apiKeyManager = new ApiKeyManager()\n const isValid = await apiKeyManager.validateApiKey(key, apiUrl)\n\n if (!isValid) {\n spinner.fail('Invalid API key')\n return null\n }\n\n const userData = await apiKeyManager.getCurrentUser(key, apiUrl)\n\n await store.saveCredentials({\n apiKey: key,\n // @snake-case-ok: API auth/me response uses snake_case\n userId: userData.user_id,\n // @snake-case-ok: API auth/me response uses snake_case\n orgId: userData.org_id ?? undefined,\n apiUrl: apiUrl || getApiUrl(),\n })\n\n spinner.succeed('Logged in successfully!')\n return key\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Login failed')\n console.error(chalk.red(message))\n return null\n }\n}\n\nasync function handleBrowserLogin(\n store: CredentialStore,\n apiUrl?: string\n): Promise<string | null> {\n const spinner = ora('Initializing authentication...').start()\n\n try {\n const oauth = new OAuthManager({\n clerkPublishableKey: getClerkPublishableKey(),\n dashboardUrl: getDashboardUrl(),\n })\n\n spinner.text = 'Waiting for browser authentication...'\n const sessionToken = await oauth.authenticate('sign-in')\n\n spinner.text = 'Getting API key...'\n const apiKeyManager = new ApiKeyManager()\n const { key, userId, orgId } = await apiKeyManager.exchangeSessionForApiKey(\n sessionToken,\n apiUrl || getApiUrl(),\n )\n\n spinner.text = 'Storing credentials...'\n await store.saveCredentials({\n apiKey: key,\n userId,\n orgId,\n apiUrl: apiUrl || getApiUrl(),\n })\n\n spinner.succeed('Logged in successfully!')\n return key\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Login failed')\n console.error(chalk.red(message))\n return null\n }\n}\n","import readline from 'readline'\nimport chalk from 'chalk'\n\n/**\n * Prompt the user for text input via readline.\n * Returns the trimmed answer or the default value if empty.\n */\nexport async function promptText(\n message: string,\n options?: { default?: string }\n): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: true,\n })\n\n const suffix = options?.default ? ` (${options.default})` : ''\n\n return new Promise<string>((resolve) => {\n rl.question(chalk.cyan(`${message}${suffix}: `), (answer) => {\n rl.close()\n const trimmed = answer.trim()\n resolve(trimmed || options?.default || '')\n })\n })\n}\n\n/**\n * Prompt the user for a yes/no confirmation.\n * Returns true for yes, false for no.\n */\nexport async function promptConfirm(\n message: string,\n options?: { default?: boolean }\n): Promise<boolean> {\n const defaultYes = options?.default !== false\n const hint = defaultYes ? 'Y/n' : 'y/N'\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: true,\n })\n\n return new Promise<boolean>((resolve) => {\n rl.question(chalk.cyan(`${message} (${hint}): `), (answer) => {\n rl.close()\n const trimmed = answer.trim().toLowerCase()\n if (trimmed === '') {\n resolve(defaultYes)\n } else {\n resolve(trimmed === 'y' || trimmed === 'yes')\n }\n })\n })\n}\n\n/**\n * Prompt the user to select from a list of options.\n * Returns the selected option value.\n */\nexport async function promptSelect<T extends string>(\n message: string,\n choices: Array<{ label: string; value: T; description?: string }>\n): Promise<T> {\n console.log(chalk.cyan(`\\n${message}`))\n choices.forEach((choice, index) => {\n const desc = choice.description ? chalk.gray(` - ${choice.description}`) : ''\n console.log(` ${chalk.green(`${index + 1})`)} ${choice.label}${desc}`)\n })\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: true,\n })\n\n return new Promise<T>((resolve) => {\n const ask = () => {\n rl.question(chalk.cyan(`\\nSelect (1-${choices.length}): `), (answer) => {\n const num = parseInt(answer.trim(), 10)\n if (num >= 1 && num <= choices.length) {\n rl.close()\n resolve(choices[num - 1].value)\n } else {\n console.log(chalk.red(`Please enter a number between 1 and ${choices.length}`))\n ask()\n }\n })\n }\n ask()\n })\n}\n","import { getApiUrl, getApiVersion } from '../config/env'\n\ninterface ApiErrorBody {\n error?: string\n message?: string\n}\n\nexport class ApiError extends Error {\n constructor(\n public statusCode: number,\n message: string\n ) {\n super(message)\n this.name = 'ApiError'\n }\n}\n\n/**\n * Shared HTTP client for Runtype API calls.\n * Handles auth headers, base URL, error parsing, and streaming.\n */\nexport class ApiClient {\n private baseUrl: string\n private apiKey: string\n\n constructor(apiKey: string, baseUrl?: string) {\n this.apiKey = apiKey\n this.baseUrl = baseUrl || getApiUrl()\n }\n\n /** Prefix path with API version (e.g. /v1) so all requests hit versioned routes. */\n private path(path: string): string {\n const version = getApiVersion()\n const p = path.startsWith('/') ? path : `/${path}`\n return p.startsWith(`/${version}/`) ? p : `/${version}${p}`\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n ...extra,\n }\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`\n try {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json')) {\n const body = (await response.json()) as ApiErrorBody\n message = body.error || body.message || message\n } else {\n const text = await response.text()\n if (text) message = text\n }\n } catch {\n // use default message\n }\n throw new ApiError(response.status, message)\n }\n\n return response.json() as Promise<T>\n }\n\n async get<T>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(this.path(path), this.baseUrl)\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== '') {\n url.searchParams.append(key, value)\n }\n }\n }\n\n const response = await fetch(url.toString(), {\n headers: this.headers(),\n })\n\n return this.handleResponse<T>(response)\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'POST',\n headers: this.headers(),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n return this.handleResponse<T>(response)\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'PUT',\n headers: this.headers(),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n return this.handleResponse<T>(response)\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'PATCH',\n headers: this.headers(),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n return this.handleResponse<T>(response)\n }\n\n async delete(path: string): Promise<void> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'DELETE',\n headers: this.headers(),\n })\n\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`\n try {\n const body = (await response.json()) as ApiErrorBody\n message = body.error || body.message || message\n } catch {\n // use default\n }\n throw new ApiError(response.status, message)\n }\n }\n\n async stream(path: string, body?: unknown): Promise<Response> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'POST',\n headers: this.headers({ Accept: 'text/event-stream' }),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`\n try {\n const text = await response.text()\n if (text) message = text\n } catch {\n // use default\n }\n throw new ApiError(response.status, message)\n }\n\n return response\n }\n}\n","import chalk from 'chalk'\n\n/**\n * Print data as formatted JSON.\n */\nexport function printJson(data: unknown): void {\n console.log(JSON.stringify(data, null, 2))\n}\n\n/**\n * Print a list of items with id + name, plus optional extra fields.\n */\nexport function printList(\n items: Array<Record<string, unknown>>,\n options: {\n title: string\n columns: { key: string; label?: string; color?: 'green' | 'gray' | 'blue' | 'cyan' | 'yellow' }[]\n emptyMessage?: string\n total?: number\n }\n): void {\n console.log(chalk.cyan(`${options.title}:`))\n\n if (items.length === 0) {\n console.log(chalk.gray(` ${options.emptyMessage || 'None found'}`))\n return\n }\n\n for (const item of items) {\n const parts: string[] = []\n for (const col of options.columns) {\n const value = item[col.key]\n if (value === undefined || value === null) continue\n const str = String(value)\n const colorFn = col.color ? chalk[col.color] : (s: string) => s\n if (col.label) {\n parts.push(`${col.label}: ${colorFn(str)}`)\n } else {\n parts.push(colorFn(str))\n }\n }\n console.log(` ${parts.join(' - ')}`)\n }\n\n if (options.total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${options.total}`))\n }\n}\n\n/**\n * Print a single item's details as key-value pairs.\n */\nexport function printDetail(\n title: string,\n fields: Array<{ label: string; value: unknown }>\n): void {\n console.log(chalk.cyan(`${title}:`))\n for (const field of fields) {\n if (field.value === undefined || field.value === null) continue\n const str = typeof field.value === 'object' ? JSON.stringify(field.value) : String(field.value)\n console.log(` ${chalk.gray(field.label + ':')} ${str}`)\n }\n}\n\n/**\n * Standard pagination info from API responses.\n */\nexport interface PaginatedResponse<T> {\n data?: T[]\n pagination?: {\n totalCount?: number\n total?: number\n [key: string]: unknown\n }\n}\n\n/**\n * Extract total count from a paginated response.\n */\nexport function getTotalCount(pagination?: PaginatedResponse<unknown>['pagination']): number | undefined {\n return pagination?.totalCount ?? pagination?.total ?? undefined\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { writeFileSync } from 'fs'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, type PaginatedResponse, getTotalCount } from '../lib/output'\n\ninterface RecordSummary {\n id: string\n name: string\n type: string\n metadata?: Record<string, unknown> | null\n}\n\nexport const recordsCommand = new Command('records').description('Manage records')\n\nrecordsCommand\n .command('list')\n .description('List all records')\n .option('--type <type>', 'Filter by record type')\n .option('--limit <n>', 'Limit number of results', '20')\n .option('--json', 'Output as JSON')\n .action(async (options: { type?: string; limit: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching records...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const params: Record<string, string> = { limit: options.limit }\n if (options.type) params.type = options.type\n\n const data = await client.get<PaginatedResponse<RecordSummary>>('/records', params)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const records = data.data ?? []\n if (records.length === 0) {\n console.log(chalk.gray('No records found'))\n return\n }\n\n console.log(chalk.cyan('Your Records:'))\n for (const record of records) {\n console.log(` ${chalk.green(record.id)} - ${record.name} (${record.type})`)\n if (record.metadata && Object.keys(record.metadata).length > 0) {\n console.log(` ${chalk.gray(JSON.stringify(record.metadata))}`)\n }\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} records`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch records')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nrecordsCommand\n .command('get <id>')\n .description('Get record details')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching record...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<RecordSummary>(`/records/${id}`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(chalk.cyan('Record:'))\n console.log(` ID: ${chalk.green(data.id)}`)\n console.log(` Name: ${data.name}`)\n console.log(` Type: ${data.type}`)\n if (data.metadata) {\n console.log(` Metadata: ${JSON.stringify(data.metadata, null, 2)}`)\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch record')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nrecordsCommand\n .command('create')\n .description('Create a new record')\n .requiredOption('-n, --name <name>', 'Record name')\n .requiredOption('-t, --type <type>', 'Record type')\n .option('-m, --metadata <json>', 'Metadata as JSON string')\n .option('--json', 'Output as JSON')\n .action(async (options: { name: string; type: string; metadata?: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Creating record...').start()\n\n try {\n let metadata: Record<string, unknown> = {}\n if (options.metadata) {\n try {\n metadata = JSON.parse(options.metadata)\n } catch {\n throw new Error('Invalid JSON in metadata')\n }\n }\n\n const client = new ApiClient(apiKey)\n const data = await client.post<RecordSummary>('/records', {\n name: options.name,\n type: options.type,\n metadata,\n })\n\n spinner.succeed('Record created')\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(` ID: ${chalk.green(data.id)}`)\n console.log(` Name: ${data.name}`)\n console.log(` Type: ${data.type}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to create record')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nrecordsCommand\n .command('delete <id>')\n .description('Delete a record')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Deleting record...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.delete(`/records/${id}`)\n spinner.succeed('Record deleted')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to delete record')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nrecordsCommand\n .command('export')\n .description('Export records to a file')\n .option('--type <type>', 'Filter by record type')\n .option('--limit <n>', 'Maximum records to export', '100')\n .option('-o, --output <file>', 'Output file path')\n .option('--format <format>', 'Export format (json, csv)', 'json')\n .action(\n async (options: { type?: string; limit: string; output?: string; format: string }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Exporting records...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const params: Record<string, string> = { limit: options.limit }\n if (options.type) params.type = options.type\n\n const data = await client.get<PaginatedResponse<RecordSummary>>('/records', params)\n const records = data.data ?? []\n\n if (records.length === 0) {\n spinner.warn('No records to export')\n return\n }\n\n let content: string\n if (options.format === 'csv') {\n const headers = ['id', 'name', 'type', 'metadata']\n const rows = records.map((r) => [\n r.id,\n r.name,\n r.type,\n r.metadata ? JSON.stringify(r.metadata) : '',\n ])\n content = [headers.join(','), ...rows.map((r) => r.map(csvEscape).join(','))].join('\\n')\n } else {\n content = JSON.stringify(records, null, 2)\n }\n\n const filename =\n options.output || `records-export-${Date.now()}.${options.format === 'csv' ? 'csv' : 'json'}`\n writeFileSync(filename, content)\n spinner.succeed(`Exported ${records.length} records to ${filename}`)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to export records')\n console.error(chalk.red(message))\n process.exit(1)\n }\n }\n )\n\nfunction csvEscape(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`\n }\n return value\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\n\ninterface PromptSummary {\n id: string\n name: string\n description?: string | null\n model?: string | null\n}\n\nexport const promptsCommand = new Command('prompts').description('Manage prompts')\n\npromptsCommand\n .command('list')\n .description('List all prompts')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching prompts...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<PaginatedResponse<PromptSummary>>('/prompts')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const prompts = data.data ?? []\n if (prompts.length === 0) {\n console.log(chalk.gray('No prompts found'))\n return\n }\n\n console.log(chalk.cyan('Your Prompts:'))\n for (const prompt of prompts) {\n console.log(` ${chalk.green(prompt.id)} - ${prompt.name}`)\n if (prompt.description) {\n console.log(` ${chalk.gray(prompt.description)}`)\n }\n if (prompt.model) {\n console.log(` Model: ${chalk.blue(prompt.model)}`)\n }\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} prompts`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch prompts')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\npromptsCommand\n .command('get <id>')\n .description('Get prompt details')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching prompt...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<PromptSummary>(`/prompts/${id}`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Prompt', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Description', value: data.description },\n { label: 'Model', value: data.model },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch prompt')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\npromptsCommand\n .command('test <id>')\n .description('Test a prompt with input')\n .option('-i, --input <text>', 'Input text for the prompt')\n .option('--stream', 'Stream the response (default)', true)\n .option('--no-stream', 'Wait for complete response')\n .option('--json', 'Output as JSON')\n .action(\n async (\n promptId: string,\n options: { input?: string; stream: boolean; json?: boolean }\n ) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n // Build dispatch payload with the prompt\n const payload: Record<string, unknown> = {\n flow: {\n steps: [\n {\n name: 'test',\n type: 'prompt',\n config: {\n promptId,\n text: options.input || '',\n },\n },\n ],\n },\n }\n\n if (options.input) {\n payload.messages = [{ role: 'user', content: options.input }]\n }\n\n if (options.stream) {\n const spinner = ora('Testing prompt...').start()\n\n try {\n const response = await client.stream('/dispatch', payload)\n spinner.stop()\n\n const callbacks: StreamCallbacks = {\n onStepChunk: (chunk: string) => {\n process.stdout.write(chunk)\n },\n onError: (err: Error) => {\n console.error(chalk.red(`\\nError: ${err.message}`))\n },\n }\n\n await processStream(response, callbacks)\n console.log()\n } catch (error) {\n spinner.fail('Prompt test failed')\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\n process.exit(1)\n }\n } else {\n const spinner = ora('Testing prompt...').start()\n\n try {\n payload.streamResponse = false\n const result = await client.post<Record<string, unknown>>('/dispatch', payload)\n spinner.succeed('Prompt test complete')\n\n if (options.json) {\n printJson(result)\n } else {\n printJson(result)\n }\n } catch (error) {\n spinner.fail('Prompt test failed')\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\n process.exit(1)\n }\n }\n }\n )\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { readFileSync } from 'fs'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson } from '../lib/output'\n\ninterface BatchStatusResponse {\n status: string\n processedRecords: number\n totalRecords: number\n failedRecords: number\n}\n\nexport const batchCommand = new Command('batch').description('Manage batch operations')\n\nbatchCommand\n .command('submit')\n .description('Submit a batch job')\n .requiredOption('-f, --flow <id>', 'Flow ID to execute')\n .requiredOption('-r, --records <file>', 'JSON file with record IDs')\n .option('--json', 'Output as JSON')\n .action(async (options: { flow: string; records: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n let recordIds: string[]\n try {\n const content = readFileSync(options.records, 'utf-8')\n const parsed = JSON.parse(content)\n recordIds = Array.isArray(parsed) ? parsed : parsed.recordIds || parsed.records || []\n } catch (error) {\n const msg = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to read records file: ${msg}`))\n process.exit(1)\n }\n\n const spinner = ora(`Submitting batch with ${recordIds.length} records...`).start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<{ id: string; status: string }>('/batch/submit', {\n flowId: options.flow,\n recordIds,\n })\n\n spinner.succeed('Batch submitted')\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(` Batch ID: ${chalk.green(data.id)}`)\n console.log(` Status: ${data.status}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to submit batch')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nbatchCommand\n .command('status <id>')\n .description('Check batch job status')\n .option('--watch', 'Watch for updates')\n .option('--json', 'Output as JSON')\n .action(async (batchId: string, options: { watch?: boolean; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching batch status...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<BatchStatusResponse>(`/batch/status/${batchId}`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(chalk.cyan(`Batch Job: ${batchId}`))\n console.log(` Status: ${chalk.green(data.status)}`)\n console.log(` Progress: ${data.processedRecords}/${data.totalRecords}`)\n\n if (data.failedRecords > 0) {\n console.log(` Failed: ${chalk.red(data.failedRecords)}`)\n }\n\n if (options.watch && data.status === 'processing') {\n console.log(chalk.gray('\\nWatching for updates... (Ctrl+C to stop)'))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch batch status')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nbatchCommand\n .command('cancel <id>')\n .description('Cancel a batch job')\n .action(async (batchId: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Cancelling batch job...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.post(`/batch/cancel/${batchId}`)\n spinner.succeed('Batch job cancelled')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to cancel batch job')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n","import { Command } from 'commander'\nimport readline from 'readline'\nimport chalk from 'chalk'\nimport { ChatSession } from '../chat/session-manager'\nimport { StreamHandler } from '../chat/stream-handler'\nimport { getApiUrl, getApiVersion, getDefaultModel, getDefaultTemperature } from '../config/env'\nimport { ensureAuth } from '../lib/ensure-auth'\n\nconst CHAT_COMMANDS = {\n '/help': 'Show available commands',\n '/clear': 'Clear conversation history',\n '/save [filename]': 'Save session to file',\n '/load <filename>': 'Load session from file',\n '/export': 'Export conversation as markdown',\n '/model <model>': 'Change AI model',\n '/temp <value>': 'Set temperature (0-1)',\n '/info': 'Show session information',\n '/exit': 'Exit chat session',\n}\n\nexport const talkCommand = new Command('talk')\n .description('Start an interactive chat session')\n .option('-m, --model <model>', 'AI model to use', getDefaultModel())\n .option('-t, --temperature <temp>', 'Temperature (0-1)', getDefaultTemperature().toString())\n .option('--max-tokens <tokens>', 'Max response tokens', '2000')\n .option('--system <prompt>', 'System prompt to prepend')\n .option('--no-markdown', 'Disable markdown rendering')\n .option('--continue <file>', 'Continue from saved session')\n .action(async (options) => {\n // Check authentication (with interactive login offer)\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n // Initialize session\n const session = new ChatSession({\n model: options.model,\n temperature: parseFloat(options.temperature),\n maxOutputTokens: parseInt(options.maxOutputTokens),\n systemPrompt: options.system,\n })\n\n // Load previous session if specified\n if (options.continue) {\n try {\n await session.loadFromFile(options.continue)\n console.log(chalk.green(`Loaded session from: ${options.continue}`))\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to load session: ${message}`))\n process.exit(1)\n }\n }\n\n const apiUrl = getApiUrl()\n const streamHandler = new StreamHandler({\n enableMarkdown: options.markdown !== false,\n })\n\n // Setup readline interface\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.cyan('You> '),\n terminal: true,\n historySize: 100,\n })\n\n // Welcome message\n console.clear()\n console.log(chalk.green('🤖 Runtype Chat Session Started'))\n console.log(chalk.gray(`Model: ${options.model} | Temperature: ${options.temperature}`))\n console.log(chalk.gray('Type \"/help\" for commands or \"exit\" to quit\\n'))\n\n // Add custom system prompt if provided\n if (options.system) {\n session.addMessage('system', options.system)\n }\n\n // Handle special commands\n const handleCommand = async (input: string): Promise<boolean> => {\n const parts = input.split(' ')\n const command = parts[0]\n const args = parts.slice(1).join(' ')\n\n switch (command) {\n case '/help':\n console.log(chalk.cyan('\\nAvailable commands:'))\n for (const [cmd, desc] of Object.entries(CHAT_COMMANDS)) {\n console.log(` ${chalk.green(cmd)} - ${desc}`)\n }\n console.log()\n return true\n\n case '/clear':\n session.clearHistory()\n console.clear()\n console.log(chalk.green('🤖 Chat history cleared'))\n return true\n\n case '/save':\n try {\n const filepath = await session.saveToFile(args || undefined)\n console.log(chalk.green(`Session saved to: ${filepath}`))\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to save: ${message}`))\n }\n return true\n\n case '/load':\n if (!args) {\n console.log(chalk.red('Please specify a filename'))\n return true\n }\n try {\n await session.loadFromFile(args)\n console.log(chalk.green(`Session loaded from: ${args}`))\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to load: ${message}`))\n }\n return true\n\n case '/export':\n try {\n const filepath = await session.exportAsMarkdown()\n console.log(chalk.green(`Conversation exported to: ${filepath}`))\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to export: ${message}`))\n }\n return true\n\n case '/model':\n if (!args) {\n console.log(chalk.yellow('Please specify a model'))\n return true\n }\n session.setModel(args)\n return true\n\n case '/temp': {\n if (!args) {\n console.log(chalk.yellow('Please specify a temperature (0-1)'))\n return true\n }\n const temp = parseFloat(args)\n if (isNaN(temp) || temp < 0 || temp > 1) {\n console.log(chalk.red('Temperature must be between 0 and 1'))\n return true\n }\n session.setTemperature(temp)\n return true\n }\n\n case '/info': {\n const info = session.getSessionInfo()\n console.log(chalk.cyan('\\nSession Information:'))\n console.log(` Session ID: ${info.id}`)\n console.log(` Messages: ${info.messageCount}`)\n console.log(` Model: ${info.model}`)\n console.log(` Temperature: ${info.temperature}`)\n console.log(` Duration: ${info.duration}`)\n console.log()\n return true\n }\n\n case '/exit':\n return false\n\n default:\n if (input.startsWith('/')) {\n console.log(chalk.red(`Unknown command: ${command}`))\n console.log(chalk.gray('Type \"/help\" for available commands'))\n return true\n }\n return false\n }\n }\n\n // Chat loop\n rl.prompt()\n\n rl.on('line', async (input) => {\n const trimmed = input.trim()\n\n // Handle exit commands\n if (trimmed.toLowerCase() === 'exit' || trimmed.toLowerCase() === 'quit') {\n console.log(chalk.green('\\n👋 Goodbye!'))\n rl.close()\n process.exit(0)\n }\n\n // Handle empty input\n if (!trimmed) {\n rl.prompt()\n return\n }\n\n // Handle special commands\n if (trimmed.startsWith('/')) {\n const shouldContinue = await handleCommand(trimmed)\n if (!shouldContinue) {\n console.log(chalk.green('\\n👋 Goodbye!'))\n rl.close()\n process.exit(0)\n }\n rl.prompt()\n return\n }\n\n // Process regular chat input\n console.log(chalk.gray('\\nAssistant> ') + chalk.gray('Thinking...'))\n\n try {\n // Build dispatch request\n const payload = session.buildDispatchPayload(trimmed)\n\n // Debug: Log the actual prompt being sent\n // console.log(chalk.yellow('\\n[DEBUG] Prompt being sent:'))\n // console.log(chalk.gray(payload.flow.steps[0].config.text))\n // console.log(chalk.yellow('[END DEBUG]\\n'))\n\n // Call dispatch API with streaming (use versioned path: /v1/dispatch)\n const version = getApiVersion()\n const dispatchUrl = `${apiUrl.replace(/\\/$/, '')}/${version}/dispatch`\n const response = await fetch(dispatchUrl, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n body: JSON.stringify(payload),\n })\n\n if (!response.ok) {\n const error = await response.text()\n throw new Error(`API error: ${response.status} - ${error}`)\n }\n\n // Clear thinking message and show response\n process.stdout.write('\\x1B[1A\\x1B[2K') // Clear previous line\n process.stdout.write(chalk.gray('Assistant> '))\n\n // Handle streaming response\n const fullResponse = await streamHandler.handleStream(response)\n\n // Add to session history\n session.addMessage('assistant', fullResponse)\n\n // Add spacing and show prompt\n console.log()\n rl.prompt()\n } catch (error: unknown) {\n // Clear thinking message\n process.stdout.write('\\x1B[1A\\x1B[2K')\n const message = error instanceof Error ? error.message : 'Unknown error'\n const cause =\n error instanceof Error && error.cause instanceof Error\n ? error.cause.message\n : error instanceof Error && typeof error.cause === 'string'\n ? error.cause\n : null\n console.error(chalk.red(`Error: ${message}${cause ? ` (${cause})` : ''}`))\n if (message === 'fetch failed') {\n const apiUrl = getApiUrl()\n console.error(\n chalk.gray(\n `Tip: Request to ${apiUrl} failed. If using a local API, set RUNTYPE_API_URL (e.g. http://localhost:8787) and run \\`pnpm dev:api\\` or \\`pnpm dev:bun\\`.`\n )\n )\n }\n rl.prompt()\n }\n })\n\n // Handle Ctrl+C\n rl.on('SIGINT', () => {\n console.log(chalk.green('\\n\\n👋 Goodbye!'))\n\n // Optionally save session before exit\n const info = session.getSessionInfo()\n if (info.messageCount > 0) {\n console.log(chalk.gray('Tip: Use \"/save\" to save your conversation before exiting'))\n }\n\n process.exit(0)\n })\n\n // Handle errors\n rl.on('error', (error) => {\n console.error(chalk.red(`Readline error: ${error.message}`))\n process.exit(1)\n })\n })\n","import { v4 as uuidv4 } from 'uuid'\nimport fs from 'fs/promises'\nimport path from 'path'\nimport os from 'os'\n\nexport interface ChatMessage {\n role: 'user' | 'assistant' | 'system'\n content: string\n timestamp: string\n}\n\nexport interface ModelConfig {\n model: string\n temperature?: number\n maxOutputTokens?: number\n systemPrompt?: string\n}\n\ntype MetadataValue = string | number | boolean | null\n\nexport interface DispatchRecord {\n name: string\n type: string\n metadata: Record<string, MetadataValue>\n}\n\nexport interface PromptStepConfig {\n text: string\n model: string\n outputVariable: string\n responseFormat: 'text' | 'json' | 'markdown'\n}\n\nexport interface DispatchFlowStep {\n id: string\n type: 'prompt'\n name: string\n order: number\n enabled: boolean\n config: PromptStepConfig\n}\n\nexport interface DispatchFlow {\n name: string\n description: string\n steps: DispatchFlowStep[]\n}\n\nexport interface DispatchOptions {\n streamResponse: boolean\n recordMode: 'virtual' | 'create' | 'existing'\n flowMode: 'virtual' | 'create' | 'existing'\n}\n\nexport interface DispatchPayload {\n record: DispatchRecord\n flow: DispatchFlow\n options: DispatchOptions\n}\n\nexport class ChatSession {\n private sessionId: string\n private messages: ChatMessage[] = []\n private modelConfig: ModelConfig\n private sessionDir: string\n\n constructor(modelConfig?: Partial<ModelConfig>) {\n this.sessionId = uuidv4()\n this.modelConfig = {\n model: modelConfig?.model || 'meta/llama3.1-8b-instruct-free',\n temperature: modelConfig?.temperature ?? 0.7,\n maxOutputTokens: modelConfig?.maxOutputTokens || 2000,\n systemPrompt: modelConfig?.systemPrompt,\n }\n this.sessionDir = path.join(os.homedir(), '.runtype', 'chat-sessions')\n }\n\n addMessage(role: ChatMessage['role'], content: string): void {\n this.messages.push({\n role,\n content,\n timestamp: new Date().toISOString(),\n })\n }\n\n getMessages(): ChatMessage[] {\n return this.messages\n }\n\n clearHistory(): void {\n this.messages = []\n console.log('Chat history cleared')\n }\n\n setModel(model: string): void {\n this.modelConfig.model = model\n console.log(`Model changed to: ${model}`)\n }\n\n setTemperature(temperature: number): void {\n this.modelConfig.temperature = Math.max(0, Math.min(1, temperature))\n console.log(`Temperature set to: ${this.modelConfig.temperature}`)\n }\n\n getConversationContext(): string {\n return this.messages\n .map((m) => {\n const role = m.role === 'user' ? 'User' : m.role === 'assistant' ? 'Assistant' : 'System'\n return `${role}: ${m.content}`\n })\n .join('\\n\\n')\n }\n\n buildDispatchPayload(userInput: string): DispatchPayload {\n // Add user message to history\n this.addMessage('user', userInput)\n\n const metadata: Record<string, MetadataValue> = {}\n\n return {\n record: {\n name: 'Chat session',\n type: 'standalone',\n metadata,\n },\n flow: {\n name: 'Chat Flow',\n description: '',\n steps: [\n {\n id: '1',\n type: 'prompt',\n name: 'Chat Response',\n order: 1,\n enabled: true,\n config: {\n text: this.buildPrompt(userInput),\n model: this.modelConfig.model,\n outputVariable: 'chatResult',\n responseFormat: 'text',\n },\n },\n ],\n },\n options: {\n streamResponse: true,\n recordMode: 'virtual',\n flowMode: 'virtual',\n },\n }\n }\n\n private buildPrompt(userInput: string): string {\n const systemContext =\n this.modelConfig.systemPrompt ||\n `You are a helpful AI assistant. Provide clear, concise, and helpful responses to user questions. Use markdown formatting when appropriate.`\n\n if (this.messages.length > 1) {\n // Include conversation history for context (last 10 messages)\n const history = this.messages\n .slice(0, -1) // Exclude the current user message\n .slice(-10) // Keep last 10 messages for context\n .map((m) => `${m.role}: ${m.content}`)\n .join('\\n')\n\n return `${systemContext}\n\nConversation history:\n${history}\n\n${userInput}`\n } else {\n return `${systemContext}\n\n${userInput}`\n }\n }\n\n async saveToFile(filename?: string): Promise<string> {\n await fs.mkdir(this.sessionDir, { recursive: true })\n\n const file = filename || `session-${Date.now()}.json`\n const filepath = path.join(this.sessionDir, file)\n\n const sessionData = {\n sessionId: this.sessionId,\n modelConfig: this.modelConfig,\n messages: this.messages,\n savedAt: new Date().toISOString(),\n }\n\n await fs.writeFile(filepath, JSON.stringify(sessionData, null, 2))\n return filepath\n }\n\n async loadFromFile(filename: string): Promise<void> {\n const filepath = path.join(this.sessionDir, filename)\n const data = await fs.readFile(filepath, 'utf-8')\n const sessionData = JSON.parse(data)\n\n this.sessionId = sessionData.sessionId\n this.modelConfig = sessionData.modelConfig\n this.messages = sessionData.messages\n }\n\n async exportAsMarkdown(): Promise<string> {\n await fs.mkdir(this.sessionDir, { recursive: true })\n\n const filename = `export-${Date.now()}.md`\n const filepath = path.join(this.sessionDir, filename)\n\n let content = `# Runtype Chat Session\\n\\n`\n content += `**Session ID:** ${this.sessionId}\\n`\n content += `**Model:** ${this.modelConfig.model}\\n`\n content += `**Date:** ${new Date().toISOString()}\\n\\n`\n content += `---\\n\\n`\n\n for (const message of this.messages) {\n const role =\n message.role === 'user'\n ? '**User**'\n : message.role === 'assistant'\n ? '**Assistant**'\n : '**System**'\n content += `${role} *(${new Date(message.timestamp).toLocaleString()})*\\n\\n`\n content += `${message.content}\\n\\n`\n content += `---\\n\\n`\n }\n\n await fs.writeFile(filepath, content)\n return filepath\n }\n\n getSessionInfo(): {\n id: string\n messageCount: number\n model: string\n temperature: number\n duration: string\n } {\n const firstMessage = this.messages[0]\n const lastMessage = this.messages[this.messages.length - 1]\n\n let duration = 'N/A'\n if (firstMessage && lastMessage) {\n const start = new Date(firstMessage.timestamp)\n const end = new Date(lastMessage.timestamp)\n const diff = end.getTime() - start.getTime()\n const minutes = Math.floor(diff / 60000)\n const seconds = Math.floor((diff % 60000) / 1000)\n duration = `${minutes}m ${seconds}s`\n }\n\n return {\n id: this.sessionId,\n messageCount: this.messages.length,\n model: this.modelConfig.model,\n temperature: this.modelConfig.temperature ?? 0.7,\n duration,\n }\n }\n}\n","import chalk from 'chalk'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\n\nexport interface StreamChunk {\n type: 'content' | 'error' | 'done' | 'metadata'\n content?: string\n error?: string\n metadata?: Record<string, unknown>\n}\n\nexport class StreamHandler {\n private buffer: string = ''\n private isStreaming: boolean = false\n private enableMarkdown: boolean\n\n constructor(options: { enableMarkdown?: boolean } = {}) {\n this.enableMarkdown = options.enableMarkdown ?? true\n }\n\n async handleStream(response: Response): Promise<string> {\n this.isStreaming = true\n this.buffer = ''\n\n const callbacks: StreamCallbacks = {\n onStepChunk: (chunk: string) => {\n // Only output content chunks - processStream handles all the parsing\n this.appendOutput(chunk)\n },\n onError: (error: Error) => {\n console.error(chalk.red(`\\nError: ${error.message}`))\n },\n // All other events (step_start, step_complete, flow_start, etc.) are\n // silently ignored - processStream handles them but we don't need to display them\n }\n\n try {\n await processStream(response, callbacks)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`\\nStream error: ${message}`))\n throw error\n } finally {\n this.isStreaming = false\n this.flush()\n }\n\n return this.buffer\n }\n\n private flush(): void {\n if (this.buffer && !this.buffer.endsWith('\\n')) {\n process.stdout.write('\\n')\n }\n }\n\n private appendOutput(text: string): void {\n const output = this.enableMarkdown ? text : this.stripMarkdown(text)\n this.buffer += output\n process.stdout.write(output)\n }\n\n private stripMarkdown(text: string): string {\n return text.replace(/([*_`~]|\\r)/g, '')\n }\n\n isCurrentlyStreaming(): boolean {\n return this.isStreaming\n }\n\n getBuffer(): string {\n return this.buffer\n }\n\n clearBuffer(): void {\n this.buffer = ''\n }\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport Conf from 'conf'\nimport path from 'path'\nimport os from 'os'\n\ninterface CliConfig {\n apiUrl?: string\n defaultModel?: string\n defaultTemperature?: number\n outputFormat?: 'table' | 'json' | 'plain'\n streamResponses?: boolean\n [key: string]: string | number | boolean | undefined\n}\n\ntype CliConfigKey = Extract<keyof CliConfig, string>\n\nconst CLI_CONFIG_KEYS: readonly CliConfigKey[] = [\n 'apiUrl',\n 'defaultModel',\n 'defaultTemperature',\n 'outputFormat',\n 'streamResponses',\n]\n\nconst isCliConfigKey = (value: string): value is CliConfigKey => {\n return (CLI_CONFIG_KEYS as readonly string[]).includes(value)\n}\n\nexport const configCommand = new Command('config').description('Manage CLI configuration')\n\nconst config = new Conf<CliConfig>({\n projectName: 'runtype-cli',\n projectSuffix: '',\n configName: 'config',\n cwd: path.join(os.homedir(), '.runtype'),\n})\n\nconfigCommand\n .command('get [key]')\n .description('Get configuration value')\n .action((key?: string) => {\n if (key) {\n if (!isCliConfigKey(key)) {\n console.log(chalk.yellow(`Configuration key '${key}' not found`))\n return\n }\n\n const value = config.get(key)\n if (value !== undefined) {\n console.log(value)\n } else {\n console.log(chalk.yellow(`Configuration key '${key}' not found`))\n }\n } else {\n // Show all configuration\n const allConfig = config.store\n if (Object.keys(allConfig).length > 0) {\n console.log(chalk.cyan('Current Configuration:'))\n for (const [k, v] of Object.entries(allConfig)) {\n console.log(` ${chalk.green(k)}: ${v}`)\n }\n } else {\n console.log(chalk.gray('No configuration set'))\n }\n }\n })\n\nconfigCommand\n .command('set <key> <value>')\n .description('Set configuration value')\n .action((key: string, value: string) => {\n if (!isCliConfigKey(key)) {\n console.log(chalk.red(`Invalid configuration key: ${key}`))\n console.log(chalk.gray(`Valid keys: ${CLI_CONFIG_KEYS.join(', ')}`))\n process.exit(1)\n }\n\n // Parse value based on key type\n let parsedValue: CliConfig[typeof key]\n\n switch (key) {\n case 'defaultTemperature':\n {\n const temperature = parseFloat(value)\n if (isNaN(temperature) || temperature < 0 || temperature > 1) {\n console.log(chalk.red('Temperature must be a number between 0 and 1'))\n process.exit(1)\n }\n parsedValue = temperature as CliConfig[typeof key]\n }\n break\n\n case 'streamResponses':\n parsedValue = (value === 'true') as CliConfig[typeof key]\n break\n\n case 'outputFormat':\n if (!['table', 'json', 'plain'].includes(value)) {\n console.log(chalk.red('Output format must be: table, json, or plain'))\n process.exit(1)\n }\n parsedValue = value as CliConfig[typeof key]\n break\n\n default:\n parsedValue = value as CliConfig[typeof key]\n break\n }\n\n config.set(key, parsedValue)\n console.log(chalk.green(`Configuration updated: ${key} = ${parsedValue}`))\n })\n\nconfigCommand\n .command('reset')\n .description('Reset all configuration to defaults')\n .action(() => {\n config.clear()\n console.log(chalk.green('Configuration reset to defaults'))\n })\n\nconfigCommand\n .command('path')\n .description('Show configuration file path')\n .action(() => {\n console.log(config.path)\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport open from 'open'\nimport { getApiUrl, getApiVersion, getDashboardUrl } from '../config/env'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { promptText, promptConfirm } from '../lib/interactive'\n\ninterface InitOptions {\n from?: string\n name?: string\n open?: boolean\n json?: boolean\n apiUrl?: string\n}\n\ninterface AgentCardSkill {\n id: string\n name: string\n description?: string\n}\n\ninterface AgentCard {\n name: string\n description?: string\n url: string\n skills?: AgentCardSkill[]\n}\n\ninterface ValidationSuccessResponse {\n valid: true\n templateId: string\n agentCard: AgentCard\n}\n\ninterface ValidationErrorResponse {\n valid: false\n error: string\n code: string\n}\n\ntype ValidationResponse = ValidationSuccessResponse | ValidationErrorResponse\n\ninterface CreateSuccessResponse {\n success: true\n product: {\n id: string\n name: string\n description: string | null\n status: string\n }\n capabilities: Array<{\n id: string\n type: string\n name: string\n agentId?: string\n }>\n redirectUrl: string\n}\n\ninterface CreateErrorResponse {\n success: false\n error: string\n code: string\n}\n\ntype CreateResponse = CreateSuccessResponse | CreateErrorResponse\n\nfunction displayAgentCard(agentCard: AgentCard): void {\n console.log(chalk.cyan('\\nAgent Details:'))\n console.log(` Name: ${agentCard.name}`)\n if (agentCard.description) {\n console.log(` Description: ${agentCard.description}`)\n }\n console.log(` URL: ${agentCard.url}`)\n\n if (agentCard.skills && agentCard.skills.length > 0) {\n console.log(' Skills:')\n agentCard.skills.forEach((skill) => {\n const desc = skill.description ? ` - ${skill.description}` : ''\n console.log(` ${chalk.cyan('\\u2022')} ${skill.name}${desc}`)\n })\n }\n}\n\nasync function createProduct(\n apiKey: string,\n templateId: string,\n agentCard: AgentCard,\n sourceUrl: string,\n productName?: string,\n apiUrl?: string\n): Promise<CreateResponse> {\n const baseUrl = apiUrl || getApiUrl()\n const response = await fetch(`${baseUrl}/${getApiVersion()}/quick-start/create`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n templateId,\n agentCard,\n productName,\n sourceUrl,\n }),\n })\n\n // Handle non-JSON responses (e.g., 404 HTML pages)\n const contentType = response.headers.get('content-type') || ''\n if (!contentType.includes('application/json')) {\n return {\n success: false,\n error: response.ok ? 'API returned invalid response' : `API error: ${response.status} ${response.statusText}`,\n code: 'API_ERROR',\n }\n }\n\n return response.json() as Promise<CreateResponse>\n}\n\nfunction displayCreationSuccess(\n result: CreateSuccessResponse,\n agentCard: AgentCard,\n dashboardBaseUrl: string,\n jsonOutput: boolean\n): void {\n const productUrl = `${dashboardBaseUrl}/products/${result.product.id}?launch=true`\n\n if (jsonOutput) {\n console.log(\n JSON.stringify(\n {\n status: 'created',\n product: result.product,\n agentCard,\n dashboardUrl: productUrl,\n },\n null,\n 2\n )\n )\n return\n }\n\n console.log(`\\nProduct ID: ${result.product.id}`)\n console.log(`Name: ${result.product.name}`)\n console.log(`Dashboard: ${productUrl}`)\n\n console.log(chalk.cyan('\\nNext steps:'))\n console.log(' 1. Visit the dashboard to configure surfaces')\n console.log(' 2. Or run: runtype products init --from <another-url>')\n}\n\nasync function validateUrl(url: string, apiUrl?: string): Promise<ValidationResponse> {\n const baseUrl = apiUrl || getApiUrl()\n const response = await fetch(`${baseUrl}/${getApiVersion()}/quick-start/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url }),\n })\n\n // Handle non-JSON responses (e.g., 404 HTML pages)\n const contentType = response.headers.get('content-type') || ''\n if (!contentType.includes('application/json')) {\n return {\n valid: false,\n error: response.ok ? 'API returned invalid response' : `API error: ${response.status} ${response.statusText}`,\n code: 'API_ERROR',\n }\n }\n\n return response.json() as Promise<ValidationResponse>\n}\n\nexport const productsCommand = new Command('products').description('Manage products')\n\nproductsCommand\n .command('init')\n .description('Initialize a product from an external resource')\n .option('--from <url>', 'URL to validate and import')\n .option('--name <name>', 'Custom product name (defaults to agent name)')\n .option('--open', 'Open browser to dashboard instead of creating via API')\n .option('--json', 'Output in JSON format')\n .option('--api-url <url>', 'Override API URL')\n .action(async (options: InitOptions) => {\n const isJsonMode = !!options.json\n\n // Step 1: Get URL interactively if not provided via flag\n let sourceUrl = options.from\n if (!sourceUrl) {\n if (isJsonMode) {\n console.log(JSON.stringify({ status: 'error', error: 'Missing --from URL', code: 'MISSING_URL' }, null, 2))\n process.exit(1)\n }\n\n console.log(chalk.cyan('Create a product from an A2A agent URL.\\n'))\n sourceUrl = await promptText('Enter the agent URL')\n\n if (!sourceUrl) {\n console.log(chalk.red('A URL is required to create a product.'))\n process.exit(1)\n }\n }\n\n // Step 2: Validate the URL\n const spinner = ora('Validating URL...').start()\n\n try {\n const result = await validateUrl(sourceUrl, options.apiUrl)\n\n if (!result.valid) {\n spinner.fail('Validation failed')\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n { status: 'error', error: result.error, code: result.code },\n null,\n 2\n )\n )\n } else {\n console.error(chalk.red(result.error))\n }\n process.exit(1)\n }\n\n spinner.succeed('A2A Agent Detected')\n\n // Step 3: Display agent card\n displayAgentCard(result.agentCard)\n\n // Step 4: Confirm creation (interactive only)\n if (!isJsonMode) {\n const shouldCreate = await promptConfirm('\\nCreate a product from this agent?', { default: true })\n if (!shouldCreate) {\n console.log(chalk.gray('Product creation cancelled.'))\n return\n }\n }\n\n // Step 5: Ask for custom name if not provided (interactive only)\n let productName = options.name\n if (!productName && !isJsonMode) {\n productName = await promptText('Product name', { default: result.agentCard.name })\n }\n\n // Step 6: Authenticate (with interactive login offer)\n const apiKey = isJsonMode\n ? await getApiKeyOrExit(isJsonMode, result.agentCard)\n : await ensureAuth({ apiUrl: options.apiUrl })\n\n if (!apiKey) {\n process.exit(1)\n }\n\n // Step 7: Handle browser flow\n if (options.open) {\n const dashboardUrl = getDashboardUrl()\n const encodedUrl = encodeURIComponent(sourceUrl)\n const targetUrl = `${dashboardUrl}/now?from=${encodedUrl}&cli=true`\n\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n {\n status: 'browser_opened',\n agentCard: result.agentCard,\n url: targetUrl,\n },\n null,\n 2\n )\n )\n } else {\n console.log(chalk.cyan('\\nOpening browser to complete setup...'))\n console.log(chalk.gray(targetUrl))\n }\n\n await open(targetUrl)\n return\n }\n\n // Step 8: Create product via API\n const createSpinner = ora('Creating product...').start()\n\n try {\n const createResult = await createProduct(\n apiKey,\n result.templateId,\n result.agentCard,\n sourceUrl,\n productName,\n options.apiUrl\n )\n\n if (!createResult.success) {\n createSpinner.fail('Failed to create product')\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n { status: 'error', error: createResult.error, code: createResult.code },\n null,\n 2\n )\n )\n } else {\n console.error(chalk.red(createResult.error))\n }\n process.exit(1)\n }\n\n createSpinner.succeed('Product Created')\n\n displayCreationSuccess(\n createResult,\n result.agentCard,\n getDashboardUrl(),\n isJsonMode\n )\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n createSpinner.fail('Failed to create product')\n console.error(chalk.red(message))\n process.exit(1)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to validate URL')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\n/**\n * For JSON mode, just check credentials without interactive prompts.\n */\nasync function getApiKeyOrExit(isJsonMode: boolean, agentCard: AgentCard): Promise<string | null> {\n const { CredentialStore } = await import('../auth/credential-store')\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n {\n status: 'unauthenticated',\n agentCard,\n message: 'Authentication required to create product',\n },\n null,\n 2\n )\n )\n }\n return null\n }\n\n return apiKey\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { CredentialStore } from '../auth/credential-store'\nimport { OAuthManager } from '../auth/oauth-manager'\nimport { ApiKeyManager } from '../auth/api-key-manager'\nimport { getApiUrl, getApiVersion, getClerkPublishableKey, getDashboardUrl } from '../config/env'\nimport { promptConfirm, promptText, promptSelect } from '../lib/interactive'\n\nexport const initCommand = new Command('init')\n .description('Set up Runtype CLI with guided onboarding')\n .option('--api-url <url>', 'Custom API URL')\n .action(async (options: { apiUrl?: string }) => {\n console.log(chalk.cyan('\\nWelcome to Runtype!\\n'))\n console.log('This will walk you through setting up the CLI.\\n')\n\n // Step 1: Check existing credentials\n const store = new CredentialStore()\n const existingKey = await store.getApiKey()\n\n if (existingKey) {\n console.log(chalk.green('You are already authenticated.'))\n\n const apiKeyManager = new ApiKeyManager()\n try {\n const isValid = await apiKeyManager.validateApiKey(existingKey, options.apiUrl)\n if (isValid) {\n console.log(chalk.green('Your credentials are valid.\\n'))\n\n const continueSetup = await promptConfirm('Continue with product setup?', { default: true })\n if (!continueSetup) {\n showNextSteps()\n return\n }\n\n await productSetupFlow(existingKey, options.apiUrl)\n return\n } else {\n console.log(chalk.yellow('Your stored credentials are no longer valid.'))\n console.log(chalk.gray('Let\\'s set up fresh credentials.\\n'))\n }\n } catch {\n console.log(chalk.yellow('Could not validate stored credentials.'))\n console.log(chalk.gray('Let\\'s set up fresh credentials.\\n'))\n }\n }\n\n // Step 2: Authentication\n console.log(chalk.cyan('Step 1: Authentication\\n'))\n\n const authMethod = await promptSelect('How would you like to get started?', [\n { label: 'Create a new account', value: 'signup' as const, description: 'Sign up via browser' },\n { label: 'Log in to existing account', value: 'login' as const, description: 'Sign in via browser' },\n { label: 'Use an API key', value: 'apikey' as const, description: 'Paste an existing API key' },\n ])\n\n let apiKey: string | null = null\n\n if (authMethod === 'apikey') {\n apiKey = await handleApiKeyAuth(store, options.apiUrl)\n } else {\n const mode = authMethod === 'signup' ? 'sign-up' : 'sign-in'\n apiKey = await handleBrowserAuth(store, mode, options.apiUrl)\n }\n\n if (!apiKey) {\n console.log(chalk.red('\\nAuthentication was not completed. Run \"runtype init\" to try again.'))\n process.exit(1)\n }\n\n // Step 3: Product setup (optional)\n console.log()\n const wantsProduct = await promptConfirm('Would you like to create a product now?', { default: true })\n\n if (wantsProduct) {\n await productSetupFlow(apiKey, options.apiUrl)\n } else {\n showNextSteps()\n }\n })\n\nasync function handleApiKeyAuth(\n store: CredentialStore,\n apiUrl?: string\n): Promise<string | null> {\n const key = await promptText('Enter your API key')\n\n if (!key) {\n console.log(chalk.red('No API key provided.'))\n return null\n }\n\n const spinner = ora('Validating API key...').start()\n\n try {\n const apiKeyManager = new ApiKeyManager()\n const isValid = await apiKeyManager.validateApiKey(key, apiUrl)\n\n if (!isValid) {\n spinner.fail('Invalid API key')\n return null\n }\n\n const userData = await apiKeyManager.getCurrentUser(key, apiUrl)\n\n await store.saveCredentials({\n apiKey: key,\n // @snake-case-ok: API auth/me response uses snake_case\n userId: userData.user_id,\n // @snake-case-ok: API auth/me response uses snake_case\n orgId: userData.org_id ?? undefined,\n apiUrl: apiUrl || getApiUrl(),\n })\n\n spinner.succeed('Authenticated successfully!')\n return key\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Authentication failed')\n console.error(chalk.red(message))\n return null\n }\n}\n\nasync function handleBrowserAuth(\n store: CredentialStore,\n mode: 'sign-up' | 'sign-in',\n apiUrl?: string\n): Promise<string | null> {\n const spinner = ora('Opening browser for authentication...').start()\n\n try {\n const oauth = new OAuthManager({\n clerkPublishableKey: getClerkPublishableKey(),\n dashboardUrl: getDashboardUrl(),\n })\n\n spinner.text = 'Waiting for browser authentication...'\n const sessionToken = await oauth.authenticate(mode)\n\n spinner.text = 'Exchanging credentials...'\n const apiKeyManager = new ApiKeyManager()\n const { key, userId, orgId } = await apiKeyManager.exchangeSessionForApiKey(\n sessionToken,\n apiUrl || getApiUrl(),\n )\n\n await store.saveCredentials({\n apiKey: key,\n userId,\n orgId,\n apiUrl: apiUrl || getApiUrl(),\n })\n\n spinner.succeed('Authenticated successfully!')\n return key\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Authentication failed')\n console.error(chalk.red(message))\n return null\n }\n}\n\nasync function productSetupFlow(apiKey: string, apiUrl?: string): Promise<void> {\n console.log(chalk.cyan('\\nStep 2: Create a product\\n'))\n\n const sourceType = await promptSelect('What would you like to import?', [\n { label: 'A2A agent URL', value: 'url' as const, description: 'Import from an agent endpoint' },\n { label: 'Skip for now', value: 'skip' as const, description: 'Set up a product later' },\n ])\n\n if (sourceType === 'skip') {\n showNextSteps()\n return\n }\n\n const url = await promptText('Enter the agent URL')\n\n if (!url) {\n console.log(chalk.yellow('No URL provided. You can create a product later with:'))\n console.log(chalk.gray(' runtype products init'))\n return\n }\n\n // Validate\n const spinner = ora('Validating URL...').start()\n\n try {\n const baseUrl = apiUrl || getApiUrl()\n const response = await fetch(`${baseUrl}/${getApiVersion()}/quick-start/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url }),\n })\n\n const contentType = response.headers.get('content-type') || ''\n if (!contentType.includes('application/json')) {\n spinner.fail('Validation failed')\n console.error(chalk.red(`API error: ${response.status} ${response.statusText}`))\n return\n }\n\n const result = await response.json()\n\n if (!result.valid) {\n spinner.fail('Validation failed')\n console.error(chalk.red(result.error))\n return\n }\n\n spinner.succeed('A2A Agent Detected')\n\n // Display agent info\n console.log(chalk.cyan('\\nAgent Details:'))\n console.log(` Name: ${result.agentCard.name}`)\n if (result.agentCard.description) {\n console.log(` Description: ${result.agentCard.description}`)\n }\n console.log(` URL: ${result.agentCard.url}`)\n\n if (result.agentCard.skills?.length > 0) {\n console.log(' Skills:')\n for (const skill of result.agentCard.skills) {\n const desc = skill.description ? ` - ${skill.description}` : ''\n console.log(` ${chalk.cyan('\\u2022')} ${skill.name}${desc}`)\n }\n }\n\n // Confirm\n const shouldCreate = await promptConfirm('\\nCreate this product?', { default: true })\n if (!shouldCreate) {\n console.log(chalk.gray('Product creation cancelled.'))\n showNextSteps()\n return\n }\n\n // Product name\n const productName = await promptText('Product name', { default: result.agentCard.name })\n\n // Create\n const createSpinner = ora('Creating product...').start()\n\n const createResponse = await fetch(`${baseUrl}/${getApiVersion()}/quick-start/create`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n templateId: result.templateId,\n agentCard: result.agentCard,\n productName,\n sourceUrl: url,\n }),\n })\n\n const createContentType = createResponse.headers.get('content-type') || ''\n if (!createContentType.includes('application/json')) {\n createSpinner.fail('Failed to create product')\n console.error(chalk.red(`API error: ${createResponse.status} ${createResponse.statusText}`))\n return\n }\n\n const createResult = await createResponse.json()\n\n if (!createResult.success) {\n createSpinner.fail('Failed to create product')\n console.error(chalk.red(createResult.error))\n return\n }\n\n createSpinner.succeed('Product Created')\n\n const dashboardUrl = getDashboardUrl()\n const productUrl = `${dashboardUrl}/products/${createResult.product.id}?launch=true`\n\n console.log(`\\nProduct ID: ${createResult.product.id}`)\n console.log(`Name: ${createResult.product.name}`)\n console.log(`Dashboard: ${productUrl}`)\n\n console.log(chalk.green('\\nSetup complete!'))\n showNextSteps()\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to validate URL')\n console.error(chalk.red(message))\n }\n}\n\nfunction showNextSteps(): void {\n console.log(chalk.cyan('\\nWhat you can do next:'))\n console.log(` ${chalk.green('runtype products init')} Create a product from an agent URL`)\n console.log(` ${chalk.green('runtype flows list')} List your flows`)\n console.log(` ${chalk.green('runtype dispatch -f <id>')} Execute a flow`)\n console.log(` ${chalk.green('runtype agents list')} List your agents`)\n console.log(` ${chalk.green('runtype models list')} View enabled models`)\n console.log(` ${chalk.green('runtype talk')} Start an interactive chat session`)\n console.log(` ${chalk.green('runtype --help')} See all available commands`)\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { readFileSync } from 'fs'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson } from '../lib/output'\n\ninterface DispatchOptions {\n flow?: string\n agent?: string\n record?: string\n recordJson?: string\n message?: string\n variable?: string[]\n stream: boolean\n json?: boolean\n debug?: boolean\n}\n\nexport const dispatchCommand = new Command('dispatch')\n .description('Execute a flow or agent via the dispatch API')\n .option('-f, --flow <id>', 'Flow ID to execute')\n .option('-a, --agent <id>', 'Agent ID to execute')\n .option('-r, --record <id>', 'Existing record ID')\n .option('--record-json <file>', 'JSON file with record data')\n .option('-m, --message <text>', 'Message to send')\n .option('-v, --variable <key=value>', 'Set a variable (repeatable)', collectVariables, [])\n .option('--stream', 'Stream the response (default)', true)\n .option('--no-stream', 'Wait for complete response')\n .option('--json', 'Output as JSON')\n .option('--debug', 'Show step-level details')\n .action(async (options: DispatchOptions) => {\n if (!options.flow && !options.agent) {\n console.error(chalk.red('Error: Either --flow or --agent is required'))\n process.exit(1)\n }\n\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n // Build dispatch payload\n const payload: Record<string, unknown> = {}\n\n if (options.flow) {\n payload.flow = { id: options.flow }\n }\n\n if (options.agent) {\n payload.agent = { id: options.agent }\n }\n\n // Record resolution\n if (options.record) {\n payload.record = { id: options.record }\n } else if (options.recordJson) {\n try {\n const data = JSON.parse(readFileSync(options.recordJson, 'utf-8'))\n payload.record = { metadata: data }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to read record JSON: ${message}`))\n process.exit(1)\n }\n }\n\n // Messages\n if (options.message) {\n payload.messages = [{ role: 'user', content: options.message }]\n }\n\n // Variables\n if (options.variable && options.variable.length > 0) {\n const variables: Record<string, string> = {}\n for (const v of options.variable) {\n const [key, ...rest] = v.split('=')\n variables[key] = rest.join('=')\n }\n payload.variables = variables\n }\n\n if (options.stream) {\n await handleStreaming(client, payload, options)\n } else {\n await handleNonStreaming(client, payload, options)\n }\n })\n\nfunction collectVariables(value: string, previous: string[]): string[] {\n return previous.concat([value])\n}\n\nasync function handleStreaming(\n client: ApiClient,\n payload: Record<string, unknown>,\n options: DispatchOptions\n): Promise<void> {\n const spinner = ora('Starting execution...').start()\n let spinnerStopped = false\n\n try {\n const response = await client.stream('/dispatch', payload)\n\n const callbacks: StreamCallbacks = {\n onFlowStart: (event: { flowName: string; totalSteps: number }) => {\n if (!spinnerStopped) {\n spinner.stop()\n spinnerStopped = true\n }\n if (options.debug) {\n console.log(chalk.cyan(`Flow: ${event.flowName} (${event.totalSteps} steps)`))\n }\n },\n onStepStart: (event: { name: string }) => {\n if (!spinnerStopped) {\n spinner.stop()\n spinnerStopped = true\n }\n if (options.debug) {\n console.log(chalk.gray(`\\n[${event.name}] Running...`))\n }\n },\n onStepChunk: (chunk: string) => {\n if (!spinnerStopped) {\n spinner.stop()\n spinnerStopped = true\n }\n process.stdout.write(chunk)\n },\n onStepComplete: (_result: unknown, event: { name: string }) => {\n if (options.debug) {\n console.log(chalk.gray(`\\n[${event.name}] Complete`))\n }\n },\n onFlowComplete: (event: Record<string, unknown>) => {\n if (options.json) {\n console.log()\n printJson(event)\n }\n },\n onError: (err: Error) => {\n if (!spinnerStopped) {\n spinner.fail('Execution failed')\n spinnerStopped = true\n }\n console.error(chalk.red(`\\nError: ${err.message}`))\n },\n }\n\n await processStream(response, callbacks)\n console.log() // final newline\n } catch (error) {\n if (!spinnerStopped) {\n spinner.fail('Execution failed')\n }\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\n process.exit(1)\n }\n}\n\nasync function handleNonStreaming(\n client: ApiClient,\n payload: Record<string, unknown>,\n options: DispatchOptions\n): Promise<void> {\n const spinner = ora('Executing...').start()\n\n try {\n payload.streamResponse = false\n const result = await client.post<Record<string, unknown>>('/dispatch', payload)\n spinner.succeed('Execution complete')\n\n if (options.json) {\n printJson(result)\n } else {\n // Print step results\n const steps = result.steps as Array<{ name: string; result: unknown }> | undefined\n if (steps) {\n for (const step of steps) {\n console.log(chalk.cyan(`\\n[${step.name}]`))\n if (typeof step.result === 'string') {\n console.log(step.result)\n } else {\n console.log(JSON.stringify(step.result, null, 2))\n }\n }\n } else {\n printJson(result)\n }\n }\n } catch (error) {\n spinner.fail('Execution failed')\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\n process.exit(1)\n }\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { taskCommand } from './agents-task'\n\ninterface AgentSummary {\n id: string\n name: string\n description?: string | null\n status?: string\n model?: string | null\n}\n\nexport const agentsCommand = new Command('agents').description('Manage agents')\n\nagentsCommand.addCommand(taskCommand)\n\nagentsCommand\n .command('list')\n .description('List all agents')\n .option('--json', 'Output as JSON')\n .option('--limit <n>', 'Limit results', '20')\n .action(async (options: { json?: boolean; limit: string }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching agents...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<PaginatedResponse<AgentSummary>>('/agents', {\n limit: options.limit,\n })\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const agents = data.data ?? []\n if (agents.length === 0) {\n console.log(chalk.gray('No agents found'))\n return\n }\n\n console.log(chalk.cyan('Your Agents:'))\n for (const agent of agents) {\n const desc = agent.description ? chalk.gray(` - ${agent.description}`) : ''\n console.log(` ${chalk.green(agent.id)} ${agent.name}${desc}`)\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} agents`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch agents')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nagentsCommand\n .command('get <id>')\n .description('Get agent details')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching agent...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<AgentSummary & { capabilities?: Array<Record<string, unknown>> }>(\n `/agents/${id}`\n )\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Agent', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Description', value: data.description },\n { label: 'Status', value: data.status },\n { label: 'Model', value: data.model },\n ])\n\n if (data.capabilities && data.capabilities.length > 0) {\n console.log(chalk.cyan('\\n Capabilities:'))\n for (const cap of data.capabilities) {\n console.log(` ${chalk.gray('-')} ${cap.name || cap.type || cap.id}`)\n }\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch agent')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nagentsCommand\n .command('create')\n .description('Create a new agent')\n .requiredOption('-n, --name <name>', 'Agent name')\n .option('-d, --description <desc>', 'Agent description')\n .option('--json', 'Output as JSON')\n .action(async (options: { name: string; description?: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Creating agent...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<AgentSummary>('/agents', {\n name: options.name,\n description: options.description,\n })\n spinner.succeed('Agent created')\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(` ID: ${chalk.green(data.id)}`)\n console.log(` Name: ${data.name}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to create agent')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nagentsCommand\n .command('delete <id>')\n .description('Delete an agent')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Deleting agent...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.delete(`/agents/${id}`)\n spinner.succeed('Agent deleted')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to delete agent')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nagentsCommand\n .command('execute <id>')\n .description('Execute an agent')\n .requiredOption('-m, --message <text>', 'Message to send')\n .option('--stream', 'Stream the response (default)', true)\n .option('--no-stream', 'Wait for complete response')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { message: string; stream: boolean; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n const payload = {\n messages: [{ role: 'user', content: options.message }],\n }\n\n if (options.stream) {\n const spinner = ora('Starting agent...').start()\n\n try {\n const response = await client.stream(`/agents/${id}/execute`, payload)\n spinner.stop()\n\n const callbacks: StreamCallbacks = {\n onStepChunk: (chunk: string) => {\n process.stdout.write(chunk)\n },\n onError: (err: Error) => {\n console.error(chalk.red(`\\nError: ${err.message}`))\n },\n }\n\n await processStream(response, callbacks)\n console.log()\n } catch (error) {\n spinner.fail('Execution failed')\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\n process.exit(1)\n }\n } else {\n const spinner = ora('Executing agent...').start()\n\n try {\n const result = await client.post<Record<string, unknown>>(`/agents/${id}/execute`, {\n ...payload,\n streamResponse: false,\n })\n spinner.succeed('Execution complete')\n\n if (options.json) {\n printJson(result)\n } else {\n printJson(result)\n }\n } catch (error) {\n spinner.fail('Execution failed')\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\n process.exit(1)\n }\n }\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport {\n RuntypeClient,\n evaluateGeneratedRuntimeToolProposal,\n type RunTaskState,\n type AgentStreamCallbacks,\n type CreateToolRequest,\n type ExecuteToolRequest,\n type LocalToolDefinition,\n} from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { getApiUrl } from '../config/env'\nimport { printJson } from '../lib/output'\n\n// ─── Local state file helpers ───────────────────────────────────────\n\nfunction defaultStateDir(): string {\n return path.join(process.cwd(), '.runtype', 'tasks')\n}\n\nfunction stateFilePath(name: string, stateDir?: string): string {\n const dir = stateDir || defaultStateDir()\n const safeName = name.replace(/[^a-zA-Z0-9_-]/g, '_')\n return path.join(dir, `${safeName}.json`)\n}\n\nfunction loadState(filePath: string): RunTaskState | null {\n try {\n const raw = fs.readFileSync(filePath, 'utf-8')\n return JSON.parse(raw) as RunTaskState\n } catch {\n return null\n }\n}\n\nfunction saveState(filePath: string, state: RunTaskState): void {\n const dir = path.dirname(filePath)\n fs.mkdirSync(dir, { recursive: true })\n fs.writeFileSync(filePath, JSON.stringify(state, null, 2))\n}\n\ntype SandboxProviderOption = 'quickjs' | 'daytona'\ntype SandboxLanguageOption = 'javascript' | 'typescript' | 'python'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction parseSandboxProvider(value?: string): SandboxProviderOption | undefined {\n if (!value) return undefined\n const normalized = value.trim().toLowerCase()\n if (normalized === 'quickjs' || normalized === 'daytona') return normalized\n return undefined\n}\n\nfunction parseSandboxLanguage(\n provider: SandboxProviderOption,\n value: unknown\n): SandboxLanguageOption {\n if (provider === 'quickjs') return 'javascript'\n\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase()\n if (normalized === 'javascript' || normalized === 'typescript' || normalized === 'python') {\n return normalized\n }\n }\n return 'javascript'\n}\n\nfunction parseSandboxTimeout(value: unknown, provider: SandboxProviderOption): number {\n const fallback = provider === 'quickjs' ? 5000 : 30000\n\n let numericValue: number | undefined\n if (typeof value === 'number' && Number.isFinite(value)) {\n numericValue = value\n } else if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value)\n if (Number.isFinite(parsed)) {\n numericValue = parsed\n }\n }\n\n if (numericValue === undefined) return fallback\n return Math.max(1, Math.min(30000, Math.floor(numericValue)))\n}\n\nfunction parseDaytonaExecutionResult(value: unknown): unknown {\n if (typeof value !== 'string') return value\n\n const trimmed = value.trim()\n if (!trimmed) return ''\n\n try {\n return JSON.parse(trimmed)\n } catch {\n // If logs are present, try parsing the final non-empty line as JSON.\n const lines = trimmed\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean)\n const lastLine = lines[lines.length - 1]\n\n if (!lastLine) return value\n\n try {\n return JSON.parse(lastLine)\n } catch {\n return value\n }\n }\n}\n\nfunction createSandboxInstructions(provider: SandboxProviderOption): string {\n if (provider === 'quickjs') {\n return [\n '--- Sandbox Tooling (QuickJS) ---',\n 'You can execute JavaScript snippets with the local tool `run_sandbox_code`.',\n 'Call shape:',\n '{ \"code\": \"...\", \"parameters\": { ... }, \"timeoutMs\": 5000 }',\n 'QuickJS rules:',\n '1. Use JavaScript only (no TypeScript or Python).',\n '2. Inputs are passed in the `parameters` object (for example: `const x = parameters.x`).',\n '3. The snippet is wrapped in a function. Use top-level `return ...` to produce the result.',\n '4. Return JSON-serializable values (object, array, string, number, boolean, null).',\n '5. No Node/Bun/Deno APIs, imports/require, process, filesystem, or network calls.',\n 'Example:',\n 'const nums = parameters.nums || []',\n 'const sum = nums.reduce((acc, n) => acc + n, 0)',\n 'return { sum, count: nums.length }',\n ].join('\\n')\n }\n\n return [\n '--- Sandbox Tooling (Daytona) ---',\n 'You can execute code snippets with the local tool `run_sandbox_code`.',\n 'Call shape:',\n '{ \"code\": \"...\", \"parameters\": { ... }, \"language\": \"javascript|typescript|python\", \"timeoutMs\": 30000 }',\n 'Daytona rules:',\n '1. Choose one language: javascript, typescript, or python.',\n '2. Parameters are injected as top-level variables before your code (do not rely on `parameters`).',\n '3. Your snippet runs as a full program. Do not use top-level `return`.',\n '4. For structured results, write a single JSON value to stdout as the final output.',\n '5. JS/TS: `console.log(JSON.stringify({ ... }))`; Python: `import json` then `print(json.dumps({ ... }))`.',\n '6. Avoid extra logs before the final JSON line, or parsing may fail.',\n ].join('\\n')\n}\n\nfunction buildResumeCommand(\n agent: string,\n message: string,\n options: Pick<TaskOptions, 'name' | 'sandbox'>,\n parsedSandbox: SandboxProviderOption | undefined\n): string {\n const nameFlag = options.name ? ` --name ${options.name}` : ''\n const sandboxFlag = parsedSandbox ? ` --sandbox ${parsedSandbox}` : ''\n return `runtype marathon ${agent} -m \"${message}\" --resume${nameFlag}${sandboxFlag}`\n}\n\nfunction createSandboxLocalTool(\n client: RuntypeClient,\n provider: SandboxProviderOption,\n debugMode?: boolean\n): LocalToolDefinition {\n return {\n description:\n provider === 'quickjs'\n ? 'Execute JavaScript code in QuickJS sandbox. Inputs are passed via parameters object.'\n : 'Execute JavaScript/TypeScript/Python code in Daytona sandbox. Inputs are injected as top-level variables.',\n parametersSchema: {\n type: 'object',\n properties: {\n code: { type: 'string', description: 'Code snippet to execute' },\n parameters: {\n type: 'object',\n description: 'Input parameters for the code (JSON object)',\n },\n language: {\n type: 'string',\n enum: provider === 'quickjs' ? ['javascript'] : ['javascript', 'typescript', 'python'],\n description:\n provider === 'quickjs'\n ? 'QuickJS only accepts javascript'\n : 'Daytona code language',\n },\n timeoutMs: { type: 'number', description: 'Execution timeout in ms (max 30000)' },\n },\n required: ['code'],\n },\n execute: async (args) => {\n const rawCode = args.code\n const code = typeof rawCode === 'string' ? rawCode : ''\n if (!code.trim()) {\n return { success: false, error: 'code is required' }\n }\n\n const language = parseSandboxLanguage(provider, args.language)\n const timeout = parseSandboxTimeout(args.timeoutMs, provider)\n const parameters = isRecord(args.parameters) ? args.parameters : {}\n\n // Reuse SDK gate policy to block dangerous generated snippets before execution.\n const gateDecision = evaluateGeneratedRuntimeToolProposal(\n {\n name: 'run_sandbox_code',\n description: `Execute code in ${provider}`,\n toolType: 'custom',\n parametersSchema: { type: 'object' },\n config: {\n code,\n timeout,\n sandboxProvider: provider,\n language,\n },\n },\n {\n allowedToolTypes: ['custom'],\n allowedSandboxProviders: [provider],\n allowedLanguages: provider === 'quickjs' ? ['javascript'] : ['javascript', 'typescript', 'python'],\n maxTimeoutMs: 30000,\n maxCodeLength: 12000,\n }\n )\n\n if (!gateDecision.approved) {\n return {\n success: false,\n error: gateDecision.reason,\n violations: gateDecision.violations,\n }\n }\n\n const tempToolName = `marathon_${provider}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`\n let tempToolId: string | undefined\n\n try {\n const createRequest: CreateToolRequest = {\n name: tempToolName,\n description: `Ephemeral ${provider} sandbox execution`,\n toolType: 'custom',\n parametersSchema: { type: 'object', properties: {} },\n config: {\n code,\n timeout,\n allowedApis: [],\n sandboxProvider: provider,\n language,\n } as unknown as CreateToolRequest['config'],\n }\n\n const created = await client.tools.create(createRequest)\n\n tempToolId = created.id\n\n const executeRequest: ExecuteToolRequest = {\n toolId: created.id,\n parameters: parameters as unknown as ExecuteToolRequest['parameters'],\n }\n const execution = await client.tools.execute(created.id, executeRequest)\n const parsedResult =\n provider === 'daytona'\n ? parseDaytonaExecutionResult(execution.result)\n : execution.result\n\n return {\n success: execution.status === 'success',\n sandboxProvider: provider,\n language,\n result: parsedResult,\n executionId: execution.executionId,\n ...(execution.errorMessage ? { error: execution.errorMessage } : {}),\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (debugMode) {\n console.log(chalk.gray(` [sandbox:${provider}] execution error: ${message}`))\n }\n return {\n success: false,\n sandboxProvider: provider,\n language,\n error: message,\n }\n } finally {\n if (tempToolId) {\n try {\n await client.tools.delete(tempToolId)\n } catch {\n // Best effort cleanup for ephemeral tools\n }\n }\n }\n },\n }\n}\n\n// ─── Shared action ──────────────────────────────────────────────────\n\nexport interface TaskOptions {\n message: string\n maxSessions: string\n maxCost?: string\n model?: string\n name?: string\n stateDir?: string\n resume?: boolean\n track?: boolean\n debug?: boolean\n json?: boolean\n noLocalTools?: boolean\n sandbox?: string\n}\n\nexport async function taskAction(agent: string, options: TaskOptions): Promise<void> {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new RuntypeClient({\n apiKey,\n baseUrl: getApiUrl(),\n })\n\n const parsedSandbox = parseSandboxProvider(options.sandbox)\n if (options.sandbox && !parsedSandbox) {\n console.error(chalk.red(`Invalid --sandbox value \"${options.sandbox}\". Use: quickjs or daytona`))\n process.exit(1)\n }\n\n // Resolve agent — accept ID or name, auto-create if not found\n let agentId = agent\n if (!agent.startsWith('agent_')) {\n const spinner = ora('Looking up agent by name...').start()\n try {\n const list = await client.agents.list()\n const found = list.data.find(\n (a: { name: string }) => a.name.toLowerCase() === agent.toLowerCase()\n )\n if (found) {\n agentId = found.id\n spinner.succeed(`Found agent: ${chalk.green(agentId)}`)\n } else {\n spinner.text = `Creating agent \"${agent}\"...`\n try {\n const created = await client.agents.create({ name: agent })\n agentId = created.id\n spinner.succeed(`Created agent: ${chalk.green(agentId)}`)\n } catch (createErr) {\n spinner.fail(`Failed to create agent \"${agent}\"`)\n const errMsg = createErr instanceof Error ? createErr.message : String(createErr)\n console.error(chalk.red(errMsg))\n process.exit(1)\n }\n }\n } catch (error) {\n spinner.fail('Failed to list agents')\n const errMsg = error instanceof Error ? error.message : String(error)\n console.error(chalk.red(errMsg))\n process.exit(1)\n }\n }\n\n const taskName = options.name || agentId\n const filePath = stateFilePath(taskName, options.stateDir)\n const maxSessions = parseInt(options.maxSessions, 10)\n const maxCost = options.maxCost ? parseFloat(options.maxCost) : undefined\n\n // Handle resume — adjust remaining budget/sessions\n let priorSessionCount = 0\n let priorCost = 0\n\n if (options.resume) {\n const existing = loadState(filePath)\n if (!existing) {\n console.error(chalk.red(`No state file found at ${filePath}`))\n console.log(chalk.gray(' Run without --resume to start a new task.'))\n process.exit(1)\n }\n if (existing.status === 'complete') {\n console.log(chalk.yellow('This task already completed.'))\n if (options.json) printJson(existing)\n return\n }\n priorSessionCount = existing.sessionCount\n priorCost = existing.totalCost\n console.log(\n chalk.cyan(\n `Resuming from session ${priorSessionCount} ($${priorCost.toFixed(4)} spent)`\n )\n )\n }\n\n // Handle Ctrl+C — save last known state as paused\n let lastKnownState: RunTaskState | null = null\n let interrupted = false\n const onSigint = () => {\n if (interrupted) process.exit(1)\n interrupted = true\n console.log(chalk.yellow('\\n\\nInterrupted — saving state...'))\n if (lastKnownState) {\n lastKnownState.status = 'paused'\n saveState(filePath, lastKnownState)\n console.log(chalk.green(`State saved to ${filePath}`))\n }\n console.log(\n chalk.gray(\n ` Resume with: ${buildResumeCommand(agent, options.message, options, parsedSandbox)}`\n )\n )\n process.exit(0)\n }\n process.on('SIGINT', onSigint)\n\n // Print banner\n const remainingSessions = maxSessions - priorSessionCount\n const remainingCost = maxCost ? maxCost - priorCost : undefined\n const sandboxPrompt = parsedSandbox ? createSandboxInstructions(parsedSandbox) : ''\n const taskMessage = sandboxPrompt ? `${options.message}\\n\\n${sandboxPrompt}` : options.message\n\n console.log(chalk.cyan(`\\nRunning task \"${taskName}\" on ${agentId}`))\n console.log(\n chalk.gray(\n ` Sessions: ${priorSessionCount > 0 ? `${priorSessionCount} done, ` : ''}${remainingSessions} remaining${maxCost ? ` | Budget: $${maxCost.toFixed(2)}` : ''}${options.model ? ` | Model: ${options.model}` : ''}${parsedSandbox ? ` | Sandbox: ${parsedSandbox}` : ''}`\n )\n )\n console.log(chalk.gray(` State: ${filePath}\\n`))\n\n try {\n // Build stream callbacks — write turn deltas to stdout in real time\n let currentSession = priorSessionCount\n let thinkingSpinner: ReturnType<typeof ora> | null = null\n let thinkingChars = 0\n const streamCallbacks: AgentStreamCallbacks = {\n onAgentStart: () => {\n currentSession++\n console.log(chalk.cyan(`\\n── Session ${currentSession} ──\\n`))\n thinkingChars = 0\n // Start a generic spinner — will be upgraded with token count if thinking deltas arrive\n thinkingSpinner = ora({ text: chalk.dim('Thinking...'), color: 'gray' }).start()\n },\n onTurnDelta: (event) => {\n if (event.contentType === 'text') {\n // Stop thinking spinner when text output begins\n if (thinkingSpinner) {\n thinkingSpinner.stop()\n thinkingSpinner = null\n }\n process.stdout.write(event.delta)\n } else if (event.contentType === 'thinking') {\n thinkingChars += event.delta.length\n const approxTokens = Math.round(thinkingChars / 4)\n const tokenStr = approxTokens.toLocaleString()\n if (!thinkingSpinner) {\n thinkingSpinner = ora({\n text: chalk.dim(`Thinking... (~${tokenStr} tokens)`),\n color: 'gray',\n }).start()\n } else {\n thinkingSpinner.text = chalk.dim(`Thinking... (~${tokenStr} tokens)`)\n }\n if (options.debug) {\n // In debug mode, also print the thinking content\n thinkingSpinner.stop()\n process.stdout.write(chalk.dim(event.delta))\n thinkingSpinner.start()\n }\n }\n },\n onToolStart: (event) => {\n if (thinkingSpinner) {\n thinkingSpinner.stop()\n thinkingSpinner = null\n }\n if (options.debug) {\n console.log(chalk.gray(`\\n [tool] ${event.toolName}...`))\n }\n },\n onToolComplete: (event) => {\n if (options.debug) {\n const status = event.success ? chalk.green('ok') : chalk.red('failed')\n console.log(chalk.gray(` [tool] ${event.toolName} → ${status}`))\n }\n },\n onAgentPaused: (event) => {\n if (thinkingSpinner) {\n thinkingSpinner.stop()\n thinkingSpinner = null\n }\n const rawParams: unknown = event.parameters\n const paramPreview =\n typeof rawParams === 'string'\n ? `string(${rawParams.length} chars)`\n : rawParams && typeof rawParams === 'object'\n ? `object(${Object.keys(rawParams as Record<string, unknown>).join(', ')})`\n : typeof rawParams\n console.log(\n chalk.cyan(\n `\\n [local tool] ${event.toolName} called (params: ${paramPreview})`\n )\n )\n if (options.debug) {\n console.log(chalk.gray(` executionId: ${event.executionId}`))\n console.log(chalk.gray(` raw params: ${JSON.stringify(event.parameters).slice(0, 300)}`))\n }\n },\n onError: (event) => {\n if (thinkingSpinner) {\n thinkingSpinner.stop()\n thinkingSpinner = null\n }\n console.error(chalk.red(`\\n Error: ${event.error}`))\n },\n }\n\n // Built-in local tools for filesystem operations\n // @snake-case-ok-start: Tool name identifiers use snake_case to match agent tool definitions\n const defaultLocalTools: Record<string, LocalToolDefinition> = {\n read_file: {\n description: 'Read the contents of a file at the given path',\n parametersSchema: {\n type: 'object',\n properties: { path: { type: 'string', description: 'File path to read' } },\n required: ['path'],\n },\n execute: async (args) => {\n const filePath = String(args.path || '')\n if (!filePath) return 'Error: path is required'\n return fs.readFileSync(filePath, 'utf-8')\n },\n },\n write_file: {\n description: 'Write content to a file, creating directories as needed',\n parametersSchema: {\n type: 'object',\n properties: {\n path: { type: 'string', description: 'File path to write' },\n content: { type: 'string', description: 'Content to write' },\n },\n required: ['path', 'content'],\n },\n execute: async (args) => {\n const filePath = String(args.path || '')\n if (!filePath) return 'Error: path is required'\n const content = String(args.content || '')\n const dir = path.dirname(filePath)\n fs.mkdirSync(dir, { recursive: true })\n fs.writeFileSync(filePath, content)\n return 'ok'\n },\n },\n list_directory: {\n description: 'List files and directories at the given path',\n parametersSchema: {\n type: 'object',\n properties: { path: { type: 'string', description: 'Directory path (defaults to \".\")' } },\n },\n execute: async (args) => {\n const dirPath = String(args.path || '.')\n return fs.readdirSync(dirPath).join('\\n')\n },\n },\n }\n // @snake-case-ok-end\n\n const enabledLocalTools: Record<string, LocalToolDefinition> = {}\n if (!options.noLocalTools) {\n Object.assign(enabledLocalTools, defaultLocalTools)\n }\n if (parsedSandbox) {\n enabledLocalTools.run_sandbox_code = createSandboxLocalTool(\n client,\n parsedSandbox,\n options.debug\n )\n }\n const localTools = Object.keys(enabledLocalTools).length > 0 ? enabledLocalTools : undefined\n\n const result = await client.agents.runTask(agentId, {\n message: taskMessage,\n maxSessions: remainingSessions,\n maxCost: remainingCost,\n model: options.model,\n debugMode: options.debug,\n stream: true,\n streamCallbacks,\n localTools,\n trackProgress: options.track ? taskName : undefined,\n onSession: (state): void | false => {\n // Adjust counts to include prior sessions for display\n const adjustedState: RunTaskState = {\n ...state,\n sessionCount: priorSessionCount + state.sessionCount,\n totalCost: priorCost + state.totalCost,\n }\n lastKnownState = adjustedState\n saveState(filePath, adjustedState)\n\n // Print session summary line\n const latest = state.sessions[state.sessions.length - 1]\n if (latest) {\n const total = adjustedState.sessionCount\n const costStr = chalk.yellow(`$${adjustedState.totalCost.toFixed(4)}`)\n const reasonColor =\n latest.stopReason === 'complete'\n ? chalk.green\n : latest.stopReason === 'error'\n ? chalk.red\n : chalk.gray\n console.log(\n `\\n ${chalk.dim(`[${total}/${maxSessions}]`)} ${reasonColor(latest.stopReason)} | total: ${costStr}`\n )\n }\n\n // Stop if interrupted\n if (interrupted) return false\n },\n })\n\n // Build final state\n const finalState: RunTaskState = {\n agentId,\n agentName: result.sessions[0]?.stopReason ? agentId : agentId,\n taskName,\n status: result.status,\n sessionCount: priorSessionCount + result.sessionCount,\n totalCost: priorCost + result.totalCost,\n lastOutput: result.lastOutput,\n lastStopReason: result.sessions[result.sessions.length - 1]?.stopReason || 'complete',\n sessions: result.sessions,\n startedAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n saveState(filePath, finalState)\n\n process.removeListener('SIGINT', onSigint)\n\n // Print summary\n console.log()\n const statusColor =\n result.status === 'complete'\n ? chalk.green\n : result.status === 'budget_exceeded'\n ? chalk.red\n : chalk.yellow\n console.log(`Status: ${statusColor(result.status)}`)\n console.log(`Sessions: ${finalState.sessionCount}`)\n console.log(`Total cost: ${chalk.yellow(`$${finalState.totalCost.toFixed(4)}`)}`)\n console.log(`State: ${chalk.gray(filePath)}`)\n\n if (result.recordId) {\n console.log(`Record: ${chalk.gray(result.recordId)}`)\n }\n\n if (result.status === 'paused' || result.status === 'max_sessions') {\n console.log(\n chalk.gray(\n `\\nResume: ${buildResumeCommand(agent, options.message, options, parsedSandbox)}`\n )\n )\n }\n\n if (options.json) {\n console.log()\n printJson(finalState)\n }\n } catch (error) {\n // lastKnownState is set inside onSession callback — TS can't track closures\n const stateAtError = lastKnownState as RunTaskState | null\n if (stateAtError) {\n stateAtError.status = 'paused'\n saveState(filePath, stateAtError)\n }\n process.removeListener('SIGINT', onSigint)\n\n const errMsg = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`\\nTask failed: ${errMsg}`))\n console.log(chalk.gray(`State saved to ${filePath} — resume with --resume`))\n process.exit(1)\n }\n}\n\n// ─── Task options applied to a Command ──────────────────────────────\n\nfunction applyTaskOptions(cmd: Command): Command {\n return cmd\n .argument('<agent>', 'Agent ID or name')\n .requiredOption('-m, --message <text>', 'Task message for the agent')\n .option('--max-sessions <n>', 'Maximum sessions', '50')\n .option('--max-cost <n>', 'Budget in USD')\n .option('--model <modelId>', 'Model ID to use (overrides agent config)')\n .option('--name <name>', 'Task name (used for state file, defaults to agent name)')\n .option('--state-dir <path>', 'Directory for state files (default: .runtype/tasks/)')\n .option('--resume', 'Resume from existing local state')\n .option('--track', 'Sync progress to a Runtype record (visible in dashboard)')\n .option('--debug', 'Show debug output from each session')\n .option('--json', 'Output final result as JSON')\n .option('--sandbox <provider>', 'Enable sandbox code execution tool (quickjs or daytona)')\n .option('--no-local-tools', 'Disable built-in local tool execution (read_file, write_file, list_directory)')\n .action(taskAction)\n}\n\n// ─── Subcommand: `runtype agents task` ──────────────────────────────\n\nexport const taskCommand = applyTaskOptions(\n new Command('task').description('Run a multi-session agent task')\n)\n\n// ─── Top-level alias: `runtype marathon` ────────────────────────────\n\nexport function createMarathonCommand(): Command {\n return applyTaskOptions(\n new Command('marathon').description('Run a multi-session agent task (alias for agents task)')\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, type PaginatedResponse, getTotalCount } from '../lib/output'\n\ninterface ModelConfig {\n id: string\n modelId: string\n provider?: string\n isDefault?: boolean\n enabled?: boolean\n displayName?: string\n}\n\ninterface GroupedModel {\n baseModel: string\n provider: string\n variants: Array<{\n modelId: string\n displayName: string\n configured?: boolean\n }>\n}\n\nexport const modelsCommand = new Command('models').description('Manage model configurations')\n\nmodelsCommand\n .command('list')\n .description('List your enabled model configurations')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching model configurations...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<PaginatedResponse<ModelConfig>>('/model-configs')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const models = data.data ?? []\n if (models.length === 0) {\n console.log(chalk.gray('No model configurations found'))\n return\n }\n\n console.log(chalk.cyan('Your Models:'))\n for (const model of models) {\n const defaultTag = model.isDefault ? chalk.yellow(' (default)') : ''\n const statusTag = model.enabled === false ? chalk.red(' [disabled]') : ''\n console.log(` ${chalk.green(model.id)} ${model.modelId}${defaultTag}${statusTag}`)\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} models`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch models')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nmodelsCommand\n .command('available')\n .description('List all available models grouped by provider')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching available models...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<{ data?: GroupedModel[] }>('/model-configs/grouped')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const groups = data.data ?? []\n if (groups.length === 0) {\n console.log(chalk.gray('No models available'))\n return\n }\n\n console.log(chalk.cyan('Available Models:'))\n for (const group of groups) {\n console.log(`\\n ${chalk.blue(group.provider)} / ${chalk.green(group.baseModel)}`)\n for (const variant of group.variants) {\n const configuredTag = variant.configured ? chalk.green(' [configured]') : ''\n console.log(` ${variant.modelId}${configuredTag}`)\n }\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch available models')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nmodelsCommand\n .command('enable <modelId>')\n .description('Enable a model by creating a configuration')\n .option('--json', 'Output as JSON')\n .action(async (modelId: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora(`Enabling model ${modelId}...`).start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<ModelConfig>('/model-configs', { modelId })\n spinner.succeed('Model enabled')\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(` Config ID: ${chalk.green(data.id)}`)\n console.log(` Model: ${data.modelId}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to enable model')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nmodelsCommand\n .command('disable <id>')\n .description('Disable a model configuration')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Disabling model...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.patch(`/model-configs/${id}/status`, { enabled: false })\n spinner.succeed('Model disabled')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to disable model')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nmodelsCommand\n .command('default <id>')\n .description('Set a model configuration as default')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Setting default model...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.patch(`/model-configs/${id}/default`, {})\n spinner.succeed('Default model updated')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to set default model')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nmodelsCommand\n .command('usage')\n .description('Show model usage statistics')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching model usage...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<Record<string, unknown>>('/model-configs/usage')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printJson(data)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch model usage')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\n\ninterface Schedule {\n id: string\n name?: string\n flowId: string\n cronExpression?: string\n status?: string\n nextRunAt?: string\n lastRunAt?: string\n}\n\nexport const schedulesCommand = new Command('schedules').description('Manage schedules')\n\nschedulesCommand\n .command('list')\n .description('List all schedules')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching schedules...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<PaginatedResponse<Schedule>>('/schedules')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const schedules = data.data ?? []\n if (schedules.length === 0) {\n console.log(chalk.gray('No schedules found'))\n return\n }\n\n console.log(chalk.cyan('Your Schedules:'))\n for (const s of schedules) {\n const name = s.name || s.id\n const statusColor = s.status === 'active' ? 'green' : 'yellow'\n const statusTag = s.status ? chalk[statusColor](` [${s.status}]`) : ''\n console.log(` ${chalk.green(s.id)} ${name}${statusTag}`)\n console.log(` Flow: ${chalk.gray(s.flowId)}`)\n if (s.cronExpression) {\n console.log(` Cron: ${chalk.gray(s.cronExpression)}`)\n }\n if (s.nextRunAt) {\n console.log(` Next run: ${chalk.gray(s.nextRunAt)}`)\n }\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} schedules`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch schedules')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nschedulesCommand\n .command('get <id>')\n .description('Get schedule details')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching schedule...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<Schedule>(`/schedules/${id}`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Schedule', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Flow ID', value: data.flowId },\n { label: 'Cron', value: data.cronExpression },\n { label: 'Status', value: data.status },\n { label: 'Next run', value: data.nextRunAt },\n { label: 'Last run', value: data.lastRunAt },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch schedule')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nschedulesCommand\n .command('create')\n .description('Create a new schedule')\n .requiredOption('-f, --flow <id>', 'Flow ID to schedule')\n .requiredOption('-c, --cron <expression>', 'Cron expression (e.g. \"0 9 * * *\")')\n .option('-n, --name <name>', 'Schedule name')\n .option('--json', 'Output as JSON')\n .action(async (options: { flow: string; cron: string; name?: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Creating schedule...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<Schedule>('/schedules', {\n flowId: options.flow,\n cronExpression: options.cron,\n name: options.name,\n })\n spinner.succeed('Schedule created')\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(` ID: ${chalk.green(data.id)}`)\n if (data.name) console.log(` Name: ${data.name}`)\n console.log(` Cron: ${data.cronExpression}`)\n if (data.nextRunAt) console.log(` Next run: ${data.nextRunAt}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to create schedule')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nschedulesCommand\n .command('pause <id>')\n .description('Pause a schedule')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Pausing schedule...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.post(`/schedules/${id}/pause`)\n spinner.succeed('Schedule paused')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to pause schedule')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nschedulesCommand\n .command('resume <id>')\n .description('Resume a paused schedule')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Resuming schedule...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.post(`/schedules/${id}/resume`)\n spinner.succeed('Schedule resumed')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to resume schedule')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nschedulesCommand\n .command('run-now <id>')\n .description('Trigger a schedule to run immediately')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Triggering schedule...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.post(`/schedules/${id}/run-now`)\n spinner.succeed('Schedule triggered')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to trigger schedule')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nschedulesCommand\n .command('delete <id>')\n .description('Delete a schedule')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Deleting schedule...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.delete(`/schedules/${id}`)\n spinner.succeed('Schedule deleted')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to delete schedule')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { readFileSync } from 'fs'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, type PaginatedResponse, getTotalCount } from '../lib/output'\n\ninterface EvalBatch {\n id: string\n name?: string\n flowId: string\n status?: string\n totalRecords?: number\n completedRecords?: number\n createdAt?: string\n groupId?: string\n}\n\ninterface EvalResult {\n recordId: string\n status: string\n score?: number\n output?: unknown\n}\n\nexport const evalCommand = new Command('eval').description('Manage evaluations')\n\nevalCommand\n .command('submit')\n .description('Submit an eval batch')\n .requiredOption('-f, --flow <id>', 'Flow ID to evaluate')\n .requiredOption('-r, --records <file>', 'JSON file with record IDs')\n .option('-n, --name <name>', 'Eval batch name')\n .option('--json', 'Output as JSON')\n .action(async (options: { flow: string; records: string; name?: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n let recordIds: string[]\n try {\n const content = readFileSync(options.records, 'utf-8')\n const parsed = JSON.parse(content)\n recordIds = Array.isArray(parsed) ? parsed : parsed.recordIds || parsed.records || []\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to read records file: ${message}`))\n process.exit(1)\n return\n }\n\n const spinner = ora(`Submitting eval with ${recordIds.length} records...`).start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<EvalBatch>('/eval/submit', {\n flowId: options.flow,\n recordIds,\n name: options.name,\n })\n spinner.succeed('Eval submitted')\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(` Batch ID: ${chalk.green(data.id)}`)\n if (data.name) console.log(` Name: ${data.name}`)\n console.log(` Status: ${data.status}`)\n console.log(` Records: ${data.totalRecords}`)\n if (data.groupId) console.log(` Group: ${data.groupId}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to submit eval')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nevalCommand\n .command('list')\n .description('List eval batches')\n .option('--flow <id>', 'Filter by flow ID')\n .option('--limit <n>', 'Limit results', '20')\n .option('--json', 'Output as JSON')\n .action(async (options: { flow?: string; limit: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching eval batches...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const params: Record<string, string> = { limit: options.limit }\n if (options.flow) params.flowId = options.flow\n\n const data = await client.get<PaginatedResponse<EvalBatch>>('/eval/batches', params)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const batches = data.data ?? []\n if (batches.length === 0) {\n console.log(chalk.gray('No eval batches found'))\n return\n }\n\n console.log(chalk.cyan('Eval Batches:'))\n for (const batch of batches) {\n const name = batch.name || batch.id\n const progress = batch.totalRecords\n ? `${batch.completedRecords ?? 0}/${batch.totalRecords}`\n : ''\n const statusColor = batch.status === 'completed' ? 'green' : 'yellow'\n console.log(\n ` ${chalk.green(batch.id)} ${name} ${chalk[statusColor](`[${batch.status}]`)} ${chalk.gray(progress)}`\n )\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} batches`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch eval batches')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nevalCommand\n .command('results <id>')\n .description('Get eval batch results')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching eval results...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<{ data?: EvalResult[]; batch?: EvalBatch }>(`/eval/${id}/results`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n if (data.batch) {\n console.log(chalk.cyan(`Eval: ${data.batch.name || data.batch.id}`))\n console.log(` Status: ${data.batch.status}`)\n console.log(` Progress: ${data.batch.completedRecords ?? 0}/${data.batch.totalRecords ?? 0}`)\n console.log()\n }\n\n const results = data.data ?? []\n if (results.length === 0) {\n console.log(chalk.gray('No results yet'))\n return\n }\n\n console.log(chalk.cyan('Results:'))\n for (const result of results) {\n const scoreStr = result.score !== undefined ? chalk.blue(` score=${result.score}`) : ''\n const statusColor = result.status === 'completed' ? 'green' : 'red'\n console.log(\n ` ${chalk.gray(result.recordId)} ${chalk[statusColor](`[${result.status}]`)}${scoreStr}`\n )\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch eval results')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nevalCommand\n .command('compare <groupId>')\n .description('Compare evals in a group')\n .option('--json', 'Output as JSON')\n .action(async (groupId: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Comparing evals...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<Record<string, unknown>>('/eval/compare', { groupId })\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printJson(data)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to compare evals')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\n\ninterface ApiKeyEntry {\n id: string\n name: string\n prefix?: string\n scopes?: string[]\n lastUsedAt?: string\n createdAt?: string\n}\n\nexport const apiKeysCommand = new Command('api-keys').description('Manage API keys')\n\napiKeysCommand\n .command('list')\n .description('List your API keys')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching API keys...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<PaginatedResponse<ApiKeyEntry>>('/api-keys')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const keys = data.data ?? []\n if (keys.length === 0) {\n console.log(chalk.gray('No API keys found'))\n return\n }\n\n console.log(chalk.cyan('Your API Keys:'))\n for (const key of keys) {\n const prefix = key.prefix ? chalk.gray(` (${key.prefix}...)`) : ''\n const lastUsed = key.lastUsedAt ? chalk.gray(` last used: ${key.lastUsedAt}`) : ''\n console.log(` ${chalk.green(key.id)} ${key.name}${prefix}${lastUsed}`)\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} keys`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch API keys')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\napiKeysCommand\n .command('get <id>')\n .description('Get API key details')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching API key...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<ApiKeyEntry>(`/api-keys/${id}`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('API Key', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Prefix', value: data.prefix },\n { label: 'Scopes', value: data.scopes?.join(', ') },\n { label: 'Last used', value: data.lastUsedAt },\n { label: 'Created', value: data.createdAt },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch API key')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\napiKeysCommand\n .command('create')\n .description('Create a new API key')\n .requiredOption('-n, --name <name>', 'Key name')\n .option('--json', 'Output as JSON')\n .action(async (options: { name: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Creating API key...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<ApiKeyEntry & { key?: string }>('/api-keys', {\n name: options.name,\n })\n spinner.succeed('API key created')\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(` ID: ${chalk.green(data.id)}`)\n console.log(` Name: ${data.name}`)\n if (data.key) {\n console.log(` Key: ${chalk.yellow(data.key)}`)\n console.log(chalk.gray(' Save this key - it will not be shown again'))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to create API key')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\napiKeysCommand\n .command('delete <id>')\n .description('Delete an API key')\n .action(async (id: string) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Deleting API key...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.delete(`/api-keys/${id}`)\n spinner.succeed('API key deleted')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to delete API key')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\napiKeysCommand\n .command('regenerate <id>')\n .description('Regenerate an API key')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Regenerating API key...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<ApiKeyEntry & { key?: string }>(`/api-keys/${id}/regenerate`)\n spinner.succeed('API key regenerated')\n\n if (options.json) {\n printJson(data)\n } else {\n if (data.key) {\n console.log(` New Key: ${chalk.yellow(data.key)}`)\n console.log(chalk.gray(' Save this key - it will not be shown again'))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to regenerate API key')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\napiKeysCommand\n .command('analytics')\n .description('Show API key usage analytics')\n .option('--key <id>', 'Specific key ID (defaults to all keys)')\n .option('--json', 'Output as JSON')\n .action(async (options: { key?: string; json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching analytics...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const path = options.key ? `/api-keys/${options.key}/analytics` : '/api-keys/analytics'\n const data = await client.get<Record<string, unknown>>(path)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printJson(data)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch analytics')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\n\ninterface AnalyticsStats {\n records?: number\n prompts?: number\n flows?: number\n executions?: number\n [key: string]: unknown\n}\n\ninterface RecordResult {\n id: string\n recordId: string\n flowId: string\n status: string\n createdAt?: string\n [key: string]: unknown\n}\n\nexport const analyticsCommand = new Command('analytics').description('View analytics and execution results')\n\nanalyticsCommand\n .command('stats')\n .description('Show account statistics')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching stats...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<AnalyticsStats>('/analytics/stats')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Account Statistics', [\n { label: 'Flows', value: data.flows },\n { label: 'Prompts', value: data.prompts },\n { label: 'Records', value: data.records },\n { label: 'Executions', value: data.executions },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch stats')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nanalyticsCommand\n .command('results')\n .description('List execution results')\n .option('--flow <id>', 'Filter by flow ID')\n .option('--record <id>', 'Filter by record ID')\n .option('--status <status>', 'Filter by status')\n .option('--limit <n>', 'Limit results', '20')\n .option('--json', 'Output as JSON')\n .action(\n async (options: {\n flow?: string\n record?: string\n status?: string\n limit: string\n json?: boolean\n }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching results...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const params: Record<string, string> = { limit: options.limit }\n if (options.flow) params.flowId = options.flow\n if (options.record) params.recordId = options.record\n if (options.status) params.status = options.status\n\n const data = await client.get<PaginatedResponse<RecordResult>>(\n '/analytics/record-results',\n params\n )\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const results = data.data ?? []\n if (results.length === 0) {\n console.log(chalk.gray('No results found'))\n return\n }\n\n console.log(chalk.cyan('Execution Results:'))\n for (const result of results) {\n const statusColor = result.status === 'completed' ? 'green' : 'red'\n const date = result.createdAt ? chalk.gray(` ${result.createdAt}`) : ''\n console.log(\n ` ${chalk.green(result.id)} ${chalk[statusColor](`[${result.status}]`)} flow=${chalk.gray(result.flowId)} record=${chalk.gray(result.recordId)}${date}`\n )\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} results`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch results')\n console.error(chalk.red(message))\n process.exit(1)\n }\n }\n )\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport open from 'open'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail } from '../lib/output'\n\ninterface BillingStatus {\n plan?: string\n planName?: string\n status?: string\n currentPeriodStart?: string\n currentPeriodEnd?: string\n usage?: {\n executionsUsed?: number\n executionsLimit?: number\n [key: string]: unknown\n }\n limits?: {\n dailyLimit?: number\n monthlyLimit?: number\n rateLimit?: string\n [key: string]: unknown\n }\n [key: string]: unknown\n}\n\nexport const billingCommand = new Command('billing').description('View billing and subscription info')\n\nbillingCommand\n .command('status')\n .description('Show current plan and usage')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching billing status...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<BillingStatus>('/billing/status')\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Billing Status', [\n { label: 'Plan', value: data.planName || data.plan },\n { label: 'Status', value: data.status },\n { label: 'Period start', value: data.currentPeriodStart },\n { label: 'Period end', value: data.currentPeriodEnd },\n ])\n\n if (data.usage) {\n console.log()\n const limit = data.usage.executionsLimit\n const used = data.usage.executionsUsed ?? 0\n const limitStr = limit ? `/${limit}` : ''\n printDetail('Usage', [\n { label: 'Executions', value: `${used}${limitStr}` },\n ])\n }\n\n if (data.limits) {\n console.log()\n printDetail('Limits', [\n { label: 'Daily', value: data.limits.dailyLimit },\n { label: 'Monthly', value: data.limits.monthlyLimit },\n { label: 'Rate limit', value: data.limits.rateLimit },\n ])\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch billing status')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nbillingCommand\n .command('portal')\n .description('Open the billing portal in your browser')\n .action(async () => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Generating portal link...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.post<{ url?: string }>('/billing/portal')\n spinner.stop()\n\n if (data.url) {\n console.log(chalk.cyan('Opening billing portal...'))\n await open(data.url)\n } else {\n console.log(chalk.yellow('No portal URL returned. You may need to set up billing first.'))\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to open billing portal')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nbillingCommand\n .command('refresh')\n .description('Refresh plan data from billing provider')\n .action(async () => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Refreshing plan data...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.post('/billing/refresh')\n spinner.succeed('Plan data refreshed')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to refresh plan data')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail } from '../lib/output'\n\ninterface FlowVersion {\n id: string\n flowId: string\n version?: number\n status?: string\n published?: boolean\n createdAt?: string\n steps?: unknown[]\n}\n\nexport const flowVersionsCommand = new Command('flow-versions').description(\n 'Manage flow versions'\n)\n\nflowVersionsCommand\n .command('list <flowId>')\n .description('List all versions for a flow')\n .option('--json', 'Output as JSON')\n .action(async (flowId: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching versions...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<{ data?: FlowVersion[] }>(`/flow-versions/${flowId}`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n const versions = data.data ?? []\n if (versions.length === 0) {\n console.log(chalk.gray('No versions found'))\n return\n }\n\n console.log(chalk.cyan(`Versions for flow ${flowId}:`))\n for (const v of versions) {\n const publishedTag = v.published ? chalk.green(' [published]') : ''\n const versionNum = v.version !== undefined ? `v${v.version}` : v.id\n const date = v.createdAt ? chalk.gray(` ${v.createdAt}`) : ''\n console.log(` ${chalk.green(v.id)} ${versionNum}${publishedTag}${date}`)\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch versions')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nflowVersionsCommand\n .command('get <flowId> <versionId>')\n .description('Get a specific version')\n .option('--json', 'Output as JSON')\n .action(async (flowId: string, versionId: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching version...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<FlowVersion>(`/flow-versions/${flowId}/${versionId}`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Flow Version', [\n { label: 'ID', value: data.id },\n { label: 'Flow ID', value: data.flowId },\n { label: 'Version', value: data.version },\n { label: 'Published', value: data.published },\n { label: 'Created', value: data.createdAt },\n { label: 'Steps', value: data.steps?.length },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch version')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nflowVersionsCommand\n .command('published <flowId>')\n .description('Get the published version for a flow')\n .option('--json', 'Output as JSON')\n .action(async (flowId: string, options: { json?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Fetching published version...').start()\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<FlowVersion>(`/flow-versions/${flowId}/published`)\n spinner.stop()\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Published Version', [\n { label: 'ID', value: data.id },\n { label: 'Version', value: data.version },\n { label: 'Created', value: data.createdAt },\n { label: 'Steps', value: data.steps?.length },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to fetch published version')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n\nflowVersionsCommand\n .command('publish <flowId>')\n .description('Publish a version')\n .requiredOption('-v, --version <versionId>', 'Version ID to publish')\n .action(async (flowId: string, options: { version: string }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const spinner = ora('Publishing version...').start()\n\n try {\n const client = new ApiClient(apiKey)\n await client.post(`/flow-versions/${flowId}/publish`, {\n versionId: options.version,\n })\n spinner.succeed('Version published')\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.fail('Failed to publish version')\n console.error(chalk.red(message))\n process.exit(1)\n }\n })\n"],"mappings":"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","names":["Conf","import_crypto","path","os","fs","crypto","import_commander","import_chalk","import_fs","import_path","express","config","crypto","open","ora","chalk","spinner","import_commander","import_chalk","import_ora","import_fs","import_chalk","import_ora","import_chalk","readline","chalk","chalk","ora","path","import_chalk","chalk","ora","chalk","import_commander","import_chalk","import_ora","import_fs","ora","chalk","import_commander","import_chalk","import_ora","import_sdk","ora","chalk","import_commander","import_chalk","import_ora","import_fs","chalk","ora","import_commander","import_readline","import_chalk","import_path","import_os","uuidv4","path","os","fs","import_chalk","import_sdk","chalk","chalk","readline","apiUrl","import_commander","import_chalk","import_conf","import_path","import_os","Conf","path","os","chalk","import_commander","import_chalk","import_ora","import_open","chalk","ora","open","CredentialStore","import_commander","import_chalk","import_ora","chalk","ora","import_commander","import_chalk","import_ora","import_fs","import_sdk","chalk","ora","import_commander","import_chalk","import_ora","import_sdk","import_commander","import_chalk","import_ora","fs","path","import_sdk","chalk","ora","filePath","ora","chalk","import_commander","import_chalk","import_ora","ora","chalk","import_commander","import_chalk","import_ora","ora","chalk","import_commander","import_chalk","import_ora","import_fs","chalk","ora","import_commander","import_chalk","import_ora","ora","chalk","path","import_commander","import_chalk","import_ora","ora","chalk","import_commander","import_chalk","import_ora","import_open","ora","chalk","open","import_commander","import_chalk","import_ora","ora","chalk","chalk"]}
1
+ {"version":3,"sources":["../src/auth/credential-store.ts","../src/index.ts","../src/commands/auth.ts","../src/auth/oauth-manager.ts","../src/auth/callback-server.ts","../src/config/env.ts","../src/auth/api-key-manager.ts","../src/ink/shared/isTTY.ts","../src/ink/shared/EntityCard.tsx","../src/ink/shared/ConfirmPrompt.tsx","../src/ink/shared/DataList.tsx","../src/ink/shared/MutationResult.tsx","../src/commands/flows.ts","../src/lib/ensure-auth.ts","../src/lib/api-client.ts","../src/lib/output.ts","../src/commands/records.ts","../src/commands/prompts.ts","../src/commands/batch.ts","../src/commands/talk.ts","../src/chat/session-manager.ts","../src/ink/talk/TalkApp.tsx","../src/ink/talk/useTalkStream.ts","../src/ink/talk/MessageHistory.tsx","../src/ink/talk/MessageBubble.tsx","../src/ink/talk/useRelativeTime.ts","../src/ink/talk/StreamingBubble.tsx","../src/ink/talk/ChatInput.tsx","../src/ink/talk/SlashCommandMenu.tsx","../src/ink/talk/types.ts","../src/ink/talk/ModelPicker.tsx","../src/commands/config.ts","../src/commands/products.ts","../src/commands/init.ts","../src/ink/init/InitApp.tsx","../src/ink/init/WizardStep.tsx","../src/ink/init/StepSummary.tsx","../src/commands/dispatch.ts","../src/commands/agents.ts","../src/commands/agents-task.ts","../src/ink/marathon/MarathonApp.tsx","../src/ink/marathon/useMarathonStream.ts","../src/ink/marathon/SessionHeader.tsx","../src/ink/marathon/ThinkingIndicator.tsx","../src/ink/marathon/ToolPanel.tsx","../src/ink/marathon/ToolEntry.tsx","../src/ink/marathon/EventStreamPanel.tsx","../src/ink/marathon/SteeringPrompt.tsx","../src/ink/marathon/SteeringRecap.tsx","../src/ink/marathon/types.ts","../src/commands/models.ts","../src/commands/schedules.ts","../src/commands/eval.ts","../src/commands/api-keys.ts","../src/commands/analytics.ts","../src/commands/billing.ts","../src/commands/flow-versions.ts"],"sourcesContent":["import Conf from 'conf'\nimport crypto from 'crypto'\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\ninterface StoredCredentials {\n apiKey?: string\n userId?: string\n orgId?: string\n apiUrl?: string\n createdAt?: string\n lastUsed?: string\n [key: string]: string | undefined\n}\n\nconst CREDENTIALS_DIR = path.join(os.homedir(), '.runtype')\nconst CREDENTIALS_FILENAME = 'credentials.json'\nconst CREDENTIALS_PATH = path.join(CREDENTIALS_DIR, CREDENTIALS_FILENAME)\n\nfunction createConf(encryptionKey: string): Conf<StoredCredentials> {\n return new Conf<StoredCredentials>({\n projectName: 'runtype-cli',\n projectSuffix: '',\n configName: 'credentials',\n encryptionKey,\n cwd: CREDENTIALS_DIR,\n })\n}\n\nfunction isCorruptStoreError(error: unknown): boolean {\n if (error instanceof SyntaxError) return true\n const message = error instanceof Error ? error.message : String(error)\n return typeof message === 'string' && message.includes('JSON')\n}\n\nexport class CredentialStore {\n private config: Conf<StoredCredentials>\n private encryptionKey: string\n\n constructor() {\n this.encryptionKey = this.getMachineKey()\n\n try {\n this.config = createConf(this.encryptionKey)\n } catch (error) {\n if (isCorruptStoreError(error)) {\n try {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n fs.unlinkSync(CREDENTIALS_PATH)\n }\n } catch {\n // Ignore unlink errors\n }\n this.config = createConf(this.encryptionKey)\n } else {\n throw error\n }\n }\n }\n\n private getMachineKey(): string {\n // Generate a machine-specific key based on hostname and username\n const hostname = os.hostname()\n const username = os.userInfo().username\n return crypto\n .createHash('sha256')\n .update(`runtype-cli-${hostname}-${username}`)\n .digest('hex')\n .substring(0, 32)\n }\n\n async saveCredentials(credentials: {\n apiKey: string\n userId: string\n orgId?: string\n apiUrl?: string\n }): Promise<void> {\n const configData: StoredCredentials & {\n apiKey: string\n createdAt: string\n lastUsed: string\n } = {\n apiKey: this.encrypt(credentials.apiKey),\n userId: credentials.userId,\n createdAt: new Date().toISOString(),\n lastUsed: new Date().toISOString(),\n }\n\n // Only include orgId if it's not undefined\n if (credentials.orgId !== undefined) {\n configData.orgId = credentials.orgId\n }\n\n // Only include apiUrl if it's not undefined\n if (credentials.apiUrl !== undefined) {\n configData.apiUrl = credentials.apiUrl\n }\n\n this.config.set(configData)\n }\n\n async getApiKey(): Promise<string | null> {\n const encrypted = this.config.get('apiKey')\n if (!encrypted) return null\n\n // Update last used timestamp\n this.config.set('lastUsed', new Date().toISOString())\n\n return this.decrypt(encrypted)\n }\n\n async getCredentials(): Promise<StoredCredentials | null> {\n const stored = this.config.store\n if (!stored.apiKey) return null\n\n return {\n ...stored,\n apiKey: this.decrypt(stored.apiKey),\n }\n }\n\n async clearCredentials(): Promise<void> {\n this.config.clear()\n }\n\n async hasCredentials(): Promise<boolean> {\n return !!this.config.get('apiKey')\n }\n\n private encrypt(text: string): string {\n const algorithm = 'aes-256-cbc'\n const key = Buffer.from(this.encryptionKey)\n const iv = crypto.randomBytes(16)\n\n const cipher = crypto.createCipheriv(algorithm, key, iv)\n let encrypted = cipher.update(text, 'utf8', 'hex')\n encrypted += cipher.final('hex')\n\n return iv.toString('hex') + ':' + encrypted\n }\n\n private decrypt(text: string): string {\n const algorithm = 'aes-256-cbc'\n const key = Buffer.from(this.encryptionKey)\n const [ivHex, encrypted] = text.split(':')\n const iv = Buffer.from(ivHex, 'hex')\n\n const decipher = crypto.createDecipheriv(algorithm, key, iv)\n let decrypted = decipher.update(encrypted, 'hex', 'utf8')\n decrypted += decipher.final('utf8')\n\n return decrypted\n }\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { config } from 'dotenv'\nimport { readFileSync } from 'fs'\nimport { dirname, join } from 'path'\nimport { fileURLToPath } from 'url'\nimport { authCommand } from './commands/auth'\nimport { flowsCommand } from './commands/flows'\nimport { recordsCommand } from './commands/records'\nimport { promptsCommand } from './commands/prompts'\nimport { batchCommand } from './commands/batch'\nimport { talkCommand } from './commands/talk'\nimport { configCommand } from './commands/config'\nimport { productsCommand } from './commands/products'\nimport { initCommand } from './commands/init'\nimport { dispatchCommand } from './commands/dispatch'\nimport { agentsCommand } from './commands/agents'\nimport { modelsCommand } from './commands/models'\nimport { schedulesCommand } from './commands/schedules'\nimport { evalCommand } from './commands/eval'\nimport { apiKeysCommand } from './commands/api-keys'\nimport { analyticsCommand } from './commands/analytics'\nimport { billingCommand } from './commands/billing'\nimport { flowVersionsCommand } from './commands/flow-versions'\nimport { createMarathonCommand } from './commands/agents-task'\nimport { CredentialStore } from './auth/credential-store'\n\n// Load environment variables\nconfig()\n\n// Read version from package.json so it stays in sync with npm\nfunction getPackageVersion(): string {\n try {\n const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'))\n return pkg.version || '0.0.0'\n } catch {\n return '0.0.0'\n }\n}\n\nconst program = new Command()\n\nprogram\n .name('runtype')\n .description('CLI for Runtype AI Platform')\n .version(getPackageVersion())\n .option('-v, --verbose', 'Enable verbose output')\n .option('--api-url <url>', 'Override API URL')\n .option('--json', 'Output in JSON format')\n\n// Add commands\nprogram.addCommand(initCommand)\nprogram.addCommand(authCommand)\nprogram.addCommand(flowsCommand)\nprogram.addCommand(recordsCommand)\nprogram.addCommand(promptsCommand)\nprogram.addCommand(batchCommand)\nprogram.addCommand(talkCommand)\nprogram.addCommand(configCommand)\nprogram.addCommand(productsCommand)\nprogram.addCommand(dispatchCommand)\nprogram.addCommand(agentsCommand)\nprogram.addCommand(modelsCommand)\nprogram.addCommand(schedulesCommand)\nprogram.addCommand(evalCommand)\nprogram.addCommand(apiKeysCommand)\nprogram.addCommand(analyticsCommand)\nprogram.addCommand(billingCommand)\nprogram.addCommand(flowVersionsCommand)\nprogram.addCommand(createMarathonCommand())\n\n// Error handling\nprogram.exitOverride()\n\ntry {\n // Strip leading '--' that tsx watch injects when forwarding script args\n const userArgs = process.argv.slice(2)\n const cleanArgs = userArgs[0] === '--' ? userArgs.slice(1) : userArgs\n\n // If no arguments, check if first-time user and guide them\n if (!cleanArgs.length) {\n handleNoCommand()\n } else {\n program.parse(cleanArgs, { from: 'user' })\n }\n} catch (error: unknown) {\n const commanderError = error as { code?: string; message?: string }\n if (commanderError.code === 'commander.missingArgument') {\n console.error(chalk.red(`Error: ${commanderError.message}`))\n process.exit(1)\n } else if (commanderError.code === 'commander.unknownOption') {\n console.error(chalk.red(`Error: ${commanderError.message}`))\n process.exit(1)\n } else if (commanderError.code === 'commander.help' || commanderError.code === 'commander.version') {\n // Help or version was displayed, exit normally\n process.exit(0)\n } else {\n console.error(chalk.red('An unexpected error occurred:'))\n console.error(error)\n process.exit(1)\n }\n}\n\nasync function handleNoCommand(): Promise<void> {\n const store = new CredentialStore()\n const hasCredentials = await store.hasCredentials()\n\n if (!hasCredentials) {\n // First-time user: suggest init\n console.log(chalk.cyan('\\nWelcome to Runtype CLI!\\n'))\n console.log('It looks like this is your first time. Run the setup wizard:')\n console.log(` ${chalk.green('runtype init')}\\n`)\n console.log('Or see all available commands:')\n console.log(` ${chalk.green('runtype --help')}\\n`)\n } else {\n // Returning user: show help\n try {\n program.outputHelp()\n } catch (error: unknown) {\n const commanderError = error as { code?: string }\n if (commanderError.code === 'commander.help') {\n process.exit(0)\n } else {\n throw error\n }\n }\n }\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { OAuthManager } from '../auth/oauth-manager'\nimport { ApiKeyManager } from '../auth/api-key-manager'\nimport { CredentialStore } from '../auth/credential-store'\nimport { getApiUrl, getApiVersion, getDashboardUrl, getClerkPublishableKey } from '../config/env'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { MutationResult, EntityCard } from '../ink/shared/index.js'\n\nexport const authCommand = new Command('auth').description('Manage authentication')\n\nauthCommand\n .command('signup')\n .description('Create a new Runtype account')\n .option('--api-url <url>', 'Custom API URL')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { apiUrl?: string; dashboardUrl?: string; tty?: boolean; noTty?: boolean }) => {\n if (!isTTY(options)) {\n console.error(\n JSON.stringify(\n { status: 'error', error: 'Browser signup requires TTY mode. Use --api-key with auth login instead.' },\n null,\n 2\n )\n )\n process.exit(1)\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [loadingLabel, setLoadingLabel] = useState('Opening browser for authentication...')\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const oauth = new OAuthManager({\n clerkPublishableKey: getClerkPublishableKey(),\n dashboardUrl: options.dashboardUrl || getDashboardUrl(),\n })\n\n setLoadingLabel('Waiting for browser authentication...')\n const sessionToken = await oauth.authenticate('sign-up')\n\n setLoadingLabel('Creating API key...')\n const apiKeyManager = new ApiKeyManager()\n const { key, userId, orgId } = await apiKeyManager.exchangeSessionForApiKey(\n sessionToken,\n options.apiUrl || getApiUrl()\n )\n\n setLoadingLabel('Storing credentials securely...')\n const store = new CredentialStore()\n await store.saveCredentials({\n apiKey: key,\n userId,\n orgId,\n apiUrl: options.apiUrl || getApiUrl(),\n })\n\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel,\n success,\n successMessage: 'Authentication successful! Welcome to Runtype!',\n error,\n result: React.createElement(EntityCard, {\n fields: [\n { label: 'Next', value: 'runtype flows list' },\n { label: 'Next', value: 'runtype talk' },\n ],\n }),\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nauthCommand\n .command('login')\n .description('Login to existing account')\n .option('--api-url <url>', 'Custom API URL')\n .option('--api-key <key>', 'Use API key directly')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { apiUrl?: string; apiKey?: string; dashboardUrl?: string; tty?: boolean; noTty?: boolean }) => {\n const store = new CredentialStore()\n\n // If API key provided directly (works in both TTY and non-TTY)\n if (options.apiKey) {\n if (!isTTY(options)) {\n try {\n const apiKeyManager = new ApiKeyManager()\n const isValid = await apiKeyManager.validateApiKey(options.apiKey, options.apiUrl)\n\n if (!isValid) {\n console.error(JSON.stringify({ status: 'error', error: 'Invalid API key' }, null, 2))\n process.exit(1)\n }\n\n const userData = await apiKeyManager.getCurrentUser(options.apiKey, options.apiUrl)\n\n await store.saveCredentials({\n apiKey: options.apiKey,\n userId: userData.user_id, // @snake-case-ok: API auth/me response\n orgId: userData.org_id ?? undefined, // @snake-case-ok: API auth/me response\n apiUrl: options.apiUrl || getApiUrl(),\n })\n\n console.log(\n JSON.stringify(\n { status: 'authenticated', userId: userData.user_id }, // @snake-case-ok: API auth/me response\n null,\n 2\n )\n )\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(JSON.stringify({ status: 'error', error: message }, null, 2))\n process.exit(1)\n }\n return\n }\n\n // TTY with --api-key\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [userId, setUserId] = useState<string | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const apiKeyManager = new ApiKeyManager()\n const isValid = await apiKeyManager.validateApiKey(options.apiKey!, options.apiUrl)\n\n if (!isValid) {\n setError(new Error('Invalid API key'))\n setSuccess(false)\n setLoading(false)\n return\n }\n\n const userData = await apiKeyManager.getCurrentUser(options.apiKey!, options.apiUrl)\n\n await store.saveCredentials({\n apiKey: options.apiKey!,\n userId: userData.user_id, // @snake-case-ok: API auth/me response\n orgId: userData.org_id ?? undefined, // @snake-case-ok: API auth/me response\n apiUrl: options.apiUrl || getApiUrl(),\n })\n\n setUserId(userData.user_id) // @snake-case-ok: API auth/me response\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Validating API key...',\n success,\n successMessage: `Logged in successfully!${userId ? ` User ID: ${userId}` : ''}`,\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n return\n }\n\n // OAuth flow requires TTY\n if (!isTTY(options)) {\n console.error(\n JSON.stringify(\n { status: 'error', error: 'Browser login requires TTY mode. Use --api-key instead.' },\n null,\n 2\n )\n )\n process.exit(1)\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [loadingLabel, setLoadingLabel] = useState('Initializing authentication...')\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [userId, setUserId] = useState<string | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const oauth = new OAuthManager({\n clerkPublishableKey: getClerkPublishableKey(),\n dashboardUrl: options.dashboardUrl || getDashboardUrl(),\n })\n\n setLoadingLabel('Waiting for browser authentication...')\n const sessionToken = await oauth.authenticate('sign-in')\n\n setLoadingLabel('Getting API key...')\n const apiKeyManager = new ApiKeyManager()\n const { key, userId: uid, orgId } = await apiKeyManager.exchangeSessionForApiKey(\n sessionToken,\n options.apiUrl || getApiUrl()\n )\n\n setLoadingLabel('Storing credentials...')\n await store.saveCredentials({\n apiKey: key,\n userId: uid,\n orgId,\n apiUrl: options.apiUrl || getApiUrl(),\n })\n\n setUserId(uid)\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel,\n success,\n successMessage: `Logged in successfully!${userId ? ` User ID: ${userId}` : ''}`,\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nauthCommand\n .command('status')\n .description('Show authentication status')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { tty?: boolean; noTty?: boolean }) => {\n const store = new CredentialStore()\n\n if (!isTTY(options)) {\n try {\n const hasCredentials = await store.hasCredentials()\n if (!hasCredentials) {\n console.log(JSON.stringify({ status: 'unauthenticated' }, null, 2))\n return\n }\n const credentials = await store.getCredentials()\n console.log(\n JSON.stringify(\n {\n status: 'authenticated',\n userId: credentials?.userId,\n apiUrl: credentials?.apiUrl || 'default',\n orgId: credentials?.orgId || null,\n },\n null,\n 2\n )\n )\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(JSON.stringify({ status: 'error', error: message }, null, 2))\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const hasCredentials = await store.hasCredentials()\n\n if (!hasCredentials) {\n setResultNode(\n React.createElement(EntityCard, {\n fields: [\n { label: 'Status', value: 'Not authenticated', color: 'yellow' },\n { label: 'Hint', value: 'Run runtype auth signup or runtype auth login' },\n ],\n })\n )\n setSuccess(true)\n setLoading(false)\n return\n }\n\n const credentials = await store.getCredentials()\n if (credentials) {\n setResultNode(\n React.createElement(EntityCard, {\n fields: [\n { label: 'Status', value: 'Authenticated', color: 'green' },\n { label: 'User ID', value: credentials.userId },\n { label: 'API URL', value: credentials.apiUrl || 'default' },\n {\n label: 'API Key',\n value: credentials.apiKey\n ? credentials.apiKey.substring(0, 12) + '...'\n : 'missing',\n },\n { label: 'Org ID', value: credentials.orgId || 'none' },\n ],\n })\n )\n }\n\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Checking authentication...',\n success,\n successMessage: 'Auth Status',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nauthCommand\n .command('logout')\n .description('Remove stored credentials')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { tty?: boolean; noTty?: boolean }) => {\n const store = new CredentialStore()\n\n if (!isTTY(options)) {\n const hasCredentials = await store.hasCredentials()\n if (!hasCredentials) {\n console.log(JSON.stringify({ status: 'no_credentials' }, null, 2))\n return\n }\n await store.clearCredentials()\n console.log(JSON.stringify({ status: 'logged_out' }, null, 2))\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [msg, setMsg] = useState('Logged out successfully')\n\n useEffect(() => {\n const run = async () => {\n try {\n const hasCredentials = await store.hasCredentials()\n if (!hasCredentials) {\n setMsg('No stored credentials found')\n setSuccess(true)\n setLoading(false)\n return\n }\n await store.clearCredentials()\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Logging out...',\n success,\n successMessage: msg,\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nauthCommand\n .command('whoami')\n .description('Display current user information')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const store = new CredentialStore()\n const credentials = await store.getCredentials()\n\n if (!credentials || !credentials.apiKey) {\n if (!isTTY(options) || options.json) {\n console.log(JSON.stringify({ status: 'unauthenticated' }, null, 2))\n } else {\n console.log(chalk.yellow('Not logged in'))\n console.log('Run: runtype auth login')\n }\n return\n }\n\n if (!isTTY(options) || options.json) {\n try {\n const apiKeyManager = new ApiKeyManager()\n const user = await apiKeyManager.getCurrentUser(credentials.apiKey, credentials.apiUrl)\n\n let billingInfo: Record<string, unknown> | null = null\n try {\n const baseUrl = credentials.apiUrl || getApiUrl()\n const billingResponse = await fetch(`${baseUrl}/${getApiVersion()}/billing/status`, {\n headers: {\n Authorization: `Bearer ${credentials.apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n if (billingResponse.ok) {\n billingInfo = (await billingResponse.json()) as Record<string, unknown>\n }\n } catch {\n // billing info is optional\n }\n\n console.log(\n JSON.stringify(\n {\n // @snake-case-ok: API auth/me response uses snake_case\n userId: user.user_id,\n // @snake-case-ok: API auth/me response uses snake_case\n orgId: user.org_id,\n apiUrl: credentials.apiUrl || getApiUrl(),\n billing: billingInfo,\n },\n null,\n 2\n )\n )\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(JSON.stringify({ status: 'error', error: message }, null, 2))\n process.exit(1)\n }\n return\n }\n\n // TTY path\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const apiKeyManager = new ApiKeyManager()\n const user = await apiKeyManager.getCurrentUser(credentials.apiKey!, credentials.apiUrl)\n\n let billingInfo: Record<string, unknown> | null = null\n try {\n const baseUrl = credentials.apiUrl || getApiUrl()\n const billingResponse = await fetch(`${baseUrl}/${getApiVersion()}/billing/status`, {\n headers: {\n Authorization: `Bearer ${credentials.apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n if (billingResponse.ok) {\n billingInfo = (await billingResponse.json()) as Record<string, unknown>\n }\n } catch {\n // billing info is optional\n }\n\n const fields: Array<{ label: string; value: string | number | null | undefined; color?: string }> = [\n // @snake-case-ok: API auth/me response uses snake_case\n { label: 'User ID', value: user.user_id },\n // @snake-case-ok: API auth/me response uses snake_case\n { label: 'Organization', value: user.org_id || 'Personal' },\n { label: 'API Key', value: credentials.apiKey!.substring(0, 10) + '...' },\n { label: 'API URL', value: credentials.apiUrl || getApiUrl() },\n { label: 'Created', value: credentials.createdAt },\n { label: 'Last Used', value: credentials.lastUsed },\n ]\n\n if (billingInfo) {\n const plan = (billingInfo.planName as string) || (billingInfo.plan as string)\n if (plan) {\n fields.push({ label: 'Plan', value: plan, color: 'green' })\n }\n const usage = billingInfo.usage as { executionsUsed?: number; executionsLimit?: number } | undefined\n if (usage) {\n const limit = usage.executionsLimit ? `/${usage.executionsLimit}` : ''\n fields.push({ label: 'Executions', value: `${usage.executionsUsed ?? 0}${limit}` })\n }\n }\n\n setResultNode(React.createElement(EntityCard, { fields }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching user information...',\n success,\n successMessage: 'Current User',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n","import open from 'open'\nimport crypto from 'crypto'\nimport { CallbackServer } from './callback-server'\n\nexport interface OAuthConfig {\n clerkPublishableKey: string\n dashboardUrl: string\n}\n\nexport class OAuthManager {\n private readonly clerkPublishableKey: string\n private readonly dashboardUrl: string\n\n constructor(config: OAuthConfig) {\n this.clerkPublishableKey = config.clerkPublishableKey\n this.dashboardUrl = config.dashboardUrl\n }\n\n async authenticate(mode: 'sign-up' | 'sign-in'): Promise<string> {\n // Generate PKCE parameters\n const state = crypto.randomBytes(32).toString('base64url')\n const codeVerifier = crypto.randomBytes(32).toString('base64url')\n const codeChallenge = crypto.createHash('sha256').update(codeVerifier).digest('base64url')\n\n // Start callback server and get actual port (in case requested port was in use)\n const callbackServer = new CallbackServer()\n const requestedPort = await this.findAvailablePort()\n const { actualPort, codePromise } = await callbackServer.start(requestedPort)\n\n // Build OAuth URL with the port the server is actually listening on\n const redirectUri = `http://localhost:${actualPort}/callback`\n const authUrl = new URL(`${this.dashboardUrl.replace(/\\/$/, '')}/${mode}`)\n authUrl.searchParams.set('redirect_uri', redirectUri)\n authUrl.searchParams.set('cli', 'true')\n authUrl.searchParams.set('state', state)\n authUrl.searchParams.set('code_challenge', codeChallenge)\n authUrl.searchParams.set('code_challenge_method', 'S256')\n authUrl.searchParams.set('publishable_key', this.clerkPublishableKey)\n\n // Open browser\n console.log('🌐 Opening browser for authentication...')\n console.log(`If the browser doesn't open, visit: ${authUrl}`)\n\n try {\n await open(authUrl.toString())\n } catch (_error) {\n console.log('Failed to open browser automatically. Please visit the URL above.')\n }\n\n // Wait for callback\n console.log('⏳ Waiting for authentication...')\n const code = await codePromise\n\n // Exchange code for session token\n return this.exchangeCodeForSession(code, codeVerifier, redirectUri)\n }\n\n private async findAvailablePort(): Promise<number> {\n const defaultPort = 8765\n // Simple port check - the CallbackServer handles port conflicts\n return defaultPort\n }\n\n private async exchangeCodeForSession(\n code: string,\n codeVerifier: string,\n redirectUri: string\n ): Promise<string> {\n void codeVerifier\n void redirectUri\n\n // For MVP, we'll return the code directly and let the API key manager handle the exchange\n // In a production setup, this would exchange with Clerk's token endpoint\n return code\n }\n}\n","import express, { Express } from 'express'\nimport { Server } from 'http'\n\nexport interface CallbackServerStartResult {\n actualPort: number\n codePromise: Promise<string>\n}\n\nexport class CallbackServer {\n private server: Server | null = null\n private app: Express\n private codeResolve!: (code: string) => void\n private codeReject!: (error: Error) => void\n private codePromise: Promise<string>\n\n constructor() {\n this.app = express()\n this.codePromise = new Promise<string>((resolve, reject) => {\n this.codeResolve = resolve\n this.codeReject = reject\n })\n\n this.app.get('/callback', (req, res) => {\n const { token, error } = req.query\n\n if (error) {\n res.send(this.errorHTML(error as string))\n this.codeReject(new Error(error as string))\n return\n }\n\n if (!token) {\n res.send(this.errorHTML('No authentication token received'))\n this.codeReject(new Error('No authentication token received'))\n return\n }\n\n res.send(this.successHTML())\n this.codeResolve(token as string)\n\n // Auto-close server after callback\n setTimeout(() => this.stop(), 1000)\n })\n\n this.app.get('/health', (_req, res) => {\n res.json({ status: 'ok' })\n })\n }\n\n async start(port: number = 8765): Promise<CallbackServerStartResult> {\n return new Promise((resolveStart, rejectStart) => {\n this.server = this.app.listen(port, () => {\n const address = this.server?.address()\n const actualPort =\n address && typeof address === 'object' && 'port' in address\n ? address.port\n : port\n console.log(`Callback server listening on port ${actualPort}`)\n resolveStart({ actualPort, codePromise: this.codePromise })\n })\n\n this.server.on('error', (error: NodeJS.ErrnoException) => {\n if (error.code === 'EADDRINUSE') {\n console.log(`Port ${port} is in use, trying ${port + 1}...`)\n this.server = null\n this.start(port + 1).then(resolveStart).catch(rejectStart)\n } else {\n rejectStart(error)\n }\n })\n })\n }\n\n stop() {\n if (this.server) {\n this.server.close()\n this.server = null\n }\n }\n\n private successHTML(): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>Authentication Successful</title>\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n height: 100vh;\n overflow: hidden;\n background: #0a0a0a;\n }\n .grid-bg {\n position: absolute;\n inset: 0;\n z-index: 0;\n overflow: hidden;\n }\n .grid-bg .gradient {\n position: absolute;\n inset: 0;\n background: linear-gradient(to bottom, #0a0a0a 0%, #171717 50%, #262626 100%);\n }\n @keyframes gridMove {\n 0% { background-position-y: 0; }\n 100% { background-position-y: 30px; }\n }\n .grid-bg .grid-vertical-wrap {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 40%;\n transform-origin: top center;\n transform: perspective(500px) rotateX(60deg);\n }\n .grid-bg .grid-vertical-wrap .fade {\n position: absolute;\n inset: 0;\n background: linear-gradient(to bottom, transparent 0%, rgba(255,255,255,0.02) 100%);\n }\n .grid-bg .grid-vertical-wrap .lines {\n position: absolute;\n inset: 0;\n background-image: repeating-linear-gradient(\n 90deg,\n transparent 0,\n transparent 49px,\n rgba(255,255,255,0.08) 49px,\n rgba(255,255,255,0.08) 50px\n );\n background-size: 50px 100%;\n }\n .grid-bg .grid-horizontal {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 40%;\n transform-origin: top center;\n transform: perspective(500px) rotateX(60deg);\n background-image: repeating-linear-gradient(\n 0deg,\n transparent 0,\n transparent 29px,\n rgba(255,255,255,0.06) 29px,\n rgba(255,255,255,0.06) 30px\n );\n background-size: 100% 30px;\n animation: gridMove 2s linear infinite;\n }\n .card-wrap {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 10;\n width: 100%;\n max-width: 400px;\n perspective: 1400px;\n animation: cardIn 0.4s ease-out;\n }\n @keyframes cardIn {\n from { opacity: 0; transform: translate(-50%, -50%) translateY(16px); }\n to { opacity: 1; transform: translate(-50%, -50%) translateY(0); }\n }\n .card-inner {\n position: relative;\n }\n .card-layer-back,\n .card-layer-mid {\n position: absolute;\n inset: 0;\n border-radius: 12px;\n border: 1px solid #e5e7eb;\n pointer-events: none;\n }\n .card-layer-back {\n background: rgba(0, 0, 0, 0.08);\n transform: translate3d(0, -18px, -36px) rotateX(6deg);\n }\n .card-layer-mid {\n background: rgba(0, 0, 0, 0.05);\n transform: translate3d(0, -10px, -20px) rotateX(3deg);\n }\n .card-front {\n position: relative;\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 1);\n background: rgba(0, 0, 0, .5);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n padding: 2rem 2.5rem;\n text-align: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n transform: rotateX(-10deg) translateZ(0);\n transform-style: preserve-3d;\n }\n .card-front .section-title {\n color: #ffffff;\n font-size: 0.8125rem;\n font-weight: 600;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n margin-bottom: 1rem;\n }\n .card-front .flow-arrow {\n color: rgba(255, 255, 255, 0.7);\n font-size: 1rem;\n margin-bottom: 1rem;\n line-height: 1;\n }\n .card-front .message {\n color: #ffffff;\n font-size: 0.75rem;\n font-weight: 100;\n margin-bottom: 0.5rem;\n font-family: monospace;\n }\n .card-front .progress {\n color: rgba(255, 255, 255, 0.75);\n font-size: 0.8125rem;\n }\n </style>\n</head>\n<body>\n <div class=\"grid-bg\">\n <div class=\"gradient\"></div>\n <div class=\"grid-vertical-wrap\">\n <div class=\"fade\"></div>\n <div class=\"lines\"></div>\n </div>\n <div class=\"grid-horizontal\"></div>\n </div>\n <div id=\"card-wrap\" class=\"card-wrap\">\n <div class=\"card-inner\">\n <div class=\"card-layer-back\" aria-hidden=\"true\"></div>\n <div class=\"card-layer-mid\" aria-hidden=\"true\"></div>\n <div id=\"card\" class=\"card-front\">\n <div class=\"section-title\">Authentication Successful</div>\n <div class=\"flow-arrow\" aria-hidden=\"true\">↓</div>\n <p class=\"message\">You can close this window and return to your terminal.</p>\n <p class=\"progress\" id=\"progress\">Closing automatically in 3 seconds…</p>\n </div>\n </div>\n </div>\n <script>\n setTimeout(function() {\n window.close();\n var prog = document.getElementById('progress');\n if (prog) prog.textContent = 'You can now close this window.';\n var card = document.getElementById('card');\n if (card) card.innerHTML = '<div class=\"section-title\">Runtype is Ready</div><p class=\"message\">You can now close this window</p>';\n }, 3000);\n </script>\n</body>\n</html>`\n }\n\n private errorHTML(error: string): string {\n return `\n <!DOCTYPE html>\n <html>\n <head>\n <title>Authentication Failed</title>\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n body { \n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n display: flex; \n align-items: center; \n justify-content: center; \n height: 100vh;\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n }\n .container {\n background: white;\n padding: 3rem;\n border-radius: 12px;\n text-align: center;\n box-shadow: 0 20px 40px rgba(0,0,0,0.1);\n max-width: 400px;\n }\n .error-icon { \n color: #ef4444; \n font-size: 64px;\n margin-bottom: 1rem;\n }\n h1 {\n color: #1f2937;\n margin-bottom: 0.5rem;\n font-size: 1.5rem;\n }\n p {\n color: #6b7280;\n font-size: 1rem;\n margin-bottom: 1rem;\n }\n .error-details {\n background: #fef2f2;\n color: #991b1b;\n padding: 0.75rem;\n border-radius: 6px;\n font-size: 0.875rem;\n font-family: monospace;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <div class=\"error-icon\">✕</div>\n <h1>Authentication Failed</h1>\n <p>There was an error during authentication.</p>\n <div class=\"error-details\">${error}</div>\n </div>\n </body>\n </html>\n `\n }\n}\n","export function getApiUrl(): string {\n return process.env.RUNTYPE_API_URL || 'https://api.runtype.com'\n}\n\nexport function getApiVersion(): string {\n return process.env.RUNTYPE_API_VERSION || 'v1'\n}\n\nexport function getDashboardUrl(): string {\n return process.env.RUNTYPE_DASHBOARD_URL || 'https://use.runtype.com'\n}\n\nexport function getClerkPublishableKey(): string {\n return process.env.CLERK_PUBLISHABLE_KEY || 'pk_live_default_key'\n}\n\nexport function isDebugMode(): boolean {\n return process.env.DEBUG === 'true' || process.env.NODE_ENV === 'development'\n}\n\nexport function getDefaultModel(): string {\n return process.env.RUNTYPE_DEFAULT_MODEL || 'meta/llama3.1-8b-instruct-free'\n}\n\nexport function getDefaultTemperature(): number {\n const temp = process.env.RUNTYPE_DEFAULT_TEMPERATURE\n return temp ? parseFloat(temp) : 0.7\n}\n","import { getApiUrl, getApiVersion } from '../config/env'\n\ninterface CliTokenResponse {\n apiKey: string\n userId: string\n orgId?: string | null\n}\n\n// @snake-case-ok-start: API auth/me response uses snake_case per Clerk conventions\nexport interface AuthMeResponse {\n user_id: string\n session_id?: string | null\n org_id?: string | null\n org_role?: string | null\n org_slug?: string | null\n has_organization?: boolean\n // Allow additional properties returned by the API without losing type-safety\n [key: string]: unknown\n}\n// @snake-case-ok-end\n\nconst isCliTokenResponse = (value: unknown): value is CliTokenResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n return typeof record.apiKey === 'string' && typeof record.userId === 'string'\n}\n\nconst isAuthMeResponse = (value: unknown): value is AuthMeResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n // @snake-case-ok: API auth/me response uses snake_case\n return typeof record.user_id === 'string'\n}\n\nexport class ApiKeyManager {\n /**\n * Exchange a Clerk session JWT for a persistent API key.\n *\n * Calls POST /v1/auth/cli-token on the Runtype API directly,\n * passing the Clerk JWT as a Bearer token. The API verifies the JWT\n * with Clerk and creates an API key for the CLI.\n */\n async exchangeSessionForApiKey(\n clerkJwt: string,\n apiUrl?: string,\n ): Promise<{ key: string; userId: string; orgId?: string }> {\n const baseUrl = apiUrl || getApiUrl()\n\n const response = await fetch(`${baseUrl}/${getApiVersion()}/auth/cli-token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${clerkJwt}`,\n },\n })\n\n if (!response.ok) {\n const error = await response.text()\n throw new Error(`Authentication failed: ${error}`)\n }\n\n const data = (await response.json()) as unknown\n\n if (!isCliTokenResponse(data)) {\n throw new Error('Invalid authentication response format')\n }\n\n const result: { key: string; userId: string; orgId?: string } = {\n key: data.apiKey,\n userId: data.userId,\n }\n\n if (data.orgId) {\n result.orgId = data.orgId\n }\n\n return result\n }\n\n async validateApiKey(apiKey: string, apiUrl?: string): Promise<boolean> {\n const baseUrl = apiUrl || getApiUrl()\n\n try {\n const response = await fetch(`${baseUrl}/${getApiVersion()}/auth/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n return response.ok\n } catch {\n return false\n }\n }\n\n async getCurrentUser(apiKey: string, apiUrl?: string): Promise<AuthMeResponse> {\n const baseUrl = apiUrl || getApiUrl()\n\n const response = await fetch(`${baseUrl}/${getApiVersion()}/auth/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n throw new Error('Failed to get user information')\n }\n\n const data = (await response.json()) as unknown\n\n if (!isAuthMeResponse(data)) {\n throw new Error('Invalid user response format')\n }\n\n return data\n }\n}\n","export type TTYOptions = { tty?: boolean; noTty?: boolean }\n\n/**\n * Determine whether the current environment supports TTY (Ink rendering).\n * Respects explicit --tty / --no-tty flags, falling back to process.stdout.isTTY.\n */\nexport function isTTY(options: TTYOptions): boolean {\n if (options.noTty) return false\n if (options.tty) return true\n return process.stdout.isTTY === true\n}\n","import { Box, Text } from 'ink'\nimport { theme } from '@runtypelabs/ink'\n\nexport interface EntityCardField {\n label: string\n value: string | number | null | undefined\n color?: string\n}\n\nexport interface EntityCardProps {\n fields: EntityCardField[]\n title?: string\n}\n\nexport function EntityCard({ fields, title }: EntityCardProps) {\n const visibleFields = fields.filter(\n (f) => f.value !== null && f.value !== undefined\n )\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n {title && (\n <Text color={theme.primary} bold>\n {title}\n </Text>\n )}\n {visibleFields.map((field, index) => (\n <Text key={index}>\n {' '}\n <Text color={theme.dimLabel}>{field.label}:</Text>{' '}\n <Text color={field.color || theme.label}>{String(field.value)}</Text>\n </Text>\n ))}\n </Box>\n )\n}\n","import { useState } from 'react'\nimport { Text, useInput } from 'ink'\nimport { theme } from '@runtypelabs/ink'\n\nexport interface ConfirmPromptProps {\n message: string\n defaultValue?: boolean\n onConfirm: (confirmed: boolean) => void\n}\n\nexport function ConfirmPrompt({\n message,\n defaultValue = false,\n onConfirm,\n}: ConfirmPromptProps) {\n const [answered, setAnswered] = useState(false)\n const [result, setResult] = useState<boolean | null>(null)\n\n const hint = defaultValue ? 'Y/n' : 'y/N'\n\n useInput(\n (input, key) => {\n if (answered) return\n\n const lower = input.toLowerCase()\n\n if (lower === 'y') {\n setAnswered(true)\n setResult(true)\n onConfirm(true)\n } else if (lower === 'n') {\n setAnswered(true)\n setResult(false)\n onConfirm(false)\n } else if (key.return) {\n setAnswered(true)\n setResult(defaultValue)\n onConfirm(defaultValue)\n }\n },\n { isActive: !answered }\n )\n\n if (answered) {\n return (\n <Text>\n {message}{' '}\n <Text color={result ? theme.success : theme.muted}>\n {result ? 'Yes' : 'No'}\n </Text>\n </Text>\n )\n }\n\n return (\n <Text>\n {message}{' '}\n <Text color={theme.muted}>({hint})</Text>\n </Text>\n )\n}\n","import type { ReactNode } from 'react'\nimport { useEffect, useRef } from 'react'\nimport { Box, Text, useApp, useInput } from 'ink'\nimport { Spinner, ErrorDisplay, theme } from '@runtypelabs/ink'\n\nexport interface DataListProps {\n title: string\n items: Record<string, unknown>[] | null\n error: Error | null\n loading: boolean\n renderCard: (item: Record<string, unknown>) => ReactNode\n emptyMessage?: string\n total?: number\n onRetry?: () => void\n onDone?: () => void\n}\n\nexport function DataList({\n title,\n items,\n error,\n loading,\n renderCard,\n emptyMessage = 'None found',\n total,\n onRetry,\n onDone,\n}: DataListProps) {\n const { exit } = useApp()\n const hasDone = useRef(false)\n\n // Auto-exit after rendering final state (success or error without retry)\n useEffect(() => {\n if (hasDone.current) return undefined\n if (loading) return undefined\n\n if (error && !onRetry) {\n hasDone.current = true\n onDone?.()\n const timer = setTimeout(() => exit(), 0)\n return () => clearTimeout(timer)\n }\n\n if (items !== null) {\n hasDone.current = true\n onDone?.()\n const timer = setTimeout(() => exit(), 0)\n return () => clearTimeout(timer)\n }\n\n return undefined\n }, [loading, error, items, onRetry, onDone, exit])\n\n // Retry on 'r' key when error has retry handler\n useInput(\n (input) => {\n if (input === 'r' && error && onRetry) {\n onRetry()\n }\n },\n { isActive: !!error && !!onRetry }\n )\n\n // Loading state\n if (loading) {\n return <Spinner label={`Fetching ${title}...`} />\n }\n\n // Error state\n if (error) {\n return (\n <Box flexDirection=\"column\">\n <ErrorDisplay error={error} />\n {onRetry && (\n <Text color={theme.muted}>Press &apos;r&apos; to retry</Text>\n )}\n </Box>\n )\n }\n\n // Empty state\n if (items !== null && items.length === 0) {\n return <Text color={theme.muted}>{emptyMessage}</Text>\n }\n\n // Data state\n return (\n <Box flexDirection=\"column\">\n <Text color={theme.primary} bold>\n {title}:\n </Text>\n {items?.map((item, index) => (\n <Box key={index}>{renderCard(item)}</Box>\n ))}\n {total !== undefined && (\n <Text dimColor>{'\\n'} Total: {total}</Text>\n )}\n </Box>\n )\n}\n","import type { ReactNode } from 'react'\nimport { useEffect, useRef } from 'react'\nimport { Box, Text, useApp, useInput } from 'ink'\nimport { Spinner, ErrorDisplay, theme } from '@runtypelabs/ink'\n\nexport interface MutationResultProps {\n loading: boolean\n loadingLabel?: string\n success: boolean | null\n successMessage?: string\n result?: ReactNode\n error: Error | null\n onRetry?: () => void\n onDone?: () => void\n}\n\nexport function MutationResult({\n loading,\n loadingLabel = 'Processing...',\n success,\n successMessage,\n result,\n error,\n onRetry,\n onDone,\n}: MutationResultProps) {\n const { exit } = useApp()\n const hasDone = useRef(false)\n\n // Auto-exit after rendering final state\n useEffect(() => {\n if (hasDone.current) return undefined\n if (loading) return undefined\n\n if (success === true) {\n hasDone.current = true\n onDone?.()\n const timer = setTimeout(() => exit(), 0)\n return () => clearTimeout(timer)\n }\n\n if (success === false && !onRetry) {\n hasDone.current = true\n onDone?.()\n const timer = setTimeout(() => exit(), 0)\n return () => clearTimeout(timer)\n }\n\n if (error && !onRetry) {\n hasDone.current = true\n onDone?.()\n const timer = setTimeout(() => exit(), 0)\n return () => clearTimeout(timer)\n }\n\n return undefined\n }, [loading, success, error, onRetry, onDone, exit])\n\n // Retry on 'r' key\n useInput(\n (input) => {\n if (input === 'r' && (error || success === false) && onRetry) {\n onRetry()\n }\n },\n { isActive: !!(error || success === false) && !!onRetry }\n )\n\n // Loading state\n if (loading) {\n return <Spinner label={loadingLabel} />\n }\n\n // Success state\n if (success === true) {\n return (\n <Box flexDirection=\"column\">\n <Text>\n <Text color={theme.success}>{'✓'}</Text>{' '}\n {successMessage || 'Done'}\n </Text>\n {result}\n </Box>\n )\n }\n\n // Error state\n if (error) {\n return (\n <Box flexDirection=\"column\">\n <ErrorDisplay error={error} />\n {onRetry && (\n <Text color={theme.muted}>Press &apos;r&apos; to retry</Text>\n )}\n </Box>\n )\n }\n\n // Pending (null success, no loading, no error) — shouldn't normally render\n return null\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { readFileSync } from 'fs'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport {\n printJson,\n printList,\n printDetail,\n type PaginatedResponse,\n getTotalCount,\n} from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, EntityCard, MutationResult, ConfirmPrompt } from '../ink/shared/index.js'\n\ninterface FlowSummary {\n id: string\n name: string\n description?: string | null\n [key: string]: unknown\n}\n\nexport const flowsCommand = new Command('flows').description('Manage flows')\n\nflowsCommand\n .command('list')\n .description('List all flows')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<FlowSummary>>('/flows')\n if (options.json) {\n printJson(data)\n return\n }\n printList((data.data ?? []) as unknown as Array<Record<string, unknown>>, {\n title: 'Your Flows',\n columns: [\n { key: 'id', color: 'green' },\n { key: 'name' },\n { key: 'description', color: 'gray' },\n ],\n emptyMessage: 'No flows found',\n total: getTotalCount(data.pagination),\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch flows: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<FlowSummary[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [total, setTotal] = useState<number | undefined>()\n\n useEffect(() => {\n client\n .get<PaginatedResponse<FlowSummary>>('/flows')\n .then((res) => {\n setItems((res.data ?? []) as FlowSummary[])\n setTotal(getTotalCount(res.pagination))\n })\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Your Flows',\n items,\n error,\n loading: items === null && error === null,\n total,\n renderCard: (item) => {\n const flow = item as FlowSummary\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: flow.id, color: 'green' },\n { label: 'Name', value: flow.name },\n { label: 'Description', value: flow.description, color: 'gray' },\n ],\n })\n },\n emptyMessage: 'No flows found',\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nflowsCommand\n .command('get <id>')\n .description('Get flow details')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<FlowSummary & { steps?: unknown[] }>(`/flows/${id}`)\n if (options.json) {\n printJson(data)\n return\n }\n printDetail('Flow', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Description', value: data.description },\n { label: 'Steps', value: (data.steps as unknown[])?.length },\n ])\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch flow: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<Array<FlowSummary & { steps?: unknown[] }> | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n client\n .get<FlowSummary & { steps?: unknown[] }>(`/flows/${id}`)\n .then((res) => setItems([res]))\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Flow',\n items,\n error,\n loading: items === null && error === null,\n renderCard: (item) => {\n const flow = item as FlowSummary & { steps?: unknown[] }\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: flow.id, color: 'green' },\n { label: 'Name', value: flow.name },\n { label: 'Description', value: flow.description },\n { label: 'Steps', value: (flow.steps as unknown[])?.length },\n ],\n })\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nflowsCommand\n .command('run <id>')\n .description('Execute a flow via dispatch')\n .option('-r, --record <id>', 'Record ID to run with')\n .option('-m, --message <text>', 'Message to send')\n .option('--stream', 'Stream the response (default)', true)\n .option('--no-stream', 'Wait for complete response')\n .option('--json', 'Output as JSON')\n .action(\n async (\n flowId: string,\n options: { record?: string; message?: string; stream: boolean; json?: boolean }\n ) => {\n // KEEP EXISTING streaming logic — not a CRUD pattern\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n const payload: Record<string, unknown> = {\n flow: { id: flowId },\n }\n\n if (options.record) {\n payload.record = { id: options.record }\n }\n\n if (options.message) {\n payload.messages = [{ role: 'user', content: options.message }]\n }\n\n if (options.stream) {\n console.log(chalk.gray('Starting flow...'))\n\n try {\n const response = await client.stream('/dispatch', payload)\n\n const callbacks: StreamCallbacks = {\n onStepChunk: (chunk: string) => {\n process.stdout.write(chunk)\n },\n onFlowComplete: (event) => {\n if (options.json) {\n console.log()\n printJson(event)\n }\n },\n onError: (err: Error) => {\n console.error(chalk.red(`\\nError: ${err.message}`))\n },\n }\n\n await processStream(response, callbacks)\n console.log()\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Flow execution failed: ${message}`))\n process.exit(1)\n }\n } else {\n console.log(chalk.gray('Executing flow...'))\n\n try {\n payload.streamResponse = false\n const result = await client.post<Record<string, unknown>>('/dispatch', payload)\n console.log(chalk.green('Flow execution complete'))\n printJson(result)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Flow execution failed: ${message}`))\n process.exit(1)\n }\n }\n }\n )\n\nflowsCommand\n .command('create')\n .description('Create a new flow')\n .requiredOption('-n, --name <name>', 'Flow name')\n .option('-d, --description <desc>', 'Flow description')\n .option('--from-file <file>', 'Import flow from JSON file')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(\n async (options: {\n name: string\n description?: string\n fromFile?: string\n json?: boolean\n tty?: boolean\n noTty?: boolean\n }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n let body: Record<string, unknown> = {\n name: options.name,\n description: options.description,\n }\n\n if (options.fromFile) {\n try {\n const fileContent = JSON.parse(readFileSync(options.fromFile, 'utf-8'))\n if (fileContent.flow) {\n body = { ...fileContent.flow, name: options.name || fileContent.flow.name }\n } else {\n body = { ...fileContent, name: options.name || fileContent.name }\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to read flow file: ${msg}`))\n process.exit(1)\n }\n }\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<FlowSummary>('/flows', body)\n if (options.json) {\n printJson(data)\n return\n }\n console.log(` ID: ${chalk.green(data.id)}`)\n console.log(` Name: ${data.name}`)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to create flow: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [result, setResult] = useState<FlowSummary | null>(null)\n\n useEffect(() => {\n client\n .post<FlowSummary>('/flows', body)\n .then((data) => {\n setResult(data)\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Creating flow...',\n success,\n successMessage: 'Flow created',\n error,\n result: result\n ? React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: result.id, color: 'green' },\n { label: 'Name', value: result.name },\n ],\n })\n : undefined,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n }\n )\n\nflowsCommand\n .command('delete <id>')\n .description('Delete a flow')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.delete(`/flows/${id}`)\n console.log(JSON.stringify({ status: 'deleted', id }, null, 2))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to delete flow: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [confirmed, setConfirmed] = useState<boolean | null>(null)\n const [loading, setLoading] = useState(false)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n if (confirmed !== true) return undefined\n setLoading(true)\n client\n .delete(`/flows/${id}`)\n .then(() => {\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n return undefined\n }, [confirmed])\n\n if (confirmed === null) {\n return React.createElement(ConfirmPrompt, {\n message: `Delete flow ${id}?`,\n onConfirm: (val: boolean) => setConfirmed(val),\n })\n }\n\n if (confirmed === false) {\n return React.createElement(MutationResult, {\n loading: false,\n success: true,\n successMessage: 'Cancelled',\n error: null,\n })\n }\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Deleting flow...',\n success,\n successMessage: 'Flow deleted',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n","import readline from 'readline'\nimport chalk from 'chalk'\nimport { CredentialStore } from '../auth/credential-store'\nimport { OAuthManager } from '../auth/oauth-manager'\nimport { ApiKeyManager } from '../auth/api-key-manager'\nimport { getApiUrl, getClerkPublishableKey, getDashboardUrl } from '../config/env'\n\n/**\n * Inline readline-based prompt for confirm (y/n).\n * Used here instead of interactive.ts so we can delete that file.\n */\nasync function promptConfirm(\n message: string,\n options?: { default?: boolean }\n): Promise<boolean> {\n const defaultYes = options?.default !== false\n const hint = defaultYes ? 'Y/n' : 'y/N'\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: true,\n })\n\n return new Promise<boolean>((resolve) => {\n rl.question(chalk.cyan(`${message} (${hint}): `), (answer) => {\n rl.close()\n const trimmed = answer.trim().toLowerCase()\n if (trimmed === '') {\n resolve(defaultYes)\n } else {\n resolve(trimmed === 'y' || trimmed === 'yes')\n }\n })\n })\n}\n\n/**\n * Inline readline-based prompt for text input.\n */\nasync function promptText(message: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: true,\n })\n\n return new Promise<string>((resolve) => {\n rl.question(chalk.cyan(`${message}: `), (answer) => {\n rl.close()\n resolve(answer.trim())\n })\n })\n}\n\n/**\n * Inline readline-based prompt for select.\n */\nasync function promptSelect<T extends string>(\n message: string,\n choices: Array<{ label: string; value: T; description?: string }>\n): Promise<T> {\n console.log(chalk.cyan(`\\n${message}`))\n choices.forEach((choice, index) => {\n const desc = choice.description ? chalk.gray(` - ${choice.description}`) : ''\n console.log(` ${chalk.green(`${index + 1})`)} ${choice.label}${desc}`)\n })\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: true,\n })\n\n return new Promise<T>((resolve) => {\n const ask = () => {\n rl.question(chalk.cyan(`\\nSelect (1-${choices.length}): `), (answer) => {\n const num = parseInt(answer.trim(), 10)\n if (num >= 1 && num <= choices.length) {\n rl.close()\n resolve(choices[num - 1].value)\n } else {\n console.log(chalk.red(`Please enter a number between 1 and ${choices.length}`))\n ask()\n }\n })\n }\n ask()\n })\n}\n\n/**\n * Ensure the user is authenticated, offering interactive login if not.\n * Returns the API key on success, or null if the user declines to authenticate.\n *\n * When `exitOnFailure` is true (default), the process exits with code 1\n * if authentication is declined. Set to false to return null instead.\n */\nexport async function ensureAuth(options?: {\n apiUrl?: string\n exitOnFailure?: boolean\n}): Promise<string | null> {\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (apiKey) {\n return apiKey\n }\n\n console.log(chalk.yellow('\\nAuthentication required.'))\n\n const shouldLogin = await promptConfirm('Would you like to log in now?', { default: true })\n\n if (!shouldLogin) {\n console.log(chalk.gray('Run \"runtype auth login\" when you\\'re ready.'))\n if (options?.exitOnFailure !== false) {\n process.exit(1)\n }\n return null\n }\n\n const method = await promptSelect('How would you like to authenticate?', [\n { label: 'Browser login', value: 'browser' as const, description: 'Sign in via your browser' },\n { label: 'API key', value: 'apikey' as const, description: 'Paste an existing API key' },\n ])\n\n if (method === 'apikey') {\n return handleApiKeyLogin(store, options?.apiUrl)\n }\n\n return handleBrowserLogin(store, options?.apiUrl)\n}\n\nasync function handleApiKeyLogin(\n store: CredentialStore,\n apiUrl?: string\n): Promise<string | null> {\n const key = await promptText('Enter your API key')\n\n if (!key) {\n console.log(chalk.red('No API key provided.'))\n return null\n }\n\n console.log(chalk.gray('Validating API key...'))\n\n try {\n const apiKeyManager = new ApiKeyManager()\n const isValid = await apiKeyManager.validateApiKey(key, apiUrl)\n\n if (!isValid) {\n console.log(chalk.red('Invalid API key'))\n return null\n }\n\n const userData = await apiKeyManager.getCurrentUser(key, apiUrl)\n\n await store.saveCredentials({\n apiKey: key,\n // @snake-case-ok: API auth/me response uses snake_case\n userId: userData.user_id,\n // @snake-case-ok: API auth/me response uses snake_case\n orgId: userData.org_id ?? undefined,\n apiUrl: apiUrl || getApiUrl(),\n })\n\n console.log(chalk.green('Logged in successfully!'))\n return key\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.log(chalk.red('Login failed'))\n console.error(chalk.red(message))\n return null\n }\n}\n\nasync function handleBrowserLogin(\n store: CredentialStore,\n apiUrl?: string\n): Promise<string | null> {\n console.log(chalk.gray('Initializing authentication...'))\n\n try {\n const oauth = new OAuthManager({\n clerkPublishableKey: getClerkPublishableKey(),\n dashboardUrl: getDashboardUrl(),\n })\n\n console.log(chalk.gray('Waiting for browser authentication...'))\n const sessionToken = await oauth.authenticate('sign-in')\n\n console.log(chalk.gray('Getting API key...'))\n const apiKeyManager = new ApiKeyManager()\n const { key, userId, orgId } = await apiKeyManager.exchangeSessionForApiKey(\n sessionToken,\n apiUrl || getApiUrl(),\n )\n\n console.log(chalk.gray('Storing credentials...'))\n await store.saveCredentials({\n apiKey: key,\n userId,\n orgId,\n apiUrl: apiUrl || getApiUrl(),\n })\n\n console.log(chalk.green('Logged in successfully!'))\n return key\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.log(chalk.red('Login failed'))\n console.error(chalk.red(message))\n return null\n }\n}\n","import { getApiUrl, getApiVersion } from '../config/env'\n\ninterface ApiErrorBody {\n error?: string\n message?: string\n}\n\nexport class ApiError extends Error {\n constructor(\n public statusCode: number,\n message: string\n ) {\n super(message)\n this.name = 'ApiError'\n }\n}\n\n/**\n * Shared HTTP client for Runtype API calls.\n * Handles auth headers, base URL, error parsing, and streaming.\n */\nexport class ApiClient {\n private baseUrl: string\n private apiKey: string\n\n constructor(apiKey: string, baseUrl?: string) {\n this.apiKey = apiKey\n this.baseUrl = baseUrl || getApiUrl()\n }\n\n /** Prefix path with API version (e.g. /v1) so all requests hit versioned routes. */\n private path(path: string): string {\n const version = getApiVersion()\n const p = path.startsWith('/') ? path : `/${path}`\n return p.startsWith(`/${version}/`) ? p : `/${version}${p}`\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n ...extra,\n }\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`\n try {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json')) {\n const body = (await response.json()) as ApiErrorBody\n message = body.error || body.message || message\n } else {\n const text = await response.text()\n if (text) message = text\n }\n } catch {\n // use default message\n }\n throw new ApiError(response.status, message)\n }\n\n return response.json() as Promise<T>\n }\n\n async get<T>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(this.path(path), this.baseUrl)\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== '') {\n url.searchParams.append(key, value)\n }\n }\n }\n\n const response = await fetch(url.toString(), {\n headers: this.headers(),\n })\n\n return this.handleResponse<T>(response)\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'POST',\n headers: this.headers(),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n return this.handleResponse<T>(response)\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'PUT',\n headers: this.headers(),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n return this.handleResponse<T>(response)\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'PATCH',\n headers: this.headers(),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n return this.handleResponse<T>(response)\n }\n\n async delete(path: string): Promise<void> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'DELETE',\n headers: this.headers(),\n })\n\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`\n try {\n const body = (await response.json()) as ApiErrorBody\n message = body.error || body.message || message\n } catch {\n // use default\n }\n throw new ApiError(response.status, message)\n }\n }\n\n async stream(path: string, body?: unknown): Promise<Response> {\n const response = await fetch(new URL(this.path(path), this.baseUrl).toString(), {\n method: 'POST',\n headers: this.headers({ Accept: 'text/event-stream' }),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`\n try {\n const text = await response.text()\n if (text) message = text\n } catch {\n // use default\n }\n throw new ApiError(response.status, message)\n }\n\n return response\n }\n}\n","import chalk from 'chalk'\n\n/**\n * Print data as formatted JSON.\n */\nexport function printJson(data: unknown): void {\n console.log(JSON.stringify(data, null, 2))\n}\n\n/**\n * Print a list of items with id + name, plus optional extra fields.\n */\nexport function printList(\n items: Array<Record<string, unknown>>,\n options: {\n title: string\n columns: { key: string; label?: string; color?: 'green' | 'gray' | 'blue' | 'cyan' | 'yellow' }[]\n emptyMessage?: string\n total?: number\n }\n): void {\n console.log(chalk.cyan(`${options.title}:`))\n\n if (items.length === 0) {\n console.log(chalk.gray(` ${options.emptyMessage || 'None found'}`))\n return\n }\n\n for (const item of items) {\n const parts: string[] = []\n for (const col of options.columns) {\n const value = item[col.key]\n if (value === undefined || value === null) continue\n const str = String(value)\n const colorFn = col.color ? chalk[col.color] : (s: string) => s\n if (col.label) {\n parts.push(`${col.label}: ${colorFn(str)}`)\n } else {\n parts.push(colorFn(str))\n }\n }\n console.log(` ${parts.join(' - ')}`)\n }\n\n if (options.total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${options.total}`))\n }\n}\n\n/**\n * Print a single item's details as key-value pairs.\n */\nexport function printDetail(\n title: string,\n fields: Array<{ label: string; value: unknown }>\n): void {\n console.log(chalk.cyan(`${title}:`))\n for (const field of fields) {\n if (field.value === undefined || field.value === null) continue\n const str = typeof field.value === 'object' ? JSON.stringify(field.value) : String(field.value)\n console.log(` ${chalk.gray(field.label + ':')} ${str}`)\n }\n}\n\n/**\n * Standard pagination info from API responses.\n */\nexport interface PaginatedResponse<T> {\n data?: T[]\n pagination?: {\n totalCount?: number\n total?: number\n [key: string]: unknown\n }\n}\n\n/**\n * Extract total count from a paginated response.\n */\nexport function getTotalCount(pagination?: PaginatedResponse<unknown>['pagination']): number | undefined {\n return pagination?.totalCount ?? pagination?.total ?? undefined\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { writeFileSync } from 'fs'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, EntityCard, MutationResult, ConfirmPrompt } from '../ink/shared/index.js'\n\ninterface RecordSummary {\n id: string\n name: string\n type: string\n metadata?: Record<string, unknown> | null\n [key: string]: unknown\n}\n\nexport const recordsCommand = new Command('records').description('Manage records')\n\nrecordsCommand\n .command('list')\n .description('List all records')\n .option('--type <type>', 'Filter by record type')\n .option('--limit <n>', 'Limit number of results', '20')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { type?: string; limit: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n const params: Record<string, string> = { limit: options.limit }\n if (options.type) params.type = options.type\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<RecordSummary>>('/records', params)\n if (options.json) {\n printJson(data)\n return\n }\n const records = data.data ?? []\n if (records.length === 0) {\n console.log('No records found')\n return\n }\n console.log('Your Records:')\n for (const record of records) {\n console.log(` ${record.id} - ${record.name} (${record.type})`)\n if (record.metadata && Object.keys(record.metadata).length > 0) {\n console.log(` ${JSON.stringify(record.metadata)}`)\n }\n }\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(`\\n Total: ${total} records`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch records: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<RecordSummary[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [total, setTotal] = useState<number | undefined>()\n\n useEffect(() => {\n client\n .get<PaginatedResponse<RecordSummary>>('/records', params)\n .then((res) => {\n setItems((res.data ?? []) as RecordSummary[])\n setTotal(getTotalCount(res.pagination))\n })\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Your Records',\n items,\n error,\n loading: items === null && error === null,\n total,\n renderCard: (item) => {\n const record = item as RecordSummary\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: record.id, color: 'green' },\n { label: 'Name', value: record.name },\n { label: 'Type', value: record.type },\n {\n label: 'Metadata',\n value:\n record.metadata && Object.keys(record.metadata).length > 0\n ? JSON.stringify(record.metadata)\n : null,\n color: 'gray',\n },\n ],\n })\n },\n emptyMessage: 'No records found',\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nrecordsCommand\n .command('get <id>')\n .description('Get record details')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<RecordSummary>(`/records/${id}`)\n if (options.json) {\n printJson(data)\n return\n }\n console.log(` ID: ${data.id}`)\n console.log(` Name: ${data.name}`)\n console.log(` Type: ${data.type}`)\n if (data.metadata) {\n console.log(` Metadata: ${JSON.stringify(data.metadata, null, 2)}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch record: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<RecordSummary[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n client\n .get<RecordSummary>(`/records/${id}`)\n .then((res) => setItems([res as RecordSummary]))\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Record',\n items,\n error,\n loading: items === null && error === null,\n renderCard: (item) => {\n const record = item as RecordSummary\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: record.id, color: 'green' },\n { label: 'Name', value: record.name },\n { label: 'Type', value: record.type },\n {\n label: 'Metadata',\n value: record.metadata ? JSON.stringify(record.metadata) : null,\n },\n ],\n })\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nrecordsCommand\n .command('create')\n .description('Create a new record')\n .requiredOption('-n, --name <name>', 'Record name')\n .requiredOption('-t, --type <type>', 'Record type')\n .option('-m, --metadata <json>', 'Metadata as JSON string')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { name: string; type: string; metadata?: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n let metadata: Record<string, unknown> = {}\n if (options.metadata) {\n try {\n metadata = JSON.parse(options.metadata)\n } catch {\n console.error(chalk.red('Invalid JSON in metadata'))\n process.exit(1)\n }\n }\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<RecordSummary>('/records', {\n name: options.name,\n type: options.type,\n metadata,\n })\n if (options.json) {\n printJson(data)\n return\n }\n console.log(` ID: ${data.id}`)\n console.log(` Name: ${data.name}`)\n console.log(` Type: ${data.type}`)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to create record: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [result, setResult] = useState<RecordSummary | null>(null)\n\n useEffect(() => {\n client\n .post<RecordSummary>('/records', {\n name: options.name,\n type: options.type,\n metadata,\n })\n .then((data) => {\n setResult(data)\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Creating record...',\n success,\n successMessage: 'Record created',\n error,\n result: result\n ? React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: result.id, color: 'green' },\n { label: 'Name', value: result.name },\n { label: 'Type', value: result.type },\n ],\n })\n : undefined,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nrecordsCommand\n .command('delete <id>')\n .description('Delete a record')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.delete(`/records/${id}`)\n console.log(JSON.stringify({ status: 'deleted', id }, null, 2))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to delete record: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [confirmed, setConfirmed] = useState<boolean | null>(null)\n const [loading, setLoading] = useState(false)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n if (confirmed !== true) return undefined\n setLoading(true)\n client\n .delete(`/records/${id}`)\n .then(() => {\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n return undefined\n }, [confirmed])\n\n if (confirmed === null) {\n return React.createElement(ConfirmPrompt, {\n message: `Delete record ${id}?`,\n onConfirm: (val: boolean) => setConfirmed(val),\n })\n }\n\n if (confirmed === false) {\n return React.createElement(MutationResult, {\n loading: false,\n success: true,\n successMessage: 'Cancelled',\n error: null,\n })\n }\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Deleting record...',\n success,\n successMessage: 'Record deleted',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nrecordsCommand\n .command('export')\n .description('Export records to a file')\n .option('--type <type>', 'Filter by record type')\n .option('--limit <n>', 'Maximum records to export', '100')\n .option('-o, --output <file>', 'Output file path')\n .option('--format <format>', 'Export format (json, csv)', 'json')\n .action(\n async (options: { type?: string; limit: string; output?: string; format: string }) => {\n // KEEP EXISTING file write logic — not a display pattern\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n console.log(chalk.gray('Exporting records...'))\n\n try {\n const client = new ApiClient(apiKey)\n const params: Record<string, string> = { limit: options.limit }\n if (options.type) params.type = options.type\n\n const data = await client.get<PaginatedResponse<RecordSummary>>('/records', params)\n const records = data.data ?? []\n\n if (records.length === 0) {\n console.log(chalk.yellow('No records to export'))\n return\n }\n\n let content: string\n if (options.format === 'csv') {\n const headers = ['id', 'name', 'type', 'metadata']\n const rows = records.map((r) => [\n r.id,\n r.name,\n r.type,\n r.metadata ? JSON.stringify(r.metadata) : '',\n ])\n content = [headers.join(','), ...rows.map((r) => r.map(csvEscape).join(','))].join('\\n')\n } else {\n content = JSON.stringify(records, null, 2)\n }\n\n const filename =\n options.output || `records-export-${Date.now()}.${options.format === 'csv' ? 'csv' : 'json'}`\n writeFileSync(filename, content)\n console.log(chalk.green(`Exported ${records.length} records to ${filename}`))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to export records: ${message}`))\n process.exit(1)\n }\n }\n )\n\nfunction csvEscape(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`\n }\n return value\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, EntityCard } from '../ink/shared/index.js'\n\ninterface PromptSummary {\n id: string\n name: string\n description?: string | null\n model?: string | null\n [key: string]: unknown\n}\n\nexport const promptsCommand = new Command('prompts').description('Manage prompts')\n\npromptsCommand\n .command('list')\n .description('List all prompts')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<PromptSummary>>('/prompts')\n if (options.json) {\n printJson(data)\n return\n }\n const prompts = data.data ?? []\n if (prompts.length === 0) {\n console.log('No prompts found')\n return\n }\n for (const prompt of prompts) {\n console.log(` ${prompt.id} - ${prompt.name}`)\n if (prompt.description) {\n console.log(` ${prompt.description}`)\n }\n if (prompt.model) {\n console.log(` Model: ${prompt.model}`)\n }\n }\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(`\\n Total: ${total} prompts`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch prompts: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<PromptSummary[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [total, setTotal] = useState<number | undefined>()\n\n useEffect(() => {\n client\n .get<PaginatedResponse<PromptSummary>>('/prompts')\n .then((res) => {\n setItems((res.data ?? []) as PromptSummary[])\n setTotal(getTotalCount(res.pagination))\n })\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Your Prompts',\n items,\n error,\n loading: items === null && error === null,\n total,\n renderCard: (item) => {\n const prompt = item as PromptSummary\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: prompt.id, color: 'green' },\n { label: 'Name', value: prompt.name },\n { label: 'Description', value: prompt.description, color: 'gray' },\n { label: 'Model', value: prompt.model, color: 'blue' },\n ],\n })\n },\n emptyMessage: 'No prompts found',\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\npromptsCommand\n .command('get <id>')\n .description('Get prompt details')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PromptSummary>(`/prompts/${id}`)\n if (options.json) {\n printJson(data)\n return\n }\n printDetail('Prompt', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Description', value: data.description },\n { label: 'Model', value: data.model },\n ])\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch prompt: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<PromptSummary[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n client\n .get<PromptSummary>(`/prompts/${id}`)\n .then((res) => setItems([res as PromptSummary]))\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Prompt',\n items,\n error,\n loading: items === null && error === null,\n renderCard: (item) => {\n const prompt = item as PromptSummary\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: prompt.id, color: 'green' },\n { label: 'Name', value: prompt.name },\n { label: 'Description', value: prompt.description },\n { label: 'Model', value: prompt.model, color: 'blue' },\n ],\n })\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\npromptsCommand\n .command('test <id>')\n .description('Test a prompt with input')\n .option('-i, --input <text>', 'Input text for the prompt')\n .option('--stream', 'Stream the response (default)', true)\n .option('--no-stream', 'Wait for complete response')\n .option('--json', 'Output as JSON')\n .action(\n async (\n promptId: string,\n options: { input?: string; stream: boolean; json?: boolean }\n ) => {\n // KEEP EXISTING streaming logic — uses processStream\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n const payload: Record<string, unknown> = {\n flow: {\n steps: [\n {\n name: 'test',\n type: 'prompt',\n config: {\n promptId,\n text: options.input || '',\n },\n },\n ],\n },\n }\n\n if (options.input) {\n payload.messages = [{ role: 'user', content: options.input }]\n }\n\n if (options.stream) {\n console.log(chalk.gray('Testing prompt...'))\n\n try {\n const response = await client.stream('/dispatch', payload)\n\n const callbacks: StreamCallbacks = {\n onStepChunk: (chunk: string) => {\n process.stdout.write(chunk)\n },\n onError: (err: Error) => {\n console.error(chalk.red(`\\nError: ${err.message}`))\n },\n }\n\n await processStream(response, callbacks)\n console.log()\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Prompt test failed: ${message}`))\n process.exit(1)\n }\n } else {\n console.log(chalk.gray('Testing prompt...'))\n\n try {\n payload.streamResponse = false\n const result = await client.post<Record<string, unknown>>('/dispatch', payload)\n console.log(chalk.green('Prompt test complete'))\n\n if (options.json) {\n printJson(result)\n } else {\n printJson(result)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Prompt test failed: ${message}`))\n process.exit(1)\n }\n }\n }\n )\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { readFileSync } from 'fs'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { MutationResult, EntityCard } from '../ink/shared/index.js'\n\ninterface BatchStatusResponse {\n status: string\n processedRecords: number\n totalRecords: number\n failedRecords: number\n}\n\nexport const batchCommand = new Command('batch').description('Manage batch operations')\n\nbatchCommand\n .command('submit')\n .description('Submit a batch job')\n .requiredOption('-f, --flow <id>', 'Flow ID to execute')\n .requiredOption('-r, --records <file>', 'JSON file with record IDs')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { flow: string; records: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n let recordIds: string[]\n try {\n const content = readFileSync(options.records, 'utf-8')\n const parsed = JSON.parse(content)\n recordIds = Array.isArray(parsed) ? parsed : parsed.recordIds || parsed.records || []\n } catch (error) {\n const msg = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to read records file: ${msg}`))\n process.exit(1)\n }\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<{ id: string; status: string }>('/batch/submit', {\n flowId: options.flow,\n recordIds,\n })\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(chalk.green('Batch submitted'))\n console.log(` Batch ID: ${chalk.green(data.id)}`)\n console.log(` Status: ${data.status}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to submit batch'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.post<{ id: string; status: string }>('/batch/submit', {\n flowId: options.flow,\n recordIds,\n })\n setResultNode(React.createElement(EntityCard, {\n fields: [\n { label: 'Batch ID', value: data.id, color: 'green' },\n { label: 'Status', value: data.status },\n ],\n }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: `Submitting batch with ${recordIds.length} records...`,\n success,\n successMessage: 'Batch submitted',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nbatchCommand\n .command('status <id>')\n .description('Check batch job status')\n .option('--watch', 'Watch for updates')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (batchId: string, options: { watch?: boolean; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<BatchStatusResponse>(`/batch/status/${batchId}`)\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(chalk.cyan(`Batch Job: ${batchId}`))\n console.log(` Status: ${chalk.green(data.status)}`)\n console.log(` Progress: ${data.processedRecords}/${data.totalRecords}`)\n\n if (data.failedRecords > 0) {\n console.log(` Failed: ${chalk.red(data.failedRecords)}`)\n }\n\n if (options.watch && data.status === 'processing') {\n console.log(chalk.gray('\\nWatching for updates... (Ctrl+C to stop)'))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch batch status'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<BatchStatusResponse>(`/batch/status/${batchId}`)\n\n const fields: Array<{ label: string; value: string | number | null | undefined; color?: string }> = [\n { label: 'Batch ID', value: batchId },\n { label: 'Status', value: data.status, color: data.status === 'completed' ? 'green' : 'yellow' },\n { label: 'Progress', value: `${data.processedRecords}/${data.totalRecords}` },\n ]\n\n if (data.failedRecords > 0) {\n fields.push({ label: 'Failed', value: data.failedRecords, color: 'red' })\n }\n\n setResultNode(React.createElement(EntityCard, { fields }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching batch status...',\n success,\n successMessage: 'Batch Status',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nbatchCommand\n .command('cancel <id>')\n .description('Cancel a batch job')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (batchId: string, options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.post(`/batch/cancel/${batchId}`)\n console.log(chalk.green('Batch job cancelled'))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to cancel batch job'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n await client.post(`/batch/cancel/${batchId}`)\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Cancelling batch job...',\n success,\n successMessage: 'Batch job cancelled',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n","import { Command } from 'commander'\nimport React from 'react'\nimport { render } from 'ink'\nimport chalk from 'chalk'\nimport { processStream } from '@runtypelabs/sdk'\nimport { ChatSession } from '../chat/session-manager'\nimport { TalkApp } from '../ink/talk/TalkApp.js'\nimport { getApiUrl, getApiVersion, getDefaultModel, getDefaultTemperature } from '../config/env'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport type { TalkStreamActions, TalkStreamCallbacks } from '../ink/talk/types.js'\n\nexport const talkCommand = new Command('talk')\n .description('Start an interactive chat session')\n .option('-m, --model <model>', 'AI model to use', getDefaultModel())\n .option('-t, --temperature <temp>', 'Temperature (0-1)', getDefaultTemperature().toString())\n .option('--max-tokens <tokens>', 'Max response tokens', '2000')\n .option('--system <prompt>', 'System prompt to prepend')\n .option('--no-markdown', 'Disable markdown rendering')\n .option('--continue <file>', 'Continue from saved session')\n .action(async (options) => {\n // Check authentication (with interactive login offer)\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const apiUrl = getApiUrl()\n const version = getApiVersion()\n const dispatchUrl = `${apiUrl.replace(/\\/$/, '')}/${version}/dispatch`\n\n // Initialize session (reuse existing ChatSession for payload building)\n const session = new ChatSession({\n model: options.model,\n temperature: parseFloat(options.temperature),\n maxOutputTokens: parseInt(options.maxTokens),\n systemPrompt: options.system,\n })\n\n // Load previous session if --continue specified\n if (options.continue) {\n try {\n await session.loadFromFile(options.continue)\n console.log(chalk.green(`Loaded session from: ${options.continue}`))\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to load session: ${message}`))\n process.exit(1)\n }\n }\n\n let currentModel = options.model\n\n // onSend: dispatches to API and streams response via processStream\n const onSend = async (\n text: string,\n streamCallbacks: TalkStreamCallbacks,\n contentRef: { current: string }\n ): Promise<void> => {\n const payload = session.buildDispatchPayload(text)\n\n // Override model if changed via /model command\n if (currentModel !== options.model) {\n payload.flow.steps[0].config.model = currentModel\n }\n\n const response = await fetch(dispatchUrl, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n body: JSON.stringify(payload),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`API error: ${response.status} - ${errorText}`)\n }\n\n // Process stream through callbacks — useTalkStream callbacks match\n // the SDK's StreamCallbacks shape, so pass directly\n await processStream(response, streamCallbacks)\n\n // Add assistant response to session history for context accumulation\n const assistantContent = contentRef.current\n if (assistantContent) {\n session.addMessage('assistant', assistantContent)\n }\n }\n\n const onModelChange = (newModel: string) => {\n currentModel = newModel\n session.setModel(newModel)\n }\n\n // Create a ref that the Ink component will populate with stream actions\n const streamRef: { current: TalkStreamActions | null } = { current: null }\n\n const { waitUntilExit } = render(\n React.createElement(TalkApp, {\n model: currentModel,\n apiKey,\n apiUrl,\n temperature: parseFloat(options.temperature),\n systemPrompt: options.system,\n enableMarkdown: options.markdown !== false,\n continueFile: options.continue,\n streamRef,\n onSend,\n onModelChange,\n onExit: () => process.exit(0),\n }),\n { exitOnCtrlC: false }\n )\n\n await waitUntilExit()\n })\n","import { v4 as uuidv4 } from 'uuid'\nimport fs from 'fs/promises'\nimport path from 'path'\nimport os from 'os'\n\nexport interface ChatMessage {\n role: 'user' | 'assistant' | 'system'\n content: string\n timestamp: string\n}\n\nexport interface ModelConfig {\n model: string\n temperature?: number\n maxOutputTokens?: number\n systemPrompt?: string\n}\n\ntype MetadataValue = string | number | boolean | null\n\nexport interface DispatchRecord {\n name: string\n type: string\n metadata: Record<string, MetadataValue>\n}\n\nexport interface PromptStepConfig {\n text: string\n model: string\n outputVariable: string\n responseFormat: 'text' | 'json' | 'markdown'\n}\n\nexport interface DispatchFlowStep {\n id: string\n type: 'prompt'\n name: string\n order: number\n enabled: boolean\n config: PromptStepConfig\n}\n\nexport interface DispatchFlow {\n name: string\n description: string\n steps: DispatchFlowStep[]\n}\n\nexport interface DispatchOptions {\n streamResponse: boolean\n recordMode: 'virtual' | 'create' | 'existing'\n flowMode: 'virtual' | 'create' | 'existing'\n}\n\nexport interface DispatchPayload {\n record: DispatchRecord\n flow: DispatchFlow\n options: DispatchOptions\n}\n\nexport class ChatSession {\n private sessionId: string\n private messages: ChatMessage[] = []\n private modelConfig: ModelConfig\n private sessionDir: string\n\n constructor(modelConfig?: Partial<ModelConfig>) {\n this.sessionId = uuidv4()\n this.modelConfig = {\n model: modelConfig?.model || 'meta/llama3.1-8b-instruct-free',\n temperature: modelConfig?.temperature ?? 0.7,\n maxOutputTokens: modelConfig?.maxOutputTokens || 2000,\n systemPrompt: modelConfig?.systemPrompt,\n }\n this.sessionDir = path.join(os.homedir(), '.runtype', 'chat-sessions')\n }\n\n addMessage(role: ChatMessage['role'], content: string): void {\n this.messages.push({\n role,\n content,\n timestamp: new Date().toISOString(),\n })\n }\n\n getMessages(): ChatMessage[] {\n return this.messages\n }\n\n clearHistory(): void {\n this.messages = []\n console.log('Chat history cleared')\n }\n\n setModel(model: string): void {\n this.modelConfig.model = model\n console.log(`Model changed to: ${model}`)\n }\n\n setTemperature(temperature: number): void {\n this.modelConfig.temperature = Math.max(0, Math.min(1, temperature))\n console.log(`Temperature set to: ${this.modelConfig.temperature}`)\n }\n\n getConversationContext(): string {\n return this.messages\n .map((m) => {\n const role = m.role === 'user' ? 'User' : m.role === 'assistant' ? 'Assistant' : 'System'\n return `${role}: ${m.content}`\n })\n .join('\\n\\n')\n }\n\n buildDispatchPayload(userInput: string): DispatchPayload {\n // Add user message to history\n this.addMessage('user', userInput)\n\n const metadata: Record<string, MetadataValue> = {}\n\n return {\n record: {\n name: 'Chat session',\n type: 'standalone',\n metadata,\n },\n flow: {\n name: 'Chat Flow',\n description: '',\n steps: [\n {\n id: '1',\n type: 'prompt',\n name: 'Chat Response',\n order: 1,\n enabled: true,\n config: {\n text: this.buildPrompt(userInput),\n model: this.modelConfig.model,\n outputVariable: 'chatResult',\n responseFormat: 'text',\n },\n },\n ],\n },\n options: {\n streamResponse: true,\n recordMode: 'virtual',\n flowMode: 'virtual',\n },\n }\n }\n\n private buildPrompt(userInput: string): string {\n const systemContext =\n this.modelConfig.systemPrompt ||\n `You are a helpful AI assistant. Provide clear, concise, and helpful responses to user questions. Use markdown formatting when appropriate.`\n\n if (this.messages.length > 1) {\n // Include conversation history for context (last 10 messages)\n const history = this.messages\n .slice(0, -1) // Exclude the current user message\n .slice(-10) // Keep last 10 messages for context\n .map((m) => `${m.role}: ${m.content}`)\n .join('\\n')\n\n return `${systemContext}\n\nConversation history:\n${history}\n\n${userInput}`\n } else {\n return `${systemContext}\n\n${userInput}`\n }\n }\n\n async saveToFile(filename?: string): Promise<string> {\n await fs.mkdir(this.sessionDir, { recursive: true })\n\n const file = filename || `session-${Date.now()}.json`\n const filepath = path.join(this.sessionDir, file)\n\n const sessionData = {\n sessionId: this.sessionId,\n modelConfig: this.modelConfig,\n messages: this.messages,\n savedAt: new Date().toISOString(),\n }\n\n await fs.writeFile(filepath, JSON.stringify(sessionData, null, 2))\n return filepath\n }\n\n async loadFromFile(filename: string): Promise<void> {\n const filepath = path.join(this.sessionDir, filename)\n const data = await fs.readFile(filepath, 'utf-8')\n const sessionData = JSON.parse(data)\n\n this.sessionId = sessionData.sessionId\n this.modelConfig = sessionData.modelConfig\n this.messages = sessionData.messages\n }\n\n async exportAsMarkdown(): Promise<string> {\n await fs.mkdir(this.sessionDir, { recursive: true })\n\n const filename = `export-${Date.now()}.md`\n const filepath = path.join(this.sessionDir, filename)\n\n let content = `# Runtype Chat Session\\n\\n`\n content += `**Session ID:** ${this.sessionId}\\n`\n content += `**Model:** ${this.modelConfig.model}\\n`\n content += `**Date:** ${new Date().toISOString()}\\n\\n`\n content += `---\\n\\n`\n\n for (const message of this.messages) {\n const role =\n message.role === 'user'\n ? '**User**'\n : message.role === 'assistant'\n ? '**Assistant**'\n : '**System**'\n content += `${role} *(${new Date(message.timestamp).toLocaleString()})*\\n\\n`\n content += `${message.content}\\n\\n`\n content += `---\\n\\n`\n }\n\n await fs.writeFile(filepath, content)\n return filepath\n }\n\n getSessionInfo(): {\n id: string\n messageCount: number\n model: string\n temperature: number\n duration: string\n } {\n const firstMessage = this.messages[0]\n const lastMessage = this.messages[this.messages.length - 1]\n\n let duration = 'N/A'\n if (firstMessage && lastMessage) {\n const start = new Date(firstMessage.timestamp)\n const end = new Date(lastMessage.timestamp)\n const diff = end.getTime() - start.getTime()\n const minutes = Math.floor(diff / 60000)\n const seconds = Math.floor((diff % 60000) / 1000)\n duration = `${minutes}m ${seconds}s`\n }\n\n return {\n id: this.sessionId,\n messageCount: this.messages.length,\n model: this.modelConfig.model,\n temperature: this.modelConfig.temperature ?? 0.7,\n duration,\n }\n }\n}\n","import { useState, useEffect, useRef } from 'react'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { Box, useApp, useInput, useStdout } from 'ink'\nimport { StatusBar, ErrorDisplay } from '@runtypelabs/ink'\nimport { useTalkStream } from './useTalkStream.js'\nimport { MessageHistory } from './MessageHistory.js'\nimport { StreamingBubble } from './StreamingBubble.js'\nimport { ChatInput } from './ChatInput.js'\nimport { ModelPicker } from './ModelPicker.js'\nimport { TALK_COMMANDS } from './types.js'\nimport type { TalkAppProps, TalkMessage } from './types.js'\n\n/** Rows consumed by StatusBar (border-single = 3) + ChatInput (border-single ~3) */\nconst CHROME_ROWS = 6\n/** Lines to scroll per arrow key press */\nconst SCROLL_STEP = 3\n\nlet messageCounter = 0\nfunction nextMessageId(): string {\n return `msg-${++messageCounter}`\n}\n\nexport function TalkApp({\n model,\n enableMarkdown: initialMarkdown,\n onSend,\n onModelChange,\n onExit,\n streamRef,\n}: TalkAppProps) {\n const { state, callbacks, reset, contentRef } = useTalkStream()\n const { exit } = useApp()\n const { stdout } = useStdout()\n\n // Expose stream callbacks via ref for Commander action integration\n useEffect(() => {\n streamRef.current = {\n getCallbacks: () => callbacks,\n getState: () => state,\n }\n })\n\n // Core state\n const [messages, setMessages] = useState<TalkMessage[]>([])\n const [scrollOffset, setScrollOffset] = useState(0)\n const [enableMarkdown, setEnableMarkdown] = useState(initialMarkdown)\n const [currentModel, setCurrentModel] = useState(model)\n const [showModelPicker, setShowModelPicker] = useState(false)\n\n // Terminal dimensions\n const terminalRows = stdout?.rows ?? 40\n const contentHeight = Math.max(5, terminalRows - CHROME_ROWS)\n\n // Track whether we're currently streaming\n const isStreaming = state.phase === 'thinking' || state.phase === 'streaming'\n\n // Double Ctrl+C handling\n const [ctrlCPressed, setCtrlCPressed] = useState(false)\n const ctrlCTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Helper to append system-style messages for command feedback\n function appendSystemMessage(text: string) {\n setMessages(prev => [\n ...prev,\n {\n id: nextMessageId(),\n role: 'assistant',\n content: `*${text}*`,\n timestamp: Date.now(),\n },\n ])\n setScrollOffset(0)\n }\n\n // Stream completion handler — create assistant message when stream completes\n const prevPhaseRef = useRef(state.phase)\n useEffect(() => {\n if (prevPhaseRef.current !== 'complete' && state.phase === 'complete') {\n const assistantContent = contentRef.current || state.content\n if (assistantContent) {\n setMessages(prev => [\n ...prev,\n {\n id: nextMessageId(),\n role: 'assistant',\n content: assistantContent,\n timestamp: Date.now(),\n },\n ])\n }\n reset()\n // Auto-scroll to bottom on new message\n setScrollOffset(0)\n }\n prevPhaseRef.current = state.phase\n }, [state.phase, state.content, contentRef, reset])\n\n // Handle user sending a message\n function handleSend(text: string) {\n // Create user message\n const userMessage: TalkMessage = {\n id: nextMessageId(),\n role: 'user',\n content: text,\n timestamp: Date.now(),\n }\n setMessages(prev => [...prev, userMessage])\n\n // Auto-scroll to bottom\n setScrollOffset(0)\n\n // Reset stream state and trigger dispatch\n reset()\n if (onSend) {\n onSend(text, callbacks, contentRef).catch(() => {\n // Error is handled by the stream error state\n })\n }\n }\n\n // Handle slash commands\n function handleSlashCommand(command: string, args: string) {\n switch (command) {\n case '/model':\n setShowModelPicker(true)\n break\n case '/save': {\n const filename = args.trim() || `talk-${Date.now()}.json`\n const savePath = path.join(process.cwd(), '.runtype', 'conversations', filename)\n fs.mkdirSync(path.dirname(savePath), { recursive: true })\n const data = {\n model: currentModel,\n messages: messages.map(m => ({ role: m.role, content: m.content, timestamp: m.timestamp })),\n savedAt: new Date().toISOString(),\n }\n fs.writeFileSync(savePath, JSON.stringify(data, null, 2))\n appendSystemMessage(`Conversation saved to ${savePath}`)\n break\n }\n case '/exit':\n onExit()\n break\n case '/clear':\n setMessages([])\n setScrollOffset(0)\n appendSystemMessage('Message history cleared')\n break\n case '/help': {\n const helpText = TALK_COMMANDS.map(c => `${c.name} - ${c.description}`).join('\\n')\n appendSystemMessage(`Available commands:\\n${helpText}`)\n break\n }\n case '/raw':\n setEnableMarkdown(prev => !prev)\n appendSystemMessage(`Markdown rendering ${!enableMarkdown ? 'enabled' : 'disabled'}`)\n break\n default:\n appendSystemMessage(`Unknown command: ${command}. Type /help for available commands.`)\n break\n }\n }\n\n // Model picker handlers\n function handleModelSelect(newModel: string) {\n setCurrentModel(newModel)\n setShowModelPicker(false)\n onModelChange?.(newModel)\n appendSystemMessage(`Model changed to ${newModel}`)\n }\n\n function handleModelCancel() {\n setShowModelPicker(false)\n }\n\n // Keyboard handling\n useInput((_input, key) => {\n // Ctrl+C: double-press to exit\n if (key.ctrl && _input === 'c') {\n if (ctrlCPressed) {\n if (ctrlCTimeout.current) {\n clearTimeout(ctrlCTimeout.current)\n }\n onExit()\n exit()\n } else {\n setCtrlCPressed(true)\n ctrlCTimeout.current = setTimeout(() => {\n setCtrlCPressed(false)\n }, 3000)\n }\n return\n }\n\n // Arrow keys for scrolling when streaming (input handles its own arrows when active)\n if (isStreaming) {\n if (key.upArrow) {\n setScrollOffset(prev => prev + SCROLL_STEP)\n return\n }\n if (key.downArrow) {\n setScrollOffset(prev => Math.max(0, prev - SCROLL_STEP))\n return\n }\n }\n })\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (ctrlCTimeout.current) clearTimeout(ctrlCTimeout.current)\n }\n }, [])\n\n // Status bar hints\n const statusRight = (() => {\n if (ctrlCPressed) return 'Press Ctrl+C again to exit'\n if (showModelPicker) return 'Select a model | Esc to cancel'\n if (isStreaming) return 'Streaming... | Ctrl+C to exit'\n const scrollHint = scrollOffset > 0 ? ` | +${scrollOffset}` : ''\n return `Shift+Enter: newline | /help${scrollHint}`\n })()\n\n return (\n <Box flexDirection=\"column\" height={terminalRows}>\n {/* Message history area */}\n <Box flexDirection=\"column\" flexGrow={1} overflow=\"hidden\">\n <MessageHistory\n messages={messages}\n enableMarkdown={enableMarkdown}\n maxHeight={contentHeight - (isStreaming ? 6 : 0)}\n scrollOffset={scrollOffset}\n />\n {isStreaming && (\n <StreamingBubble\n content={state.content}\n phase={state.phase}\n enableMarkdown={enableMarkdown}\n />\n )}\n {state.phase === 'error' && state.error && (\n <ErrorDisplay error={state.error} />\n )}\n </Box>\n\n {/* Model picker overlay (replaces input when active) */}\n {showModelPicker ? (\n <ModelPicker\n currentModel={currentModel}\n onSelect={handleModelSelect}\n onCancel={handleModelCancel}\n />\n ) : (\n <ChatInput\n onSubmit={handleSend}\n onSlashCommand={handleSlashCommand}\n disabled={isStreaming}\n placeholder=\"Type a message...\"\n />\n )}\n\n {/* Status bar */}\n <StatusBar\n left={`Model: ${currentModel}`}\n right={statusRight}\n />\n </Box>\n )\n}\n\n// Re-export props type for convenience\nexport type { TalkAppProps }\n","import { useState, useRef, useMemo, useCallback } from 'react'\nimport type { TalkStreamState, TalkStreamCallbacks } from './types.js'\n\nconst INITIAL_STATE: TalkStreamState = {\n phase: 'idle',\n content: '',\n error: null,\n}\n\n/**\n * Talk-specific stream hook that maps dispatch SSE events to React state.\n *\n * Simpler than useMarathonStream — no tools, iterations, or cost tracking.\n * Just tracks the streaming phase, accumulated content, and errors.\n *\n * Callbacks match the SDK's StreamCallbacks interface shape so they can\n * be passed directly to processStream.\n *\n * @returns `{ state, callbacks, reset, contentRef }` where `callbacks` satisfies SDK StreamCallbacks\n */\nexport function useTalkStream(): {\n state: TalkStreamState\n callbacks: TalkStreamCallbacks\n reset: () => void\n contentRef: React.MutableRefObject<string>\n} {\n const [state, setState] = useState<TalkStreamState>(INITIAL_STATE)\n\n // Use a ref for content access to avoid stale closures in callbacks\n const contentRef = useRef('')\n\n const callbacks = useMemo<TalkStreamCallbacks>(\n () => ({\n onFlowStart(_event) {\n contentRef.current = ''\n setState({ phase: 'thinking', content: '', error: null })\n },\n\n onStepChunk(chunk) {\n contentRef.current += chunk\n setState(prev => ({\n ...prev,\n phase: 'streaming',\n content: prev.content + chunk,\n }))\n },\n\n onFlowComplete(_event) {\n setState(prev => ({ ...prev, phase: 'complete' }))\n },\n\n onError(error) {\n setState(prev => ({\n ...prev,\n phase: 'error',\n error,\n }))\n },\n }),\n []\n )\n\n const reset = useCallback(() => {\n contentRef.current = ''\n setState(INITIAL_STATE)\n }, [])\n\n return { state, callbacks, reset, contentRef }\n}\n","import React from 'react'\nimport { Box, Text } from 'ink'\nimport { theme } from '@runtypelabs/ink'\nimport { MessageBubble } from './MessageBubble.js'\nimport type { TalkMessage } from './types.js'\n\ninterface MessageHistoryProps {\n messages: TalkMessage[]\n enableMarkdown: boolean\n maxHeight: number\n scrollOffset: number\n}\n\nfunction MessageHistoryInner({ messages, enableMarkdown, maxHeight, scrollOffset }: MessageHistoryProps) {\n if (messages.length === 0) {\n return (\n <Box height={maxHeight} flexDirection=\"column\" justifyContent=\"center\" alignItems=\"center\">\n <Text color={theme.muted}>Start a conversation...</Text>\n </Box>\n )\n }\n\n return (\n <Box\n flexDirection=\"column\"\n height={maxHeight}\n overflow=\"hidden\"\n >\n <Box flexDirection=\"column\" marginTop={-scrollOffset}>\n {messages.map(message => (\n <MessageBubble\n key={message.id}\n message={message}\n enableMarkdown={enableMarkdown}\n />\n ))}\n </Box>\n </Box>\n )\n}\n\nexport const MessageHistory = React.memo(MessageHistoryInner)\n","import React from 'react'\nimport { Box, Text } from 'ink'\nimport { StreamOutput, theme } from '@runtypelabs/ink'\nimport { useRelativeTime } from './useRelativeTime.js'\nimport type { TalkMessage } from './types.js'\n\ninterface MessageBubbleProps {\n message: TalkMessage\n enableMarkdown: boolean\n}\n\nfunction MessageBubbleInner({ message, enableMarkdown }: MessageBubbleProps) {\n const relativeTime = useRelativeTime(message.timestamp)\n\n const isUser = message.role === 'user'\n\n if (isUser) {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box justifyContent=\"space-between\">\n <Text bold color={theme.primary}>You</Text>\n <Text color={theme.muted} dimColor>{relativeTime}</Text>\n </Box>\n <StreamOutput\n content={message.content}\n isStreaming={false}\n enableMarkdown={false}\n />\n </Box>\n )\n }\n\n // Assistant message — indented with border\n return (\n <Box\n flexDirection=\"column\"\n marginLeft={2}\n borderStyle=\"single\"\n borderColor={theme.info}\n paddingX={1}\n marginBottom={1}\n >\n <Box justifyContent=\"space-between\">\n <Text bold color={theme.success}>Assistant</Text>\n <Text color={theme.muted} dimColor>{relativeTime}</Text>\n </Box>\n <StreamOutput\n content={message.content}\n isStreaming={false}\n enableMarkdown={enableMarkdown}\n />\n </Box>\n )\n}\n\nexport const MessageBubble = React.memo(MessageBubbleInner)\n","import { useState, useEffect } from 'react'\n\nfunction formatRelativeTime(timestamp: number): string {\n const diff = Math.floor((Date.now() - timestamp) / 1000)\n if (diff < 10) return 'just now'\n if (diff < 60) return `${diff}s ago`\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`\n if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`\n return `${Math.floor(diff / 86400)}d ago`\n}\n\n/**\n * Hook that returns a relative time string for a given timestamp.\n * Updates every 30 seconds.\n */\nexport function useRelativeTime(timestamp: number): string {\n const [relative, setRelative] = useState(() => formatRelativeTime(timestamp))\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRelative(formatRelativeTime(timestamp))\n }, 30000)\n\n return () => clearInterval(interval)\n }, [timestamp])\n\n return relative\n}\n","import { Box, Text } from 'ink'\nimport { StreamOutput, Spinner, theme } from '@runtypelabs/ink'\nimport type { TalkStreamPhase } from './types.js'\n\ninterface StreamingBubbleProps {\n content: string\n phase: TalkStreamPhase\n enableMarkdown: boolean\n}\n\nexport function StreamingBubble({ content, phase, enableMarkdown }: StreamingBubbleProps) {\n return (\n <Box\n flexDirection=\"column\"\n marginLeft={2}\n borderStyle=\"single\"\n borderColor={theme.info}\n paddingX={1}\n marginBottom={1}\n >\n <Box justifyContent=\"space-between\">\n <Text bold color={theme.success}>Assistant</Text>\n <Text color={theme.muted} dimColor>streaming...</Text>\n </Box>\n {phase === 'thinking' && !content ? (\n <Spinner label=\"Thinking...\" />\n ) : (\n <StreamOutput\n content={content}\n isStreaming={phase === 'streaming'}\n enableMarkdown={enableMarkdown}\n />\n )}\n </Box>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport TextInput from 'ink-text-input'\nimport { theme } from '@runtypelabs/ink'\nimport { SlashCommandMenu } from './SlashCommandMenu.js'\n\ninterface ChatInputProps {\n onSubmit: (text: string) => void\n onSlashCommand?: (command: string, args: string) => void\n disabled?: boolean\n placeholder?: string\n}\n\nexport function ChatInput({\n onSubmit,\n onSlashCommand,\n disabled = false,\n placeholder = 'Type a message...',\n}: ChatInputProps) {\n const [lines, setLines] = useState<string[]>([''])\n const [cursorLine, setCursorLine] = useState(0)\n const [inputHistory, setInputHistory] = useState<string[]>([])\n const [historyIndex, setHistoryIndex] = useState(-1)\n const [showSlashMenu, setShowSlashMenu] = useState(false)\n\n const currentValue = lines[cursorLine] || ''\n\n const handleChange = useCallback((value: string) => {\n setLines(prev => {\n const next = [...prev]\n next[cursorLine] = value\n return next\n })\n // Reset history browsing when typing\n if (historyIndex !== -1) {\n setHistoryIndex(-1)\n }\n\n // Show slash menu when \"/\" is the first character on the first line\n if (cursorLine === 0 && value.startsWith('/')) {\n setShowSlashMenu(true)\n } else {\n setShowSlashMenu(false)\n }\n }, [cursorLine, historyIndex])\n\n const handleCommandSelect = useCallback((command: string) => {\n setShowSlashMenu(false)\n // Execute slash command immediately\n if (onSlashCommand) {\n onSlashCommand(command, '')\n }\n // Reset input\n setLines([''])\n setCursorLine(0)\n setHistoryIndex(-1)\n }, [onSlashCommand])\n\n const handleMenuCancel = useCallback(() => {\n setShowSlashMenu(false)\n setLines([''])\n setCursorLine(0)\n }, [])\n\n const handleSubmit = useCallback(() => {\n const fullText = lines.join('\\n').trim()\n if (!fullText) return\n\n // Check for slash command\n if (fullText.startsWith('/') && onSlashCommand) {\n const spaceIndex = fullText.indexOf(' ')\n const command = spaceIndex === -1 ? fullText : fullText.slice(0, spaceIndex)\n const args = spaceIndex === -1 ? '' : fullText.slice(spaceIndex + 1)\n onSlashCommand(command, args)\n } else {\n onSubmit(fullText)\n }\n\n // Save to history and reset input\n setInputHistory(prev => [...prev, fullText])\n setLines([''])\n setCursorLine(0)\n setHistoryIndex(-1)\n setShowSlashMenu(false)\n }, [lines, onSubmit, onSlashCommand])\n\n useInput((_input, key) => {\n if (disabled) return\n\n // Shift+Enter: insert new line\n if (key.return && key.shift) {\n setLines(prev => {\n const next = [...prev]\n next.splice(cursorLine + 1, 0, '')\n return next\n })\n setCursorLine(prev => prev + 1)\n return\n }\n\n // Up arrow: navigate lines or browse history\n if (key.upArrow && !showSlashMenu) {\n if (cursorLine > 0) {\n // Navigate to previous line in multi-line input\n setCursorLine(prev => prev - 1)\n } else if (lines.length === 1 && lines[0] === '' && inputHistory.length > 0) {\n // Browse history when on first line with empty input\n const newIndex = historyIndex === -1\n ? inputHistory.length - 1\n : Math.max(0, historyIndex - 1)\n setHistoryIndex(newIndex)\n setLines([inputHistory[newIndex] || ''])\n }\n return\n }\n\n // Down arrow: navigate lines or browse history\n if (key.downArrow && !showSlashMenu) {\n if (cursorLine < lines.length - 1) {\n // Navigate to next line in multi-line input\n setCursorLine(prev => prev + 1)\n } else if (historyIndex !== -1) {\n // Browse history forward\n const newIndex = historyIndex + 1\n if (newIndex >= inputHistory.length) {\n setHistoryIndex(-1)\n setLines([''])\n } else {\n setHistoryIndex(newIndex)\n setLines([inputHistory[newIndex] || ''])\n }\n }\n return\n }\n }, { isActive: !disabled })\n\n if (disabled) {\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={theme.muted}\n paddingX={1}\n >\n <Text dimColor>{placeholder}</Text>\n </Box>\n )\n }\n\n return (\n <Box flexDirection=\"column\">\n {/* Slash command autocomplete menu */}\n {showSlashMenu && (\n <SlashCommandMenu\n filter={currentValue}\n onSelect={handleCommandSelect}\n onCancel={handleMenuCancel}\n />\n )}\n\n {/* Input area */}\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={theme.muted}\n paddingX={1}\n >\n {lines.map((line, index) => (\n <Box key={index}>\n <Text color={theme.muted}>{index === 0 ? '> ' : ' '}</Text>\n {index === cursorLine ? (\n <TextInput\n value={line}\n onChange={handleChange}\n onSubmit={handleSubmit}\n placeholder={index === 0 ? placeholder : ''}\n />\n ) : (\n <Text dimColor>{line}</Text>\n )}\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import { Box, Text, useInput } from 'ink'\nimport SelectInput from 'ink-select-input'\nimport { theme } from '@runtypelabs/ink'\nimport { TALK_COMMANDS } from './types.js'\n\ninterface SlashCommandMenuProps {\n filter: string\n onSelect: (command: string) => void\n onCancel: () => void\n}\n\nexport function SlashCommandMenu({ filter, onSelect, onCancel }: SlashCommandMenuProps) {\n // Filter commands by matching filter string against command names\n const filtered = TALK_COMMANDS.filter(cmd =>\n cmd.name.toLowerCase().startsWith(filter.toLowerCase())\n )\n\n useInput((_input, key) => {\n if (key.escape) {\n onCancel()\n }\n })\n\n if (filtered.length === 0) {\n return (\n <Box borderStyle=\"single\" borderColor={theme.info} paddingX={1}>\n <Text color={theme.muted}>No matching commands</Text>\n </Box>\n )\n }\n\n const items = filtered.map(cmd => ({\n label: `${cmd.name} - ${cmd.description}`,\n value: cmd.name,\n }))\n\n return (\n <Box borderStyle=\"single\" borderColor={theme.info} paddingX={1} flexDirection=\"column\">\n <Text color={theme.info} bold>Commands</Text>\n <SelectInput\n items={items}\n onSelect={(item) => onSelect(item.value)}\n limit={6}\n />\n </Box>\n )\n}\n","import type { StreamCallbacks as SDKStreamCallbacks } from '@runtypelabs/sdk'\n\nexport interface TalkMessage {\n id: string\n role: 'user' | 'assistant'\n content: string\n timestamp: number\n}\n\nexport type TalkStreamPhase = 'idle' | 'thinking' | 'streaming' | 'complete' | 'error'\n\nexport interface TalkStreamState {\n phase: TalkStreamPhase\n content: string\n error: Error | null\n}\n\n/**\n * Callbacks shape for dispatch SSE streaming.\n * Re-exports the SDK's StreamCallbacks for use in the talk UI.\n */\nexport type TalkStreamCallbacks = SDKStreamCallbacks\n\nexport interface TalkStreamActions {\n getCallbacks: () => TalkStreamCallbacks\n getState: () => TalkStreamState\n}\n\nexport interface SlashCommand {\n name: string\n description: string\n hasArgs: boolean\n}\n\nexport const TALK_COMMANDS: SlashCommand[] = [\n { name: '/model', description: 'Change AI model', hasArgs: false },\n { name: '/save', description: 'Save conversation to file', hasArgs: true },\n { name: '/exit', description: 'Exit chat session', hasArgs: false },\n { name: '/clear', description: 'Clear message history', hasArgs: false },\n { name: '/help', description: 'Show available commands', hasArgs: false },\n { name: '/raw', description: 'Toggle markdown rendering', hasArgs: false },\n]\n\nexport interface TalkAppProps {\n model: string\n apiKey: string\n apiUrl: string\n temperature: number\n systemPrompt?: string\n enableMarkdown: boolean\n continueFile?: string\n streamRef: React.MutableRefObject<TalkStreamActions | null>\n onSend?: (text: string, callbacks: TalkStreamCallbacks, contentRef: { current: string }) => Promise<void>\n onModelChange?: (model: string) => void\n onExit: () => void\n}\n","import { Box, Text, useInput } from 'ink'\nimport SelectInput from 'ink-select-input'\nimport { theme } from '@runtypelabs/ink'\n\ninterface ModelPickerProps {\n currentModel: string\n onSelect: (model: string) => void\n onCancel: () => void\n}\n\nconst MODELS = [\n { label: 'Claude Sonnet 4.5', value: 'claude-sonnet-4-5' },\n { label: 'Claude Haiku 3.5', value: 'claude-3-5-haiku' },\n { label: 'GPT-5 Mini', value: 'gpt-5-mini' },\n { label: 'GPT-4.1 Mini', value: 'gpt-4.1-mini' },\n { label: 'Gemini 3 Flash', value: 'gemini-3-flash' },\n { label: 'Gemini 2.5 Flash', value: 'gemini-2.5-flash' },\n]\n\nexport function ModelPicker({ currentModel, onSelect, onCancel }: ModelPickerProps) {\n useInput((_input, key) => {\n if (key.escape) {\n onCancel()\n }\n })\n\n const items = MODELS.map(m => ({\n label: m.value === currentModel ? `${m.label} *` : m.label,\n value: m.value,\n }))\n\n const initialIndex = Math.max(0, MODELS.findIndex(m => m.value === currentModel))\n\n return (\n <Box borderStyle=\"single\" borderColor={theme.info} paddingX={1} flexDirection=\"column\">\n <Text color={theme.info} bold>Select Model</Text>\n <Text color={theme.muted} dimColor>Esc to cancel</Text>\n <SelectInput\n items={items}\n onSelect={(item) => onSelect(item.value)}\n initialIndex={initialIndex}\n />\n </Box>\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport Conf from 'conf'\nimport path from 'path'\nimport os from 'os'\n\ninterface CliConfig {\n apiUrl?: string\n defaultModel?: string\n defaultTemperature?: number\n outputFormat?: 'table' | 'json' | 'plain'\n streamResponses?: boolean\n [key: string]: string | number | boolean | undefined\n}\n\ntype CliConfigKey = Extract<keyof CliConfig, string>\n\nconst CLI_CONFIG_KEYS: readonly CliConfigKey[] = [\n 'apiUrl',\n 'defaultModel',\n 'defaultTemperature',\n 'outputFormat',\n 'streamResponses',\n]\n\nconst isCliConfigKey = (value: string): value is CliConfigKey => {\n return (CLI_CONFIG_KEYS as readonly string[]).includes(value)\n}\n\nexport const configCommand = new Command('config').description('Manage CLI configuration')\n\nconst config = new Conf<CliConfig>({\n projectName: 'runtype-cli',\n projectSuffix: '',\n configName: 'config',\n cwd: path.join(os.homedir(), '.runtype'),\n})\n\nconfigCommand\n .command('get [key]')\n .description('Get configuration value')\n .action((key?: string) => {\n if (key) {\n if (!isCliConfigKey(key)) {\n console.log(chalk.yellow(`Configuration key '${key}' not found`))\n return\n }\n\n const value = config.get(key)\n if (value !== undefined) {\n console.log(value)\n } else {\n console.log(chalk.yellow(`Configuration key '${key}' not found`))\n }\n } else {\n // Show all configuration\n const allConfig = config.store\n if (Object.keys(allConfig).length > 0) {\n console.log(chalk.cyan('Current Configuration:'))\n for (const [k, v] of Object.entries(allConfig)) {\n console.log(` ${chalk.green(k)}: ${v}`)\n }\n } else {\n console.log(chalk.gray('No configuration set'))\n }\n }\n })\n\nconfigCommand\n .command('set <key> <value>')\n .description('Set configuration value')\n .action((key: string, value: string) => {\n if (!isCliConfigKey(key)) {\n console.log(chalk.red(`Invalid configuration key: ${key}`))\n console.log(chalk.gray(`Valid keys: ${CLI_CONFIG_KEYS.join(', ')}`))\n process.exit(1)\n }\n\n // Parse value based on key type\n let parsedValue: CliConfig[typeof key]\n\n switch (key) {\n case 'defaultTemperature':\n {\n const temperature = parseFloat(value)\n if (isNaN(temperature) || temperature < 0 || temperature > 1) {\n console.log(chalk.red('Temperature must be a number between 0 and 1'))\n process.exit(1)\n }\n parsedValue = temperature as CliConfig[typeof key]\n }\n break\n\n case 'streamResponses':\n parsedValue = (value === 'true') as CliConfig[typeof key]\n break\n\n case 'outputFormat':\n if (!['table', 'json', 'plain'].includes(value)) {\n console.log(chalk.red('Output format must be: table, json, or plain'))\n process.exit(1)\n }\n parsedValue = value as CliConfig[typeof key]\n break\n\n default:\n parsedValue = value as CliConfig[typeof key]\n break\n }\n\n config.set(key, parsedValue)\n console.log(chalk.green(`Configuration updated: ${key} = ${parsedValue}`))\n })\n\nconfigCommand\n .command('reset')\n .description('Reset all configuration to defaults')\n .action(() => {\n config.clear()\n console.log(chalk.green('Configuration reset to defaults'))\n })\n\nconfigCommand\n .command('path')\n .description('Show configuration file path')\n .action(() => {\n console.log(config.path)\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport open from 'open'\nimport { getApiUrl, getApiVersion, getDashboardUrl } from '../config/env'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { MutationResult, EntityCard } from '../ink/shared/index.js'\n\ninterface InitOptions {\n from?: string\n name?: string\n open?: boolean\n json?: boolean\n apiUrl?: string\n tty?: boolean\n noTty?: boolean\n}\n\ninterface AgentCardSkill {\n id: string\n name: string\n description?: string\n}\n\ninterface AgentCard {\n name: string\n description?: string\n url: string\n skills?: AgentCardSkill[]\n}\n\ninterface ValidationSuccessResponse {\n valid: true\n templateId: string\n agentCard: AgentCard\n}\n\ninterface ValidationErrorResponse {\n valid: false\n error: string\n code: string\n}\n\ntype ValidationResponse = ValidationSuccessResponse | ValidationErrorResponse\n\ninterface CreateSuccessResponse {\n success: true\n product: {\n id: string\n name: string\n description: string | null\n status: string\n }\n capabilities: Array<{\n id: string\n type: string\n name: string\n agentId?: string\n }>\n redirectUrl: string\n}\n\ninterface CreateErrorResponse {\n success: false\n error: string\n code: string\n}\n\ntype CreateResponse = CreateSuccessResponse | CreateErrorResponse\n\nfunction displayAgentCard(agentCard: AgentCard): void {\n console.log(chalk.cyan('\\nAgent Details:'))\n console.log(` Name: ${agentCard.name}`)\n if (agentCard.description) {\n console.log(` Description: ${agentCard.description}`)\n }\n console.log(` URL: ${agentCard.url}`)\n\n if (agentCard.skills && agentCard.skills.length > 0) {\n console.log(' Skills:')\n agentCard.skills.forEach((skill) => {\n const desc = skill.description ? ` - ${skill.description}` : ''\n console.log(` ${chalk.cyan('\\u2022')} ${skill.name}${desc}`)\n })\n }\n}\n\nasync function createProduct(\n apiKey: string,\n templateId: string,\n agentCard: AgentCard,\n sourceUrl: string,\n productName?: string,\n apiUrl?: string\n): Promise<CreateResponse> {\n const baseUrl = apiUrl || getApiUrl()\n const response = await fetch(`${baseUrl}/${getApiVersion()}/quick-start/create`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n templateId,\n agentCard,\n productName,\n sourceUrl,\n }),\n })\n\n const contentType = response.headers.get('content-type') || ''\n if (!contentType.includes('application/json')) {\n return {\n success: false,\n error: response.ok\n ? 'API returned invalid response'\n : `API error: ${response.status} ${response.statusText}`,\n code: 'API_ERROR',\n }\n }\n\n return response.json() as Promise<CreateResponse>\n}\n\nfunction displayCreationSuccess(\n result: CreateSuccessResponse,\n agentCard: AgentCard,\n dashboardBaseUrl: string,\n jsonOutput: boolean\n): void {\n const productUrl = `${dashboardBaseUrl}/products/${result.product.id}?launch=true`\n\n if (jsonOutput) {\n console.log(\n JSON.stringify(\n {\n status: 'created',\n product: result.product,\n agentCard,\n dashboardUrl: productUrl,\n },\n null,\n 2\n )\n )\n return\n }\n\n console.log(`\\nProduct ID: ${result.product.id}`)\n console.log(`Name: ${result.product.name}`)\n console.log(`Dashboard: ${productUrl}`)\n\n console.log(chalk.cyan('\\nNext steps:'))\n console.log(' 1. Visit the dashboard to configure surfaces')\n console.log(' 2. Or run: runtype products init --from <another-url>')\n}\n\nasync function validateUrl(url: string, apiUrl?: string): Promise<ValidationResponse> {\n const baseUrl = apiUrl || getApiUrl()\n const response = await fetch(`${baseUrl}/${getApiVersion()}/quick-start/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url }),\n })\n\n const contentType = response.headers.get('content-type') || ''\n if (!contentType.includes('application/json')) {\n return {\n valid: false,\n error: response.ok\n ? 'API returned invalid response'\n : `API error: ${response.status} ${response.statusText}`,\n code: 'API_ERROR',\n }\n }\n\n return response.json() as Promise<ValidationResponse>\n}\n\nexport const productsCommand = new Command('products').description('Manage products')\n\nproductsCommand\n .command('init')\n .description('Initialize a product from an external resource')\n .option('--from <url>', 'URL to validate and import')\n .option('--name <name>', 'Custom product name (defaults to agent name)')\n .option('--open', 'Open browser to dashboard instead of creating via API')\n .option('--json', 'Output in JSON format')\n .option('--api-url <url>', 'Override API URL')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: InitOptions) => {\n const isJsonMode = !!options.json\n\n if (!isTTY(options) || isJsonMode) {\n // Non-TTY / JSON path: keep existing imperative logic\n let sourceUrl = options.from\n if (!sourceUrl) {\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n { status: 'error', error: 'Missing --from URL', code: 'MISSING_URL' },\n null,\n 2\n )\n )\n process.exit(1)\n }\n console.error(chalk.red('--from URL required in non-TTY mode'))\n process.exit(1)\n }\n\n try {\n const result = await validateUrl(sourceUrl, options.apiUrl)\n\n if (!result.valid) {\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n { status: 'error', error: result.error, code: result.code },\n null,\n 2\n )\n )\n } else {\n console.error(chalk.red(result.error))\n }\n process.exit(1)\n }\n\n displayAgentCard(result.agentCard)\n\n const productName = options.name\n\n const apiKey = isJsonMode\n ? await getApiKeyOrExit(isJsonMode, result.agentCard)\n : await ensureAuth({ apiUrl: options.apiUrl })\n\n if (!apiKey) {\n process.exit(1)\n }\n\n if (options.open) {\n const dashboardUrl = getDashboardUrl()\n const encodedUrl = encodeURIComponent(sourceUrl)\n const targetUrl = `${dashboardUrl}/now?from=${encodedUrl}&cli=true`\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n { status: 'browser_opened', agentCard: result.agentCard, url: targetUrl },\n null,\n 2\n )\n )\n } else {\n console.log(chalk.cyan('\\nOpening browser to complete setup...'))\n }\n await open(targetUrl)\n return\n }\n\n const createResult = await createProduct(\n apiKey,\n result.templateId,\n result.agentCard,\n sourceUrl,\n productName,\n options.apiUrl\n )\n\n if (!createResult.success) {\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n { status: 'error', error: createResult.error, code: createResult.code },\n null,\n 2\n )\n )\n } else {\n console.error(chalk.red(createResult.error))\n }\n process.exit(1)\n }\n\n displayCreationSuccess(createResult, result.agentCard, getDashboardUrl(), isJsonMode)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed: ${message}`))\n process.exit(1)\n }\n\n return\n }\n\n // TTY path: render Ink component for product init\n const ProductInitApp = () => {\n const [loading, setLoading] = useState(!!options.from)\n const [loadingLabel, setLoadingLabel] = useState('Validating URL...')\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n if (!options.from) return undefined\n\n const run = async () => {\n try {\n const result = await validateUrl(options.from!, options.apiUrl)\n if (!result.valid) {\n setError(new Error(result.error))\n setSuccess(false)\n setLoading(false)\n return\n }\n\n const productName = options.name || result.agentCard.name\n\n const apiKey = await ensureAuth({ apiUrl: options.apiUrl })\n if (!apiKey) {\n setError(new Error('Authentication required'))\n setSuccess(false)\n setLoading(false)\n return\n }\n\n if (options.open) {\n const dashboardUrl = getDashboardUrl()\n const encodedUrl = encodeURIComponent(options.from!)\n const targetUrl = `${dashboardUrl}/now?from=${encodedUrl}&cli=true`\n await open(targetUrl)\n setSuccess(true)\n setLoading(false)\n setResultNode(\n React.createElement(EntityCard, {\n fields: [\n { label: 'Status', value: 'Browser opened' },\n { label: 'URL', value: targetUrl },\n ],\n })\n )\n return\n }\n\n setLoadingLabel('Creating product...')\n const createResult = await createProduct(\n apiKey,\n result.templateId,\n result.agentCard,\n options.from!,\n productName,\n options.apiUrl\n )\n\n if (!createResult.success) {\n setError(new Error(createResult.error))\n setSuccess(false)\n setLoading(false)\n return\n }\n\n const dashboardUrl = getDashboardUrl()\n setResultNode(\n React.createElement(EntityCard, {\n fields: [\n { label: 'Product ID', value: createResult.product.id, color: 'green' },\n { label: 'Name', value: createResult.product.name },\n {\n label: 'Dashboard',\n value: `${dashboardUrl}/products/${createResult.product.id}`,\n },\n ],\n })\n )\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n\n run()\n return undefined\n }, [])\n\n // If no --from URL, show message to use interactive init wizard\n if (!options.from) {\n return React.createElement(MutationResult, {\n loading: false,\n success: false,\n error: new Error('Use \"runtype init\" for interactive product setup, or provide --from <url>'),\n })\n }\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel,\n success,\n successMessage: 'Product Created',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(ProductInitApp))\n await waitUntilExit()\n })\n\nasync function getApiKeyOrExit(isJsonMode: boolean, agentCard: AgentCard): Promise<string | null> {\n const { CredentialStore } = await import('../auth/credential-store')\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n if (isJsonMode) {\n console.log(\n JSON.stringify(\n {\n status: 'unauthenticated',\n agentCard,\n message: 'Authentication required to create product',\n },\n null,\n 2\n )\n )\n }\n return null\n }\n\n return apiKey\n}\n","import { Command } from 'commander'\nimport React from 'react'\nimport { render } from 'ink'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { InitApp } from '../ink/init/InitApp.js'\nimport { CredentialStore } from '../auth/credential-store'\nimport { ApiKeyManager } from '../auth/api-key-manager'\nimport { getApiUrl } from '../config/env'\n\nexport const initCommand = new Command('init')\n .description('Set up Runtype CLI with guided onboarding')\n .option('--api-url <url>', 'Custom API URL')\n .option('--api-key <key>', 'API key for non-interactive setup')\n .option('--name <name>', 'Product name for non-interactive setup')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(\n async (options: {\n apiUrl?: string\n apiKey?: string\n name?: string\n tty?: boolean\n noTty?: boolean\n }) => {\n // Non-TTY path: require --api-key, output JSON\n if (!isTTY(options)) {\n if (!options.apiKey) {\n console.error(\n JSON.stringify(\n {\n status: 'error',\n error: 'Missing --api-key flag for non-interactive mode',\n },\n null,\n 2\n )\n )\n process.exit(1)\n }\n\n try {\n const apiKeyManager = new ApiKeyManager()\n const isValid = await apiKeyManager.validateApiKey(\n options.apiKey,\n options.apiUrl\n )\n\n if (!isValid) {\n console.error(\n JSON.stringify(\n { status: 'error', error: 'Invalid API key' },\n null,\n 2\n )\n )\n process.exit(1)\n }\n\n const userData = await apiKeyManager.getCurrentUser(\n options.apiKey,\n options.apiUrl\n )\n\n const store = new CredentialStore()\n await store.saveCredentials({\n apiKey: options.apiKey,\n // @snake-case-ok: API auth/me response uses snake_case\n userId: userData.user_id,\n // @snake-case-ok: API auth/me response uses snake_case\n orgId: userData.org_id ?? undefined,\n apiUrl: options.apiUrl || getApiUrl(),\n })\n\n console.log(\n JSON.stringify(\n {\n status: 'authenticated',\n // @snake-case-ok: API auth/me response uses snake_case\n userId: userData.user_id,\n // @snake-case-ok: API auth/me response uses snake_case\n orgId: userData.org_id,\n },\n null,\n 2\n )\n )\n } catch (error: unknown) {\n const message =\n error instanceof Error ? error.message : 'Authentication failed'\n console.error(\n JSON.stringify({ status: 'error', error: message }, null, 2)\n )\n process.exit(1)\n }\n\n return\n }\n\n // TTY path: render Ink wizard\n const { waitUntilExit } = render(\n React.createElement(InitApp, {\n apiUrl: options.apiUrl,\n onComplete: () => {},\n }),\n { exitOnCtrlC: false }\n )\n\n await waitUntilExit()\n }\n )\n","import { useState, useEffect, useCallback } from 'react'\nimport { Box, Text, useApp, useInput } from 'ink'\nimport TextInput from 'ink-text-input'\nimport SelectInput from 'ink-select-input'\nimport { Spinner, theme } from '@runtypelabs/ink'\nimport { CredentialStore } from '../../auth/credential-store.js'\nimport { OAuthManager } from '../../auth/oauth-manager.js'\nimport { ApiKeyManager } from '../../auth/api-key-manager.js'\nimport {\n getApiUrl,\n getApiVersion,\n getClerkPublishableKey,\n getDashboardUrl,\n} from '../../config/env.js'\nimport { WizardStep } from './WizardStep.js'\nimport { StepSummary } from './StepSummary.js'\nimport type { StepAnswer } from './StepSummary.js'\n\ntype AuthMethod = 'signup' | 'login' | 'apikey'\ntype ProductChoice = 'url' | 'skip'\n\ninterface AgentCardSkill {\n id: string\n name: string\n description?: string\n}\n\ninterface AgentCard {\n name: string\n description?: string\n url: string\n skills?: AgentCardSkill[]\n}\n\ninterface WizardState {\n step: number\n authMethod: AuthMethod | null\n apiKey: string | null\n apiKeyInput: string\n urlInput: string\n productChoice: ProductChoice | null\n agentCard: AgentCard | null\n templateId: string | null\n productName: string\n error: string | null\n loading: boolean\n loadingLabel: string\n complete: boolean\n createdProductId: string | null\n}\n\nexport interface InitAppProps {\n apiUrl?: string\n onComplete: () => void\n}\n\nconst TOTAL_VISIBLE_STEPS = 5\n\nfunction getStepNumber(step: number): number {\n // Map internal step numbers to user-visible step numbers\n // Step 0: auto check (not visible)\n // Step 1: auth method (visible step 1)\n // Step 2: auth execution (visible step 2)\n // Step 3: product setup (visible step 3)\n // Step 4: agent URL input (visible step 4)\n // Step 5: confirm creation (visible step 4 continued)\n // Step 6: product name (visible step 4 continued)\n // Step 7: creating (visible step 5)\n // Step 8: complete (visible step 5)\n if (step <= 1) return 1\n if (step === 2) return 2\n if (step === 3) return 3\n if (step <= 6) return 4\n return 5\n}\n\nexport function InitApp({ apiUrl, onComplete }: InitAppProps) {\n const { exit } = useApp()\n\n const [state, setState] = useState<WizardState>({\n step: 0,\n authMethod: null,\n apiKey: null,\n apiKeyInput: '',\n urlInput: '',\n productChoice: null,\n agentCard: null,\n templateId: null,\n productName: '',\n error: null,\n loading: true,\n loadingLabel: 'Checking credentials...',\n complete: false,\n createdProductId: null,\n })\n\n // Build summary of previous answers\n const getSummary = useCallback((): StepAnswer[] => {\n const answers: StepAnswer[] = []\n if (state.authMethod) {\n const labels: Record<AuthMethod, string> = {\n signup: 'Create account',\n login: 'Log in',\n apikey: 'API key',\n }\n answers.push({ label: 'Auth', value: labels[state.authMethod] })\n }\n if (state.apiKey) {\n answers.push({\n label: 'API Key',\n value: state.apiKey.substring(0, 10) + '...',\n })\n }\n if (state.productChoice) {\n answers.push({\n label: 'Product',\n value: state.productChoice === 'url' ? 'Import A2A agent' : 'Skip',\n })\n }\n if (state.agentCard) {\n answers.push({ label: 'Agent', value: state.agentCard.name })\n }\n return answers\n }, [state.authMethod, state.apiKey, state.productChoice, state.agentCard])\n\n // Step 0: Check existing credentials\n useEffect(() => {\n if (state.step !== 0) return undefined\n\n const checkCredentials = async () => {\n const store = new CredentialStore()\n const existingKey = await store.getApiKey()\n\n if (existingKey) {\n const apiKeyManager = new ApiKeyManager()\n try {\n const isValid = await apiKeyManager.validateApiKey(\n existingKey,\n apiUrl\n )\n if (isValid) {\n setState((prev) => ({\n ...prev,\n apiKey: existingKey,\n step: 3,\n loading: false,\n }))\n return\n }\n } catch {\n // Invalid credentials, proceed to auth\n }\n }\n\n setState((prev) => ({ ...prev, step: 1, loading: false }))\n }\n\n checkCredentials()\n return undefined\n }, [state.step, apiUrl])\n\n // Back navigation via Escape\n useInput(\n (_input, key) => {\n if (key.escape && !state.loading && !state.complete) {\n setState((prev) => {\n if (prev.step <= 1) return prev\n // Skip back over auto-steps\n let prevStep = prev.step - 1\n if (prevStep === 0) prevStep = 1\n if (prevStep === 2 && prev.authMethod) prevStep = 1\n if (prevStep === 7) prevStep = 6\n return { ...prev, step: prevStep, error: null }\n })\n }\n },\n { isActive: !state.loading && !state.complete }\n )\n\n // Auth method selection handler\n const handleAuthMethodSelect = useCallback(\n (item: { value: string }) => {\n const method = item.value as AuthMethod\n setState((prev) => ({\n ...prev,\n authMethod: method,\n step: 2,\n loading: true,\n loadingLabel:\n method === 'apikey'\n ? ''\n : 'Opening browser for authentication...',\n error: null,\n }))\n\n if (method !== 'apikey') {\n // Start browser auth\n const runBrowserAuth = async () => {\n try {\n const oauth = new OAuthManager({\n clerkPublishableKey: getClerkPublishableKey(),\n dashboardUrl: getDashboardUrl(),\n })\n\n const mode = method === 'signup' ? 'sign-up' : 'sign-in'\n const sessionToken = await oauth.authenticate(mode)\n\n setState((s) => ({\n ...s,\n loadingLabel: 'Exchanging credentials...',\n }))\n\n const apiKeyManager = new ApiKeyManager()\n const { key, userId, orgId } =\n await apiKeyManager.exchangeSessionForApiKey(\n sessionToken,\n apiUrl || getApiUrl()\n )\n\n const store = new CredentialStore()\n await store.saveCredentials({\n apiKey: key,\n userId,\n orgId,\n apiUrl: apiUrl || getApiUrl(),\n })\n\n setState((s) => ({\n ...s,\n apiKey: key,\n step: 3,\n loading: false,\n }))\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'Authentication failed'\n setState((s) => ({\n ...s,\n error: message,\n loading: false,\n step: 1,\n }))\n }\n }\n runBrowserAuth()\n } else {\n // API key mode: show text input (not loading)\n setState((prev) => ({ ...prev, loading: false }))\n }\n },\n [apiUrl]\n )\n\n // API key submission handler\n const handleApiKeySubmit = useCallback(\n (value: string) => {\n if (!value.trim()) {\n setState((prev) => ({ ...prev, error: 'API key is required' }))\n return\n }\n\n setState((prev) => ({\n ...prev,\n loading: true,\n loadingLabel: 'Validating API key...',\n error: null,\n }))\n\n const validateKey = async () => {\n try {\n const apiKeyManager = new ApiKeyManager()\n const isValid = await apiKeyManager.validateApiKey(\n value.trim(),\n apiUrl\n )\n\n if (!isValid) {\n setState((s) => ({\n ...s,\n error: 'Invalid API key',\n loading: false,\n }))\n return\n }\n\n const userData = await apiKeyManager.getCurrentUser(\n value.trim(),\n apiUrl\n )\n\n const store = new CredentialStore()\n await store.saveCredentials({\n apiKey: value.trim(),\n // @snake-case-ok: API auth/me response uses snake_case\n userId: userData.user_id,\n // @snake-case-ok: API auth/me response uses snake_case\n orgId: userData.org_id ?? undefined,\n apiUrl: apiUrl || getApiUrl(),\n })\n\n setState((s) => ({\n ...s,\n apiKey: value.trim(),\n step: 3,\n loading: false,\n }))\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'Validation failed'\n setState((s) => ({ ...s, error: message, loading: false }))\n }\n }\n validateKey()\n },\n [apiUrl]\n )\n\n // Product choice handler\n const handleProductChoice = useCallback(\n (item: { value: string }) => {\n const choice = item.value as ProductChoice\n setState((prev) => ({\n ...prev,\n productChoice: choice,\n }))\n\n if (choice === 'skip') {\n setState((prev) => ({ ...prev, step: 8, complete: true }))\n return\n }\n\n setState((prev) => ({ ...prev, step: 4 }))\n },\n []\n )\n\n // URL submission handler\n const handleUrlSubmit = useCallback(\n (value: string) => {\n if (!value.trim()) {\n setState((prev) => ({ ...prev, error: 'URL is required' }))\n return\n }\n\n try {\n new URL(value.trim())\n } catch {\n setState((prev) => ({\n ...prev,\n error: 'Please enter a valid URL',\n }))\n return\n }\n\n setState((prev) => ({\n ...prev,\n loading: true,\n loadingLabel: 'Validating URL...',\n error: null,\n }))\n\n const validateUrl = async () => {\n try {\n const baseUrl = apiUrl || getApiUrl()\n const response = await fetch(\n `${baseUrl}/${getApiVersion()}/quick-start/validate`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url: value.trim() }),\n }\n )\n\n const contentType = response.headers.get('content-type') || ''\n if (!contentType.includes('application/json')) {\n setState((s) => ({\n ...s,\n error: `API error: ${response.status} ${response.statusText}`,\n loading: false,\n }))\n return\n }\n\n const result = (await response.json()) as {\n valid: boolean\n error?: string\n templateId?: string\n agentCard?: AgentCard\n }\n\n if (!result.valid) {\n setState((s) => ({\n ...s,\n error: result.error || 'Validation failed',\n loading: false,\n }))\n return\n }\n\n setState((s) => ({\n ...s,\n agentCard: result.agentCard || null,\n templateId: result.templateId || null,\n productName: result.agentCard?.name || '',\n step: 5,\n loading: false,\n }))\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'Validation failed'\n setState((s) => ({ ...s, error: message, loading: false }))\n }\n }\n validateUrl()\n },\n [apiUrl]\n )\n\n // Confirm creation handler\n const handleConfirmCreate = useCallback((confirmed: boolean) => {\n if (!confirmed) {\n setState((prev) => ({ ...prev, step: 8, complete: true }))\n return\n }\n setState((prev) => ({ ...prev, step: 6 }))\n }, [])\n\n // Product name submission handler\n const handleProductNameSubmit = useCallback(\n (value: string) => {\n const name = value.trim() || state.agentCard?.name || 'My Product'\n\n setState((prev) => ({\n ...prev,\n productName: name,\n step: 7,\n loading: true,\n loadingLabel: 'Creating product...',\n error: null,\n }))\n\n const createProduct = async () => {\n try {\n const baseUrl = apiUrl || getApiUrl()\n const response = await fetch(\n `${baseUrl}/${getApiVersion()}/quick-start/create`,\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${state.apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n templateId: state.templateId,\n agentCard: state.agentCard,\n productName: name,\n sourceUrl: state.urlInput || state.agentCard?.url,\n }),\n }\n )\n\n const contentType = response.headers.get('content-type') || ''\n if (!contentType.includes('application/json')) {\n setState((s) => ({\n ...s,\n error: `API error: ${response.status} ${response.statusText}`,\n loading: false,\n step: 6,\n }))\n return\n }\n\n const result = (await response.json()) as {\n success: boolean\n error?: string\n product?: { id: string; name: string }\n }\n\n if (!result.success) {\n setState((s) => ({\n ...s,\n error: result.error || 'Failed to create product',\n loading: false,\n step: 6,\n }))\n return\n }\n\n setState((s) => ({\n ...s,\n createdProductId: result.product?.id || null,\n step: 8,\n loading: false,\n complete: true,\n }))\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'Creation failed'\n setState((s) => ({\n ...s,\n error: message,\n loading: false,\n step: 6,\n }))\n }\n }\n createProduct()\n },\n [apiUrl, state.apiKey, state.agentCard, state.templateId, state.urlInput]\n )\n\n // Auto-exit after completion\n useEffect(() => {\n if (!state.complete) return undefined\n const timer = setTimeout(() => {\n onComplete()\n exit()\n }, 100)\n return () => clearTimeout(timer)\n }, [state.complete, onComplete, exit])\n\n // Loading state (for auto-steps and async operations)\n if (state.loading && state.step !== 2) {\n return <Spinner label={state.loadingLabel} />\n }\n\n const summary = getSummary()\n\n // Step 1: Auth method selection\n if (state.step === 1) {\n return (\n <Box flexDirection=\"column\">\n <Text color={theme.primary} bold>\n {'\\n'}Welcome to Runtype!{'\\n'}\n </Text>\n {summary.length > 0 && <StepSummary answers={summary} />}\n <WizardStep\n stepNumber={getStepNumber(1)}\n totalSteps={TOTAL_VISIBLE_STEPS}\n title=\"How would you like to get started?\"\n >\n <Box flexDirection=\"column\">\n {state.error && (\n <Text color={theme.error}>{state.error}</Text>\n )}\n <SelectInput\n items={[\n { label: 'Create a new account', value: 'signup' },\n { label: 'Log in to existing account', value: 'login' },\n { label: 'Use an API key', value: 'apikey' },\n ]}\n onSelect={handleAuthMethodSelect}\n />\n </Box>\n </WizardStep>\n </Box>\n )\n }\n\n // Step 2: Auth execution\n if (state.step === 2) {\n if (state.authMethod === 'apikey') {\n return (\n <Box flexDirection=\"column\">\n {summary.length > 0 && <StepSummary answers={summary} />}\n <WizardStep\n stepNumber={getStepNumber(2)}\n totalSteps={TOTAL_VISIBLE_STEPS}\n title=\"Enter your API key\"\n >\n <Box flexDirection=\"column\">\n {state.error && (\n <Text color={theme.error}>{state.error}</Text>\n )}\n {state.loading ? (\n <Spinner label={state.loadingLabel} />\n ) : (\n <Box>\n <Text color={theme.muted}>{'> '}</Text>\n <TextInput\n value={state.apiKeyInput}\n onChange={(value) =>\n setState((prev) => ({\n ...prev,\n apiKeyInput: value,\n error: null,\n }))\n }\n onSubmit={handleApiKeySubmit}\n placeholder=\"sk-...\"\n />\n </Box>\n )}\n </Box>\n </WizardStep>\n </Box>\n )\n }\n\n // Browser auth - show spinner\n return (\n <Box flexDirection=\"column\">\n {summary.length > 0 && <StepSummary answers={summary} />}\n <WizardStep\n stepNumber={getStepNumber(2)}\n totalSteps={TOTAL_VISIBLE_STEPS}\n title=\"Authenticating\"\n >\n <Spinner label={state.loadingLabel || 'Waiting for browser...'} />\n </WizardStep>\n </Box>\n )\n }\n\n // Step 3: Product setup question\n if (state.step === 3) {\n return (\n <Box flexDirection=\"column\">\n {summary.length > 0 && <StepSummary answers={summary} />}\n <WizardStep\n stepNumber={getStepNumber(3)}\n totalSteps={TOTAL_VISIBLE_STEPS}\n title=\"What would you like to do?\"\n >\n <SelectInput\n items={[\n { label: 'Import A2A agent URL', value: 'url' },\n { label: 'Skip for now', value: 'skip' },\n ]}\n onSelect={handleProductChoice}\n />\n </WizardStep>\n </Box>\n )\n }\n\n // Step 4: Agent URL input\n if (state.step === 4) {\n return (\n <Box flexDirection=\"column\">\n {summary.length > 0 && <StepSummary answers={summary} />}\n <WizardStep\n stepNumber={getStepNumber(4)}\n totalSteps={TOTAL_VISIBLE_STEPS}\n title=\"Enter the agent URL\"\n >\n <Box flexDirection=\"column\">\n {state.error && (\n <Text color={theme.error}>{state.error}</Text>\n )}\n {state.loading ? (\n <Spinner label={state.loadingLabel} />\n ) : (\n <Box>\n <Text color={theme.muted}>{'> '}</Text>\n <TextInput\n value={state.urlInput}\n onChange={(value) =>\n setState((prev) => ({\n ...prev,\n urlInput: value,\n error: null,\n }))\n }\n onSubmit={handleUrlSubmit}\n placeholder=\"https://...\"\n />\n </Box>\n )}\n </Box>\n </WizardStep>\n </Box>\n )\n }\n\n // Step 5: Confirm creation (show agent card details)\n if (state.step === 5 && state.agentCard) {\n return (\n <Box flexDirection=\"column\">\n {summary.length > 0 && <StepSummary answers={summary} />}\n <WizardStep\n stepNumber={getStepNumber(5)}\n totalSteps={TOTAL_VISIBLE_STEPS}\n title=\"Agent Detected\"\n >\n <Box flexDirection=\"column\">\n <Text>\n {' '}Name: <Text bold>{state.agentCard.name}</Text>\n </Text>\n {state.agentCard.description && (\n <Text dimColor>\n {' '}Description: {state.agentCard.description}\n </Text>\n )}\n <Text dimColor>\n {' '}URL: {state.agentCard.url}\n </Text>\n {state.agentCard.skills && state.agentCard.skills.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text>{' '}Skills:</Text>\n {state.agentCard.skills.map((skill, i) => (\n <Text key={i} dimColor>\n {' '}{skill.name}\n {skill.description ? ` - ${skill.description}` : ''}\n </Text>\n ))}\n </Box>\n )}\n <Box marginTop={1}>\n <Text>\n Create this product?{' '}\n <Text color={theme.muted}>(y/N)</Text>\n </Text>\n </Box>\n <ConfirmInput onConfirm={handleConfirmCreate} />\n </Box>\n </WizardStep>\n </Box>\n )\n }\n\n // Step 6: Product name\n if (state.step === 6) {\n return (\n <Box flexDirection=\"column\">\n {summary.length > 0 && <StepSummary answers={summary} />}\n <WizardStep\n stepNumber={getStepNumber(6)}\n totalSteps={TOTAL_VISIBLE_STEPS}\n title=\"Product name\"\n >\n <Box flexDirection=\"column\">\n {state.error && (\n <Text color={theme.error}>{state.error}</Text>\n )}\n <Box>\n <Text color={theme.muted}>{'> '}</Text>\n <TextInput\n value={state.productName}\n onChange={(value) =>\n setState((prev) => ({\n ...prev,\n productName: value,\n error: null,\n }))\n }\n onSubmit={handleProductNameSubmit}\n placeholder={state.agentCard?.name || 'My Product'}\n />\n </Box>\n </Box>\n </WizardStep>\n </Box>\n )\n }\n\n // Step 7: Creating (spinner)\n if (state.step === 7) {\n return <Spinner label={state.loadingLabel} />\n }\n\n // Step 8: Complete\n if (state.step === 8) {\n const dashboardUrl = getDashboardUrl()\n\n return (\n <Box flexDirection=\"column\">\n {state.createdProductId ? (\n <Box flexDirection=\"column\">\n <Text color={theme.success} bold>\n {'✓'} Setup complete!\n </Text>\n <Text>\n {' '}Product ID: {state.createdProductId}\n </Text>\n <Text>\n {' '}Dashboard:{' '}\n {dashboardUrl}/products/{state.createdProductId}\n </Text>\n </Box>\n ) : (\n <Text color={theme.success} bold>\n {'✓'} Authentication complete!\n </Text>\n )}\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={theme.primary}>What you can do next:</Text>\n <Text>\n {' '}\n <Text color={theme.success}>runtype products init</Text>\n {' '}Create a product from an agent URL\n </Text>\n <Text>\n {' '}\n <Text color={theme.success}>runtype flows list</Text>\n {' '}List your flows\n </Text>\n <Text>\n {' '}\n <Text color={theme.success}>runtype dispatch -f {'<id>'}</Text>\n {' '}Execute a flow\n </Text>\n <Text>\n {' '}\n <Text color={theme.success}>runtype agents list</Text>\n {' '}List your agents\n </Text>\n <Text>\n {' '}\n <Text color={theme.success}>runtype models list</Text>\n {' '}View enabled models\n </Text>\n <Text>\n {' '}\n <Text color={theme.success}>runtype talk</Text>\n {' '}Start an interactive chat session\n </Text>\n <Text>\n {' '}\n <Text color={theme.success}>runtype --help</Text>\n {' '}See all available commands\n </Text>\n </Box>\n </Box>\n )\n }\n\n return null\n}\n\n// Small internal component for y/n input on the confirm step\nfunction ConfirmInput({\n onConfirm,\n}: {\n onConfirm: (confirmed: boolean) => void\n}) {\n const [answered, setAnswered] = useState(false)\n\n useInput(\n (input) => {\n if (answered) return\n const lower = input.toLowerCase()\n if (lower === 'y') {\n setAnswered(true)\n onConfirm(true)\n } else if (lower === 'n') {\n setAnswered(true)\n onConfirm(false)\n }\n },\n { isActive: !answered }\n )\n\n return null\n}\n","import type { ReactNode } from 'react'\nimport { Box, Text } from 'ink'\nimport { theme } from '@runtypelabs/ink'\n\nexport interface WizardStepProps {\n stepNumber: number\n totalSteps: number\n title: string\n children: ReactNode\n}\n\nexport function WizardStep({\n stepNumber,\n totalSteps,\n title,\n children,\n}: WizardStepProps) {\n return (\n <Box flexDirection=\"column\">\n <Text dimColor>\n Step {stepNumber} of {totalSteps}\n </Text>\n <Text color={theme.primary} bold>\n {title}\n </Text>\n <Box marginTop={1}>{children}</Box>\n {stepNumber > 1 && (\n <Text dimColor>\n {'\\n'}Escape: back\n </Text>\n )}\n </Box>\n )\n}\n","import { Box, Text } from 'ink'\nimport { theme } from '@runtypelabs/ink'\n\nexport interface StepAnswer {\n label: string\n value: string\n}\n\nexport interface StepSummaryProps {\n answers: StepAnswer[]\n}\n\nexport function StepSummary({ answers }: StepSummaryProps) {\n if (answers.length === 0) {\n return null\n }\n\n return (\n <Box flexDirection=\"column\" marginBottom={1} borderStyle=\"single\" borderTop borderBottom={false} borderLeft={false} borderRight={false} borderColor={theme.muted}>\n {answers.map((answer, index) => (\n <Text key={index} dimColor>\n {answer.label}: {answer.value}\n </Text>\n ))}\n </Box>\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { readFileSync } from 'fs'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { MutationResult } from '../ink/shared/index.js'\n\ninterface DispatchOptions {\n flow?: string\n agent?: string\n record?: string\n recordJson?: string\n message?: string\n variable?: string[]\n stream: boolean\n json?: boolean\n debug?: boolean\n tty?: boolean\n noTty?: boolean\n}\n\nexport const dispatchCommand = new Command('dispatch')\n .description('Execute a flow or agent via the dispatch API')\n .option('-f, --flow <id>', 'Flow ID to execute')\n .option('-a, --agent <id>', 'Agent ID to execute')\n .option('-r, --record <id>', 'Existing record ID')\n .option('--record-json <file>', 'JSON file with record data')\n .option('-m, --message <text>', 'Message to send')\n .option('-v, --variable <key=value>', 'Set a variable (repeatable)', collectVariables, [])\n .option('--stream', 'Stream the response (default)', true)\n .option('--no-stream', 'Wait for complete response')\n .option('--json', 'Output as JSON')\n .option('--debug', 'Show step-level details')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: DispatchOptions) => {\n if (!options.flow && !options.agent) {\n console.error(chalk.red('Error: Either --flow or --agent is required'))\n process.exit(1)\n }\n\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n // Build dispatch payload\n const payload: Record<string, unknown> = {}\n\n if (options.flow) {\n payload.flow = { id: options.flow }\n }\n\n if (options.agent) {\n payload.agent = { id: options.agent }\n }\n\n // Record resolution\n if (options.record) {\n payload.record = { id: options.record }\n } else if (options.recordJson) {\n try {\n const data = JSON.parse(readFileSync(options.recordJson, 'utf-8'))\n payload.record = { metadata: data }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to read record JSON: ${message}`))\n process.exit(1)\n }\n }\n\n // Messages\n if (options.message) {\n payload.messages = [{ role: 'user', content: options.message }]\n }\n\n // Variables\n if (options.variable && options.variable.length > 0) {\n const variables: Record<string, string> = {}\n for (const v of options.variable) {\n const [key, ...rest] = v.split('=')\n variables[key] = rest.join('=')\n }\n payload.variables = variables\n }\n\n if (options.stream) {\n await handleStreaming(client, payload, options)\n } else {\n await handleNonStreaming(client, payload, options)\n }\n })\n\nfunction collectVariables(value: string, previous: string[]): string[] {\n return previous.concat([value])\n}\n\nasync function handleStreaming(\n client: ApiClient,\n payload: Record<string, unknown>,\n options: DispatchOptions\n): Promise<void> {\n // Streaming uses chalk for inline output — preserved per Phase 16 decision\n console.log(chalk.gray('Starting execution...'))\n\n try {\n const response = await client.stream('/dispatch', payload)\n\n const callbacks: StreamCallbacks = {\n onFlowStart: (event: { flowName: string; totalSteps: number }) => {\n if (options.debug) {\n console.log(chalk.cyan(`Flow: ${event.flowName} (${event.totalSteps} steps)`))\n }\n },\n onStepStart: (event: { name: string }) => {\n if (options.debug) {\n console.log(chalk.gray(`\\n[${event.name}] Running...`))\n }\n },\n onStepChunk: (chunk: string) => {\n process.stdout.write(chunk)\n },\n onStepComplete: (_result: unknown, event: { name: string }) => {\n if (options.debug) {\n console.log(chalk.gray(`\\n[${event.name}] Complete`))\n }\n },\n onFlowComplete: (event) => {\n if (options.json) {\n console.log()\n printJson(event)\n }\n },\n onError: (err: Error) => {\n console.error(chalk.red(`\\nError: ${err.message}`))\n },\n }\n\n await processStream(response, callbacks)\n console.log() // final newline\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Execution failed'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n}\n\nasync function handleNonStreaming(\n client: ApiClient,\n payload: Record<string, unknown>,\n options: DispatchOptions\n): Promise<void> {\n // Non-TTY path: direct fetch without Ink (avoids hang in CI/scripts)\n if (!isTTY(options)) {\n try {\n payload.streamResponse = false\n const result = await client.post<Record<string, unknown>>('/dispatch', payload)\n if (options.json) {\n printJson(result)\n } else {\n const steps = result.steps as Array<{ name: string; result: unknown }> | undefined\n if (steps) {\n for (const step of steps) {\n console.log(chalk.cyan(`\\n[${step.name}]`))\n if (typeof step.result === 'string') {\n console.log(step.result)\n } else {\n console.log(JSON.stringify(step.result, null, 2))\n }\n }\n } else {\n printJson(result)\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Execution failed'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n payload.streamResponse = false\n const result = await client.post<Record<string, unknown>>('/dispatch', payload)\n setLoading(false)\n setSuccess(true)\n\n if (options.json) {\n printJson(result)\n } else {\n // Print step results\n const steps = result.steps as Array<{ name: string; result: unknown }> | undefined\n if (steps) {\n for (const step of steps) {\n console.log(chalk.cyan(`\\n[${step.name}]`))\n if (typeof step.result === 'string') {\n console.log(step.result)\n } else {\n console.log(JSON.stringify(step.result, null, 2))\n }\n }\n } else {\n printJson(result)\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Executing...',\n success,\n successMessage: 'Execution complete',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { processStream, type StreamCallbacks } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { taskCommand } from './agents-task'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, EntityCard, MutationResult, ConfirmPrompt } from '../ink/shared/index.js'\n\ninterface AgentSummary {\n id: string\n name: string\n description?: string | null\n status?: string\n model?: string | null\n [key: string]: unknown\n}\n\nexport const agentsCommand = new Command('agents').description('Manage agents')\n\nagentsCommand.addCommand(taskCommand)\n\nagentsCommand\n .command('list')\n .description('List all agents')\n .option('--json', 'Output as JSON')\n .option('--limit <n>', 'Limit results', '20')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; limit: string; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<AgentSummary>>('/agents', {\n limit: options.limit,\n })\n if (options.json) {\n printJson(data)\n return\n }\n const agents = data.data ?? []\n if (agents.length === 0) {\n console.log('No agents found')\n return\n }\n console.log('Your Agents:')\n for (const agent of agents) {\n const desc = agent.description ? ` - ${agent.description}` : ''\n console.log(` ${agent.id} ${agent.name}${desc}`)\n }\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(`\\n Total: ${total} agents`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch agents: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<AgentSummary[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [total, setTotal] = useState<number | undefined>()\n\n useEffect(() => {\n client\n .get<PaginatedResponse<AgentSummary>>('/agents', { limit: options.limit })\n .then((res) => {\n setItems((res.data ?? []) as AgentSummary[])\n setTotal(getTotalCount(res.pagination))\n })\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Your Agents',\n items,\n error,\n loading: items === null && error === null,\n total,\n renderCard: (item) => {\n const agent = item as AgentSummary\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: agent.id, color: 'green' },\n { label: 'Name', value: agent.name },\n { label: 'Description', value: agent.description, color: 'gray' },\n { label: 'Status', value: agent.status },\n { label: 'Model', value: agent.model, color: 'blue' },\n ],\n })\n },\n emptyMessage: 'No agents found',\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nagentsCommand\n .command('get <id>')\n .description('Get agent details')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<AgentSummary & { capabilities?: Array<Record<string, unknown>> }>(\n `/agents/${id}`\n )\n if (options.json) {\n printJson(data)\n return\n }\n printDetail('Agent', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Description', value: data.description },\n { label: 'Status', value: data.status },\n { label: 'Model', value: data.model },\n ])\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch agent: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<Array<AgentSummary & { capabilities?: Array<Record<string, unknown>> }> | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n client\n .get<AgentSummary & { capabilities?: Array<Record<string, unknown>> }>(`/agents/${id}`)\n .then((res) => setItems([res]))\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Agent',\n items,\n error,\n loading: items === null && error === null,\n renderCard: (item) => {\n const agent = item as AgentSummary & { capabilities?: Array<Record<string, unknown>> }\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: agent.id, color: 'green' },\n { label: 'Name', value: agent.name },\n { label: 'Description', value: agent.description },\n { label: 'Status', value: agent.status },\n { label: 'Model', value: agent.model, color: 'blue' },\n { label: 'Capabilities', value: agent.capabilities?.length },\n ],\n })\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nagentsCommand\n .command('create')\n .description('Create a new agent')\n .requiredOption('-n, --name <name>', 'Agent name')\n .option('-d, --description <desc>', 'Agent description')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { name: string; description?: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<AgentSummary>('/agents', {\n name: options.name,\n description: options.description,\n })\n if (options.json) {\n printJson(data)\n return\n }\n console.log(` ID: ${data.id}`)\n console.log(` Name: ${data.name}`)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to create agent: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [result, setResult] = useState<AgentSummary | null>(null)\n\n useEffect(() => {\n client\n .post<AgentSummary>('/agents', {\n name: options.name,\n description: options.description,\n })\n .then((data) => {\n setResult(data)\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Creating agent...',\n success,\n successMessage: 'Agent created',\n error,\n result: result\n ? React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: result.id, color: 'green' },\n { label: 'Name', value: result.name },\n ],\n })\n : undefined,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nagentsCommand\n .command('delete <id>')\n .description('Delete an agent')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.delete(`/agents/${id}`)\n console.log(JSON.stringify({ status: 'deleted', id }, null, 2))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to delete agent: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [confirmed, setConfirmed] = useState<boolean | null>(null)\n const [loading, setLoading] = useState(false)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n if (confirmed !== true) return undefined\n setLoading(true)\n client\n .delete(`/agents/${id}`)\n .then(() => {\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n return undefined\n }, [confirmed])\n\n if (confirmed === null) {\n return React.createElement(ConfirmPrompt, {\n message: `Delete agent ${id}?`,\n onConfirm: (val: boolean) => setConfirmed(val),\n })\n }\n\n if (confirmed === false) {\n return React.createElement(MutationResult, {\n loading: false,\n success: true,\n successMessage: 'Cancelled',\n error: null,\n })\n }\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Deleting agent...',\n success,\n successMessage: 'Agent deleted',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nagentsCommand\n .command('execute <id>')\n .description('Execute an agent')\n .requiredOption('-m, --message <text>', 'Message to send')\n .option('--stream', 'Stream the response (default)', true)\n .option('--no-stream', 'Wait for complete response')\n .option('--json', 'Output as JSON')\n .action(async (id: string, options: { message: string; stream: boolean; json?: boolean }) => {\n // KEEP EXISTING streaming logic — not a CRUD pattern\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n const payload = {\n messages: [{ role: 'user', content: options.message }],\n }\n\n if (options.stream) {\n console.log(chalk.gray('Starting agent...'))\n\n try {\n const response = await client.stream(`/agents/${id}/execute`, payload)\n\n const callbacks: StreamCallbacks = {\n onStepChunk: (chunk: string) => {\n process.stdout.write(chunk)\n },\n onError: (err: Error) => {\n console.error(chalk.red(`\\nError: ${err.message}`))\n },\n }\n\n await processStream(response, callbacks)\n console.log()\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Execution failed: ${message}`))\n process.exit(1)\n }\n } else {\n console.log(chalk.gray('Executing agent...'))\n\n try {\n const result = await client.post<Record<string, unknown>>(`/agents/${id}/execute`, {\n ...payload,\n streamResponse: false,\n })\n\n if (options.json) {\n printJson(result)\n } else {\n printJson(result)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Execution failed: ${message}`))\n process.exit(1)\n }\n }\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { render } from 'ink'\nimport React from 'react'\nimport { MarathonApp } from '../ink/marathon/MarathonApp.js'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport {\n RuntypeClient,\n evaluateGeneratedRuntimeToolProposal,\n type RunTaskState,\n type RunTaskContinuation,\n type AgentMessage,\n type CreateToolRequest,\n type ExecuteToolRequest,\n type LocalToolDefinition,\n} from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { getApiUrl, getDashboardUrl } from '../config/env'\nimport { printJson } from '../lib/output'\nimport type { MarathonStreamActions, SteeringRecapData, SteeringResult } from '../ink/marathon/types.js'\n\n// ─── Local state file helpers ───────────────────────────────────────\n\nfunction defaultStateDir(): string {\n return path.join(process.cwd(), '.runtype', 'marathons')\n}\n\nfunction stateFilePath(name: string, stateDir?: string): string {\n const dir = stateDir || defaultStateDir()\n const safeName = name.replace(/[^a-zA-Z0-9_-]/g, '_')\n return path.join(dir, `${safeName}.json`)\n}\n\nfunction loadState(filePath: string): RunTaskState | null {\n try {\n const raw = fs.readFileSync(filePath, 'utf-8')\n return JSON.parse(raw) as RunTaskState\n } catch {\n return null\n }\n}\n\nfunction saveState(filePath: string, state: RunTaskState): void {\n const dir = path.dirname(filePath)\n fs.mkdirSync(dir, { recursive: true })\n fs.writeFileSync(filePath, JSON.stringify(state, null, 2))\n}\n\nfunction findStateFile(name: string, stateDir?: string): string {\n // Check new location first\n const newPath = stateFilePath(name, stateDir || path.join(process.cwd(), '.runtype', 'marathons'))\n if (fs.existsSync(newPath)) return newPath\n\n // Fall back to old location\n const oldPath = stateFilePath(name, path.join(process.cwd(), '.runtype', 'tasks'))\n if (fs.existsSync(oldPath)) return oldPath\n\n // Return new path for error messages (file doesn't exist in either location)\n return newPath\n}\n\nfunction findLatestStateFile(stateDir?: string): { name: string; filePath: string } | null {\n const dirs = [\n stateDir || path.join(process.cwd(), '.runtype', 'marathons'),\n path.join(process.cwd(), '.runtype', 'tasks'),\n ]\n\n let latest: { name: string; filePath: string; mtime: number } | null = null\n\n for (const dir of dirs) {\n if (!fs.existsSync(dir)) continue\n const files = fs.readdirSync(dir).filter((f) => f.endsWith('.json'))\n for (const file of files) {\n const fullPath = path.join(dir, file)\n const stat = fs.statSync(fullPath)\n if (!latest || stat.mtimeMs > latest.mtime) {\n latest = { name: file.replace('.json', ''), filePath: fullPath, mtime: stat.mtimeMs }\n }\n }\n }\n\n return latest ? { name: latest.name, filePath: latest.filePath } : null\n}\n\ntype SandboxProviderOption = 'quickjs' | 'daytona'\ntype SandboxLanguageOption = 'javascript' | 'typescript' | 'python'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction parseSandboxProvider(value?: string): SandboxProviderOption | undefined {\n if (!value) return undefined\n const normalized = value.trim().toLowerCase()\n if (normalized === 'quickjs' || normalized === 'daytona') return normalized\n return undefined\n}\n\nfunction parseSandboxLanguage(\n provider: SandboxProviderOption,\n value: unknown\n): SandboxLanguageOption {\n if (provider === 'quickjs') return 'javascript'\n\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase()\n if (normalized === 'javascript' || normalized === 'typescript' || normalized === 'python') {\n return normalized\n }\n }\n return 'javascript'\n}\n\nfunction parseSandboxTimeout(value: unknown, provider: SandboxProviderOption): number {\n const fallback = provider === 'quickjs' ? 5000 : 30000\n\n let numericValue: number | undefined\n if (typeof value === 'number' && Number.isFinite(value)) {\n numericValue = value\n } else if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value)\n if (Number.isFinite(parsed)) {\n numericValue = parsed\n }\n }\n\n if (numericValue === undefined) return fallback\n return Math.max(1, Math.min(30000, Math.floor(numericValue)))\n}\n\nfunction parseDaytonaExecutionResult(value: unknown): unknown {\n if (typeof value !== 'string') return value\n\n const trimmed = value.trim()\n if (!trimmed) return ''\n\n try {\n return JSON.parse(trimmed)\n } catch {\n // If logs are present, try parsing the final non-empty line as JSON.\n const lines = trimmed\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean)\n const lastLine = lines[lines.length - 1]\n\n if (!lastLine) return value\n\n try {\n return JSON.parse(lastLine)\n } catch {\n return value\n }\n }\n}\n\nfunction createSandboxInstructions(provider: SandboxProviderOption): string {\n if (provider === 'quickjs') {\n return [\n '--- Sandbox Tooling (QuickJS) ---',\n 'You can execute JavaScript snippets with the local tool `run_sandbox_code`.',\n 'Call shape:',\n '{ \"code\": \"...\", \"parameters\": { ... }, \"timeoutMs\": 5000 }',\n 'QuickJS rules:',\n '1. Use JavaScript only (no TypeScript or Python).',\n '2. Inputs are passed in the `parameters` object (for example: `const x = parameters.x`).',\n '3. The snippet is wrapped in a function. Use top-level `return ...` to produce the result.',\n '4. Return JSON-serializable values (object, array, string, number, boolean, null).',\n '5. No Node/Bun/Deno APIs, imports/require, process, filesystem, or network calls.',\n 'Example:',\n 'const nums = parameters.nums || []',\n 'const sum = nums.reduce((acc, n) => acc + n, 0)',\n 'return { sum, count: nums.length }',\n ].join('\\n')\n }\n\n return [\n '--- Sandbox Tooling (Daytona) ---',\n 'You can execute code snippets with the local tool `run_sandbox_code`.',\n 'Call shape:',\n '{ \"code\": \"...\", \"parameters\": { ... }, \"language\": \"javascript|typescript|python\", \"timeoutMs\": 30000 }',\n 'Daytona rules:',\n '1. Choose one language: javascript, typescript, or python.',\n '2. Parameters are injected as top-level variables before your code (do not rely on `parameters`).',\n '3. Your snippet runs as a full program. Do not use top-level `return`.',\n '4. For structured results, write a single JSON value to stdout as the final output.',\n '5. JS/TS: `console.log(JSON.stringify({ ... }))`; Python: `import json` then `print(json.dumps({ ... }))`.',\n '6. Avoid extra logs before the final JSON line, or parsing may fail.',\n ].join('\\n')\n}\n\nfunction buildResumeCommand(\n agent: string,\n options: Pick<TaskOptions, 'name' | 'sandbox' | 'session'>,\n parsedSandbox: SandboxProviderOption | undefined\n): string {\n const nameFlag = options.name ? ` --name ${options.name}` : ''\n const sessionFlag = options.session ? ` --session ${options.session}` : ''\n const sandboxFlag = parsedSandbox ? ` --sandbox ${parsedSandbox}` : ''\n return `runtype marathon ${agent} --resume${nameFlag}${sessionFlag}${sandboxFlag}`\n}\n\nfunction createSandboxLocalTool(\n client: RuntypeClient,\n provider: SandboxProviderOption,\n debugMode?: boolean\n): LocalToolDefinition {\n return {\n description:\n provider === 'quickjs'\n ? 'Execute JavaScript code in QuickJS sandbox. Inputs are passed via parameters object.'\n : 'Execute JavaScript/TypeScript/Python code in Daytona sandbox. Inputs are injected as top-level variables.',\n parametersSchema: {\n type: 'object',\n properties: {\n code: { type: 'string', description: 'Code snippet to execute' },\n parameters: {\n type: 'object',\n description: 'Input parameters for the code (JSON object)',\n },\n language: {\n type: 'string',\n enum: provider === 'quickjs' ? ['javascript'] : ['javascript', 'typescript', 'python'],\n description:\n provider === 'quickjs'\n ? 'QuickJS only accepts javascript'\n : 'Daytona code language',\n },\n timeoutMs: { type: 'number', description: 'Execution timeout in ms (max 30000)' },\n },\n required: ['code'],\n },\n execute: async (args) => {\n const rawCode = args.code\n const code = typeof rawCode === 'string' ? rawCode : ''\n if (!code.trim()) {\n return { success: false, error: 'code is required' }\n }\n\n const language = parseSandboxLanguage(provider, args.language)\n const timeout = parseSandboxTimeout(args.timeoutMs, provider)\n const parameters = isRecord(args.parameters) ? args.parameters : {}\n\n // Reuse SDK gate policy to block dangerous generated snippets before execution.\n const gateDecision = evaluateGeneratedRuntimeToolProposal(\n {\n name: 'run_sandbox_code',\n description: `Execute code in ${provider}`,\n toolType: 'custom',\n parametersSchema: { type: 'object' },\n config: {\n code,\n timeout,\n sandboxProvider: provider,\n language,\n },\n },\n {\n allowedToolTypes: ['custom'],\n allowedSandboxProviders: [provider],\n allowedLanguages: provider === 'quickjs' ? ['javascript'] : ['javascript', 'typescript', 'python'],\n maxTimeoutMs: 30000,\n maxCodeLength: 12000,\n }\n )\n\n if (!gateDecision.approved) {\n return {\n success: false,\n error: gateDecision.reason,\n violations: gateDecision.violations,\n }\n }\n\n const tempToolName = `marathon_${provider}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`\n let tempToolId: string | undefined\n\n try {\n const createRequest: CreateToolRequest = {\n name: tempToolName,\n description: `Ephemeral ${provider} sandbox execution`,\n toolType: 'custom',\n parametersSchema: { type: 'object', properties: {} },\n config: {\n code,\n timeout,\n allowedApis: [],\n sandboxProvider: provider,\n language,\n } as unknown as CreateToolRequest['config'],\n }\n\n const created = await client.tools.create(createRequest)\n\n tempToolId = created.id\n\n const executeRequest: ExecuteToolRequest = {\n toolId: created.id,\n parameters: parameters as unknown as ExecuteToolRequest['parameters'],\n }\n const execution = await client.tools.execute(created.id, executeRequest)\n const parsedResult =\n provider === 'daytona'\n ? parseDaytonaExecutionResult(execution.result)\n : execution.result\n\n return {\n success: execution.status === 'success',\n sandboxProvider: provider,\n language,\n result: parsedResult,\n executionId: execution.executionId,\n ...(execution.errorMessage ? { error: execution.errorMessage } : {}),\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (debugMode) {\n console.log(chalk.gray(` [sandbox:${provider}] execution error: ${message}`))\n }\n return {\n success: false,\n sandboxProvider: provider,\n language,\n error: message,\n }\n } finally {\n if (tempToolId) {\n try {\n await client.tools.delete(tempToolId)\n } catch {\n // Best effort cleanup for ephemeral tools\n }\n }\n }\n },\n }\n}\n\n// ─── Local tools builder ─────────────────────────────────────────────\n\n// @snake-case-ok-start: Tool name identifiers use snake_case to match agent tool definitions\nconst defaultLocalTools: Record<string, LocalToolDefinition> = {\n read_file: {\n description: 'Read the contents of a file at the given path',\n parametersSchema: {\n type: 'object',\n properties: { path: { type: 'string', description: 'File path to read' } },\n required: ['path'],\n },\n execute: async (args) => {\n const toolFilePath = String(args.path || '')\n if (!toolFilePath) return 'Error: path is required'\n return fs.readFileSync(toolFilePath, 'utf-8')\n },\n },\n write_file: {\n description: 'Write content to a file, creating directories as needed',\n parametersSchema: {\n type: 'object',\n properties: {\n path: { type: 'string', description: 'File path to write' },\n content: { type: 'string', description: 'Content to write' },\n },\n required: ['path', 'content'],\n },\n execute: async (args) => {\n const toolFilePath = String(args.path || '')\n if (!toolFilePath) return 'Error: path is required'\n const content = String(args.content || '')\n const dir = path.dirname(toolFilePath)\n fs.mkdirSync(dir, { recursive: true })\n fs.writeFileSync(toolFilePath, content)\n return 'ok'\n },\n },\n list_directory: {\n description: 'List files and directories at the given path',\n parametersSchema: {\n type: 'object',\n properties: { path: { type: 'string', description: 'Directory path (defaults to \".\")' } },\n },\n execute: async (args) => {\n const dirPath = String(args.path || '.')\n return fs.readdirSync(dirPath).join('\\n')\n },\n },\n}\n// @snake-case-ok-end\n\nfunction buildLocalTools(\n client: RuntypeClient,\n sandboxProvider: SandboxProviderOption | undefined,\n options: Pick<TaskOptions, 'noLocalTools' | 'debug'>\n): Record<string, LocalToolDefinition> | undefined {\n const enabledTools: Record<string, LocalToolDefinition> = {}\n if (!options.noLocalTools) {\n Object.assign(enabledTools, defaultLocalTools)\n }\n if (sandboxProvider) {\n // @snake-case-ok: Tool name identifier uses snake_case to match agent tool definitions\n enabledTools.run_sandbox_code = createSandboxLocalTool(client, sandboxProvider, options.debug)\n }\n return Object.keys(enabledTools).length > 0 ? enabledTools : undefined\n}\n\n// ─── Shared action ──────────────────────────────────────────────────\n\nexport interface TaskOptions {\n goal?: string\n maxSessions: string\n maxCost?: string\n model?: string\n name?: string\n session?: string\n stateDir?: string\n resume?: boolean | string\n compact?: boolean\n track?: boolean\n debug?: boolean\n json?: boolean\n noLocalTools?: boolean\n sandbox?: string\n plainText?: boolean\n noSteer?: boolean\n steerTimeout?: string\n}\n\nexport async function taskAction(agent: string, options: TaskOptions): Promise<void> {\n // Manual validation: -g is required for new tasks, optional for resume\n if (!options.resume && !options.goal) {\n console.error(chalk.red('Error: -g, --goal <text> is required for new tasks'))\n console.log(chalk.gray(' Use --resume to continue an existing task without a new goal'))\n process.exit(1)\n }\n\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new RuntypeClient({\n apiKey,\n baseUrl: getApiUrl(),\n })\n\n let parsedSandbox = parseSandboxProvider(options.sandbox)\n if (options.sandbox && !parsedSandbox) {\n console.error(chalk.red(`Invalid --sandbox value \"${options.sandbox}\". Use: quickjs or daytona`))\n process.exit(1)\n }\n\n // Resolve agent — accept ID or name, auto-create if not found\n let agentId = agent\n if (!agent.startsWith('agent_')) {\n console.log(chalk.gray('Looking up agent by name...'))\n try {\n const list = await client.agents.list()\n const found = list.data.find(\n (a: { name: string }) => a.name.toLowerCase() === agent.toLowerCase()\n )\n if (found) {\n agentId = found.id\n console.log(chalk.green(`Found agent: ${agentId}`))\n } else {\n console.log(chalk.gray(`Creating agent \"${agent}\"...`))\n try {\n const created = await client.agents.create({ name: agent })\n agentId = created.id\n console.log(chalk.green(`Created agent: ${agentId}`))\n } catch (createErr) {\n console.error(chalk.red(`Failed to create agent \"${agent}\"`))\n const errMsg = createErr instanceof Error ? createErr.message : String(createErr)\n console.error(chalk.red(errMsg))\n process.exit(1)\n }\n }\n } catch (error) {\n console.error(chalk.red('Failed to list agents'))\n const errMsg = error instanceof Error ? error.message : String(error)\n console.error(chalk.red(errMsg))\n process.exit(1)\n }\n }\n\n let taskName = options.session || options.name || agentId\n let filePath = stateFilePath(taskName, options.stateDir)\n const maxSessions = parseInt(options.maxSessions, 10)\n const maxCost = options.maxCost ? parseFloat(options.maxCost) : undefined\n\n // Handle resume — adjust remaining budget/sessions\n let priorSessionCount = 0\n let priorCost = 0\n let previousMessages: AgentMessage[] = []\n let continuationMessage: string | undefined\n let useCompact = false\n let continuationIndex = -1\n let priorContinuations: RunTaskContinuation[] = []\n let priorCostByModel: Record<string, number> = {}\n let priorOriginalMessage: string | undefined\n\n if (options.resume) {\n // Determine which state file to load\n let resolvedFilePath: string\n let resolvedTaskName: string\n\n if (options.session) {\n // --session flag: load specific session\n resolvedTaskName = options.session\n resolvedFilePath = findStateFile(options.session, options.stateDir)\n } else if (options.name) {\n // --name flag: load by task name\n resolvedTaskName = options.name\n resolvedFilePath = findStateFile(options.name, options.stateDir)\n } else {\n // Auto-select latest session\n const latest = findLatestStateFile(options.stateDir)\n if (!latest) {\n console.error(chalk.red('No state files found to resume'))\n console.log(chalk.gray(' Run without --resume to start a new task.'))\n process.exit(1)\n }\n resolvedTaskName = latest.name\n resolvedFilePath = latest.filePath\n console.log(chalk.gray(` Auto-selected session: ${resolvedTaskName}`))\n }\n\n const existing = loadState(resolvedFilePath)\n if (!existing) {\n console.error(chalk.red(`No state file found at ${resolvedFilePath}`))\n console.log(chalk.gray(' Run without --resume to start a new task.'))\n process.exit(1)\n }\n\n // Allow resume from ANY terminal status (per user decision)\n // No more gate on status === 'complete'\n\n priorSessionCount = existing.sessionCount\n priorCost = existing.totalCost\n priorCostByModel = existing.costByModel ?? {}\n priorOriginalMessage = existing.originalMessage\n\n // Extract the resume goal: from --resume \"message\" or from -g\n const resumeMessage = typeof options.resume === 'string' ? options.resume : options.goal\n\n // Record continuation entry\n const continuation: RunTaskContinuation = {\n continuedAt: new Date().toISOString(),\n fromSession: existing.sessionCount,\n userMessage: resumeMessage,\n model: options.model,\n segmentCost: 0, // Will be updated at end\n }\n const continuations = existing.continuations ?? []\n continuations.push(continuation)\n priorContinuations = continuations\n existing.continuations = continuations\n existing.status = 'running'\n existing.updatedAt = new Date().toISOString()\n saveState(resolvedFilePath, existing)\n\n // Store previous messages and continuation context for SDK\n previousMessages = existing.messages ?? []\n continuationMessage = resumeMessage\n useCompact = options.compact ?? false\n continuationIndex = continuations.length - 1\n\n // Override filePath and taskName with resolved values\n filePath = resolvedFilePath\n taskName = resolvedTaskName\n\n console.log(\n chalk.cyan(\n `Resuming \"${resolvedTaskName}\" from session ${priorSessionCount} (${existing.status}) — $${priorCost.toFixed(4)} spent`\n )\n )\n }\n\n // Prepare task message and budget\n const remainingSessions = maxSessions - priorSessionCount\n const remainingCost = maxCost ? maxCost - priorCost : undefined\n const baseMessage = options.goal || (options.resume ? 'Continue the task.' : '')\n const sandboxPrompt = parsedSandbox ? createSandboxInstructions(parsedSandbox) : ''\n\n // Build local tools using the shared helper\n let localTools = buildLocalTools(client, parsedSandbox, options)\n let toolsEnabled = true\n let taskMessage = sandboxPrompt ? `${baseMessage}\\n\\n${sandboxPrompt}` : baseMessage\n\n // Create a ref that the Ink component will populate with stream actions\n const streamRef: { current: MarathonStreamActions | null } = { current: null }\n\n // Track last known state for error recovery\n let lastKnownState: RunTaskState | null = null\n\n // Render Ink app -- replaces all imperative chalk/ora/process.stdout.write output\n const { waitUntilExit } = render(\n React.createElement(MarathonApp, {\n taskName,\n agentId,\n model: options.model,\n sandbox: parsedSandbox,\n goal: baseMessage,\n initialSessionCount: priorSessionCount,\n initialCost: priorCost,\n debug: options.debug,\n plainText: options.plainText ?? false,\n noSteer: options.noSteer ?? false,\n steeringTimeout: parseInt(options.steerTimeout || '10', 10),\n dashboardUrl: getDashboardUrl(),\n onSaveState: (content, _tools) => {\n // Build partial state for Ctrl+C save\n const partialState: RunTaskState = {\n agentId,\n agentName: agentId,\n taskName,\n status: 'paused',\n sessionCount: priorSessionCount,\n totalCost: priorCost,\n lastOutput: content || '',\n lastStopReason: 'paused' as const,\n sessions: [],\n startedAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n ...(priorContinuations.length > 0 ? { continuations: priorContinuations } : {}),\n ...(Object.keys(priorCostByModel).length > 0 ? { costByModel: priorCostByModel } : {}),\n ...(priorOriginalMessage ? { originalMessage: priorOriginalMessage } : {}),\n }\n saveState(filePath, partialState)\n console.log(`\\nSaving state... done. Session saved to ${filePath}`)\n },\n onComplete: () => {\n // no-op, summary printed after waitUntilExit\n },\n streamRef,\n }),\n { exitOnCtrlC: false }\n )\n\n try {\n // Wait a tick for React to mount and populate streamRef\n await new Promise((resolve) => setTimeout(resolve, 0))\n\n const streamActions = streamRef.current\n if (!streamActions) {\n console.error(chalk.red('Failed to initialize marathon UI'))\n process.exit(1)\n }\n\n // Mutable state for steering-driven changes across runTask loops\n let shouldContinue = true\n let accumulatedSessions = 0\n let accumulatedCost = 0\n let lastResult: Awaited<ReturnType<typeof client.agents.runTask>> | null = null\n let lastSessionMessages: AgentMessage[] = [] // Captured from onSession for steering restarts\n\n while (shouldContinue) {\n shouldContinue = false // Default: run once\n\n const currentStreamCallbacks = streamActions.getCallbacks()\n const currentRemainingCost = remainingCost\n ? remainingCost - accumulatedCost\n : undefined\n\n const result = await client.agents.runTask(agentId, {\n message: taskMessage,\n maxSessions: remainingSessions - accumulatedSessions,\n maxCost: currentRemainingCost,\n model: options.model,\n debugMode: options.debug ?? true,\n stream: true,\n streamCallbacks: currentStreamCallbacks,\n localTools,\n trackProgress: options.track ? taskName : undefined,\n // Continuation context (only set on resume or after steering restart)\n ...(previousMessages.length > 0\n ? {\n previousMessages,\n continuationMessage,\n compact: useCompact,\n }\n : {}),\n onSession: async (state): Promise<void | false> => {\n // Save state first (existing behavior)\n const adjustedState: RunTaskState = {\n ...state,\n sessionCount: priorSessionCount + accumulatedSessions + state.sessionCount,\n totalCost: priorCost + accumulatedCost + state.totalCost,\n }\n lastKnownState = adjustedState\n lastSessionMessages = state.messages ?? []\n saveState(filePath, adjustedState)\n\n // If --no-steer, skip steering prompt entirely\n if (options.noSteer) return\n\n // Skip steering for terminal states — handled after runTask returns\n if (state.status !== 'running') return\n\n // Request steering from the Ink UI\n const currentActions = streamRef.current\n if (!currentActions) return\n\n // Build recap data from the current state\n const recap: SteeringRecapData = {\n sessionNumber: adjustedState.sessionCount,\n toolCallsMade: currentActions.getState().tools.length,\n tokensInput: 0,\n tokensOutput: 0,\n cost: state.totalCost,\n outputPreview: currentActions.getState().content.slice(0, 100),\n }\n\n const steeringResult: SteeringResult = await currentActions.requestSteering(recap)\n\n // Handle steering result\n switch (steeringResult.action) {\n case 'stop':\n return false // Tells SDK to stop the loop\n\n case 'model':\n if (steeringResult.model) {\n options.model = steeringResult.model\n }\n break\n\n case 'steer':\n if (steeringResult.message) {\n // Stop current loop and restart with new message\n taskMessage = steeringResult.message\n shouldContinue = true\n return false\n }\n break\n\n case 'tools':\n // Toggle local tools\n toolsEnabled = !toolsEnabled\n if (!toolsEnabled) {\n localTools = undefined\n } else {\n localTools = buildLocalTools(client, parsedSandbox, options)\n }\n break\n\n case 'sandbox':\n if (steeringResult.sandbox === false) {\n parsedSandbox = undefined\n localTools = buildLocalTools(client, undefined, options)\n } else if (steeringResult.sandbox) {\n const newSandbox = parseSandboxProvider(steeringResult.sandbox)\n if (newSandbox) {\n parsedSandbox = newSandbox\n localTools = buildLocalTools(client, parsedSandbox, options)\n }\n }\n break\n\n case 'continue':\n default:\n // Continue with same settings\n break\n }\n },\n })\n\n // Accumulate state between steering-driven loops\n accumulatedSessions += result.sessionCount\n accumulatedCost += result.totalCost\n lastResult = result\n\n // Carry forward messages for next loop iteration (if steering restarts)\n if (shouldContinue) {\n previousMessages = lastSessionMessages\n continuationMessage = taskMessage\n useCompact = false\n }\n\n // Terminal steering loop — let user resume, change settings, or exit\n if (result.status === 'complete' || result.status === 'budget_exceeded') {\n if (options.noSteer) break\n\n const currentActions = streamRef.current\n if (!currentActions) break\n\n let exitTerminal = false\n while (!exitTerminal) {\n const recap: SteeringRecapData = {\n sessionNumber: priorSessionCount + accumulatedSessions,\n toolCallsMade: currentActions.getState().tools.length,\n tokensInput: 0,\n tokensOutput: 0,\n cost: accumulatedCost,\n outputPreview: currentActions.getState().content.slice(0, 100),\n }\n const steeringResult = await currentActions.requestSteering(recap, true)\n\n switch (steeringResult.action) {\n case 'model':\n if (steeringResult.model) options.model = steeringResult.model\n break // re-show steering prompt\n\n case 'tools':\n toolsEnabled = !toolsEnabled\n localTools = toolsEnabled ? buildLocalTools(client, parsedSandbox, options) : undefined\n break\n\n case 'sandbox':\n if (steeringResult.sandbox === false) {\n parsedSandbox = undefined\n localTools = buildLocalTools(client, undefined, options)\n } else if (steeringResult.sandbox) {\n const newSandbox = parseSandboxProvider(steeringResult.sandbox)\n if (newSandbox) {\n parsedSandbox = newSandbox\n localTools = buildLocalTools(client, parsedSandbox, options)\n }\n }\n break\n\n case 'steer':\n if (steeringResult.message) {\n currentActions.resetForNewSession()\n taskMessage = steeringResult.message\n previousMessages = lastSessionMessages\n continuationMessage = taskMessage\n useCompact = false\n shouldContinue = true\n }\n exitTerminal = true\n break\n\n case 'continue':\n case 'stop':\n default:\n currentActions.exit()\n exitTerminal = true\n break\n }\n }\n\n if (!shouldContinue) break\n continue\n }\n }\n\n // Use the last result for final state\n const result = lastResult!\n\n // Build final state\n const finalState: RunTaskState = {\n agentId,\n agentName: result.sessions[0]?.stopReason ? agentId : agentId,\n taskName,\n status: result.status,\n sessionCount: priorSessionCount + accumulatedSessions,\n totalCost: priorCost + accumulatedCost,\n lastOutput: result.lastOutput,\n lastStopReason: result.sessions[result.sessions.length - 1]?.stopReason || 'complete',\n sessions: result.sessions,\n startedAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n // Carry forward continuation-related fields\n ...(priorContinuations.length > 0 ? { continuations: priorContinuations } : {}),\n ...(Object.keys(priorCostByModel).length > 0 ? { costByModel: priorCostByModel } : {}),\n ...(priorOriginalMessage ? { originalMessage: priorOriginalMessage } : {}),\n }\n\n // Update the current continuation's segment cost\n if (continuationIndex >= 0 && finalState.continuations) {\n finalState.continuations[continuationIndex].segmentCost = accumulatedCost\n }\n\n saveState(filePath, finalState)\n\n // Wait for Ink app to exit before printing summary\n await waitUntilExit()\n\n // Print summary (after Ink exits, so console.log is safe)\n console.log()\n const statusColor =\n result.status === 'complete'\n ? chalk.green\n : result.status === 'budget_exceeded'\n ? chalk.red\n : chalk.yellow\n console.log(`Status: ${statusColor(result.status)}`)\n console.log(`Sessions: ${finalState.sessionCount}`)\n console.log(`Total cost: ${chalk.yellow(`$${finalState.totalCost.toFixed(4)}`)}`)\n console.log(`State: ${chalk.gray(filePath)}`)\n\n const dashboardBaseUrl = getDashboardUrl()\n console.log(`Dashboard: ${chalk.cyan(`${dashboardBaseUrl}/agents/${agentId}`)}`)\n\n if (result.recordId) {\n console.log(`Record: ${chalk.gray(result.recordId)}`)\n }\n\n // Show per-continuation cost breakdown if continuations exist\n if (finalState.continuations && finalState.continuations.length > 0) {\n console.log(chalk.dim('\\nContinuation history:'))\n for (let i = 0; i < finalState.continuations.length; i++) {\n const c = finalState.continuations[i]\n const msg = c.userMessage ? ` \"${c.userMessage.slice(0, 50)}\"` : ' (no message)'\n const modelName = c.model ? ` [${c.model}]` : ''\n console.log(\n chalk.gray(` #${i + 1}: ${c.continuedAt}${modelName}${msg} — $${c.segmentCost.toFixed(4)}`)\n )\n }\n }\n\n // Show per-model cost breakdown if available\n if (finalState.costByModel && Object.keys(finalState.costByModel).length > 1) {\n console.log(chalk.dim('\\nCost by model:'))\n for (const [modelName, cost] of Object.entries(finalState.costByModel)) {\n console.log(chalk.gray(` ${modelName}: $${cost.toFixed(4)}`))\n }\n }\n\n if (result.status === 'paused' || result.status === 'max_sessions') {\n console.log(\n chalk.gray(\n `\\nResume: ${buildResumeCommand(agent, options, parsedSandbox)}`\n )\n )\n }\n\n if (options.json) {\n console.log()\n printJson(finalState)\n }\n } catch (error) {\n // lastKnownState is set inside onSession callback -- TS can't track closures\n const stateAtError = lastKnownState as RunTaskState | null\n if (stateAtError) {\n stateAtError.status = 'paused'\n saveState(filePath, stateAtError)\n }\n\n const errMsg = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`\\nTask failed: ${errMsg}`))\n console.log(chalk.gray(`State saved to ${filePath} — resume with --resume`))\n process.exit(1)\n }\n}\n\n// ─── Task options applied to a Command ──────────────────────────────\n\nfunction applyTaskOptions(cmd: Command): Command {\n return cmd\n .argument('<agent>', 'Agent ID or name')\n .option('-g, --goal <text>', 'Goal message for the agent')\n .option('--max-sessions <n>', 'Maximum sessions', '50')\n .option('--max-cost <n>', 'Budget in USD')\n .option('--model <modelId>', 'Model ID to use (overrides agent config)')\n .option('--name <name>', 'Task name (used for state file, defaults to agent name)')\n .option('--session <name>', 'Resume a specific session by name')\n .option('--state-dir <path>', 'Directory for state files (default: .runtype/marathons/)')\n .option('--resume [message]', 'Resume from existing local state, optionally with a new message')\n .option('--compact', 'Use compact summary instead of full history on resume')\n .option('--track', 'Sync progress to a Runtype record (visible in dashboard)')\n .option('--debug', 'Show debug output from each session')\n .option('--json', 'Output final result as JSON')\n .option('--sandbox <provider>', 'Enable sandbox code execution tool (quickjs or daytona)')\n .option('--no-local-tools', 'Disable built-in local tool execution (read_file, write_file, list_directory)')\n .option('--plain-text', 'Disable markdown rendering in output')\n .option('--no-steer', 'Run all iterations without steering pauses (fully autonomous)')\n .option('--steer-timeout <seconds>', 'Auto-continue timeout in seconds (default: 10)', '10')\n .action(taskAction)\n}\n\n// ─── Subcommand: `runtype agents task` ──────────────────────────────\n\nexport const taskCommand = applyTaskOptions(\n new Command('task').description('Run a multi-session agent task')\n)\n\n// ─── Top-level alias: `runtype marathon` ────────────────────────────\n\nexport function createMarathonCommand(): Command {\n return applyTaskOptions(\n new Command('marathon').description('Run a multi-session agent task (alias for agents task)')\n )\n}\n","import { useState, useEffect, useRef, useCallback } from 'react'\nimport { execSync } from 'node:child_process'\nimport open from 'open'\nimport { Box, useApp, useInput, useStdout } from 'ink'\nimport { StreamOutput, StatusBar, ErrorDisplay, theme } from '@runtypelabs/ink'\nimport { useMarathonStream } from './useMarathonStream.js'\nimport { SessionHeader } from './SessionHeader.js'\nimport { ThinkingIndicator } from './ThinkingIndicator.js'\nimport { ToolPanel } from './ToolPanel.js'\nimport { EventStreamPanel } from './EventStreamPanel.js'\nimport { SteeringPrompt } from './SteeringPrompt.js'\nimport type { MarathonAppProps, RawStreamEvent, SteeringResult, SteeringRecapData } from './types.js'\n\n/** Columns allocated for tool panel in wide terminals */\nconst TOOL_PANEL_WIDE = 40\n/** Columns allocated for tool panel in medium terminals */\nconst TOOL_PANEL_NARROW = 30\n/** Below this width, use narrow tool panel */\nconst NARROW_THRESHOLD = 100\n/** Below this width, stack vertically instead of side-by-side */\nconst STACKED_THRESHOLD = 80\n\n/** Rows consumed by SessionHeader (border-round = 3 or 4 with goal) + StatusBar (border-single = 3) */\nconst CHROME_ROWS_BASE = 6\n/** Extra row when goal is shown inside header */\nconst GOAL_ROW = 1\n/** Lines to scroll per arrow key press */\nconst SCROLL_STEP = 3\n/** Rows consumed by steering prompt (recap border + stats + input + hint) */\nconst STEERING_PROMPT_ROWS = 7\n\nfunction copyToClipboard(text: string): boolean {\n try {\n if (process.platform === 'darwin') {\n execSync('pbcopy', { input: text })\n } else if (process.platform === 'win32') {\n execSync('clip', { input: text })\n } else {\n // Linux: try xclip, fall back to xsel\n try {\n execSync('xclip -selection clipboard', { input: text })\n } catch {\n execSync('xsel --clipboard --input', { input: text })\n }\n }\n return true\n } catch {\n return false\n }\n}\n\nexport function MarathonApp({\n taskName,\n agentId,\n model,\n sandbox,\n goal,\n initialSessionCount,\n initialCost,\n debug: _debug,\n plainText,\n noSteer: _noSteer,\n steeringTimeout,\n dashboardUrl,\n onSaveState,\n onComplete: _onComplete,\n streamRef,\n}: MarathonAppProps) {\n const { state, callbacks, reset: _reset, setSteering, resetForNewSession } = useMarathonStream()\n const { exit } = useApp()\n const { stdout } = useStdout()\n\n // Steering state\n const steeringResolveRef = useRef<((result: SteeringResult) => void) | null>(null)\n const [steeringRecap, setSteeringRecap] = useState<SteeringRecapData | null>(null)\n const [currentModel, setCurrentModel] = useState(model || 'default')\n const [currentSandbox, setCurrentSandbox] = useState(sandbox)\n const [isTerminalSteering, setIsTerminalSteering] = useState(false)\n // Ref mirror avoids stale closure in handleSteeringSubmit\n const isTerminalSteeringRef = useRef(false)\n\n // Handle steering submission\n const handleSteeringSubmit = useCallback(\n (result: SteeringResult) => {\n // Update local display state for model/sandbox changes\n if (result.action === 'model' && result.model) {\n setCurrentModel(result.model)\n }\n if (result.action === 'sandbox') {\n setCurrentSandbox(result.sandbox || undefined)\n }\n\n if (isTerminalSteeringRef.current) {\n // Terminal: just resolve — agents-task.ts controls the flow\n if (steeringResolveRef.current) {\n steeringResolveRef.current(result)\n steeringResolveRef.current = null\n }\n } else {\n // Inter-session: reset stream state for next session\n resetForNewSession()\n setIsTerminalSteering(false)\n isTerminalSteeringRef.current = false\n if (steeringResolveRef.current) {\n steeringResolveRef.current(result)\n steeringResolveRef.current = null\n }\n }\n },\n [resetForNewSession]\n )\n\n // Expose stream callbacks via ref for Commander action integration\n useEffect(() => {\n streamRef.current = {\n getCallbacks: () => callbacks,\n getState: () => state,\n requestSteering: async (recap: SteeringRecapData, isTerminal?: boolean) => {\n setSteering()\n setSteeringRecap(recap)\n if (isTerminal) {\n setIsTerminalSteering(true)\n isTerminalSteeringRef.current = true\n }\n return new Promise<SteeringResult>((resolve) => {\n steeringResolveRef.current = resolve\n })\n },\n resetForNewSession,\n exit: () => exit(),\n }\n })\n\n // Terminal dimensions\n const terminalWidth = stdout?.columns ?? 120\n const terminalRows = stdout?.rows ?? 40\n const chromeRows = CHROME_ROWS_BASE + (goal ? GOAL_ROW : 0)\n const contentHeight = Math.max(5, terminalRows - chromeRows)\n\n const isStacked = terminalWidth < STACKED_THRESHOLD\n const toolPanelWidth = terminalWidth < NARROW_THRESHOLD\n ? TOOL_PANEL_NARROW\n : TOOL_PANEL_WIDE\n\n // Double Ctrl+C handling\n const [ctrlCPressed, setCtrlCPressed] = useState(false)\n const ctrlCTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Event stream panel toggle\n const [showEventStream, setShowEventStream] = useState(false)\n\n // Chat scroll offset (0 = follow latest, positive = scrolled up)\n const [scrollOffset, setScrollOffset] = useState(0)\n\n // Event stream cursor and detail view\n const [eventCursor, setEventCursor] = useState(-1) // -1 = follow latest\n const [detailEvent, setDetailEvent] = useState<RawStreamEvent | null>(null)\n const [detailScrollOffset, setDetailScrollOffset] = useState(0)\n\n // Goal expanded toggle\n const [goalExpanded, setGoalExpanded] = useState(false)\n\n // Clipboard flash message\n const [clipboardFlash, setClipboardFlash] = useState<string | null>(null)\n const flashTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n function showFlash(msg: string) {\n setClipboardFlash(msg)\n if (flashTimeout.current) clearTimeout(flashTimeout.current)\n flashTimeout.current = setTimeout(() => setClipboardFlash(null), 2000)\n }\n\n // Navigate to event by index (used in detail view prev/next)\n function navigateToEvent(index: number) {\n const clamped = Math.max(0, Math.min(state.rawEvents.length - 1, index))\n const evt = state.rawEvents[clamped]\n if (evt) {\n setEventCursor(clamped)\n setDetailEvent(evt)\n setDetailScrollOffset(0)\n }\n }\n\n // When switching to event stream, place cursor at the last event\n useEffect(() => {\n if (showEventStream && eventCursor === -1 && state.rawEvents.length > 0) {\n setEventCursor(state.rawEvents.length - 1)\n }\n }, [showEventStream, eventCursor, state.rawEvents.length])\n\n const agentPageUrl =\n agentId && dashboardUrl ? `${dashboardUrl.replace(/\\/$/, '')}/agents/${agentId}` : null\n\n useInput((_input, key) => {\n // 'o' key: open agent in dashboard (when not in TextInput focus)\n if (_input === 'o' && agentPageUrl && !(state.phase === 'steering' && steeringRecap)) {\n void open(agentPageUrl)\n return\n }\n\n // Ctrl+C works in all modes\n if (key.ctrl && _input === 'c') {\n if (ctrlCPressed) {\n if (ctrlCTimeout.current) {\n clearTimeout(ctrlCTimeout.current)\n }\n onSaveState(state.content, state.tools)\n exit()\n } else {\n setCtrlCPressed(true)\n ctrlCTimeout.current = setTimeout(() => {\n setCtrlCPressed(false)\n }, 3000)\n }\n return\n }\n\n // During steering, only allow arrow-key scrolling (other keys go to TextInput)\n if (state.phase === 'steering' && steeringRecap) {\n if (key.upArrow) {\n setScrollOffset(prev => prev + SCROLL_STEP)\n return\n }\n if (key.downArrow) {\n setScrollOffset(prev => Math.max(0, prev - SCROLL_STEP))\n return\n }\n return\n }\n\n // Tab toggles event stream panel\n if (key.tab) {\n setShowEventStream(prev => !prev)\n setScrollOffset(0)\n setDetailEvent(null)\n setDetailScrollOffset(0)\n return\n }\n\n // Escape: close detail view or collapse goal\n if (key.escape) {\n if (detailEvent) {\n setDetailEvent(null)\n setDetailScrollOffset(0)\n } else if (goalExpanded) {\n setGoalExpanded(false)\n }\n return\n }\n\n // 'g' key: toggle goal expansion\n if (_input === 'g' && !detailEvent) {\n setGoalExpanded(prev => !prev)\n return\n }\n\n // 'c' key: copy selected event to clipboard\n if (_input === 'c' && showEventStream) {\n const evt = detailEvent ?? state.rawEvents[eventCursor]\n if (evt) {\n const json = JSON.stringify(evt.data, null, 2)\n const ok = copyToClipboard(json)\n showFlash(ok ? 'Copied!' : 'Copy failed')\n }\n return\n }\n\n // Enter: open detail view for selected event\n if (key.return && showEventStream && !detailEvent) {\n const evt = state.rawEvents[eventCursor]\n if (evt) {\n setDetailEvent(evt)\n setDetailScrollOffset(0)\n }\n return\n }\n\n // Enter in detail view: close it\n if (key.return && detailEvent) {\n setDetailEvent(null)\n setDetailScrollOffset(0)\n return\n }\n\n // Arrow key handling depends on active panel and mode\n if (key.upArrow) {\n if (showEventStream && detailEvent) {\n // Scroll detail view up\n setDetailScrollOffset(prev => prev + SCROLL_STEP)\n } else if (showEventStream) {\n // Move cursor up in event list\n setEventCursor(prev => Math.max(0, prev - 1))\n } else {\n // Scroll chat up\n setScrollOffset(prev => prev + SCROLL_STEP)\n }\n return\n }\n if (key.downArrow) {\n if (showEventStream && detailEvent) {\n // Scroll detail view down\n setDetailScrollOffset(prev => Math.max(0, prev - SCROLL_STEP))\n } else if (showEventStream) {\n // Move cursor down in event list\n setEventCursor(prev => Math.min(state.rawEvents.length - 1, prev + 1))\n } else {\n // Scroll chat down\n setScrollOffset(prev => Math.max(0, prev - SCROLL_STEP))\n }\n return\n }\n\n // Left/Right arrows: navigate prev/next event in detail view\n if (key.leftArrow && showEventStream && detailEvent) {\n navigateToEvent(eventCursor - 1)\n return\n }\n if (key.rightArrow && showEventStream && detailEvent) {\n navigateToEvent(eventCursor + 1)\n return\n }\n })\n\n // Cleanup timeouts on unmount\n useEffect(() => {\n return () => {\n if (ctrlCTimeout.current) clearTimeout(ctrlCTimeout.current)\n if (flashTimeout.current) clearTimeout(flashTimeout.current)\n }\n }, [])\n\n // Computed values\n const sessionCount = initialSessionCount + state.sessionCount\n const totalCost = initialCost + state.totalCost\n const hasTools = state.tools.length > 0\n\n // Status bar context hints\n const statusRight = (() => {\n if (ctrlCPressed) return 'Press Ctrl+C again to exit'\n if (clipboardFlash) return clipboardFlash\n if (state.phase === 'steering' && steeringRecap) {\n const scrollHint = scrollOffset > 0 ? ` | +${scrollOffset}` : ''\n return `\\u2191\\u2193: scroll | Ctrl+C${scrollHint}`\n }\n if (showEventStream && detailEvent) return 'c: copy | \\u2190\\u2192: prev/next | Esc: back | Tab: chat'\n if (showEventStream) return 'Enter: detail | c: copy | Tab: chat | Ctrl+C'\n const scrollHint = scrollOffset > 0 ? ` | +${scrollOffset}` : ''\n const dashboardHint = agentPageUrl ? 'o: dashboard | ' : ''\n return `${dashboardHint}Tab: events | Ctrl+C${scrollHint}`\n })()\n\n // Detail view header shows position\n const detailCenter = detailEvent\n ? `EVENT DETAIL (${eventCursor + 1}/${state.rawEvents.length})`\n : 'EVENT STREAM'\n\n // Count extra rows when goal is expanded\n const goalText = goal || ''\n const goalExpandedRows = goalExpanded && goalText.length > terminalWidth - 4\n ? Math.ceil(goalText.length / (terminalWidth - 4)) - 1\n : 0\n const adjustedContentHeight = contentHeight - goalExpandedRows\n\n return (\n <Box flexDirection=\"column\" height={terminalRows}>\n <SessionHeader\n sessionName={taskName}\n sessionCount={sessionCount}\n model={currentModel}\n cost={totalCost}\n goal={goal}\n goalExpanded={goalExpanded}\n />\n\n {state.phase === 'steering' && steeringRecap ? (\n <Box flexDirection=\"column\" height={adjustedContentHeight}>\n <Box flexDirection=\"column\" flexGrow={1} overflow=\"hidden\">\n <StreamOutput\n content={state.content}\n isStreaming={false}\n enableMarkdown={!plainText}\n maxVisibleLines={adjustedContentHeight - STEERING_PROMPT_ROWS}\n scrollOffset={scrollOffset}\n />\n </Box>\n <SteeringPrompt\n onSubmit={handleSteeringSubmit}\n timeout={steeringTimeout ?? 10}\n isTerminal={isTerminalSteering}\n currentModel={currentModel}\n currentSandbox={currentSandbox}\n recap={steeringRecap}\n />\n </Box>\n ) : showEventStream ? (\n <Box flexDirection=\"column\" height={adjustedContentHeight} overflow=\"hidden\">\n <EventStreamPanel\n events={state.rawEvents}\n startTime={state.rawEvents[0]?.timestamp ?? null}\n maxVisibleLines={adjustedContentHeight - 1}\n selectedIndex={eventCursor}\n detailEvent={detailEvent}\n detailScrollOffset={detailScrollOffset}\n />\n </Box>\n ) : (\n <Box flexDirection={isStacked ? 'column' : 'row'} height={adjustedContentHeight} overflow=\"hidden\">\n {/* Left side: streaming content */}\n <Box flexDirection=\"column\" flexGrow={1} flexShrink={1}>\n {state.phase === 'thinking' && <ThinkingIndicator startedAt={state.thinkingStartedAt} />}\n <StreamOutput\n content={state.content}\n isStreaming={state.phase === 'streaming'}\n enableMarkdown={!plainText}\n maxVisibleLines={adjustedContentHeight - (state.phase === 'thinking' ? 2 : 1)}\n scrollOffset={scrollOffset}\n />\n {state.error && <ErrorDisplay error={state.error} />}\n </Box>\n\n {/* Right side: tool panel */}\n {hasTools && (\n <Box\n flexDirection=\"column\"\n width={isStacked ? undefined : toolPanelWidth}\n flexShrink={0}\n borderStyle=\"single\"\n borderColor={theme.muted}\n paddingX={1}\n >\n <ToolPanel tools={state.tools} maxHeight={adjustedContentHeight - 2} />\n </Box>\n )}\n </Box>\n )}\n\n <StatusBar\n left={`Model: ${currentModel}`}\n center={showEventStream ? detailCenter : (currentSandbox ? `Sandbox: ${currentSandbox}` : undefined)}\n right={statusRight}\n />\n </Box>\n )\n}\n\nexport type { MarathonAppProps }\n","import { useState, useRef, useMemo, useCallback } from 'react'\nimport type { AgentStreamCallbacks } from '@runtypelabs/sdk'\nimport type { MarathonStreamState, MarathonToolEntry, RawStreamEvent } from './types.js'\n\nconst INITIAL_STATE: MarathonStreamState = {\n phase: 'idle',\n content: '',\n thinkingStartedAt: null,\n tools: [],\n sessionCount: 0,\n totalCost: 0,\n currentIteration: 0,\n error: null,\n rawEvents: [],\n}\n\n/** Max raw events to keep in memory */\nconst MAX_RAW_EVENTS = 500\n\nfunction pushRawEvent(\n prev: MarathonStreamState,\n type: string,\n data: Record<string, unknown>\n): RawStreamEvent[] {\n const event: RawStreamEvent = { timestamp: Date.now(), type, data }\n const events = [...prev.rawEvents, event]\n return events.length > MAX_RAW_EVENTS ? events.slice(-MAX_RAW_EVENTS) : events\n}\n\nlet toolCounter = 0\n\n/**\n * Marathon-specific stream hook that maps the full SDK AgentStreamCallbacks\n * interface to React state. Extends beyond the generic useStreamCallbacks\n * from @runtypelabs/ink by tracking tool parameters, cost, timing, thinking\n * state, and iteration counts.\n *\n * @returns `{ state, callbacks, reset, setSteering, resetForNewSession }` where `callbacks` satisfies AgentStreamCallbacks\n */\nexport function useMarathonStream(): {\n state: MarathonStreamState\n callbacks: AgentStreamCallbacks\n reset: () => void\n setSteering: () => void\n resetForNewSession: () => void\n} {\n const [state, setState] = useState<MarathonStreamState>(INITIAL_STATE)\n\n // Use a ref for state access in callbacks to avoid stale closures\n const stateRef = useRef(state)\n stateRef.current = state\n\n const callbacks = useMemo<AgentStreamCallbacks>(\n () => ({\n onAgentStart() {\n setState(prev => ({\n ...prev,\n phase: 'thinking',\n thinkingStartedAt: Date.now(),\n rawEvents: pushRawEvent(prev, 'agent_start', {}),\n }))\n },\n\n onIterationStart(event) {\n setState(prev => ({\n ...prev,\n currentIteration: event.iteration,\n rawEvents: pushRawEvent(prev, 'agent_iteration_start', { ...event }),\n }))\n },\n\n onTurnDelta(event) {\n if (event.contentType === 'text') {\n setState(prev => ({\n ...prev,\n phase: 'streaming',\n content: prev.content + event.delta,\n thinkingStartedAt: null,\n rawEvents: pushRawEvent(prev, 'agent_turn_delta', { contentType: event.contentType, deltaLength: event.delta.length }),\n }))\n }\n // For 'thinking' contentType, leave phase as 'thinking'\n // thinkingStartedAt stays set\n },\n\n onTurnComplete(event) {\n setState(prev => ({\n ...prev,\n totalCost: event.cost != null ? prev.totalCost + event.cost! : prev.totalCost,\n rawEvents: pushRawEvent(prev, 'agent_turn_complete', { ...event }),\n }))\n },\n\n onToolStart(event) {\n // Generate globally unique ID — flow engine toolCallId may repeat\n // across multiple calls to the same tool\n const uniqueId = `tool-${++toolCounter}`\n const newTool: MarathonToolEntry = {\n id: uniqueId,\n sourceToolCallId: event.toolCallId,\n name: event.toolName,\n toolType: event.toolType,\n status: 'running',\n parameters: event.parameters,\n startedAt: Date.now(),\n }\n setState(prev => ({\n ...prev,\n phase: 'tool',\n thinkingStartedAt: null,\n tools: [...prev.tools, newTool],\n rawEvents: pushRawEvent(prev, 'agent_tool_start', { ...event }),\n }))\n },\n\n onToolComplete(event) {\n setState(prev => {\n // Match the first running tool with the same source toolCallId\n let matched = false\n const tools = prev.tools.map(t => {\n if (!matched && t.sourceToolCallId === event.toolCallId && t.status === 'running') {\n matched = true\n return {\n ...t,\n status: (event.success ? 'complete' : 'error') as MarathonToolEntry['status'],\n executionTime: event.executionTime,\n result: event.result,\n }\n }\n return t\n })\n return {\n ...prev,\n phase: 'streaming',\n tools,\n rawEvents: pushRawEvent(prev, 'agent_tool_complete', { ...event }),\n }\n })\n },\n\n onIterationComplete(event) {\n setState(prev => ({\n ...prev,\n totalCost: event.cost != null ? prev.totalCost + event.cost : prev.totalCost,\n sessionCount: prev.sessionCount + 1,\n rawEvents: pushRawEvent(prev, 'agent_iteration_complete', { ...event }),\n }))\n },\n\n onAgentPaused() {\n // Local tools (write_file, read_file, etc.) trigger flow_paused and\n // never receive tool_complete from the API. Mark any still-running\n // tools as complete since they're the local tools that caused the pause.\n setState(prev => ({\n ...prev,\n phase: 'tool',\n thinkingStartedAt: null,\n tools: prev.tools.map(t =>\n t.status === 'running'\n ? { ...t, status: 'complete' as const, executionTime: Date.now() - t.startedAt }\n : t\n ),\n rawEvents: pushRawEvent(prev, 'agent_paused', {}),\n }))\n },\n\n onAgentComplete(event) {\n setState(prev => ({\n ...prev,\n phase: 'complete',\n content: prev.content || event.finalOutput || '',\n totalCost: event.totalCost != null ? event.totalCost : prev.totalCost,\n rawEvents: pushRawEvent(prev, 'agent_complete', { ...event }),\n }))\n },\n\n onError(event) {\n setState(prev => ({\n ...prev,\n phase: 'error',\n error: new Error(event.error.message),\n rawEvents: pushRawEvent(prev, 'agent_error', { ...event }),\n }))\n },\n }),\n []\n )\n\n const reset = useCallback(() => {\n setState(INITIAL_STATE)\n }, [])\n\n const setSteering = useCallback(() => {\n setState((prev) => ({ ...prev, phase: 'steering' }))\n }, [])\n\n const resetForNewSession = useCallback(() => {\n setState((prev) => ({\n ...prev,\n phase: 'idle',\n content: '',\n thinkingStartedAt: null,\n tools: [],\n currentIteration: 0,\n error: null,\n }))\n }, [])\n\n return { state, callbacks, reset, setSteering, resetForNewSession }\n}\n","import { Box, Text } from 'ink'\nimport { theme } from '@runtypelabs/ink'\n\ninterface SessionHeaderProps {\n sessionName: string\n sessionCount: number\n model: string\n cost: number\n goal?: string\n goalExpanded?: boolean\n}\n\nexport function SessionHeader({\n sessionName,\n sessionCount,\n model,\n cost,\n goal,\n goalExpanded,\n}: SessionHeaderProps) {\n const showName = sessionName && sessionName !== `Marathon #${sessionCount}`\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={theme.primary} paddingX={1}>\n <Box>\n <Text bold color={theme.primary}>\n Marathon #{sessionCount}\n {showName ? ` (${sessionName})` : ''}\n </Text>\n <Text color={theme.muted}> | </Text>\n <Text color={theme.label}>{model}</Text>\n <Text color={theme.muted}> | </Text>\n <Text color={theme.warning}>${cost < 0.01 ? cost.toFixed(4) : cost.toFixed(2)}</Text>\n </Box>\n {goal && (\n <Text color={theme.muted} wrap={goalExpanded ? 'wrap' : 'truncate'}>\n {goal}\n </Text>\n )}\n </Box>\n )\n}\n","import { useState, useEffect } from 'react'\nimport { Spinner, theme } from '@runtypelabs/ink'\n\ninterface ThinkingIndicatorProps {\n startedAt?: number | null // Date.now() timestamp from parent state\n}\n\nexport function ThinkingIndicator({ startedAt }: ThinkingIndicatorProps) {\n const [elapsed, setElapsed] = useState(() =>\n startedAt ? Math.floor((Date.now() - startedAt) / 1000) : 0\n )\n\n useEffect(() => {\n const start = startedAt ?? Date.now()\n setElapsed(Math.floor((Date.now() - start) / 1000))\n const interval = setInterval(() => {\n setElapsed(Math.floor((Date.now() - start) / 1000))\n }, 1000)\n return () => clearInterval(interval)\n }, [startedAt])\n\n return <Spinner label={`Thinking... ${elapsed}s`} color={theme.muted} />\n}\n","import { useState, useEffect, useMemo } from 'react'\nimport { Box, Text } from 'ink'\nimport { theme } from '@runtypelabs/ink'\nimport { ToolEntry } from './ToolEntry.js'\nimport type { MarathonToolEntry } from './types.js'\n\ninterface ToolPanelProps {\n tools: MarathonToolEntry[]\n /** Max rows available for the tool panel content (excluding header) */\n maxHeight?: number\n}\n\n/** Estimate rows per tool: 1 status + 1 params + 1 result + 1 margin = ~3 avg */\nconst ROWS_PER_TOOL = 3\n\nexport function ToolPanel({ tools, maxHeight }: ToolPanelProps) {\n const [now, setNow] = useState(Date.now())\n const hasRunning = tools.some(t => t.status === 'running')\n\n useEffect(() => {\n if (!hasRunning) return\n const interval = setInterval(() => {\n setNow(Date.now())\n }, 100)\n return () => clearInterval(interval)\n }, [hasRunning])\n\n // Show latest tools that fit within maxHeight, auto-scrolled to bottom\n const visibleTools = useMemo(() => {\n if (!maxHeight) return tools\n // Subtract 1 row for the \"Tools\" header\n const availableRows = maxHeight - 1\n const maxTools = Math.max(1, Math.floor(availableRows / ROWS_PER_TOOL))\n if (tools.length <= maxTools) return tools\n return tools.slice(-maxTools)\n }, [tools, maxHeight])\n\n const hiddenCount = tools.length - visibleTools.length\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={theme.info}>Tools</Text>\n {hiddenCount > 0 && (\n <Text color={theme.muted} dimColor> {hiddenCount} earlier tools hidden</Text>\n )}\n {visibleTools.map(tool => (\n <ToolEntry tool={tool} now={now} key={tool.id} />\n ))}\n </Box>\n )\n}\n","import { Box, Text } from 'ink'\nimport { Spinner, theme } from '@runtypelabs/ink'\nimport type { MarathonToolEntry } from './types.js'\n\ninterface ToolEntryProps {\n tool: MarathonToolEntry\n now: number // passed from parent for live elapsed calculation\n}\n\nexport function ToolEntry({ tool, now }: ToolEntryProps) {\n const elapsedLive = ((now - tool.startedAt) / 1000).toFixed(1)\n // Use executionTime from API if available, otherwise calculate from startedAt\n const elapsedFinal = tool.executionTime != null\n ? (tool.executionTime / 1000).toFixed(1)\n : ((now - tool.startedAt) / 1000).toFixed(1)\n\n const paramsPreview = tool.parameters\n ? JSON.stringify(tool.parameters).slice(0, 60)\n : null\n\n const resultPreview = tool.result != null\n ? String(typeof tool.result === 'object' ? JSON.stringify(tool.result) : tool.result).slice(0, 80)\n : null\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box>\n {tool.status === 'running' && (\n <>\n <Spinner label=\"\" color={theme.spinner} />\n <Text bold> {tool.name}</Text>\n <Text color={theme.muted}> {elapsedLive}s</Text>\n </>\n )}\n {tool.status === 'complete' && (\n <>\n <Text color={theme.success}>{'\\u2713'}</Text>\n <Text bold> {tool.name}</Text>\n <Text color={theme.muted}> {elapsedFinal}s</Text>\n </>\n )}\n {tool.status === 'error' && (\n <>\n <Text color={theme.error}>{'\\u2717'}</Text>\n <Text bold> {tool.name}</Text>\n </>\n )}\n </Box>\n {paramsPreview && (\n <Text color={theme.dimLabel} wrap=\"truncate\"> {paramsPreview}</Text>\n )}\n {tool.status === 'complete' && resultPreview && (\n <Text color={theme.dimLabel} wrap=\"truncate\"> {resultPreview}</Text>\n )}\n </Box>\n )\n}\n","import { useMemo } from 'react'\nimport { Box, Text } from 'ink'\nimport { theme } from '@runtypelabs/ink'\nimport type { RawStreamEvent } from './types.js'\n\nexport interface EventStreamPanelProps {\n events: RawStreamEvent[]\n startTime: number | null\n maxVisibleLines?: number\n /** Index of the currently selected event (cursor position) */\n selectedIndex: number\n /** When set, show detail view for this event instead of the list */\n detailEvent: RawStreamEvent | null\n /** Lines scrolled in the detail view */\n detailScrollOffset?: number\n}\n\n/** Color per event type for visual scanning */\nconst EVENT_COLORS: Record<string, string> = {\n agent_start: theme.success,\n agent_complete: theme.success,\n agent_error: theme.error,\n agent_paused: theme.warning,\n agent_iteration_start: theme.info,\n agent_iteration_complete: theme.info,\n agent_turn_delta: theme.muted,\n agent_turn_complete: theme.primary,\n agent_tool_start: theme.warning,\n agent_tool_complete: theme.warning,\n}\n\nfunction formatTimestamp(ts: number, start: number | null): string {\n if (!start) return '0.000s'\n const elapsed = (ts - start) / 1000\n return `${elapsed.toFixed(3)}s`\n}\n\nfunction formatEventData(data: Record<string, unknown>): string {\n const filtered = { ...data }\n delete filtered.type\n const keys = Object.keys(filtered)\n if (keys.length === 0) return ''\n return JSON.stringify(filtered)\n}\n\n/** Detail view: pretty-printed JSON for a single event */\nfunction EventDetailView({\n event,\n startTime,\n maxVisibleLines,\n scrollOffset = 0,\n}: {\n event: RawStreamEvent\n startTime: number | null\n maxVisibleLines: number\n scrollOffset?: number\n}) {\n const { lines, totalLines } = useMemo(() => {\n const json = JSON.stringify(event.data, null, 2)\n const allLines = json.split('\\n')\n const total = allLines.length\n const clampedOffset = Math.min(scrollOffset, Math.max(0, total - maxVisibleLines))\n const end = total - clampedOffset\n const start = Math.max(0, end - maxVisibleLines)\n return { lines: allLines.slice(start, end), totalLines: total }\n }, [event, maxVisibleLines, scrollOffset])\n\n const color = EVENT_COLORS[event.type] || 'white'\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Box marginBottom={1}>\n <Text color={theme.muted}>{formatTimestamp(event.timestamp, startTime)} </Text>\n <Text bold color={color}>{event.type}</Text>\n <Text color={theme.muted}> — Esc to close</Text>\n {totalLines > maxVisibleLines && (\n <Text color={theme.muted}> ({totalLines} lines)</Text>\n )}\n </Box>\n {lines.map((line, i) => (\n <Text key={i} color={theme.label}>{line}</Text>\n ))}\n </Box>\n )\n}\n\n/** List view: event rows with cursor highlight */\nexport function EventStreamPanel({\n events,\n startTime,\n maxVisibleLines = 50,\n selectedIndex,\n detailEvent,\n detailScrollOffset = 0,\n}: EventStreamPanelProps) {\n // Detail view mode\n if (detailEvent) {\n return (\n <EventDetailView\n event={detailEvent}\n startTime={startTime}\n maxVisibleLines={maxVisibleLines - 2}\n scrollOffset={detailScrollOffset}\n />\n )\n }\n\n // List view: window around the selected index\n const { rows, hiddenAbove, hiddenBelow } = useMemo(() => {\n if (events.length === 0) return { rows: [], hiddenAbove: 0, hiddenBelow: 0 }\n const total = events.length\n // Center the window around selectedIndex\n const half = Math.floor(maxVisibleLines / 2)\n let start = selectedIndex - half\n let end = start + maxVisibleLines\n // Clamp to bounds\n if (start < 0) {\n start = 0\n end = Math.min(total, maxVisibleLines)\n }\n if (end > total) {\n end = total\n start = Math.max(0, end - maxVisibleLines)\n }\n const visible = events.slice(start, end)\n return {\n rows: visible.map((evt, i) => ({\n globalIndex: start + i,\n key: `${start + i}`,\n time: formatTimestamp(evt.timestamp, startTime),\n type: evt.type,\n color: EVENT_COLORS[evt.type] || 'white',\n data: formatEventData(evt.data),\n })),\n hiddenAbove: start,\n hiddenBelow: total - end,\n }\n }, [events, startTime, maxVisibleLines, selectedIndex])\n\n if (events.length === 0) {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text color={theme.muted}>Waiting for events...</Text>\n </Box>\n )\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Box marginBottom={0}>\n <Text bold color={theme.info}>Event Stream</Text>\n <Text color={theme.muted}> ({events.length} events)</Text>\n {hiddenAbove > 0 && <Text color={theme.muted}> [{hiddenAbove} above]</Text>}\n {hiddenBelow > 0 && <Text color={theme.muted}> [{hiddenBelow} below]</Text>}\n </Box>\n {rows.map(row => {\n const isSelected = row.globalIndex === selectedIndex\n return (\n <Box key={row.key} flexDirection=\"row\" flexWrap=\"nowrap\">\n <Box width={2} flexShrink={0}>\n <Text color={theme.info}>{isSelected ? '>' : ' '}</Text>\n </Box>\n <Box width={9} flexShrink={0}>\n <Text color={theme.muted} inverse={isSelected}>{row.time}</Text>\n </Box>\n <Box width={28} flexShrink={0}>\n <Text color={row.color} bold inverse={isSelected}>{row.type}</Text>\n </Box>\n <Box flexShrink={1}>\n <Text color={theme.muted} wrap=\"truncate\" inverse={isSelected}>{row.data}</Text>\n </Box>\n </Box>\n )\n })}\n </Box>\n )\n}\n","import { useState, useEffect, useRef } from 'react'\nimport { Box, Text } from 'ink'\nimport TextInput from 'ink-text-input'\nimport { theme } from '@runtypelabs/ink'\nimport { ModelPicker } from '../talk/ModelPicker.js'\nimport { SteeringRecap } from './SteeringRecap.js'\nimport { MARATHON_STEER_COMMANDS } from './types.js'\nimport type { SteeringPromptProps } from './types.js'\n\nexport function SteeringPrompt({\n onSubmit,\n timeout,\n isTerminal,\n currentModel,\n currentSandbox: _currentSandbox,\n recap,\n}: SteeringPromptProps) {\n const [value, setValue] = useState('')\n const [remaining, setRemaining] = useState(timeout)\n const [isTyping, setIsTyping] = useState(false)\n const [showModelPicker, setShowModelPicker] = useState(false)\n const [showHelp, setShowHelp] = useState(false)\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n // Track whether user has started typing\n const handleChange = (newValue: string) => {\n setValue(newValue)\n if (newValue.length > 0 && !isTyping) {\n setIsTyping(true)\n } else if (newValue.length === 0) {\n setIsTyping(false)\n }\n }\n\n // Countdown timer\n useEffect(() => {\n // No timer in terminal mode or when timeout is 0\n if (isTerminal || timeout === 0) return\n // Pause timer when typing or model picker is open\n if (isTyping || showModelPicker) {\n if (timerRef.current) {\n clearInterval(timerRef.current)\n timerRef.current = null\n }\n return\n }\n\n timerRef.current = setInterval(() => {\n setRemaining(prev => {\n if (prev <= 1) {\n if (timerRef.current) clearInterval(timerRef.current)\n onSubmit({ action: 'continue' })\n return 0\n }\n return prev - 1\n })\n }, 1000)\n\n return () => {\n if (timerRef.current) {\n clearInterval(timerRef.current)\n timerRef.current = null\n }\n }\n }, [isTerminal, timeout, isTyping, showModelPicker, onSubmit])\n\n const handleSubmit = (text: string) => {\n const trimmed = text.trim()\n\n if (trimmed.startsWith('/model')) {\n setShowModelPicker(true)\n setValue('')\n return\n }\n\n if (trimmed.startsWith('/help')) {\n setShowHelp(prev => !prev)\n setValue('')\n return\n }\n\n // Clear input before submitting (important in terminal mode where component stays mounted)\n setValue('')\n setIsTyping(false)\n\n if (trimmed.startsWith('/tools')) {\n onSubmit({ action: 'tools', tools: true })\n return\n }\n\n if (trimmed.startsWith('/sandbox')) {\n const arg = trimmed.slice('/sandbox'.length).trim()\n onSubmit(arg ? { action: 'sandbox', sandbox: arg } : { action: 'sandbox', sandbox: false })\n return\n }\n\n if (trimmed.startsWith('/stop')) {\n onSubmit({ action: 'stop' })\n return\n }\n\n if (trimmed === '') {\n onSubmit({ action: 'continue' })\n return\n }\n\n onSubmit({ action: 'steer', message: trimmed })\n }\n\n const handleModelSelect = (model: string) => {\n setShowModelPicker(false)\n onSubmit({ action: 'model', model })\n }\n\n const handleModelCancel = () => {\n setShowModelPicker(false)\n // Resume timer by resetting isTyping state\n }\n\n // Render countdown or terminal status text\n const countdownText = (() => {\n if (isTerminal) return '(complete)'\n if (timeout === 0) return ''\n if (isTyping) return '(paused)'\n return `(${remaining}s)`\n })()\n\n return (\n <Box flexDirection=\"column\" flexShrink={0}>\n {/* Session recap */}\n <SteeringRecap {...recap} isTerminal={isTerminal} />\n\n {/* Model picker overlay */}\n {showModelPicker ? (\n <ModelPicker\n currentModel={currentModel}\n onSelect={handleModelSelect}\n onCancel={handleModelCancel}\n />\n ) : (\n <>\n {/* Prompt input line */}\n <Box>\n <Text color={theme.muted}>{'> '}</Text>\n <Box flexGrow={1}>\n <TextInput\n value={value}\n onChange={handleChange}\n onSubmit={handleSubmit}\n placeholder={isTerminal ? 'Send new instructions to continue marathon, or press enter to exit...' : 'Steer next iteration...'}\n />\n </Box>\n {countdownText && (\n <Text dimColor> {countdownText}</Text>\n )}\n </Box>\n\n {/* Hint text */}\n <Text dimColor>{isTerminal ? (isTyping ? 'Enter: send' : 'Enter: exit') : 'Enter: continue'} | /model /tools /sandbox /stop /help</Text>\n\n {/* Help display */}\n {showHelp && (\n <Box flexDirection=\"column\" marginTop={1}>\n {MARATHON_STEER_COMMANDS.map(cmd => (\n <Text key={cmd.name} dimColor>\n {cmd.name.padEnd(12)} {cmd.description}\n </Text>\n ))}\n </Box>\n )}\n </>\n )}\n </Box>\n )\n}\n","import { Box, Text } from 'ink'\nimport { theme } from '@runtypelabs/ink'\nimport type { SteeringRecapData } from './types.js'\n\n/**\n * SteeringRecap -- Compact session summary displayed above the steering prompt.\n *\n * Shows key metrics from the completed iteration:\n * - Session number (with checkmark when terminal)\n * - Tool calls made during the session\n * - Token usage (input + output)\n * - Estimated cost\n */\nexport function SteeringRecap({\n sessionNumber,\n toolCallsMade,\n tokensInput,\n tokensOutput,\n cost,\n isTerminal,\n}: SteeringRecapData & { isTerminal?: boolean }) {\n const label = isTerminal\n ? `\\u2713 Session ${sessionNumber} complete`\n : `Session ${sessionNumber} complete`\n\n return (\n <Box borderStyle=\"single\" borderColor={theme.muted} flexDirection=\"column\" paddingX={1}>\n <Text color={theme.label}>{label}</Text>\n <Text color={theme.muted}>\n Tools: {toolCallsMade} | Tokens: {tokensInput}+{tokensOutput} | Cost: ${cost.toFixed(4)}\n </Text>\n </Box>\n )\n}\n","import type { AgentStreamCallbacks } from '@runtypelabs/sdk'\nimport type { SlashCommand } from '../talk/types.js'\n\nexport interface MarathonToolEntry {\n id: string // unique key for React rendering\n sourceToolCallId: string // toolCallId from SDK event, used for matching start/complete\n name: string\n toolType: string // 'flow' | 'mcp' | 'builtin' | 'custom' | 'external'\n status: 'running' | 'complete' | 'error'\n parameters?: Record<string, unknown>\n result?: unknown\n executionTime?: number // ms, from SDK onToolComplete\n startedAt: number // Date.now() when tool started\n}\n\nexport interface RawStreamEvent {\n timestamp: number\n type: string\n data: Record<string, unknown>\n}\n\nexport interface MarathonStreamState {\n phase: 'idle' | 'thinking' | 'streaming' | 'tool' | 'complete' | 'error' | 'steering'\n content: string\n thinkingStartedAt: number | null // Date.now() when thinking began\n tools: MarathonToolEntry[]\n sessionCount: number\n totalCost: number\n currentIteration: number\n error: Error | null\n rawEvents: RawStreamEvent[]\n}\n\nexport type SteeringAction = 'continue' | 'steer' | 'model' | 'tools' | 'sandbox' | 'stop'\n\nexport interface SteeringResult {\n action: SteeringAction\n message?: string // new steering message (action='steer')\n model?: string // new model (action='model')\n tools?: boolean // toggle tools on/off (action='tools')\n sandbox?: string | false // sandbox provider or false to disable (action='sandbox')\n}\n\nexport interface SteeringRecapData {\n sessionNumber: number\n toolCallsMade: number\n tokensInput: number\n tokensOutput: number\n cost: number\n outputPreview: string // first ~100 chars of session output\n}\n\nexport const MARATHON_STEER_COMMANDS: SlashCommand[] = [\n { name: '/model', description: 'Change AI model', hasArgs: false },\n { name: '/tools', description: 'Toggle local tools on/off', hasArgs: false },\n {\n name: '/sandbox',\n description: 'Switch sandbox provider (e.g. /sandbox daytona)',\n hasArgs: true,\n },\n { name: '/stop', description: 'Stop marathon and save state', hasArgs: false },\n { name: '/help', description: 'Show available commands', hasArgs: false },\n]\n\nexport interface SteeringPromptProps {\n onSubmit: (result: SteeringResult) => void\n timeout: number // seconds, 0 = no timeout (terminal state)\n isTerminal: boolean // true when marathon is complete -- show prompt indefinitely\n currentModel: string\n currentSandbox?: string\n recap: SteeringRecapData\n}\n\nexport interface MarathonAppProps {\n taskName: string\n agentId: string\n model?: string\n sandbox?: string\n goal?: string // The user's message / task goal\n initialSessionCount: number\n initialCost: number\n debug?: boolean\n plainText?: boolean\n noSteer?: boolean // --no-steer flag: skip steering prompt entirely\n steeringTimeout?: number // auto-continue timeout in seconds (default 10)\n dashboardUrl?: string // Dashboard base URL for \"jump out\" link (o: open in browser)\n // Callbacks for Commander action\n onSaveState: (content: string, tools: MarathonToolEntry[]) => void\n onComplete: () => void\n // SDK streaming integration -- the Commander action calls these to feed events\n streamRef: React.MutableRefObject<MarathonStreamActions | null>\n}\n\nexport interface MarathonStreamActions {\n getCallbacks: () => AgentStreamCallbacks\n getState: () => MarathonStreamState\n requestSteering: (recap: SteeringRecapData, isTerminal?: boolean) => Promise<SteeringResult>\n resetForNewSession: () => void\n exit: () => void\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, EntityCard, MutationResult } from '../ink/shared/index.js'\n\ninterface ModelConfig {\n id: string\n modelId: string\n provider?: string\n isDefault?: boolean\n enabled?: boolean\n displayName?: string\n [key: string]: unknown\n}\n\ninterface GroupedModel {\n baseModel: string\n provider: string\n variants: Array<{\n modelId: string\n displayName: string\n configured?: boolean\n }>\n [key: string]: unknown\n}\n\nexport const modelsCommand = new Command('models').description('Manage model configurations')\n\nmodelsCommand\n .command('list')\n .description('List your enabled model configurations')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<ModelConfig>>('/model-configs')\n if (options.json) {\n printJson(data)\n return\n }\n const models = data.data ?? []\n if (models.length === 0) {\n console.log('No model configurations found')\n return\n }\n console.log('Your Models:')\n for (const model of models) {\n const defaultTag = model.isDefault ? ' (default)' : ''\n const statusTag = model.enabled === false ? ' [disabled]' : ''\n console.log(` ${model.id} ${model.modelId}${defaultTag}${statusTag}`)\n }\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(`\\n Total: ${total} models`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch models: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<ModelConfig[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [total, setTotal] = useState<number | undefined>()\n\n useEffect(() => {\n client\n .get<PaginatedResponse<ModelConfig>>('/model-configs')\n .then((res) => {\n setItems((res.data ?? []) as ModelConfig[])\n setTotal(getTotalCount(res.pagination))\n })\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Your Models',\n items,\n error,\n loading: items === null && error === null,\n total,\n renderCard: (item) => {\n const model = item as ModelConfig\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: model.id, color: 'green' },\n { label: 'Model', value: model.modelId },\n { label: 'Default', value: model.isDefault ? 'yes' : null, color: 'yellow' },\n { label: 'Enabled', value: model.enabled === false ? 'no' : null },\n ],\n })\n },\n emptyMessage: 'No model configurations found',\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nmodelsCommand\n .command('available')\n .description('List all available models grouped by provider')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<{ data?: GroupedModel[] }>('/model-configs/grouped')\n if (options.json) {\n printJson(data)\n return\n }\n const groups = data.data ?? []\n if (groups.length === 0) {\n console.log('No models available')\n return\n }\n console.log('Available Models:')\n for (const group of groups) {\n console.log(`\\n ${group.provider} / ${group.baseModel}`)\n for (const variant of group.variants) {\n const configuredTag = variant.configured ? ' [configured]' : ''\n console.log(` ${variant.modelId}${configuredTag}`)\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch available models: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<GroupedModel[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n client\n .get<{ data?: GroupedModel[] }>('/model-configs/grouped')\n .then((res) => setItems((res.data ?? []) as GroupedModel[]))\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Available Models',\n items,\n error,\n loading: items === null && error === null,\n renderCard: (item) => {\n const group = item as GroupedModel\n return React.createElement(EntityCard, {\n title: `${group.provider} / ${group.baseModel}`,\n fields: group.variants.map((v) => ({\n label: v.modelId,\n value: v.configured ? 'configured' : 'available',\n color: v.configured ? 'green' : undefined,\n })),\n })\n },\n emptyMessage: 'No models available',\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nmodelsCommand\n .command('enable <modelId>')\n .description('Enable a model by creating a configuration')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (modelId: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<ModelConfig>('/model-configs', { modelId })\n if (options.json) {\n printJson(data)\n return\n }\n console.log(` Config ID: ${data.id}`)\n console.log(` Model: ${data.modelId}`)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to enable model: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [result, setResult] = useState<ModelConfig | null>(null)\n\n useEffect(() => {\n client\n .post<ModelConfig>('/model-configs', { modelId })\n .then((data) => {\n setResult(data)\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: `Enabling model ${modelId}...`,\n success,\n successMessage: 'Model enabled',\n error,\n result: result\n ? React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: result.id, color: 'green' },\n { label: 'Model', value: result.modelId },\n ],\n })\n : undefined,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nmodelsCommand\n .command('disable <id>')\n .description('Disable a model configuration')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.patch(`/model-configs/${id}/status`, { enabled: false })\n console.log(JSON.stringify({ status: 'disabled', id }, null, 2))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to disable model: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n client\n .patch(`/model-configs/${id}/status`, { enabled: false })\n .then(() => {\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Disabling model...',\n success,\n successMessage: 'Model disabled',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nmodelsCommand\n .command('default <id>')\n .description('Set a model configuration as default')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.patch(`/model-configs/${id}/default`, {})\n console.log(JSON.stringify({ status: 'updated', id }, null, 2))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to set default model: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n client\n .patch(`/model-configs/${id}/default`, {})\n .then(() => {\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Setting default model...',\n success,\n successMessage: 'Default model updated',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nmodelsCommand\n .command('usage')\n .description('Show model usage statistics')\n .option('--json', 'Output as JSON')\n .action(async () => {\n // Keep existing JSON output — data is already JSON-shaped\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n console.log(chalk.gray('Fetching model usage...'))\n\n try {\n const client = new ApiClient(apiKey)\n const data = await client.get<Record<string, unknown>>('/model-configs/usage')\n printJson(data)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch model usage: ${message}`))\n process.exit(1)\n }\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, EntityCard, MutationResult, ConfirmPrompt } from '../ink/shared/index.js'\n\ninterface Schedule {\n id: string\n name?: string\n flowId: string\n cronExpression?: string\n status?: string\n nextRunAt?: string\n lastRunAt?: string\n [key: string]: unknown\n}\n\nexport const schedulesCommand = new Command('schedules').description('Manage schedules')\n\nschedulesCommand\n .command('list')\n .description('List all schedules')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<Schedule>>('/schedules')\n if (options.json) {\n printJson(data)\n return\n }\n const schedules = data.data ?? []\n if (schedules.length === 0) {\n console.log('No schedules found')\n return\n }\n console.log('Your Schedules:')\n for (const s of schedules) {\n const name = s.name || s.id\n const statusTag = s.status ? ` [${s.status}]` : ''\n console.log(` ${s.id} ${name}${statusTag}`)\n console.log(` Flow: ${s.flowId}`)\n if (s.cronExpression) {\n console.log(` Cron: ${s.cronExpression}`)\n }\n if (s.nextRunAt) {\n console.log(` Next run: ${s.nextRunAt}`)\n }\n }\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(`\\n Total: ${total} schedules`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch schedules: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<Schedule[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [total, setTotal] = useState<number | undefined>()\n\n useEffect(() => {\n client\n .get<PaginatedResponse<Schedule>>('/schedules')\n .then((res) => {\n setItems((res.data ?? []) as Schedule[])\n setTotal(getTotalCount(res.pagination))\n })\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Your Schedules',\n items,\n error,\n loading: items === null && error === null,\n total,\n renderCard: (item) => {\n const s = item as Schedule\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: s.id, color: 'green' },\n { label: 'Name', value: s.name },\n { label: 'Flow ID', value: s.flowId, color: 'gray' },\n { label: 'Cron', value: s.cronExpression, color: 'gray' },\n {\n label: 'Status',\n value: s.status,\n color: s.status === 'active' ? 'green' : 'yellow',\n },\n { label: 'Next run', value: s.nextRunAt },\n ],\n })\n },\n emptyMessage: 'No schedules found',\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nschedulesCommand\n .command('get <id>')\n .description('Get schedule details')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<Schedule>(`/schedules/${id}`)\n if (options.json) {\n printJson(data)\n return\n }\n printDetail('Schedule', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Flow ID', value: data.flowId },\n { label: 'Cron', value: data.cronExpression },\n { label: 'Status', value: data.status },\n { label: 'Next run', value: data.nextRunAt },\n { label: 'Last run', value: data.lastRunAt },\n ])\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to fetch schedule: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [items, setItems] = useState<Schedule[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n client\n .get<Schedule>(`/schedules/${id}`)\n .then((res) => setItems([res as Schedule]))\n .catch((err) => setError(err instanceof Error ? err : new Error(String(err))))\n }, [])\n\n return React.createElement(DataList, {\n title: 'Schedule',\n items,\n error,\n loading: items === null && error === null,\n renderCard: (item) => {\n const s = item as Schedule\n return React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: s.id, color: 'green' },\n { label: 'Name', value: s.name },\n { label: 'Flow ID', value: s.flowId },\n { label: 'Cron', value: s.cronExpression },\n { label: 'Status', value: s.status },\n { label: 'Next run', value: s.nextRunAt },\n { label: 'Last run', value: s.lastRunAt },\n ],\n })\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nschedulesCommand\n .command('create')\n .description('Create a new schedule')\n .requiredOption('-f, --flow <id>', 'Flow ID to schedule')\n .requiredOption('-c, --cron <expression>', 'Cron expression (e.g. \"0 9 * * *\")')\n .option('-n, --name <name>', 'Schedule name')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { flow: string; cron: string; name?: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<Schedule>('/schedules', {\n flowId: options.flow,\n cronExpression: options.cron,\n name: options.name,\n })\n if (options.json) {\n printJson(data)\n return\n }\n console.log(` ID: ${data.id}`)\n if (data.name) console.log(` Name: ${data.name}`)\n console.log(` Cron: ${data.cronExpression}`)\n if (data.nextRunAt) console.log(` Next run: ${data.nextRunAt}`)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to create schedule: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [result, setResult] = useState<Schedule | null>(null)\n\n useEffect(() => {\n client\n .post<Schedule>('/schedules', {\n flowId: options.flow,\n cronExpression: options.cron,\n name: options.name,\n })\n .then((data) => {\n setResult(data)\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Creating schedule...',\n success,\n successMessage: 'Schedule created',\n error,\n result: result\n ? React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: result.id, color: 'green' },\n { label: 'Name', value: result.name },\n { label: 'Cron', value: result.cronExpression },\n { label: 'Next run', value: result.nextRunAt },\n ],\n })\n : undefined,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\n// Helper for simple mutation commands (pause, resume, run-now)\nfunction simpleMutationCommand(\n name: string,\n description: string,\n mutationFn: (client: ApiClient, id: string) => Promise<void>,\n successMsg: string,\n loadingMsg: string\n) {\n schedulesCommand\n .command(`${name} <id>`)\n .description(description)\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await mutationFn(client, id)\n console.log(JSON.stringify({ status: name, id }, null, 2))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to ${name} schedule: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n mutationFn(client, id)\n .then(() => {\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: loadingMsg,\n success,\n successMessage: successMsg,\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n}\n\nsimpleMutationCommand(\n 'pause',\n 'Pause a schedule',\n (client, id) => client.post(`/schedules/${id}/pause`),\n 'Schedule paused',\n 'Pausing schedule...'\n)\n\nsimpleMutationCommand(\n 'resume',\n 'Resume a paused schedule',\n (client, id) => client.post(`/schedules/${id}/resume`),\n 'Schedule resumed',\n 'Resuming schedule...'\n)\n\nsimpleMutationCommand(\n 'run-now',\n 'Trigger a schedule to run immediately',\n (client, id) => client.post(`/schedules/${id}/run-now`),\n 'Schedule triggered',\n 'Triggering schedule...'\n)\n\nschedulesCommand\n .command('delete <id>')\n .description('Delete a schedule')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.delete(`/schedules/${id}`)\n console.log(JSON.stringify({ status: 'deleted', id }, null, 2))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to delete schedule: ${message}`))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [confirmed, setConfirmed] = useState<boolean | null>(null)\n const [loading, setLoading] = useState(false)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n if (confirmed !== true) return undefined\n setLoading(true)\n client\n .delete(`/schedules/${id}`)\n .then(() => {\n setSuccess(true)\n setLoading(false)\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n })\n return undefined\n }, [confirmed])\n\n if (confirmed === null) {\n return React.createElement(ConfirmPrompt, {\n message: `Delete schedule ${id}?`,\n onConfirm: (val: boolean) => setConfirmed(val),\n })\n }\n\n if (confirmed === false) {\n return React.createElement(MutationResult, {\n loading: false,\n success: true,\n successMessage: 'Cancelled',\n error: null,\n })\n }\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Deleting schedule...',\n success,\n successMessage: 'Schedule deleted',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { Text } from 'ink'\nimport { readFileSync } from 'fs'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, MutationResult, EntityCard } from '../ink/shared/index.js'\n\ninterface EvalBatch {\n id: string\n name?: string\n flowId: string\n status?: string\n totalRecords?: number\n completedRecords?: number\n createdAt?: string\n groupId?: string\n}\n\ninterface EvalResult {\n recordId: string\n status: string\n score?: number\n output?: unknown\n}\n\nexport const evalCommand = new Command('eval').description('Manage evaluations')\n\nevalCommand\n .command('submit')\n .description('Submit an eval batch')\n .requiredOption('-f, --flow <id>', 'Flow ID to evaluate')\n .requiredOption('-r, --records <file>', 'JSON file with record IDs')\n .option('-n, --name <name>', 'Eval batch name')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { flow: string; records: string; name?: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n let recordIds: string[]\n try {\n const content = readFileSync(options.records, 'utf-8')\n const parsed = JSON.parse(content)\n recordIds = Array.isArray(parsed) ? parsed : parsed.recordIds || parsed.records || []\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`Failed to read records file: ${message}`))\n process.exit(1)\n return\n }\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<EvalBatch>('/eval/submit', {\n flowId: options.flow,\n recordIds,\n name: options.name,\n })\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(chalk.green('Eval submitted'))\n console.log(` Batch ID: ${chalk.green(data.id)}`)\n if (data.name) console.log(` Name: ${data.name}`)\n console.log(` Status: ${data.status}`)\n console.log(` Records: ${data.totalRecords}`)\n if (data.groupId) console.log(` Group: ${data.groupId}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to submit eval'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.post<EvalBatch>('/eval/submit', {\n flowId: options.flow,\n recordIds,\n name: options.name,\n })\n\n const fields: Array<{ label: string; value: string | number | null | undefined; color?: string }> = [\n { label: 'Batch ID', value: data.id, color: 'green' },\n ]\n if (data.name) fields.push({ label: 'Name', value: data.name })\n fields.push({ label: 'Status', value: data.status })\n fields.push({ label: 'Records', value: data.totalRecords })\n if (data.groupId) fields.push({ label: 'Group', value: data.groupId })\n\n setResultNode(React.createElement(EntityCard, { fields }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: `Submitting eval with ${recordIds.length} records...`,\n success,\n successMessage: 'Eval submitted',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nevalCommand\n .command('list')\n .description('List eval batches')\n .option('--flow <id>', 'Filter by flow ID')\n .option('--limit <n>', 'Limit results', '20')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { flow?: string; limit: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n const params: Record<string, string> = { limit: options.limit }\n if (options.flow) params.flowId = options.flow\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<EvalBatch>>('/eval/batches', params)\n\n if (options.json) {\n printJson(data)\n } else {\n const batches = data.data ?? []\n if (batches.length === 0) {\n console.log(chalk.gray('No eval batches found'))\n return\n }\n\n console.log(chalk.cyan('Eval Batches:'))\n for (const batch of batches) {\n const name = batch.name || batch.id\n const progress = batch.totalRecords\n ? `${batch.completedRecords ?? 0}/${batch.totalRecords}`\n : ''\n const statusColor = batch.status === 'completed' ? 'green' : 'yellow'\n console.log(\n ` ${chalk.green(batch.id)} ${name} ${chalk[statusColor](`[${batch.status}]`)} ${chalk.gray(progress)}`\n )\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} batches`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch eval batches'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [items, setItems] = useState<Record<string, unknown>[] | null>(null)\n const [total, setTotal] = useState<number | undefined>(undefined)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<PaginatedResponse<EvalBatch>>('/eval/batches', params)\n setItems((data.data ?? []) as unknown as Record<string, unknown>[])\n setTotal(getTotalCount(data.pagination))\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(DataList, {\n title: 'Eval Batches',\n items,\n error,\n loading,\n total,\n emptyMessage: 'No eval batches found',\n renderCard: (item: Record<string, unknown>) => {\n const b = item as unknown as EvalBatch\n const name = b.name || b.id\n const progress = b.totalRecords ? `${b.completedRecords ?? 0}/${b.totalRecords}` : ''\n const statusColor = b.status === 'completed' ? 'green' : 'yellow'\n return React.createElement(Text, { color: statusColor },\n ` ${b.id} ${name} [${b.status}] ${progress}`\n )\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nevalCommand\n .command('results <id>')\n .description('Get eval batch results')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<{ data?: EvalResult[]; batch?: EvalBatch }>(`/eval/${id}/results`)\n\n if (options.json) {\n printJson(data)\n } else {\n if (data.batch) {\n console.log(chalk.cyan(`Eval: ${data.batch.name || data.batch.id}`))\n console.log(` Status: ${data.batch.status}`)\n console.log(` Progress: ${data.batch.completedRecords ?? 0}/${data.batch.totalRecords ?? 0}`)\n console.log()\n }\n\n const results = data.data ?? []\n if (results.length === 0) {\n console.log(chalk.gray('No results yet'))\n return\n }\n\n console.log(chalk.cyan('Results:'))\n for (const result of results) {\n const scoreStr = result.score !== undefined ? chalk.blue(` score=${result.score}`) : ''\n const statusColor = result.status === 'completed' ? 'green' : 'red'\n console.log(\n ` ${chalk.gray(result.recordId)} ${chalk[statusColor](`[${result.status}]`)}${scoreStr}`\n )\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch eval results'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<{ data?: EvalResult[]; batch?: EvalBatch }>(`/eval/${id}/results`)\n const results = data.data ?? []\n\n const fields: Array<{ label: string; value: string | number | null | undefined; color?: string }> = []\n\n if (data.batch) {\n fields.push({ label: 'Eval', value: data.batch.name || data.batch.id })\n fields.push({ label: 'Status', value: data.batch.status })\n fields.push({ label: 'Progress', value: `${data.batch.completedRecords ?? 0}/${data.batch.totalRecords ?? 0}` })\n }\n\n fields.push({ label: 'Results', value: results.length })\n\n if (results.length > 0) {\n const completed = results.filter(r => r.status === 'completed').length\n const avgScore = results.filter(r => r.score !== undefined).reduce((sum, r) => sum + (r.score ?? 0), 0) / (results.filter(r => r.score !== undefined).length || 1)\n fields.push({ label: 'Completed', value: `${completed}/${results.length}`, color: 'green' })\n if (results.some(r => r.score !== undefined)) {\n fields.push({ label: 'Avg Score', value: avgScore.toFixed(2) })\n }\n }\n\n setResultNode(React.createElement(EntityCard, { fields }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching eval results...',\n success,\n successMessage: 'Eval Results',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nevalCommand\n .command('compare <groupId>')\n .description('Compare evals in a group')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (groupId: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<Record<string, unknown>>('/eval/compare', { groupId })\n printJson(data)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to compare evals'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.post<Record<string, unknown>>('/eval/compare', { groupId })\n printJson(data)\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Comparing evals...',\n success,\n successMessage: 'Comparison complete',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { Text } from 'ink'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, MutationResult, EntityCard, ConfirmPrompt } from '../ink/shared/index.js'\n\ninterface ApiKeyEntry {\n id: string\n name: string\n prefix?: string\n scopes?: string[]\n lastUsedAt?: string\n createdAt?: string\n}\n\nexport const apiKeysCommand = new Command('api-keys').description('Manage API keys')\n\napiKeysCommand\n .command('list')\n .description('List your API keys')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<ApiKeyEntry>>('/api-keys')\n\n if (options.json) {\n printJson(data)\n } else {\n const keys = data.data ?? []\n if (keys.length === 0) {\n console.log(chalk.gray('No API keys found'))\n return\n }\n\n console.log(chalk.cyan('Your API Keys:'))\n for (const key of keys) {\n const prefix = key.prefix ? chalk.gray(` (${key.prefix}...)`) : ''\n const lastUsed = key.lastUsedAt ? chalk.gray(` last used: ${key.lastUsedAt}`) : ''\n console.log(` ${chalk.green(key.id)} ${key.name}${prefix}${lastUsed}`)\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} keys`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch API keys'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [items, setItems] = useState<Record<string, unknown>[] | null>(null)\n const [total, setTotal] = useState<number | undefined>(undefined)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<PaginatedResponse<ApiKeyEntry>>('/api-keys')\n setItems((data.data ?? []) as unknown as Record<string, unknown>[])\n setTotal(getTotalCount(data.pagination))\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(DataList, {\n title: 'Your API Keys',\n items,\n error,\n loading,\n total,\n emptyMessage: 'No API keys found',\n renderCard: (item: Record<string, unknown>) => {\n const k = item as unknown as ApiKeyEntry\n const prefix = k.prefix ? ` (${k.prefix}...)` : ''\n const lastUsed = k.lastUsedAt ? ` last used: ${k.lastUsedAt}` : ''\n return React.createElement(Text, null, ` ${k.id} ${k.name}${prefix}${lastUsed}`)\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\napiKeysCommand\n .command('get <id>')\n .description('Get API key details')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<ApiKeyEntry>(`/api-keys/${id}`)\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('API Key', [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Prefix', value: data.prefix },\n { label: 'Scopes', value: data.scopes?.join(', ') },\n { label: 'Last used', value: data.lastUsedAt },\n { label: 'Created', value: data.createdAt },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch API key'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<ApiKeyEntry>(`/api-keys/${id}`)\n setResultNode(React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: data.id },\n { label: 'Name', value: data.name },\n { label: 'Prefix', value: data.prefix },\n { label: 'Scopes', value: data.scopes?.join(', ') },\n { label: 'Last used', value: data.lastUsedAt },\n { label: 'Created', value: data.createdAt },\n ],\n }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching API key...',\n success,\n successMessage: 'API Key',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\napiKeysCommand\n .command('create')\n .description('Create a new API key')\n .requiredOption('-n, --name <name>', 'Key name')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { name: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<ApiKeyEntry & { key?: string }>('/api-keys', {\n name: options.name,\n })\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(chalk.green('API key created'))\n console.log(` ID: ${chalk.green(data.id)}`)\n console.log(` Name: ${data.name}`)\n if (data.key) {\n console.log(` Key: ${chalk.yellow(data.key)}`)\n console.log(chalk.gray(' Save this key - it will not be shown again'))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to create API key'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.post<ApiKeyEntry & { key?: string }>('/api-keys', {\n name: options.name,\n })\n\n const fields: Array<{ label: string; value: string | number | null | undefined; color?: string }> = [\n { label: 'ID', value: data.id, color: 'green' },\n { label: 'Name', value: data.name },\n ]\n if (data.key) {\n fields.push({ label: 'Key', value: data.key, color: 'yellow' })\n fields.push({ label: 'Note', value: 'Save this key - it will not be shown again' })\n }\n\n setResultNode(React.createElement(EntityCard, { fields }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Creating API key...',\n success,\n successMessage: 'API key created',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\napiKeysCommand\n .command('delete <id>')\n .description('Delete an API key')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .option('--yes', 'Skip confirmation')\n .action(async (id: string, options: { tty?: boolean; noTty?: boolean; yes?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.delete(`/api-keys/${id}`)\n console.log(chalk.green('API key deleted'))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to delete API key'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n if (options.yes) {\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n await client.delete(`/api-keys/${id}`)\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Deleting API key...',\n success,\n successMessage: 'API key deleted',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n return\n }\n\n // Confirm + delete\n const confirmed = await new Promise<boolean>((resolve) => {\n const { unmount } = render(\n React.createElement(ConfirmPrompt, {\n message: `Delete API key ${id}?`,\n defaultValue: false,\n onConfirm: (result: boolean) => {\n resolve(result)\n unmount()\n },\n })\n )\n })\n\n if (!confirmed) return\n\n const DeleteApp = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n await client.delete(`/api-keys/${id}`)\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Deleting API key...',\n success,\n successMessage: 'API key deleted',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(DeleteApp))\n await waitUntilExit()\n })\n\napiKeysCommand\n .command('regenerate <id>')\n .description('Regenerate an API key')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (id: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.post<ApiKeyEntry & { key?: string }>(`/api-keys/${id}/regenerate`)\n\n if (options.json) {\n printJson(data)\n } else {\n console.log(chalk.green('API key regenerated'))\n if (data.key) {\n console.log(` New Key: ${chalk.yellow(data.key)}`)\n console.log(chalk.gray(' Save this key - it will not be shown again'))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to regenerate API key'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.post<ApiKeyEntry & { key?: string }>(`/api-keys/${id}/regenerate`)\n\n if (data.key) {\n setResultNode(React.createElement(EntityCard, {\n fields: [\n { label: 'New Key', value: data.key, color: 'yellow' },\n { label: 'Note', value: 'Save this key - it will not be shown again' },\n ],\n }))\n }\n\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Regenerating API key...',\n success,\n successMessage: 'API key regenerated',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\napiKeysCommand\n .command('analytics')\n .description('Show API key usage analytics')\n .option('--key <id>', 'Specific key ID (defaults to all keys)')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { key?: string; json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const path = options.key ? `/api-keys/${options.key}/analytics` : '/api-keys/analytics'\n const data = await client.get<Record<string, unknown>>(path)\n printJson(data)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch analytics'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const path = options.key ? `/api-keys/${options.key}/analytics` : '/api-keys/analytics'\n const data = await client.get<Record<string, unknown>>(path)\n printJson(data)\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching analytics...',\n success,\n successMessage: 'Analytics',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { Text } from 'ink'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail, type PaginatedResponse, getTotalCount } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { MutationResult, EntityCard, DataList } from '../ink/shared/index.js'\n\ninterface AnalyticsStats {\n records?: number\n prompts?: number\n flows?: number\n executions?: number\n [key: string]: unknown\n}\n\ninterface RecordResult {\n id: string\n recordId: string\n flowId: string\n status: string\n createdAt?: string\n [key: string]: unknown\n}\n\nexport const analyticsCommand = new Command('analytics').description('View analytics and execution results')\n\nanalyticsCommand\n .command('stats')\n .description('Show account statistics')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<AnalyticsStats>('/analytics/stats')\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Account Statistics', [\n { label: 'Flows', value: data.flows },\n { label: 'Prompts', value: data.prompts },\n { label: 'Records', value: data.records },\n { label: 'Executions', value: data.executions },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch stats'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<AnalyticsStats>('/analytics/stats')\n setResultNode(React.createElement(EntityCard, {\n fields: [\n { label: 'Flows', value: data.flows },\n { label: 'Prompts', value: data.prompts },\n { label: 'Records', value: data.records },\n { label: 'Executions', value: data.executions },\n ],\n }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching stats...',\n success,\n successMessage: 'Account Statistics',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nanalyticsCommand\n .command('results')\n .description('List execution results')\n .option('--flow <id>', 'Filter by flow ID')\n .option('--record <id>', 'Filter by record ID')\n .option('--status <status>', 'Filter by status')\n .option('--limit <n>', 'Limit results', '20')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(\n async (options: {\n flow?: string\n record?: string\n status?: string\n limit: string\n json?: boolean\n tty?: boolean\n noTty?: boolean\n }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n const params: Record<string, string> = { limit: options.limit }\n if (options.flow) params.flowId = options.flow\n if (options.record) params.recordId = options.record\n if (options.status) params.status = options.status\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<PaginatedResponse<RecordResult>>(\n '/analytics/record-results',\n params\n )\n\n if (options.json) {\n printJson(data)\n } else {\n const results = data.data ?? []\n if (results.length === 0) {\n console.log(chalk.gray('No results found'))\n return\n }\n\n console.log(chalk.cyan('Execution Results:'))\n for (const result of results) {\n const statusColor = result.status === 'completed' ? 'green' : 'red'\n const date = result.createdAt ? chalk.gray(` ${result.createdAt}`) : ''\n console.log(\n ` ${chalk.green(result.id)} ${chalk[statusColor](`[${result.status}]`)} flow=${chalk.gray(result.flowId)} record=${chalk.gray(result.recordId)}${date}`\n )\n }\n\n const total = getTotalCount(data.pagination)\n if (total !== undefined) {\n console.log(chalk.dim(`\\n Total: ${total} results`))\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch results'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [items, setItems] = useState<Record<string, unknown>[] | null>(null)\n const [total, setTotal] = useState<number | undefined>(undefined)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<PaginatedResponse<RecordResult>>(\n '/analytics/record-results',\n params\n )\n setItems((data.data ?? []) as unknown as Record<string, unknown>[])\n setTotal(getTotalCount(data.pagination))\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(DataList, {\n title: 'Execution Results',\n items,\n error,\n loading,\n total,\n emptyMessage: 'No results found',\n renderCard: (item: Record<string, unknown>) => {\n const r = item as unknown as RecordResult\n const statusColor = r.status === 'completed' ? 'green' : 'red'\n return React.createElement(Text, { color: statusColor },\n ` ${r.id} [${r.status}] flow=${r.flowId} record=${r.recordId}${r.createdAt ? ` ${r.createdAt}` : ''}`\n )\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n }\n )\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport open from 'open'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { MutationResult, EntityCard } from '../ink/shared/index.js'\n\ninterface BillingStatus {\n plan?: string\n planName?: string\n status?: string\n currentPeriodStart?: string\n currentPeriodEnd?: string\n usage?: {\n executionsUsed?: number\n executionsLimit?: number\n [key: string]: unknown\n }\n limits?: {\n dailyLimit?: number\n monthlyLimit?: number\n rateLimit?: string\n [key: string]: unknown\n }\n [key: string]: unknown\n}\n\nexport const billingCommand = new Command('billing').description('View billing and subscription info')\n\nbillingCommand\n .command('status')\n .description('Show current plan and usage')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<BillingStatus>('/billing/status')\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Billing Status', [\n { label: 'Plan', value: data.planName || data.plan },\n { label: 'Status', value: data.status },\n { label: 'Period start', value: data.currentPeriodStart },\n { label: 'Period end', value: data.currentPeriodEnd },\n ])\n\n if (data.usage) {\n console.log()\n const limit = data.usage.executionsLimit\n const used = data.usage.executionsUsed ?? 0\n const limitStr = limit ? `/${limit}` : ''\n printDetail('Usage', [\n { label: 'Executions', value: `${used}${limitStr}` },\n ])\n }\n\n if (data.limits) {\n console.log()\n printDetail('Limits', [\n { label: 'Daily', value: data.limits.dailyLimit },\n { label: 'Monthly', value: data.limits.monthlyLimit },\n { label: 'Rate limit', value: data.limits.rateLimit },\n ])\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch billing status'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<BillingStatus>('/billing/status')\n\n const fields: Array<{ label: string; value: string | number | null | undefined; color?: string }> = [\n { label: 'Plan', value: data.planName || data.plan },\n { label: 'Status', value: data.status, color: data.status === 'active' ? 'green' : undefined },\n { label: 'Period start', value: data.currentPeriodStart },\n { label: 'Period end', value: data.currentPeriodEnd },\n ]\n\n if (data.usage) {\n const limit = data.usage.executionsLimit\n const used = data.usage.executionsUsed ?? 0\n const limitStr = limit ? `/${limit}` : ''\n fields.push({ label: 'Executions', value: `${used}${limitStr}` })\n }\n\n if (data.limits) {\n if (data.limits.dailyLimit) fields.push({ label: 'Daily limit', value: data.limits.dailyLimit })\n if (data.limits.monthlyLimit) fields.push({ label: 'Monthly limit', value: data.limits.monthlyLimit })\n if (data.limits.rateLimit) fields.push({ label: 'Rate limit', value: data.limits.rateLimit })\n }\n\n setResultNode(React.createElement(EntityCard, { fields }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching billing status...',\n success,\n successMessage: 'Billing Status',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nbillingCommand\n .command('portal')\n .description('Open the billing portal in your browser')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n const data = await client.post<{ url?: string }>('/billing/portal')\n if (data.url) {\n console.log('Opening billing portal...')\n console.log(data.url)\n await open(data.url)\n } else {\n console.log('No portal URL returned. You may need to set up billing first.')\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to open billing portal'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [msg, setMsg] = useState('Opening billing portal...')\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.post<{ url?: string }>('/billing/portal')\n if (data.url) {\n await open(data.url)\n setMsg('Billing portal opened in browser')\n setSuccess(true)\n } else {\n setMsg('No portal URL returned. You may need to set up billing first.')\n setSuccess(true)\n }\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Generating portal link...',\n success,\n successMessage: msg,\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nbillingCommand\n .command('refresh')\n .description('Refresh plan data from billing provider')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (options: { tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.post('/billing/refresh')\n console.log(chalk.green('Plan data refreshed'))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to refresh plan data'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n await client.post('/billing/refresh')\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Refreshing plan data...',\n success,\n successMessage: 'Plan data refreshed',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport React from 'react'\nimport { render } from 'ink'\nimport { useState, useEffect } from 'react'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { ApiClient } from '../lib/api-client'\nimport { printJson, printDetail } from '../lib/output'\nimport { isTTY } from '../ink/shared/isTTY.js'\nimport { DataList, MutationResult, EntityCard } from '../ink/shared/index.js'\nimport { Text } from 'ink'\n\ninterface FlowVersion {\n id: string\n flowId: string\n version?: number\n status?: string\n published?: boolean\n createdAt?: string\n steps?: unknown[]\n}\n\nexport const flowVersionsCommand = new Command('flow-versions').description(\n 'Manage flow versions'\n)\n\nflowVersionsCommand\n .command('list <flowId>')\n .description('List all versions for a flow')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (flowId: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<{ data?: FlowVersion[] }>(`/flow-versions/${flowId}`)\n\n if (options.json) {\n printJson(data)\n } else {\n const versions = data.data ?? []\n if (versions.length === 0) {\n console.log(chalk.gray('No versions found'))\n return\n }\n\n console.log(chalk.cyan(`Versions for flow ${flowId}:`))\n for (const v of versions) {\n const publishedTag = v.published ? chalk.green(' [published]') : ''\n const versionNum = v.version !== undefined ? `v${v.version}` : v.id\n const date = v.createdAt ? chalk.gray(` ${v.createdAt}`) : ''\n console.log(` ${chalk.green(v.id)} ${versionNum}${publishedTag}${date}`)\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch versions'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [items, setItems] = useState<Record<string, unknown>[] | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<{ data?: FlowVersion[] }>(`/flow-versions/${flowId}`)\n setItems((data.data ?? []) as unknown as Record<string, unknown>[])\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(DataList, {\n title: `Versions for flow ${flowId}`,\n items,\n error,\n loading,\n emptyMessage: 'No versions found',\n renderCard: (item: Record<string, unknown>) => {\n const v = item as unknown as FlowVersion\n const publishedTag = v.published ? ' [published]' : ''\n const versionNum = v.version !== undefined ? `v${v.version}` : v.id\n return React.createElement(Text, null, ` ${v.id} ${versionNum}${publishedTag}${v.createdAt ? ` ${v.createdAt}` : ''}`)\n },\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nflowVersionsCommand\n .command('get <flowId> <versionId>')\n .description('Get a specific version')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (flowId: string, versionId: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<FlowVersion>(`/flow-versions/${flowId}/${versionId}`)\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Flow Version', [\n { label: 'ID', value: data.id },\n { label: 'Flow ID', value: data.flowId },\n { label: 'Version', value: data.version },\n { label: 'Published', value: data.published },\n { label: 'Created', value: data.createdAt },\n { label: 'Steps', value: data.steps?.length },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch version'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<FlowVersion>(`/flow-versions/${flowId}/${versionId}`)\n setResultNode(React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: data.id },\n { label: 'Flow ID', value: data.flowId },\n { label: 'Version', value: data.version },\n { label: 'Published', value: data.published ? 'Yes' : 'No', color: data.published ? 'green' : undefined },\n { label: 'Created', value: data.createdAt },\n { label: 'Steps', value: data.steps?.length },\n ],\n }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching version...',\n success,\n successMessage: 'Flow Version',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nflowVersionsCommand\n .command('published <flowId>')\n .description('Get the published version for a flow')\n .option('--json', 'Output as JSON')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (flowId: string, options: { json?: boolean; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options) || options.json) {\n try {\n const data = await client.get<FlowVersion>(`/flow-versions/${flowId}/published`)\n\n if (options.json) {\n printJson(data)\n } else {\n printDetail('Published Version', [\n { label: 'ID', value: data.id },\n { label: 'Version', value: data.version },\n { label: 'Created', value: data.createdAt },\n { label: 'Steps', value: data.steps?.length },\n ])\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to fetch published version'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n const [resultNode, setResultNode] = useState<React.ReactNode>(undefined)\n\n useEffect(() => {\n const run = async () => {\n try {\n const data = await client.get<FlowVersion>(`/flow-versions/${flowId}/published`)\n setResultNode(React.createElement(EntityCard, {\n fields: [\n { label: 'ID', value: data.id },\n { label: 'Version', value: data.version },\n { label: 'Created', value: data.createdAt },\n { label: 'Steps', value: data.steps?.length },\n ],\n }))\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Fetching published version...',\n success,\n successMessage: 'Published Version',\n error,\n result: resultNode,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n\nflowVersionsCommand\n .command('publish <flowId>')\n .description('Publish a version')\n .requiredOption('-v, --version <versionId>', 'Version ID to publish')\n .option('--tty', 'Force TTY mode')\n .option('--no-tty', 'Force non-TTY mode')\n .action(async (flowId: string, options: { version: string; tty?: boolean; noTty?: boolean }) => {\n const apiKey = await ensureAuth()\n if (!apiKey) return\n\n const client = new ApiClient(apiKey)\n\n if (!isTTY(options)) {\n try {\n await client.post(`/flow-versions/${flowId}/publish`, {\n versionId: options.version,\n })\n console.log(chalk.green('Version published'))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red('Failed to publish version'))\n console.error(chalk.red(message))\n process.exit(1)\n }\n return\n }\n\n const App = () => {\n const [loading, setLoading] = useState(true)\n const [success, setSuccess] = useState<boolean | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n const run = async () => {\n try {\n await client.post(`/flow-versions/${flowId}/publish`, {\n versionId: options.version,\n })\n setSuccess(true)\n setLoading(false)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n setSuccess(false)\n setLoading(false)\n }\n }\n run()\n }, [])\n\n return React.createElement(MutationResult, {\n loading,\n loadingLabel: 'Publishing version...',\n success,\n successMessage: 'Version published',\n error,\n })\n }\n\n const { waitUntilExit } = render(React.createElement(App))\n await waitUntilExit()\n })\n"],"mappings":"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","names":["crypto","Command","chalk","config","readFileSync","dirname","join","useState","useEffect","config","Text","theme","jsx","jsxs","Box","Text","useInput","theme","jsx","jsxs","useEffect","useRef","Box","Text","useApp","useInput","Spinner","ErrorDisplay","theme","jsx","jsxs","useState","useEffect","App","waitUntilExit","Command","chalk","React","render","useState","useEffect","chalk","chalk","path","chalk","Command","chalk","useState","useEffect","React","render","Command","chalk","React","render","useState","useEffect","Command","chalk","useState","useEffect","React","render","Command","chalk","React","render","useState","useEffect","processStream","Command","chalk","useState","useEffect","React","render","processStream","Command","chalk","React","render","useState","useEffect","readFileSync","Command","readFileSync","chalk","useState","useEffect","React","render","Command","React","render","chalk","processStream","fs","path","os","useState","useEffect","useRef","fs","path","Box","useApp","useInput","ErrorDisplay","useState","useRef","React","Box","Text","theme","React","Box","Text","theme","useState","useEffect","jsx","jsxs","Box","Text","theme","React","jsx","Box","Text","theme","React","Box","Text","StreamOutput","Spinner","theme","jsx","jsxs","useState","useCallback","Box","Text","useInput","theme","Box","Text","useInput","theme","jsx","jsxs","useInput","Box","theme","Text","jsx","jsxs","useState","useCallback","useInput","Box","theme","Text","Box","Text","useInput","SelectInput","theme","jsx","jsxs","jsx","jsxs","useApp","useEffect","useState","useRef","path","fs","useInput","Box","ErrorDisplay","Command","chalk","processStream","render","React","Command","chalk","Conf","path","os","Command","chalk","React","render","useState","useEffect","open","chalk","Command","open","useState","useEffect","dashboardUrl","React","render","CredentialStore","Command","React","render","useState","useEffect","useCallback","Box","Text","useApp","useInput","TextInput","SelectInput","Spinner","theme","Box","Text","theme","jsx","jsxs","Box","Text","theme","jsx","jsxs","jsx","jsxs","useApp","useState","useCallback","useEffect","useInput","validateUrl","createProduct","Spinner","Box","Text","theme","SelectInput","TextInput","Command","render","React","Command","chalk","React","render","useState","useEffect","readFileSync","processStream","Command","chalk","readFileSync","processStream","useState","useEffect","React","render","Command","chalk","React","render","useState","useEffect","processStream","Command","chalk","render","React","useState","useEffect","useRef","useCallback","open","Box","useApp","useInput","useStdout","StreamOutput","StatusBar","ErrorDisplay","theme","useState","useRef","useMemo","useCallback","INITIAL_STATE","Box","Text","theme","jsx","jsxs","useState","useEffect","Spinner","theme","jsx","useState","useEffect","useMemo","Box","Text","theme","Box","Text","Spinner","theme","jsx","jsxs","jsx","jsxs","useState","useEffect","useMemo","Box","Text","theme","useMemo","Box","Text","theme","jsx","jsxs","useState","useEffect","useRef","Box","Text","TextInput","theme","Box","Text","theme","jsx","jsxs","Fragment","jsx","jsxs","useState","useRef","useEffect","Box","Text","theme","TextInput","jsx","jsxs","SCROLL_STEP","useApp","useStdout","useRef","useState","useCallback","useEffect","useInput","open","scrollHint","Box","StreamOutput","ErrorDisplay","theme","StatusBar","fs","path","chalk","render","React","result","Command","Command","chalk","useState","useEffect","React","render","processStream","Command","chalk","React","render","useState","useEffect","Command","chalk","useState","useEffect","React","render","Command","chalk","React","render","useState","useEffect","Command","chalk","useState","useEffect","React","render","Command","chalk","React","render","useState","useEffect","Text","readFileSync","Command","readFileSync","chalk","useState","useEffect","React","render","Text","Command","chalk","React","render","useState","useEffect","Text","Command","chalk","useState","useEffect","React","Text","render","waitUntilExit","path","Command","chalk","React","render","useState","useEffect","Text","Command","chalk","useState","useEffect","React","render","Text","Command","chalk","React","render","useState","useEffect","open","Command","chalk","useState","useEffect","React","render","open","Command","chalk","React","render","useState","useEffect","Text","Command","chalk","useState","useEffect","React","render","config","join","dirname","readFileSync","Command","chalk"]}