@sundial-ai/cli 0.0.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.
Files changed (108) hide show
  1. package/DEV.md +58 -0
  2. package/README.md +30 -0
  3. package/dist/commands/add.d.ts +13 -0
  4. package/dist/commands/add.d.ts.map +1 -0
  5. package/dist/commands/add.js +111 -0
  6. package/dist/commands/add.js.map +1 -0
  7. package/dist/commands/config.d.ts +5 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +40 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/list.d.ts +5 -0
  12. package/dist/commands/list.d.ts.map +1 -0
  13. package/dist/commands/list.js +53 -0
  14. package/dist/commands/list.js.map +1 -0
  15. package/dist/commands/remove.d.ts +13 -0
  16. package/dist/commands/remove.d.ts.map +1 -0
  17. package/dist/commands/remove.js +129 -0
  18. package/dist/commands/remove.js.map +1 -0
  19. package/dist/commands/show-dev.d.ts +20 -0
  20. package/dist/commands/show-dev.d.ts.map +1 -0
  21. package/dist/commands/show-dev.js +195 -0
  22. package/dist/commands/show-dev.js.map +1 -0
  23. package/dist/commands/show.d.ts +11 -0
  24. package/dist/commands/show.d.ts.map +1 -0
  25. package/dist/commands/show.js +175 -0
  26. package/dist/commands/show.js.map +1 -0
  27. package/dist/core/agent-detect.d.ts +22 -0
  28. package/dist/core/agent-detect.d.ts.map +1 -0
  29. package/dist/core/agent-detect.js +107 -0
  30. package/dist/core/agent-detect.js.map +1 -0
  31. package/dist/core/agents.d.ts +8 -0
  32. package/dist/core/agents.d.ts.map +1 -0
  33. package/dist/core/agents.js +34 -0
  34. package/dist/core/agents.js.map +1 -0
  35. package/dist/core/config-manager.d.ts +9 -0
  36. package/dist/core/config-manager.d.ts.map +1 -0
  37. package/dist/core/config-manager.js +47 -0
  38. package/dist/core/config-manager.js.map +1 -0
  39. package/dist/core/skill-hash.d.ts +12 -0
  40. package/dist/core/skill-hash.d.ts.map +1 -0
  41. package/dist/core/skill-hash.js +53 -0
  42. package/dist/core/skill-hash.js.map +1 -0
  43. package/dist/core/skill-info.d.ts +34 -0
  44. package/dist/core/skill-info.d.ts.map +1 -0
  45. package/dist/core/skill-info.js +213 -0
  46. package/dist/core/skill-info.js.map +1 -0
  47. package/dist/core/skill-install.d.ts +24 -0
  48. package/dist/core/skill-install.d.ts.map +1 -0
  49. package/dist/core/skill-install.js +123 -0
  50. package/dist/core/skill-install.js.map +1 -0
  51. package/dist/core/skill-source.d.ts +29 -0
  52. package/dist/core/skill-source.d.ts.map +1 -0
  53. package/dist/core/skill-source.js +111 -0
  54. package/dist/core/skill-source.js.map +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +104 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/types/index.d.ts +57 -0
  60. package/dist/types/index.d.ts.map +1 -0
  61. package/dist/types/index.js +2 -0
  62. package/dist/types/index.js.map +1 -0
  63. package/dist/utils/fuzzy-match.d.ts +16 -0
  64. package/dist/utils/fuzzy-match.d.ts.map +1 -0
  65. package/dist/utils/fuzzy-match.js +37 -0
  66. package/dist/utils/fuzzy-match.js.map +1 -0
  67. package/dist/utils/prompts.d.ts +16 -0
  68. package/dist/utils/prompts.d.ts.map +1 -0
  69. package/dist/utils/prompts.js +46 -0
  70. package/dist/utils/prompts.js.map +1 -0
  71. package/dist/utils/registry.d.ts +6 -0
  72. package/dist/utils/registry.d.ts.map +1 -0
  73. package/dist/utils/registry.js +14 -0
  74. package/dist/utils/registry.js.map +1 -0
  75. package/package.json +42 -0
  76. package/src/commands/add.ts +136 -0
  77. package/src/commands/config.ts +47 -0
  78. package/src/commands/list.ts +68 -0
  79. package/src/commands/remove.ts +154 -0
  80. package/src/commands/show-dev.ts +223 -0
  81. package/src/commands/show.ts +203 -0
  82. package/src/core/agent-detect.ts +125 -0
  83. package/src/core/agents.ts +40 -0
  84. package/src/core/config-manager.ts +55 -0
  85. package/src/core/skill-hash.ts +61 -0
  86. package/src/core/skill-info.ts +248 -0
  87. package/src/core/skill-install.ts +165 -0
  88. package/src/core/skill-source.ts +125 -0
  89. package/src/index.ts +116 -0
  90. package/src/types/index.ts +64 -0
  91. package/src/utils/fuzzy-match.ts +48 -0
  92. package/src/utils/prompts.ts +54 -0
  93. package/src/utils/registry.ts +16 -0
  94. package/test/README.md +123 -0
  95. package/test/fixtures/multi-skills/skill-one/SKILL.md +8 -0
  96. package/test/fixtures/multi-skills/skill-two/SKILL.md +8 -0
  97. package/test/fixtures/sample-skill/SKILL.md +8 -0
  98. package/test/logs/add-remove.log +108 -0
  99. package/test/logs/config.log +72 -0
  100. package/test/logs/fuzzy-match.log +64 -0
  101. package/test/logs/show.log +110 -0
  102. package/test/run-all.sh +83 -0
  103. package/test/test-add-remove.sh +245 -0
  104. package/test/test-config.sh +208 -0
  105. package/test/test-fuzzy-match.sh +166 -0
  106. package/test/test-show.sh +179 -0
  107. package/tsconfig.json +20 -0
  108. package/vitest.config.ts +15 -0
