universal-dev-standards 3.5.1-beta.10 → 3.5.1-beta.11
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/package.json +1 -1
- package/src/commands/check.js +5 -172
- package/src/i18n/messages.js +9 -3
- package/standards-registry.json +3 -3
package/package.json
CHANGED
package/src/commands/check.js
CHANGED
|
@@ -17,9 +17,7 @@ import {
|
|
|
17
17
|
import { downloadFromGitHub, getMarketplaceSkillsInfo } from '../utils/github.js';
|
|
18
18
|
import {
|
|
19
19
|
getInstalledSkillsInfoForAgent,
|
|
20
|
-
getInstalledCommandsForAgent
|
|
21
|
-
installSkillsToMultipleAgents,
|
|
22
|
-
installCommandsToMultipleAgents
|
|
20
|
+
getInstalledCommandsForAgent
|
|
23
21
|
} from '../utils/skills-installer.js';
|
|
24
22
|
import {
|
|
25
23
|
getAgentConfig,
|
|
@@ -261,10 +259,10 @@ export async function checkCommand(options = {}) {
|
|
|
261
259
|
console.log(chalk.yellow(msg.issuesDetected));
|
|
262
260
|
}
|
|
263
261
|
|
|
264
|
-
//
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
262
|
+
// Show hint if Skills/Commands are missing (check is read-only, no installation)
|
|
263
|
+
if (missingSkills.length > 0 || missingCommands.length > 0) {
|
|
264
|
+
console.log();
|
|
265
|
+
console.log(chalk.cyan(msg.missingSkillsHint || 'Tip: Run `uds update` to install missing Skills/Commands'));
|
|
268
266
|
}
|
|
269
267
|
|
|
270
268
|
console.log();
|
|
@@ -789,171 +787,6 @@ function displaySkillsStatus(manifest, projectPath, msg) {
|
|
|
789
787
|
return { missingSkills, missingCommands };
|
|
790
788
|
}
|
|
791
789
|
|
|
792
|
-
/**
|
|
793
|
-
* Prompt user to install missing Skills/Commands discovered during check
|
|
794
|
-
* @param {Object} manifest - The manifest object
|
|
795
|
-
* @param {string} projectPath - Project path
|
|
796
|
-
* @param {Array} missingSkills - Array of {agent, displayName, paths}
|
|
797
|
-
* @param {Array} missingCommands - Array of {agent, displayName, path}
|
|
798
|
-
* @param {Object} msg - i18n messages
|
|
799
|
-
* @returns {Promise<boolean>} - Whether anything was installed
|
|
800
|
-
*/
|
|
801
|
-
async function promptSkillsCommandsInstallation(manifest, projectPath, missingSkills, missingCommands, msg) {
|
|
802
|
-
const repoInfo = getRepositoryInfo();
|
|
803
|
-
let installedAnything = false;
|
|
804
|
-
|
|
805
|
-
// Handle missing Skills with checkbox selection
|
|
806
|
-
if (missingSkills.length > 0) {
|
|
807
|
-
console.log();
|
|
808
|
-
console.log(chalk.cyan('━'.repeat(50)));
|
|
809
|
-
console.log(chalk.cyan.bold(msg.offerSkillsInstallation || 'Skills Installation'));
|
|
810
|
-
console.log(chalk.cyan('━'.repeat(50)));
|
|
811
|
-
console.log();
|
|
812
|
-
|
|
813
|
-
// Build checkbox choices
|
|
814
|
-
const skillChoices = missingSkills.map(skill => ({
|
|
815
|
-
name: skill.displayName,
|
|
816
|
-
value: skill.agent,
|
|
817
|
-
checked: true // Default checked for opt-out behavior
|
|
818
|
-
}));
|
|
819
|
-
|
|
820
|
-
// Add skip option
|
|
821
|
-
skillChoices.push(new inquirer.Separator());
|
|
822
|
-
skillChoices.push({
|
|
823
|
-
name: chalk.gray(msg.skipInstallation || 'Skip'),
|
|
824
|
-
value: '__skip__'
|
|
825
|
-
});
|
|
826
|
-
|
|
827
|
-
const { selectedSkillAgents } = await inquirer.prompt([{
|
|
828
|
-
type: 'checkbox',
|
|
829
|
-
name: 'selectedSkillAgents',
|
|
830
|
-
message: msg.selectSkillsToInstall || 'Select AI tools to install Skills for:',
|
|
831
|
-
choices: skillChoices,
|
|
832
|
-
validate: (answer) => {
|
|
833
|
-
if (answer.includes('__skip__') && answer.length > 1) {
|
|
834
|
-
return t().commands.update.skipValidationError || 'Cannot select Skip with other options';
|
|
835
|
-
}
|
|
836
|
-
return true;
|
|
837
|
-
}
|
|
838
|
-
}]);
|
|
839
|
-
|
|
840
|
-
const filteredSkillAgents = selectedSkillAgents.filter(a => a !== '__skip__');
|
|
841
|
-
|
|
842
|
-
if (filteredSkillAgents.length > 0) {
|
|
843
|
-
// Prompt for installation level
|
|
844
|
-
const { skillsLevel } = await inquirer.prompt([{
|
|
845
|
-
type: 'list',
|
|
846
|
-
name: 'skillsLevel',
|
|
847
|
-
message: t().commands.update.skillsLevelQuestion || 'Where should Skills be installed?',
|
|
848
|
-
choices: [
|
|
849
|
-
{ name: `${t().commands.update.projectLevel || 'Project level'} (.claude/skills/, etc.)`, value: 'project' },
|
|
850
|
-
{ name: `${t().commands.update.userLevel || 'User level'} (~/.claude/skills/, etc.)`, value: 'user' }
|
|
851
|
-
],
|
|
852
|
-
default: 'project'
|
|
853
|
-
}]);
|
|
854
|
-
|
|
855
|
-
// Install Skills
|
|
856
|
-
const spinner = ora(t().commands.update.installingNewSkills || 'Installing Skills...').start();
|
|
857
|
-
const skillResult = await installSkillsToMultipleAgents(
|
|
858
|
-
filteredSkillAgents.map(agent => ({ agent, level: skillsLevel })),
|
|
859
|
-
null,
|
|
860
|
-
projectPath
|
|
861
|
-
);
|
|
862
|
-
|
|
863
|
-
// Update manifest
|
|
864
|
-
if (!manifest.skills) manifest.skills = {};
|
|
865
|
-
manifest.skills.installed = true;
|
|
866
|
-
manifest.skills.version = repoInfo.skills.version;
|
|
867
|
-
manifest.skills.installations = [
|
|
868
|
-
...(manifest.skills.installations || []),
|
|
869
|
-
...filteredSkillAgents.map(agent => ({ agent, level: skillsLevel }))
|
|
870
|
-
];
|
|
871
|
-
|
|
872
|
-
if (skillResult.totalErrors === 0) {
|
|
873
|
-
spinner.succeed((msg.skillsInstalledSuccess || 'Installed Skills for {count} AI tools')
|
|
874
|
-
.replace('{count}', filteredSkillAgents.length));
|
|
875
|
-
} else {
|
|
876
|
-
spinner.warn((t().commands.update.newSkillsInstalledWithErrors || 'Installed Skills with {errors} errors')
|
|
877
|
-
.replace('{errors}', skillResult.totalErrors));
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
installedAnything = true;
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
|
|
884
|
-
// Handle missing Commands with checkbox selection
|
|
885
|
-
if (missingCommands.length > 0) {
|
|
886
|
-
console.log();
|
|
887
|
-
console.log(chalk.cyan('━'.repeat(50)));
|
|
888
|
-
console.log(chalk.cyan.bold(msg.offerCommandsInstallation || 'Commands Installation'));
|
|
889
|
-
console.log(chalk.cyan('━'.repeat(50)));
|
|
890
|
-
console.log();
|
|
891
|
-
|
|
892
|
-
// Build checkbox choices
|
|
893
|
-
const commandChoices = missingCommands.map(cmd => ({
|
|
894
|
-
name: `${cmd.displayName} ${chalk.gray(`(${cmd.path})`)}`,
|
|
895
|
-
value: cmd.agent,
|
|
896
|
-
checked: true // Default checked for opt-out behavior
|
|
897
|
-
}));
|
|
898
|
-
|
|
899
|
-
// Add skip option
|
|
900
|
-
commandChoices.push(new inquirer.Separator());
|
|
901
|
-
commandChoices.push({
|
|
902
|
-
name: chalk.gray(msg.skipInstallation || 'Skip'),
|
|
903
|
-
value: '__skip__'
|
|
904
|
-
});
|
|
905
|
-
|
|
906
|
-
const { selectedCommandAgents } = await inquirer.prompt([{
|
|
907
|
-
type: 'checkbox',
|
|
908
|
-
name: 'selectedCommandAgents',
|
|
909
|
-
message: msg.selectCommandsToInstall || 'Select AI tools to install Commands for:',
|
|
910
|
-
choices: commandChoices,
|
|
911
|
-
validate: (answer) => {
|
|
912
|
-
if (answer.includes('__skip__') && answer.length > 1) {
|
|
913
|
-
return t().commands.update.skipValidationError || 'Cannot select Skip with other options';
|
|
914
|
-
}
|
|
915
|
-
return true;
|
|
916
|
-
}
|
|
917
|
-
}]);
|
|
918
|
-
|
|
919
|
-
const filteredCommandAgents = selectedCommandAgents.filter(a => a !== '__skip__');
|
|
920
|
-
|
|
921
|
-
if (filteredCommandAgents.length > 0) {
|
|
922
|
-
const spinner = ora(t().commands.update.installingNewCommands || 'Installing commands...').start();
|
|
923
|
-
const cmdResult = await installCommandsToMultipleAgents(
|
|
924
|
-
filteredCommandAgents,
|
|
925
|
-
null,
|
|
926
|
-
projectPath
|
|
927
|
-
);
|
|
928
|
-
|
|
929
|
-
// Update manifest
|
|
930
|
-
if (!manifest.commands) manifest.commands = {};
|
|
931
|
-
manifest.commands.installed = true;
|
|
932
|
-
manifest.commands.installations = [
|
|
933
|
-
...(manifest.commands.installations || []),
|
|
934
|
-
...filteredCommandAgents
|
|
935
|
-
];
|
|
936
|
-
|
|
937
|
-
if (cmdResult.totalErrors === 0) {
|
|
938
|
-
spinner.succeed((msg.commandsInstalledSuccess || 'Installed commands for {count} AI tools')
|
|
939
|
-
.replace('{count}', filteredCommandAgents.length));
|
|
940
|
-
} else {
|
|
941
|
-
spinner.warn((t().commands.update.newCommandsInstalledWithErrors || 'Installed commands with {errors} errors')
|
|
942
|
-
.replace('{errors}', cmdResult.totalErrors));
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
installedAnything = true;
|
|
946
|
-
}
|
|
947
|
-
}
|
|
948
|
-
|
|
949
|
-
// Save manifest if anything was installed
|
|
950
|
-
if (installedAnything) {
|
|
951
|
-
writeManifest(manifest, projectPath);
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
return installedAnything;
|
|
955
|
-
}
|
|
956
|
-
|
|
957
790
|
/**
|
|
958
791
|
* Display coverage report
|
|
959
792
|
*/
|
package/src/i18n/messages.js
CHANGED
|
@@ -602,7 +602,9 @@ export const messages = {
|
|
|
602
602
|
selectCommandsToInstall: 'Select AI tools to install Commands for:',
|
|
603
603
|
skipInstallation: 'Skip',
|
|
604
604
|
skillsInstalledSuccess: 'Installed Skills for {count} AI tools',
|
|
605
|
-
commandsInstalledSuccess: 'Installed commands for {count} AI tools'
|
|
605
|
+
commandsInstalledSuccess: 'Installed commands for {count} AI tools',
|
|
606
|
+
// Read-only hint
|
|
607
|
+
missingSkillsHint: 'Tip: Run `uds update` to install missing Skills/Commands'
|
|
606
608
|
},
|
|
607
609
|
|
|
608
610
|
// init command (commands/init.js)
|
|
@@ -1440,7 +1442,9 @@ export const messages = {
|
|
|
1440
1442
|
selectCommandsToInstall: '選擇要安裝斜線命令的 AI 工具:',
|
|
1441
1443
|
skipInstallation: '跳過',
|
|
1442
1444
|
skillsInstalledSuccess: '已為 {count} 個 AI 工具安裝 Skills',
|
|
1443
|
-
commandsInstalledSuccess: '已為 {count} 個 AI 工具安裝斜線命令'
|
|
1445
|
+
commandsInstalledSuccess: '已為 {count} 個 AI 工具安裝斜線命令',
|
|
1446
|
+
// Read-only hint
|
|
1447
|
+
missingSkillsHint: '提示:執行 `uds update` 安裝缺少的 Skills/斜線命令'
|
|
1444
1448
|
},
|
|
1445
1449
|
|
|
1446
1450
|
// init command (commands/init.js)
|
|
@@ -2181,7 +2185,9 @@ export const messages = {
|
|
|
2181
2185
|
selectCommandsToInstall: '选择要安装斜线命令的 AI 工具:',
|
|
2182
2186
|
skipInstallation: '跳过',
|
|
2183
2187
|
skillsInstalledSuccess: '已为 {count} 个 AI 工具安装 Skills',
|
|
2184
|
-
commandsInstalledSuccess: '已为 {count} 个 AI 工具安装斜线命令'
|
|
2188
|
+
commandsInstalledSuccess: '已为 {count} 个 AI 工具安装斜线命令',
|
|
2189
|
+
// Read-only hint
|
|
2190
|
+
missingSkillsHint: '提示:执行 `uds update` 安装缺少的 Skills/斜线命令'
|
|
2185
2191
|
},
|
|
2186
2192
|
|
|
2187
2193
|
// update command
|
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.11",
|
|
4
4
|
"lastUpdated": "2026-01-15",
|
|
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.11"
|
|
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.11",
|
|
59
59
|
"note": "Skills are now included in the main repository under skills/"
|
|
60
60
|
}
|
|
61
61
|
},
|