feat: add uxpro-cli for easy skill installation (#4)
* feat: add uxpro-cli for easy skill installation - Add CLI tool (uxpro-cli) with commands: init, versions, update - Support multiple AI assistants: claude, cursor, windsurf, antigravity, all - Update README with CLI installation guide and usage examples - Add CC BY-NC 4.0 license - Update feature counts to accurate numbers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: rename CLI from uxpro to uipro - Package: uxpro-cli -> uipro-cli - Command: uxpro -> uipro 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
50
cli/src/utils/detect.ts
Normal file
50
cli/src/utils/detect.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { existsSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import type { AIType } from '../types/index.js';
|
||||
|
||||
interface DetectionResult {
|
||||
detected: AIType[];
|
||||
suggested: AIType | null;
|
||||
}
|
||||
|
||||
export function detectAIType(cwd: string = process.cwd()): DetectionResult {
|
||||
const detected: AIType[] = [];
|
||||
|
||||
if (existsSync(join(cwd, '.claude'))) {
|
||||
detected.push('claude');
|
||||
}
|
||||
if (existsSync(join(cwd, '.cursor'))) {
|
||||
detected.push('cursor');
|
||||
}
|
||||
if (existsSync(join(cwd, '.windsurf'))) {
|
||||
detected.push('windsurf');
|
||||
}
|
||||
if (existsSync(join(cwd, '.agent'))) {
|
||||
detected.push('antigravity');
|
||||
}
|
||||
|
||||
// Suggest based on what's detected
|
||||
let suggested: AIType | null = null;
|
||||
if (detected.length === 1) {
|
||||
suggested = detected[0];
|
||||
} else if (detected.length > 1) {
|
||||
suggested = 'all';
|
||||
}
|
||||
|
||||
return { detected, suggested };
|
||||
}
|
||||
|
||||
export function getAITypeDescription(aiType: AIType): string {
|
||||
switch (aiType) {
|
||||
case 'claude':
|
||||
return 'Claude Code (.claude/skills/)';
|
||||
case 'cursor':
|
||||
return 'Cursor (.cursor/commands/ + .shared/)';
|
||||
case 'windsurf':
|
||||
return 'Windsurf (.windsurf/workflows/ + .shared/)';
|
||||
case 'antigravity':
|
||||
return 'Antigravity (.agent/workflows/ + .shared/)';
|
||||
case 'all':
|
||||
return 'All AI assistants';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user