@recursiv/cli 0.1.1 → 0.1.2
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.
|
@@ -5,7 +5,7 @@ import { Command } from "commander";
|
|
|
5
5
|
|
|
6
6
|
// src/commands/init.ts
|
|
7
7
|
import { existsSync as existsSync2 } from "fs";
|
|
8
|
-
import { mkdir } from "fs/promises";
|
|
8
|
+
import { mkdir, rename } from "fs/promises";
|
|
9
9
|
import { resolve } from "path";
|
|
10
10
|
import { execSync } from "child_process";
|
|
11
11
|
import prompts2 from "prompts";
|
|
@@ -167,7 +167,7 @@ async function terminalSignup(baseUrl) {
|
|
|
167
167
|
name: "password",
|
|
168
168
|
message: "Password",
|
|
169
169
|
validate: (v) => {
|
|
170
|
-
if (!v || v.length <
|
|
170
|
+
if (!v || v.length < 12) return "Password must be at least 12 characters";
|
|
171
171
|
if (!/[a-zA-Z]/.test(v) || !/[0-9]/.test(v))
|
|
172
172
|
return "Password must contain both letters and numbers";
|
|
173
173
|
return true;
|
|
@@ -177,10 +177,12 @@ async function terminalSignup(baseUrl) {
|
|
|
177
177
|
);
|
|
178
178
|
let sessionCookie = null;
|
|
179
179
|
let isNewAccount = false;
|
|
180
|
+
const origin = rootUrl || "https://api.recursiv.io";
|
|
181
|
+
const authHeaders = { "Content-Type": "application/json", Origin: origin };
|
|
180
182
|
try {
|
|
181
183
|
const signupRes = await fetch(`${rootUrl}/api/auth/sign-up/email`, {
|
|
182
184
|
method: "POST",
|
|
183
|
-
headers:
|
|
185
|
+
headers: authHeaders,
|
|
184
186
|
body: JSON.stringify({
|
|
185
187
|
email,
|
|
186
188
|
password,
|
|
@@ -194,7 +196,7 @@ async function terminalSignup(baseUrl) {
|
|
|
194
196
|
} else if (signupRes.status === 409 || signupRes.status === 422) {
|
|
195
197
|
const signinRes = await fetch(`${rootUrl}/api/auth/sign-in/email`, {
|
|
196
198
|
method: "POST",
|
|
197
|
-
headers:
|
|
199
|
+
headers: authHeaders,
|
|
198
200
|
body: JSON.stringify({ email, password }),
|
|
199
201
|
redirect: "manual"
|
|
200
202
|
});
|
|
@@ -444,6 +446,10 @@ async function initCommand(nameArg) {
|
|
|
444
446
|
log.step(4, totalSteps, "Creating project");
|
|
445
447
|
await mkdir(projectDir, { recursive: true });
|
|
446
448
|
await cloneTemplate(template, projectDir);
|
|
449
|
+
const nextConfigTs = resolve(projectDir, "next.config.ts");
|
|
450
|
+
if (existsSync2(nextConfigTs)) {
|
|
451
|
+
await rename(nextConfigTs, resolve(projectDir, "next.config.mjs"));
|
|
452
|
+
}
|
|
447
453
|
log.step(5, totalSteps, "Writing config");
|
|
448
454
|
const pm = detectFromUserAgent();
|
|
449
455
|
const config = createConfig({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/create-recursiv-app.ts","../../src/commands/init.ts","../../src/lib/logger.ts","../../src/lib/config.ts","../../src/lib/env.ts","../../src/lib/templates.ts","../../src/lib/auth-flow.ts","../../src/lib/package-manager.ts","../../src/templates/registry.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { initCommand } from '../commands/init.js';\n\nconst program = new Command();\n\nprogram\n .name('create-recursiv-app')\n .description('Create a new Recursiv application')\n .version('0.1.0')\n .argument('[name]', 'project name')\n .action(async (name?: string) => {\n try {\n await initCommand(name);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram.parse();\n","import { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { resolve, basename } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport prompts from 'prompts';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log, banner } from '../lib/logger.js';\nimport { createConfig, writeConfig } from '../lib/config.js';\nimport { writeEnvFile } from '../lib/env.js';\nimport { cloneTemplate } from '../lib/templates.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { detectFromUserAgent, installCommand, runCommand } from '../lib/package-manager.js';\nimport { templates, type Template } from '../templates/registry.js';\nimport { writeFile } from 'node:fs/promises';\n\nexport async function initCommand(nameArg?: string): Promise<void> {\n banner();\n\n const totalSteps = 7;\n\n // 1. Project name\n log.step(1, totalSteps, 'Project setup');\n let projectName: string;\n if (nameArg) {\n projectName = nameArg;\n } else {\n const { name } = await prompts(\n {\n type: 'text',\n name: 'name',\n message: 'Project name',\n initial: 'my-recursiv-app',\n validate: (v: string) => (v.trim() ? true : 'Name is required'),\n },\n { onCancel: () => process.exit(1) }\n );\n projectName = name;\n }\n\n const projectDir = resolve(process.cwd(), projectName);\n\n if (existsSync(projectDir)) {\n log.error(`Directory ${pc.bold(projectName)} already exists`);\n process.exit(1);\n }\n\n // 2. Template selection\n log.step(2, totalSteps, 'Choose a template');\n const templateChoices = templates.map((t) => ({\n title: t.recommended ? `${t.name} ${pc.dim('(recommended)')}` : t.name,\n description: t.description,\n value: t.id,\n }));\n\n const { templateId } = await prompts(\n {\n type: 'select',\n name: 'templateId',\n message: 'Template',\n choices: templateChoices,\n initial: 0,\n },\n { onCancel: () => process.exit(1) }\n );\n\n const template = templates.find((t) => t.id === templateId) as Template;\n\n // 3. API key\n log.step(3, totalSteps, 'Authentication');\n const apiKey = await getOrCreateApiKey('https://api.recursiv.io/api/v1');\n\n // 4. Clone template\n log.step(4, totalSteps, 'Creating project');\n await mkdir(projectDir, { recursive: true });\n await cloneTemplate(template, projectDir);\n\n // 5. Write config files\n log.step(5, totalSteps, 'Writing config');\n const pm = detectFromUserAgent();\n\n const config = createConfig({\n name: projectName,\n template: template.id,\n framework: template.framework,\n port: template.devPort,\n devCommand: runCommand(pm, 'dev'),\n });\n await writeConfig(projectDir, config);\n\n if (apiKey) {\n await writeEnvFile(projectDir, apiKey);\n }\n\n // Write .gitignore if it doesn't exist\n const gitignorePath = resolve(projectDir, '.gitignore');\n if (!existsSync(gitignorePath)) {\n await writeFile(\n gitignorePath,\n ['node_modules', 'dist', '.env', '.env.local', '.next', '.turbo', ''].join('\\n'),\n 'utf-8'\n );\n }\n\n // 6. Install dependencies\n log.step(6, totalSteps, 'Installing dependencies');\n const installSpinner = ora(`Running ${pc.bold(installCommand(pm))}...`).start();\n try {\n execSync(installCommand(pm), {\n cwd: projectDir,\n stdio: 'pipe',\n timeout: 120_000,\n });\n installSpinner.succeed('Dependencies installed');\n } catch {\n installSpinner.warn('Could not install dependencies — run install manually');\n }\n\n // 7. Init git\n log.step(7, totalSteps, 'Initializing git');\n try {\n execSync('git init', { cwd: projectDir, stdio: 'pipe' });\n execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });\n execSync('git commit -m \"Initial commit from create-recursiv-app\"', {\n cwd: projectDir,\n stdio: 'pipe',\n });\n log.success('Git repository initialized');\n } catch {\n log.warn('Could not initialize git repository');\n }\n\n // Done!\n log.blank();\n console.log(pc.bold(pc.green('Your Recursiv app is ready!')));\n log.blank();\n console.log(' Next steps:');\n console.log();\n console.log(` ${pc.dim('$')} cd ${projectName}`);\n if (!apiKey) {\n console.log(` ${pc.dim('$')} ${pc.dim('# Add your API key to .env')}`);\n }\n console.log(` ${pc.dim('$')} ${runCommand(pm, 'dev')}`);\n log.blank();\n console.log(pc.dim('Docs: https://docs.recursiv.io'));\n console.log(pc.dim('Dashboard: https://recursiv.io/dashboard'));\n log.blank();\n}\n","import pc from 'picocolors';\n\nexport const log = {\n info(msg: string) {\n console.log(pc.cyan('info') + ' ' + msg);\n },\n success(msg: string) {\n console.log(pc.green('ok') + ' ' + msg);\n },\n warn(msg: string) {\n console.log(pc.yellow('warn') + ' ' + msg);\n },\n error(msg: string) {\n console.error(pc.red('error') + ' ' + msg);\n },\n step(n: number, total: number, msg: string) {\n console.log(pc.dim(`[${n}/${total}]`) + ' ' + msg);\n },\n blank() {\n console.log();\n },\n};\n\nexport function banner() {\n console.log();\n console.log(pc.bold('Recursiv') + pc.dim(' — build and ship apps with AI'));\n console.log();\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface RecursivConfig {\n version: number;\n project: {\n name: string;\n template: string;\n framework: string;\n };\n api: {\n baseUrl: string;\n };\n dev: {\n port: number;\n command: string;\n };\n}\n\nconst CONFIG_FILE = '.recursiv.json';\n\nexport function configPath(dir: string): string {\n return join(dir, CONFIG_FILE);\n}\n\nexport async function readConfig(dir: string): Promise<RecursivConfig | null> {\n try {\n const raw = await readFile(configPath(dir), 'utf-8');\n return JSON.parse(raw) as RecursivConfig;\n } catch {\n return null;\n }\n}\n\nexport async function writeConfig(dir: string, config: RecursivConfig): Promise<void> {\n await writeFile(configPath(dir), JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function createConfig(opts: {\n name: string;\n template: string;\n framework: string;\n port?: number;\n devCommand?: string;\n}): RecursivConfig {\n return {\n version: 1,\n project: {\n name: opts.name,\n template: opts.template,\n framework: opts.framework,\n },\n api: {\n baseUrl: 'https://api.recursiv.io/api/v1',\n },\n dev: {\n port: opts.port ?? 3000,\n command: opts.devCommand ?? 'npm run dev',\n },\n };\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport async function writeEnvFile(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n const content = [\n '# Recursiv API key',\n `RECURSIV_API_KEY=${apiKey}`,\n '',\n '# Framework-specific public keys (uncomment as needed)',\n `# NEXT_PUBLIC_RECURSIV_API_KEY=${apiKey}`,\n `# VITE_RECURSIV_API_KEY=${apiKey}`,\n '',\n ].join('\\n');\n await writeFile(envPath, content, 'utf-8');\n}\n\nexport async function readApiKeyFromEnv(dir: string): Promise<string | null> {\n try {\n const raw = await readFile(join(dir, '.env'), 'utf-8');\n const match = raw.match(/^RECURSIV_API_KEY=(.+)$/m);\n return match?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function updateApiKeyInEnv(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n let content: string;\n try {\n content = await readFile(envPath, 'utf-8');\n if (content.includes('RECURSIV_API_KEY=')) {\n content = content.replace(/^RECURSIV_API_KEY=.+$/m, `RECURSIV_API_KEY=${apiKey}`);\n } else {\n content += `\\nRECURSIV_API_KEY=${apiKey}\\n`;\n }\n } catch {\n content = `RECURSIV_API_KEY=${apiKey}\\n`;\n }\n await writeFile(envPath, content, 'utf-8');\n}\n","import degit from 'degit';\nimport ora from 'ora';\nimport type { Template } from '../templates/registry.js';\n\nexport async function cloneTemplate(template: Template, dest: string): Promise<void> {\n const spinner = ora(`Cloning ${template.name} template...`).start();\n try {\n const emitter = degit(template.repo, {\n cache: false,\n force: true,\n verbose: false,\n });\n\n await emitter.clone(dest);\n spinner.succeed(`Template cloned successfully`);\n } catch (err) {\n spinner.fail('Failed to clone template');\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Could not clone template from ${template.repo}.\\n` +\n `Make sure you have internet access and the repo exists.\\n` +\n `Details: ${message}`\n );\n }\n}\n","import prompts from 'prompts';\nimport pc from 'picocolors';\nimport { log } from './logger.js';\n\nconst API_KEY_PATTERN = /^sk_(live|test)_[a-zA-Z0-9]{20,}$/;\nconst DASHBOARD_URL = 'https://recursiv.io/dashboard/api-keys';\n\nconst DEFAULT_SCOPES = [\n 'posts:read',\n 'posts:write',\n 'chat:read',\n 'chat:write',\n 'agents:read',\n 'agents:write',\n 'projects:read',\n 'projects:write',\n 'communities:read',\n 'communities:write',\n 'users:read',\n];\n\nexport function isValidKeyFormat(key: string): boolean {\n return API_KEY_PATTERN.test(key);\n}\n\nexport async function validateApiKey(apiKey: string, baseUrl: string): Promise<boolean> {\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Terminal signup flow — create a Recursiv account and API key without a browser.\n *\n * Flow:\n * 1. Prompt for email + password\n * 2. Try signup (or signin if account exists)\n * 3. Use session cookie to create an API key via REST endpoint\n * 4. Return the API key string\n */\nexport async function terminalSignup(baseUrl: string): Promise<string | null> {\n // baseUrl is like https://recursiv.io/api/v1 — we need the root for auth endpoints\n const rootUrl = baseUrl.replace(/\\/api\\/v1\\/?$/, '');\n\n console.log();\n console.log(pc.bold('Create a free Recursiv account'));\n console.log(pc.dim('Free tier: 1,000 API calls/day, 1 agent, 3 projects'));\n console.log();\n\n const { email } = await prompts(\n {\n type: 'text',\n name: 'email',\n message: 'Email',\n validate: (v: string) => {\n if (!v || !v.includes('@')) return 'Valid email required';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n const { password } = await prompts(\n {\n type: 'password',\n name: 'password',\n message: 'Password',\n validate: (v: string) => {\n if (!v || v.length < 8) return 'Password must be at least 8 characters';\n if (!/[a-zA-Z]/.test(v) || !/[0-9]/.test(v))\n return 'Password must contain both letters and numbers';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n // Try signup first\n let sessionCookie: string | null = null;\n let isNewAccount = false;\n\n try {\n const signupRes = await fetch(`${rootUrl}/api/auth/sign-up/email`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email,\n password,\n name: email.split('@')[0],\n }),\n redirect: 'manual',\n });\n\n if (signupRes.ok || signupRes.status === 302) {\n sessionCookie = extractSessionCookie(signupRes);\n isNewAccount = true;\n } else if (signupRes.status === 409 || signupRes.status === 422) {\n // Account already exists — try signing in\n const signinRes = await fetch(`${rootUrl}/api/auth/sign-in/email`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email, password }),\n redirect: 'manual',\n });\n\n if (signinRes.ok || signinRes.status === 302) {\n sessionCookie = extractSessionCookie(signinRes);\n } else {\n const errBody = await signinRes.text().catch(() => '');\n log.error(`Login failed (${signinRes.status}): ${errBody || 'Invalid credentials'}`);\n return null;\n }\n } else {\n const errBody = await signupRes.text().catch(() => '');\n log.error(`Signup failed (${signupRes.status}): ${errBody || 'Unknown error'}`);\n return null;\n }\n } catch (err) {\n log.error(\n `Could not reach ${rootUrl} — ${err instanceof Error ? err.message : 'network error'}`,\n );\n log.info(`You can create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n if (!sessionCookie) {\n log.error('No session returned from server');\n log.info(`Create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n if (isNewAccount) {\n log.success('Account created');\n } else {\n log.success('Signed in');\n }\n\n // Create an API key using the session\n try {\n const keyRes = await fetch(`${baseUrl}/api-keys`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Cookie: sessionCookie,\n },\n body: JSON.stringify({\n name: 'CLI (auto-created)',\n scopes: DEFAULT_SCOPES,\n }),\n });\n\n if (!keyRes.ok) {\n const errBody = await keyRes.text().catch(() => '');\n log.error(`Failed to create API key (${keyRes.status}): ${errBody}`);\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n const { data } = (await keyRes.json()) as { data: { key: string } };\n log.success(`API key created (free tier: 1,000 calls/day)`);\n return data.key;\n } catch (err) {\n log.error(\n `Failed to create API key: ${err instanceof Error ? err.message : 'unknown error'}`,\n );\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n}\n\n/**\n * Extract session cookie from a Better Auth response.\n * Better Auth sets cookies via set-cookie header.\n */\nfunction extractSessionCookie(res: Response): string | null {\n // In Node.js, getSetCookie() returns individual cookie strings\n const setCookieHeaders =\n 'getSetCookie' in res.headers\n ? (res.headers as { getSetCookie(): string[] }).getSetCookie()\n : [];\n\n // Fall back to raw header if getSetCookie not available\n if (setCookieHeaders.length === 0) {\n const raw = res.headers.get('set-cookie');\n if (raw) {\n // Multiple cookies may be comma-separated (though non-standard)\n return raw\n .split(',')\n .map((c) => c.split(';')[0].trim())\n .join('; ');\n }\n return null;\n }\n\n // Extract cookie name=value pairs (strip attributes)\n return setCookieHeaders.map((c) => c.split(';')[0].trim()).join('; ');\n}\n\nexport async function promptApiKey(): Promise<string | null> {\n console.log(\n pc.dim(\n `Get your API key from ${pc.underline(DASHBOARD_URL)}\\n` +\n `Keys start with sk_live_ or sk_test_`,\n ),\n );\n console.log();\n\n const { apiKey } = await prompts(\n {\n type: 'text',\n name: 'apiKey',\n message: 'API key (or press Enter to skip)',\n validate: (value: string) => {\n if (!value) return true; // allow skip\n if (!isValidKeyFormat(value)) {\n return 'Invalid key format. Keys start with sk_live_ or sk_test_';\n }\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (!apiKey) {\n log.warn('No API key provided — you can add one later in .env');\n return null;\n }\n\n return apiKey;\n}\n\nexport async function promptAndValidateApiKey(baseUrl: string): Promise<string | null> {\n const apiKey = await promptApiKey();\n if (!apiKey) return null;\n\n const valid = await validateApiKey(apiKey, baseUrl);\n if (!valid) {\n log.warn('Could not validate API key (server unreachable or invalid key)');\n log.info('Key saved to .env — you can update it later');\n } else {\n log.success('API key validated');\n }\n\n return apiKey;\n}\n\n/**\n * Get an API key — either from env, by prompting for an existing key,\n * or by creating a new account via terminal signup.\n */\nexport async function getOrCreateApiKey(baseUrl: string): Promise<string | null> {\n console.log();\n\n const { method } = await prompts(\n {\n type: 'select',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n title: 'Create a free account',\n description: 'Sign up with email + password (no browser needed)',\n value: 'signup',\n },\n {\n title: 'Enter an existing API key',\n description: 'Paste a key from your dashboard',\n value: 'paste',\n },\n {\n title: 'Skip for now',\n description: 'Add an API key later in .env',\n value: 'skip',\n },\n ],\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (method === 'signup') {\n return terminalSignup(baseUrl);\n }\n\n if (method === 'paste') {\n return promptAndValidateApiKey(baseUrl);\n }\n\n log.warn('No API key — you can add one later in .env');\n return null;\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function detectPackageManager(dir: string): PackageManager {\n if (existsSync(join(dir, 'bun.lockb')) || existsSync(join(dir, 'bun.lock'))) return 'bun';\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(dir, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nexport function detectFromUserAgent(): PackageManager {\n const ua = process.env.npm_config_user_agent ?? '';\n if (ua.startsWith('bun')) return 'bun';\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n return 'npm';\n}\n\nexport function installCommand(pm: PackageManager): string {\n return pm === 'yarn' ? 'yarn' : `${pm} install`;\n}\n\nexport function runCommand(pm: PackageManager, script: string): string {\n if (pm === 'npm') return `npm run ${script}`;\n return `${pm} ${script}`;\n}\n","export interface Template {\n id: string;\n name: string;\n description: string;\n repo: string;\n framework: string;\n devCommand: string;\n devPort: number;\n recommended?: boolean;\n}\n\nexport const templates: Template[] = [\n {\n id: 'nextjs',\n name: 'Next.js + Recursiv',\n description: 'Full-stack Next.js app with feeds, chat, and agents',\n repo: 'socialdotdev/template-nextjs',\n framework: 'nextjs',\n devCommand: 'next dev',\n devPort: 3000,\n recommended: true,\n },\n {\n id: 'node',\n name: 'Node.js + Express',\n description: 'Express API server with Recursiv SDK',\n repo: 'socialdotdev/template-node',\n framework: 'express',\n devCommand: 'node --watch src/index.js',\n devPort: 4000,\n },\n {\n id: 'vite',\n name: 'Vite + React',\n description: 'React SPA with social feed components',\n repo: 'socialdotdev/template-vite',\n framework: 'vite',\n devCommand: 'vite',\n devPort: 5173,\n },\n];\n\nexport function getTemplate(id: string): Template | undefined {\n return templates.find((t) => t.id === id);\n}\n\nexport function getDefaultTemplate(): Template {\n return templates.find((t) => t.recommended) ?? templates[0]!;\n}\n"],"mappings":"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","names":["existsSync","prompts","pc","ora","readFile","writeFile","join","pc","pc","join","writeFile","prompts","existsSync","pc","ora"]}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/create-recursiv-app.ts","../../src/commands/init.ts","../../src/lib/logger.ts","../../src/lib/config.ts","../../src/lib/env.ts","../../src/lib/templates.ts","../../src/lib/auth-flow.ts","../../src/lib/package-manager.ts","../../src/templates/registry.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { initCommand } from '../commands/init.js';\n\nconst program = new Command();\n\nprogram\n .name('create-recursiv-app')\n .description('Create a new Recursiv application')\n .version('0.1.0')\n .argument('[name]', 'project name')\n .action(async (name?: string) => {\n try {\n await initCommand(name);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram.parse();\n","import { existsSync } from 'node:fs';\nimport { mkdir, rename } from 'node:fs/promises';\nimport { resolve, basename } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport prompts from 'prompts';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log, banner } from '../lib/logger.js';\nimport { createConfig, writeConfig } from '../lib/config.js';\nimport { writeEnvFile } from '../lib/env.js';\nimport { cloneTemplate } from '../lib/templates.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { detectFromUserAgent, installCommand, runCommand } from '../lib/package-manager.js';\nimport { templates, type Template } from '../templates/registry.js';\nimport { writeFile } from 'node:fs/promises';\n\nexport async function initCommand(nameArg?: string): Promise<void> {\n banner();\n\n const totalSteps = 7;\n\n // 1. Project name\n log.step(1, totalSteps, 'Project setup');\n let projectName: string;\n if (nameArg) {\n projectName = nameArg;\n } else {\n const { name } = await prompts(\n {\n type: 'text',\n name: 'name',\n message: 'Project name',\n initial: 'my-recursiv-app',\n validate: (v: string) => (v.trim() ? true : 'Name is required'),\n },\n { onCancel: () => process.exit(1) }\n );\n projectName = name;\n }\n\n const projectDir = resolve(process.cwd(), projectName);\n\n if (existsSync(projectDir)) {\n log.error(`Directory ${pc.bold(projectName)} already exists`);\n process.exit(1);\n }\n\n // 2. Template selection\n log.step(2, totalSteps, 'Choose a template');\n const templateChoices = templates.map((t) => ({\n title: t.recommended ? `${t.name} ${pc.dim('(recommended)')}` : t.name,\n description: t.description,\n value: t.id,\n }));\n\n const { templateId } = await prompts(\n {\n type: 'select',\n name: 'templateId',\n message: 'Template',\n choices: templateChoices,\n initial: 0,\n },\n { onCancel: () => process.exit(1) }\n );\n\n const template = templates.find((t) => t.id === templateId) as Template;\n\n // 3. API key\n log.step(3, totalSteps, 'Authentication');\n const apiKey = await getOrCreateApiKey('https://api.recursiv.io/api/v1');\n\n // 4. Clone template\n log.step(4, totalSteps, 'Creating project');\n await mkdir(projectDir, { recursive: true });\n await cloneTemplate(template, projectDir);\n\n // Fix: next.config.ts not supported by older Next.js — rename to .mjs\n const nextConfigTs = resolve(projectDir, 'next.config.ts');\n if (existsSync(nextConfigTs)) {\n await rename(nextConfigTs, resolve(projectDir, 'next.config.mjs'));\n }\n\n // 5. Write config files\n log.step(5, totalSteps, 'Writing config');\n const pm = detectFromUserAgent();\n\n const config = createConfig({\n name: projectName,\n template: template.id,\n framework: template.framework,\n port: template.devPort,\n devCommand: runCommand(pm, 'dev'),\n });\n await writeConfig(projectDir, config);\n\n if (apiKey) {\n await writeEnvFile(projectDir, apiKey);\n }\n\n // Write .gitignore if it doesn't exist\n const gitignorePath = resolve(projectDir, '.gitignore');\n if (!existsSync(gitignorePath)) {\n await writeFile(\n gitignorePath,\n ['node_modules', 'dist', '.env', '.env.local', '.next', '.turbo', ''].join('\\n'),\n 'utf-8'\n );\n }\n\n // 6. Install dependencies\n log.step(6, totalSteps, 'Installing dependencies');\n const installSpinner = ora(`Running ${pc.bold(installCommand(pm))}...`).start();\n try {\n execSync(installCommand(pm), {\n cwd: projectDir,\n stdio: 'pipe',\n timeout: 120_000,\n });\n installSpinner.succeed('Dependencies installed');\n } catch {\n installSpinner.warn('Could not install dependencies — run install manually');\n }\n\n // 7. Init git\n log.step(7, totalSteps, 'Initializing git');\n try {\n execSync('git init', { cwd: projectDir, stdio: 'pipe' });\n execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });\n execSync('git commit -m \"Initial commit from create-recursiv-app\"', {\n cwd: projectDir,\n stdio: 'pipe',\n });\n log.success('Git repository initialized');\n } catch {\n log.warn('Could not initialize git repository');\n }\n\n // Done!\n log.blank();\n console.log(pc.bold(pc.green('Your Recursiv app is ready!')));\n log.blank();\n console.log(' Next steps:');\n console.log();\n console.log(` ${pc.dim('$')} cd ${projectName}`);\n if (!apiKey) {\n console.log(` ${pc.dim('$')} ${pc.dim('# Add your API key to .env')}`);\n }\n console.log(` ${pc.dim('$')} ${runCommand(pm, 'dev')}`);\n log.blank();\n console.log(pc.dim('Docs: https://docs.recursiv.io'));\n console.log(pc.dim('Dashboard: https://recursiv.io/dashboard'));\n log.blank();\n}\n","import pc from 'picocolors';\n\nexport const log = {\n info(msg: string) {\n console.log(pc.cyan('info') + ' ' + msg);\n },\n success(msg: string) {\n console.log(pc.green('ok') + ' ' + msg);\n },\n warn(msg: string) {\n console.log(pc.yellow('warn') + ' ' + msg);\n },\n error(msg: string) {\n console.error(pc.red('error') + ' ' + msg);\n },\n step(n: number, total: number, msg: string) {\n console.log(pc.dim(`[${n}/${total}]`) + ' ' + msg);\n },\n blank() {\n console.log();\n },\n};\n\nexport function banner() {\n console.log();\n console.log(pc.bold('Recursiv') + pc.dim(' — build and ship apps with AI'));\n console.log();\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface RecursivConfig {\n version: number;\n project: {\n name: string;\n template: string;\n framework: string;\n };\n api: {\n baseUrl: string;\n };\n dev: {\n port: number;\n command: string;\n };\n}\n\nconst CONFIG_FILE = '.recursiv.json';\n\nexport function configPath(dir: string): string {\n return join(dir, CONFIG_FILE);\n}\n\nexport async function readConfig(dir: string): Promise<RecursivConfig | null> {\n try {\n const raw = await readFile(configPath(dir), 'utf-8');\n return JSON.parse(raw) as RecursivConfig;\n } catch {\n return null;\n }\n}\n\nexport async function writeConfig(dir: string, config: RecursivConfig): Promise<void> {\n await writeFile(configPath(dir), JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function createConfig(opts: {\n name: string;\n template: string;\n framework: string;\n port?: number;\n devCommand?: string;\n}): RecursivConfig {\n return {\n version: 1,\n project: {\n name: opts.name,\n template: opts.template,\n framework: opts.framework,\n },\n api: {\n baseUrl: 'https://api.recursiv.io/api/v1',\n },\n dev: {\n port: opts.port ?? 3000,\n command: opts.devCommand ?? 'npm run dev',\n },\n };\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport async function writeEnvFile(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n const content = [\n '# Recursiv API key',\n `RECURSIV_API_KEY=${apiKey}`,\n '',\n '# Framework-specific public keys (uncomment as needed)',\n `# NEXT_PUBLIC_RECURSIV_API_KEY=${apiKey}`,\n `# VITE_RECURSIV_API_KEY=${apiKey}`,\n '',\n ].join('\\n');\n await writeFile(envPath, content, 'utf-8');\n}\n\nexport async function readApiKeyFromEnv(dir: string): Promise<string | null> {\n try {\n const raw = await readFile(join(dir, '.env'), 'utf-8');\n const match = raw.match(/^RECURSIV_API_KEY=(.+)$/m);\n return match?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function updateApiKeyInEnv(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n let content: string;\n try {\n content = await readFile(envPath, 'utf-8');\n if (content.includes('RECURSIV_API_KEY=')) {\n content = content.replace(/^RECURSIV_API_KEY=.+$/m, `RECURSIV_API_KEY=${apiKey}`);\n } else {\n content += `\\nRECURSIV_API_KEY=${apiKey}\\n`;\n }\n } catch {\n content = `RECURSIV_API_KEY=${apiKey}\\n`;\n }\n await writeFile(envPath, content, 'utf-8');\n}\n","import degit from 'degit';\nimport ora from 'ora';\nimport type { Template } from '../templates/registry.js';\n\nexport async function cloneTemplate(template: Template, dest: string): Promise<void> {\n const spinner = ora(`Cloning ${template.name} template...`).start();\n try {\n const emitter = degit(template.repo, {\n cache: false,\n force: true,\n verbose: false,\n });\n\n await emitter.clone(dest);\n spinner.succeed(`Template cloned successfully`);\n } catch (err) {\n spinner.fail('Failed to clone template');\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Could not clone template from ${template.repo}.\\n` +\n `Make sure you have internet access and the repo exists.\\n` +\n `Details: ${message}`\n );\n }\n}\n","import prompts from 'prompts';\nimport pc from 'picocolors';\nimport { log } from './logger.js';\n\nconst API_KEY_PATTERN = /^sk_(live|test)_[a-zA-Z0-9]{20,}$/;\nconst DASHBOARD_URL = 'https://recursiv.io/dashboard/api-keys';\n\nconst DEFAULT_SCOPES = [\n 'posts:read',\n 'posts:write',\n 'chat:read',\n 'chat:write',\n 'agents:read',\n 'agents:write',\n 'projects:read',\n 'projects:write',\n 'communities:read',\n 'communities:write',\n 'users:read',\n];\n\nexport function isValidKeyFormat(key: string): boolean {\n return API_KEY_PATTERN.test(key);\n}\n\nexport async function validateApiKey(apiKey: string, baseUrl: string): Promise<boolean> {\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Terminal signup flow — create a Recursiv account and API key without a browser.\n *\n * Flow:\n * 1. Prompt for email + password\n * 2. Try signup (or signin if account exists)\n * 3. Use session cookie to create an API key via REST endpoint\n * 4. Return the API key string\n */\nexport async function terminalSignup(baseUrl: string): Promise<string | null> {\n // baseUrl is like https://recursiv.io/api/v1 — we need the root for auth endpoints\n const rootUrl = baseUrl.replace(/\\/api\\/v1\\/?$/, '');\n\n console.log();\n console.log(pc.bold('Create a free Recursiv account'));\n console.log(pc.dim('Free tier: 1,000 API calls/day, 1 agent, 3 projects'));\n console.log();\n\n const { email } = await prompts(\n {\n type: 'text',\n name: 'email',\n message: 'Email',\n validate: (v: string) => {\n if (!v || !v.includes('@')) return 'Valid email required';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n const { password } = await prompts(\n {\n type: 'password',\n name: 'password',\n message: 'Password',\n validate: (v: string) => {\n if (!v || v.length < 12) return 'Password must be at least 12 characters';\n if (!/[a-zA-Z]/.test(v) || !/[0-9]/.test(v))\n return 'Password must contain both letters and numbers';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n // Try signup first\n let sessionCookie: string | null = null;\n let isNewAccount = false;\n\n // Better Auth requires an Origin header for CSRF protection\n const origin = rootUrl || 'https://api.recursiv.io';\n const authHeaders = { 'Content-Type': 'application/json', Origin: origin };\n\n try {\n const signupRes = await fetch(`${rootUrl}/api/auth/sign-up/email`, {\n method: 'POST',\n headers: authHeaders,\n body: JSON.stringify({\n email,\n password,\n name: email.split('@')[0],\n }),\n redirect: 'manual',\n });\n\n if (signupRes.ok || signupRes.status === 302) {\n sessionCookie = extractSessionCookie(signupRes);\n isNewAccount = true;\n } else if (signupRes.status === 409 || signupRes.status === 422) {\n // Account already exists — try signing in\n const signinRes = await fetch(`${rootUrl}/api/auth/sign-in/email`, {\n method: 'POST',\n headers: authHeaders,\n body: JSON.stringify({ email, password }),\n redirect: 'manual',\n });\n\n if (signinRes.ok || signinRes.status === 302) {\n sessionCookie = extractSessionCookie(signinRes);\n } else {\n const errBody = await signinRes.text().catch(() => '');\n log.error(`Login failed (${signinRes.status}): ${errBody || 'Invalid credentials'}`);\n return null;\n }\n } else {\n const errBody = await signupRes.text().catch(() => '');\n log.error(`Signup failed (${signupRes.status}): ${errBody || 'Unknown error'}`);\n return null;\n }\n } catch (err) {\n log.error(\n `Could not reach ${rootUrl} — ${err instanceof Error ? err.message : 'network error'}`,\n );\n log.info(`You can create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n if (!sessionCookie) {\n log.error('No session returned from server');\n log.info(`Create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n if (isNewAccount) {\n log.success('Account created');\n } else {\n log.success('Signed in');\n }\n\n // Create an API key using the session\n try {\n const keyRes = await fetch(`${baseUrl}/api-keys`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Cookie: sessionCookie,\n },\n body: JSON.stringify({\n name: 'CLI (auto-created)',\n scopes: DEFAULT_SCOPES,\n }),\n });\n\n if (!keyRes.ok) {\n const errBody = await keyRes.text().catch(() => '');\n log.error(`Failed to create API key (${keyRes.status}): ${errBody}`);\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n const { data } = (await keyRes.json()) as { data: { key: string } };\n log.success(`API key created (free tier: 1,000 calls/day)`);\n return data.key;\n } catch (err) {\n log.error(\n `Failed to create API key: ${err instanceof Error ? err.message : 'unknown error'}`,\n );\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n}\n\n/**\n * Extract session cookie from a Better Auth response.\n * Better Auth sets cookies via set-cookie header.\n */\nfunction extractSessionCookie(res: Response): string | null {\n // In Node.js, getSetCookie() returns individual cookie strings\n const setCookieHeaders =\n 'getSetCookie' in res.headers\n ? (res.headers as { getSetCookie(): string[] }).getSetCookie()\n : [];\n\n // Fall back to raw header if getSetCookie not available\n if (setCookieHeaders.length === 0) {\n const raw = res.headers.get('set-cookie');\n if (raw) {\n // Multiple cookies may be comma-separated (though non-standard)\n return raw\n .split(',')\n .map((c) => c.split(';')[0].trim())\n .join('; ');\n }\n return null;\n }\n\n // Extract cookie name=value pairs (strip attributes)\n return setCookieHeaders.map((c) => c.split(';')[0].trim()).join('; ');\n}\n\nexport async function promptApiKey(): Promise<string | null> {\n console.log(\n pc.dim(\n `Get your API key from ${pc.underline(DASHBOARD_URL)}\\n` +\n `Keys start with sk_live_ or sk_test_`,\n ),\n );\n console.log();\n\n const { apiKey } = await prompts(\n {\n type: 'text',\n name: 'apiKey',\n message: 'API key (or press Enter to skip)',\n validate: (value: string) => {\n if (!value) return true; // allow skip\n if (!isValidKeyFormat(value)) {\n return 'Invalid key format. Keys start with sk_live_ or sk_test_';\n }\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (!apiKey) {\n log.warn('No API key provided — you can add one later in .env');\n return null;\n }\n\n return apiKey;\n}\n\nexport async function promptAndValidateApiKey(baseUrl: string): Promise<string | null> {\n const apiKey = await promptApiKey();\n if (!apiKey) return null;\n\n const valid = await validateApiKey(apiKey, baseUrl);\n if (!valid) {\n log.warn('Could not validate API key (server unreachable or invalid key)');\n log.info('Key saved to .env — you can update it later');\n } else {\n log.success('API key validated');\n }\n\n return apiKey;\n}\n\n/**\n * Get an API key — either from env, by prompting for an existing key,\n * or by creating a new account via terminal signup.\n */\nexport async function getOrCreateApiKey(baseUrl: string): Promise<string | null> {\n console.log();\n\n const { method } = await prompts(\n {\n type: 'select',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n title: 'Create a free account',\n description: 'Sign up with email + password (no browser needed)',\n value: 'signup',\n },\n {\n title: 'Enter an existing API key',\n description: 'Paste a key from your dashboard',\n value: 'paste',\n },\n {\n title: 'Skip for now',\n description: 'Add an API key later in .env',\n value: 'skip',\n },\n ],\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (method === 'signup') {\n return terminalSignup(baseUrl);\n }\n\n if (method === 'paste') {\n return promptAndValidateApiKey(baseUrl);\n }\n\n log.warn('No API key — you can add one later in .env');\n return null;\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function detectPackageManager(dir: string): PackageManager {\n if (existsSync(join(dir, 'bun.lockb')) || existsSync(join(dir, 'bun.lock'))) return 'bun';\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(dir, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nexport function detectFromUserAgent(): PackageManager {\n const ua = process.env.npm_config_user_agent ?? '';\n if (ua.startsWith('bun')) return 'bun';\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n return 'npm';\n}\n\nexport function installCommand(pm: PackageManager): string {\n return pm === 'yarn' ? 'yarn' : `${pm} install`;\n}\n\nexport function runCommand(pm: PackageManager, script: string): string {\n if (pm === 'npm') return `npm run ${script}`;\n return `${pm} ${script}`;\n}\n","export interface Template {\n id: string;\n name: string;\n description: string;\n repo: string;\n framework: string;\n devCommand: string;\n devPort: number;\n recommended?: boolean;\n}\n\nexport const templates: Template[] = [\n {\n id: 'nextjs',\n name: 'Next.js + Recursiv',\n description: 'Full-stack Next.js app with feeds, chat, and agents',\n repo: 'socialdotdev/template-nextjs',\n framework: 'nextjs',\n devCommand: 'next dev',\n devPort: 3000,\n recommended: true,\n },\n {\n id: 'node',\n name: 'Node.js + Express',\n description: 'Express API server with Recursiv SDK',\n repo: 'socialdotdev/template-node',\n framework: 'express',\n devCommand: 'node --watch src/index.js',\n devPort: 4000,\n },\n {\n id: 'vite',\n name: 'Vite + React',\n description: 'React SPA with social feed components',\n repo: 'socialdotdev/template-vite',\n framework: 'vite',\n devCommand: 'vite',\n devPort: 5173,\n },\n];\n\nexport function getTemplate(id: string): Template | undefined {\n return templates.find((t) => t.id === id);\n}\n\nexport function getDefaultTemplate(): Template {\n return templates.find((t) => t.recommended) ?? templates[0]!;\n}\n"],"mappings":"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","names":["existsSync","prompts","pc","ora","readFile","writeFile","join","pc","pc","join","writeFile","prompts","existsSync","pc","ora"]}
|
package/dist/bin/recursiv.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Command } from "commander";
|
|
|
5
5
|
|
|
6
6
|
// src/commands/init.ts
|
|
7
7
|
import { existsSync as existsSync2 } from "fs";
|
|
8
|
-
import { mkdir } from "fs/promises";
|
|
8
|
+
import { mkdir, rename } from "fs/promises";
|
|
9
9
|
import { resolve } from "path";
|
|
10
10
|
import { execSync } from "child_process";
|
|
11
11
|
import prompts2 from "prompts";
|
|
@@ -202,7 +202,7 @@ async function terminalSignup(baseUrl) {
|
|
|
202
202
|
name: "password",
|
|
203
203
|
message: "Password",
|
|
204
204
|
validate: (v) => {
|
|
205
|
-
if (!v || v.length <
|
|
205
|
+
if (!v || v.length < 12) return "Password must be at least 12 characters";
|
|
206
206
|
if (!/[a-zA-Z]/.test(v) || !/[0-9]/.test(v))
|
|
207
207
|
return "Password must contain both letters and numbers";
|
|
208
208
|
return true;
|
|
@@ -212,10 +212,12 @@ async function terminalSignup(baseUrl) {
|
|
|
212
212
|
);
|
|
213
213
|
let sessionCookie = null;
|
|
214
214
|
let isNewAccount = false;
|
|
215
|
+
const origin = rootUrl || "https://api.recursiv.io";
|
|
216
|
+
const authHeaders = { "Content-Type": "application/json", Origin: origin };
|
|
215
217
|
try {
|
|
216
218
|
const signupRes = await fetch(`${rootUrl}/api/auth/sign-up/email`, {
|
|
217
219
|
method: "POST",
|
|
218
|
-
headers:
|
|
220
|
+
headers: authHeaders,
|
|
219
221
|
body: JSON.stringify({
|
|
220
222
|
email,
|
|
221
223
|
password,
|
|
@@ -229,7 +231,7 @@ async function terminalSignup(baseUrl) {
|
|
|
229
231
|
} else if (signupRes.status === 409 || signupRes.status === 422) {
|
|
230
232
|
const signinRes = await fetch(`${rootUrl}/api/auth/sign-in/email`, {
|
|
231
233
|
method: "POST",
|
|
232
|
-
headers:
|
|
234
|
+
headers: authHeaders,
|
|
233
235
|
body: JSON.stringify({ email, password }),
|
|
234
236
|
redirect: "manual"
|
|
235
237
|
});
|
|
@@ -488,6 +490,10 @@ async function initCommand(nameArg) {
|
|
|
488
490
|
log.step(4, totalSteps, "Creating project");
|
|
489
491
|
await mkdir(projectDir, { recursive: true });
|
|
490
492
|
await cloneTemplate(template, projectDir);
|
|
493
|
+
const nextConfigTs = resolve(projectDir, "next.config.ts");
|
|
494
|
+
if (existsSync2(nextConfigTs)) {
|
|
495
|
+
await rename(nextConfigTs, resolve(projectDir, "next.config.mjs"));
|
|
496
|
+
}
|
|
491
497
|
log.step(5, totalSteps, "Writing config");
|
|
492
498
|
const pm = detectFromUserAgent();
|
|
493
499
|
const config = createConfig({
|
package/dist/bin/recursiv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/recursiv.ts","../../src/commands/init.ts","../../src/lib/logger.ts","../../src/lib/config.ts","../../src/lib/env.ts","../../src/lib/templates.ts","../../src/lib/auth-flow.ts","../../src/lib/package-manager.ts","../../src/templates/registry.ts","../../src/commands/dev.ts","../../src/commands/deploy.ts","../../src/commands/auth.ts","../../src/commands/info.ts","../../src/commands/brain.tsx","../../src/ui/app.tsx","../../src/commands/studio.tsx","../../src/commands/api.ts","../../src/lib/api.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { initCommand } from '../commands/init.js';\nimport { devCommand } from '../commands/dev.js';\nimport { deployCommand } from '../commands/deploy.js';\nimport { loginCommand, logoutCommand, whoamiCommand } from '../commands/auth.js';\nimport { infoCommand } from '../commands/info.js';\nimport { brainCommand } from '../commands/brain.js';\nimport { studioCommand } from '../commands/studio.js';\nimport {\n agentsCreateCommand,\n agentsListCommand,\n communitiesCreateCommand,\n communitiesListCommand,\n postsCreateCommand,\n postsListCommand,\n projectsCreateCommand,\n projectsListCommand,\n usersMeCommand,\n} from '../commands/api.js';\n\nconst program = new Command();\n\nprogram\n .name('recursiv')\n .description('Recursiv CLI — build and ship apps with AI')\n .version('0.1.0');\n\nprogram\n .command('create [name]')\n .description('Create a new Recursiv application')\n .action(async (name?: string) => {\n try {\n await initCommand(name);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('dev')\n .description('Start the development server')\n .option('-p, --port <port>', 'port to run on')\n .action(async (opts: { port?: string }) => {\n try {\n await devCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('deploy <target>')\n .description('Generate deployment config (vercel, docker, render, railway, cloud)')\n .action(async (target: string) => {\n try {\n await deployCommand(target);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst auth = program\n .command('auth')\n .description('Manage API authentication');\n\nauth\n .command('login')\n .description('Set or update your API key')\n .action(async () => {\n try {\n await loginCommand();\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nauth\n .command('logout')\n .description('Remove API key from .env')\n .action(async () => {\n try {\n await logoutCommand();\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nauth\n .command('whoami')\n .description('Show current authenticated user')\n .action(async () => {\n try {\n await whoamiCommand();\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('info')\n .description('Display project information')\n .action(async () => {\n try {\n await infoCommand();\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst users = program.command('users').description('Users API');\nusers\n .command('me')\n .description('Show current authenticated user')\n .option('--json', 'Output JSON')\n .action(async (opts: { json?: boolean }) => {\n try {\n await usersMeCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst communities = program.command('communities').description('Communities API');\ncommunities\n .command('list')\n .description('List communities')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { limit?: string; offset?: string; json?: boolean }) => {\n try {\n await communitiesListCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\ncommunities\n .command('create')\n .description('Create a community')\n .requiredOption('--name <name>', 'community name')\n .requiredOption('--slug <slug>', 'community slug')\n .option('--description <description>', 'description')\n .option('--privacy <privacy>', 'public | private | hidden', 'public')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n name?: string;\n slug?: string;\n description?: string;\n privacy?: string;\n json?: boolean;\n }) => {\n try {\n await communitiesCreateCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst posts = program.command('posts').description('Posts API');\nposts\n .command('list')\n .description('List posts')\n .option('--community-id <id>', 'filter by community')\n .option('--author-id <id>', 'filter by author')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n communityId?: string;\n authorId?: string;\n limit?: string;\n offset?: string;\n json?: boolean;\n }) => {\n try {\n await postsListCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nposts\n .command('create')\n .description('Create a post')\n .requiredOption('--content <content>', 'post content')\n .option('--markdown', 'content is markdown')\n .option('--community-id <id>', 'community id')\n .option('--organization-id <id>', 'organization id')\n .option('--reply-to-id <id>', 'reply to post id')\n .option('--tag-ids <ids>', 'comma-separated tag ids')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n content?: string;\n markdown?: boolean;\n communityId?: string;\n organizationId?: string;\n replyToId?: string;\n tagIds?: string;\n json?: boolean;\n }) => {\n try {\n await postsCreateCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst projects = program.command('projects').description('Projects API');\nprojects\n .command('list')\n .description('List projects')\n .option('--org <id>', 'organization id')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { org?: string; limit?: string; offset?: string; json?: boolean }) => {\n try {\n await projectsListCommand({\n organizationId: opts.org,\n limit: opts.limit,\n offset: opts.offset,\n json: opts.json,\n });\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprojects\n .command('create')\n .description('Create a project')\n .requiredOption('--org <id>', 'organization id')\n .requiredOption('--name <name>', 'project name')\n .option('--slug <slug>', 'project slug')\n .option('--repo <url>', 'repo URL')\n .option('--template <source>', 'default | custom', 'default')\n .option('--template-url <url>', 'custom template URL')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n org?: string;\n name?: string;\n slug?: string;\n repo?: string;\n template?: string;\n templateUrl?: string;\n json?: boolean;\n }) => {\n try {\n await projectsCreateCommand({\n organizationId: opts.org,\n name: opts.name,\n slug: opts.slug,\n repoUrl: opts.repo,\n templateSource: opts.template,\n templateUrl: opts.templateUrl,\n json: opts.json,\n });\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst agents = program.command('agents').description('Agents API');\nagents\n .command('list')\n .description('List agents')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { limit?: string; offset?: string; json?: boolean }) => {\n try {\n await agentsListCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nagents\n .command('create')\n .description('Create an AI agent')\n .requiredOption('--name <name>', 'agent name')\n .requiredOption('--username <username>', 'agent username')\n .option('--bio <bio>', 'agent bio')\n .option('--model <model>', 'model id')\n .option('--system-prompt <prompt>', 'system prompt')\n .option('--social-mode <mode>', 'chat_only | chat_post')\n .option('--post-frequency <freq>', 'never | light | medium | heavy')\n .option('--tool-mode <mode>', 'chat_only | permission | autonomous')\n .option('--daily-request-limit <n>', 'daily request limit')\n .option('--org <id>', 'organization id')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n name?: string;\n username?: string;\n bio?: string;\n model?: string;\n systemPrompt?: string;\n socialMode?: string;\n postFrequency?: string;\n toolMode?: string;\n dailyRequestLimit?: string;\n org?: string;\n json?: boolean;\n }) => {\n try {\n await agentsCreateCommand({\n name: opts.name,\n username: opts.username,\n bio: opts.bio,\n model: opts.model,\n systemPrompt: opts.systemPrompt,\n socialMode: opts.socialMode,\n postFrequency: opts.postFrequency,\n toolMode: opts.toolMode,\n dailyRequestLimit: opts.dailyRequestLimit,\n organizationId: opts.org,\n json: opts.json,\n });\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('brain')\n .description('Launch the interactive Recursiv brain')\n .option('--no-anim', 'Disable animations')\n .action(async (opts: { anim?: boolean }) => {\n try {\n await brainCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('studio')\n .description('Legacy alias for brain')\n .option('--no-anim', 'Disable animations')\n .action(async (opts: { anim?: boolean }) => {\n try {\n await studioCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nasync function runDefaultBrain(): Promise<void> {\n try {\n await brainCommand({});\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n}\n\nfunction shouldAutoLaunchBrain(args: string[]): boolean {\n if (process.env.RECURSIV_BRAIN === '1') return true;\n if (process.env.RECURSIV_BRAIN === '0') return false;\n if (process.env.RECURSIV_STUDIO === '1') return true;\n if (process.env.RECURSIV_STUDIO === '0') return false;\n if (args.length > 0) return false;\n if (!process.stdout.isTTY) return false;\n if (process.env.CI) return false;\n return true;\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n if (args.includes('--brain') || args.includes('--studio')) {\n const filtered = args.filter((arg) => arg !== '--brain' && arg !== '--studio');\n process.argv = [process.argv[0], process.argv[1], ...filtered];\n const noAnim = filtered.includes('--no-anim');\n await brainCommand({ anim: !noAnim });\n return;\n }\n\n if (shouldAutoLaunchBrain(args)) {\n await runDefaultBrain();\n return;\n }\n\n program.parse();\n}\n\nvoid main();\n","import { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { resolve, basename } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport prompts from 'prompts';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log, banner } from '../lib/logger.js';\nimport { createConfig, writeConfig } from '../lib/config.js';\nimport { writeEnvFile } from '../lib/env.js';\nimport { cloneTemplate } from '../lib/templates.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { detectFromUserAgent, installCommand, runCommand } from '../lib/package-manager.js';\nimport { templates, type Template } from '../templates/registry.js';\nimport { writeFile } from 'node:fs/promises';\n\nexport async function initCommand(nameArg?: string): Promise<void> {\n banner();\n\n const totalSteps = 7;\n\n // 1. Project name\n log.step(1, totalSteps, 'Project setup');\n let projectName: string;\n if (nameArg) {\n projectName = nameArg;\n } else {\n const { name } = await prompts(\n {\n type: 'text',\n name: 'name',\n message: 'Project name',\n initial: 'my-recursiv-app',\n validate: (v: string) => (v.trim() ? true : 'Name is required'),\n },\n { onCancel: () => process.exit(1) }\n );\n projectName = name;\n }\n\n const projectDir = resolve(process.cwd(), projectName);\n\n if (existsSync(projectDir)) {\n log.error(`Directory ${pc.bold(projectName)} already exists`);\n process.exit(1);\n }\n\n // 2. Template selection\n log.step(2, totalSteps, 'Choose a template');\n const templateChoices = templates.map((t) => ({\n title: t.recommended ? `${t.name} ${pc.dim('(recommended)')}` : t.name,\n description: t.description,\n value: t.id,\n }));\n\n const { templateId } = await prompts(\n {\n type: 'select',\n name: 'templateId',\n message: 'Template',\n choices: templateChoices,\n initial: 0,\n },\n { onCancel: () => process.exit(1) }\n );\n\n const template = templates.find((t) => t.id === templateId) as Template;\n\n // 3. API key\n log.step(3, totalSteps, 'Authentication');\n const apiKey = await getOrCreateApiKey('https://api.recursiv.io/api/v1');\n\n // 4. Clone template\n log.step(4, totalSteps, 'Creating project');\n await mkdir(projectDir, { recursive: true });\n await cloneTemplate(template, projectDir);\n\n // 5. Write config files\n log.step(5, totalSteps, 'Writing config');\n const pm = detectFromUserAgent();\n\n const config = createConfig({\n name: projectName,\n template: template.id,\n framework: template.framework,\n port: template.devPort,\n devCommand: runCommand(pm, 'dev'),\n });\n await writeConfig(projectDir, config);\n\n if (apiKey) {\n await writeEnvFile(projectDir, apiKey);\n }\n\n // Write .gitignore if it doesn't exist\n const gitignorePath = resolve(projectDir, '.gitignore');\n if (!existsSync(gitignorePath)) {\n await writeFile(\n gitignorePath,\n ['node_modules', 'dist', '.env', '.env.local', '.next', '.turbo', ''].join('\\n'),\n 'utf-8'\n );\n }\n\n // 6. Install dependencies\n log.step(6, totalSteps, 'Installing dependencies');\n const installSpinner = ora(`Running ${pc.bold(installCommand(pm))}...`).start();\n try {\n execSync(installCommand(pm), {\n cwd: projectDir,\n stdio: 'pipe',\n timeout: 120_000,\n });\n installSpinner.succeed('Dependencies installed');\n } catch {\n installSpinner.warn('Could not install dependencies — run install manually');\n }\n\n // 7. Init git\n log.step(7, totalSteps, 'Initializing git');\n try {\n execSync('git init', { cwd: projectDir, stdio: 'pipe' });\n execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });\n execSync('git commit -m \"Initial commit from create-recursiv-app\"', {\n cwd: projectDir,\n stdio: 'pipe',\n });\n log.success('Git repository initialized');\n } catch {\n log.warn('Could not initialize git repository');\n }\n\n // Done!\n log.blank();\n console.log(pc.bold(pc.green('Your Recursiv app is ready!')));\n log.blank();\n console.log(' Next steps:');\n console.log();\n console.log(` ${pc.dim('$')} cd ${projectName}`);\n if (!apiKey) {\n console.log(` ${pc.dim('$')} ${pc.dim('# Add your API key to .env')}`);\n }\n console.log(` ${pc.dim('$')} ${runCommand(pm, 'dev')}`);\n log.blank();\n console.log(pc.dim('Docs: https://docs.recursiv.io'));\n console.log(pc.dim('Dashboard: https://recursiv.io/dashboard'));\n log.blank();\n}\n","import pc from 'picocolors';\n\nexport const log = {\n info(msg: string) {\n console.log(pc.cyan('info') + ' ' + msg);\n },\n success(msg: string) {\n console.log(pc.green('ok') + ' ' + msg);\n },\n warn(msg: string) {\n console.log(pc.yellow('warn') + ' ' + msg);\n },\n error(msg: string) {\n console.error(pc.red('error') + ' ' + msg);\n },\n step(n: number, total: number, msg: string) {\n console.log(pc.dim(`[${n}/${total}]`) + ' ' + msg);\n },\n blank() {\n console.log();\n },\n};\n\nexport function banner() {\n console.log();\n console.log(pc.bold('Recursiv') + pc.dim(' — build and ship apps with AI'));\n console.log();\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface RecursivConfig {\n version: number;\n project: {\n name: string;\n template: string;\n framework: string;\n };\n api: {\n baseUrl: string;\n };\n dev: {\n port: number;\n command: string;\n };\n}\n\nconst CONFIG_FILE = '.recursiv.json';\n\nexport function configPath(dir: string): string {\n return join(dir, CONFIG_FILE);\n}\n\nexport async function readConfig(dir: string): Promise<RecursivConfig | null> {\n try {\n const raw = await readFile(configPath(dir), 'utf-8');\n return JSON.parse(raw) as RecursivConfig;\n } catch {\n return null;\n }\n}\n\nexport async function writeConfig(dir: string, config: RecursivConfig): Promise<void> {\n await writeFile(configPath(dir), JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function createConfig(opts: {\n name: string;\n template: string;\n framework: string;\n port?: number;\n devCommand?: string;\n}): RecursivConfig {\n return {\n version: 1,\n project: {\n name: opts.name,\n template: opts.template,\n framework: opts.framework,\n },\n api: {\n baseUrl: 'https://api.recursiv.io/api/v1',\n },\n dev: {\n port: opts.port ?? 3000,\n command: opts.devCommand ?? 'npm run dev',\n },\n };\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport async function writeEnvFile(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n const content = [\n '# Recursiv API key',\n `RECURSIV_API_KEY=${apiKey}`,\n '',\n '# Framework-specific public keys (uncomment as needed)',\n `# NEXT_PUBLIC_RECURSIV_API_KEY=${apiKey}`,\n `# VITE_RECURSIV_API_KEY=${apiKey}`,\n '',\n ].join('\\n');\n await writeFile(envPath, content, 'utf-8');\n}\n\nexport async function readApiKeyFromEnv(dir: string): Promise<string | null> {\n try {\n const raw = await readFile(join(dir, '.env'), 'utf-8');\n const match = raw.match(/^RECURSIV_API_KEY=(.+)$/m);\n return match?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function updateApiKeyInEnv(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n let content: string;\n try {\n content = await readFile(envPath, 'utf-8');\n if (content.includes('RECURSIV_API_KEY=')) {\n content = content.replace(/^RECURSIV_API_KEY=.+$/m, `RECURSIV_API_KEY=${apiKey}`);\n } else {\n content += `\\nRECURSIV_API_KEY=${apiKey}\\n`;\n }\n } catch {\n content = `RECURSIV_API_KEY=${apiKey}\\n`;\n }\n await writeFile(envPath, content, 'utf-8');\n}\n","import degit from 'degit';\nimport ora from 'ora';\nimport type { Template } from '../templates/registry.js';\n\nexport async function cloneTemplate(template: Template, dest: string): Promise<void> {\n const spinner = ora(`Cloning ${template.name} template...`).start();\n try {\n const emitter = degit(template.repo, {\n cache: false,\n force: true,\n verbose: false,\n });\n\n await emitter.clone(dest);\n spinner.succeed(`Template cloned successfully`);\n } catch (err) {\n spinner.fail('Failed to clone template');\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Could not clone template from ${template.repo}.\\n` +\n `Make sure you have internet access and the repo exists.\\n` +\n `Details: ${message}`\n );\n }\n}\n","import prompts from 'prompts';\nimport pc from 'picocolors';\nimport { log } from './logger.js';\n\nconst API_KEY_PATTERN = /^sk_(live|test)_[a-zA-Z0-9]{20,}$/;\nconst DASHBOARD_URL = 'https://recursiv.io/dashboard/api-keys';\n\nconst DEFAULT_SCOPES = [\n 'posts:read',\n 'posts:write',\n 'chat:read',\n 'chat:write',\n 'agents:read',\n 'agents:write',\n 'projects:read',\n 'projects:write',\n 'communities:read',\n 'communities:write',\n 'users:read',\n];\n\nexport function isValidKeyFormat(key: string): boolean {\n return API_KEY_PATTERN.test(key);\n}\n\nexport async function validateApiKey(apiKey: string, baseUrl: string): Promise<boolean> {\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Terminal signup flow — create a Recursiv account and API key without a browser.\n *\n * Flow:\n * 1. Prompt for email + password\n * 2. Try signup (or signin if account exists)\n * 3. Use session cookie to create an API key via REST endpoint\n * 4. Return the API key string\n */\nexport async function terminalSignup(baseUrl: string): Promise<string | null> {\n // baseUrl is like https://recursiv.io/api/v1 — we need the root for auth endpoints\n const rootUrl = baseUrl.replace(/\\/api\\/v1\\/?$/, '');\n\n console.log();\n console.log(pc.bold('Create a free Recursiv account'));\n console.log(pc.dim('Free tier: 1,000 API calls/day, 1 agent, 3 projects'));\n console.log();\n\n const { email } = await prompts(\n {\n type: 'text',\n name: 'email',\n message: 'Email',\n validate: (v: string) => {\n if (!v || !v.includes('@')) return 'Valid email required';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n const { password } = await prompts(\n {\n type: 'password',\n name: 'password',\n message: 'Password',\n validate: (v: string) => {\n if (!v || v.length < 8) return 'Password must be at least 8 characters';\n if (!/[a-zA-Z]/.test(v) || !/[0-9]/.test(v))\n return 'Password must contain both letters and numbers';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n // Try signup first\n let sessionCookie: string | null = null;\n let isNewAccount = false;\n\n try {\n const signupRes = await fetch(`${rootUrl}/api/auth/sign-up/email`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email,\n password,\n name: email.split('@')[0],\n }),\n redirect: 'manual',\n });\n\n if (signupRes.ok || signupRes.status === 302) {\n sessionCookie = extractSessionCookie(signupRes);\n isNewAccount = true;\n } else if (signupRes.status === 409 || signupRes.status === 422) {\n // Account already exists — try signing in\n const signinRes = await fetch(`${rootUrl}/api/auth/sign-in/email`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email, password }),\n redirect: 'manual',\n });\n\n if (signinRes.ok || signinRes.status === 302) {\n sessionCookie = extractSessionCookie(signinRes);\n } else {\n const errBody = await signinRes.text().catch(() => '');\n log.error(`Login failed (${signinRes.status}): ${errBody || 'Invalid credentials'}`);\n return null;\n }\n } else {\n const errBody = await signupRes.text().catch(() => '');\n log.error(`Signup failed (${signupRes.status}): ${errBody || 'Unknown error'}`);\n return null;\n }\n } catch (err) {\n log.error(\n `Could not reach ${rootUrl} — ${err instanceof Error ? err.message : 'network error'}`,\n );\n log.info(`You can create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n if (!sessionCookie) {\n log.error('No session returned from server');\n log.info(`Create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n if (isNewAccount) {\n log.success('Account created');\n } else {\n log.success('Signed in');\n }\n\n // Create an API key using the session\n try {\n const keyRes = await fetch(`${baseUrl}/api-keys`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Cookie: sessionCookie,\n },\n body: JSON.stringify({\n name: 'CLI (auto-created)',\n scopes: DEFAULT_SCOPES,\n }),\n });\n\n if (!keyRes.ok) {\n const errBody = await keyRes.text().catch(() => '');\n log.error(`Failed to create API key (${keyRes.status}): ${errBody}`);\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n const { data } = (await keyRes.json()) as { data: { key: string } };\n log.success(`API key created (free tier: 1,000 calls/day)`);\n return data.key;\n } catch (err) {\n log.error(\n `Failed to create API key: ${err instanceof Error ? err.message : 'unknown error'}`,\n );\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n}\n\n/**\n * Extract session cookie from a Better Auth response.\n * Better Auth sets cookies via set-cookie header.\n */\nfunction extractSessionCookie(res: Response): string | null {\n // In Node.js, getSetCookie() returns individual cookie strings\n const setCookieHeaders =\n 'getSetCookie' in res.headers\n ? (res.headers as { getSetCookie(): string[] }).getSetCookie()\n : [];\n\n // Fall back to raw header if getSetCookie not available\n if (setCookieHeaders.length === 0) {\n const raw = res.headers.get('set-cookie');\n if (raw) {\n // Multiple cookies may be comma-separated (though non-standard)\n return raw\n .split(',')\n .map((c) => c.split(';')[0].trim())\n .join('; ');\n }\n return null;\n }\n\n // Extract cookie name=value pairs (strip attributes)\n return setCookieHeaders.map((c) => c.split(';')[0].trim()).join('; ');\n}\n\nexport async function promptApiKey(): Promise<string | null> {\n console.log(\n pc.dim(\n `Get your API key from ${pc.underline(DASHBOARD_URL)}\\n` +\n `Keys start with sk_live_ or sk_test_`,\n ),\n );\n console.log();\n\n const { apiKey } = await prompts(\n {\n type: 'text',\n name: 'apiKey',\n message: 'API key (or press Enter to skip)',\n validate: (value: string) => {\n if (!value) return true; // allow skip\n if (!isValidKeyFormat(value)) {\n return 'Invalid key format. Keys start with sk_live_ or sk_test_';\n }\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (!apiKey) {\n log.warn('No API key provided — you can add one later in .env');\n return null;\n }\n\n return apiKey;\n}\n\nexport async function promptAndValidateApiKey(baseUrl: string): Promise<string | null> {\n const apiKey = await promptApiKey();\n if (!apiKey) return null;\n\n const valid = await validateApiKey(apiKey, baseUrl);\n if (!valid) {\n log.warn('Could not validate API key (server unreachable or invalid key)');\n log.info('Key saved to .env — you can update it later');\n } else {\n log.success('API key validated');\n }\n\n return apiKey;\n}\n\n/**\n * Get an API key — either from env, by prompting for an existing key,\n * or by creating a new account via terminal signup.\n */\nexport async function getOrCreateApiKey(baseUrl: string): Promise<string | null> {\n console.log();\n\n const { method } = await prompts(\n {\n type: 'select',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n title: 'Create a free account',\n description: 'Sign up with email + password (no browser needed)',\n value: 'signup',\n },\n {\n title: 'Enter an existing API key',\n description: 'Paste a key from your dashboard',\n value: 'paste',\n },\n {\n title: 'Skip for now',\n description: 'Add an API key later in .env',\n value: 'skip',\n },\n ],\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (method === 'signup') {\n return terminalSignup(baseUrl);\n }\n\n if (method === 'paste') {\n return promptAndValidateApiKey(baseUrl);\n }\n\n log.warn('No API key — you can add one later in .env');\n return null;\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function detectPackageManager(dir: string): PackageManager {\n if (existsSync(join(dir, 'bun.lockb')) || existsSync(join(dir, 'bun.lock'))) return 'bun';\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(dir, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nexport function detectFromUserAgent(): PackageManager {\n const ua = process.env.npm_config_user_agent ?? '';\n if (ua.startsWith('bun')) return 'bun';\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n return 'npm';\n}\n\nexport function installCommand(pm: PackageManager): string {\n return pm === 'yarn' ? 'yarn' : `${pm} install`;\n}\n\nexport function runCommand(pm: PackageManager, script: string): string {\n if (pm === 'npm') return `npm run ${script}`;\n return `${pm} ${script}`;\n}\n","export interface Template {\n id: string;\n name: string;\n description: string;\n repo: string;\n framework: string;\n devCommand: string;\n devPort: number;\n recommended?: boolean;\n}\n\nexport const templates: Template[] = [\n {\n id: 'nextjs',\n name: 'Next.js + Recursiv',\n description: 'Full-stack Next.js app with feeds, chat, and agents',\n repo: 'socialdotdev/template-nextjs',\n framework: 'nextjs',\n devCommand: 'next dev',\n devPort: 3000,\n recommended: true,\n },\n {\n id: 'node',\n name: 'Node.js + Express',\n description: 'Express API server with Recursiv SDK',\n repo: 'socialdotdev/template-node',\n framework: 'express',\n devCommand: 'node --watch src/index.js',\n devPort: 4000,\n },\n {\n id: 'vite',\n name: 'Vite + React',\n description: 'React SPA with social feed components',\n repo: 'socialdotdev/template-vite',\n framework: 'vite',\n devCommand: 'vite',\n devPort: 5173,\n },\n];\n\nexport function getTemplate(id: string): Template | undefined {\n return templates.find((t) => t.id === id);\n}\n\nexport function getDefaultTemplate(): Template {\n return templates.find((t) => t.recommended) ?? templates[0]!;\n}\n","import { spawn } from 'node:child_process';\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager, runCommand } from '../lib/package-manager.js';\n\nexport async function devCommand(opts: { port?: string }): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n log.info(`Run ${pc.bold('create-recursiv-app')} to create a new project`);\n process.exit(1);\n }\n\n const apiKey = await readApiKeyFromEnv(cwd);\n if (!apiKey) {\n log.warn('No RECURSIV_API_KEY found in .env — API calls will fail');\n }\n\n const pm = detectPackageManager(cwd);\n const port = opts.port ?? String(config.dev.port);\n const devCmd = config.dev.command || runCommand(pm, 'dev');\n\n // Build env vars to inject\n const env: Record<string, string> = {\n ...process.env,\n PORT: port,\n };\n\n if (apiKey) {\n env.RECURSIV_API_KEY = apiKey;\n\n // Framework-specific public env vars\n if (config.project.framework === 'nextjs') {\n env.NEXT_PUBLIC_RECURSIV_API_KEY = apiKey;\n } else if (config.project.framework === 'vite') {\n env.VITE_RECURSIV_API_KEY = apiKey;\n }\n }\n\n log.info(`Starting dev server on port ${pc.bold(port)}`);\n log.info(`Running: ${pc.dim(devCmd)}`);\n console.log();\n\n const [cmd, ...args] = devCmd.split(' ');\n const child = spawn(cmd!, args, {\n cwd,\n env,\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('close', (code) => {\n process.exit(code ?? 0);\n });\n\n // Forward signals\n const cleanup = () => {\n child.kill('SIGTERM');\n };\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n}\n","import { writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\n\ninterface DeployTarget {\n id: string;\n name: string;\n generate: (projectName: string, framework: string) => { file: string; content: string };\n}\n\nconst targets: DeployTarget[] = [\n {\n id: 'vercel',\n name: 'Vercel',\n generate: (name, framework) => ({\n file: 'vercel.json',\n content: JSON.stringify(\n {\n $schema: 'https://openapi.vercel.sh/vercel.json',\n projectSettings: {\n framework: framework === 'nextjs' ? 'nextjs' : framework === 'vite' ? 'vite' : null,\n },\n env: {\n RECURSIV_API_KEY: '@recursiv-api-key',\n },\n },\n null,\n 2\n ),\n }),\n },\n {\n id: 'docker',\n name: 'Docker',\n generate: (name, framework) => ({\n file: 'Dockerfile',\n content: [\n 'FROM node:20-slim AS base',\n 'WORKDIR /app',\n 'COPY package*.json ./',\n 'RUN npm ci --omit=dev',\n 'COPY . .',\n framework === 'nextjs' ? 'RUN npm run build' : '',\n framework === 'nextjs' ? 'EXPOSE 3000' : 'EXPOSE 4000',\n framework === 'nextjs'\n ? 'CMD [\"npm\", \"start\"]'\n : 'CMD [\"node\", \"src/index.js\"]',\n '',\n ]\n .filter(Boolean)\n .join('\\n'),\n }),\n },\n {\n id: 'render',\n name: 'Render',\n generate: (name, framework) => ({\n file: 'render.yaml',\n content: [\n 'services:',\n ` - type: web`,\n ` name: ${name}`,\n ` runtime: node`,\n ` buildCommand: npm install && npm run build`,\n framework === 'nextjs'\n ? ' startCommand: npm start'\n : ' startCommand: node src/index.js',\n ' envVars:',\n ' - key: RECURSIV_API_KEY',\n ' sync: false',\n '',\n ].join('\\n'),\n }),\n },\n {\n id: 'railway',\n name: 'Railway',\n generate: (name, framework) => ({\n file: 'railway.toml',\n content: [\n '[build]',\n 'builder = \"nixpacks\"',\n '',\n '[deploy]',\n framework === 'nextjs'\n ? 'startCommand = \"npm start\"'\n : 'startCommand = \"node src/index.js\"',\n 'healthcheckPath = \"/\"',\n '',\n ].join('\\n'),\n }),\n },\n];\n\nexport async function deployCommand(target: string): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n process.exit(1);\n }\n\n if (target === 'cloud') {\n log.info('Cloud deployment via Recursiv is coming soon');\n log.info(`For now, deploy to Vercel, Render, or Railway with ${pc.bold('recursiv deploy <target>')}`);\n return;\n }\n\n const deployTarget = targets.find((t) => t.id === target);\n if (!deployTarget) {\n log.error(`Unknown target: ${pc.bold(target)}`);\n log.info(`Available targets: ${targets.map((t) => t.id).join(', ')}, cloud`);\n process.exit(1);\n }\n\n const spinner = ora(`Generating ${deployTarget.name} config...`).start();\n const { file, content } = deployTarget.generate(\n config.project.name,\n config.project.framework\n );\n\n await writeFile(resolve(cwd, file), content + '\\n', 'utf-8');\n spinner.succeed(`Created ${pc.bold(file)}`);\n\n log.blank();\n log.info(`Remember to set ${pc.bold('RECURSIV_API_KEY')} in your ${deployTarget.name} environment`);\n}\n","import pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readApiKeyFromEnv, updateApiKeyInEnv } from '../lib/env.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { readConfig } from '../lib/config.js';\n\nexport async function loginCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n\n const existing = await readApiKeyFromEnv(cwd);\n if (existing) {\n log.info(`Existing key found: ${pc.dim(maskKey(existing))}`);\n log.info('Enter a new key to replace it, or press Enter to keep it');\n }\n\n const apiKey = await getOrCreateApiKey(baseUrl);\n if (apiKey) {\n await updateApiKeyInEnv(cwd, apiKey);\n log.success('API key saved to .env');\n }\n}\n\nexport async function logoutCommand(): Promise<void> {\n const cwd = process.cwd();\n const existing = await readApiKeyFromEnv(cwd);\n if (!existing) {\n log.info('No API key found in .env');\n return;\n }\n\n await updateApiKeyInEnv(cwd, '');\n log.success('API key removed from .env');\n}\n\nexport async function whoamiCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n const apiKey = await readApiKeyFromEnv(cwd);\n\n if (!apiKey) {\n log.error('No API key found in .env');\n log.info(`Run ${pc.bold('recursiv auth login')} to set one`);\n return;\n }\n\n log.info(`Key: ${pc.dim(maskKey(apiKey))}`);\n\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n\n if (!res.ok) {\n log.error('API key is invalid or expired');\n return;\n }\n\n const body = (await res.json()) as { data: { username?: string; email?: string } };\n if (body.data.username) log.info(`User: ${pc.bold(body.data.username)}`);\n if (body.data.email) log.info(`Email: ${body.data.email}`);\n } catch {\n log.warn('Could not reach API — check your network');\n }\n}\n\nfunction maskKey(key: string): string {\n if (key.length <= 12) return '****';\n return key.slice(0, 8) + '...' + key.slice(-4);\n}\n","import pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager } from '../lib/package-manager.js';\nimport { getTemplate } from '../templates/registry.js';\n\nexport async function infoCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n log.info(`Run ${pc.bold('create-recursiv-app')} to create a new project`);\n process.exit(1);\n }\n\n const apiKey = await readApiKeyFromEnv(cwd);\n const pm = detectPackageManager(cwd);\n const template = getTemplate(config.project.template);\n\n console.log();\n console.log(pc.bold('Project Info'));\n console.log();\n console.log(` Name: ${pc.bold(config.project.name)}`);\n console.log(` Template: ${template?.name ?? config.project.template}`);\n console.log(` Framework: ${config.project.framework}`);\n console.log(` Dev port: ${config.dev.port}`);\n console.log(` Dev cmd: ${pc.dim(config.dev.command)}`);\n console.log(` Pkg mgr: ${pm}`);\n console.log(` API URL: ${pc.dim(config.api.baseUrl)}`);\n console.log(` API key: ${apiKey ? pc.green('configured') : pc.yellow('not set')}`);\n console.log(` Config: ${pc.dim('.recursiv.json v' + config.version)}`);\n console.log();\n\n // Connection check\n if (apiKey) {\n try {\n const res = await fetch(`${config.api.baseUrl}/users/me`, {\n headers: { Authorization: `Bearer ${apiKey}`, Accept: 'application/json' },\n });\n if (res.ok) {\n log.success('API connection OK');\n } else {\n log.warn(`API returned ${res.status} — key may be invalid`);\n }\n } catch {\n log.warn('Could not reach API');\n }\n }\n}\n","import React from 'react';\nimport { render } from 'ink';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager } from '../lib/package-manager.js';\nimport { App, type ProjectSnapshot } from '../ui/app.js';\n\nexport async function brainCommand(opts: { anim?: boolean }): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const apiKey = await readApiKeyFromEnv(cwd);\n const packageManager = detectPackageManager(cwd);\n\n const snapshot: ProjectSnapshot | null = config\n ? {\n name: config.project.name,\n template: config.project.template,\n framework: config.project.framework,\n port: config.dev.port,\n devCommand: config.dev.command,\n apiBaseUrl: config.api.baseUrl,\n apiKeyConfigured: Boolean(apiKey),\n packageManager,\n }\n : null;\n\n const app = render(<App snapshot={snapshot} animate={opts.anim !== false} />);\n\n await app.waitUntilExit();\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Box, Text, useApp, useInput, useStdout, type Key } from 'ink';\n\nexport type ProjectSnapshot = {\n name: string;\n template: string;\n framework: string;\n port: number;\n devCommand: string;\n apiBaseUrl: string;\n apiKeyConfigured: boolean;\n packageManager: string;\n} | null;\n\ntype TabKey = 'overview' | 'commands' | 'stack';\ntype Glow = 'none' | 'soft' | 'strong';\n\nconst TABS: { key: TabKey; label: string }[] = [\n { key: 'overview', label: 'Overview' },\n { key: 'commands', label: 'Commands' },\n { key: 'stack', label: 'App' },\n];\n\nconst THEME = {\n accent: '#1FE4C6',\n accentWarm: '#F6D47A',\n accentCool: '#4DB6FF',\n muted: '#6F7C8A',\n bright: '#E9FFFA',\n danger: '#FF6B6B',\n};\n\nconst WORDMARK_COLORS = ['cyan', 'blue', 'yellow'];\nconst WORDMARK_LINES = [\n '#### #### ### ##### # #',\n '# # # # # # # ## #',\n '#### #### ##### # # # #',\n '# # # # # # # # ##',\n '#### # # # # ##### # #',\n];\n\nconst HERO_LINES = [\n 'Neurons, particles, waves.',\n 'The brain behind Recursiv.',\n 'Signals in motion, products alive.',\n 'A living map of your platform.',\n 'Bioluminescent systems in sync.',\n];\n\nconst COPY: Record<TabKey, string> = {\n overview: `# Social.dev Brain\nA neural CLI reflection of your product surface with neurons, particles, and waves.\n\n## What it shows\n- Branded networks, communities, posts, and reactions\n- Real-time chat with human + AI agent threads\n- Tool-enabled agents with sandboxes and integrations\n- Deployments, storage buckets, and databases\n\n## Flow\n1. Create a project\n2. Run dev locally\n3. Deploy anywhere`,\n commands: `# Command Deck\n- \\`recursiv\\` runs Brain when interactive\n- \\`recursiv brain\\`\n- \\`RECURSIV_BRAIN=1 recursiv\\`\n- \\`RECURSIV_BRAIN=0 recursiv\\`\n- \\`recursiv create my-app\\`\n- \\`recursiv dev --port 3000\\`\n- \\`recursiv deploy <target>\\`\n- \\`recursiv auth login | logout | whoami\\`\n- \\`recursiv info\\`\n- \\`recursiv users me\\`\n- \\`recursiv communities list\\`\n- \\`recursiv posts list\\`\n- \\`recursiv agents list\\``,\n stack: `# App Reflection\n## Client\n- React Native + Expo\n- NativeWind + Tailwind\n\n## Backend\n- Hono + tRPC\n- Better Auth\n\n## Data + Realtime\n- PostgreSQL + Drizzle ORM\n- Kafka + Socket.IO\n\n## Agents\n- Composio + E2B + OpenRouter`,\n};\n\nconst PULSE_FRAMES = ['spark', 'pulse', 'sync', 'bloom'];\nconst DOT_FRAMES = ['.', '..', '...'];\nconst BAR_FRAMES = ['[~ ]', '[~~ ]', '[~~~ ]', '[ ~~~~ ]', '[ ~~~~]', '[ ~~~]', '[ ~~]', '[ ~]'];\nconst AURORA_COLORS = ['#1FE4C6', '#4DB6FF', '#8AF0FF', '#F6D47A'];\nconst AURORA_COLORS_DEEP = ['#0C2236', '#12314C', '#1E3A5F'];\n\nconst QUICK_ACTIONS = [\n 'recursiv brain',\n 'create-recursiv-app my-app',\n 'recursiv dev --port 3000',\n 'recursiv users me',\n 'recursiv deploy vercel',\n];\n\nconst HINTS = ['Tab or arrows to switch tabs.', '1/2/3 to jump instantly.', 'q or Esc to exit.'];\n\nconst INTEGRATIONS = ['Composio', 'E2B', 'OpenRouter'];\n\nconst INTRO_DURATION_MS = 5200;\nconst INTRO_STEPS = [\n 'Igniting cortex',\n 'Mapping synapses',\n 'Charging particles',\n 'Calibrating agents',\n 'Locking signal',\n];\nconst INTRO_HINTS = ['Press Space to skip', 'Press q to exit'];\n\nexport function App(props: { snapshot: ProjectSnapshot; animate: boolean }): React.ReactElement {\n const { snapshot, animate } = props;\n const { exit } = useApp();\n const { stdout } = useStdout();\n const [tab, setTab] = useState<TabKey>('overview');\n const [introActive, setIntroActive] = useState<boolean>(animate);\n\n const columns = stdout?.columns ?? process.stdout.columns ?? 100;\n const isNarrow = columns < 100;\n const fieldWidth = isNarrow ? Math.max(12, columns - 6) : 26;\n const fieldHeight = isNarrow ? 6 : 10;\n const navWidth = isNarrow ? undefined : 26;\n const infoWidth = isNarrow ? undefined : 34;\n\n const pulseIndex = useTicker(animate, 700, PULSE_FRAMES.length);\n const dotIndex = useTicker(animate, 450, DOT_FRAMES.length);\n const heroIndex = useTicker(animate, 2200, HERO_LINES.length);\n const barIndex = useTicker(animate, 140, BAR_FRAMES.length);\n const sweepIndex = useTicker(animate, 60, Math.max(10, Math.min(columns - 4, 120)));\n const scanIndex = useTicker(animate, 320, 9);\n const introProgress = useProgress(introActive && animate, INTRO_DURATION_MS, 80);\n const introFrame = useTicker(introActive && animate, 60, Math.max(10, columns - 6));\n\n const pulse = PULSE_FRAMES[pulseIndex];\n const dots = DOT_FRAMES[dotIndex];\n const hero = HERO_LINES[heroIndex];\n const bar = BAR_FRAMES[barIndex];\n\n useEffect(() => {\n if (!animate) {\n setIntroActive(false);\n return;\n }\n setIntroActive(true);\n const id = setTimeout(() => setIntroActive(false), INTRO_DURATION_MS);\n return () => clearTimeout(id);\n }, [animate]);\n\n useInput((input: string, key: Key) => {\n if (input === 'q' || key.escape) {\n exit();\n return;\n }\n\n if (introActive) {\n if (input === ' ' || key.return || input === 's') {\n setIntroActive(false);\n }\n return;\n }\n\n if (key.tab || key.rightArrow) {\n const next = (tabIndex(tab) + 1) % TABS.length;\n setTab(TABS[next].key);\n return;\n }\n\n if (key.leftArrow) {\n const prev = (tabIndex(tab) - 1 + TABS.length) % TABS.length;\n setTab(TABS[prev].key);\n return;\n }\n\n if (input === '1') setTab('overview');\n if (input === '2') setTab('commands');\n if (input === '3') setTab('stack');\n });\n\n if (introActive) {\n return (\n <IntroScreen\n width={columns}\n height={Math.max(14, fieldHeight + 6)}\n progress={introProgress}\n frame={introFrame}\n />\n );\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Header\n hero={hero}\n pulse={pulse}\n dots={dots}\n bar={bar}\n sweep={sweepIndex}\n width={columns}\n animate={animate}\n />\n\n <Box marginTop={1} flexDirection={isNarrow ? 'column' : 'row'}>\n <Box\n flexDirection=\"column\"\n width={navWidth}\n marginRight={isNarrow ? 0 : 2}\n marginBottom={isNarrow ? 1 : 0}\n >\n <Panel title=\"Brain Map\" accent={THEME.accent} borderStyle=\"round\">\n <NeuralField width={fieldWidth} height={fieldHeight} frame={sweepIndex} animate={animate} />\n <Text color={THEME.muted}>* neuron o synapse + particle ~ wave</Text>\n <Divider width={fieldWidth} />\n <SectionTitle label=\"Navigator\" />\n <Navigation active={tab} />\n <Divider />\n <SectionTitle label=\"Quick Actions\" />\n {QUICK_ACTIONS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n <Divider />\n <SectionTitle label=\"Hints\" />\n {HINTS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n </Panel>\n </Box>\n\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n marginRight={isNarrow ? 0 : 2}\n marginBottom={isNarrow ? 1 : 0}\n >\n <Panel title={tabTitle(tab)} accent={THEME.accentWarm} borderStyle=\"double\">\n <AnimatedMarkdown content={COPY[tab]} animate={animate} />\n </Panel>\n </Box>\n\n <Box flexDirection=\"column\" width={infoWidth}>\n <Panel title=\"Synapses\" accent={THEME.accentCool} borderStyle=\"round\">\n <ProjectPanel snapshot={snapshot} animate={animate} dots={dots} frame={sweepIndex} scanIndex={scanIndex} />\n </Panel>\n </Box>\n </Box>\n\n <Footer snapshot={snapshot} animate={animate} />\n </Box>\n );\n}\n\nfunction Header(props: {\n hero: string;\n pulse: string;\n dots: string;\n bar: string;\n sweep: number;\n width: number;\n animate: boolean;\n}): React.ReactElement {\n const { hero, pulse, dots, bar, sweep, width, animate } = props;\n const lineWidth = Math.max(32, Math.min(width - 4, 120));\n const pulseLabel = animate ? `${pulse}${dots}` : 'ready';\n const time = new Date().toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });\n const wordmarkPalette = rotatePalette(WORDMARK_COLORS, sweep);\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Wordmark lines={WORDMARK_LINES} palette={wordmarkPalette} />\n <Text color={THEME.muted}>{hero}</Text>\n <Text color={THEME.muted}>by Recursiv</Text>\n <Box marginTop={1} flexDirection=\"row\">\n <Box marginRight={2}>\n <StatusPill label=\"brain\" value={pulseLabel} tone={THEME.accent} />\n </Box>\n <Box marginRight={2}>\n <StatusPill label=\"clock\" value={time} tone={THEME.accentWarm} />\n </Box>\n <StatusPill label=\"waves\" value={bar} tone={THEME.accentCool} />\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n <Aurora width={lineWidth} frame={sweep} />\n </Box>\n <Box marginTop={1}>\n <AccentLine width={lineWidth} frame={sweep} />\n </Box>\n </Box>\n );\n}\n\nfunction Footer(props: { snapshot: ProjectSnapshot; animate: boolean }): React.ReactElement {\n const { snapshot, animate } = props;\n const projectHint = snapshot ? `${snapshot.name}` : 'no project loaded';\n const status = animate ? 'brain live' : 'brain ready';\n\n return (\n <Box marginTop={1} flexDirection=\"row\" justifyContent=\"space-between\">\n <Text color={THEME.muted}>Tab to switch | 1/2/3 to jump | q to quit</Text>\n <Text color={THEME.muted}>\n {status} | {projectHint}\n </Text>\n </Box>\n );\n}\n\nfunction Panel(props: {\n title: string;\n accent: string;\n borderStyle?: 'single' | 'double' | 'round' | 'classic';\n children: React.ReactNode;\n}): React.ReactElement {\n const { title, accent, borderStyle = 'round', children } = props;\n return (\n <Box flexDirection=\"column\" borderStyle={borderStyle} borderColor={accent} paddingX={1} paddingY={1}>\n <Text color={accent}>{title}</Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {children}\n </Box>\n </Box>\n );\n}\n\nfunction SectionTitle(props: { label: string }): React.ReactElement {\n return <Text color={THEME.accentWarm}>{props.label}</Text>;\n}\n\nfunction Navigation(props: { active: TabKey }): React.ReactElement {\n const { active } = props;\n return (\n <Box flexDirection=\"column\">\n {TABS.map((tab, index) => {\n const isActive = tab.key === active;\n const marker = isActive ? '>' : ' ';\n const color = isActive ? THEME.accent : THEME.muted;\n return (\n <Text key={tab.key} color={color}>\n {marker} {index + 1}. {tab.label}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction NeuralField(props: { width: number; height: number; frame: number; animate: boolean }): React.ReactElement {\n const { width, height, frame, animate } = props;\n const lines = useMemo(() => buildNeuralField(width, height, animate ? frame : 0), [width, height, frame, animate]);\n\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n const tone =\n line.includes('~') ||\n line.includes('*') ||\n line.includes('+') ||\n line.includes('o') ||\n line.includes('O')\n ? THEME.accentCool\n : THEME.muted;\n return (\n <Text key={index} color={tone}>\n {line}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction ProjectPanel(props: {\n snapshot: ProjectSnapshot;\n animate: boolean;\n dots: string;\n frame: number;\n scanIndex: number;\n}): React.ReactElement {\n const { snapshot, animate, dots, frame, scanIndex } = props;\n\n if (!snapshot) {\n return (\n <Box flexDirection=\"column\">\n <Text color={THEME.accentWarm}>Not in a Recursiv project.</Text>\n <Text color={THEME.muted}>Run create-recursiv-app to start.</Text>\n </Box>\n );\n }\n\n const status = animate ? `firing${dots}` : 'quiet';\n const apiStatus = snapshot.apiKeyConfigured ? 'linked' : 'missing';\n const apiTone = snapshot.apiKeyConfigured ? THEME.accentCool : THEME.danger;\n const meter = buildPulseMeter(animate ? frame : 0, 16);\n\n const fields = [\n { label: 'Name', value: snapshot.name },\n { label: 'Template', value: snapshot.template },\n { label: 'Framework', value: snapshot.framework },\n { label: 'Dev port', value: String(snapshot.port) },\n { label: 'Pkg mgr', value: snapshot.packageManager },\n { label: 'API base', value: snapshot.apiBaseUrl, dim: true },\n { label: 'API key', value: apiStatus, tone: apiTone },\n { label: 'Status', value: status, tone: THEME.accent },\n { label: 'Pulse', value: meter, tone: THEME.accentWarm },\n ];\n\n const activeIndex = fields.length > 0 ? scanIndex % fields.length : 0;\n const scanBar = buildScanBar(activeIndex, 18);\n\n return (\n <Box flexDirection=\"column\">\n {fields.map((field, index) => {\n const distance = Math.min(\n Math.abs(index - activeIndex),\n fields.length - Math.abs(index - activeIndex),\n );\n const glow: Glow = animate && distance === 0 ? 'strong' : animate && distance === 1 ? 'soft' : 'none';\n\n return (\n <Field\n key={field.label}\n label={field.label}\n value={field.value}\n dim={field.dim}\n tone={field.tone}\n glow={glow}\n />\n );\n })}\n <Text color={THEME.accentCool}>Neural scan {scanBar}</Text>\n <Divider />\n <SectionTitle label=\"Integrations\" />\n {INTEGRATIONS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n <Divider />\n <Text color={THEME.muted}>Dev cmd:</Text>\n <Text color={THEME.muted}>{snapshot.devCommand}</Text>\n </Box>\n );\n}\n\nfunction Field(props: { label: string; value: string; dim?: boolean; tone?: string; glow?: Glow }): React.ReactElement {\n const { label, value, dim, tone, glow = 'none' } = props;\n const marker = glow === 'strong' ? '>' : glow === 'soft' ? '-' : ' ';\n const paddedLabel = `${marker} ${label.padEnd(9, ' ')}`;\n const labelColor = glow === 'strong' ? THEME.accentWarm : glow === 'soft' ? THEME.accent : THEME.muted;\n const valueColor =\n glow === 'strong'\n ? THEME.bright\n : glow === 'soft'\n ? THEME.accentCool\n : tone ?? (dim ? THEME.muted : undefined);\n\n return (\n <Text>\n <Text color={labelColor}>{paddedLabel}</Text>\n <Text color={valueColor}>{value}</Text>\n </Text>\n );\n}\n\nfunction StatusPill(props: { label: string; value: string; tone: string }): React.ReactElement {\n const { label, value, tone } = props;\n return (\n <Text color={tone}>\n [{label}: {value}]\n </Text>\n );\n}\n\nfunction Wordmark(props: { lines: string[]; palette: string[] }): React.ReactElement {\n const { lines, palette } = props;\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n {lines.map((line, index) => (\n <Text key={index} color={palette[index % palette.length] ?? THEME.accent}>\n {line}\n </Text>\n ))}\n </Box>\n );\n}\n\nfunction ColorLine(props: { text: string; color: string }): React.ReactElement {\n return <Text color={props.color}>{props.text}</Text>;\n}\n\nfunction Aurora(props: { width: number; frame: number }): React.ReactElement {\n const { width, frame } = props;\n const lineWidth = Math.max(18, width);\n const lineA = buildAuroraLine(lineWidth, frame, 0);\n const lineB = buildInterferenceLine(lineWidth, frame + 7, 1);\n const lineC = buildAuroraLine(lineWidth, frame + 13, 2);\n const lineD = buildNeuronHalo(lineWidth, frame);\n const palette = rotatePalette(AURORA_COLORS, frame);\n const deepPalette = rotatePalette(AURORA_COLORS_DEEP, frame);\n\n return (\n <Box flexDirection=\"column\">\n <ColorLine text={lineA} color={palette[0]} />\n <ColorLine text={lineB} color={deepPalette[0]} />\n <ColorLine text={lineC} color={palette[1] ?? palette[0]} />\n <ColorLine text={lineD} color={palette[2] ?? palette[0]} />\n </Box>\n );\n}\n\nfunction Divider(props: { width?: number } = {}): React.ReactElement {\n const { width } = props;\n const lineWidth = Math.max(12, Math.min(32, width ?? 22));\n return <Text color={THEME.muted}>{'-'.repeat(lineWidth)}</Text>;\n}\n\nfunction AccentLine(props: { width: number; frame: number }): React.ReactElement {\n const { width, frame } = props;\n const lineWidth = Math.max(10, width);\n const head = Math.min(frame % lineWidth, lineWidth - 1);\n const left = '-'.repeat(head);\n const right = '-'.repeat(Math.max(0, lineWidth - head - 1));\n\n return (\n <Text color={THEME.muted}>\n {left}\n <Text color={THEME.accent}>*</Text>\n {right}\n </Text>\n );\n}\n\nfunction AnimatedMarkdown(props: { content: string; animate: boolean }): React.ReactElement {\n const { content, animate } = props;\n const safe = useMemo(() => content.replace(/\\r\\n/g, '\\n'), [content]);\n const lines = useMemo(() => safe.split('\\n'), [safe]);\n const [visibleLines, setVisibleLines] = useState(animate ? 1 : lines.length);\n\n useEffect(() => {\n if (!animate) {\n setVisibleLines(lines.length);\n return;\n }\n\n setVisibleLines(1);\n const id = setInterval(() => {\n setVisibleLines((current) => (current >= lines.length ? current : current + 1));\n }, 55);\n\n return () => clearInterval(id);\n }, [animate, lines.length, safe]);\n\n const sliceCount = Math.max(1, visibleLines);\n const text = animate ? lines.slice(0, sliceCount).join('\\n') : safe;\n\n return <MarkdownBlock content={text} />;\n}\n\nfunction MarkdownBlock(props: { content: string }): React.ReactElement {\n const lines = props.content.split('\\n');\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n if (line.startsWith('### ')) {\n return (\n <Text key={index} color={THEME.accentCool}>\n {line.slice(4)}\n </Text>\n );\n }\n if (line.startsWith('## ')) {\n return (\n <Text key={index} color={THEME.accentWarm}>\n {line.slice(3)}\n </Text>\n );\n }\n if (line.startsWith('# ')) {\n return (\n <Text key={index} color={THEME.accent}>\n {line.slice(2)}\n </Text>\n );\n }\n if (line.startsWith('- ')) {\n return (\n <Text key={index} color={THEME.muted}>\n - {line.slice(2)}\n </Text>\n );\n }\n if (/^\\d+\\.\\s/.test(line)) {\n return (\n <Text key={index} color={THEME.muted}>\n {line}\n </Text>\n );\n }\n if (line.trim().length === 0) {\n return <Text key={index}> </Text>;\n }\n return (\n <Text key={index} color={THEME.bright}>\n {line}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction useTicker(animate: boolean, intervalMs: number, length: number): number {\n const [tick, setTick] = useState(0);\n\n useEffect(() => {\n if (!animate || length <= 0) {\n setTick(0);\n return;\n }\n\n const id = setInterval(() => {\n setTick((current) => (current + 1) % length);\n }, intervalMs);\n\n return () => clearInterval(id);\n }, [animate, intervalMs, length]);\n\n return tick;\n}\n\nfunction tabIndex(tab: TabKey): number {\n return TABS.findIndex((item) => item.key === tab);\n}\n\nfunction tabTitle(tab: TabKey): string {\n const active = TABS.find((item) => item.key === tab);\n return active ? active.label : 'Overview';\n}\n\nfunction buildNeuralField(width: number, height: number, frame: number): string[] {\n const safeWidth = Math.max(8, width);\n const safeHeight = Math.max(4, height);\n const grid: string[][] = Array.from({ length: safeHeight }, () => Array(safeWidth).fill(' '));\n const phase = Math.floor(frame / 6);\n const rng = makeRng(phase * 109 + 97);\n const nodes: Array<{ x: number; y: number }> = [];\n\n const place = (x: number, y: number, char: string, priority = 0): void => {\n if (x < 0 || x >= safeWidth || y < 0 || y >= safeHeight) return;\n const current = grid[y][x];\n const currentPriority = current === '*' || current === 'O' ? 3 : current === 'o' ? 2 : current === '~' ? 1 : 0;\n if (priority >= currentPriority || current === ' ') {\n grid[y][x] = char;\n }\n };\n\n for (let y = 0; y < safeHeight; y += 1) {\n for (let x = 0; x < safeWidth; x += 1) {\n const roll = rng();\n if (roll < 0.018) {\n grid[y][x] = '*';\n nodes.push({ x, y });\n } else if (roll < 0.04) {\n grid[y][x] = 'o';\n nodes.push({ x, y });\n } else if (roll < 0.12) {\n grid[y][x] = '.';\n }\n }\n }\n\n const mid = Math.floor(safeHeight / 2);\n const amp = Math.max(1, Math.floor(safeHeight / 3));\n for (let x = 0; x < safeWidth; x += 1) {\n const y = Math.round(mid + Math.sin((x + frame * 0.6) / 3) * amp);\n place(x, y, '~', 1);\n if ((x + frame) % 11 === 0) place(x, y, '*', 3);\n }\n\n const mid2 = Math.floor(safeHeight / 3);\n const amp2 = Math.max(1, Math.floor(safeHeight / 4));\n for (let x = 0; x < safeWidth; x += 1) {\n const y = Math.round(mid2 + Math.sin((x + frame * 0.4) / 2.6) * amp2);\n place(x, y, '~', 1);\n if ((x + frame * 2) % 17 === 0) place(x, y, 'o', 2);\n }\n\n const particleCount = Math.max(2, Math.floor(safeWidth / 12));\n for (let i = 0; i < particleCount; i += 1) {\n const particleX = (frame * (i + 2) + i * 7) % safeWidth;\n const particleY = (frame * (i + 3) + i * 5) % safeHeight;\n place(particleX, particleY, '+', 2);\n }\n\n nodes.forEach((node) => {\n if (rng() < 0.35) {\n const length = 2 + Math.floor(rng() * 6);\n const drift = rng() < 0.5 ? 1 : -1;\n for (let step = 1; step <= length; step += 1) {\n const x = node.x + step;\n const y = node.y + (rng() < 0.3 ? drift : 0);\n place(x, y, rng() < 0.5 ? '-' : '=', 0);\n }\n }\n if ((node.x + frame) % 14 === 0) {\n place(node.x, node.y, 'O', 3);\n }\n });\n\n return grid.map((row) => row.join(''));\n}\n\nfunction buildAuroraLine(width: number, frame: number, offset: number): string {\n const safeWidth = Math.max(10, width);\n const chars = [' ', ' ', '.', ':', '-', '=', '+', '*'];\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const phase = (x + frame * 0.9 + offset * 7) / 4;\n const wave = Math.sin(phase) * 0.6 + Math.sin(phase / 2 + offset) * 0.4 + 1;\n const normalized = Math.max(0, Math.min(1, wave / 2));\n const idx = Math.min(chars.length - 1, Math.floor(normalized * (chars.length - 1)));\n line += chars[idx];\n }\n return line;\n}\n\nfunction buildInterferenceLine(width: number, frame: number, offset: number): string {\n const safeWidth = Math.max(10, width);\n const chars = [' ', '.', ':', '-', '=', '+', '*', '#'];\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const waveA = Math.sin((x + frame * 0.6 + offset * 5) / 3);\n const waveB = Math.sin((x * 0.6 + frame * 0.3) / 2.1);\n const waveC = Math.sin((x * 1.2 + frame * 0.9) / 4.6);\n const mix = (waveA + waveB + waveC + 3) / 6;\n const idx = Math.min(chars.length - 1, Math.floor(mix * (chars.length - 1)));\n line += chars[idx];\n }\n return line;\n}\n\nfunction buildNeuronHalo(width: number, frame: number): string {\n const safeWidth = Math.max(10, width);\n const rng = makeRng((Math.floor(frame / 4) + 11) * 233);\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const roll = rng();\n if (roll < 0.04) line += '*';\n else if (roll < 0.08) line += 'o';\n else if (roll < 0.11) line += '.';\n else line += ' ';\n }\n return line;\n}\n\nfunction buildPulseMeter(frame: number, width: number): string {\n const safeWidth = Math.max(8, width);\n const head = frame % safeWidth;\n let line = '';\n for (let i = 0; i < safeWidth; i += 1) {\n if (i === head) {\n line += '*';\n } else if (Math.abs(i - head) === 1) {\n line += '+';\n } else if ((i + frame) % 5 === 0) {\n line += '-';\n } else {\n line += '.';\n }\n }\n return line;\n}\n\nfunction buildScanBar(position: number, width: number): string {\n const safeWidth = Math.max(8, width);\n if (position < 0) return '[' + '.'.repeat(safeWidth) + ']';\n const head = position % safeWidth;\n let line = '';\n for (let i = 0; i < safeWidth; i += 1) {\n if (i === head) line += '>';\n else if (Math.abs(i - head) === 1) line += '=';\n else line += '.';\n }\n return `[${line}]`;\n}\n\nfunction makeRng(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 4294967295;\n };\n}\n\nfunction rotatePalette(palette: string[], frame: number): string[] {\n if (palette.length === 0) return palette;\n const offset = frame % palette.length;\n return [...palette.slice(offset), ...palette.slice(0, offset)];\n}\n\nfunction useProgress(active: boolean, durationMs: number, stepMs: number): number {\n const [progress, setProgress] = useState(active ? 0 : 1);\n\n useEffect(() => {\n if (!active) {\n setProgress(1);\n return;\n }\n\n setProgress(0);\n const start = Date.now();\n const id = setInterval(() => {\n const value = Math.min(1, (Date.now() - start) / durationMs);\n setProgress(value);\n if (value >= 1) clearInterval(id);\n }, stepMs);\n\n return () => clearInterval(id);\n }, [active, durationMs, stepMs]);\n\n return progress;\n}\n\nfunction IntroScreen(props: { width: number; height: number; progress: number; frame: number }): React.ReactElement {\n const { width, height, progress, frame } = props;\n const fieldWidth = Math.max(24, width - 6);\n const fieldHeight = Math.max(10, Math.min(14, height));\n const steps = INTRO_STEPS.map((label, index) => ({\n label,\n done: progress >= (index + 1) / INTRO_STEPS.length,\n }));\n const bar = buildProgressBar(progress, Math.max(16, Math.min(34, Math.floor(width / 3))));\n const palette = rotatePalette(WORDMARK_COLORS, frame);\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Wordmark lines={WORDMARK_LINES} palette={palette} />\n <Text color={THEME.muted}>Neural ignition sequence</Text>\n </Box>\n <Box marginTop={1} flexDirection=\"column\" alignItems=\"center\">\n <ColorLine text={bar} color={THEME.accentWarm} />\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n {steps.map((step, index) => (\n <Text key={index} color={step.done ? THEME.accent : THEME.muted}>\n [{step.done ? 'x' : ' '}] {step.label}\n </Text>\n ))}\n </Box>\n <Box marginTop={1}>\n <NeuralField width={fieldWidth} height={fieldHeight} frame={frame} animate />\n </Box>\n <Box marginTop={1}>\n {INTRO_HINTS.map((hint) => (\n <Text key={hint} color={THEME.muted}>\n {hint}\n </Text>\n ))}\n </Box>\n </Box>\n );\n}\n\nfunction buildProgressBar(progress: number, width: number): string {\n const safeWidth = Math.max(10, width);\n const filled = Math.round(progress * safeWidth);\n const left = '='.repeat(filled);\n const right = '.'.repeat(Math.max(0, safeWidth - filled));\n return `[${left}${right}]`;\n}\n","import { brainCommand } from './brain.js';\n\nexport async function studioCommand(opts: { anim?: boolean }): Promise<void> {\n await brainCommand(opts);\n}\n","import pc from 'picocolors';\nimport { apiRequest, getApiContext } from '../lib/api.js';\nimport { log } from '../lib/logger.js';\n\ntype ListOpts = {\n limit?: string;\n offset?: string;\n json?: boolean;\n};\n\nexport async function usersMeCommand(opts: { json?: boolean }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, { method: 'GET', path: 'users/me' });\n output(res, opts.json, (data) => {\n log.blank();\n console.log(pc.bold('User'));\n console.log(` ${pc.dim('id')}: ${data.id}`);\n console.log(` ${pc.dim('name')}: ${data.name ?? '-'}`);\n console.log(` ${pc.dim('username')}: ${data.username ?? '-'}`);\n console.log(` ${pc.dim('email')}: ${data.email ?? '-'}`);\n console.log(` ${pc.dim('followers')}: ${data.followers_count ?? 0}`);\n console.log(` ${pc.dim('following')}: ${data.following_count ?? 0}`);\n console.log(` ${pc.dim('posts')}: ${data.posts_count ?? 0}`);\n log.blank();\n });\n}\n\nexport async function communitiesListCommand(opts: ListOpts): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'communities',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Communities'));\n data.forEach((comm: any) => {\n const name = pc.bold(comm.name);\n const slug = comm.slug ? pc.dim(`/${comm.slug}`) : '';\n const members = pc.dim(`members ${comm.member_count ?? 0}`);\n console.log(` ${name} ${slug} ${members}`);\n if (comm.description) console.log(` ${pc.dim(comm.description)}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function communitiesCreateCommand(opts: {\n name?: string;\n slug?: string;\n description?: string;\n privacy?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.name || !opts.slug) {\n log.error('Missing required flags: --name and --slug');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'communities',\n body: {\n name: opts.name,\n slug: opts.slug,\n description: opts.description,\n privacy: opts.privacy ?? 'public',\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Community created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nexport async function postsListCommand(opts: ListOpts & { communityId?: string; authorId?: string }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'posts',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n community_id: opts.communityId,\n author_id: opts.authorId,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Posts'));\n data.forEach((post: any) => {\n const author = post.author?.username ? `@${post.author.username}` : 'unknown';\n const content = truncate(post.content ?? '', 100);\n console.log(` ${pc.bold(author)} ${pc.dim(post.id)}`);\n console.log(` ${content}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function postsCreateCommand(opts: {\n content?: string;\n markdown?: boolean;\n communityId?: string;\n organizationId?: string;\n replyToId?: string;\n tagIds?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.content) {\n log.error('Missing required flag: --content');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const tagIds = opts.tagIds ? opts.tagIds.split(',').map((id) => id.trim()).filter(Boolean) : undefined;\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'posts',\n body: {\n content: opts.content,\n content_format: opts.markdown ? 'markdown' : 'plain',\n community_id: opts.communityId,\n organization_id: opts.organizationId,\n reply_to_id: opts.replyToId,\n tag_ids: tagIds,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Post created: ${pc.dim(data.id)}`);\n });\n}\n\nexport async function projectsListCommand(opts: ListOpts & { organizationId?: string }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'projects',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n organization_id: opts.organizationId,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Projects'));\n data.forEach((proj: any) => {\n const name = pc.bold(proj.name);\n const slug = proj.slug ? pc.dim(`/${proj.slug}`) : '';\n const org = proj.organization?.slug ? pc.dim(`org ${proj.organization.slug}`) : '';\n console.log(` ${name} ${slug} ${org}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function projectsCreateCommand(opts: {\n organizationId?: string;\n name?: string;\n slug?: string;\n repoUrl?: string;\n templateSource?: string;\n templateUrl?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.organizationId || !opts.name) {\n log.error('Missing required flags: --org and --name');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'projects',\n body: {\n organization_id: opts.organizationId,\n name: opts.name,\n slug: opts.slug,\n repo_url: opts.repoUrl,\n template_source: opts.templateSource ?? 'default',\n custom_template_url: opts.templateUrl,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Project created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nexport async function agentsListCommand(opts: ListOpts): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'agents',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Agents'));\n data.forEach((agent: any) => {\n const name = pc.bold(agent.name);\n const handle = agent.username ? pc.dim(`@${agent.username}`) : '';\n const model = agent.model ? pc.dim(agent.model) : '';\n console.log(` ${name} ${handle} ${model}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function agentsCreateCommand(opts: {\n name?: string;\n username?: string;\n bio?: string;\n model?: string;\n systemPrompt?: string;\n socialMode?: string;\n postFrequency?: string;\n toolMode?: string;\n dailyRequestLimit?: string;\n organizationId?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.name || !opts.username) {\n log.error('Missing required flags: --name and --username');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'agents',\n body: {\n name: opts.name,\n username: opts.username,\n bio: opts.bio,\n model: opts.model,\n system_prompt: opts.systemPrompt,\n social_mode: opts.socialMode,\n post_frequency: opts.postFrequency,\n tool_mode: opts.toolMode,\n daily_request_limit: opts.dailyRequestLimit ? Number(opts.dailyRequestLimit) : undefined,\n organization_id: opts.organizationId,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Agent created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nfunction output(\n res: { data: any; meta?: any },\n json: boolean | undefined,\n render: (data: any, meta?: any) => void\n): void {\n if (json) {\n console.log(JSON.stringify(res, null, 2));\n return;\n }\n render(res.data, res.meta);\n}\n\nfunction printMeta(meta?: { limit?: number; offset?: number; has_more?: boolean }): void {\n if (!meta) return;\n log.blank();\n console.log(pc.dim(`limit ${meta.limit ?? 0} offset ${meta.offset ?? 0} has_more ${meta.has_more ?? false}`));\n log.blank();\n}\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return value.slice(0, max - 1) + '…';\n}\n","import pc from 'picocolors';\nimport { readConfig } from './config.js';\nimport { readApiKeyFromEnv } from './env.js';\nimport { log } from './logger.js';\n\nexport type ApiContext = {\n baseUrl: string;\n apiKey: string;\n};\n\nexport async function getApiContext(cwd: string): Promise<ApiContext> {\n const config = await readConfig(cwd);\n const apiKey = await readApiKeyFromEnv(cwd);\n if (!apiKey) {\n log.error('No API key configured.');\n log.info(`Run ${pc.bold('recursiv auth login')} to set your key.`);\n process.exit(1);\n }\n\n return {\n baseUrl: config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1',\n apiKey,\n };\n}\n\nexport async function apiRequest<T>(ctx: ApiContext, opts: {\n method: 'GET' | 'POST';\n path: string;\n query?: Record<string, string | number | undefined>;\n body?: unknown;\n}): Promise<T> {\n const url = new URL(opts.path, ctx.baseUrl.endsWith('/') ? ctx.baseUrl : ctx.baseUrl + '/');\n if (opts.query) {\n Object.entries(opts.query).forEach(([key, value]) => {\n if (value === undefined || value === null || value === '') return;\n url.searchParams.set(key, String(value));\n });\n }\n\n const res = await fetch(url, {\n method: opts.method,\n headers: {\n Authorization: `Bearer ${ctx.apiKey}`,\n Accept: 'application/json',\n ...(opts.body ? { 'Content-Type': 'application/json' } : {}),\n },\n body: opts.body ? JSON.stringify(opts.body) : undefined,\n });\n\n const text = await res.text();\n const payload = safeJson(text);\n\n if (!res.ok) {\n const message =\n payload?.error?.message ||\n payload?.message ||\n `Request failed (${res.status} ${res.statusText})`;\n throw new Error(message);\n }\n\n return (payload ?? {}) as T;\n}\n\nfunction safeJson(text: string): any {\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":["existsSync","prompts","pc","ora","readFile","writeFile","join","pc","pc","join","writeFile","prompts","existsSync","pc","ora","pc","pc","writeFile","resolve","pc","ora","pc","ora","writeFile","resolve","pc","pc","pc","pc","jsx","pc","pc","pc","pc","render"]}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/recursiv.ts","../../src/commands/init.ts","../../src/lib/logger.ts","../../src/lib/config.ts","../../src/lib/env.ts","../../src/lib/templates.ts","../../src/lib/auth-flow.ts","../../src/lib/package-manager.ts","../../src/templates/registry.ts","../../src/commands/dev.ts","../../src/commands/deploy.ts","../../src/commands/auth.ts","../../src/commands/info.ts","../../src/commands/brain.tsx","../../src/ui/app.tsx","../../src/commands/studio.tsx","../../src/commands/api.ts","../../src/lib/api.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { initCommand } from '../commands/init.js';\nimport { devCommand } from '../commands/dev.js';\nimport { deployCommand } from '../commands/deploy.js';\nimport { loginCommand, logoutCommand, whoamiCommand } from '../commands/auth.js';\nimport { infoCommand } from '../commands/info.js';\nimport { brainCommand } from '../commands/brain.js';\nimport { studioCommand } from '../commands/studio.js';\nimport {\n agentsCreateCommand,\n agentsListCommand,\n communitiesCreateCommand,\n communitiesListCommand,\n postsCreateCommand,\n postsListCommand,\n projectsCreateCommand,\n projectsListCommand,\n usersMeCommand,\n} from '../commands/api.js';\n\nconst program = new Command();\n\nprogram\n .name('recursiv')\n .description('Recursiv CLI — build and ship apps with AI')\n .version('0.1.0');\n\nprogram\n .command('create [name]')\n .description('Create a new Recursiv application')\n .action(async (name?: string) => {\n try {\n await initCommand(name);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('dev')\n .description('Start the development server')\n .option('-p, --port <port>', 'port to run on')\n .action(async (opts: { port?: string }) => {\n try {\n await devCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('deploy <target>')\n .description('Generate deployment config (vercel, docker, render, railway, cloud)')\n .action(async (target: string) => {\n try {\n await deployCommand(target);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst auth = program\n .command('auth')\n .description('Manage API authentication');\n\nauth\n .command('login')\n .description('Set or update your API key')\n .action(async () => {\n try {\n await loginCommand();\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nauth\n .command('logout')\n .description('Remove API key from .env')\n .action(async () => {\n try {\n await logoutCommand();\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nauth\n .command('whoami')\n .description('Show current authenticated user')\n .action(async () => {\n try {\n await whoamiCommand();\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('info')\n .description('Display project information')\n .action(async () => {\n try {\n await infoCommand();\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst users = program.command('users').description('Users API');\nusers\n .command('me')\n .description('Show current authenticated user')\n .option('--json', 'Output JSON')\n .action(async (opts: { json?: boolean }) => {\n try {\n await usersMeCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst communities = program.command('communities').description('Communities API');\ncommunities\n .command('list')\n .description('List communities')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { limit?: string; offset?: string; json?: boolean }) => {\n try {\n await communitiesListCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\ncommunities\n .command('create')\n .description('Create a community')\n .requiredOption('--name <name>', 'community name')\n .requiredOption('--slug <slug>', 'community slug')\n .option('--description <description>', 'description')\n .option('--privacy <privacy>', 'public | private | hidden', 'public')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n name?: string;\n slug?: string;\n description?: string;\n privacy?: string;\n json?: boolean;\n }) => {\n try {\n await communitiesCreateCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst posts = program.command('posts').description('Posts API');\nposts\n .command('list')\n .description('List posts')\n .option('--community-id <id>', 'filter by community')\n .option('--author-id <id>', 'filter by author')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n communityId?: string;\n authorId?: string;\n limit?: string;\n offset?: string;\n json?: boolean;\n }) => {\n try {\n await postsListCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nposts\n .command('create')\n .description('Create a post')\n .requiredOption('--content <content>', 'post content')\n .option('--markdown', 'content is markdown')\n .option('--community-id <id>', 'community id')\n .option('--organization-id <id>', 'organization id')\n .option('--reply-to-id <id>', 'reply to post id')\n .option('--tag-ids <ids>', 'comma-separated tag ids')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n content?: string;\n markdown?: boolean;\n communityId?: string;\n organizationId?: string;\n replyToId?: string;\n tagIds?: string;\n json?: boolean;\n }) => {\n try {\n await postsCreateCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst projects = program.command('projects').description('Projects API');\nprojects\n .command('list')\n .description('List projects')\n .option('--org <id>', 'organization id')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { org?: string; limit?: string; offset?: string; json?: boolean }) => {\n try {\n await projectsListCommand({\n organizationId: opts.org,\n limit: opts.limit,\n offset: opts.offset,\n json: opts.json,\n });\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprojects\n .command('create')\n .description('Create a project')\n .requiredOption('--org <id>', 'organization id')\n .requiredOption('--name <name>', 'project name')\n .option('--slug <slug>', 'project slug')\n .option('--repo <url>', 'repo URL')\n .option('--template <source>', 'default | custom', 'default')\n .option('--template-url <url>', 'custom template URL')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n org?: string;\n name?: string;\n slug?: string;\n repo?: string;\n template?: string;\n templateUrl?: string;\n json?: boolean;\n }) => {\n try {\n await projectsCreateCommand({\n organizationId: opts.org,\n name: opts.name,\n slug: opts.slug,\n repoUrl: opts.repo,\n templateSource: opts.template,\n templateUrl: opts.templateUrl,\n json: opts.json,\n });\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nconst agents = program.command('agents').description('Agents API');\nagents\n .command('list')\n .description('List agents')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { limit?: string; offset?: string; json?: boolean }) => {\n try {\n await agentsListCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nagents\n .command('create')\n .description('Create an AI agent')\n .requiredOption('--name <name>', 'agent name')\n .requiredOption('--username <username>', 'agent username')\n .option('--bio <bio>', 'agent bio')\n .option('--model <model>', 'model id')\n .option('--system-prompt <prompt>', 'system prompt')\n .option('--social-mode <mode>', 'chat_only | chat_post')\n .option('--post-frequency <freq>', 'never | light | medium | heavy')\n .option('--tool-mode <mode>', 'chat_only | permission | autonomous')\n .option('--daily-request-limit <n>', 'daily request limit')\n .option('--org <id>', 'organization id')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n name?: string;\n username?: string;\n bio?: string;\n model?: string;\n systemPrompt?: string;\n socialMode?: string;\n postFrequency?: string;\n toolMode?: string;\n dailyRequestLimit?: string;\n org?: string;\n json?: boolean;\n }) => {\n try {\n await agentsCreateCommand({\n name: opts.name,\n username: opts.username,\n bio: opts.bio,\n model: opts.model,\n systemPrompt: opts.systemPrompt,\n socialMode: opts.socialMode,\n postFrequency: opts.postFrequency,\n toolMode: opts.toolMode,\n dailyRequestLimit: opts.dailyRequestLimit,\n organizationId: opts.org,\n json: opts.json,\n });\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('brain')\n .description('Launch the interactive Recursiv brain')\n .option('--no-anim', 'Disable animations')\n .action(async (opts: { anim?: boolean }) => {\n try {\n await brainCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nprogram\n .command('studio')\n .description('Legacy alias for brain')\n .option('--no-anim', 'Disable animations')\n .action(async (opts: { anim?: boolean }) => {\n try {\n await studioCommand(opts);\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\nasync function runDefaultBrain(): Promise<void> {\n try {\n await brainCommand({});\n } catch (err) {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n}\n\nfunction shouldAutoLaunchBrain(args: string[]): boolean {\n if (process.env.RECURSIV_BRAIN === '1') return true;\n if (process.env.RECURSIV_BRAIN === '0') return false;\n if (process.env.RECURSIV_STUDIO === '1') return true;\n if (process.env.RECURSIV_STUDIO === '0') return false;\n if (args.length > 0) return false;\n if (!process.stdout.isTTY) return false;\n if (process.env.CI) return false;\n return true;\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n if (args.includes('--brain') || args.includes('--studio')) {\n const filtered = args.filter((arg) => arg !== '--brain' && arg !== '--studio');\n process.argv = [process.argv[0], process.argv[1], ...filtered];\n const noAnim = filtered.includes('--no-anim');\n await brainCommand({ anim: !noAnim });\n return;\n }\n\n if (shouldAutoLaunchBrain(args)) {\n await runDefaultBrain();\n return;\n }\n\n program.parse();\n}\n\nvoid main();\n","import { existsSync } from 'node:fs';\nimport { mkdir, rename } from 'node:fs/promises';\nimport { resolve, basename } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport prompts from 'prompts';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log, banner } from '../lib/logger.js';\nimport { createConfig, writeConfig } from '../lib/config.js';\nimport { writeEnvFile } from '../lib/env.js';\nimport { cloneTemplate } from '../lib/templates.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { detectFromUserAgent, installCommand, runCommand } from '../lib/package-manager.js';\nimport { templates, type Template } from '../templates/registry.js';\nimport { writeFile } from 'node:fs/promises';\n\nexport async function initCommand(nameArg?: string): Promise<void> {\n banner();\n\n const totalSteps = 7;\n\n // 1. Project name\n log.step(1, totalSteps, 'Project setup');\n let projectName: string;\n if (nameArg) {\n projectName = nameArg;\n } else {\n const { name } = await prompts(\n {\n type: 'text',\n name: 'name',\n message: 'Project name',\n initial: 'my-recursiv-app',\n validate: (v: string) => (v.trim() ? true : 'Name is required'),\n },\n { onCancel: () => process.exit(1) }\n );\n projectName = name;\n }\n\n const projectDir = resolve(process.cwd(), projectName);\n\n if (existsSync(projectDir)) {\n log.error(`Directory ${pc.bold(projectName)} already exists`);\n process.exit(1);\n }\n\n // 2. Template selection\n log.step(2, totalSteps, 'Choose a template');\n const templateChoices = templates.map((t) => ({\n title: t.recommended ? `${t.name} ${pc.dim('(recommended)')}` : t.name,\n description: t.description,\n value: t.id,\n }));\n\n const { templateId } = await prompts(\n {\n type: 'select',\n name: 'templateId',\n message: 'Template',\n choices: templateChoices,\n initial: 0,\n },\n { onCancel: () => process.exit(1) }\n );\n\n const template = templates.find((t) => t.id === templateId) as Template;\n\n // 3. API key\n log.step(3, totalSteps, 'Authentication');\n const apiKey = await getOrCreateApiKey('https://api.recursiv.io/api/v1');\n\n // 4. Clone template\n log.step(4, totalSteps, 'Creating project');\n await mkdir(projectDir, { recursive: true });\n await cloneTemplate(template, projectDir);\n\n // Fix: next.config.ts not supported by older Next.js — rename to .mjs\n const nextConfigTs = resolve(projectDir, 'next.config.ts');\n if (existsSync(nextConfigTs)) {\n await rename(nextConfigTs, resolve(projectDir, 'next.config.mjs'));\n }\n\n // 5. Write config files\n log.step(5, totalSteps, 'Writing config');\n const pm = detectFromUserAgent();\n\n const config = createConfig({\n name: projectName,\n template: template.id,\n framework: template.framework,\n port: template.devPort,\n devCommand: runCommand(pm, 'dev'),\n });\n await writeConfig(projectDir, config);\n\n if (apiKey) {\n await writeEnvFile(projectDir, apiKey);\n }\n\n // Write .gitignore if it doesn't exist\n const gitignorePath = resolve(projectDir, '.gitignore');\n if (!existsSync(gitignorePath)) {\n await writeFile(\n gitignorePath,\n ['node_modules', 'dist', '.env', '.env.local', '.next', '.turbo', ''].join('\\n'),\n 'utf-8'\n );\n }\n\n // 6. Install dependencies\n log.step(6, totalSteps, 'Installing dependencies');\n const installSpinner = ora(`Running ${pc.bold(installCommand(pm))}...`).start();\n try {\n execSync(installCommand(pm), {\n cwd: projectDir,\n stdio: 'pipe',\n timeout: 120_000,\n });\n installSpinner.succeed('Dependencies installed');\n } catch {\n installSpinner.warn('Could not install dependencies — run install manually');\n }\n\n // 7. Init git\n log.step(7, totalSteps, 'Initializing git');\n try {\n execSync('git init', { cwd: projectDir, stdio: 'pipe' });\n execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });\n execSync('git commit -m \"Initial commit from create-recursiv-app\"', {\n cwd: projectDir,\n stdio: 'pipe',\n });\n log.success('Git repository initialized');\n } catch {\n log.warn('Could not initialize git repository');\n }\n\n // Done!\n log.blank();\n console.log(pc.bold(pc.green('Your Recursiv app is ready!')));\n log.blank();\n console.log(' Next steps:');\n console.log();\n console.log(` ${pc.dim('$')} cd ${projectName}`);\n if (!apiKey) {\n console.log(` ${pc.dim('$')} ${pc.dim('# Add your API key to .env')}`);\n }\n console.log(` ${pc.dim('$')} ${runCommand(pm, 'dev')}`);\n log.blank();\n console.log(pc.dim('Docs: https://docs.recursiv.io'));\n console.log(pc.dim('Dashboard: https://recursiv.io/dashboard'));\n log.blank();\n}\n","import pc from 'picocolors';\n\nexport const log = {\n info(msg: string) {\n console.log(pc.cyan('info') + ' ' + msg);\n },\n success(msg: string) {\n console.log(pc.green('ok') + ' ' + msg);\n },\n warn(msg: string) {\n console.log(pc.yellow('warn') + ' ' + msg);\n },\n error(msg: string) {\n console.error(pc.red('error') + ' ' + msg);\n },\n step(n: number, total: number, msg: string) {\n console.log(pc.dim(`[${n}/${total}]`) + ' ' + msg);\n },\n blank() {\n console.log();\n },\n};\n\nexport function banner() {\n console.log();\n console.log(pc.bold('Recursiv') + pc.dim(' — build and ship apps with AI'));\n console.log();\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface RecursivConfig {\n version: number;\n project: {\n name: string;\n template: string;\n framework: string;\n };\n api: {\n baseUrl: string;\n };\n dev: {\n port: number;\n command: string;\n };\n}\n\nconst CONFIG_FILE = '.recursiv.json';\n\nexport function configPath(dir: string): string {\n return join(dir, CONFIG_FILE);\n}\n\nexport async function readConfig(dir: string): Promise<RecursivConfig | null> {\n try {\n const raw = await readFile(configPath(dir), 'utf-8');\n return JSON.parse(raw) as RecursivConfig;\n } catch {\n return null;\n }\n}\n\nexport async function writeConfig(dir: string, config: RecursivConfig): Promise<void> {\n await writeFile(configPath(dir), JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function createConfig(opts: {\n name: string;\n template: string;\n framework: string;\n port?: number;\n devCommand?: string;\n}): RecursivConfig {\n return {\n version: 1,\n project: {\n name: opts.name,\n template: opts.template,\n framework: opts.framework,\n },\n api: {\n baseUrl: 'https://api.recursiv.io/api/v1',\n },\n dev: {\n port: opts.port ?? 3000,\n command: opts.devCommand ?? 'npm run dev',\n },\n };\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport async function writeEnvFile(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n const content = [\n '# Recursiv API key',\n `RECURSIV_API_KEY=${apiKey}`,\n '',\n '# Framework-specific public keys (uncomment as needed)',\n `# NEXT_PUBLIC_RECURSIV_API_KEY=${apiKey}`,\n `# VITE_RECURSIV_API_KEY=${apiKey}`,\n '',\n ].join('\\n');\n await writeFile(envPath, content, 'utf-8');\n}\n\nexport async function readApiKeyFromEnv(dir: string): Promise<string | null> {\n try {\n const raw = await readFile(join(dir, '.env'), 'utf-8');\n const match = raw.match(/^RECURSIV_API_KEY=(.+)$/m);\n return match?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function updateApiKeyInEnv(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n let content: string;\n try {\n content = await readFile(envPath, 'utf-8');\n if (content.includes('RECURSIV_API_KEY=')) {\n content = content.replace(/^RECURSIV_API_KEY=.+$/m, `RECURSIV_API_KEY=${apiKey}`);\n } else {\n content += `\\nRECURSIV_API_KEY=${apiKey}\\n`;\n }\n } catch {\n content = `RECURSIV_API_KEY=${apiKey}\\n`;\n }\n await writeFile(envPath, content, 'utf-8');\n}\n","import degit from 'degit';\nimport ora from 'ora';\nimport type { Template } from '../templates/registry.js';\n\nexport async function cloneTemplate(template: Template, dest: string): Promise<void> {\n const spinner = ora(`Cloning ${template.name} template...`).start();\n try {\n const emitter = degit(template.repo, {\n cache: false,\n force: true,\n verbose: false,\n });\n\n await emitter.clone(dest);\n spinner.succeed(`Template cloned successfully`);\n } catch (err) {\n spinner.fail('Failed to clone template');\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Could not clone template from ${template.repo}.\\n` +\n `Make sure you have internet access and the repo exists.\\n` +\n `Details: ${message}`\n );\n }\n}\n","import prompts from 'prompts';\nimport pc from 'picocolors';\nimport { log } from './logger.js';\n\nconst API_KEY_PATTERN = /^sk_(live|test)_[a-zA-Z0-9]{20,}$/;\nconst DASHBOARD_URL = 'https://recursiv.io/dashboard/api-keys';\n\nconst DEFAULT_SCOPES = [\n 'posts:read',\n 'posts:write',\n 'chat:read',\n 'chat:write',\n 'agents:read',\n 'agents:write',\n 'projects:read',\n 'projects:write',\n 'communities:read',\n 'communities:write',\n 'users:read',\n];\n\nexport function isValidKeyFormat(key: string): boolean {\n return API_KEY_PATTERN.test(key);\n}\n\nexport async function validateApiKey(apiKey: string, baseUrl: string): Promise<boolean> {\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Terminal signup flow — create a Recursiv account and API key without a browser.\n *\n * Flow:\n * 1. Prompt for email + password\n * 2. Try signup (or signin if account exists)\n * 3. Use session cookie to create an API key via REST endpoint\n * 4. Return the API key string\n */\nexport async function terminalSignup(baseUrl: string): Promise<string | null> {\n // baseUrl is like https://recursiv.io/api/v1 — we need the root for auth endpoints\n const rootUrl = baseUrl.replace(/\\/api\\/v1\\/?$/, '');\n\n console.log();\n console.log(pc.bold('Create a free Recursiv account'));\n console.log(pc.dim('Free tier: 1,000 API calls/day, 1 agent, 3 projects'));\n console.log();\n\n const { email } = await prompts(\n {\n type: 'text',\n name: 'email',\n message: 'Email',\n validate: (v: string) => {\n if (!v || !v.includes('@')) return 'Valid email required';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n const { password } = await prompts(\n {\n type: 'password',\n name: 'password',\n message: 'Password',\n validate: (v: string) => {\n if (!v || v.length < 12) return 'Password must be at least 12 characters';\n if (!/[a-zA-Z]/.test(v) || !/[0-9]/.test(v))\n return 'Password must contain both letters and numbers';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n // Try signup first\n let sessionCookie: string | null = null;\n let isNewAccount = false;\n\n // Better Auth requires an Origin header for CSRF protection\n const origin = rootUrl || 'https://api.recursiv.io';\n const authHeaders = { 'Content-Type': 'application/json', Origin: origin };\n\n try {\n const signupRes = await fetch(`${rootUrl}/api/auth/sign-up/email`, {\n method: 'POST',\n headers: authHeaders,\n body: JSON.stringify({\n email,\n password,\n name: email.split('@')[0],\n }),\n redirect: 'manual',\n });\n\n if (signupRes.ok || signupRes.status === 302) {\n sessionCookie = extractSessionCookie(signupRes);\n isNewAccount = true;\n } else if (signupRes.status === 409 || signupRes.status === 422) {\n // Account already exists — try signing in\n const signinRes = await fetch(`${rootUrl}/api/auth/sign-in/email`, {\n method: 'POST',\n headers: authHeaders,\n body: JSON.stringify({ email, password }),\n redirect: 'manual',\n });\n\n if (signinRes.ok || signinRes.status === 302) {\n sessionCookie = extractSessionCookie(signinRes);\n } else {\n const errBody = await signinRes.text().catch(() => '');\n log.error(`Login failed (${signinRes.status}): ${errBody || 'Invalid credentials'}`);\n return null;\n }\n } else {\n const errBody = await signupRes.text().catch(() => '');\n log.error(`Signup failed (${signupRes.status}): ${errBody || 'Unknown error'}`);\n return null;\n }\n } catch (err) {\n log.error(\n `Could not reach ${rootUrl} — ${err instanceof Error ? err.message : 'network error'}`,\n );\n log.info(`You can create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n if (!sessionCookie) {\n log.error('No session returned from server');\n log.info(`Create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n if (isNewAccount) {\n log.success('Account created');\n } else {\n log.success('Signed in');\n }\n\n // Create an API key using the session\n try {\n const keyRes = await fetch(`${baseUrl}/api-keys`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Cookie: sessionCookie,\n },\n body: JSON.stringify({\n name: 'CLI (auto-created)',\n scopes: DEFAULT_SCOPES,\n }),\n });\n\n if (!keyRes.ok) {\n const errBody = await keyRes.text().catch(() => '');\n log.error(`Failed to create API key (${keyRes.status}): ${errBody}`);\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n const { data } = (await keyRes.json()) as { data: { key: string } };\n log.success(`API key created (free tier: 1,000 calls/day)`);\n return data.key;\n } catch (err) {\n log.error(\n `Failed to create API key: ${err instanceof Error ? err.message : 'unknown error'}`,\n );\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n}\n\n/**\n * Extract session cookie from a Better Auth response.\n * Better Auth sets cookies via set-cookie header.\n */\nfunction extractSessionCookie(res: Response): string | null {\n // In Node.js, getSetCookie() returns individual cookie strings\n const setCookieHeaders =\n 'getSetCookie' in res.headers\n ? (res.headers as { getSetCookie(): string[] }).getSetCookie()\n : [];\n\n // Fall back to raw header if getSetCookie not available\n if (setCookieHeaders.length === 0) {\n const raw = res.headers.get('set-cookie');\n if (raw) {\n // Multiple cookies may be comma-separated (though non-standard)\n return raw\n .split(',')\n .map((c) => c.split(';')[0].trim())\n .join('; ');\n }\n return null;\n }\n\n // Extract cookie name=value pairs (strip attributes)\n return setCookieHeaders.map((c) => c.split(';')[0].trim()).join('; ');\n}\n\nexport async function promptApiKey(): Promise<string | null> {\n console.log(\n pc.dim(\n `Get your API key from ${pc.underline(DASHBOARD_URL)}\\n` +\n `Keys start with sk_live_ or sk_test_`,\n ),\n );\n console.log();\n\n const { apiKey } = await prompts(\n {\n type: 'text',\n name: 'apiKey',\n message: 'API key (or press Enter to skip)',\n validate: (value: string) => {\n if (!value) return true; // allow skip\n if (!isValidKeyFormat(value)) {\n return 'Invalid key format. Keys start with sk_live_ or sk_test_';\n }\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (!apiKey) {\n log.warn('No API key provided — you can add one later in .env');\n return null;\n }\n\n return apiKey;\n}\n\nexport async function promptAndValidateApiKey(baseUrl: string): Promise<string | null> {\n const apiKey = await promptApiKey();\n if (!apiKey) return null;\n\n const valid = await validateApiKey(apiKey, baseUrl);\n if (!valid) {\n log.warn('Could not validate API key (server unreachable or invalid key)');\n log.info('Key saved to .env — you can update it later');\n } else {\n log.success('API key validated');\n }\n\n return apiKey;\n}\n\n/**\n * Get an API key — either from env, by prompting for an existing key,\n * or by creating a new account via terminal signup.\n */\nexport async function getOrCreateApiKey(baseUrl: string): Promise<string | null> {\n console.log();\n\n const { method } = await prompts(\n {\n type: 'select',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n title: 'Create a free account',\n description: 'Sign up with email + password (no browser needed)',\n value: 'signup',\n },\n {\n title: 'Enter an existing API key',\n description: 'Paste a key from your dashboard',\n value: 'paste',\n },\n {\n title: 'Skip for now',\n description: 'Add an API key later in .env',\n value: 'skip',\n },\n ],\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (method === 'signup') {\n return terminalSignup(baseUrl);\n }\n\n if (method === 'paste') {\n return promptAndValidateApiKey(baseUrl);\n }\n\n log.warn('No API key — you can add one later in .env');\n return null;\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function detectPackageManager(dir: string): PackageManager {\n if (existsSync(join(dir, 'bun.lockb')) || existsSync(join(dir, 'bun.lock'))) return 'bun';\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(dir, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nexport function detectFromUserAgent(): PackageManager {\n const ua = process.env.npm_config_user_agent ?? '';\n if (ua.startsWith('bun')) return 'bun';\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n return 'npm';\n}\n\nexport function installCommand(pm: PackageManager): string {\n return pm === 'yarn' ? 'yarn' : `${pm} install`;\n}\n\nexport function runCommand(pm: PackageManager, script: string): string {\n if (pm === 'npm') return `npm run ${script}`;\n return `${pm} ${script}`;\n}\n","export interface Template {\n id: string;\n name: string;\n description: string;\n repo: string;\n framework: string;\n devCommand: string;\n devPort: number;\n recommended?: boolean;\n}\n\nexport const templates: Template[] = [\n {\n id: 'nextjs',\n name: 'Next.js + Recursiv',\n description: 'Full-stack Next.js app with feeds, chat, and agents',\n repo: 'socialdotdev/template-nextjs',\n framework: 'nextjs',\n devCommand: 'next dev',\n devPort: 3000,\n recommended: true,\n },\n {\n id: 'node',\n name: 'Node.js + Express',\n description: 'Express API server with Recursiv SDK',\n repo: 'socialdotdev/template-node',\n framework: 'express',\n devCommand: 'node --watch src/index.js',\n devPort: 4000,\n },\n {\n id: 'vite',\n name: 'Vite + React',\n description: 'React SPA with social feed components',\n repo: 'socialdotdev/template-vite',\n framework: 'vite',\n devCommand: 'vite',\n devPort: 5173,\n },\n];\n\nexport function getTemplate(id: string): Template | undefined {\n return templates.find((t) => t.id === id);\n}\n\nexport function getDefaultTemplate(): Template {\n return templates.find((t) => t.recommended) ?? templates[0]!;\n}\n","import { spawn } from 'node:child_process';\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager, runCommand } from '../lib/package-manager.js';\n\nexport async function devCommand(opts: { port?: string }): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n log.info(`Run ${pc.bold('create-recursiv-app')} to create a new project`);\n process.exit(1);\n }\n\n const apiKey = await readApiKeyFromEnv(cwd);\n if (!apiKey) {\n log.warn('No RECURSIV_API_KEY found in .env — API calls will fail');\n }\n\n const pm = detectPackageManager(cwd);\n const port = opts.port ?? String(config.dev.port);\n const devCmd = config.dev.command || runCommand(pm, 'dev');\n\n // Build env vars to inject\n const env: Record<string, string> = {\n ...process.env,\n PORT: port,\n };\n\n if (apiKey) {\n env.RECURSIV_API_KEY = apiKey;\n\n // Framework-specific public env vars\n if (config.project.framework === 'nextjs') {\n env.NEXT_PUBLIC_RECURSIV_API_KEY = apiKey;\n } else if (config.project.framework === 'vite') {\n env.VITE_RECURSIV_API_KEY = apiKey;\n }\n }\n\n log.info(`Starting dev server on port ${pc.bold(port)}`);\n log.info(`Running: ${pc.dim(devCmd)}`);\n console.log();\n\n const [cmd, ...args] = devCmd.split(' ');\n const child = spawn(cmd!, args, {\n cwd,\n env,\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('close', (code) => {\n process.exit(code ?? 0);\n });\n\n // Forward signals\n const cleanup = () => {\n child.kill('SIGTERM');\n };\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n}\n","import { writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\n\ninterface DeployTarget {\n id: string;\n name: string;\n generate: (projectName: string, framework: string) => { file: string; content: string };\n}\n\nconst targets: DeployTarget[] = [\n {\n id: 'vercel',\n name: 'Vercel',\n generate: (name, framework) => ({\n file: 'vercel.json',\n content: JSON.stringify(\n {\n $schema: 'https://openapi.vercel.sh/vercel.json',\n projectSettings: {\n framework: framework === 'nextjs' ? 'nextjs' : framework === 'vite' ? 'vite' : null,\n },\n env: {\n RECURSIV_API_KEY: '@recursiv-api-key',\n },\n },\n null,\n 2\n ),\n }),\n },\n {\n id: 'docker',\n name: 'Docker',\n generate: (name, framework) => ({\n file: 'Dockerfile',\n content: [\n 'FROM node:20-slim AS base',\n 'WORKDIR /app',\n 'COPY package*.json ./',\n 'RUN npm ci --omit=dev',\n 'COPY . .',\n framework === 'nextjs' ? 'RUN npm run build' : '',\n framework === 'nextjs' ? 'EXPOSE 3000' : 'EXPOSE 4000',\n framework === 'nextjs'\n ? 'CMD [\"npm\", \"start\"]'\n : 'CMD [\"node\", \"src/index.js\"]',\n '',\n ]\n .filter(Boolean)\n .join('\\n'),\n }),\n },\n {\n id: 'render',\n name: 'Render',\n generate: (name, framework) => ({\n file: 'render.yaml',\n content: [\n 'services:',\n ` - type: web`,\n ` name: ${name}`,\n ` runtime: node`,\n ` buildCommand: npm install && npm run build`,\n framework === 'nextjs'\n ? ' startCommand: npm start'\n : ' startCommand: node src/index.js',\n ' envVars:',\n ' - key: RECURSIV_API_KEY',\n ' sync: false',\n '',\n ].join('\\n'),\n }),\n },\n {\n id: 'railway',\n name: 'Railway',\n generate: (name, framework) => ({\n file: 'railway.toml',\n content: [\n '[build]',\n 'builder = \"nixpacks\"',\n '',\n '[deploy]',\n framework === 'nextjs'\n ? 'startCommand = \"npm start\"'\n : 'startCommand = \"node src/index.js\"',\n 'healthcheckPath = \"/\"',\n '',\n ].join('\\n'),\n }),\n },\n];\n\nexport async function deployCommand(target: string): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n process.exit(1);\n }\n\n if (target === 'cloud') {\n log.info('Cloud deployment via Recursiv is coming soon');\n log.info(`For now, deploy to Vercel, Render, or Railway with ${pc.bold('recursiv deploy <target>')}`);\n return;\n }\n\n const deployTarget = targets.find((t) => t.id === target);\n if (!deployTarget) {\n log.error(`Unknown target: ${pc.bold(target)}`);\n log.info(`Available targets: ${targets.map((t) => t.id).join(', ')}, cloud`);\n process.exit(1);\n }\n\n const spinner = ora(`Generating ${deployTarget.name} config...`).start();\n const { file, content } = deployTarget.generate(\n config.project.name,\n config.project.framework\n );\n\n await writeFile(resolve(cwd, file), content + '\\n', 'utf-8');\n spinner.succeed(`Created ${pc.bold(file)}`);\n\n log.blank();\n log.info(`Remember to set ${pc.bold('RECURSIV_API_KEY')} in your ${deployTarget.name} environment`);\n}\n","import pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readApiKeyFromEnv, updateApiKeyInEnv } from '../lib/env.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { readConfig } from '../lib/config.js';\n\nexport async function loginCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n\n const existing = await readApiKeyFromEnv(cwd);\n if (existing) {\n log.info(`Existing key found: ${pc.dim(maskKey(existing))}`);\n log.info('Enter a new key to replace it, or press Enter to keep it');\n }\n\n const apiKey = await getOrCreateApiKey(baseUrl);\n if (apiKey) {\n await updateApiKeyInEnv(cwd, apiKey);\n log.success('API key saved to .env');\n }\n}\n\nexport async function logoutCommand(): Promise<void> {\n const cwd = process.cwd();\n const existing = await readApiKeyFromEnv(cwd);\n if (!existing) {\n log.info('No API key found in .env');\n return;\n }\n\n await updateApiKeyInEnv(cwd, '');\n log.success('API key removed from .env');\n}\n\nexport async function whoamiCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n const apiKey = await readApiKeyFromEnv(cwd);\n\n if (!apiKey) {\n log.error('No API key found in .env');\n log.info(`Run ${pc.bold('recursiv auth login')} to set one`);\n return;\n }\n\n log.info(`Key: ${pc.dim(maskKey(apiKey))}`);\n\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n\n if (!res.ok) {\n log.error('API key is invalid or expired');\n return;\n }\n\n const body = (await res.json()) as { data: { username?: string; email?: string } };\n if (body.data.username) log.info(`User: ${pc.bold(body.data.username)}`);\n if (body.data.email) log.info(`Email: ${body.data.email}`);\n } catch {\n log.warn('Could not reach API — check your network');\n }\n}\n\nfunction maskKey(key: string): string {\n if (key.length <= 12) return '****';\n return key.slice(0, 8) + '...' + key.slice(-4);\n}\n","import pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager } from '../lib/package-manager.js';\nimport { getTemplate } from '../templates/registry.js';\n\nexport async function infoCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n log.info(`Run ${pc.bold('create-recursiv-app')} to create a new project`);\n process.exit(1);\n }\n\n const apiKey = await readApiKeyFromEnv(cwd);\n const pm = detectPackageManager(cwd);\n const template = getTemplate(config.project.template);\n\n console.log();\n console.log(pc.bold('Project Info'));\n console.log();\n console.log(` Name: ${pc.bold(config.project.name)}`);\n console.log(` Template: ${template?.name ?? config.project.template}`);\n console.log(` Framework: ${config.project.framework}`);\n console.log(` Dev port: ${config.dev.port}`);\n console.log(` Dev cmd: ${pc.dim(config.dev.command)}`);\n console.log(` Pkg mgr: ${pm}`);\n console.log(` API URL: ${pc.dim(config.api.baseUrl)}`);\n console.log(` API key: ${apiKey ? pc.green('configured') : pc.yellow('not set')}`);\n console.log(` Config: ${pc.dim('.recursiv.json v' + config.version)}`);\n console.log();\n\n // Connection check\n if (apiKey) {\n try {\n const res = await fetch(`${config.api.baseUrl}/users/me`, {\n headers: { Authorization: `Bearer ${apiKey}`, Accept: 'application/json' },\n });\n if (res.ok) {\n log.success('API connection OK');\n } else {\n log.warn(`API returned ${res.status} — key may be invalid`);\n }\n } catch {\n log.warn('Could not reach API');\n }\n }\n}\n","import React from 'react';\nimport { render } from 'ink';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager } from '../lib/package-manager.js';\nimport { App, type ProjectSnapshot } from '../ui/app.js';\n\nexport async function brainCommand(opts: { anim?: boolean }): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const apiKey = await readApiKeyFromEnv(cwd);\n const packageManager = detectPackageManager(cwd);\n\n const snapshot: ProjectSnapshot | null = config\n ? {\n name: config.project.name,\n template: config.project.template,\n framework: config.project.framework,\n port: config.dev.port,\n devCommand: config.dev.command,\n apiBaseUrl: config.api.baseUrl,\n apiKeyConfigured: Boolean(apiKey),\n packageManager,\n }\n : null;\n\n const app = render(<App snapshot={snapshot} animate={opts.anim !== false} />);\n\n await app.waitUntilExit();\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Box, Text, useApp, useInput, useStdout, type Key } from 'ink';\n\nexport type ProjectSnapshot = {\n name: string;\n template: string;\n framework: string;\n port: number;\n devCommand: string;\n apiBaseUrl: string;\n apiKeyConfigured: boolean;\n packageManager: string;\n} | null;\n\ntype TabKey = 'overview' | 'commands' | 'stack';\ntype Glow = 'none' | 'soft' | 'strong';\n\nconst TABS: { key: TabKey; label: string }[] = [\n { key: 'overview', label: 'Overview' },\n { key: 'commands', label: 'Commands' },\n { key: 'stack', label: 'App' },\n];\n\nconst THEME = {\n accent: '#1FE4C6',\n accentWarm: '#F6D47A',\n accentCool: '#4DB6FF',\n muted: '#6F7C8A',\n bright: '#E9FFFA',\n danger: '#FF6B6B',\n};\n\nconst WORDMARK_COLORS = ['cyan', 'blue', 'yellow'];\nconst WORDMARK_LINES = [\n '#### #### ### ##### # #',\n '# # # # # # # ## #',\n '#### #### ##### # # # #',\n '# # # # # # # # ##',\n '#### # # # # ##### # #',\n];\n\nconst HERO_LINES = [\n 'Neurons, particles, waves.',\n 'The brain behind Recursiv.',\n 'Signals in motion, products alive.',\n 'A living map of your platform.',\n 'Bioluminescent systems in sync.',\n];\n\nconst COPY: Record<TabKey, string> = {\n overview: `# Social.dev Brain\nA neural CLI reflection of your product surface with neurons, particles, and waves.\n\n## What it shows\n- Branded networks, communities, posts, and reactions\n- Real-time chat with human + AI agent threads\n- Tool-enabled agents with sandboxes and integrations\n- Deployments, storage buckets, and databases\n\n## Flow\n1. Create a project\n2. Run dev locally\n3. Deploy anywhere`,\n commands: `# Command Deck\n- \\`recursiv\\` runs Brain when interactive\n- \\`recursiv brain\\`\n- \\`RECURSIV_BRAIN=1 recursiv\\`\n- \\`RECURSIV_BRAIN=0 recursiv\\`\n- \\`recursiv create my-app\\`\n- \\`recursiv dev --port 3000\\`\n- \\`recursiv deploy <target>\\`\n- \\`recursiv auth login | logout | whoami\\`\n- \\`recursiv info\\`\n- \\`recursiv users me\\`\n- \\`recursiv communities list\\`\n- \\`recursiv posts list\\`\n- \\`recursiv agents list\\``,\n stack: `# App Reflection\n## Client\n- React Native + Expo\n- NativeWind + Tailwind\n\n## Backend\n- Hono + tRPC\n- Better Auth\n\n## Data + Realtime\n- PostgreSQL + Drizzle ORM\n- Kafka + Socket.IO\n\n## Agents\n- Composio + E2B + OpenRouter`,\n};\n\nconst PULSE_FRAMES = ['spark', 'pulse', 'sync', 'bloom'];\nconst DOT_FRAMES = ['.', '..', '...'];\nconst BAR_FRAMES = ['[~ ]', '[~~ ]', '[~~~ ]', '[ ~~~~ ]', '[ ~~~~]', '[ ~~~]', '[ ~~]', '[ ~]'];\nconst AURORA_COLORS = ['#1FE4C6', '#4DB6FF', '#8AF0FF', '#F6D47A'];\nconst AURORA_COLORS_DEEP = ['#0C2236', '#12314C', '#1E3A5F'];\n\nconst QUICK_ACTIONS = [\n 'recursiv brain',\n 'create-recursiv-app my-app',\n 'recursiv dev --port 3000',\n 'recursiv users me',\n 'recursiv deploy vercel',\n];\n\nconst HINTS = ['Tab or arrows to switch tabs.', '1/2/3 to jump instantly.', 'q or Esc to exit.'];\n\nconst INTEGRATIONS = ['Composio', 'E2B', 'OpenRouter'];\n\nconst INTRO_DURATION_MS = 5200;\nconst INTRO_STEPS = [\n 'Igniting cortex',\n 'Mapping synapses',\n 'Charging particles',\n 'Calibrating agents',\n 'Locking signal',\n];\nconst INTRO_HINTS = ['Press Space to skip', 'Press q to exit'];\n\nexport function App(props: { snapshot: ProjectSnapshot; animate: boolean }): React.ReactElement {\n const { snapshot, animate } = props;\n const { exit } = useApp();\n const { stdout } = useStdout();\n const [tab, setTab] = useState<TabKey>('overview');\n const [introActive, setIntroActive] = useState<boolean>(animate);\n\n const columns = stdout?.columns ?? process.stdout.columns ?? 100;\n const isNarrow = columns < 100;\n const fieldWidth = isNarrow ? Math.max(12, columns - 6) : 26;\n const fieldHeight = isNarrow ? 6 : 10;\n const navWidth = isNarrow ? undefined : 26;\n const infoWidth = isNarrow ? undefined : 34;\n\n const pulseIndex = useTicker(animate, 700, PULSE_FRAMES.length);\n const dotIndex = useTicker(animate, 450, DOT_FRAMES.length);\n const heroIndex = useTicker(animate, 2200, HERO_LINES.length);\n const barIndex = useTicker(animate, 140, BAR_FRAMES.length);\n const sweepIndex = useTicker(animate, 60, Math.max(10, Math.min(columns - 4, 120)));\n const scanIndex = useTicker(animate, 320, 9);\n const introProgress = useProgress(introActive && animate, INTRO_DURATION_MS, 80);\n const introFrame = useTicker(introActive && animate, 60, Math.max(10, columns - 6));\n\n const pulse = PULSE_FRAMES[pulseIndex];\n const dots = DOT_FRAMES[dotIndex];\n const hero = HERO_LINES[heroIndex];\n const bar = BAR_FRAMES[barIndex];\n\n useEffect(() => {\n if (!animate) {\n setIntroActive(false);\n return;\n }\n setIntroActive(true);\n const id = setTimeout(() => setIntroActive(false), INTRO_DURATION_MS);\n return () => clearTimeout(id);\n }, [animate]);\n\n useInput((input: string, key: Key) => {\n if (input === 'q' || key.escape) {\n exit();\n return;\n }\n\n if (introActive) {\n if (input === ' ' || key.return || input === 's') {\n setIntroActive(false);\n }\n return;\n }\n\n if (key.tab || key.rightArrow) {\n const next = (tabIndex(tab) + 1) % TABS.length;\n setTab(TABS[next].key);\n return;\n }\n\n if (key.leftArrow) {\n const prev = (tabIndex(tab) - 1 + TABS.length) % TABS.length;\n setTab(TABS[prev].key);\n return;\n }\n\n if (input === '1') setTab('overview');\n if (input === '2') setTab('commands');\n if (input === '3') setTab('stack');\n });\n\n if (introActive) {\n return (\n <IntroScreen\n width={columns}\n height={Math.max(14, fieldHeight + 6)}\n progress={introProgress}\n frame={introFrame}\n />\n );\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Header\n hero={hero}\n pulse={pulse}\n dots={dots}\n bar={bar}\n sweep={sweepIndex}\n width={columns}\n animate={animate}\n />\n\n <Box marginTop={1} flexDirection={isNarrow ? 'column' : 'row'}>\n <Box\n flexDirection=\"column\"\n width={navWidth}\n marginRight={isNarrow ? 0 : 2}\n marginBottom={isNarrow ? 1 : 0}\n >\n <Panel title=\"Brain Map\" accent={THEME.accent} borderStyle=\"round\">\n <NeuralField width={fieldWidth} height={fieldHeight} frame={sweepIndex} animate={animate} />\n <Text color={THEME.muted}>* neuron o synapse + particle ~ wave</Text>\n <Divider width={fieldWidth} />\n <SectionTitle label=\"Navigator\" />\n <Navigation active={tab} />\n <Divider />\n <SectionTitle label=\"Quick Actions\" />\n {QUICK_ACTIONS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n <Divider />\n <SectionTitle label=\"Hints\" />\n {HINTS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n </Panel>\n </Box>\n\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n marginRight={isNarrow ? 0 : 2}\n marginBottom={isNarrow ? 1 : 0}\n >\n <Panel title={tabTitle(tab)} accent={THEME.accentWarm} borderStyle=\"double\">\n <AnimatedMarkdown content={COPY[tab]} animate={animate} />\n </Panel>\n </Box>\n\n <Box flexDirection=\"column\" width={infoWidth}>\n <Panel title=\"Synapses\" accent={THEME.accentCool} borderStyle=\"round\">\n <ProjectPanel snapshot={snapshot} animate={animate} dots={dots} frame={sweepIndex} scanIndex={scanIndex} />\n </Panel>\n </Box>\n </Box>\n\n <Footer snapshot={snapshot} animate={animate} />\n </Box>\n );\n}\n\nfunction Header(props: {\n hero: string;\n pulse: string;\n dots: string;\n bar: string;\n sweep: number;\n width: number;\n animate: boolean;\n}): React.ReactElement {\n const { hero, pulse, dots, bar, sweep, width, animate } = props;\n const lineWidth = Math.max(32, Math.min(width - 4, 120));\n const pulseLabel = animate ? `${pulse}${dots}` : 'ready';\n const time = new Date().toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });\n const wordmarkPalette = rotatePalette(WORDMARK_COLORS, sweep);\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Wordmark lines={WORDMARK_LINES} palette={wordmarkPalette} />\n <Text color={THEME.muted}>{hero}</Text>\n <Text color={THEME.muted}>by Recursiv</Text>\n <Box marginTop={1} flexDirection=\"row\">\n <Box marginRight={2}>\n <StatusPill label=\"brain\" value={pulseLabel} tone={THEME.accent} />\n </Box>\n <Box marginRight={2}>\n <StatusPill label=\"clock\" value={time} tone={THEME.accentWarm} />\n </Box>\n <StatusPill label=\"waves\" value={bar} tone={THEME.accentCool} />\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n <Aurora width={lineWidth} frame={sweep} />\n </Box>\n <Box marginTop={1}>\n <AccentLine width={lineWidth} frame={sweep} />\n </Box>\n </Box>\n );\n}\n\nfunction Footer(props: { snapshot: ProjectSnapshot; animate: boolean }): React.ReactElement {\n const { snapshot, animate } = props;\n const projectHint = snapshot ? `${snapshot.name}` : 'no project loaded';\n const status = animate ? 'brain live' : 'brain ready';\n\n return (\n <Box marginTop={1} flexDirection=\"row\" justifyContent=\"space-between\">\n <Text color={THEME.muted}>Tab to switch | 1/2/3 to jump | q to quit</Text>\n <Text color={THEME.muted}>\n {status} | {projectHint}\n </Text>\n </Box>\n );\n}\n\nfunction Panel(props: {\n title: string;\n accent: string;\n borderStyle?: 'single' | 'double' | 'round' | 'classic';\n children: React.ReactNode;\n}): React.ReactElement {\n const { title, accent, borderStyle = 'round', children } = props;\n return (\n <Box flexDirection=\"column\" borderStyle={borderStyle} borderColor={accent} paddingX={1} paddingY={1}>\n <Text color={accent}>{title}</Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {children}\n </Box>\n </Box>\n );\n}\n\nfunction SectionTitle(props: { label: string }): React.ReactElement {\n return <Text color={THEME.accentWarm}>{props.label}</Text>;\n}\n\nfunction Navigation(props: { active: TabKey }): React.ReactElement {\n const { active } = props;\n return (\n <Box flexDirection=\"column\">\n {TABS.map((tab, index) => {\n const isActive = tab.key === active;\n const marker = isActive ? '>' : ' ';\n const color = isActive ? THEME.accent : THEME.muted;\n return (\n <Text key={tab.key} color={color}>\n {marker} {index + 1}. {tab.label}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction NeuralField(props: { width: number; height: number; frame: number; animate: boolean }): React.ReactElement {\n const { width, height, frame, animate } = props;\n const lines = useMemo(() => buildNeuralField(width, height, animate ? frame : 0), [width, height, frame, animate]);\n\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n const tone =\n line.includes('~') ||\n line.includes('*') ||\n line.includes('+') ||\n line.includes('o') ||\n line.includes('O')\n ? THEME.accentCool\n : THEME.muted;\n return (\n <Text key={index} color={tone}>\n {line}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction ProjectPanel(props: {\n snapshot: ProjectSnapshot;\n animate: boolean;\n dots: string;\n frame: number;\n scanIndex: number;\n}): React.ReactElement {\n const { snapshot, animate, dots, frame, scanIndex } = props;\n\n if (!snapshot) {\n return (\n <Box flexDirection=\"column\">\n <Text color={THEME.accentWarm}>Not in a Recursiv project.</Text>\n <Text color={THEME.muted}>Run create-recursiv-app to start.</Text>\n </Box>\n );\n }\n\n const status = animate ? `firing${dots}` : 'quiet';\n const apiStatus = snapshot.apiKeyConfigured ? 'linked' : 'missing';\n const apiTone = snapshot.apiKeyConfigured ? THEME.accentCool : THEME.danger;\n const meter = buildPulseMeter(animate ? frame : 0, 16);\n\n const fields = [\n { label: 'Name', value: snapshot.name },\n { label: 'Template', value: snapshot.template },\n { label: 'Framework', value: snapshot.framework },\n { label: 'Dev port', value: String(snapshot.port) },\n { label: 'Pkg mgr', value: snapshot.packageManager },\n { label: 'API base', value: snapshot.apiBaseUrl, dim: true },\n { label: 'API key', value: apiStatus, tone: apiTone },\n { label: 'Status', value: status, tone: THEME.accent },\n { label: 'Pulse', value: meter, tone: THEME.accentWarm },\n ];\n\n const activeIndex = fields.length > 0 ? scanIndex % fields.length : 0;\n const scanBar = buildScanBar(activeIndex, 18);\n\n return (\n <Box flexDirection=\"column\">\n {fields.map((field, index) => {\n const distance = Math.min(\n Math.abs(index - activeIndex),\n fields.length - Math.abs(index - activeIndex),\n );\n const glow: Glow = animate && distance === 0 ? 'strong' : animate && distance === 1 ? 'soft' : 'none';\n\n return (\n <Field\n key={field.label}\n label={field.label}\n value={field.value}\n dim={field.dim}\n tone={field.tone}\n glow={glow}\n />\n );\n })}\n <Text color={THEME.accentCool}>Neural scan {scanBar}</Text>\n <Divider />\n <SectionTitle label=\"Integrations\" />\n {INTEGRATIONS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n <Divider />\n <Text color={THEME.muted}>Dev cmd:</Text>\n <Text color={THEME.muted}>{snapshot.devCommand}</Text>\n </Box>\n );\n}\n\nfunction Field(props: { label: string; value: string; dim?: boolean; tone?: string; glow?: Glow }): React.ReactElement {\n const { label, value, dim, tone, glow = 'none' } = props;\n const marker = glow === 'strong' ? '>' : glow === 'soft' ? '-' : ' ';\n const paddedLabel = `${marker} ${label.padEnd(9, ' ')}`;\n const labelColor = glow === 'strong' ? THEME.accentWarm : glow === 'soft' ? THEME.accent : THEME.muted;\n const valueColor =\n glow === 'strong'\n ? THEME.bright\n : glow === 'soft'\n ? THEME.accentCool\n : tone ?? (dim ? THEME.muted : undefined);\n\n return (\n <Text>\n <Text color={labelColor}>{paddedLabel}</Text>\n <Text color={valueColor}>{value}</Text>\n </Text>\n );\n}\n\nfunction StatusPill(props: { label: string; value: string; tone: string }): React.ReactElement {\n const { label, value, tone } = props;\n return (\n <Text color={tone}>\n [{label}: {value}]\n </Text>\n );\n}\n\nfunction Wordmark(props: { lines: string[]; palette: string[] }): React.ReactElement {\n const { lines, palette } = props;\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n {lines.map((line, index) => (\n <Text key={index} color={palette[index % palette.length] ?? THEME.accent}>\n {line}\n </Text>\n ))}\n </Box>\n );\n}\n\nfunction ColorLine(props: { text: string; color: string }): React.ReactElement {\n return <Text color={props.color}>{props.text}</Text>;\n}\n\nfunction Aurora(props: { width: number; frame: number }): React.ReactElement {\n const { width, frame } = props;\n const lineWidth = Math.max(18, width);\n const lineA = buildAuroraLine(lineWidth, frame, 0);\n const lineB = buildInterferenceLine(lineWidth, frame + 7, 1);\n const lineC = buildAuroraLine(lineWidth, frame + 13, 2);\n const lineD = buildNeuronHalo(lineWidth, frame);\n const palette = rotatePalette(AURORA_COLORS, frame);\n const deepPalette = rotatePalette(AURORA_COLORS_DEEP, frame);\n\n return (\n <Box flexDirection=\"column\">\n <ColorLine text={lineA} color={palette[0]} />\n <ColorLine text={lineB} color={deepPalette[0]} />\n <ColorLine text={lineC} color={palette[1] ?? palette[0]} />\n <ColorLine text={lineD} color={palette[2] ?? palette[0]} />\n </Box>\n );\n}\n\nfunction Divider(props: { width?: number } = {}): React.ReactElement {\n const { width } = props;\n const lineWidth = Math.max(12, Math.min(32, width ?? 22));\n return <Text color={THEME.muted}>{'-'.repeat(lineWidth)}</Text>;\n}\n\nfunction AccentLine(props: { width: number; frame: number }): React.ReactElement {\n const { width, frame } = props;\n const lineWidth = Math.max(10, width);\n const head = Math.min(frame % lineWidth, lineWidth - 1);\n const left = '-'.repeat(head);\n const right = '-'.repeat(Math.max(0, lineWidth - head - 1));\n\n return (\n <Text color={THEME.muted}>\n {left}\n <Text color={THEME.accent}>*</Text>\n {right}\n </Text>\n );\n}\n\nfunction AnimatedMarkdown(props: { content: string; animate: boolean }): React.ReactElement {\n const { content, animate } = props;\n const safe = useMemo(() => content.replace(/\\r\\n/g, '\\n'), [content]);\n const lines = useMemo(() => safe.split('\\n'), [safe]);\n const [visibleLines, setVisibleLines] = useState(animate ? 1 : lines.length);\n\n useEffect(() => {\n if (!animate) {\n setVisibleLines(lines.length);\n return;\n }\n\n setVisibleLines(1);\n const id = setInterval(() => {\n setVisibleLines((current) => (current >= lines.length ? current : current + 1));\n }, 55);\n\n return () => clearInterval(id);\n }, [animate, lines.length, safe]);\n\n const sliceCount = Math.max(1, visibleLines);\n const text = animate ? lines.slice(0, sliceCount).join('\\n') : safe;\n\n return <MarkdownBlock content={text} />;\n}\n\nfunction MarkdownBlock(props: { content: string }): React.ReactElement {\n const lines = props.content.split('\\n');\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n if (line.startsWith('### ')) {\n return (\n <Text key={index} color={THEME.accentCool}>\n {line.slice(4)}\n </Text>\n );\n }\n if (line.startsWith('## ')) {\n return (\n <Text key={index} color={THEME.accentWarm}>\n {line.slice(3)}\n </Text>\n );\n }\n if (line.startsWith('# ')) {\n return (\n <Text key={index} color={THEME.accent}>\n {line.slice(2)}\n </Text>\n );\n }\n if (line.startsWith('- ')) {\n return (\n <Text key={index} color={THEME.muted}>\n - {line.slice(2)}\n </Text>\n );\n }\n if (/^\\d+\\.\\s/.test(line)) {\n return (\n <Text key={index} color={THEME.muted}>\n {line}\n </Text>\n );\n }\n if (line.trim().length === 0) {\n return <Text key={index}> </Text>;\n }\n return (\n <Text key={index} color={THEME.bright}>\n {line}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction useTicker(animate: boolean, intervalMs: number, length: number): number {\n const [tick, setTick] = useState(0);\n\n useEffect(() => {\n if (!animate || length <= 0) {\n setTick(0);\n return;\n }\n\n const id = setInterval(() => {\n setTick((current) => (current + 1) % length);\n }, intervalMs);\n\n return () => clearInterval(id);\n }, [animate, intervalMs, length]);\n\n return tick;\n}\n\nfunction tabIndex(tab: TabKey): number {\n return TABS.findIndex((item) => item.key === tab);\n}\n\nfunction tabTitle(tab: TabKey): string {\n const active = TABS.find((item) => item.key === tab);\n return active ? active.label : 'Overview';\n}\n\nfunction buildNeuralField(width: number, height: number, frame: number): string[] {\n const safeWidth = Math.max(8, width);\n const safeHeight = Math.max(4, height);\n const grid: string[][] = Array.from({ length: safeHeight }, () => Array(safeWidth).fill(' '));\n const phase = Math.floor(frame / 6);\n const rng = makeRng(phase * 109 + 97);\n const nodes: Array<{ x: number; y: number }> = [];\n\n const place = (x: number, y: number, char: string, priority = 0): void => {\n if (x < 0 || x >= safeWidth || y < 0 || y >= safeHeight) return;\n const current = grid[y][x];\n const currentPriority = current === '*' || current === 'O' ? 3 : current === 'o' ? 2 : current === '~' ? 1 : 0;\n if (priority >= currentPriority || current === ' ') {\n grid[y][x] = char;\n }\n };\n\n for (let y = 0; y < safeHeight; y += 1) {\n for (let x = 0; x < safeWidth; x += 1) {\n const roll = rng();\n if (roll < 0.018) {\n grid[y][x] = '*';\n nodes.push({ x, y });\n } else if (roll < 0.04) {\n grid[y][x] = 'o';\n nodes.push({ x, y });\n } else if (roll < 0.12) {\n grid[y][x] = '.';\n }\n }\n }\n\n const mid = Math.floor(safeHeight / 2);\n const amp = Math.max(1, Math.floor(safeHeight / 3));\n for (let x = 0; x < safeWidth; x += 1) {\n const y = Math.round(mid + Math.sin((x + frame * 0.6) / 3) * amp);\n place(x, y, '~', 1);\n if ((x + frame) % 11 === 0) place(x, y, '*', 3);\n }\n\n const mid2 = Math.floor(safeHeight / 3);\n const amp2 = Math.max(1, Math.floor(safeHeight / 4));\n for (let x = 0; x < safeWidth; x += 1) {\n const y = Math.round(mid2 + Math.sin((x + frame * 0.4) / 2.6) * amp2);\n place(x, y, '~', 1);\n if ((x + frame * 2) % 17 === 0) place(x, y, 'o', 2);\n }\n\n const particleCount = Math.max(2, Math.floor(safeWidth / 12));\n for (let i = 0; i < particleCount; i += 1) {\n const particleX = (frame * (i + 2) + i * 7) % safeWidth;\n const particleY = (frame * (i + 3) + i * 5) % safeHeight;\n place(particleX, particleY, '+', 2);\n }\n\n nodes.forEach((node) => {\n if (rng() < 0.35) {\n const length = 2 + Math.floor(rng() * 6);\n const drift = rng() < 0.5 ? 1 : -1;\n for (let step = 1; step <= length; step += 1) {\n const x = node.x + step;\n const y = node.y + (rng() < 0.3 ? drift : 0);\n place(x, y, rng() < 0.5 ? '-' : '=', 0);\n }\n }\n if ((node.x + frame) % 14 === 0) {\n place(node.x, node.y, 'O', 3);\n }\n });\n\n return grid.map((row) => row.join(''));\n}\n\nfunction buildAuroraLine(width: number, frame: number, offset: number): string {\n const safeWidth = Math.max(10, width);\n const chars = [' ', ' ', '.', ':', '-', '=', '+', '*'];\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const phase = (x + frame * 0.9 + offset * 7) / 4;\n const wave = Math.sin(phase) * 0.6 + Math.sin(phase / 2 + offset) * 0.4 + 1;\n const normalized = Math.max(0, Math.min(1, wave / 2));\n const idx = Math.min(chars.length - 1, Math.floor(normalized * (chars.length - 1)));\n line += chars[idx];\n }\n return line;\n}\n\nfunction buildInterferenceLine(width: number, frame: number, offset: number): string {\n const safeWidth = Math.max(10, width);\n const chars = [' ', '.', ':', '-', '=', '+', '*', '#'];\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const waveA = Math.sin((x + frame * 0.6 + offset * 5) / 3);\n const waveB = Math.sin((x * 0.6 + frame * 0.3) / 2.1);\n const waveC = Math.sin((x * 1.2 + frame * 0.9) / 4.6);\n const mix = (waveA + waveB + waveC + 3) / 6;\n const idx = Math.min(chars.length - 1, Math.floor(mix * (chars.length - 1)));\n line += chars[idx];\n }\n return line;\n}\n\nfunction buildNeuronHalo(width: number, frame: number): string {\n const safeWidth = Math.max(10, width);\n const rng = makeRng((Math.floor(frame / 4) + 11) * 233);\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const roll = rng();\n if (roll < 0.04) line += '*';\n else if (roll < 0.08) line += 'o';\n else if (roll < 0.11) line += '.';\n else line += ' ';\n }\n return line;\n}\n\nfunction buildPulseMeter(frame: number, width: number): string {\n const safeWidth = Math.max(8, width);\n const head = frame % safeWidth;\n let line = '';\n for (let i = 0; i < safeWidth; i += 1) {\n if (i === head) {\n line += '*';\n } else if (Math.abs(i - head) === 1) {\n line += '+';\n } else if ((i + frame) % 5 === 0) {\n line += '-';\n } else {\n line += '.';\n }\n }\n return line;\n}\n\nfunction buildScanBar(position: number, width: number): string {\n const safeWidth = Math.max(8, width);\n if (position < 0) return '[' + '.'.repeat(safeWidth) + ']';\n const head = position % safeWidth;\n let line = '';\n for (let i = 0; i < safeWidth; i += 1) {\n if (i === head) line += '>';\n else if (Math.abs(i - head) === 1) line += '=';\n else line += '.';\n }\n return `[${line}]`;\n}\n\nfunction makeRng(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 4294967295;\n };\n}\n\nfunction rotatePalette(palette: string[], frame: number): string[] {\n if (palette.length === 0) return palette;\n const offset = frame % palette.length;\n return [...palette.slice(offset), ...palette.slice(0, offset)];\n}\n\nfunction useProgress(active: boolean, durationMs: number, stepMs: number): number {\n const [progress, setProgress] = useState(active ? 0 : 1);\n\n useEffect(() => {\n if (!active) {\n setProgress(1);\n return;\n }\n\n setProgress(0);\n const start = Date.now();\n const id = setInterval(() => {\n const value = Math.min(1, (Date.now() - start) / durationMs);\n setProgress(value);\n if (value >= 1) clearInterval(id);\n }, stepMs);\n\n return () => clearInterval(id);\n }, [active, durationMs, stepMs]);\n\n return progress;\n}\n\nfunction IntroScreen(props: { width: number; height: number; progress: number; frame: number }): React.ReactElement {\n const { width, height, progress, frame } = props;\n const fieldWidth = Math.max(24, width - 6);\n const fieldHeight = Math.max(10, Math.min(14, height));\n const steps = INTRO_STEPS.map((label, index) => ({\n label,\n done: progress >= (index + 1) / INTRO_STEPS.length,\n }));\n const bar = buildProgressBar(progress, Math.max(16, Math.min(34, Math.floor(width / 3))));\n const palette = rotatePalette(WORDMARK_COLORS, frame);\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Wordmark lines={WORDMARK_LINES} palette={palette} />\n <Text color={THEME.muted}>Neural ignition sequence</Text>\n </Box>\n <Box marginTop={1} flexDirection=\"column\" alignItems=\"center\">\n <ColorLine text={bar} color={THEME.accentWarm} />\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n {steps.map((step, index) => (\n <Text key={index} color={step.done ? THEME.accent : THEME.muted}>\n [{step.done ? 'x' : ' '}] {step.label}\n </Text>\n ))}\n </Box>\n <Box marginTop={1}>\n <NeuralField width={fieldWidth} height={fieldHeight} frame={frame} animate />\n </Box>\n <Box marginTop={1}>\n {INTRO_HINTS.map((hint) => (\n <Text key={hint} color={THEME.muted}>\n {hint}\n </Text>\n ))}\n </Box>\n </Box>\n );\n}\n\nfunction buildProgressBar(progress: number, width: number): string {\n const safeWidth = Math.max(10, width);\n const filled = Math.round(progress * safeWidth);\n const left = '='.repeat(filled);\n const right = '.'.repeat(Math.max(0, safeWidth - filled));\n return `[${left}${right}]`;\n}\n","import { brainCommand } from './brain.js';\n\nexport async function studioCommand(opts: { anim?: boolean }): Promise<void> {\n await brainCommand(opts);\n}\n","import pc from 'picocolors';\nimport { apiRequest, getApiContext } from '../lib/api.js';\nimport { log } from '../lib/logger.js';\n\ntype ListOpts = {\n limit?: string;\n offset?: string;\n json?: boolean;\n};\n\nexport async function usersMeCommand(opts: { json?: boolean }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, { method: 'GET', path: 'users/me' });\n output(res, opts.json, (data) => {\n log.blank();\n console.log(pc.bold('User'));\n console.log(` ${pc.dim('id')}: ${data.id}`);\n console.log(` ${pc.dim('name')}: ${data.name ?? '-'}`);\n console.log(` ${pc.dim('username')}: ${data.username ?? '-'}`);\n console.log(` ${pc.dim('email')}: ${data.email ?? '-'}`);\n console.log(` ${pc.dim('followers')}: ${data.followers_count ?? 0}`);\n console.log(` ${pc.dim('following')}: ${data.following_count ?? 0}`);\n console.log(` ${pc.dim('posts')}: ${data.posts_count ?? 0}`);\n log.blank();\n });\n}\n\nexport async function communitiesListCommand(opts: ListOpts): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'communities',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Communities'));\n data.forEach((comm: any) => {\n const name = pc.bold(comm.name);\n const slug = comm.slug ? pc.dim(`/${comm.slug}`) : '';\n const members = pc.dim(`members ${comm.member_count ?? 0}`);\n console.log(` ${name} ${slug} ${members}`);\n if (comm.description) console.log(` ${pc.dim(comm.description)}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function communitiesCreateCommand(opts: {\n name?: string;\n slug?: string;\n description?: string;\n privacy?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.name || !opts.slug) {\n log.error('Missing required flags: --name and --slug');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'communities',\n body: {\n name: opts.name,\n slug: opts.slug,\n description: opts.description,\n privacy: opts.privacy ?? 'public',\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Community created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nexport async function postsListCommand(opts: ListOpts & { communityId?: string; authorId?: string }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'posts',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n community_id: opts.communityId,\n author_id: opts.authorId,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Posts'));\n data.forEach((post: any) => {\n const author = post.author?.username ? `@${post.author.username}` : 'unknown';\n const content = truncate(post.content ?? '', 100);\n console.log(` ${pc.bold(author)} ${pc.dim(post.id)}`);\n console.log(` ${content}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function postsCreateCommand(opts: {\n content?: string;\n markdown?: boolean;\n communityId?: string;\n organizationId?: string;\n replyToId?: string;\n tagIds?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.content) {\n log.error('Missing required flag: --content');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const tagIds = opts.tagIds ? opts.tagIds.split(',').map((id) => id.trim()).filter(Boolean) : undefined;\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'posts',\n body: {\n content: opts.content,\n content_format: opts.markdown ? 'markdown' : 'plain',\n community_id: opts.communityId,\n organization_id: opts.organizationId,\n reply_to_id: opts.replyToId,\n tag_ids: tagIds,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Post created: ${pc.dim(data.id)}`);\n });\n}\n\nexport async function projectsListCommand(opts: ListOpts & { organizationId?: string }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'projects',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n organization_id: opts.organizationId,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Projects'));\n data.forEach((proj: any) => {\n const name = pc.bold(proj.name);\n const slug = proj.slug ? pc.dim(`/${proj.slug}`) : '';\n const org = proj.organization?.slug ? pc.dim(`org ${proj.organization.slug}`) : '';\n console.log(` ${name} ${slug} ${org}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function projectsCreateCommand(opts: {\n organizationId?: string;\n name?: string;\n slug?: string;\n repoUrl?: string;\n templateSource?: string;\n templateUrl?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.organizationId || !opts.name) {\n log.error('Missing required flags: --org and --name');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'projects',\n body: {\n organization_id: opts.organizationId,\n name: opts.name,\n slug: opts.slug,\n repo_url: opts.repoUrl,\n template_source: opts.templateSource ?? 'default',\n custom_template_url: opts.templateUrl,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Project created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nexport async function agentsListCommand(opts: ListOpts): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'agents',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Agents'));\n data.forEach((agent: any) => {\n const name = pc.bold(agent.name);\n const handle = agent.username ? pc.dim(`@${agent.username}`) : '';\n const model = agent.model ? pc.dim(agent.model) : '';\n console.log(` ${name} ${handle} ${model}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function agentsCreateCommand(opts: {\n name?: string;\n username?: string;\n bio?: string;\n model?: string;\n systemPrompt?: string;\n socialMode?: string;\n postFrequency?: string;\n toolMode?: string;\n dailyRequestLimit?: string;\n organizationId?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.name || !opts.username) {\n log.error('Missing required flags: --name and --username');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'agents',\n body: {\n name: opts.name,\n username: opts.username,\n bio: opts.bio,\n model: opts.model,\n system_prompt: opts.systemPrompt,\n social_mode: opts.socialMode,\n post_frequency: opts.postFrequency,\n tool_mode: opts.toolMode,\n daily_request_limit: opts.dailyRequestLimit ? Number(opts.dailyRequestLimit) : undefined,\n organization_id: opts.organizationId,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Agent created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nfunction output(\n res: { data: any; meta?: any },\n json: boolean | undefined,\n render: (data: any, meta?: any) => void\n): void {\n if (json) {\n console.log(JSON.stringify(res, null, 2));\n return;\n }\n render(res.data, res.meta);\n}\n\nfunction printMeta(meta?: { limit?: number; offset?: number; has_more?: boolean }): void {\n if (!meta) return;\n log.blank();\n console.log(pc.dim(`limit ${meta.limit ?? 0} offset ${meta.offset ?? 0} has_more ${meta.has_more ?? false}`));\n log.blank();\n}\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return value.slice(0, max - 1) + '…';\n}\n","import pc from 'picocolors';\nimport { readConfig } from './config.js';\nimport { readApiKeyFromEnv } from './env.js';\nimport { log } from './logger.js';\n\nexport type ApiContext = {\n baseUrl: string;\n apiKey: string;\n};\n\nexport async function getApiContext(cwd: string): Promise<ApiContext> {\n const config = await readConfig(cwd);\n const apiKey = await readApiKeyFromEnv(cwd);\n if (!apiKey) {\n log.error('No API key configured.');\n log.info(`Run ${pc.bold('recursiv auth login')} to set your key.`);\n process.exit(1);\n }\n\n return {\n baseUrl: config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1',\n apiKey,\n };\n}\n\nexport async function apiRequest<T>(ctx: ApiContext, opts: {\n method: 'GET' | 'POST';\n path: string;\n query?: Record<string, string | number | undefined>;\n body?: unknown;\n}): Promise<T> {\n const url = new URL(opts.path, ctx.baseUrl.endsWith('/') ? ctx.baseUrl : ctx.baseUrl + '/');\n if (opts.query) {\n Object.entries(opts.query).forEach(([key, value]) => {\n if (value === undefined || value === null || value === '') return;\n url.searchParams.set(key, String(value));\n });\n }\n\n const res = await fetch(url, {\n method: opts.method,\n headers: {\n Authorization: `Bearer ${ctx.apiKey}`,\n Accept: 'application/json',\n ...(opts.body ? { 'Content-Type': 'application/json' } : {}),\n },\n body: opts.body ? JSON.stringify(opts.body) : undefined,\n });\n\n const text = await res.text();\n const payload = safeJson(text);\n\n if (!res.ok) {\n const message =\n payload?.error?.message ||\n payload?.message ||\n `Request failed (${res.status} ${res.statusText})`;\n throw new Error(message);\n }\n\n return (payload ?? {}) as T;\n}\n\nfunction safeJson(text: string): any {\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":["existsSync","prompts","pc","ora","readFile","writeFile","join","pc","pc","join","writeFile","prompts","existsSync","pc","ora","pc","pc","writeFile","resolve","pc","ora","pc","ora","writeFile","resolve","pc","pc","pc","pc","jsx","pc","pc","pc","pc","render"]}
|