@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
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-only show commands for debugging and exploration.
|
|
3
|
+
* These search the entire file system starting from home directory.
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import os from 'os';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import { exec } from 'child_process';
|
|
10
|
+
import { promisify } from 'util';
|
|
11
|
+
import { SUPPORTED_AGENTS } from '../core/agents.js';
|
|
12
|
+
import { readSkillMetadata } from '../core/skill-info.js';
|
|
13
|
+
const execAsync = promisify(exec);
|
|
14
|
+
// Timeout for find commands (60 seconds)
|
|
15
|
+
const FIND_TIMEOUT = 60000;
|
|
16
|
+
/**
|
|
17
|
+
* List skills in a directory, returning name and description.
|
|
18
|
+
*/
|
|
19
|
+
async function listSkillsInDir(skillsDir) {
|
|
20
|
+
const skills = [];
|
|
21
|
+
if (!await fs.pathExists(skillsDir)) {
|
|
22
|
+
return skills;
|
|
23
|
+
}
|
|
24
|
+
const entries = await fs.readdir(skillsDir, { withFileTypes: true });
|
|
25
|
+
for (const entry of entries) {
|
|
26
|
+
if (entry.isDirectory()) {
|
|
27
|
+
const skillPath = path.join(skillsDir, entry.name);
|
|
28
|
+
const metadata = await readSkillMetadata(skillPath);
|
|
29
|
+
if (metadata) {
|
|
30
|
+
skills.push({
|
|
31
|
+
name: metadata.name,
|
|
32
|
+
description: metadata.description
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return skills;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* sun show all-agent-folders
|
|
41
|
+
* Find ALL agent folders (.claude, .codex, .gemini) starting from ~ and show skills in each.
|
|
42
|
+
*/
|
|
43
|
+
export async function showAllAgentFolders() {
|
|
44
|
+
const homeDir = os.homedir();
|
|
45
|
+
// Build find command: find ~ -type d \( -name ".claude" -o -name ".codex" -o -name ".gemini" \)
|
|
46
|
+
const namePatterns = SUPPORTED_AGENTS.map(a => `-name "${a.folderName}"`).join(' -o ');
|
|
47
|
+
const findCmd = `find "${homeDir}" -type d \\( ${namePatterns} \\)`;
|
|
48
|
+
console.log(chalk.cyan('All Agent Folders'));
|
|
49
|
+
console.log(chalk.gray('─'.repeat(40)));
|
|
50
|
+
console.log();
|
|
51
|
+
let stdout = '';
|
|
52
|
+
try {
|
|
53
|
+
const result = await execAsync(findCmd, { maxBuffer: 10 * 1024 * 1024, timeout: FIND_TIMEOUT });
|
|
54
|
+
stdout = result.stdout;
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
// find exits non-zero on permission errors but still produces output
|
|
58
|
+
if (err.stdout) {
|
|
59
|
+
stdout = err.stdout;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log(chalk.red('Failed to search for agent folders.'));
|
|
63
|
+
console.log(chalk.gray(String(err)));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const agentPaths = stdout.trim().split('\n').filter(Boolean);
|
|
68
|
+
if (agentPaths.length === 0) {
|
|
69
|
+
console.log(chalk.yellow('No agent folders found.'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
for (const agentPath of agentPaths) {
|
|
73
|
+
const folderName = path.basename(agentPath);
|
|
74
|
+
const agent = SUPPORTED_AGENTS.find(a => a.folderName === folderName);
|
|
75
|
+
if (!agent)
|
|
76
|
+
continue;
|
|
77
|
+
console.log(chalk.white.bold(agent.name));
|
|
78
|
+
console.log(chalk.gray(` ${agentPath}`));
|
|
79
|
+
// List skills
|
|
80
|
+
const skillsDir = path.join(agentPath, 'skills');
|
|
81
|
+
const skills = await listSkillsInDir(skillsDir);
|
|
82
|
+
if (skills.length === 0) {
|
|
83
|
+
console.log(chalk.gray(' No skills installed'));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(` Skills (${skills.length}):`);
|
|
87
|
+
for (const skill of skills) {
|
|
88
|
+
console.log(` - ${skill.name} ${chalk.gray(`- ${skill.description}`)}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
console.log();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* sun show all-agent-skills-folders
|
|
96
|
+
* Find ALL <agent>/skills folders starting from ~ and show skills in each.
|
|
97
|
+
*/
|
|
98
|
+
export async function showAllAgentSkillsFolders() {
|
|
99
|
+
const homeDir = os.homedir();
|
|
100
|
+
// Build find command for skills directories inside agent folders
|
|
101
|
+
// e.g., find ~ -type d \( -path "*/.claude/skills" -o -path "*/.codex/skills" -o -path "*/.gemini/skills" \)
|
|
102
|
+
const pathPatterns = SUPPORTED_AGENTS.map(a => `-path "*/${a.folderName}/skills"`).join(' -o ');
|
|
103
|
+
const findCmd = `find "${homeDir}" -type d \\( ${pathPatterns} \\)`;
|
|
104
|
+
console.log(chalk.cyan('All Agent Skills Folders'));
|
|
105
|
+
console.log(chalk.gray('─'.repeat(40)));
|
|
106
|
+
console.log();
|
|
107
|
+
let stdout = '';
|
|
108
|
+
try {
|
|
109
|
+
const result = await execAsync(findCmd, { maxBuffer: 10 * 1024 * 1024, timeout: FIND_TIMEOUT });
|
|
110
|
+
stdout = result.stdout;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
if (err.stdout) {
|
|
114
|
+
stdout = err.stdout;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.log(chalk.red('Failed to search for skills folders.'));
|
|
118
|
+
console.log(chalk.gray(String(err)));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const skillsDirs = stdout.trim().split('\n').filter(Boolean);
|
|
123
|
+
if (skillsDirs.length === 0) {
|
|
124
|
+
console.log(chalk.yellow('No agent skills folders found.'));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
for (const skillsDir of skillsDirs) {
|
|
128
|
+
// Get agent name from parent folder
|
|
129
|
+
const agentFolder = path.basename(path.dirname(skillsDir));
|
|
130
|
+
const agent = SUPPORTED_AGENTS.find(a => a.folderName === agentFolder);
|
|
131
|
+
console.log(chalk.white.bold(agent?.name ?? agentFolder));
|
|
132
|
+
console.log(chalk.gray(` ${skillsDir}`));
|
|
133
|
+
// List skills
|
|
134
|
+
const skills = await listSkillsInDir(skillsDir);
|
|
135
|
+
if (skills.length === 0) {
|
|
136
|
+
console.log(chalk.gray(' No skills installed'));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log(` Skills (${skills.length}):`);
|
|
140
|
+
for (const skill of skills) {
|
|
141
|
+
console.log(` - ${skill.name} ${chalk.gray(`- ${skill.description}`)}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
console.log();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* sun show all-skill-folders
|
|
149
|
+
* Find ALL folders containing a valid SKILL.md (with name/description frontmatter).
|
|
150
|
+
*/
|
|
151
|
+
export async function showAllSkillFolders() {
|
|
152
|
+
const homeDir = os.homedir();
|
|
153
|
+
// Find all SKILL.md files
|
|
154
|
+
const findCmd = `find "${homeDir}" -name "SKILL.md" -type f`;
|
|
155
|
+
console.log(chalk.cyan('All Skill Folders'));
|
|
156
|
+
console.log(chalk.gray('─'.repeat(40)));
|
|
157
|
+
console.log();
|
|
158
|
+
let stdout = '';
|
|
159
|
+
try {
|
|
160
|
+
const result = await execAsync(findCmd, { maxBuffer: 10 * 1024 * 1024, timeout: FIND_TIMEOUT });
|
|
161
|
+
stdout = result.stdout;
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
if (err.stdout) {
|
|
165
|
+
stdout = err.stdout;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.log(chalk.red('Failed to search for SKILL.md files.'));
|
|
169
|
+
console.log(chalk.gray(String(err)));
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const skillMdPaths = stdout.trim().split('\n').filter(Boolean);
|
|
174
|
+
if (skillMdPaths.length === 0) {
|
|
175
|
+
console.log(chalk.yellow('No SKILL.md files found.'));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
let validCount = 0;
|
|
179
|
+
for (const skillMdPath of skillMdPaths) {
|
|
180
|
+
const skillDir = path.dirname(skillMdPath);
|
|
181
|
+
const metadata = await readSkillMetadata(skillDir);
|
|
182
|
+
// Only show if it has valid name and description
|
|
183
|
+
if (metadata && metadata.name && metadata.description) {
|
|
184
|
+
validCount++;
|
|
185
|
+
console.log(chalk.white.bold(metadata.name));
|
|
186
|
+
console.log(chalk.gray(` ${skillDir}`));
|
|
187
|
+
console.log(` ${metadata.description}`);
|
|
188
|
+
console.log();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (validCount === 0) {
|
|
192
|
+
console.log(chalk.yellow('No valid SKILL.md files found (missing name/description frontmatter).'));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=show-dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show-dev.js","sourceRoot":"","sources":["../../src/commands/show-dev.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,yCAAyC;AACzC,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,SAAiB;IAC9C,MAAM,MAAM,GAAiD,EAAE,CAAC;IAEhE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAErE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;iBAClC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE7B,gGAAgG;IAChG,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,SAAS,OAAO,iBAAiB,YAAY,MAAM,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAChG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,qEAAqE;QACrE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC;QAE1C,cAAc;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE7B,iEAAiE;IACjE,6GAA6G;IAC7G,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,UAAU,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChG,MAAM,OAAO,GAAG,SAAS,OAAO,iBAAiB,YAAY,MAAM,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAChG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC;QAEvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC;QAE1C,cAAc;QACd,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE7B,0BAA0B;IAC1B,MAAM,OAAO,GAAG,SAAS,OAAO,4BAA4B,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAChG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEnD,iDAAiD;QACjD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACtD,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uEAAuE,CAAC,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Show skill details and installation locations.
|
|
3
|
+
* If no skill specified, shows all agent folders and their packages.
|
|
4
|
+
*
|
|
5
|
+
* Secret commands (not in README, documented in DEV.md):
|
|
6
|
+
* - all-agent-folders: Find all agent folders on the system
|
|
7
|
+
* - all-agent-skills-folders: Find all <agent>/skills folders
|
|
8
|
+
* - all-skill-folders: Find all folders with valid SKILL.md
|
|
9
|
+
*/
|
|
10
|
+
export declare function showCommand(skillName?: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=show.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AA2FA;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGnE"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { findSkillInstallations, readSkillMetadata } from '../core/skill-info.js';
|
|
4
|
+
import { getAgentByFlag } from '../core/agents.js';
|
|
5
|
+
import { detectAllAgents, detectLocalAgents } from '../core/agent-detect.js';
|
|
6
|
+
import { getDefaultAgents } from '../core/config-manager.js';
|
|
7
|
+
import { showAllAgentFolders, showAllAgentSkillsFolders, showAllSkillFolders } from './show-dev.js';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
/**
|
|
10
|
+
* List all skills in a given skills directory path.
|
|
11
|
+
*/
|
|
12
|
+
async function listSkillsInPath(skillsDir) {
|
|
13
|
+
const skills = [];
|
|
14
|
+
if (!await fs.pathExists(skillsDir)) {
|
|
15
|
+
return skills;
|
|
16
|
+
}
|
|
17
|
+
const entries = await fs.readdir(skillsDir, { withFileTypes: true });
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
if (entry.isDirectory()) {
|
|
20
|
+
const skillPath = path.join(skillsDir, entry.name);
|
|
21
|
+
const metadata = await readSkillMetadata(skillPath);
|
|
22
|
+
if (metadata) {
|
|
23
|
+
skills.push({
|
|
24
|
+
name: metadata.name,
|
|
25
|
+
description: metadata.description
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return skills;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Show all agent folders and their installed skills.
|
|
34
|
+
*/
|
|
35
|
+
async function showAllAgents() {
|
|
36
|
+
const allAgents = await detectAllAgents();
|
|
37
|
+
const defaultAgents = await getDefaultAgents();
|
|
38
|
+
const defaultSet = new Set(defaultAgents);
|
|
39
|
+
const localAgents = await detectLocalAgents();
|
|
40
|
+
const localAgentFlags = new Set(localAgents.map(a => a.agent.flag));
|
|
41
|
+
if (allAgents.length === 0) {
|
|
42
|
+
console.log(chalk.yellow('No agent folders found.'));
|
|
43
|
+
console.log(chalk.gray('Agent folders are directories like .claude/, .codex/, .gemini/'));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk.cyan('Agent Folders & Installed Skills'));
|
|
47
|
+
console.log(chalk.gray('─'.repeat(40)));
|
|
48
|
+
console.log();
|
|
49
|
+
for (const detected of allAgents) {
|
|
50
|
+
const { agent, path: agentPath, isGlobal } = detected;
|
|
51
|
+
const locationLabel = isGlobal ? chalk.gray('(global)') : chalk.gray('(local)');
|
|
52
|
+
const isDefault = defaultSet.has(agent.flag);
|
|
53
|
+
const hasLocalFolder = localAgentFlags.has(agent.flag);
|
|
54
|
+
// Show checkmark if this folder would be affected by sun add/remove:
|
|
55
|
+
// - Local folder: affected if agent is selected
|
|
56
|
+
// - Global folder: affected if agent is selected AND no local folder exists
|
|
57
|
+
const wouldBeAffected = isDefault && (isGlobal ? !hasLocalFolder : true);
|
|
58
|
+
const marker = wouldBeAffected ? chalk.green('✓') : chalk.gray('○');
|
|
59
|
+
console.log(`${marker} ${chalk.white.bold(agent.name)} ${locationLabel}`);
|
|
60
|
+
console.log(chalk.gray(` ${agentPath}`));
|
|
61
|
+
// List skills in this agent folder
|
|
62
|
+
const skillsDir = path.join(agentPath, 'skills');
|
|
63
|
+
const skills = await listSkillsInPath(skillsDir);
|
|
64
|
+
if (skills.length === 0) {
|
|
65
|
+
console.log(chalk.gray(' No skills installed'));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
console.log(` Skills (${skills.length}):`);
|
|
69
|
+
for (const skill of skills) {
|
|
70
|
+
console.log(` - ${skill.name} ${chalk.gray(`- ${skill.description}`)}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
console.log();
|
|
74
|
+
}
|
|
75
|
+
console.log(`${chalk.green('✓')} = affected by sun add/remove in this directory`);
|
|
76
|
+
console.log('Run "sun config" to change selected agents.');
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Show skill details and installation locations.
|
|
80
|
+
* If no skill specified, shows all agent folders and their packages.
|
|
81
|
+
*
|
|
82
|
+
* Secret commands (not in README, documented in DEV.md):
|
|
83
|
+
* - all-agent-folders: Find all agent folders on the system
|
|
84
|
+
* - all-agent-skills-folders: Find all <agent>/skills folders
|
|
85
|
+
* - all-skill-folders: Find all folders with valid SKILL.md
|
|
86
|
+
*/
|
|
87
|
+
export async function showCommand(skillName) {
|
|
88
|
+
// Handle secret dev commands
|
|
89
|
+
if (skillName === 'all-agent-folders') {
|
|
90
|
+
await showAllAgentFolders();
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (skillName === 'all-agent-skills-folders') {
|
|
94
|
+
await showAllAgentSkillsFolders();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (skillName === 'all-skill-folders') {
|
|
98
|
+
await showAllSkillFolders();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// If no skill specified, show all agents and their packages
|
|
102
|
+
if (!skillName) {
|
|
103
|
+
await showAllAgents();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const installations = await findSkillInstallations(skillName);
|
|
107
|
+
if (installations.length === 0) {
|
|
108
|
+
console.error(chalk.yellow(`Skill "${skillName}" is not installed.`));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
// Check if there are multiple versions (different content hashes)
|
|
112
|
+
const uniqueHashes = new Set(installations.map(i => i.contentHash));
|
|
113
|
+
const hasMultipleVersions = uniqueHashes.size > 1;
|
|
114
|
+
if (hasMultipleVersions) {
|
|
115
|
+
// Multiple versions detected
|
|
116
|
+
console.log(chalk.cyan(`Skill: ${skillName}`));
|
|
117
|
+
console.log(chalk.yellow('Warning: Multiple versions detected'));
|
|
118
|
+
console.log();
|
|
119
|
+
// Group by content hash
|
|
120
|
+
const byHash = new Map();
|
|
121
|
+
for (const inst of installations) {
|
|
122
|
+
const existing = byHash.get(inst.contentHash) || [];
|
|
123
|
+
existing.push(inst);
|
|
124
|
+
byHash.set(inst.contentHash, existing);
|
|
125
|
+
}
|
|
126
|
+
let versionNum = 1;
|
|
127
|
+
for (const [hash, insts] of byHash) {
|
|
128
|
+
const firstInst = insts[0];
|
|
129
|
+
const locations = insts.map(i => {
|
|
130
|
+
const agent = getAgentByFlag(i.agent);
|
|
131
|
+
return i.isGlobal ? `~/${agent.folderName}/` : `${agent.folderName}/`;
|
|
132
|
+
});
|
|
133
|
+
console.log(chalk.white(`Version ${versionNum} (${locations.join(', ')}):`));
|
|
134
|
+
console.log(` Description: ${firstInst.metadata.description}`);
|
|
135
|
+
if (firstInst.metadata.metadata?.author) {
|
|
136
|
+
console.log(` Author: ${firstInst.metadata.metadata.author}`);
|
|
137
|
+
}
|
|
138
|
+
if (firstInst.metadata.metadata?.version) {
|
|
139
|
+
console.log(` Version: ${firstInst.metadata.metadata.version}`);
|
|
140
|
+
}
|
|
141
|
+
if (firstInst.metadata.license) {
|
|
142
|
+
console.log(` License: ${firstInst.metadata.license}`);
|
|
143
|
+
}
|
|
144
|
+
console.log(` Content hash: ${hash}`);
|
|
145
|
+
console.log();
|
|
146
|
+
versionNum++;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Single version across all installations
|
|
151
|
+
const firstInst = installations[0];
|
|
152
|
+
console.log(chalk.cyan(`Skill: ${skillName}`));
|
|
153
|
+
console.log(`Description: ${firstInst.metadata.description}`);
|
|
154
|
+
if (firstInst.metadata.metadata?.author) {
|
|
155
|
+
console.log(`Author: ${firstInst.metadata.metadata.author}`);
|
|
156
|
+
}
|
|
157
|
+
if (firstInst.metadata.metadata?.version) {
|
|
158
|
+
console.log(`Version: ${firstInst.metadata.metadata.version}`);
|
|
159
|
+
}
|
|
160
|
+
if (firstInst.metadata.license) {
|
|
161
|
+
console.log(`License: ${firstInst.metadata.license}`);
|
|
162
|
+
}
|
|
163
|
+
if (firstInst.metadata.compatibility) {
|
|
164
|
+
console.log(`Compatibility: ${firstInst.metadata.compatibility}`);
|
|
165
|
+
}
|
|
166
|
+
console.log();
|
|
167
|
+
console.log('Installed in:');
|
|
168
|
+
for (const inst of installations) {
|
|
169
|
+
const agent = getAgentByFlag(inst.agent);
|
|
170
|
+
const location = inst.isGlobal ? '(global)' : '(local)';
|
|
171
|
+
console.log(` - ${agent.folderName}/ ${chalk.gray(location)}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DetectedAgent, AgentConfig } from '../types/index.js';
|
|
2
|
+
export declare function detectAgentsInDirectory(directory: string, isGlobal: boolean): Promise<DetectedAgent[]>;
|
|
3
|
+
export declare function detectLocalAgents(): Promise<DetectedAgent[]>;
|
|
4
|
+
export declare function detectGlobalAgents(): Promise<DetectedAgent[]>;
|
|
5
|
+
/**
|
|
6
|
+
* Search the entire file system for all agent folders.
|
|
7
|
+
* Uses `find -type d -name` for efficiency.
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectAllAgentFolders(): Promise<DetectedAgent[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Search the entire file system for agent folders that contain skills.
|
|
12
|
+
* Uses `find` to locate skills directories with content.
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectAllSkillsFolders(): Promise<DetectedAgent[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Detect agents in local and global directories only (fast).
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectAllAgents(): Promise<DetectedAgent[]>;
|
|
19
|
+
export declare function getAgentPath(agent: AgentConfig, isGlobal: boolean): string;
|
|
20
|
+
export declare function getSkillsPath(agent: AgentConfig, isGlobal: boolean): string;
|
|
21
|
+
export declare function ensureSkillsDirectory(agent: AgentConfig, isGlobal: boolean): Promise<string>;
|
|
22
|
+
//# sourceMappingURL=agent-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-detect.d.ts","sourceRoot":"","sources":["../../src/core/agent-detect.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOpE,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAe5G;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAElE;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAEnE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAkCtE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAgBvE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAMhE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAG1E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE3E;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAIlG"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import { exec } from 'child_process';
|
|
5
|
+
import { promisify } from 'util';
|
|
6
|
+
import { SUPPORTED_AGENTS } from './agents.js';
|
|
7
|
+
const execAsync = promisify(exec);
|
|
8
|
+
// Agent folder names to search for
|
|
9
|
+
const AGENT_FOLDER_NAMES = new Set(SUPPORTED_AGENTS.map(a => a.folderName));
|
|
10
|
+
export async function detectAgentsInDirectory(directory, isGlobal) {
|
|
11
|
+
const detected = [];
|
|
12
|
+
for (const agent of SUPPORTED_AGENTS) {
|
|
13
|
+
const agentPath = path.join(directory, agent.folderName);
|
|
14
|
+
if (await fs.pathExists(agentPath)) {
|
|
15
|
+
detected.push({
|
|
16
|
+
agent,
|
|
17
|
+
path: agentPath,
|
|
18
|
+
isGlobal
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return detected;
|
|
23
|
+
}
|
|
24
|
+
export async function detectLocalAgents() {
|
|
25
|
+
return detectAgentsInDirectory(process.cwd(), false);
|
|
26
|
+
}
|
|
27
|
+
export async function detectGlobalAgents() {
|
|
28
|
+
return detectAgentsInDirectory(os.homedir(), true);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Search the entire file system for all agent folders.
|
|
32
|
+
* Uses `find -type d -name` for efficiency.
|
|
33
|
+
*/
|
|
34
|
+
export async function detectAllAgentFolders() {
|
|
35
|
+
const results = [];
|
|
36
|
+
const homeDir = os.homedir();
|
|
37
|
+
// Build find command: find ~ -type d \( -name ".claude" -o -name ".codex" -o -name ".gemini" \)
|
|
38
|
+
const namePatterns = SUPPORTED_AGENTS.map(a => `-name "${a.folderName}"`).join(' -o ');
|
|
39
|
+
const findCmd = `find "${homeDir}" -type d \\( ${namePatterns} \\) 2>/dev/null`;
|
|
40
|
+
try {
|
|
41
|
+
const { stdout } = await execAsync(findCmd, { maxBuffer: 10 * 1024 * 1024 });
|
|
42
|
+
const agentPaths = stdout.trim().split('\n').filter(Boolean);
|
|
43
|
+
for (const agentPath of agentPaths) {
|
|
44
|
+
const folderName = path.basename(agentPath);
|
|
45
|
+
const agent = SUPPORTED_AGENTS.find(a => a.folderName === folderName);
|
|
46
|
+
if (!agent)
|
|
47
|
+
continue;
|
|
48
|
+
const isGlobal = path.dirname(agentPath) === homeDir;
|
|
49
|
+
results.push({
|
|
50
|
+
agent,
|
|
51
|
+
path: agentPath,
|
|
52
|
+
isGlobal
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// find command failed - fall back to simple detection
|
|
58
|
+
const [local, global] = await Promise.all([
|
|
59
|
+
detectLocalAgents(),
|
|
60
|
+
detectGlobalAgents()
|
|
61
|
+
]);
|
|
62
|
+
return [...local, ...global];
|
|
63
|
+
}
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Search the entire file system for agent folders that contain skills.
|
|
68
|
+
* Uses `find` to locate skills directories with content.
|
|
69
|
+
*/
|
|
70
|
+
export async function detectAllSkillsFolders() {
|
|
71
|
+
const allAgents = await detectAllAgentFolders();
|
|
72
|
+
// Filter to only those with skills installed
|
|
73
|
+
const withSkills = [];
|
|
74
|
+
for (const detected of allAgents) {
|
|
75
|
+
const skillsDir = path.join(detected.path, 'skills');
|
|
76
|
+
if (await fs.pathExists(skillsDir)) {
|
|
77
|
+
const entries = await fs.readdir(skillsDir);
|
|
78
|
+
if (entries.length > 0) {
|
|
79
|
+
withSkills.push(detected);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return withSkills;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Detect agents in local and global directories only (fast).
|
|
87
|
+
*/
|
|
88
|
+
export async function detectAllAgents() {
|
|
89
|
+
const [local, global] = await Promise.all([
|
|
90
|
+
detectLocalAgents(),
|
|
91
|
+
detectGlobalAgents()
|
|
92
|
+
]);
|
|
93
|
+
return [...local, ...global];
|
|
94
|
+
}
|
|
95
|
+
export function getAgentPath(agent, isGlobal) {
|
|
96
|
+
const baseDir = isGlobal ? os.homedir() : process.cwd();
|
|
97
|
+
return path.join(baseDir, agent.folderName);
|
|
98
|
+
}
|
|
99
|
+
export function getSkillsPath(agent, isGlobal) {
|
|
100
|
+
return path.join(getAgentPath(agent, isGlobal), 'skills');
|
|
101
|
+
}
|
|
102
|
+
export async function ensureSkillsDirectory(agent, isGlobal) {
|
|
103
|
+
const skillsPath = getSkillsPath(agent, isGlobal);
|
|
104
|
+
await fs.ensureDir(skillsPath);
|
|
105
|
+
return skillsPath;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=agent-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-detect.js","sourceRoot":"","sources":["../../src/core/agent-detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentConfig, AgentType } from '../types/index.js';
|
|
2
|
+
export declare const SUPPORTED_AGENTS: AgentConfig[];
|
|
3
|
+
export declare function getAgentByFlag(flag: string): AgentConfig | undefined;
|
|
4
|
+
export declare function getAgentByFolder(folderName: string): AgentConfig | undefined;
|
|
5
|
+
export declare function getSupportedAgentsMessage(): string;
|
|
6
|
+
export declare function isValidAgentType(flag: string): flag is AgentType;
|
|
7
|
+
export declare function getAgentFlags(): string[];
|
|
8
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEhE,eAAO,MAAM,gBAAgB,EAAE,WAAW,EAgBzC,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEpE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE5E;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAGlD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS,CAEhE;AAED,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const SUPPORTED_AGENTS = [
|
|
2
|
+
{
|
|
3
|
+
name: 'Claude Code',
|
|
4
|
+
flag: 'claude',
|
|
5
|
+
folderName: '.claude'
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
name: 'Codex',
|
|
9
|
+
flag: 'codex',
|
|
10
|
+
folderName: '.codex'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: 'Gemini',
|
|
14
|
+
flag: 'gemini',
|
|
15
|
+
folderName: '.gemini'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
export function getAgentByFlag(flag) {
|
|
19
|
+
return SUPPORTED_AGENTS.find(agent => agent.flag === flag);
|
|
20
|
+
}
|
|
21
|
+
export function getAgentByFolder(folderName) {
|
|
22
|
+
return SUPPORTED_AGENTS.find(agent => agent.folderName === folderName);
|
|
23
|
+
}
|
|
24
|
+
export function getSupportedAgentsMessage() {
|
|
25
|
+
const agentNames = SUPPORTED_AGENTS.map(a => a.name).join(', ');
|
|
26
|
+
return `Currently supported agents: ${agentNames}`;
|
|
27
|
+
}
|
|
28
|
+
export function isValidAgentType(flag) {
|
|
29
|
+
return SUPPORTED_AGENTS.some(agent => agent.flag === flag);
|
|
30
|
+
}
|
|
31
|
+
export function getAgentFlags() {
|
|
32
|
+
return SUPPORTED_AGENTS.map(a => a.flag);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,SAAS;KACtB;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,QAAQ;KACrB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,SAAS;KACtB;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,+BAA+B,UAAU,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SunConfig, AgentType } from '../types/index.js';
|
|
2
|
+
export declare function ensureConfigDir(): Promise<void>;
|
|
3
|
+
export declare function loadConfig(): Promise<SunConfig>;
|
|
4
|
+
export declare function saveConfig(config: SunConfig): Promise<void>;
|
|
5
|
+
export declare function isFirstRun(): Promise<boolean>;
|
|
6
|
+
export declare function getDefaultAgents(): Promise<AgentType[]>;
|
|
7
|
+
export declare function setDefaultAgents(agents: AgentType[]): Promise<void>;
|
|
8
|
+
export declare function getConfigPath(): string;
|
|
9
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAU9D,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAWrD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAG7D;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzE;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|