@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.
- package/DEV.md +58 -0
- package/README.md +30 -0
- package/dist/commands/add.d.ts +13 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +111 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/config.d.ts +5 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +40 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +53 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/remove.d.ts +13 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +129 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/show-dev.d.ts +20 -0
- package/dist/commands/show-dev.d.ts.map +1 -0
- package/dist/commands/show-dev.js +195 -0
- package/dist/commands/show-dev.js.map +1 -0
- package/dist/commands/show.d.ts +11 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +175 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/core/agent-detect.d.ts +22 -0
- package/dist/core/agent-detect.d.ts.map +1 -0
- package/dist/core/agent-detect.js +107 -0
- package/dist/core/agent-detect.js.map +1 -0
- package/dist/core/agents.d.ts +8 -0
- package/dist/core/agents.d.ts.map +1 -0
- package/dist/core/agents.js +34 -0
- package/dist/core/agents.js.map +1 -0
- package/dist/core/config-manager.d.ts +9 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +47 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/skill-hash.d.ts +12 -0
- package/dist/core/skill-hash.d.ts.map +1 -0
- package/dist/core/skill-hash.js +53 -0
- package/dist/core/skill-hash.js.map +1 -0
- package/dist/core/skill-info.d.ts +34 -0
- package/dist/core/skill-info.d.ts.map +1 -0
- package/dist/core/skill-info.js +213 -0
- package/dist/core/skill-info.js.map +1 -0
- package/dist/core/skill-install.d.ts +24 -0
- package/dist/core/skill-install.d.ts.map +1 -0
- package/dist/core/skill-install.js +123 -0
- package/dist/core/skill-install.js.map +1 -0
- package/dist/core/skill-source.d.ts +29 -0
- package/dist/core/skill-source.d.ts.map +1 -0
- package/dist/core/skill-source.js +111 -0
- package/dist/core/skill-source.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +104 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +57 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/fuzzy-match.d.ts +16 -0
- package/dist/utils/fuzzy-match.d.ts.map +1 -0
- package/dist/utils/fuzzy-match.js +37 -0
- package/dist/utils/fuzzy-match.js.map +1 -0
- package/dist/utils/prompts.d.ts +16 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +46 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/registry.d.ts +6 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/utils/registry.js +14 -0
- package/dist/utils/registry.js.map +1 -0
- package/package.json +42 -0
- package/src/commands/add.ts +136 -0
- package/src/commands/config.ts +47 -0
- package/src/commands/list.ts +68 -0
- package/src/commands/remove.ts +154 -0
- package/src/commands/show-dev.ts +223 -0
- package/src/commands/show.ts +203 -0
- package/src/core/agent-detect.ts +125 -0
- package/src/core/agents.ts +40 -0
- package/src/core/config-manager.ts +55 -0
- package/src/core/skill-hash.ts +61 -0
- package/src/core/skill-info.ts +248 -0
- package/src/core/skill-install.ts +165 -0
- package/src/core/skill-source.ts +125 -0
- package/src/index.ts +116 -0
- package/src/types/index.ts +64 -0
- package/src/utils/fuzzy-match.ts +48 -0
- package/src/utils/prompts.ts +54 -0
- package/src/utils/registry.ts +16 -0
- package/test/README.md +123 -0
- package/test/fixtures/multi-skills/skill-one/SKILL.md +8 -0
- package/test/fixtures/multi-skills/skill-two/SKILL.md +8 -0
- package/test/fixtures/sample-skill/SKILL.md +8 -0
- package/test/logs/add-remove.log +108 -0
- package/test/logs/config.log +72 -0
- package/test/logs/fuzzy-match.log +64 -0
- package/test/logs/show.log +110 -0
- package/test/run-all.sh +83 -0
- package/test/test-add-remove.sh +245 -0
- package/test/test-config.sh +208 -0
- package/test/test-fuzzy-match.sh +166 -0
- package/test/test-show.sh +179 -0
- package/tsconfig.json +20 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|