universal-dev-standards 3.5.1-beta.10 → 3.5.1-beta.12
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Update development standards to latest version
|
|
3
|
-
allowed-tools: Read, Bash(uds update:*), Bash(uds check:*), Bash(npx:*), Bash(cat .standards/*), Bash(ls .claude/*), Bash(ls .opencode/*), Bash(ls .github/*)
|
|
3
|
+
allowed-tools: Read, Bash(uds update:*), Bash(uds check:*), Bash(uds configure:*), Bash(npx:*), Bash(cat .standards/*), Bash(ls .claude/*), Bash(ls .opencode/*), Bash(ls .github/*)
|
|
4
4
|
argument-hint: "[--yes] [--offline] [--beta]"
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -42,34 +42,44 @@ uds update --yes
|
|
|
42
42
|
uds update --beta --yes
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
### Step 4:
|
|
45
|
+
### Step 4: Install Skills/Commands | 步驟 4:安裝 Skills/Commands
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
The CLI automatically handles Skills/Commands installation in Step 4:
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
CLI 會自動處理 Skills/Commands 安裝:
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
**With `--yes` flag (automatic):**
|
|
52
|
+
- All missing Skills/Commands are installed automatically for configured AI tools
|
|
53
|
+
- No additional action needed
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
使用 `--yes` 時,會自動為所有設定的 AI 工具安裝缺少的 Skills/Commands。
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
| **Skills Only** | Install Skills to .claude/skills/ | 只安裝 Skills |
|
|
61
|
-
| **Commands Only** | Install Commands for supported tools | 只安裝斜線命令 |
|
|
62
|
-
| **Skip** | Don't install features | 跳過 |
|
|
57
|
+
**Without `--yes` (interactive):**
|
|
58
|
+
- CLI shows a checkbox menu to select which AI tools to install for
|
|
59
|
+
- All options are checked by default (opt-out behavior)
|
|
63
60
|
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
uds update --skills
|
|
67
|
-
```
|
|
61
|
+
不使用 `--yes` 時,CLI 會顯示 checkbox 選單讓用戶選擇要安裝的 AI 工具。
|
|
68
62
|
|
|
69
|
-
**
|
|
70
|
-
```bash
|
|
71
|
-
uds update --commands
|
|
63
|
+
**Example checkbox interface:**
|
|
72
64
|
```
|
|
65
|
+
? Select AI tools to install Skills for:
|
|
66
|
+
❯◉ Claude Code
|
|
67
|
+
◉ OpenCode
|
|
68
|
+
◉ GitHub Copilot
|
|
69
|
+
──────────────
|
|
70
|
+
◯ Skip Skills installation
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**If CLI cannot prompt (non-TTY environment):**
|
|
74
|
+
|
|
75
|
+
Use AskUserQuestion and then run `uds configure`:
|
|
76
|
+
|
|
77
|
+
| User Selection | Action |
|
|
78
|
+
|----------------|--------|
|
|
79
|
+
| **Install All** | `uds configure --type skills` then `uds configure --type commands` |
|
|
80
|
+
| **Skills Only** | `uds configure --type skills` |
|
|
81
|
+
| **Commands Only** | `uds configure --type commands` |
|
|
82
|
+
| **Skip** | No action needed |
|
|
73
83
|
|
|
74
84
|
Explain the results and any next steps to the user.
|
|
75
85
|
|
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.12",
|
|
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.12"
|
|
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.12",
|
|
59
59
|
"note": "Skills are now included in the main repository under skills/"
|
|
60
60
|
}
|
|
61
61
|
},
|