vg-coder-cli 2.0.49 → 2.0.51
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/INTEGRATION.md +7 -2
- package/README.md +18 -3
- package/dist/vg-coder-bundle.js +1 -1
- package/package.json +1 -1
- package/src/index.js +3 -1
- package/src/server/api-server.js +14 -1
- package/src/server/task-queue.js +124 -3
- package/src/server/views/js/main.js +13 -1
package/INTEGRATION.md
CHANGED
|
@@ -29,6 +29,7 @@ External Service ◀── POST <webhookUrl> (push, retry 3×)
|
|
|
29
29
|
- **Workers**: mỗi tab Chrome trên `aistudio.google.com` với extension VG Coder = 1 worker. Server tự load-balance song song giữa các worker idle.
|
|
30
30
|
- **Launchers**: mỗi Chrome profile = 1 launcher (background service worker của extension). Dùng để mở/đóng tab AI Studio và lock model cho từng task.
|
|
31
31
|
- **Auto-recycle**: sau mỗi task done/failed, server gọi launcher đóng tab worker đó + mở lại tab mới với `?model=<target>` — guarantee model lock per task. Mark worker `recycling` để tránh race.
|
|
32
|
+
- **Idle tab TTL** (v2.0.50+): sau khi recycle xong, nếu không có task mới trong `VG_WORKER_IDLE_TTL_MS` (default `120000` = 2 phút), launcher đóng tab → CPU container về ~0%. Task tiếp theo sẽ trigger `launcher:open_aistudio` để mở lại tab. Set `VG_WORKER_IDLE_TTL_MS=0` để giữ tab always-on (behavior cũ); set `=1` để đóng ngay sau mỗi task.
|
|
32
33
|
- **Failover**: rate-limit / quota error → mark worker `rate_limited` 30 phút, requeue task sang worker khác (max 3 attempts). Tab giữ nguyên qua cooldown (không recycle khi rate-limited).
|
|
33
34
|
- **Default model**: `gemini-3-flash-preview` (free + multimodal — verified working với image + PDF). Avoid `-lite` (text-only) hoặc `-pro-preview` (paid alias to Deep Research).
|
|
34
35
|
- **Persistence**: tasks lưu vào `.vg/tasks/<id>/{task.json,result.md,files/}` của active project.
|
|
@@ -39,9 +40,13 @@ External Service ◀── POST <webhookUrl> (push, retry 3×)
|
|
|
39
40
|
|
|
40
41
|
```bash
|
|
41
42
|
npm install -g vg-coder-cli # hoặc: cd repo && npm run build
|
|
42
|
-
vg start # khởi động server :6868
|
|
43
|
+
vg start # khởi động server :6868 (loopback)
|
|
44
|
+
vg start --host 0.0.0.0 # bind LAN/Docker
|
|
45
|
+
vg start --worker # ẩn bubble + dashboard panel trên tab AI Studio
|
|
43
46
|
```
|
|
44
47
|
|
|
48
|
+
> **Worker-only mode** (`--worker`): server inject `window.__VG_WORKER_ONLY__=true` vào bundle khi serve `/dist/vg-coder-bundle.js`. Dashboard sẽ ẩn `#vg-coder-shadow-host` và chỉ chạy `initTaskWorker()` — không render bubble + tool panels. REST API vẫn đầy đủ. Sau khi đổi flag phải **reload tab AI Studio** để bundle mới load.
|
|
49
|
+
|
|
45
50
|
### Worker (browser tab)
|
|
46
51
|
|
|
47
52
|
Mỗi Google account muốn dùng → 1 Chrome profile riêng:
|
|
@@ -402,7 +407,7 @@ User vẫn có thể:
|
|
|
402
407
|
|
|
403
408
|
```bash
|
|
404
409
|
curl http://127.0.0.1:6868/health
|
|
405
|
-
# {"status":"ok","version":"2.0.
|
|
410
|
+
# {"status":"ok","version":"2.0.50"}
|
|
406
411
|
```
|
|
407
412
|
|
|
408
413
|
## End-to-end smoke test
|
package/README.md
CHANGED
|
@@ -73,13 +73,20 @@ vg clean --output ./my-output
|
|
|
73
73
|
|
|
74
74
|
#### 4. **Khởi động API Server** 🆕
|
|
75
75
|
```bash
|
|
76
|
-
# Start server (mặc định port 6868)
|
|
76
|
+
# Start server (mặc định port 6868, bind 127.0.0.1)
|
|
77
77
|
vg start
|
|
78
78
|
vg s # Alias rút gọn
|
|
79
79
|
|
|
80
80
|
# Custom port
|
|
81
81
|
vg start -p 8080
|
|
82
82
|
|
|
83
|
+
# Bind LAN/Docker (cho phép truy cập từ host khác)
|
|
84
|
+
vg start --host 0.0.0.0
|
|
85
|
+
|
|
86
|
+
# Worker-only mode: ẩn bubble + dashboard panel trên tab AI Studio,
|
|
87
|
+
# chỉ chạy task automation (cho server headless điều phối từ xa)
|
|
88
|
+
vg start --worker
|
|
89
|
+
|
|
83
90
|
# Browser tự động mở dashboard tại http://localhost:6868
|
|
84
91
|
```
|
|
85
92
|
|
|
@@ -94,7 +101,7 @@ GET http://localhost:6868/health
|
|
|
94
101
|
```json
|
|
95
102
|
{
|
|
96
103
|
"status": "ok",
|
|
97
|
-
"version": "2.0.
|
|
104
|
+
"version": "2.0.50",
|
|
98
105
|
"timestamp": "2026-05-09T10:07:13.000Z"
|
|
99
106
|
}
|
|
100
107
|
```
|
|
@@ -194,6 +201,8 @@ Content-Type: application/json
|
|
|
194
201
|
| Option | Mô tả | Default |
|
|
195
202
|
|--------|-------|---------|
|
|
196
203
|
| `-p, --port <port>` | Port cho server | 6868 |
|
|
204
|
+
| `--host <host>` | Bind address. Set `0.0.0.0` cho LAN/Docker port-forward (env: `VG_HOST`) | 127.0.0.1 |
|
|
205
|
+
| `--worker` | Worker-only mode: ẩn bubble + dashboard panel trên tab AI Studio, chỉ giữ task automation | false |
|
|
197
206
|
|
|
198
207
|
## 🎨 Dashboard UI
|
|
199
208
|
|
|
@@ -369,7 +378,13 @@ MIT License - xem file [LICENSE](LICENSE) để biết thêm chi tiết.
|
|
|
369
378
|
|
|
370
379
|
## 📊 Version History
|
|
371
380
|
|
|
372
|
-
### v2.0.
|
|
381
|
+
### v2.0.50 (Latest)
|
|
382
|
+
- 🤖 Worker-only mode (`vg start --worker`): server prepend `window.__VG_WORKER_ONLY__=true` vào bundle, dashboard skip bubble + panels, chỉ chạy `initTaskWorker()` — tab AI Studio sạch không bị che bởi UI
|
|
383
|
+
- ⏲️ Idle worker tab TTL (env `VG_WORKER_IDLE_TTL_MS`, default 120 000): không có task mới → launcher đóng tab → CPU container về 0%; task tới sẽ tự mở lại tab
|
|
384
|
+
- 🐳 Configurable bind address: `vg start --host 0.0.0.0` (hoặc env `VG_HOST`) cho LAN/Docker port-forward
|
|
385
|
+
- 🧱 Dynamic CSP bypass via `chrome.declarativeNetRequest.updateDynamicRules` — fix lỗi parse static rules.json trên Chromium 120 (Linux/Docker)
|
|
386
|
+
|
|
387
|
+
### v2.0.48
|
|
373
388
|
- 🤖 Remote Task API: external service push task chat AI Studio + nhận callback (`POST /api/tasks` + webhook)
|
|
374
389
|
- 🧠 Multi-worker pool: mỗi Chrome profile = 1 worker, parallel + auto-failover khi rate-limit
|
|
375
390
|
- 🪟 Launcher SW per profile + tab management API (`GET /api/launcher/tabs`, `POST /api/launcher/{open,close}-tab`)
|