@runtypelabs/cli 0.1.8 → 0.1.10
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/README.md +38 -6
- package/dist/index.js +2887 -590
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/auth/credential-store.ts","../src/commands/flows.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"],"sourcesContent":["import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { config } from 'dotenv'\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'\n\n// Load environment variables\nconfig()\n\nconst program = new Command()\n\nprogram\n .name('runtype')\n .description('CLI for Runtype AI Platform')\n .version('0.1.0')\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(authCommand)\nprogram.addCommand(flowsCommand)\nprogram.addCommand(recordsCommand)\nprogram.addCommand(promptsCommand)\nprogram.addCommand(batchCommand)\nprogram.addCommand(talkCommand)\nprogram.addCommand(configCommand)\nprogram.addCommand(productsCommand)\n\n// Error handling\nprogram.exitOverride()\n\ntry {\n program.parse(process.argv)\n} catch (error: any) {\n if (error.code === 'commander.missingArgument') {\n console.error(chalk.red(`Error: ${error.message}`))\n process.exit(1)\n } else if (error.code === 'commander.unknownOption') {\n console.error(chalk.red(`Error: ${error.message}`))\n process.exit(1)\n } else if (error.code === 'commander.help') {\n // Help 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\n// Show help if no command provided\nif (!process.argv.slice(2).length) {\n try {\n program.outputHelp()\n } catch (error: any) {\n if (error.code === 'commander.help') {\n // Help was displayed successfully\n process.exit(0)\n } else {\n throw error\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, 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: any) {\n spinner.fail('Authentication failed')\n console.error(chalk.red(error.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,\n orgId: userData.org_id ?? undefined,\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}`))\n } catch (error: any) {\n spinner.fail('Login failed')\n console.error(chalk.red(error.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: any) {\n spinner.fail('Login failed')\n console.error(chalk.red(error.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: any) {\n console.error(chalk.red('Error checking auth status:'), error.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 .action(async () => {\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 spinner.stop()\n\n console.log(chalk.cyan('Current User:'))\n console.log(` User ID: ${user.user_id}`)\n console.log(` Organization: ${user.org_id || 'Personal'}`)\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 } catch (error: any) {\n spinner.fail('Failed to get user information')\n console.error(chalk.red(error.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\n const callbackServer = new CallbackServer()\n const port = await this.findAvailablePort()\n const codePromise = callbackServer.start(port)\n\n // Build OAuth URL - using the dashboard's existing auth pages\n const redirectUri = `http://localhost:${port}/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 class CallbackServer {\n private server: Server | null = null\n private app: Express\n\n constructor() {\n this.app = express()\n }\n\n async start(port: number = 8765): Promise<string> {\n return new Promise((resolve, reject) => {\n this.app.get('/callback', (req, res) => {\n const { code, error } = req.query\n\n if (error) {\n res.send(this.errorHTML(error as string))\n reject(new Error(error as string))\n return\n }\n\n if (!code) {\n res.send(this.errorHTML('No authorization code received'))\n reject(new Error('No authorization code received'))\n return\n }\n\n res.send(this.successHTML())\n resolve(code 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 this.server = this.app.listen(port, () => {\n console.log(`Callback server listening on port ${port}`)\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)\n .then(resolve)\n .catch(reject)\n } else {\n reject(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 `\n <!DOCTYPE html>\n <html>\n <head>\n <title>Authentication Successful</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, #667eea 0%, #764ba2 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 animation: slideUp 0.3s ease-out;\n }\n @keyframes slideUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n .checkmark { \n color: #10b981; \n font-size: 64px;\n margin-bottom: 1rem;\n animation: scaleIn 0.3s ease-out 0.1s both;\n }\n @keyframes scaleIn {\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\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 }\n .progress {\n margin-top: 1.5rem;\n color: #9ca3af;\n font-size: 0.875rem;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <div class=\"checkmark\">✓</div>\n <h1>Authentication Successful!</h1>\n <p>You can close this window and return to your terminal.</p>\n <p class=\"progress\">Closing automatically in 3 seconds...</p>\n <script>\n setTimeout(() => {\n window.close();\n // Fallback if window.close() doesn't work\n document.body.innerHTML = '<div class=\"container\"><h1>You can now close this window</h1></div>';\n }, 3000);\n </script>\n </div>\n </body>\n </html>\n `\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 DashboardAuthResponse {\n apiKey: string\n userId: string\n orgId?: string | null\n}\n\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\nconst isDashboardAuthResponse = (value: unknown): value is DashboardAuthResponse => {\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 return typeof record.user_id === 'string'\n}\n\nexport class ApiKeyManager {\n async exchangeSessionForApiKey(\n authCode: string,\n apiUrl?: string\n ): Promise<{ key: string; userId: string; orgId?: string }> {\n void apiUrl\n\n // For local development, exchange the auth code with the dashboard\n // In production, this would go through the API\n const dashboardUrl = process.env.RUNTYPE_DASHBOARD_URL || 'http://localhost:3001'\n\n // Exchange the auth code for user info and temporary key\n const authResponse = await fetch(`${dashboardUrl}/api/cli/auth?code=${authCode}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n\n if (!authResponse.ok) {\n const error = await authResponse.text()\n throw new Error(`Authentication failed: ${error}`)\n }\n\n const authData = (await authResponse.json()) as unknown\n\n if (!isDashboardAuthResponse(authData)) {\n throw new Error('Invalid authentication response format')\n }\n\n const result: { key: string; userId: string; orgId?: string } = {\n key: authData.apiKey,\n userId: authData.userId,\n }\n\n if (authData.orgId) {\n result.orgId = authData.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}/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","import Conf from 'conf'\nimport crypto from 'crypto'\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\nexport class CredentialStore {\n private config: Conf<StoredCredentials>\n private encryptionKey: string\n\n constructor() {\n // Use a machine-specific encryption key\n this.encryptionKey = this.getMachineKey()\n\n this.config = new Conf<StoredCredentials>({\n projectName: 'runtype-cli',\n projectSuffix: '',\n configName: 'credentials',\n encryptionKey: this.encryptionKey,\n cwd: path.join(os.homedir(), '.runtype'),\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 ora from 'ora'\nimport { CredentialStore } from '../auth/credential-store'\nimport { getApiUrl } from '../config/env'\n\ninterface ListFlowsOptions {\n json?: boolean\n}\n\ninterface FlowSummary {\n id: string\n name: string\n description?: string | null\n}\n\ninterface PaginationInfo {\n total?: number\n total_count?: number\n [key: string]: unknown\n}\n\ninterface FlowListResponse {\n data?: FlowSummary[]\n pagination?: PaginationInfo\n}\n\nconst isFlowSummary = (value: unknown): value is FlowSummary => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n return typeof record.id === 'string' && typeof record.name === 'string'\n}\n\nconst isFlowListResponse = (value: unknown): value is FlowListResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n if (record.data !== undefined) {\n if (!Array.isArray(record.data) || !record.data.every(isFlowSummary)) {\n return false\n }\n }\n\n if (\n record.pagination !== undefined &&\n (typeof record.pagination !== 'object' || record.pagination === null)\n ) {\n return false\n }\n\n return true\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: ListFlowsOptions) => {\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\n\n const spinner = ora('Fetching flows...').start()\n\n try {\n const response = await fetch(`${getApiUrl()}/flows`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n throw new Error(`Failed to fetch flows: ${response.statusText}`)\n }\n\n const data = (await response.json()) as unknown\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2))\n } else {\n if (!isFlowListResponse(data)) {\n throw new Error('Unexpected flows response format')\n }\n\n console.log(chalk.cyan('Your Flows:'))\n\n const flowsArray = data.data ?? []\n\n if (flowsArray.length > 0) {\n flowsArray.forEach((flow) => {\n console.log(` ${chalk.green(flow.id)} - ${flow.name}`)\n if (flow.description) {\n console.log(` ${chalk.gray(flow.description)}`)\n }\n })\n\n const total = data.pagination?.total_count ?? data.pagination?.total\n if (typeof total === 'number') {\n console.log(chalk.dim(`\\n Total: ${total} flows`))\n }\n } else {\n console.log(chalk.gray(' No flows found'))\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('run <id>')\n .description('Execute a flow')\n .option('-r, --record <id>', 'Record ID to run with')\n .option('--stream', 'Stream the response', true)\n .action(async (flowId, options) => {\n void options\n\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\n\n console.log(chalk.cyan(`Running flow ${flowId}...`))\n console.log(chalk.gray('Implementation coming soon'))\n })\n\nflowsCommand\n .command('create')\n .description('Create a new flow')\n .action(async () => {\n console.log(chalk.cyan('Interactive flow creation coming soon'))\n })\n\nflowsCommand\n .command('delete <id>')\n .description('Delete a flow')\n .action(async (flowId) => {\n console.log(chalk.cyan(`Deleting flow ${flowId}...`))\n console.log(chalk.gray('Implementation coming soon'))\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { CredentialStore } from '../auth/credential-store'\nimport { getApiUrl, getApiVersion } from '../config/env'\n\ninterface ListRecordsOptions {\n type?: string\n limit: string\n json?: boolean\n}\n\ninterface RecordSummary {\n id: string\n name: string\n type: string\n metadata?: Record<string, unknown> | null\n}\n\ninterface RecordListResponse {\n data?: RecordSummary[]\n pagination?: { total_count?: number; total?: number; [key: string]: unknown }\n}\n\ninterface CreateRecordOptions {\n name: string\n type: string\n metadata?: string\n}\n\ninterface RecordCreateResponse {\n id: string\n name: string\n type: string\n}\n\ninterface ExportOptions {\n format: string\n}\n\nconst isRecordSummary = (value: unknown): value is RecordSummary => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n return (\n typeof record.id === 'string' &&\n typeof record.name === 'string' &&\n typeof record.type === 'string'\n )\n}\n\nconst isRecordListResponse = (value: unknown): value is RecordListResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n if (record.data !== undefined) {\n if (!Array.isArray(record.data) || !record.data.every(isRecordSummary)) {\n return false\n }\n }\n\n if (\n record.pagination !== undefined &&\n (typeof record.pagination !== 'object' || record.pagination === null)\n ) {\n return false\n }\n\n return true\n}\n\nconst isRecordCreateResponse = (value: unknown): value is RecordCreateResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n return (\n typeof record.id === 'string' &&\n typeof record.name === 'string' &&\n typeof record.type === 'string'\n )\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: ListRecordsOptions) => {\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\n\n const spinner = ora('Fetching records...').start()\n\n try {\n const params = new URLSearchParams()\n if (options.type) params.append('type', options.type)\n params.append('limit', options.limit)\n\n const response = await fetch(`${getApiUrl()}/${getApiVersion()}/records?${params}`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n throw new Error(`Failed to fetch records: ${response.statusText}`)\n }\n\n const data = (await response.json()) as unknown\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2))\n } else {\n if (!isRecordListResponse(data)) {\n throw new Error('Unexpected records response format')\n }\n\n console.log(chalk.cyan('Your Records:'))\n\n const recordsArray = data.data ?? []\n\n if (recordsArray.length > 0) {\n recordsArray.forEach((record) => {\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 = data.pagination?.total_count ?? data.pagination?.total\n if (typeof total === 'number') {\n console.log(chalk.dim(`\\n Total: ${total} records`))\n }\n } else {\n console.log(chalk.gray(' No records found'))\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('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 .action(async (options: CreateRecordOptions) => {\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\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 response = await fetch(`${getApiUrl()}/${getApiVersion()}/records`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n name: options.name,\n type: options.type,\n metadata,\n }),\n })\n\n if (!response.ok) {\n const error = await response.text()\n throw new Error(`Failed to create record: ${error}`)\n }\n\n const data = (await response.json()) as unknown\n\n if (!isRecordCreateResponse(data)) {\n throw new Error('Unexpected create record response format')\n }\n\n spinner.succeed('Record created successfully!')\n\n console.log(chalk.green(`Record ID: ${data.id}`))\n console.log(chalk.gray(`Name: ${data.name}`))\n console.log(chalk.gray(`Type: ${data.type}`))\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('bulk')\n .description('Bulk operations on records')\n .action(async () => {\n console.log(chalk.cyan('Bulk operations coming soon'))\n })\n\nrecordsCommand\n .command('export')\n .description('Export records')\n .option('--format <format>', 'Export format (json, csv)', 'json')\n .action(async (options: ExportOptions) => {\n console.log(chalk.cyan(`Exporting records as ${options.format}...`))\n console.log(chalk.gray('Implementation coming soon'))\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { CredentialStore } from '../auth/credential-store'\nimport { getApiUrl } from '../config/env'\n\ninterface ListPromptsOptions {\n json?: boolean\n}\n\ninterface PromptSummary {\n id: string\n name: string\n description?: string | null\n model?: string | null\n}\n\ninterface PromptListResponse {\n data?: PromptSummary[]\n pagination?: Record<string, unknown>\n}\n\nconst isPromptSummary = (value: unknown): value is PromptSummary => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n return typeof record.id === 'string' && typeof record.name === 'string'\n}\n\nconst isPromptListResponse = (value: unknown): value is PromptListResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n if (record.data !== undefined) {\n if (!Array.isArray(record.data) || !record.data.every(isPromptSummary)) {\n return false\n }\n }\n\n if (\n record.pagination !== undefined &&\n (typeof record.pagination !== 'object' || record.pagination === null)\n ) {\n return false\n }\n\n return true\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: ListPromptsOptions) => {\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\n\n const spinner = ora('Fetching prompts...').start()\n\n try {\n const response = await fetch(`${getApiUrl()}/prompts`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n throw new Error(`Failed to fetch prompts: ${response.statusText}`)\n }\n\n const data = (await response.json()) as unknown\n spinner.stop()\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2))\n } else {\n if (!isPromptListResponse(data)) {\n throw new Error('Unexpected prompts response format')\n }\n\n console.log(chalk.cyan('Your Prompts:'))\n\n const promptsArray = data.data ?? []\n\n if (promptsArray.length > 0) {\n promptsArray.forEach((prompt) => {\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 = (data.pagination as { total_count?: number } | undefined)?.total_count\n if (typeof total === 'number') {\n console.log(chalk.dim(`\\n Total: ${total} prompts`))\n }\n } else {\n console.log(chalk.gray(' No prompts found'))\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('test <id>')\n .description('Test a prompt')\n .option('-i, --input <text>', 'Input text for the prompt')\n .action(async (promptId, options) => {\n void options\n\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\n\n console.log(chalk.cyan(`Testing prompt ${promptId}...`))\n console.log(chalk.gray('Implementation coming soon'))\n })\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { CredentialStore } from '../auth/credential-store'\nimport { getApiUrl, getApiVersion } from '../config/env'\n\ninterface BatchSubmitOptions {\n flow: string\n records: string\n}\n\ninterface BatchStatusOptions {\n watch?: boolean\n}\n\ninterface BatchStatusResponse {\n status: string\n processed_count: number\n total_count: number\n failed_count: number\n}\n\nconst isBatchStatusResponse = (value: unknown): value is BatchStatusResponse => {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n return (\n typeof record.status === 'string' &&\n typeof record.processed_count === 'number' &&\n typeof record.total_count === 'number' &&\n typeof record.failed_count === 'number'\n )\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 .action(async (options: BatchSubmitOptions) => {\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\n\n console.log(chalk.cyan('Submitting batch job...'))\n console.log(chalk.gray(`Flow: ${options.flow}`))\n console.log(chalk.gray(`Records file: ${options.records}`))\n console.log(chalk.gray('Implementation coming soon'))\n })\n\nbatchCommand\n .command('status <id>')\n .description('Check batch job status')\n .option('--watch', 'Watch for updates')\n .action(async (batchId: string, options: BatchStatusOptions) => {\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\n\n const spinner = ora('Fetching batch status...').start()\n\n try {\n const response = await fetch(`${getApiUrl()}/${getApiVersion()}/batch/status/${batchId}`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n throw new Error(`Failed to fetch batch status: ${response.statusText}`)\n }\n\n const data = (await response.json()) as unknown\n\n if (!isBatchStatusResponse(data)) {\n throw new Error('Invalid batch status response received from the API')\n }\n spinner.stop()\n\n console.log(chalk.cyan(`Batch Job: ${batchId}`))\n console.log(` Status: ${chalk.green(data.status)}`)\n console.log(` Progress: ${data.processed_count}/${data.total_count}`)\n\n if (data.failed_count > 0) {\n console.log(` Failed: ${chalk.red(data.failed_count)}`)\n }\n\n if (options.watch && data.status === 'processing') {\n console.log(chalk.gray('\\nWatching for updates... (Ctrl+C to stop)'))\n // Implementation for watching would go here\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 store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\n\n const spinner = ora('Cancelling batch job...').start()\n\n try {\n const response = await fetch(`${getApiUrl()}/${getApiVersion()}/batch/cancel/${batchId}`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n throw new Error(`Failed to cancel batch: ${response.statusText}`)\n }\n\n spinner.succeed('Batch job cancelled successfully')\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 { CredentialStore } from '../auth/credential-store'\nimport { getApiUrl, getDefaultModel, getDefaultTemperature } from '../config/env'\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\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated. Please run: runtype auth login'))\n process.exit(1)\n }\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: any) {\n console.error(chalk.red(`Failed to load session: ${error.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: any) {\n console.error(chalk.red(`Failed to save: ${error.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: any) {\n console.error(chalk.red(`Failed to load: ${error.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: any) {\n console.error(chalk.red(`Failed to export: ${error.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 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 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\n const response = await fetch(`${apiUrl}/dispatch`, {\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: any) {\n // Clear thinking message\n process.stdout.write('\\x1B[1A\\x1B[2K')\n console.error(chalk.red(`Error: ${error.message}`))\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 output_format: 'text'\n output_variable: string\n response_format: 'text'\n}\n\nexport interface DispatchFlowStep {\n id: string\n type: 'prompt'\n name: string\n order: number\n enabled: boolean\n config: PromptStepConfig\n prompt_id: string | null\n context_template_id: string | null\n item_type: 'prompt'\n prompt: null\n context_template: null\n}\n\nexport interface DispatchFlow {\n name: string\n description: string\n mode: 'standalone' | 'virtual' | 'create' | 'existing'\n steps: DispatchFlowStep[]\n}\n\nexport interface DispatchOptions {\n stream_response: boolean\n record_mode: 'virtual' | 'create' | 'existing'\n flow_mode: '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 mode: 'standalone',\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 output_format: 'text',\n output_variable: 'chat_result',\n response_format: 'text',\n },\n prompt_id: null,\n context_template_id: null,\n item_type: 'prompt',\n prompt: null,\n context_template: null,\n },\n ],\n },\n options: {\n stream_response: true,\n record_mode: 'virtual',\n flow_mode: '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 { CredentialStore } from '../auth/credential-store'\nimport { getApiUrl, getApiVersion, getDashboardUrl } from '../config/env'\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(`\\nName: ${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 .requiredOption('--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 spinner = ora('Validating URL...').start()\n\n try {\n // Step 1: Validate URL (public endpoint)\n const result = await validateUrl(options.from, options.apiUrl)\n\n if (!result.valid) {\n spinner.fail('Validation failed')\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'error',\n error: result.error,\n code: result.code,\n },\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 2: Display agent card\n displayAgentCard(result.agentCard)\n\n // Step 3: Check authentication\n const store = new CredentialStore()\n const apiKey = await store.getApiKey()\n\n if (!apiKey) {\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'unauthenticated',\n agentCard: result.agentCard,\n message: 'Authentication required to create product',\n },\n null,\n 2\n )\n )\n } else {\n console.log(chalk.yellow('\\nAuthentication required to create product.'))\n console.log('Run: runtype auth login')\n console.log(`\\nThen retry: runtype products init --from ${options.from}`)\n }\n process.exit(0) // Not an error - user guided\n }\n\n // Step 4: Handle browser flow\n if (options.open) {\n const dashboardUrl = getDashboardUrl()\n const encodedUrl = encodeURIComponent(options.from)\n const targetUrl = `${dashboardUrl}/now?from=${encodedUrl}&cli=true`\n\n if (options.json) {\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 5: 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 options.from,\n options.name,\n options.apiUrl\n )\n\n if (!createResult.success) {\n createSpinner.fail('Failed to create product')\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'error',\n error: createResult.error,\n code: createResult.code,\n },\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 options.json || false\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"],"mappings":"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","names":["import_commander","import_chalk","express","config","crypto","open","import_crypto","Conf","path","os","crypto","ora","chalk","spinner","import_commander","import_chalk","import_ora","chalk","ora","import_commander","import_chalk","import_ora","chalk","ora","import_commander","import_chalk","import_ora","chalk","ora","import_commander","import_chalk","import_ora","chalk","ora","import_commander","import_chalk","import_path","import_os","uuidv4","path","os","fs","import_chalk","chalk","chalk","readline","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","chalk"]}
|
|
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-run-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 { 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 { CredentialStore } from './auth/credential-store'\n\n// Load environment variables\nconfig()\n\nconst program = new Command()\n\nprogram\n .name('runtype')\n .description('CLI for Runtype AI Platform')\n .version('0.1.0')\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)\n\n// Error handling\nprogram.exitOverride()\n\ntry {\n // If no arguments, check if first-time user and guide them\n if (!process.argv.slice(2).length) {\n handleNoCommand()\n } else {\n program.parse(process.argv)\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') {\n // Help 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 { code, 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 (!code) {\n res.send(this.errorHTML('No authorization code received'))\n this.codeReject(new Error('No authorization code received'))\n return\n }\n\n res.send(this.successHTML())\n this.codeResolve(code 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 `\n <!DOCTYPE html>\n <html>\n <head>\n <title>Authentication Successful</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, #667eea 0%, #764ba2 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 animation: slideUp 0.3s ease-out;\n }\n @keyframes slideUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n .checkmark { \n color: #10b981; \n font-size: 64px;\n margin-bottom: 1rem;\n animation: scaleIn 0.3s ease-out 0.1s both;\n }\n @keyframes scaleIn {\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\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 }\n .progress {\n margin-top: 1.5rem;\n color: #9ca3af;\n font-size: 0.875rem;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <div class=\"checkmark\">✓</div>\n <h1>Authentication Successful!</h1>\n <p>You can close this window and return to your terminal.</p>\n <p class=\"progress\">Closing automatically in 3 seconds...</p>\n <script>\n setTimeout(() => {\n window.close();\n // Fallback if window.close() doesn't work\n document.body.innerHTML = '<div class=\"container\"><h1>You can now close this window</h1></div>';\n }, 3000);\n </script>\n </div>\n </body>\n </html>\n `\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 DashboardAuthResponse {\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 isDashboardAuthResponse = (value: unknown): value is DashboardAuthResponse => {\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 async exchangeSessionForApiKey(\n authCode: string,\n apiUrl?: string\n ): Promise<{ key: string; userId: string; orgId?: string }> {\n void apiUrl\n\n // For local development, exchange the auth code with the dashboard\n // In production, this would go through the API\n const dashboardUrl = process.env.RUNTYPE_DASHBOARD_URL || 'http://localhost:3001'\n\n // Exchange the auth code for user info and temporary key\n const authResponse = await fetch(`${dashboardUrl}/api/cli/auth?code=${authCode}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n\n if (!authResponse.ok) {\n const error = await authResponse.text()\n throw new Error(`Authentication failed: ${error}`)\n }\n\n const authData = (await authResponse.json()) as unknown\n\n if (!isDashboardAuthResponse(authData)) {\n throw new Error('Invalid authentication response format')\n }\n\n const result: { key: string; userId: string; orgId?: string } = {\n key: authData.apiKey,\n userId: authData.userId,\n }\n\n if (authData.orgId) {\n result.orgId = authData.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, 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\n const response = await fetch(`${apiUrl}/dispatch`, {\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 console.error(chalk.red(`Error: ${message}`))\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 { runTaskCommand } from './agents-run-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(runTaskCommand)\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 { RuntypeClient } from '@runtypelabs/sdk'\nimport { ensureAuth } from '../lib/ensure-auth'\nimport { getApiUrl } from '../config/env'\nimport { printJson } from '../lib/output'\n\n// ─── Local state file schema ────────────────────────────────────────\n\ninterface LocalTaskState {\n agentId: string\n taskName: string\n message: string\n status: 'running' | 'complete' | 'paused' | 'budget_exceeded' | 'max_sessions'\n sessionCount: number\n totalCost: number\n context: Record<string, unknown>\n lastOutput: string\n sessions: Array<{\n index: number\n cost: number\n stopReason: string\n outputPreview: string\n at: string\n }>\n createdAt: string\n updatedAt: string\n}\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): LocalTaskState | null {\n try {\n const raw = fs.readFileSync(filePath, 'utf-8')\n return JSON.parse(raw) as LocalTaskState\n } catch {\n return null\n }\n}\n\nfunction saveState(filePath: string, state: LocalTaskState): void {\n const dir = path.dirname(filePath)\n fs.mkdirSync(dir, { recursive: true })\n state.updatedAt = new Date().toISOString()\n fs.writeFileSync(filePath, JSON.stringify(state, null, 2))\n}\n\n// ─── Command ────────────────────────────────────────────────────────\n\nexport const runTaskCommand = new Command('run-task')\n .description('Run a long-task agent with local state persistence')\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('--name <name>', 'Task name (used for state file, defaults to agent ID)')\n .option('--state-dir <path>', 'Directory for state files (default: .runtype/tasks/)')\n .option('--resume', 'Resume from existing local state')\n .option('--track-progress', 'Also sync progress to the Runtype dashboard')\n .option('--debug', 'Show debug output from each session')\n .option('--json', 'Output final result as JSON')\n .action(\n async (\n agent: string,\n options: {\n message: string\n maxSessions: string\n maxCost?: string\n name?: string\n stateDir?: string\n resume?: boolean\n trackProgress?: boolean\n debug?: boolean\n json?: boolean\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 // Resolve agent — accept ID or name\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.fail(`No agent found with name \"${agent}\"`)\n console.log(chalk.gray(` Create one with: runtype agents create -n \"${agent}\"`))\n process.exit(1)\n }\n } catch (error) {\n spinner.fail('Failed to look up agent')\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(message))\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 // Load or initialize local state\n let localState: LocalTaskState\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 localState = existing\n localState.status = 'running'\n priorSessionCount = localState.sessionCount\n priorCost = localState.totalCost\n console.log(\n chalk.cyan(\n `Resuming from session ${priorSessionCount} ($${priorCost.toFixed(4)} spent)`\n )\n )\n } else {\n localState = {\n agentId,\n taskName,\n message: options.message,\n status: 'running',\n sessionCount: 0,\n totalCost: 0,\n context: {},\n lastOutput: '',\n sessions: [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n }\n\n // Handle Ctrl+C — save state as paused\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 localState.status = 'paused'\n saveState(filePath, localState)\n console.log(chalk.green(`State saved to ${filePath}`))\n console.log(\n chalk.gray(\n ` Resume with: runtype agents run-task ${agent} -m \"${options.message}\" --resume${options.name ? ` --name ${options.name}` : ''}`\n )\n )\n process.exit(0)\n }\n process.on('SIGINT', onSigint)\n\n // Print banner\n const remainingSessions = maxSessions - priorSessionCount\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)}` : ''}`\n )\n )\n console.log(chalk.gray(` State: ${filePath}\\n`))\n\n try {\n const result = await client.agents.runTask(agentId, {\n buildMessages: (state) => {\n const merged = { ...localState.context, ...state.context }\n const isFirstSession = state.sessionCount === 1\n const totalSession = priorSessionCount + state.sessionCount\n\n if (isFirstSession && !options.resume) {\n return [{ role: 'user' as const, content: options.message }]\n }\n\n const progress = merged.progressNotes || merged.progress\n const progressStr = progress\n ? typeof progress === 'string'\n ? progress\n : JSON.stringify(progress)\n : 'No structured progress captured yet'\n\n const resumeCtx = options.resume && isFirstSession\n ? `\\n\\nResuming from session ${priorSessionCount}. Previous context: ${JSON.stringify(localState.context)}`\n : ''\n\n return [\n {\n role: 'user' as const,\n content: `${options.message}${resumeCtx}\\n\\nProgress so far: ${progressStr}\\nSession ${totalSession} of ${maxSessions}.`,\n },\n ]\n },\n maxSessions: remainingSessions,\n maxCost,\n trackProgress: options.trackProgress ? taskName : undefined,\n debugMode: options.debug,\n onSession: (session) => {\n const sessionCost = session.sessionCount > 1\n ? session.totalCost - localState.sessions\n .slice(-session.sessionCount + 1)\n .reduce((s, e) => s + e.cost, 0)\n : session.totalCost\n const thisCost = sessionCost > 0 ? sessionCost : session.totalCost / session.sessionCount\n\n localState.sessionCount = priorSessionCount + session.sessionCount\n localState.totalCost = priorCost + session.totalCost\n Object.assign(localState.context, session.context)\n localState.lastOutput = session.lastOutput\n localState.status = session.status\n\n localState.sessions.push({\n index: localState.sessionCount,\n cost: thisCost,\n stopReason: session.lastStopReason,\n outputPreview: session.lastOutput.slice(0, 200),\n at: new Date().toISOString(),\n })\n\n saveState(filePath, localState)\n\n // Print progress\n const total = localState.sessionCount\n const costStr = chalk.yellow(`$${localState.totalCost.toFixed(4)}`)\n const reasonColor =\n session.lastStopReason === 'complete' ? chalk.green : chalk.gray\n console.log(\n ` ${chalk.dim(`[${total}/${maxSessions}]`)} ${reasonColor(session.lastStopReason)} | total: ${costStr}`\n )\n if (session.lastOutput) {\n const preview = session.lastOutput.slice(0, 120).replace(/\\n/g, ' ')\n console.log(\n ` ${chalk.dim(preview)}${session.lastOutput.length > 120 ? '...' : ''}`\n )\n }\n },\n })\n\n // Final update\n localState.status = result.status\n localState.totalCost = priorCost + result.totalCost\n Object.assign(localState.context, result.context)\n saveState(filePath, localState)\n\n process.removeListener('SIGINT', onSigint)\n\n // 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(localState.status)}`)\n console.log(`Sessions: ${localState.sessionCount}`)\n console.log(`Total cost: ${chalk.yellow(`$${localState.totalCost.toFixed(4)}`)}`)\n console.log(`State: ${chalk.gray(filePath)}`)\n\n if (localState.status === 'paused' || localState.status === 'max_sessions') {\n console.log(\n chalk.gray(\n `\\nResume: runtype agents run-task ${agent} -m \"${options.message}\" --resume${options.name ? ` --name ${options.name}` : ''}`\n )\n )\n }\n\n if (options.json) {\n console.log()\n printJson(localState)\n }\n } catch (error) {\n localState.status = 'paused'\n saveState(filePath, localState)\n process.removeListener('SIGINT', onSigint)\n\n const message = error instanceof Error ? error.message : 'Unknown error'\n console.error(chalk.red(`\\nTask failed: ${message}`))\n console.log(chalk.gray(`State saved to ${filePath} — resume with --resume`))\n process.exit(1)\n }\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","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","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","ora","chalk","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"]}
|