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 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 (Khuyến nghị)
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
- ### ✨ Tính năng Setup Wizard (v3.5.54)
31
- Trải nghiệm dòng lệnh (CLI) đẳng cấp Premium:
30
+ > [!WARNING]
31
+ > **Lưu ý quan trọng:** Không nên cài đặt Global (`npm install -g antigravity-ide`) 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
- 1. **Tương tác & Mãn nhãn**:
34
- - **Arrow Keys**: Điều hướng menu bằng phím mũi tên (Không cần phím thủ công).
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
- 2. **Lựa chọn Quy Dự án (Project Scale)**:
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 thể nhập tên dự án ngay trong lệnh: `npx antigravity-ide@latest <tên-dự-án>`
42
37
 
43
- 3. **Thông tin Ngữ cảnh (Context Injection)**:
44
- - **Đặt tên Agent**: Gọi tên trợ thân thương (ví dụ: *Jarvis*).
45
- - **Lĩnh vực hoạt động**: Tối ưu luật cho **Tài chính, Y tế, Logistics**, v.v.
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ị duy ngữ nghĩa cho người Việt.
40
+ - 🇺🇸 **English**: Chuẩn quốc tế.
47
41
 
48
- 4. **Chiến lược Trung ương & Địa phương**:
49
- - **Global (`~/.antigravity`)**: Chứa Bộ luật gốc (Luôn Enterprise).
50
- - **Workspace (`.agent`)**: Chỉ load những tài nguyên "đủ dùng" cho dự án để tiết kiệm Token.
42
+ 2. **Lựa chọn Quy (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 độ kiểm soát.
45
+ - **🏢 Enterprise (Strict)**: Nghiêm ngặt tuyệt đối, tuân thủ Compliance.
51
46
 
52
- ### Chế độ Động (Engine Modes)
53
- - **⚡ Standard (Node.js)**: Tốc độ cao, gọn nhẹ, phù hợp dự án Web/SaaS.
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
- ### Định danh & Chống rớt não (Identity Awareness)
57
- Dự án hỗ trợ đặt tên riêng cho Agent (ví dụ: *Jarvis*). Đây "mỏ neo" danh tính giúp kiểm tra AI có đang tuân thủ đúng luồng quy tắc hay không.
50
+ 4. **Định danh Agent**:
51
+ - Đặt tên riêng cho trợ (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ở dự án: ') + chalk.white(`cd ${projectName}`));
481
- console.log(chalk.gray(' 2. Mở khung chat: ') + chalk.white('(Claude, Gemini, v.v...)'));
482
- console.log(chalk.gray(' 3. Kích hoạt: ') + chalk.green('Đọc nội dung .agent/GEMINI.md'));
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 project: ') + chalk.white(`cd ${projectName}`));
485
- console.log(chalk.gray(' 2. Open AI chat: ') + chalk.white('(Claude, Gemini, etc.)'));
486
- console.log(chalk.gray(' 3. Activate: ') + chalk.green('Read .agent/START_HERE.md'));
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 updateNotifier = require('update-notifier');
12
-
13
- // Check for updates
14
- const prompts = require('prompts');
15
- const { execSync } = require('child_process');
16
- const chalk = require('chalk');
17
-
18
- // Check for updates (Aggressive: Check every time)
19
- const notifier = updateNotifier({ pkg: packageJson, updateCheckInterval: 0 });
20
-
21
- if (notifier.update) {
22
- const { latest, current, type } = notifier.update;
23
- console.log(chalk.yellow(`\n📦 Update available: ${current} ${chalk.green(latest)} (${type})`));
24
-
25
- (async () => {
26
- const response = await prompts({
27
- type: 'confirm',
28
- name: 'shouldUpdate',
29
- message: 'Do you want to update Google Antigravity now? / Bạn có muốn cập nhật ngay không?',
30
- initial: true
31
- });
32
-
33
- if (response.shouldUpdate) {
34
- try {
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
- // Spawn the original command again with new version
40
- // execSync(`${process.argv0} ${process.argv.slice(1).join(' ')}`, { stdio: 'inherit' });
41
- process.exit(0);
42
- } catch (error) {
43
- console.error(chalk.red('\n❌ Update failed. Please run: npm install -g antigravity-ide@latest'));
44
- console.error(error.message);
45
- }
46
- } else {
47
- console.log(chalk.gray('\nℹ️ Skipping update. You can update later using: npx antigravity-ide update'));
48
- }
49
- })();
50
- }
51
-
52
- program
53
- .name('google-antigravity')
54
- .description('Create AI Agent projects with skills, rules, and workflows')
55
- .version(packageJson.version)
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' // Assuming this exists or will be mapped to ai-engineer capabilities
68
+ 'prompt-engineer'
69
69
  ]
70
70
  },
