@maccesar/titools 4.17.0 → 4.17.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/lib/commands/doctor.js +10 -5
- package/lib/symlink.js +5 -4
- package/package.json +1 -1
package/lib/commands/doctor.js
CHANGED
|
@@ -100,7 +100,9 @@ export async function doctorCommand() {
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
const expectedCommands = COMMANDS.length - pluginCommands.length;
|
|
103
|
-
if (
|
|
103
|
+
if (COMMANDS.length === 0) {
|
|
104
|
+
console.log(` ${CHECK} Slash commands: none (workflows ship as cross-agent skills)`);
|
|
105
|
+
} else if (pluginCommands.length === COMMANDS.length) {
|
|
104
106
|
console.log(` ${CHECK} Slash commands: all ${COMMANDS.length} served by the marketplace plugin`);
|
|
105
107
|
} else if (missingCommands.length === 0) {
|
|
106
108
|
console.log(` ${CHECK} Slash commands: ${expectedCommands}/${expectedCommands} installed in ~/.claude/commands/`);
|
|
@@ -138,10 +140,13 @@ export async function doctorCommand() {
|
|
|
138
140
|
|
|
139
141
|
for (const skill of SKILLS) {
|
|
140
142
|
// A skill the marketplace plugin provides is *supposed* to have no mirror
|
|
141
|
-
// here — the CLI removes it on purpose to avoid a duplicate entry.
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
if (
|
|
143
|
+
// here — the CLI removes it on purpose to avoid a duplicate entry. During
|
|
144
|
+
// command-to-skill migrations, a same-name command in an older enabled
|
|
145
|
+
// cache also suppresses the mirror until the marketplace refreshes.
|
|
146
|
+
if (
|
|
147
|
+
platform.name === 'claude' &&
|
|
148
|
+
(pluginProvidesSkill(skill, homeDir) || pluginProvidesCommand(skill, homeDir))
|
|
149
|
+
) {
|
|
145
150
|
servedByPlugin.push(skill);
|
|
146
151
|
continue;
|
|
147
152
|
}
|
package/lib/symlink.js
CHANGED
|
@@ -83,8 +83,8 @@ async function removePath(path) {
|
|
|
83
83
|
* @returns {Promise<boolean>} True if the plugin provides this skill
|
|
84
84
|
*/
|
|
85
85
|
export async function isClaudePluginSkillInstalled(skillName, baseDir) {
|
|
86
|
-
const { pluginProvidesSkill } = await import('./claude-plugin.js');
|
|
87
|
-
return pluginProvidesSkill(skillName, baseDir);
|
|
86
|
+
const { pluginProvidesSkill, pluginProvidesCommand } = await import('./claude-plugin.js');
|
|
87
|
+
return pluginProvidesSkill(skillName, baseDir) || pluginProvidesCommand(skillName, baseDir);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
/**
|
|
@@ -118,8 +118,9 @@ export async function createSkillSymlinks(platformSkillsDir, skills, baseDir) {
|
|
|
118
118
|
const useRelative = !!baseDir;
|
|
119
119
|
|
|
120
120
|
for (const skill of skills) {
|
|
121
|
-
// Skip Claude when the marketplace plugin already provides this skill
|
|
122
|
-
//
|
|
121
|
+
// Skip Claude when the marketplace plugin already provides this skill or
|
|
122
|
+
// still provides a same-name legacy command during a command-to-skill
|
|
123
|
+
// migration; clean up any stale symlink left from a previous CLI install.
|
|
123
124
|
if (isClaudePlatform && await isClaudePluginSkillInstalled(skill, baseDir)) {
|
|
124
125
|
const stalePath = join(platformSkillsDir, skill);
|
|
125
126
|
if (existsSync(stalePath)) {
|
package/package.json
CHANGED