package/DEV.md ADDED
@@ -0,0 +1,58 @@
1
+ # Development
2
+
3
+ ## Running Locally
4
+
5
+ ### Option 1: Run compiled JS directly
6
+
7
+ ```bash
8
+ npm run build
9
+ node dist/index.js add tinker
10
+ ```
11
+
12
+ ### Option 2: Run TypeScript directly (no build needed)
13
+
14
+ ```bash
15
+ npm run dev -- add tinker
16
+ npm run dev -- list
17
+ npm run dev -- show meow
18
+ ```
19
+
20
+ ### Option 3: Link globally
21
+
22
+ Replace the global `sun` command with your local version:
23
+
24
+ ```bash
25
+ npm link
26
+ sun add tinker # now uses local code
27
+ ```
28
+
29
+ To undo:
30
+
31
+ ```bash
32
+ npm unlink -g @sundial-ai/cli
33
+ ```
34
+
35
+ ## Running Tests
36
+
37
+ ```bash
38
+ npm test # run all tests once
39
+ npm run test:watch # run tests in watch mode
40
+ ```
41
+
42
+ ## Dev Commands
43
+
44
+ These commands are not documented in the README but are useful for debugging.
45
+ They search the entire file system starting from ~ using `find`.
46
+
47
+ ```bash
48
+ sun show all-agent-folders # Find all <agent>/ folders
49
+ sun show all-agent-skills-folders # Find all <agent>/skills folders with their skills
50
+ sun show all-skill-folders # Find all skill folders with valid SKILL.md (contains name/description in frontmatter)
51
+ ```
52
+
53
+ ## Using the Published Package
54
+
55
+ ```bash
56
+ npm install -g @sundial-ai/cli
57
+ sun add tinker
58
+ ```
package/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # Sundial CLI
2
+
3
+ Manage skills for your AI coding agents.
4
+
5
+ ```bash
6
+ npm install -g @sundial-ai/cli
7
+ ```
8
+
9
+ ```bash
10
+ sun add tinker # Add from registry
11
+ sun add github.com/user/skill # Add from GitHub
12
+ sun add ./my-skill # Add from local path
13
+
14
+ sun list # See installed skills
15
+ sun remove tinker # Remove a skill
16
+ ```
17
+
18
+ Works with Claude Code, Codex, and Gemini.
19
+
20
+ ## Flags
21
+
22
+ ```bash
23
+ sun add tinker --global # Install globally (~/.claude/)
24
+ sun add tinker --claude --codex # Install to specific agents
25
+ ```
26
+
27
+ ## Links
28
+
29
+ - [Agent Skills Specification](https://agentskills.io/specification)
30
+ - [Issues](https://github.com/sundial-org/skills/issues)
@@ -0,0 +1,13 @@
1
+ import type { CommandFlags } from '../types/index.js';
2
+ export interface AddResult {
3
+ skill: string;
4
+ installedNames: string[];
5
+ agents: string[];
6
+ isGlobal: boolean;
7
+ error?: string;
8
+ }
9
+ /**
10
+ * Add skill(s) to agent configuration(s).
11
+ */
12
+ export declare function addCommand(skills: string[], flags: CommandFlags): Promise<void>;
13
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgEjE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDrF"}
@@ -0,0 +1,111 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { getAgentByFlag, SUPPORTED_AGENTS } from '../core/agents.js';
4
+ import { isFirstRun, getDefaultAgents, setDefaultAgents } from '../core/config-manager.js';
5
+ import { detectLocalAgents } from '../core/agent-detect.js';
6
+ import { installSkill } from '../core/skill-install.js';
7
+ import { promptAgentSelection } from '../utils/prompts.js';
8
+ /**
9
+ * Determine which agents to install to and whether to install globally.
10
+ *
11
+ * Logic:
12
+ * 1. If --global flag is set, always install globally
13
+ * 2. If agent flags (--claude, --codex, etc.) are set, use those agents
14
+ * 3. If first run, detect agents and prompt for selection
15
+ * 4. Otherwise use saved default agents
16
+ *
17
+ * For local vs global:
18
+ * - If --global: always global
19
+ * - Otherwise: check if any configured agents have local folders
20
+ * - If yes: install locally to those
21
+ * - If no local folders exist for configured agents: install globally
22
+ */
23
+ async function resolveTargetAgents(flags) {
24
+ const forceGlobal = flags.global ?? false;
25
+ // Check if any agent flags were explicitly set
26
+ const explicitAgents = [];
27
+ for (const agent of SUPPORTED_AGENTS) {
28
+ if (flags[agent.flag]) {
29
+ explicitAgents.push(agent.flag);
30
+ }
31
+ }
32
+ let targetAgents;
33
+ // Determine which agents to target
34
+ if (explicitAgents.length > 0) {
35
+ targetAgents = explicitAgents;
36
+ }
37
+ else if (await isFirstRun()) {
38
+ // First run: show agent type selection dialog
39
+ const selectedAgents = await promptAgentSelection();
40
+ await setDefaultAgents(selectedAgents);
41
+ targetAgents = selectedAgents;
42
+ }
43
+ else {
44
+ // Use saved defaults
45
+ const defaultAgents = await getDefaultAgents();
46
+ if (defaultAgents.length === 0) {
47
+ throw new Error('No default agents configured. Run "sun config" to set up your agents.');
48
+ }
49
+ targetAgents = defaultAgents;
50
+ }
51
+ // Determine if we should install globally or locally
52
+ if (forceGlobal) {
53
+ return { agents: targetAgents, isGlobal: true };
54
+ }
55
+ // Check if any of the target agents have local folders in current directory
56
+ const localAgents = await detectLocalAgents();
57
+ const localAgentFlags = new Set(localAgents.map(a => a.agent.flag));
58
+ const hasLocalFolders = targetAgents.some(agentFlag => localAgentFlags.has(agentFlag));
59
+ // If no local folders exist for any configured agent, install globally
60
+ const isGlobal = !hasLocalFolders;
61
+ return { agents: targetAgents, isGlobal };
62
+ }
63
+ /**
64
+ * Add skill(s) to agent configuration(s).
65
+ */
66
+ export async function addCommand(skills, flags) {
67
+ if (skills.length === 0) {
68
+ console.error(chalk.red('Error: No skills specified. Usage: sun add <skill> [skill2] ...'));
69
+ process.exit(1);
70
+ }
71
+ // Resolve target agents
72
+ const { agents, isGlobal } = await resolveTargetAgents(flags);
73
+ const results = [];
74
+ for (const skill of skills) {
75
+ const spinner = ora(`Adding ${skill}...`).start();
76
+ const result = {
77
+ skill,
78
+ installedNames: [],
79
+ agents: [],
80
+ isGlobal
81
+ };
82
+ try {
83
+ // Install to each target agent
84
+ for (const agentFlag of agents) {
85
+ const { skillNames } = await installSkill(skill, agentFlag, isGlobal);
86
+ result.installedNames = skillNames;
87
+ result.agents.push(getAgentByFlag(agentFlag).name);
88
+ }
89
+ spinner.succeed(`Added ${result.installedNames.join(', ')}`);
90
+ }
91
+ catch (error) {
92
+ const message = error instanceof Error ? error.message : String(error);
93
+ result.error = message;
94
+ spinner.fail(`Failed to add ${skill}: ${message}`);
95
+ }
96
+ results.push(result);
97
+ }
98
+ // Print summary
99
+ const successful = results.filter(r => !r.error);
100
+ if (successful.length > 0) {
101
+ const allSkills = [...new Set(successful.flatMap(r => r.installedNames))];
102
+ const agentFolders = [...new Set(successful.flatMap(r => r.agents))];
103
+ console.log();
104
+ const location = isGlobal ? '(global)' : '(local)';
105
+ console.log(chalk.green(`Added ${allSkills.join(', ')} to ${agentFolders.join(' and ')} ${chalk.gray(location)}`));
106
+ if (!isGlobal) {
107
+ console.log(chalk.gray('(use --global to install globally)'));
108
+ }
109
+ }
110
+ }
111
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,mBAAmB,CAAC,KAAmB;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;IAE1C,+CAA+C;IAC/C,MAAM,cAAc,GAAgB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,KAAK,CAAC,IAA0B,CAAC,EAAE,CAAC;YAC5C,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAiB,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,YAAyB,CAAC;IAE9B,mCAAmC;IACnC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,YAAY,GAAG,cAAc,CAAC;IAChC,CAAC;SAAM,IAAI,MAAM,UAAU,EAAE,EAAE,CAAC;QAC9B,8CAA8C;QAC9C,MAAM,cAAc,GAAG,MAAM,oBAAoB,EAAE,CAAC;QACpD,MAAM,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACvC,YAAY,GAAG,cAAc,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,qBAAqB;QACrB,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,YAAY,GAAG,aAAa,CAAC;IAC/B,CAAC;IAED,qDAAqD;IACrD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,4EAA4E;IAC5E,MAAM,WAAW,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC9C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpE,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvF,uEAAuE;IACvE,MAAM,QAAQ,GAAG,CAAC,eAAe,CAAC;IAElC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAUD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAgB,EAAE,KAAmB;IACpE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,wBAAwB;IACxB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAE9D,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAElD,MAAM,MAAM,GAAc;YACxB,KAAK;YACL,cAAc,EAAE,EAAE;YAClB,MAAM,EAAE,EAAE;YACV,QAAQ;SACT,CAAC;QAEF,IAAI,CAAC;YACH,+BAA+B;YAC/B,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;gBAC/B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACtE,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,SAAS,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,iBAAiB,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,gBAAgB;IAChB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAErE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAEnH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Re-open agent selection dialog and update config.
3
+ */
4
+ export declare function configCommand(): Promise<void>;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCnD"}
@@ -0,0 +1,40 @@
1
+ import chalk from 'chalk';
2
+ import { getSupportedAgentsMessage, SUPPORTED_AGENTS } from '../core/agents.js';
3
+ import { loadConfig, setDefaultAgents, getConfigPath } from '../core/config-manager.js';
4
+ import { promptAgentSelection } from '../utils/prompts.js';
5
+ /**
6
+ * Re-open agent selection dialog and update config.
7
+ */
8
+ export async function configCommand() {
9
+ const config = await loadConfig();
10
+ console.log(chalk.cyan('Sundial CLI Configuration'));
11
+ console.log(chalk.gray(`Config file: ${getConfigPath()}`));
12
+ console.log();
13
+ // Show current defaults
14
+ if (config.defaultAgents.length > 0) {
15
+ console.log('Current default agents:');
16
+ for (const agentFlag of config.defaultAgents) {
17
+ const agent = SUPPORTED_AGENTS.find(a => a.flag === agentFlag);
18
+ if (agent) {
19
+ console.log(` - ${agent.name} ${chalk.gray(`(~/${agent.folderName}/ and ./${agent.folderName}/)`)}`);
20
+ }
21
+ }
22
+ console.log();
23
+ }
24
+ console.log(chalk.gray(getSupportedAgentsMessage()));
25
+ console.log();
26
+ // Show agent type selection dialog
27
+ const selectedAgents = await promptAgentSelection(config.defaultAgents);
28
+ await setDefaultAgents(selectedAgents);
29
+ console.log();
30
+ console.log(chalk.green('Configuration saved!'));
31
+ // Show new defaults
32
+ console.log('New default agents:');
33
+ for (const agentFlag of selectedAgents) {
34
+ const agent = SUPPORTED_AGENTS.find(a => a.flag === agentFlag);
35
+ if (agent) {
36
+ console.log(` - ${agent.name} ${chalk.gray(`(~/${agent.folderName}/ and ./${agent.folderName}/)`)}`);
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,wBAAwB;IACxB,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAC/D,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,UAAU,WAAW,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,mCAAmC;IACnC,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAExE,MAAM,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAEjD,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC/D,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,UAAU,WAAW,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * List all installed skills for each agent.
3
+ */
4
+ export declare function listCommand(): Promise<void>;
5
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqDjD"}
@@ -0,0 +1,53 @@
1
+ import chalk from 'chalk';
2
+ import { SUPPORTED_AGENTS, getSupportedAgentsMessage } from '../core/agents.js';
3
+ import { listSkillsForAgent } from '../core/skill-info.js';
4
+ /**
5
+ * List all installed skills for each agent.
6
+ */
7
+ export async function listCommand() {
8
+ const allAgentSkills = [];
9
+ // Check both local and global for each agent
10
+ for (const agent of SUPPORTED_AGENTS) {
11
+ // Local
12
+ const localSkills = await listSkillsForAgent(agent.folderName, false);
13
+ if (localSkills.length > 0) {
14
+ allAgentSkills.push({
15
+ agentName: agent.name,
16
+ folderName: agent.folderName,
17
+ isGlobal: false,
18
+ skills: localSkills
19
+ });
20
+ }
21
+ // Global
22
+ const globalSkills = await listSkillsForAgent(agent.folderName, true);
23
+ if (globalSkills.length > 0) {
24
+ allAgentSkills.push({
25
+ agentName: agent.name,
26
+ folderName: agent.folderName,
27
+ isGlobal: true,
28
+ skills: globalSkills
29
+ });
30
+ }
31
+ }
32
+ if (allAgentSkills.length === 0) {
33
+ console.log(chalk.yellow('No skills installed.'));
34
+ console.log();
35
+ console.log(chalk.gray(getSupportedAgentsMessage()));
36
+ console.log(chalk.gray('You can add skills with "sun add <skill>"'));
37
+ return;
38
+ }
39
+ // Print skills grouped by agent
40
+ for (const agentSkills of allAgentSkills) {
41
+ const location = agentSkills.isGlobal
42
+ ? `global ~/${agentSkills.folderName}/`
43
+ : `${agentSkills.folderName}/`;
44
+ console.log(chalk.cyan(`${agentSkills.agentName} (${location}):`));
45
+ for (const skill of agentSkills.skills) {
46
+ console.log(` - ${skill}`);
47
+ }
48
+ console.log();
49
+ }
50
+ console.log(chalk.gray(getSupportedAgentsMessage()));
51
+ console.log(chalk.gray('You can add skills with "sun add <skill>" or remove with "sun remove <skill>"'));
52
+ }
53
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAS3D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,cAAc,GAAkB,EAAE,CAAC;IAEzC,6CAA6C;IAC7C,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,QAAQ;QACR,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACtE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,cAAc,CAAC,IAAI,CAAC;gBAClB,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;QACL,CAAC;QAED,SAAS;QACT,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACtE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,cAAc,CAAC,IAAI,CAAC;gBAClB,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,WAAW,IAAI,cAAc,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ;YACnC,CAAC,CAAC,YAAY,WAAW,CAAC,UAAU,GAAG;YACvC,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,GAAG,CAAC;QAEjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC;QAEnE,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC,CAAC;AAC3G,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { CommandFlags } from '../types/index.js';
2
+ export interface RemoveResult {
3
+ skill: string;
4
+ removedFrom: string[];
5
+ notFoundIn: string[];
6
+ isGlobal: boolean;
7
+ error?: string;
8
+ }
9
+ /**
10
+ * Remove skill(s) from agent configuration(s).
11
+ */
12
+ export declare function removeCommand(skills: string[], flags: CommandFlags): Promise<void>;
13
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA2DjE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ExF"}
@@ -0,0 +1,129 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { getAgentByFlag, SUPPORTED_AGENTS } from '../core/agents.js';
4
+ import { getDefaultAgents } from '../core/config-manager.js';
5
+ import { detectLocalAgents } from '../core/agent-detect.js';
6
+ import { removeSkill } from '../core/skill-install.js';
7
+ /**
8
+ * Determine which agents to remove from and whether to target global installs.
9
+ * Uses same logic as add command (except no first-run prompt).
10
+ *
11
+ * Logic:
12
+ * 1. If --global flag is set, always target global
13
+ * 2. If agent flags (--claude, --codex, etc.) are set, use those agents
14
+ * 3. Otherwise use saved default agents (error if none configured)
15
+ *
16
+ * For local vs global:
17
+ * - If --global: always global
18
+ * - Otherwise: check if any configured agents have local folders
19
+ * - If yes: target local
20
+ * - If no local folders exist for configured agents: target global
21
+ */
22
+ async function resolveTargetAgents(flags) {
23
+ const forceGlobal = flags.global ?? false;
24
+ // Check if any agent flags were explicitly set
25
+ const explicitAgents = [];
26
+ for (const agent of SUPPORTED_AGENTS) {
27
+ if (flags[agent.flag]) {
28
+ explicitAgents.push(agent.flag);
29
+ }
30
+ }
31
+ let targetAgents;
32
+ // Determine which agents to target
33
+ if (explicitAgents.length > 0) {
34
+ targetAgents = explicitAgents;
35
+ }
36
+ else {
37
+ // Use saved defaults (no first-run prompt for remove)
38
+ const defaultAgents = await getDefaultAgents();
39
+ if (defaultAgents.length === 0) {
40
+ throw new Error('No default agents configured. Run "sun add" first or use --claude/--codex/--gemini flags.');
41
+ }
42
+ targetAgents = defaultAgents;
43
+ }
44
+ // Determine if we should target global or local
45
+ if (forceGlobal) {
46
+ return { agents: targetAgents, isGlobal: true };
47
+ }
48
+ // Check if any of the target agents have local folders in current directory
49
+ const localAgents = await detectLocalAgents();
50
+ const localAgentFlags = new Set(localAgents.map(a => a.agent.flag));
51
+ const hasLocalFolders = targetAgents.some(agentFlag => localAgentFlags.has(agentFlag));
52
+ // If no local folders exist for any configured agent, target global
53
+ const isGlobal = !hasLocalFolders;
54
+ return { agents: targetAgents, isGlobal };
55
+ }
56
+ /**
57
+ * Remove skill(s) from agent configuration(s).
58
+ */
59
+ export async function removeCommand(skills, flags) {
60
+ if (skills.length === 0) {
61
+ console.error(chalk.red('Error: No skills specified. Usage: sun remove <skill> [skill2] ...'));
62
+ process.exit(1);
63
+ }
64
+ // Resolve target agents
65
+ let agents;
66
+ let isGlobal;
67
+ try {
68
+ const resolved = await resolveTargetAgents(flags);
69
+ agents = resolved.agents;
70
+ isGlobal = resolved.isGlobal;
71
+ }
72
+ catch (error) {
73
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
74
+ process.exit(1);
75
+ }
76
+ const results = [];
77
+ for (const skill of skills) {
78
+ const spinner = ora(`Removing ${skill}...`).start();
79
+ const result = {
80
+ skill,
81
+ removedFrom: [],
82
+ notFoundIn: [],
83
+ isGlobal
84
+ };
85
+ try {
86
+ // Remove from each target agent
87
+ for (const agentFlag of agents) {
88
+ const removed = await removeSkill(skill, agentFlag, isGlobal);
89
+ const agentName = getAgentByFlag(agentFlag).name;
90
+ if (removed) {
91
+ result.removedFrom.push(agentName);
92
+ }
93
+ else {
94
+ result.notFoundIn.push(agentName);
95
+ }
96
+ }
97
+ if (result.removedFrom.length > 0) {
98
+ spinner.succeed(`Removed ${skill} from ${result.removedFrom.join(' and ')}`);
99
+ }
100
+ else {
101
+ const pathPrefix = isGlobal ? '~/' : './';
102
+ const checkedPaths = agents.map(a => `${pathPrefix}${getAgentByFlag(a).folderName}/`);
103
+ spinner.warn(`${skill} not found in configured agents (${checkedPaths.join(', ')})`);
104
+ }
105
+ if (result.notFoundIn.length > 0 && result.removedFrom.length > 0) {
106
+ console.log(chalk.gray(` (not found in: ${result.notFoundIn.join(', ')})`));
107
+ }
108
+ }
109
+ catch (error) {
110
+ const message = error instanceof Error ? error.message : String(error);
111
+ result.error = message;
112
+ spinner.fail(`Failed to remove ${skill}: ${message}`);
113
+ }
114
+ results.push(result);
115
+ }
116
+ // Print summary if multiple skills
117
+ if (skills.length > 1) {
118
+ const totalRemoved = results.filter(r => r.removedFrom.length > 0).length;
119
+ const totalFailed = results.filter(r => r.error || r.removedFrom.length === 0).length;
120
+ console.log();
121
+ if (totalRemoved > 0) {
122
+ console.log(chalk.green(`Removed ${totalRemoved} skill(s)`));
123
+ }
124
+ if (totalFailed > 0) {
125
+ console.log(chalk.yellow(`${totalFailed} skill(s) not found or failed`));
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Dev-only show commands for debugging and exploration.
3
+ * These search the entire file system starting from home directory.
4
+ */
5
+ /**
6
+ * sun show all-agent-folders
7
+ * Find ALL agent folders (.claude, .codex, .gemini) starting from ~ and show skills in each.
8
+ */
9
+ export declare function showAllAgentFolders(): Promise<void>;
10
+ /**
11
+ * sun show all-agent-skills-folders
12
+ * Find ALL <agent>/skills folders starting from ~ and show skills in each.
13
+ */
14
+ export declare function showAllAgentSkillsFolders(): Promise<void>;
15
+ /**
16
+ * sun show all-skill-folders
17
+ * Find ALL folders containing a valid SKILL.md (with name/description frontmatter).
18
+ */
19
+ export declare function showAllSkillFolders(): Promise<void>;
20
+ //# sourceMappingURL=show-dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-dev.d.ts","sourceRoot":"","sources":["../../src/commands/show-dev.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4CH;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDzD;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsD/D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkDzD"}