@tc9011/skills-manager 0.4.1 → 0.5.0
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/README.md +4 -4
- package/dist/commands/link.js +64 -39
- package/dist/commands/link.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -113,9 +113,9 @@ An interactive multiselect prompt lets you pick which agents to link. Only agent
|
|
|
113
113
|
|
|
114
114
|
When using `--project` (or `-p`), you'll go through three interactive prompts:
|
|
115
115
|
|
|
116
|
-
1. **Select
|
|
117
|
-
2. **
|
|
118
|
-
3. **
|
|
116
|
+
1. **Select skills** — choose which skills to link (none pre-selected)
|
|
117
|
+
2. **Copy or symlink** — copy files (default, recommended) or create absolute symlinks
|
|
118
|
+
3. **Select agents** — choose which agents to set up project-level skills for
|
|
119
119
|
|
|
120
120
|
Example project structure after `link --project`:
|
|
121
121
|
```
|
|
@@ -228,7 +228,7 @@ skills-manager link reads .skill-lock.json → creates relative symlinks:
|
|
|
228
228
|
```
|
|
229
229
|
|
|
230
230
|
```
|
|
231
|
-
skills-manager link --project reads .skill-lock.json → select
|
|
231
|
+
skills-manager link --project reads .skill-lock.json → select skills → choose copy/symlink → select agents → copies/symlinks to CWD:
|
|
232
232
|
|
|
233
233
|
./my-project/.agents/skills/my-skill ← copied from ~/.agents/skills/
|
|
234
234
|
./my-project/.claude/skills/my-skill ← copied from ~/.agents/skills/
|
package/dist/commands/link.js
CHANGED
|
@@ -26,35 +26,18 @@ export async function linkCommand(options) {
|
|
|
26
26
|
throw new CliError('No lastSelectedAgents found in .skill-lock.json.');
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
// 2.
|
|
30
|
-
const agentChoices = agents.map(id => {
|
|
31
|
-
const globalPath = getAgentGlobalPath(id);
|
|
32
|
-
const dirExists = existsSync(globalPath);
|
|
33
|
-
return {
|
|
34
|
-
value: id,
|
|
35
|
-
label: `${agentRegistry[id].displayName} (${id})`,
|
|
36
|
-
hint: dirExists ? globalPath : `${globalPath} — directory will be created`,
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
const selected = await p.multiselect({
|
|
40
|
-
message: 'Select agents to link skills to:',
|
|
41
|
-
options: agentChoices,
|
|
42
|
-
initialValues: computeInitialValues(agents, agentChoices),
|
|
43
|
-
required: false,
|
|
44
|
-
});
|
|
45
|
-
if (p.isCancel(selected) || !selected.length) {
|
|
46
|
-
p.cancel('No agents selected.');
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
// 3. Get skill list
|
|
29
|
+
// 2. Get skill list
|
|
50
30
|
const skills = await listCanonicalSkills(CANONICAL_SKILLS_DIR);
|
|
51
31
|
if (skills.length === 0) {
|
|
52
32
|
p.cancel(`No skills found in ${CANONICAL_SKILLS_DIR}.`);
|
|
53
33
|
throw new CliError(`No skills found in ${CANONICAL_SKILLS_DIR}.`);
|
|
54
34
|
}
|
|
55
|
-
//
|
|
56
|
-
|
|
35
|
+
// 3. Link/copy skills
|
|
36
|
+
const linkedAgents = [];
|
|
37
|
+
const skippedAgents = [];
|
|
57
38
|
if (options.project) {
|
|
39
|
+
// Project mode prompt order: skills → copy/symlink → agents
|
|
40
|
+
// 3a. Select skills (no pre-selection in project mode)
|
|
58
41
|
const skillChoices = skills.map(name => ({
|
|
59
42
|
value: name,
|
|
60
43
|
label: name,
|
|
@@ -62,22 +45,14 @@ export async function linkCommand(options) {
|
|
|
62
45
|
const pickedSkills = await p.multiselect({
|
|
63
46
|
message: 'Select skills to link:',
|
|
64
47
|
options: skillChoices,
|
|
65
|
-
initialValues: skills,
|
|
66
48
|
required: false,
|
|
67
49
|
});
|
|
68
50
|
if (p.isCancel(pickedSkills) || !pickedSkills.length) {
|
|
69
51
|
p.cancel('No skills selected.');
|
|
70
52
|
return;
|
|
71
53
|
}
|
|
72
|
-
selectedSkills = pickedSkills;
|
|
73
|
-
|
|
74
|
-
// 5. Link/copy skills
|
|
75
|
-
const linkedAgents = [];
|
|
76
|
-
const skippedAgents = [];
|
|
77
|
-
const validSelected = new Set(Object.keys(agentRegistry));
|
|
78
|
-
const selectedAgents = selected.filter((id) => validSelected.has(id));
|
|
79
|
-
if (options.project) {
|
|
80
|
-
// Project mode: prompt for copy vs symlink, group by projectPath
|
|
54
|
+
const selectedSkills = pickedSkills;
|
|
55
|
+
// 3b. Select copy vs symlink
|
|
81
56
|
const mode = await p.select({
|
|
82
57
|
message: 'How should skills be added to the project?',
|
|
83
58
|
options: [
|
|
@@ -90,6 +65,29 @@ export async function linkCommand(options) {
|
|
|
90
65
|
p.cancel('Cancelled.');
|
|
91
66
|
return;
|
|
92
67
|
}
|
|
68
|
+
// 3c. Select agents
|
|
69
|
+
const agentChoices = agents.map(id => {
|
|
70
|
+
const globalPath = getAgentGlobalPath(id);
|
|
71
|
+
const dirExists = existsSync(globalPath);
|
|
72
|
+
return {
|
|
73
|
+
value: id,
|
|
74
|
+
label: `${agentRegistry[id].displayName} (${id})`,
|
|
75
|
+
hint: dirExists ? globalPath : `${globalPath} — directory will be created`,
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
const selected = await p.multiselect({
|
|
79
|
+
message: 'Select agents to link skills to:',
|
|
80
|
+
options: agentChoices,
|
|
81
|
+
initialValues: computeInitialValues(agents, agentChoices),
|
|
82
|
+
required: false,
|
|
83
|
+
});
|
|
84
|
+
if (p.isCancel(selected) || !selected.length) {
|
|
85
|
+
p.cancel('No agents selected.');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const validSelected = new Set(Object.keys(agentRegistry));
|
|
89
|
+
const selectedAgents = selected.filter((id) => validSelected.has(id));
|
|
90
|
+
// 3d. Execute: group by projectPath, copy/link
|
|
93
91
|
const groups = groupAgentsByProjectPath(selectedAgents);
|
|
94
92
|
for (const [projectPath, groupAgentIds] of groups) {
|
|
95
93
|
const targetDir = join(process.cwd(), projectPath);
|
|
@@ -129,9 +127,36 @@ export async function linkCommand(options) {
|
|
|
129
127
|
}
|
|
130
128
|
}
|
|
131
129
|
}
|
|
130
|
+
// Save selection for next time
|
|
131
|
+
if (linkedAgents.length > 0) {
|
|
132
|
+
writeConfig({ lastLinkedAgents: selectedAgents });
|
|
133
|
+
}
|
|
132
134
|
}
|
|
133
135
|
else {
|
|
134
|
-
// Global mode:
|
|
136
|
+
// Global mode: agents → link all skills
|
|
137
|
+
// 3a. Select agents
|
|
138
|
+
const agentChoices = agents.map(id => {
|
|
139
|
+
const globalPath = getAgentGlobalPath(id);
|
|
140
|
+
const dirExists = existsSync(globalPath);
|
|
141
|
+
return {
|
|
142
|
+
value: id,
|
|
143
|
+
label: `${agentRegistry[id].displayName} (${id})`,
|
|
144
|
+
hint: dirExists ? globalPath : `${globalPath} — directory will be created`,
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
const selected = await p.multiselect({
|
|
148
|
+
message: 'Select agents to link skills to:',
|
|
149
|
+
options: agentChoices,
|
|
150
|
+
initialValues: computeInitialValues(agents, agentChoices),
|
|
151
|
+
required: false,
|
|
152
|
+
});
|
|
153
|
+
if (p.isCancel(selected) || !selected.length) {
|
|
154
|
+
p.cancel('No agents selected.');
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const validSelected = new Set(Object.keys(agentRegistry));
|
|
158
|
+
const selectedAgents = selected.filter((id) => validSelected.has(id));
|
|
159
|
+
// 3b. Link all skills for each agent
|
|
135
160
|
for (const agentId of selectedAgents) {
|
|
136
161
|
const globalPath = getAgentGlobalPath(agentId);
|
|
137
162
|
const spinner = p.spinner();
|
|
@@ -154,12 +179,12 @@ export async function linkCommand(options) {
|
|
|
154
179
|
skippedAgents.push({ id: agentId, reason: String(err) });
|
|
155
180
|
}
|
|
156
181
|
}
|
|
182
|
+
// Save selection for next time
|
|
183
|
+
if (linkedAgents.length > 0) {
|
|
184
|
+
writeConfig({ lastLinkedAgents: selectedAgents });
|
|
185
|
+
}
|
|
157
186
|
}
|
|
158
|
-
//
|
|
159
|
-
if (linkedAgents.length > 0) {
|
|
160
|
-
writeConfig({ lastLinkedAgents: selectedAgents });
|
|
161
|
-
}
|
|
162
|
-
// 6. Summary
|
|
187
|
+
// Summary
|
|
163
188
|
p.note([
|
|
164
189
|
linkedAgents.length > 0 ? `✓ Linked: ${linkedAgents.join(', ')}` : '',
|
|
165
190
|
skippedAgents.length > 0 ? `✗ Skipped: ${skippedAgents.map(s => `${s.id} (${s.reason})`).join(', ')}` : '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,wBAAwB,EAAgB,MAAM,cAAc,CAAC;AAChJ,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC3G,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAiD;IACjF,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAE/B,2CAA2C;IAC3C,IAAI,MAAiB,CAAC;IACtB,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YACnG,MAAM,IAAI,QAAQ,CAAC,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,GAAG,OAAO,CAAC,MAAmB,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,CAAC,CAAC,MAAM,CAAC,2EAA2E,CAAC,CAAC;YACtF,MAAM,IAAI,QAAQ,CAAC,kDAAkD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"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"}
|