antigravity-ide 3.5.2 → 3.5.4
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/cli/prompts.js +116 -46
- package/package.json +1 -1
package/cli/prompts.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
const prompts = require('prompts');
|
|
6
6
|
const chalk = require('chalk');
|
|
7
7
|
const gradient = require('gradient-string');
|
|
8
|
+
const packageJson = require('../package.json');
|
|
8
9
|
|
|
9
10
|
// Display concise banner with gradient
|
|
10
11
|
function displayBanner() {
|
|
@@ -17,7 +18,7 @@ function displayBanner() {
|
|
|
17
18
|
console.log(gradient.pastel.multiline(' / ___ |/ / / / /_/ / /_/ / / / /_/ /| |/ / / /_/ /_/ / '));
|
|
18
19
|
console.log(gradient.pastel.multiline('/_/ |_/_/ /_/\\__/_/\\____/_/ \\__,_/ |___/_/\\__/\\__, / '));
|
|
19
20
|
console.log(gradient.pastel.multiline(' /____/ '));
|
|
20
|
-
console.log(chalk.gray(
|
|
21
|
+
console.log(chalk.gray(` Google Antigravity • v${packageJson.version}`));
|
|
21
22
|
console.log(chalk.gray(' Developed with 💡 by Dokhacgiakhoa'));
|
|
22
23
|
console.log(gradient.rainbow('━'.repeat(60)));
|
|
23
24
|
console.log('');
|
|
@@ -25,64 +26,55 @@ function displayBanner() {
|
|
|
25
26
|
|
|
26
27
|
const skillCategories = {
|
|
27
28
|
webdev: {
|
|
28
|
-
name: 'Web
|
|
29
|
+
name: 'Web High-Performance',
|
|
29
30
|
skills: [
|
|
30
|
-
'
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'
|
|
34
|
-
'frontend-design',
|
|
35
|
-
'backend-patterns'
|
|
31
|
+
'modern-web-architect',
|
|
32
|
+
'full-stack-scaffold',
|
|
33
|
+
'api-documenter',
|
|
34
|
+
'i18n-localization'
|
|
36
35
|
]
|
|
37
36
|
},
|
|
38
37
|
mobile: {
|
|
39
|
-
name: 'Mobile
|
|
38
|
+
name: 'Mobile & Game',
|
|
40
39
|
skills: [
|
|
41
|
-
'react-native-architecture',
|
|
42
|
-
'flutter-expert',
|
|
43
40
|
'mobile-design',
|
|
44
|
-
'
|
|
45
|
-
'
|
|
41
|
+
'game-development',
|
|
42
|
+
'i18n-localization'
|
|
46
43
|
]
|
|
47
44
|
},
|
|
48
45
|
devops: {
|
|
49
46
|
name: 'DevOps & Cloud',
|
|
50
47
|
skills: [
|
|
51
|
-
'
|
|
52
|
-
'
|
|
53
|
-
'
|
|
54
|
-
'
|
|
55
|
-
'deployment-engineer'
|
|
48
|
+
'cloud-architect-master',
|
|
49
|
+
'deployment-engineer',
|
|
50
|
+
'incident-responder',
|
|
51
|
+
'mcp-builder'
|
|
56
52
|
]
|
|
57
53
|
},
|
|
58
54
|
security: {
|
|
59
|
-
name: 'Security &
|
|
55
|
+
name: 'Security & Audit',
|
|
60
56
|
skills: [
|
|
61
57
|
'security-auditor',
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
'vulnerability-scanner'
|
|
65
|
-
'penetration-testing'
|
|
58
|
+
'penetration-tester-master',
|
|
59
|
+
'production-code-audit',
|
|
60
|
+
'vulnerability-scanner'
|
|
66
61
|
]
|
|
67
62
|
},
|
|
68
63
|
ai: {
|
|
69
64
|
name: 'AI & ML',
|
|
70
65
|
skills: [
|
|
71
66
|
'ai-engineer',
|
|
72
|
-
'
|
|
73
|
-
'prompt-engineer'
|
|
74
|
-
'rag-engineer',
|
|
75
|
-
'llm-app-patterns'
|
|
67
|
+
'geo-fundamentals',
|
|
68
|
+
'prompt-engineer' // Assuming this exists or will be mapped to ai-engineer capabilities
|
|
76
69
|
]
|
|
77
70
|
},
|
|
78
|
-
|
|
79
|
-
name: 'Data
|
|
71
|
+
growth: { // Renamed from data for better fit
|
|
72
|
+
name: 'Growth & Data',
|
|
80
73
|
skills: [
|
|
81
|
-
'
|
|
82
|
-
'
|
|
83
|
-
'database-
|
|
84
|
-
'
|
|
85
|
-
'spark-optimization'
|
|
74
|
+
'cro-expert-kit',
|
|
75
|
+
'seo-expert-kit',
|
|
76
|
+
'database-migration',
|
|
77
|
+
'performance-engineer'
|
|
86
78
|
]
|
|
87
79
|
}
|
|
88
80
|
};
|
|
@@ -107,7 +99,10 @@ async function getProjectConfig(skipPrompts = false) {
|
|
|
107
99
|
console.log(chalk.bold.cyan('🚀 Project Setup Wizard\n'));
|
|
108
100
|
console.log(chalk.gray('Answer a few questions to configure your AI Agent project...\n'));
|
|
109
101
|
|
|
110
|
-
|
|
102
|
+
/*
|
|
103
|
+
PHASE 1: BASIC INFORMATION
|
|
104
|
+
*/
|
|
105
|
+
const basics = await prompts([
|
|
111
106
|
{
|
|
112
107
|
type: 'text',
|
|
113
108
|
name: 'projectName',
|
|
@@ -132,9 +127,85 @@ async function getProjectConfig(skipPrompts = false) {
|
|
|
132
127
|
},
|
|
133
128
|
{
|
|
134
129
|
type: 'select',
|
|
135
|
-
name: '
|
|
136
|
-
message: (prev, values) => values.language === 'vi' ? 'Chọn
|
|
130
|
+
name: 'engineMode',
|
|
131
|
+
message: (prev, values) => values.language === 'vi' ? 'Chọn Agent Engine:' : 'Select Agent Engine:',
|
|
137
132
|
choices: (prev, values) => values.language === 'vi' ? [
|
|
133
|
+
{ title: '⚡ Standard (Node.js) - Nhanh, nhẹ, không cấu hình', value: 'standard' },
|
|
134
|
+
{ title: '🧠 Advanced (Python) - Hỗ trợ AI sâu, Khoa học dữ liệu', value: 'advanced' },
|
|
135
|
+
] : [
|
|
136
|
+
{ title: '⚡ Standard (Node.js) - Fast, Lightweight, Zero-Config', value: 'standard' },
|
|
137
|
+
{ title: '🧠 Advanced (Python) - Deep AI, Data Science support', value: 'advanced' },
|
|
138
|
+
],
|
|
139
|
+
initial: 0
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'select',
|
|
143
|
+
name: 'industryDomain',
|
|
144
|
+
message: (prev, values) => values.language === 'vi' ? 'Chọn Lĩnh vực dự án (Industry):' : 'Select Industry Domain:',
|
|
145
|
+
choices: (prev, values) => values.language === 'vi' ? [
|
|
146
|
+
{ title: '💰 Finance (Tài chính - Fintech)', value: 'finance' },
|
|
147
|
+
{ title: '🎓 Education (Giáo dục - EdTech)', value: 'education' },
|
|
148
|
+
{ title: '🍔 F&B / Restaurant (Nhà hàng)', value: 'fnb' },
|
|
149
|
+
{ title: '👤 Personal / Portfolio (Cá nhân)', value: 'personal' },
|
|
150
|
+
{ title: '🏥 Healthcare (Y tế - HealthTech)', value: 'healthcare' },
|
|
151
|
+
{ title: '🚚 Logistics (Vận tải)', value: 'logistics' },
|
|
152
|
+
{ title: '🔮 Other (Khác - Web/App cơ bản)', value: 'other' },
|
|
153
|
+
{ title: '🔧 Custom (Tùy chỉnh)', value: 'custom' }
|
|
154
|
+
] : [
|
|
155
|
+
{ title: '💰 Finance (Fintech)', value: 'finance' },
|
|
156
|
+
{ title: '🎓 Education (EdTech)', value: 'education' },
|
|
157
|
+
{ title: '🍔 F&B / Restaurant', value: 'fnb' },
|
|
158
|
+
{ title: '👤 Personal / Portfolio', value: 'personal' },
|
|
159
|
+
{ title: '🏥 Healthcare (HealthTech)', value: 'healthcare' },
|
|
160
|
+
{ title: '🚚 Logistics', value: 'logistics' },
|
|
161
|
+
{ title: '🔮 Other (General Web/App)', value: 'other' },
|
|
162
|
+
{ title: '🔧 Custom (Advanced)', value: 'custom' }
|
|
163
|
+
],
|
|
164
|
+
initial: 6
|
|
165
|
+
}
|
|
166
|
+
], {
|
|
167
|
+
onCancel: () => {
|
|
168
|
+
console.log(chalk.red('\n✖ Operation cancelled'));
|
|
169
|
+
process.exit(0);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// PRESETS CONFIGURATION
|
|
174
|
+
// If not custom, return immediately with preset values
|
|
175
|
+
if (basics.industryDomain !== 'custom') {
|
|
176
|
+
const commonWorkflows = ['git'];
|
|
177
|
+
const commonRules = 'balanced';
|
|
178
|
+
const settings = {
|
|
179
|
+
template: 'standard',
|
|
180
|
+
rules: commonRules,
|
|
181
|
+
workflows: commonWorkflows,
|
|
182
|
+
packageManager: 'npm'
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const presets = {
|
|
186
|
+
finance: { ...settings, skillCategories: ['security', 'growth', 'ai'] },
|
|
187
|
+
education: { ...settings, skillCategories: ['webdev', 'mobile', 'ai'] },
|
|
188
|
+
fnb: { ...settings, skillCategories: ['webdev', 'mobile', 'growth'] },
|
|
189
|
+
personal: { ...settings, skillCategories: ['webdev', 'growth'] },
|
|
190
|
+
healthcare: { ...settings, skillCategories: ['security', 'mobile', 'ai'] },
|
|
191
|
+
logistics: { ...settings, skillCategories: ['devops', 'mobile', 'ai'] },
|
|
192
|
+
other: { ...settings, skillCategories: ['webdev', 'ai'] }
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
return { ...basics, ...presets[basics.industryDomain] };
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/*
|
|
199
|
+
PHASE 2: ADVANCED CONFIGURATION (Only if industryDomain === 'custom')
|
|
200
|
+
*/
|
|
201
|
+
console.log(chalk.yellow(basics.language === 'vi' ? '\n🔧 Cấu hình nâng cao:' : '\n🔧 Advanced Configuration:'));
|
|
202
|
+
|
|
203
|
+
const advanced = await prompts([
|
|
204
|
+
{
|
|
205
|
+
type: 'select',
|
|
206
|
+
name: 'template',
|
|
207
|
+
message: basics.language === 'vi' ? 'Chọn mẫu dự án:' : 'Choose project template:',
|
|
208
|
+
choices: basics.language === 'vi' ? [
|
|
138
209
|
{ title: '1. Tối giản - Chỉ cấu trúc .agent cơ bản', value: 'minimal' },
|
|
139
210
|
{ title: '2. Tiêu chuẩn - .agent + các skill được chọn (Khuyên dùng)', value: 'standard' },
|
|
140
211
|
{ title: '3. Đầy đủ - Tất cả mọi thứ (full skills, lab, test suite)', value: 'full' }
|
|
@@ -148,8 +219,8 @@ async function getProjectConfig(skipPrompts = false) {
|
|
|
148
219
|
{
|
|
149
220
|
type: 'select',
|
|
150
221
|
name: 'rules',
|
|
151
|
-
message:
|
|
152
|
-
choices:
|
|
222
|
+
message: basics.language === 'vi' ? 'Quy tắc hành vi Agent:' : 'Agent behavior rules:',
|
|
223
|
+
choices: basics.language === 'vi' ? [
|
|
153
224
|
{ title: '1. Nghiêm ngặt - An toàn tối đa, luôn hỏi trước khi làm', value: 'strict' },
|
|
154
225
|
{ title: '2. Cân bằng - Tự chủ vừa phải, an toàn (Khuyên dùng)', value: 'balanced' },
|
|
155
226
|
{ title: '3. Linh hoạt - Tự chủ cao, ít hạn chế', value: 'flexible' }
|
|
@@ -163,7 +234,7 @@ async function getProjectConfig(skipPrompts = false) {
|
|
|
163
234
|
{
|
|
164
235
|
type: (prev, values) => values.template !== 'minimal' ? 'multiselect' : null,
|
|
165
236
|
name: 'skillCategories',
|
|
166
|
-
message:
|
|
237
|
+
message: basics.language === 'vi' ? 'Chọn nhóm kỹ năng:' : 'Select skill categories to include:',
|
|
167
238
|
choices: Object.entries(skillCategories).map(([key, { name }]) => ({
|
|
168
239
|
title: name,
|
|
169
240
|
value: key,
|
|
@@ -174,8 +245,8 @@ async function getProjectConfig(skipPrompts = false) {
|
|
|
174
245
|
{
|
|
175
246
|
type: 'multiselect',
|
|
176
247
|
name: 'workflows',
|
|
177
|
-
message:
|
|
178
|
-
choices:
|
|
248
|
+
message: basics.language === 'vi' ? 'Chọn quy trình làm việc (Workflows):' : 'Select workflows to include:',
|
|
249
|
+
choices: basics.language === 'vi' ? [
|
|
179
250
|
{ title: 'Git Workflows - Quản lý nhánh, commit, PR', value: 'git', selected: true },
|
|
180
251
|
{ title: 'Testing - TDD, unit tests, E2E tests', value: 'testing', selected: true },
|
|
181
252
|
{ title: 'Deployment - CI/CD, quy trình production', value: 'deployment', selected: false },
|
|
@@ -188,11 +259,10 @@ async function getProjectConfig(skipPrompts = false) {
|
|
|
188
259
|
],
|
|
189
260
|
hint: 'Space to select, Enter to confirm'
|
|
190
261
|
},
|
|
191
|
-
|
|
192
262
|
{
|
|
193
263
|
type: 'select',
|
|
194
264
|
name: 'packageManager',
|
|
195
|
-
message:
|
|
265
|
+
message: basics.language === 'vi' ? 'Trình quản lý gói (Package Manager):' : 'Package manager:',
|
|
196
266
|
choices: [
|
|
197
267
|
{ title: '1. npm', value: 'npm' },
|
|
198
268
|
{ title: '2. pnpm', value: 'pnpm' },
|
|
@@ -206,8 +276,8 @@ async function getProjectConfig(skipPrompts = false) {
|
|
|
206
276
|
process.exit(0);
|
|
207
277
|
}
|
|
208
278
|
});
|
|
209
|
-
|
|
210
|
-
return
|
|
279
|
+
|
|
280
|
+
return { ...basics, ...advanced };
|
|
211
281
|
}
|
|
212
282
|
|
|
213
283
|
function getSkillsForCategories(categories) {
|