@insforge/cli 0.1.40 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +29 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/config.ts","../src/commands/login.ts","../src/lib/errors.ts","../src/lib/auth.ts","../src/lib/credentials.ts","../src/lib/api/platform.ts","../src/lib/output.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/orgs/list.ts","../src/commands/projects/list.ts","../src/commands/projects/link.ts","../src/lib/skills.ts","../src/lib/api/oss.ts","../src/commands/db/query.ts","../src/commands/db/tables.ts","../src/commands/db/functions.ts","../src/commands/db/indexes.ts","../src/commands/db/policies.ts","../src/commands/db/triggers.ts","../src/commands/db/rpc.ts","../src/commands/db/export.ts","../src/commands/db/import.ts","../src/commands/records/list.ts","../src/commands/records/create.ts","../src/commands/records/update.ts","../src/commands/records/delete.ts","../src/commands/functions/list.ts","../src/commands/functions/deploy.ts","../src/commands/functions/invoke.ts","../src/commands/functions/code.ts","../src/commands/functions/delete.ts","../src/commands/storage/buckets.ts","../src/commands/storage/upload.ts","../src/commands/storage/download.ts","../src/commands/storage/create-bucket.ts","../src/commands/storage/delete-bucket.ts","../src/commands/storage/list-objects.ts","../src/commands/create.ts","../src/lib/env.ts","../src/lib/analytics.ts","../src/commands/deployments/deploy.ts","../src/commands/info.ts","../src/commands/list.ts","../src/commands/deployments/list.ts","../src/commands/deployments/status.ts","../src/commands/deployments/cancel.ts","../src/commands/deployments/env-vars.ts","../src/commands/docs.ts","../src/commands/secrets/list.ts","../src/commands/secrets/get.ts","../src/commands/secrets/add.ts","../src/commands/secrets/update.ts","../src/commands/secrets/delete.ts","../src/commands/schedules/list.ts","../src/commands/schedules/get.ts","../src/commands/schedules/create.ts","../src/commands/schedules/update.ts","../src/commands/schedules/delete.ts","../src/commands/schedules/logs.ts","../src/commands/logs.ts","../src/commands/metadata.ts","../src/commands/diagnose/metrics.ts","../src/commands/diagnose/advisor.ts","../src/commands/diagnose/db.ts","../src/commands/diagnose/logs.ts","../src/commands/diagnose/index.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { getCredentials, getProjectConfig } from './lib/config.js';\nimport { registerLoginCommand } from './commands/login.js';\nimport { registerLogoutCommand } from './commands/logout.js';\nimport { registerWhoamiCommand } from './commands/whoami.js';\nimport { registerOrgsCommands } from './commands/orgs/list.js';\nimport { registerProjectsCommands } from './commands/projects/list.js';\nimport { registerProjectLinkCommand } from './commands/projects/link.js';\nimport { registerDbCommands } from './commands/db/query.js';\nimport { registerDbTablesCommand } from './commands/db/tables.js';\nimport { registerDbFunctionsCommand } from './commands/db/functions.js';\nimport { registerDbIndexesCommand } from './commands/db/indexes.js';\nimport { registerDbPoliciesCommand } from './commands/db/policies.js';\nimport { registerDbTriggersCommand } from './commands/db/triggers.js';\nimport { registerDbRpcCommand } from './commands/db/rpc.js';\nimport { registerDbExportCommand } from './commands/db/export.js';\nimport { registerDbImportCommand } from './commands/db/import.js';\nimport { registerRecordsCommands } from './commands/records/list.js';\nimport { registerRecordsCreateCommand } from './commands/records/create.js';\nimport { registerRecordsUpdateCommand } from './commands/records/update.js';\nimport { registerRecordsDeleteCommand } from './commands/records/delete.js';\nimport { registerFunctionsCommands } from './commands/functions/list.js';\nimport { registerFunctionsDeployCommand } from './commands/functions/deploy.js';\nimport { registerFunctionsInvokeCommand } from './commands/functions/invoke.js';\nimport { registerFunctionsCodeCommand } from './commands/functions/code.js';\nimport { registerFunctionsDeleteCommand } from './commands/functions/delete.js';\nimport { registerStorageBucketsCommand } from './commands/storage/buckets.js';\nimport { registerStorageUploadCommand } from './commands/storage/upload.js';\nimport { registerStorageDownloadCommand } from './commands/storage/download.js';\nimport { registerStorageCreateBucketCommand } from './commands/storage/create-bucket.js';\nimport { registerStorageDeleteBucketCommand } from './commands/storage/delete-bucket.js';\nimport { registerStorageListObjectsCommand } from './commands/storage/list-objects.js';\nimport { registerCreateCommand } from './commands/create.js';\nimport { registerContextCommand } from './commands/info.js';\nimport { registerListCommand } from './commands/list.js';\nimport { registerDeploymentsDeployCommand } from './commands/deployments/deploy.js';\nimport { registerDeploymentsListCommand } from './commands/deployments/list.js';\nimport { registerDeploymentsStatusCommand } from './commands/deployments/status.js';\nimport { registerDeploymentsCancelCommand } from './commands/deployments/cancel.js';\nimport { registerDeploymentsEnvVarsCommand } from './commands/deployments/env-vars.js';\n\nimport { registerDocsCommand } from './commands/docs.js';\nimport { registerSecretsListCommand } from './commands/secrets/list.js';\nimport { registerSecretsGetCommand } from './commands/secrets/get.js';\nimport { registerSecretsAddCommand } from './commands/secrets/add.js';\nimport { registerSecretsUpdateCommand } from './commands/secrets/update.js';\nimport { registerSecretsDeleteCommand } from './commands/secrets/delete.js';\n\nimport { registerSchedulesListCommand } from './commands/schedules/list.js';\nimport { registerSchedulesGetCommand } from './commands/schedules/get.js';\nimport { registerSchedulesCreateCommand } from './commands/schedules/create.js';\nimport { registerSchedulesUpdateCommand } from './commands/schedules/update.js';\nimport { registerSchedulesDeleteCommand } from './commands/schedules/delete.js';\nimport { registerSchedulesLogsCommand } from './commands/schedules/logs.js';\n\nimport { registerLogsCommand } from './commands/logs.js';\nimport { registerMetadataCommand } from './commands/metadata.js';\nimport { registerDiagnoseCommands } from './commands/diagnose/index.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8')) as { version: string };\n\nconst INSFORGE_LOGO = `\n██╗███╗ ██╗███████╗███████╗ ██████╗ ██████╗ ██████╗ ███████╗\n██║████╗ ██║██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██╔════╝\n██║██╔██╗ ██║███████╗█████╗ ██║ ██║██████╔╝██║ ███╗█████╗\n██║██║╚██╗██║╚════██║██╔══╝ ██║ ██║██╔══██╗██║ ██║██╔══╝\n██║██║ ╚████║███████║██║ ╚██████╔╝██║ ██║╚██████╔╝███████╗\n╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝\n`;\n\nconst program = new Command();\n\nprogram\n .name('insforge')\n .description('InsForge CLI - Command line tool for InsForge platform')\n .version(pkg.version);\n\n// Global options\nprogram\n .option('--json', 'Output in JSON format')\n .option('--api-url <url>', 'Override Platform API URL')\n .option('-y, --yes', 'Skip confirmation prompts');\n\n// Top-level commands\nregisterLoginCommand(program);\nregisterLogoutCommand(program);\nregisterWhoamiCommand(program);\nregisterCreateCommand(program);\nregisterContextCommand(program);\nregisterListCommand(program);\nregisterDocsCommand(program);\nregisterProjectLinkCommand(program);\n\n// Orgs commands (hidden — use `insforge list` instead)\nconst orgsCmd = program.command('orgs', { hidden: true }).description('Manage organizations');\nregisterOrgsCommands(orgsCmd);\n\n// Projects commands (hidden — use `insforge list` instead)\nconst projectsCmd = program.command('projects', { hidden: true }).description('Manage projects');\nregisterProjectsCommands(projectsCmd);\n\n// Database commands\nconst dbCmd = program.command('db').description('Database operations');\nregisterDbCommands(dbCmd);\nregisterDbTablesCommand(dbCmd);\nregisterDbFunctionsCommand(dbCmd);\nregisterDbIndexesCommand(dbCmd);\nregisterDbPoliciesCommand(dbCmd);\nregisterDbTriggersCommand(dbCmd);\nregisterDbRpcCommand(dbCmd);\nregisterDbExportCommand(dbCmd);\nregisterDbImportCommand(dbCmd);\n\n// Records commands (hidden — do not use for now)\nconst recordsCmd = program.command('records', { hidden: true }).description('CRUD operations on table records');\nregisterRecordsCommands(recordsCmd);\nregisterRecordsCreateCommand(recordsCmd);\nregisterRecordsUpdateCommand(recordsCmd);\nregisterRecordsDeleteCommand(recordsCmd);\n\n// Functions commands\nconst functionsCmd = program.command('functions').description('Manage edge functions');\nregisterFunctionsCommands(functionsCmd);\nregisterFunctionsCodeCommand(functionsCmd);\nregisterFunctionsDeployCommand(functionsCmd);\nregisterFunctionsInvokeCommand(functionsCmd);\nregisterFunctionsDeleteCommand(functionsCmd);\n\n// Storage commands\nconst storageCmd = program.command('storage').description('Manage storage');\nregisterStorageBucketsCommand(storageCmd);\nregisterStorageCreateBucketCommand(storageCmd);\nregisterStorageDeleteBucketCommand(storageCmd);\nregisterStorageListObjectsCommand(storageCmd);\nregisterStorageUploadCommand(storageCmd);\nregisterStorageDownloadCommand(storageCmd);\n\n// Deployments commands\nconst deploymentsCmd = program.command('deployments').description('Deploy and manage frontend sites');\nregisterDeploymentsDeployCommand(deploymentsCmd);\nregisterDeploymentsListCommand(deploymentsCmd);\nregisterDeploymentsStatusCommand(deploymentsCmd);\nregisterDeploymentsCancelCommand(deploymentsCmd);\nregisterDeploymentsEnvVarsCommand(deploymentsCmd);\n// registerDeploymentsMetadataCommand(deploymentsCmd);\n// slug command doesn't work yet.\n// registerDeploymentsSlugCommand(deploymentsCmd);\n\n// Secrets commands\nconst secretsCmd = program.command('secrets').description('Manage secrets');\nregisterSecretsListCommand(secretsCmd);\nregisterSecretsGetCommand(secretsCmd);\nregisterSecretsAddCommand(secretsCmd);\nregisterSecretsUpdateCommand(secretsCmd);\nregisterSecretsDeleteCommand(secretsCmd);\n\n// Logs command\nregisterLogsCommand(program);\n\n// Metadata command\nregisterMetadataCommand(program);\n\n// Diagnose commands\nconst diagnoseCmd = program.command('diagnose');\nregisterDiagnoseCommands(diagnoseCmd);\n\n// Schedules commands\nconst schedulesCmd = program.command('schedules').description('Manage scheduled tasks (cron jobs)');\nregisterSchedulesListCommand(schedulesCmd);\nregisterSchedulesGetCommand(schedulesCmd);\nregisterSchedulesCreateCommand(schedulesCmd);\nregisterSchedulesUpdateCommand(schedulesCmd);\nregisterSchedulesDeleteCommand(schedulesCmd);\nregisterSchedulesLogsCommand(schedulesCmd);\n\nif (process.argv.length <= 2 && process.stdout.isTTY) {\n await showInteractiveMenu();\n} else {\n program.parse();\n}\n\nasync function showInteractiveMenu(): Promise<void> {\n let isLoggedIn = false;\n let isLinked = false;\n\n try {\n isLoggedIn = !!getCredentials()?.access_token;\n } catch { /* corrupted credentials file */ }\n\n try {\n isLinked = !!getProjectConfig()?.project_id;\n } catch { /* no project config */ }\n\n console.log(INSFORGE_LOGO);\n clack.intro(`InsForge CLI v${pkg.version}`);\n\n type Action = 'login' | 'create' | 'link' | 'deploy' | 'docs' | 'help';\n const options: { value: Action; label: string; hint?: string }[] = [];\n\n if (!isLoggedIn) {\n options.push({ value: 'login', label: 'Log in to InsForge' });\n }\n\n options.push(\n { value: 'create', label: 'Create a new project', hint: isLoggedIn ? undefined : 'requires login' },\n { value: 'link', label: 'Link an existing project', hint: isLoggedIn ? undefined : 'requires login' },\n );\n\n if (isLinked) {\n options.push({ value: 'deploy', label: 'Deploy your project' });\n }\n\n options.push(\n { value: 'docs', label: 'View documentation' },\n { value: 'help', label: 'Show all commands' },\n );\n\n const action = await clack.select({\n message: 'What would you like to do?',\n options,\n });\n\n if (clack.isCancel(action)) {\n clack.cancel('Bye!');\n process.exit(0);\n }\n\n switch (action) {\n case 'login':\n await program.parseAsync(['node', 'insforge', 'login']);\n break;\n case 'create':\n await program.parseAsync(['node', 'insforge', 'create']);\n break;\n case 'link':\n await program.parseAsync(['node', 'insforge', 'link']);\n break;\n case 'deploy':\n await program.parseAsync(['node', 'insforge', 'deployments', 'deploy']);\n break;\n case 'docs':\n await program.parseAsync(['node', 'insforge', 'docs']);\n break;\n case 'help':\n program.help();\n break;\n }\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport type { GlobalConfig, ProjectConfig, StoredCredentials } from '../types.js';\n\nconst GLOBAL_DIR = join(homedir(), '.insforge');\nconst CREDENTIALS_FILE = join(GLOBAL_DIR, 'credentials.json');\nconst CONFIG_FILE = join(GLOBAL_DIR, 'config.json');\n\nconst DEFAULT_PLATFORM_URL = 'https://api.insforge.dev';\nconst DEFAULT_FRONTEND_URL = 'https://insforge.dev';\n\nfunction ensureGlobalDir(): void {\n if (!existsSync(GLOBAL_DIR)) {\n mkdirSync(GLOBAL_DIR, { recursive: true });\n }\n}\n\n// --- Global Config ---\n\nexport function getGlobalConfig(): GlobalConfig {\n if (!existsSync(CONFIG_FILE)) {\n return { platform_api_url: DEFAULT_PLATFORM_URL };\n }\n const raw = readFileSync(CONFIG_FILE, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveGlobalConfig(config: GlobalConfig): void {\n ensureGlobalDir();\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));\n}\n\n// --- Credentials ---\n\nexport function getCredentials(): StoredCredentials | null {\n if (!existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n const raw = readFileSync(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveCredentials(creds: StoredCredentials): void {\n ensureGlobalDir();\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2), { mode: 0o600 });\n}\n\nexport function clearCredentials(): void {\n if (existsSync(CREDENTIALS_FILE)) {\n unlinkSync(CREDENTIALS_FILE);\n }\n // Clear session-related config (default_org_id) but keep platform_api_url etc.\n const config = getGlobalConfig();\n if (config.default_org_id) {\n delete config.default_org_id;\n saveGlobalConfig(config);\n }\n}\n\n// --- Project Config (local) ---\n\nfunction getLocalConfigDir(): string {\n return join(process.cwd(), '.insforge');\n}\n\nfunction getLocalConfigFile(): string {\n return join(getLocalConfigDir(), 'project.json');\n}\n\nexport function getProjectConfig(): ProjectConfig | null {\n const file = getLocalConfigFile();\n if (!existsSync(file)) {\n return null;\n }\n const raw = readFileSync(file, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveProjectConfig(config: ProjectConfig): void {\n const dir = getLocalConfigDir();\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(getLocalConfigFile(), JSON.stringify(config, null, 2), { mode: 0o600 });\n}\n\n// --- Resolved values (env vars > flags > config) ---\n\nexport function getPlatformApiUrl(override?: string): string {\n return process.env.INSFORGE_API_URL ?? override ?? getGlobalConfig().platform_api_url ?? DEFAULT_PLATFORM_URL;\n}\n\nexport function getFrontendUrl(): string {\n return process.env.INSFORGE_FRONTEND_URL ?? DEFAULT_FRONTEND_URL;\n}\n\nexport function getAccessToken(): string | null {\n return process.env.INSFORGE_ACCESS_TOKEN ?? getCredentials()?.access_token ?? null;\n}\n\nexport function getProjectId(override?: string): string | null {\n return process.env.INSFORGE_PROJECT_ID ?? override ?? getProjectConfig()?.project_id ?? null;\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { saveCredentials } from '../lib/config.js';\nimport { login as platformLogin } from '../lib/api/platform.js';\nimport { performOAuthLogin } from '../lib/auth.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport type { StoredCredentials } from '../types.js';\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Authenticate with InsForge platform')\n .option('--email', 'Login with email and password instead of browser')\n .option('--client-id <id>', 'OAuth client ID (defaults to insforge-cli)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n\n try {\n if (opts.email) {\n await loginWithEmail(json, apiUrl);\n } else {\n await loginWithOAuth(json, apiUrl);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('cancelled')) {\n process.exit(0);\n }\n handleError(err, json);\n }\n });\n}\n\nasync function loginWithEmail(json: boolean, apiUrl?: string): Promise<void> {\n if (!json) {\n clack.intro('InsForge CLI');\n }\n\n const email = json\n ? process.env.INSFORGE_EMAIL\n : await clack.text({\n message: 'Email:',\n validate: (v) => (v.includes('@') ? undefined : 'Please enter a valid email'),\n });\n\n if (clack.isCancel(email)) {\n clack.cancel('Login cancelled.');\n throw new Error('cancelled');\n }\n\n const password = json\n ? process.env.INSFORGE_PASSWORD\n : await clack.password({\n message: 'Password:',\n });\n\n if (clack.isCancel(password)) {\n clack.cancel('Login cancelled.');\n throw new Error('cancelled');\n }\n\n if (!email || !password) {\n throw new Error('Email and password are required. Set INSFORGE_EMAIL and INSFORGE_PASSWORD environment variables for non-interactive mode.');\n }\n\n if (!json) {\n const s = clack.spinner();\n s.start('Authenticating...');\n\n const result = await platformLogin(email as string, password as string, apiUrl);\n const creds: StoredCredentials = {\n access_token: result.token,\n refresh_token: result._refreshToken ?? '',\n user: result.user,\n };\n saveCredentials(creds);\n\n s.stop(`Authenticated as ${result.user.email}`);\n clack.outro('Done');\n } else {\n const result = await platformLogin(email as string, password as string, apiUrl);\n const creds: StoredCredentials = {\n access_token: result.token,\n refresh_token: result._refreshToken ?? '',\n user: result.user,\n };\n saveCredentials(creds);\n console.log(JSON.stringify({ success: true, user: result.user }));\n }\n}\n\nasync function loginWithOAuth(json: boolean, apiUrl?: string): Promise<void> {\n if (!json) {\n clack.intro('InsForge CLI');\n }\n\n const creds = await performOAuthLogin(apiUrl);\n\n if (!json) {\n clack.outro('Done');\n } else {\n console.log(JSON.stringify({ success: true, user: creds.user }));\n }\n}\n","import type { Command } from 'commander';\n\nexport class CLIError extends Error {\n constructor(\n message: string,\n public exitCode: number = 1,\n public code?: string,\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\nexport class AuthError extends CLIError {\n constructor(message: string = 'Not authenticated. Run `npx @insforge/cli login` first.') {\n super(message, 2, 'AUTH_ERROR');\n }\n}\n\nexport class ProjectNotLinkedError extends CLIError {\n constructor() {\n super('No project linked. Run `npx @insforge/cli link` first.', 3, 'PROJECT_NOT_LINKED');\n }\n}\n\nexport class NotFoundError extends CLIError {\n constructor(resource: string) {\n super(`${resource} not found.`, 4, 'NOT_FOUND');\n }\n}\n\nexport class PermissionError extends CLIError {\n constructor(message: string = 'Permission denied.') {\n super(message, 5, 'PERMISSION_DENIED');\n }\n}\n\n/**\n * Extract error message from a deployment's metadata field.\n * DeploymentSchema stores errors in metadata.error.errorMessage rather than a top-level field.\n */\nexport function getDeploymentError(metadata: Record<string, unknown> | null): string | null {\n if (!metadata || typeof metadata.error !== 'object' || !metadata.error) return null;\n return (metadata.error as { errorMessage?: string }).errorMessage ?? null;\n}\n\nexport function handleError(err: unknown, json: boolean): never {\n if (err instanceof CLIError) {\n if (json) {\n console.error(JSON.stringify({ error: err.message, code: err.code }));\n } else {\n console.error(`Error: ${err.message}`);\n }\n process.exit(err.exitCode);\n }\n\n const message = err instanceof Error ? err.message : String(err);\n if (json) {\n console.error(JSON.stringify({ error: message, code: 'UNKNOWN_ERROR' }));\n } else {\n console.error(`Error: ${message}`);\n }\n process.exit(1);\n}\n\nexport function getJsonFlag(cmd: Command): boolean {\n let root: Command = cmd;\n while (root.parent) {\n root = root.parent;\n }\n return root.opts().json ?? false;\n}\n\nexport function getRootOpts(cmd: Command): { json: boolean; apiUrl?: string; yes: boolean } {\n let root: Command = cmd;\n while (root.parent) {\n root = root.parent;\n }\n const opts = root.opts();\n return {\n json: opts.json ?? false,\n apiUrl: opts.apiUrl,\n yes: opts.yes ?? false,\n };\n}\n","import { createServer } from 'node:http';\nimport { randomBytes, createHash } from 'node:crypto';\nimport { URL } from 'node:url';\nimport * as clack from '@clack/prompts';\nimport { getGlobalConfig, getPlatformApiUrl, saveCredentials } from './config.js';\nimport { getProfile } from './api/platform.js';\nimport type { StoredCredentials } from '../types.js';\n\n// Default OAuth client for InsForge CLI (pre-registered on the platform)\nexport const DEFAULT_CLIENT_ID = 'clf_NK8cMUs41gm8ZcfdtSguVw';\nexport const OAUTH_SCOPES = 'user:read organizations:read projects:read projects:write';\n\nexport interface PKCEChallenge {\n code_verifier: string;\n code_challenge: string;\n}\n\nexport interface OAuthCallbackResult {\n code: string;\n state: string;\n}\n\n/**\n * Generate PKCE code_verifier and code_challenge (S256).\n */\nexport function generatePKCE(): PKCEChallenge {\n const code_verifier = randomBytes(32).toString('base64url');\n const code_challenge = createHash('sha256').update(code_verifier).digest('base64url');\n return { code_verifier, code_challenge };\n}\n\n/**\n * Generate a random state parameter for CSRF protection.\n */\nexport function generateState(): string {\n return randomBytes(16).toString('base64url');\n}\n\n/**\n * Build the OAuth authorization URL.\n */\nexport function buildAuthorizeUrl(params: {\n platformUrl: string;\n clientId: string;\n redirectUri: string;\n codeChallenge: string;\n state: string;\n scopes: string;\n}): string {\n const url = new URL(`${params.platformUrl}/api/oauth/v1/authorize`);\n url.searchParams.set('client_id', params.clientId);\n url.searchParams.set('redirect_uri', params.redirectUri);\n url.searchParams.set('response_type', 'code');\n url.searchParams.set('scope', params.scopes);\n url.searchParams.set('code_challenge', params.codeChallenge);\n url.searchParams.set('code_challenge_method', 'S256');\n url.searchParams.set('state', params.state);\n return url.toString();\n}\n\n/**\n * Exchange authorization code for tokens via the token endpoint.\n */\nexport async function exchangeCodeForTokens(params: {\n platformUrl: string;\n code: string;\n redirectUri: string;\n clientId: string;\n codeVerifier: string;\n}): Promise<{ access_token: string; refresh_token: string; expires_in: number; scope: string }> {\n const res = await fetch(`${params.platformUrl}/api/oauth/v1/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'authorization_code',\n code: params.code,\n redirect_uri: params.redirectUri,\n client_id: params.clientId,\n code_verifier: params.codeVerifier,\n }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error_description?: string; error?: string };\n throw new Error(err.error_description ?? err.error ?? 'Token exchange failed');\n }\n\n return await res.json() as { access_token: string; refresh_token: string; expires_in: number; scope: string };\n}\n\n/**\n * Refresh an OAuth access token using a refresh token.\n */\nexport async function refreshOAuthToken(params: {\n platformUrl: string;\n refreshToken: string;\n clientId: string;\n}): Promise<{ access_token: string; refresh_token?: string; expires_in: number }> {\n const res = await fetch(`${params.platformUrl}/api/oauth/v1/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'refresh_token',\n refresh_token: params.refreshToken,\n client_id: params.clientId,\n }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error_description?: string; error?: string };\n throw new Error(err.error_description ?? err.error ?? 'Token refresh failed');\n }\n\n return await res.json() as { access_token: string; refresh_token?: string; expires_in: number };\n}\n\n/**\n * Start a local HTTP server to receive the OAuth authorization code callback.\n */\nexport function startCallbackServer(): Promise<{\n port: number;\n result: Promise<OAuthCallbackResult>;\n close: () => void;\n}> {\n return new Promise((resolveServer) => {\n let resolveResult: (value: OAuthCallbackResult) => void;\n let rejectResult: (reason: Error) => void;\n\n const resultPromise = new Promise<OAuthCallbackResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? '/', 'http://localhost');\n\n if (url.pathname === '/callback') {\n const code = url.searchParams.get('code');\n const state = url.searchParams.get('state');\n const error = url.searchParams.get('error');\n\n if (error) {\n const desc = url.searchParams.get('error_description') ?? error;\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(`<html><body><h2>Authentication failed</h2><p>${desc}</p><p>You can close this window.</p></body></html>`);\n rejectResult!(new Error(desc));\n return;\n }\n\n if (!code || !state) {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end('<html><body><h2>Invalid callback</h2><p>Missing authorization code.</p></body></html>');\n return;\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end('<html><body><h2>Authentication successful!</h2><p>You can close this window and return to the terminal.</p></body></html>');\n resolveResult!({ code, state });\n } else {\n res.writeHead(404);\n res.end('Not found');\n }\n });\n\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address();\n const port = typeof addr === 'object' ? addr!.port : 0;\n resolveServer({\n port,\n result: resultPromise,\n close: () => { server.close(); server.closeAllConnections(); },\n });\n });\n\n // Timeout after 5 minutes (unref so it doesn't keep the process alive)\n setTimeout(() => {\n rejectResult!(new Error('Authentication timed out. Please try again.'));\n server.close();\n }, 5 * 60 * 1000).unref();\n });\n}\n\n/**\n * Perform the full OAuth PKCE login flow:\n * generate PKCE + state, start callback server, open browser, exchange code, save credentials.\n * Returns the stored credentials on success.\n */\nexport async function performOAuthLogin(apiUrl?: string): Promise<StoredCredentials> {\n const platformUrl = getPlatformApiUrl(apiUrl);\n const config = getGlobalConfig();\n const clientId = config.oauth_client_id ?? DEFAULT_CLIENT_ID;\n\n // 1. Generate PKCE and state\n const pkce = generatePKCE();\n const state = generateState();\n\n // 2. Start local callback server\n const { port, result, close } = await startCallbackServer();\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n\n // 3. Build authorization URL\n const authUrl = buildAuthorizeUrl({\n platformUrl,\n clientId,\n redirectUri,\n codeChallenge: pkce.code_challenge,\n state,\n scopes: OAUTH_SCOPES,\n });\n\n clack.log.info('Opening browser for authentication...');\n clack.log.info(`If browser doesn't open, visit:\\n${authUrl}`);\n\n // 4. Open browser\n try {\n const open = (await import('open')).default;\n await open(authUrl);\n } catch {\n clack.log.warn('Could not open browser. Please visit the URL above.');\n }\n\n // 5. Wait for callback\n const s = clack.spinner();\n s.start('Waiting for authentication...');\n\n try {\n const callbackResult = await result;\n close();\n\n // Verify state\n if (callbackResult.state !== state) {\n s.stop('Authentication failed');\n throw new Error('State mismatch. Possible CSRF attack.');\n }\n\n // 6. Exchange code for tokens\n s.message('Exchanging authorization code...');\n const tokens = await exchangeCodeForTokens({\n platformUrl,\n code: callbackResult.code,\n redirectUri,\n clientId,\n codeVerifier: pkce.code_verifier,\n });\n\n // 7. Save credentials and fetch profile\n const creds: StoredCredentials = {\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token,\n user: { id: '', name: '', email: '', avatar_url: null, email_verified: true },\n };\n saveCredentials(creds);\n\n try {\n const profile = await getProfile(apiUrl);\n creds.user = profile;\n saveCredentials(creds);\n s.stop(`Authenticated as ${profile.email}`);\n } catch {\n s.stop('Authenticated successfully');\n }\n\n return creds;\n } catch (err) {\n close();\n s.stop('Authentication failed');\n throw err;\n }\n}\n","import { getCredentials, getGlobalConfig, getPlatformApiUrl, saveCredentials, getProjectConfig } from './config.js';\nimport { AuthError } from './errors.js';\nimport { refreshOAuthToken, DEFAULT_CLIENT_ID, performOAuthLogin } from './auth.js';\nimport * as clack from '@clack/prompts';\nimport type { StoredCredentials } from '../types.js';\n\nexport async function requireAuth(apiUrl?: string, allowOssBypass = true): Promise<StoredCredentials> {\n const projConfig = getProjectConfig();\n if (allowOssBypass && projConfig?.project_id === 'oss-project') {\n return {\n access_token: 'oss-token',\n refresh_token: 'oss-refresh',\n user: {\n id: 'oss-user',\n name: 'OSS User',\n email: 'oss@insforge.local',\n avatar_url: null,\n email_verified: true,\n },\n };\n }\n\n const creds = getCredentials();\n if (creds && creds.access_token) return creds;\n\n clack.log.info('You need to log in to continue.');\n\n for (;;) {\n try {\n return await performOAuthLogin(apiUrl);\n } catch (err) {\n if (!process.stdout.isTTY) throw err;\n\n const msg = err instanceof Error ? err.message : 'Unknown error';\n clack.log.error(`Login failed: ${msg}`);\n\n const retry = await clack.confirm({ message: 'Would you like to try again?' });\n if (clack.isCancel(retry) || !retry) {\n throw new AuthError('Authentication required. Run `npx @insforge/cli login` to authenticate.');\n }\n }\n }\n}\n\nexport async function refreshAccessToken(apiUrl?: string): Promise<string> {\n const creds = getCredentials();\n if (!creds?.refresh_token) {\n throw new AuthError('Refresh token not found. Run `npx @insforge/cli login` again.');\n }\n\n const platformUrl = getPlatformApiUrl(apiUrl);\n const config = getGlobalConfig();\n const clientId = config.oauth_client_id ?? DEFAULT_CLIENT_ID;\n\n try {\n const data = await refreshOAuthToken({\n platformUrl,\n refreshToken: creds.refresh_token,\n clientId,\n });\n\n const updated: StoredCredentials = {\n ...creds,\n access_token: data.access_token,\n // Update refresh token if rotated\n refresh_token: data.refresh_token ?? creds.refresh_token,\n };\n saveCredentials(updated);\n return data.access_token;\n } catch {\n // Token refresh failed — try re-authenticating interactively\n if (process.stdout.isTTY) {\n clack.log.warn('Session expired. Please log in again.');\n const newCreds = await performOAuthLogin(apiUrl);\n return newCreds.access_token;\n }\n throw new AuthError('Failed to refresh token. Run `npx @insforge/cli login` again.');\n }\n}\n","import { getAccessToken, getPlatformApiUrl } from '../config.js';\nimport { AuthError, CLIError } from '../errors.js';\nimport { refreshAccessToken } from '../credentials.js';\nimport type {\n ApiKeyResponse,\n LoginResponse,\n Organization,\n Project,\n User,\n} from '../../types.js';\n\nexport async function platformFetch(\n path: string,\n options: RequestInit = {},\n apiUrl?: string,\n): Promise<Response> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const token = getAccessToken();\n if (!token) {\n throw new AuthError();\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n ...(options.headers as Record<string, string> ?? {}),\n };\n\n const res = await fetch(`${baseUrl}${path}`, { ...options, headers });\n\n // Auto-refresh on 401\n if (res.status === 401) {\n const newToken = await refreshAccessToken(apiUrl);\n headers.Authorization = `Bearer ${newToken}`;\n const retryRes = await fetch(`${baseUrl}${path}`, { ...options, headers });\n if (!retryRes.ok) {\n const err = await retryRes.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Request failed: ${retryRes.status}`, retryRes.status === 403 ? 5 : 1);\n }\n return retryRes;\n }\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Request failed: ${res.status}`, res.status === 403 ? 5 : 1);\n }\n\n return res;\n}\n\n// --- Auth ---\n\nexport async function login(email: string, password: string, apiUrl?: string): Promise<LoginResponse & { _refreshToken?: string }> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const res = await fetch(`${baseUrl}/auth/v1/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email, password }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new AuthError(err.error ?? 'Login failed. Check your email and password.');\n }\n\n // Extract refresh token from Set-Cookie header\n const setCookie = res.headers.get('set-cookie') ?? '';\n const refreshTokenMatch = setCookie.match(/refreshToken=([^;]+)/);\n const data = (await res.json()) as LoginResponse;\n\n return {\n ...data,\n // Attach refresh token to the response for storage\n _refreshToken: refreshTokenMatch?.[1],\n } as LoginResponse & { _refreshToken?: string };\n}\n\nexport async function getProfile(apiUrl?: string): Promise<User> {\n const res = await platformFetch('/auth/v1/profile', {}, apiUrl);\n const data = await res.json() as { user?: User };\n return data.user ?? (data as unknown as User);\n}\n\n// --- Organizations ---\n\nexport async function listOrganizations(apiUrl?: string): Promise<Organization[]> {\n const res = await platformFetch('/organizations/v1', {}, apiUrl);\n const data = await res.json() as { organizations?: Organization[] };\n return data.organizations ?? (data as unknown as Organization[]);\n}\n\n// --- Projects ---\n\nexport async function listProjects(orgId: string, apiUrl?: string): Promise<Project[]> {\n const res = await platformFetch(`/organizations/v1/${orgId}/projects`, {}, apiUrl);\n const data = await res.json() as { projects?: Project[] };\n return data.projects ?? (data as unknown as Project[]);\n}\n\nexport async function getProject(projectId: string, apiUrl?: string): Promise<Project> {\n const res = await platformFetch(`/projects/v1/${projectId}`, {}, apiUrl);\n const data = await res.json() as { project?: Project };\n return data.project ?? (data as unknown as Project);\n}\n\nexport async function getProjectApiKey(projectId: string, apiUrl?: string): Promise<string> {\n const res = await platformFetch(`/projects/v1/${projectId}/access-api-key`, {}, apiUrl);\n const data = (await res.json()) as ApiKeyResponse;\n return data.access_api_key;\n}\n\nexport async function reportAgentConnected(\n payload: { project_id?: string; app_key?: string },\n apiUrl?: string,\n): Promise<void> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n const token = getAccessToken();\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n await fetch(`${baseUrl}/tracking/v1/agent-connected`, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n}\n\nexport async function createProject(\n orgId: string,\n name: string,\n region?: string,\n apiUrl?: string,\n): Promise<Project> {\n const body: Record<string, string> = { name };\n if (region) body.region = region;\n\n const res = await platformFetch(`/organizations/v1/${orgId}/projects`, {\n method: 'POST',\n body: JSON.stringify(body),\n }, apiUrl);\n const data = await res.json() as { project?: Project };\n return data.project ?? (data as unknown as Project);\n}\n\n","import Table from 'cli-table3';\n\nexport function outputJson(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n}\n\nexport function outputTable(headers: string[], rows: string[][]): void {\n const table = new Table({\n head: headers,\n style: { head: ['cyan'] },\n });\n for (const row of rows) {\n table.push(row);\n }\n console.log(table.toString());\n}\n\nexport function outputSuccess(message: string): void {\n console.log(`✓ ${message}`);\n}\n\nexport function outputInfo(message: string): void {\n console.log(message);\n}\n","import type { Command } from 'commander';\nimport { clearCredentials } from '../lib/config.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputSuccess, outputJson } from '../lib/output.js';\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out from InsForge platform')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n clearCredentials();\n if (json) {\n outputJson({ success: true, message: 'Logged out successfully' });\n } else {\n outputSuccess('Logged out successfully.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getProfile } from '../lib/api/platform.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputInfo } from '../lib/output.js';\nimport { requireAuth } from '../lib/credentials.js';\n\nexport function registerWhoamiCommand(program: Command): void {\n program\n .command('whoami')\n .description('Show current authenticated user')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const profile = await getProfile(apiUrl);\n\n if (json) {\n outputJson(profile);\n } else {\n outputInfo(`Logged in as: ${profile.email ?? profile.name}`);\n if (profile.name) outputInfo(`Name: ${profile.name}`);\n if (profile.id) outputInfo(`ID: ${profile.id}`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { listOrganizations } from '../../lib/api/platform.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerOrgsCommands(orgsCmd: Command): void {\n orgsCmd\n .command('list')\n .description('List all organizations')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const orgs = await listOrganizations(apiUrl);\n\n if (json) {\n outputJson(orgs);\n } else {\n if (!orgs.length) {\n console.log('No organizations found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Type'],\n orgs.map((o) => [\n o.id,\n o.name,\n o.type ?? '-',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { listOrganizations, listProjects } from '../../lib/api/platform.js';\nimport { getGlobalConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerProjectsCommands(projectsCmd: Command): void {\n projectsCmd\n .command('list')\n .description('List all projects in an organization')\n .option('--org-id <id>', 'Organization ID (uses default if not specified)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n\n let orgId = opts.orgId ?? getGlobalConfig().default_org_id;\n\n if (!orgId) {\n // Try to auto-select if user has only one org\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found. Create one on the InsForge dashboard.');\n }\n if (orgs.length === 1) {\n orgId = orgs[0].id;\n } else if (!json) {\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) {\n process.exit(0);\n }\n orgId = selected as string;\n } else {\n throw new CLIError('Multiple organizations found. Specify --org-id.');\n }\n }\n\n const projects = await listProjects(orgId, apiUrl);\n\n if (json) {\n outputJson(projects);\n } else {\n if (!projects.length) {\n console.log('No projects found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Region', 'Status', 'AppKey'],\n projects.map((p) => [p.id, p.name, p.region, p.status, p.appkey]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport {\n listOrganizations,\n listProjects,\n getProject,\n getProjectApiKey,\n reportAgentConnected,\n} from '../../lib/api/platform.js';\nimport { getGlobalConfig, saveGlobalConfig, saveProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { installSkills, reportCliUsage } from '../../lib/skills.js';\nimport type { ProjectConfig } from '../../types.js';\n\nfunction buildOssHost(appkey: string, region: string): string {\n return `https://${appkey}.${region}.insforge.app`;\n}\n\nexport function registerProjectLinkCommand(program: Command): void {\n program\n .command('link')\n .description('Link current directory to an InsForge project')\n .option('--project-id <id>', 'Project ID to link')\n .option('--org-id <id>', 'Organization ID')\n .option('--api-base-url <url>', 'API Base URL for direct linking (OSS/Self-hosted)')\n .option('--api-key <key>', 'API Key for direct linking (OSS/Self-hosted)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n if (opts.apiBaseUrl || opts.apiKey) {\n try {\n if (!opts.apiBaseUrl || !opts.apiKey) {\n throw new CLIError('Both --api-base-url and --api-key must be provided together for direct linking.');\n }\n\n try {\n new URL(opts.apiBaseUrl);\n } catch {\n throw new CLIError('Invalid --api-base-url. Please provide a valid URL.');\n }\n\n // Direct OSS/Self-hosted linking bypasses OAuth\n const projectConfig: ProjectConfig = {\n project_id: 'oss-project',\n project_name: 'oss-project',\n org_id: 'oss-org',\n appkey: 'oss',\n region: 'local',\n api_key: opts.apiKey,\n oss_host: opts.apiBaseUrl.replace(/\\/$/, ''), // remove trailing slash if any\n };\n\n saveProjectConfig(projectConfig);\n\n if (json) {\n outputJson({ success: true, project: { id: projectConfig.project_id, name: projectConfig.project_name, region: projectConfig.region } });\n } else {\n outputSuccess(`Linked to direct project at ${projectConfig.oss_host}`);\n }\n\n // Install agent skills\n await installSkills(json);\n await reportCliUsage('cli.link_direct', true, 6);\n\n // Report agent-connected event (best-effort)\n try {\n const urlMatch = opts.apiBaseUrl.match(/^https?:\\/\\/([^.]+)\\.[^.]+\\.insforge\\.app/);\n if (urlMatch) {\n await reportAgentConnected({ app_key: urlMatch[1] }, apiUrl);\n }\n } catch { /* ignore */ }\n return;\n } catch (err) {\n await reportCliUsage('cli.link_direct', false);\n handleError(err, json);\n }\n }\n\n const creds = await requireAuth(apiUrl, false);\n\n let orgId = opts.orgId;\n let projectId = opts.projectId;\n\n // Show organization selection\n if (!orgId && !projectId) {\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found.');\n }\n if (json) {\n throw new CLIError('Specify --org-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n orgId = selected as string;\n }\n\n // Save default org\n const config = getGlobalConfig();\n config.default_org_id = orgId;\n saveGlobalConfig(config);\n\n // Select project if not specified\n if (!projectId) {\n const projects = await listProjects(orgId, apiUrl);\n if (projects.length === 0) {\n throw new CLIError('No projects found in this organization.');\n }\n if (json) {\n throw new CLIError('Specify --project-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select a project to link:',\n options: projects.map((p) => ({\n value: p.id,\n label: `${p.name} (${p.region}, ${p.status})`,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n projectId = selected as string;\n }\n\n // Fetch project details and API key\n let project;\n let apiKey;\n try {\n [project, apiKey] = await Promise.all([\n getProject(projectId, apiUrl),\n getProjectApiKey(projectId, apiUrl),\n ]);\n } catch (err) {\n if (err instanceof CLIError && (err.exitCode === 5 || err.exitCode === 4 || err.message.includes('not found'))) {\n const identity = creds.user?.email ?? creds.user?.name ?? 'unknown user';\n throw new CLIError(\n `You're logged in as ${identity}, and you don't have access to project ${projectId}. Check that the project ID is correct and belongs to one of your organizations.`,\n 5,\n 'PERMISSION_DENIED',\n );\n }\n throw err;\n }\n\n const projectConfig: ProjectConfig = {\n project_id: project.id,\n project_name: project.name,\n org_id: project.organization_id,\n appkey: project.appkey,\n region: project.region,\n api_key: apiKey,\n oss_host: buildOssHost(project.appkey, project.region),\n };\n\n saveProjectConfig(projectConfig);\n\n if (json) {\n outputJson({ success: true, project: { id: project.id, name: project.name, region: project.region } });\n } else {\n outputSuccess(`Linked to project \"${project.name}\" (${project.appkey}.${project.region})`);\n }\n\n // Install agent skills\n await installSkills(json);\n await reportCliUsage('cli.link', true, 6);\n\n // Report agent-connected event (best-effort)\n try {\n await reportAgentConnected({ project_id: project.id }, apiUrl);\n } catch { /* ignore */ }\n } catch (err) {\n await reportCliUsage('cli.link', false);\n handleError(err, json);\n }\n });\n}\n\n\n","import { exec } from 'node:child_process';\nimport { existsSync, readFileSync, appendFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { promisify } from 'node:util';\nimport * as clack from '@clack/prompts';\nimport { getProjectConfig } from './config.js';\n\nconst execAsync = promisify(exec);\n\nconst GITIGNORE_ENTRIES = [\n '.insforge',\n '.agent',\n '.agents',\n '.augment',\n '.claude',\n '.cline',\n '.github/copilot*',\n '.kilocode',\n '.qoder',\n '.qwen',\n '.roo',\n '.trae',\n '.windsurf',\n];\n\nfunction updateGitignore(): void {\n const gitignorePath = join(process.cwd(), '.gitignore');\n const existing = existsSync(gitignorePath) ? readFileSync(gitignorePath, 'utf-8') : '';\n const lines = new Set(existing.split('\\n').map((l) => l.trim()));\n\n const missing = GITIGNORE_ENTRIES.filter((entry) => !lines.has(entry));\n if (!missing.length) return;\n\n const block = `\\n# InsForge & AI agent skills\\n${missing.join('\\n')}\\n`;\n appendFileSync(gitignorePath, block);\n}\n\nexport async function installSkills(json: boolean): Promise<void> {\n try {\n if (!json) clack.log.info('Installing InsForge agent skills...');\n await execAsync('npx skills add insforge/agent-skills -y -a antigravity -a augment -a claude-code -a cline -a codex -a cursor -a gemini-cli -a github-copilot -a kilo -a qoder -a qwen-code -a roo -a trae -a windsurf', {\n cwd: process.cwd(),\n timeout: 60_000,\n });\n if (!json) clack.log.success('InsForge agent skills installed.');\n } catch {\n if (!json) clack.log.warn('Failed to install agent skills. You can run manually: npx skills add insforge/agent-skills');\n }\n\n // Install find-skills from vercel-labs for skill discovery\n try {\n if (!json) clack.log.info('Installing find-skills...');\n await execAsync('npx skills add https://github.com/vercel-labs/skills --skill find-skills -y', {\n cwd: process.cwd(),\n timeout: 60_000,\n });\n if (!json) clack.log.success('find-skills installed.');\n } catch {\n if (!json) clack.log.warn('Failed to install find-skills. You can run manually: npx skills add https://github.com/vercel-labs/skills --skill find-skills');\n }\n\n try {\n updateGitignore();\n } catch {\n // non-critical, silently ignore\n }\n}\n\nexport async function reportCliUsage(toolName: string, success: boolean, maxRetries = 1): Promise<void> {\n let config;\n try {\n config = getProjectConfig();\n } catch {\n return;\n }\n if (!config) return;\n\n const payload = JSON.stringify({\n tool_name: toolName,\n success,\n timestamp: new Date().toISOString(),\n });\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 3_000);\n try {\n const res = await fetch(`${config.oss_host}/api/usage/mcp`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': config.api_key,\n },\n body: payload,\n signal: controller.signal,\n });\n\n if (res.status < 500) return;\n // 5xx — server may not be ready yet, retry\n } finally {\n clearTimeout(timer);\n }\n } catch {\n // network/abort error — server may not be ready yet, retry\n }\n\n if (attempt < maxRetries - 1) {\n await new Promise((r) => setTimeout(r, 5_000));\n }\n }\n}\n","import { getProjectConfig } from '../config.js';\nimport { CLIError, ProjectNotLinkedError } from '../errors.js';\nimport type { ProjectConfig } from '../../types.js';\n\nfunction requireProjectConfig(): ProjectConfig {\n const config = getProjectConfig();\n if (!config) {\n throw new ProjectNotLinkedError();\n }\n return config;\n}\n\n/**\n * Unified OSS API fetch. Uses API key as Bearer token for all requests,\n * which grants superadmin access (SQL execution, bucket management, etc.).\n */\nexport interface RawSqlResult {\n rows: Record<string, unknown>[];\n raw: Record<string, unknown>;\n}\n\nexport async function runRawSql(sql: string, unrestricted = false): Promise<RawSqlResult> {\n const endpoint = unrestricted\n ? '/api/database/advance/rawsql/unrestricted'\n : '/api/database/advance/rawsql';\n const res = await ossFetch(endpoint, {\n method: 'POST',\n body: JSON.stringify({ query: sql }),\n });\n const raw = await res.json() as Record<string, unknown>;\n const rows = (raw.rows ?? raw.data ?? []) as Record<string, unknown>[];\n return { rows, raw };\n}\n\nexport async function getAnonKey(): Promise<string> {\n const res = await ossFetch('/api/auth/tokens/anon', { method: 'POST' });\n const data = await res.json() as { accessToken: string };\n return data.accessToken;\n}\n\nexport async function ossFetch(\n path: string,\n options: RequestInit = {},\n): Promise<Response> {\n const config = requireProjectConfig();\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.api_key}`,\n ...(options.headers as Record<string, string> ?? {}),\n };\n\n const res = await fetch(`${config.oss_host}${path}`, { ...options, headers });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `OSS request failed: ${res.status}`);\n }\n\n return res;\n}\n","import type { Command } from 'commander';\nimport { runRawSql } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbCommands(dbCmd: Command): void {\n dbCmd\n .command('query <sql>')\n .description('Execute a SQL query against the database')\n .option('--unrestricted', 'Use unrestricted mode (allows system table access)')\n .action(async (sql: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const { rows, raw } = await runRawSql(sql, !!opts.unrestricted);\n\n if (json) {\n outputJson(raw);\n } else {\n if (rows.length > 0) {\n const headers = Object.keys(rows[0]);\n outputTable(\n headers,\n rows.map((row) => headers.map((h) => String(row[h] ?? ''))),\n );\n console.log(`${rows.length} row(s) returned.`);\n } else {\n console.log('Query executed successfully.');\n if (rows.length === 0) {\n console.log('No rows returned.');\n }\n }\n }\n await reportCliUsage('cli.db.query', true);\n } catch (err) {\n await reportCliUsage('cli.db.query', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbTablesCommand(dbCmd: Command): void {\n dbCmd\n .command('tables')\n .description('List all database tables')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/tables');\n const tables = await res.json() as string[];\n\n if (json) {\n outputJson(tables);\n } else {\n if (tables.length === 0) {\n console.log('No tables found.');\n return;\n }\n outputTable(\n ['Table Name'],\n tables.map((t) => [t]),\n );\n }\n await reportCliUsage('cli.db.tables', true);\n } catch (err) {\n await reportCliUsage('cli.db.tables', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DatabaseFunctionsResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbFunctionsCommand(dbCmd: Command): void {\n dbCmd\n .command('functions')\n .description('List all database functions')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/functions');\n const raw = await res.json();\n const functions: DatabaseFunctionsResponse['functions'] = Array.isArray(raw)\n ? raw\n : (raw as DatabaseFunctionsResponse).functions ?? [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (functions.length === 0) {\n console.log('No database functions found.');\n return;\n }\n outputTable(\n ['Name', 'Definition', 'Kind'],\n functions.map((f) => [f.functionName, f.functionDef, f.kind]),\n );\n }\n await reportCliUsage('cli.db.functions', true);\n } catch (err) {\n await reportCliUsage('cli.db.functions', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DatabaseIndexesResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbIndexesCommand(dbCmd: Command): void {\n dbCmd\n .command('indexes')\n .description('List all database indexes')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/indexes');\n const raw = await res.json();\n const indexes: DatabaseIndexesResponse['indexes'] = Array.isArray(raw)\n ? raw\n : (raw as DatabaseIndexesResponse).indexes ?? [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (indexes.length === 0) {\n console.log('No database indexes found.');\n return;\n }\n outputTable(\n ['Table', 'Index Name', 'Definition', 'Unique', 'Primary'],\n indexes.map((i) => [\n i.tableName,\n i.indexName,\n i.indexDef,\n i.isUnique ? 'Yes' : 'No',\n i.isPrimary ? 'Yes' : 'No',\n ]),\n );\n }\n await reportCliUsage('cli.db.indexes', true);\n } catch (err) {\n await reportCliUsage('cli.db.indexes', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DatabasePoliciesResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbPoliciesCommand(dbCmd: Command): void {\n dbCmd\n .command('policies')\n .description('List all RLS policies')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/policies');\n const raw = await res.json();\n const policies: DatabasePoliciesResponse['policies'] = Array.isArray(raw)\n ? raw\n : (raw as DatabasePoliciesResponse).policies ?? [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (policies.length === 0) {\n console.log('No RLS policies found.');\n return;\n }\n outputTable(\n ['Table', 'Policy Name', 'Command', 'Roles', 'Qual', 'With Check'],\n policies.map((p) => [\n String(p.tableName ?? '-'),\n String(p.policyName ?? '-'),\n String(p.cmd ?? '-'),\n Array.isArray(p.roles) ? p.roles.join(', ') : String(p.roles ?? '-'),\n String(p.qual ?? '-'),\n String(p.withCheck ?? '-'),\n ]),\n );\n }\n await reportCliUsage('cli.db.policies', true);\n } catch (err) {\n await reportCliUsage('cli.db.policies', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DatabaseTriggersResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbTriggersCommand(dbCmd: Command): void {\n dbCmd\n .command('triggers')\n .description('List all database triggers')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/triggers');\n const raw = await res.json();\n const triggers: DatabaseTriggersResponse['triggers'] = Array.isArray(raw)\n ? raw\n : (raw as DatabaseTriggersResponse).triggers ?? [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (triggers.length === 0) {\n console.log('No database triggers found.');\n return;\n }\n outputTable(\n ['Name', 'Table', 'Timing', 'Events', 'ActionOrientation', 'ActionCondition', 'ActionStatement'],\n triggers.map((t) => [\n t.triggerName,\n t.tableName,\n t.actionTiming,\n t.eventManipulation,\n t.actionOrientation,\n t.actionCondition ?? '-',\n t.actionStatement,\n ]),\n );\n }\n await reportCliUsage('cli.db.triggers', true);\n } catch (err) {\n await reportCliUsage('cli.db.triggers', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbRpcCommand(dbCmd: Command): void {\n dbCmd\n .command('rpc <functionName>')\n .description('Call a database function via RPC')\n .option('--data <json>', 'JSON body to pass as function parameters')\n .action(async (functionName: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body = opts.data ? JSON.stringify(JSON.parse(opts.data) as unknown) : undefined;\n\n const res = await ossFetch(`/api/database/rpc/${encodeURIComponent(functionName)}`, {\n method: body ? 'POST' : 'GET',\n ...(body ? { body } : {}),\n });\n\n const result = await res.json() as unknown;\n\n if (json) {\n outputJson(result);\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n await reportCliUsage('cli.db.rpc', true);\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { writeFileSync } from 'node:fs';\nimport type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDbExportCommand(dbCmd: Command): void {\n dbCmd\n .command('export')\n .description('Export database schema and/or data')\n .option('--format <format>', 'Export format: sql or json', 'sql')\n .option('--tables <tables>', 'Comma-separated list of tables to export (default: all)')\n .option('--no-data', 'Exclude table data (schema only)')\n .option('--include-functions', 'Include database functions')\n .option('--include-sequences', 'Include sequences')\n .option('--include-views', 'Include views')\n .option('--row-limit <n>', 'Maximum rows per table')\n .option('-o, --output <file>', 'Output file path (default: stdout)')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = {\n format: opts.format,\n includeData: opts.data !== false,\n };\n\n if (opts.tables) {\n body.tables = (opts.tables as string).split(',').map((t: string) => t.trim());\n }\n if (opts.includeFunctions) body.includeFunctions = true;\n if (opts.includeSequences) body.includeSequences = true;\n if (opts.includeViews) body.includeViews = true;\n if (opts.rowLimit) body.rowLimit = parseInt(opts.rowLimit as string, 10);\n\n const res = await ossFetch('/api/database/advance/export', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n\n const raw = await res.text();\n\n // API may return JSON wrapper { format, content, tables } or raw SQL/JSON text\n let content: string;\n let meta: { format?: string; tables?: string[] } | null = null;\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n if (typeof parsed.content === 'string') {\n content = parsed.content;\n meta = { format: parsed.format as string, tables: parsed.tables as string[] };\n } else {\n content = raw;\n }\n } catch {\n content = raw;\n }\n\n if (json) {\n outputJson(meta ?? { content });\n return;\n }\n\n if (opts.output) {\n writeFileSync(opts.output as string, content);\n const tableCount = meta?.tables?.length;\n const suffix = tableCount ? ` (${tableCount} tables, format: ${meta?.format ?? opts.format})` : '';\n outputSuccess(`Exported to ${opts.output}${suffix}`);\n } else {\n console.log(content);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { readFileSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDbImportCommand(dbCmd: Command): void {\n dbCmd\n .command('import <file>')\n .description('Import database from a local SQL file')\n .option('--truncate', 'Truncate existing tables before import')\n .action(async (file: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const fileContent = readFileSync(file);\n const fileName = basename(file);\n\n const formData = new FormData();\n formData.append('file', new Blob([fileContent]), fileName);\n if (opts.truncate) {\n formData.append('truncate', 'true');\n }\n\n const res = await fetch(`${config.oss_host}/api/database/advance/import`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Import failed: ${res.status}`);\n }\n\n const data = await res.json() as { filename: string; fileSize: number; tables: string[]; rowsImported: number };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Imported ${data.filename} (${data.tables.length} tables, ${data.rowsImported} rows)`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerRecordsCommands(recordsCmd: Command): void {\n recordsCmd\n .command('list <table>')\n .description('List records from a table')\n .option('--select <columns>', 'Columns to select (comma-separated)')\n .option('--filter <filter>', 'Filter expression (e.g. \"name=eq.John\")')\n .option('--order <order>', 'Order by (e.g. \"created_at.desc\")')\n .option('--limit <n>', 'Limit number of records', parseInt)\n .option('--offset <n>', 'Offset for pagination', parseInt)\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const params = new URLSearchParams();\n if (opts.select) params.set('select', opts.select);\n if (opts.filter) params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n if (opts.order) params.set('order', opts.order);\n if (opts.limit) params.set('limit', String(opts.limit));\n if (opts.offset) params.set('offset', String(opts.offset));\n\n const query = params.toString();\n const path = `/api/database/records/${encodeURIComponent(table)}${query ? `?${query}` : ''}`;\n const res = await ossFetch(path);\n const data = await res.json() as { data?: Record<string, unknown>[] };\n const records = data.data ?? [];\n\n if (json) {\n outputJson(data);\n } else {\n if (records.length === 0) {\n console.log('No records found.');\n return;\n }\n const headers = Object.keys(records[0]);\n outputTable(\n headers,\n records.map((r) => headers.map((h) => {\n const val = r[h];\n if (val === null || val === undefined) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n })),\n );\n console.log(`${records.length} record(s).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsCreateCommand(recordsCmd: Command): void {\n recordsCmd\n .command('create <table>')\n .description('Create record(s) in a table')\n .option('--data <json>', 'JSON data to insert (object or array of objects)')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!opts.data) {\n throw new CLIError('--data is required. Example: --data \\'{\"name\":\"John\"}\\'');\n }\n\n let records: unknown[];\n try {\n const parsed = JSON.parse(opts.data) as unknown;\n records = Array.isArray(parsed) ? parsed : [parsed];\n } catch {\n throw new CLIError('Invalid JSON in --data. Provide a JSON object or array.');\n }\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?return=representation`,\n {\n method: 'POST',\n body: JSON.stringify(records),\n },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const created = data.data ?? [];\n outputSuccess(`Created ${created.length || records.length} record(s) in \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsUpdateCommand(recordsCmd: Command): void {\n recordsCmd\n .command('update <table>')\n .description('Update records in a table matching a filter')\n .option('--filter <filter>', 'Filter expression (e.g. \"id=eq.123\")')\n .option('--data <json>', 'JSON data to update')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!opts.filter) {\n throw new CLIError('--filter is required to prevent accidental updates to all rows.');\n }\n if (!opts.data) {\n throw new CLIError('--data is required. Example: --data \\'{\"name\":\"Jane\"}\\'');\n }\n\n let body: unknown;\n try {\n body = JSON.parse(opts.data) as unknown;\n } catch {\n throw new CLIError('Invalid JSON in --data.');\n }\n\n const params = new URLSearchParams();\n params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n params.set('return', 'representation');\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?${params}`,\n {\n method: 'PATCH',\n body: JSON.stringify(body),\n },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const updated = data.data ?? [];\n outputSuccess(`Updated ${updated.length} record(s) in \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsDeleteCommand(recordsCmd: Command): void {\n recordsCmd\n .command('delete <table>')\n .description('Delete records from a table matching a filter')\n .option('--filter <filter>', 'Filter expression (e.g. \"id=eq.123\")')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!opts.filter) {\n throw new CLIError('--filter is required to prevent accidental deletion of all rows.');\n }\n\n const params = new URLSearchParams();\n params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n params.set('return', 'representation');\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?${params}`,\n { method: 'DELETE' },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const deleted = data.data ?? [];\n outputSuccess(`Deleted ${deleted.length} record(s) from \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListFunctionsResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerFunctionsCommands(functionsCmd: Command): void {\n functionsCmd\n .command('list')\n .description('List all edge functions')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/functions');\n const raw = await res.json();\n // API may return array directly or { functions: [...] }\n const functions: ListFunctionsResponse['functions'] = Array.isArray(raw)\n ? raw\n : raw && typeof raw === 'object' && 'functions' in raw\n ? (raw as ListFunctionsResponse).functions ?? []\n : [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (functions.length === 0) {\n console.log('No functions found.');\n return;\n }\n outputTable(\n ['Slug', 'Name', 'Status', 'Created At'],\n functions.map((f) => [\n f.slug,\n f.name ?? '-',\n f.status ?? '-',\n f.createdAt ? new Date(f.createdAt).toLocaleString() : '-',\n ]),\n );\n }\n await reportCliUsage('cli.functions.list', true);\n } catch (err) {\n await reportCliUsage('cli.functions.list', false);\n handleError(err, json);\n }\n });\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport type { FunctionResponse } from '../../types.js';\n\nexport function registerFunctionsDeployCommand(functionsCmd: Command): void {\n functionsCmd\n .command('deploy <slug>')\n .description('Deploy an edge function (create or update)')\n .option('--file <path>', 'Path to the function source file')\n .option('--name <name>', 'Function display name')\n .option('--description <desc>', 'Function description')\n .action(async (slug: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n // Resolve source file\n const filePath = opts.file ?? join(process.cwd(), 'insforge', 'functions', slug, 'index.ts');\n if (!existsSync(filePath)) {\n throw new CLIError(\n `Source file not found: ${filePath}\\n` +\n `Specify --file <path> or create ${join('insforge', 'functions', slug, 'index.ts')}`,\n );\n }\n\n const code = readFileSync(filePath, 'utf-8');\n const name = opts.name ?? slug;\n const description = opts.description ?? '';\n\n // Check if function exists\n let exists = false;\n try {\n await ossFetch(`/api/functions/${encodeURIComponent(slug)}`);\n exists = true;\n } catch {\n exists = false;\n }\n\n let res: Response;\n if (exists) {\n res = await ossFetch(`/api/functions/${encodeURIComponent(slug)}`, {\n method: 'PUT',\n body: JSON.stringify({ name, description, code }),\n });\n } else {\n res = await ossFetch('/api/functions', {\n method: 'POST',\n body: JSON.stringify({ slug, name, description, code }),\n });\n }\n\n const result = await res.json() as FunctionResponse;\n\n const deployFailed = result.deployment?.status === 'failed';\n\n if (json) {\n outputJson(result);\n } else {\n const action = exists ? 'updation' : 'creation';\n const resultStatus = result.success ? 'success' : 'failed';\n outputSuccess(`Function \"${result.function.slug}\" ${action} ${resultStatus}.`);\n if (result.deployment) {\n if (result.deployment.status === 'success') {\n console.log(` Deployment: ${result.deployment.status}${result.deployment.url ? ` → ${result.deployment.url}` : ''}`);\n } else {\n console.log(` Deployment: ${result.deployment.status}`);\n if (result.deployment.buildLogs?.length) {\n console.log(' Build logs:');\n for (const line of result.deployment.buildLogs) {\n console.log(` ${line}`);\n }\n }\n }\n }\n }\n if (deployFailed) throw new CLIError('Function deployment failed');\n await reportCliUsage('cli.functions.deploy', true);\n } catch (err) {\n await reportCliUsage('cli.functions.deploy', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError, CLIError } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\nexport function registerFunctionsInvokeCommand(functionsCmd: Command): void {\n functionsCmd\n .command('invoke <slug>')\n .description('Invoke an edge function')\n .option('--data <json>', 'JSON body to send to the function')\n .option('--method <method>', 'HTTP method (GET, POST, PUT, PATCH, DELETE)', 'POST')\n .action(async (slug: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const method = opts.method.toUpperCase();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.api_key}`,\n };\n\n const fetchOpts: RequestInit = { method, headers };\n\n if (opts.data && ['POST', 'PUT', 'PATCH'].includes(method)) {\n fetchOpts.body = opts.data;\n }\n\n // Functions client endpoint is at /functions/{slug} (not /api/functions/{slug})\n // Use direct fetch so we always show the function's full response,\n // even on non-200 status codes (function errors are part of the output).\n const res = await fetch(\n `${config.oss_host}/functions/${encodeURIComponent(slug)}`,\n fetchOpts,\n );\n\n const contentType = res.headers.get('content-type') ?? '';\n const status = res.status;\n\n if (contentType.includes('application/json')) {\n const data = await res.json();\n if (json) {\n outputJson({ status, body: data });\n } else {\n console.log(JSON.stringify(data, null, 2));\n }\n } else {\n const text = await res.text();\n console.log(text);\n }\n\n // Exit with non-zero code on function errors\n if (status >= 400) {\n throw new CLIError(`HTTP ${status}`, 1, 'HTTP_ERROR');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\ninterface FunctionDetails {\n id: string;\n slug: string;\n name: string;\n description: string | null;\n code: string;\n status: string;\n created_at: string;\n updated_at: string;\n deployed_at: string | null;\n}\n\nexport function registerFunctionsCodeCommand(functionsCmd: Command): void {\n functionsCmd\n .command('code <slug>')\n .description('Fetch and display the source code of an edge function')\n .action(async (slug: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch(`/api/functions/${encodeURIComponent(slug)}`);\n const fn = await res.json() as FunctionDetails;\n\n if (json) {\n outputJson(fn);\n } else {\n console.log(`Function: ${fn.name} (${fn.slug})`);\n console.log(`Status: ${fn.status}`);\n if (fn.description) console.log(`Desc: ${fn.description}`);\n if (fn.deployed_at) console.log(`Deployed: ${fn.deployed_at}`);\n console.log('---');\n console.log(fn.code);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport type { FunctionResponse } from '../../types.js';\n\nexport function registerFunctionsDeleteCommand(functionsCmd: Command): void {\n functionsCmd\n .command('delete <slug>')\n .description('Delete an edge function')\n .action(async (slug: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!yes && !json) {\n const confirmed = await clack.confirm({\n message: `Delete function \"${slug}\"? This cannot be undone.`,\n });\n if (clack.isCancel(confirmed) || !confirmed) {\n clack.log.info('Cancelled.');\n return;\n }\n }\n\n const res = await ossFetch(`/api/functions/${encodeURIComponent(slug)}`, {\n method: 'DELETE',\n });\n const result = await res.json() as FunctionResponse;\n\n if (json) {\n outputJson(result);\n } else {\n if (result.success) {\n outputSuccess(`Function \"${slug}\" deleted successfully.`);\n } else {\n outputSuccess(`Failed to delete function \"${slug}\".`);\n }\n }\n await reportCliUsage('cli.functions.delete', true);\n } catch (err) {\n await reportCliUsage('cli.functions.delete', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { StorageBucketSchema } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerStorageBucketsCommand(storageCmd: Command): void {\n storageCmd\n .command('buckets')\n .description('List all storage buckets')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/storage/buckets');\n const raw = await res.json();\n // API may return array directly or { buckets: [...] }\n const buckets: StorageBucketSchema[] = Array.isArray(raw)\n ? raw\n : raw && typeof raw === 'object' && 'buckets' in raw\n ? (raw as { buckets?: StorageBucketSchema[] }).buckets ?? []\n : [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (buckets.length === 0) {\n console.log('No buckets found.');\n return;\n }\n outputTable(\n ['Bucket Name', 'Public'],\n buckets.map((b) => [b.name, b.public ? 'Yes' : 'No']),\n );\n }\n await reportCliUsage('cli.storage.buckets', true);\n } catch (err) {\n await reportCliUsage('cli.storage.buckets', false);\n handleError(err, json);\n }\n });\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageUploadCommand(storageCmd: Command): void {\n storageCmd\n .command('upload <file>')\n .description('Upload a file to a storage bucket')\n .requiredOption('--bucket <name>', 'Target bucket name')\n .option('--key <objectKey>', 'Object key (defaults to filename)')\n .action(async (file: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n if (!existsSync(file)) {\n throw new CLIError(`File not found: ${file}`);\n }\n\n const fileContent = readFileSync(file);\n const objectKey = opts.key ?? basename(file);\n const bucketName = opts.bucket;\n\n // Build multipart form data\n const formData = new FormData();\n const blob = new Blob([fileContent]);\n formData.append('file', blob, objectKey);\n\n // PUT /api/storage/buckets/{bucket}/objects/{key} for named upload\n const url = `${config.oss_host}/api/storage/buckets/${encodeURIComponent(bucketName)}/objects/${encodeURIComponent(objectKey)}`;\n\n const res = await fetch(url, {\n method: 'PUT',\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Upload failed: ${res.status}`);\n }\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Uploaded \"${basename(file)}\" to bucket \"${bucketName}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { writeFileSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageDownloadCommand(storageCmd: Command): void {\n storageCmd\n .command('download <objectKey>')\n .description('Download a file from a storage bucket')\n .requiredOption('--bucket <name>', 'Source bucket name')\n .option('--output <path>', 'Output file path (defaults to current directory)')\n .action(async (objectKey: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const bucketName = opts.bucket;\n const url = `${config.oss_host}/api/storage/buckets/${encodeURIComponent(bucketName)}/objects/${encodeURIComponent(objectKey)}`;\n\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Download failed: ${res.status}`);\n }\n\n const buffer = Buffer.from(await res.arrayBuffer());\n const outputPath = opts.output ?? join(process.cwd(), basename(objectKey));\n writeFileSync(outputPath, buffer);\n\n if (json) {\n outputJson({ success: true, path: outputPath, size: buffer.length });\n } else {\n outputSuccess(`Downloaded \"${objectKey}\" to ${outputPath} (${buffer.length} bytes).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerStorageCreateBucketCommand(storageCmd: Command): void {\n storageCmd\n .command('create-bucket <name>')\n .description('Create a new storage bucket')\n .option('--public', 'Make the bucket publicly accessible (default)')\n .option('--private', 'Make the bucket private')\n .action(async (name: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const isPublic = !opts.private;\n\n const res = await ossFetch('/api/storage/buckets', {\n method: 'POST',\n body: JSON.stringify({ bucketName: name, isPublic }),\n });\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Bucket \"${name}\" created (${isPublic ? 'public' : 'private'}).`);\n }\n await reportCliUsage('cli.storage.create-bucket', true);\n } catch (err) {\n await reportCliUsage('cli.storage.create-bucket', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageDeleteBucketCommand(storageCmd: Command): void {\n storageCmd\n .command('delete-bucket <name>')\n .description('Delete a storage bucket and all its objects')\n .action(async (name: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete bucket \"${name}\" and all its objects? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/storage/buckets/${encodeURIComponent(name)}`, {\n method: 'DELETE',\n });\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Bucket \"${name}\" deleted.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\ninterface StoredFile {\n key: string;\n size: number;\n mimeType?: string;\n uploadedAt: string;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function registerStorageListObjectsCommand(storageCmd: Command): void {\n storageCmd\n .command('list-objects <bucket>')\n .description('List objects in a storage bucket')\n .option('--limit <n>', 'Maximum number of objects to return', '100')\n .option('--offset <n>', 'Number of objects to skip', '0')\n .option('--prefix <prefix>', 'Filter objects by key prefix')\n .option('--search <term>', 'Search objects by key (partial match)')\n .option('--sort <field>', 'Sort by field: key, size, uploadedAt (default: key)')\n .action(async (bucket: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const params = new URLSearchParams();\n params.set('limit', opts.limit);\n params.set('offset', opts.offset);\n if (opts.prefix) params.set('prefix', opts.prefix);\n if (opts.search) params.set('search', opts.search);\n\n const res = await ossFetch(\n `/api/storage/buckets/${encodeURIComponent(bucket)}/objects?${params.toString()}`,\n );\n const raw = await res.json() as { data?: StoredFile[]; pagination?: { total?: number } };\n\n const objects: StoredFile[] = Array.isArray(raw)\n ? raw as StoredFile[]\n : (raw.data ?? []);\n\n // Client-side sort\n const sortField = opts.sort ?? 'key';\n objects.sort((a, b) => {\n if (sortField === 'size') return a.size - b.size;\n if (sortField === 'uploadedAt') return a.uploadedAt.localeCompare(b.uploadedAt);\n return a.key.localeCompare(b.key);\n });\n\n if (json) {\n outputJson(raw);\n } else {\n if (objects.length === 0) {\n console.log(`No objects found in bucket \"${bucket}\".`);\n return;\n }\n const total = raw.pagination?.total;\n if (total !== undefined) {\n console.log(`Showing ${objects.length} of ${total} objects:\\n`);\n }\n outputTable(\n ['Key', 'Size', 'Type', 'Uploaded At'],\n objects.map((o) => [\n o.key,\n formatSize(o.size),\n o.mimeType ?? '-',\n o.uploadedAt,\n ]),\n );\n }\n await reportCliUsage('cli.storage.list-objects', true);\n } catch (err) {\n await reportCliUsage('cli.storage.list-objects', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { exec } from 'node:child_process';\nimport { tmpdir } from 'node:os';\nimport { promisify } from 'node:util';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as clack from '@clack/prompts';\nimport {\n listOrganizations,\n createProject,\n getProject,\n getProjectApiKey,\n} from '../lib/api/platform.js';\nimport { getAnonKey, runRawSql } from '../lib/api/oss.js';\nimport { getGlobalConfig, saveGlobalConfig, saveProjectConfig, getFrontendUrl } from '../lib/config.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\nimport { readEnvFile } from '../lib/env.js';\nimport { installSkills, reportCliUsage } from '../lib/skills.js';\nimport { captureEvent, shutdownAnalytics } from '../lib/analytics.js';\nimport { deployProject } from './deployments/deploy.js';\nimport type { ProjectConfig } from '../types.js';\n\nconst execAsync = promisify(exec);\n\ntype Framework = 'react' | 'nextjs';\n\nfunction buildOssHost(appkey: string, region: string): string {\n return `https://${appkey}.${region}.insforge.app`;\n}\n\nasync function waitForProjectActive(projectId: string, apiUrl?: string, timeoutMs = 120_000): Promise<void> {\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n const project = await getProject(projectId, apiUrl);\n if (project.status === 'active') return;\n await new Promise((r) => setTimeout(r, 3000));\n }\n throw new CLIError('Project creation timed out. Check the dashboard for status.');\n}\n\nconst INSFORGE_BANNER = [\n '██╗███╗ ██╗███████╗███████╗ ██████╗ ██████╗ ██████╗ ███████╗',\n '██║████╗ ██║██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██╔════╝',\n '██║██╔██╗ ██║███████╗█████╗ ██║ ██║██████╔╝██║ ███╗█████╗ ',\n '██║██║╚██╗██║╚════██║██╔══╝ ██║ ██║██╔══██╗██║ ██║██╔══╝ ',\n '██║██║ ╚████║███████║██║ ╚██████╔╝██║ ██║╚██████╔╝███████╗',\n '╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝',\n];\n\nasync function animateBanner(): Promise<void> {\n const isTTY = process.stderr.isTTY;\n if (!isTTY || process.env.CI) {\n // Non-interactive: just print static banner\n for (const line of INSFORGE_BANNER) {\n process.stderr.write(`${line}\\n`);\n }\n process.stderr.write('\\n');\n return;\n }\n\n const totalLines = INSFORGE_BANNER.length;\n const maxLen = Math.max(...INSFORGE_BANNER.map((l) => l.length));\n const cols = process.stderr.columns ?? 0;\n\n // Narrow terminal: skip animation to avoid garbled output from line wrapping\n if (cols > 0 && cols < maxLen) {\n for (const line of INSFORGE_BANNER) {\n process.stderr.write(`\\x1b[97m${line}\\x1b[0m\\n`);\n }\n process.stderr.write('\\n');\n return;\n }\n\n // Phase 1: Line-by-line reveal with cursor sweep\n const REVEAL_STEPS = 10;\n const REVEAL_DELAY = 30;\n for (let lineIdx = 0; lineIdx < totalLines; lineIdx++) {\n const line = INSFORGE_BANNER[lineIdx];\n for (let step = 0; step <= REVEAL_STEPS; step++) {\n const pos = Math.floor((step / REVEAL_STEPS) * line.length);\n let rendered = '';\n for (let i = 0; i < line.length; i++) {\n if (i < pos) {\n rendered += `\\x1b[97m${line[i]}\\x1b[0m`; // bright white (revealed)\n } else if (i === pos) {\n rendered += `\\x1b[1;37m${line[i]}\\x1b[0m`; // bold white (cursor)\n } else {\n rendered += `\\x1b[90m${line[i]}\\x1b[0m`; // dim gray (hidden)\n }\n }\n process.stderr.write(`\\r${rendered}`);\n await new Promise((r) => setTimeout(r, REVEAL_DELAY));\n }\n process.stderr.write('\\n');\n }\n\n // Phase 2: Shimmer pass across the full banner\n const SHIMMER_STEPS = 16;\n const SHIMMER_DELAY = 40;\n const SHIMMER_WIDTH = 4;\n for (let step = 0; step < SHIMMER_STEPS; step++) {\n const shimmerPos = Math.floor((step / SHIMMER_STEPS) * (maxLen + SHIMMER_WIDTH));\n // Move cursor up to start of banner\n process.stderr.write(`\\x1b[${totalLines}A`);\n for (const line of INSFORGE_BANNER) {\n let rendered = '';\n for (let i = 0; i < line.length; i++) {\n const dist = Math.abs(i - shimmerPos);\n if (dist === 0) {\n rendered += `\\x1b[1;97m${line[i]}\\x1b[0m`; // bold bright white (shimmer peak)\n } else if (dist <= SHIMMER_WIDTH) {\n rendered += `\\x1b[37m${line[i]}\\x1b[0m`; // white (shimmer edge)\n } else {\n rendered += `\\x1b[90m${line[i]}\\x1b[0m`; // dim (base)\n }\n }\n process.stderr.write(`${rendered}\\n`);\n }\n await new Promise((r) => setTimeout(r, SHIMMER_DELAY));\n }\n\n // Final: show banner in steady bright white\n process.stderr.write(`\\x1b[${totalLines}A`);\n for (const line of INSFORGE_BANNER) {\n process.stderr.write(`\\x1b[97m${line}\\x1b[0m\\n`);\n }\n process.stderr.write('\\n');\n}\n\nfunction getDefaultProjectName(): string {\n const dirName = path.basename(process.cwd());\n const sanitized = dirName.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');\n return sanitized.length >= 2 ? sanitized : '';\n}\n\nasync function copyDir(src: string, dest: string): Promise<void> {\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n await fs.mkdir(destPath, { recursive: true });\n await copyDir(srcPath, destPath);\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nexport function registerCreateCommand(program: Command): void {\n program\n .command('create')\n .description('Create a new InsForge project')\n .option('--name <name>', 'Project name')\n .option('--org-id <id>', 'Organization ID')\n .option('--region <region>', 'Deployment region (us-east, us-west, eu-central, ap-southeast)')\n .option('--template <template>', 'Template to use: react, nextjs, chatbot, crm, e-commerce, or empty')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl, false);\n\n if (!json) {\n await animateBanner();\n clack.intro(\"Let's build something great\");\n }\n\n // 1. Select organization\n let orgId = opts.orgId;\n if (!orgId) {\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found.');\n }\n if (json) {\n throw new CLIError('Specify --org-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n orgId = selected as string;\n }\n\n // Save default org\n const globalConfig = getGlobalConfig();\n globalConfig.default_org_id = orgId;\n saveGlobalConfig(globalConfig);\n\n // 2. Project name (pre-filled from directory name)\n let projectName = opts.name;\n if (!projectName) {\n if (json) throw new CLIError('--name is required in JSON mode.');\n const defaultName = getDefaultProjectName();\n const name = await clack.text({\n message: 'Project name:',\n ...(defaultName ? { initialValue: defaultName } : {}),\n validate: (v) => (v.length >= 2 ? undefined : 'Name must be at least 2 characters'),\n });\n if (clack.isCancel(name)) process.exit(0);\n projectName = name as string;\n }\n\n // Sanitize project name to prevent path traversal\n projectName = path.basename(projectName).replace(/[^a-zA-Z0-9._-]/g, '-').replace(/\\.+/g, '.');\n if (projectName.length < 2 || projectName === '.' || projectName === '..') {\n throw new CLIError('Project name must be at least 2 safe characters (letters, numbers, hyphens).');\n }\n\n // 3. Select template (two-step: blank vs template, then pick template)\n const validTemplates = ['react', 'nextjs', 'chatbot', 'crm', 'e-commerce', 'empty'];\n let template = opts.template as string | undefined;\n if (template && !validTemplates.includes(template)) {\n throw new CLIError(`Invalid template \"${template}\". Valid options: ${validTemplates.join(', ')}`);\n }\n if (!template) {\n if (json) {\n template = 'empty';\n } else {\n const approach = await clack.select({\n message: 'How would you like to start?',\n options: [\n { value: 'blank', label: 'Blank project', hint: 'Start from scratch with .env.local ready' },\n { value: 'template', label: 'Start from a template', hint: 'Pre-built starter apps' },\n ],\n });\n if (clack.isCancel(approach)) process.exit(0);\n\n captureEvent(orgId, 'create_approach_selected', {\n approach: approach as string,\n });\n\n if (approach === 'blank') {\n template = 'empty';\n } else {\n const selected = await clack.select({\n message: 'Choose a starter template:',\n options: [\n { value: 'react', label: 'Web app template with React' },\n { value: 'nextjs', label: 'Web app template with Next.js' },\n { value: 'chatbot', label: 'AI Chatbot with Next.js' },\n { value: 'crm', label: 'CRM with Next.js' },\n { value: 'e-commerce', label: 'E-Commerce store with Next.js' },\n ],\n });\n if (clack.isCancel(selected)) process.exit(0);\n template = selected as string;\n }\n }\n }\n\n captureEvent(orgId, 'template_selected', {\n template,\n approach: template === 'empty' ? 'blank' : 'template',\n });\n\n // 4. Create project via Platform API\n const s = !json ? clack.spinner() : null;\n s?.start('Creating project...');\n\n const project = await createProject(orgId, projectName, opts.region, apiUrl);\n\n s?.message('Waiting for project to become active...');\n await waitForProjectActive(project.id, apiUrl);\n\n // 5. Fetch API key and link project\n const apiKey = await getProjectApiKey(project.id, apiUrl);\n const projectConfig: ProjectConfig = {\n project_id: project.id,\n project_name: project.name,\n org_id: project.organization_id,\n appkey: project.appkey,\n region: project.region,\n api_key: apiKey,\n oss_host: buildOssHost(project.appkey, project.region),\n };\n saveProjectConfig(projectConfig);\n\n s?.stop(`Project \"${project.name}\" created and linked`);\n\n // 6. Download template or seed env for blank projects\n const hasTemplate = template !== 'empty';\n const githubTemplates = ['chatbot', 'crm', 'e-commerce', 'nextjs', 'react'];\n if (githubTemplates.includes(template!)) {\n await downloadGitHubTemplate(template!, projectConfig, json);\n } else if (hasTemplate) {\n await downloadTemplate(template as Framework, projectConfig, projectName, json, apiUrl);\n } else {\n // Blank project: seed .env.local with InsForge credentials (non-fatal)\n try {\n const anonKey = await getAnonKey();\n if (!anonKey) {\n if (!json) clack.log.warn('Could not retrieve anon key. You can add it to .env.local manually.');\n } else {\n const envPath = path.join(process.cwd(), '.env.local');\n const envContent = [\n '# InsForge',\n `NEXT_PUBLIC_INSFORGE_URL=${projectConfig.oss_host}`,\n `NEXT_PUBLIC_INSFORGE_ANON_KEY=${anonKey}`,\n '',\n ].join('\\n');\n await fs.writeFile(envPath, envContent, { flag: 'wx' });\n if (!json) {\n clack.log.success('Created .env.local with your InsForge credentials');\n }\n }\n } catch (err) {\n const error = err as NodeJS.ErrnoException;\n if (!json) {\n if (error.code === 'EEXIST') {\n clack.log.warn('.env.local already exists; skipping InsForge key seeding.');\n } else {\n clack.log.warn(`Failed to create .env.local: ${error.message}`);\n }\n }\n }\n }\n\n // Install agent skills\n await installSkills(json);\n await reportCliUsage('cli.create', true, 6);\n\n // 7. Install npm dependencies (template projects only)\n if (hasTemplate) {\n const installSpinner = !json ? clack.spinner() : null;\n installSpinner?.start('Installing dependencies...');\n try {\n await execAsync('npm install', { cwd: process.cwd(), maxBuffer: 10 * 1024 * 1024 });\n installSpinner?.stop('Dependencies installed');\n } catch (err) {\n installSpinner?.stop('Failed to install dependencies');\n if (!json) {\n clack.log.warn(`npm install failed: ${(err as Error).message}`);\n clack.log.info('Run `npm install` manually to install dependencies.');\n }\n }\n }\n\n // 8. Offer to deploy (template projects, interactive mode only)\n let liveUrl: string | null = null;\n if (hasTemplate && !json) {\n const shouldDeploy = await clack.confirm({\n message: 'Would you like to deploy now?',\n });\n\n if (!clack.isCancel(shouldDeploy) && shouldDeploy) {\n try {\n // Read env vars from .env.local or .env to pass to deployment\n const envVars = await readEnvFile(process.cwd());\n const startBody: { envVars?: Array<{ key: string; value: string }> } = {};\n if (envVars.length > 0) {\n startBody.envVars = envVars;\n }\n\n const deploySpinner = clack.spinner();\n const result = await deployProject({\n sourceDir: process.cwd(),\n startBody,\n spinner: deploySpinner,\n });\n\n if (result.isReady) {\n deploySpinner.stop('Deployment complete');\n liveUrl = result.liveUrl;\n } else {\n deploySpinner.stop('Deployment is still building');\n clack.log.info(`Deployment ID: ${result.deploymentId}`);\n clack.log.warn('Deployment did not finish within 2 minutes.');\n clack.log.info(`Check status with: npx @insforge/cli deployments status ${result.deploymentId}`);\n }\n } catch (err) {\n clack.log.warn(`Deploy failed: ${(err as Error).message}`);\n }\n }\n }\n\n // 9. Show links\n const dashboardUrl = `${getFrontendUrl()}/dashboard/project/${project.id}`;\n\n if (json) {\n outputJson({\n success: true,\n project: { id: project.id, name: project.name, appkey: project.appkey, region: project.region },\n template,\n urls: {\n dashboard: dashboardUrl,\n ...(liveUrl ? { liveSite: liveUrl } : {}),\n },\n });\n } else {\n clack.log.step(`Dashboard: ${dashboardUrl}`);\n if (liveUrl) {\n clack.log.success(`Live site: ${liveUrl}`);\n }\n clack.outro('Done!');\n }\n } catch (err) {\n handleError(err, json);\n } finally {\n await shutdownAnalytics();\n }\n });\n}\n\nasync function downloadTemplate(\n framework: Framework,\n projectConfig: ProjectConfig,\n projectName: string,\n json: boolean,\n _apiUrl?: string,\n): Promise<void> {\n const s = !json ? clack.spinner() : null;\n s?.start('Downloading template...');\n\n try {\n // Get the anon key from the OSS backend\n const anonKey = await getAnonKey();\n if (!anonKey) {\n throw new Error('Failed to retrieve anon key from backend');\n }\n\n // Create temp directory for download\n const tempDir = tmpdir();\n const targetDir = projectName;\n const templatePath = path.join(tempDir, targetDir);\n\n // Remove existing temp directory if it exists\n try {\n await fs.rm(templatePath, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, which is fine\n }\n\n const frame = framework === 'nextjs' ? 'nextjs' : 'react';\n const esc = (s: string) => process.platform === 'win32' ? `\"${s.replace(/\"/g, '\\\\\"')}\"` : `'${s.replace(/'/g, \"'\\\\''\")}'`;\n const command = `npx --yes create-insforge-app@latest ${esc(targetDir)} --frame ${frame} --base-url ${esc(projectConfig.oss_host)} --anon-key ${esc(anonKey)} --skip-install`;\n\n s?.message(`Running create-insforge-app (${frame})...`);\n\n await execAsync(command, {\n maxBuffer: 10 * 1024 * 1024,\n cwd: tempDir,\n });\n\n // Copy template files to current directory\n s?.message('Copying template files...');\n const cwd = process.cwd();\n await copyDir(templatePath, cwd);\n\n // Cleanup temp directory\n await fs.rm(templatePath, { recursive: true, force: true }).catch(() => {});\n\n s?.stop('Template files downloaded');\n } catch (err) {\n s?.stop('Template download failed');\n if (!json) {\n clack.log.warn(`Failed to download template: ${(err as Error).message}`);\n clack.log.info('You can manually set up the template later.');\n }\n }\n}\n\nasync function downloadGitHubTemplate(\n templateName: string,\n projectConfig: ProjectConfig,\n json: boolean,\n): Promise<void> {\n const s = !json ? clack.spinner() : null;\n s?.start(`Downloading ${templateName} template...`);\n\n const tempDir = path.join(tmpdir(), `insforge-template-${Date.now()}`);\n\n try {\n await fs.mkdir(tempDir, { recursive: true });\n\n // Shallow clone the templates repo\n await execAsync(\n 'git clone --depth 1 https://github.com/InsForge/insforge-templates.git .',\n { cwd: tempDir, maxBuffer: 10 * 1024 * 1024, timeout: 60_000 },\n );\n\n const templateDir = path.join(tempDir, templateName);\n const stat = await fs.stat(templateDir).catch(() => null);\n if (!stat?.isDirectory()) {\n throw new Error(`Template \"${templateName}\" not found in repository`);\n }\n\n // Copy template files to cwd\n s?.message('Copying template files...');\n const cwd = process.cwd();\n await copyDir(templateDir, cwd);\n\n // Write .env.local from .env.example with InsForge credentials filled in\n const envExamplePath = path.join(cwd, '.env.example');\n const envExampleExists = await fs.stat(envExamplePath).catch(() => null);\n if (envExampleExists) {\n const anonKey = await getAnonKey();\n const envExample = await fs.readFile(envExamplePath, 'utf-8');\n const envContent = envExample.replace(\n /^([A-Z][A-Z0-9_]*=)(.*)$/gm,\n (_, prefix: string, _value: string) => {\n const key = prefix.slice(0, -1); // remove trailing '='\n if (/INSFORGE.*(URL|BASE_URL)$/.test(key)) return `${prefix}${projectConfig.oss_host}`;\n if (/INSFORGE.*ANON_KEY$/.test(key)) return `${prefix}${anonKey}`;\n if (key === 'NEXT_PUBLIC_APP_URL') return `${prefix}https://${projectConfig.appkey}.insforge.site`;\n return `${prefix}${_value}`;\n },\n );\n const envLocalPath = path.join(cwd, '.env.local');\n try {\n await fs.writeFile(envLocalPath, envContent, { flag: 'wx' });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'EEXIST') {\n if (!json) clack.log.warn('.env.local already exists; skipping env seeding.');\n } else {\n throw e;\n }\n }\n }\n\n s?.stop(`${templateName} template downloaded`);\n\n // Auto-run database migrations if db_init.sql exists\n const migrationPath = path.join(cwd, 'migrations', 'db_init.sql');\n const migrationExists = await fs.stat(migrationPath).catch(() => null);\n if (migrationExists) {\n const dbSpinner = !json ? clack.spinner() : null;\n dbSpinner?.start('Running database migrations...');\n try {\n const sql = await fs.readFile(migrationPath, 'utf-8');\n await runRawSql(sql, true);\n dbSpinner?.stop('Database migrations applied');\n } catch (err) {\n dbSpinner?.stop('Database migration failed');\n if (!json) {\n clack.log.warn(`Migration failed: ${(err as Error).message}`);\n clack.log.info('You can run the migration manually: npx @insforge/cli db query --unrestricted \"$(cat migrations/db_init.sql)\"');\n } else {\n throw err;\n }\n }\n }\n } catch (err) {\n s?.stop(`${templateName} template download failed`);\n if (!json) {\n clack.log.warn(`Failed to download ${templateName} template: ${(err as Error).message}`);\n clack.log.info('You can manually clone from: https://github.com/InsForge/insforge-templates');\n }\n } finally {\n await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {});\n }\n}\n\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\n/**\n * Read environment variables from the first env file found in the directory.\n * Priority: .env.local > .env.production > .env\n */\nexport async function readEnvFile(cwd: string): Promise<Array<{ key: string; value: string }>> {\n const candidates = ['.env.local', '.env.production', '.env'];\n for (const name of candidates) {\n const filePath = path.join(cwd, name);\n const exists = await fs.stat(filePath).catch(() => null);\n if (!exists) continue;\n\n const content = await fs.readFile(filePath, 'utf-8');\n const vars: Array<{ key: string; value: string }> = [];\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const eqIndex = trimmed.indexOf('=');\n if (eqIndex === -1) continue;\n const key = trimmed.slice(0, eqIndex).trim();\n let value = trimmed.slice(eqIndex + 1).trim();\n // Strip surrounding quotes\n if ((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n if (key) vars.push({ key, value });\n }\n return vars;\n }\n return [];\n}\n","import { PostHog } from 'posthog-node';\n\nconst POSTHOG_API_KEY = process.env.POSTHOG_API_KEY;\nconst POSTHOG_HOST = process.env.POSTHOG_HOST || 'https://us.i.posthog.com';\n\nlet client: PostHog | null = null;\n\nfunction getClient(): PostHog | null {\n if (!POSTHOG_API_KEY) return null;\n if (!client) {\n client = new PostHog(POSTHOG_API_KEY, { host: POSTHOG_HOST });\n }\n return client;\n}\n\nexport function captureEvent(\n distinctId: string,\n event: string,\n properties?: Record<string, unknown>,\n): void {\n try {\n getClient()?.capture({ distinctId, event, properties });\n } catch {\n // analytics should never break the CLI\n }\n}\n\nexport async function shutdownAnalytics(): Promise<void> {\n try {\n if (client) await client.shutdown();\n } catch {\n // ignore\n }\n}\n","import type { Command } from 'commander';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs/promises';\nimport * as clack from '@clack/prompts';\nimport archiver from 'archiver';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError, getDeploymentError } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport type { CreateDeploymentResponse, StartDeploymentRequest, DeploymentSchema } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nconst POLL_INTERVAL_MS = 5_000;\nconst POLL_TIMEOUT_MS = 300_000;\n\nconst EXCLUDE_PATTERNS = [\n 'node_modules',\n '.git',\n '.next',\n '.env',\n '.env.local',\n 'dist',\n 'build',\n '.DS_Store',\n '.insforge',\n // IDE and AI agent configs\n '.claude',\n '.agents',\n '.augment',\n '.kilocode',\n '.kiro',\n '.qoder',\n '.qwen',\n '.roo',\n '.trae',\n '.windsurf',\n '.vercel',\n '.turbo',\n '.cache',\n 'skills',\n 'coverage',\n];\n\nfunction shouldExclude(name: string): boolean {\n const normalized = name.replace(/\\\\/g, '/');\n for (const pattern of EXCLUDE_PATTERNS) {\n if (\n normalized === pattern ||\n normalized.startsWith(pattern + '/') ||\n normalized.endsWith('/' + pattern) ||\n normalized.includes('/' + pattern + '/')\n ) {\n return true;\n }\n }\n if (normalized.endsWith('.log')) return true;\n return false;\n}\n\nasync function createZipBuffer(sourceDir: string): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n const archive = archiver('zip', { zlib: { level: 9 } });\n const chunks: Buffer[] = [];\n\n archive.on('data', (chunk: Buffer) => chunks.push(chunk));\n archive.on('end', () => resolve(Buffer.concat(chunks)));\n archive.on('error', (err: Error) => reject(err));\n\n archive.directory(sourceDir, false, (entry) => {\n if (shouldExclude(entry.name)) return false;\n return entry;\n });\n\n void archive.finalize();\n });\n}\n\nexport interface DeployProjectOptions {\n sourceDir: string;\n startBody?: StartDeploymentRequest;\n spinner?: ReturnType<typeof clack.spinner> | null;\n}\n\nexport interface DeployProjectResult {\n deploymentId: string;\n deployment: DeploymentSchema | null;\n isReady: boolean;\n liveUrl: string | null;\n}\n\n/**\n * Core deploy logic: zip → upload → start → poll.\n * Reusable from both the `deploy` command and `create` command.\n */\nexport async function deployProject(opts: DeployProjectOptions): Promise<DeployProjectResult> {\n const { sourceDir, startBody = {}, spinner: s } = opts;\n\n // Step 1: Create deployment to get presigned upload URL\n s?.start('Creating deployment...');\n const createRes = await ossFetch('/api/deployments', { method: 'POST' });\n const { id: deploymentId, uploadUrl, uploadFields } =\n (await createRes.json()) as CreateDeploymentResponse;\n\n // Step 2: Create zip\n s?.message('Compressing source files...');\n const zipBuffer = await createZipBuffer(sourceDir);\n\n // Step 3: Upload zip to presigned URL\n s?.message('Uploading...');\n const formData = new FormData();\n for (const [key, value] of Object.entries(uploadFields)) {\n formData.append(key, value);\n }\n formData.append(\n 'file',\n new Blob([zipBuffer], { type: 'application/zip' }),\n 'deployment.zip',\n );\n\n const uploadRes = await fetch(uploadUrl, { method: 'POST', body: formData });\n if (!uploadRes.ok) {\n const uploadErr = await uploadRes.text();\n throw new CLIError(`Failed to upload: ${uploadErr}`);\n }\n\n // Step 4: Start the deployment\n s?.message('Starting deployment...');\n const startRes = await ossFetch(`/api/deployments/${deploymentId}/start`, {\n method: 'POST',\n body: JSON.stringify(startBody),\n });\n await startRes.json();\n\n // Step 5: Poll for deployment status\n s?.message('Building and deploying...');\n const startTime = Date.now();\n let deployment: DeploymentSchema | null = null;\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n try {\n const statusRes = await ossFetch(`/api/deployments/${deploymentId}`);\n deployment = (await statusRes.json()) as DeploymentSchema;\n const status = deployment.status.toUpperCase();\n\n if (status === 'READY') {\n break;\n }\n if (status === 'ERROR' || status === 'CANCELED') {\n s?.stop('Deployment failed');\n throw new CLIError(getDeploymentError(deployment.metadata) ?? `Deployment failed with status: ${deployment.status}`);\n }\n\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n s?.message(`Building and deploying... (${elapsed}s, status: ${deployment.status})`);\n } catch (err) {\n if (err instanceof CLIError) throw err;\n // Ignore transient fetch errors during polling\n }\n }\n\n const isReady = deployment?.status.toUpperCase() === 'READY';\n const liveUrl = isReady ? (deployment?.url ?? null) : null;\n\n return { deploymentId, deployment, isReady, liveUrl };\n}\n\nexport function registerDeploymentsDeployCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('deploy [directory]')\n .description('Deploy a frontend project to Vercel')\n .option('--env <vars>', 'Environment variables as JSON (e.g. \\'{\"KEY\":\"value\"}\\')')\n .option('--meta <meta>', 'Deployment metadata as JSON')\n .action(async (directory: string | undefined, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n // Resolve source directory\n const sourceDir = path.resolve(directory ?? '.');\n const stats = await fs.stat(sourceDir).catch(() => null);\n if (!stats?.isDirectory()) {\n throw new CLIError(`\"${sourceDir}\" is not a valid directory.`);\n }\n\n // Reject excluded directories as deploy source\n const dirName = path.basename(sourceDir);\n if (EXCLUDE_PATTERNS.includes(dirName)) {\n throw new CLIError(`\"${dirName}\" is an excluded directory and cannot be used as a deploy source. Please specify your project root or output directory instead.`);\n }\n\n const s = !json ? clack.spinner() : null;\n\n // Parse env/meta from CLI flags\n const startBody: StartDeploymentRequest = {};\n if (opts.env) {\n try {\n const parsed = JSON.parse(opts.env) as Record<string, string>;\n if (Array.isArray(parsed)) {\n startBody.envVars = parsed;\n } else {\n startBody.envVars = Object.entries(parsed).map(([key, value]) => ({ key, value }));\n }\n } catch { throw new CLIError('Invalid --env JSON.'); }\n }\n if (opts.meta) {\n try { startBody.meta = JSON.parse(opts.meta); } catch { throw new CLIError('Invalid --meta JSON.'); }\n }\n\n const result = await deployProject({ sourceDir, startBody, spinner: s });\n\n if (result.isReady) {\n s?.stop('Deployment complete');\n if (json) {\n outputJson(result.deployment);\n } else {\n if (result.liveUrl) {\n clack.log.success(`Live at: ${result.liveUrl}`);\n }\n clack.log.info(`Deployment ID: ${result.deploymentId}`);\n }\n } else {\n s?.stop('Deployment is still building');\n if (json) {\n outputJson({ id: result.deploymentId, status: result.deployment?.status ?? 'building', timedOut: true });\n } else {\n clack.log.info(`Deployment ID: ${result.deploymentId}`);\n clack.log.warn('Deployment did not finish within 5 minutes.');\n clack.log.info(`Check status with: npx @insforge/cli deployments status ${result.deploymentId}`);\n }\n }\n await reportCliUsage('cli.deployments.deploy', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.deploy', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getCredentials, getGlobalConfig, getProjectConfig } from '../lib/config.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\n\nexport function registerContextCommand(program: Command): void {\n program\n .command('current')\n .description('Show current CLI context (user, org, project)')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n const creds = getCredentials();\n const globalConfig = getGlobalConfig();\n const projectConfig = getProjectConfig();\n\n if (json) {\n outputJson({\n authenticated: !!creds,\n user: creds?.user ?? null,\n default_org_id: globalConfig.default_org_id ?? null,\n project: projectConfig,\n });\n return;\n }\n\n console.log('\\n InsForge CLI Context\\n');\n\n // Auth status\n if (creds) {\n console.log(` User: ${creds.user.name} <${creds.user.email}>`);\n } else {\n console.log(' User: (not logged in)');\n }\n\n // Org (only relevant when logged in)\n if (creds && globalConfig.default_org_id) {\n console.log(` Default Org: ${globalConfig.default_org_id}`);\n } else if (creds) {\n console.log(' Default Org: (none)');\n }\n\n // Project\n if (projectConfig) {\n console.log('');\n console.log(` Project: ${projectConfig.project_name} (${projectConfig.project_id})`);\n console.log(` App Key: ${projectConfig.appkey}`);\n console.log(` Region: ${projectConfig.region}`);\n console.log(` OSS Host: ${projectConfig.oss_host}`);\n } else {\n console.log('\\n Project: (not linked — run `npx @insforge/cli link`)');\n }\n\n console.log('');\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { listOrganizations, listProjects } from '../lib/api/platform.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\n\nexport function registerListCommand(program: Command): void {\n program\n .command('list')\n .description('List all organizations and their projects')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const orgs = await listOrganizations(apiUrl);\n\n if (orgs.length === 0) {\n if (json) {\n outputJson([]);\n } else {\n console.log('No organizations found.');\n }\n return;\n }\n\n // Fetch projects for all orgs in parallel\n const orgProjects = await Promise.all(\n orgs.map(async (org) => ({\n org,\n projects: await listProjects(org.id, apiUrl),\n })),\n );\n\n if (json) {\n outputJson(\n orgProjects.map(({ org, projects }) => ({\n id: org.id,\n name: org.name,\n type: org.type ?? null,\n projects: projects.map((p) => ({\n id: p.id,\n name: p.name,\n region: p.region,\n status: p.status,\n appkey: p.appkey,\n })),\n })),\n );\n return;\n }\n\n // Human-readable: grouped table\n const rows: string[][] = [];\n for (const { org, projects } of orgProjects) {\n if (projects.length === 0) {\n rows.push([org.name, '-', '-', '-', '-']);\n } else {\n for (let i = 0; i < projects.length; i++) {\n const p = projects[i];\n rows.push([\n i === 0 ? org.name : '',\n p.name,\n p.region,\n p.status,\n p.appkey,\n ]);\n }\n }\n }\n\n outputTable(['Organization', 'Project', 'Region', 'Status', 'AppKey'], rows);\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListDeploymentsResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDeploymentsListCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('list')\n .description('List all deployments')\n .option('--limit <n>', 'Limit number of results', '20')\n .option('--offset <n>', 'Offset for pagination', '0')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch(`/api/deployments?limit=${opts.limit}&offset=${opts.offset}`);\n const raw = await res.json();\n // API may return array directly or { data: [...] }\n const deployments: ListDeploymentsResponse['data'] = Array.isArray(raw)\n ? raw\n : raw && typeof raw === 'object' && 'data' in raw\n ? (raw as ListDeploymentsResponse).data ?? []\n : [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (!deployments.length) {\n console.log('No deployments found.');\n return;\n }\n outputTable(\n ['ID', 'Status', 'Provider', 'URL', 'Created'],\n deployments.map((d) => [\n d.id,\n d.status,\n d.provider,\n d.url ?? '-',\n new Date(d.createdAt).toLocaleString(),\n ]),\n );\n }\n await reportCliUsage('cli.deployments.list', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.list', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError, getDeploymentError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DeploymentSchema } from '../../types.js';\n\nexport function registerDeploymentsStatusCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('status <id>')\n .description('Get deployment details and sync status from Vercel')\n .option('--sync', 'Sync status from Vercel before showing')\n .action(async (id: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n // Optionally sync status from Vercel first\n if (opts.sync) {\n await ossFetch(`/api/deployments/${id}/sync`, { method: 'POST' });\n }\n\n const res = await ossFetch(`/api/deployments/${id}`);\n const d = (await res.json()) as DeploymentSchema;\n\n if (json) {\n outputJson(d);\n } else {\n const errorMessage = getDeploymentError(d.metadata);\n outputTable(\n ['Field', 'Value'],\n [\n ['ID', d.id],\n ['Status', d.status],\n ['Provider', d.provider ?? '-'],\n ['Provider ID', d.providerDeploymentId ?? '-'],\n ['URL', d.url ?? '-'],\n ['Created', new Date(d.createdAt).toLocaleString()],\n ['Updated', new Date(d.updatedAt).toLocaleString()],\n ...(errorMessage ? [['Error', errorMessage]] : []),\n ],\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDeploymentsCancelCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('cancel <id>')\n .description('Cancel a deployment')\n .action(async (id: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n if (!yes && !json) {\n const confirmed = await clack.confirm({\n message: `Cancel deployment ${id}?`,\n });\n if (clack.isCancel(confirmed) || !confirmed) process.exit(0);\n }\n\n const res = await ossFetch(`/api/deployments/${id}/cancel`, { method: 'POST' });\n const result = await res.json();\n\n if (json) {\n outputJson(result);\n } else {\n outputSuccess(`Deployment ${id} cancelled.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError, CLIError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable, outputSuccess } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\ninterface EnvVar {\n id: string;\n key: string;\n type: string;\n updatedAt: number;\n}\n\nexport function registerDeploymentsEnvVarsCommand(deploymentsCmd: Command): void {\n const envCmd = deploymentsCmd.command('env').description('Manage deployment environment variables');\n\n // list\n envCmd\n .command('list')\n .description('List all deployment environment variables')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch('/api/deployments/env-vars');\n const data = (await res.json()) as { envVars: EnvVar[] };\n const envVars = data.envVars ?? [];\n\n if (json) {\n outputJson(data);\n } else {\n if (!envVars.length) {\n console.log('No environment variables found.');\n return;\n }\n outputTable(\n ['ID', 'Key', 'Type', 'Updated At'],\n envVars.map((v) => [\n v.id,\n v.key,\n v.type,\n new Date(v.updatedAt).toLocaleString(),\n ]),\n );\n }\n await reportCliUsage('cli.deployments.env.list', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.env.list', false);\n handleError(err, json);\n }\n });\n\n // create / update\n envCmd\n .command('set <key> <value>')\n .description('Create or update a deployment environment variable')\n .action(async (key: string, value: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch('/api/deployments/env-vars', {\n method: 'POST',\n body: JSON.stringify({ envVars: [{ key, value }] }),\n });\n const data = (await res.json()) as { success: boolean; message: string; count: number };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message);\n }\n await reportCliUsage('cli.deployments.env.set', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.env.set', false);\n handleError(err, json);\n }\n });\n\n // delete\n envCmd\n .command('delete <id>')\n .description('Delete a deployment environment variable by ID')\n .action(async (id: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch(`/api/deployments/env-vars/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n });\n const data = (await res.json()) as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message);\n }\n await reportCliUsage('cli.deployments.env.delete', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.env.delete', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../lib/api/oss.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\nimport { reportCliUsage } from '../lib/skills.js';\n\nconst FEATURES = ['db', 'storage', 'functions', 'auth', 'ai', 'realtime'] as const;\nconst LANGUAGES = ['typescript', 'swift', 'kotlin', 'rest-api'] as const;\n\nexport function registerDocsCommand(program: Command): void {\n program\n .command('docs [feature] [language]')\n .description('Browse InsForge SDK documentation')\n .addHelpText('after', `\nFeatures: ${FEATURES.join(', ')}\nLanguages: ${LANGUAGES.join(', ')}\n\nExamples:\n npx @insforge/cli docs List all available docs\n npx @insforge/cli docs instructions Show setup instructions\n npx @insforge/cli docs db typescript Show TypeScript database SDK docs\n npx @insforge/cli docs auth swift Show Swift auth SDK docs\n npx @insforge/cli docs storage rest-api Show REST API storage docs`)\n .action(async (feature: string | undefined, language: string | undefined, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n await reportCliUsage('cli.docs', true);\n // No args → list all docs\n if (!feature) {\n await listDocs(json);\n return;\n }\n\n // Single arg → legacy doc type (e.g. \"instructions\")\n if (!language) {\n await fetchDoc(`/api/docs/${encodeURIComponent(feature)}`, feature, json);\n return;\n }\n\n // Two args → feature + language\n await fetchDoc(\n `/api/docs/${encodeURIComponent(feature)}/${encodeURIComponent(language)}`,\n `${feature}/${language}`,\n json,\n );\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n\nasync function listDocs(json: boolean): Promise<void> {\n const res = await ossFetch('/api/docs');\n const data = await res.json() as { data?: DocEntry[] } | DocEntry[];\n const docs = Array.isArray(data) ? data : (data.data ?? []);\n\n if (json) {\n outputJson(docs);\n } else {\n if (!docs.length) {\n console.log('No documentation available.');\n return;\n }\n outputTable(\n ['Type', 'Endpoint'],\n docs.map((d) => [String(d.type ?? '-'), String(d.endpoint ?? '-')]),\n );\n }\n}\n\nasync function fetchDoc(path: string, label: string, json: boolean): Promise<void> {\n const res = await ossFetch(path);\n const data = await res.json() as { data?: { type?: string; content?: string }; type?: string; content?: string };\n const doc = data.data ?? data;\n\n if (json) {\n outputJson(doc);\n } else {\n if (doc.content) {\n console.log(doc.content);\n } else {\n console.log(`No content returned for \"${label}\".`);\n }\n }\n}\n\ninterface DocEntry {\n type?: string;\n filename?: string;\n endpoint?: string;\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListSecretsResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerSecretsListCommand(secretsCmd: Command): void {\n secretsCmd\n .command('list')\n .description('List secrets (metadata only, values are hidden)')\n .option('--all', 'Include inactive (deleted) secrets')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/secrets');\n const data = await res.json() as ListSecretsResponse;\n let secrets = data.secrets ?? [];\n\n if (!opts.all) {\n secrets = secrets.filter((s) => s.isActive !== false);\n }\n\n if (json) {\n outputJson(opts.all ? data : { secrets });\n } else {\n if (!secrets.length) {\n console.log('No secrets found.');\n return;\n }\n const headers = opts.all\n ? ['Key', 'Active', 'Reserved', 'Expires', 'Updated']\n : ['Key', 'Reserved', 'Expires', 'Updated'];\n outputTable(\n headers,\n secrets.map((s) => {\n const row = [\n String(s.key ?? '-'),\n ...(opts.all ? [s.isActive ? 'Yes' : 'No'] : []),\n s.isReserved ? 'Yes' : 'No',\n s.expiresAt ? new Date(String(s.expiresAt)).toLocaleString() : '-',\n s.updatedAt ? new Date(String(s.updatedAt)).toLocaleString() : '-',\n ];\n return row;\n }),\n );\n }\n await reportCliUsage('cli.secrets.list', true);\n } catch (err) {\n await reportCliUsage('cli.secrets.list', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport type { GetSecretValueResponse } from '../../types.js';\n\nexport function registerSecretsGetCommand(secretsCmd: Command): void {\n secretsCmd\n .command('get <key>')\n .description('Get the decrypted value of a secret')\n .action(async (key: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`);\n const data = await res.json();\n const secret = data as GetSecretValueResponse;\n\n if (json) {\n outputJson(data);\n } else {\n console.log(`${secret.key} = ${secret.value}`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport type { CreateSecretResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerSecretsAddCommand(secretsCmd: Command): void {\n secretsCmd\n .command('add <key> <value>')\n .description('Create a new secret')\n .option('--reserved', 'Mark secret as protected from deletion')\n .option('--expires <date>', 'Expiration date (ISO 8601 format)')\n .action(async (key: string, value: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = { key, value };\n if (opts.reserved) body.isReserved = true;\n if (opts.expires) body.expiresAt = opts.expires;\n\n const res = await ossFetch('/api/secrets', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n const data = await res.json() as CreateSecretResponse;\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} created.`);\n }\n await reportCliUsage('cli.secrets.add', true);\n } catch (err) {\n await reportCliUsage('cli.secrets.add', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport type { UpdateSecretResponse } from '../../types.js';\n\nexport function registerSecretsUpdateCommand(secretsCmd: Command): void {\n secretsCmd\n .command('update <key>')\n .description('Update an existing secret')\n .option('--value <value>', 'New secret value')\n .option('--active <bool>', 'Set active status (true/false)')\n .option('--reserved <bool>', 'Set reserved status (true/false)')\n .option('--expires <date>', 'Expiration date (ISO 8601, or \"null\" to remove)')\n .action(async (key: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = {};\n if (opts.value !== undefined) body.value = opts.value;\n if (opts.active !== undefined) body.isActive = opts.active === 'true';\n if (opts.reserved !== undefined) body.isReserved = opts.reserved === 'true';\n if (opts.expires !== undefined) body.expiresAt = opts.expires === 'null' ? null : opts.expires;\n\n if (Object.keys(body).length === 0) {\n throw new CLIError('Provide at least one option to update (--value, --active, --reserved, --expires).');\n }\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`, {\n method: 'PUT',\n body: JSON.stringify(body),\n });\n const data = await res.json() as UpdateSecretResponse;\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} updated.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport type { DeleteSecretResponse } from '../../types.js';\n\nexport function registerSecretsDeleteCommand(secretsCmd: Command): void {\n secretsCmd\n .command('delete <key>')\n .description('Delete a secret')\n .action(async (key: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete secret \"${key}\"? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`, {\n method: 'DELETE',\n });\n const data = await res.json() as DeleteSecretResponse;\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} deleted.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListSchedulesResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerSchedulesListCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('list')\n .description('List all schedules')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/schedules');\n const data = await res.json();\n const schedules: ListSchedulesResponse = data as ListSchedulesResponse;\n\n if (json) {\n outputJson(schedules);\n } else {\n if (!schedules.length) {\n console.log('No schedules found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Cron', 'URL', 'Method', 'Active', 'Next Run'],\n schedules.map((s) => [\n String(s.id ?? '-'),\n String(s.name ?? '-'),\n String(s.cronSchedule ?? '-'),\n String(s.functionUrl ?? '-'),\n String(s.httpMethod ?? '-'),\n s.isActive === false ? 'No' : 'Yes',\n s.nextRun ? new Date(String(s.nextRun)).toLocaleString() : '-',\n ]),\n );\n }\n await reportCliUsage('cli.schedules.list', true);\n } catch (err) {\n await reportCliUsage('cli.schedules.list', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport type { GetScheduleResponse } from '../../types.js';\n\nexport function registerSchedulesGetCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('get <id>')\n .description('Get schedule details')\n .action(async (id: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch(`/api/schedules/${encodeURIComponent(id)}`);\n const data = await res.json() as GetScheduleResponse;\n\n if (json) {\n outputJson(data);\n } else {\n console.log(`\\n Name: ${data.name ?? '-'}`);\n console.log(` ID: ${data.id ?? '-'}`);\n console.log(` Cron: ${data.cronSchedule ?? '-'}`);\n console.log(` URL: ${data.functionUrl ?? '-'}`);\n console.log(` Method: ${data.httpMethod ?? '-'}`);\n console.log(` Active: ${data.isActive === false ? 'No' : 'Yes'}`);\n if (data.headers) console.log(` Headers: ${JSON.stringify(data.headers)}`);\n if (data.body) console.log(` Body: ${JSON.stringify(data.body)}`);\n console.log(` Next Run: ${data.nextRun ? new Date(String(data.nextRun)).toLocaleString() : '-'}`);\n console.log(` Created: ${data.createdAt ? new Date(String(data.createdAt)).toLocaleString() : '-'}`);\n console.log('');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport type { CreateScheduleResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerSchedulesCreateCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('create')\n .description('Create a new schedule')\n .requiredOption('--name <name>', 'Schedule name')\n .requiredOption('--cron <expression>', 'Cron expression (5-field format)')\n .requiredOption('--url <url>', 'URL to invoke')\n .requiredOption('--method <method>', 'HTTP method (GET, POST, PUT, PATCH, DELETE)')\n .option('--headers <json>', 'HTTP headers as JSON')\n .option('--body <json>', 'Request body as JSON')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = {\n name: opts.name,\n cronSchedule: opts.cron,\n functionUrl: opts.url,\n httpMethod: opts.method.toUpperCase(),\n };\n\n if (opts.headers) {\n try {\n body.headers = JSON.parse(opts.headers);\n } catch {\n throw new CLIError('Invalid JSON for --headers');\n }\n }\n if (opts.body) {\n try {\n body.body = JSON.parse(opts.body);\n } catch {\n throw new CLIError('Invalid JSON for --body');\n }\n }\n\n const res = await ossFetch('/api/schedules', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n const data = await res.json() as CreateScheduleResponse;\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Schedule \"${opts.name}\" created (ID: ${data.id ?? 'unknown'}).`);\n }\n await reportCliUsage('cli.schedules.create', true);\n } catch (err) {\n await reportCliUsage('cli.schedules.create', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSchedulesUpdateCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('update <id>')\n .description('Update a schedule')\n .option('--name <name>', 'New schedule name')\n .option('--cron <expression>', 'New cron expression')\n .option('--url <url>', 'New URL to invoke')\n .option('--method <method>', 'New HTTP method')\n .option('--headers <json>', 'New HTTP headers as JSON')\n .option('--body <json>', 'New request body as JSON')\n .option('--active <bool>', 'Enable/disable schedule (true/false)')\n .action(async (id: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = {};\n if (opts.name !== undefined) body.name = opts.name;\n if (opts.cron !== undefined) body.cronSchedule = opts.cron;\n if (opts.url !== undefined) body.functionUrl = opts.url;\n if (opts.method !== undefined) body.httpMethod = opts.method.toUpperCase();\n if (opts.active !== undefined) body.isActive = opts.active === 'true';\n\n if (opts.headers !== undefined) {\n try {\n body.headers = JSON.parse(opts.headers);\n } catch {\n throw new CLIError('Invalid JSON for --headers');\n }\n }\n if (opts.body !== undefined) {\n try {\n body.body = JSON.parse(opts.body);\n } catch {\n throw new CLIError('Invalid JSON for --body');\n }\n }\n\n if (Object.keys(body).length === 0) {\n throw new CLIError('Provide at least one option to update (--name, --cron, --url, --method, --headers, --body, --active).');\n }\n\n const res = await ossFetch(`/api/schedules/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n body: JSON.stringify(body),\n });\n const data = await res.json() as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? 'Schedule updated.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSchedulesDeleteCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('delete <id>')\n .description('Delete a schedule')\n .action(async (id: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete schedule \"${id}\"? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/schedules/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n });\n const data = await res.json() as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? 'Schedule deleted.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListExecutionLogsResponse } from '../../types.js';\n\nexport function registerSchedulesLogsCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('logs <id>')\n .description('Get execution logs for a schedule')\n .option('--limit <n>', 'Max logs to return (default: 50, max: 100)', '50')\n .option('--offset <n>', 'Pagination offset', '0')\n .action(async (id: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const limit = parseInt(opts.limit, 10) || 50;\n const offset = parseInt(opts.offset, 10) || 0;\n\n const res = await ossFetch(`/api/schedules/${encodeURIComponent(id)}/logs?limit=${limit}&offset=${offset}`);\n const data = await res.json() as ListExecutionLogsResponse;\n const logs = data.logs ?? [];\n\n if (json) {\n outputJson(data);\n } else {\n if (!logs.length) {\n console.log('No execution logs found.');\n return;\n }\n outputTable(\n ['Executed At', 'Status', 'Success', 'Duration (ms)'],\n logs.map((l) => [\n l.executedAt ? new Date(String(l.executedAt)).toLocaleString() : '-',\n String(l.statusCode ?? '-'),\n l.success ? 'Yes' : 'No',\n String(l.durationMs ?? '-'),\n ]),\n );\n if (data.totalCount > offset + logs.length) {\n console.log(`\\n Showing ${offset + 1}-${offset + logs.length} of ${data.totalCount}. Use --offset to paginate.`);\n }\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../lib/api/oss.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\n\nconst VALID_SOURCES = ['insforge.logs', 'postgREST.logs', 'postgres.logs', 'function.logs', 'function-deploy.logs'] as const;\nconst SOURCE_LOOKUP = new Map(VALID_SOURCES.map((s) => [s.toLowerCase(), s]));\n\n/** Maps source names to their API paths. Most use /api/logs/{source}, but some have custom paths. */\nconst SOURCE_PATH: Record<string, string> = {\n 'function-deploy.logs': '/api/logs/functions/build-logs',\n};\n\nfunction getLogPath(source: string, limit: number): string {\n const custom = SOURCE_PATH[source];\n if (custom) return `${custom}?limit=${limit}`;\n return `/api/logs/${encodeURIComponent(source)}?limit=${limit}`;\n}\n\nexport function registerLogsCommand(program: Command): void {\n program\n .command('logs <source>')\n .description('Fetch backend container logs (insforge.logs | postgREST.logs | postgres.logs | function.logs | function-deploy.logs)')\n .option('--limit <n>', 'Number of log entries to return', '20')\n .action(async (source: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const resolved = SOURCE_LOOKUP.get(source.toLowerCase());\n if (!resolved) {\n throw new CLIError(`Invalid log source \"${source}\". Valid sources: ${VALID_SOURCES.join(', ')}`);\n }\n\n const limit = parseInt(opts.limit, 10) || 20;\n const res = await ossFetch(getLogPath(resolved, limit));\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n const logs = Array.isArray(data) ? data : (data as Record<string, unknown>).logs;\n if (!Array.isArray(logs) || !logs.length) {\n console.log('No logs found.');\n return;\n }\n for (const entry of logs) {\n if (typeof entry === 'string') {\n console.log(entry);\n } else {\n const e = entry as Record<string, unknown>;\n const ts = e.timestamp ?? e.time ?? '';\n const msg = e.message ?? e.msg ?? e.log ?? JSON.stringify(e);\n console.log(`${ts} ${msg}`);\n }\n }\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport type { AppMetadataSchema } from '@insforge/shared-schemas';\nimport { ossFetch } from '../lib/api/oss.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\nimport { reportCliUsage } from '../lib/skills.js';\n\nexport function registerMetadataCommand(program: Command): void {\n program\n .command('metadata')\n .description('Show backend metadata (auth, database, buckets, edge functions, realtime, AI models)')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/metadata');\n const data = await res.json() as AppMetadataSchema;\n\n if (json) {\n outputJson(data);\n return;\n }\n\n // Auth\n console.log('\\n Auth');\n console.log(` OAuth Providers: ${data.auth.oAuthProviders.length ? data.auth.oAuthProviders.join(', ') : '(none)'}`);\n console.log(` Email Verification: ${data.auth.requireEmailVerification ? 'Yes' : 'No'}`);\n console.log(` Password Policy:`);\n console.log(` Min Length: ${data.auth.passwordMinLength}, requireLowercase: ${data.auth.requireLowercase}, requireNumber: ${data.auth.requireNumber}, requireSpecialChar: ${data.auth.requireSpecialChar}, requireUppercase: ${data.auth.requireUppercase}`);\n console.log(` Verify Email Method: ${data.auth.verifyEmailMethod}`);\n console.log(` Reset Password Method: ${data.auth.resetPasswordMethod}`);\n\n // Database\n console.log('\\n Database');\n console.log(` Size: ${formatSize(data.database.totalSizeInGB)}`);\n if (data.database.tables.length) {\n outputTable(\n ['Table', 'Records'],\n data.database.tables.map((t) => [t.tableName, String(t.recordCount)]),\n );\n } else {\n console.log(' No tables.');\n }\n\n // Storage\n console.log('\\n Storage');\n console.log(` Size: ${formatSize(data.storage.totalSizeInGB)}`);\n if (data.storage.buckets.length) {\n outputTable(\n ['Bucket', 'Public', 'Objects'],\n data.storage.buckets.map((b) => [b.name, b.public ? 'Yes' : 'No', String(b.objectCount ?? '-')]),\n );\n } else {\n console.log(' No buckets.');\n }\n\n // Functions\n console.log('\\n Functions');\n if (data.functions.length) {\n outputTable(\n ['Slug', 'Name', 'Status', 'Description'],\n data.functions.map((f) => [f.slug, f.name, f.status, f.description || '-']),\n );\n } else {\n console.log(' No functions deployed.');\n }\n\n // AI\n if (data.aiIntegration?.models?.length) {\n console.log('\\n AI Models');\n outputTable(\n ['Model', 'Input', 'Output'],\n data.aiIntegration.models.map((m) => [\n m.modelId,\n m.inputModality.join(', '),\n m.outputModality.join(', '),\n ]),\n );\n }\n\n // Realtime\n if (data.realtime?.channels && Array.isArray(data.realtime.channels) && data.realtime.channels.length) {\n console.log(`\\n Realtime: ${data.realtime.channels.length} channel(s)`);\n outputTable(\n ['Id', 'Pattern', 'Webhook URLs', 'Enabled', 'Description'],\n data.realtime.channels.map((c) => [c.id, c.pattern, c.webhookUrls?.join(', ') || '-', c.enabled ? 'Yes' : 'No', c.description || '-']),\n );\n }\n\n // Version\n if (data.version) {\n console.log(`\\n Version: ${data.version}`);\n }\n\n console.log('');\n await reportCliUsage('cli.metadata', true);\n } catch (err) {\n await reportCliUsage('cli.metadata', false);\n handleError(err, json);\n }\n });\n}\n\nfunction formatSize(gb: number): string {\n if (gb < 0.001) return `${(gb * 1024 * 1024).toFixed(1)} KB`;\n if (gb < 1) return `${(gb * 1024).toFixed(2)} MB`;\n return `${gb.toFixed(2)} GB`;\n}\n","import type { Command } from 'commander';\nimport { platformFetch } from '../../lib/api/platform.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\ninterface MetricDataPoint {\n timestamp: number;\n value: number;\n}\n\ninterface MetricSeries {\n metric: string;\n instance_id: string;\n data: MetricDataPoint[];\n}\n\ninterface MetricsResponse {\n project_id: string;\n range: string;\n metrics: MetricSeries[];\n _meta?: { requested_at: string; query_time_ms: number; cached: boolean };\n}\n\nconst METRIC_LABELS: Record<string, string> = {\n cpu_usage: 'CPU Usage',\n memory_usage: 'Memory Usage',\n disk_usage: 'Disk Usage',\n network_in: 'Network In',\n network_out: 'Network Out',\n};\n\nconst NETWORK_METRICS = new Set(['network_in', 'network_out']);\n\nfunction formatValue(metric: string, value: number): string {\n if (NETWORK_METRICS.has(metric)) {\n return formatBytes(value) + '/s';\n }\n return `${value.toFixed(1)}%`;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes.toFixed(1)} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction computeStats(data: MetricDataPoint[]): { latest: number; avg: number; max: number } {\n if (data.length === 0) return { latest: 0, avg: 0, max: 0 };\n const latest = data[data.length - 1].value;\n let sum = 0;\n let max = -Infinity;\n for (const d of data) {\n sum += d.value;\n if (d.value > max) max = d.value;\n }\n return { latest, avg: sum / data.length, max };\n}\n\n/**\n * Aggregate multiple series of the same metric (e.g. multiple network interfaces)\n * into a single series per metric name. Network metrics are summed; others take the first series.\n */\nfunction aggregateByMetric(series: MetricSeries[]): MetricSeries[] {\n const grouped = new Map<string, MetricSeries[]>();\n for (const s of series) {\n const existing = grouped.get(s.metric);\n if (existing) existing.push(s);\n else grouped.set(s.metric, [s]);\n }\n\n const result: MetricSeries[] = [];\n for (const [metric, group] of grouped) {\n if (group.length === 1 || !NETWORK_METRICS.has(metric)) {\n result.push(group[0]);\n continue;\n }\n // Sum network metrics across interfaces by matching timestamps\n const tsMap = new Map<number, number>();\n for (const s of group) {\n for (const d of s.data) {\n tsMap.set(d.timestamp, (tsMap.get(d.timestamp) ?? 0) + d.value);\n }\n }\n const merged: MetricDataPoint[] = [...tsMap.entries()]\n .sort((a, b) => a[0] - b[0])\n .map(([timestamp, value]) => ({ timestamp, value }));\n result.push({ metric, instance_id: 'aggregate', data: merged });\n }\n return result;\n}\n\nexport async function fetchMetricsSummary(\n projectId: string,\n apiUrl?: string,\n): Promise<MetricsResponse> {\n const res = await platformFetch(`/projects/v1/${projectId}/metrics?range=1h`, {}, apiUrl);\n return (await res.json()) as MetricsResponse;\n}\n\nexport function registerDiagnoseMetricsCommand(diagnoseCmd: Command): void {\n diagnoseCmd\n .command('metrics')\n .description('Display EC2 instance metrics (CPU, memory, disk, network)')\n .option('--range <range>', 'Time range: 1h, 6h, 24h, 7d', '1h')\n .option('--metrics <list>', 'Comma-separated metrics to query')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n if (config.project_id === 'oss-project') {\n throw new CLIError(\n 'Metrics requires InsForge Platform login. Not available when linked via --api-key.',\n );\n }\n\n const params = new URLSearchParams({ range: opts.range });\n if (opts.metrics) params.set('metrics', opts.metrics);\n\n const res = await platformFetch(\n `/projects/v1/${config.project_id}/metrics?${params.toString()}`,\n {},\n apiUrl,\n );\n const data = (await res.json()) as MetricsResponse;\n\n const aggregated = aggregateByMetric(data.metrics);\n\n if (json) {\n const enriched = {\n ...data,\n metrics: aggregated.map((m) => {\n const stats = computeStats(m.data);\n return { ...m, latest: stats.latest, avg: stats.avg, max: stats.max };\n }),\n };\n outputJson(enriched);\n } else {\n if (!aggregated.length) {\n console.log('No metrics data available.');\n return;\n }\n const headers = ['Metric', 'Latest', 'Avg', 'Max', 'Range'];\n const rows = aggregated.map((m) => {\n const stats = computeStats(m.data);\n return [\n METRIC_LABELS[m.metric] ?? m.metric,\n formatValue(m.metric, stats.latest),\n formatValue(m.metric, stats.avg),\n formatValue(m.metric, stats.max),\n data.range,\n ];\n });\n outputTable(headers, rows);\n }\n await reportCliUsage('cli.diagnose.metrics', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose.metrics', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { platformFetch } from '../../lib/api/platform.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\n\ninterface AdvisorScanSummary {\n scanId: string;\n status: string;\n scanType: string;\n scannedAt: string;\n summary: { total: number; critical: number; warning: number; info: number };\n collectorErrors: { collector: string; error: string; timestamp: string }[];\n}\n\ninterface AdvisorIssue {\n id: string;\n ruleId: string;\n severity: string;\n category: string;\n title: string;\n description: string;\n affectedObject: string;\n recommendation: string;\n isResolved: boolean;\n}\n\ninterface AdvisorIssuesResponse {\n issues: AdvisorIssue[];\n total: number;\n}\n\nexport async function fetchAdvisorSummary(\n projectId: string,\n apiUrl?: string,\n): Promise<AdvisorScanSummary> {\n const res = await platformFetch(`/projects/v1/${projectId}/advisor/latest`, {}, apiUrl);\n return (await res.json()) as AdvisorScanSummary;\n}\n\nexport function registerDiagnoseAdvisorCommand(diagnoseCmd: Command): void {\n diagnoseCmd\n .command('advisor')\n .description('Display latest advisor scan results and issues')\n .option('--severity <level>', 'Filter by severity: critical, warning, info')\n .option('--category <cat>', 'Filter by category: security, performance, health')\n .option('--limit <n>', 'Maximum number of issues to return', '50')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n if (config.project_id === 'oss-project') {\n throw new CLIError(\n 'Advisor requires InsForge Platform login. Not available when linked via --api-key.',\n );\n }\n\n const projectId = config.project_id;\n\n // Fetch scan summary\n const scanRes = await platformFetch(\n `/projects/v1/${projectId}/advisor/latest`,\n {},\n apiUrl,\n );\n const scan = (await scanRes.json()) as AdvisorScanSummary;\n\n // Fetch issues\n const issueParams = new URLSearchParams();\n if (opts.severity) issueParams.set('severity', opts.severity);\n if (opts.category) issueParams.set('category', opts.category);\n issueParams.set('limit', opts.limit);\n\n const issuesRes = await platformFetch(\n `/projects/v1/${projectId}/advisor/latest/issues?${issueParams.toString()}`,\n {},\n apiUrl,\n );\n const issuesData = (await issuesRes.json()) as AdvisorIssuesResponse;\n\n if (json) {\n outputJson({ scan, issues: issuesData.issues });\n } else {\n // Scan summary line\n const date = new Date(scan.scannedAt).toLocaleDateString();\n const s = scan.summary;\n console.log(\n `Scan: ${date} (${scan.status}) — ${s.critical} critical, ${s.warning} warning, ${s.info} info\\n`,\n );\n\n if (!issuesData.issues || issuesData.issues.length === 0) {\n console.log('No issues found.');\n return;\n }\n\n const headers = ['Severity', 'Category', 'Affected Object', 'Title'];\n const rows = issuesData.issues.map((issue) => [\n issue.severity,\n issue.category,\n issue.affectedObject,\n issue.title,\n ]);\n outputTable(headers, rows);\n }\n await reportCliUsage('cli.diagnose.advisor', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose.advisor', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { runRawSql } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\ninterface DbCheck {\n label: string;\n sql: string;\n format: (rows: Record<string, unknown>[]) => void;\n}\n\nconst DB_CHECKS: Record<string, DbCheck> = {\n connections: {\n label: 'Connections',\n sql: `SELECT\n (SELECT count(*) FROM pg_stat_activity WHERE state IS NOT NULL) AS active,\n (SELECT setting::int FROM pg_settings WHERE name = 'max_connections') AS max`,\n format(rows) {\n const r = rows[0] ?? {};\n console.log(` Active: ${r.active} / ${r.max}`);\n },\n },\n 'slow-queries': {\n label: 'Slow Queries (>5s)',\n sql: `SELECT pid, now() - query_start AS duration, substring(query for 80) AS query\n FROM pg_stat_activity\n WHERE state = 'active' AND now() - query_start > interval '5 seconds'\n ORDER BY query_start ASC`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' None');\n return;\n }\n const headers = ['PID', 'Duration', 'Query'];\n const tableRows = rows.map((r) => [\n String(r.pid ?? ''),\n String(r.duration ?? ''),\n String(r.query ?? ''),\n ]);\n outputTable(headers, tableRows);\n },\n },\n bloat: {\n label: 'Table Bloat (top 10)',\n sql: `SELECT schemaname || '.' || relname AS table, n_dead_tup AS dead_tuples\n FROM pg_stat_user_tables\n ORDER BY n_dead_tup DESC\n LIMIT 10`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' No user tables found.');\n return;\n }\n const headers = ['Table', 'Dead Tuples'];\n const tableRows = rows.map((r) => [\n String(r.table ?? ''),\n String(r.dead_tuples ?? 0),\n ]);\n outputTable(headers, tableRows);\n },\n },\n size: {\n label: 'Table Sizes (top 10)',\n sql: `SELECT schemaname || '.' || relname AS table,\n pg_size_pretty(pg_total_relation_size(relid)) AS size\n FROM pg_stat_user_tables\n ORDER BY pg_total_relation_size(relid) DESC\n LIMIT 10`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' No user tables found.');\n return;\n }\n const headers = ['Table', 'Size'];\n const tableRows = rows.map((r) => [\n String(r.table ?? ''),\n String(r.size ?? ''),\n ]);\n outputTable(headers, tableRows);\n },\n },\n 'index-usage': {\n label: 'Index Usage (worst 10)',\n sql: `SELECT schemaname || '.' || relname AS table, idx_scan, seq_scan,\n CASE WHEN (idx_scan + seq_scan) > 0\n THEN round(100.0 * idx_scan / (idx_scan + seq_scan), 1)\n ELSE 0 END AS idx_ratio\n FROM pg_stat_user_tables\n WHERE (idx_scan + seq_scan) > 0\n ORDER BY idx_ratio ASC\n LIMIT 10`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' No scan data available.');\n return;\n }\n const headers = ['Table', 'Index Scans', 'Seq Scans', 'Index Ratio'];\n const tableRows = rows.map((r) => [\n String(r.table ?? ''),\n String(r.idx_scan ?? 0),\n String(r.seq_scan ?? 0),\n `${r.idx_ratio ?? 0}%`,\n ]);\n outputTable(headers, tableRows);\n },\n },\n locks: {\n label: 'Waiting Locks',\n sql: `SELECT pid, mode, relation::regclass AS relation, granted\n FROM pg_locks\n WHERE NOT granted`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' None');\n return;\n }\n const headers = ['PID', 'Mode', 'Relation', 'Granted'];\n const tableRows = rows.map((r) => [\n String(r.pid ?? ''),\n String(r.mode ?? ''),\n String(r.relation ?? ''),\n String(r.granted ?? ''),\n ]);\n outputTable(headers, tableRows);\n },\n },\n 'cache-hit': {\n label: 'Cache Hit Ratio',\n sql: `SELECT CASE WHEN sum(heap_blks_hit + heap_blks_read) > 0\n THEN round(100.0 * sum(heap_blks_hit) / sum(heap_blks_hit + heap_blks_read), 1)\n ELSE 0 END AS ratio\n FROM pg_statio_user_tables`,\n format(rows) {\n const ratio = rows[0]?.ratio ?? 0;\n console.log(` ${ratio}%`);\n },\n },\n};\n\nconst ALL_CHECKS = Object.keys(DB_CHECKS);\n\nexport async function runDbChecks(): Promise<Record<string, Record<string, unknown>[]>> {\n const results: Record<string, Record<string, unknown>[]> = {};\n for (const key of ALL_CHECKS) {\n try {\n const { rows } = await runRawSql(DB_CHECKS[key].sql, true);\n results[key] = rows;\n } catch {\n results[key] = [];\n }\n }\n return results;\n}\n\nexport function registerDiagnoseDbCommand(diagnoseCmd: Command): void {\n diagnoseCmd\n .command('db')\n .description('Run database health checks (connections, bloat, index usage, etc.)')\n .option('--check <checks>', 'Comma-separated checks: ' + ALL_CHECKS.join(', '), 'all')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const checkNames =\n opts.check === 'all'\n ? ALL_CHECKS\n : (opts.check as string).split(',').map((s: string) => s.trim());\n\n const results: Record<string, Record<string, unknown>[]> = {};\n\n for (const name of checkNames) {\n const check = DB_CHECKS[name];\n if (!check) {\n console.error(`Unknown check: ${name}. Available: ${ALL_CHECKS.join(', ')}`);\n continue;\n }\n try {\n const { rows } = await runRawSql(check.sql, true);\n results[name] = rows;\n } catch (err) {\n results[name] = [];\n if (!json) {\n console.error(` Failed to run ${name}: ${err instanceof Error ? err.message : err}`);\n }\n }\n }\n\n if (json) {\n outputJson(results);\n } else {\n for (const name of checkNames) {\n const check = DB_CHECKS[name];\n if (!check) continue;\n console.log(`\\n── ${check.label} ${'─'.repeat(Math.max(0, 40 - check.label.length))}`);\n check.format(results[name] ?? []);\n }\n console.log('');\n }\n await reportCliUsage('cli.diagnose.db', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose.db', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nconst LOG_SOURCES = ['insforge.logs', 'postgREST.logs', 'postgres.logs', 'function.logs', 'function-deploy.logs'] as const;\n\nconst ERROR_PATTERN = /\\b(error|fatal|panic)\\b/i;\n\n/** Maps source names to their API paths. Most use /api/logs/{source}, but some have custom paths. */\nconst SOURCE_PATH: Record<string, string> = {\n 'function-deploy.logs': '/api/logs/functions/build-logs',\n};\n\ninterface LogEntry {\n timestamp: string;\n message: string;\n source: string;\n}\n\ninterface SourceSummary {\n source: string;\n total: number;\n errors: LogEntry[];\n}\n\nfunction parseLogEntry(entry: unknown): { ts: string; msg: string } {\n if (typeof entry === 'string') {\n return { ts: '', msg: entry };\n }\n const e = entry as Record<string, unknown>;\n const ts = String(e.timestamp ?? e.time ?? '');\n const msg = String(e.message ?? e.msg ?? e.log ?? JSON.stringify(e));\n return { ts, msg };\n}\n\nfunction getLogPath(source: string, limit: number): string {\n const custom = SOURCE_PATH[source];\n if (custom) return `${custom}?limit=${limit}`;\n return `/api/logs/${encodeURIComponent(source)}?limit=${limit}`;\n}\n\nasync function fetchSourceLogs(source: string, limit: number): Promise<SourceSummary> {\n const res = await ossFetch(getLogPath(source, limit));\n const data = await res.json();\n const logs = Array.isArray(data) ? data : ((data as Record<string, unknown>).logs as unknown[]) ?? [];\n\n const errors: LogEntry[] = [];\n for (const entry of logs) {\n const { ts, msg } = parseLogEntry(entry);\n if (ERROR_PATTERN.test(msg)) {\n errors.push({ timestamp: ts, message: msg, source });\n }\n }\n\n return { source, total: logs.length, errors };\n}\n\nexport async function fetchLogsSummary(limit = 100): Promise<SourceSummary[]> {\n const results: SourceSummary[] = [];\n for (const source of LOG_SOURCES) {\n try {\n results.push(await fetchSourceLogs(source, limit));\n } catch {\n results.push({ source, total: 0, errors: [] });\n }\n }\n return results;\n}\n\nexport function registerDiagnoseLogsCommand(diagnoseCmd: Command): void {\n diagnoseCmd\n .command('logs')\n .description('Aggregate error-level logs from all backend sources')\n .option('--source <name>', 'Specific log source to check')\n .option('--limit <n>', 'Number of log entries per source', '100')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const limit = parseInt(opts.limit, 10) || 100;\n const sources = opts.source ? [opts.source as string] : [...LOG_SOURCES];\n\n const summaries: SourceSummary[] = [];\n for (const source of sources) {\n try {\n summaries.push(await fetchSourceLogs(source, limit));\n } catch {\n summaries.push({ source, total: 0, errors: [] });\n }\n }\n\n if (json) {\n outputJson({ sources: summaries });\n } else {\n // Summary table\n const headers = ['Source', 'Total', 'Errors'];\n const rows = summaries.map((s) => [s.source, String(s.total), String(s.errors.length)]);\n outputTable(headers, rows);\n\n // Error details\n const allErrors = summaries.flatMap((s) => s.errors);\n if (allErrors.length > 0) {\n console.log('\\n── Error Details ' + '─'.repeat(30));\n for (const err of allErrors) {\n const prefix = err.timestamp ? `[${err.source}] ${err.timestamp}` : `[${err.source}]`;\n console.log(`\\n ${prefix}`);\n console.log(` ${err.message}`);\n }\n console.log('');\n }\n }\n await reportCliUsage('cli.diagnose.logs', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose.logs', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nimport { fetchMetricsSummary, registerDiagnoseMetricsCommand } from './metrics.js';\nimport { fetchAdvisorSummary, registerDiagnoseAdvisorCommand } from './advisor.js';\nimport { runDbChecks, registerDiagnoseDbCommand } from './db.js';\nimport { fetchLogsSummary, registerDiagnoseLogsCommand } from './logs.js';\n\nfunction sectionHeader(title: string): string {\n return `── ${title} ${'─'.repeat(Math.max(0, 44 - title.length))}`;\n}\n\nexport function registerDiagnoseCommands(diagnoseCmd: Command): void {\n // Comprehensive report (no subcommand)\n diagnoseCmd\n .description('Backend diagnostics — run with no subcommand for a full health report')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const projectId = config.project_id;\n const projectName = config.project_name;\n const ossMode = config.project_id === 'oss-project';\n\n // In OSS mode (linked via --api-key), skip Platform API calls (metrics/advisor)\n const metricsPromise = ossMode\n ? Promise.reject(new Error('Platform login required (linked via --api-key)'))\n : fetchMetricsSummary(projectId, apiUrl);\n const advisorPromise = ossMode\n ? Promise.reject(new Error('Platform login required (linked via --api-key)'))\n : fetchAdvisorSummary(projectId, apiUrl);\n\n const [metricsResult, advisorResult, dbResult, logsResult] = await Promise.allSettled([\n metricsPromise,\n advisorPromise,\n runDbChecks(),\n fetchLogsSummary(100),\n ]);\n\n if (json) {\n const report: Record<string, unknown> = { project: projectName, errors: [] };\n const errors: string[] = [];\n\n if (metricsResult.status === 'fulfilled') {\n const data = metricsResult.value;\n report.metrics = data.metrics.map((m) => {\n if (m.data.length === 0) return { metric: m.metric, latest: null, avg: null, max: null };\n let sum = 0;\n let max = -Infinity;\n for (const d of m.data) {\n sum += d.value;\n if (d.value > max) max = d.value;\n }\n return {\n metric: m.metric,\n latest: m.data[m.data.length - 1].value,\n avg: sum / m.data.length,\n max,\n };\n });\n } else {\n report.metrics = null;\n errors.push(metricsResult.reason?.message ?? 'Metrics unavailable');\n }\n\n if (advisorResult.status === 'fulfilled') {\n report.advisor = advisorResult.value;\n } else {\n report.advisor = null;\n errors.push(advisorResult.reason?.message ?? 'Advisor unavailable');\n }\n\n if (dbResult.status === 'fulfilled') {\n report.db = dbResult.value;\n } else {\n report.db = null;\n errors.push(dbResult.reason?.message ?? 'DB checks unavailable');\n }\n\n if (logsResult.status === 'fulfilled') {\n report.logs = logsResult.value;\n } else {\n report.logs = null;\n errors.push(logsResult.reason?.message ?? 'Logs unavailable');\n }\n\n report.errors = errors;\n outputJson(report);\n } else {\n console.log(`\\n InsForge Health Report — ${projectName}\\n`);\n\n // Metrics section\n console.log(sectionHeader('System Metrics (last 1h)'));\n if (metricsResult.status === 'fulfilled') {\n const metrics = metricsResult.value.metrics;\n if (metrics.length === 0) {\n console.log(' No metrics data available.');\n } else {\n const vals: Record<string, number> = {};\n for (const m of metrics) {\n if (m.data.length > 0) vals[m.metric] = m.data[m.data.length - 1].value;\n }\n const cpu = vals.cpu_usage !== undefined ? `${vals.cpu_usage.toFixed(1)}%` : 'N/A';\n const mem = vals.memory_usage !== undefined ? `${vals.memory_usage.toFixed(1)}%` : 'N/A';\n const disk = vals.disk_usage !== undefined ? `${vals.disk_usage.toFixed(1)}%` : 'N/A';\n const netIn = vals.network_in !== undefined ? formatBytesCompact(vals.network_in) + '/s' : 'N/A';\n const netOut = vals.network_out !== undefined ? formatBytesCompact(vals.network_out) + '/s' : 'N/A';\n console.log(` CPU: ${cpu} Memory: ${mem}`);\n console.log(` Disk: ${disk} Network: ↓${netIn} ↑${netOut}`);\n }\n } else {\n console.log(` N/A — ${metricsResult.reason?.message ?? 'unavailable'}`);\n }\n\n // Advisor section\n console.log('\\n' + sectionHeader('Advisor Scan'));\n if (advisorResult.status === 'fulfilled') {\n const scan = advisorResult.value;\n const s = scan.summary;\n const date = new Date(scan.scannedAt).toLocaleDateString();\n console.log(` ${date} (${scan.status}) — ${s.critical} critical · ${s.warning} warning · ${s.info} info`);\n } else {\n console.log(` N/A — ${advisorResult.reason?.message ?? 'unavailable'}`);\n }\n\n // DB section\n console.log('\\n' + sectionHeader('Database'));\n if (dbResult.status === 'fulfilled') {\n const db = dbResult.value;\n const conn = db.connections?.[0] as Record<string, unknown> | undefined;\n const cache = db['cache-hit']?.[0] as Record<string, unknown> | undefined;\n const deadTuples = (db.bloat ?? []).reduce(\n (sum: number, r: Record<string, unknown>) => sum + (Number(r.dead_tuples) || 0),\n 0,\n );\n const lockCount = (db.locks ?? []).length;\n\n console.log(\n ` Connections: ${conn?.active ?? '?'}/${conn?.max ?? '?'} Cache Hit: ${cache?.ratio ?? '?'}%`,\n );\n console.log(\n ` Dead tuples: ${deadTuples.toLocaleString()} Locks waiting: ${lockCount}`,\n );\n } else {\n console.log(` N/A — ${dbResult.reason?.message ?? 'unavailable'}`);\n }\n\n // Logs section\n console.log('\\n' + sectionHeader('Recent Errors (last 100 logs/source)'));\n if (logsResult.status === 'fulfilled') {\n const summaries = logsResult.value;\n const parts = summaries.map((s) => `${s.source}: ${s.errors.length}`);\n console.log(` ${parts.join(' ')}`);\n } else {\n console.log(` N/A — ${logsResult.reason?.message ?? 'unavailable'}`);\n }\n\n console.log('');\n }\n await reportCliUsage('cli.diagnose', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose', false);\n handleError(err, json);\n }\n });\n\n // Register subcommands\n registerDiagnoseMetricsCommand(diagnoseCmd);\n registerDiagnoseAdvisorCommand(diagnoseCmd);\n registerDiagnoseDbCommand(diagnoseCmd);\n registerDiagnoseLogsCommand(diagnoseCmd);\n}\n\nfunction formatBytesCompact(bytes: number): string {\n if (bytes < 1024) return `${bytes.toFixed(0)}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n"],"mappings":"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","names":["readFileSync","join","clack","clack","URL","URL","resolve","clack","path","password","program","password","program","program","orgsCmd","clack","projectsCmd","clack","existsSync","readFileSync","join","clack","join","existsSync","readFileSync","program","projectConfig","path","dbCmd","dbCmd","dbCmd","dbCmd","dbCmd","dbCmd","dbCmd","writeFileSync","dbCmd","writeFileSync","readFileSync","dbCmd","readFileSync","recordsCmd","path","recordsCmd","recordsCmd","recordsCmd","functionsCmd","readFileSync","existsSync","join","functionsCmd","join","existsSync","readFileSync","functionsCmd","text","functionsCmd","clack","functionsCmd","storageCmd","readFileSync","existsSync","basename","storageCmd","existsSync","readFileSync","basename","writeFileSync","join","basename","storageCmd","join","basename","writeFileSync","storageCmd","clack","storageCmd","confirm","storageCmd","exec","promisify","fs","path","clack","path","fs","clack","resolve","deploymentsCmd","execAsync","promisify","exec","buildOssHost","program","s","stat","program","program","deploymentsCmd","deploymentsCmd","clack","deploymentsCmd","deploymentsCmd","program","path","secretsCmd","secretsCmd","secretsCmd","secretsCmd","clack","secretsCmd","confirm","schedulesCmd","schedulesCmd","schedulesCmd","schedulesCmd","clack","schedulesCmd","confirm","schedulesCmd","program","program","formatSize","diagnoseCmd","diagnoseCmd","diagnoseCmd","SOURCE_PATH","getLogPath","diagnoseCmd","diagnoseCmd","readFileSync","join"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/config.ts","../src/commands/login.ts","../src/lib/errors.ts","../src/lib/auth.ts","../src/lib/credentials.ts","../src/lib/api/platform.ts","../src/lib/output.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/orgs/list.ts","../src/commands/projects/list.ts","../src/commands/projects/link.ts","../src/lib/skills.ts","../src/lib/api/oss.ts","../src/commands/db/query.ts","../src/commands/db/tables.ts","../src/commands/db/functions.ts","../src/commands/db/indexes.ts","../src/commands/db/policies.ts","../src/commands/db/triggers.ts","../src/commands/db/rpc.ts","../src/commands/db/export.ts","../src/commands/db/import.ts","../src/commands/records/list.ts","../src/commands/records/create.ts","../src/commands/records/update.ts","../src/commands/records/delete.ts","../src/commands/functions/list.ts","../src/commands/functions/deploy.ts","../src/commands/functions/invoke.ts","../src/commands/functions/code.ts","../src/commands/functions/delete.ts","../src/commands/storage/buckets.ts","../src/commands/storage/upload.ts","../src/commands/storage/download.ts","../src/commands/storage/create-bucket.ts","../src/commands/storage/delete-bucket.ts","../src/commands/storage/list-objects.ts","../src/commands/create.ts","../src/lib/env.ts","../src/lib/analytics.ts","../src/commands/deployments/deploy.ts","../src/commands/info.ts","../src/commands/list.ts","../src/commands/deployments/list.ts","../src/commands/deployments/status.ts","../src/commands/deployments/cancel.ts","../src/commands/deployments/env-vars.ts","../src/commands/docs.ts","../src/commands/secrets/list.ts","../src/commands/secrets/get.ts","../src/commands/secrets/add.ts","../src/commands/secrets/update.ts","../src/commands/secrets/delete.ts","../src/commands/schedules/list.ts","../src/commands/schedules/get.ts","../src/commands/schedules/create.ts","../src/commands/schedules/update.ts","../src/commands/schedules/delete.ts","../src/commands/schedules/logs.ts","../src/commands/logs.ts","../src/commands/metadata.ts","../src/commands/diagnose/metrics.ts","../src/commands/diagnose/advisor.ts","../src/commands/diagnose/db.ts","../src/commands/diagnose/logs.ts","../src/commands/diagnose/index.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { getCredentials, getProjectConfig } from './lib/config.js';\nimport { registerLoginCommand } from './commands/login.js';\nimport { registerLogoutCommand } from './commands/logout.js';\nimport { registerWhoamiCommand } from './commands/whoami.js';\nimport { registerOrgsCommands } from './commands/orgs/list.js';\nimport { registerProjectsCommands } from './commands/projects/list.js';\nimport { registerProjectLinkCommand } from './commands/projects/link.js';\nimport { registerDbCommands } from './commands/db/query.js';\nimport { registerDbTablesCommand } from './commands/db/tables.js';\nimport { registerDbFunctionsCommand } from './commands/db/functions.js';\nimport { registerDbIndexesCommand } from './commands/db/indexes.js';\nimport { registerDbPoliciesCommand } from './commands/db/policies.js';\nimport { registerDbTriggersCommand } from './commands/db/triggers.js';\nimport { registerDbRpcCommand } from './commands/db/rpc.js';\nimport { registerDbExportCommand } from './commands/db/export.js';\nimport { registerDbImportCommand } from './commands/db/import.js';\nimport { registerRecordsCommands } from './commands/records/list.js';\nimport { registerRecordsCreateCommand } from './commands/records/create.js';\nimport { registerRecordsUpdateCommand } from './commands/records/update.js';\nimport { registerRecordsDeleteCommand } from './commands/records/delete.js';\nimport { registerFunctionsCommands } from './commands/functions/list.js';\nimport { registerFunctionsDeployCommand } from './commands/functions/deploy.js';\nimport { registerFunctionsInvokeCommand } from './commands/functions/invoke.js';\nimport { registerFunctionsCodeCommand } from './commands/functions/code.js';\nimport { registerFunctionsDeleteCommand } from './commands/functions/delete.js';\nimport { registerStorageBucketsCommand } from './commands/storage/buckets.js';\nimport { registerStorageUploadCommand } from './commands/storage/upload.js';\nimport { registerStorageDownloadCommand } from './commands/storage/download.js';\nimport { registerStorageCreateBucketCommand } from './commands/storage/create-bucket.js';\nimport { registerStorageDeleteBucketCommand } from './commands/storage/delete-bucket.js';\nimport { registerStorageListObjectsCommand } from './commands/storage/list-objects.js';\nimport { registerCreateCommand } from './commands/create.js';\nimport { registerContextCommand } from './commands/info.js';\nimport { registerListCommand } from './commands/list.js';\nimport { registerDeploymentsDeployCommand } from './commands/deployments/deploy.js';\nimport { registerDeploymentsListCommand } from './commands/deployments/list.js';\nimport { registerDeploymentsStatusCommand } from './commands/deployments/status.js';\nimport { registerDeploymentsCancelCommand } from './commands/deployments/cancel.js';\nimport { registerDeploymentsEnvVarsCommand } from './commands/deployments/env-vars.js';\n\nimport { registerDocsCommand } from './commands/docs.js';\nimport { registerSecretsListCommand } from './commands/secrets/list.js';\nimport { registerSecretsGetCommand } from './commands/secrets/get.js';\nimport { registerSecretsAddCommand } from './commands/secrets/add.js';\nimport { registerSecretsUpdateCommand } from './commands/secrets/update.js';\nimport { registerSecretsDeleteCommand } from './commands/secrets/delete.js';\n\nimport { registerSchedulesListCommand } from './commands/schedules/list.js';\nimport { registerSchedulesGetCommand } from './commands/schedules/get.js';\nimport { registerSchedulesCreateCommand } from './commands/schedules/create.js';\nimport { registerSchedulesUpdateCommand } from './commands/schedules/update.js';\nimport { registerSchedulesDeleteCommand } from './commands/schedules/delete.js';\nimport { registerSchedulesLogsCommand } from './commands/schedules/logs.js';\n\nimport { registerLogsCommand } from './commands/logs.js';\nimport { registerMetadataCommand } from './commands/metadata.js';\nimport { registerDiagnoseCommands } from './commands/diagnose/index.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8')) as { version: string };\n\nconst INSFORGE_LOGO = `\n██╗███╗ ██╗███████╗███████╗ ██████╗ ██████╗ ██████╗ ███████╗\n██║████╗ ██║██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██╔════╝\n██║██╔██╗ ██║███████╗█████╗ ██║ ██║██████╔╝██║ ███╗█████╗\n██║██║╚██╗██║╚════██║██╔══╝ ██║ ██║██╔══██╗██║ ██║██╔══╝\n██║██║ ╚████║███████║██║ ╚██████╔╝██║ ██║╚██████╔╝███████╗\n╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝\n`;\n\nconst program = new Command();\n\nprogram\n .name('insforge')\n .description('InsForge CLI - Command line tool for InsForge platform')\n .version(pkg.version);\n\n// Global options\nprogram\n .option('--json', 'Output in JSON format')\n .option('--api-url <url>', 'Override Platform API URL')\n .option('-y, --yes', 'Skip confirmation prompts');\n\n// Top-level commands\nregisterLoginCommand(program);\nregisterLogoutCommand(program);\nregisterWhoamiCommand(program);\nregisterCreateCommand(program);\nregisterContextCommand(program);\nregisterListCommand(program);\nregisterDocsCommand(program);\nregisterProjectLinkCommand(program);\n\n// Orgs commands (hidden — use `insforge list` instead)\nconst orgsCmd = program.command('orgs', { hidden: true }).description('Manage organizations');\nregisterOrgsCommands(orgsCmd);\n\n// Projects commands (hidden — use `insforge list` instead)\nconst projectsCmd = program.command('projects', { hidden: true }).description('Manage projects');\nregisterProjectsCommands(projectsCmd);\n\n// Database commands\nconst dbCmd = program.command('db').description('Database operations');\nregisterDbCommands(dbCmd);\nregisterDbTablesCommand(dbCmd);\nregisterDbFunctionsCommand(dbCmd);\nregisterDbIndexesCommand(dbCmd);\nregisterDbPoliciesCommand(dbCmd);\nregisterDbTriggersCommand(dbCmd);\nregisterDbRpcCommand(dbCmd);\nregisterDbExportCommand(dbCmd);\nregisterDbImportCommand(dbCmd);\n\n// Records commands (hidden — do not use for now)\nconst recordsCmd = program.command('records', { hidden: true }).description('CRUD operations on table records');\nregisterRecordsCommands(recordsCmd);\nregisterRecordsCreateCommand(recordsCmd);\nregisterRecordsUpdateCommand(recordsCmd);\nregisterRecordsDeleteCommand(recordsCmd);\n\n// Functions commands\nconst functionsCmd = program.command('functions').description('Manage edge functions');\nregisterFunctionsCommands(functionsCmd);\nregisterFunctionsCodeCommand(functionsCmd);\nregisterFunctionsDeployCommand(functionsCmd);\nregisterFunctionsInvokeCommand(functionsCmd);\nregisterFunctionsDeleteCommand(functionsCmd);\n\n// Storage commands\nconst storageCmd = program.command('storage').description('Manage storage');\nregisterStorageBucketsCommand(storageCmd);\nregisterStorageCreateBucketCommand(storageCmd);\nregisterStorageDeleteBucketCommand(storageCmd);\nregisterStorageListObjectsCommand(storageCmd);\nregisterStorageUploadCommand(storageCmd);\nregisterStorageDownloadCommand(storageCmd);\n\n// Deployments commands\nconst deploymentsCmd = program.command('deployments').description('Deploy and manage frontend sites');\nregisterDeploymentsDeployCommand(deploymentsCmd);\nregisterDeploymentsListCommand(deploymentsCmd);\nregisterDeploymentsStatusCommand(deploymentsCmd);\nregisterDeploymentsCancelCommand(deploymentsCmd);\nregisterDeploymentsEnvVarsCommand(deploymentsCmd);\n// registerDeploymentsMetadataCommand(deploymentsCmd);\n// slug command doesn't work yet.\n// registerDeploymentsSlugCommand(deploymentsCmd);\n\n// Secrets commands\nconst secretsCmd = program.command('secrets').description('Manage secrets');\nregisterSecretsListCommand(secretsCmd);\nregisterSecretsGetCommand(secretsCmd);\nregisterSecretsAddCommand(secretsCmd);\nregisterSecretsUpdateCommand(secretsCmd);\nregisterSecretsDeleteCommand(secretsCmd);\n\n// Logs command\nregisterLogsCommand(program);\n\n// Metadata command\nregisterMetadataCommand(program);\n\n// Diagnose commands\nconst diagnoseCmd = program.command('diagnose');\nregisterDiagnoseCommands(diagnoseCmd);\n\n// Schedules commands\nconst schedulesCmd = program.command('schedules').description('Manage scheduled tasks (cron jobs)');\nregisterSchedulesListCommand(schedulesCmd);\nregisterSchedulesGetCommand(schedulesCmd);\nregisterSchedulesCreateCommand(schedulesCmd);\nregisterSchedulesUpdateCommand(schedulesCmd);\nregisterSchedulesDeleteCommand(schedulesCmd);\nregisterSchedulesLogsCommand(schedulesCmd);\n\nif (process.argv.length <= 2 && process.stdout.isTTY) {\n await showInteractiveMenu();\n} else {\n program.parse();\n}\n\nasync function showInteractiveMenu(): Promise<void> {\n let isLoggedIn = false;\n let isLinked = false;\n\n try {\n isLoggedIn = !!getCredentials()?.access_token;\n } catch { /* corrupted credentials file */ }\n\n try {\n isLinked = !!getProjectConfig()?.project_id;\n } catch { /* no project config */ }\n\n console.log(INSFORGE_LOGO);\n clack.intro(`InsForge CLI v${pkg.version}`);\n\n type Action = 'login' | 'create' | 'link' | 'deploy' | 'docs' | 'help';\n const options: { value: Action; label: string; hint?: string }[] = [];\n\n if (!isLoggedIn) {\n options.push({ value: 'login', label: 'Log in to InsForge' });\n }\n\n options.push(\n { value: 'create', label: 'Create a new project', hint: isLoggedIn ? undefined : 'requires login' },\n { value: 'link', label: 'Link an existing project', hint: isLoggedIn ? undefined : 'requires login' },\n );\n\n if (isLinked) {\n options.push({ value: 'deploy', label: 'Deploy your project' });\n }\n\n options.push(\n { value: 'docs', label: 'View documentation' },\n { value: 'help', label: 'Show all commands' },\n );\n\n const action = await clack.select({\n message: 'What would you like to do?',\n options,\n });\n\n if (clack.isCancel(action)) {\n clack.cancel('Bye!');\n process.exit(0);\n }\n\n switch (action) {\n case 'login':\n await program.parseAsync(['node', 'insforge', 'login']);\n break;\n case 'create':\n await program.parseAsync(['node', 'insforge', 'create']);\n break;\n case 'link':\n await program.parseAsync(['node', 'insforge', 'link']);\n break;\n case 'deploy':\n await program.parseAsync(['node', 'insforge', 'deployments', 'deploy']);\n break;\n case 'docs':\n await program.parseAsync(['node', 'insforge', 'docs']);\n break;\n case 'help':\n program.help();\n break;\n }\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport type { GlobalConfig, ProjectConfig, StoredCredentials } from '../types.js';\n\nconst GLOBAL_DIR = join(homedir(), '.insforge');\nconst CREDENTIALS_FILE = join(GLOBAL_DIR, 'credentials.json');\nconst CONFIG_FILE = join(GLOBAL_DIR, 'config.json');\n\nconst DEFAULT_PLATFORM_URL = 'https://api.insforge.dev';\nconst DEFAULT_FRONTEND_URL = 'https://insforge.dev';\n\nfunction ensureGlobalDir(): void {\n if (!existsSync(GLOBAL_DIR)) {\n mkdirSync(GLOBAL_DIR, { recursive: true });\n }\n}\n\n// --- Global Config ---\n\nexport function getGlobalConfig(): GlobalConfig {\n if (!existsSync(CONFIG_FILE)) {\n return { platform_api_url: DEFAULT_PLATFORM_URL };\n }\n const raw = readFileSync(CONFIG_FILE, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveGlobalConfig(config: GlobalConfig): void {\n ensureGlobalDir();\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));\n}\n\n// --- Credentials ---\n\nexport function getCredentials(): StoredCredentials | null {\n if (!existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n const raw = readFileSync(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveCredentials(creds: StoredCredentials): void {\n ensureGlobalDir();\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2), { mode: 0o600 });\n}\n\nexport function clearCredentials(): void {\n if (existsSync(CREDENTIALS_FILE)) {\n unlinkSync(CREDENTIALS_FILE);\n }\n // Clear session-related config (default_org_id) but keep platform_api_url etc.\n const config = getGlobalConfig();\n if (config.default_org_id) {\n delete config.default_org_id;\n saveGlobalConfig(config);\n }\n}\n\n// --- Project Config (local) ---\n\nfunction getLocalConfigDir(): string {\n return join(process.cwd(), '.insforge');\n}\n\nfunction getLocalConfigFile(): string {\n return join(getLocalConfigDir(), 'project.json');\n}\n\nexport function getProjectConfig(): ProjectConfig | null {\n const file = getLocalConfigFile();\n if (!existsSync(file)) {\n return null;\n }\n const raw = readFileSync(file, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveProjectConfig(config: ProjectConfig): void {\n const dir = getLocalConfigDir();\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(getLocalConfigFile(), JSON.stringify(config, null, 2), { mode: 0o600 });\n}\n\n// --- Resolved values (env vars > flags > config) ---\n\nexport function getPlatformApiUrl(override?: string): string {\n return process.env.INSFORGE_API_URL ?? override ?? getGlobalConfig().platform_api_url ?? DEFAULT_PLATFORM_URL;\n}\n\nexport function getFrontendUrl(): string {\n return process.env.INSFORGE_FRONTEND_URL ?? DEFAULT_FRONTEND_URL;\n}\n\nexport function getAccessToken(): string | null {\n return process.env.INSFORGE_ACCESS_TOKEN ?? getCredentials()?.access_token ?? null;\n}\n\nexport function getProjectId(override?: string): string | null {\n return process.env.INSFORGE_PROJECT_ID ?? override ?? getProjectConfig()?.project_id ?? null;\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { saveCredentials } from '../lib/config.js';\nimport { login as platformLogin } from '../lib/api/platform.js';\nimport { performOAuthLogin } from '../lib/auth.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport type { StoredCredentials } from '../types.js';\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Authenticate with InsForge platform')\n .option('--email', 'Login with email and password instead of browser')\n .option('--client-id <id>', 'OAuth client ID (defaults to insforge-cli)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n\n try {\n if (opts.email) {\n await loginWithEmail(json, apiUrl);\n } else {\n await loginWithOAuth(json, apiUrl);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('cancelled')) {\n process.exit(0);\n }\n handleError(err, json);\n }\n });\n}\n\nasync function loginWithEmail(json: boolean, apiUrl?: string): Promise<void> {\n if (!json) {\n clack.intro('InsForge CLI');\n }\n\n const email = json\n ? process.env.INSFORGE_EMAIL\n : await clack.text({\n message: 'Email:',\n validate: (v) => (v.includes('@') ? undefined : 'Please enter a valid email'),\n });\n\n if (clack.isCancel(email)) {\n clack.cancel('Login cancelled.');\n throw new Error('cancelled');\n }\n\n const password = json\n ? process.env.INSFORGE_PASSWORD\n : await clack.password({\n message: 'Password:',\n });\n\n if (clack.isCancel(password)) {\n clack.cancel('Login cancelled.');\n throw new Error('cancelled');\n }\n\n if (!email || !password) {\n throw new Error('Email and password are required. Set INSFORGE_EMAIL and INSFORGE_PASSWORD environment variables for non-interactive mode.');\n }\n\n if (!json) {\n const s = clack.spinner();\n s.start('Authenticating...');\n\n const result = await platformLogin(email as string, password as string, apiUrl);\n const creds: StoredCredentials = {\n access_token: result.token,\n refresh_token: result._refreshToken ?? '',\n user: result.user,\n };\n saveCredentials(creds);\n\n s.stop(`Authenticated as ${result.user.email}`);\n clack.outro('Done');\n } else {\n const result = await platformLogin(email as string, password as string, apiUrl);\n const creds: StoredCredentials = {\n access_token: result.token,\n refresh_token: result._refreshToken ?? '',\n user: result.user,\n };\n saveCredentials(creds);\n console.log(JSON.stringify({ success: true, user: result.user }));\n }\n}\n\nasync function loginWithOAuth(json: boolean, apiUrl?: string): Promise<void> {\n if (!json) {\n clack.intro('InsForge CLI');\n }\n\n const creds = await performOAuthLogin(apiUrl);\n\n if (!json) {\n clack.outro('Done');\n } else {\n console.log(JSON.stringify({ success: true, user: creds.user }));\n }\n}\n","import type { Command } from 'commander';\n\nexport class CLIError extends Error {\n constructor(\n message: string,\n public exitCode: number = 1,\n public code?: string,\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\nexport class AuthError extends CLIError {\n constructor(message: string = 'Not authenticated. Run `npx @insforge/cli login` first.') {\n super(message, 2, 'AUTH_ERROR');\n }\n}\n\nexport class ProjectNotLinkedError extends CLIError {\n constructor() {\n super('No project linked. Run `npx @insforge/cli link` first.', 3, 'PROJECT_NOT_LINKED');\n }\n}\n\nexport class NotFoundError extends CLIError {\n constructor(resource: string) {\n super(`${resource} not found.`, 4, 'NOT_FOUND');\n }\n}\n\nexport class PermissionError extends CLIError {\n constructor(message: string = 'Permission denied.') {\n super(message, 5, 'PERMISSION_DENIED');\n }\n}\n\n/**\n * Extract error message from a deployment's metadata field.\n * DeploymentSchema stores errors in metadata.error.errorMessage rather than a top-level field.\n */\nexport function getDeploymentError(metadata: Record<string, unknown> | null): string | null {\n if (!metadata || typeof metadata.error !== 'object' || !metadata.error) return null;\n return (metadata.error as { errorMessage?: string }).errorMessage ?? null;\n}\n\nexport function handleError(err: unknown, json: boolean): never {\n if (err instanceof CLIError) {\n if (json) {\n console.error(JSON.stringify({ error: err.message, code: err.code }));\n } else {\n console.error(`Error: ${err.message}`);\n }\n process.exit(err.exitCode);\n }\n\n const message = err instanceof Error ? err.message : String(err);\n if (json) {\n console.error(JSON.stringify({ error: message, code: 'UNKNOWN_ERROR' }));\n } else {\n console.error(`Error: ${message}`);\n }\n process.exit(1);\n}\n\nexport function getJsonFlag(cmd: Command): boolean {\n let root: Command = cmd;\n while (root.parent) {\n root = root.parent;\n }\n return root.opts().json ?? false;\n}\n\nexport function getRootOpts(cmd: Command): { json: boolean; apiUrl?: string; yes: boolean } {\n let root: Command = cmd;\n while (root.parent) {\n root = root.parent;\n }\n const opts = root.opts();\n return {\n json: opts.json ?? false,\n apiUrl: opts.apiUrl,\n yes: opts.yes ?? false,\n };\n}\n","import { createServer } from 'node:http';\nimport { randomBytes, createHash } from 'node:crypto';\nimport { URL } from 'node:url';\nimport * as clack from '@clack/prompts';\nimport { getGlobalConfig, getPlatformApiUrl, saveCredentials } from './config.js';\nimport { getProfile } from './api/platform.js';\nimport type { StoredCredentials } from '../types.js';\n\n// Default OAuth client for InsForge CLI (pre-registered on the platform)\nexport const DEFAULT_CLIENT_ID = 'clf_NK8cMUs41gm8ZcfdtSguVw';\nexport const OAUTH_SCOPES = 'user:read organizations:read projects:read projects:write';\n\nexport interface PKCEChallenge {\n code_verifier: string;\n code_challenge: string;\n}\n\nexport interface OAuthCallbackResult {\n code: string;\n state: string;\n}\n\n/**\n * Generate PKCE code_verifier and code_challenge (S256).\n */\nexport function generatePKCE(): PKCEChallenge {\n const code_verifier = randomBytes(32).toString('base64url');\n const code_challenge = createHash('sha256').update(code_verifier).digest('base64url');\n return { code_verifier, code_challenge };\n}\n\n/**\n * Generate a random state parameter for CSRF protection.\n */\nexport function generateState(): string {\n return randomBytes(16).toString('base64url');\n}\n\n/**\n * Build the OAuth authorization URL.\n */\nexport function buildAuthorizeUrl(params: {\n platformUrl: string;\n clientId: string;\n redirectUri: string;\n codeChallenge: string;\n state: string;\n scopes: string;\n}): string {\n const url = new URL(`${params.platformUrl}/api/oauth/v1/authorize`);\n url.searchParams.set('client_id', params.clientId);\n url.searchParams.set('redirect_uri', params.redirectUri);\n url.searchParams.set('response_type', 'code');\n url.searchParams.set('scope', params.scopes);\n url.searchParams.set('code_challenge', params.codeChallenge);\n url.searchParams.set('code_challenge_method', 'S256');\n url.searchParams.set('state', params.state);\n return url.toString();\n}\n\n/**\n * Exchange authorization code for tokens via the token endpoint.\n */\nexport async function exchangeCodeForTokens(params: {\n platformUrl: string;\n code: string;\n redirectUri: string;\n clientId: string;\n codeVerifier: string;\n}): Promise<{ access_token: string; refresh_token: string; expires_in: number; scope: string }> {\n const res = await fetch(`${params.platformUrl}/api/oauth/v1/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'authorization_code',\n code: params.code,\n redirect_uri: params.redirectUri,\n client_id: params.clientId,\n code_verifier: params.codeVerifier,\n }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error_description?: string; error?: string };\n throw new Error(err.error_description ?? err.error ?? 'Token exchange failed');\n }\n\n return await res.json() as { access_token: string; refresh_token: string; expires_in: number; scope: string };\n}\n\n/**\n * Refresh an OAuth access token using a refresh token.\n */\nexport async function refreshOAuthToken(params: {\n platformUrl: string;\n refreshToken: string;\n clientId: string;\n}): Promise<{ access_token: string; refresh_token?: string; expires_in: number }> {\n const res = await fetch(`${params.platformUrl}/api/oauth/v1/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'refresh_token',\n refresh_token: params.refreshToken,\n client_id: params.clientId,\n }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error_description?: string; error?: string };\n throw new Error(err.error_description ?? err.error ?? 'Token refresh failed');\n }\n\n return await res.json() as { access_token: string; refresh_token?: string; expires_in: number };\n}\n\n/**\n * Start a local HTTP server to receive the OAuth authorization code callback.\n */\nexport function startCallbackServer(): Promise<{\n port: number;\n result: Promise<OAuthCallbackResult>;\n close: () => void;\n}> {\n return new Promise((resolveServer) => {\n let resolveResult: (value: OAuthCallbackResult) => void;\n let rejectResult: (reason: Error) => void;\n\n const resultPromise = new Promise<OAuthCallbackResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? '/', 'http://localhost');\n\n if (url.pathname === '/callback') {\n const code = url.searchParams.get('code');\n const state = url.searchParams.get('state');\n const error = url.searchParams.get('error');\n\n if (error) {\n const desc = url.searchParams.get('error_description') ?? error;\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(`<html><body><h2>Authentication failed</h2><p>${desc}</p><p>You can close this window.</p></body></html>`);\n rejectResult!(new Error(desc));\n return;\n }\n\n if (!code || !state) {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end('<html><body><h2>Invalid callback</h2><p>Missing authorization code.</p></body></html>');\n return;\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end('<html><body><h2>Authentication successful!</h2><p>You can close this window and return to the terminal.</p></body></html>');\n resolveResult!({ code, state });\n } else {\n res.writeHead(404);\n res.end('Not found');\n }\n });\n\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address();\n const port = typeof addr === 'object' ? addr!.port : 0;\n resolveServer({\n port,\n result: resultPromise,\n close: () => { server.close(); server.closeAllConnections(); },\n });\n });\n\n // Timeout after 5 minutes (unref so it doesn't keep the process alive)\n setTimeout(() => {\n rejectResult!(new Error('Authentication timed out. Please try again.'));\n server.close();\n }, 5 * 60 * 1000).unref();\n });\n}\n\n/**\n * Perform the full OAuth PKCE login flow:\n * generate PKCE + state, start callback server, open browser, exchange code, save credentials.\n * Returns the stored credentials on success.\n */\nexport async function performOAuthLogin(apiUrl?: string): Promise<StoredCredentials> {\n const platformUrl = getPlatformApiUrl(apiUrl);\n const config = getGlobalConfig();\n const clientId = config.oauth_client_id ?? DEFAULT_CLIENT_ID;\n\n // 1. Generate PKCE and state\n const pkce = generatePKCE();\n const state = generateState();\n\n // 2. Start local callback server\n const { port, result, close } = await startCallbackServer();\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n\n // 3. Build authorization URL\n const authUrl = buildAuthorizeUrl({\n platformUrl,\n clientId,\n redirectUri,\n codeChallenge: pkce.code_challenge,\n state,\n scopes: OAUTH_SCOPES,\n });\n\n clack.log.info('Opening browser for authentication...');\n clack.log.info(`If browser doesn't open, visit:\\n${authUrl}`);\n\n // 4. Open browser\n try {\n const open = (await import('open')).default;\n await open(authUrl);\n } catch {\n clack.log.warn('Could not open browser. Please visit the URL above.');\n }\n\n // 5. Wait for callback\n const s = clack.spinner();\n s.start('Waiting for authentication...');\n\n try {\n const callbackResult = await result;\n close();\n\n // Verify state\n if (callbackResult.state !== state) {\n s.stop('Authentication failed');\n throw new Error('State mismatch. Possible CSRF attack.');\n }\n\n // 6. Exchange code for tokens\n s.message('Exchanging authorization code...');\n const tokens = await exchangeCodeForTokens({\n platformUrl,\n code: callbackResult.code,\n redirectUri,\n clientId,\n codeVerifier: pkce.code_verifier,\n });\n\n // 7. Save credentials and fetch profile\n const creds: StoredCredentials = {\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token,\n user: { id: '', name: '', email: '', avatar_url: null, email_verified: true },\n };\n saveCredentials(creds);\n\n try {\n const profile = await getProfile(apiUrl);\n creds.user = profile;\n saveCredentials(creds);\n s.stop(`Authenticated as ${profile.email}`);\n } catch {\n s.stop('Authenticated successfully');\n }\n\n return creds;\n } catch (err) {\n close();\n s.stop('Authentication failed');\n throw err;\n }\n}\n","import { getCredentials, getGlobalConfig, getPlatformApiUrl, saveCredentials, getProjectConfig } from './config.js';\nimport { AuthError } from './errors.js';\nimport { refreshOAuthToken, DEFAULT_CLIENT_ID, performOAuthLogin } from './auth.js';\nimport * as clack from '@clack/prompts';\nimport type { StoredCredentials } from '../types.js';\n\nexport async function requireAuth(apiUrl?: string, allowOssBypass = true): Promise<StoredCredentials> {\n const projConfig = getProjectConfig();\n if (allowOssBypass && projConfig?.project_id === 'oss-project') {\n return {\n access_token: 'oss-token',\n refresh_token: 'oss-refresh',\n user: {\n id: 'oss-user',\n name: 'OSS User',\n email: 'oss@insforge.local',\n avatar_url: null,\n email_verified: true,\n },\n };\n }\n\n const creds = getCredentials();\n if (creds && creds.access_token) return creds;\n\n clack.log.info('You need to log in to continue.');\n\n for (;;) {\n try {\n return await performOAuthLogin(apiUrl);\n } catch (err) {\n if (!process.stdout.isTTY) throw err;\n\n const msg = err instanceof Error ? err.message : 'Unknown error';\n clack.log.error(`Login failed: ${msg}`);\n\n const retry = await clack.confirm({ message: 'Would you like to try again?' });\n if (clack.isCancel(retry) || !retry) {\n throw new AuthError('Authentication required. Run `npx @insforge/cli login` to authenticate.');\n }\n }\n }\n}\n\nexport async function refreshAccessToken(apiUrl?: string): Promise<string> {\n const creds = getCredentials();\n if (!creds?.refresh_token) {\n throw new AuthError('Refresh token not found. Run `npx @insforge/cli login` again.');\n }\n\n const platformUrl = getPlatformApiUrl(apiUrl);\n const config = getGlobalConfig();\n const clientId = config.oauth_client_id ?? DEFAULT_CLIENT_ID;\n\n try {\n const data = await refreshOAuthToken({\n platformUrl,\n refreshToken: creds.refresh_token,\n clientId,\n });\n\n const updated: StoredCredentials = {\n ...creds,\n access_token: data.access_token,\n // Update refresh token if rotated\n refresh_token: data.refresh_token ?? creds.refresh_token,\n };\n saveCredentials(updated);\n return data.access_token;\n } catch {\n // Token refresh failed — try re-authenticating interactively\n if (process.stdout.isTTY) {\n clack.log.warn('Session expired. Please log in again.');\n const newCreds = await performOAuthLogin(apiUrl);\n return newCreds.access_token;\n }\n throw new AuthError('Failed to refresh token. Run `npx @insforge/cli login` again.');\n }\n}\n","import { getAccessToken, getPlatformApiUrl } from '../config.js';\nimport { AuthError, CLIError } from '../errors.js';\nimport { refreshAccessToken } from '../credentials.js';\nimport type {\n ApiKeyResponse,\n LoginResponse,\n Organization,\n Project,\n User,\n} from '../../types.js';\n\nexport async function platformFetch(\n path: string,\n options: RequestInit = {},\n apiUrl?: string,\n): Promise<Response> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const token = getAccessToken();\n if (!token) {\n throw new AuthError();\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n ...(options.headers as Record<string, string> ?? {}),\n };\n\n const res = await fetch(`${baseUrl}${path}`, { ...options, headers });\n\n // Auto-refresh on 401\n if (res.status === 401) {\n const newToken = await refreshAccessToken(apiUrl);\n headers.Authorization = `Bearer ${newToken}`;\n const retryRes = await fetch(`${baseUrl}${path}`, { ...options, headers });\n if (!retryRes.ok) {\n const err = await retryRes.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Request failed: ${retryRes.status}`, retryRes.status === 403 ? 5 : 1);\n }\n return retryRes;\n }\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Request failed: ${res.status}`, res.status === 403 ? 5 : 1);\n }\n\n return res;\n}\n\n// --- Auth ---\n\nexport async function login(email: string, password: string, apiUrl?: string): Promise<LoginResponse & { _refreshToken?: string }> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const res = await fetch(`${baseUrl}/auth/v1/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email, password }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new AuthError(err.error ?? 'Login failed. Check your email and password.');\n }\n\n // Extract refresh token from Set-Cookie header\n const setCookie = res.headers.get('set-cookie') ?? '';\n const refreshTokenMatch = setCookie.match(/refreshToken=([^;]+)/);\n const data = (await res.json()) as LoginResponse;\n\n return {\n ...data,\n // Attach refresh token to the response for storage\n _refreshToken: refreshTokenMatch?.[1],\n } as LoginResponse & { _refreshToken?: string };\n}\n\nexport async function getProfile(apiUrl?: string): Promise<User> {\n const res = await platformFetch('/auth/v1/profile', {}, apiUrl);\n const data = await res.json() as { user?: User };\n return data.user ?? (data as unknown as User);\n}\n\n// --- Organizations ---\n\nexport async function listOrganizations(apiUrl?: string): Promise<Organization[]> {\n const res = await platformFetch('/organizations/v1', {}, apiUrl);\n const data = await res.json() as { organizations?: Organization[] };\n return data.organizations ?? (data as unknown as Organization[]);\n}\n\n// --- Projects ---\n\nexport async function listProjects(orgId: string, apiUrl?: string): Promise<Project[]> {\n const res = await platformFetch(`/organizations/v1/${orgId}/projects`, {}, apiUrl);\n const data = await res.json() as { projects?: Project[] };\n return data.projects ?? (data as unknown as Project[]);\n}\n\nexport async function getProject(projectId: string, apiUrl?: string): Promise<Project> {\n const res = await platformFetch(`/projects/v1/${projectId}`, {}, apiUrl);\n const data = await res.json() as { project?: Project };\n return data.project ?? (data as unknown as Project);\n}\n\nexport async function getProjectApiKey(projectId: string, apiUrl?: string): Promise<string> {\n const res = await platformFetch(`/projects/v1/${projectId}/access-api-key`, {}, apiUrl);\n const data = (await res.json()) as ApiKeyResponse;\n return data.access_api_key;\n}\n\nexport async function reportAgentConnected(\n payload: { project_id?: string; app_key?: string },\n apiUrl?: string,\n): Promise<void> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n const token = getAccessToken();\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n await fetch(`${baseUrl}/tracking/v1/agent-connected`, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n}\n\nexport async function createProject(\n orgId: string,\n name: string,\n region?: string,\n apiUrl?: string,\n): Promise<Project> {\n const body: Record<string, string> = { name };\n if (region) body.region = region;\n\n const res = await platformFetch(`/organizations/v1/${orgId}/projects`, {\n method: 'POST',\n body: JSON.stringify(body),\n }, apiUrl);\n const data = await res.json() as { project?: Project };\n return data.project ?? (data as unknown as Project);\n}\n\n","import Table from 'cli-table3';\n\nexport function outputJson(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n}\n\nexport function outputTable(headers: string[], rows: string[][]): void {\n const table = new Table({\n head: headers,\n style: { head: ['cyan'] },\n });\n for (const row of rows) {\n table.push(row);\n }\n console.log(table.toString());\n}\n\nexport function outputSuccess(message: string): void {\n console.log(`✓ ${message}`);\n}\n\nexport function outputInfo(message: string): void {\n console.log(message);\n}\n","import type { Command } from 'commander';\nimport { clearCredentials } from '../lib/config.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputSuccess, outputJson } from '../lib/output.js';\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out from InsForge platform')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n clearCredentials();\n if (json) {\n outputJson({ success: true, message: 'Logged out successfully' });\n } else {\n outputSuccess('Logged out successfully.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getProfile } from '../lib/api/platform.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputInfo } from '../lib/output.js';\nimport { requireAuth } from '../lib/credentials.js';\n\nexport function registerWhoamiCommand(program: Command): void {\n program\n .command('whoami')\n .description('Show current authenticated user')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const profile = await getProfile(apiUrl);\n\n if (json) {\n outputJson(profile);\n } else {\n outputInfo(`Logged in as: ${profile.email ?? profile.name}`);\n if (profile.name) outputInfo(`Name: ${profile.name}`);\n if (profile.id) outputInfo(`ID: ${profile.id}`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { listOrganizations } from '../../lib/api/platform.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerOrgsCommands(orgsCmd: Command): void {\n orgsCmd\n .command('list')\n .description('List all organizations')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const orgs = await listOrganizations(apiUrl);\n\n if (json) {\n outputJson(orgs);\n } else {\n if (!orgs.length) {\n console.log('No organizations found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Type'],\n orgs.map((o) => [\n o.id,\n o.name,\n o.type ?? '-',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { listOrganizations, listProjects } from '../../lib/api/platform.js';\nimport { getGlobalConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerProjectsCommands(projectsCmd: Command): void {\n projectsCmd\n .command('list')\n .description('List all projects in an organization')\n .option('--org-id <id>', 'Organization ID (uses default if not specified)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n\n let orgId = opts.orgId ?? getGlobalConfig().default_org_id;\n\n if (!orgId) {\n // Try to auto-select if user has only one org\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found. Create one on the InsForge dashboard.');\n }\n if (orgs.length === 1) {\n orgId = orgs[0].id;\n } else if (!json) {\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) {\n process.exit(0);\n }\n orgId = selected as string;\n } else {\n throw new CLIError('Multiple organizations found. Specify --org-id.');\n }\n }\n\n const projects = await listProjects(orgId, apiUrl);\n\n if (json) {\n outputJson(projects);\n } else {\n if (!projects.length) {\n console.log('No projects found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Region', 'Status', 'AppKey'],\n projects.map((p) => [p.id, p.name, p.region, p.status, p.appkey]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport {\n listOrganizations,\n listProjects,\n getProject,\n getProjectApiKey,\n reportAgentConnected,\n} from '../../lib/api/platform.js';\nimport { getGlobalConfig, saveGlobalConfig, saveProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { installSkills, reportCliUsage } from '../../lib/skills.js';\nimport type { ProjectConfig } from '../../types.js';\n\nfunction buildOssHost(appkey: string, region: string): string {\n return `https://${appkey}.${region}.insforge.app`;\n}\n\nexport function registerProjectLinkCommand(program: Command): void {\n program\n .command('link')\n .description('Link current directory to an InsForge project')\n .option('--project-id <id>', 'Project ID to link')\n .option('--org-id <id>', 'Organization ID')\n .option('--api-base-url <url>', 'API Base URL for direct linking (OSS/Self-hosted)')\n .option('--api-key <key>', 'API Key for direct linking (OSS/Self-hosted)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n if (opts.apiBaseUrl || opts.apiKey) {\n try {\n if (!opts.apiBaseUrl || !opts.apiKey) {\n throw new CLIError('Both --api-base-url and --api-key must be provided together for direct linking.');\n }\n\n try {\n new URL(opts.apiBaseUrl);\n } catch {\n throw new CLIError('Invalid --api-base-url. Please provide a valid URL.');\n }\n\n // Direct OSS/Self-hosted linking bypasses OAuth\n const projectConfig: ProjectConfig = {\n project_id: 'oss-project',\n project_name: 'oss-project',\n org_id: 'oss-org',\n appkey: 'oss',\n region: 'local',\n api_key: opts.apiKey,\n oss_host: opts.apiBaseUrl.replace(/\\/$/, ''), // remove trailing slash if any\n };\n\n saveProjectConfig(projectConfig);\n\n if (json) {\n outputJson({ success: true, project: { id: projectConfig.project_id, name: projectConfig.project_name, region: projectConfig.region } });\n } else {\n outputSuccess(`Linked to direct project at ${projectConfig.oss_host}`);\n }\n\n // Install agent skills\n await installSkills(json);\n await reportCliUsage('cli.link_direct', true, 6);\n\n // Report agent-connected event (best-effort)\n try {\n const urlMatch = opts.apiBaseUrl.match(/^https?:\\/\\/([^.]+)\\.[^.]+\\.insforge\\.app/);\n if (urlMatch) {\n await reportAgentConnected({ app_key: urlMatch[1] }, apiUrl);\n }\n } catch { /* ignore */ }\n return;\n } catch (err) {\n await reportCliUsage('cli.link_direct', false);\n handleError(err, json);\n }\n }\n\n const creds = await requireAuth(apiUrl, false);\n\n let orgId = opts.orgId;\n let projectId = opts.projectId;\n\n // Show organization selection\n if (!orgId && !projectId) {\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found.');\n }\n if (json) {\n throw new CLIError('Specify --org-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n orgId = selected as string;\n }\n\n // Save default org\n const config = getGlobalConfig();\n config.default_org_id = orgId;\n saveGlobalConfig(config);\n\n // Select project if not specified\n if (!projectId) {\n const projects = await listProjects(orgId, apiUrl);\n if (projects.length === 0) {\n throw new CLIError('No projects found in this organization.');\n }\n if (json) {\n throw new CLIError('Specify --project-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select a project to link:',\n options: projects.map((p) => ({\n value: p.id,\n label: `${p.name} (${p.region}, ${p.status})`,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n projectId = selected as string;\n }\n\n // Fetch project details and API key\n let project;\n let apiKey;\n try {\n [project, apiKey] = await Promise.all([\n getProject(projectId, apiUrl),\n getProjectApiKey(projectId, apiUrl),\n ]);\n } catch (err) {\n if (err instanceof CLIError && (err.exitCode === 5 || err.exitCode === 4 || err.message.includes('not found'))) {\n const identity = creds.user?.email ?? creds.user?.name ?? 'unknown user';\n throw new CLIError(\n `You're logged in as ${identity}, and you don't have access to project ${projectId}. Check that the project ID is correct and belongs to one of your organizations.`,\n 5,\n 'PERMISSION_DENIED',\n );\n }\n throw err;\n }\n\n const projectConfig: ProjectConfig = {\n project_id: project.id,\n project_name: project.name,\n org_id: project.organization_id,\n appkey: project.appkey,\n region: project.region,\n api_key: apiKey,\n oss_host: buildOssHost(project.appkey, project.region),\n };\n\n saveProjectConfig(projectConfig);\n\n if (json) {\n outputJson({ success: true, project: { id: project.id, name: project.name, region: project.region } });\n } else {\n outputSuccess(`Linked to project \"${project.name}\" (${project.appkey}.${project.region})`);\n }\n\n // Install agent skills\n await installSkills(json);\n await reportCliUsage('cli.link', true, 6);\n\n // Report agent-connected event (best-effort)\n try {\n await reportAgentConnected({ project_id: project.id }, apiUrl);\n } catch { /* ignore */ }\n } catch (err) {\n await reportCliUsage('cli.link', false);\n handleError(err, json);\n }\n });\n}\n\n\n","import { exec } from 'node:child_process';\nimport { existsSync, readFileSync, appendFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { promisify } from 'node:util';\nimport * as clack from '@clack/prompts';\nimport { getProjectConfig } from './config.js';\n\nconst execAsync = promisify(exec);\n\nconst GITIGNORE_ENTRIES = [\n '.insforge',\n '.agent',\n '.agents',\n '.augment',\n '.claude',\n '.cline',\n '.github/copilot*',\n '.kilocode',\n '.qoder',\n '.qwen',\n '.roo',\n '.trae',\n '.windsurf',\n];\n\nfunction updateGitignore(): void {\n const gitignorePath = join(process.cwd(), '.gitignore');\n const existing = existsSync(gitignorePath) ? readFileSync(gitignorePath, 'utf-8') : '';\n const lines = new Set(existing.split('\\n').map((l) => l.trim()));\n\n const missing = GITIGNORE_ENTRIES.filter((entry) => !lines.has(entry));\n if (!missing.length) return;\n\n const block = `\\n# InsForge & AI agent skills\\n${missing.join('\\n')}\\n`;\n appendFileSync(gitignorePath, block);\n}\n\nexport async function installSkills(json: boolean): Promise<void> {\n try {\n if (!json) clack.log.info('Installing InsForge agent skills...');\n await execAsync('npx skills add insforge/agent-skills -y -a antigravity -a augment -a claude-code -a cline -a codex -a cursor -a gemini-cli -a github-copilot -a kilo -a qoder -a qwen-code -a roo -a trae -a windsurf', {\n cwd: process.cwd(),\n timeout: 60_000,\n });\n if (!json) clack.log.success('InsForge agent skills installed.');\n } catch {\n if (!json) clack.log.warn('Failed to install agent skills. You can run manually: npx skills add insforge/agent-skills');\n }\n\n // Install find-skills from vercel-labs for skill discovery\n try {\n if (!json) clack.log.info('Installing find-skills...');\n await execAsync('npx skills add https://github.com/vercel-labs/skills --skill find-skills -y', {\n cwd: process.cwd(),\n timeout: 60_000,\n });\n if (!json) clack.log.success('find-skills installed.');\n } catch {\n if (!json) clack.log.warn('Failed to install find-skills. You can run manually: npx skills add https://github.com/vercel-labs/skills --skill find-skills');\n }\n\n try {\n updateGitignore();\n } catch {\n // non-critical, silently ignore\n }\n}\n\nexport async function reportCliUsage(toolName: string, success: boolean, maxRetries = 1): Promise<void> {\n let config;\n try {\n config = getProjectConfig();\n } catch {\n return;\n }\n if (!config) return;\n\n const payload = JSON.stringify({\n tool_name: toolName,\n success,\n timestamp: new Date().toISOString(),\n });\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 3_000);\n try {\n const res = await fetch(`${config.oss_host}/api/usage/mcp`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': config.api_key,\n },\n body: payload,\n signal: controller.signal,\n });\n\n if (res.status < 500) return;\n // 5xx — server may not be ready yet, retry\n } finally {\n clearTimeout(timer);\n }\n } catch {\n // network/abort error — server may not be ready yet, retry\n }\n\n if (attempt < maxRetries - 1) {\n await new Promise((r) => setTimeout(r, 5_000));\n }\n }\n}\n","import { getProjectConfig } from '../config.js';\nimport { CLIError, ProjectNotLinkedError } from '../errors.js';\nimport type { ProjectConfig } from '../../types.js';\n\nfunction requireProjectConfig(): ProjectConfig {\n const config = getProjectConfig();\n if (!config) {\n throw new ProjectNotLinkedError();\n }\n return config;\n}\n\n/**\n * Unified OSS API fetch. Uses API key as Bearer token for all requests,\n * which grants superadmin access (SQL execution, bucket management, etc.).\n */\nexport interface RawSqlResult {\n rows: Record<string, unknown>[];\n raw: Record<string, unknown>;\n}\n\nexport async function runRawSql(sql: string, unrestricted = false): Promise<RawSqlResult> {\n const endpoint = unrestricted\n ? '/api/database/advance/rawsql/unrestricted'\n : '/api/database/advance/rawsql';\n const res = await ossFetch(endpoint, {\n method: 'POST',\n body: JSON.stringify({ query: sql }),\n });\n const raw = await res.json() as Record<string, unknown>;\n const rows = (raw.rows ?? raw.data ?? []) as Record<string, unknown>[];\n return { rows, raw };\n}\n\nexport async function getAnonKey(): Promise<string> {\n const res = await ossFetch('/api/auth/tokens/anon', { method: 'POST' });\n const data = await res.json() as { accessToken: string };\n return data.accessToken;\n}\n\nexport async function ossFetch(\n path: string,\n options: RequestInit = {},\n): Promise<Response> {\n const config = requireProjectConfig();\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.api_key}`,\n ...(options.headers as Record<string, string> ?? {}),\n };\n\n const res = await fetch(`${config.oss_host}${path}`, { ...options, headers });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `OSS request failed: ${res.status}`);\n }\n\n return res;\n}\n","import type { Command } from 'commander';\nimport { runRawSql } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbCommands(dbCmd: Command): void {\n dbCmd\n .command('query <sql>')\n .description('Execute a SQL query against the database')\n .option('--unrestricted', 'Use unrestricted mode (allows system table access)')\n .action(async (sql: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const { rows, raw } = await runRawSql(sql, !!opts.unrestricted);\n\n if (json) {\n outputJson(raw);\n } else {\n if (rows.length > 0) {\n const headers = Object.keys(rows[0]);\n outputTable(\n headers,\n rows.map((row) => headers.map((h) => String(row[h] ?? ''))),\n );\n console.log(`${rows.length} row(s) returned.`);\n } else {\n console.log('Query executed successfully.');\n if (rows.length === 0) {\n console.log('No rows returned.');\n }\n }\n }\n await reportCliUsage('cli.db.query', true);\n } catch (err) {\n await reportCliUsage('cli.db.query', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbTablesCommand(dbCmd: Command): void {\n dbCmd\n .command('tables')\n .description('List all database tables')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/tables');\n const tables = await res.json() as string[];\n\n if (json) {\n outputJson(tables);\n } else {\n if (tables.length === 0) {\n console.log('No tables found.');\n return;\n }\n outputTable(\n ['Table Name'],\n tables.map((t) => [t]),\n );\n }\n await reportCliUsage('cli.db.tables', true);\n } catch (err) {\n await reportCliUsage('cli.db.tables', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DatabaseFunctionsResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbFunctionsCommand(dbCmd: Command): void {\n dbCmd\n .command('functions')\n .description('List all database functions')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/functions');\n const raw = await res.json();\n const functions: DatabaseFunctionsResponse['functions'] = Array.isArray(raw)\n ? raw\n : (raw as DatabaseFunctionsResponse).functions ?? [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (functions.length === 0) {\n console.log('No database functions found.');\n return;\n }\n outputTable(\n ['Name', 'Definition', 'Kind'],\n functions.map((f) => [f.functionName, f.functionDef, f.kind]),\n );\n }\n await reportCliUsage('cli.db.functions', true);\n } catch (err) {\n await reportCliUsage('cli.db.functions', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DatabaseIndexesResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbIndexesCommand(dbCmd: Command): void {\n dbCmd\n .command('indexes')\n .description('List all database indexes')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/indexes');\n const raw = await res.json();\n const indexes: DatabaseIndexesResponse['indexes'] = Array.isArray(raw)\n ? raw\n : (raw as DatabaseIndexesResponse).indexes ?? [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (indexes.length === 0) {\n console.log('No database indexes found.');\n return;\n }\n outputTable(\n ['Table', 'Index Name', 'Definition', 'Unique', 'Primary'],\n indexes.map((i) => [\n i.tableName,\n i.indexName,\n i.indexDef,\n i.isUnique ? 'Yes' : 'No',\n i.isPrimary ? 'Yes' : 'No',\n ]),\n );\n }\n await reportCliUsage('cli.db.indexes', true);\n } catch (err) {\n await reportCliUsage('cli.db.indexes', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DatabasePoliciesResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbPoliciesCommand(dbCmd: Command): void {\n dbCmd\n .command('policies')\n .description('List all RLS policies')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/policies');\n const raw = await res.json();\n const policies: DatabasePoliciesResponse['policies'] = Array.isArray(raw)\n ? raw\n : (raw as DatabasePoliciesResponse).policies ?? [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (policies.length === 0) {\n console.log('No RLS policies found.');\n return;\n }\n outputTable(\n ['Table', 'Policy Name', 'Command', 'Roles', 'Qual', 'With Check'],\n policies.map((p) => [\n String(p.tableName ?? '-'),\n String(p.policyName ?? '-'),\n String(p.cmd ?? '-'),\n Array.isArray(p.roles) ? p.roles.join(', ') : String(p.roles ?? '-'),\n String(p.qual ?? '-'),\n String(p.withCheck ?? '-'),\n ]),\n );\n }\n await reportCliUsage('cli.db.policies', true);\n } catch (err) {\n await reportCliUsage('cli.db.policies', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DatabaseTriggersResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbTriggersCommand(dbCmd: Command): void {\n dbCmd\n .command('triggers')\n .description('List all database triggers')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/database/triggers');\n const raw = await res.json();\n const triggers: DatabaseTriggersResponse['triggers'] = Array.isArray(raw)\n ? raw\n : (raw as DatabaseTriggersResponse).triggers ?? [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (triggers.length === 0) {\n console.log('No database triggers found.');\n return;\n }\n outputTable(\n ['Name', 'Table', 'Timing', 'Events', 'ActionOrientation', 'ActionCondition', 'ActionStatement'],\n triggers.map((t) => [\n t.triggerName,\n t.tableName,\n t.actionTiming,\n t.eventManipulation,\n t.actionOrientation,\n t.actionCondition ?? '-',\n t.actionStatement,\n ]),\n );\n }\n await reportCliUsage('cli.db.triggers', true);\n } catch (err) {\n await reportCliUsage('cli.db.triggers', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDbRpcCommand(dbCmd: Command): void {\n dbCmd\n .command('rpc <functionName>')\n .description('Call a database function via RPC')\n .option('--data <json>', 'JSON body to pass as function parameters')\n .action(async (functionName: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body = opts.data ? JSON.stringify(JSON.parse(opts.data) as unknown) : undefined;\n\n const res = await ossFetch(`/api/database/rpc/${encodeURIComponent(functionName)}`, {\n method: body ? 'POST' : 'GET',\n ...(body ? { body } : {}),\n });\n\n const result = await res.json() as unknown;\n\n if (json) {\n outputJson(result);\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n await reportCliUsage('cli.db.rpc', true);\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { writeFileSync } from 'node:fs';\nimport type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDbExportCommand(dbCmd: Command): void {\n dbCmd\n .command('export')\n .description('Export database schema and/or data')\n .option('--format <format>', 'Export format: sql or json', 'sql')\n .option('--tables <tables>', 'Comma-separated list of tables to export (default: all)')\n .option('--no-data', 'Exclude table data (schema only)')\n .option('--include-functions', 'Include database functions')\n .option('--include-sequences', 'Include sequences')\n .option('--include-views', 'Include views')\n .option('--row-limit <n>', 'Maximum rows per table')\n .option('-o, --output <file>', 'Output file path (default: stdout)')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = {\n format: opts.format,\n includeData: opts.data !== false,\n };\n\n if (opts.tables) {\n body.tables = (opts.tables as string).split(',').map((t: string) => t.trim());\n }\n if (opts.includeFunctions) body.includeFunctions = true;\n if (opts.includeSequences) body.includeSequences = true;\n if (opts.includeViews) body.includeViews = true;\n if (opts.rowLimit) body.rowLimit = parseInt(opts.rowLimit as string, 10);\n\n const res = await ossFetch('/api/database/advance/export', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n\n const raw = await res.text();\n\n // API may return JSON wrapper { format, content, tables } or raw SQL/JSON text\n let content: string;\n let meta: { format?: string; tables?: string[] } | null = null;\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n if (typeof parsed.content === 'string') {\n content = parsed.content;\n meta = { format: parsed.format as string, tables: parsed.tables as string[] };\n } else {\n content = raw;\n }\n } catch {\n content = raw;\n }\n\n if (json) {\n outputJson(meta ?? { content });\n return;\n }\n\n if (opts.output) {\n writeFileSync(opts.output as string, content);\n const tableCount = meta?.tables?.length;\n const suffix = tableCount ? ` (${tableCount} tables, format: ${meta?.format ?? opts.format})` : '';\n outputSuccess(`Exported to ${opts.output}${suffix}`);\n } else {\n console.log(content);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { readFileSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDbImportCommand(dbCmd: Command): void {\n dbCmd\n .command('import <file>')\n .description('Import database from a local SQL file')\n .option('--truncate', 'Truncate existing tables before import')\n .action(async (file: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const fileContent = readFileSync(file);\n const fileName = basename(file);\n\n const formData = new FormData();\n formData.append('file', new Blob([fileContent]), fileName);\n if (opts.truncate) {\n formData.append('truncate', 'true');\n }\n\n const res = await fetch(`${config.oss_host}/api/database/advance/import`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Import failed: ${res.status}`);\n }\n\n const data = await res.json() as { filename: string; fileSize: number; tables: string[]; rowsImported: number };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Imported ${data.filename} (${data.tables.length} tables, ${data.rowsImported} rows)`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerRecordsCommands(recordsCmd: Command): void {\n recordsCmd\n .command('list <table>')\n .description('List records from a table')\n .option('--select <columns>', 'Columns to select (comma-separated)')\n .option('--filter <filter>', 'Filter expression (e.g. \"name=eq.John\")')\n .option('--order <order>', 'Order by (e.g. \"created_at.desc\")')\n .option('--limit <n>', 'Limit number of records', parseInt)\n .option('--offset <n>', 'Offset for pagination', parseInt)\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const params = new URLSearchParams();\n if (opts.select) params.set('select', opts.select);\n if (opts.filter) params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n if (opts.order) params.set('order', opts.order);\n if (opts.limit) params.set('limit', String(opts.limit));\n if (opts.offset) params.set('offset', String(opts.offset));\n\n const query = params.toString();\n const path = `/api/database/records/${encodeURIComponent(table)}${query ? `?${query}` : ''}`;\n const res = await ossFetch(path);\n const data = await res.json() as { data?: Record<string, unknown>[] };\n const records = data.data ?? [];\n\n if (json) {\n outputJson(data);\n } else {\n if (records.length === 0) {\n console.log('No records found.');\n return;\n }\n const headers = Object.keys(records[0]);\n outputTable(\n headers,\n records.map((r) => headers.map((h) => {\n const val = r[h];\n if (val === null || val === undefined) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n })),\n );\n console.log(`${records.length} record(s).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsCreateCommand(recordsCmd: Command): void {\n recordsCmd\n .command('create <table>')\n .description('Create record(s) in a table')\n .option('--data <json>', 'JSON data to insert (object or array of objects)')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!opts.data) {\n throw new CLIError('--data is required. Example: --data \\'{\"name\":\"John\"}\\'');\n }\n\n let records: unknown[];\n try {\n const parsed = JSON.parse(opts.data) as unknown;\n records = Array.isArray(parsed) ? parsed : [parsed];\n } catch {\n throw new CLIError('Invalid JSON in --data. Provide a JSON object or array.');\n }\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?return=representation`,\n {\n method: 'POST',\n body: JSON.stringify(records),\n },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const created = data.data ?? [];\n outputSuccess(`Created ${created.length || records.length} record(s) in \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsUpdateCommand(recordsCmd: Command): void {\n recordsCmd\n .command('update <table>')\n .description('Update records in a table matching a filter')\n .option('--filter <filter>', 'Filter expression (e.g. \"id=eq.123\")')\n .option('--data <json>', 'JSON data to update')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!opts.filter) {\n throw new CLIError('--filter is required to prevent accidental updates to all rows.');\n }\n if (!opts.data) {\n throw new CLIError('--data is required. Example: --data \\'{\"name\":\"Jane\"}\\'');\n }\n\n let body: unknown;\n try {\n body = JSON.parse(opts.data) as unknown;\n } catch {\n throw new CLIError('Invalid JSON in --data.');\n }\n\n const params = new URLSearchParams();\n params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n params.set('return', 'representation');\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?${params}`,\n {\n method: 'PATCH',\n body: JSON.stringify(body),\n },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const updated = data.data ?? [];\n outputSuccess(`Updated ${updated.length} record(s) in \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsDeleteCommand(recordsCmd: Command): void {\n recordsCmd\n .command('delete <table>')\n .description('Delete records from a table matching a filter')\n .option('--filter <filter>', 'Filter expression (e.g. \"id=eq.123\")')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!opts.filter) {\n throw new CLIError('--filter is required to prevent accidental deletion of all rows.');\n }\n\n const params = new URLSearchParams();\n params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n params.set('return', 'representation');\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?${params}`,\n { method: 'DELETE' },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const deleted = data.data ?? [];\n outputSuccess(`Deleted ${deleted.length} record(s) from \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListFunctionsResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerFunctionsCommands(functionsCmd: Command): void {\n functionsCmd\n .command('list')\n .description('List all edge functions')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/functions');\n const raw = await res.json();\n // API may return array directly or { functions: [...] }\n const functions: ListFunctionsResponse['functions'] = Array.isArray(raw)\n ? raw\n : raw && typeof raw === 'object' && 'functions' in raw\n ? (raw as ListFunctionsResponse).functions ?? []\n : [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (functions.length === 0) {\n console.log('No functions found.');\n return;\n }\n outputTable(\n ['Slug', 'Name', 'Status', 'Created At'],\n functions.map((f) => [\n f.slug,\n f.name ?? '-',\n f.status ?? '-',\n f.createdAt ? new Date(f.createdAt).toLocaleString() : '-',\n ]),\n );\n }\n await reportCliUsage('cli.functions.list', true);\n } catch (err) {\n await reportCliUsage('cli.functions.list', false);\n handleError(err, json);\n }\n });\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport type { FunctionResponse } from '../../types.js';\n\nexport function registerFunctionsDeployCommand(functionsCmd: Command): void {\n functionsCmd\n .command('deploy <slug>')\n .description('Deploy an edge function (create or update)')\n .option('--file <path>', 'Path to the function source file')\n .option('--name <name>', 'Function display name')\n .option('--description <desc>', 'Function description')\n .action(async (slug: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n // Resolve source file\n const filePath = opts.file ?? join(process.cwd(), 'insforge', 'functions', slug, 'index.ts');\n if (!existsSync(filePath)) {\n throw new CLIError(\n `Source file not found: ${filePath}\\n` +\n `Specify --file <path> or create ${join('insforge', 'functions', slug, 'index.ts')}`,\n );\n }\n\n const code = readFileSync(filePath, 'utf-8');\n const name = opts.name ?? slug;\n const description = opts.description ?? '';\n\n // Check if function exists\n let exists = false;\n try {\n await ossFetch(`/api/functions/${encodeURIComponent(slug)}`);\n exists = true;\n } catch {\n exists = false;\n }\n\n let res: Response;\n if (exists) {\n res = await ossFetch(`/api/functions/${encodeURIComponent(slug)}`, {\n method: 'PUT',\n body: JSON.stringify({ name, description, code }),\n });\n } else {\n res = await ossFetch('/api/functions', {\n method: 'POST',\n body: JSON.stringify({ slug, name, description, code }),\n });\n }\n\n const result = await res.json() as FunctionResponse;\n\n const deployFailed = result.deployment?.status === 'failed';\n\n if (json) {\n outputJson(result);\n } else {\n const action = exists ? 'updation' : 'creation';\n const resultStatus = result.success ? 'success' : 'failed';\n outputSuccess(`Function \"${result.function.slug}\" ${action} ${resultStatus}.`);\n if (result.deployment) {\n if (result.deployment.status === 'success') {\n console.log(` Deployment: ${result.deployment.status}${result.deployment.url ? ` → ${result.deployment.url}` : ''}`);\n } else {\n console.log(` Deployment: ${result.deployment.status}`);\n if (result.deployment.buildLogs?.length) {\n console.log(' Build logs:');\n for (const line of result.deployment.buildLogs) {\n console.log(` ${line}`);\n }\n }\n }\n }\n }\n if (deployFailed) throw new CLIError('Function deployment failed');\n await reportCliUsage('cli.functions.deploy', true);\n } catch (err) {\n await reportCliUsage('cli.functions.deploy', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError, CLIError } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\nexport function registerFunctionsInvokeCommand(functionsCmd: Command): void {\n functionsCmd\n .command('invoke <slug>')\n .description('Invoke an edge function')\n .option('--data <json>', 'JSON body to send to the function')\n .option('--method <method>', 'HTTP method (GET, POST, PUT, PATCH, DELETE)', 'POST')\n .action(async (slug: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const method = opts.method.toUpperCase();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.api_key}`,\n };\n\n const fetchOpts: RequestInit = { method, headers };\n\n if (opts.data && ['POST', 'PUT', 'PATCH'].includes(method)) {\n fetchOpts.body = opts.data;\n }\n\n // Functions client endpoint is at /functions/{slug} (not /api/functions/{slug})\n // Use direct fetch so we always show the function's full response,\n // even on non-200 status codes (function errors are part of the output).\n const res = await fetch(\n `${config.oss_host}/functions/${encodeURIComponent(slug)}`,\n fetchOpts,\n );\n\n const contentType = res.headers.get('content-type') ?? '';\n const status = res.status;\n\n if (contentType.includes('application/json')) {\n const data = await res.json();\n if (json) {\n outputJson({ status, body: data });\n } else {\n console.log(JSON.stringify(data, null, 2));\n }\n } else {\n const text = await res.text();\n console.log(text);\n }\n\n // Exit with non-zero code on function errors\n if (status >= 400) {\n throw new CLIError(`HTTP ${status}`, 1, 'HTTP_ERROR');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\ninterface FunctionDetails {\n id: string;\n slug: string;\n name: string;\n description: string | null;\n code: string;\n status: string;\n created_at: string;\n updated_at: string;\n deployed_at: string | null;\n}\n\nexport function registerFunctionsCodeCommand(functionsCmd: Command): void {\n functionsCmd\n .command('code <slug>')\n .description('Fetch and display the source code of an edge function')\n .action(async (slug: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch(`/api/functions/${encodeURIComponent(slug)}`);\n const fn = await res.json() as FunctionDetails;\n\n if (json) {\n outputJson(fn);\n } else {\n console.log(`Function: ${fn.name} (${fn.slug})`);\n console.log(`Status: ${fn.status}`);\n if (fn.description) console.log(`Desc: ${fn.description}`);\n if (fn.deployed_at) console.log(`Deployed: ${fn.deployed_at}`);\n console.log('---');\n console.log(fn.code);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport type { FunctionResponse } from '../../types.js';\n\nexport function registerFunctionsDeleteCommand(functionsCmd: Command): void {\n functionsCmd\n .command('delete <slug>')\n .description('Delete an edge function')\n .action(async (slug: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!yes && !json) {\n const confirmed = await clack.confirm({\n message: `Delete function \"${slug}\"? This cannot be undone.`,\n });\n if (clack.isCancel(confirmed) || !confirmed) {\n clack.log.info('Cancelled.');\n return;\n }\n }\n\n const res = await ossFetch(`/api/functions/${encodeURIComponent(slug)}`, {\n method: 'DELETE',\n });\n const result = await res.json() as FunctionResponse;\n\n if (json) {\n outputJson(result);\n } else {\n if (result.success) {\n outputSuccess(`Function \"${slug}\" deleted successfully.`);\n } else {\n outputSuccess(`Failed to delete function \"${slug}\".`);\n }\n }\n await reportCliUsage('cli.functions.delete', true);\n } catch (err) {\n await reportCliUsage('cli.functions.delete', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { StorageBucketSchema } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerStorageBucketsCommand(storageCmd: Command): void {\n storageCmd\n .command('buckets')\n .description('List all storage buckets')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/storage/buckets');\n const raw = await res.json();\n // API may return array directly or { buckets: [...] }\n const buckets: StorageBucketSchema[] = Array.isArray(raw)\n ? raw\n : raw && typeof raw === 'object' && 'buckets' in raw\n ? (raw as { buckets?: StorageBucketSchema[] }).buckets ?? []\n : [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (buckets.length === 0) {\n console.log('No buckets found.');\n return;\n }\n outputTable(\n ['Bucket Name', 'Public'],\n buckets.map((b) => [b.name, b.public ? 'Yes' : 'No']),\n );\n }\n await reportCliUsage('cli.storage.buckets', true);\n } catch (err) {\n await reportCliUsage('cli.storage.buckets', false);\n handleError(err, json);\n }\n });\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageUploadCommand(storageCmd: Command): void {\n storageCmd\n .command('upload <file>')\n .description('Upload a file to a storage bucket')\n .requiredOption('--bucket <name>', 'Target bucket name')\n .option('--key <objectKey>', 'Object key (defaults to filename)')\n .action(async (file: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n if (!existsSync(file)) {\n throw new CLIError(`File not found: ${file}`);\n }\n\n const fileContent = readFileSync(file);\n const objectKey = opts.key ?? basename(file);\n const bucketName = opts.bucket;\n\n // Build multipart form data\n const formData = new FormData();\n const blob = new Blob([fileContent]);\n formData.append('file', blob, objectKey);\n\n // PUT /api/storage/buckets/{bucket}/objects/{key} for named upload\n const url = `${config.oss_host}/api/storage/buckets/${encodeURIComponent(bucketName)}/objects/${encodeURIComponent(objectKey)}`;\n\n const res = await fetch(url, {\n method: 'PUT',\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Upload failed: ${res.status}`);\n }\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Uploaded \"${basename(file)}\" to bucket \"${bucketName}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { writeFileSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageDownloadCommand(storageCmd: Command): void {\n storageCmd\n .command('download <objectKey>')\n .description('Download a file from a storage bucket')\n .requiredOption('--bucket <name>', 'Source bucket name')\n .option('--output <path>', 'Output file path (defaults to current directory)')\n .action(async (objectKey: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const bucketName = opts.bucket;\n const url = `${config.oss_host}/api/storage/buckets/${encodeURIComponent(bucketName)}/objects/${encodeURIComponent(objectKey)}`;\n\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Download failed: ${res.status}`);\n }\n\n const buffer = Buffer.from(await res.arrayBuffer());\n const outputPath = opts.output ?? join(process.cwd(), basename(objectKey));\n writeFileSync(outputPath, buffer);\n\n if (json) {\n outputJson({ success: true, path: outputPath, size: buffer.length });\n } else {\n outputSuccess(`Downloaded \"${objectKey}\" to ${outputPath} (${buffer.length} bytes).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerStorageCreateBucketCommand(storageCmd: Command): void {\n storageCmd\n .command('create-bucket <name>')\n .description('Create a new storage bucket')\n .option('--public', 'Make the bucket publicly accessible (default)')\n .option('--private', 'Make the bucket private')\n .action(async (name: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const isPublic = !opts.private;\n\n const res = await ossFetch('/api/storage/buckets', {\n method: 'POST',\n body: JSON.stringify({ bucketName: name, isPublic }),\n });\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Bucket \"${name}\" created (${isPublic ? 'public' : 'private'}).`);\n }\n await reportCliUsage('cli.storage.create-bucket', true);\n } catch (err) {\n await reportCliUsage('cli.storage.create-bucket', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageDeleteBucketCommand(storageCmd: Command): void {\n storageCmd\n .command('delete-bucket <name>')\n .description('Delete a storage bucket and all its objects')\n .action(async (name: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete bucket \"${name}\" and all its objects? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/storage/buckets/${encodeURIComponent(name)}`, {\n method: 'DELETE',\n });\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Bucket \"${name}\" deleted.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\ninterface StoredFile {\n key: string;\n size: number;\n mimeType?: string;\n uploadedAt: string;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function registerStorageListObjectsCommand(storageCmd: Command): void {\n storageCmd\n .command('list-objects <bucket>')\n .description('List objects in a storage bucket')\n .option('--limit <n>', 'Maximum number of objects to return', '100')\n .option('--offset <n>', 'Number of objects to skip', '0')\n .option('--prefix <prefix>', 'Filter objects by key prefix')\n .option('--search <term>', 'Search objects by key (partial match)')\n .option('--sort <field>', 'Sort by field: key, size, uploadedAt (default: key)')\n .action(async (bucket: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const params = new URLSearchParams();\n params.set('limit', opts.limit);\n params.set('offset', opts.offset);\n if (opts.prefix) params.set('prefix', opts.prefix);\n if (opts.search) params.set('search', opts.search);\n\n const res = await ossFetch(\n `/api/storage/buckets/${encodeURIComponent(bucket)}/objects?${params.toString()}`,\n );\n const raw = await res.json() as { data?: StoredFile[]; pagination?: { total?: number } };\n\n const objects: StoredFile[] = Array.isArray(raw)\n ? raw as StoredFile[]\n : (raw.data ?? []);\n\n // Client-side sort\n const sortField = opts.sort ?? 'key';\n objects.sort((a, b) => {\n if (sortField === 'size') return a.size - b.size;\n if (sortField === 'uploadedAt') return a.uploadedAt.localeCompare(b.uploadedAt);\n return a.key.localeCompare(b.key);\n });\n\n if (json) {\n outputJson(raw);\n } else {\n if (objects.length === 0) {\n console.log(`No objects found in bucket \"${bucket}\".`);\n return;\n }\n const total = raw.pagination?.total;\n if (total !== undefined) {\n console.log(`Showing ${objects.length} of ${total} objects:\\n`);\n }\n outputTable(\n ['Key', 'Size', 'Type', 'Uploaded At'],\n objects.map((o) => [\n o.key,\n formatSize(o.size),\n o.mimeType ?? '-',\n o.uploadedAt,\n ]),\n );\n }\n await reportCliUsage('cli.storage.list-objects', true);\n } catch (err) {\n await reportCliUsage('cli.storage.list-objects', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { exec } from 'node:child_process';\nimport { tmpdir } from 'node:os';\nimport { promisify } from 'node:util';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as clack from '@clack/prompts';\nimport {\n listOrganizations,\n createProject,\n getProject,\n getProjectApiKey,\n} from '../lib/api/platform.js';\nimport { getAnonKey, runRawSql } from '../lib/api/oss.js';\nimport { getGlobalConfig, saveGlobalConfig, saveProjectConfig, getFrontendUrl } from '../lib/config.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\nimport { readEnvFile } from '../lib/env.js';\nimport { installSkills, reportCliUsage } from '../lib/skills.js';\nimport { captureEvent, shutdownAnalytics } from '../lib/analytics.js';\nimport { deployProject } from './deployments/deploy.js';\nimport type { ProjectConfig } from '../types.js';\n\nconst execAsync = promisify(exec);\n\ntype Framework = 'react' | 'nextjs';\n\nfunction buildOssHost(appkey: string, region: string): string {\n return `https://${appkey}.${region}.insforge.app`;\n}\n\nasync function waitForProjectActive(projectId: string, apiUrl?: string, timeoutMs = 120_000): Promise<void> {\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n const project = await getProject(projectId, apiUrl);\n if (project.status === 'active') return;\n await new Promise((r) => setTimeout(r, 3000));\n }\n throw new CLIError('Project creation timed out. Check the dashboard for status.');\n}\n\nconst INSFORGE_BANNER = [\n '██╗███╗ ██╗███████╗███████╗ ██████╗ ██████╗ ██████╗ ███████╗',\n '██║████╗ ██║██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██╔════╝',\n '██║██╔██╗ ██║███████╗█████╗ ██║ ██║██████╔╝██║ ███╗█████╗ ',\n '██║██║╚██╗██║╚════██║██╔══╝ ██║ ██║██╔══██╗██║ ██║██╔══╝ ',\n '██║██║ ╚████║███████║██║ ╚██████╔╝██║ ██║╚██████╔╝███████╗',\n '╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝',\n];\n\nasync function animateBanner(): Promise<void> {\n const isTTY = process.stderr.isTTY;\n if (!isTTY || process.env.CI) {\n // Non-interactive: just print static banner\n for (const line of INSFORGE_BANNER) {\n process.stderr.write(`${line}\\n`);\n }\n process.stderr.write('\\n');\n return;\n }\n\n const totalLines = INSFORGE_BANNER.length;\n const maxLen = Math.max(...INSFORGE_BANNER.map((l) => l.length));\n const cols = process.stderr.columns ?? 0;\n\n // Narrow terminal: skip animation to avoid garbled output from line wrapping\n if (cols > 0 && cols < maxLen) {\n for (const line of INSFORGE_BANNER) {\n process.stderr.write(`\\x1b[97m${line}\\x1b[0m\\n`);\n }\n process.stderr.write('\\n');\n return;\n }\n\n // Phase 1: Line-by-line reveal with cursor sweep\n const REVEAL_STEPS = 10;\n const REVEAL_DELAY = 30;\n for (let lineIdx = 0; lineIdx < totalLines; lineIdx++) {\n const line = INSFORGE_BANNER[lineIdx];\n for (let step = 0; step <= REVEAL_STEPS; step++) {\n const pos = Math.floor((step / REVEAL_STEPS) * line.length);\n let rendered = '';\n for (let i = 0; i < line.length; i++) {\n if (i < pos) {\n rendered += `\\x1b[97m${line[i]}\\x1b[0m`; // bright white (revealed)\n } else if (i === pos) {\n rendered += `\\x1b[1;37m${line[i]}\\x1b[0m`; // bold white (cursor)\n } else {\n rendered += `\\x1b[90m${line[i]}\\x1b[0m`; // dim gray (hidden)\n }\n }\n process.stderr.write(`\\r${rendered}`);\n await new Promise((r) => setTimeout(r, REVEAL_DELAY));\n }\n process.stderr.write('\\n');\n }\n\n // Phase 2: Shimmer pass across the full banner\n const SHIMMER_STEPS = 16;\n const SHIMMER_DELAY = 40;\n const SHIMMER_WIDTH = 4;\n for (let step = 0; step < SHIMMER_STEPS; step++) {\n const shimmerPos = Math.floor((step / SHIMMER_STEPS) * (maxLen + SHIMMER_WIDTH));\n // Move cursor up to start of banner\n process.stderr.write(`\\x1b[${totalLines}A`);\n for (const line of INSFORGE_BANNER) {\n let rendered = '';\n for (let i = 0; i < line.length; i++) {\n const dist = Math.abs(i - shimmerPos);\n if (dist === 0) {\n rendered += `\\x1b[1;97m${line[i]}\\x1b[0m`; // bold bright white (shimmer peak)\n } else if (dist <= SHIMMER_WIDTH) {\n rendered += `\\x1b[37m${line[i]}\\x1b[0m`; // white (shimmer edge)\n } else {\n rendered += `\\x1b[90m${line[i]}\\x1b[0m`; // dim (base)\n }\n }\n process.stderr.write(`${rendered}\\n`);\n }\n await new Promise((r) => setTimeout(r, SHIMMER_DELAY));\n }\n\n // Final: show banner in steady bright white\n process.stderr.write(`\\x1b[${totalLines}A`);\n for (const line of INSFORGE_BANNER) {\n process.stderr.write(`\\x1b[97m${line}\\x1b[0m\\n`);\n }\n process.stderr.write('\\n');\n}\n\nfunction getDefaultProjectName(): string {\n const dirName = path.basename(process.cwd());\n const sanitized = dirName.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');\n return sanitized.length >= 2 ? sanitized : '';\n}\n\nasync function copyDir(src: string, dest: string): Promise<void> {\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n await fs.mkdir(destPath, { recursive: true });\n await copyDir(srcPath, destPath);\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nexport function registerCreateCommand(program: Command): void {\n program\n .command('create')\n .description('Create a new InsForge project')\n .option('--name <name>', 'Project name')\n .option('--org-id <id>', 'Organization ID')\n .option('--region <region>', 'Deployment region (us-east, us-west, eu-central, ap-southeast)')\n .option('--template <template>', 'Template to use: react, nextjs, chatbot, crm, e-commerce, or empty')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl, false);\n\n if (!json) {\n await animateBanner();\n clack.intro(\"Let's build something great\");\n }\n\n // 1. Select organization\n let orgId = opts.orgId;\n if (!orgId) {\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found.');\n }\n if (json) {\n throw new CLIError('Specify --org-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n orgId = selected as string;\n }\n\n // Save default org\n const globalConfig = getGlobalConfig();\n globalConfig.default_org_id = orgId;\n saveGlobalConfig(globalConfig);\n\n // 2. Project name (pre-filled from directory name)\n let projectName = opts.name;\n if (!projectName) {\n if (json) throw new CLIError('--name is required in JSON mode.');\n const defaultName = getDefaultProjectName();\n const name = await clack.text({\n message: 'Project name:',\n ...(defaultName ? { initialValue: defaultName } : {}),\n validate: (v) => (v.length >= 2 ? undefined : 'Name must be at least 2 characters'),\n });\n if (clack.isCancel(name)) process.exit(0);\n projectName = name as string;\n }\n\n // Sanitize project name to prevent path traversal\n projectName = path.basename(projectName).replace(/[^a-zA-Z0-9._-]/g, '-').replace(/\\.+/g, '.');\n if (projectName.length < 2 || projectName === '.' || projectName === '..') {\n throw new CLIError('Project name must be at least 2 safe characters (letters, numbers, hyphens).');\n }\n\n // 3. Select template (two-step: blank vs template, then pick template)\n const validTemplates = ['react', 'nextjs', 'chatbot', 'crm', 'e-commerce', 'empty'];\n let template = opts.template as string | undefined;\n if (template && !validTemplates.includes(template)) {\n throw new CLIError(`Invalid template \"${template}\". Valid options: ${validTemplates.join(', ')}`);\n }\n if (!template) {\n if (json) {\n template = 'empty';\n } else {\n const approach = await clack.select({\n message: 'How would you like to start?',\n options: [\n { value: 'blank', label: 'Blank project', hint: 'Start from scratch with .env.local ready' },\n { value: 'template', label: 'Start from a template', hint: 'Pre-built starter apps' },\n ],\n });\n if (clack.isCancel(approach)) process.exit(0);\n\n captureEvent(orgId, 'create_approach_selected', {\n approach: approach as string,\n });\n\n if (approach === 'blank') {\n template = 'empty';\n } else {\n const selected = await clack.select({\n message: 'Choose a starter template:',\n options: [\n { value: 'react', label: 'Web app template with React' },\n { value: 'nextjs', label: 'Web app template with Next.js' },\n { value: 'chatbot', label: 'AI Chatbot with Next.js' },\n { value: 'crm', label: 'CRM with Next.js' },\n { value: 'e-commerce', label: 'E-Commerce store with Next.js' },\n ],\n });\n if (clack.isCancel(selected)) process.exit(0);\n template = selected as string;\n }\n }\n }\n\n captureEvent(orgId, 'template_selected', {\n template,\n approach: template === 'empty' ? 'blank' : 'template',\n });\n\n // 4. Create project via Platform API\n const s = !json ? clack.spinner() : null;\n s?.start('Creating project...');\n\n const project = await createProject(orgId, projectName, opts.region, apiUrl);\n\n s?.message('Waiting for project to become active...');\n await waitForProjectActive(project.id, apiUrl);\n\n // 5. Fetch API key and link project\n const apiKey = await getProjectApiKey(project.id, apiUrl);\n const projectConfig: ProjectConfig = {\n project_id: project.id,\n project_name: project.name,\n org_id: project.organization_id,\n appkey: project.appkey,\n region: project.region,\n api_key: apiKey,\n oss_host: buildOssHost(project.appkey, project.region),\n };\n saveProjectConfig(projectConfig);\n\n s?.stop(`Project \"${project.name}\" created and linked`);\n\n // 6. Download template or seed env for blank projects\n const hasTemplate = template !== 'empty';\n const githubTemplates = ['chatbot', 'crm', 'e-commerce', 'nextjs', 'react'];\n if (githubTemplates.includes(template!)) {\n await downloadGitHubTemplate(template!, projectConfig, json);\n } else if (hasTemplate) {\n await downloadTemplate(template as Framework, projectConfig, projectName, json, apiUrl);\n } else {\n // Blank project: seed .env.local with InsForge credentials (non-fatal)\n try {\n const anonKey = await getAnonKey();\n if (!anonKey) {\n if (!json) clack.log.warn('Could not retrieve anon key. You can add it to .env.local manually.');\n } else {\n const envPath = path.join(process.cwd(), '.env.local');\n const envContent = [\n '# InsForge',\n `NEXT_PUBLIC_INSFORGE_URL=${projectConfig.oss_host}`,\n `NEXT_PUBLIC_INSFORGE_ANON_KEY=${anonKey}`,\n '',\n ].join('\\n');\n await fs.writeFile(envPath, envContent, { flag: 'wx' });\n if (!json) {\n clack.log.success('Created .env.local with your InsForge credentials');\n }\n }\n } catch (err) {\n const error = err as NodeJS.ErrnoException;\n if (!json) {\n if (error.code === 'EEXIST') {\n clack.log.warn('.env.local already exists; skipping InsForge key seeding.');\n } else {\n clack.log.warn(`Failed to create .env.local: ${error.message}`);\n }\n }\n }\n }\n\n // Install agent skills\n await installSkills(json);\n await reportCliUsage('cli.create', true, 6);\n\n // 7. Install npm dependencies (template projects only)\n if (hasTemplate) {\n const installSpinner = !json ? clack.spinner() : null;\n installSpinner?.start('Installing dependencies...');\n try {\n await execAsync('npm install', { cwd: process.cwd(), maxBuffer: 10 * 1024 * 1024 });\n installSpinner?.stop('Dependencies installed');\n } catch (err) {\n installSpinner?.stop('Failed to install dependencies');\n if (!json) {\n clack.log.warn(`npm install failed: ${(err as Error).message}`);\n clack.log.info('Run `npm install` manually to install dependencies.');\n }\n }\n }\n\n // 8. Offer to deploy (template projects, interactive mode only)\n let liveUrl: string | null = null;\n if (hasTemplate && !json) {\n const shouldDeploy = await clack.confirm({\n message: 'Would you like to deploy now?',\n });\n\n if (!clack.isCancel(shouldDeploy) && shouldDeploy) {\n try {\n // Read env vars from .env.local or .env to pass to deployment\n const envVars = await readEnvFile(process.cwd());\n const startBody: { envVars?: Array<{ key: string; value: string }> } = {};\n if (envVars.length > 0) {\n startBody.envVars = envVars;\n }\n\n const deploySpinner = clack.spinner();\n const result = await deployProject({\n sourceDir: process.cwd(),\n startBody,\n spinner: deploySpinner,\n });\n\n if (result.isReady) {\n deploySpinner.stop('Deployment complete');\n liveUrl = result.liveUrl;\n } else {\n deploySpinner.stop('Deployment is still building');\n clack.log.info(`Deployment ID: ${result.deploymentId}`);\n clack.log.warn('Deployment did not finish within 2 minutes.');\n clack.log.info(`Check status with: npx @insforge/cli deployments status ${result.deploymentId}`);\n }\n } catch (err) {\n clack.log.warn(`Deploy failed: ${(err as Error).message}`);\n }\n }\n }\n\n // 9. Show links\n const dashboardUrl = `${getFrontendUrl()}/dashboard/project/${project.id}`;\n\n if (json) {\n outputJson({\n success: true,\n project: { id: project.id, name: project.name, appkey: project.appkey, region: project.region },\n template,\n urls: {\n dashboard: dashboardUrl,\n ...(liveUrl ? { liveSite: liveUrl } : {}),\n },\n });\n } else {\n clack.log.step(`Dashboard: ${dashboardUrl}`);\n if (liveUrl) {\n clack.log.success(`Live site: ${liveUrl}`);\n }\n clack.outro('Done!');\n }\n } catch (err) {\n handleError(err, json);\n } finally {\n await shutdownAnalytics();\n }\n });\n}\n\nasync function downloadTemplate(\n framework: Framework,\n projectConfig: ProjectConfig,\n projectName: string,\n json: boolean,\n _apiUrl?: string,\n): Promise<void> {\n const s = !json ? clack.spinner() : null;\n s?.start('Downloading template...');\n\n try {\n // Get the anon key from the OSS backend\n const anonKey = await getAnonKey();\n if (!anonKey) {\n throw new Error('Failed to retrieve anon key from backend');\n }\n\n // Create temp directory for download\n const tempDir = tmpdir();\n const targetDir = projectName;\n const templatePath = path.join(tempDir, targetDir);\n\n // Remove existing temp directory if it exists\n try {\n await fs.rm(templatePath, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, which is fine\n }\n\n const frame = framework === 'nextjs' ? 'nextjs' : 'react';\n const esc = (s: string) => process.platform === 'win32' ? `\"${s.replace(/\"/g, '\\\\\"')}\"` : `'${s.replace(/'/g, \"'\\\\''\")}'`;\n const command = `npx --yes create-insforge-app@latest ${esc(targetDir)} --frame ${frame} --base-url ${esc(projectConfig.oss_host)} --anon-key ${esc(anonKey)} --skip-install`;\n\n s?.message(`Running create-insforge-app (${frame})...`);\n\n await execAsync(command, {\n maxBuffer: 10 * 1024 * 1024,\n cwd: tempDir,\n });\n\n // Copy template files to current directory\n s?.message('Copying template files...');\n const cwd = process.cwd();\n await copyDir(templatePath, cwd);\n\n // Cleanup temp directory\n await fs.rm(templatePath, { recursive: true, force: true }).catch(() => {});\n\n s?.stop('Template files downloaded');\n } catch (err) {\n s?.stop('Template download failed');\n if (!json) {\n clack.log.warn(`Failed to download template: ${(err as Error).message}`);\n clack.log.info('You can manually set up the template later.');\n }\n }\n}\n\nasync function downloadGitHubTemplate(\n templateName: string,\n projectConfig: ProjectConfig,\n json: boolean,\n): Promise<void> {\n const s = !json ? clack.spinner() : null;\n s?.start(`Downloading ${templateName} template...`);\n\n const tempDir = path.join(tmpdir(), `insforge-template-${Date.now()}`);\n\n try {\n await fs.mkdir(tempDir, { recursive: true });\n\n // Shallow clone the templates repo\n await execAsync(\n 'git clone --depth 1 https://github.com/InsForge/insforge-templates.git .',\n { cwd: tempDir, maxBuffer: 10 * 1024 * 1024, timeout: 60_000 },\n );\n\n const templateDir = path.join(tempDir, templateName);\n const stat = await fs.stat(templateDir).catch(() => null);\n if (!stat?.isDirectory()) {\n throw new Error(`Template \"${templateName}\" not found in repository`);\n }\n\n // Copy template files to cwd\n s?.message('Copying template files...');\n const cwd = process.cwd();\n await copyDir(templateDir, cwd);\n\n // Write .env.local from .env.example with InsForge credentials filled in\n const envExamplePath = path.join(cwd, '.env.example');\n const envExampleExists = await fs.stat(envExamplePath).catch(() => null);\n if (envExampleExists) {\n const anonKey = await getAnonKey();\n const envExample = await fs.readFile(envExamplePath, 'utf-8');\n const envContent = envExample.replace(\n /^([A-Z][A-Z0-9_]*=)(.*)$/gm,\n (_, prefix: string, _value: string) => {\n const key = prefix.slice(0, -1); // remove trailing '='\n if (/INSFORGE.*(URL|BASE_URL)$/.test(key)) return `${prefix}${projectConfig.oss_host}`;\n if (/INSFORGE.*ANON_KEY$/.test(key)) return `${prefix}${anonKey}`;\n if (key === 'NEXT_PUBLIC_APP_URL') return `${prefix}https://${projectConfig.appkey}.insforge.site`;\n return `${prefix}${_value}`;\n },\n );\n const envLocalPath = path.join(cwd, '.env.local');\n try {\n await fs.writeFile(envLocalPath, envContent, { flag: 'wx' });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'EEXIST') {\n if (!json) clack.log.warn('.env.local already exists; skipping env seeding.');\n } else {\n throw e;\n }\n }\n }\n\n s?.stop(`${templateName} template downloaded`);\n\n // Auto-run database migrations if db_init.sql exists\n const migrationPath = path.join(cwd, 'migrations', 'db_init.sql');\n const migrationExists = await fs.stat(migrationPath).catch(() => null);\n if (migrationExists) {\n const dbSpinner = !json ? clack.spinner() : null;\n dbSpinner?.start('Running database migrations...');\n try {\n const sql = await fs.readFile(migrationPath, 'utf-8');\n await runRawSql(sql, true);\n dbSpinner?.stop('Database migrations applied');\n } catch (err) {\n dbSpinner?.stop('Database migration failed');\n if (!json) {\n clack.log.warn(`Migration failed: ${(err as Error).message}`);\n clack.log.info('You can run the migration manually: npx @insforge/cli db query --unrestricted \"$(cat migrations/db_init.sql)\"');\n } else {\n throw err;\n }\n }\n }\n } catch (err) {\n s?.stop(`${templateName} template download failed`);\n if (!json) {\n clack.log.warn(`Failed to download ${templateName} template: ${(err as Error).message}`);\n clack.log.info('You can manually clone from: https://github.com/InsForge/insforge-templates');\n }\n } finally {\n await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {});\n }\n}\n\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\n/**\n * Read environment variables from the first env file found in the directory.\n * Priority: .env.local > .env.production > .env\n */\nexport async function readEnvFile(cwd: string): Promise<Array<{ key: string; value: string }>> {\n const candidates = ['.env.local', '.env.production', '.env'];\n for (const name of candidates) {\n const filePath = path.join(cwd, name);\n const exists = await fs.stat(filePath).catch(() => null);\n if (!exists) continue;\n\n const content = await fs.readFile(filePath, 'utf-8');\n const vars: Array<{ key: string; value: string }> = [];\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const eqIndex = trimmed.indexOf('=');\n if (eqIndex === -1) continue;\n const key = trimmed.slice(0, eqIndex).trim();\n let value = trimmed.slice(eqIndex + 1).trim();\n // Strip surrounding quotes\n if ((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n if (key) vars.push({ key, value });\n }\n return vars;\n }\n return [];\n}\n","import { PostHog } from 'posthog-node';\nimport type { ProjectConfig } from '../types.js';\n\nconst POSTHOG_API_KEY = process.env.POSTHOG_API_KEY;\nconst POSTHOG_HOST = process.env.POSTHOG_HOST || 'https://us.i.posthog.com';\n\nlet client: PostHog | null = null;\n\nfunction getClient(): PostHog | null {\n if (!POSTHOG_API_KEY) return null;\n if (!client) {\n client = new PostHog(POSTHOG_API_KEY, { host: POSTHOG_HOST });\n }\n return client;\n}\n\nexport function captureEvent(\n distinctId: string,\n event: string,\n properties?: Record<string, unknown>,\n): void {\n try {\n getClient()?.capture({ distinctId, event, properties });\n } catch {\n // analytics should never break the CLI\n }\n}\n\nexport function trackDiagnose(subcommand: string, config: ProjectConfig): void {\n captureEvent(config.project_id, 'cli_diagnose_invoked', {\n subcommand,\n project_id: config.project_id,\n project_name: config.project_name,\n org_id: config.org_id,\n region: config.region,\n oss_mode: config.project_id === 'oss-project',\n });\n}\n\nexport async function shutdownAnalytics(): Promise<void> {\n try {\n if (client) await client.shutdown();\n } catch {\n // ignore\n }\n}\n","import type { Command } from 'commander';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs/promises';\nimport * as clack from '@clack/prompts';\nimport archiver from 'archiver';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError, getDeploymentError } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport type { CreateDeploymentResponse, StartDeploymentRequest, DeploymentSchema } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nconst POLL_INTERVAL_MS = 5_000;\nconst POLL_TIMEOUT_MS = 300_000;\n\nconst EXCLUDE_PATTERNS = [\n 'node_modules',\n '.git',\n '.next',\n '.env',\n '.env.local',\n 'dist',\n 'build',\n '.DS_Store',\n '.insforge',\n // IDE and AI agent configs\n '.claude',\n '.agents',\n '.augment',\n '.kilocode',\n '.kiro',\n '.qoder',\n '.qwen',\n '.roo',\n '.trae',\n '.windsurf',\n '.vercel',\n '.turbo',\n '.cache',\n 'skills',\n 'coverage',\n];\n\nfunction shouldExclude(name: string): boolean {\n const normalized = name.replace(/\\\\/g, '/');\n for (const pattern of EXCLUDE_PATTERNS) {\n if (\n normalized === pattern ||\n normalized.startsWith(pattern + '/') ||\n normalized.endsWith('/' + pattern) ||\n normalized.includes('/' + pattern + '/')\n ) {\n return true;\n }\n }\n if (normalized.endsWith('.log')) return true;\n return false;\n}\n\nasync function createZipBuffer(sourceDir: string): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n const archive = archiver('zip', { zlib: { level: 9 } });\n const chunks: Buffer[] = [];\n\n archive.on('data', (chunk: Buffer) => chunks.push(chunk));\n archive.on('end', () => resolve(Buffer.concat(chunks)));\n archive.on('error', (err: Error) => reject(err));\n\n archive.directory(sourceDir, false, (entry) => {\n if (shouldExclude(entry.name)) return false;\n return entry;\n });\n\n void archive.finalize();\n });\n}\n\nexport interface DeployProjectOptions {\n sourceDir: string;\n startBody?: StartDeploymentRequest;\n spinner?: ReturnType<typeof clack.spinner> | null;\n}\n\nexport interface DeployProjectResult {\n deploymentId: string;\n deployment: DeploymentSchema | null;\n isReady: boolean;\n liveUrl: string | null;\n}\n\n/**\n * Core deploy logic: zip → upload → start → poll.\n * Reusable from both the `deploy` command and `create` command.\n */\nexport async function deployProject(opts: DeployProjectOptions): Promise<DeployProjectResult> {\n const { sourceDir, startBody = {}, spinner: s } = opts;\n\n // Step 1: Create deployment to get presigned upload URL\n s?.start('Creating deployment...');\n const createRes = await ossFetch('/api/deployments', { method: 'POST' });\n const { id: deploymentId, uploadUrl, uploadFields } =\n (await createRes.json()) as CreateDeploymentResponse;\n\n // Step 2: Create zip\n s?.message('Compressing source files...');\n const zipBuffer = await createZipBuffer(sourceDir);\n\n // Step 3: Upload zip to presigned URL\n s?.message('Uploading...');\n const formData = new FormData();\n for (const [key, value] of Object.entries(uploadFields)) {\n formData.append(key, value);\n }\n formData.append(\n 'file',\n new Blob([zipBuffer], { type: 'application/zip' }),\n 'deployment.zip',\n );\n\n const uploadRes = await fetch(uploadUrl, { method: 'POST', body: formData });\n if (!uploadRes.ok) {\n const uploadErr = await uploadRes.text();\n throw new CLIError(`Failed to upload: ${uploadErr}`);\n }\n\n // Step 4: Start the deployment\n s?.message('Starting deployment...');\n const startRes = await ossFetch(`/api/deployments/${deploymentId}/start`, {\n method: 'POST',\n body: JSON.stringify(startBody),\n });\n await startRes.json();\n\n // Step 5: Poll for deployment status\n s?.message('Building and deploying...');\n const startTime = Date.now();\n let deployment: DeploymentSchema | null = null;\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n try {\n const statusRes = await ossFetch(`/api/deployments/${deploymentId}`);\n deployment = (await statusRes.json()) as DeploymentSchema;\n const status = deployment.status.toUpperCase();\n\n if (status === 'READY') {\n break;\n }\n if (status === 'ERROR' || status === 'CANCELED') {\n s?.stop('Deployment failed');\n throw new CLIError(getDeploymentError(deployment.metadata) ?? `Deployment failed with status: ${deployment.status}`);\n }\n\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n s?.message(`Building and deploying... (${elapsed}s, status: ${deployment.status})`);\n } catch (err) {\n if (err instanceof CLIError) throw err;\n // Ignore transient fetch errors during polling\n }\n }\n\n const isReady = deployment?.status.toUpperCase() === 'READY';\n const liveUrl = isReady ? (deployment?.url ?? null) : null;\n\n return { deploymentId, deployment, isReady, liveUrl };\n}\n\nexport function registerDeploymentsDeployCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('deploy [directory]')\n .description('Deploy a frontend project to Vercel')\n .option('--env <vars>', 'Environment variables as JSON (e.g. \\'{\"KEY\":\"value\"}\\')')\n .option('--meta <meta>', 'Deployment metadata as JSON')\n .action(async (directory: string | undefined, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n // Resolve source directory\n const sourceDir = path.resolve(directory ?? '.');\n const stats = await fs.stat(sourceDir).catch(() => null);\n if (!stats?.isDirectory()) {\n throw new CLIError(`\"${sourceDir}\" is not a valid directory.`);\n }\n\n // Reject excluded directories as deploy source\n const dirName = path.basename(sourceDir);\n if (EXCLUDE_PATTERNS.includes(dirName)) {\n throw new CLIError(`\"${dirName}\" is an excluded directory and cannot be used as a deploy source. Please specify your project root or output directory instead.`);\n }\n\n const s = !json ? clack.spinner() : null;\n\n // Parse env/meta from CLI flags\n const startBody: StartDeploymentRequest = {};\n if (opts.env) {\n try {\n const parsed = JSON.parse(opts.env) as Record<string, string>;\n if (Array.isArray(parsed)) {\n startBody.envVars = parsed;\n } else {\n startBody.envVars = Object.entries(parsed).map(([key, value]) => ({ key, value }));\n }\n } catch { throw new CLIError('Invalid --env JSON.'); }\n }\n if (opts.meta) {\n try { startBody.meta = JSON.parse(opts.meta); } catch { throw new CLIError('Invalid --meta JSON.'); }\n }\n\n const result = await deployProject({ sourceDir, startBody, spinner: s });\n\n if (result.isReady) {\n s?.stop('Deployment complete');\n if (json) {\n outputJson(result.deployment);\n } else {\n if (result.liveUrl) {\n clack.log.success(`Live at: ${result.liveUrl}`);\n }\n clack.log.info(`Deployment ID: ${result.deploymentId}`);\n }\n } else {\n s?.stop('Deployment is still building');\n if (json) {\n outputJson({ id: result.deploymentId, status: result.deployment?.status ?? 'building', timedOut: true });\n } else {\n clack.log.info(`Deployment ID: ${result.deploymentId}`);\n clack.log.warn('Deployment did not finish within 5 minutes.');\n clack.log.info(`Check status with: npx @insforge/cli deployments status ${result.deploymentId}`);\n }\n }\n await reportCliUsage('cli.deployments.deploy', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.deploy', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getCredentials, getGlobalConfig, getProjectConfig } from '../lib/config.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\n\nexport function registerContextCommand(program: Command): void {\n program\n .command('current')\n .description('Show current CLI context (user, org, project)')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n const creds = getCredentials();\n const globalConfig = getGlobalConfig();\n const projectConfig = getProjectConfig();\n\n if (json) {\n outputJson({\n authenticated: !!creds,\n user: creds?.user ?? null,\n default_org_id: globalConfig.default_org_id ?? null,\n project: projectConfig,\n });\n return;\n }\n\n console.log('\\n InsForge CLI Context\\n');\n\n // Auth status\n if (creds) {\n console.log(` User: ${creds.user.name} <${creds.user.email}>`);\n } else {\n console.log(' User: (not logged in)');\n }\n\n // Org (only relevant when logged in)\n if (creds && globalConfig.default_org_id) {\n console.log(` Default Org: ${globalConfig.default_org_id}`);\n } else if (creds) {\n console.log(' Default Org: (none)');\n }\n\n // Project\n if (projectConfig) {\n console.log('');\n console.log(` Project: ${projectConfig.project_name} (${projectConfig.project_id})`);\n console.log(` App Key: ${projectConfig.appkey}`);\n console.log(` Region: ${projectConfig.region}`);\n console.log(` OSS Host: ${projectConfig.oss_host}`);\n } else {\n console.log('\\n Project: (not linked — run `npx @insforge/cli link`)');\n }\n\n console.log('');\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { listOrganizations, listProjects } from '../lib/api/platform.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\n\nexport function registerListCommand(program: Command): void {\n program\n .command('list')\n .description('List all organizations and their projects')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const orgs = await listOrganizations(apiUrl);\n\n if (orgs.length === 0) {\n if (json) {\n outputJson([]);\n } else {\n console.log('No organizations found.');\n }\n return;\n }\n\n // Fetch projects for all orgs in parallel\n const orgProjects = await Promise.all(\n orgs.map(async (org) => ({\n org,\n projects: await listProjects(org.id, apiUrl),\n })),\n );\n\n if (json) {\n outputJson(\n orgProjects.map(({ org, projects }) => ({\n id: org.id,\n name: org.name,\n type: org.type ?? null,\n projects: projects.map((p) => ({\n id: p.id,\n name: p.name,\n region: p.region,\n status: p.status,\n appkey: p.appkey,\n })),\n })),\n );\n return;\n }\n\n // Human-readable: grouped table\n const rows: string[][] = [];\n for (const { org, projects } of orgProjects) {\n if (projects.length === 0) {\n rows.push([org.name, '-', '-', '-', '-']);\n } else {\n for (let i = 0; i < projects.length; i++) {\n const p = projects[i];\n rows.push([\n i === 0 ? org.name : '',\n p.name,\n p.region,\n p.status,\n p.appkey,\n ]);\n }\n }\n }\n\n outputTable(['Organization', 'Project', 'Region', 'Status', 'AppKey'], rows);\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListDeploymentsResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerDeploymentsListCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('list')\n .description('List all deployments')\n .option('--limit <n>', 'Limit number of results', '20')\n .option('--offset <n>', 'Offset for pagination', '0')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch(`/api/deployments?limit=${opts.limit}&offset=${opts.offset}`);\n const raw = await res.json();\n // API may return array directly or { data: [...] }\n const deployments: ListDeploymentsResponse['data'] = Array.isArray(raw)\n ? raw\n : raw && typeof raw === 'object' && 'data' in raw\n ? (raw as ListDeploymentsResponse).data ?? []\n : [];\n\n if (json) {\n outputJson(raw);\n } else {\n if (!deployments.length) {\n console.log('No deployments found.');\n return;\n }\n outputTable(\n ['ID', 'Status', 'Provider', 'URL', 'Created'],\n deployments.map((d) => [\n d.id,\n d.status,\n d.provider,\n d.url ?? '-',\n new Date(d.createdAt).toLocaleString(),\n ]),\n );\n }\n await reportCliUsage('cli.deployments.list', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.list', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError, getDeploymentError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { DeploymentSchema } from '../../types.js';\n\nexport function registerDeploymentsStatusCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('status <id>')\n .description('Get deployment details and sync status from Vercel')\n .option('--sync', 'Sync status from Vercel before showing')\n .action(async (id: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n // Optionally sync status from Vercel first\n if (opts.sync) {\n await ossFetch(`/api/deployments/${id}/sync`, { method: 'POST' });\n }\n\n const res = await ossFetch(`/api/deployments/${id}`);\n const d = (await res.json()) as DeploymentSchema;\n\n if (json) {\n outputJson(d);\n } else {\n const errorMessage = getDeploymentError(d.metadata);\n outputTable(\n ['Field', 'Value'],\n [\n ['ID', d.id],\n ['Status', d.status],\n ['Provider', d.provider ?? '-'],\n ['Provider ID', d.providerDeploymentId ?? '-'],\n ['URL', d.url ?? '-'],\n ['Created', new Date(d.createdAt).toLocaleString()],\n ['Updated', new Date(d.updatedAt).toLocaleString()],\n ...(errorMessage ? [['Error', errorMessage]] : []),\n ],\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDeploymentsCancelCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('cancel <id>')\n .description('Cancel a deployment')\n .action(async (id: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n if (!yes && !json) {\n const confirmed = await clack.confirm({\n message: `Cancel deployment ${id}?`,\n });\n if (clack.isCancel(confirmed) || !confirmed) process.exit(0);\n }\n\n const res = await ossFetch(`/api/deployments/${id}/cancel`, { method: 'POST' });\n const result = await res.json();\n\n if (json) {\n outputJson(result);\n } else {\n outputSuccess(`Deployment ${id} cancelled.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError, CLIError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable, outputSuccess } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\ninterface EnvVar {\n id: string;\n key: string;\n type: string;\n updatedAt: number;\n}\n\nexport function registerDeploymentsEnvVarsCommand(deploymentsCmd: Command): void {\n const envCmd = deploymentsCmd.command('env').description('Manage deployment environment variables');\n\n // list\n envCmd\n .command('list')\n .description('List all deployment environment variables')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch('/api/deployments/env-vars');\n const data = (await res.json()) as { envVars: EnvVar[] };\n const envVars = data.envVars ?? [];\n\n if (json) {\n outputJson(data);\n } else {\n if (!envVars.length) {\n console.log('No environment variables found.');\n return;\n }\n outputTable(\n ['ID', 'Key', 'Type', 'Updated At'],\n envVars.map((v) => [\n v.id,\n v.key,\n v.type,\n new Date(v.updatedAt).toLocaleString(),\n ]),\n );\n }\n await reportCliUsage('cli.deployments.env.list', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.env.list', false);\n handleError(err, json);\n }\n });\n\n // create / update\n envCmd\n .command('set <key> <value>')\n .description('Create or update a deployment environment variable')\n .action(async (key: string, value: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch('/api/deployments/env-vars', {\n method: 'POST',\n body: JSON.stringify({ envVars: [{ key, value }] }),\n });\n const data = (await res.json()) as { success: boolean; message: string; count: number };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message);\n }\n await reportCliUsage('cli.deployments.env.set', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.env.set', false);\n handleError(err, json);\n }\n });\n\n // delete\n envCmd\n .command('delete <id>')\n .description('Delete a deployment environment variable by ID')\n .action(async (id: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch(`/api/deployments/env-vars/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n });\n const data = (await res.json()) as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message);\n }\n await reportCliUsage('cli.deployments.env.delete', true);\n } catch (err) {\n await reportCliUsage('cli.deployments.env.delete', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../lib/api/oss.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\nimport { reportCliUsage } from '../lib/skills.js';\n\nconst FEATURES = ['db', 'storage', 'functions', 'auth', 'ai', 'realtime'] as const;\nconst LANGUAGES = ['typescript', 'swift', 'kotlin', 'rest-api'] as const;\n\nexport function registerDocsCommand(program: Command): void {\n program\n .command('docs [feature] [language]')\n .description('Browse InsForge SDK documentation')\n .addHelpText('after', `\nFeatures: ${FEATURES.join(', ')}\nLanguages: ${LANGUAGES.join(', ')}\n\nExamples:\n npx @insforge/cli docs List all available docs\n npx @insforge/cli docs instructions Show setup instructions\n npx @insforge/cli docs db typescript Show TypeScript database SDK docs\n npx @insforge/cli docs auth swift Show Swift auth SDK docs\n npx @insforge/cli docs storage rest-api Show REST API storage docs`)\n .action(async (feature: string | undefined, language: string | undefined, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n await reportCliUsage('cli.docs', true);\n // No args → list all docs\n if (!feature) {\n await listDocs(json);\n return;\n }\n\n // Single arg → legacy doc type (e.g. \"instructions\")\n if (!language) {\n await fetchDoc(`/api/docs/${encodeURIComponent(feature)}`, feature, json);\n return;\n }\n\n // Two args → feature + language\n await fetchDoc(\n `/api/docs/${encodeURIComponent(feature)}/${encodeURIComponent(language)}`,\n `${feature}/${language}`,\n json,\n );\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n\nasync function listDocs(json: boolean): Promise<void> {\n const res = await ossFetch('/api/docs');\n const data = await res.json() as { data?: DocEntry[] } | DocEntry[];\n const docs = Array.isArray(data) ? data : (data.data ?? []);\n\n if (json) {\n outputJson(docs);\n } else {\n if (!docs.length) {\n console.log('No documentation available.');\n return;\n }\n outputTable(\n ['Type', 'Endpoint'],\n docs.map((d) => [String(d.type ?? '-'), String(d.endpoint ?? '-')]),\n );\n }\n}\n\nasync function fetchDoc(path: string, label: string, json: boolean): Promise<void> {\n const res = await ossFetch(path);\n const data = await res.json() as { data?: { type?: string; content?: string }; type?: string; content?: string };\n const doc = data.data ?? data;\n\n if (json) {\n outputJson(doc);\n } else {\n if (doc.content) {\n console.log(doc.content);\n } else {\n console.log(`No content returned for \"${label}\".`);\n }\n }\n}\n\ninterface DocEntry {\n type?: string;\n filename?: string;\n endpoint?: string;\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListSecretsResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerSecretsListCommand(secretsCmd: Command): void {\n secretsCmd\n .command('list')\n .description('List secrets (metadata only, values are hidden)')\n .option('--all', 'Include inactive (deleted) secrets')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/secrets');\n const data = await res.json() as ListSecretsResponse;\n let secrets = data.secrets ?? [];\n\n if (!opts.all) {\n secrets = secrets.filter((s) => s.isActive !== false);\n }\n\n if (json) {\n outputJson(opts.all ? data : { secrets });\n } else {\n if (!secrets.length) {\n console.log('No secrets found.');\n return;\n }\n const headers = opts.all\n ? ['Key', 'Active', 'Reserved', 'Expires', 'Updated']\n : ['Key', 'Reserved', 'Expires', 'Updated'];\n outputTable(\n headers,\n secrets.map((s) => {\n const row = [\n String(s.key ?? '-'),\n ...(opts.all ? [s.isActive ? 'Yes' : 'No'] : []),\n s.isReserved ? 'Yes' : 'No',\n s.expiresAt ? new Date(String(s.expiresAt)).toLocaleString() : '-',\n s.updatedAt ? new Date(String(s.updatedAt)).toLocaleString() : '-',\n ];\n return row;\n }),\n );\n }\n await reportCliUsage('cli.secrets.list', true);\n } catch (err) {\n await reportCliUsage('cli.secrets.list', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport type { GetSecretValueResponse } from '../../types.js';\n\nexport function registerSecretsGetCommand(secretsCmd: Command): void {\n secretsCmd\n .command('get <key>')\n .description('Get the decrypted value of a secret')\n .action(async (key: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`);\n const data = await res.json();\n const secret = data as GetSecretValueResponse;\n\n if (json) {\n outputJson(data);\n } else {\n console.log(`${secret.key} = ${secret.value}`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport type { CreateSecretResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerSecretsAddCommand(secretsCmd: Command): void {\n secretsCmd\n .command('add <key> <value>')\n .description('Create a new secret')\n .option('--reserved', 'Mark secret as protected from deletion')\n .option('--expires <date>', 'Expiration date (ISO 8601 format)')\n .action(async (key: string, value: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = { key, value };\n if (opts.reserved) body.isReserved = true;\n if (opts.expires) body.expiresAt = opts.expires;\n\n const res = await ossFetch('/api/secrets', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n const data = await res.json() as CreateSecretResponse;\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} created.`);\n }\n await reportCliUsage('cli.secrets.add', true);\n } catch (err) {\n await reportCliUsage('cli.secrets.add', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport type { UpdateSecretResponse } from '../../types.js';\n\nexport function registerSecretsUpdateCommand(secretsCmd: Command): void {\n secretsCmd\n .command('update <key>')\n .description('Update an existing secret')\n .option('--value <value>', 'New secret value')\n .option('--active <bool>', 'Set active status (true/false)')\n .option('--reserved <bool>', 'Set reserved status (true/false)')\n .option('--expires <date>', 'Expiration date (ISO 8601, or \"null\" to remove)')\n .action(async (key: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = {};\n if (opts.value !== undefined) body.value = opts.value;\n if (opts.active !== undefined) body.isActive = opts.active === 'true';\n if (opts.reserved !== undefined) body.isReserved = opts.reserved === 'true';\n if (opts.expires !== undefined) body.expiresAt = opts.expires === 'null' ? null : opts.expires;\n\n if (Object.keys(body).length === 0) {\n throw new CLIError('Provide at least one option to update (--value, --active, --reserved, --expires).');\n }\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`, {\n method: 'PUT',\n body: JSON.stringify(body),\n });\n const data = await res.json() as UpdateSecretResponse;\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} updated.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport type { DeleteSecretResponse } from '../../types.js';\n\nexport function registerSecretsDeleteCommand(secretsCmd: Command): void {\n secretsCmd\n .command('delete <key>')\n .description('Delete a secret')\n .action(async (key: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete secret \"${key}\"? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`, {\n method: 'DELETE',\n });\n const data = await res.json() as DeleteSecretResponse;\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} deleted.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListSchedulesResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerSchedulesListCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('list')\n .description('List all schedules')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/schedules');\n const data = await res.json();\n const schedules: ListSchedulesResponse = data as ListSchedulesResponse;\n\n if (json) {\n outputJson(schedules);\n } else {\n if (!schedules.length) {\n console.log('No schedules found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Cron', 'URL', 'Method', 'Active', 'Next Run'],\n schedules.map((s) => [\n String(s.id ?? '-'),\n String(s.name ?? '-'),\n String(s.cronSchedule ?? '-'),\n String(s.functionUrl ?? '-'),\n String(s.httpMethod ?? '-'),\n s.isActive === false ? 'No' : 'Yes',\n s.nextRun ? new Date(String(s.nextRun)).toLocaleString() : '-',\n ]),\n );\n }\n await reportCliUsage('cli.schedules.list', true);\n } catch (err) {\n await reportCliUsage('cli.schedules.list', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport type { GetScheduleResponse } from '../../types.js';\n\nexport function registerSchedulesGetCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('get <id>')\n .description('Get schedule details')\n .action(async (id: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch(`/api/schedules/${encodeURIComponent(id)}`);\n const data = await res.json() as GetScheduleResponse;\n\n if (json) {\n outputJson(data);\n } else {\n console.log(`\\n Name: ${data.name ?? '-'}`);\n console.log(` ID: ${data.id ?? '-'}`);\n console.log(` Cron: ${data.cronSchedule ?? '-'}`);\n console.log(` URL: ${data.functionUrl ?? '-'}`);\n console.log(` Method: ${data.httpMethod ?? '-'}`);\n console.log(` Active: ${data.isActive === false ? 'No' : 'Yes'}`);\n if (data.headers) console.log(` Headers: ${JSON.stringify(data.headers)}`);\n if (data.body) console.log(` Body: ${JSON.stringify(data.body)}`);\n console.log(` Next Run: ${data.nextRun ? new Date(String(data.nextRun)).toLocaleString() : '-'}`);\n console.log(` Created: ${data.createdAt ? new Date(String(data.createdAt)).toLocaleString() : '-'}`);\n console.log('');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport type { CreateScheduleResponse } from '../../types.js';\nimport { reportCliUsage } from '../../lib/skills.js';\n\nexport function registerSchedulesCreateCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('create')\n .description('Create a new schedule')\n .requiredOption('--name <name>', 'Schedule name')\n .requiredOption('--cron <expression>', 'Cron expression (5-field format)')\n .requiredOption('--url <url>', 'URL to invoke')\n .requiredOption('--method <method>', 'HTTP method (GET, POST, PUT, PATCH, DELETE)')\n .option('--headers <json>', 'HTTP headers as JSON')\n .option('--body <json>', 'Request body as JSON')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = {\n name: opts.name,\n cronSchedule: opts.cron,\n functionUrl: opts.url,\n httpMethod: opts.method.toUpperCase(),\n };\n\n if (opts.headers) {\n try {\n body.headers = JSON.parse(opts.headers);\n } catch {\n throw new CLIError('Invalid JSON for --headers');\n }\n }\n if (opts.body) {\n try {\n body.body = JSON.parse(opts.body);\n } catch {\n throw new CLIError('Invalid JSON for --body');\n }\n }\n\n const res = await ossFetch('/api/schedules', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n const data = await res.json() as CreateScheduleResponse;\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Schedule \"${opts.name}\" created (ID: ${data.id ?? 'unknown'}).`);\n }\n await reportCliUsage('cli.schedules.create', true);\n } catch (err) {\n await reportCliUsage('cli.schedules.create', false);\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSchedulesUpdateCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('update <id>')\n .description('Update a schedule')\n .option('--name <name>', 'New schedule name')\n .option('--cron <expression>', 'New cron expression')\n .option('--url <url>', 'New URL to invoke')\n .option('--method <method>', 'New HTTP method')\n .option('--headers <json>', 'New HTTP headers as JSON')\n .option('--body <json>', 'New request body as JSON')\n .option('--active <bool>', 'Enable/disable schedule (true/false)')\n .action(async (id: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const body: Record<string, unknown> = {};\n if (opts.name !== undefined) body.name = opts.name;\n if (opts.cron !== undefined) body.cronSchedule = opts.cron;\n if (opts.url !== undefined) body.functionUrl = opts.url;\n if (opts.method !== undefined) body.httpMethod = opts.method.toUpperCase();\n if (opts.active !== undefined) body.isActive = opts.active === 'true';\n\n if (opts.headers !== undefined) {\n try {\n body.headers = JSON.parse(opts.headers);\n } catch {\n throw new CLIError('Invalid JSON for --headers');\n }\n }\n if (opts.body !== undefined) {\n try {\n body.body = JSON.parse(opts.body);\n } catch {\n throw new CLIError('Invalid JSON for --body');\n }\n }\n\n if (Object.keys(body).length === 0) {\n throw new CLIError('Provide at least one option to update (--name, --cron, --url, --method, --headers, --body, --active).');\n }\n\n const res = await ossFetch(`/api/schedules/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n body: JSON.stringify(body),\n });\n const data = await res.json() as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? 'Schedule updated.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSchedulesDeleteCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('delete <id>')\n .description('Delete a schedule')\n .action(async (id: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete schedule \"${id}\"? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/schedules/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n });\n const data = await res.json() as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? 'Schedule deleted.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { ListExecutionLogsResponse } from '../../types.js';\n\nexport function registerSchedulesLogsCommand(schedulesCmd: Command): void {\n schedulesCmd\n .command('logs <id>')\n .description('Get execution logs for a schedule')\n .option('--limit <n>', 'Max logs to return (default: 50, max: 100)', '50')\n .option('--offset <n>', 'Pagination offset', '0')\n .action(async (id: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const limit = parseInt(opts.limit, 10) || 50;\n const offset = parseInt(opts.offset, 10) || 0;\n\n const res = await ossFetch(`/api/schedules/${encodeURIComponent(id)}/logs?limit=${limit}&offset=${offset}`);\n const data = await res.json() as ListExecutionLogsResponse;\n const logs = data.logs ?? [];\n\n if (json) {\n outputJson(data);\n } else {\n if (!logs.length) {\n console.log('No execution logs found.');\n return;\n }\n outputTable(\n ['Executed At', 'Status', 'Success', 'Duration (ms)'],\n logs.map((l) => [\n l.executedAt ? new Date(String(l.executedAt)).toLocaleString() : '-',\n String(l.statusCode ?? '-'),\n l.success ? 'Yes' : 'No',\n String(l.durationMs ?? '-'),\n ]),\n );\n if (data.totalCount > offset + logs.length) {\n console.log(`\\n Showing ${offset + 1}-${offset + logs.length} of ${data.totalCount}. Use --offset to paginate.`);\n }\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../lib/api/oss.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\n\nconst VALID_SOURCES = ['insforge.logs', 'postgREST.logs', 'postgres.logs', 'function.logs', 'function-deploy.logs'] as const;\nconst SOURCE_LOOKUP = new Map(VALID_SOURCES.map((s) => [s.toLowerCase(), s]));\n\n/** Maps source names to their API paths. Most use /api/logs/{source}, but some have custom paths. */\nconst SOURCE_PATH: Record<string, string> = {\n 'function-deploy.logs': '/api/logs/functions/build-logs',\n};\n\nfunction getLogPath(source: string, limit: number): string {\n const custom = SOURCE_PATH[source];\n if (custom) return `${custom}?limit=${limit}`;\n return `/api/logs/${encodeURIComponent(source)}?limit=${limit}`;\n}\n\nexport function registerLogsCommand(program: Command): void {\n program\n .command('logs <source>')\n .description('Fetch backend container logs (insforge.logs | postgREST.logs | postgres.logs | function.logs | function-deploy.logs)')\n .option('--limit <n>', 'Number of log entries to return', '20')\n .action(async (source: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const resolved = SOURCE_LOOKUP.get(source.toLowerCase());\n if (!resolved) {\n throw new CLIError(`Invalid log source \"${source}\". Valid sources: ${VALID_SOURCES.join(', ')}`);\n }\n\n const limit = parseInt(opts.limit, 10) || 20;\n const res = await ossFetch(getLogPath(resolved, limit));\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n const logs = Array.isArray(data) ? data : (data as Record<string, unknown>).logs;\n if (!Array.isArray(logs) || !logs.length) {\n console.log('No logs found.');\n return;\n }\n for (const entry of logs) {\n if (typeof entry === 'string') {\n console.log(entry);\n } else {\n const e = entry as Record<string, unknown>;\n const ts = e.timestamp ?? e.time ?? '';\n const msg = e.message ?? e.msg ?? e.log ?? JSON.stringify(e);\n console.log(`${ts} ${msg}`);\n }\n }\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport type { AppMetadataSchema } from '@insforge/shared-schemas';\nimport { ossFetch } from '../lib/api/oss.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\nimport { reportCliUsage } from '../lib/skills.js';\n\nexport function registerMetadataCommand(program: Command): void {\n program\n .command('metadata')\n .description('Show backend metadata (auth, database, buckets, edge functions, realtime, AI models)')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n\n const res = await ossFetch('/api/metadata');\n const data = await res.json() as AppMetadataSchema;\n\n if (json) {\n outputJson(data);\n return;\n }\n\n // Auth\n console.log('\\n Auth');\n console.log(` OAuth Providers: ${data.auth.oAuthProviders.length ? data.auth.oAuthProviders.join(', ') : '(none)'}`);\n console.log(` Email Verification: ${data.auth.requireEmailVerification ? 'Yes' : 'No'}`);\n console.log(` Password Policy:`);\n console.log(` Min Length: ${data.auth.passwordMinLength}, requireLowercase: ${data.auth.requireLowercase}, requireNumber: ${data.auth.requireNumber}, requireSpecialChar: ${data.auth.requireSpecialChar}, requireUppercase: ${data.auth.requireUppercase}`);\n console.log(` Verify Email Method: ${data.auth.verifyEmailMethod}`);\n console.log(` Reset Password Method: ${data.auth.resetPasswordMethod}`);\n\n // Database\n console.log('\\n Database');\n console.log(` Size: ${formatSize(data.database.totalSizeInGB)}`);\n if (data.database.tables.length) {\n outputTable(\n ['Table', 'Records'],\n data.database.tables.map((t) => [t.tableName, String(t.recordCount)]),\n );\n } else {\n console.log(' No tables.');\n }\n\n // Storage\n console.log('\\n Storage');\n console.log(` Size: ${formatSize(data.storage.totalSizeInGB)}`);\n if (data.storage.buckets.length) {\n outputTable(\n ['Bucket', 'Public', 'Objects'],\n data.storage.buckets.map((b) => [b.name, b.public ? 'Yes' : 'No', String(b.objectCount ?? '-')]),\n );\n } else {\n console.log(' No buckets.');\n }\n\n // Functions\n console.log('\\n Functions');\n if (data.functions.length) {\n outputTable(\n ['Slug', 'Name', 'Status', 'Description'],\n data.functions.map((f) => [f.slug, f.name, f.status, f.description || '-']),\n );\n } else {\n console.log(' No functions deployed.');\n }\n\n // AI\n if (data.aiIntegration?.models?.length) {\n console.log('\\n AI Models');\n outputTable(\n ['Model', 'Input', 'Output'],\n data.aiIntegration.models.map((m) => [\n m.modelId,\n m.inputModality.join(', '),\n m.outputModality.join(', '),\n ]),\n );\n }\n\n // Realtime\n if (data.realtime?.channels && Array.isArray(data.realtime.channels) && data.realtime.channels.length) {\n console.log(`\\n Realtime: ${data.realtime.channels.length} channel(s)`);\n outputTable(\n ['Id', 'Pattern', 'Webhook URLs', 'Enabled', 'Description'],\n data.realtime.channels.map((c) => [c.id, c.pattern, c.webhookUrls?.join(', ') || '-', c.enabled ? 'Yes' : 'No', c.description || '-']),\n );\n }\n\n // Version\n if (data.version) {\n console.log(`\\n Version: ${data.version}`);\n }\n\n console.log('');\n await reportCliUsage('cli.metadata', true);\n } catch (err) {\n await reportCliUsage('cli.metadata', false);\n handleError(err, json);\n }\n });\n}\n\nfunction formatSize(gb: number): string {\n if (gb < 0.001) return `${(gb * 1024 * 1024).toFixed(1)} KB`;\n if (gb < 1) return `${(gb * 1024).toFixed(2)} MB`;\n return `${gb.toFixed(2)} GB`;\n}\n","import type { Command } from 'commander';\nimport { platformFetch } from '../../lib/api/platform.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport { trackDiagnose, shutdownAnalytics } from '../../lib/analytics.js';\n\ninterface MetricDataPoint {\n timestamp: number;\n value: number;\n}\n\ninterface MetricSeries {\n metric: string;\n instance_id: string;\n data: MetricDataPoint[];\n}\n\ninterface MetricsResponse {\n project_id: string;\n range: string;\n metrics: MetricSeries[];\n _meta?: { requested_at: string; query_time_ms: number; cached: boolean };\n}\n\nconst METRIC_LABELS: Record<string, string> = {\n cpu_usage: 'CPU Usage',\n memory_usage: 'Memory Usage',\n disk_usage: 'Disk Usage',\n network_in: 'Network In',\n network_out: 'Network Out',\n};\n\nconst NETWORK_METRICS = new Set(['network_in', 'network_out']);\n\nfunction formatValue(metric: string, value: number): string {\n if (NETWORK_METRICS.has(metric)) {\n return formatBytes(value) + '/s';\n }\n return `${value.toFixed(1)}%`;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes.toFixed(1)} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction computeStats(data: MetricDataPoint[]): { latest: number; avg: number; max: number } {\n if (data.length === 0) return { latest: 0, avg: 0, max: 0 };\n const latest = data[data.length - 1].value;\n let sum = 0;\n let max = -Infinity;\n for (const d of data) {\n sum += d.value;\n if (d.value > max) max = d.value;\n }\n return { latest, avg: sum / data.length, max };\n}\n\n/**\n * Aggregate multiple series of the same metric (e.g. multiple network interfaces)\n * into a single series per metric name. Network metrics are summed; others take the first series.\n */\nfunction aggregateByMetric(series: MetricSeries[]): MetricSeries[] {\n const grouped = new Map<string, MetricSeries[]>();\n for (const s of series) {\n const existing = grouped.get(s.metric);\n if (existing) existing.push(s);\n else grouped.set(s.metric, [s]);\n }\n\n const result: MetricSeries[] = [];\n for (const [metric, group] of grouped) {\n if (group.length === 1 || !NETWORK_METRICS.has(metric)) {\n result.push(group[0]);\n continue;\n }\n // Sum network metrics across interfaces by matching timestamps\n const tsMap = new Map<number, number>();\n for (const s of group) {\n for (const d of s.data) {\n tsMap.set(d.timestamp, (tsMap.get(d.timestamp) ?? 0) + d.value);\n }\n }\n const merged: MetricDataPoint[] = [...tsMap.entries()]\n .sort((a, b) => a[0] - b[0])\n .map(([timestamp, value]) => ({ timestamp, value }));\n result.push({ metric, instance_id: 'aggregate', data: merged });\n }\n return result;\n}\n\nexport async function fetchMetricsSummary(\n projectId: string,\n apiUrl?: string,\n): Promise<MetricsResponse> {\n const res = await platformFetch(`/projects/v1/${projectId}/metrics?range=1h`, {}, apiUrl);\n return (await res.json()) as MetricsResponse;\n}\n\nexport function registerDiagnoseMetricsCommand(diagnoseCmd: Command): void {\n diagnoseCmd\n .command('metrics')\n .description('Display EC2 instance metrics (CPU, memory, disk, network)')\n .option('--range <range>', 'Time range: 1h, 6h, 24h, 7d', '1h')\n .option('--metrics <list>', 'Comma-separated metrics to query')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n if (config.project_id === 'oss-project') {\n throw new CLIError(\n 'Metrics requires InsForge Platform login. Not available when linked via --api-key.',\n );\n }\n trackDiagnose('metrics', config);\n\n const params = new URLSearchParams({ range: opts.range });\n if (opts.metrics) params.set('metrics', opts.metrics);\n\n const res = await platformFetch(\n `/projects/v1/${config.project_id}/metrics?${params.toString()}`,\n {},\n apiUrl,\n );\n const data = (await res.json()) as MetricsResponse;\n\n const aggregated = aggregateByMetric(data.metrics);\n\n if (json) {\n const enriched = {\n ...data,\n metrics: aggregated.map((m) => {\n const stats = computeStats(m.data);\n return { ...m, latest: stats.latest, avg: stats.avg, max: stats.max };\n }),\n };\n outputJson(enriched);\n } else {\n if (!aggregated.length) {\n console.log('No metrics data available.');\n return;\n }\n const headers = ['Metric', 'Latest', 'Avg', 'Max', 'Range'];\n const rows = aggregated.map((m) => {\n const stats = computeStats(m.data);\n return [\n METRIC_LABELS[m.metric] ?? m.metric,\n formatValue(m.metric, stats.latest),\n formatValue(m.metric, stats.avg),\n formatValue(m.metric, stats.max),\n data.range,\n ];\n });\n outputTable(headers, rows);\n }\n await reportCliUsage('cli.diagnose.metrics', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose.metrics', false);\n handleError(err, json);\n } finally {\n await shutdownAnalytics();\n }\n });\n}\n","import type { Command } from 'commander';\nimport { platformFetch } from '../../lib/api/platform.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport { trackDiagnose, shutdownAnalytics } from '../../lib/analytics.js';\n\n\ninterface AdvisorScanSummary {\n scanId: string;\n status: string;\n scanType: string;\n scannedAt: string;\n summary: { total: number; critical: number; warning: number; info: number };\n collectorErrors: { collector: string; error: string; timestamp: string }[];\n}\n\ninterface AdvisorIssue {\n id: string;\n ruleId: string;\n severity: string;\n category: string;\n title: string;\n description: string;\n affectedObject: string;\n recommendation: string;\n isResolved: boolean;\n}\n\ninterface AdvisorIssuesResponse {\n issues: AdvisorIssue[];\n total: number;\n}\n\nexport async function fetchAdvisorSummary(\n projectId: string,\n apiUrl?: string,\n): Promise<AdvisorScanSummary> {\n const res = await platformFetch(`/projects/v1/${projectId}/advisor/latest`, {}, apiUrl);\n return (await res.json()) as AdvisorScanSummary;\n}\n\nexport function registerDiagnoseAdvisorCommand(diagnoseCmd: Command): void {\n diagnoseCmd\n .command('advisor')\n .description('Display latest advisor scan results and issues')\n .option('--severity <level>', 'Filter by severity: critical, warning, info')\n .option('--category <cat>', 'Filter by category: security, performance, health')\n .option('--limit <n>', 'Maximum number of issues to return', '50')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n if (config.project_id === 'oss-project') {\n throw new CLIError(\n 'Advisor requires InsForge Platform login. Not available when linked via --api-key.',\n );\n }\n trackDiagnose('advisor', config);\n\n const projectId = config.project_id;\n\n // Fetch scan summary\n const scanRes = await platformFetch(\n `/projects/v1/${projectId}/advisor/latest`,\n {},\n apiUrl,\n );\n const scan = (await scanRes.json()) as AdvisorScanSummary;\n\n // Fetch issues\n const issueParams = new URLSearchParams();\n if (opts.severity) issueParams.set('severity', opts.severity);\n if (opts.category) issueParams.set('category', opts.category);\n issueParams.set('limit', opts.limit);\n\n const issuesRes = await platformFetch(\n `/projects/v1/${projectId}/advisor/latest/issues?${issueParams.toString()}`,\n {},\n apiUrl,\n );\n const issuesData = (await issuesRes.json()) as AdvisorIssuesResponse;\n\n if (json) {\n outputJson({ scan, issues: issuesData.issues });\n } else {\n // Scan summary line\n const date = new Date(scan.scannedAt).toLocaleDateString();\n const s = scan.summary;\n console.log(\n `Scan: ${date} (${scan.status}) — ${s.critical} critical, ${s.warning} warning, ${s.info} info\\n`,\n );\n\n if (!issuesData.issues || issuesData.issues.length === 0) {\n console.log('No issues found.');\n return;\n }\n\n const headers = ['Severity', 'Category', 'Affected Object', 'Title'];\n const rows = issuesData.issues.map((issue) => [\n issue.severity,\n issue.category,\n issue.affectedObject,\n issue.title,\n ]);\n outputTable(headers, rows);\n }\n await reportCliUsage('cli.diagnose.advisor', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose.advisor', false);\n handleError(err, json);\n } finally {\n await shutdownAnalytics();\n }\n });\n}\n","import type { Command } from 'commander';\nimport { runRawSql } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport { trackDiagnose, shutdownAnalytics } from '../../lib/analytics.js';\n\ninterface DbCheck {\n label: string;\n sql: string;\n format: (rows: Record<string, unknown>[]) => void;\n}\n\nconst DB_CHECKS: Record<string, DbCheck> = {\n connections: {\n label: 'Connections',\n sql: `SELECT\n (SELECT count(*) FROM pg_stat_activity WHERE state IS NOT NULL) AS active,\n (SELECT setting::int FROM pg_settings WHERE name = 'max_connections') AS max`,\n format(rows) {\n const r = rows[0] ?? {};\n console.log(` Active: ${r.active} / ${r.max}`);\n },\n },\n 'slow-queries': {\n label: 'Slow Queries (>5s)',\n sql: `SELECT pid, now() - query_start AS duration, substring(query for 80) AS query\n FROM pg_stat_activity\n WHERE state = 'active' AND now() - query_start > interval '5 seconds'\n ORDER BY query_start ASC`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' None');\n return;\n }\n const headers = ['PID', 'Duration', 'Query'];\n const tableRows = rows.map((r) => [\n String(r.pid ?? ''),\n String(r.duration ?? ''),\n String(r.query ?? ''),\n ]);\n outputTable(headers, tableRows);\n },\n },\n bloat: {\n label: 'Table Bloat (top 10)',\n sql: `SELECT schemaname || '.' || relname AS table, n_dead_tup AS dead_tuples\n FROM pg_stat_user_tables\n ORDER BY n_dead_tup DESC\n LIMIT 10`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' No user tables found.');\n return;\n }\n const headers = ['Table', 'Dead Tuples'];\n const tableRows = rows.map((r) => [\n String(r.table ?? ''),\n String(r.dead_tuples ?? 0),\n ]);\n outputTable(headers, tableRows);\n },\n },\n size: {\n label: 'Table Sizes (top 10)',\n sql: `SELECT schemaname || '.' || relname AS table,\n pg_size_pretty(pg_total_relation_size(relid)) AS size\n FROM pg_stat_user_tables\n ORDER BY pg_total_relation_size(relid) DESC\n LIMIT 10`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' No user tables found.');\n return;\n }\n const headers = ['Table', 'Size'];\n const tableRows = rows.map((r) => [\n String(r.table ?? ''),\n String(r.size ?? ''),\n ]);\n outputTable(headers, tableRows);\n },\n },\n 'index-usage': {\n label: 'Index Usage (worst 10)',\n sql: `SELECT schemaname || '.' || relname AS table, idx_scan, seq_scan,\n CASE WHEN (idx_scan + seq_scan) > 0\n THEN round(100.0 * idx_scan / (idx_scan + seq_scan), 1)\n ELSE 0 END AS idx_ratio\n FROM pg_stat_user_tables\n WHERE (idx_scan + seq_scan) > 0\n ORDER BY idx_ratio ASC\n LIMIT 10`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' No scan data available.');\n return;\n }\n const headers = ['Table', 'Index Scans', 'Seq Scans', 'Index Ratio'];\n const tableRows = rows.map((r) => [\n String(r.table ?? ''),\n String(r.idx_scan ?? 0),\n String(r.seq_scan ?? 0),\n `${r.idx_ratio ?? 0}%`,\n ]);\n outputTable(headers, tableRows);\n },\n },\n locks: {\n label: 'Waiting Locks',\n sql: `SELECT pid, mode, relation::regclass AS relation, granted\n FROM pg_locks\n WHERE NOT granted`,\n format(rows) {\n if (rows.length === 0) {\n console.log(' None');\n return;\n }\n const headers = ['PID', 'Mode', 'Relation', 'Granted'];\n const tableRows = rows.map((r) => [\n String(r.pid ?? ''),\n String(r.mode ?? ''),\n String(r.relation ?? ''),\n String(r.granted ?? ''),\n ]);\n outputTable(headers, tableRows);\n },\n },\n 'cache-hit': {\n label: 'Cache Hit Ratio',\n sql: `SELECT CASE WHEN sum(heap_blks_hit + heap_blks_read) > 0\n THEN round(100.0 * sum(heap_blks_hit) / sum(heap_blks_hit + heap_blks_read), 1)\n ELSE 0 END AS ratio\n FROM pg_statio_user_tables`,\n format(rows) {\n const ratio = rows[0]?.ratio ?? 0;\n console.log(` ${ratio}%`);\n },\n },\n};\n\nconst ALL_CHECKS = Object.keys(DB_CHECKS);\n\nexport async function runDbChecks(): Promise<Record<string, Record<string, unknown>[]>> {\n const results: Record<string, Record<string, unknown>[]> = {};\n for (const key of ALL_CHECKS) {\n try {\n const { rows } = await runRawSql(DB_CHECKS[key].sql, true);\n results[key] = rows;\n } catch {\n results[key] = [];\n }\n }\n return results;\n}\n\nexport function registerDiagnoseDbCommand(diagnoseCmd: Command): void {\n diagnoseCmd\n .command('db')\n .description('Run database health checks (connections, bloat, index usage, etc.)')\n .option('--check <checks>', 'Comma-separated checks: ' + ALL_CHECKS.join(', '), 'all')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n trackDiagnose('db', config);\n\n const checkNames =\n opts.check === 'all'\n ? ALL_CHECKS\n : (opts.check as string).split(',').map((s: string) => s.trim());\n\n const results: Record<string, Record<string, unknown>[]> = {};\n\n for (const name of checkNames) {\n const check = DB_CHECKS[name];\n if (!check) {\n console.error(`Unknown check: ${name}. Available: ${ALL_CHECKS.join(', ')}`);\n continue;\n }\n try {\n const { rows } = await runRawSql(check.sql, true);\n results[name] = rows;\n } catch (err) {\n results[name] = [];\n if (!json) {\n console.error(` Failed to run ${name}: ${err instanceof Error ? err.message : err}`);\n }\n }\n }\n\n if (json) {\n outputJson(results);\n } else {\n for (const name of checkNames) {\n const check = DB_CHECKS[name];\n if (!check) continue;\n console.log(`\\n── ${check.label} ${'─'.repeat(Math.max(0, 40 - check.label.length))}`);\n check.format(results[name] ?? []);\n }\n console.log('');\n }\n await reportCliUsage('cli.diagnose.db', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose.db', false);\n handleError(err, json);\n } finally {\n await shutdownAnalytics();\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport { trackDiagnose, shutdownAnalytics } from '../../lib/analytics.js';\n\nconst LOG_SOURCES = ['insforge.logs', 'postgREST.logs', 'postgres.logs', 'function.logs', 'function-deploy.logs'] as const;\n\nconst ERROR_PATTERN = /\\b(error|fatal|panic)\\b/i;\n\n/** Maps source names to their API paths. Most use /api/logs/{source}, but some have custom paths. */\nconst SOURCE_PATH: Record<string, string> = {\n 'function-deploy.logs': '/api/logs/functions/build-logs',\n};\n\ninterface LogEntry {\n timestamp: string;\n message: string;\n source: string;\n}\n\ninterface SourceSummary {\n source: string;\n total: number;\n errors: LogEntry[];\n}\n\nfunction parseLogEntry(entry: unknown): { ts: string; msg: string } {\n if (typeof entry === 'string') {\n return { ts: '', msg: entry };\n }\n const e = entry as Record<string, unknown>;\n const ts = String(e.timestamp ?? e.time ?? '');\n const msg = String(e.message ?? e.msg ?? e.log ?? JSON.stringify(e));\n return { ts, msg };\n}\n\nfunction getLogPath(source: string, limit: number): string {\n const custom = SOURCE_PATH[source];\n if (custom) return `${custom}?limit=${limit}`;\n return `/api/logs/${encodeURIComponent(source)}?limit=${limit}`;\n}\n\nasync function fetchSourceLogs(source: string, limit: number): Promise<SourceSummary> {\n const res = await ossFetch(getLogPath(source, limit));\n const data = await res.json();\n const logs = Array.isArray(data) ? data : ((data as Record<string, unknown>).logs as unknown[]) ?? [];\n\n const errors: LogEntry[] = [];\n for (const entry of logs) {\n const { ts, msg } = parseLogEntry(entry);\n if (ERROR_PATTERN.test(msg)) {\n errors.push({ timestamp: ts, message: msg, source });\n }\n }\n\n return { source, total: logs.length, errors };\n}\n\nexport async function fetchLogsSummary(limit = 100): Promise<SourceSummary[]> {\n const results: SourceSummary[] = [];\n for (const source of LOG_SOURCES) {\n try {\n results.push(await fetchSourceLogs(source, limit));\n } catch {\n results.push({ source, total: 0, errors: [] });\n }\n }\n return results;\n}\n\nexport function registerDiagnoseLogsCommand(diagnoseCmd: Command): void {\n diagnoseCmd\n .command('logs')\n .description('Aggregate error-level logs from all backend sources')\n .option('--source <name>', 'Specific log source to check')\n .option('--limit <n>', 'Number of log entries per source', '100')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n await requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n trackDiagnose('logs', config);\n\n const limit = parseInt(opts.limit, 10) || 100;\n const sources = opts.source ? [opts.source as string] : [...LOG_SOURCES];\n\n const summaries: SourceSummary[] = [];\n for (const source of sources) {\n try {\n summaries.push(await fetchSourceLogs(source, limit));\n } catch {\n summaries.push({ source, total: 0, errors: [] });\n }\n }\n\n if (json) {\n outputJson({ sources: summaries });\n } else {\n // Summary table\n const headers = ['Source', 'Total', 'Errors'];\n const rows = summaries.map((s) => [s.source, String(s.total), String(s.errors.length)]);\n outputTable(headers, rows);\n\n // Error details\n const allErrors = summaries.flatMap((s) => s.errors);\n if (allErrors.length > 0) {\n console.log('\\n── Error Details ' + '─'.repeat(30));\n for (const err of allErrors) {\n const prefix = err.timestamp ? `[${err.source}] ${err.timestamp}` : `[${err.source}]`;\n console.log(`\\n ${prefix}`);\n console.log(` ${err.message}`);\n }\n console.log('');\n }\n }\n await reportCliUsage('cli.diagnose.logs', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose.logs', false);\n handleError(err, json);\n } finally {\n await shutdownAnalytics();\n }\n });\n}\n","import type { Command } from 'commander';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { outputJson } from '../../lib/output.js';\nimport { reportCliUsage } from '../../lib/skills.js';\nimport { trackDiagnose, shutdownAnalytics } from '../../lib/analytics.js';\n\nimport { fetchMetricsSummary, registerDiagnoseMetricsCommand } from './metrics.js';\nimport { fetchAdvisorSummary, registerDiagnoseAdvisorCommand } from './advisor.js';\nimport { runDbChecks, registerDiagnoseDbCommand } from './db.js';\nimport { fetchLogsSummary, registerDiagnoseLogsCommand } from './logs.js';\n\nfunction sectionHeader(title: string): string {\n return `── ${title} ${'─'.repeat(Math.max(0, 44 - title.length))}`;\n}\n\nexport function registerDiagnoseCommands(diagnoseCmd: Command): void {\n // Comprehensive report (no subcommand)\n diagnoseCmd\n .description('Backend diagnostics — run with no subcommand for a full health report')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n await requireAuth(apiUrl);\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const projectId = config.project_id;\n const projectName = config.project_name;\n const ossMode = config.project_id === 'oss-project';\n\n // Track diagnose usage in PostHog\n trackDiagnose('report', config);\n\n // In OSS mode (linked via --api-key), skip Platform API calls (metrics/advisor)\n const metricsPromise = ossMode\n ? Promise.reject(new Error('Platform login required (linked via --api-key)'))\n : fetchMetricsSummary(projectId, apiUrl);\n const advisorPromise = ossMode\n ? Promise.reject(new Error('Platform login required (linked via --api-key)'))\n : fetchAdvisorSummary(projectId, apiUrl);\n\n const [metricsResult, advisorResult, dbResult, logsResult] = await Promise.allSettled([\n metricsPromise,\n advisorPromise,\n runDbChecks(),\n fetchLogsSummary(100),\n ]);\n\n if (json) {\n const report: Record<string, unknown> = { project: projectName, errors: [] };\n const errors: string[] = [];\n\n if (metricsResult.status === 'fulfilled') {\n const data = metricsResult.value;\n report.metrics = data.metrics.map((m) => {\n if (m.data.length === 0) return { metric: m.metric, latest: null, avg: null, max: null };\n let sum = 0;\n let max = -Infinity;\n for (const d of m.data) {\n sum += d.value;\n if (d.value > max) max = d.value;\n }\n return {\n metric: m.metric,\n latest: m.data[m.data.length - 1].value,\n avg: sum / m.data.length,\n max,\n };\n });\n } else {\n report.metrics = null;\n errors.push(metricsResult.reason?.message ?? 'Metrics unavailable');\n }\n\n if (advisorResult.status === 'fulfilled') {\n report.advisor = advisorResult.value;\n } else {\n report.advisor = null;\n errors.push(advisorResult.reason?.message ?? 'Advisor unavailable');\n }\n\n if (dbResult.status === 'fulfilled') {\n report.db = dbResult.value;\n } else {\n report.db = null;\n errors.push(dbResult.reason?.message ?? 'DB checks unavailable');\n }\n\n if (logsResult.status === 'fulfilled') {\n report.logs = logsResult.value;\n } else {\n report.logs = null;\n errors.push(logsResult.reason?.message ?? 'Logs unavailable');\n }\n\n report.errors = errors;\n outputJson(report);\n } else {\n console.log(`\\n InsForge Health Report — ${projectName}\\n`);\n\n // Metrics section\n console.log(sectionHeader('System Metrics (last 1h)'));\n if (metricsResult.status === 'fulfilled') {\n const metrics = metricsResult.value.metrics;\n if (metrics.length === 0) {\n console.log(' No metrics data available.');\n } else {\n const vals: Record<string, number> = {};\n for (const m of metrics) {\n if (m.data.length > 0) vals[m.metric] = m.data[m.data.length - 1].value;\n }\n const cpu = vals.cpu_usage !== undefined ? `${vals.cpu_usage.toFixed(1)}%` : 'N/A';\n const mem = vals.memory_usage !== undefined ? `${vals.memory_usage.toFixed(1)}%` : 'N/A';\n const disk = vals.disk_usage !== undefined ? `${vals.disk_usage.toFixed(1)}%` : 'N/A';\n const netIn = vals.network_in !== undefined ? formatBytesCompact(vals.network_in) + '/s' : 'N/A';\n const netOut = vals.network_out !== undefined ? formatBytesCompact(vals.network_out) + '/s' : 'N/A';\n console.log(` CPU: ${cpu} Memory: ${mem}`);\n console.log(` Disk: ${disk} Network: ↓${netIn} ↑${netOut}`);\n }\n } else {\n console.log(` N/A — ${metricsResult.reason?.message ?? 'unavailable'}`);\n }\n\n // Advisor section\n console.log('\\n' + sectionHeader('Advisor Scan'));\n if (advisorResult.status === 'fulfilled') {\n const scan = advisorResult.value;\n const s = scan.summary;\n const date = new Date(scan.scannedAt).toLocaleDateString();\n console.log(` ${date} (${scan.status}) — ${s.critical} critical · ${s.warning} warning · ${s.info} info`);\n } else {\n console.log(` N/A — ${advisorResult.reason?.message ?? 'unavailable'}`);\n }\n\n // DB section\n console.log('\\n' + sectionHeader('Database'));\n if (dbResult.status === 'fulfilled') {\n const db = dbResult.value;\n const conn = db.connections?.[0] as Record<string, unknown> | undefined;\n const cache = db['cache-hit']?.[0] as Record<string, unknown> | undefined;\n const deadTuples = (db.bloat ?? []).reduce(\n (sum: number, r: Record<string, unknown>) => sum + (Number(r.dead_tuples) || 0),\n 0,\n );\n const lockCount = (db.locks ?? []).length;\n\n console.log(\n ` Connections: ${conn?.active ?? '?'}/${conn?.max ?? '?'} Cache Hit: ${cache?.ratio ?? '?'}%`,\n );\n console.log(\n ` Dead tuples: ${deadTuples.toLocaleString()} Locks waiting: ${lockCount}`,\n );\n } else {\n console.log(` N/A — ${dbResult.reason?.message ?? 'unavailable'}`);\n }\n\n // Logs section\n console.log('\\n' + sectionHeader('Recent Errors (last 100 logs/source)'));\n if (logsResult.status === 'fulfilled') {\n const summaries = logsResult.value;\n const parts = summaries.map((s) => `${s.source}: ${s.errors.length}`);\n console.log(` ${parts.join(' ')}`);\n } else {\n console.log(` N/A — ${logsResult.reason?.message ?? 'unavailable'}`);\n }\n\n console.log('');\n }\n await reportCliUsage('cli.diagnose', true);\n } catch (err) {\n await reportCliUsage('cli.diagnose', false);\n handleError(err, json);\n } finally {\n await shutdownAnalytics();\n }\n });\n\n // Register subcommands\n registerDiagnoseMetricsCommand(diagnoseCmd);\n registerDiagnoseAdvisorCommand(diagnoseCmd);\n registerDiagnoseDbCommand(diagnoseCmd);\n registerDiagnoseLogsCommand(diagnoseCmd);\n}\n\nfunction formatBytesCompact(bytes: number): string {\n if (bytes < 1024) return `${bytes.toFixed(0)}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n"],"mappings":"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","names":["readFileSync","join","clack","clack","URL","URL","resolve","clack","path","password","program","password","program","program","orgsCmd","clack","projectsCmd","clack","existsSync","readFileSync","join","clack","join","existsSync","readFileSync","program","projectConfig","path","dbCmd","dbCmd","dbCmd","dbCmd","dbCmd","dbCmd","dbCmd","writeFileSync","dbCmd","writeFileSync","readFileSync","dbCmd","readFileSync","recordsCmd","path","recordsCmd","recordsCmd","recordsCmd","functionsCmd","readFileSync","existsSync","join","functionsCmd","join","existsSync","readFileSync","functionsCmd","text","functionsCmd","clack","functionsCmd","storageCmd","readFileSync","existsSync","basename","storageCmd","existsSync","readFileSync","basename","writeFileSync","join","basename","storageCmd","join","basename","writeFileSync","storageCmd","clack","storageCmd","confirm","storageCmd","exec","promisify","fs","path","clack","path","fs","clack","resolve","deploymentsCmd","execAsync","promisify","exec","buildOssHost","program","s","stat","program","program","deploymentsCmd","deploymentsCmd","clack","deploymentsCmd","deploymentsCmd","program","path","secretsCmd","secretsCmd","secretsCmd","secretsCmd","clack","secretsCmd","confirm","schedulesCmd","schedulesCmd","schedulesCmd","schedulesCmd","clack","schedulesCmd","confirm","schedulesCmd","program","program","formatSize","diagnoseCmd","diagnoseCmd","diagnoseCmd","SOURCE_PATH","getLogPath","diagnoseCmd","diagnoseCmd","readFileSync","join"]}
|