Merge pull request #430 from scarletkc/codex/fix-codex-agents-skill-path

fix(codex): install skills under .agents
This commit is contained in:
Clark Cant 2026-07-27 13:30:30 +07:00 committed by GitHub
commit 3b5df75479
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 27 additions and 7 deletions

View File

@ -579,7 +579,7 @@ uipro uninstall --global
rm -rf .claude/skills/ui-ux-pro-max # Claude Code
rm -rf .cursor/skills/ui-ux-pro-max # Cursor
rm -rf .windsurf/skills/ui-ux-pro-max # Windsurf
rm -rf .agents/skills/ui-ux-pro-max # Antigravity
rm -rf .agents/skills/ui-ux-pro-max # Antigravity / Codex
```
### Claude Marketplace install fails with "Zip file contains a symbolic link"

View File

@ -572,7 +572,7 @@ uipro uninstall --global
rm -rf .claude/skills/ui-ux-pro-max # Claude Code
rm -rf .cursor/skills/ui-ux-pro-max # Cursor
rm -rf .windsurf/skills/ui-ux-pro-max # Windsurf
rm -rf .agents/skills/ui-ux-pro-max # Antigravity
rm -rf .agents/skills/ui-ux-pro-max # Antigravity / Codex
```
### Claude Marketplace 安装失败,提示 "Zip file contains a symbolic link"

View File

@ -3,7 +3,7 @@
"displayName": "Codex",
"installType": "full",
"folderStructure": {
"root": ".codex",
"root": ".agents",
"skillPath": "skills/ui-ux-pro-max",
"filename": "SKILL.md"
},

View File

@ -19,7 +19,10 @@ export function detectAIType(cwd: string = process.cwd()): DetectionResult {
if (existsSync(join(cwd, '.windsurf'))) {
detected.push('windsurf');
}
if (existsSync(join(cwd, '.agents')) || existsSync(join(cwd, '.agent'))) {
if (existsSync(join(cwd, '.agents'))) {
detected.push('antigravity');
detected.push('codex');
} else if (existsSync(join(cwd, '.agent'))) {
detected.push('antigravity');
}
if (existsSync(join(cwd, '.github'))) {
@ -28,7 +31,7 @@ export function detectAIType(cwd: string = process.cwd()): DetectionResult {
if (existsSync(join(cwd, '.kiro'))) {
detected.push('kiro');
}
if (existsSync(join(cwd, '.codex'))) {
if (existsSync(join(cwd, '.codex')) && !detected.includes('codex')) {
detected.push('codex');
}
if (existsSync(join(cwd, '.roo'))) {
@ -72,6 +75,13 @@ export function detectAIType(cwd: string = process.cwd()): DetectionResult {
let suggested: AIType | null = null;
if (detected.length === 1) {
suggested = detected[0];
} else if (
detected.length === 2 &&
detected.includes('antigravity') &&
detected.includes('codex')
) {
// Both platforms share `.agents`; avoid suggesting an install for every AI.
suggested = 'codex';
} else if (detected.length > 1) {
suggested = 'all';
}
@ -94,7 +104,7 @@ export function getAITypeDescription(aiType: AIType): string {
case 'kiro':
return 'Kiro (.kiro/steering/)';
case 'codex':
return 'Codex (.codex/skills/)';
return 'Codex (.agents/skills/)';
case 'roocode':
return 'RooCode (.roo/skills/)';
case 'qoder':

View File

@ -294,10 +294,20 @@ export async function generatePlatformFiles(
*/
export async function generateAllPlatformFiles(targetDir: string, isGlobal = false, force = false): Promise<string[]> {
const allFolders = new Set<string>();
const generatedSkillFiles = new Set<string>();
for (const aiType of Object.keys(AI_TO_PLATFORM)) {
try {
const config = await loadPlatformConfig(aiType);
const skillFile = join(
config.folderStructure.root,
config.folderStructure.skillPath,
config.folderStructure.filename
);
if (generatedSkillFiles.has(skillFile)) continue;
const folders = await generatePlatformFiles(targetDir, aiType, isGlobal, force);
generatedSkillFiles.add(skillFile);
folders.forEach(f => allFolders.add(f));
} catch {
// Skip if generation fails for a platform

View File

@ -3,7 +3,7 @@
"displayName": "Codex",
"installType": "full",
"folderStructure": {
"root": ".codex",
"root": ".agents",
"skillPath": "skills/ui-ux-pro-max",
"filename": "SKILL.md"
},