@mrtrinhvn/ag-kit 1.4.1 → 1.4.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/bin/cli.js CHANGED
@@ -32,16 +32,44 @@ program
32
32
 
33
33
  program.command('init')
34
34
  .description('Cấy ghép Lõi Trí Nhớ (.agent) vào dự án này')
35
- .action(() => {
35
+ .action(async () => {
36
36
  console.log('\x1b[36m🚀 Đang khởi tạo bộ Tủy Não Lập Trình AI (AG-Kit)...\x1b[0m');
37
37
 
38
38
  const srcAgent = path.join(TEMPLATE_DIR, '.agent');
39
39
  if (!fs.existsSync(TARGET_AGENT_DIR)) {
40
40
  copyRecursiveSync(srcAgent, TARGET_AGENT_DIR);
41
41
  fs.writeFileSync(path.join(TARGET_AGENT_DIR, '.version'), pkg.version);
42
- console.log(`\x1b[32m✅ Đã cấy ghép thành công thư mục .agent (v${pkg.version}) vào Project!\x1b[0m`);
42
+
43
+ ['scripts', 'start.sh', 'stop_bot.sh', '.gitignore'].forEach(item => {
44
+ const srcPath = path.join(TEMPLATE_DIR, item);
45
+ const destPath = path.join(process.cwd(), item);
46
+ if (fs.existsSync(srcPath) && !fs.existsSync(destPath)) {
47
+ copyRecursiveSync(srcPath, destPath);
48
+ }
49
+ });
50
+
51
+ const net = require('net');
52
+ const getPort = (port) => new Promise((resolve) => {
53
+ const s = net.createServer();
54
+ s.listen(port, () => { s.close(() => resolve(port)); });
55
+ s.on('error', () => { resolve(getPort(port + 1)); });
56
+ });
57
+ const bridgePort = await getPort(9656);
58
+
59
+ const envEx = path.join(TEMPLATE_DIR, '.env.example');
60
+ if (fs.existsSync(envEx) && !fs.existsSync('.env')) {
61
+ let content = fs.readFileSync(envEx, 'utf-8');
62
+ const projectName = path.basename(process.cwd());
63
+ content = content.replace(/PROJECT_NAME=.*/, `PROJECT_NAME=${projectName}`);
64
+ content = content.replace(/BRIDGE_PORT=.*/, `BRIDGE_PORT=${bridgePort}`);
65
+ fs.writeFileSync('.env', content);
66
+ console.log(`\x1b[32m✅ Đã cấp phát .env với BRIDGE_PORT=${bridgePort} độc quyền.\x1b[0m`);
67
+ }
68
+
69
+ console.log(`\x1b[32m✅ Đã cấy ghép thành công AG-Kit (v${pkg.version}) vào Project!\x1b[0m`);
43
70
 
44
- console.log('\x1b[35m👉 Bước tiếp theo: Hãy chọn menu "Build Bộ Não" để quét dự án.\x1b[0m');
71
+ console.log('\x1b[35m👉 Bước 1: Mở .env điền TELEGRAM_BOT_TOKEN.\x1b[0m');
72
+ console.log('\x1b[35m👉 Bước 2: Chạy "./start.sh" để gọi Bot thức dậy.\x1b[0m');
45
73
  } else {
46
74
  console.log('\x1b[33m⚠️ Thư mục .agent đã tồn tại.\x1b[0m');
47
75
  const vPath = path.join(TARGET_AGENT_DIR, '.version');
@@ -122,29 +150,52 @@ program.command('memory')
122
150
 
123
151
  program.command('gateway')
124
152
  .description('Kiểm tra trạng thái Agentic Gateway (IDE, Ollama, Telegram)')
125
- .action(() => {
153
+ .action(async () => {
126
154
  console.log('\x1b[36m🤖 Đang kiểm tra hệ sinh thái Agentic Gateway...\x1b[0m');
127
155
  if (!fs.existsSync(TARGET_AGENT_DIR)) {
128
156
  console.log('\x1b[31m❌ Chưa cấy ghép .agent.\x1b[0m');
129
157
  return;
130
158
  }
131
159
  const envPath = path.join(process.cwd(), '.env');
132
- let ports = [9555, 9222];
160
+ let targetPort = null;
161
+ let bridgePort = null;
133
162
  if (fs.existsSync(envPath)) {
134
- const match = fs.readFileSync(envPath, 'utf-8').match(/CDP_PORT=(\d+)/);
135
- if (match) ports.unshift(parseInt(match[1]));
163
+ const content = fs.readFileSync(envPath, 'utf-8');
164
+ const matchIde = content.match(/IDE_PORT=(\d+)/);
165
+ if (matchIde) targetPort = parseInt(matchIde[1]);
166
+ const matchBridge = content.match(/BRIDGE_PORT=(\d+)/);
167
+ if (matchBridge) bridgePort = parseInt(matchBridge[1]);
136
168
  }
137
169
 
138
- let cdpOk = false;
139
- for (const port of ports) {
170
+ // 1. Kiểm tra lớp IDE (Hub)
171
+ if (targetPort) {
140
172
  try {
141
- execSync(`curl -s --max-time 2 http://127.0.0.1:${port}/json/version`, { stdio: 'ignore' });
142
- cdpOk = true;
143
- console.log(`\x1b[32m✅ IDE CDP: Phát hiện tại cổng ${port}\x1b[0m`);
144
- break;
145
- } catch (e) {}
173
+ execSync(`curl -s --max-time 2 http://127.0.0.1:${targetPort}/json/version`, { stdio: 'ignore' });
174
+ console.log(`\x1b[32m✅ IDE CDP: Cổng Trạm (Hub ${targetPort}) đang Online!\x1b[0m`);
175
+ } catch (e) {
176
+ console.log(`\x1b[31m❌ IDE CDP: Cổng Trạm (Hub ${targetPort}) Offline. Chạy ./start.sh để tự gọi.\x1b[0m`);
177
+ }
178
+ } else {
179
+ console.log(`\x1b[33m⚠️ IDE CDP: Không tìm thấy IDE_PORT trong .env.\x1b[0m`);
180
+ }
181
+
182
+ // 2. Kiểm tra lớp Bot Nodejs (Bridge)
183
+ if (bridgePort) {
184
+ const net = require('net');
185
+ const checkBridge = () => new Promise((resolve) => {
186
+ const s = new net.Socket();
187
+ s.setTimeout(2000);
188
+ s.on('connect', () => { s.destroy(); resolve(true); });
189
+ s.on('error', () => { resolve(false); });
190
+ s.on('timeout', () => { s.destroy(); resolve(false); });
191
+ s.connect(bridgePort, '127.0.0.1');
192
+ });
193
+ const up = await checkBridge();
194
+ if (up) console.log(`\x1b[32m✅ BRIDGE: Cổng nội bộ Bot (${bridgePort}) đang Online!\x1b[0m`);
195
+ else console.log(`\x1b[31m❌ BRIDGE: Cổng nội bộ Bot (${bridgePort}) đang Offline. Bot chưa nhúng.\x1b[0m`);
196
+ } else {
197
+ console.log(`\x1b[33m⚠️ BRIDGE: Không tìm thấy BRIDGE_PORT trong .env.\x1b[0m`);
146
198
  }
147
- if (!cdpOk) console.log(`\x1b[31m❌ IDE CDP: Không tìm thấy IDE đang chạy ở các cổng: ${ports.join(', ')}\x1b[0m`);
148
199
 
149
200
  try {
150
201
  execSync('ollama --version', { stdio: 'ignore' });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrtrinhvn/ag-kit",
3
- "version": "1.4.1",
3
+ "version": "1.4.4",
4
4
  "description": "Antigravity Kit Base Framework - Generic Agentic AI Programming Core",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -1,12 +1,50 @@
1
1
  #!/bin/bash
2
- # 🏢 Agentic Gateway - Startup Orchestrator
3
- # Golden Combo Edition (V3)
2
+ # start.sh - Hệ thống Quản trị Khởi động (Agentic Port Fusion)
4
3
 
5
4
  # 1. Load config
6
5
  if [ -f .env ]; then
7
6
  source .env
7
+ else
8
+ echo "❌ Lỗi: Không tìm thấy file .env. Vui lòng tạo dựa trên .env.example"
9
+ exit 1
8
10
  fi
9
11
 
10
- # 2. Khởi động Giao diện & Agent (Agent-Defined)
11
- echo "🚀 Activating Agentic Gateway Portal..."
12
+ PORT=${IDE_PORT:-9555}
13
+ PROJ=${PROJECT_NAME:-"UnknownProject"}
14
+
15
+ echo "🔍 Đang kiểm tra IDE cho [$PROJ] tại cổng $PORT..."
16
+
17
+ open_ide() {
18
+ if command -v antigravity &> /dev/null; then
19
+ antigravity --remote-debugging-port=$PORT . &
20
+ elif command -v cursor &> /dev/null; then
21
+ cursor --remote-debugging-port=$PORT . &
22
+ elif command -v code &> /dev/null; then
23
+ code --remote-debugging-port=$PORT . &
24
+ else
25
+ echo "❌ Lỗi: Không tìm thấy lệnh 'antigravity', 'cursor' hoặc 'code'."
26
+ echo "👉 Hãy tự mở IDE bằng tay cho thư mục này."
27
+ fi
28
+ }
29
+
30
+ # 2. Logic Hợp thể & Mở mới linh hoạt
31
+ if nc -z 127.0.0.1 $PORT &>/dev/null; then
32
+ # Cổng đã mở, thám thính xem bên trong có dự án của mình không (lọc theo JSON Title/Url)
33
+ if curl -s --max-time 2 http://127.0.0.1:$PORT/json/list | grep -i "\"title\":.*$PROJ" &>/dev/null; then
34
+ echo "✅ [HỢP THỂ]: Cổng $PORT đang mở và Workspace [$PROJ] đang được hiển thị. Trực tiếp cắm ngầm Bot vào màn hình này..."
35
+ else
36
+ echo "⚠️ [GỌI CỬA]: Cổng $PORT có IDE đang chạy, nhưng chưa mở màn hình cho [$PROJ]. Đang ra lệnh mở thêm giao diện cho dự án này..."
37
+ open_ide
38
+ echo "⏳ Đang đợi màn hình phụ tải xong..."
39
+ sleep 4
40
+ fi
41
+ else
42
+ echo "⚠️ [MỞ MỚI TỪ ĐẦU]: Cổng CDP $PORT hoàn toàn trống. Đang phóng cỗ máy IDE chuyên biệt..."
43
+ open_ide
44
+ echo "⏳ Đang đợi rễ CDP bám rễ..."
45
+ sleep 4
46
+ fi
47
+
48
+ # 3. Khởi động Giao diện & Agent (Receptionist)
49
+ echo "🚀 Đang đánh thức bộ não Agentic Gateway..."
12
50
  bash .agent/scripts/receptionist_up.sh
package/template/start.sh CHANGED
@@ -1,22 +1,50 @@
1
1
  #!/bin/bash
2
- # start.sh - Khởi động Cổng Agentic (Remoat + LazyGravity standard)
2
+ # start.sh - Hệ thống Quản trị Khởi động (Agentic Port Fusion)
3
3
 
4
- # 1. Kiểm tra .env
5
- if [ ! -f .env ]; then
4
+ # 1. Load config
5
+ if [ -f .env ]; then
6
+ source .env
7
+ else
6
8
  echo "❌ Lỗi: Không tìm thấy file .env. Vui lòng tạo dựa trên .env.example"
7
9
  exit 1
8
10
  fi
9
11
 
10
- # 2. Đọc cấu hình
11
- source .env
12
+ PORT=${IDE_PORT:-9555}
13
+ PROJ=${PROJECT_NAME:-"UnknownProject"}
12
14
 
13
- # 3. Khởi động IDE chế độ Debug (nếu chưa chạy)
14
- # Lưu ý: User nên chạy ./launch_remote_ide.sh trước hoặc script này sẽ kiểm tra port
15
- nc -z localhost ${IDE_PORT:-9555}
16
- if [ $? -ne 0 ]; then
17
- echo "⚠️ Cảnh báo: Cổng CDP ${IDE_PORT:-9555} chưa mở. Đang chờ Antigravity khởi động..."
15
+ echo "🔍 Đang kiểm tra IDE cho [$PROJ] tại cổng $PORT..."
16
+
17
+ open_ide() {
18
+ if command -v antigravity &> /dev/null; then
19
+ antigravity --remote-debugging-port=$PORT . &
20
+ elif command -v cursor &> /dev/null; then
21
+ cursor --remote-debugging-port=$PORT . &
22
+ elif command -v code &> /dev/null; then
23
+ code --remote-debugging-port=$PORT . &
24
+ else
25
+ echo "❌ Lỗi: Không tìm thấy lệnh 'antigravity', 'cursor' hoặc 'code'."
26
+ echo "👉 Hãy tự mở IDE bằng tay cho thư mục này."
27
+ fi
28
+ }
29
+
30
+ # 2. Logic Hợp thể & Mở mới linh hoạt
31
+ if nc -z 127.0.0.1 $PORT &>/dev/null; then
32
+ # Cổng đã mở, thám thính xem bên trong có dự án của mình không (lọc theo JSON Title/Url)
33
+ if curl -s --max-time 2 http://127.0.0.1:$PORT/json/list | grep -i "\"title\":.*$PROJ" &>/dev/null; then
34
+ echo "✅ [HỢP THỂ]: Cổng $PORT đang mở và Workspace [$PROJ] đang được hiển thị. Trực tiếp cắm ngầm Bot vào màn hình này..."
35
+ else
36
+ echo "⚠️ [GỌI CỬA]: Cổng $PORT có IDE đang chạy, nhưng chưa mở màn hình cho [$PROJ]. Đang ra lệnh mở thêm giao diện cho dự án này..."
37
+ open_ide
38
+ echo "⏳ Đang đợi màn hình phụ tải xong..."
39
+ sleep 4
40
+ fi
41
+ else
42
+ echo "⚠️ [MỞ MỚI TỪ ĐẦU]: Cổng CDP $PORT hoàn toàn trống. Đang phóng cỗ máy IDE chuyên biệt..."
43
+ open_ide
44
+ echo "⏳ Đang đợi rễ CDP bám rễ..."
45
+ sleep 4
18
46
  fi
19
47
 
20
- # 4. Khởi động Bridge Bot (Agent-Defined)
21
- echo "🚀 Khởi động Lễ tân trực chiến (Agentic Gateway)..."
48
+ # 3. Khởi động Giao diện & Agent (Receptionist)
49
+ echo "🚀 Đang đánh thức bộ não Agentic Gateway..."
22
50
  bash .agent/scripts/receptionist_up.sh