71
- growth: { // Renamed from data for better fit
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 basics = await prompts([
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: 'language',
122
- message: 'Select Language (en/vi):',
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: ' Standard (Node.js) - Tốc độ cao, gọn nhẹ, không cần cấu hình', value: 'standard' },
135
- { title: '🧠 Advanced (Python) - Tối ưu lập trình AI chuyên sâu & Khoa học dữ liệu', value: 'advanced' },
135
+ { title: '👤 nhân (Personal) - 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: ' Standard (Node.js) - Fast, Lightweight, Zero-Config', value: 'standard' },
138
- { title: '🧠 Advanced (Python) - Deep AI, Data Science support', value: 'advanced' },
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' ? 'Chọn Lĩnh vực dự án (Industry):' : 'Select Industry Domain:',
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
- // If predefinedName was used, inject it back into basics if it wasn't prompted
181
+ // Inject predefined name if it exists (so logic downstream works)
179
182
  if (predefinedName) {
180
- basics.projectName = predefinedName;
183
+ responses.projectName = predefinedName;
181
184
  }
182
185
 
183
186
  // PRESETS CONFIGURATION
184
- // All selections now use preset values with full skills
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'], // Finance needs security & audit
191
- education: ['explain', 'visually', 'test'], // Education needs clarity
192
- fnb: ['performance', 'mobile', 'deploy'], // F&B needs speed & mobile
193
- personal: ['blog', 'portfolio', 'seo'], // Personal needs SEO & content
194
- healthcare: ['compliance', 'security', 'audit'], // Healthcare needs compliance
195
- logistics: ['api', 'realtime', 'deploy'], // Logistics needs API & realtime
196
- other: ['create', 'debug', 'enhance'] // General needs basic dev cycle
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
- // Map industry selection to specific workflow files
200
- // Note: These map to .md files in .agent/workflows/
201
- // We use a safe fallback if specific industry workflows aren't fully modularized yet
202
- const specificWorkflows = industryWorkflows[basics.industryDomain] || ['create', 'debug', 'enhance'];
203
-
204
- // Combine all valid workflows
205
- // Filter to ensure we only include workflows that actually exist in our system
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
- // Logic based on Skill Categories (users selected implicitly or explicitly)
232
- // Since we load ALL skills by default for industry presets, we infer based on Industry
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
- if (basics.industryDomain === 'finance' || basics.industryDomain === 'healthcare') {
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: 'balanced',
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 { ...basics, ...settings, skillCategories: Object.keys(skillCategories) };
255
-
256
-
257
-
258
-
262
+ return { ...responses, ...settings, skillCategories: selectedSkillCategories };
259
263
  }
260
264
 
261
265
  function getSkillsForCategories(categories) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antigravity-ide",
3
- "version": "3.5.61",
3
+ "version": "3.5.63",
4
4
  "description": "The Ultimate AI Agent Brain - Rules, Skills, and Workflows",
5
5
  "main": "cli/index.js",
6
6
  "bin": {