claudekit-cli 3.31.0-dev.4 → 3.31.0-dev.6

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.
Files changed (2) hide show
  1. package/dist/index.js +158 -40
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -22985,6 +22985,108 @@ var init_versions_command_help = __esm(() => {
22985
22985
  };
22986
22986
  });
22987
22987
 
22988
+ // src/domains/help/commands/skill-command-help.ts
22989
+ var skillCommandHelp;
22990
+ var init_skill_command_help = __esm(() => {
22991
+ skillCommandHelp = {
22992
+ name: "skill",
22993
+ description: "Install, uninstall, and manage ClaudeKit skills across coding agents",
22994
+ usage: "ck skill [options]",
22995
+ examples: [
22996
+ {
22997
+ command: "ck skill --name frontend-design --agent claude-code -g",
22998
+ description: "Install skill to Claude Code globally"
22999
+ },
23000
+ {
23001
+ command: "ck skill --list --installed",
23002
+ description: "Show all installed skills with their locations"
23003
+ }
23004
+ ],
23005
+ optionGroups: [
23006
+ {
23007
+ title: "Mode Options",
23008
+ options: [
23009
+ {
23010
+ flags: "-l, --list",
23011
+ description: "List available skills from ClaudeKit source"
23012
+ },
23013
+ {
23014
+ flags: "--installed",
23015
+ description: "When used with --list, show installed skills instead"
23016
+ },
23017
+ {
23018
+ flags: "-u, --uninstall",
23019
+ description: "Uninstall skill(s) from agent(s)"
23020
+ },
23021
+ {
23022
+ flags: "--sync",
23023
+ description: "Sync registry with filesystem (clean orphaned entries)"
23024
+ }
23025
+ ]
23026
+ },
23027
+ {
23028
+ title: "Installation Options",
23029
+ options: [
23030
+ {
23031
+ flags: "-n, --name <skill>",
23032
+ description: "Skill name to install or uninstall"
23033
+ },
23034
+ {
23035
+ flags: "-a, --agent <agent>",
23036
+ description: "Target agent(s) - can be specified multiple times. Valid: claude-code, cursor, codex, opencode, goose, gemini-cli, antigravity, github-copilot, amp, kilo, roo, windsurf, cline, openhands"
23037
+ },
23038
+ {
23039
+ flags: "-g, --global",
23040
+ description: "Install to user's home directory (available across projects)"
23041
+ },
23042
+ {
23043
+ flags: "--all",
23044
+ description: "Install to all supported agents"
23045
+ },
23046
+ {
23047
+ flags: "-y, --yes",
23048
+ description: "Non-interactive mode (skip confirmations)"
23049
+ }
23050
+ ]
23051
+ },
23052
+ {
23053
+ title: "Uninstall Options",
23054
+ options: [
23055
+ {
23056
+ flags: "-f, --force",
23057
+ description: "Force uninstall even if skill not in registry (requires --agent)"
23058
+ }
23059
+ ]
23060
+ }
23061
+ ],
23062
+ sections: [
23063
+ {
23064
+ title: "Supported Agents",
23065
+ content: ` claude-code Claude Code CLI
23066
+ cursor Cursor IDE
23067
+ codex Codex CLI
23068
+ opencode OpenCode
23069
+ goose Goose AI
23070
+ gemini-cli Gemini CLI
23071
+ antigravity Antigravity Agent
23072
+ github-copilot GitHub Copilot
23073
+ amp Amp
23074
+ kilo Kilo Code
23075
+ roo Roo Code
23076
+ windsurf Windsurf IDE
23077
+ cline Cline
23078
+ openhands OpenHands`
23079
+ },
23080
+ {
23081
+ title: "Notes",
23082
+ content: ` • Skills are installed from ~/.claude/skills (ClaudeKit Engineer source)
23083
+ • Registry stored at ~/.claudekit/skill-registry.json
23084
+ • Project installs go to ./<agent>/skills, global to ~/<agent>/skills`
23085
+ }
23086
+ ]
23087
+ };
23088
+ });
23089
+
22988
23090
  // src/domains/help/commands/index.ts
