@cockpit-ai/cli 0.1.0 β 0.1.1
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 +230 -85
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
+
import { createRequire } from "module";
|
|
5
6
|
|
|
6
7
|
// src/commands/init.ts
|
|
7
8
|
import { mkdirSync, existsSync, writeFileSync } from "fs";
|
|
@@ -42,10 +43,10 @@ function printKeyList(key, items) {
|
|
|
42
43
|
async function prompt(question, defaultValue) {
|
|
43
44
|
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
44
45
|
const display = defaultValue ? `${question} (${defaultValue}): ` : `${question}: `;
|
|
45
|
-
return new Promise((
|
|
46
|
+
return new Promise((resolve10) => {
|
|
46
47
|
rl.question(display, (answer) => {
|
|
47
48
|
rl.close();
|
|
48
|
-
|
|
49
|
+
resolve10(answer.trim() || defaultValue || "");
|
|
49
50
|
});
|
|
50
51
|
});
|
|
51
52
|
}
|
|
@@ -160,18 +161,77 @@ import ora from "ora";
|
|
|
160
161
|
import {
|
|
161
162
|
findConfigPaths as findConfigPaths2,
|
|
162
163
|
resolveConfig as resolveConfig2,
|
|
163
|
-
buildResolvedContext,
|
|
164
164
|
COCKPIT_DIR as COCKPIT_DIR2
|
|
165
165
|
} from "@cockpit-ai/core";
|
|
166
166
|
import { getAdapters } from "@cockpit-ai/adapters";
|
|
167
167
|
import { SkillRegistry } from "@cockpit-ai/skills";
|
|
168
|
+
import { ContextManager } from "@cockpit-ai/context";
|
|
169
|
+
|
|
170
|
+
// src/builtins/index.ts
|
|
171
|
+
var CONTEXT_UPDATE_PROMPT = `# Update Cockpit Context
|
|
172
|
+
|
|
173
|
+
Analyze the current project and update the Cockpit context files in \`.cockpit/context/\`.
|
|
174
|
+
|
|
175
|
+
## Steps
|
|
176
|
+
|
|
177
|
+
1. **Inspect the project** to understand its tech stack, conventions, and architecture:
|
|
178
|
+
- Read \`package.json\`, \`tsconfig.json\`, \`README.md\` (if they exist)
|
|
179
|
+
- Look at directory structure and key source files
|
|
180
|
+
- Identify: language, framework, test runner, code style preferences
|
|
181
|
+
|
|
182
|
+
2. **Update \`.cockpit/context/\` files** with your findings:
|
|
183
|
+
- \`conventions.md\` \u2014 coding conventions, style rules, naming patterns
|
|
184
|
+
- \`architecture.md\` \u2014 project architecture, key modules, design decisions
|
|
185
|
+
- Create additional files as needed (e.g. \`testing.md\`, \`api.md\`)
|
|
186
|
+
- Use frontmatter \`scope: global\` or \`scope: project\` as appropriate
|
|
187
|
+
|
|
188
|
+
## File Format
|
|
189
|
+
|
|
190
|
+
\`\`\`markdown
|
|
191
|
+
---
|
|
192
|
+
scope: global
|
|
193
|
+
---
|
|
194
|
+
Your context rules here. Be specific and actionable.
|
|
195
|
+
\`\`\`
|
|
196
|
+
|
|
197
|
+
## Guidelines
|
|
198
|
+
|
|
199
|
+
- Be specific and actionable \u2014 "Use TypeScript strict mode" is better than "Use TypeScript"
|
|
200
|
+
- One file per topic; content within a file can be as long as needed
|
|
201
|
+
- Prefer \`scope: global\` for language/style rules
|
|
202
|
+
- Use \`scope: project\` for project-specific architecture or conventions
|
|
203
|
+
- Remove outdated rules when the project evolves
|
|
204
|
+
- \`cockpit watch\` auto-applies changes \u2014 no need to run \`cockpit apply\` manually`;
|
|
205
|
+
var CONTEXT_UPDATE_SKILL = {
|
|
206
|
+
name: "cockpit-context-update",
|
|
207
|
+
version: "builtin",
|
|
208
|
+
description: "Analyze project and update Cockpit context files",
|
|
209
|
+
trigger: ["/cockpit-context-update"],
|
|
210
|
+
prompt: CONTEXT_UPDATE_PROMPT,
|
|
211
|
+
tools: [],
|
|
212
|
+
sourcePath: "builtin",
|
|
213
|
+
adapterConfig: {
|
|
214
|
+
"claude-code": { type: "command" },
|
|
215
|
+
cursor: { type: "rule" },
|
|
216
|
+
opencode: { type: "command" }
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
var STANDING_INSTRUCTION = `Proactively maintain \`.cockpit/context/\` as you work:
|
|
220
|
+
- Discover a coding pattern \u2192 update or create the relevant \`.md\` file
|
|
221
|
+
- Understand the architecture better \u2192 update \`architecture.md\`
|
|
222
|
+
- Notice an outdated rule \u2192 remove or correct it
|
|
223
|
+
- Organise by topic using subdirectories (e.g. \`testing/vitest.md\`, \`frontend/react.md\`)
|
|
224
|
+
- \`cockpit watch\` auto-applies all changes \u2014 just write the files.`;
|
|
225
|
+
function getBuiltinSkills() {
|
|
226
|
+
return [CONTEXT_UPDATE_SKILL];
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// src/commands/apply.ts
|
|
168
230
|
async function applyCommand(options) {
|
|
169
231
|
const cwd = resolve3(process.cwd());
|
|
170
232
|
const paths = findConfigPaths2(cwd);
|
|
171
233
|
if (!paths.workspacePath && !paths.projectPath) {
|
|
172
|
-
|
|
173
|
-
ui.info("Run 'cockpit init' to initialize a workspace.");
|
|
174
|
-
process.exit(1);
|
|
234
|
+
throw new Error("No Cockpit configuration found. Run 'cockpit init' to initialize a workspace.");
|
|
175
235
|
}
|
|
176
236
|
const config = resolveConfig2(paths);
|
|
177
237
|
const targetAdapterNames = options.adapter ? [options.adapter] : config.adapters;
|
|
@@ -203,12 +263,16 @@ async function applyCommand(options) {
|
|
|
203
263
|
for (const { file, error } of loadErrors) {
|
|
204
264
|
ui.warn(`Skipped skill ${file}: ${error instanceof Error ? error.message : String(error)}`);
|
|
205
265
|
}
|
|
206
|
-
const skills = registry.list();
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
266
|
+
const skills = [...registry.list(), ...getBuiltinSkills()];
|
|
267
|
+
const contextManager = new ContextManager(cwd);
|
|
268
|
+
const baseContext = contextManager.getResolved();
|
|
269
|
+
const context = {
|
|
270
|
+
...baseContext,
|
|
271
|
+
global: [
|
|
272
|
+
...baseContext.global,
|
|
273
|
+
{ content: STANDING_INSTRUCTION, scope: "global", source: "cockpit-builtin" }
|
|
274
|
+
]
|
|
275
|
+
};
|
|
212
276
|
for (const adapter of adapters) {
|
|
213
277
|
const spinner = ora(`Applying to ${adapter.name}\u2026`).start();
|
|
214
278
|
try {
|
|
@@ -240,30 +304,101 @@ async function applyCommand(options) {
|
|
|
240
304
|
ui.blank();
|
|
241
305
|
}
|
|
242
306
|
|
|
307
|
+
// src/commands/watch.ts
|
|
308
|
+
import { watch, existsSync as existsSync2 } from "fs";
|
|
309
|
+
import { resolve as resolve4, join as join3 } from "path";
|
|
310
|
+
import { findConfigPaths as findConfigPaths3 } from "@cockpit-ai/core";
|
|
311
|
+
async function watchCommand() {
|
|
312
|
+
const cwd = resolve4(process.cwd());
|
|
313
|
+
const paths = findConfigPaths3(cwd);
|
|
314
|
+
if (!paths.workspacePath && !paths.projectPath) {
|
|
315
|
+
ui.error("No Cockpit configuration found.");
|
|
316
|
+
ui.info("Run 'cockpit init' to initialize a workspace.");
|
|
317
|
+
process.exit(1);
|
|
318
|
+
}
|
|
319
|
+
const watchDirs = [];
|
|
320
|
+
if (paths.workspacePath) {
|
|
321
|
+
const dir = resolve4(join3(paths.workspacePath, ".."));
|
|
322
|
+
if (existsSync2(dir)) watchDirs.push(dir);
|
|
323
|
+
}
|
|
324
|
+
if (paths.projectPath) {
|
|
325
|
+
const dir = resolve4(join3(paths.projectPath, ".."));
|
|
326
|
+
if (existsSync2(dir) && !watchDirs.includes(dir)) watchDirs.push(dir);
|
|
327
|
+
}
|
|
328
|
+
ui.heading("Cockpit Watch");
|
|
329
|
+
for (const dir of watchDirs) ui.dim(`Watching ${dir}`);
|
|
330
|
+
ui.blank();
|
|
331
|
+
await applyCommand({});
|
|
332
|
+
let isApplying = false;
|
|
333
|
+
let pendingApply = false;
|
|
334
|
+
let debounceTimer = null;
|
|
335
|
+
async function runApply(filename) {
|
|
336
|
+
if (isApplying) {
|
|
337
|
+
pendingApply = true;
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
isApplying = true;
|
|
341
|
+
try {
|
|
342
|
+
ui.info(`Changed: ${filename} \u2014 re-applying\u2026`);
|
|
343
|
+
await applyCommand({});
|
|
344
|
+
} catch (err) {
|
|
345
|
+
ui.error(`Apply failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
346
|
+
} finally {
|
|
347
|
+
isApplying = false;
|
|
348
|
+
if (pendingApply) {
|
|
349
|
+
pendingApply = false;
|
|
350
|
+
await runApply("(pending)");
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
const schedule = (filename) => {
|
|
355
|
+
if (debounceTimer) clearTimeout(debounceTimer);
|
|
356
|
+
debounceTimer = setTimeout(() => {
|
|
357
|
+
void runApply(filename);
|
|
358
|
+
}, 300);
|
|
359
|
+
};
|
|
360
|
+
for (const dir of watchDirs) {
|
|
361
|
+
const watcher = watch(dir, { recursive: true }, (_event, filename) => {
|
|
362
|
+
if (!filename) return;
|
|
363
|
+
if (!filename.endsWith(".yaml") && !filename.endsWith(".md")) return;
|
|
364
|
+
schedule(filename);
|
|
365
|
+
});
|
|
366
|
+
watcher.on("error", (err) => {
|
|
367
|
+
ui.error(`Watch error on ${dir}: ${err.message}`);
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
process.stdin.resume();
|
|
371
|
+
process.on("SIGINT", () => {
|
|
372
|
+
ui.blank();
|
|
373
|
+
ui.dim("Watch stopped.");
|
|
374
|
+
process.exit(0);
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
|
|
243
378
|
// src/commands/skill.ts
|
|
244
|
-
import { existsSync as
|
|
245
|
-
import { join as
|
|
246
|
-
import { findConfigPaths as
|
|
379
|
+
import { existsSync as existsSync3, mkdirSync as mkdirSync2, writeFileSync as writeFileSync2, cpSync, rmSync } from "fs";
|
|
380
|
+
import { join as join4, resolve as resolve5, basename, extname } from "path";
|
|
381
|
+
import { findConfigPaths as findConfigPaths4, COCKPIT_DIR as COCKPIT_DIR3 } from "@cockpit-ai/core";
|
|
247
382
|
import { SkillRegistry as SkillRegistry2, defaultSkillTemplate } from "@cockpit-ai/skills";
|
|
248
383
|
import chalk3 from "chalk";
|
|
249
384
|
var SKILLS_SUBDIR = "skills";
|
|
250
385
|
function getSkillsDir(cockpitRoot) {
|
|
251
|
-
return
|
|
386
|
+
return join4(cockpitRoot, COCKPIT_DIR3, SKILLS_SUBDIR);
|
|
252
387
|
}
|
|
253
388
|
function findCockpitRoot(cwd) {
|
|
254
|
-
const paths =
|
|
255
|
-
if (paths.projectPath) return
|
|
256
|
-
if (paths.workspacePath) return
|
|
389
|
+
const paths = findConfigPaths4(cwd);
|
|
390
|
+
if (paths.projectPath) return resolve5(join4(paths.projectPath, "..", ".."));
|
|
391
|
+
if (paths.workspacePath) return resolve5(join4(paths.workspacePath, "..", ".."));
|
|
257
392
|
return null;
|
|
258
393
|
}
|
|
259
394
|
function collectAllSkillDirs(cwd) {
|
|
260
|
-
const paths =
|
|
395
|
+
const paths = findConfigPaths4(cwd);
|
|
261
396
|
const dirs = [];
|
|
262
397
|
if (paths.workspacePath) {
|
|
263
|
-
dirs.push(getSkillsDir(
|
|
398
|
+
dirs.push(getSkillsDir(resolve5(join4(paths.workspacePath, "..", ".."))));
|
|
264
399
|
}
|
|
265
400
|
if (paths.projectPath) {
|
|
266
|
-
dirs.push(getSkillsDir(
|
|
401
|
+
dirs.push(getSkillsDir(resolve5(join4(paths.projectPath, "..", ".."))));
|
|
267
402
|
}
|
|
268
403
|
return dirs;
|
|
269
404
|
}
|
|
@@ -307,8 +442,8 @@ async function skillCreateCommand(name) {
|
|
|
307
442
|
const skillsDir = getSkillsDir(cockpitRoot);
|
|
308
443
|
mkdirSync2(skillsDir, { recursive: true });
|
|
309
444
|
const fileName = `${name}.yaml`;
|
|
310
|
-
const filePath =
|
|
311
|
-
if (
|
|
445
|
+
const filePath = join4(skillsDir, fileName);
|
|
446
|
+
if (existsSync3(filePath)) {
|
|
312
447
|
ui.warn(`Skill '${name}' already exists at ${filePath}`);
|
|
313
448
|
return;
|
|
314
449
|
}
|
|
@@ -325,8 +460,8 @@ async function skillAddCommand(source) {
|
|
|
325
460
|
ui.info("Run 'cockpit init' to initialize a workspace.");
|
|
326
461
|
process.exit(1);
|
|
327
462
|
}
|
|
328
|
-
const sourcePath =
|
|
329
|
-
if (!
|
|
463
|
+
const sourcePath = resolve5(source);
|
|
464
|
+
if (!existsSync3(sourcePath)) {
|
|
330
465
|
ui.error(`File not found: ${sourcePath}`);
|
|
331
466
|
process.exit(1);
|
|
332
467
|
}
|
|
@@ -337,7 +472,7 @@ async function skillAddCommand(source) {
|
|
|
337
472
|
}
|
|
338
473
|
const skillsDir = getSkillsDir(cockpitRoot);
|
|
339
474
|
mkdirSync2(skillsDir, { recursive: true });
|
|
340
|
-
const destPath =
|
|
475
|
+
const destPath = join4(skillsDir, basename(sourcePath));
|
|
341
476
|
cpSync(sourcePath, destPath);
|
|
342
477
|
ui.success(`Added skill from ${sourcePath}`);
|
|
343
478
|
ui.dim(`Run 'cockpit skill list' to see all skills.`);
|
|
@@ -353,8 +488,8 @@ async function skillRemoveCommand(name) {
|
|
|
353
488
|
const candidates = [`${name}.yaml`, `${name}.yml`];
|
|
354
489
|
let removed = false;
|
|
355
490
|
for (const fileName of candidates) {
|
|
356
|
-
const filePath =
|
|
357
|
-
if (
|
|
491
|
+
const filePath = join4(skillsDir, fileName);
|
|
492
|
+
if (existsSync3(filePath)) {
|
|
358
493
|
rmSync(filePath);
|
|
359
494
|
ui.success(`Removed skill '${name}'`);
|
|
360
495
|
removed = true;
|
|
@@ -368,8 +503,8 @@ async function skillRemoveCommand(name) {
|
|
|
368
503
|
}
|
|
369
504
|
|
|
370
505
|
// src/commands/profile.ts
|
|
371
|
-
import { existsSync as
|
|
372
|
-
import { resolve as
|
|
506
|
+
import { existsSync as existsSync4, mkdirSync as mkdirSync3, writeFileSync as writeFileSync3, readFileSync } from "fs";
|
|
507
|
+
import { resolve as resolve6 } from "path";
|
|
373
508
|
import { createInterface as createInterface2 } from "readline";
|
|
374
509
|
import { execSync } from "child_process";
|
|
375
510
|
import { stringify as yamlStringify } from "yaml";
|
|
@@ -379,16 +514,16 @@ import {
|
|
|
379
514
|
getProfilePath,
|
|
380
515
|
getProfileDir,
|
|
381
516
|
tryLoadConfig,
|
|
382
|
-
findConfigPaths as
|
|
517
|
+
findConfigPaths as findConfigPaths5,
|
|
383
518
|
resolveConfig as resolveConfig3
|
|
384
519
|
} from "@cockpit-ai/core";
|
|
385
520
|
async function prompt2(question, defaultValue) {
|
|
386
521
|
const rl = createInterface2({ input: process.stdin, output: process.stdout });
|
|
387
522
|
const display = defaultValue ? `${question} (${defaultValue}): ` : `${question}: `;
|
|
388
|
-
return new Promise((
|
|
523
|
+
return new Promise((resolve10) => {
|
|
389
524
|
rl.question(display, (answer) => {
|
|
390
525
|
rl.close();
|
|
391
|
-
|
|
526
|
+
resolve10(answer.trim() || defaultValue || "");
|
|
392
527
|
});
|
|
393
528
|
});
|
|
394
529
|
}
|
|
@@ -444,7 +579,7 @@ async function profileShowCommand() {
|
|
|
444
579
|
printKeyValue("Profile dir", profileDir);
|
|
445
580
|
printKeyValue("Profile file", profilePath);
|
|
446
581
|
ui.blank();
|
|
447
|
-
if (!
|
|
582
|
+
if (!existsSync4(profilePath)) {
|
|
448
583
|
ui.warn("No profile found.");
|
|
449
584
|
ui.info("Run 'cockpit profile create' to set up your profile.");
|
|
450
585
|
return;
|
|
@@ -478,8 +613,8 @@ async function profileShowCommand() {
|
|
|
478
613
|
}
|
|
479
614
|
ui.blank();
|
|
480
615
|
}
|
|
481
|
-
const profileDirResolved =
|
|
482
|
-
if (
|
|
616
|
+
const profileDirResolved = resolve6(profileDir);
|
|
617
|
+
if (existsSync4(profileDirResolved)) {
|
|
483
618
|
ui.dim("Sync status");
|
|
484
619
|
if (isGitRepo(profileDirResolved)) {
|
|
485
620
|
printKeyValue("Git repo", "yes");
|
|
@@ -507,7 +642,7 @@ async function profileCreateCommand() {
|
|
|
507
642
|
ui.heading("Create Cockpit Profile");
|
|
508
643
|
ui.info(`Profile will be saved to: ${profilePath}`);
|
|
509
644
|
ui.blank();
|
|
510
|
-
if (
|
|
645
|
+
if (existsSync4(profilePath)) {
|
|
511
646
|
const existing = tryLoadConfig(profilePath, ProfileConfigSchema);
|
|
512
647
|
const existingName = existing?.profile?.name;
|
|
513
648
|
ui.warn(`A profile already exists${existingName ? ` for '${existingName}'` : ""}.`);
|
|
@@ -543,8 +678,8 @@ async function profileCreateCommand() {
|
|
|
543
678
|
}
|
|
544
679
|
async function profileSyncPushCommand() {
|
|
545
680
|
const profilePath = getProfilePath();
|
|
546
|
-
const profileDir =
|
|
547
|
-
if (!
|
|
681
|
+
const profileDir = resolve6(getProfileDir());
|
|
682
|
+
if (!existsSync4(profilePath)) {
|
|
548
683
|
ui.error("No profile found.");
|
|
549
684
|
ui.info("Run 'cockpit profile create' first.");
|
|
550
685
|
process.exit(1);
|
|
@@ -626,15 +761,15 @@ async function profileSyncPushCommand() {
|
|
|
626
761
|
}
|
|
627
762
|
async function profileSyncPullCommand() {
|
|
628
763
|
const profilePath = getProfilePath();
|
|
629
|
-
const profileDir =
|
|
764
|
+
const profileDir = resolve6(getProfileDir());
|
|
630
765
|
ui.heading("Profile Sync \u2014 Pull");
|
|
631
766
|
const profile = tryLoadConfig(profilePath, ProfileConfigSchema);
|
|
632
767
|
const remote = profile?.profile?.sync?.remote;
|
|
633
|
-
if (!
|
|
768
|
+
if (!existsSync4(profileDir) || !isGitRepo(profileDir)) {
|
|
634
769
|
if (remote && remote.trim() !== "") {
|
|
635
770
|
ui.info(`Cloning profile from remote: ${remote}`);
|
|
636
771
|
try {
|
|
637
|
-
const parentDir =
|
|
772
|
+
const parentDir = resolve6(profileDir, "..");
|
|
638
773
|
const dirName = profileDir.split("/").at(-1) ?? ".cockpit";
|
|
639
774
|
mkdirSync3(parentDir, { recursive: true });
|
|
640
775
|
execSync(`git clone ${remote} ${dirName}`, { cwd: parentDir, stdio: "pipe" });
|
|
@@ -683,9 +818,9 @@ async function profileSyncPullCommand() {
|
|
|
683
818
|
async function profileExportCommand(outputFile) {
|
|
684
819
|
const profilePath = getProfilePath();
|
|
685
820
|
const cwd = process.cwd();
|
|
686
|
-
const outPath =
|
|
821
|
+
const outPath = resolve6(outputFile ?? "cockpit-profile-export.yaml");
|
|
687
822
|
ui.heading("Profile Export");
|
|
688
|
-
if (!
|
|
823
|
+
if (!existsSync4(profilePath)) {
|
|
689
824
|
ui.error("No profile found.");
|
|
690
825
|
ui.info("Run 'cockpit profile create' first.");
|
|
691
826
|
process.exit(1);
|
|
@@ -695,7 +830,7 @@ async function profileExportCommand(outputFile) {
|
|
|
695
830
|
ui.error(`Failed to load profile from ${profilePath}`);
|
|
696
831
|
process.exit(1);
|
|
697
832
|
}
|
|
698
|
-
const paths =
|
|
833
|
+
const paths = findConfigPaths5(cwd);
|
|
699
834
|
paths.profilePath = profilePath;
|
|
700
835
|
let workspaceConfig = null;
|
|
701
836
|
if (paths.workspacePath) {
|
|
@@ -746,13 +881,13 @@ async function profileExportCommand(outputFile) {
|
|
|
746
881
|
ui.blank();
|
|
747
882
|
}
|
|
748
883
|
async function profileImportCommand(inputFile) {
|
|
749
|
-
const inputPath =
|
|
884
|
+
const inputPath = resolve6(inputFile);
|
|
750
885
|
const profilePath = getProfilePath();
|
|
751
886
|
const profileDir = getProfileDir();
|
|
752
887
|
ui.heading("Profile Import");
|
|
753
888
|
ui.info(`Importing from: ${inputPath}`);
|
|
754
889
|
ui.blank();
|
|
755
|
-
if (!
|
|
890
|
+
if (!existsSync4(inputPath)) {
|
|
756
891
|
ui.error(`Import file not found: ${inputPath}`);
|
|
757
892
|
process.exit(1);
|
|
758
893
|
}
|
|
@@ -779,7 +914,7 @@ async function profileImportCommand(inputFile) {
|
|
|
779
914
|
if (doc["cockpit"] === void 0) {
|
|
780
915
|
ui.warn("Import file does not have a 'cockpit' version field. Proceeding with caution.");
|
|
781
916
|
}
|
|
782
|
-
if (
|
|
917
|
+
if (existsSync4(profilePath)) {
|
|
783
918
|
const existing = tryLoadConfig(profilePath, ProfileConfigSchema);
|
|
784
919
|
const existingName = existing?.profile?.name;
|
|
785
920
|
ui.warn(`An existing profile${existingName ? ` for '${existingName}'` : ""} will be overwritten.`);
|
|
@@ -826,19 +961,19 @@ async function profileImportCommand(inputFile) {
|
|
|
826
961
|
}
|
|
827
962
|
|
|
828
963
|
// src/commands/agent.ts
|
|
829
|
-
import { existsSync as
|
|
830
|
-
import { join as
|
|
964
|
+
import { existsSync as existsSync5, mkdirSync as mkdirSync4, writeFileSync as writeFileSync4 } from "fs";
|
|
965
|
+
import { join as join5, resolve as resolve7 } from "path";
|
|
831
966
|
import { AgentRegistry, setAgentStatus, getAgentStatus, readAgentState } from "@cockpit-ai/agents";
|
|
832
|
-
import { findConfigPaths as
|
|
967
|
+
import { findConfigPaths as findConfigPaths6, COCKPIT_DIR as COCKPIT_DIR4 } from "@cockpit-ai/core";
|
|
833
968
|
import chalk4 from "chalk";
|
|
834
969
|
function collectAgentDirs(cwd) {
|
|
835
|
-
const paths =
|
|
970
|
+
const paths = findConfigPaths6(cwd);
|
|
836
971
|
const dirs = [];
|
|
837
972
|
if (paths.workspacePath) {
|
|
838
|
-
dirs.push(
|
|
973
|
+
dirs.push(join5(resolve7(join5(paths.workspacePath, "..", "..")), COCKPIT_DIR4, "agents"));
|
|
839
974
|
}
|
|
840
975
|
if (paths.projectPath) {
|
|
841
|
-
dirs.push(
|
|
976
|
+
dirs.push(join5(resolve7(join5(paths.projectPath, "..", "..")), COCKPIT_DIR4, "agents"));
|
|
842
977
|
}
|
|
843
978
|
return dirs;
|
|
844
979
|
}
|
|
@@ -904,9 +1039,9 @@ async function agentSpawnCommand(name) {
|
|
|
904
1039
|
process.exit(1);
|
|
905
1040
|
}
|
|
906
1041
|
setAgentStatus(name, "running");
|
|
907
|
-
const claudeDir =
|
|
908
|
-
if (
|
|
909
|
-
const agentsDir =
|
|
1042
|
+
const claudeDir = join5(cwd, ".claude");
|
|
1043
|
+
if (existsSync5(claudeDir)) {
|
|
1044
|
+
const agentsDir = join5(claudeDir, "agents");
|
|
910
1045
|
mkdirSync4(agentsDir, { recursive: true });
|
|
911
1046
|
const contextLines = [
|
|
912
1047
|
`# Agent: ${agent.name}`,
|
|
@@ -932,7 +1067,7 @@ async function agentSpawnCommand(name) {
|
|
|
932
1067
|
contextLines.push(`- ${include}`);
|
|
933
1068
|
}
|
|
934
1069
|
}
|
|
935
|
-
const contextPath =
|
|
1070
|
+
const contextPath = join5(agentsDir, `${name}.md`);
|
|
936
1071
|
writeFileSync4(contextPath, contextLines.join("\n") + "\n", "utf-8");
|
|
937
1072
|
ui.dim(`Wrote context to ${contextPath}`);
|
|
938
1073
|
}
|
|
@@ -978,15 +1113,15 @@ import {
|
|
|
978
1113
|
getWorktreeState
|
|
979
1114
|
} from "@cockpit-ai/worktree";
|
|
980
1115
|
import chalk5 from "chalk";
|
|
981
|
-
import { resolve as
|
|
982
|
-
import { existsSync as
|
|
1116
|
+
import { resolve as resolve8 } from "path";
|
|
1117
|
+
import { existsSync as existsSync6 } from "fs";
|
|
983
1118
|
async function worktreeCreateCommand(branch, options) {
|
|
984
|
-
const repoPath =
|
|
1119
|
+
const repoPath = resolve8(options.repo ?? process.cwd());
|
|
985
1120
|
const manager = new WorktreeManager(repoPath);
|
|
986
1121
|
try {
|
|
987
1122
|
const info = manager.create({
|
|
988
1123
|
branch,
|
|
989
|
-
path: options.path ?
|
|
1124
|
+
path: options.path ? resolve8(options.path) : void 0
|
|
990
1125
|
});
|
|
991
1126
|
registerWorktree(info.path, info.branch);
|
|
992
1127
|
ui.success(`Created worktree for branch ${chalk5.cyan(info.branch)}`);
|
|
@@ -997,7 +1132,7 @@ async function worktreeCreateCommand(branch, options) {
|
|
|
997
1132
|
}
|
|
998
1133
|
}
|
|
999
1134
|
async function worktreeListCommand() {
|
|
1000
|
-
const repoPath =
|
|
1135
|
+
const repoPath = resolve8(process.cwd());
|
|
1001
1136
|
const manager = new WorktreeManager(repoPath);
|
|
1002
1137
|
let gitWorktrees = [];
|
|
1003
1138
|
try {
|
|
@@ -1042,7 +1177,7 @@ async function worktreeStatusCommand() {
|
|
|
1042
1177
|
}
|
|
1043
1178
|
ui.heading(`Worktree Status (${entries.length})`);
|
|
1044
1179
|
for (const entry of entries) {
|
|
1045
|
-
const exists =
|
|
1180
|
+
const exists = existsSync6(entry.path);
|
|
1046
1181
|
const statusMark = exists ? chalk5.green("active") : chalk5.red("missing");
|
|
1047
1182
|
console.log(` ${chalk5.cyan(entry.branch)} ${chalk5.dim("\u2014")} ${statusMark}`);
|
|
1048
1183
|
console.log(` ${chalk5.dim("Path:")} ${entry.path}`);
|
|
@@ -1052,7 +1187,7 @@ async function worktreeStatusCommand() {
|
|
|
1052
1187
|
}
|
|
1053
1188
|
}
|
|
1054
1189
|
async function worktreeAssignCommand(worktreePath, agentName) {
|
|
1055
|
-
const resolvedPath =
|
|
1190
|
+
const resolvedPath = resolve8(worktreePath);
|
|
1056
1191
|
const existing = getWorktreeState(resolvedPath);
|
|
1057
1192
|
if (!existing) {
|
|
1058
1193
|
ui.error(`Worktree not found in state: ${resolvedPath}`);
|
|
@@ -1070,7 +1205,7 @@ async function worktreeAssignCommand(worktreePath, agentName) {
|
|
|
1070
1205
|
}
|
|
1071
1206
|
}
|
|
1072
1207
|
async function worktreeCleanCommand() {
|
|
1073
|
-
const repoPath =
|
|
1208
|
+
const repoPath = resolve8(process.cwd());
|
|
1074
1209
|
const manager = new WorktreeManager(repoPath);
|
|
1075
1210
|
try {
|
|
1076
1211
|
manager.prune();
|
|
@@ -1082,7 +1217,7 @@ async function worktreeCleanCommand() {
|
|
|
1082
1217
|
}
|
|
1083
1218
|
const state = readWorktreeState();
|
|
1084
1219
|
const staleEntries = Object.values(state.worktrees).filter(
|
|
1085
|
-
(entry) => !
|
|
1220
|
+
(entry) => !existsSync6(entry.path)
|
|
1086
1221
|
);
|
|
1087
1222
|
if (staleEntries.length === 0) {
|
|
1088
1223
|
ui.info("No stale worktree entries to clean.");
|
|
@@ -1097,27 +1232,27 @@ async function worktreeCleanCommand() {
|
|
|
1097
1232
|
}
|
|
1098
1233
|
|
|
1099
1234
|
// src/commands/context.ts
|
|
1100
|
-
import { existsSync as
|
|
1101
|
-
import { join as
|
|
1102
|
-
import { ContextManager, contextSummary, buildClaudeMdSection } from "@cockpit-ai/context";
|
|
1235
|
+
import { existsSync as existsSync7, readFileSync as readFileSync2, writeFileSync as writeFileSync5 } from "fs";
|
|
1236
|
+
import { join as join6, resolve as resolve9 } from "path";
|
|
1237
|
+
import { ContextManager as ContextManager2, contextSummary, buildClaudeMdSection } from "@cockpit-ai/context";
|
|
1103
1238
|
import {
|
|
1104
|
-
findConfigPaths as
|
|
1239
|
+
findConfigPaths as findConfigPaths7,
|
|
1105
1240
|
resolveConfig as resolveConfig4,
|
|
1106
|
-
buildResolvedContext
|
|
1241
|
+
buildResolvedContext
|
|
1107
1242
|
} from "@cockpit-ai/core";
|
|
1108
1243
|
import chalk6 from "chalk";
|
|
1109
1244
|
var COCKPIT_MARKER = "<!-- cockpit:managed -->";
|
|
1110
1245
|
var CLAUDE_MD = "CLAUDE.md";
|
|
1111
1246
|
async function contextShowCommand() {
|
|
1112
|
-
const cwd =
|
|
1113
|
-
const paths =
|
|
1247
|
+
const cwd = resolve9(process.cwd());
|
|
1248
|
+
const paths = findConfigPaths7(cwd);
|
|
1114
1249
|
if (!paths.workspacePath && !paths.projectPath) {
|
|
1115
1250
|
ui.error("No Cockpit configuration found.");
|
|
1116
1251
|
ui.info("Run 'cockpit init' to initialize a workspace.");
|
|
1117
1252
|
process.exit(1);
|
|
1118
1253
|
}
|
|
1119
1254
|
const config = resolveConfig4(paths);
|
|
1120
|
-
const manager = new
|
|
1255
|
+
const manager = new ContextManager2(cwd);
|
|
1121
1256
|
const context = manager.getResolved();
|
|
1122
1257
|
ui.heading("Context");
|
|
1123
1258
|
ui.blank();
|
|
@@ -1160,15 +1295,15 @@ async function contextShowCommand() {
|
|
|
1160
1295
|
ui.blank();
|
|
1161
1296
|
}
|
|
1162
1297
|
async function contextAddCommand(rule, options) {
|
|
1163
|
-
const cwd =
|
|
1164
|
-
const paths =
|
|
1298
|
+
const cwd = resolve9(process.cwd());
|
|
1299
|
+
const paths = findConfigPaths7(cwd);
|
|
1165
1300
|
if (!paths.workspacePath && !paths.projectPath) {
|
|
1166
1301
|
ui.error("No Cockpit configuration found.");
|
|
1167
1302
|
ui.info("Run 'cockpit init' to initialize a workspace.");
|
|
1168
1303
|
process.exit(1);
|
|
1169
1304
|
}
|
|
1170
1305
|
const scope = options.project || options.scope === "project" ? "project" : "global";
|
|
1171
|
-
const manager = new
|
|
1306
|
+
const manager = new ContextManager2(cwd);
|
|
1172
1307
|
try {
|
|
1173
1308
|
manager.addRule(rule, scope);
|
|
1174
1309
|
} catch (err) {
|
|
@@ -1184,22 +1319,22 @@ async function contextAddCommand(rule, options) {
|
|
|
1184
1319
|
ui.info("Run 'cockpit context generate' to apply the context to your AI tools.");
|
|
1185
1320
|
}
|
|
1186
1321
|
async function contextGenerateCommand() {
|
|
1187
|
-
const cwd =
|
|
1188
|
-
const paths =
|
|
1322
|
+
const cwd = resolve9(process.cwd());
|
|
1323
|
+
const paths = findConfigPaths7(cwd);
|
|
1189
1324
|
if (!paths.workspacePath && !paths.projectPath) {
|
|
1190
1325
|
ui.error("No Cockpit configuration found.");
|
|
1191
1326
|
ui.info("Run 'cockpit init' to initialize a workspace.");
|
|
1192
1327
|
process.exit(1);
|
|
1193
1328
|
}
|
|
1194
1329
|
const config = resolveConfig4(paths);
|
|
1195
|
-
const context =
|
|
1330
|
+
const context = buildResolvedContext(
|
|
1196
1331
|
config.context.global,
|
|
1197
1332
|
config.context.project,
|
|
1198
1333
|
"cockpit"
|
|
1199
1334
|
);
|
|
1200
|
-
const claudeMdPath =
|
|
1335
|
+
const claudeMdPath = join6(cwd, CLAUDE_MD);
|
|
1201
1336
|
const claudeSection = buildClaudeMdSection(context);
|
|
1202
|
-
const existing =
|
|
1337
|
+
const existing = existsSync7(claudeMdPath) ? readFileSync2(claudeMdPath, "utf-8") : null;
|
|
1203
1338
|
let finalContent;
|
|
1204
1339
|
if (!existing) {
|
|
1205
1340
|
finalContent = claudeSection;
|
|
@@ -1226,8 +1361,10 @@ ${claudeSection}` : claudeSection;
|
|
|
1226
1361
|
}
|
|
1227
1362
|
|
|
1228
1363
|
// src/index.ts
|
|
1364
|
+
var require2 = createRequire(import.meta.url);
|
|
1365
|
+
var { version } = require2("../package.json");
|
|
1229
1366
|
var program = new Command();
|
|
1230
|
-
program.name("cockpit").description("AI-first Development Environment Orchestrator").version(
|
|
1367
|
+
program.name("cockpit").description("AI-first Development Environment Orchestrator").version(version);
|
|
1231
1368
|
program.command("init [path]").description("Initialize a Cockpit workspace or project").option("--project", "Initialize as a project config (instead of workspace)").action(async (path, opts) => {
|
|
1232
1369
|
try {
|
|
1233
1370
|
await initCommand(path, { project: opts.project });
|
|
@@ -1255,6 +1392,14 @@ program.command("apply").description("Apply Cockpit config to AI tools in the cu
|
|
|
1255
1392
|
process.exit(1);
|
|
1256
1393
|
}
|
|
1257
1394
|
});
|
|
1395
|
+
program.command("watch").description("Watch .cockpit/ for changes and auto-apply").action(async () => {
|
|
1396
|
+
try {
|
|
1397
|
+
await watchCommand();
|
|
1398
|
+
} catch (err) {
|
|
1399
|
+
console.error("Error:", err instanceof Error ? err.message : err);
|
|
1400
|
+
process.exit(1);
|
|
1401
|
+
}
|
|
1402
|
+
});
|
|
1258
1403
|
var skillCmd = program.command("skill").description("Manage Cockpit skills");
|
|
1259
1404
|
skillCmd.command("list").description("List all available skills").action(async () => {
|
|
1260
1405
|
try {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/init.ts","../src/ui/output.ts","../src/commands/status.ts","../src/commands/apply.ts","../src/builtins/index.ts","../src/commands/watch.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 { createRequire } from \"node:module\";\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\") as { version: string };\nimport { initCommand } from \"./commands/init.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { applyCommand } from \"./commands/apply.js\";\nimport { watchCommand } from \"./commands/watch.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(version);\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// βββ watch βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n\nprogram\n .command(\"watch\")\n .description(\"Watch .cockpit/ for changes and auto-apply\")\n .action(async () => {\n try {\n await watchCommand();\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 COCKPIT_DIR,\n type AdapterName,\n} from \"@cockpit-ai/core\";\nimport { getAdapters } from \"@cockpit-ai/adapters\";\nimport { SkillRegistry } from \"@cockpit-ai/skills\";\nimport { ContextManager } from \"@cockpit-ai/context\";\nimport { getBuiltinSkills, STANDING_INSTRUCTION } from \"../builtins/index.js\";\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 // process.exit λμ throw β watch λ± νΈμΆμμμ catch κ°λ₯\n throw new Error(\"No Cockpit configuration found. Run 'cockpit init' to initialize a workspace.\");\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(), ...getBuiltinSkills()];\n\n // ββ Build context (inline rules + external .md files + standing instruction)\n\n const contextManager = new ContextManager(cwd);\n const baseContext = contextManager.getResolved();\n const context = {\n ...baseContext,\n global: [\n ...baseContext.global,\n { content: STANDING_INSTRUCTION, scope: \"global\" as const, source: \"cockpit-builtin\" },\n ],\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 type { ResolvedSkill } from \"@cockpit-ai/core\";\n\n// βββ Builtin Skill: context-update ββββββββββββββββββββββββββββββββββββββββ\n\nconst CONTEXT_UPDATE_PROMPT = `# Update Cockpit Context\n\nAnalyze the current project and update the Cockpit context files in \\`.cockpit/context/\\`.\n\n## Steps\n\n1. **Inspect the project** to understand its tech stack, conventions, and architecture:\n - Read \\`package.json\\`, \\`tsconfig.json\\`, \\`README.md\\` (if they exist)\n - Look at directory structure and key source files\n - Identify: language, framework, test runner, code style preferences\n\n2. **Update \\`.cockpit/context/\\` files** with your findings:\n - \\`conventions.md\\` β coding conventions, style rules, naming patterns\n - \\`architecture.md\\` β project architecture, key modules, design decisions\n - Create additional files as needed (e.g. \\`testing.md\\`, \\`api.md\\`)\n - Use frontmatter \\`scope: global\\` or \\`scope: project\\` as appropriate\n\n## File Format\n\n\\`\\`\\`markdown\n---\nscope: global\n---\nYour context rules here. Be specific and actionable.\n\\`\\`\\`\n\n## Guidelines\n\n- Be specific and actionable β \"Use TypeScript strict mode\" is better than \"Use TypeScript\"\n- One file per topic; content within a file can be as long as needed\n- Prefer \\`scope: global\\` for language/style rules\n- Use \\`scope: project\\` for project-specific architecture or conventions\n- Remove outdated rules when the project evolves\n- \\`cockpit watch\\` auto-applies changes β no need to run \\`cockpit apply\\` manually`;\n\nconst CONTEXT_UPDATE_SKILL: ResolvedSkill = {\n name: \"cockpit-context-update\",\n version: \"builtin\",\n description: \"Analyze project and update Cockpit context files\",\n trigger: [\"/cockpit-context-update\"],\n prompt: CONTEXT_UPDATE_PROMPT,\n tools: [],\n sourcePath: \"builtin\",\n adapterConfig: {\n \"claude-code\": { type: \"command\" },\n cursor: { type: \"rule\" },\n opencode: { type: \"command\" },\n },\n};\n\n// βββ Standing instruction injected into every managed CLAUDE.md ββββββββββ\n\nexport const STANDING_INSTRUCTION = `Proactively maintain \\`.cockpit/context/\\` as you work:\n- Discover a coding pattern β update or create the relevant \\`.md\\` file\n- Understand the architecture better β update \\`architecture.md\\`\n- Notice an outdated rule β remove or correct it\n- Organise by topic using subdirectories (e.g. \\`testing/vitest.md\\`, \\`frontend/react.md\\`)\n- \\`cockpit watch\\` auto-applies all changes β just write the files.`;\n\n// βββ Exports ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n\nexport function getBuiltinSkills(): ResolvedSkill[] {\n return [CONTEXT_UPDATE_SKILL];\n}\n","import { watch, existsSync } from \"node:fs\";\nimport { resolve, join } from \"node:path\";\nimport { findConfigPaths } from \"@cockpit-ai/core\";\nimport { applyCommand } from \"./apply.js\";\nimport { ui } from \"../ui/output.js\";\n\n// βββ Watch Command ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n\nexport async function watchCommand(): 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 // Collect all .cockpit/ directories to watch\n const watchDirs: string[] = [];\n\n if (paths.workspacePath) {\n const dir = resolve(join(paths.workspacePath, \"..\"));\n if (existsSync(dir)) watchDirs.push(dir);\n }\n if (paths.projectPath) {\n const dir = resolve(join(paths.projectPath, \"..\"));\n if (existsSync(dir) && !watchDirs.includes(dir)) watchDirs.push(dir);\n }\n\n ui.heading(\"Cockpit Watch\");\n for (const dir of watchDirs) ui.dim(`Watching ${dir}`);\n ui.blank();\n\n // Run apply immediately on start\n await applyCommand({});\n\n // λμ μ€ν λ°©μ§ νλκ·Έ\n let isApplying = false;\n let pendingApply = false;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n // applyCommandλ₯Ό μμ νκ² μ€ν (μλ¬ catch, λμ μ€ν λ°©μ§)\n async function runApply(filename: string): Promise<void> {\n if (isApplying) {\n // νμ¬ μ€ν μ€μ΄λ©΄ pending νμ β μλ£ ν μ¬μ€ν\n pendingApply = true;\n return;\n }\n\n isApplying = true;\n try {\n ui.info(`Changed: ${filename} β re-applyingβ¦`);\n await applyCommand({});\n } catch (err) {\n ui.error(`Apply failed: ${err instanceof Error ? err.message : String(err)}`);\n } finally {\n isApplying = false;\n if (pendingApply) {\n pendingApply = false;\n await runApply(\"(pending)\");\n }\n }\n }\n\n const schedule = (filename: string) => {\n if (debounceTimer) clearTimeout(debounceTimer);\n // runApply λ΄λΆμμ λͺ¨λ μλ¬λ₯Ό catchνλ―λ‘ voidλ‘ μμ νκ² μ²λ¦¬\n debounceTimer = setTimeout(() => {\n void runApply(filename);\n }, 300);\n };\n\n for (const dir of watchDirs) {\n const watcher = watch(dir, { recursive: true }, (_event, filename) => {\n if (!filename) return;\n if (!filename.endsWith(\".yaml\") && !filename.endsWith(\".md\")) return;\n schedule(filename);\n });\n\n // fs.watch μλ¬ νΈλ€λ§ (μΌλΆ νλ«νΌμμ λ°μ κ°λ₯)\n watcher.on(\"error\", (err) => {\n ui.error(`Watch error on ${dir}: ${err.message}`);\n });\n }\n\n // Keep process alive\n process.stdin.resume();\n\n process.on(\"SIGINT\", () => {\n ui.blank();\n ui.dim(\"Watch stopped.\");\n process.exit(0);\n });\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","resolve","join","findConfigPaths","resolve","findConfigPaths","join","existsSync","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","ContextManager","findConfigPaths","resolveConfig","chalk","resolve","findConfigPaths","resolveConfig","ContextManager","join","existsSync","readFileSync","writeFileSync","require"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cockpit-ai/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Cockpit CLI - AI-first Development Environment Orchestrator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
"commander": "^12.0.0",
|
|
29
29
|
"ora": "^8.0.0",
|
|
30
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
31
|
"@cockpit-ai/adapters": "0.1.0",
|
|
35
|
-
"@cockpit-ai/
|
|
36
|
-
"@cockpit-ai/
|
|
32
|
+
"@cockpit-ai/core": "0.1.0",
|
|
33
|
+
"@cockpit-ai/skills": "0.1.1",
|
|
34
|
+
"@cockpit-ai/context": "0.1.0",
|
|
35
|
+
"@cockpit-ai/worktree": "0.1.0",
|
|
36
|
+
"@cockpit-ai/agents": "0.1.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^20.0.0",
|