@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 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((resolve9) => {
46
+ return new Promise((resolve10) => {
46
47
  rl.question(display, (answer) => {
47
48
  rl.close();
48
- resolve9(answer.trim() || defaultValue || "");
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
- ui.error("No Cockpit configuration found.");
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 context = buildResolvedContext(
208
- config.context.global,
209
- config.context.project,
210
- "cockpit"
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 existsSync2, mkdirSync as mkdirSync2, writeFileSync as writeFileSync2, cpSync, rmSync } from "fs";
245
- import { join as join3, resolve as resolve4, basename, extname } from "path";
246
- import { findConfigPaths as findConfigPaths3, COCKPIT_DIR as COCKPIT_DIR3 } from "@cockpit-ai/core";
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 join3(cockpitRoot, COCKPIT_DIR3, SKILLS_SUBDIR);
386
+ return join4(cockpitRoot, COCKPIT_DIR3, SKILLS_SUBDIR);
252
387
  }
253
388
  function findCockpitRoot(cwd) {
254
- const paths = findConfigPaths3(cwd);
255
- if (paths.projectPath) return resolve4(join3(paths.projectPath, "..", ".."));
256
- if (paths.workspacePath) return resolve4(join3(paths.workspacePath, "..", ".."));
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 = findConfigPaths3(cwd);
395
+ const paths = findConfigPaths4(cwd);
261
396
  const dirs = [];
262
397
  if (paths.workspacePath) {
263
- dirs.push(getSkillsDir(resolve4(join3(paths.workspacePath, "..", ".."))));
398
+ dirs.push(getSkillsDir(resolve5(join4(paths.workspacePath, "..", ".."))));
264
399
  }
265
400
  if (paths.projectPath) {
266
- dirs.push(getSkillsDir(resolve4(join3(paths.projectPath, "..", ".."))));
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 = join3(skillsDir, fileName);
311
- if (existsSync2(filePath)) {
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 = resolve4(source);
329
- if (!existsSync2(sourcePath)) {
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 = join3(skillsDir, basename(sourcePath));
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 = join3(skillsDir, fileName);
357
- if (existsSync2(filePath)) {
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 existsSync3, mkdirSync as mkdirSync3, writeFileSync as writeFileSync3, readFileSync } from "fs";
372
- import { resolve as resolve5 } from "path";
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 findConfigPaths4,
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((resolve9) => {
523
+ return new Promise((resolve10) => {
389
524
  rl.question(display, (answer) => {
390
525
  rl.close();
391
- resolve9(answer.trim() || defaultValue || "");
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 (!existsSync3(profilePath)) {
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 = resolve5(profileDir);
482
- if (existsSync3(profileDirResolved)) {
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 (existsSync3(profilePath)) {
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 = resolve5(getProfileDir());
547
- if (!existsSync3(profilePath)) {
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 = resolve5(getProfileDir());
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 (!existsSync3(profileDir) || !isGitRepo(profileDir)) {
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 = resolve5(profileDir, "..");
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 = resolve5(outputFile ?? "cockpit-profile-export.yaml");
821
+ const outPath = resolve6(outputFile ?? "cockpit-profile-export.yaml");
687
822
  ui.heading("Profile Export");
688
- if (!existsSync3(profilePath)) {
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 = findConfigPaths4(cwd);
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 = resolve5(inputFile);
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 (!existsSync3(inputPath)) {
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 (existsSync3(profilePath)) {
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 existsSync4, mkdirSync as mkdirSync4, writeFileSync as writeFileSync4 } from "fs";
830
- import { join as join4, resolve as resolve6 } from "path";
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 findConfigPaths5, COCKPIT_DIR as COCKPIT_DIR4 } from "@cockpit-ai/core";
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 = findConfigPaths5(cwd);
970
+ const paths = findConfigPaths6(cwd);
836
971
  const dirs = [];
837
972
  if (paths.workspacePath) {
838
- dirs.push(join4(resolve6(join4(paths.workspacePath, "..", "..")), COCKPIT_DIR4, "agents"));
973
+ dirs.push(join5(resolve7(join5(paths.workspacePath, "..", "..")), COCKPIT_DIR4, "agents"));
839
974
  }
840
975
  if (paths.projectPath) {
841
- dirs.push(join4(resolve6(join4(paths.projectPath, "..", "..")), COCKPIT_DIR4, "agents"));
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 = join4(cwd, ".claude");
908
- if (existsSync4(claudeDir)) {
909
- const agentsDir = join4(claudeDir, "agents");
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 = join4(agentsDir, `${name}.md`);
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 resolve7 } from "path";
982
- import { existsSync as existsSync5 } from "fs";
1116
+ import { resolve as resolve8 } from "path";
1117
+ import { existsSync as existsSync6 } from "fs";
983
1118
  async function worktreeCreateCommand(branch, options) {
984
- const repoPath = resolve7(options.repo ?? process.cwd());
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 ? resolve7(options.path) : void 0
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 = resolve7(process.cwd());
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 = existsSync5(entry.path);
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 = resolve7(worktreePath);
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 = resolve7(process.cwd());
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) => !existsSync5(entry.path)
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 existsSync6, readFileSync as readFileSync2, writeFileSync as writeFileSync5 } from "fs";
1101
- import { join as join5, resolve as resolve8 } from "path";
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 findConfigPaths6,
1239
+ findConfigPaths as findConfigPaths7,
1105
1240
  resolveConfig as resolveConfig4,
1106
- buildResolvedContext as buildResolvedContext2
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 = resolve8(process.cwd());
1113
- const paths = findConfigPaths6(cwd);
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 ContextManager(cwd);
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 = resolve8(process.cwd());
1164
- const paths = findConfigPaths6(cwd);
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 ContextManager(cwd);
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 = resolve8(process.cwd());
1188
- const paths = findConfigPaths6(cwd);
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 = buildResolvedContext2(
1330
+ const context = buildResolvedContext(
1196
1331
  config.context.global,
1197
1332
  config.context.project,
1198
1333
  "cockpit"
1199
1334
  );
1200
- const claudeMdPath = join5(cwd, CLAUDE_MD);
1335
+ const claudeMdPath = join6(cwd, CLAUDE_MD);
1201
1336
  const claudeSection = buildClaudeMdSection(context);
1202
- const existing = existsSync6(claudeMdPath) ? readFileSync2(claudeMdPath, "utf-8") : null;
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("0.0.1");
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":";;;AAAA,SAAS,eAAe;;;ACAxB,SAAS,WAAW,YAAY,qBAAqB;AACrD,SAAS,MAAM,eAAe;AAC9B,SAAS,uBAAuB;AAChC,SAAS,aAAa,mBAAmB;;;ACHzC,OAAO,WAAW;AAIX,IAAM,KAAK;AAAA,EAChB,SAAS,CAAC,QAAgB,QAAQ,IAAI,MAAM,MAAM,QAAG,IAAI,MAAM,GAAG;AAAA,EAClE,OAAO,CAAC,QAAgB,QAAQ,MAAM,MAAM,IAAI,QAAG,IAAI,MAAM,GAAG;AAAA,EAChE,MAAM,CAAC,QAAgB,QAAQ,KAAK,MAAM,OAAO,GAAG,IAAI,MAAM,GAAG;AAAA,EACjE,MAAM,CAAC,QAAgB,QAAQ,IAAI,MAAM,KAAK,QAAG,IAAI,MAAM,GAAG;AAAA,EAC9D,KAAK,CAAC,QAAgB,QAAQ,IAAI,MAAM,IAAI,GAAG,CAAC;AAAA,EAChD,SAAS,CAAC,QAAgB,QAAQ,IAAI,OAAO,MAAM,KAAK,GAAG,CAAC;AAAA,EAC5D,OAAO,MAAM,QAAQ,IAAI;AAC3B;AAEO,SAAS,UAAU,KAAqB;AAC7C,SAAO,MAAM,KAAK,GAAG;AACvB;AAEO,SAAS,YAAY,OAA0C;AACpE,MAAI,SAAS,QAAQ,UAAU,GAAI,QAAO,MAAM,IAAI,QAAQ;AAC5D,SAAO,MAAM,MAAM,KAAK;AAC1B;AAEO,SAAS,WAAW,OAAyB;AAClD,MAAI,MAAM,WAAW,EAAG,QAAO,MAAM,IAAI,SAAS;AAClD,SAAO,MAAM,IAAI,CAAC,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI;AACnD;AAEO,SAAS,cAAc,KAAa,OAAwC;AACjF,UAAQ,IAAI,KAAK,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;AACpE;AAEO,SAAS,aAAa,KAAa,OAAuB;AAC/D,UAAQ,IAAI,KAAK,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,WAAW,KAAK,CAAC,EAAE;AACnE;;;AD1BA,eAAe,OAAO,UAAkB,cAAwC;AAC9E,QAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAC3E,QAAM,UAAU,eAAe,GAAG,QAAQ,KAAK,YAAY,QAAQ,GAAG,QAAQ;AAC9E,SAAO,IAAI,QAAQ,CAACA,aAAY;AAC9B,OAAG,SAAS,SAAS,CAAC,WAAW;AAC/B,SAAG,MAAM;AACT,MAAAA,SAAQ,OAAO,KAAK,KAAK,gBAAgB,EAAE;AAAA,IAC7C,CAAC;AAAA,EACH,CAAC;AACH;AAIA,SAAS,kBAAkB,MAAsB;AAC/C,SAAO;AAAA;AAAA;AAAA,UAGC,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd;AAEA,SAAS,gBAAgB,MAAsB;AAC7C,SAAO;AAAA;AAAA;AAAA,UAGC,IAAI;AAAA;AAAA;AAAA;AAAA;AAKd;AAQA,eAAsB,YAAY,YAAgC,SAAqC;AACrG,QAAM,MAAM,QAAQ,cAAc,QAAQ,IAAI,CAAC;AAC/C,QAAM,aAAa,KAAK,KAAK,WAAW;AACxC,QAAM,aAAa,KAAK,YAAY,WAAW;AAE/C,MAAI,WAAW,UAAU,GAAG;AAC1B,OAAG,KAAK,oCAAoC,UAAU,EAAE;AACxD,OAAG,KAAK,yDAAyD;AACjE;AAAA,EACF;AAEA,QAAM,YAAY,QAAQ,YAAY;AACtC,QAAM,OAAO,YAAY,YAAY;AAErC,KAAG,QAAQ,wBAAwB,IAAI,EAAE;AACzC,KAAG,KAAK,qBAAqB,GAAG,EAAE;AAClC,KAAG,MAAM;AAET,QAAM,cAAc,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK;AAC7C,QAAM,OAAO,MAAM,OAAO,GAAG,IAAI,SAAS,WAAW;AAErD,YAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAEzC,QAAM,UAAU,YAAY,gBAAgB,IAAI,IAAI,kBAAkB,IAAI;AAC1E,gBAAc,YAAY,SAAS,OAAO;AAE1C,KAAG,MAAM;AACT,KAAG,QAAQ,WAAW,UAAU,EAAE;AAClC,KAAG,MAAM;AACT,KAAG,IAAI,aAAa;AACpB,KAAG,IAAI,0DAAqD;AAC5D,KAAG,IAAI,yDAAoD;AAC3D,KAAG,IAAI,0DAAqD;AAC9D;;;AEvFA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,YAAW;AAClB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAKP,eAAsB,cAAc,YAAoC;AACtE,QAAM,MAAMC,SAAQ,cAAc,QAAQ,IAAI,CAAC;AAC/C,QAAM,QAAQ,gBAAgB,GAAG;AAEjC,MAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa;AAC9C,OAAG,KAAK,iCAAiC;AACzC,OAAG,IAAI,kBAAkB,GAAG,EAAE;AAC9B,OAAG,MAAM;AACT,OAAG,KAAK,+CAA+C;AACvD;AAAA,EACF;AAEA,QAAM,SAAS,cAAc,KAAK;AAElC,KAAG,QAAQ,gBAAgB;AAG3B,UAAQ,IAAIC,OAAM,KAAK,aAAa,CAAC;AACrC,gBAAc,QAAQ,OAAO,IAAI;AACjC,gBAAc,mBAAmB,OAAO,cAAc;AACtD,eAAa,YAAY,OAAO,QAAQ;AACxC,KAAG,MAAM;AAGT,UAAQ,IAAIA,OAAM,KAAK,gBAAgB,CAAC;AACxC,gBAAc,WAAW,OAAO,WAAW;AAC3C,gBAAc,aAAa,OAAO,aAAa;AAC/C,gBAAc,WAAW,OAAO,WAAW;AAC3C,KAAG,MAAM;AAGT,UAAQ,IAAIA,OAAM,KAAK,eAAe,CAAC;AACvC,gBAAc,YAAY,OAAO,YAAY,QAAQ;AACrD,gBAAc,iBAAiB,OAAO,YAAY,YAAY;AAC9D,KAAG,MAAM;AAGT,MAAI,OAAO,QAAQ,OAAO,SAAS,GAAG;AACpC,YAAQ,IAAIA,OAAM,KAAK,iBAAiB,CAAC;AACzC,eAAW,QAAQ,OAAO,QAAQ,QAAQ;AACxC,cAAQ,IAAI,OAAOA,OAAM,IAAI,QAAG,CAAC,IAAI,IAAI,EAAE;AAAA,IAC7C;AACA,OAAG,MAAM;AAAA,EACX;AAGA,MAAI,OAAO,OAAO,QAAQ,SAAS,KAAK,OAAO,OAAO,QAAQ,SAAS,GAAG;AACxE,YAAQ,IAAIA,OAAM,KAAK,aAAa,CAAC;AACrC,QAAI,OAAO,OAAO,QAAQ,SAAS,GAAG;AACpC,mBAAa,eAAe,OAAO,OAAO,OAAO;AAAA,IACnD;AACA,QAAI,OAAO,OAAO,QAAQ,SAAS,GAAG;AACpC,mBAAa,eAAe,OAAO,OAAO,OAAO;AAAA,IACnD;AACA,OAAG,MAAM;AAAA,EACX;AACF;;;AClEA,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,OAAO,SAAS;AAChB;AAAA,EACE,mBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,OAEK;AACP,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAU9B,eAAsB,aAAa,SAAsC;AACvE,QAAM,MAAMC,SAAQ,QAAQ,IAAI,CAAC;AACjC,QAAM,QAAQC,iBAAgB,GAAG;AAEjC,MAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa;AAC9C,OAAG,MAAM,iCAAiC;AAC1C,OAAG,KAAK,+CAA+C;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,SAASC,eAAc,KAAK;AAGlC,QAAM,qBAAoC,QAAQ,UAC9C,CAAC,QAAQ,OAAsB,IAC/B,OAAO;AAEX,QAAM,WAAW,YAAY,kBAAkB;AAE/C,MAAI,SAAS,WAAW,GAAG;AACzB,OAAG,KAAK,8BAA8B;AACtC,OAAG,IAAI,cAAc,mBAAmB,KAAK,IAAI,CAAC,EAAE;AACpD;AAAA,EACF;AAEA,KAAG,QAAQ,eAAe;AAC1B,KAAG,KAAK,cAAc,OAAO,IAAI,EAAE;AACnC,KAAG,MAAM;AAIT,QAAM,YAAY,OAAO,OAAO,QAAQ,IAAI,CAAC,MAAM;AAEjD,QAAI,EAAE,WAAW,GAAG,GAAG;AACrB,YAAM,OAAO,MAAM,gBACfF,SAAQG,MAAK,MAAM,eAAe,MAAM,IAAI,CAAC,IAC7C;AACJ,aAAOH,SAAQG,MAAK,MAAM,CAAC,CAAC;AAAA,IAC9B;AACA,WAAOH,SAAQ,CAAC;AAAA,EAClB,CAAC;AAGD,QAAM,gBAAgB,MAAM,gBAAgBA,SAAQG,MAAK,MAAM,eAAe,MAAM,IAAI,CAAC,IAAI;AAC7F,QAAM,cAAc,MAAM,cAAcH,SAAQG,MAAK,MAAM,aAAa,MAAM,IAAI,CAAC,IAAI;AAEvF,QAAM,cAAc;AAAA,IAClB,gBAAgBA,MAAK,eAAeC,cAAa,QAAQ,IAAI;AAAA,IAC7D,cAAcD,MAAK,aAAaC,cAAa,QAAQ,IAAI;AAAA,EAC3D,EAAE,OAAO,OAAO;AAEhB,QAAM,eAAe,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;AAEhE,QAAM,WAAW,IAAI,cAAc;AACnC,QAAM,aAAa,SAAS,aAAa,YAAY;AAErD,aAAW,EAAE,MAAM,MAAM,KAAK,YAAY;AACxC,OAAG,KAAK,iBAAiB,IAAI,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EAC5F;AAEA,QAAM,SAAS,SAAS,KAAK;AAI7B,QAAM,UAAU;AAAA,IACd,OAAO,QAAQ;AAAA,IACf,OAAO,QAAQ;AAAA,IACf;AAAA,EACF;AAIA,aAAW,WAAW,UAAU;AAC9B,UAAM,UAAU,IAAI,eAAe,QAAQ,IAAI,QAAG,EAAE,MAAM;AAE1D,QAAI;AACF,UAAI,QAAQ,OAAO;AACjB,cAAM,QAAQ,MAAM,GAAG;AACvB,gBAAQ,KAAK,WAAW,QAAQ,IAAI,EAAE;AACtC;AAAA,MACF;AAGA,UAAI,QAAQ,OAAO,SAAS,KAAK,QAAQ,QAAQ,SAAS,GAAG;AAC3D,cAAM,QAAQ,aAAa,KAAK,OAAO;AAAA,MACzC;AAGA,iBAAW,SAAS,QAAQ;AAC1B,cAAM,QAAQ,WAAW,KAAK,KAAK;AAAA,MACrC;AAEA,YAAM,QAAkB,CAAC;AACzB,UAAI,QAAQ,OAAO,SAAS,QAAQ,QAAQ,SAAS,GAAG;AACtD,cAAM,KAAK,GAAG,QAAQ,OAAO,SAAS,QAAQ,QAAQ,MAAM,gBAAgB;AAAA,MAC9E;AACA,UAAI,OAAO,SAAS,GAAG;AACrB,cAAM,KAAK,GAAG,OAAO,MAAM,SAAS,OAAO,WAAW,IAAI,KAAK,GAAG,EAAE;AAAA,MACtE;AAEA,cAAQ;AAAA,QACN,GAAG,QAAQ,IAAI,KAAK,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,kBAAkB;AAAA,MAC9E;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,KAAK,GAAG,QAAQ,IAAI,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IACrF;AAAA,EACF;AAEA,KAAG,MAAM;AACX;;;ACjIA,SAAS,cAAAC,aAAY,aAAAC,YAAW,iBAAAC,gBAAe,QAAQ,cAAc;AACrE,SAAS,QAAAC,OAAM,WAAAC,UAAS,UAAU,eAAe;AACjD,SAAS,mBAAAC,kBAAiB,eAAAC,oBAAmB;AAC7C,SAAS,iBAAAC,gBAAkC,4BAA4B;AAEvE,OAAOC,YAAW;AAElB,IAAM,gBAAgB;AAItB,SAAS,aAAa,aAA6B;AACjD,SAAOC,MAAK,aAAaC,cAAa,aAAa;AACrD;AAEA,SAAS,gBAAgB,KAA4B;AACnD,QAAM,QAAQC,iBAAgB,GAAG;AACjC,MAAI,MAAM,YAAa,QAAOC,SAAQH,MAAK,MAAM,aAAa,MAAM,IAAI,CAAC;AACzE,MAAI,MAAM,cAAe,QAAOG,SAAQH,MAAK,MAAM,eAAe,MAAM,IAAI,CAAC;AAC7E,SAAO;AACT;AAEA,SAAS,oBAAoB,KAAuB;AAClD,QAAM,QAAQE,iBAAgB,GAAG;AACjC,QAAM,OAAiB,CAAC;AAExB,MAAI,MAAM,eAAe;AACvB,SAAK,KAAK,aAAaC,SAAQH,MAAK,MAAM,eAAe,MAAM,IAAI,CAAC,CAAC,CAAC;AAAA,EACxE;AACA,MAAI,MAAM,aAAa;AACrB,SAAK,KAAK,aAAaG,SAAQH,MAAK,MAAM,aAAa,MAAM,IAAI,CAAC,CAAC,CAAC;AAAA,EACtE;AAEA,SAAO;AACT;AAIA,eAAsB,mBAAkC;AACtD,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,YAAY,oBAAoB,GAAG;AAEzC,MAAI,UAAU,WAAW,GAAG;AAC1B,OAAG,KAAK,iCAAiC;AACzC,OAAG,KAAK,+CAA+C;AACvD;AAAA,EACF;AAEA,QAAM,WAAW,IAAII,eAAc;AACnC,QAAM,SAAS,SAAS,aAAa,SAAS;AAE9C,aAAW,EAAE,MAAM,MAAM,KAAK,QAAQ;AACpC,OAAG,KAAK,WAAW,IAAI,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EACtF;AAEA,QAAM,SAAS,SAAS,KAAK;AAE7B,MAAI,OAAO,WAAW,GAAG;AACvB,OAAG,KAAK,kBAAkB;AAC1B,OAAG,IAAI,4DAA4D;AACnE;AAAA,EACF;AAEA,KAAG,QAAQ,WAAW,OAAO,MAAM,GAAG;AACtC,aAAW,SAAS,QAAQ;AAC1B,UAAM,WAAW,MAAM,QAAQ,SAAS,IAAIL,OAAM,IAAI,KAAK,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI;AAC1F,YAAQ,IAAI,KAAKA,OAAM,KAAK,MAAM,IAAI,CAAC,IAAIA,OAAM,IAAI,MAAM,OAAO,CAAC,GAAG,QAAQ,EAAE;AAChF,QAAI,MAAM,aAAa;AACrB,cAAQ,IAAI,OAAOA,OAAM,IAAI,MAAM,WAAW,CAAC,EAAE;AAAA,IACnD;AAAA,EACF;AACA,KAAG,MAAM;AACX;AAIA,eAAsB,mBAAmB,MAA6B;AACpE,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,cAAc,gBAAgB,GAAG;AAEvC,MAAI,CAAC,aAAa;AAChB,OAAG,MAAM,iCAAiC;AAC1C,OAAG,KAAK,+CAA+C;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,YAAY,aAAa,WAAW;AAC1C,EAAAM,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAExC,QAAM,WAAW,GAAG,IAAI;AACxB,QAAM,WAAWL,MAAK,WAAW,QAAQ;AAEzC,MAAIM,YAAW,QAAQ,GAAG;AACxB,OAAG,KAAK,UAAU,IAAI,uBAAuB,QAAQ,EAAE;AACvD;AAAA,EACF;AAEA,QAAM,UAAU,qBAAqB,IAAI;AACzC,EAAAC,eAAc,UAAU,SAAS,OAAO;AAExC,KAAG,QAAQ,kBAAkB,QAAQ,EAAE;AACvC,KAAG,IAAI,uEAAuE;AAChF;AAIA,eAAsB,gBAAgB,QAA+B;AACnE,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,cAAc,gBAAgB,GAAG;AAEvC,MAAI,CAAC,aAAa;AAChB,OAAG,MAAM,iCAAiC;AAC1C,OAAG,KAAK,+CAA+C;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,aAAaJ,SAAQ,MAAM;AACjC,MAAI,CAACG,YAAW,UAAU,GAAG;AAC3B,OAAG,MAAM,mBAAmB,UAAU,EAAE;AACxC,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,MAAM,QAAQ,UAAU;AAC9B,MAAI,QAAQ,WAAW,QAAQ,QAAQ;AACrC,OAAG,MAAM,+CAA+C;AACxD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,YAAY,aAAa,WAAW;AAC1C,EAAAD,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAExC,QAAM,WAAWL,MAAK,WAAW,SAAS,UAAU,CAAC;AACrD,SAAO,YAAY,QAAQ;AAE3B,KAAG,QAAQ,oBAAoB,UAAU,EAAE;AAC3C,KAAG,IAAI,6CAA6C;AACtD;AAIA,eAAsB,mBAAmB,MAA6B;AACpE,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,cAAc,gBAAgB,GAAG;AAEvC,MAAI,CAAC,aAAa;AAChB,OAAG,MAAM,iCAAiC;AAC1C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,YAAY,aAAa,WAAW;AAE1C,QAAM,aAAa,CAAC,GAAG,IAAI,SAAS,GAAG,IAAI,MAAM;AACjD,MAAI,UAAU;AAEd,aAAW,YAAY,YAAY;AACjC,UAAM,WAAWA,MAAK,WAAW,QAAQ;AACzC,QAAIM,YAAW,QAAQ,GAAG;AACxB,aAAO,QAAQ;AACf,SAAG,QAAQ,kBAAkB,IAAI,GAAG;AACpC,gBAAU;AACV;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,SAAS;AACZ,OAAG,MAAM,UAAU,IAAI,kBAAkB,SAAS,EAAE;AACpD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;ACxKA,SAAS,cAAAE,aAAY,aAAAC,YAAW,iBAAAC,gBAAe,oBAAoB;AACnE,SAAS,WAAAC,gBAAe;AACxB,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,aAAa,qBAAqB;AAC3C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAAC;AAAA,EACA,iBAAAC;AAAA,OACK;AAKP,eAAeC,QAAO,UAAkB,cAAwC;AAC9E,QAAM,KAAKC,iBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAC3E,QAAM,UAAU,eAAe,GAAG,QAAQ,KAAK,YAAY,QAAQ,GAAG,QAAQ;AAC9E,SAAO,IAAI,QAAQ,CAACC,aAAY;AAC9B,OAAG,SAAS,SAAS,CAAC,WAAW;AAC/B,SAAG,MAAM;AACT,MAAAA,SAAQ,OAAO,KAAK,KAAK,gBAAgB,EAAE;AAAA,IAC7C,CAAC;AAAA,EACH,CAAC;AACH;AAIA,SAAS,gBAAgB,MAKd;AACT,SAAO;AAAA;AAAA;AAAA,UAGC,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAML,KAAK,QAAQ;AAAA,mBACR,KAAK,YAAY;AAAA,qBACf,KAAK,cAAc;AAAA;AAAA;AAAA;AAAA;AAKxC;AAIA,SAAS,OAAO,MAAc,KAAqB;AACjD,SAAO,SAAS,OAAO,IAAI,IAAI,EAAE,KAAK,OAAO,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK;AACzE;AAEA,SAAS,UAAU,KAAsB;AACvC,MAAI;AACF,WAAO,mCAAmC,GAAG;AAC7C,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,KAAsB;AACxC,MAAI;AACF,WAAO,kBAAkB,GAAG;AAC5B,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,UAAU,KAAsB;AACvC,MAAI;AACF,UAAM,UAAU,OAAO,UAAU,GAAG;AACpC,WAAO,QAAQ,KAAK,EAAE,SAAS;AAAA,EACjC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAIA,eAAsB,qBAAoC;AACxD,QAAM,cAAc,eAAe;AACnC,QAAM,aAAa,cAAc;AAEjC,KAAG,QAAQ,iBAAiB;AAE5B,gBAAc,eAAe,UAAU;AACvC,gBAAc,gBAAgB,WAAW;AACzC,KAAG,MAAM;AAET,MAAI,CAACC,YAAW,WAAW,GAAG;AAC5B,OAAG,KAAK,mBAAmB;AAC3B,OAAG,KAAK,sDAAsD;AAC9D;AAAA,EACF;AAEA,QAAM,UAAU,cAAc,aAAa,mBAAmB;AAE9D,MAAI,CAAC,SAAS;AACZ,OAAG,MAAM,+BAA+B,WAAW,EAAE;AACrD,OAAG,KAAK,yEAAyE;AACjF;AAAA,EACF;AAGA,MAAI,QAAQ,SAAS;AACnB,kBAAc,QAAQ,QAAQ,QAAQ,IAAI;AAE1C,QAAI,QAAQ,QAAQ,MAAM;AACxB,YAAM,OAAO,QAAQ,QAAQ;AAC7B,oBAAc,eAAe,KAAK,UAAU,QAAQ;AACpD,oBAAc,aAAa,KAAK,YAAY,QAAQ,IAAI;AAAA,IAC1D;AACA,OAAG,MAAM;AAAA,EACX;AAGA,MAAI,QAAQ,aAAa;AACvB,OAAG,IAAI,aAAa;AACpB,kBAAc,YAAY,QAAQ,YAAY,QAAQ;AACtD,kBAAc,iBAAiB,QAAQ,YAAY,aAAa;AAChE,kBAAc,mBAAmB,QAAQ,YAAY,eAAe;AACpE,OAAG,MAAM;AAAA,EACX;AAGA,MAAI,QAAQ,SAAS,UAAU,QAAQ,QAAQ,OAAO,SAAS,GAAG;AAChE,OAAG,IAAI,sBAAsB;AAC7B,eAAW,QAAQ,QAAQ,QAAQ,QAAQ;AACzC,cAAQ,IAAI,cAAS,IAAI,EAAE;AAAA,IAC7B;AACA,OAAG,MAAM;AAAA,EACX;AAGA,QAAM,qBAAqBD,SAAQ,UAAU;AAC7C,MAAIC,YAAW,kBAAkB,GAAG;AAClC,OAAG,IAAI,aAAa;AACpB,QAAI,UAAU,kBAAkB,GAAG;AACjC,oBAAc,YAAY,KAAK;AAC/B,UAAI;AACF,cAAM,SAAS,OAAO,+BAA+B,kBAAkB;AACvE,sBAAc,UAAU,MAAM;AAC9B,YAAI,UAAU,kBAAkB,GAAG;AACjC,gBAAM,SAAS,OAAO,yBAAyB,kBAAkB;AACjE,wBAAc,iBAAiB,MAAM;AAAA,QACvC,OAAO;AACL,wBAAc,iBAAiB,QAAQ;AAAA,QACzC;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF,OAAO;AACL,oBAAc,YAAY,IAAI;AAC9B,SAAG,IAAI,2DAA2D;AAAA,IACpE;AACA,OAAG,MAAM;AAAA,EACX;AACF;AAIA,eAAsB,uBAAsC;AAC1D,QAAM,cAAc,eAAe;AACnC,QAAM,aAAa,cAAc;AAEjC,KAAG,QAAQ,wBAAwB;AACnC,KAAG,KAAK,6BAA6B,WAAW,EAAE;AAClD,KAAG,MAAM;AAET,MAAIA,YAAW,WAAW,GAAG;AAC3B,UAAM,WAAW,cAAc,aAAa,mBAAmB;AAC/D,UAAM,eAAe,UAAU,SAAS;AACxC,OAAG,KAAK,2BAA2B,eAAe,SAAS,YAAY,MAAM,EAAE,GAAG;AAClF,UAAM,YAAY,MAAMH,QAAO,oBAAoB,GAAG;AACtD,QAAI,UAAU,YAAY,MAAM,KAAK;AACnC,SAAG,KAAK,sCAAsC;AAC9C;AAAA,IACF;AACA,OAAG,MAAM;AAAA,EACX;AAEA,QAAM,OAAO,MAAMA,QAAO,aAAa,QAAQ,IAAI,MAAM,KAAK,EAAE;AAChE,QAAM,WAAW,MAAMA,QAAO,6CAA6C,IAAI;AAC/E,QAAM,eAAe,MAAMA,QAAO,oBAAoB,mBAAmB;AACzE,QAAM,iBAAiB,MAAMA;AAAA,IAC3B;AAAA,IACA;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,eAAe,UAAU,WAAW,UAAU;AACrE,MAAI,CAAC,cAAc,SAAS,cAAc,GAAG;AAC3C,OAAG,MAAM,oBAAoB,cAAc,sBAAsB,cAAc,KAAK,IAAI,CAAC,EAAE;AAC3F,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,EAAAI,WAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAEzC,QAAM,UAAU,gBAAgB,EAAE,MAAM,UAAU,cAAc,eAAe,CAAC;AAChF,EAAAC,eAAc,aAAa,SAAS,OAAO;AAE3C,KAAG,MAAM;AACT,KAAG,QAAQ,sBAAsB,WAAW,EAAE;AAC9C,KAAG,MAAM;AACT,KAAG,IAAI,aAAa;AACpB,KAAG,IAAI,yDAAoD;AAC3D,KAAG,IAAI,yEAAoE;AAC3E,KAAG,IAAI,sEAAiE;AAC1E;AAIA,eAAsB,yBAAwC;AAC5D,QAAM,cAAc,eAAe;AACnC,QAAM,aAAaH,SAAQ,cAAc,CAAC;AAE1C,MAAI,CAACC,YAAW,WAAW,GAAG;AAC5B,OAAG,MAAM,mBAAmB;AAC5B,OAAG,KAAK,qCAAqC;AAC7C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAU,cAAc,aAAa,mBAAmB;AAC9D,QAAM,SAAS,SAAS,SAAS,MAAM;AAEvC,KAAG,QAAQ,0BAAqB;AAGhC,EAAAC,WAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAGzC,MAAI,CAAC,UAAU,UAAU,GAAG;AAC1B,OAAG,KAAK,qDAAqD;AAC7D,QAAI;AACF,aAAO,QAAQ,UAAU;AACzB,SAAG,QAAQ,6BAA6B;AAAA,IAC1C,SAAS,KAAK;AACZ,SAAG,MAAM,kCAAkC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAC7F,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAGA,MAAI,UAAU,OAAO,KAAK,MAAM,IAAI;AAClC,QAAI;AACF,YAAM,kBAAkB,OAAO,UAAU,UAAU;AACnD,UAAI,CAAC,gBAAgB,MAAM,IAAI,EAAE,SAAS,QAAQ,GAAG;AACnD,eAAO,qBAAqB,MAAM,IAAI,UAAU;AAChD,WAAG,QAAQ,2BAA2B,MAAM,EAAE;AAAA,MAChD;AAAA,IACF,SAAS,KAAK;AACZ,SAAG,KAAK,+BAA+B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IAC3F;AAAA,EACF;AAGA,MAAI;AACF,WAAO,SAAS,UAAU;AAAA,EAC5B,SAAS,KAAK;AACZ,OAAG,MAAM,0BAA0B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACrF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,MAAI,aAAa;AACjB,MAAI;AACF,UAAM,SAAS,OAAO,sBAAsB,UAAU;AACtD,iBAAa,OAAO,KAAK,EAAE,SAAS;AAAA,EACtC,QAAQ;AACN,iBAAa;AAAA,EACf;AAEA,MAAI,cAAc,CAAC,WAAW,UAAU,GAAG;AACzC,QAAI;AACF,aAAO,oBAAoB,UAAU;AACrC,SAAG,QAAQ,4BAA4B;AAAA,IACzC,SAAS,KAAK;AAEZ,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,UAAI,CAAC,IAAI,SAAS,mBAAmB,GAAG;AACtC,WAAG,MAAM,qBAAqB,GAAG,EAAE;AACnC,gBAAQ,KAAK,CAAC;AAAA,MAChB,OAAO;AACL,WAAG,KAAK,wBAAwB;AAAA,MAClC;AAAA,IACF;AAAA,EACF,OAAO;AACL,OAAG,KAAK,wBAAwB;AAAA,EAClC;AAGA,MAAI,UAAU,OAAO,KAAK,MAAM,IAAI;AAClC,OAAG,KAAK,sBAAsB,MAAM,EAAE;AACtC,QAAI;AAEF,UAAI,SAAS;AACb,UAAI;AACF,iBAAS,OAAO,+BAA+B,UAAU;AAAA,MAC3D,QAAQ;AAAA,MAER;AACA,aAAO,kBAAkB,MAAM,IAAI,UAAU;AAC7C,SAAG,QAAQ,2BAA2B;AAAA,IACxC,SAAS,KAAK;AACZ,SAAG,MAAM,gBAAgB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAC3E,SAAG,IAAI,gEAAgE;AACvE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,OAAO;AACL,OAAG,KAAK,mEAA8D;AACtE,OAAG,IAAI,6EAA6E;AAAA,EACtF;AAEA,KAAG,MAAM;AACX;AAIA,eAAsB,yBAAwC;AAC5D,QAAM,cAAc,eAAe;AACnC,QAAM,aAAaF,SAAQ,cAAc,CAAC;AAE1C,KAAG,QAAQ,0BAAqB;AAGhC,QAAM,UAAU,cAAc,aAAa,mBAAmB;AAC9D,QAAM,SAAS,SAAS,SAAS,MAAM;AAEvC,MAAI,CAACC,YAAW,UAAU,KAAK,CAAC,UAAU,UAAU,GAAG;AAErD,QAAI,UAAU,OAAO,KAAK,MAAM,IAAI;AAClC,SAAG,KAAK,gCAAgC,MAAM,EAAE;AAChD,UAAI;AAEF,cAAM,YAAYD,SAAQ,YAAY,IAAI;AAC1C,cAAM,UAAU,WAAW,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK;AAChD,QAAAE,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AACxC,iBAAS,aAAa,MAAM,IAAI,OAAO,IAAI,EAAE,KAAK,WAAW,OAAO,OAAO,CAAC;AAC5E,WAAG,QAAQ,6BAA6B;AAAA,MAC1C,SAAS,KAAK;AACZ,WAAG,MAAM,iBAAiB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAC5E,WAAG,IAAI,WAAW,MAAM,EAAE;AAC1B,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,OAAO;AACL,SAAG,MAAM,wEAAwE;AACjF,SAAG,KAAK,iEAAiE;AACzE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,OAAO;AAEL,QAAI,CAAC,UAAU,UAAU,GAAG;AAC1B,SAAG,MAAM,oDAAoD;AAC7D,UAAI,UAAU,OAAO,KAAK,MAAM,IAAI;AAClC,WAAG,KAAK,sCAAsC;AAC9C,YAAI;AACF,iBAAO,qBAAqB,MAAM,IAAI,UAAU;AAChD,aAAG,QAAQ,2BAA2B,MAAM,EAAE;AAAA,QAChD,SAAS,KAAK;AACZ,aAAG,MAAM,yBAAyB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACpF,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF,OAAO;AACL,WAAG,IAAI,uDAAuD;AAC9D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,OAAG,KAAK,uCAAuC;AAC/C,QAAI;AACF,aAAO,QAAQ,UAAU;AACzB,SAAG,QAAQ,8BAA8B;AAAA,IAC3C,SAAS,KAAK;AACZ,SAAG,MAAM,gBAAgB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAC3E,SAAG,IAAI,8DAA8D;AACrE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAEA,KAAG,MAAM;AACT,KAAG,IAAI,yDAAyD;AAChE,KAAG,MAAM;AACX;AAIA,eAAsB,qBAAqB,YAAoC;AAC7E,QAAM,cAAc,eAAe;AACnC,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,UAAUF,SAAQ,cAAc,6BAA6B;AAEnE,KAAG,QAAQ,gBAAgB;AAE3B,MAAI,CAACC,YAAW,WAAW,GAAG;AAC5B,OAAG,MAAM,mBAAmB;AAC5B,OAAG,KAAK,qCAAqC;AAC7C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,UAAU,cAAc,aAAa,mBAAmB;AAC9D,MAAI,CAAC,SAAS;AACZ,OAAG,MAAM,+BAA+B,WAAW,EAAE;AACrD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,QAAQG,iBAAgB,GAAG;AACjC,QAAM,cAAc;AAEpB,MAAI,kBAAkB;AACtB,MAAI,MAAM,eAAe;AACvB,sBAAkB,cAAc,MAAM,eAAe,qBAAqB;AAAA,EAC5E;AAEA,QAAM,WAAWC,eAAc,KAAK;AAGpC,QAAM,cAAa,oBAAI,KAAK,GAAE,YAAY;AAG1C,QAAM,YAAqC;AAAA,IACzC,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAEA,MAAI,QAAQ,SAAS;AACnB,cAAU,SAAS,IAAI,QAAQ;AAAA,EACjC;AAGA,YAAU,aAAa,IAAI;AAAA,IACzB,UAAU,SAAS,YAAY;AAAA,IAC/B,eAAe,SAAS,YAAY;AAAA,IACpC,iBAAiB,SAAS;AAAA,EAC5B;AAGA,MAAI,SAAS,QAAQ,OAAO,SAAS,KAAK,SAAS,QAAQ,QAAQ,SAAS,GAAG;AAC7E,UAAM,gBAA0C,CAAC;AACjD,QAAI,SAAS,QAAQ,OAAO,SAAS,GAAG;AACtC,oBAAc,QAAQ,IAAI,SAAS,QAAQ;AAAA,IAC7C;AACA,QAAI,SAAS,QAAQ,QAAQ,SAAS,GAAG;AACvC,oBAAc,SAAS,IAAI,SAAS,QAAQ;AAAA,IAC9C;AACA,cAAU,SAAS,IAAI;AAAA,EACzB;AAGA,MAAI,iBAAiB,WAAW;AAC9B,cAAU,WAAW,IAAI,gBAAgB;AAAA,EAC3C;AAGA,MAAI,SAAS,SAAS,SAAS,GAAG;AAChC,cAAU,UAAU,IAAI,SAAS;AAAA,EACnC;AAGA,QAAM,SAAS;AAAA;AACf,QAAM,OAAO,cAAc,WAAW,EAAE,WAAW,EAAE,CAAC;AAEtD,EAAAF,eAAc,SAAS,SAAS,MAAM,OAAO;AAE7C,KAAG,MAAM;AACT,KAAG,QAAQ,gBAAgB,OAAO,EAAE;AACpC,KAAG,MAAM;AACT,KAAG,IAAI,YAAY,WAAW,EAAE;AAChC,MAAI,MAAM,eAAe;AACvB,OAAG,IAAI,cAAc,MAAM,aAAa,EAAE;AAAA,EAC5C;AACA,KAAG,IAAI,gBAAgB,UAAU,EAAE;AACnC,KAAG,MAAM;AACX;AAIA,eAAsB,qBAAqB,WAAkC;AAC3E,QAAM,YAAYH,SAAQ,SAAS;AACnC,QAAM,cAAc,eAAe;AACnC,QAAM,aAAa,cAAc;AAEjC,KAAG,QAAQ,gBAAgB;AAC3B,KAAG,KAAK,mBAAmB,SAAS,EAAE;AACtC,KAAG,MAAM;AAET,MAAI,CAACC,YAAW,SAAS,GAAG;AAC1B,OAAG,MAAM,0BAA0B,SAAS,EAAE;AAC9C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,MAAI,aAAa;AACjB,MAAI;AACF,iBAAa,aAAa,WAAW,OAAO;AAAA,EAC9C,SAAS,KAAK;AACZ,OAAG,MAAM,wBAAwB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACnF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,SAAkB;AACtB,MAAI;AACF,UAAM,EAAE,OAAO,UAAU,IAAI,MAAM,OAAO,MAAM;AAChD,aAAS,UAAU,UAAU;AAAA,EAC/B,SAAS,KAAK;AACZ,OAAG,MAAM,gCAAgC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAC3F,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,OAAG,MAAM,+DAA+D;AACxE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,MAAM;AAEZ,MAAI,IAAI,SAAS,MAAM,QAAW;AAChC,OAAG,KAAK,+EAA+E;AAAA,EACzF;AAGA,MAAIA,YAAW,WAAW,GAAG;AAC3B,UAAM,WAAW,cAAc,aAAa,mBAAmB;AAC/D,UAAM,eAAe,UAAU,SAAS;AACxC,OAAG,KAAK,sBAAsB,eAAe,SAAS,YAAY,MAAM,EAAE,uBAAuB;AACjG,UAAM,YAAY,MAAMH,QAAO,mBAAmB,GAAG;AACrD,QAAI,UAAU,YAAY,MAAM,KAAK;AACnC,SAAG,KAAK,sCAAsC;AAC9C;AAAA,IACF;AACA,OAAG,MAAM;AAAA,EACX;AAGA,QAAM,aAAsC;AAAA,IAC1C,SAAS,IAAI,SAAS,KAAK;AAAA,EAC7B;AAEA,MAAI,IAAI,SAAS,MAAM,QAAW;AAChC,eAAW,SAAS,IAAI,IAAI,SAAS;AAAA,EACvC;AAEA,MAAI,IAAI,aAAa,MAAM,QAAW;AACpC,eAAW,aAAa,IAAI,IAAI,aAAa;AAAA,EAC/C;AAEA,MAAI,IAAI,SAAS,MAAM,QAAW;AAChC,eAAW,SAAS,IAAI,IAAI,SAAS;AAAA,EACvC;AAGA,QAAM,gBAAgB,oBAAoB,UAAU,UAAU;AAC9D,MAAI,CAAC,cAAc,SAAS;AAC1B,OAAG,MAAM,6DAA6D;AACtE,eAAW,SAAS,cAAc,MAAM,QAAQ;AAC9C,SAAG,IAAI,KAAK,MAAM,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,OAAO,EAAE;AAAA,IACtD;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,EAAAI,WAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AACzC,QAAM,cAAc,cAAc,YAAY,EAAE,WAAW,EAAE,CAAC;AAC9D,EAAAC,eAAc,aAAa,aAAa,OAAO;AAE/C,KAAG,QAAQ,wBAAwB,WAAW,EAAE;AAGhD,MAAI,IAAI,WAAW,MAAM,UAAa,IAAI,UAAU,MAAM,QAAW;AACnE,OAAG,MAAM;AACT,OAAG,KAAK,wDAAwD;AAChE,OAAG,IAAI,6EAA6E;AACpF,OAAG,IAAI,oEAAoE;AAAA,EAC7E;AAEA,KAAG,MAAM;AACT,KAAG,IAAI,4DAA4D;AACnE,KAAG,MAAM;AACX;;;AC9kBA,SAAS,cAAAG,aAAY,aAAAC,YAAW,iBAAAC,sBAAqB;AACrD,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,SAAS,eAAe,gBAAgB,gBAAgB,sBAAsB;AAC9E,SAAS,mBAAAC,kBAAiB,eAAAC,oBAAmB;AAE7C,OAAOC,YAAW;AAIlB,SAAS,iBAAiB,KAAuB;AAC/C,QAAM,QAAQC,iBAAgB,GAAG;AACjC,QAAM,OAAiB,CAAC;AAExB,MAAI,MAAM,eAAe;AACvB,SAAK,KAAKC,MAAKC,SAAQD,MAAK,MAAM,eAAe,MAAM,IAAI,CAAC,GAAGE,cAAa,QAAQ,CAAC;AAAA,EACvF;AACA,MAAI,MAAM,aAAa;AACrB,SAAK,KAAKF,MAAKC,SAAQD,MAAK,MAAM,aAAa,MAAM,IAAI,CAAC,GAAGE,cAAa,QAAQ,CAAC;AAAA,EACrF;AAEA,SAAO;AACT;AAEA,SAAS,YAAY,QAAwB;AAC3C,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAOJ,OAAM,MAAM,MAAM;AAAA,IAC3B,KAAK;AACH,aAAOA,OAAM,IAAI,MAAM;AAAA,IACzB,KAAK;AACH,aAAOA,OAAM,IAAI,MAAM;AAAA,IACzB;AACE,aAAOA,OAAM,KAAK,MAAM;AAAA,EAC5B;AACF;AAIA,eAAsB,mBAAkC;AACtD,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,YAAY,iBAAiB,GAAG;AAEtC,MAAI,UAAU,WAAW,GAAG;AAC1B,OAAG,KAAK,iCAAiC;AACzC,OAAG,KAAK,+CAA+C;AACvD;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,cAAc;AACnC,QAAM,SAAS,SAAS,aAAa,SAAS;AAE9C,aAAW,EAAE,MAAM,MAAM,KAAK,QAAQ;AACpC,OAAG,KAAK,WAAW,IAAI,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EACtF;AAEA,QAAM,SAAS,SAAS,KAAK;AAE7B,MAAI,OAAO,WAAW,GAAG;AACvB,OAAG,KAAK,kBAAkB;AAC1B,OAAG,IAAI,uDAAuD;AAC9D;AAAA,EACF;AAEA,KAAG,QAAQ,WAAW,OAAO,MAAM,GAAG;AACtC,aAAW,SAAS,QAAQ;AAC1B,UAAM,gBAAgB,eAAe,MAAM,IAAI;AAC/C,YAAQ;AAAA,MACN,KAAKA,OAAM,KAAK,MAAM,IAAI,CAAC,IAAIA,OAAM,IAAI,MAAG,CAAC,IAAI,YAAY,aAAa,CAAC;AAAA,IAC7E;AACA,YAAQ,IAAI,OAAOA,OAAM,IAAI,OAAO,CAAC,KAAK,MAAM,IAAI,EAAE;AACtD,YAAQ,IAAI,OAAOA,OAAM,IAAI,QAAQ,CAAC,IAAI,MAAM,KAAK,EAAE;AACvD,QAAI,MAAM,OAAO,SAAS,GAAG;AAC3B,cAAQ,IAAI,OAAOA,OAAM,IAAI,SAAS,CAAC,IAAI,MAAM,OAAO,KAAK,IAAI,CAAC,EAAE;AAAA,IACtE;AAAA,EACF;AACA,KAAG,MAAM;AACX;AAIA,eAAsB,kBAAkB,MAA6B;AACnE,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,YAAY,iBAAiB,GAAG;AAEtC,MAAI,UAAU,WAAW,GAAG;AAC1B,OAAG,MAAM,iCAAiC;AAC1C,OAAG,KAAK,+CAA+C;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,WAAW,IAAI,cAAc;AACnC,WAAS,aAAa,SAAS;AAE/B,QAAM,QAAQ,SAAS,IAAI,IAAI;AAC/B,MAAI,CAAC,OAAO;AACV,OAAG,MAAM,UAAU,IAAI,cAAc;AACrC,OAAG,IAAI,mDAAmD;AAC1D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,iBAAe,MAAM,SAAS;AAG9B,QAAM,YAAYE,MAAK,KAAK,SAAS;AACrC,MAAIG,YAAW,SAAS,GAAG;AACzB,UAAM,YAAYH,MAAK,WAAW,QAAQ;AAC1C,IAAAI,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAExC,UAAM,eAAyB;AAAA,MAC7B,YAAY,MAAM,IAAI;AAAA,MACtB;AAAA,MACA,aAAa,MAAM,IAAI;AAAA,MACvB,cAAc,MAAM,KAAK;AAAA,IAC3B;AAEA,QAAI,MAAM,OAAO,SAAS,GAAG;AAC3B,mBAAa,KAAK,IAAI,aAAa,EAAE;AACrC,iBAAW,SAAS,MAAM,QAAQ;AAChC,qBAAa,KAAK,KAAK,KAAK,EAAE;AAAA,MAChC;AAAA,IACF;AAEA,QAAI,MAAM,aAAa,SAAS,GAAG;AACjC,mBAAa,KAAK,IAAI,oBAAoB,EAAE;AAC5C,iBAAW,QAAQ,MAAM,cAAc;AACrC,qBAAa,KAAK,KAAK,IAAI,EAAE;AAAA,MAC/B;AAAA,IACF;AAEA,QAAI,MAAM,gBAAgB,SAAS,GAAG;AACpC,mBAAa,KAAK,IAAI,uBAAuB,EAAE;AAC/C,iBAAW,WAAW,MAAM,iBAAiB;AAC3C,qBAAa,KAAK,KAAK,OAAO,EAAE;AAAA,MAClC;AAAA,IACF;AAEA,UAAM,cAAcJ,MAAK,WAAW,GAAG,IAAI,KAAK;AAChD,IAAAK,eAAc,aAAa,aAAa,KAAK,IAAI,IAAI,MAAM,OAAO;AAClE,OAAG,IAAI,oBAAoB,WAAW,EAAE;AAAA,EAC1C;AAEA,KAAG,QAAQ,UAAU,IAAI,YAAY;AACrC,KAAG,IAAI,2BAA2B,IAAI,0BAA0B;AAClE;AAIA,eAAsB,iBAAiB,MAA6B;AAClE,iBAAe,MAAM,SAAS;AAC9B,KAAG,QAAQ,UAAU,IAAI,YAAY;AACvC;AAIA,eAAsB,qBAAoC;AACxD,QAAM,QAAQ,eAAe;AAC7B,QAAM,UAAU,OAAO,QAAQ,MAAM,MAAM;AAE3C,MAAI,QAAQ,WAAW,GAAG;AACxB,OAAG,KAAK,0BAA0B;AAClC,OAAG,IAAI,mDAAmD;AAC1D;AAAA,EACF;AAEA,KAAG,QAAQ,wBAAwB;AACnC,aAAW,CAAC,WAAW,KAAK,KAAK,SAAS;AACxC,YAAQ,IAAI,KAAKP,OAAM,KAAK,SAAS,CAAC,EAAE;AACxC,YAAQ,IAAI,OAAOA,OAAM,IAAI,SAAS,CAAC,OAAO,YAAY,MAAM,MAAM,CAAC,EAAE;AACzE,QAAI,MAAM,WAAW;AACnB,cAAQ,IAAI,OAAOA,OAAM,IAAI,UAAU,CAAC,MAAM,MAAM,SAAS,EAAE;AAAA,IACjE;AACA,QAAI,MAAM,WAAW;AACnB,cAAQ,IAAI,OAAOA,OAAM,IAAI,UAAU,CAAC,MAAM,MAAM,SAAS,EAAE;AAAA,IACjE;AACA,QAAI,MAAM,OAAO,MAAM;AACrB,cAAQ,IAAI,OAAOA,OAAM,IAAI,MAAM,CAAC,UAAU,MAAM,GAAG,EAAE;AAAA,IAC3D;AACA,OAAG,MAAM;AAAA,EACX;AACF;;;ACpLA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,OAAOQ,YAAW;AAClB,SAAS,WAAAC,gBAAe;AACxB,SAAS,cAAAC,mBAAkB;AAI3B,eAAsB,sBACpB,QACA,SACe;AACf,QAAM,WAAWD,SAAQ,QAAQ,QAAQ,QAAQ,IAAI,CAAC;AACtD,QAAM,UAAU,IAAI,gBAAgB,QAAQ;AAE5C,MAAI;AACF,UAAM,OAAO,QAAQ,OAAO;AAAA,MAC1B;AAAA,MACA,MAAM,QAAQ,OAAOA,SAAQ,QAAQ,IAAI,IAAI;AAAA,IAC/C,CAAC;AACD,qBAAiB,KAAK,MAAM,KAAK,MAAM;AACvC,OAAG,QAAQ,+BAA+BD,OAAM,KAAK,KAAK,MAAM,CAAC,EAAE;AACnE,OAAG,KAAK,SAAS,KAAK,IAAI,EAAE;AAAA,EAC9B,SAAS,KAAK;AACZ,OAAG,MAAM,8BAA8B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACzF,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAIA,eAAsB,sBAAqC;AACzD,QAAM,WAAWC,SAAQ,QAAQ,IAAI,CAAC;AACtC,QAAM,UAAU,IAAI,gBAAgB,QAAQ;AAE5C,MAAI,eAAoD,CAAC;AACzD,MAAI;AACF,mBAAe,QAAQ,KAAK;AAAA,EAC9B,SAAS,KAAK;AACZ,OAAG,KAAK,iCAAiC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,EAC7F;AAEA,QAAM,QAAQ,kBAAkB;AAEhC,MAAI,aAAa,WAAW,KAAK,OAAO,KAAK,MAAM,SAAS,EAAE,WAAW,GAAG;AAC1E,OAAG,KAAK,qBAAqB;AAC7B;AAAA,EACF;AAEA,KAAG,QAAQ,WAAW;AAGtB,QAAM,WAAW,oBAAI,IAAY;AAAA,IAC/B,GAAG,aAAa,IAAI,CAAC,OAAO,GAAG,IAAI;AAAA,IACnC,GAAG,OAAO,KAAK,MAAM,SAAS;AAAA,EAChC,CAAC;AAGD,UAAQ;AAAA,IACN,KAAKD,OAAM,KAAK,OAAO,OAAO,EAAE,CAAC,CAAC,IAAIA,OAAM,KAAK,SAAS,OAAO,EAAE,CAAC,CAAC,IAAIA,OAAM,KAAK,OAAO,CAAC;AAAA,EAC9F;AACA,UAAQ,IAAI,KAAKA,OAAM,IAAI,SAAI,OAAO,EAAE,CAAC,CAAC,EAAE;AAE5C,aAAW,QAAQ,UAAU;AAC3B,UAAM,WAAW,aAAa,KAAK,CAAC,OAAO,GAAG,SAAS,IAAI;AAC3D,UAAM,aAAa,MAAM,UAAU,IAAI;AACvC,UAAM,SAAS,UAAU,UAAU,YAAY,UAAUA,OAAM,IAAI,WAAW;AAC9E,UAAM,QAAQ,YAAY,iBAAiBA,OAAM,IAAI,QAAQ;AAC7D,UAAM,UAAU,UAAU,SAASA,OAAM,IAAI,SAAS,IAAI;AAE1D,UAAM,gBAAgB,KAAK,SAAS,KAAK,QAAQ,KAAK,MAAM,KAAK,SAAS,EAAE,IAAI;AAChF,YAAQ;AAAA,MACN,KAAKA,OAAM,KAAK,cAAc,OAAO,EAAE,CAAC,CAAC,IAAIA,OAAM,MAAM,OAAO,OAAO,EAAE,CAAC,CAAC,GAAG,OAAO,IAAIA,OAAM,OAAO,KAAK,CAAC;AAAA,IAC9G;AAAA,EACF;AAEA,KAAG,MAAM;AACX;AAIA,eAAsB,wBAAuC;AAC3D,QAAM,QAAQ,kBAAkB;AAChC,QAAM,UAAU,OAAO,OAAO,MAAM,SAAS;AAE7C,MAAI,QAAQ,WAAW,GAAG;AACxB,OAAG,KAAK,wCAAwC;AAChD,OAAG,IAAI,uDAAuD;AAC9D;AAAA,EACF;AAEA,KAAG,QAAQ,oBAAoB,QAAQ,MAAM,GAAG;AAEhD,aAAW,SAAS,SAAS;AAC3B,UAAM,SAASE,YAAW,MAAM,IAAI;AACpC,UAAM,aAAa,SAASF,OAAM,MAAM,QAAQ,IAAIA,OAAM,IAAI,SAAS;AACvE,YAAQ,IAAI,KAAKA,OAAM,KAAK,MAAM,MAAM,CAAC,IAAIA,OAAM,IAAI,QAAG,CAAC,IAAI,UAAU,EAAE;AAC3E,YAAQ,IAAI,OAAOA,OAAM,IAAI,OAAO,CAAC,UAAU,MAAM,IAAI,EAAE;AAC3D,YAAQ,IAAI,OAAOA,OAAM,IAAI,QAAQ,CAAC,SAAS,MAAM,iBAAiBA,OAAM,IAAI,QAAQ,CAAC,EAAE;AAC3F,YAAQ,IAAI,OAAOA,OAAM,IAAI,UAAU,CAAC,OAAO,MAAM,SAAS,EAAE;AAChE,OAAG,MAAM;AAAA,EACX;AACF;AAIA,eAAsB,sBACpB,cACA,WACe;AACf,QAAM,eAAeC,SAAQ,YAAY;AAEzC,QAAM,WAAW,iBAAiB,YAAY;AAC9C,MAAI,CAAC,UAAU;AACb,OAAG,MAAM,gCAAgC,YAAY,EAAE;AACvD,OAAG,IAAI,uDAAuD;AAC9D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI;AACF,gBAAY,cAAc,SAAS;AACnC,OAAG;AAAA,MACD,kBAAkBD,OAAM,OAAO,SAAS,CAAC,gBAAgBA,OAAM,KAAK,SAAS,MAAM,CAAC;AAAA,IACtF;AAAA,EACF,SAAS,KAAK;AACZ,OAAG,MAAM,2BAA2B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACtF,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAIA,eAAsB,uBAAsC;AAC1D,QAAM,WAAWC,SAAQ,QAAQ,IAAI,CAAC;AACtC,QAAM,UAAU,IAAI,gBAAgB,QAAQ;AAG5C,MAAI;AACF,YAAQ,MAAM;AACd,OAAG,KAAK,uCAAuC;AAAA,EACjD,SAAS,KAAK;AACZ,OAAG;AAAA,MACD,8BAA8B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AAGA,QAAM,QAAQ,kBAAkB;AAChC,QAAM,eAAe,OAAO,OAAO,MAAM,SAAS,EAAE;AAAA,IAClD,CAAC,UAAU,CAACC,YAAW,MAAM,IAAI;AAAA,EACnC;AAEA,MAAI,aAAa,WAAW,GAAG;AAC7B,OAAG,KAAK,qCAAqC;AAC7C;AAAA,EACF;AAEA,aAAW,SAAS,cAAc;AAChC,uBAAmB,MAAM,IAAI;AAC7B,OAAG,QAAQ,wBAAwBF,OAAM,KAAK,MAAM,MAAM,CAAC,KAAK,MAAM,IAAI,GAAG;AAAA,EAC/E;AAEA,KAAG,MAAM;AACT,KAAG,IAAI,WAAW,aAAa,MAAM,eAAe,aAAa,WAAW,IAAI,KAAK,KAAK,GAAG;AAC/F;;;AC3KA,SAAS,cAAAG,aAAY,gBAAAC,eAAc,iBAAAC,sBAAqB;AACxD,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,SAAS,gBAAgB,gBAAgB,4BAA4B;AACrE;AAAA,EACE,mBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,wBAAAC;AAAA,OACK;AAEP,OAAOC,YAAW;AAIlB,IAAM,iBAAiB;AACvB,IAAM,YAAY;AAIlB,eAAsB,qBAAoC;AACxD,QAAM,MAAMC,SAAQ,QAAQ,IAAI,CAAC;AACjC,QAAM,QAAQC,iBAAgB,GAAG;AAEjC,MAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa;AAC9C,OAAG,MAAM,iCAAiC;AAC1C,OAAG,KAAK,+CAA+C;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,SAASC,eAAc,KAAK;AAClC,QAAM,UAAU,IAAI,eAAe,GAAG;AACtC,QAAM,UAAU,QAAQ,YAAY;AAEpC,KAAG,QAAQ,SAAS;AACpB,KAAG,MAAM;AAGT,UAAQ,IAAIH,OAAM,KAAK,gBAAgB,CAAC;AACxC,MAAI,OAAO,aAAa;AACtB,YAAQ,IAAI,KAAKA,OAAM,KAAK,UAAU,OAAO,EAAE,CAAC,CAAC,IAAIA,OAAM,IAAI,OAAO,WAAW,CAAC,EAAE;AAAA,EACtF;AACA,MAAI,OAAO,eAAe;AACxB,YAAQ,IAAI,KAAKA,OAAM,KAAK,YAAY,OAAO,EAAE,CAAC,CAAC,IAAIA,OAAM,IAAI,OAAO,aAAa,CAAC,EAAE;AAAA,EAC1F;AACA,MAAI,OAAO,aAAa;AACtB,YAAQ,IAAI,KAAKA,OAAM,KAAK,UAAU,OAAO,EAAE,CAAC,CAAC,IAAIA,OAAM,IAAI,OAAO,WAAW,CAAC,EAAE;AAAA,EACtF;AACA,KAAG,MAAM;AAGT,UAAQ,IAAIA,OAAM,KAAK,cAAc,CAAC;AACtC,MAAI,QAAQ,OAAO,WAAW,GAAG;AAC/B,YAAQ,IAAI,KAAKA,OAAM,IAAI,QAAQ,CAAC,EAAE;AAAA,EACxC,OAAO;AACL,eAAW,QAAQ,QAAQ,QAAQ;AACjC,YAAM,SAAS,KAAK,SAASA,OAAM,IAAI,KAAK,KAAK,MAAM,GAAG,IAAI;AAC9D,cAAQ,IAAI,KAAKA,OAAM,MAAM,GAAG,CAAC,IAAI,KAAK,OAAO,GAAG,MAAM,EAAE;AAAA,IAC9D;AAAA,EACF;AACA,KAAG,MAAM;AAGT,UAAQ,IAAIA,OAAM,KAAK,eAAe,CAAC;AACvC,MAAI,QAAQ,QAAQ,WAAW,GAAG;AAChC,YAAQ,IAAI,KAAKA,OAAM,IAAI,QAAQ,CAAC,EAAE;AAAA,EACxC,OAAO;AACL,eAAW,QAAQ,QAAQ,SAAS;AAClC,YAAM,SAAS,KAAK,SAASA,OAAM,IAAI,KAAK,KAAK,MAAM,GAAG,IAAI;AAC9D,cAAQ,IAAI,KAAKA,OAAM,MAAM,GAAG,CAAC,IAAI,KAAK,OAAO,GAAG,MAAM,EAAE;AAAA,IAC9D;AAAA,EACF;AACA,KAAG,MAAM;AAGT,QAAM,UAAU,eAAe,OAAO;AACtC,UAAQ,IAAIA,OAAM,KAAK,SAAS,CAAC;AACjC,UAAQ,IAAI,KAAKA,OAAM,KAAK,QAAQ,OAAO,EAAE,CAAC,CAAC,IAAI,QAAQ,UAAU,EAAE;AACvE,UAAQ,IAAI,KAAKA,OAAM,KAAK,SAAS,OAAO,EAAE,CAAC,CAAC,IAAI,QAAQ,WAAW,EAAE;AACzE,UAAQ,IAAI,KAAKA,OAAM,KAAK,UAAU,OAAO,EAAE,CAAC,CAAC,IAAI,QAAQ,YAAY,EAAE;AAC3E,KAAG,MAAM;AACX;AAIA,eAAsB,kBACpB,MACA,SACe;AACf,QAAM,MAAMC,SAAQ,QAAQ,IAAI,CAAC;AACjC,QAAM,QAAQC,iBAAgB,GAAG;AAEjC,MAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa;AAC9C,OAAG,MAAM,iCAAiC;AAC1C,OAAG,KAAK,+CAA+C;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,QACJ,QAAQ,WAAW,QAAQ,UAAU,YAAY,YAAY;AAE/D,QAAM,UAAU,IAAI,eAAe,GAAG;AAEtC,MAAI;AACF,YAAQ,QAAQ,MAAM,KAAK;AAAA,EAC7B,SAAS,KAAK;AACZ,OAAG,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AACzD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,aAAa,MAAM,eAAe,MAAM;AAE9C,KAAG,QAAQ,SAAS,KAAK,OAAO;AAChC,KAAG,IAAI,YAAY,IAAI,EAAE;AACzB,KAAG,IAAI,YAAY,KAAK,EAAE;AAC1B,KAAG,IAAI,YAAY,UAAU,EAAE;AAC/B,KAAG,MAAM;AACT,KAAG,KAAK,uEAAuE;AACjF;AAIA,eAAsB,yBAAwC;AAC5D,QAAM,MAAMD,SAAQ,QAAQ,IAAI,CAAC;AACjC,QAAM,QAAQC,iBAAgB,GAAG;AAEjC,MAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa;AAC9C,OAAG,MAAM,iCAAiC;AAC1C,OAAG,KAAK,+CAA+C;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,SAASC,eAAc,KAAK;AAClC,QAAM,UAAUC;AAAA,IACd,OAAO,QAAQ;AAAA,IACf,OAAO,QAAQ;AAAA,IACf;AAAA,EACF;AAEA,QAAM,eAAeC,MAAK,KAAK,SAAS;AACxC,QAAM,gBAAgB,qBAAqB,OAAO;AAGlD,QAAM,WAAWC,YAAW,YAAY,IACpCC,cAAa,cAAc,OAAO,IAClC;AAEJ,MAAI;AAEJ,MAAI,CAAC,UAAU;AACb,mBAAe;AAAA,EACjB,OAAO;AAEL,UAAM,cAAc,SAAS,QAAQ,cAAc;AACnD,UAAM,OACJ,eAAe,IACX,SAAS,MAAM,GAAG,WAAW,EAAE,QAAQ,IACvC,SAAS,QAAQ;AAEvB,mBAAe,OAAO,GAAG,IAAI;AAAA;AAAA,EAAO,aAAa,KAAK;AAAA,EACxD;AAEA,EAAAC,eAAc,cAAc,cAAc,OAAO;AAEjD,KAAG,QAAQ,kBAAkB;AAC7B,KAAG,MAAM;AAET,QAAM,aAAa,QAAQ,OAAO,SAAS,QAAQ,QAAQ;AAE3D,MAAI,eAAe,GAAG;AACpB,OAAG,KAAK,wDAAwD;AAAA,EAClE,OAAO;AACL,OAAG,QAAQ,SAAS,UAAU,gBAAgB,eAAe,IAAI,KAAK,GAAG,OAAO,SAAS,EAAE;AAC3F,OAAG,IAAI,cAAc,QAAQ,OAAO,MAAM,EAAE;AAC5C,OAAG,IAAI,cAAc,QAAQ,QAAQ,MAAM,EAAE;AAAA,EAC/C;AAEA,KAAG,IAAI,WAAW,YAAY,EAAE;AAChC,KAAG,MAAM;AACX;;;AT9IA,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACG,KAAK,SAAS,EACd,YAAY,+CAA+C,EAC3D,QAAQ,OAAO;AAIlB,QACG,QAAQ,aAAa,EACrB,YAAY,2CAA2C,EACvD,OAAO,aAAa,uDAAuD,EAC3E,OAAO,OAAO,MAA0B,SAAS;AAChD,MAAI;AACF,UAAM,YAAY,MAAM,EAAE,SAAS,KAAK,QAA+B,CAAC;AAAA,EAC1E,SAAS,KAAK;AACZ,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAChE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAIH,QACG,QAAQ,eAAe,EACvB,YAAY,yCAAyC,EACrD,OAAO,OAAO,SAA6B;AAC1C,MAAI;AACF,UAAM,cAAc,IAAI;AAAA,EAC1B,SAAS,KAAK;AACZ,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAChE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAIH,QACG,QAAQ,OAAO,EACf,YAAY,yDAAyD,EACrE,OAAO,oBAAoB,kCAAkC,EAC7D,OAAO,WAAW,kDAAkD,EACpE,OAAO,OAAO,SAAS;AACtB,MAAI;AACF,UAAM,aAAa;AAAA,MACjB,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,IACd,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAChE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAIH,IAAM,WAAW,QACd,QAAQ,OAAO,EACf,YAAY,uBAAuB;AAEtC,SACG,QAAQ,MAAM,EACd,YAAY,2BAA2B,EACvC,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,iBAAiB;AAAA,EAAG,SACzB,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,SACG,QAAQ,eAAe,EACvB,YAAY,oCAAoC,EAChD,OAAO,OAAO,SAAiB;AAC9B,MAAI;AAAE,UAAM,mBAAmB,IAAI;AAAA,EAAG,SAC/B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,SACG,QAAQ,YAAY,EACpB,YAAY,+BAA+B,EAC3C,OAAO,OAAO,SAAiB;AAC9B,MAAI;AAAE,UAAM,gBAAgB,IAAI;AAAA,EAAG,SAC5B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,SACG,QAAQ,eAAe,EACvB,YAAY,gBAAgB,EAC5B,OAAO,OAAO,SAAiB;AAC9B,MAAI;AAAE,UAAM,mBAAmB,IAAI;AAAA,EAAG,SAC/B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAIH,IAAM,aAAa,QAChB,QAAQ,SAAS,EACjB,YAAY,sCAAsC;AAErD,WACG,QAAQ,MAAM,EACd,YAAY,8BAA8B,EAC1C,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,mBAAmB;AAAA,EAAG,SAC3B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,WACG,QAAQ,QAAQ,EAChB,YAAY,oCAAoC,EAChD,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,qBAAqB;AAAA,EAAG,SAC7B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,IAAM,UAAU,WACb,QAAQ,MAAM,EACd,YAAY,yCAAyC;AAExD,QACG,QAAQ,MAAM,EACd,YAAY,wBAAwB,EACpC,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,uBAAuB;AAAA,EAAG,SAC/B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,QACG,QAAQ,MAAM,EACd,YAAY,0BAA0B,EACtC,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,uBAAuB;AAAA,EAAG,SAC/B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,WACG,QAAQ,eAAe,EACvB,YAAY,sCAAsC,EAClD,OAAO,OAAO,SAA6B;AAC1C,MAAI;AAAE,UAAM,qBAAqB,IAAI;AAAA,EAAG,SACjC,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,WACG,QAAQ,eAAe,EACvB,YAAY,wCAAwC,EACpD,OAAO,OAAO,SAAiB;AAC9B,MAAI;AAAE,UAAM,qBAAqB,IAAI;AAAA,EAAG,SACjC,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAIH,IAAM,WAAW,QACd,QAAQ,OAAO,EACf,YAAY,uBAAuB;AAEtC,SACG,QAAQ,MAAM,EACd,YAAY,uBAAuB,EACnC,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,iBAAiB;AAAA,EAAG,SACzB,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,SACG,QAAQ,cAAc,EACtB,YAAY,gBAAgB,EAC5B,OAAO,OAAO,SAAiB;AAC9B,MAAI;AAAE,UAAM,kBAAkB,IAAI;AAAA,EAAG,SAC9B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,SACG,QAAQ,aAAa,EACrB,YAAY,sBAAsB,EAClC,OAAO,OAAO,SAAiB;AAC9B,MAAI;AAAE,UAAM,iBAAiB,IAAI;AAAA,EAAG,SAC7B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,SACG,QAAQ,QAAQ,EAChB,YAAY,6BAA6B,EACzC,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,mBAAmB;AAAA,EAAG,SAC3B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAIH,IAAM,cAAc,QACjB,QAAQ,UAAU,EAClB,YAAY,sBAAsB;AAErC,YACG,QAAQ,iBAAiB,EACzB,YAAY,uBAAuB,EACnC,OAAO,iBAAiB,iCAAiC,EACzD,OAAO,iBAAiB,8BAA8B,EACtD,OAAO,OAAO,QAAgB,SAAS;AACtC,MAAI;AAAE,UAAM,sBAAsB,QAAQ,EAAE,MAAM,KAAK,MAA4B,MAAM,KAAK,KAA2B,CAAC;AAAA,EAAG,SACtH,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,YACG,QAAQ,MAAM,EACd,YAAY,oBAAoB,EAChC,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,oBAAoB;AAAA,EAAG,SAC5B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,YACG,QAAQ,QAAQ,EAChB,YAAY,gCAAgC,EAC5C,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,sBAAsB;AAAA,EAAG,SAC9B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,YACG,QAAQ,2BAA2B,EACnC,YAAY,+BAA+B,EAC3C,OAAO,OAAO,IAAY,UAAkB;AAC3C,MAAI;AAAE,UAAM,sBAAsB,IAAI,KAAK;AAAA,EAAG,SACvC,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,YACG,QAAQ,OAAO,EACf,YAAY,0BAA0B,EACtC,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,qBAAqB;AAAA,EAAG,SAC7B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAIH,IAAM,aAAa,QAChB,QAAQ,SAAS,EACjB,YAAY,sBAAsB;AAErC,WACG,QAAQ,MAAM,EACd,YAAY,6BAA6B,EACzC,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,mBAAmB;AAAA,EAAG,SAC3B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,WACG,QAAQ,YAAY,EACpB,YAAY,oBAAoB,EAChC,OAAO,aAAa,gDAAgD,EACpE,OAAO,mBAAmB,+BAA+B,EACzD,OAAO,OAAO,MAAc,SAAS;AACpC,MAAI;AACF,UAAM,kBAAkB,MAAM;AAAA,MAC5B,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH,SACO,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,WACG,QAAQ,UAAU,EAClB,YAAY,iDAAiD,EAC7D,OAAO,YAAY;AAClB,MAAI;AAAE,UAAM,uBAAuB;AAAA,EAAG,SAC/B,KAAK;AAAE,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpG,CAAC;AAEH,QAAQ,MAAM,QAAQ,IAAI;","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.0",
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/skills": "0.1.0",
36
- "@cockpit-ai/worktree": "0.1.0"
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",