universal-dev-standards 3.3.0-beta.4 → 3.3.0
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/check.js +11 -2
- package/src/commands/init.js +57 -12
- package/src/commands/skills.js +42 -13
- package/standards-registry.json +15 -3
package/bin/uds.js
CHANGED
|
@@ -37,6 +37,7 @@ program
|
|
|
37
37
|
.option('--lang <language>', 'Language extension (csharp, php)')
|
|
38
38
|
.option('--framework <framework>', 'Framework extension (fat-free)')
|
|
39
39
|
.option('--locale <locale>', 'Locale extension (zh-tw)')
|
|
40
|
+
.option('--skills-location <location>', 'Skills location (marketplace, user, project, none) [default: marketplace]')
|
|
40
41
|
.option('-y, --yes', 'Use defaults, skip interactive prompts')
|
|
41
42
|
.action(initCommand);
|
|
42
43
|
|
package/package.json
CHANGED
package/src/commands/check.js
CHANGED
|
@@ -107,6 +107,7 @@ export function checkCommand() {
|
|
|
107
107
|
console.log(chalk.green(' ✓ Skills installed via Plugin Marketplace'));
|
|
108
108
|
console.log(chalk.gray(' Managed by Claude Code plugin system'));
|
|
109
109
|
console.log(chalk.gray(' To verify: /plugin list'));
|
|
110
|
+
console.log(chalk.gray(' Note: Marketplace skills are not file-based'));
|
|
110
111
|
} else {
|
|
111
112
|
const skillsDir = join(process.env.HOME || '', '.claude', 'skills');
|
|
112
113
|
const hasGlobalSkills = existsSync(skillsDir);
|
|
@@ -116,10 +117,18 @@ export function checkCommand() {
|
|
|
116
117
|
console.log(chalk.green(' ✓ Claude Code Skills installed'));
|
|
117
118
|
if (hasGlobalSkills) console.log(chalk.gray(' Global: ~/.claude/skills/'));
|
|
118
119
|
if (hasProjectSkills) console.log(chalk.gray(' Project: .claude/skills/'));
|
|
120
|
+
// Migration suggestion
|
|
121
|
+
console.log(chalk.yellow(' ⚠ Consider migrating to Plugin Marketplace'));
|
|
122
|
+
console.log(chalk.gray(' Marketplace provides automatic updates and easier management.'));
|
|
123
|
+
console.log(chalk.gray(' To migrate:'));
|
|
124
|
+
console.log(chalk.gray(' 1. Install via Marketplace: /install-skills AsiaOstrich/universal-dev-skills'));
|
|
125
|
+
console.log(chalk.gray(' 2. Remove local skills: rm -rf ~/.claude/skills/'));
|
|
126
|
+
console.log(chalk.gray(' 3. Reinitialize: uds init --yes'));
|
|
119
127
|
} else {
|
|
120
128
|
console.log(chalk.yellow(' ⚠ Skills marked as installed but not found'));
|
|
121
|
-
console.log(chalk.gray('
|
|
122
|
-
console.log(chalk.gray('
|
|
129
|
+
console.log(chalk.gray(' Recommended: Install via Plugin Marketplace'));
|
|
130
|
+
console.log(chalk.gray(' /install-skills AsiaOstrich/universal-dev-skills'));
|
|
131
|
+
console.log(chalk.gray(' Then reinitialize: uds init --yes'));
|
|
123
132
|
}
|
|
124
133
|
}
|
|
125
134
|
} else {
|
package/src/commands/init.js
CHANGED
|
@@ -321,18 +321,34 @@ export async function initCommand(options) {
|
|
|
321
321
|
test_levels: options.testLevels ? options.testLevels.split(',') : ['unit-testing', 'integration-testing']
|
|
322
322
|
};
|
|
323
323
|
|
|
324
|
-
//
|
|
325
|
-
const
|
|
326
|
-
|
|
324
|
+
// Handle Skills configuration based on CLI flag (default: marketplace)
|
|
325
|
+
const skillsLocationFlag = options.skillsLocation || 'marketplace';
|
|
326
|
+
|
|
327
|
+
if (skillsLocationFlag === 'marketplace') {
|
|
327
328
|
skillsConfig = {
|
|
328
329
|
installed: true,
|
|
329
|
-
location: '
|
|
330
|
+
location: 'marketplace',
|
|
330
331
|
needsInstall: false,
|
|
331
332
|
updateTargets: [],
|
|
332
333
|
standardsScope: 'minimal'
|
|
333
334
|
};
|
|
334
|
-
} else {
|
|
335
|
-
|
|
335
|
+
} else if (skillsLocationFlag === 'none') {
|
|
336
|
+
skillsConfig = {
|
|
337
|
+
installed: false,
|
|
338
|
+
location: null,
|
|
339
|
+
needsInstall: false,
|
|
340
|
+
updateTargets: [],
|
|
341
|
+
standardsScope: 'full'
|
|
342
|
+
};
|
|
343
|
+
} else if (skillsLocationFlag === 'project') {
|
|
344
|
+
skillsConfig = {
|
|
345
|
+
installed: true,
|
|
346
|
+
location: 'project',
|
|
347
|
+
needsInstall: true,
|
|
348
|
+
updateTargets: ['project'],
|
|
349
|
+
standardsScope: 'minimal'
|
|
350
|
+
};
|
|
351
|
+
} else if (skillsLocationFlag === 'user') {
|
|
336
352
|
skillsConfig = {
|
|
337
353
|
installed: true,
|
|
338
354
|
location: 'user',
|
|
@@ -340,6 +356,30 @@ export async function initCommand(options) {
|
|
|
340
356
|
updateTargets: ['user'],
|
|
341
357
|
standardsScope: 'minimal'
|
|
342
358
|
};
|
|
359
|
+
} else {
|
|
360
|
+
// Fallback: auto-detect user/project installation
|
|
361
|
+
const userSkillsInfo = getInstalledSkillsInfo();
|
|
362
|
+
const projectSkillsInfo = getProjectInstalledSkillsInfo(projectPath);
|
|
363
|
+
|
|
364
|
+
if (userSkillsInfo?.installed || projectSkillsInfo?.installed) {
|
|
365
|
+
const location = projectSkillsInfo?.installed ? 'project' : 'user';
|
|
366
|
+
skillsConfig = {
|
|
367
|
+
installed: true,
|
|
368
|
+
location,
|
|
369
|
+
needsInstall: false,
|
|
370
|
+
updateTargets: [],
|
|
371
|
+
standardsScope: 'minimal'
|
|
372
|
+
};
|
|
373
|
+
} else {
|
|
374
|
+
// Fallback to marketplace if nothing detected
|
|
375
|
+
skillsConfig = {
|
|
376
|
+
installed: true,
|
|
377
|
+
location: 'marketplace',
|
|
378
|
+
needsInstall: false,
|
|
379
|
+
updateTargets: [],
|
|
380
|
+
standardsScope: 'minimal'
|
|
381
|
+
};
|
|
382
|
+
}
|
|
343
383
|
}
|
|
344
384
|
}
|
|
345
385
|
|
|
@@ -636,6 +676,16 @@ export async function initCommand(options) {
|
|
|
636
676
|
|
|
637
677
|
// Create manifest
|
|
638
678
|
const repoInfo = getRepositoryInfo();
|
|
679
|
+
|
|
680
|
+
// Only record options for standards that were actually copied
|
|
681
|
+
const standardsToCopyIds = new Set(standardsToCopy.map(s => s.id));
|
|
682
|
+
const manifestOptions = {
|
|
683
|
+
workflow: standardsToCopyIds.has('git-workflow') ? (standardOptions.workflow || null) : null,
|
|
684
|
+
merge_strategy: standardsToCopyIds.has('git-workflow') ? (standardOptions.merge_strategy || null) : null,
|
|
685
|
+
commit_language: standardsToCopyIds.has('commit-message') ? (standardOptions.commit_language || null) : null,
|
|
686
|
+
test_levels: standardsToCopyIds.has('testing') ? (standardOptions.test_levels || []) : []
|
|
687
|
+
};
|
|
688
|
+
|
|
639
689
|
const manifest = {
|
|
640
690
|
version: '3.0.0',
|
|
641
691
|
upstream: {
|
|
@@ -649,12 +699,7 @@ export async function initCommand(options) {
|
|
|
649
699
|
standards: results.standards,
|
|
650
700
|
extensions: results.extensions,
|
|
651
701
|
integrations: results.integrations,
|
|
652
|
-
options:
|
|
653
|
-
workflow: standardOptions.workflow || null,
|
|
654
|
-
merge_strategy: standardOptions.merge_strategy || null,
|
|
655
|
-
commit_language: standardOptions.commit_language || null,
|
|
656
|
-
test_levels: standardOptions.test_levels || []
|
|
657
|
-
},
|
|
702
|
+
options: manifestOptions,
|
|
658
703
|
aiTools,
|
|
659
704
|
skills: {
|
|
660
705
|
installed: skillsConfig.installed,
|
package/src/commands/skills.js
CHANGED
|
@@ -33,8 +33,13 @@ function getInstalledPlugins() {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
// Plugin keys for different marketplace versions
|
|
37
|
+
const PLUGIN_KEY_NEW = 'universal-dev-standards@asia-ostrich';
|
|
38
|
+
const PLUGIN_KEY_OLD = 'universal-dev-standards@universal-dev-standards';
|
|
39
|
+
|
|
36
40
|
/**
|
|
37
41
|
* Find universal-dev-standards plugin in installed plugins
|
|
42
|
+
* Prioritizes new @asia-ostrich marketplace, falls back to legacy @universal-dev-standards
|
|
38
43
|
* @param {Object} pluginsInfo - Installed plugins info
|
|
39
44
|
* @returns {Object|null} Plugin info or null
|
|
40
45
|
*/
|
|
@@ -43,16 +48,17 @@ function findUdsPlugin(pluginsInfo) {
|
|
|
43
48
|
return null;
|
|
44
49
|
}
|
|
45
50
|
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
// Priority order: new marketplace first, then legacy
|
|
52
|
+
const keysToCheck = [PLUGIN_KEY_NEW, PLUGIN_KEY_OLD];
|
|
53
|
+
|
|
54
|
+
for (const key of keysToCheck) {
|
|
55
|
+
const installations = pluginsInfo.plugins[key];
|
|
56
|
+
if (installations && installations.length > 0) {
|
|
57
|
+
return {
|
|
58
|
+
key,
|
|
59
|
+
isLegacyMarketplace: key === PLUGIN_KEY_OLD,
|
|
60
|
+
...installations[0]
|
|
61
|
+
};
|
|
56
62
|
}
|
|
57
63
|
}
|
|
58
64
|
|
|
@@ -105,11 +111,14 @@ export function skillsCommand() {
|
|
|
105
111
|
const skills = listSkillsInDir(udsPlugin.installPath);
|
|
106
112
|
if (skills.length > 0) {
|
|
107
113
|
installations.push({
|
|
108
|
-
location:
|
|
114
|
+
location: udsPlugin.isLegacyMarketplace
|
|
115
|
+
? 'Plugin Marketplace (legacy)'
|
|
116
|
+
: 'Plugin Marketplace',
|
|
109
117
|
path: udsPlugin.installPath,
|
|
110
118
|
version: udsPlugin.version || 'unknown',
|
|
111
119
|
skills,
|
|
112
|
-
recommended:
|
|
120
|
+
recommended: !udsPlugin.isLegacyMarketplace,
|
|
121
|
+
legacyMarketplace: udsPlugin.isLegacyMarketplace
|
|
113
122
|
});
|
|
114
123
|
}
|
|
115
124
|
}
|
|
@@ -188,6 +197,8 @@ export function skillsCommand() {
|
|
|
188
197
|
// Header
|
|
189
198
|
if (install.recommended) {
|
|
190
199
|
console.log(chalk.green(`✓ ${install.location}`) + chalk.gray(' (recommended)'));
|
|
200
|
+
} else if (install.legacyMarketplace) {
|
|
201
|
+
console.log(chalk.yellow(`⚠ ${install.location}`));
|
|
191
202
|
} else if (install.deprecated) {
|
|
192
203
|
console.log(chalk.yellow(`⚠ ${install.location}`));
|
|
193
204
|
} else {
|
|
@@ -201,11 +212,22 @@ export function skillsCommand() {
|
|
|
201
212
|
// Skills list
|
|
202
213
|
console.log(chalk.gray(` Skills (${install.skills.length}):`));
|
|
203
214
|
for (const skill of install.skills) {
|
|
204
|
-
const icon = install.deprecated
|
|
215
|
+
const icon = (install.deprecated || install.legacyMarketplace)
|
|
216
|
+
? chalk.yellow('○')
|
|
217
|
+
: chalk.green('✓');
|
|
205
218
|
console.log(` ${icon} ${skill}`);
|
|
206
219
|
}
|
|
207
220
|
console.log();
|
|
208
221
|
|
|
222
|
+
// Legacy marketplace migration notice
|
|
223
|
+
if (install.legacyMarketplace) {
|
|
224
|
+
console.log(chalk.yellow(' ⚠ Legacy marketplace detected.'));
|
|
225
|
+
console.log(chalk.gray(' Migrate to new marketplace for continued updates:'));
|
|
226
|
+
console.log(chalk.cyan(' /plugin uninstall universal-dev-standards@universal-dev-standards'));
|
|
227
|
+
console.log(chalk.cyan(' /plugin install universal-dev-standards@asia-ostrich'));
|
|
228
|
+
console.log();
|
|
229
|
+
}
|
|
230
|
+
|
|
209
231
|
// Deprecation warning
|
|
210
232
|
if (install.deprecated) {
|
|
211
233
|
console.log(chalk.yellow(' ⚠ Manual installation is deprecated.'));
|
|
@@ -231,3 +253,10 @@ export function skillsCommand() {
|
|
|
231
253
|
|
|
232
254
|
console.log();
|
|
233
255
|
}
|
|
256
|
+
|
|
257
|
+
// Export for testing
|
|
258
|
+
export const _testing = {
|
|
259
|
+
findUdsPlugin,
|
|
260
|
+
PLUGIN_KEY_NEW,
|
|
261
|
+
PLUGIN_KEY_OLD
|
|
262
|
+
};
|
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.3.0
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"lastUpdated": "2026-01-07",
|
|
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.3.0
|
|
51
|
+
"version": "3.3.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.3.0
|
|
58
|
+
"version": "3.3.0",
|
|
59
59
|
"note": "Skills are now included in the main repository under skills/"
|
|
60
60
|
}
|
|
61
61
|
},
|
|
@@ -149,6 +149,18 @@
|
|
|
149
149
|
"skills/claude-code/tdd-assistant/SKILL.md",
|
|
150
150
|
"skills/claude-code/tdd-assistant/tdd-workflow.md",
|
|
151
151
|
"skills/claude-code/tdd-assistant/language-examples.md"
|
|
152
|
+
],
|
|
153
|
+
"commands": [
|
|
154
|
+
"skills/claude-code/commands/README.md",
|
|
155
|
+
"skills/claude-code/commands/changelog.md",
|
|
156
|
+
"skills/claude-code/commands/commit.md",
|
|
157
|
+
"skills/claude-code/commands/coverage.md",
|
|
158
|
+
"skills/claude-code/commands/docs.md",
|
|
159
|
+
"skills/claude-code/commands/release.md",
|
|
160
|
+
"skills/claude-code/commands/requirement.md",
|
|
161
|
+
"skills/claude-code/commands/review.md",
|
|
162
|
+
"skills/claude-code/commands/spec.md",
|
|
163
|
+
"skills/claude-code/commands/tdd.md"
|
|
152
164
|
]
|
|
153
165
|
},
|
|
154
166
|
"categories": {
|