antigravity-ide 3.5.61 → 3.5.63
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.vi.md +32 -25
- package/cli/create.js +8 -6
- package/cli/index.js +41 -75
- package/cli/lib/auto-update.js +43 -0
- package/cli/prompts.js +79 -75
- package/package.json +1 -1
package/README.vi.md
CHANGED
|
@@ -20,41 +20,48 @@
|
|
|
20
20
|
Sử dụng CLI để thiết lập môi trường tác chiến trong 30 giây:
|
|
21
21
|
|
|
22
22
|
```sh
|
|
23
|
-
# 1. Tạo dự án mới (
|
|
24
|
-
npx antigravity-ide ten_du_an
|
|
23
|
+
# 1. Tạo dự án mới (Khuyên dùng - Luôn tải bản mới nhất)
|
|
24
|
+
npx antigravity-ide@latest ten_du_an
|
|
25
25
|
|
|
26
26
|
# 2. Cài đặt trực tiếp vào thư mục hiện tại
|
|
27
|
-
npx antigravity-ide
|
|
27
|
+
npx antigravity-ide@latest
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
> [!WARNING]
|
|
31
|
+
> **Lưu ý quan trọng:** Không nên cài đặt Global (`npm install -g antigravity-ide`) vì sẽ gây xung đột phiên bản cũ/mới. Luôn dùng `npx ...@latest` để đảm bảo project được khởi tạo với Engine mới nhất.
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- **Visual**: Giao diện Gradient 7 màu khơi gợi cảm hứng sáng tạo.
|
|
36
|
-
- **Checklist Tổng kết**: Bảng xác nhận "Xanh mướt" 100% trước khi bắt đầu.
|
|
33
|
+
### ✨ Tính năng Setup Wizard (v3.5.61)
|
|
34
|
+
Trải nghiệm dòng lệnh (CLI) đẳng cấp Premium với quy trình **4 bước cấu hình** được tối ưu hóa:
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
- **👤 Personal**: Tinh gọn (Chỉ Core Rules + Debug). Phù hợp dự án cá nhân.
|
|
40
|
-
- **🏢 SME / Start-Up**: Tiêu chuẩn (Big 5 Rules + Business Logic + Security).
|
|
41
|
-
- **🏭 Enterprise**: Full Option + Compliance + Architecture Review.
|
|
36
|
+
> **Lưu ý**: Bạn có thể nhập tên dự án ngay trong lệnh: `npx antigravity-ide@latest <tên-dự-án>`
|
|
42
37
|
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
- **
|
|
46
|
-
- *Auto-Inject*: Hệ thống tự động "cấy" thông tin này vào não bộ AI (xem `GEMINI_GUIDE.md`).
|
|
38
|
+
1. **Chọn Ngôn ngữ (Language)**:
|
|
39
|
+
- 🇻🇳 **Tiếng Việt**: Tối ưu hiển thị và tư duy ngữ nghĩa cho người Việt.
|
|
40
|
+
- 🇺🇸 **English**: Chuẩn quốc tế.
|
|
47
41
|
|
|
48
|
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
42
|
+
2. **Lựa chọn Quy mô (Scale)**:
|
|
43
|
+
- **👤 Cá nhân (Flexible)**: Tự do sáng tạo, ít ràng buộc.
|
|
44
|
+
- **👥 Team (Balanced)**: Cân bằng giữa tốc độ và kiểm soát.
|
|
45
|
+
- **🏢 Enterprise (Strict)**: Nghiêm ngặt tuyệt đối, tuân thủ Compliance.
|
|
51
46
|
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
- **🧠 Advanced (Python)**: Chuyên sâu cho AI, Data Science & Security Scanners.
|
|
47
|
+
3. **Lĩnh vực chuyên sâu (Industry)**:
|
|
48
|
+
- Tự động nạp bộ Workflows & Skills: **Tài chính, Y tế, F&B, Logistics**, v.v.
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
4. **Định danh Agent**:
|
|
51
|
+
- Đặt tên riêng cho trợ lý (ví dụ: *Jarvis, Friday*) để tạo "linh hồn" cho AI.
|
|
52
|
+
|
|
53
|
+
### 🤖 Hướng dẫn Kích hoạt (Activation Protocol)
|
|
54
|
+
Sau khi cài đặt xong, hãy "đánh thức" bộ não AI trong **IDE AI Chat** của bạn:
|
|
55
|
+
|
|
56
|
+
1. **Mở khung chat** (Cursor/Windsurf/VSCode...).
|
|
57
|
+
2. **Cấu hình**: Chọn Mode `Planing` (hoặc Normal) và Model `Gemini 2.0` (Ưu tiên) hoặc Claude 3.5.
|
|
58
|
+
3. **Gửi lệnh kích hoạt**:
|
|
59
|
+
|
|
60
|
+
> **"thức dậy đi [tên-agent]"**
|
|
61
|
+
|
|
62
|
+
*(Ví dụ: "thức dậy đi Jarvis" hoặc "wake up Jarvis")*
|
|
63
|
+
|
|
64
|
+
Ai sẽ tự động đọc file cấu hình `.agent/GEMINI.md` và tải toàn bộ kỹ năng vào bộ nhớ đệm.
|
|
58
65
|
|
|
59
66
|
---
|
|
60
67
|
|
package/cli/create.js
CHANGED
|
@@ -476,14 +476,16 @@ function printSuccessMessage(projectName, config) {
|
|
|
476
476
|
console.log(chalk.bold.cyan(config.language === 'vi' ? '🤖 Kích hoạt AI Agent' : '🤖 AI Agent Activation'));
|
|
477
477
|
console.log('');
|
|
478
478
|
|
|
479
|
+
const agentName = config.agentName || 'Agent';
|
|
480
|
+
|
|
479
481
|
if (config.language === 'vi') {
|
|
480
|
-
console.log(chalk.gray(' 1. Mở
|
|
481
|
-
console.log(chalk.gray(' 2.
|
|
482
|
-
console.log(chalk.gray(' 3. Kích hoạt: ') + chalk.green(
|
|
482
|
+
console.log(chalk.gray(' 1. Mở khung chat: ') + chalk.white('(IDE AI Chat)'));
|
|
483
|
+
console.log(chalk.gray(' 2. Cấu hình: ') + chalk.white('Conversation: ') + chalk.cyan('Planing') + chalk.gray(' • ') + chalk.white('Model: ') + chalk.cyan('Gemini'));
|
|
484
|
+
console.log(chalk.gray(' 3. Kích hoạt: ') + chalk.green(`Soạn tin: "thức dậy đi ${agentName}"`));
|
|
483
485
|
} else {
|
|
484
|
-
console.log(chalk.gray(' 1. Open
|
|
485
|
-
console.log(chalk.gray(' 2.
|
|
486
|
-
console.log(chalk.gray(' 3. Activate: ') + chalk.green(
|
|
486
|
+
console.log(chalk.gray(' 1. Open chat: ') + chalk.white('(IDE AI Chat)'));
|
|
487
|
+
console.log(chalk.gray(' 2. Configure: ') + chalk.white('Conversation: ') + chalk.cyan('Planing') + chalk.gray(' • ') + chalk.white('Model: ') + chalk.cyan('Gemini'));
|
|
488
|
+
console.log(chalk.gray(' 3. Activate: ') + chalk.green(`Type: "wake up ${agentName}"`));
|
|
487
489
|
}
|
|
488
490
|
|
|
489
491
|
// Stats Display
|
package/cli/index.js
CHANGED
|
@@ -8,79 +8,45 @@
|
|
|
8
8
|
const { program } = require('commander');
|
|
9
9
|
const { createProject } = require('./create');
|
|
10
10
|
const packageJson = require('../package.json');
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
console.log(chalk.cyan('\n🚀 Updating Global Antigravity... Please wait...'));
|
|
36
|
-
execSync('npm install -g antigravity-ide@latest', { stdio: 'inherit' });
|
|
37
|
-
console.log(chalk.green('\n✅ Verified Update! Restarting command...'));
|
|
11
|
+
const { checkAndApplyUpdates } = require('./lib/auto-update');
|
|
12
|
+
|
|
13
|
+
// Run update check before program
|
|
14
|
+
(async () => {
|
|
15
|
+
await checkAndApplyUpdates(packageJson);
|
|
16
|
+
|
|
17
|
+
program
|
|
18
|
+
.name('google-antigravity')
|
|
19
|
+
.description('Create AI Agent projects with skills, rules, and workflows')
|
|
20
|
+
.version(packageJson.version)
|
|
21
|
+
.argument('[project-name]', 'Name of the project', '.')
|
|
22
|
+
.option('-t, --template <type>', 'Project template (minimal, standard, full)', 'standard')
|
|
23
|
+
.option('-s, --skip-prompts', 'Skip interactive prompts and use defaults')
|
|
24
|
+
.action(async (projectName, options) => {
|
|
25
|
+
await createProject(projectName, options);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
program
|
|
29
|
+
.command('update')
|
|
30
|
+
.description('Update Google Antigravity to the latest version')
|
|
31
|
+
.action(() => {
|
|
32
|
+
const ora = require('ora');
|
|
33
|
+
const chalk = require('chalk');
|
|
34
|
+
const { exec } = require('child_process');
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.argument('[project-name]', 'Name of the project', '.')
|
|
57
|
-
.option('-t, --template <type>', 'Project template (minimal, standard, full)', 'standard')
|
|
58
|
-
.option('-s, --skip-prompts', 'Skip interactive prompts and use defaults')
|
|
59
|
-
.action(async (projectName, options) => {
|
|
60
|
-
await createProject(projectName, options);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
program
|
|
64
|
-
.command('update')
|
|
65
|
-
.description('Update Google Antigravity to the latest version')
|
|
66
|
-
.action(() => {
|
|
67
|
-
const ora = require('ora');
|
|
68
|
-
const chalk = require('chalk');
|
|
69
|
-
const { exec } = require('child_process');
|
|
70
|
-
|
|
71
|
-
const spinner = ora('Checking for latest version and updating...').start();
|
|
72
|
-
|
|
73
|
-
// Use npm install -g to update the package itself
|
|
74
|
-
exec('npm install -g antigravity-ide@latest', (error, stdout, stderr) => {
|
|
75
|
-
if (error) {
|
|
76
|
-
spinner.fail(`Update failed: ${error.message}`);
|
|
77
|
-
console.error(chalk.red(stderr));
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
spinner.succeed('Google Antigravity has been updated to the latest version!');
|
|
82
|
-
console.log(chalk.gray('You may also need to run "antigravity-update" to sync global skills.'));
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
program.parse(process.argv);
|
|
36
|
+
const spinner = ora('Checking for latest version and updating...').start();
|
|
37
|
+
|
|
38
|
+
// Use npm install -g to update the package itself
|
|
39
|
+
exec('npm install -g antigravity-ide@latest', (error, stdout, stderr) => {
|
|
40
|
+
if (error) {
|
|
41
|
+
spinner.fail(`Update failed: ${error.message}`);
|
|
42
|
+
console.error(chalk.red(stderr));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
spinner.succeed('Google Antigravity has been updated to the latest version!');
|
|
47
|
+
console.log(chalk.gray('You may also need to run "antigravity-update" to sync global skills.'));
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
program.parse(process.argv);
|
|
52
|
+
})();
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const updateNotifier = require('update-notifier');
|
|
2
|
+
const prompts = require('prompts');
|
|
3
|
+
const { execSync } = require('child_process');
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
|
|
6
|
+
async function checkAndApplyUpdates(packageJson, options = {}) {
|
|
7
|
+
// Allow overriding globals for testing
|
|
8
|
+
const notifierLib = options.updateNotifier || updateNotifier;
|
|
9
|
+
const promptsLib = options.prompts || prompts;
|
|
10
|
+
const execSyncLib = options.execSync || execSync;
|
|
11
|
+
const exitLib = options.exit || process.exit;
|
|
12
|
+
|
|
13
|
+
// Check for updates (Aggressive: Check every time)
|
|
14
|
+
const notifier = notifierLib({ pkg: packageJson, updateCheckInterval: 0 });
|
|
15
|
+
|
|
16
|
+
if (notifier.update) {
|
|
17
|
+
const { latest, current, type } = notifier.update;
|
|
18
|
+
console.log(chalk.yellow(`\n📦 Update available: ${current} → ${chalk.green(latest)} (${type})`));
|
|
19
|
+
|
|
20
|
+
const response = await promptsLib({
|
|
21
|
+
type: 'confirm',
|
|
22
|
+
name: 'shouldUpdate',
|
|
23
|
+
message: 'Do you want to update Google Antigravity now? / Bạn có muốn cập nhật ngay không?',
|
|
24
|
+
initial: true
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
if (response.shouldUpdate) {
|
|
28
|
+
try {
|
|
29
|
+
console.log(chalk.cyan('\n🚀 Updating Global Antigravity... Please wait...'));
|
|
30
|
+
execSyncLib('npm install -g antigravity-ide@latest', { stdio: 'inherit' });
|
|
31
|
+
console.log(chalk.green('\n✅ Verified Update! Restarting command...'));
|
|
32
|
+
exitLib(0);
|
|
33
|
+
} catch (error) {
|
|
34
|
+
console.error(chalk.red('\n❌ Update failed. Please run: npm install -g antigravity-ide@latest'));
|
|
35
|
+
console.error(error.message);
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
console.log(chalk.gray('\nℹ️ Skipping update. You can update later using: npx antigravity-ide update'));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
module.exports = { checkAndApplyUpdates };
|
package/cli/prompts.js
CHANGED
|
@@ -65,10 +65,10 @@ const skillCategories = {
|
|
|
65
65
|
skills: [
|
|
66
66
|
'ai-engineer',
|
|
67
67
|
'geo-fundamentals',
|
|
68
|
-
'prompt-engineer'
|
|
68
|
+
'prompt-engineer'
|
|
69
69
|
]
|
|
70
70
|
},
|
|
71
|
-
growth: {
|
|
71
|
+
growth: {
|
|
72
72
|
name: 'Growth & Data',
|
|
73
73
|
skills: [
|
|
74
74
|
'cro-expert-kit',
|
|
@@ -102,12 +102,23 @@ async function getProjectConfig(skipPrompts = false, predefinedName = null) {
|
|
|
102
102
|
|
|
103
103
|
/*
|
|
104
104
|
PHASE 1: BASIC INFORMATION
|
|
105
|
+
Order: Language -> Name -> Scale -> Industry -> Agent Name
|
|
105
106
|
*/
|
|
106
|
-
const
|
|
107
|
+
const responses = await prompts([
|
|
108
|
+
{
|
|
109
|
+
type: 'select',
|
|
110
|
+
name: 'language',
|
|
111
|
+
message: 'Select Language / Chọn ngôn ngữ:',
|
|
112
|
+
choices: [
|
|
113
|
+
{ title: '1. English', value: 'en' },
|
|
114
|
+
{ title: '2. Tiếng Việt', value: 'vi' }
|
|
115
|
+
],
|
|
116
|
+
initial: 1
|
|
117
|
+
},
|
|
107
118
|
{
|
|
108
119
|
type: predefinedName ? null : 'text',
|
|
109
120
|
name: 'projectName',
|
|
110
|
-
message: 'Project name:',
|
|
121
|
+
message: (prev, values) => values.language === 'vi' ? 'Tên dự án (Project name):' : 'Project name:',
|
|
111
122
|
initial: 'my-agent-project',
|
|
112
123
|
validate: (value) => {
|
|
113
124
|
if (!/^[a-z0-9-_]+$/.test(value)) {
|
|
@@ -118,37 +129,23 @@ async function getProjectConfig(skipPrompts = false, predefinedName = null) {
|
|
|
118
129
|
},
|
|
119
130
|
{
|
|
120
131
|
type: 'select',
|
|
121
|
-
name: '
|
|
122
|
-
message: '
|
|
123
|
-
choices: [
|
|
124
|
-
{ title: '1. en', value: 'en' },
|
|
125
|
-
{ title: '2. vi', value: 'vi' }
|
|
126
|
-
],
|
|
127
|
-
initial: 0
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
type: 'select',
|
|
131
|
-
name: 'engineMode',
|
|
132
|
-
message: (prev, values) => values.language === 'vi' ? 'Chọn Loại Động cơ Agent (Engine):' : 'Select Agent Engine:',
|
|
132
|
+
name: 'scale', // Maps to 'rules'
|
|
133
|
+
message: (prev, values) => values.language === 'vi' ? 'Quy mô dự án:' : 'Project Scale:',
|
|
133
134
|
choices: (prev, values) => values.language === 'vi' ? [
|
|
134
|
-
{ title: '
|
|
135
|
-
{ title: '
|
|
135
|
+
{ title: '👤 Cá nhân (Personal) - Cơ chế linh hoạt, tự chủ', value: 'flexible' },
|
|
136
|
+
{ title: '👥 Team (Nhóm) - Cân bằng, hỏi trước khi sửa file', value: 'balanced' },
|
|
137
|
+
{ title: '🏢 Doanh nghiệp (Enterprise) - Nghiêm ngặt, kiểm soát 100%', value: 'strict' }
|
|
136
138
|
] : [
|
|
137
|
-
{ title: '
|
|
138
|
-
{ title: '
|
|
139
|
+
{ title: '👤 Personal - Flexible, High Autonomy', value: 'flexible' },
|
|
140
|
+
{ title: '👥 Team - Balanced, Confirm core changes', value: 'balanced' },
|
|
141
|
+
{ title: '🏢 Enterprise - Strict, 100% Control', value: 'strict' }
|
|
139
142
|
],
|
|
140
143
|
initial: 0
|
|
141
144
|
},
|
|
142
|
-
{
|
|
143
|
-
type: 'text',
|
|
144
|
-
name: 'agentName',
|
|
145
|
-
message: (prev, values) => values.language === 'vi' ? 'Đặt tên định danh cho AI Agent của sếp (Ví dụ: Jarvis, Antigravity):' : 'Choose a name for your AI Agent (e.g., Jarvis, Antigravity):',
|
|
146
|
-
validate: (value) => value.length < 2 ? (process.env.LANG?.includes('vi') ? 'Tên Agent phải có ít nhất 2 ký tự' : 'Name must be at least 2 characters long') : true
|
|
147
|
-
},
|
|
148
145
|
{
|
|
149
146
|
type: 'select',
|
|
150
147
|
name: 'industryDomain',
|
|
151
|
-
message: (prev, values) => values.language === 'vi' ? '
|
|
148
|
+
message: (prev, values) => values.language === 'vi' ? 'Lĩnh vực dự án (Industry):' : 'Select Industry Domain:',
|
|
152
149
|
choices: (prev, values) => values.language === 'vi' ? [
|
|
153
150
|
{ title: '💰 Finance (Tài chính - Fintech)', value: 'finance' },
|
|
154
151
|
{ title: '🎓 Education (Giáo dục - EdTech)', value: 'education' },
|
|
@@ -167,6 +164,12 @@ async function getProjectConfig(skipPrompts = false, predefinedName = null) {
|
|
|
167
164
|
{ title: '🔮 Other (General Web/App)', value: 'other' }
|
|
168
165
|
],
|
|
169
166
|
initial: 6
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
type: 'text',
|
|
170
|
+
name: 'agentName',
|
|
171
|
+
message: (prev, values) => values.language === 'vi' ? 'Đặt tên cho Agent (VD: Jarvis, Friday):' : 'Name your Agent (e.g., Jarvis, Friday):',
|
|
172
|
+
validate: (value) => value.length < 2 ? (process.env.LANG?.includes('vi') ? 'Tên Agent phải có ít nhất 2 ký tự' : 'Name must be at least 2 characters long') : true
|
|
170
173
|
}
|
|
171
174
|
], {
|
|
172
175
|
onCancel: () => {
|
|
@@ -175,87 +178,88 @@ async function getProjectConfig(skipPrompts = false, predefinedName = null) {
|
|
|
175
178
|
}
|
|
176
179
|
});
|
|
177
180
|
|
|
178
|
-
//
|
|
181
|
+
// Inject predefined name if it exists (so logic downstream works)
|
|
179
182
|
if (predefinedName) {
|
|
180
|
-
|
|
183
|
+
responses.projectName = predefinedName;
|
|
181
184
|
}
|
|
182
185
|
|
|
183
186
|
// PRESETS CONFIGURATION
|
|
184
|
-
|
|
185
|
-
// PER-INDUSTRY WORKFLOW MAPPING
|
|
186
|
-
// This ensures users get the right "Tools" for their "Job"
|
|
187
|
-
const baseWorkflows = ['git', 'plan', 'status']; // Core workflows for everyone
|
|
187
|
+
const baseWorkflows = ['git', 'plan', 'status'];
|
|
188
188
|
|
|
189
189
|
const industryWorkflows = {
|
|
190
|
-
finance: ['security', 'audit', 'test'],
|
|
191
|
-
education: ['explain', 'visually', 'test'],
|
|
192
|
-
fnb: ['performance', 'mobile', 'deploy'],
|
|
193
|
-
personal: ['blog', 'portfolio', 'seo'],
|
|
194
|
-
healthcare: ['compliance', 'security', 'audit'],
|
|
195
|
-
logistics: ['api', 'realtime', 'deploy'],
|
|
196
|
-
other: ['create', 'debug', 'enhance']
|
|
190
|
+
finance: ['security', 'audit', 'test'],
|
|
191
|
+
education: ['explain', 'visually', 'test'],
|
|
192
|
+
fnb: ['performance', 'mobile', 'deploy'],
|
|
193
|
+
personal: ['blog', 'portfolio', 'seo'],
|
|
194
|
+
healthcare: ['compliance', 'security', 'audit'],
|
|
195
|
+
logistics: ['api', 'realtime', 'deploy'],
|
|
196
|
+
other: ['create', 'debug', 'enhance']
|
|
197
197
|
};
|
|
198
198
|
|
|
199
|
-
//
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
//
|
|
205
|
-
|
|
199
|
+
// Determine Engine Mode and Workflows based on Scale
|
|
200
|
+
let engineMode = 'standard';
|
|
201
|
+
let selectedSkillCategories = [];
|
|
202
|
+
let scaleBasedWorkflows = [];
|
|
203
|
+
|
|
204
|
+
// SCALE LOGIC
|
|
205
|
+
if (responses.scale === 'flexible') {
|
|
206
|
+
// PERSONAL: JS only, Minimal
|
|
207
|
+
engineMode = 'standard';
|
|
208
|
+
selectedSkillCategories = ['webdev', 'ai'];
|
|
209
|
+
scaleBasedWorkflows = ['plan', 'debug', 'enhance'];
|
|
210
|
+
} else if (responses.scale === 'balanced') {
|
|
211
|
+
// TEAM: JS + Python, Hybrid
|
|
212
|
+
engineMode = 'advanced';
|
|
213
|
+
selectedSkillCategories = ['webdev', 'mobile', 'ai', 'growth', 'devops'];
|
|
214
|
+
scaleBasedWorkflows = ['plan', 'status', 'debug', 'enhance', 'test', 'document', 'onboard'];
|
|
215
|
+
} else {
|
|
216
|
+
// ENTERPRISE: Full Power
|
|
217
|
+
engineMode = 'advanced';
|
|
218
|
+
selectedSkillCategories = Object.keys(skillCategories);
|
|
219
|
+
scaleBasedWorkflows = ['plan', 'status', 'debug', 'enhance', 'test', 'document', 'onboard', 'security', 'audit', 'monitor', 'orchestrate', 'deploy'];
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const specificWorkflows = industryWorkflows[responses.industryDomain] || ['create', 'debug', 'enhance'];
|
|
223
|
+
const finalWorkflows = new Set(scaleBasedWorkflows);
|
|
224
|
+
|
|
225
|
+
// Add industry-specific workflows
|
|
226
|
+
// Filter to ensure we only include workflows that actually exist in the whitelist
|
|
206
227
|
const availableWorkflows = [
|
|
207
228
|
'audit', 'brainstorm', 'create', 'debug', 'deploy', 'document', 'enhance',
|
|
208
229
|
'monitor', 'onboard', 'orchestrate', 'plan', 'preview', 'security', 'seo',
|
|
209
|
-
'status', 'test', 'ui-ux-pro-max'
|
|
230
|
+
'status', 'test', 'ui-ux-pro-max',
|
|
231
|
+
'explain', 'visually', 'mobile', 'performance', 'compliance', 'api', 'realtime', 'blog', 'portfolio'
|
|
210
232
|
];
|
|
211
233
|
|
|
212
|
-
/*
|
|
213
|
-
Smart Logic:
|
|
214
|
-
- Always include: git (internal), plan, status, debug, enhance
|
|
215
|
-
- Add Industry-specific workflows (specificWorkflows)
|
|
216
|
-
- Add Skill-based workflows
|
|
217
|
-
*/
|
|
218
|
-
|
|
219
|
-
const finalWorkflows = new Set(['plan', 'status', 'brainstorm', 'debug', 'enhance']);
|
|
220
|
-
|
|
221
|
-
// Add industry-specific workflows
|
|
222
234
|
if (specificWorkflows && Array.isArray(specificWorkflows)) {
|
|
223
235
|
specificWorkflows.forEach(w => {
|
|
224
|
-
// Only add if it's a valid workflow (exists in availableWorkflows)
|
|
225
236
|
if (availableWorkflows.includes(w)) {
|
|
226
237
|
finalWorkflows.add(w);
|
|
227
238
|
}
|
|
228
239
|
});
|
|
229
240
|
}
|
|
230
241
|
|
|
231
|
-
//
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
if (basics.industryDomain === 'personal' || basics.industryDomain === 'fnb') {
|
|
242
|
+
// Implicit industry workflows
|
|
243
|
+
if (responses.industryDomain === 'personal' || responses.industryDomain === 'fnb') {
|
|
235
244
|
finalWorkflows.add('ui-ux-pro-max');
|
|
236
245
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
finalWorkflows.add('orchestrate'); // For complex logic
|
|
246
|
+
if (responses.industryDomain === 'finance' || responses.industryDomain === 'healthcare') {
|
|
247
|
+
finalWorkflows.add('orchestrate');
|
|
240
248
|
}
|
|
241
|
-
|
|
242
|
-
if (basics.industryDomain === 'logistics' || basics.industryDomain === 'other') {
|
|
249
|
+
if (responses.industryDomain === 'logistics' || responses.industryDomain === 'other') {
|
|
243
250
|
finalWorkflows.add('create');
|
|
244
251
|
}
|
|
245
252
|
|
|
246
253
|
const settings = {
|
|
247
254
|
template: 'standard',
|
|
248
|
-
rules:
|
|
255
|
+
rules: responses.scale,
|
|
249
256
|
workflows: Array.from(finalWorkflows),
|
|
250
|
-
packageManager: 'npm'
|
|
257
|
+
packageManager: 'npm',
|
|
258
|
+
engineMode: engineMode
|
|
251
259
|
};
|
|
252
260
|
|
|
253
261
|
// Return configuration with presets
|
|
254
|
-
return { ...
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
262
|
+
return { ...responses, ...settings, skillCategories: selectedSkillCategories };
|
|
259
263
|
}
|
|
260
264
|
|
|
261
265
|
function getSkillsForCategories(categories) {
|