@quanvo99/ai-rules 0.1.3 → 0.1.5
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 +67 -105
- package/dist/cli/commands/generate-questions.d.ts +7 -0
- package/dist/cli/commands/generate-questions.d.ts.map +1 -0
- package/dist/cli/commands/generate-questions.js +120 -0
- package/dist/cli/commands/generate-questions.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +45 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/lib/files.d.ts +8 -0
- package/dist/cli/lib/files.d.ts.map +1 -1
- package/dist/cli/lib/files.js +19 -0
- package/dist/cli/lib/files.js.map +1 -1
- package/dist/cli/lib/github.d.ts +9 -0
- package/dist/cli/lib/github.d.ts.map +1 -1
- package/dist/cli/lib/github.js +20 -0
- package/dist/cli/lib/github.js.map +1 -1
- package/dist/cli/lib/ollama-client.d.ts +66 -0
- package/dist/cli/lib/ollama-client.d.ts.map +1 -0
- package/dist/cli/lib/ollama-client.js +198 -0
- package/dist/cli/lib/ollama-client.js.map +1 -0
- package/dist/cli/lib/question-prompt.d.ts +37 -0
- package/dist/cli/lib/question-prompt.d.ts.map +1 -0
- package/dist/cli/lib/question-prompt.js +204 -0
- package/dist/cli/lib/question-prompt.js.map +1 -0
- package/dist/cli/lib/question-schema.d.ts +84 -0
- package/dist/cli/lib/question-schema.d.ts.map +1 -0
- package/dist/cli/lib/question-schema.js +135 -0
- package/dist/cli/lib/question-schema.js.map +1 -0
- package/dist/cli/lib/question-types.d.ts +72 -0
- package/dist/cli/lib/question-types.d.ts.map +1 -0
- package/dist/cli/lib/question-types.js +28 -0
- package/dist/cli/lib/question-types.js.map +1 -0
- package/dist/cli/lib/types.d.ts +2 -1
- package/dist/cli/lib/types.d.ts.map +1 -1
- package/dist/cli/lib/types.js +1 -0
- package/dist/cli/lib/types.js.map +1 -1
- package/dist/lib/question-types.d.ts +69 -0
- package/dist/lib/question-types.d.ts.map +1 -0
- package/dist/lib/question-types.js +3 -0
- package/dist/lib/question-types.js.map +1 -0
- package/dist/server/types.d.ts +47 -1
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +2 -1
- package/dist/server/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,72 +5,78 @@ A command-line tool that helps developers pull curated AI agent rules from a cen
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
#
|
|
8
|
+
# Interactive mode - walk through prompts
|
|
9
9
|
npx @quanvo99/ai-rules init
|
|
10
10
|
|
|
11
|
-
#
|
|
12
|
-
npx @quanvo99/ai-rules
|
|
11
|
+
# Non-interactive mode - specify options directly
|
|
12
|
+
npx @quanvo99/ai-rules init --agent cursor --categories typescript,react-hooks --overwrite-strategy force
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 🌐 Interactive Rule Selection
|
|
16
|
+
|
|
17
|
+
**Prefer a visual interface?** Use our web UI to browse, search, and select rules interactively:
|
|
18
|
+
|
|
19
|
+
👉 **[Open Rule Selector at https://ai-rules-setup.vercel.app/](https://ai-rules-setup.vercel.app/)**
|
|
20
|
+
|
|
21
|
+
The web interface allows you to:
|
|
13
22
|
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
- Browse all available rules with descriptions and tags
|
|
24
|
+
- Search rules using keywords
|
|
25
|
+
- Select multiple rules interactively
|
|
26
|
+
- Generate a non-interactive CLI command with your selections
|
|
27
|
+
- Copy and paste the command to install rules instantly
|
|
28
|
+
|
|
29
|
+
Example generated command:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx @quanvo99/ai-rules init --agent cursor --categories typescript-conventions,react-hooks --overwrite-strategy force
|
|
16
33
|
```
|
|
17
34
|
|
|
18
35
|
## What is AI Rules CLI?
|
|
19
36
|
|
|
20
37
|
AI Rules CLI solves the problem of scattered, hard-to-find AI agent rule files across different projects. Instead of manually copying rules from various sources, you can:
|
|
21
38
|
|
|
22
|
-
- **Discover** rules by
|
|
39
|
+
- **Discover** rules by browsing categories and tags
|
|
23
40
|
- **Install** only the rules you need for your specific project
|
|
24
|
-
- **
|
|
25
|
-
- **Refine** your selection through intelligent questioning
|
|
41
|
+
- **Choose** between interactive CLI prompts or web-based selection
|
|
26
42
|
|
|
27
43
|
## Supported AI Agents
|
|
28
44
|
|
|
29
45
|
- **Cursor** - `.cursor/rules/` directory with `.cursorrules` files
|
|
30
|
-
- **
|
|
31
|
-
- **More coming soon** - Aider, Continue, Cody, and others
|
|
46
|
+
- **More coming soon** - Windsurf, Aider, Continue, Cody, and others
|
|
32
47
|
|
|
33
48
|
## Key Features
|
|
34
49
|
|
|
35
|
-
### 🎯
|
|
36
|
-
|
|
37
|
-
Use natural language to find relevant rules:
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
npx @quanvo99/ai-rules search "nextjs 15 server components tailwind"
|
|
41
|
-
```
|
|
50
|
+
### 🎯 Interactive or Command-Line Driven
|
|
42
51
|
|
|
43
|
-
|
|
52
|
+
Choose your preferred workflow:
|
|
44
53
|
|
|
45
|
-
|
|
54
|
+
- **Interactive CLI** - Guided prompts for agent and category selection
|
|
55
|
+
- **Non-Interactive CLI** - Direct command with all options specified
|
|
56
|
+
- **Web UI** - Visual interface at https://ai-rules-setup.vercel.app/
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
- "What's your primary data fetching strategy?"
|
|
49
|
-
- "Do you prefer Tailwind or styled-components?"
|
|
58
|
+
### 📦 Multiple AI Agent Support
|
|
50
59
|
|
|
51
|
-
|
|
60
|
+
Works with:
|
|
52
61
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
npx @quanvo99/ai-rules status
|
|
62
|
+
- **Cursor** - `.cursor/rules/` directory
|
|
63
|
+
- More agents coming soon
|
|
56
64
|
|
|
57
|
-
|
|
58
|
-
npx @quanvo99/ai-rules add nextjs database
|
|
65
|
+
### ⚙️ Flexible Conflict Resolution
|
|
59
66
|
|
|
60
|
-
|
|
61
|
-
npx @quanvo99/ai-rules remove old-framework
|
|
67
|
+
Handle existing files your way:
|
|
62
68
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
69
|
+
- `prompt` - Ask for each conflict (default)
|
|
70
|
+
- `force` - Overwrite all existing files
|
|
71
|
+
- `skip` - Keep existing files, skip new ones
|
|
66
72
|
|
|
67
73
|
## How It Works
|
|
68
74
|
|
|
69
|
-
1. **
|
|
70
|
-
2. **
|
|
71
|
-
3. **
|
|
72
|
-
4. **
|
|
73
|
-
5. **
|
|
75
|
+
1. **Choose Your Interface** - Use the CLI in interactive mode or the web UI at https://ai-rules-setup.vercel.app/
|
|
76
|
+
2. **Select Agent** - Choose your AI agent (Cursor, Windsurf, etc.)
|
|
77
|
+
3. **Pick Categories** - Select rule categories that match your tech stack
|
|
78
|
+
4. **Handle Conflicts** - Decide how to handle existing files (prompt, force, or skip)
|
|
79
|
+
5. **Install** - Rules are automatically placed in the correct locations
|
|
74
80
|
|
|
75
81
|
## Project Structure
|
|
76
82
|
|
|
@@ -85,7 +91,7 @@ your-project/
|
|
|
85
91
|
└── package.json
|
|
86
92
|
```
|
|
87
93
|
|
|
88
|
-
##
|
|
94
|
+
## Example Rule Categories
|
|
89
95
|
|
|
90
96
|
### Languages
|
|
91
97
|
|
|
@@ -122,19 +128,9 @@ The CLI creates a `.ai-rules.json` file in your project root:
|
|
|
122
128
|
|
|
123
129
|
```json
|
|
124
130
|
{
|
|
131
|
+
"version": "1.0.0",
|
|
125
132
|
"agent": "cursor",
|
|
126
|
-
"
|
|
127
|
-
{
|
|
128
|
-
"id": "typescript-strict",
|
|
129
|
-
"category": "typescript",
|
|
130
|
-
"installedAt": "2024-01-15T10:30:00Z",
|
|
131
|
-
"source": "github.com/votrungquan1999/AI-rules-setup"
|
|
132
|
-
}
|
|
133
|
-
],
|
|
134
|
-
"preferences": {
|
|
135
|
-
"autoUpdate": false,
|
|
136
|
-
"conflictResolution": "prompt"
|
|
137
|
-
}
|
|
133
|
+
"categories": ["typescript-conventions", "react-hooks", "meta-rules"]
|
|
138
134
|
}
|
|
139
135
|
```
|
|
140
136
|
|
|
@@ -142,77 +138,43 @@ The CLI creates a `.ai-rules.json` file in your project root:
|
|
|
142
138
|
|
|
143
139
|
### `npx @quanvo99/ai-rules init`
|
|
144
140
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- AI agent selection
|
|
148
|
-
- Tech stack identification
|
|
149
|
-
- Rule discovery and selection
|
|
150
|
-
- Installation configuration
|
|
141
|
+
Initialize AI rules for your project. Can be used in interactive or non-interactive mode.
|
|
151
142
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
Add specific rule categories to your project:
|
|
143
|
+
**Interactive Mode:**
|
|
155
144
|
|
|
156
145
|
```bash
|
|
157
|
-
npx @quanvo99/ai-rules
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### `npx @quanvo99/ai-rules remove <categories...>`
|
|
161
|
-
|
|
162
|
-
Remove rule categories from your project:
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
npx @quanvo99/ai-rules remove old-framework
|
|
146
|
+
npx @quanvo99/ai-rules init
|
|
166
147
|
```
|
|
167
148
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
Update all installed rules to their latest versions:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
npx @quanvo99/ai-rules update
|
|
174
|
-
```
|
|
149
|
+
Walks you through:
|
|
175
150
|
|
|
176
|
-
|
|
151
|
+
- AI agent selection (cursor, windsurf, etc.)
|
|
152
|
+
- Category selection with descriptions and tags
|
|
153
|
+
- File conflict resolution
|
|
177
154
|
|
|
178
|
-
|
|
155
|
+
**Non-Interactive Mode:**
|
|
179
156
|
|
|
180
157
|
```bash
|
|
181
|
-
npx @quanvo99/ai-rules
|
|
158
|
+
npx @quanvo99/ai-rules init [options]
|
|
182
159
|
```
|
|
183
160
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
Show currently installed rules and their status:
|
|
187
|
-
|
|
188
|
-
```bash
|
|
189
|
-
npx @quanvo99/ai-rules status
|
|
190
|
-
```
|
|
161
|
+
**Options:**
|
|
191
162
|
|
|
192
|
-
|
|
163
|
+
- `--agent <name>` - Specify the AI agent (cursor, windsurf, etc.)
|
|
164
|
+
- `--categories <list>` - Comma-separated category IDs (use "all" for all categories)
|
|
165
|
+
- `--overwrite-strategy <strategy>` - Conflict resolution: `prompt` (default), `force`, or `skip`
|
|
193
166
|
|
|
194
|
-
|
|
167
|
+
**Examples:**
|
|
195
168
|
|
|
196
169
|
```bash
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
### `npx @quanvo99/ai-rules refine`
|
|
201
|
-
|
|
202
|
-
Re-run the refinement process for better rule selection:
|
|
170
|
+
# Install specific categories for Cursor
|
|
171
|
+
npx @quanvo99/ai-rules init --agent cursor --categories typescript-conventions,react-hooks
|
|
203
172
|
|
|
204
|
-
|
|
205
|
-
npx @quanvo99/ai-rules
|
|
206
|
-
```
|
|
173
|
+
# Install all categories with force overwrite
|
|
174
|
+
npx @quanvo99/ai-rules init --agent cursor --categories all --overwrite-strategy force
|
|
207
175
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
You can configure the API endpoint if needed:
|
|
211
|
-
|
|
212
|
-
```bash
|
|
213
|
-
# Set custom API URL (optional)
|
|
214
|
-
export AI_RULES_API_URL=https://your-api-domain.com
|
|
215
|
-
npx @quanvo99/ai-rules init
|
|
176
|
+
# Skip existing files
|
|
177
|
+
npx @quanvo99/ai-rules init --agent cursor --categories meta-rules --overwrite-strategy skip
|
|
216
178
|
```
|
|
217
179
|
|
|
218
180
|
## License
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-questions.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/generate-questions.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Question generation script for AI rules
|
|
5
|
+
* Generates questions using local LLM (Ollama) and validates with Zod
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const node_fs_1 = require("node:fs");
|
|
12
|
+
const node_path_1 = require("node:path");
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
|
+
const commander_1 = require("commander");
|
|
15
|
+
const ollama_client_1 = require("../lib/ollama-client");
|
|
16
|
+
const question_prompt_1 = require("../lib/question-prompt");
|
|
17
|
+
const question_schema_1 = require("../lib/question-schema");
|
|
18
|
+
/**
|
|
19
|
+
* Ensures the suggested_questions directory exists
|
|
20
|
+
*/
|
|
21
|
+
function ensureSuggestedQuestionsDir() {
|
|
22
|
+
const dir = (0, node_path_1.join)(process.cwd(), "suggested_questions");
|
|
23
|
+
if (!(0, node_fs_1.existsSync)(dir)) {
|
|
24
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
25
|
+
console.log(chalk_1.default.gray("Created suggested_questions directory"));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Writes questions to file with pretty formatting
|
|
30
|
+
* @param questions - Questions to write
|
|
31
|
+
* @param ruleId - Rule ID for filename
|
|
32
|
+
* @param customOutput - Custom output path (optional)
|
|
33
|
+
*/
|
|
34
|
+
function writeQuestionsFile(questions, ruleId, customOutput) {
|
|
35
|
+
const filename = customOutput || `${ruleId}.json`;
|
|
36
|
+
const filepath = customOutput ? (0, node_path_1.join)(process.cwd(), filename) : (0, node_path_1.join)(process.cwd(), "suggested_questions", filename);
|
|
37
|
+
const jsonContent = JSON.stringify(questions, null, 2);
|
|
38
|
+
(0, node_fs_1.writeFileSync)(filepath, jsonContent, "utf-8");
|
|
39
|
+
console.log(chalk_1.default.green(`✅ Questions written to: ${filepath}`));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Main function for question generation
|
|
43
|
+
*/
|
|
44
|
+
async function generateQuestions(rulePath, options) {
|
|
45
|
+
// Extract rule ID from path for display and filename
|
|
46
|
+
const ruleId = rulePath.split("/").pop() || rulePath;
|
|
47
|
+
console.log(chalk_1.default.blue(`🔍 Generating questions for rule: ${ruleId}`));
|
|
48
|
+
console.log(chalk_1.default.gray(`Using model: ${options.model}`));
|
|
49
|
+
try {
|
|
50
|
+
// Build prompt from rule content
|
|
51
|
+
console.log(chalk_1.default.gray("📖 Reading rule content..."));
|
|
52
|
+
const prompt = (0, question_prompt_1.buildQuestionPrompt)(rulePath);
|
|
53
|
+
// Generate questions using Ollama
|
|
54
|
+
console.log(chalk_1.default.gray("🤖 Calling Ollama LLM..."));
|
|
55
|
+
const jsonResponse = await (0, ollama_client_1.generateQuestionsWithOllama)(prompt, options.model);
|
|
56
|
+
// Parse and validate response
|
|
57
|
+
console.log(chalk_1.default.gray("✅ Validating response..."));
|
|
58
|
+
const parseResult = JSON.parse(jsonResponse);
|
|
59
|
+
const validationResult = (0, question_schema_1.validateQuestionResponse)(parseResult);
|
|
60
|
+
// TODO: Add a way to retry the generation
|
|
61
|
+
if (validationResult.success === false) {
|
|
62
|
+
console.error(chalk_1.default.red("❌ Validation failed:"));
|
|
63
|
+
console.error(chalk_1.default.red(validationResult.error));
|
|
64
|
+
console.log(chalk_1.default.yellow("\nRaw LLM response:"));
|
|
65
|
+
console.log(chalk_1.default.gray(jsonResponse));
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
// TypeScript now knows validationResult is success case
|
|
69
|
+
const validatedQuestions = validationResult.data;
|
|
70
|
+
// Ensure output directory exists
|
|
71
|
+
ensureSuggestedQuestionsDir();
|
|
72
|
+
// Write questions to file
|
|
73
|
+
writeQuestionsFile(validatedQuestions, ruleId, options.output);
|
|
74
|
+
// Show summary
|
|
75
|
+
const questionCount = validatedQuestions.questions.length;
|
|
76
|
+
console.log(chalk_1.default.green(`\n🎉 Successfully generated ${questionCount} questions for '${ruleId}'`));
|
|
77
|
+
// Show question preview
|
|
78
|
+
console.log(chalk_1.default.blue("\n📋 Generated questions:"));
|
|
79
|
+
validatedQuestions.questions.forEach((q, index) => {
|
|
80
|
+
console.log(chalk_1.default.gray(`${index + 1}. [${q.type}] ${q.text}`));
|
|
81
|
+
});
|
|
82
|
+
console.log(chalk_1.default.yellow("\n💡 Next steps:"));
|
|
83
|
+
console.log(chalk_1.default.gray("1. Review the generated questions"));
|
|
84
|
+
console.log(chalk_1.default.gray("2. Edit if needed"));
|
|
85
|
+
console.log(chalk_1.default.gray("3. Move to questions/ folder when ready"));
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error instanceof ollama_client_1.OllamaError) {
|
|
89
|
+
console.error(chalk_1.default.red(`❌ Ollama Error: ${error.message}`));
|
|
90
|
+
if (error.message.includes("not running")) {
|
|
91
|
+
console.log(chalk_1.default.yellow("\n💡 To fix this:"));
|
|
92
|
+
console.log(chalk_1.default.gray("1. Install Ollama: https://ollama.ai"));
|
|
93
|
+
console.log(chalk_1.default.gray("2. Start Ollama server"));
|
|
94
|
+
console.log(chalk_1.default.gray("3. Pull a model: ollama pull llama3.2"));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.error(chalk_1.default.red(`❌ Error: ${error instanceof Error ? error.message : "Unknown error"}`));
|
|
99
|
+
}
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Create CLI program using Commander.js
|
|
104
|
+
const program = new commander_1.Command();
|
|
105
|
+
program
|
|
106
|
+
.name("generate-questions")
|
|
107
|
+
.description("Generate questions for AI rules using local LLM (Ollama)")
|
|
108
|
+
.argument("<rule-path>", "Path to rule directory (e.g., 'rules/cursor/brainstorming')")
|
|
109
|
+
.argument("[model]", "Model name (alternative to --model flag)", "")
|
|
110
|
+
.option("-m, --model <model>", "Ollama model to use")
|
|
111
|
+
.option("-o, --output <file>", "Custom output filename")
|
|
112
|
+
.action(async (rulePath, modelArg, options) => {
|
|
113
|
+
// Use option model, then fall back to positional model arg
|
|
114
|
+
const model = options.model || modelArg || "llama3.2";
|
|
115
|
+
// Call with merged options including model
|
|
116
|
+
await generateQuestions(rulePath, { ...options, model });
|
|
117
|
+
});
|
|
118
|
+
// Parse arguments and run
|
|
119
|
+
program.parse();
|
|
120
|
+
//# sourceMappingURL=generate-questions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-questions.js","sourceRoot":"","sources":["../../../../src/cli/commands/generate-questions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,cAAc,CAAC;AAEjE;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,cAAc,CAAC;AAEjE;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8M1E"}
|
|
@@ -145,6 +145,51 @@ async function initCommand(options = {}) {
|
|
|
145
145
|
Object.assign(config, updatedConfig);
|
|
146
146
|
installedRules.push(manifest.id);
|
|
147
147
|
}
|
|
148
|
+
// For Claude Code, also install skills
|
|
149
|
+
if (selectedAgent === "claude-code") {
|
|
150
|
+
console.log(chalk_1.default.blue("\n🎯 Installing Claude Code skills..."));
|
|
151
|
+
const skills = await (0, github_1.fetchSkills)(selectedAgent);
|
|
152
|
+
if (skills.length > 0) {
|
|
153
|
+
let installedSkillsCount = 0;
|
|
154
|
+
for (const skill of skills) {
|
|
155
|
+
try {
|
|
156
|
+
// Apply skill naming convention
|
|
157
|
+
const targetPath = (0, files_1.applySkillNamingConvention)(selectedAgent, skill.name);
|
|
158
|
+
// Check for conflicts
|
|
159
|
+
const conflict = await (0, files_1.detectConflict)((0, node_path_1.join)(process.cwd(), targetPath));
|
|
160
|
+
if (conflict.hasConflict) {
|
|
161
|
+
// Handle conflict based on strategy
|
|
162
|
+
if (overwriteStrategy === "skip") {
|
|
163
|
+
console.log(chalk_1.default.yellow(`⏭️ Skipped (file exists): ${targetPath}`));
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
if (overwriteStrategy === "force") {
|
|
167
|
+
console.log(chalk_1.default.yellow(`⚠️ Overwriting: ${targetPath}`));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
// prompt strategy
|
|
171
|
+
const shouldOverwrite = await (0, prompts_1.promptConflictResolution)(targetPath);
|
|
172
|
+
if (!shouldOverwrite) {
|
|
173
|
+
console.log(chalk_1.default.yellow(`⏭️ Skipped: ${targetPath}`));
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Write skill file
|
|
179
|
+
await (0, files_1.writeRuleFile)(skill.content, (0, node_path_1.join)(process.cwd(), targetPath));
|
|
180
|
+
console.log(chalk_1.default.green(`✓ Installed skill: ${skill.name}`));
|
|
181
|
+
installedSkillsCount++;
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
console.log(chalk_1.default.red(`❌ Error installing skill ${skill.name}: ${error}`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
console.log(chalk_1.default.green(`\n🎉 Successfully installed ${installedSkillsCount} skills`));
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
console.log(chalk_1.default.yellow("No skills found for Claude Code"));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
148
193
|
// Save updated config
|
|
149
194
|
await (0, config_1.saveConfig)(process.cwd(), config);
|
|
150
195
|
// Display success message
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;;;AAYA,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/lib/files.d.ts
CHANGED
|
@@ -18,4 +18,12 @@ export declare function writeRuleFile(content: string, targetPath: string): Prom
|
|
|
18
18
|
* @returns Target file path following agent conventions
|
|
19
19
|
*/
|
|
20
20
|
export declare function applyNamingConvention(agent: AIAgent, filename: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Applies skill-specific naming conventions for skill files
|
|
23
|
+
* Converts flat file structure (skill-name.md) to directory structure (skill-name/SKILL.md)
|
|
24
|
+
* @param agent - AI agent type
|
|
25
|
+
* @param skillName - Name of the skill (without .md extension)
|
|
26
|
+
* @returns Target file path for the skill
|
|
27
|
+
*/
|
|
28
|
+
export declare function applySkillNamingConvention(agent: AIAgent, skillName: string): string;
|
|
21
29
|
//# sourceMappingURL=files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/files.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAW9E;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/files.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAW9E;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB9E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CASpF"}
|
package/dist/cli/lib/files.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.detectConflict = detectConflict;
|
|
4
4
|
exports.writeRuleFile = writeRuleFile;
|
|
5
5
|
exports.applyNamingConvention = applyNamingConvention;
|
|
6
|
+
exports.applySkillNamingConvention = applySkillNamingConvention;
|
|
6
7
|
const node_fs_1 = require("node:fs");
|
|
7
8
|
const promises_1 = require("node:fs/promises");
|
|
8
9
|
const node_path_1 = require("node:path");
|
|
@@ -56,8 +57,26 @@ function applyNamingConvention(agent, filename) {
|
|
|
56
57
|
return `.continue/rules/${filename}`;
|
|
57
58
|
case types_1.AIAgent.CODY:
|
|
58
59
|
return `.cody/rules/${filename}`;
|
|
60
|
+
case types_1.AIAgent.CLAUDE_CODE:
|
|
61
|
+
return `.claude/rules/${filename}`;
|
|
59
62
|
default:
|
|
60
63
|
throw new Error(`Unsupported AI agent: ${agent}`);
|
|
61
64
|
}
|
|
62
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Applies skill-specific naming conventions for skill files
|
|
68
|
+
* Converts flat file structure (skill-name.md) to directory structure (skill-name/SKILL.md)
|
|
69
|
+
* @param agent - AI agent type
|
|
70
|
+
* @param skillName - Name of the skill (without .md extension)
|
|
71
|
+
* @returns Target file path for the skill
|
|
72
|
+
*/
|
|
73
|
+
function applySkillNamingConvention(agent, skillName) {
|
|
74
|
+
switch (agent) {
|
|
75
|
+
case types_1.AIAgent.CLAUDE_CODE:
|
|
76
|
+
// Convert skill-name to skill-name/SKILL.md
|
|
77
|
+
return `.claude/skills/${skillName}/SKILL.md`;
|
|
78
|
+
default:
|
|
79
|
+
throw new Error(`Skills are not supported for agent: ${agent}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
63
82
|
//# sourceMappingURL=files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../../src/cli/lib/files.ts"],"names":[],"mappings":";;AAUA,wCAWC;AAOD,sCAOC;AAQD,
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../../src/cli/lib/files.ts"],"names":[],"mappings":";;AAUA,wCAWC;AAOD,sCAOC;AAQD,sDAwBC;AASD,gEASC;AArFD,qCAAoC;AACpC,+CAA4D;AAC5D,yCAAoC;AACpC,mCAAuD;AAEvD;;;;GAIG;AACI,KAAK,UAAU,cAAc,CAAC,QAAgB;IACpD,IAAI,CAAC;QACJ,MAAM,IAAA,iBAAM,EAAC,QAAQ,EAAE,mBAAS,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO;YACN,WAAW,EAAE,IAAI;SACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO;YACN,WAAW,EAAE,KAAK;SAClB,CAAC;IACH,CAAC;AACF,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,UAAkB;IACtE,iDAAiD;IACjD,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,UAAU,CAAC,CAAC;IAChC,MAAM,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,iBAAiB;IACjB,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,KAAc,EAAE,QAAgB;IACrE,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,eAAO,CAAC,MAAM;YAClB,OAAO,iBAAiB,QAAQ,EAAE,CAAC;QAEpC,KAAK,eAAO,CAAC,QAAQ;YACpB,kFAAkF;YAClF,OAAO,mBAAmB,QAAQ,EAAE,CAAC;QAEtC,KAAK,eAAO,CAAC,KAAK;YACjB,OAAO,gBAAgB,QAAQ,EAAE,CAAC;QAEnC,KAAK,eAAO,CAAC,QAAQ;YACpB,OAAO,mBAAmB,QAAQ,EAAE,CAAC;QAEtC,KAAK,eAAO,CAAC,IAAI;YAChB,OAAO,eAAe,QAAQ,EAAE,CAAC;QAElC,KAAK,eAAO,CAAC,WAAW;YACvB,OAAO,iBAAiB,QAAQ,EAAE,CAAC;QAEpC;YACC,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,KAAc,EAAE,SAAiB;IAC3E,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,eAAO,CAAC,WAAW;YACvB,4CAA4C;YAC5C,OAAO,kBAAkB,SAAS,WAAW,CAAC;QAE/C;YACC,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;AACF,CAAC"}
|
package/dist/cli/lib/github.d.ts
CHANGED
|
@@ -18,4 +18,13 @@ export declare function fetchManifests(agent: string): Promise<Manifest[]>;
|
|
|
18
18
|
* @returns File content as string, or null if file doesn't exist
|
|
19
19
|
*/
|
|
20
20
|
export declare function fetchRuleFile(agent: string, category: string, filename: string): Promise<string | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Fetches all skills for a specific agent from the API
|
|
23
|
+
* @param agent - AI agent name (e.g., 'claude-code')
|
|
24
|
+
* @returns Array of skill objects with name and content, or empty array if no skills
|
|
25
|
+
*/
|
|
26
|
+
export declare function fetchSkills(agent: string): Promise<Array<{
|
|
27
|
+
name: string;
|
|
28
|
+
content: string;
|
|
29
|
+
}>>;
|
|
21
30
|
//# sourceMappingURL=github.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AA+DnD;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ9D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAcvE;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqB7G;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAclG"}
|
package/dist/cli/lib/github.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.fetchAvailableAgents = fetchAvailableAgents;
|
|
4
4
|
exports.fetchManifests = fetchManifests;
|
|
5
5
|
exports.fetchRuleFile = fetchRuleFile;
|
|
6
|
+
exports.fetchSkills = fetchSkills;
|
|
6
7
|
// API configuration
|
|
7
8
|
const API_BASE_URL = process.env.AI_RULES_API_URL || "https://ai-rules-setup.vercel.app";
|
|
8
9
|
// Cache for API responses to avoid multiple calls
|
|
@@ -94,4 +95,23 @@ async function fetchRuleFile(agent, category, filename) {
|
|
|
94
95
|
return null;
|
|
95
96
|
}
|
|
96
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Fetches all skills for a specific agent from the API
|
|
100
|
+
* @param agent - AI agent name (e.g., 'claude-code')
|
|
101
|
+
* @returns Array of skill objects with name and content, or empty array if no skills
|
|
102
|
+
*/
|
|
103
|
+
async function fetchSkills(agent) {
|
|
104
|
+
try {
|
|
105
|
+
const data = await fetchRulesData();
|
|
106
|
+
const agentData = data.agents[agent];
|
|
107
|
+
if (!agentData || !agentData.skills) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
return agentData.skills;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error(`Error fetching skills for agent ${agent}:`, error);
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
97
117
|
//# sourceMappingURL=github.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/cli/lib/github.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/cli/lib/github.ts"],"names":[],"mappings":"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"}
|