22989
23091
  var init_commands2 = __esm(() => {
22990
23092
  init_new_command_help();
@@ -22993,6 +23095,7 @@ var init_commands2 = __esm(() => {
22993
23095
  init_uninstall_command_help();
22994
23096
  init_update_command_help();
22995
23097
  init_versions_command_help();
23098
+ init_skill_command_help();
22996
23099
  init_common_options();
22997
23100
  });
22998
23101
 
@@ -23010,7 +23113,8 @@ var init_help_commands = __esm(() => {
23010
23113
  update: updateCommandHelp,
23011
23114
  versions: versionsCommandHelp,
23012
23115
  doctor: doctorCommandHelp,
23013
- uninstall: uninstallCommandHelp
23116
+ uninstall: uninstallCommandHelp,
23117
+ skill: skillCommandHelp
23014
23118
  };
23015
23119
  });
23016
23120
 
@@ -48946,6 +49050,7 @@ async function skillCommand(options2) {
48946
49050
  const ctx = {
48947
49051
  options: validOptions,
48948
49052
  cancelled: false,
49053
+ selectedSkills: [],
48949
49054
  selectedAgents: [],
48950
49055
  installGlobally: validOptions.global ?? false,
48951
49056
  availableSkills,
@@ -48968,12 +49073,12 @@ async function skillCommand(options2) {
48968
49073
  $e(import_picocolors21.default.red("Installation failed"));
48969
49074
  process.exit(1);
48970
49075
  }
48971
- ctx.selectedSkill = skill;
49076
+ ctx.selectedSkills = [skill];
48972
49077
  f2.info(`Skill: ${import_picocolors21.default.cyan(skill.name)}`);
48973
49078
  f2.message(import_picocolors21.default.dim(skill.description));
48974
49079
  } else if (availableSkills.length === 1) {
48975
- ctx.selectedSkill = availableSkills[0];
48976
- f2.info(`Skill: ${import_picocolors21.default.cyan(ctx.selectedSkill.name)}`);
49080
+ ctx.selectedSkills = [availableSkills[0]];
49081
+ f2.info(`Skill: ${import_picocolors21.default.cyan(ctx.selectedSkills[0].name)}`);
48977
49082
  } else if (validOptions.yes) {
48978
49083
  f2.error("--name required in non-interactive mode with multiple skills");
48979
49084
  process.exit(1);
@@ -48983,15 +49088,17 @@ async function skillCommand(options2) {
48983
49088
  label: s.name,
48984
49089
  hint: s.description.length > 50 ? `${s.description.slice(0, 47)}...` : s.description
48985
49090
  }));
48986
- const selected = await ie({
48987
- message: "Select a skill to install",
48988
- options: skillChoices
49091
+ const selected = await ae({
49092
+ message: "Select skill(s) to install",
49093
+ options: skillChoices,
49094
+ required: true
48989
49095
  });
48990
49096
  if (lD(selected)) {
48991
49097
  ue("Installation cancelled");
48992
49098
  return;
48993
49099
  }
48994
- ctx.selectedSkill = selected;
49100
+ ctx.selectedSkills = selected;
49101
+ f2.info(`Selected ${ctx.selectedSkills.length} skill(s)`);
48995
49102
  }
48996
49103
  const validAgentTypes = Object.keys(agents);
48997
49104
  if (validOptions.agent && validOptions.agent.length > 0) {
@@ -49069,60 +49176,71 @@ async function skillCommand(options2) {
49069
49176
  }
49070
49177
  ctx.installGlobally = scope;
49071
49178
  }
49072
- if (!ctx.selectedSkill) {
49073
- f2.error("No skill selected");
49179
+ if (ctx.selectedSkills.length === 0) {
49180
+ f2.error("No skills selected");
49074
49181
  process.exit(1);
49075
49182
  }
49076
- const selectedSkill = ctx.selectedSkill;
49077
49183
  console.log();
49078
49184
  f2.step(import_picocolors21.default.bold("Installation Summary"));
49079
- const preview = getInstallPreview(selectedSkill, ctx.selectedAgents, {
49080
- global: ctx.installGlobally
49081
- });
49082
- for (const item of preview) {
49083
- const status = item.exists ? import_picocolors21.default.yellow(" (will overwrite)") : "";
49084
- f2.message(` ${import_picocolors21.default.dim("→")} ${item.displayName}: ${import_picocolors21.default.dim(item.path)}${status}`);
49185
+ for (const skill of ctx.selectedSkills) {
49186
+ f2.message(` ${import_picocolors21.default.cyan(skill.name)}`);
49187
+ const preview = getInstallPreview(skill, ctx.selectedAgents, {
49188
+ global: ctx.installGlobally
49189
+ });
49190
+ for (const item of preview) {
49191
+ const status = item.exists ? import_picocolors21.default.yellow(" (overwrite)") : "";
49192
+ f2.message(` ${import_picocolors21.default.dim("→")} ${item.displayName}${status}`);
49193
+ }
49085
49194
  }
49086
49195
  console.log();
49087
49196
  if (!validOptions.yes) {
49088
- const confirmed = await se({ message: "Proceed with installation?" });
49197
+ const confirmed = await se({
49198
+ message: `Install ${ctx.selectedSkills.length} skill(s) to ${ctx.selectedAgents.length} agent(s)?`
49199
+ });
49089
49200
  if (lD(confirmed) || !confirmed) {
49090
49201
  ue("Installation cancelled");
49091
49202
  return;
49092
49203
  }
49093
49204
  }
49094
49205
  const spinner = de();
49095
- spinner.start("Installing skill...");
49096
- const results = await installSkillToAgents(selectedSkill, ctx.selectedAgents, {
49097
- global: ctx.installGlobally
49098
- });
49206
+ spinner.start(`Installing ${ctx.selectedSkills.length} skill(s)...`);
49207
+ let totalSuccessful = 0;
49208
+ let totalFailed = 0;
49209
+ const allResults = [];
49210
+ for (const skill of ctx.selectedSkills) {
49211
+ const results = await installSkillToAgents(skill, ctx.selectedAgents, {
49212
+ global: ctx.installGlobally
49213
+ });
49214
+ allResults.push({ skill: skill.name, results });
49215
+ totalSuccessful += results.filter((r2) => r2.success).length;
49216
+ totalFailed += results.filter((r2) => !r2.success).length;
49217
+ }
49099
49218
  spinner.stop("Installation complete");
49100
49219
  console.log();
49101
- const successful = results.filter((r2) => r2.success);
49102
- const failed = results.filter((r2) => !r2.success);
49103
- if (successful.length > 0) {
49104
- f2.success(import_picocolors21.default.green(`Successfully installed to ${successful.length} agent(s)`));
49105
- for (const r2 of successful) {
49106
- f2.message(` ${import_picocolors21.default.green("✓")} ${r2.agentDisplayName}`);
49107
- f2.message(` ${import_picocolors21.default.dim(r2.path)}`);
49220
+ for (const { skill, results } of allResults) {
49221
+ const successful = results.filter((r2) => r2.success);
49222
+ const failed = results.filter((r2) => !r2.success);
49223
+ if (successful.length > 0) {
49224
+ f2.success(`${import_picocolors21.default.cyan(skill)} ${successful.length} agent(s)`);
49225
+ for (const r2 of successful) {
49226
+ f2.message(` ${import_picocolors21.default.green("✓")} ${r2.agentDisplayName}`);
49227
+ }
49108
49228
  }
49109
- }
49110
- if (failed.length > 0) {
49111
- console.log();
49112
- f2.error(import_picocolors21.default.red(`Failed to install to ${failed.length} agent(s)`));
49113
- for (const r2 of failed) {
49114
- f2.message(` ${import_picocolors21.default.red("✗")} ${r2.agentDisplayName}`);
49115
- f2.message(` ${import_picocolors21.default.dim(r2.error)}`);
49229
+ if (failed.length > 0) {
49230
+ f2.error(`${import_picocolors21.default.cyan(skill)} failed: ${failed.length} agent(s)`);
49231
+ for (const r2 of failed) {
49232
+ f2.message(` ${import_picocolors21.default.red("✗")} ${r2.agentDisplayName}: ${import_picocolors21.default.dim(r2.error)}`);
49233
+ }
49116
49234
  }
49117
49235
  }
49118
49236
  console.log();
49119
- if (successful.length === 0 && failed.length === 0) {
49237
+ if (totalSuccessful === 0 && totalFailed === 0) {
49120
49238
  $e(import_picocolors21.default.yellow("No installations performed"));
49121
- } else if (failed.length > 0 && successful.length === 0) {
49239
+ } else if (totalFailed > 0 && totalSuccessful === 0) {
49122
49240
  $e(import_picocolors21.default.red("Installation failed"));
49123
49241
  process.exit(1);
49124
49242
  } else {
49125
- $e(import_picocolors21.default.green("Done!"));
49243
+ $e(import_picocolors21.default.green(`Done! ${totalSuccessful} installed, ${totalFailed} failed`));
49126
49244
  }
49127
49245
  } catch (error) {
49128
49246
  logger.error(error instanceof Error ? error.message : "Unknown error");
@@ -49626,7 +49744,7 @@ var import_fs_extra37 = __toESM(require_lib(), 1);
49626
49744
  // package.json
49627
49745
  var package_default = {
49628
49746
  name: "claudekit-cli",
49629
- version: "3.31.0-dev.4",
49747
+ version: "3.31.0-dev.6",
49630
49748
  description: "CLI tool for bootstrapping and updating ClaudeKit projects",
49631
49749
  type: "module",
49632
49750
  repository: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudekit-cli",
3
- "version": "3.31.0-dev.4",
3
+ "version": "3.31.0-dev.6",
4
4
  "description": "CLI tool for bootstrapping and updating ClaudeKit projects",
5
5
  "type": "module",
6
6
  "repository": {