universal-dev-standards 3.1.0 → 3.2.1-beta.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/README.md +1 -0
- package/bin/uds.js +5 -1
- package/package.json +1 -1
- package/src/commands/check.js +17 -11
- package/src/commands/configure.js +3 -0
- package/src/commands/init.js +26 -14
- package/src/commands/update.js +3 -0
- package/src/prompts/init.js +13 -3
- package/standards-registry.json +28 -8
package/README.md
CHANGED
|
@@ -273,6 +273,7 @@ Git 鉤子透過 Git Bash 運作,它包含在 Git for Windows 中。不需要
|
|
|
273
273
|
|
|
274
274
|
| Version | Date | Changes |
|
|
275
275
|
|---------|------|---------|
|
|
276
|
+
| 3.2.0 | 2026-01-02 | Added: Marketplace installation support; Fixed: wildcard paths, process hanging |
|
|
276
277
|
| 3.0.0 | 2025-12-30 | Published to npm, enhanced init with AI tools selection |
|
|
277
278
|
| 1.0.1 | 2025-12-24 | Added: Bilingual support (English + Chinese) |
|
|
278
279
|
| 1.0.0 | 2025-12-23 | Initial CLI documentation |
|
package/bin/uds.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
3
4
|
import { program } from 'commander';
|
|
4
5
|
import { listCommand } from '../src/commands/list.js';
|
|
5
6
|
import { initCommand } from '../src/commands/init.js';
|
|
@@ -7,10 +8,13 @@ import { checkCommand } from '../src/commands/check.js';
|
|
|
7
8
|
import { updateCommand } from '../src/commands/update.js';
|
|
8
9
|
import { configureCommand } from '../src/commands/configure.js';
|
|
9
10
|
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
const pkg = require('../package.json');
|
|
13
|
+
|
|
10
14
|
program
|
|
11
15
|
.name('uds')
|
|
12
16
|
.description('CLI tool for adopting Universal Development Standards')
|
|
13
|
-
.version(
|
|
17
|
+
.version(pkg.version);
|
|
14
18
|
|
|
15
19
|
program
|
|
16
20
|
.command('list')
|
package/package.json
CHANGED
package/src/commands/check.js
CHANGED
|
@@ -103,18 +103,24 @@ export function checkCommand() {
|
|
|
103
103
|
// Skills status
|
|
104
104
|
console.log(chalk.cyan('Skills Status:'));
|
|
105
105
|
if (manifest.skills.installed) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (hasGlobalSkills || hasProjectSkills) {
|
|
111
|
-
console.log(chalk.green(' ✓ Claude Code Skills installed'));
|
|
112
|
-
if (hasGlobalSkills) console.log(chalk.gray(' Global: ~/.claude/skills/'));
|
|
113
|
-
if (hasProjectSkills) console.log(chalk.gray(' Project: .claude/skills/'));
|
|
106
|
+
if (manifest.skills.location === 'marketplace') {
|
|
107
|
+
console.log(chalk.green(' ✓ Skills installed via Plugin Marketplace'));
|
|
108
|
+
console.log(chalk.gray(' Managed by Claude Code plugin system'));
|
|
109
|
+
console.log(chalk.gray(' To verify: /plugin list'));
|
|
114
110
|
} else {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
111
|
+
const skillsDir = join(process.env.HOME || '', '.claude', 'skills');
|
|
112
|
+
const hasGlobalSkills = existsSync(skillsDir);
|
|
113
|
+
const hasProjectSkills = existsSync(join(projectPath, '.claude', 'skills'));
|
|
114
|
+
|
|
115
|
+
if (hasGlobalSkills || hasProjectSkills) {
|
|
116
|
+
console.log(chalk.green(' ✓ Claude Code Skills installed'));
|
|
117
|
+
if (hasGlobalSkills) console.log(chalk.gray(' Global: ~/.claude/skills/'));
|
|
118
|
+
if (hasProjectSkills) console.log(chalk.gray(' Project: .claude/skills/'));
|
|
119
|
+
} else {
|
|
120
|
+
console.log(chalk.yellow(' ⚠ Skills marked as installed but not found'));
|
|
121
|
+
console.log(chalk.gray(' Run: git clone https://github.com/AsiaOstrich/universal-dev-skills.git'));
|
|
122
|
+
console.log(chalk.gray(' cd universal-dev-skills && ./install.sh'));
|
|
123
|
+
}
|
|
118
124
|
}
|
|
119
125
|
} else {
|
|
120
126
|
console.log(chalk.gray(' Skills not installed (using reference documents only)'));
|
package/src/commands/init.js
CHANGED
|
@@ -218,8 +218,8 @@ export async function initCommand(options) {
|
|
|
218
218
|
skillsConfig = {
|
|
219
219
|
installed: true,
|
|
220
220
|
location,
|
|
221
|
-
needsInstall:
|
|
222
|
-
updateTargets: [location]
|
|
221
|
+
needsInstall: location !== 'marketplace', // marketplace doesn't need install via CLI
|
|
222
|
+
updateTargets: location === 'marketplace' ? [] : [location]
|
|
223
223
|
};
|
|
224
224
|
}
|
|
225
225
|
}
|
|
@@ -353,9 +353,14 @@ export async function initCommand(options) {
|
|
|
353
353
|
console.log(chalk.gray(` Integrations: ${integrations.length > 0 ? integrations.join(', ') : 'none'}`));
|
|
354
354
|
|
|
355
355
|
if (skillsConfig.installed) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
356
|
+
let skillsStatus;
|
|
357
|
+
if (skillsConfig.location === 'marketplace') {
|
|
358
|
+
skillsStatus = 'Plugin Marketplace (managed by Claude Code)';
|
|
359
|
+
} else {
|
|
360
|
+
skillsStatus = skillsConfig.needsInstall
|
|
361
|
+
? `install/update to ${skillsConfig.location}`
|
|
362
|
+
: `using existing (${skillsConfig.location})`;
|
|
363
|
+
}
|
|
359
364
|
console.log(chalk.gray(` Skills: ${skillsStatus}`));
|
|
360
365
|
}
|
|
361
366
|
|
|
@@ -616,7 +621,7 @@ export async function initCommand(options) {
|
|
|
616
621
|
skills: {
|
|
617
622
|
installed: skillsConfig.installed,
|
|
618
623
|
location: skillsConfig.location,
|
|
619
|
-
names: results.skills,
|
|
624
|
+
names: skillsConfig.location === 'marketplace' ? ['all-via-plugin'] : results.skills,
|
|
620
625
|
version: skillsConfig.installed ? repoInfo.skills.version : null
|
|
621
626
|
}
|
|
622
627
|
};
|
|
@@ -631,15 +636,19 @@ export async function initCommand(options) {
|
|
|
631
636
|
const totalFiles = results.standards.length + results.extensions.length + results.integrations.length;
|
|
632
637
|
console.log(chalk.gray(` ${totalFiles} files copied to project`));
|
|
633
638
|
|
|
634
|
-
if (
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
639
|
+
if (skillsConfig.installed) {
|
|
640
|
+
if (skillsConfig.location === 'marketplace') {
|
|
641
|
+
console.log(chalk.gray(' Skills: Using Plugin Marketplace installation'));
|
|
642
|
+
} else if (results.skills.length > 0) {
|
|
643
|
+
const skillLocations = [];
|
|
644
|
+
if (skillsConfig.updateTargets.includes('user')) {
|
|
645
|
+
skillLocations.push('~/.claude/skills/');
|
|
646
|
+
}
|
|
647
|
+
if (skillsConfig.updateTargets.includes('project')) {
|
|
648
|
+
skillLocations.push('.claude/skills/');
|
|
649
|
+
}
|
|
650
|
+
console.log(chalk.gray(` ${results.skills.length} Skills installed to ${skillLocations.join(' and ')}`));
|
|
641
651
|
}
|
|
642
|
-
console.log(chalk.gray(` ${results.skills.length} Skills installed to ${skillLocations.join(' and ')}`));
|
|
643
652
|
}
|
|
644
653
|
console.log(chalk.gray(' Manifest created at .standards/manifest.json'));
|
|
645
654
|
|
|
@@ -662,4 +671,7 @@ export async function initCommand(options) {
|
|
|
662
671
|
console.log(chalk.gray(' 3. Run `uds check` to verify adoption status'));
|
|
663
672
|
}
|
|
664
673
|
console.log();
|
|
674
|
+
|
|
675
|
+
// Exit explicitly to prevent hanging due to inquirer's readline interface
|
|
676
|
+
process.exit(0);
|
|
665
677
|
}
|
package/src/commands/update.js
CHANGED
package/src/prompts/init.js
CHANGED
|
@@ -81,7 +81,11 @@ export async function promptSkillsInstallLocation() {
|
|
|
81
81
|
message: 'Where should Skills be installed?',
|
|
82
82
|
choices: [
|
|
83
83
|
{
|
|
84
|
-
name: `${chalk.green('
|
|
84
|
+
name: `${chalk.green('Plugin Marketplace')} ${chalk.gray('(推薦)')} - Already installed via /plugin install`,
|
|
85
|
+
value: 'marketplace'
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: `${chalk.blue('User Level')} - ~/.claude/skills/ (shared across projects)`,
|
|
85
89
|
value: 'user'
|
|
86
90
|
},
|
|
87
91
|
{
|
|
@@ -93,13 +97,19 @@ export async function promptSkillsInstallLocation() {
|
|
|
93
97
|
value: 'none'
|
|
94
98
|
}
|
|
95
99
|
],
|
|
96
|
-
default: '
|
|
100
|
+
default: 'marketplace'
|
|
97
101
|
}
|
|
98
102
|
]);
|
|
99
103
|
|
|
100
104
|
// Show explanation
|
|
101
105
|
console.log();
|
|
102
|
-
if (location === '
|
|
106
|
+
if (location === 'marketplace') {
|
|
107
|
+
console.log(chalk.gray(' → Skills managed by Claude Code Plugin system'));
|
|
108
|
+
console.log(chalk.gray(' → Automatic updates when new versions are released'));
|
|
109
|
+
console.log(chalk.gray(' → If not installed yet, run:'));
|
|
110
|
+
console.log(chalk.gray(' /plugin marketplace add AsiaOstrich/universal-dev-standards'));
|
|
111
|
+
console.log(chalk.gray(' /plugin install universal-dev-standards@universal-dev-standards'));
|
|
112
|
+
} else if (location === 'user') {
|
|
103
113
|
console.log(chalk.gray(' → Skills will be installed to ~/.claude/skills/'));
|
|
104
114
|
console.log(chalk.gray(' → Available across all your projects'));
|
|
105
115
|
} else if (location === 'project') {
|
package/standards-registry.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"lastUpdated": "
|
|
3
|
+
"version": "3.2.0",
|
|
4
|
+
"lastUpdated": "2026-01-02",
|
|
5
5
|
"description": "Standards registry for universal-dev-standards with integrated skills and AI-optimized formats",
|
|
6
6
|
"formats": {
|
|
7
7
|
"ai": {
|
|
@@ -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.
|
|
51
|
+
"version": "3.2.0"
|
|
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.
|
|
58
|
+
"version": "3.2.0",
|
|
59
59
|
"note": "Skills are now included in the main repository under skills/"
|
|
60
60
|
}
|
|
61
61
|
},
|
|
@@ -634,14 +634,34 @@
|
|
|
634
634
|
"note": "SDD tool, not AI coding assistant. Manual integration only."
|
|
635
635
|
},
|
|
636
636
|
{
|
|
637
|
-
"id": "requirement-
|
|
638
|
-
"name": "Requirement
|
|
637
|
+
"id": "requirement-checklist",
|
|
638
|
+
"name": "Requirement Checklist Template",
|
|
639
|
+
"nameZh": "需求檢核清單模板",
|
|
640
|
+
"source": "templates/requirement-checklist.md",
|
|
641
|
+
"category": "skill",
|
|
642
|
+
"skillName": "requirement-assistant",
|
|
643
|
+
"level": 2,
|
|
644
|
+
"description": "Checklist for reviewing requirement documents"
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
"id": "requirement-template",
|
|
648
|
+
"name": "Requirement Template",
|
|
649
|
+
"nameZh": "需求模板",
|
|
650
|
+
"source": "templates/requirement-template.md",
|
|
651
|
+
"category": "skill",
|
|
652
|
+
"skillName": "requirement-assistant",
|
|
653
|
+
"level": 2,
|
|
654
|
+
"description": "Template for writing user stories"
|
|
655
|
+
},
|
|
656
|
+
{
|
|
657
|
+
"id": "requirement-document-template",
|
|
658
|
+
"name": "Requirement Document Template",
|
|
639
659
|
"nameZh": "需求文件模板",
|
|
640
|
-
"source": "templates/requirement
|
|
660
|
+
"source": "templates/requirement-document-template.md",
|
|
641
661
|
"category": "skill",
|
|
642
662
|
"skillName": "requirement-assistant",
|
|
643
663
|
"level": 2,
|
|
644
|
-
"description": "
|
|
664
|
+
"description": "Template for writing comprehensive requirement documents"
|
|
645
665
|
},
|
|
646
666
|
{
|
|
647
667
|
"id": "migration-template",
|