@runtypelabs/cli 0.1.1 → 0.1.4

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 CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Command-line interface for the Runtype AI platform.
4
4
 
5
+ > Official CLI tool published on npm
6
+
5
7
  ## Installation
6
8
 
7
9
  ```bash
package/dist/index.js CHANGED
@@ -27,7 +27,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  var import_commander8 = require("commander");
28
28
  var import_chalk9 = __toESM(require("chalk"));
29
29
  var import_dotenv = require("dotenv");
30
- var import_shared = require("@travrse/shared");
31
30
 
32
31
  // src/commands/auth.ts
33
32
  var import_commander = require("commander");
@@ -1588,7 +1587,7 @@ configCommand.command("path").description("Show configuration file path").action
1588
1587
  // src/index.ts
1589
1588
  (0, import_dotenv.config)();
1590
1589
  var program = new import_commander8.Command();
1591
- program.name(import_shared.BRAND.cliCommand).description(`CLI for ${import_shared.BRAND.name} AI Platform`).version("0.1.0").option("-v, --verbose", "Enable verbose output").option("--api-url <url>", "Override API URL").option("--json", "Output in JSON format");
1590
+ program.name("runtype").description("CLI for Runtype AI Platform").version("0.1.0").option("-v, --verbose", "Enable verbose output").option("--api-url <url>", "Override API URL").option("--json", "Output in JSON format");
1592
1591
  program.addCommand(authCommand);
1593
1592
  program.addCommand(flowsCommand);
1594
1593
  program.addCommand(recordsCommand);
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"],"sourcesContent":["import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { config } from 'dotenv'\nimport { BRAND } from '@travrse/shared'\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'\n\n// Load environment variables\nconfig()\n\nconst program = new Command()\n\nprogram\n .name(BRAND.cliCommand)\n .description(`CLI for ${BRAND.name} 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)\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}","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')\n .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 \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(\n options.apiKey,\n options.apiUrl\n )\n \n if (!isValid) {\n spinner.fail('Invalid API key')\n process.exit(1)\n }\n \n const userData = await apiKeyManager.getCurrentUser(\n options.apiKey,\n options.apiUrl\n )\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 \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(`API Key: ${credentials.apiKey ? credentials.apiKey.substring(0, 12) + '...' : 'missing'}`)\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(\n credentials.apiKey,\n credentials.apiUrl\n )\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 })","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\n .createHash('sha256')\n .update(codeVerifier)\n .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}","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).then(resolve).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}","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://dashboard.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}","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}","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}","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 (record.pagination !== undefined && (typeof record.pagination !== 'object' || record.pagination === null)) {\n return false\n }\n\n return true\n}\n\nexport const flowsCommand = new Command('flows')\n .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 })","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 (record.pagination !== undefined && (typeof record.pagination !== 'object' || record.pagination === null)) {\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')\n .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 })","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 (record.pagination !== undefined && (typeof record.pagination !== 'object' || record.pagination === null)) {\n return false\n }\n\n return true\n}\n\nexport const promptsCommand = new Command('prompts')\n .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 })","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')\n .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 })","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 \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 })","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' : \n 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 = 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.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 = message.role === 'user' ? '**User**' : \n message.role === 'assistant' ? '**Assistant**' : '**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}","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}","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')\n .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 })"],"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","chalk"]}
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"],"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'\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)\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}","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')\n .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 \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(\n options.apiKey,\n options.apiUrl\n )\n \n if (!isValid) {\n spinner.fail('Invalid API key')\n process.exit(1)\n }\n \n const userData = await apiKeyManager.getCurrentUser(\n options.apiKey,\n options.apiUrl\n )\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 \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(`API Key: ${credentials.apiKey ? credentials.apiKey.substring(0, 12) + '...' : 'missing'}`)\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(\n credentials.apiKey,\n credentials.apiUrl\n )\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 })","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\n .createHash('sha256')\n .update(codeVerifier)\n .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}","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).then(resolve).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}","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://dashboard.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}","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}","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}","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 (record.pagination !== undefined && (typeof record.pagination !== 'object' || record.pagination === null)) {\n return false\n }\n\n return true\n}\n\nexport const flowsCommand = new Command('flows')\n .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 })","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 (record.pagination !== undefined && (typeof record.pagination !== 'object' || record.pagination === null)) {\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')\n .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 })","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 (record.pagination !== undefined && (typeof record.pagination !== 'object' || record.pagination === null)) {\n return false\n }\n\n return true\n}\n\nexport const promptsCommand = new Command('prompts')\n .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 })","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')\n .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 })","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 \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 })","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' : \n 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 = 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.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 = message.role === 'user' ? '**User**' : \n message.role === 'assistant' ? '**Assistant**' : '**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}","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}","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')\n .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 })"],"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","chalk"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runtypelabs/cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Command-line interface for Runtype AI platform",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -20,8 +20,7 @@
20
20
  "open": "^10.1.0",
21
21
  "ora": "^8.0.1",
22
22
  "uuid": "^9.0.1",
23
- "@runtypelabs/sdk": "0.1.1",
24
- "@travrse/shared": "1.0.0"
23
+ "@runtypelabs/sdk": "0.2.1"
25
24
  },
26
25
  "devDependencies": {
27
26
  "@types/express": "^4.17.21",