@cockpit-ai/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/init.ts","../src/ui/output.ts","../src/commands/status.ts","../src/commands/apply.ts","../src/commands/skill.ts","../src/commands/profile.ts","../src/commands/agent.ts","../src/commands/worktree.ts","../src/commands/context.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { initCommand } from \"./commands/init.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { applyCommand } from \"./commands/apply.js\";\nimport {\n skillListCommand,\n skillCreateCommand,\n skillAddCommand,\n skillRemoveCommand,\n} from \"./commands/skill.js\";\nimport {\n profileShowCommand,\n profileCreateCommand,\n profileSyncPushCommand,\n profileSyncPullCommand,\n profileExportCommand,\n profileImportCommand,\n} from \"./commands/profile.js\";\nimport {\n agentListCommand,\n agentSpawnCommand,\n agentStopCommand,\n agentStatusCommand,\n} from \"./commands/agent.js\";\nimport {\n worktreeCreateCommand,\n worktreeListCommand,\n worktreeStatusCommand,\n worktreeAssignCommand,\n worktreeCleanCommand,\n} from \"./commands/worktree.js\";\nimport {\n contextShowCommand,\n contextAddCommand,\n contextGenerateCommand,\n} from \"./commands/context.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"cockpit\")\n .description(\"AI-first Development Environment Orchestrator\")\n .version(\"0.0.1\");\n\n// ─── init ──────────────────────────────────────────────────────────────────\n\nprogram\n .command(\"init [path]\")\n .description(\"Initialize a Cockpit workspace or project\")\n .option(\"--project\", \"Initialize as a project config (instead of workspace)\")\n .action(async (path: string | undefined, opts) => {\n try {\n await initCommand(path, { project: opts.project as boolean | undefined });\n } catch (err) {\n console.error(\"Error:\", err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\n// ─── status ────────────────────────────────────────────────────────────────\n\nprogram\n .command(\"status [path]\")\n .description(\"Show current Cockpit environment status\")\n .action(async (path: string | undefined) => {\n try {\n await statusCommand(path);\n } catch (err) {\n console.error(\"Error:\", err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\n// ─── apply ─────────────────────────────────────────────────────────────────\n\nprogram\n .command(\"apply\")\n .description(\"Apply Cockpit config to AI tools in the current project\")\n .option(\"--adapter <name>\", \"Apply only to a specific adapter\")\n .option(\"--clean\", \"Remove cockpit-managed files instead of applying\")\n .action(async (opts) => {\n try {\n await applyCommand({\n adapter: opts.adapter as string | undefined,\n clean: opts.clean as boolean | undefined,\n });\n } catch (err) {\n console.error(\"Error:\", err instanceof Error ? err.message : err);\n process.exit(1);\n }\n });\n\n// ─── skill ─────────────────────────────────────────────────────────────────\n\nconst skillCmd = program\n .command(\"skill\")\n .description(\"Manage Cockpit skills\");\n\nskillCmd\n .command(\"list\")\n .description(\"List all available skills\")\n .action(async () => {\n try { await skillListCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nskillCmd\n .command(\"create <name>\")\n .description(\"Scaffold a new skill from template\")\n .action(async (name: string) => {\n try { await skillCreateCommand(name); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nskillCmd\n .command(\"add <path>\")\n .description(\"Add a skill from a local file\")\n .action(async (path: string) => {\n try { await skillAddCommand(path); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nskillCmd\n .command(\"remove <name>\")\n .description(\"Remove a skill\")\n .action(async (name: string) => {\n try { await skillRemoveCommand(name); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\n// ─── profile ───────────────────────────────────────────────────────────────\n\nconst profileCmd = program\n .command(\"profile\")\n .description(\"Manage your personal Cockpit profile\");\n\nprofileCmd\n .command(\"show\")\n .description(\"Display current profile info\")\n .action(async () => {\n try { await profileShowCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nprofileCmd\n .command(\"create\")\n .description(\"Create a new profile interactively\")\n .action(async () => {\n try { await profileCreateCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nconst syncCmd = profileCmd\n .command(\"sync\")\n .description(\"Sync profile with remote git repository\");\n\nsyncCmd\n .command(\"push\")\n .description(\"Push profile to remote\")\n .action(async () => {\n try { await profileSyncPushCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nsyncCmd\n .command(\"pull\")\n .description(\"Pull profile from remote\")\n .action(async () => {\n try { await profileSyncPullCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nprofileCmd\n .command(\"export [file]\")\n .description(\"Export profile to a single YAML file\")\n .action(async (file: string | undefined) => {\n try { await profileExportCommand(file); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nprofileCmd\n .command(\"import <file>\")\n .description(\"Import profile from a YAML export file\")\n .action(async (file: string) => {\n try { await profileImportCommand(file); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\n// ─── agent ─────────────────────────────────────────────────────────────────\n\nconst agentCmd = program\n .command(\"agent\")\n .description(\"Manage Cockpit agents\");\n\nagentCmd\n .command(\"list\")\n .description(\"List available agents\")\n .action(async () => {\n try { await agentListCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nagentCmd\n .command(\"spawn <name>\")\n .description(\"Spawn an agent\")\n .action(async (name: string) => {\n try { await agentSpawnCommand(name); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nagentCmd\n .command(\"stop <name>\")\n .description(\"Stop a running agent\")\n .action(async (name: string) => {\n try { await agentStopCommand(name); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nagentCmd\n .command(\"status\")\n .description(\"Show agent status dashboard\")\n .action(async () => {\n try { await agentStatusCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\n// ─── worktree ──────────────────────────────────────────────────────────────\n\nconst worktreeCmd = program\n .command(\"worktree\")\n .description(\"Manage git worktrees\");\n\nworktreeCmd\n .command(\"create <branch>\")\n .description(\"Create a new worktree\")\n .option(\"--repo <path>\", \"Path to git repo (default: cwd)\")\n .option(\"--path <path>\", \"Where to create the worktree\")\n .action(async (branch: string, opts) => {\n try { await worktreeCreateCommand(branch, { repo: opts.repo as string | undefined, path: opts.path as string | undefined }); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nworktreeCmd\n .command(\"list\")\n .description(\"List all worktrees\")\n .action(async () => {\n try { await worktreeListCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nworktreeCmd\n .command(\"status\")\n .description(\"Show worktree status dashboard\")\n .action(async () => {\n try { await worktreeStatusCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nworktreeCmd\n .command(\"assign <worktree> <agent>\")\n .description(\"Assign an agent to a worktree\")\n .action(async (wt: string, agent: string) => {\n try { await worktreeAssignCommand(wt, agent); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nworktreeCmd\n .command(\"clean\")\n .description(\"Clean up stale worktrees\")\n .action(async () => {\n try { await worktreeCleanCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\n// ─── context ───────────────────────────────────────────────────────────────\n\nconst contextCmd = program\n .command(\"context\")\n .description(\"Manage context rules\");\n\ncontextCmd\n .command(\"show\")\n .description(\"Show current merged context\")\n .action(async () => {\n try { await contextShowCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\ncontextCmd\n .command(\"add <rule>\")\n .description(\"Add a context rule\")\n .option(\"--project\", \"Add as a project-scoped rule (default: global)\")\n .option(\"--scope <scope>\", \"Rule scope: global or project\")\n .action(async (rule: string, opts) => {\n try {\n await contextAddCommand(rule, {\n scope: opts.scope as string | undefined,\n project: opts.project as boolean | undefined,\n });\n }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\ncontextCmd\n .command(\"generate\")\n .description(\"Generate adapter context files (CLAUDE.md etc.)\")\n .action(async () => {\n try { await contextGenerateCommand(); }\n catch (err) { console.error(\"Error:\", err instanceof Error ? err.message : err); process.exit(1); }\n });\n\nprogram.parse(process.argv);\n","import { mkdirSync, existsSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { COCKPIT_DIR, CONFIG_FILE } from \"@cockpit-ai/core\";\nimport { ui } from \"../ui/output.js\";\n\n// ─── Prompt Helpers ────────────────────────────────────────────────────────\n\nasync function prompt(question: string, defaultValue?: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const display = defaultValue ? `${question} (${defaultValue}): ` : `${question}: `;\n return new Promise((resolve) => {\n rl.question(display, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultValue || \"\");\n });\n });\n}\n\n// ─── Template Generators ───────────────────────────────────────────────────\n\nfunction workspaceTemplate(name: string): string {\n return `cockpit: \"1.0\"\n\nworkspace:\n name: ${name}\n default_adapter: claude-code\n\nadapters:\n - claude-code\n\ncontext:\n global:\n - \"Follow project coding conventions\"\n`;\n}\n\nfunction projectTemplate(name: string): string {\n return `cockpit: \"1.0\"\n\nproject:\n name: ${name}\n\ncontext:\n global: []\n`;\n}\n\n// ─── Init Command ──────────────────────────────────────────────────────────\n\nexport interface InitOptions {\n project?: boolean;\n}\n\nexport async function initCommand(targetPath: string | undefined, options: InitOptions): Promise<void> {\n const dir = resolve(targetPath ?? process.cwd());\n const cockpitDir = join(dir, COCKPIT_DIR);\n const configPath = join(cockpitDir, CONFIG_FILE);\n\n if (existsSync(configPath)) {\n ui.warn(`Cockpit config already exists at ${configPath}`);\n ui.info(\"Use 'cockpit status' to view the current configuration.\");\n return;\n }\n\n const isProject = options.project === true;\n const kind = isProject ? \"project\" : \"workspace\";\n\n ui.heading(`Initializing Cockpit ${kind}`);\n ui.info(`Target directory: ${dir}`);\n ui.blank();\n\n const defaultName = dir.split(\"/\").at(-1) ?? \"my-workspace\";\n const name = await prompt(`${kind} name`, defaultName);\n\n mkdirSync(cockpitDir, { recursive: true });\n\n const content = isProject ? projectTemplate(name) : workspaceTemplate(name);\n writeFileSync(configPath, content, \"utf-8\");\n\n ui.blank();\n ui.success(`Created ${configPath}`);\n ui.blank();\n ui.dim(\"Next steps:\");\n ui.dim(` cockpit status — view current environment`);\n ui.dim(` cockpit skill list — browse available skills`);\n ui.dim(` cockpit apply — apply config to AI tools`);\n}\n","import chalk from \"chalk\";\n\n// ─── Basic output helpers ──────────────────────────────────────────────────\n\nexport const ui = {\n success: (msg: string) => console.log(chalk.green(\"✓\") + \" \" + msg),\n error: (msg: string) => console.error(chalk.red(\"✗\") + \" \" + msg),\n warn: (msg: string) => console.warn(chalk.yellow(\"!\") + \" \" + msg),\n info: (msg: string) => console.log(chalk.blue(\"→\") + \" \" + msg),\n dim: (msg: string) => console.log(chalk.dim(msg)),\n heading: (msg: string) => console.log(\"\\n\" + chalk.bold(msg)),\n blank: () => console.log(),\n};\n\nexport function formatKey(key: string): string {\n return chalk.cyan(key);\n}\n\nexport function formatValue(value: string | null | undefined): string {\n if (value == null || value === \"\") return chalk.dim(\"(none)\");\n return chalk.white(value);\n}\n\nexport function formatList(items: string[]): string {\n if (items.length === 0) return chalk.dim(\"(empty)\");\n return items.map((i) => chalk.white(i)).join(\", \");\n}\n\nexport function printKeyValue(key: string, value: string | null | undefined): void {\n console.log(` ${formatKey(key.padEnd(20))} ${formatValue(value)}`);\n}\n\nexport function printKeyList(key: string, items: string[]): void {\n console.log(` ${formatKey(key.padEnd(20))} ${formatList(items)}`);\n}\n","import { resolve } from \"node:path\";\nimport chalk from \"chalk\";\nimport {\n findConfigPaths,\n resolveConfig,\n} from \"@cockpit-ai/core\";\nimport { ui, printKeyValue, printKeyList } from \"../ui/output.js\";\n\n// ─── Status Command ────────────────────────────────────────────────────────\n\nexport async function statusCommand(targetPath?: string): Promise<void> {\n const cwd = resolve(targetPath ?? process.cwd());\n const paths = findConfigPaths(cwd);\n\n if (!paths.workspacePath && !paths.projectPath) {\n ui.warn(\"No Cockpit configuration found.\");\n ui.dim(`Searched from: ${cwd}`);\n ui.blank();\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n return;\n }\n\n const config = resolveConfig(paths);\n\n ui.heading(\"Cockpit Status\");\n\n // ── Workspace ──────────────────────────────────────────────────────────\n console.log(chalk.bold(\" Workspace\"));\n printKeyValue(\"Name\", config.name);\n printKeyValue(\"Default Adapter\", config.defaultAdapter);\n printKeyList(\"Adapters\", config.adapters);\n ui.blank();\n\n // ── Paths ──────────────────────────────────────────────────────────────\n console.log(chalk.bold(\" Config Paths\"));\n printKeyValue(\"Profile\", config.profilePath);\n printKeyValue(\"Workspace\", config.workspacePath);\n printKeyValue(\"Project\", config.projectPath);\n ui.blank();\n\n // ── Preferences ────────────────────────────────────────────────────────\n console.log(chalk.bold(\" Preferences\"));\n printKeyValue(\"Language\", config.preferences.language);\n printKeyValue(\"Default Model\", config.preferences.defaultModel);\n ui.blank();\n\n // ── Context ────────────────────────────────────────────────────────────\n if (config.context.global.length > 0) {\n console.log(chalk.bold(\" Context Rules\"));\n for (const rule of config.context.global) {\n console.log(` ${chalk.dim(\"•\")} ${rule}`);\n }\n ui.blank();\n }\n\n // ── Skills & Agents ────────────────────────────────────────────────────\n if (config.skills.include.length > 0 || config.agents.include.length > 0) {\n console.log(chalk.bold(\" Resources\"));\n if (config.skills.include.length > 0) {\n printKeyList(\"Skill paths\", config.skills.include);\n }\n if (config.agents.include.length > 0) {\n printKeyList(\"Agent paths\", config.agents.include);\n }\n ui.blank();\n }\n}\n","import { resolve, join } from \"node:path\";\nimport ora from \"ora\";\nimport {\n findConfigPaths,\n resolveConfig,\n buildResolvedContext,\n COCKPIT_DIR,\n type AdapterName,\n} from \"@cockpit-ai/core\";\nimport { getAdapters } from \"@cockpit-ai/adapters\";\nimport { SkillRegistry } from \"@cockpit-ai/skills\";\nimport { ui } from \"../ui/output.js\";\n\n// ─── Apply Command ─────────────────────────────────────────────────────────\n\nexport interface ApplyOptions {\n adapter?: string;\n clean?: boolean;\n}\n\nexport async function applyCommand(options: ApplyOptions): Promise<void> {\n const cwd = resolve(process.cwd());\n const paths = findConfigPaths(cwd);\n\n if (!paths.workspacePath && !paths.projectPath) {\n ui.error(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n process.exit(1);\n }\n\n const config = resolveConfig(paths);\n\n // Determine which adapters to target\n const targetAdapterNames: AdapterName[] = options.adapter\n ? [options.adapter as AdapterName]\n : config.adapters;\n\n const adapters = getAdapters(targetAdapterNames);\n\n if (adapters.length === 0) {\n ui.warn(\"No supported adapters found.\");\n ui.dim(`Requested: ${targetAdapterNames.join(\", \")}`);\n return;\n }\n\n ui.heading(\"Cockpit Apply\");\n ui.info(`Workspace: ${config.name}`);\n ui.blank();\n\n // ── Load skills ──────────────────────────────────────────────────────────\n\n const skillDirs = config.skills.include.map((p) => {\n // Resolve relative paths against workspace root\n if (p.startsWith(\".\")) {\n const root = paths.workspacePath\n ? resolve(join(paths.workspacePath, \"..\", \"..\"))\n : cwd;\n return resolve(join(root, p));\n }\n return resolve(p);\n });\n\n // Also load from the default .cockpit/skills/ dir in workspace and project\n const workspaceRoot = paths.workspacePath ? resolve(join(paths.workspacePath, \"..\", \"..\")) : null;\n const projectRoot = paths.projectPath ? resolve(join(paths.projectPath, \"..\", \"..\")) : null;\n\n const defaultDirs = [\n workspaceRoot ? join(workspaceRoot, COCKPIT_DIR, \"skills\") : null,\n projectRoot ? join(projectRoot, COCKPIT_DIR, \"skills\") : null,\n ].filter(Boolean) as string[];\n\n const allSkillDirs = [...new Set([...defaultDirs, ...skillDirs])];\n\n const registry = new SkillRegistry();\n const loadErrors = registry.loadFromDirs(allSkillDirs);\n\n for (const { file, error } of loadErrors) {\n ui.warn(`Skipped skill ${file}: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n const skills = registry.list();\n\n // ── Build context ────────────────────────────────────────────────────────\n\n const context = buildResolvedContext(\n config.context.global,\n config.context.project,\n \"cockpit\"\n );\n\n // ── Apply to each adapter ────────────────────────────────────────────────\n\n for (const adapter of adapters) {\n const spinner = ora(`Applying to ${adapter.name}…`).start();\n\n try {\n if (options.clean) {\n await adapter.clean(cwd);\n spinner.info(`Cleaned ${adapter.name}`);\n continue;\n }\n\n // Apply context rules\n if (context.global.length > 0 || context.project.length > 0) {\n await adapter.applyContext(cwd, context);\n }\n\n // Apply each skill\n for (const skill of skills) {\n await adapter.applySkill(cwd, skill);\n }\n\n const parts: string[] = [];\n if (context.global.length + context.project.length > 0) {\n parts.push(`${context.global.length + context.project.length} context rules`);\n }\n if (skills.length > 0) {\n parts.push(`${skills.length} skill${skills.length === 1 ? \"\" : \"s\"}`);\n }\n\n spinner.succeed(\n `${adapter.name}: ${parts.length > 0 ? parts.join(\", \") : \"nothing to apply\"}`\n );\n } catch (err) {\n spinner.fail(`${adapter.name}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n ui.blank();\n}\n","import { existsSync, mkdirSync, writeFileSync, cpSync, rmSync } from \"node:fs\";\nimport { join, resolve, basename, extname } from \"node:path\";\nimport { findConfigPaths, COCKPIT_DIR } from \"@cockpit-ai/core\";\nimport { SkillRegistry, loadSkillsFromDir, defaultSkillTemplate } from \"@cockpit-ai/skills\";\nimport { ui } from \"../ui/output.js\";\nimport chalk from \"chalk\";\n\nconst SKILLS_SUBDIR = \"skills\";\n\n// ─── Helpers ───────────────────────────────────────────────────────────────\n\nfunction getSkillsDir(cockpitRoot: string): string {\n return join(cockpitRoot, COCKPIT_DIR, SKILLS_SUBDIR);\n}\n\nfunction findCockpitRoot(cwd: string): string | null {\n const paths = findConfigPaths(cwd);\n if (paths.projectPath) return resolve(join(paths.projectPath, \"..\", \"..\"));\n if (paths.workspacePath) return resolve(join(paths.workspacePath, \"..\", \"..\"));\n return null;\n}\n\nfunction collectAllSkillDirs(cwd: string): string[] {\n const paths = findConfigPaths(cwd);\n const dirs: string[] = [];\n\n if (paths.workspacePath) {\n dirs.push(getSkillsDir(resolve(join(paths.workspacePath, \"..\", \"..\"))));\n }\n if (paths.projectPath) {\n dirs.push(getSkillsDir(resolve(join(paths.projectPath, \"..\", \"..\"))));\n }\n\n return dirs;\n}\n\n// ─── skill list ────────────────────────────────────────────────────────────\n\nexport async function skillListCommand(): Promise<void> {\n const cwd = process.cwd();\n const skillDirs = collectAllSkillDirs(cwd);\n\n if (skillDirs.length === 0) {\n ui.warn(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n return;\n }\n\n const registry = new SkillRegistry();\n const errors = registry.loadFromDirs(skillDirs);\n\n for (const { file, error } of errors) {\n ui.warn(`Skipped ${file}: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n const skills = registry.list();\n\n if (skills.length === 0) {\n ui.info(\"No skills found.\");\n ui.dim(\"Use 'cockpit skill create <name>' to scaffold a new skill.\");\n return;\n }\n\n ui.heading(`Skills (${skills.length})`);\n for (const skill of skills) {\n const triggers = skill.trigger.length > 0 ? chalk.dim(` [${skill.trigger.join(\", \")}]`) : \"\";\n console.log(` ${chalk.cyan(skill.name)}@${chalk.dim(skill.version)}${triggers}`);\n if (skill.description) {\n console.log(` ${chalk.dim(skill.description)}`);\n }\n }\n ui.blank();\n}\n\n// ─── skill create ──────────────────────────────────────────────────────────\n\nexport async function skillCreateCommand(name: string): Promise<void> {\n const cwd = process.cwd();\n const cockpitRoot = findCockpitRoot(cwd);\n\n if (!cockpitRoot) {\n ui.error(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n process.exit(1);\n }\n\n const skillsDir = getSkillsDir(cockpitRoot);\n mkdirSync(skillsDir, { recursive: true });\n\n const fileName = `${name}.yaml`;\n const filePath = join(skillsDir, fileName);\n\n if (existsSync(filePath)) {\n ui.warn(`Skill '${name}' already exists at ${filePath}`);\n return;\n }\n\n const content = defaultSkillTemplate(name);\n writeFileSync(filePath, content, \"utf-8\");\n\n ui.success(`Created skill: ${filePath}`);\n ui.dim(`Edit the file, then run 'cockpit apply' to apply it to your AI tools.`);\n}\n\n// ─── skill add ─────────────────────────────────────────────────────────────\n\nexport async function skillAddCommand(source: string): Promise<void> {\n const cwd = process.cwd();\n const cockpitRoot = findCockpitRoot(cwd);\n\n if (!cockpitRoot) {\n ui.error(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n process.exit(1);\n }\n\n const sourcePath = resolve(source);\n if (!existsSync(sourcePath)) {\n ui.error(`File not found: ${sourcePath}`);\n process.exit(1);\n }\n\n const ext = extname(sourcePath);\n if (ext !== \".yaml\" && ext !== \".yml\") {\n ui.error(\"Only .yaml or .yml skill files are supported.\");\n process.exit(1);\n }\n\n const skillsDir = getSkillsDir(cockpitRoot);\n mkdirSync(skillsDir, { recursive: true });\n\n const destPath = join(skillsDir, basename(sourcePath));\n cpSync(sourcePath, destPath);\n\n ui.success(`Added skill from ${sourcePath}`);\n ui.dim(`Run 'cockpit skill list' to see all skills.`);\n}\n\n// ─── skill remove ──────────────────────────────────────────────────────────\n\nexport async function skillRemoveCommand(name: string): Promise<void> {\n const cwd = process.cwd();\n const cockpitRoot = findCockpitRoot(cwd);\n\n if (!cockpitRoot) {\n ui.error(\"No Cockpit configuration found.\");\n process.exit(1);\n }\n\n const skillsDir = getSkillsDir(cockpitRoot);\n\n const candidates = [`${name}.yaml`, `${name}.yml`];\n let removed = false;\n\n for (const fileName of candidates) {\n const filePath = join(skillsDir, fileName);\n if (existsSync(filePath)) {\n rmSync(filePath);\n ui.success(`Removed skill '${name}'`);\n removed = true;\n break;\n }\n }\n\n if (!removed) {\n ui.error(`Skill '${name}' not found in ${skillsDir}`);\n process.exit(1);\n }\n}\n","import { existsSync, mkdirSync, writeFileSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { execSync } from \"node:child_process\";\nimport { stringify as yamlStringify } from \"yaml\";\nimport {\n ProfileConfigSchema,\n WorkspaceConfigSchema,\n getProfilePath,\n getProfileDir,\n tryLoadConfig,\n findConfigPaths,\n resolveConfig,\n} from \"@cockpit-ai/core\";\nimport { ui, printKeyValue } from \"../ui/output.js\";\n\n// ─── Prompt Helpers ────────────────────────────────────────────────────────\n\nasync function prompt(question: string, defaultValue?: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const display = defaultValue ? `${question} (${defaultValue}): ` : `${question}: `;\n return new Promise((resolve) => {\n rl.question(display, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultValue || \"\");\n });\n });\n}\n\n// ─── YAML Template ────────────────────────────────────────────────────────\n\nfunction profileTemplate(opts: {\n name: string;\n language: string;\n defaultModel: string;\n defaultAdapter: string;\n}): string {\n return `cockpit: \"1.0\"\n\nprofile:\n name: ${opts.name}\n sync:\n remote: \"\"\n auto_sync: false\n\npreferences:\n language: ${opts.language}\n default_model: ${opts.defaultModel}\n default_adapter: ${opts.defaultAdapter}\n\ncontext:\n global: []\n`;\n}\n\n// ─── Git Helpers ──────────────────────────────────────────────────────────\n\nfunction runGit(args: string, cwd: string): string {\n return execSync(`git ${args}`, { cwd, stdio: \"pipe\" }).toString().trim();\n}\n\nfunction isGitRepo(dir: string): boolean {\n try {\n runGit(\"rev-parse --is-inside-work-tree\", dir);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasCommits(dir: string): boolean {\n try {\n runGit(\"rev-parse HEAD\", dir);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasRemote(dir: string): boolean {\n try {\n const remotes = runGit(\"remote\", dir);\n return remotes.trim().length > 0;\n } catch {\n return false;\n }\n}\n\n// ─── profile show ──────────────────────────────────────────────────────────\n\nexport async function profileShowCommand(): Promise<void> {\n const profilePath = getProfilePath();\n const profileDir = getProfileDir();\n\n ui.heading(\"Cockpit Profile\");\n\n printKeyValue(\"Profile dir\", profileDir);\n printKeyValue(\"Profile file\", profilePath);\n ui.blank();\n\n if (!existsSync(profilePath)) {\n ui.warn(\"No profile found.\");\n ui.info(\"Run 'cockpit profile create' to set up your profile.\");\n return;\n }\n\n const profile = tryLoadConfig(profilePath, ProfileConfigSchema);\n\n if (!profile) {\n ui.error(`Failed to load profile from ${profilePath}`);\n ui.info(\"The file may be corrupted. Run 'cockpit profile create' to recreate it.\");\n return;\n }\n\n // ── Profile identity ───────────────────────────────────────────────────\n if (profile.profile) {\n printKeyValue(\"Name\", profile.profile.name);\n\n if (profile.profile.sync) {\n const sync = profile.profile.sync;\n printKeyValue(\"Sync remote\", sync.remote ?? \"(none)\");\n printKeyValue(\"Auto sync\", sync.auto_sync ? \"yes\" : \"no\");\n }\n ui.blank();\n }\n\n // ── Preferences ────────────────────────────────────────────────────────\n if (profile.preferences) {\n ui.dim(\"Preferences\");\n printKeyValue(\"Language\", profile.preferences.language);\n printKeyValue(\"Default model\", profile.preferences.default_model);\n printKeyValue(\"Default adapter\", profile.preferences.default_adapter);\n ui.blank();\n }\n\n // ── Context rules ──────────────────────────────────────────────────────\n if (profile.context?.global && profile.context.global.length > 0) {\n ui.dim(\"Global context rules\");\n for (const rule of profile.context.global) {\n console.log(` • ${rule}`);\n }\n ui.blank();\n }\n\n // ── Git sync status ────────────────────────────────────────────────────\n const profileDirResolved = resolve(profileDir);\n if (existsSync(profileDirResolved)) {\n ui.dim(\"Sync status\");\n if (isGitRepo(profileDirResolved)) {\n printKeyValue(\"Git repo\", \"yes\");\n try {\n const branch = runGit(\"rev-parse --abbrev-ref HEAD\", profileDirResolved);\n printKeyValue(\"Branch\", branch);\n if (hasRemote(profileDirResolved)) {\n const remote = runGit(\"remote get-url origin\", profileDirResolved);\n printKeyValue(\"Remote origin\", remote);\n } else {\n printKeyValue(\"Remote origin\", \"(none)\");\n }\n } catch {\n // Non-fatal: skip detailed git info\n }\n } else {\n printKeyValue(\"Git repo\", \"no\");\n ui.dim(\" Run 'cockpit profile sync push' to initialize git sync.\");\n }\n ui.blank();\n }\n}\n\n// ─── profile create ────────────────────────────────────────────────────────\n\nexport async function profileCreateCommand(): Promise<void> {\n const profilePath = getProfilePath();\n const profileDir = getProfileDir();\n\n ui.heading(\"Create Cockpit Profile\");\n ui.info(`Profile will be saved to: ${profilePath}`);\n ui.blank();\n\n if (existsSync(profilePath)) {\n const existing = tryLoadConfig(profilePath, ProfileConfigSchema);\n const existingName = existing?.profile?.name;\n ui.warn(`A profile already exists${existingName ? ` for '${existingName}'` : \"\"}.`);\n const overwrite = await prompt(\"Overwrite? [y/N]\", \"N\");\n if (overwrite.toLowerCase() !== \"y\") {\n ui.info(\"Aborted. Existing profile unchanged.\");\n return;\n }\n ui.blank();\n }\n\n const name = await prompt(\"Your name\", process.env[\"USER\"] ?? \"\");\n const language = await prompt(\"Preferred language code (e.g. en, ko, ja)\", \"en\");\n const defaultModel = await prompt(\"Default AI model\", \"claude-sonnet-4-6\");\n const defaultAdapter = await prompt(\n \"Default adapter (claude-code, cursor, copilot, opencode)\",\n \"claude-code\"\n );\n\n const validAdapters = [\"claude-code\", \"cursor\", \"copilot\", \"opencode\"];\n if (!validAdapters.includes(defaultAdapter)) {\n ui.error(`Invalid adapter '${defaultAdapter}'. Must be one of: ${validAdapters.join(\", \")}`);\n process.exit(1);\n }\n\n mkdirSync(profileDir, { recursive: true });\n\n const content = profileTemplate({ name, language, defaultModel, defaultAdapter });\n writeFileSync(profilePath, content, \"utf-8\");\n\n ui.blank();\n ui.success(`Profile created at ${profilePath}`);\n ui.blank();\n ui.dim(\"Next steps:\");\n ui.dim(\" cockpit profile show — view your profile\");\n ui.dim(\" cockpit profile sync push — sync profile to a remote git repo\");\n ui.dim(\" cockpit status — view merged environment config\");\n}\n\n// ─── profile sync push ─────────────────────────────────────────────────────\n\nexport async function profileSyncPushCommand(): Promise<void> {\n const profilePath = getProfilePath();\n const profileDir = resolve(getProfileDir());\n\n if (!existsSync(profilePath)) {\n ui.error(\"No profile found.\");\n ui.info(\"Run 'cockpit profile create' first.\");\n process.exit(1);\n }\n\n const profile = tryLoadConfig(profilePath, ProfileConfigSchema);\n const remote = profile?.profile?.sync?.remote;\n\n ui.heading(\"Profile Sync — Push\");\n\n // Ensure profile dir exists\n mkdirSync(profileDir, { recursive: true });\n\n // Init git repo if needed\n if (!isGitRepo(profileDir)) {\n ui.info(\"Initializing git repository in profile directory...\");\n try {\n runGit(\"init\", profileDir);\n ui.success(\"Git repository initialized.\");\n } catch (err) {\n ui.error(`Failed to initialize git repo: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n }\n\n // Add remote if configured but not yet set\n if (remote && remote.trim() !== \"\") {\n try {\n const existingRemotes = runGit(\"remote\", profileDir);\n if (!existingRemotes.split(\"\\n\").includes(\"origin\")) {\n runGit(`remote add origin ${remote}`, profileDir);\n ui.success(`Remote 'origin' set to: ${remote}`);\n }\n } catch (err) {\n ui.warn(`Could not configure remote: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n // Stage all files\n try {\n runGit(\"add .\", profileDir);\n } catch (err) {\n ui.error(`Failed to stage files: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n\n // Check if there is anything to commit\n let hasChanges = false;\n try {\n const status = runGit(\"status --porcelain\", profileDir);\n hasChanges = status.trim().length > 0;\n } catch {\n hasChanges = true; // Assume there are changes if we can't check\n }\n\n if (hasChanges || !hasCommits(profileDir)) {\n try {\n runGit(`commit -m \"sync\"`, profileDir);\n ui.success(\"Committed profile changes.\");\n } catch (err) {\n // Commit may fail if nothing to commit (e.g., after a clean add)\n const msg = err instanceof Error ? err.message : String(err);\n if (!msg.includes(\"nothing to commit\")) {\n ui.error(`Failed to commit: ${msg}`);\n process.exit(1);\n } else {\n ui.info(\"Nothing new to commit.\");\n }\n }\n } else {\n ui.info(\"Nothing new to commit.\");\n }\n\n // Push to remote\n if (remote && remote.trim() !== \"\") {\n ui.info(`Pushing to remote: ${remote}`);\n try {\n // Determine current branch name\n let branch = \"main\";\n try {\n branch = runGit(\"rev-parse --abbrev-ref HEAD\", profileDir);\n } catch {\n // Fallback to \"main\"\n }\n runGit(`push -u origin ${branch}`, profileDir);\n ui.success(\"Profile pushed to remote.\");\n } catch (err) {\n ui.error(`Push failed: ${err instanceof Error ? err.message : String(err)}`);\n ui.dim(\"Ensure the remote is accessible and you have push permissions.\");\n process.exit(1);\n }\n } else {\n ui.warn(\"No remote configured in profile.sync.remote — skipping push.\");\n ui.dim(\"Edit your profile and add a 'sync.remote' URL, then run this command again.\");\n }\n\n ui.blank();\n}\n\n// ─── profile sync pull ─────────────────────────────────────────────────────\n\nexport async function profileSyncPullCommand(): Promise<void> {\n const profilePath = getProfilePath();\n const profileDir = resolve(getProfileDir());\n\n ui.heading(\"Profile Sync — Pull\");\n\n // Load profile to get remote (if profile exists)\n const profile = tryLoadConfig(profilePath, ProfileConfigSchema);\n const remote = profile?.profile?.sync?.remote;\n\n if (!existsSync(profileDir) || !isGitRepo(profileDir)) {\n // Profile dir doesn't exist or isn't a git repo\n if (remote && remote.trim() !== \"\") {\n ui.info(`Cloning profile from remote: ${remote}`);\n try {\n // Clone into the parent, targeting profileDir name\n const parentDir = resolve(profileDir, \"..\");\n const dirName = profileDir.split(\"/\").at(-1) ?? \".cockpit\";\n mkdirSync(parentDir, { recursive: true });\n execSync(`git clone ${remote} ${dirName}`, { cwd: parentDir, stdio: \"pipe\" });\n ui.success(\"Profile cloned from remote.\");\n } catch (err) {\n ui.error(`Clone failed: ${err instanceof Error ? err.message : String(err)}`);\n ui.dim(`Remote: ${remote}`);\n process.exit(1);\n }\n } else {\n ui.error(\"Profile directory is not a git repository and no remote is configured.\");\n ui.info(\"Run 'cockpit profile create' and configure 'sync.remote' first.\");\n process.exit(1);\n }\n } else {\n // It is already a git repo — pull\n if (!hasRemote(profileDir)) {\n ui.error(\"No git remote configured in the profile directory.\");\n if (remote && remote.trim() !== \"\") {\n ui.info(\"Adding remote from profile config...\");\n try {\n runGit(`remote add origin ${remote}`, profileDir);\n ui.success(`Remote 'origin' set to: ${remote}`);\n } catch (err) {\n ui.error(`Failed to add remote: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n } else {\n ui.dim(\"Set 'sync.remote' in your profile.yaml and try again.\");\n process.exit(1);\n }\n }\n\n ui.info(\"Pulling latest changes from remote...\");\n try {\n runGit(\"pull\", profileDir);\n ui.success(\"Profile updated from remote.\");\n } catch (err) {\n ui.error(`Pull failed: ${err instanceof Error ? err.message : String(err)}`);\n ui.dim(\"Check your network connection and remote access permissions.\");\n process.exit(1);\n }\n }\n\n ui.blank();\n ui.dim(\"Run 'cockpit profile show' to view the updated profile.\");\n ui.blank();\n}\n\n// ─── profile export ────────────────────────────────────────────────────────\n\nexport async function profileExportCommand(outputFile?: string): Promise<void> {\n const profilePath = getProfilePath();\n const cwd = process.cwd();\n const outPath = resolve(outputFile ?? \"cockpit-profile-export.yaml\");\n\n ui.heading(\"Profile Export\");\n\n if (!existsSync(profilePath)) {\n ui.error(\"No profile found.\");\n ui.info(\"Run 'cockpit profile create' first.\");\n process.exit(1);\n }\n\n // Load profile\n const profile = tryLoadConfig(profilePath, ProfileConfigSchema);\n if (!profile) {\n ui.error(`Failed to load profile from ${profilePath}`);\n process.exit(1);\n }\n\n // Resolve merged config (profile + any workspace/project in cwd)\n const paths = findConfigPaths(cwd);\n paths.profilePath = profilePath;\n\n let workspaceConfig = null;\n if (paths.workspacePath) {\n workspaceConfig = tryLoadConfig(paths.workspacePath, WorkspaceConfigSchema);\n }\n\n const resolved = resolveConfig(paths);\n\n // Build export document\n const exportedAt = new Date().toISOString();\n\n // Reconstruct a merged profile-like object for export\n const exportDoc: Record<string, unknown> = {\n cockpit: \"1.0\",\n exported_at: exportedAt,\n };\n\n if (profile.profile) {\n exportDoc[\"profile\"] = profile.profile;\n }\n\n // Merged preferences from resolved config\n exportDoc[\"preferences\"] = {\n language: resolved.preferences.language,\n default_model: resolved.preferences.defaultModel,\n default_adapter: resolved.defaultAdapter,\n };\n\n // Merged context\n if (resolved.context.global.length > 0 || resolved.context.project.length > 0) {\n const contextExport: Record<string, string[]> = {};\n if (resolved.context.global.length > 0) {\n contextExport[\"global\"] = resolved.context.global;\n }\n if (resolved.context.project.length > 0) {\n contextExport[\"project\"] = resolved.context.project;\n }\n exportDoc[\"context\"] = contextExport;\n }\n\n // Include workspace info if present\n if (workspaceConfig?.workspace) {\n exportDoc[\"workspace\"] = workspaceConfig.workspace;\n }\n\n // Include adapters list\n if (resolved.adapters.length > 0) {\n exportDoc[\"adapters\"] = resolved.adapters;\n }\n\n // Serialize\n const header = `# Cockpit Profile Export — generated by cockpit profile export\\n`;\n const body = yamlStringify(exportDoc, { lineWidth: 0 });\n\n writeFileSync(outPath, header + body, \"utf-8\");\n\n ui.blank();\n ui.success(`Exported to: ${outPath}`);\n ui.blank();\n ui.dim(`Profile: ${profilePath}`);\n if (paths.workspacePath) {\n ui.dim(`Workspace: ${paths.workspacePath}`);\n }\n ui.dim(`Exported at: ${exportedAt}`);\n ui.blank();\n}\n\n// ─── profile import ────────────────────────────────────────────────────────\n\nexport async function profileImportCommand(inputFile: string): Promise<void> {\n const inputPath = resolve(inputFile);\n const profilePath = getProfilePath();\n const profileDir = getProfileDir();\n\n ui.heading(\"Profile Import\");\n ui.info(`Importing from: ${inputPath}`);\n ui.blank();\n\n if (!existsSync(inputPath)) {\n ui.error(`Import file not found: ${inputPath}`);\n process.exit(1);\n }\n\n // Read and parse the export file\n let rawContent = \"\";\n try {\n rawContent = readFileSync(inputPath, \"utf-8\");\n } catch (err) {\n ui.error(`Failed to read file: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n\n let parsed: unknown = null;\n try {\n const { parse: parseYaml } = await import(\"yaml\");\n parsed = parseYaml(rawContent);\n } catch (err) {\n ui.error(`Invalid YAML in import file: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n\n // Validate that it looks like an export file\n if (typeof parsed !== \"object\" || parsed === null) {\n ui.error(\"Import file does not contain a valid Cockpit export document.\");\n process.exit(1);\n }\n\n const doc = parsed as Record<string, unknown>;\n\n if (doc[\"cockpit\"] === undefined) {\n ui.warn(\"Import file does not have a 'cockpit' version field. Proceeding with caution.\");\n }\n\n // Warn about overwriting existing profile\n if (existsSync(profilePath)) {\n const existing = tryLoadConfig(profilePath, ProfileConfigSchema);\n const existingName = existing?.profile?.name;\n ui.warn(`An existing profile${existingName ? ` for '${existingName}'` : \"\"} will be overwritten.`);\n const overwrite = await prompt(\"Continue? [y/N]\", \"N\");\n if (overwrite.toLowerCase() !== \"y\") {\n ui.info(\"Aborted. Existing profile unchanged.\");\n return;\n }\n ui.blank();\n }\n\n // Build a profile.yaml from the import\n const profileDoc: Record<string, unknown> = {\n cockpit: doc[\"cockpit\"] ?? \"1.0\",\n };\n\n if (doc[\"profile\"] !== undefined) {\n profileDoc[\"profile\"] = doc[\"profile\"];\n }\n\n if (doc[\"preferences\"] !== undefined) {\n profileDoc[\"preferences\"] = doc[\"preferences\"];\n }\n\n if (doc[\"context\"] !== undefined) {\n profileDoc[\"context\"] = doc[\"context\"];\n }\n\n // Validate the resulting profile document\n const profileResult = ProfileConfigSchema.safeParse(profileDoc);\n if (!profileResult.success) {\n ui.error(\"Import file does not contain a valid profile configuration:\");\n for (const issue of profileResult.error.issues) {\n ui.dim(` ${issue.path.join(\".\")}: ${issue.message}`);\n }\n process.exit(1);\n }\n\n // Write the profile\n mkdirSync(profileDir, { recursive: true });\n const profileYaml = yamlStringify(profileDoc, { lineWidth: 0 });\n writeFileSync(profilePath, profileYaml, \"utf-8\");\n\n ui.success(`Profile imported to: ${profilePath}`);\n\n // Optionally inform about workspace config in the export\n if (doc[\"workspace\"] !== undefined && doc[\"adapters\"] !== undefined) {\n ui.blank();\n ui.info(\"The export file also contains workspace configuration.\");\n ui.dim(\"Workspace settings were NOT imported (they belong in .cockpit/config.yaml).\");\n ui.dim(\"Run 'cockpit init' in your workspace to create a workspace config.\");\n }\n\n ui.blank();\n ui.dim(\"Run 'cockpit profile show' to verify the imported profile.\");\n ui.blank();\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { AgentRegistry, setAgentStatus, getAgentStatus, readAgentState } from \"@cockpit-ai/agents\";\nimport { findConfigPaths, COCKPIT_DIR } from \"@cockpit-ai/core\";\nimport { ui } from \"../ui/output.js\";\nimport chalk from \"chalk\";\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction collectAgentDirs(cwd: string): string[] {\n const paths = findConfigPaths(cwd);\n const dirs: string[] = [];\n\n if (paths.workspacePath) {\n dirs.push(join(resolve(join(paths.workspacePath, \"..\", \"..\")), COCKPIT_DIR, \"agents\"));\n }\n if (paths.projectPath) {\n dirs.push(join(resolve(join(paths.projectPath, \"..\", \"..\")), COCKPIT_DIR, \"agents\"));\n }\n\n return dirs;\n}\n\nfunction statusColor(status: string): string {\n switch (status) {\n case \"running\":\n return chalk.green(status);\n case \"stopped\":\n return chalk.dim(status);\n case \"error\":\n return chalk.red(status);\n default:\n return chalk.cyan(status);\n }\n}\n\n// ─── agent list ─────────────────────────────────────────────────────────────\n\nexport async function agentListCommand(): Promise<void> {\n const cwd = process.cwd();\n const agentDirs = collectAgentDirs(cwd);\n\n if (agentDirs.length === 0) {\n ui.warn(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n return;\n }\n\n const registry = new AgentRegistry();\n const errors = registry.loadFromDirs(agentDirs);\n\n for (const { file, error } of errors) {\n ui.warn(`Skipped ${file}: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n const agents = registry.list();\n\n if (agents.length === 0) {\n ui.info(\"No agents found.\");\n ui.dim(\"Add agent YAML files to a .cockpit/agents/ directory.\");\n return;\n }\n\n ui.heading(`Agents (${agents.length})`);\n for (const agent of agents) {\n const currentStatus = getAgentStatus(agent.name);\n console.log(\n ` ${chalk.cyan(agent.name)} ${chalk.dim(\"·\")} ${statusColor(currentStatus)}`\n );\n console.log(` ${chalk.dim(\"role:\")} ${agent.role}`);\n console.log(` ${chalk.dim(\"model:\")} ${agent.model}`);\n if (agent.skills.length > 0) {\n console.log(` ${chalk.dim(\"skills:\")} ${agent.skills.join(\", \")}`);\n }\n }\n ui.blank();\n}\n\n// ─── agent spawn ─────────────────────────────────────────────────────────────\n\nexport async function agentSpawnCommand(name: string): Promise<void> {\n const cwd = process.cwd();\n const agentDirs = collectAgentDirs(cwd);\n\n if (agentDirs.length === 0) {\n ui.error(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n process.exit(1);\n }\n\n const registry = new AgentRegistry();\n registry.loadFromDirs(agentDirs);\n\n const agent = registry.get(name);\n if (!agent) {\n ui.error(`Agent '${name}' not found.`);\n ui.dim(`Run 'cockpit agent list' to see available agents.`);\n process.exit(1);\n }\n\n // Track agent intent as \"running\" in state file.\n setAgentStatus(name, \"running\");\n\n // Write Claude Code agent context file if .claude/ directory exists.\n const claudeDir = join(cwd, \".claude\");\n if (existsSync(claudeDir)) {\n const agentsDir = join(claudeDir, \"agents\");\n mkdirSync(agentsDir, { recursive: true });\n\n const contextLines: string[] = [\n `# Agent: ${agent.name}`,\n ``,\n `**Role:** ${agent.role}`,\n `**Model:** ${agent.model}`,\n ];\n\n if (agent.skills.length > 0) {\n contextLines.push(``, `## Skills`, ``);\n for (const skill of agent.skills) {\n contextLines.push(`- ${skill}`);\n }\n }\n\n if (agent.contextRules.length > 0) {\n contextLines.push(``, `## Context Rules`, ``);\n for (const rule of agent.contextRules) {\n contextLines.push(`- ${rule}`);\n }\n }\n\n if (agent.contextIncludes.length > 0) {\n contextLines.push(``, `## Context Includes`, ``);\n for (const include of agent.contextIncludes) {\n contextLines.push(`- ${include}`);\n }\n }\n\n const contextPath = join(agentsDir, `${name}.md`);\n writeFileSync(contextPath, contextLines.join(\"\\n\") + \"\\n\", \"utf-8\");\n ui.dim(`Wrote context to ${contextPath}`);\n }\n\n ui.success(`Agent '${name}' spawned.`);\n ui.dim(`Run 'cockpit agent stop ${name}' to mark it as stopped.`);\n}\n\n// ─── agent stop ──────────────────────────────────────────────────────────────\n\nexport async function agentStopCommand(name: string): Promise<void> {\n setAgentStatus(name, \"stopped\");\n ui.success(`Agent '${name}' stopped.`);\n}\n\n// ─── agent status ─────────────────────────────────────────────────────────────\n\nexport async function agentStatusCommand(): Promise<void> {\n const state = readAgentState();\n const entries = Object.entries(state.agents);\n\n if (entries.length === 0) {\n ui.info(\"No agent state recorded.\");\n ui.dim(\"Spawn an agent with 'cockpit agent spawn <name>'.\");\n return;\n }\n\n ui.heading(\"Agent Status Dashboard\");\n for (const [agentName, entry] of entries) {\n console.log(` ${chalk.cyan(agentName)}`);\n console.log(` ${chalk.dim(\"status:\")} ${statusColor(entry.status)}`);\n if (entry.startedAt) {\n console.log(` ${chalk.dim(\"started:\")} ${entry.startedAt}`);\n }\n if (entry.stoppedAt) {\n console.log(` ${chalk.dim(\"stopped:\")} ${entry.stoppedAt}`);\n }\n if (entry.pid != null) {\n console.log(` ${chalk.dim(\"pid:\")} ${entry.pid}`);\n }\n ui.blank();\n }\n}\n","import {\n WorktreeManager,\n registerWorktree,\n unregisterWorktree,\n assignAgent,\n readWorktreeState,\n getWorktreeState,\n} from \"@cockpit-ai/worktree\";\nimport { ui } from \"../ui/output.js\";\nimport chalk from \"chalk\";\nimport { resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\n// ─── worktree create ────────────────────────────────────────────────────────\n\nexport async function worktreeCreateCommand(\n branch: string,\n options: { repo?: string; path?: string }\n): Promise<void> {\n const repoPath = resolve(options.repo ?? process.cwd());\n const manager = new WorktreeManager(repoPath);\n\n try {\n const info = manager.create({\n branch,\n path: options.path ? resolve(options.path) : undefined,\n });\n registerWorktree(info.path, info.branch);\n ui.success(`Created worktree for branch ${chalk.cyan(info.branch)}`);\n ui.info(`Path: ${info.path}`);\n } catch (err) {\n ui.error(`Failed to create worktree: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n}\n\n// ─── worktree list ──────────────────────────────────────────────────────────\n\nexport async function worktreeListCommand(): Promise<void> {\n const repoPath = resolve(process.cwd());\n const manager = new WorktreeManager(repoPath);\n\n let gitWorktrees: ReturnType<WorktreeManager[\"list\"]> = [];\n try {\n gitWorktrees = manager.list();\n } catch (err) {\n ui.warn(`Could not list git worktrees: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const state = readWorktreeState();\n\n if (gitWorktrees.length === 0 && Object.keys(state.worktrees).length === 0) {\n ui.info(\"No worktrees found.\");\n return;\n }\n\n ui.heading(\"Worktrees\");\n\n // Build a combined set of paths to display\n const allPaths = new Set<string>([\n ...gitWorktrees.map((wt) => wt.path),\n ...Object.keys(state.worktrees),\n ]);\n\n // Print table header\n console.log(\n ` ${chalk.bold(\"Path\".padEnd(40))} ${chalk.bold(\"Branch\".padEnd(25))} ${chalk.bold(\"Agent\")}`\n );\n console.log(` ${chalk.dim(\"─\".repeat(80))}`);\n\n for (const path of allPaths) {\n const gitEntry = gitWorktrees.find((wt) => wt.path === path);\n const stateEntry = state.worktrees[path];\n const branch = gitEntry?.branch ?? stateEntry?.branch ?? chalk.dim(\"(unknown)\");\n const agent = stateEntry?.assignedAgent ?? chalk.dim(\"(none)\");\n const mainTag = gitEntry?.isMain ? chalk.dim(\" [main]\") : \"\";\n\n const truncatedPath = path.length > 39 ? \"...\" + path.slice(path.length - 36) : path;\n console.log(\n ` ${chalk.cyan(truncatedPath.padEnd(40))} ${chalk.white(branch.padEnd(25))}${mainTag} ${chalk.yellow(agent)}`\n );\n }\n\n ui.blank();\n}\n\n// ─── worktree status ────────────────────────────────────────────────────────\n\nexport async function worktreeStatusCommand(): Promise<void> {\n const state = readWorktreeState();\n const entries = Object.values(state.worktrees);\n\n if (entries.length === 0) {\n ui.info(\"No tracked worktrees in Cockpit state.\");\n ui.dim(\"Use 'cockpit worktree create <branch>' to create one.\");\n return;\n }\n\n ui.heading(`Worktree Status (${entries.length})`);\n\n for (const entry of entries) {\n const exists = existsSync(entry.path);\n const statusMark = exists ? chalk.green(\"active\") : chalk.red(\"missing\");\n console.log(` ${chalk.cyan(entry.branch)} ${chalk.dim(\"—\")} ${statusMark}`);\n console.log(` ${chalk.dim(\"Path:\")} ${entry.path}`);\n console.log(` ${chalk.dim(\"Agent:\")} ${entry.assignedAgent ?? chalk.dim(\"(none)\")}`);\n console.log(` ${chalk.dim(\"Created:\")} ${entry.createdAt}`);\n ui.blank();\n }\n}\n\n// ─── worktree assign ────────────────────────────────────────────────────────\n\nexport async function worktreeAssignCommand(\n worktreePath: string,\n agentName: string\n): Promise<void> {\n const resolvedPath = resolve(worktreePath);\n\n const existing = getWorktreeState(resolvedPath);\n if (!existing) {\n ui.error(`Worktree not found in state: ${resolvedPath}`);\n ui.dim(\"Use 'cockpit worktree list' to see tracked worktrees.\");\n process.exit(1);\n }\n\n try {\n assignAgent(resolvedPath, agentName);\n ui.success(\n `Assigned agent ${chalk.yellow(agentName)} to worktree ${chalk.cyan(existing.branch)}`\n );\n } catch (err) {\n ui.error(`Failed to assign agent: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n}\n\n// ─── worktree clean ─────────────────────────────────────────────────────────\n\nexport async function worktreeCleanCommand(): Promise<void> {\n const repoPath = resolve(process.cwd());\n const manager = new WorktreeManager(repoPath);\n\n // Prune stale git worktree refs\n try {\n manager.prune();\n ui.info(\"Pruned stale git worktree references.\");\n } catch (err) {\n ui.warn(\n `git worktree prune failed: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n\n // Remove entries from state where path no longer exists\n const state = readWorktreeState();\n const staleEntries = Object.values(state.worktrees).filter(\n (entry) => !existsSync(entry.path)\n );\n\n if (staleEntries.length === 0) {\n ui.info(\"No stale worktree entries to clean.\");\n return;\n }\n\n for (const entry of staleEntries) {\n unregisterWorktree(entry.path);\n ui.success(`Removed stale entry: ${chalk.cyan(entry.branch)} (${entry.path})`);\n }\n\n ui.blank();\n ui.dim(`Cleaned ${staleEntries.length} stale entry${staleEntries.length === 1 ? \"\" : \"ies\"}.`);\n}\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { ContextManager, contextSummary, buildClaudeMdSection } from \"@cockpit-ai/context\";\nimport {\n findConfigPaths,\n resolveConfig,\n buildResolvedContext,\n} from \"@cockpit-ai/core\";\nimport { ui } from \"../ui/output.js\";\nimport chalk from \"chalk\";\n\n// ─── Constants ─────────────────────────────────────────────────────────────\n\nconst COCKPIT_MARKER = \"<!-- cockpit:managed -->\";\nconst CLAUDE_MD = \"CLAUDE.md\";\n\n// ─── context show ──────────────────────────────────────────────────────────\n\nexport async function contextShowCommand(): Promise<void> {\n const cwd = resolve(process.cwd());\n const paths = findConfigPaths(cwd);\n\n if (!paths.workspacePath && !paths.projectPath) {\n ui.error(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n process.exit(1);\n }\n\n const config = resolveConfig(paths);\n const manager = new ContextManager(cwd);\n const context = manager.getResolved();\n\n ui.heading(\"Context\");\n ui.blank();\n\n // Show config sources\n console.log(chalk.bold(\"Config Sources\"));\n if (config.profilePath) {\n console.log(` ${chalk.cyan(\"profile\".padEnd(12))} ${chalk.dim(config.profilePath)}`);\n }\n if (config.workspacePath) {\n console.log(` ${chalk.cyan(\"workspace\".padEnd(12))} ${chalk.dim(config.workspacePath)}`);\n }\n if (config.projectPath) {\n console.log(` ${chalk.cyan(\"project\".padEnd(12))} ${chalk.dim(config.projectPath)}`);\n }\n ui.blank();\n\n // Show global rules\n console.log(chalk.bold(\"Global Rules\"));\n if (context.global.length === 0) {\n console.log(` ${chalk.dim(\"(none)\")}`);\n } else {\n for (const rule of context.global) {\n const source = rule.source ? chalk.dim(` [${rule.source}]`) : \"\";\n console.log(` ${chalk.white(\"-\")} ${rule.content}${source}`);\n }\n }\n ui.blank();\n\n // Show project rules\n console.log(chalk.bold(\"Project Rules\"));\n if (context.project.length === 0) {\n console.log(` ${chalk.dim(\"(none)\")}`);\n } else {\n for (const rule of context.project) {\n const source = rule.source ? chalk.dim(` [${rule.source}]`) : \"\";\n console.log(` ${chalk.white(\"-\")} ${rule.content}${source}`);\n }\n }\n ui.blank();\n\n // Show summary\n const summary = contextSummary(context);\n console.log(chalk.bold(\"Summary\"));\n console.log(` ${chalk.cyan(\"total\".padEnd(12))} ${summary.totalRules}`);\n console.log(` ${chalk.cyan(\"global\".padEnd(12))} ${summary.globalCount}`);\n console.log(` ${chalk.cyan(\"project\".padEnd(12))} ${summary.projectCount}`);\n ui.blank();\n}\n\n// ─── context add ───────────────────────────────────────────────────────────\n\nexport async function contextAddCommand(\n rule: string,\n options: { scope?: string; project?: boolean }\n): Promise<void> {\n const cwd = resolve(process.cwd());\n const paths = findConfigPaths(cwd);\n\n if (!paths.workspacePath && !paths.projectPath) {\n ui.error(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n process.exit(1);\n }\n\n // Determine scope\n const scope: \"global\" | \"project\" =\n options.project || options.scope === \"project\" ? \"project\" : \"global\";\n\n const manager = new ContextManager(cwd);\n\n try {\n manager.addRule(rule, scope);\n } catch (err) {\n ui.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n\n // Determine which file was written\n const targetPath = paths.projectPath ?? paths.workspacePath;\n\n ui.success(`Added ${scope} rule`);\n ui.dim(` Rule: ${rule}`);\n ui.dim(` Scope: ${scope}`);\n ui.dim(` File: ${targetPath}`);\n ui.blank();\n ui.info(\"Run 'cockpit context generate' to apply the context to your AI tools.\");\n}\n\n// ─── context generate ──────────────────────────────────────────────────────\n\nexport async function contextGenerateCommand(): Promise<void> {\n const cwd = resolve(process.cwd());\n const paths = findConfigPaths(cwd);\n\n if (!paths.workspacePath && !paths.projectPath) {\n ui.error(\"No Cockpit configuration found.\");\n ui.info(\"Run 'cockpit init' to initialize a workspace.\");\n process.exit(1);\n }\n\n const config = resolveConfig(paths);\n const context = buildResolvedContext(\n config.context.global,\n config.context.project,\n \"cockpit\"\n );\n\n const claudeMdPath = join(cwd, CLAUDE_MD);\n const claudeSection = buildClaudeMdSection(context);\n\n // Read existing CLAUDE.md if it exists, preserving hand-written content\n const existing = existsSync(claudeMdPath)\n ? readFileSync(claudeMdPath, \"utf-8\")\n : null;\n\n let finalContent: string;\n\n if (!existing) {\n finalContent = claudeSection;\n } else {\n // Strip existing cockpit-managed section and append fresh one\n const markerIndex = existing.indexOf(COCKPIT_MARKER);\n const base =\n markerIndex >= 0\n ? existing.slice(0, markerIndex).trimEnd()\n : existing.trimEnd();\n\n finalContent = base ? `${base}\\n\\n${claudeSection}` : claudeSection;\n }\n\n writeFileSync(claudeMdPath, finalContent, \"utf-8\");\n\n ui.heading(\"Context Generate\");\n ui.blank();\n\n const totalRules = context.global.length + context.project.length;\n\n if (totalRules === 0) {\n ui.warn(\"No context rules defined. Wrote empty cockpit section.\");\n } else {\n ui.success(`Wrote ${totalRules} context rule${totalRules === 1 ? \"\" : \"s\"} to ${CLAUDE_MD}`);\n ui.dim(` Global: ${context.global.length}`);\n ui.dim(` Project: ${context.project.length}`);\n }\n\n ui.dim(` Path: ${claudeMdPath}`);\n ui.blank();\n}\n"],"mappings":"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","names":["resolve","resolve","chalk","resolve","chalk","resolve","join","findConfigPaths","resolveConfig","COCKPIT_DIR","resolve","findConfigPaths","resolveConfig","join","COCKPIT_DIR","existsSync","mkdirSync","writeFileSync","join","resolve","findConfigPaths","COCKPIT_DIR","SkillRegistry","chalk","join","COCKPIT_DIR","findConfigPaths","resolve","SkillRegistry","mkdirSync","existsSync","writeFileSync","existsSync","mkdirSync","writeFileSync","resolve","createInterface","findConfigPaths","resolveConfig","prompt","createInterface","resolve","existsSync","mkdirSync","writeFileSync","findConfigPaths","resolveConfig","existsSync","mkdirSync","writeFileSync","join","resolve","findConfigPaths","COCKPIT_DIR","chalk","findConfigPaths","join","resolve","COCKPIT_DIR","existsSync","mkdirSync","writeFileSync","chalk","resolve","existsSync","existsSync","readFileSync","writeFileSync","join","resolve","findConfigPaths","resolveConfig","buildResolvedContext","chalk","resolve","findConfigPaths","resolveConfig","buildResolvedContext","join","existsSync","readFileSync","writeFileSync"]}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@cockpit-ai/cli",
3
+ "version": "0.1.0",
4
+ "description": "Cockpit CLI - AI-first Development Environment Orchestrator",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=20"
8
+ },
9
+ "bin": {
10
+ "cockpit": "./dist/index.js"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "main": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "dependencies": {
27
+ "chalk": "^5.3.0",
28
+ "commander": "^12.0.0",
29
+ "ora": "^8.0.0",
30
+ "yaml": "^2.4.0",
31
+ "@cockpit-ai/agents": "0.1.0",
32
+ "@cockpit-ai/context": "0.1.0",
33
+ "@cockpit-ai/core": "0.1.0",
34
+ "@cockpit-ai/adapters": "0.1.0",
35
+ "@cockpit-ai/skills": "0.1.0",
36
+ "@cockpit-ai/worktree": "0.1.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^20.0.0",
40
+ "tsup": "^8.0.0",
41
+ "typescript": "^5.5.0",
42
+ "vitest": "^2.0.0"
43
+ },
44
+ "scripts": {
45
+ "build": "tsup",
46
+ "dev": "tsup --watch",
47
+ "test": "vitest run",
48
+ "test:watch": "vitest",
49
+ "clean": "rm -rf dist"
50
+ }
51
+ }