ai-developer-skill-os 1.3.1 → 1.4.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 +26 -2
- package/bin/install.js +115 -83
- package/docs/HUONG_DAN_SU_DUNG.md +33 -12
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,10 +35,12 @@ Mở terminal tại thư mục gốc dự án của bạn và chạy:
|
|
|
35
35
|
```bash
|
|
36
36
|
npx ai-developer-skill-os init
|
|
37
37
|
```
|
|
38
|
-
|
|
38
|
+
Hệ thống sẽ cung cấp cho bạn 2 tuỳ chọn cực kỳ linh hoạt:
|
|
39
|
+
- **(1) Local:** Cài vào thư mục ẩn `.qk-ai-skill-os/` ngay trong dự án. (Phù hợp khi làm việc nhóm, commit lên Git để ai cũng xài được).
|
|
40
|
+
- **(2) Global:** Cài thẳng vào ổ đĩa máy tính (Home Directory). Từ đó trở đi, bạn mở **BẤT KỲ DỰ ÁN NÀO** cũng sẽ tự động gọi được 23 kỹ năng mà không cần tải lại file! (Rất tuyệt vời cho cá nhân sử dụng).
|
|
39
41
|
|
|
40
42
|
### Cách 2: Sử dụng Git Submodule
|
|
41
|
-
Nếu bạn không dùng Node.js, bạn có thể nhúng trực tiếp qua Git:
|
|
43
|
+
Nếu bạn không dùng Node.js, bạn có thể nhúng trực tiếp qua Git (Chỉ hỗ trợ dạng Local):
|
|
42
44
|
```bash
|
|
43
45
|
git submodule add https://github.com/phamquangkhanh2999/ai-developer-skill-os.git .qk-ai-skill-os
|
|
44
46
|
```
|
|
@@ -107,6 +109,28 @@ Dưới đây là các ví dụ cụ thể để bạn copy - paste và trải n
|
|
|
107
109
|
|
|
108
110
|
---
|
|
109
111
|
|
|
112
|
+
## 💡 Mẹo & Workflow Thực Chiến (Best Practices)
|
|
113
|
+
|
|
114
|
+
Để khai thác tối đa sức mạnh của 23 kỹ năng, bí quyết là **kết hợp (chaining) nhiều skill** lại với nhau trong cùng một luồng công việc. Dưới đây là các Workflow kinh điển:
|
|
115
|
+
|
|
116
|
+
### 🌟 1. Workflow Bắt đầu một New Chat (Bắt buộc)
|
|
117
|
+
Khi mở một New Chat, AI hoàn toàn chưa biết gì về dự án. Đừng bắt nó code ngay!
|
|
118
|
+
* **Bước 1:** `> Dùng ./qk-context-manager để đọc cấu trúc toàn bộ dự án này.`
|
|
119
|
+
* **Bước 2:** `> Dùng ./qk-agent-orchestrator để phân tích yêu cầu sau đây và lên kế hoạch: [Yêu cầu của bạn]`
|
|
120
|
+
|
|
121
|
+
### 🌟 2. Workflow Làm tính năng mới (VD: Tích hợp API)
|
|
122
|
+
Muốn tạo một màn hình hiển thị danh sách từ API trả về? Hãy gõ:
|
|
123
|
+
* `> Hãy dùng ./qk-api-integration để tạo file gọi API fetch danh sách Users.`
|
|
124
|
+
* `> Tiếp theo dùng ./qk-state-management để lưu data này vào Zustand/Redux.`
|
|
125
|
+
* `> Cuối cùng dùng ./qk-ui-builder để vẽ màn hình Table hiển thị data đó.`
|
|
126
|
+
|
|
127
|
+
### 🌟 3. Workflow Chống "Phá Code" (Safe Refactor)
|
|
128
|
+
Trước khi đổi một cấu trúc lớn, hãy bắt AI dò mìn:
|
|
129
|
+
* `> Hãy chạy ./qk-project-audit để dò xem việc đổi tên biến X có ảnh hưởng đến các component khác không.`
|
|
130
|
+
* `> OK, giờ hãy dùng ./qk-refactor để sửa lại một cách an toàn.`
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
110
134
|
## 💎 Danh sách 23+ Kỹ Năng Độc Quyền
|
|
111
135
|
|
|
112
136
|
| Phân hệ | Kỹ năng tiêu biểu | Chức năng chính |
|
package/bin/install.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const readline = require('readline');
|
|
6
|
+
const os = require('os');
|
|
6
7
|
|
|
7
8
|
const sourceDir = path.join(__dirname, '..');
|
|
8
|
-
let targetDir = path.join(process.cwd(), '.qk-ai-skill-os');
|
|
9
9
|
|
|
10
10
|
function copyRecursiveSync(src, dest) {
|
|
11
11
|
const exists = fs.existsSync(src);
|
|
@@ -24,17 +24,6 @@ function copyRecursiveSync(src, dest) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
const systemPrompt = `[Role]
|
|
28
|
-
You are an elite AI Software Engineer. You must strictly follow the rules in this project.
|
|
29
|
-
Vui lòng tìm đọc danh sách kỹ năng tại file \`./.qk-ai-skill-os/skills.json\`.
|
|
30
|
-
|
|
31
|
-
[Trigger Mechanism]
|
|
32
|
-
Bất cứ khi nào người dùng gõ lệnh bắt đầu bằng \`./qk-[tên-skill]\`, bạn BẮT BUỘC phải đọc file \`SKILL.md\` tương ứng trong thư mục \`./.qk-ai-skill-os/skills/...\` trước khi làm bất cứ việc gì. Đừng bao giờ đoán mò.
|
|
33
|
-
|
|
34
|
-
[Command Arguments]
|
|
35
|
-
Người dùng có thể truyền thêm tham số vào lệnh (ví dụ: \`./qk-ui-builder --fw=react --css=tailwind\`).
|
|
36
|
-
Nếu người dùng sử dụng tham số (argument), bạn BẮT BUỘC phải tuân thủ tuyệt đối các công nghệ/yêu cầu được chỉ định trong tham số đó thay vì dùng mặc định.`;
|
|
37
|
-
|
|
38
27
|
const rl = readline.createInterface({
|
|
39
28
|
input: process.stdin,
|
|
40
29
|
output: process.stdout
|
|
@@ -42,94 +31,137 @@ const rl = readline.createInterface({
|
|
|
42
31
|
|
|
43
32
|
console.log('🚀 Đang chuẩn bị cài đặt AI Developer Skill OS...\n');
|
|
44
33
|
|
|
45
|
-
const
|
|
34
|
+
const questionIde = `Vui lòng chọn IDE/AI Assistant bạn đang sử dụng:
|
|
46
35
|
(1) Cursor
|
|
47
36
|
(2) Windsurf
|
|
48
37
|
(3) Cline / Roo Code
|
|
49
38
|
(4) Antigravity / Gemini
|
|
50
39
|
(5) Codex
|
|
51
40
|
(6) Kilo Code
|
|
52
|
-
(0) Bỏ qua (Không tạo
|
|
41
|
+
(0) Bỏ qua (Không tạo config tự động)
|
|
53
42
|
|
|
54
43
|
Nhập số (0-6): `;
|
|
55
44
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
switch(answer.trim()) {
|
|
61
|
-
case '1': ruleFile = '.cursorrules'; break;
|
|
62
|
-
case '2': ruleFile = '.windsurfrules'; break;
|
|
63
|
-
case '3': ruleFile = '.clinerules'; break;
|
|
64
|
-
case '4':
|
|
65
|
-
isGemini = true;
|
|
66
|
-
targetDir = path.join(process.cwd(), '.agents', 'skills');
|
|
67
|
-
ruleFile = path.join('.agents', 'AGENTS.md');
|
|
68
|
-
break;
|
|
69
|
-
case '5': ruleFile = '.codexrules'; break;
|
|
70
|
-
case '6': ruleFile = '.kilorules'; break;
|
|
71
|
-
case '0':
|
|
72
|
-
default:
|
|
73
|
-
console.log('👉 Bỏ qua bước tạo file cấu hình tự động.');
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
45
|
+
const questionScope = `
|
|
46
|
+
Bạn muốn cài đặt bộ kỹ năng ở đâu?
|
|
47
|
+
(1) Local (Gắn vào dự án hiện tại - Phù hợp làm việc nhóm)
|
|
48
|
+
(2) Global (Cài vào máy tính dùng chung cho mọi dự án - Dành cho cá nhân)
|
|
76
49
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
50
|
+
Nhập số (1-2): `;
|
|
51
|
+
|
|
52
|
+
rl.question(questionIde, (answerIde) => {
|
|
53
|
+
let isGemini = false;
|
|
54
|
+
let ruleFileName = null;
|
|
55
|
+
const ideCode = answerIde.trim();
|
|
56
|
+
|
|
57
|
+
switch(ideCode) {
|
|
58
|
+
case '1': ruleFileName = '.cursorrules'; break;
|
|
59
|
+
case '2': ruleFileName = '.windsurfrules'; break;
|
|
60
|
+
case '3': ruleFileName = '.clinerules'; break;
|
|
61
|
+
case '4': isGemini = true; break;
|
|
62
|
+
case '5': ruleFileName = '.codexrules'; break;
|
|
63
|
+
case '6': ruleFileName = '.kilorules'; break;
|
|
64
|
+
case '0': default: break;
|
|
81
65
|
}
|
|
82
66
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
67
|
+
rl.question(questionScope, (answerScope) => {
|
|
68
|
+
const isGlobal = answerScope.trim() === '2';
|
|
69
|
+
|
|
70
|
+
let targetDir = '';
|
|
71
|
+
let ruleFilePath = null;
|
|
72
|
+
let baseFolderForPrompt = '';
|
|
73
|
+
const homeDir = os.homedir();
|
|
74
|
+
const cwd = process.cwd();
|
|
75
|
+
|
|
76
|
+
if (isGemini) {
|
|
77
|
+
if (isGlobal) {
|
|
78
|
+
targetDir = path.join(homeDir, '.gemini', 'config');
|
|
79
|
+
ruleFilePath = path.join(targetDir, 'AGENTS.md');
|
|
80
|
+
baseFolderForPrompt = path.join(targetDir, 'skills').replace(/\\/g, '/');
|
|
81
|
+
} else {
|
|
82
|
+
targetDir = path.join(cwd, '.agents');
|
|
83
|
+
ruleFilePath = path.join(cwd, '.agents', 'AGENTS.md');
|
|
84
|
+
baseFolderForPrompt = '.agents/skills';
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
if (isGlobal) {
|
|
88
|
+
targetDir = path.join(homeDir, '.qk-ai-skill-os');
|
|
89
|
+
baseFolderForPrompt = targetDir.replace(/\\/g, '/');
|
|
90
|
+
} else {
|
|
91
|
+
targetDir = path.join(cwd, '.qk-ai-skill-os');
|
|
92
|
+
baseFolderForPrompt = './.qk-ai-skill-os';
|
|
93
|
+
}
|
|
94
|
+
if (ruleFileName) {
|
|
95
|
+
ruleFilePath = path.join(cwd, ruleFileName);
|
|
96
|
+
}
|
|
86
97
|
}
|
|
87
98
|
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (fs.existsSync(src)) {
|
|
103
|
-
copyRecursiveSync(src, dest);
|
|
99
|
+
const systemPrompt = `[Role]
|
|
100
|
+
You are an elite AI Software Engineer. You must strictly follow the rules in this project.
|
|
101
|
+
Vui lòng tìm đọc danh sách kỹ năng tại file \`${baseFolderForPrompt}/skills.json\`.
|
|
102
|
+
|
|
103
|
+
[Trigger Mechanism]
|
|
104
|
+
Bất cứ khi nào người dùng gõ lệnh bắt đầu bằng \`./qk-[tên-skill]\`, bạn BẮT BUỘC phải đọc file \`SKILL.md\` tương ứng trong thư mục \`${baseFolderForPrompt}/...\` (hoặc dùng tool view_file để đọc file đó) trước khi làm bất cứ việc gì. Đừng bao giờ đoán mò.
|
|
105
|
+
|
|
106
|
+
[Command Arguments]
|
|
107
|
+
Người dùng có thể truyền thêm tham số vào lệnh (ví dụ: \`./qk-ui-builder --fw=react --css=tailwind\`).
|
|
108
|
+
Nếu người dùng sử dụng tham số (argument), bạn BẮT BUỘC phải tuân thủ tuyệt đối các công nghệ/yêu cầu được chỉ định trong tham số đó thay vì dùng mặc định.`;
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
if (!fs.existsSync(targetDir)) {
|
|
112
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
104
113
|
}
|
|
105
|
-
});
|
|
106
114
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (ruleDir !== process.cwd() && !fs.existsSync(ruleDir)) {
|
|
111
|
-
fs.mkdirSync(ruleDir, { recursive: true });
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
let writeContent = systemPrompt;
|
|
115
|
-
if (isGemini) {
|
|
116
|
-
writeContent = `\n<RULE[ai_skill_os]>\n---\ntrigger: always_on\n---\n${systemPrompt}\n</RULE[ai_skill_os]>\n`;
|
|
117
|
-
}
|
|
115
|
+
const filesAndFolders = [
|
|
116
|
+
'skills', '_template', 'docs', 'skills.json', 'README.md', 'CHANGELOG.md', 'LICENSE'
|
|
117
|
+
];
|
|
118
118
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
fs.writeFileSync(fullRulePath, writeContent);
|
|
124
|
-
console.log(`✅ Đã TẠO MỚI file cấu hình: ${ruleFile}`);
|
|
119
|
+
// Nếu là Gemini Global, chỉ cần copy skills và skills.json để tránh rác
|
|
120
|
+
if (isGemini && isGlobal) {
|
|
121
|
+
if (fs.existsSync(path.join(sourceDir, 'skills'))) {
|
|
122
|
+
copyRecursiveSync(path.join(sourceDir, 'skills'), path.join(targetDir, 'skills'));
|
|
125
123
|
}
|
|
126
|
-
|
|
124
|
+
} else {
|
|
125
|
+
filesAndFolders.forEach(item => {
|
|
126
|
+
const src = path.join(sourceDir, item);
|
|
127
|
+
let dest = path.join(targetDir, item);
|
|
128
|
+
if (fs.existsSync(src)) {
|
|
129
|
+
copyRecursiveSync(src, dest);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
127
133
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
if (ruleFilePath) {
|
|
135
|
+
const ruleDir = path.dirname(ruleFilePath);
|
|
136
|
+
if (ruleDir !== cwd && !fs.existsSync(ruleDir)) {
|
|
137
|
+
fs.mkdirSync(ruleDir, { recursive: true });
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
let writeContent = systemPrompt;
|
|
141
|
+
if (isGemini) {
|
|
142
|
+
writeContent = `\n<RULE[ai_skill_os]>\n---\ntrigger: always_on\n---\n${systemPrompt}\n</RULE[ai_skill_os]>\n`;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (fs.existsSync(ruleFilePath)) {
|
|
146
|
+
fs.appendFileSync(ruleFilePath, "\n\n" + writeContent);
|
|
147
|
+
console.log(`✅ Đã GHI THÊM cấu hình tự động vào file: ${ruleFilePath}`);
|
|
148
|
+
} else {
|
|
149
|
+
fs.writeFileSync(ruleFilePath, writeContent);
|
|
150
|
+
console.log(`✅ Đã TẠO MỚI file cấu hình: ${ruleFilePath}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
console.log(`\n🎉 HOÀN TẤT! Dữ liệu kỹ năng đã được lưu tại: ${targetDir}`);
|
|
155
|
+
if (isGlobal && !isGemini) {
|
|
156
|
+
console.log(`💡 Lưu ý: Kỹ năng đã được cài ở cấp độ máy tính (Global). File cấu hình cục bộ (${ruleFileName}) ở dự án này đang trỏ thẳng về thư mục Global đó.`);
|
|
157
|
+
} else if (isGlobal && isGemini) {
|
|
158
|
+
console.log(`💡 Lưu ý: Antigravity đã được cài Global. Từ nay bạn mở BẤT KỲ DỰ ÁN NÀO trên máy tính này, Antigravity cũng sẽ tự động có đủ 23 kỹ năng mà không cần cài lại!`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
} catch (error) {
|
|
162
|
+
console.error('❌ Có lỗi xảy ra trong quá trình cài đặt:', error.message);
|
|
163
|
+
} finally {
|
|
164
|
+
rl.close();
|
|
165
|
+
}
|
|
166
|
+
});
|
|
135
167
|
});
|
|
@@ -27,24 +27,21 @@ Bộ Skin này rất linh hoạt và được phân phối qua NPM để bạn c
|
|
|
27
27
|
Mở terminal tại gốc dự án của bạn và chạy lệnh cài đặt tương ứng với công cụ AI bạn đang dùng:
|
|
28
28
|
|
|
29
29
|
### Dành cho Gemini IDE / Antigravity
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
npx ai-developer-skill-os init --gemini
|
|
33
|
-
```
|
|
34
|
-
*Lệnh này sẽ tự tạo thư mục `.agents/skills/` và tải toàn bộ bộ kỹ năng vào đó.*
|
|
30
|
+
### 1. Cài đặt (Installation)
|
|
31
|
+
> Khuyên dùng cách cài đặt qua NPM để luôn nhận được cấu trúc mới nhất và tận dụng tính năng Auto-Config.
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
Các công cụ này linh hoạt hơn, bạn cài đặt mặc định:
|
|
33
|
+
Mở terminal tại thư mục gốc dự án của bạn và chạy lệnh sau:
|
|
38
34
|
```bash
|
|
39
35
|
npx ai-developer-skill-os init
|
|
40
36
|
```
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
---
|
|
37
|
+
Quá trình cài đặt sẽ hỏi bạn 2 câu quan trọng:
|
|
44
38
|
|
|
45
|
-
|
|
39
|
+
**Câu 1: Bạn đang dùng IDE nào?**
|
|
40
|
+
Hệ thống sẽ tự động tạo file cấu hình tương ứng (ví dụ `.cursorrules`, `.windsurfrules`, `.clinerules`) và bơm sẵn System Prompt vào để AI tự nhận diện các skill.
|
|
46
41
|
|
|
47
|
-
|
|
42
|
+
**Câu 2: Phạm vi cài đặt?**
|
|
43
|
+
- **(1) Local:** Cài vào thư mục ẩn `.qk-ai-skill-os/` (hoặc `.agents/` cho Gemini) ngay trong dự án. Rất phù hợp nếu dự án có nhiều người làm chung, bạn có thể commit thư mục này lên Git để ai cũng có skill.
|
|
44
|
+
- **(2) Global:** Cài thẳng vào ổ đĩa máy tính (Home Directory). Nếu bạn code một mình, hãy chọn tuỳ chọn này! Nó giúp bạn tiết kiệm dung lượng, và chỉ cần cài 1 lần là BẤT KỲ DỰ ÁN NÀO bạn mở lên, AI cũng tự động có đủ 23 kỹ năng (Đặc biệt siêu mượt với Antigravity/Gemini). nó.
|
|
48
45
|
|
|
49
46
|
### Cho Gemini IDE / Antigravity
|
|
50
47
|
**Không cần cấu hình gì thêm!** Gemini/Antigravity sẽ tự động nhận diện các file trong `.agents/skills/` và sẵn sàng làm việc ngay.
|
|
@@ -117,3 +114,27 @@ Dưới đây là các câu lệnh (prompt) mẫu cực kỳ hiệu quả mà b
|
|
|
117
114
|
|
|
118
115
|
### 🎯 Ví dụ 6: Database & Backend
|
|
119
116
|
> **`./qk-database-engineer`** Hãy viết cho tôi schema Prisma cho bảng Product và User có quan hệ 1-N. Làm theo đúng chuẩn kiến trúc trong skill.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 6. 💡 Mẹo & Workflow Thực Chiến (Best Practices)
|
|
121
|
+
|
|
122
|
+
Để khai thác tối đa sức mạnh của 23 kỹ năng, bí quyết là **kết hợp (chaining) nhiều skill** lại với nhau trong cùng một luồng công việc.
|
|
123
|
+
|
|
124
|
+
### 🌟 Workflow Bắt đầu một New Chat (Bắt buộc)
|
|
125
|
+
Khi mở một New Chat, AI hoàn toàn chưa biết gì về dự án. Đừng bắt nó code ngay!
|
|
126
|
+
* **Bước 1:** `> Dùng ./qk-context-manager để đọc cấu trúc toàn bộ dự án này.`
|
|
127
|
+
* **Bước 2:** `> Dùng ./qk-agent-orchestrator để phân tích yêu cầu sau đây và lên kế hoạch: [Yêu cầu của bạn]`
|
|
128
|
+
|
|
129
|
+
### 🌟 Workflow Làm tính năng mới (VD: Tích hợp API)
|
|
130
|
+
Muốn tạo một màn hình hiển thị danh sách từ API trả về? Hãy gõ 1 lượt các lệnh:
|
|
131
|
+
* `> Hãy dùng ./qk-api-integration để tạo file gọi API fetch danh sách Users.`
|
|
132
|
+
* `> Tiếp theo dùng ./qk-state-management để lưu data này vào Zustand/Redux.`
|
|
133
|
+
* `> Cuối cùng dùng ./qk-ui-builder để vẽ màn hình Table hiển thị data đó.`
|
|
134
|
+
|
|
135
|
+
### 🌟 Workflow Chống "Phá Code" (Safe Refactor)
|
|
136
|
+
Trước khi đổi một cấu trúc lớn, hãy bắt AI dò mìn:
|
|
137
|
+
* `> Hãy chạy ./qk-project-audit để dò xem việc đổi tên biến X có ảnh hưởng đến các component khác không.`
|
|
138
|
+
* `> OK, giờ hãy dùng ./qk-refactor để sửa lại một cách an toàn.`
|
|
139
|
+
|
|
140
|
+
👉 Chúc bạn tận hưởng cảm giác code như một Tech Lead thực thụ!
|
package/package.json
CHANGED