vg-coder-cli 2.0.30 → 2.0.32
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/ARCHITECTURE.md +255 -0
- package/README.md +0 -11
- package/change.sh +0 -0
- package/dist/vg-coder-bundle.js +42 -0
- package/gulpfile.js +111 -0
- package/package.json +19 -11
- package/scripts/postinstall.js +13 -3
- package/src/index.js +28 -220
- package/src/server/api-server.js +120 -428
- package/src/server/views/css/bubble.css +81 -0
- package/src/server/views/css/code-viewer.css +58 -0
- package/src/server/views/css/terminal.css +59 -155
- package/src/server/views/dashboard.css +78 -678
- package/src/server/views/dashboard.html +39 -278
- package/src/server/views/js/api.js +2 -22
- package/src/server/views/js/config.js +27 -15
- package/src/server/views/js/event-protocol.js +263 -0
- package/src/server/views/js/features/bubble-features/index.js +125 -0
- package/src/server/views/js/features/bubble-features/paste-run-feature.js +16 -0
- package/src/server/views/js/features/bubble-features/terminal-feature.js +16 -0
- package/src/server/views/js/features/bubble.js +175 -0
- package/src/server/views/js/features/code-viewer.js +90 -0
- package/src/server/views/js/features/commands.js +34 -81
- package/src/server/views/js/features/editor-tabs.js +19 -46
- package/src/server/views/js/features/git-view.js +63 -81
- package/src/server/views/js/features/iframe-manager.js +3 -97
- package/src/server/views/js/features/monaco-manager.js +19 -39
- package/src/server/views/js/features/project-switcher.js +7 -63
- package/src/server/views/js/features/resize.js +5 -16
- package/src/server/views/js/features/structure.js +38 -106
- package/src/server/views/js/features/terminal.js +102 -418
- package/src/server/views/js/handlers.js +60 -43
- package/src/server/views/js/main.js +75 -179
- package/src/server/views/js/shadow-entry.js +21 -0
- package/src/server/views/js/utils.js +48 -28
- package/src/server/views/vg-coder/_metadata/generated_indexed_rulesets/_ruleset1 +0 -0
- package/src/server/views/vg-coder/controller.js +33 -258
- package/vetgo-auto/chrome/src/utils/injector-script.ts +33 -258
- package/vetgo-auto/vg-coder.zip +0 -0
- package/src/server/views/dashboard.js +0 -457
package/ARCHITECTURE.md
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# VG Coder - Project Architecture Guide
|
|
2
|
+
|
|
3
|
+
Tài liệu này giải thích cách thức hoạt động của hệ thống VG Coder, vai trò của từng thành phần và cách để một lập trình viên mới bắt đầu phát triển tính năng.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Tổng quan hệ thống (System Overview)
|
|
8
|
+
|
|
9
|
+
VG Coder là một bộ công cụ hỗ trợ lập trình bằng AI, hoạt động dựa trên sự kết hợp của 3 thành phần chính:
|
|
10
|
+
|
|
11
|
+
1. **CLI / API Server (Node.js/Express):** Chạy dưới máy cục bộ (Localhost:6868). Nhiệm vụ: Quét mã nguồn, đếm token, thực thi lệnh Terminal và quản lý file.
|
|
12
|
+
2. **Frontend Dashboard (HTML/CSS/JS):** Giao diện người dùng. Được build thành một file duy nhất (`vg-coder-bundle.js`).
|
|
13
|
+
3. **Browser Extension:** "Cầu nối" giúp nhúng Dashboard trực tiếp vào các trang web AI (ChatGPT, Claude) bằng công nghệ **Shadow DOM**.
|
|
14
|
+
|
|
15
|
+
## 2. Sơ đồ luồng (Flow Diagrams)
|
|
16
|
+
|
|
17
|
+
### A. Luồng khởi tạo (Initialization Flow)
|
|
18
|
+
Khi bạn chạy `vg start` và mở trang ChatGPT:
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
sequenceDiagram
|
|
22
|
+
participant U as User
|
|
23
|
+
participant S as Local Server (6868)
|
|
24
|
+
participant E as Browser Extension
|
|
25
|
+
participant P as AI Page (ChatGPT)
|
|
26
|
+
participant D as Shadow DOM Dashboard
|
|
27
|
+
|
|
28
|
+
U->>S: Chạy lệnh `vg start`
|
|
29
|
+
U->>P: Truy cập chatgpt.com
|
|
30
|
+
E->>P: Kiểm tra Domain AI
|
|
31
|
+
E->>S: Fetch `dist/vg-coder-bundle.js`
|
|
32
|
+
S-->>E: Trả về toàn bộ Code Dashboard
|
|
33
|
+
E->>P: Tạo Shadow Root & Inject Bundle
|
|
34
|
+
P->>D: Dashboard hiển thị (Bong bóng 🚀)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### B. Luồng thực thi tính năng (Feature Execution)
|
|
38
|
+
Ví dụ khi người dùng nhấn nút "Execute Bash":
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
graph LR
|
|
42
|
+
A[Giao diện Dashboard] -- Click Run --> B[utils.js: getById]
|
|
43
|
+
B -- Lấy nội dung --> C[api.js: fetch]
|
|
44
|
+
C -- POST /api/execute --> D[Server: Express Route]
|
|
45
|
+
D -- Chạy shell --> E[BashExecutor]
|
|
46
|
+
E -- Trả về stdout --> D
|
|
47
|
+
D -- JSON response --> C
|
|
48
|
+
C -- Hiển thị --> F[Dashboard: Response Area]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 3. Các thành phần chi tiết
|
|
54
|
+
|
|
55
|
+
### 📂 Server (`src/server/`)
|
|
56
|
+
* **`api-server.js`**: Định nghĩa các điểm cuối (Endpoints) cho UI gọi vào.
|
|
57
|
+
* **`project-manager.js`**: Quản lý việc chạy nhiều dự án cùng lúc (Leader/Follower).
|
|
58
|
+
* **`terminal-manager.js`**: Sử dụng `node-pty` để tạo các session Terminal thực trên máy tính.
|
|
59
|
+
|
|
60
|
+
### 📂 Frontend (`src/server/views/`)
|
|
61
|
+
Đây là nơi bạn phát triển tính năng mới.
|
|
62
|
+
* **`js/features/`**: Mỗi tính năng (Git, Terminal, Tree View) nằm trong một file riêng.
|
|
63
|
+
* **`js/utils.js`**: Chứa các helper quan trọng. **Lưu ý:** Tuyệt đối không dùng `document.getElementById`, phải dùng `getById()` vì App chạy trong Shadow DOM.
|
|
64
|
+
* **`js/shadow-entry.js`**: Điểm vào (Entry point) để kết nối Dashboard với môi trường Shadow DOM của Extension.
|
|
65
|
+
|
|
66
|
+
### 📦 Build System (`gulpfile.js`)
|
|
67
|
+
Do Extension không thể tải từng file JS/CSS lẻ từ Localhost vì lý do bảo mật (CORS/CSP), Gulp sẽ:
|
|
68
|
+
1. Gom tất cả CSS thành một chuỗi.
|
|
69
|
+
2. Nén HTML thành một chuỗi.
|
|
70
|
+
3. Bundle toàn bộ JS bằng Webpack.
|
|
71
|
+
4. Đóng gói tất cả vào file `dist/vg-coder-bundle.js`.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 4. Event Protocol & Feature System
|
|
76
|
+
|
|
77
|
+
VG Coder sử dụng **Event-Driven Architecture** để quản lý giao tiếp giữa các component, đặc biệt là bubble menu features. Hệ thống này cho phép:
|
|
78
|
+
- ✅ Tách biệt UI và logic xử lý
|
|
79
|
+
- ✅ Thêm features mới mà không cần sửa code cũ
|
|
80
|
+
- ✅ Giao tiếp cross-context (window, shadow-root, iframe)
|
|
81
|
+
- ✅ Test features độc lập
|
|
82
|
+
|
|
83
|
+
### Thành phần chính
|
|
84
|
+
|
|
85
|
+
#### 1. Event Protocol (`event-protocol.js`)
|
|
86
|
+
|
|
87
|
+
Định nghĩa giao thức event chuẩn:
|
|
88
|
+
|
|
89
|
+
```javascript
|
|
90
|
+
// Event format
|
|
91
|
+
{
|
|
92
|
+
type: 'vg:paste-run', // Event type
|
|
93
|
+
source: 'bubble-menu', // Source component
|
|
94
|
+
target: 'handlers', // Target component
|
|
95
|
+
payload: { /* data */ }, // Event data
|
|
96
|
+
timestamp: 1234567890, // Timestamp
|
|
97
|
+
context: 'shadow-root' // Execution context
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Event Types:**
|
|
102
|
+
- `vg:paste-run` - Paste & Run from Clipboard
|
|
103
|
+
- `vg:terminal-new` - Open New Terminal
|
|
104
|
+
- `vg:terminal-execute` - Execute command in terminal
|
|
105
|
+
|
|
106
|
+
#### 2. Event Dispatcher
|
|
107
|
+
|
|
108
|
+
`EventDispatcher` class quản lý event registration và dispatching:
|
|
109
|
+
|
|
110
|
+
```javascript
|
|
111
|
+
import { globalDispatcher, EVENT_TYPES } from './event-protocol.js';
|
|
112
|
+
|
|
113
|
+
// Register listener
|
|
114
|
+
globalDispatcher.on(EVENT_TYPES.PASTE_RUN, async (event) => {
|
|
115
|
+
console.log('Event received:', event);
|
|
116
|
+
// Handle event
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
// Dispatch event
|
|
120
|
+
globalDispatcher.dispatch({
|
|
121
|
+
type: EVENT_TYPES.PASTE_RUN,
|
|
122
|
+
source: 'bubble-menu',
|
|
123
|
+
target: 'handlers',
|
|
124
|
+
payload: { /* data */ }
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### 3. Feature Registry (`features/bubble-features/`)
|
|
129
|
+
|
|
130
|
+
Quản lý bubble menu features:
|
|
131
|
+
|
|
132
|
+
```javascript
|
|
133
|
+
// Feature structure
|
|
134
|
+
{
|
|
135
|
+
id: 'paste-run',
|
|
136
|
+
icon: '📋',
|
|
137
|
+
label: 'Paste & Run from Clipboard',
|
|
138
|
+
tooltip: 'Paste & Run from Clipboard',
|
|
139
|
+
eventType: EVENT_TYPES.PASTE_RUN,
|
|
140
|
+
permissions: ['clipboard-read'],
|
|
141
|
+
enabled: true,
|
|
142
|
+
order: 1
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Cách thêm Bubble Menu Feature mới
|
|
147
|
+
|
|
148
|
+
**Bước 1:** Tạo event type mới trong `event-protocol.js`:
|
|
149
|
+
|
|
150
|
+
```javascript
|
|
151
|
+
export const EVENT_TYPES = {
|
|
152
|
+
// Existing types...
|
|
153
|
+
MY_FEATURE: 'vg:my-feature', // New event type
|
|
154
|
+
};
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Bước 2:** Tạo feature definition (`features/bubble-features/my-feature.js`):
|
|
158
|
+
|
|
159
|
+
```javascript
|
|
160
|
+
import { EVENT_TYPES } from '../../event-protocol.js';
|
|
161
|
+
|
|
162
|
+
export const MyFeature = {
|
|
163
|
+
id: 'my-feature',
|
|
164
|
+
icon: '⚡',
|
|
165
|
+
label: 'My Feature',
|
|
166
|
+
tooltip: 'Do something cool',
|
|
167
|
+
eventType: EVENT_TYPES.MY_FEATURE,
|
|
168
|
+
permissions: [],
|
|
169
|
+
enabled: true,
|
|
170
|
+
order: 3,
|
|
171
|
+
};
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Bước 3:** Register feature trong `features/bubble-features/index.js`:
|
|
175
|
+
|
|
176
|
+
```javascript
|
|
177
|
+
import { MyFeature } from './my-feature.js';
|
|
178
|
+
|
|
179
|
+
// Register
|
|
180
|
+
featureRegistry.register(MyFeature);
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Bước 4:** Add event handler trong `handlers.js`:
|
|
184
|
+
|
|
185
|
+
```javascript
|
|
186
|
+
export function initEventHandlers() {
|
|
187
|
+
// Existing handlers...
|
|
188
|
+
|
|
189
|
+
// My Feature handler
|
|
190
|
+
globalDispatcher.on(EVENT_TYPES.MY_FEATURE, (event) => {
|
|
191
|
+
console.log('[Handlers] My Feature event:', event);
|
|
192
|
+
// Implement your logic here
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Bước 5:** Build và test:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
npm run build
|
|
201
|
+
vg start
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Feature sẽ tự động xuất hiện trong bubble menu! 🎉
|
|
205
|
+
|
|
206
|
+
### Debug Event System
|
|
207
|
+
|
|
208
|
+
Sử dụng browser console để debug:
|
|
209
|
+
|
|
210
|
+
```javascript
|
|
211
|
+
// Enable debug mode
|
|
212
|
+
window.__VG_EVENT_DISPATCHER__.setDebug(true);
|
|
213
|
+
|
|
214
|
+
// View registered features
|
|
215
|
+
console.log(window.__VG_FEATURE_REGISTRY__.getFeatures());
|
|
216
|
+
|
|
217
|
+
// View event history
|
|
218
|
+
console.log(window.__VG_EVENT_DISPATCHER__.getHistory());
|
|
219
|
+
|
|
220
|
+
// Test dispatch manually
|
|
221
|
+
window.__VG_EVENT_DISPATCHER__.dispatch({
|
|
222
|
+
type: 'vg:paste-run',
|
|
223
|
+
source: 'test',
|
|
224
|
+
target: 'handlers',
|
|
225
|
+
payload: {}
|
|
226
|
+
});
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 5. Hướng dẫn phát triển tính năng mới
|
|
232
|
+
|
|
233
|
+
Nếu bạn muốn thêm tính năng mới (Ví dụ: "Database Manager"):
|
|
234
|
+
|
|
235
|
+
1. **Backend:** Thêm Route vào `src/server/api-server.js` để xử lý logic phía máy tính.
|
|
236
|
+
2. **Frontend Markup:** Thêm HTML vào `src/server/views/dashboard.html`.
|
|
237
|
+
3. **Frontend Style:** Tạo file `src/server/views/css/db-manager.css`.
|
|
238
|
+
4. **Frontend Logic:**
|
|
239
|
+
* Tạo `src/server/views/js/features/db-manager.js`.
|
|
240
|
+
* Dùng `import { getById } from '../utils.js'` để lấy element.
|
|
241
|
+
* Gán hàm vào `window` nếu cần gọi từ HTML (ví dụ: `window.openDB = ...`).
|
|
242
|
+
5. **Đăng ký:** Import và khởi tạo trong `src/server/views/js/main.js`.
|
|
243
|
+
6. **Build:** Chạy `npm run build` để cập nhật file bundle.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## 6. Các quy tắc "Sống còn" cho người mới
|
|
248
|
+
|
|
249
|
+
1. **Shadow DOM Context:** Dashboard không thể thấy biến của trang web (ChatGPT) và ngược lại. Mọi thao tác DOM của Dashboard phải qua `getById()` hoặc `qs()`.
|
|
250
|
+
2. **API Base:** Luôn sử dụng biến `API_BASE` từ `config.js` khi dùng `fetch`. Nó tự động nhận diện khi nào cần gọi về `localhost:6868`.
|
|
251
|
+
3. **Z-Index:** Bong bóng 🚀 có z-index là `2147483647` để luôn nằm trên cùng. Các modal của bạn nên có z-index thấp hơn mức này một chút.
|
|
252
|
+
4. **No Stdin in Terminal:** Do Shadow DOM chặn một số sự kiện bàn phím, Terminal được thiết kế theo kiểu "Input riêng - Output riêng".
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
Tài liệu này được cập nhật vào tháng 12/2025.
|
package/README.md
CHANGED
|
@@ -40,12 +40,6 @@ npm install -g vg-coder-cli
|
|
|
40
40
|
npm install vg-coder-cli
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
### Từ Source
|
|
44
|
-
```bash
|
|
45
|
-
git clone https://github.com/tinhthanh/vg-coder-cli.git
|
|
46
|
-
cd vg-coder-cli
|
|
47
|
-
npm install
|
|
48
|
-
```
|
|
49
43
|
|
|
50
44
|
## 🚀 Sử dụng
|
|
51
45
|
|
|
@@ -339,11 +333,6 @@ npm run push
|
|
|
339
333
|
|
|
340
334
|
MIT License - xem file [LICENSE](LICENSE) để biết thêm chi tiết.
|
|
341
335
|
|
|
342
|
-
## 🔗 Links
|
|
343
|
-
|
|
344
|
-
- **GitHub**: https://github.com/tinhthanh/vg-coder-cli
|
|
345
|
-
- **NPM**: https://www.npmjs.com/package/vg-coder-cli
|
|
346
|
-
- **Issues**: https://github.com/tinhthanh/vg-coder-cli/issues
|
|
347
336
|
|
|
348
337
|
## 📊 Version History
|
|
349
338
|
|
package/change.sh
ADDED
|
File without changes
|