universal-dev-standards 3.5.1-beta.20 → 3.5.1-beta.22
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/bin/uds.js +1 -0
- package/package.json +1 -1
- package/src/commands/configure.js +3 -3
- package/src/commands/update.js +88 -3
- package/standards-registry.json +3 -3
package/bin/uds.js
CHANGED
|
@@ -85,6 +85,7 @@ program
|
|
|
85
85
|
.option('--beta', 'Check for beta version updates')
|
|
86
86
|
.option('--skills', 'Install/update Skills for configured AI tools')
|
|
87
87
|
.option('--commands', 'Install/update slash commands for configured AI tools')
|
|
88
|
+
.option('--debug', 'Show debug output for Skills/Commands detection')
|
|
88
89
|
.action(updateCommand);
|
|
89
90
|
|
|
90
91
|
program
|
package/package.json
CHANGED
|
@@ -534,11 +534,11 @@ async function handleSkillsConfiguration(manifest, projectPath, msg, common, spe
|
|
|
534
534
|
|
|
535
535
|
// Validate skillsLocation if provided
|
|
536
536
|
const validLocations = ['project', 'user'];
|
|
537
|
-
const
|
|
537
|
+
const level = skillsLocation && validLocations.includes(skillsLocation) ? skillsLocation : 'project';
|
|
538
538
|
|
|
539
539
|
// Install to specified level (defaults to project)
|
|
540
|
-
const installations = [{ agent: specificTool,
|
|
541
|
-
const spinner = ora(`Installing Skills for ${getAgentDisplayName(specificTool)} (${
|
|
540
|
+
const installations = [{ agent: specificTool, level }];
|
|
541
|
+
const spinner = ora(`Installing Skills for ${getAgentDisplayName(specificTool)} (${level} level)...`).start();
|
|
542
542
|
const result = await installSkillsToMultipleAgents(installations, null, projectPath);
|
|
543
543
|
spinner.stop();
|
|
544
544
|
|
package/src/commands/update.js
CHANGED
|
@@ -418,7 +418,7 @@ export async function updateCommand(options) {
|
|
|
418
418
|
// Check for new features (Skills/Commands) not yet installed or outdated
|
|
419
419
|
if (!options.standardsOnly) {
|
|
420
420
|
const latestSkillsVersion = repoInfo.skills.version;
|
|
421
|
-
const { missingSkills, outdatedSkills, missingCommands } = checkNewFeatures(projectPath, manifest, latestSkillsVersion);
|
|
421
|
+
const { missingSkills, outdatedSkills, missingCommands } = checkNewFeatures(projectPath, manifest, latestSkillsVersion, options.debug);
|
|
422
422
|
|
|
423
423
|
if (missingSkills.length > 0 || outdatedSkills.length > 0 || missingCommands.length > 0) {
|
|
424
424
|
if (!options.yes) {
|
|
@@ -1058,12 +1058,28 @@ async function updateCommandsOnly(projectPath, manifest) {
|
|
|
1058
1058
|
* @param {string} projectPath - Project path
|
|
1059
1059
|
* @param {Object} manifest - Manifest object
|
|
1060
1060
|
* @param {string} latestSkillsVersion - Latest skills version from repository
|
|
1061
|
+
* @param {boolean} debug - Show debug output
|
|
1061
1062
|
* @returns {{missingSkills: Array, outdatedSkills: Array, missingCommands: Array}}
|
|
1062
1063
|
*/
|
|
1063
|
-
function checkNewFeatures(projectPath, manifest, latestSkillsVersion) {
|
|
1064
|
+
function checkNewFeatures(projectPath, manifest, latestSkillsVersion, debug = false) {
|
|
1064
1065
|
const aiTools = manifest.aiTools || [];
|
|
1065
1066
|
|
|
1067
|
+
if (debug) {
|
|
1068
|
+
console.log();
|
|
1069
|
+
console.log(chalk.cyan('━'.repeat(50)));
|
|
1070
|
+
console.log(chalk.cyan.bold('🔍 Skills/Commands Detection Debug'));
|
|
1071
|
+
console.log(chalk.cyan('━'.repeat(50)));
|
|
1072
|
+
console.log(chalk.gray(` aiTools in manifest: ${JSON.stringify(aiTools)}`));
|
|
1073
|
+
console.log(chalk.gray(` declinedFeatures.skills: ${JSON.stringify(manifest.declinedFeatures?.skills || [])}`));
|
|
1074
|
+
console.log(chalk.gray(` declinedFeatures.commands: ${JSON.stringify(manifest.declinedFeatures?.commands || [])}`));
|
|
1075
|
+
console.log(chalk.gray(` manifest.skills.location: ${manifest.skills?.location || 'not set'}`));
|
|
1076
|
+
console.log();
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1066
1079
|
if (aiTools.length === 0) {
|
|
1080
|
+
if (debug) {
|
|
1081
|
+
console.log(chalk.yellow(' No aiTools in manifest, skipping detection'));
|
|
1082
|
+
}
|
|
1067
1083
|
return { missingSkills: [], outdatedSkills: [], missingCommands: [] };
|
|
1068
1084
|
}
|
|
1069
1085
|
|
|
@@ -1076,8 +1092,23 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion) {
|
|
|
1076
1092
|
const missingCommands = [];
|
|
1077
1093
|
|
|
1078
1094
|
for (const tool of aiTools) {
|
|
1095
|
+
if (debug) {
|
|
1096
|
+
console.log(chalk.cyan(` Checking tool: ${tool}`));
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1079
1099
|
const config = getAgentConfig(tool);
|
|
1080
|
-
if (!config)
|
|
1100
|
+
if (!config) {
|
|
1101
|
+
if (debug) {
|
|
1102
|
+
console.log(chalk.red(` ✗ No config found for '${tool}' - skipping`));
|
|
1103
|
+
}
|
|
1104
|
+
continue;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
if (debug) {
|
|
1108
|
+
console.log(chalk.gray(` config.supportsSkills: ${config.supportsSkills}`));
|
|
1109
|
+
console.log(chalk.gray(` config.skills: ${config.skills ? 'defined' : 'null'}`));
|
|
1110
|
+
console.log(chalk.gray(` config.commands: ${config.commands ? 'defined' : 'null'}`));
|
|
1111
|
+
}
|
|
1081
1112
|
|
|
1082
1113
|
// Check Skills support
|
|
1083
1114
|
if (config.supportsSkills && config.skills) {
|
|
@@ -1092,8 +1123,20 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion) {
|
|
|
1092
1123
|
// (manifest records can be stale if user deleted the directory)
|
|
1093
1124
|
const hasSkills = projectInfo?.installed || userInfo?.installed || usingMarketplace;
|
|
1094
1125
|
|
|
1126
|
+
if (debug) {
|
|
1127
|
+
console.log(chalk.gray(' Skills check:'));
|
|
1128
|
+
console.log(chalk.gray(` projectInfo?.installed: ${projectInfo?.installed || false}`));
|
|
1129
|
+
console.log(chalk.gray(` userInfo?.installed: ${userInfo?.installed || false}`));
|
|
1130
|
+
console.log(chalk.gray(` usingMarketplace: ${usingMarketplace}`));
|
|
1131
|
+
console.log(chalk.gray(` hasSkills: ${hasSkills}`));
|
|
1132
|
+
console.log(chalk.gray(` declinedSkills.includes('${tool}'): ${declinedSkills.includes(tool)}`));
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1095
1135
|
// Skip if user previously declined this tool's skills
|
|
1096
1136
|
if (!hasSkills && !declinedSkills.includes(tool)) {
|
|
1137
|
+
if (debug) {
|
|
1138
|
+
console.log(chalk.green(' ✓ Added to missingSkills'));
|
|
1139
|
+
}
|
|
1097
1140
|
missingSkills.push({
|
|
1098
1141
|
agent: tool,
|
|
1099
1142
|
displayName: getAgentDisplayName(tool),
|
|
@@ -1106,6 +1149,9 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion) {
|
|
|
1106
1149
|
|
|
1107
1150
|
// Skip marketplace (auto-updates) and unknown versions
|
|
1108
1151
|
if (!usingMarketplace && installedVersion && installedVersion !== latestSkillsVersion) {
|
|
1152
|
+
if (debug) {
|
|
1153
|
+
console.log(chalk.yellow(` ✓ Added to outdatedSkills (${installedVersion} → ${latestSkillsVersion})`));
|
|
1154
|
+
}
|
|
1109
1155
|
outdatedSkills.push({
|
|
1110
1156
|
agent: tool,
|
|
1111
1157
|
displayName: getAgentDisplayName(tool),
|
|
@@ -1115,8 +1161,17 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion) {
|
|
|
1115
1161
|
level: userInfo?.installed ? 'user' : 'project',
|
|
1116
1162
|
path: installedInfo?.path
|
|
1117
1163
|
});
|
|
1164
|
+
} else if (debug) {
|
|
1165
|
+
if (hasSkills) {
|
|
1166
|
+
console.log(chalk.gray(' - Skills already installed (hasSkills=true)'));
|
|
1167
|
+
}
|
|
1168
|
+
if (declinedSkills.includes(tool)) {
|
|
1169
|
+
console.log(chalk.gray(' - Previously declined by user'));
|
|
1170
|
+
}
|
|
1118
1171
|
}
|
|
1119
1172
|
}
|
|
1173
|
+
} else if (debug) {
|
|
1174
|
+
console.log(chalk.gray(' Skills: not supported or not configured'));
|
|
1120
1175
|
}
|
|
1121
1176
|
|
|
1122
1177
|
// Check Commands support
|
|
@@ -1126,17 +1181,47 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion) {
|
|
|
1126
1181
|
// Only trust actual file existence, not manifest records
|
|
1127
1182
|
const hasCommands = cmdInfo?.installed;
|
|
1128
1183
|
|
|
1184
|
+
if (debug) {
|
|
1185
|
+
console.log(chalk.gray(' Commands check:'));
|
|
1186
|
+
console.log(chalk.gray(` cmdInfo?.installed: ${cmdInfo?.installed || false}`));
|
|
1187
|
+
console.log(chalk.gray(` hasCommands: ${hasCommands}`));
|
|
1188
|
+
console.log(chalk.gray(` declinedCommands.includes('${tool}'): ${declinedCommands.includes(tool)}`));
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1129
1191
|
// Skip if user previously declined this tool's commands
|
|
1130
1192
|
if (!hasCommands && !declinedCommands.includes(tool)) {
|
|
1193
|
+
if (debug) {
|
|
1194
|
+
console.log(chalk.green(' ✓ Added to missingCommands'));
|
|
1195
|
+
}
|
|
1131
1196
|
missingCommands.push({
|
|
1132
1197
|
agent: tool,
|
|
1133
1198
|
displayName: getAgentDisplayName(tool),
|
|
1134
1199
|
path: config.commands.project
|
|
1135
1200
|
});
|
|
1201
|
+
} else if (debug) {
|
|
1202
|
+
if (hasCommands) {
|
|
1203
|
+
console.log(chalk.gray(' - Commands already installed'));
|
|
1204
|
+
}
|
|
1205
|
+
if (declinedCommands.includes(tool)) {
|
|
1206
|
+
console.log(chalk.gray(' - Previously declined by user'));
|
|
1207
|
+
}
|
|
1136
1208
|
}
|
|
1209
|
+
} else if (debug) {
|
|
1210
|
+
console.log(chalk.gray(' Commands: not supported'));
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
if (debug) {
|
|
1214
|
+
console.log();
|
|
1137
1215
|
}
|
|
1138
1216
|
}
|
|
1139
1217
|
|
|
1218
|
+
if (debug) {
|
|
1219
|
+
console.log(chalk.cyan('━'.repeat(50)));
|
|
1220
|
+
console.log(chalk.cyan(`Result: ${missingSkills.length} missing Skills, ${outdatedSkills.length} outdated Skills, ${missingCommands.length} missing Commands`));
|
|
1221
|
+
console.log(chalk.cyan('━'.repeat(50)));
|
|
1222
|
+
console.log();
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1140
1225
|
return { missingSkills, outdatedSkills, missingCommands };
|
|
1141
1226
|
}
|
|
1142
1227
|
|
package/standards-registry.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"version": "3.5.1-beta.
|
|
3
|
+
"version": "3.5.1-beta.22",
|
|
4
4
|
"lastUpdated": "2026-01-19",
|
|
5
5
|
"description": "Standards registry for universal-dev-standards with integrated skills and AI-optimized formats",
|
|
6
6
|
"formats": {
|
|
@@ -48,14 +48,14 @@
|
|
|
48
48
|
"standards": {
|
|
49
49
|
"name": "universal-dev-standards",
|
|
50
50
|
"url": "https://github.com/AsiaOstrich/universal-dev-standards",
|
|
51
|
-
"version": "3.5.1-beta.
|
|
51
|
+
"version": "3.5.1-beta.22"
|
|
52
52
|
},
|
|
53
53
|
"skills": {
|
|
54
54
|
"name": "universal-dev-standards",
|
|
55
55
|
"url": "https://github.com/AsiaOstrich/universal-dev-standards",
|
|
56
56
|
"localPath": "skills/claude-code",
|
|
57
57
|
"rawUrl": "https://raw.githubusercontent.com/AsiaOstrich/universal-dev-standards/main/skills/claude-code",
|
|
58
|
-
"version": "3.5.1-beta.
|
|
58
|
+
"version": "3.5.1-beta.22",
|
|
59
59
|
"note": "Skills are now included in the main repository under skills/"
|
|
60
60
|
}
|
|
61
61
|
},
|