opencode-account-manager 0.4.2 → 0.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/README.md CHANGED
@@ -1,266 +1,232 @@
1
1
  # OpenCode Account Manager (OCAM)
2
2
 
3
- TUI Dashboard để quản lý tất cả providers, MCP servers, và plugin accounts của [OpenCode](https://opencode.ai).
3
+ <div align="center">
4
+ <h3>TUI Dashboard for OpenCode Account Management</h3>
5
+ <p>Manage providers, MCP servers, and plugin accounts in one place.</p>
6
+
7
+ <p>
8
+ <a href="https://www.npmjs.com/package/opencode-account-manager">
9
+ <img src="https://img.shields.io/npm/v/opencode-account-manager.svg" alt="npm version">
10
+ </a>
11
+ <a href="https://www.npmjs.com/package/opencode-account-manager">
12
+ <img src="https://img.shields.io/npm/dw/opencode-account-manager.svg" alt="npm downloads">
13
+ </a>
14
+ <a href="https://github.com/d-init-d/opencode-account-manager/blob/main/LICENSE">
15
+ <img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License">
16
+ </a>
17
+ </p>
18
+
19
+ <p>
20
+ <strong>English</strong> |
21
+ <a href="./README_VI.md">Tiếng Việt</a>
22
+ </p>
23
+ </div>
4
24
 
5
- ## Tính năng
25
+ ---
6
26
 
7
- ### Dashboard
8
- - **Providers**: Xem tất cả AI providers (Google, Ollama, Claudible, Antigravity Manager) với số models
9
- - **MCP Servers**: Xem trạng thái enabled/disabled của các MCP servers
10
- - **Plugin Accounts**: Quản lý accounts của Antigravity Auth plugin
11
- - Xem rate limit status theo từng model (claude, gemini)
12
- - Enable/Disable accounts
13
- - Xóa accounts
27
+ ## Features
14
28
 
15
- ### Export/Import (v0.4.0)
16
- - **Encrypted Export (.ocam)**: hóa AES-256-GCM với password
17
- - **Plain JSON Export**: Format không hóa (backward compatible)
18
- - **File Browser**: Chọn nhanh Desktop/Documents, duyệt folder, paste path
19
- - **Import Preview**: Xem accounts nào đã tồn tại trước khi import
20
- - **Overwrite Mode**: Accounts trùng sẽ được cập nhật khi import
29
+ - **Providers View**: See all AI providers (Google, Ollama, Anthropic, etc.) with model counts
30
+ - **MCP Servers**: View enabled/disabled status of MCP servers
31
+ - **Plugin Accounts**: Manage Google accounts connected to OpenCode
32
+ - Rate limit status per model (claude, gemini)
33
+ - Enable/Disable/Delete accounts
34
+ - **Encrypted Export**: AES-256-GCM encryption with password protection
35
+ - **Multi-format Import**: Support for encrypted `.ocam`, plain JSON, and Antigravity Manager exports
21
36
 
22
37
  ---
23
38
 
24
- ## Cài đặt
39
+ ## Installation
25
40
 
26
- ### Cách 1: Clone từ GitHub (Recommended)
41
+ ### Option A: Let an LLM do it
27
42
 
28
- ```bash
29
- # Clone repo
30
- git clone https://github.com/d-init-d/opencode-account-manager.git
31
- cd opencode-account-manager
43
+ Paste this into any LLM agent (Claude Code, OpenCode, Cursor, etc.):
32
44
 
33
- # Cài dependencies
34
- npm install
45
+ ```
46
+ Install opencode-account-manager globally via npm, then run "ocam" to verify installation.
47
+ Repository: https://github.com/d-init-d/opencode-account-manager
48
+ ```
35
49
 
36
- # Build TypeScript
37
- npm run build
50
+ ### Option B: Install from npm
38
51
 
39
- # (Optional) Link để dùng command `ocam` ở mọi nơi
40
- npm link
52
+ ```bash
53
+ npm install -g opencode-account-manager
41
54
  ```
42
55
 
43
- ### Cách 2: Cài trực tiếp từ GitHub
56
+ ### Option C: Install from GitHub
44
57
 
45
58
  ```bash
46
59
  npm install -g github:d-init-d/opencode-account-manager
47
60
  ```
48
61
 
49
- ### Kiểm tra cài đặt
62
+ ### Verify installation
50
63
 
51
64
  ```bash
52
- # Nếu đã npm link hoặc cài global
53
65
  ocam --version
54
-
55
- # Hoặc chạy trực tiếp
56
- node dist/cli.js --version
57
66
  ```
58
67
 
59
68
  ---
60
69
 
61
- ## Sử dụng
70
+ ## For LLM Agents
71
+
72
+ ### Step-by-Step Instructions
62
73
 
63
- ### Mở Dashboard (TUI)
74
+ 1. Run `npm install -g opencode-account-manager` to install globally
75
+ 2. Run `ocam` to start the TUI dashboard
76
+ 3. The dashboard will auto-detect OpenCode config at `~/.config/opencode/opencode.json`
77
+
78
+ ### Verification
64
79
 
65
80
  ```bash
66
- # Cách 1: Command ngắn (nếu đã npm link)
67
- ocam
81
+ ocam --version
82
+ # Expected output: 0.4.2
83
+ ```
68
84
 
69
- # Cách 2: Command đầy đủ
70
- opencode-account-manager
85
+ ---
71
86
 
72
- # Cách 3: Từ thư mục project
73
- npm run dashboard
87
+ ## Usage
74
88
 
75
- # Cách 4: Chạy trực tiếp
76
- node dist/cli.js dashboard
89
+ ### Start Dashboard
90
+
91
+ ```bash
92
+ ocam
93
+ # or
94
+ opencode-account-manager
77
95
  ```
78
96
 
79
97
  ### CLI Commands
80
98
 
81
99
  ```bash
82
- # Xem danh sách accounts
100
+ # List accounts
83
101
  ocam list
84
102
 
85
- # Export accounts ra file JSON
103
+ # Export accounts
86
104
  ocam export -o backup.json
87
105
 
88
- # Import accounts từ file
106
+ # Import accounts
89
107
  ocam import backup.json
90
108
 
91
- # Import từ Antigravity Manager folder
109
+ # Import from Antigravity Manager folder
92
110
  ocam import-am
93
111
 
94
- # Xem help
112
+ # Help
95
113
  ocam --help
96
114
  ```
97
115
 
98
116
  ---
99
117
 
100
- ## Phím tắt trong Dashboard
118
+ ## Keyboard Shortcuts
101
119
 
102
120
  ### Main Dashboard
103
121
 
104
- | Phím | Chức năng |
105
- |------|-----------|
106
- | `Tab` | Chuyển section (Providers → Accounts → MCP) |
107
- | `R` | Refresh dữ liệu |
108
- | `E` | Export accounts (mở menu chọn format) |
109
- | `I` | Import accounts (mở file browser) |
110
- | `A` | Import từ Antigravity Manager folder |
111
- | `S` | Bật Select Mode (trong section Accounts) |
112
- | `Q` | Thoát |
113
-
114
- ### Select Mode (trong Accounts)
115
-
116
- | Phím | Chức năng |
117
- |------|-----------|
118
- | `↑/↓` | Di chuyển lên/xuống |
119
- | `Space` | Chọn/bỏ chọn account |
120
- | `A` | Chọn tất cả |
121
- | `N` | Bỏ chọn tất cả |
122
- | `E` | Enable các accounts đã chọn |
123
- | `D` | Disable các accounts đã chọn |
124
- | `X` | Export các accounts đã chọn |
125
- | `DEL` | Xóa các accounts đã chọn |
126
- | `S` / `Esc` | Thoát Select Mode |
127
-
128
- ### Export Flow
129
-
130
- 1. Bấm `E` để export
131
- 2. Chọn format: `[1] Encrypted (.ocam)` hoặc `[2] Plain JSON`
132
- 3. Chọn folder lưu file
133
- 4. Nhập password (chỉ với encrypted)
134
- 5. Done!
135
-
136
- ### Import Flow
137
-
138
- 1. Bấm `I` để import
139
- 2. Duyệt và chọn file `.ocam` hoặc `.json`
140
- 3. Nhập password (chỉ với file encrypted)
141
- 4. Xem preview các accounts
142
- 5. Bấm `Enter` để confirm import
122
+ | Key | Action |
123
+ |-----|--------|
124
+ | `Tab` | Switch section (Providers → Accounts → MCP) |
125
+ | `R` | Refresh data |
126
+ | `E` | Export accounts |
127
+ | `I` | Import accounts |
128
+ | `A` | Import from Antigravity Manager |
129
+ | `S` | Enter Select Mode |
130
+ | `Q` | Quit |
131
+
132
+ ### Select Mode (Accounts)
133
+
134
+ | Key | Action |
135
+ |-----|--------|
136
+ | `↑/↓` | Navigate |
137
+ | `Space` | Toggle selection |
138
+ | `A` | Select all |
139
+ | `N` | Deselect all |
140
+ | `E` | Enable selected |
141
+ | `D` | Disable selected |
142
+ | `X` | Export selected |
143
+ | `DEL` | Delete selected |
144
+ | `Esc` | Exit Select Mode |
143
145
 
144
146
  ---
145
147
 
146
- ## File Formats
148
+ ## Supported Import Formats
147
149
 
148
- ### Encrypted (.ocam)
149
- - Mã hóa AES-256-GCM với scrypt key derivation
150
- - Cần password để mở
151
- - Khuyến nghị dùng khi backup hoặc share
152
-
153
- ### Plain JSON (.json)
154
- - Human-readable, không mã hóa
155
- - Chứa refresh tokens dạng clear text
156
- - Chỉ nên dùng cho local backup
150
+ | Format | Extension | Description |
151
+ |--------|-----------|-------------|
152
+ | Encrypted | `.ocam` | AES-256-GCM encrypted, password required |
153
+ | Portable | `.json` | OpenCode Account Manager plain export |
154
+ | AM Export | `.json` | Antigravity Manager app export `[{email, refresh_token}]` |
155
+ | Plugin Native | `.json` | `antigravity-accounts.json` format |
157
156
 
158
157
  ---
159
158
 
160
- ## Các file cấu hình
161
-
162
- | File | Vị trí | Mô tả |
163
- |------|--------|-------|
164
- | `opencode.json` | `~/.config/opencode/` | Config chính của OpenCode (providers, MCP) |
165
- | `antigravity-accounts.json` | `%APPDATA%/opencode/` | Accounts của plugin (Windows) |
166
- | `antigravity-accounts.json` | `~/.config/opencode/` | Accounts của plugin (Linux/Mac) |
167
- | `ocam-config.json` | `%APPDATA%/opencode/` | Preferences của app (recent folders) |
159
+ ## Configuration Paths
168
160
 
169
- ---
161
+ | File | Windows | Linux/Mac |
162
+ |------|---------|-----------|
163
+ | OpenCode config | `~/.config/opencode/opencode.json` | `~/.config/opencode/opencode.json` |
164
+ | Plugin accounts | `%APPDATA%/opencode/antigravity-accounts.json` | `~/.config/opencode/antigravity-accounts.json` |
165
+ | OCAM preferences | `%APPDATA%/opencode/ocam-config.json` | `~/.config/opencode/ocam-config.json` |
170
166
 
171
- ## Yêu cầu hệ thống
172
-
173
- - **Node.js**: >= 16.x
174
- - **OpenCode**: Cần cài sẵn OpenCode với Antigravity Auth plugin
175
- - **Terminal**: Hỗ trợ Unicode và 256 colors (Windows Terminal, iTerm2, etc.)
167
+ > **Note**: `~` on Windows resolves to your user home directory (e.g., `C:\Users\YourName`)
176
168
 
177
169
  ---
178
170
 
179
- ## Screenshots
171
+ ## Requirements
180
172
 
181
- ```
182
- * OpenCode Account Manager - Dashboard
183
- ────────────────────────────────────────────────────────────────
184
- Providers Models MCP On MCP Off Accounts Available Limited
185
- 4 29 6 0 5 3 2
186
-
187
- Sections: [1] Providers [2] Accounts [3] MCP (Tab to switch)
188
-
189
- ╭─ PROVIDERS ──────────────────────────────────────────────────╮
190
- │ PROVIDER MODELS TYPE BASE URL │
191
- │ Google 7 builtin - │
192
- │ Ollama 5 custom http://localhost:11434│
193
- │ Claudible 3 custom https://claudible.io │
194
- │ Antigravity Manager 14 custom http://localhost:8045 │
195
- ╰──────────────────────────────────────────────────────────────╯
196
-
197
- ╭─ PLUGIN ACCOUNTS (opencode-antigravity-auth) ────────────────╮
198
- │ EMAIL STATUS RATE LIMIT │
199
- │ user1@gmail.com enabled claude: 2.1h │
200
- │ user2@gmail.com enabled OK │
201
- │ user3@gmail.com disabled - │
202
- ╰──────────────────────────────────────────────────────────────╯
203
-
204
- ╭─ MCP SERVERS ────────────────────────────────────────────────╮
205
- │ SERVER STATUS ENV COMMAND │
206
- │ playwright enabled 0 npx @playwright/mcp │
207
- │ firecrawl enabled 1 npx firecrawl-mcp │
208
- │ github enabled 1 npx @modelcontextprot...│
209
- ╰──────────────────────────────────────────────────────────────╯
210
-
211
- ┌──────────────────────────────────────────────────────────────┐
212
- │ [R] Refresh [E] Export [I] Import [A] AM Import [S] Select Mode [Q] Quit │
213
- └──────────────────────────────────────────────────────────────┘
214
- ```
173
+ - **Node.js**: >= 16.x
174
+ - **OpenCode**: Installed and configured
175
+ - **Terminal**: Unicode and 256 colors support (Windows Terminal, iTerm2, etc.)
215
176
 
216
177
  ---
217
178
 
218
179
  ## Troubleshooting
219
180
 
220
- ### Lỗi "command not found: ocam"
181
+ ### "command not found: ocam"
221
182
 
222
183
  ```bash
223
- # Nếu chưa npm link, chạy:
224
- cd /path/to/opencode-account-manager
225
- npm link
226
-
227
- # Hoặc chạy trực tiếp:
228
- node /path/to/opencode-account-manager/dist/cli.js
184
+ npm install -g opencode-account-manager
229
185
  ```
230
186
 
231
- ### Lỗi "Cannot find module"
187
+ ### "Plugin accounts file not found"
188
+
189
+ Login at least one account first:
232
190
 
233
191
  ```bash
234
- # Rebuild project
235
- npm run build
192
+ opencode auth login
236
193
  ```
237
194
 
238
- ### Lỗi "Plugin accounts file not found"
195
+ ### "Cannot find module"
196
+
197
+ Reinstall the package:
239
198
 
240
- Cần đăng nhập ít nhất 1 account trong OpenCode trước:
241
199
  ```bash
242
- opencode auth login
200
+ npm uninstall -g opencode-account-manager
201
+ npm install -g opencode-account-manager
243
202
  ```
244
203
 
245
204
  ---
246
205
 
247
206
  ## Documentation
248
207
 
249
- - [ROADMAP.md](./docs/ROADMAP.md) - Lịch sử phiên bản và kế hoạch
250
- - [BLUEPRINT.md](./docs/BLUEPRINT.md) - Kiến trúc kỹ thuật
208
+ - [ROADMAP.md](./docs/ROADMAP.md) - Version history and plans
209
+ - [BLUEPRINT.md](./docs/BLUEPRINT.md) - Technical architecture
251
210
 
252
211
  ---
253
212
 
254
213
  ## Contributing
255
214
 
256
- 1. Fork repo
257
- 2. Tạo branch: `git checkout -b feature/ten-tinh-nang`
258
- 3. Commit: `git commit -m "feat: mô tả"`
259
- 4. Push: `git push origin feature/ten-tinh-nang`
260
- 5. Tạo Pull Request
215
+ 1. Fork the repo
216
+ 2. Create branch: `git checkout -b feature/your-feature`
217
+ 3. Commit: `git commit -m "feat: description"`
218
+ 4. Push: `git push origin feature/your-feature`
219
+ 5. Create Pull Request
261
220
 
262
221
  ---
263
222
 
264
223
  ## License
265
224
 
266
- MIT
225
+ MIT License. See [LICENSE](./LICENSE) for details.
226
+
227
+ ---
228
+
229
+ ## Credits
230
+
231
+ - [OpenCode](https://opencode.ai) - The AI coding assistant this tool is built for
232
+ - [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) - Optional plugin for Google OAuth authentication
package/README_VI.md ADDED
@@ -0,0 +1,232 @@
1
+ # OpenCode Account Manager (OCAM)
2
+
3
+ <div align="center">
4
+ <h3>TUI Dashboard quản lý tài khoản OpenCode</h3>
5
+ <p>Quản lý providers, MCP servers, và plugin accounts trong một giao diện.</p>
6
+
7
+ <p>
8
+ <a href="https://www.npmjs.com/package/opencode-account-manager">
9
+ <img src="https://img.shields.io/npm/v/opencode-account-manager.svg" alt="npm version">
10
+ </a>
11
+ <a href="https://www.npmjs.com/package/opencode-account-manager">
12
+ <img src="https://img.shields.io/npm/dw/opencode-account-manager.svg" alt="npm downloads">
13
+ </a>
14
+ <a href="https://github.com/d-init-d/opencode-account-manager/blob/main/LICENSE">
15
+ <img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License">
16
+ </a>
17
+ </p>
18
+
19
+ <p>
20
+ <a href="./README.md">English</a> |
21
+ <strong>Tiếng Việt</strong>
22
+ </p>
23
+ </div>
24
+
25
+ ---
26
+
27
+ ## Tính năng
28
+
29
+ - **Xem Providers**: Hiển thị tất cả AI providers (Google, Ollama, Anthropic, etc.) với số lượng models
30
+ - **MCP Servers**: Xem trạng thái bật/tắt của các MCP servers
31
+ - **Quản lý Accounts**: Quản lý các tài khoản Google đang kết nối với OpenCode
32
+ - Trạng thái rate limit theo từng model (claude, gemini)
33
+ - Bật/Tắt/Xóa accounts
34
+ - **Export mã hóa**: Mã hóa AES-256-GCM với mật khẩu bảo vệ
35
+ - **Import đa định dạng**: Hỗ trợ file `.ocam` mã hóa, JSON thuần, và file export từ Antigravity Manager
36
+
37
+ ---
38
+
39
+ ## Cài đặt
40
+
41
+ ### Cách A: Nhờ AI cài giúp
42
+
43
+ Paste đoạn này vào bất kỳ AI agent nào (Claude Code, OpenCode, Cursor, etc.):
44
+
45
+ ```
46
+ Cài đặt opencode-account-manager từ npm, sau đó chạy "ocam" để kiểm tra.
47
+ Repository: https://github.com/d-init-d/opencode-account-manager
48
+ ```
49
+
50
+ ### Cách B: Cài từ npm
51
+
52
+ ```bash
53
+ npm install -g opencode-account-manager
54
+ ```
55
+
56
+ ### Cách C: Cài từ GitHub
57
+
58
+ ```bash
59
+ npm install -g github:d-init-d/opencode-account-manager
60
+ ```
61
+
62
+ ### Kiểm tra cài đặt
63
+
64
+ ```bash
65
+ ocam --version
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Dành cho AI Agents
71
+
72
+ ### Hướng dẫn từng bước
73
+
74
+ 1. Chạy `npm install -g opencode-account-manager` để cài global
75
+ 2. Chạy `ocam` để mở TUI dashboard
76
+ 3. Dashboard sẽ tự động đọc config OpenCode tại `~/.config/opencode/opencode.json`
77
+
78
+ ### Xác minh
79
+
80
+ ```bash
81
+ ocam --version
82
+ # Kết quả mong đợi: 0.4.2
83
+ ```
84
+
85
+ ---
86
+
87
+ ## Sử dụng
88
+
89
+ ### Mở Dashboard
90
+
91
+ ```bash
92
+ ocam
93
+ # hoặc
94
+ opencode-account-manager
95
+ ```
96
+
97
+ ### Các lệnh CLI
98
+
99
+ ```bash
100
+ # Liệt kê accounts
101
+ ocam list
102
+
103
+ # Export accounts
104
+ ocam export -o backup.json
105
+
106
+ # Import accounts
107
+ ocam import backup.json
108
+
109
+ # Import từ thư mục Antigravity Manager
110
+ ocam import-am
111
+
112
+ # Trợ giúp
113
+ ocam --help
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Phím tắt
119
+
120
+ ### Dashboard chính
121
+
122
+ | Phím | Chức năng |
123
+ |------|-----------|
124
+ | `Tab` | Chuyển section (Providers → Accounts → MCP) |
125
+ | `R` | Làm mới dữ liệu |
126
+ | `E` | Export accounts |
127
+ | `I` | Import accounts |
128
+ | `A` | Import từ Antigravity Manager |
129
+ | `S` | Vào chế độ chọn |
130
+ | `Q` | Thoát |
131
+
132
+ ### Chế độ chọn (Accounts)
133
+
134
+ | Phím | Chức năng |
135
+ |------|-----------|
136
+ | `↑/↓` | Di chuyển |
137
+ | `Space` | Chọn/bỏ chọn |
138
+ | `A` | Chọn tất cả |
139
+ | `N` | Bỏ chọn tất cả |
140
+ | `E` | Bật các account đã chọn |
141
+ | `D` | Tắt các account đã chọn |
142
+ | `X` | Export các account đã chọn |
143
+ | `DEL` | Xóa các account đã chọn |
144
+ | `Esc` | Thoát chế độ chọn |
145
+
146
+ ---
147
+
148
+ ## Định dạng Import được hỗ trợ
149
+
150
+ | Định dạng | Đuôi file | Mô tả |
151
+ |-----------|-----------|-------|
152
+ | Mã hóa | `.ocam` | Mã hóa AES-256-GCM, cần mật khẩu |
153
+ | Portable | `.json` | Export thuần từ OpenCode Account Manager |
154
+ | AM Export | `.json` | Export từ app Antigravity Manager `[{email, refresh_token}]` |
155
+ | Plugin Native | `.json` | Định dạng `antigravity-accounts.json` |
156
+
157
+ ---
158
+
159
+ ## Đường dẫn cấu hình
160
+
161
+ | File | Windows | Linux/Mac |
162
+ |------|---------|-----------|
163
+ | Config OpenCode | `~/.config/opencode/opencode.json` | `~/.config/opencode/opencode.json` |
164
+ | Plugin accounts | `%APPDATA%/opencode/antigravity-accounts.json` | `~/.config/opencode/antigravity-accounts.json` |
165
+ | Cài đặt OCAM | `%APPDATA%/opencode/ocam-config.json` | `~/.config/opencode/ocam-config.json` |
166
+
167
+ > **Lưu ý**: `~` trên Windows là thư mục home của user (ví dụ: `C:\Users\TenBan`)
168
+
169
+ ---
170
+
171
+ ## Yêu cầu hệ thống
172
+
173
+ - **Node.js**: >= 16.x
174
+ - **OpenCode**: Đã cài đặt và cấu hình
175
+ - **Terminal**: Hỗ trợ Unicode và 256 màu (Windows Terminal, iTerm2, etc.)
176
+
177
+ ---
178
+
179
+ ## Xử lý lỗi
180
+
181
+ ### "command not found: ocam"
182
+
183
+ ```bash
184
+ npm install -g opencode-account-manager
185
+ ```
186
+
187
+ ### "Plugin accounts file not found"
188
+
189
+ Đăng nhập ít nhất một tài khoản trước:
190
+
191
+ ```bash
192
+ opencode auth login
193
+ ```
194
+
195
+ ### "Cannot find module"
196
+
197
+ Cài lại package:
198
+
199
+ ```bash
200
+ npm uninstall -g opencode-account-manager
201
+ npm install -g opencode-account-manager
202
+ ```
203
+
204
+ ---
205
+
206
+ ## Tài liệu
207
+
208
+ - [ROADMAP.md](./docs/ROADMAP.md) - Lịch sử phiên bản và kế hoạch
209
+ - [BLUEPRINT.md](./docs/BLUEPRINT.md) - Kiến trúc kỹ thuật
210
+
211
+ ---
212
+
213
+ ## Đóng góp
214
+
215
+ 1. Fork repo
216
+ 2. Tạo branch: `git checkout -b feature/ten-tinh-nang`
217
+ 3. Commit: `git commit -m "feat: mo-ta"`
218
+ 4. Push: `git push origin feature/ten-tinh-nang`
219
+ 5. Tạo Pull Request
220
+
221
+ ---
222
+
223
+ ## Giấy phép
224
+
225
+ MIT License. Xem [LICENSE](./LICENSE) để biết chi tiết.
226
+
227
+ ---
228
+
229
+ ## Credits
230
+
231
+ - [OpenCode](https://opencode.ai) - AI coding assistant mà công cụ này được xây dựng cho
232
+ - [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) - Plugin tùy chọn để xác thực Google OAuth
package/dist/cli.js CHANGED
@@ -35,7 +35,7 @@ const program = new commander_1.Command();
35
35
  program
36
36
  .name("ocam")
37
37
  .description("OpenCode Account Manager - TUI dashboard and CLI for managing accounts")
38
- .version("0.4.2");
38
+ .version("0.4.4");
39
39
  // Default command - show dashboard
40
40
  program
41
41
  .command("dashboard", { isDefault: true })
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/tui/Dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AA8BnD,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,cAAc,qBAiYvD"}
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/tui/Dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AA8BnD,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,cAAc,qBA4avD"}
@@ -93,8 +93,8 @@ function Dashboard({ pluginPath }) {
93
93
  (0, ink_1.useInput)((input, key) => {
94
94
  if (activeModal !== "none")
95
95
  return;
96
- // Section switching with Tab
97
- if (key.tab) {
96
+ // Section switching with Tab or Left/Right arrows
97
+ if (key.tab || key.rightArrow) {
98
98
  setActiveSection(prev => {
99
99
  if (prev === "providers")
100
100
  return "accounts";
@@ -102,31 +102,76 @@ function Dashboard({ pluginPath }) {
102
102
  return "mcp";
103
103
  return "providers";
104
104
  });
105
+ if (!key.rightArrow || activeSection !== "accounts") {
106
+ setSelectMode(false);
107
+ }
108
+ return;
109
+ }
110
+ if (key.leftArrow) {
111
+ setActiveSection(prev => {
112
+ if (prev === "mcp")
113
+ return "accounts";
114
+ if (prev === "accounts")
115
+ return "providers";
116
+ return "mcp";
117
+ });
118
+ if (activeSection !== "accounts") {
119
+ setSelectMode(false);
120
+ }
121
+ return;
122
+ }
123
+ // Number keys for section switching
124
+ if (input === "1") {
125
+ setActiveSection("providers");
105
126
  setSelectMode(false);
106
127
  return;
107
128
  }
108
- // Only handle list navigation in accounts section with select mode
109
- if (activeSection !== "accounts" || !selectMode)
129
+ if (input === "2") {
130
+ setActiveSection("accounts");
110
131
  return;
111
- if (key.upArrow) {
112
- setSelectedIndex(prev => Math.max(0, prev - 1));
113
132
  }
114
- if (key.downArrow) {
115
- setSelectedIndex(prev => Math.min(accounts.length - 1, prev + 1));
133
+ if (input === "3") {
134
+ setActiveSection("mcp");
135
+ setSelectMode(false);
136
+ return;
116
137
  }
117
- if (input === " ") {
118
- const email = accounts[selectedIndex]?.email;
119
- if (email) {
120
- setCheckedEmails(prev => {
121
- const next = new Set(prev);
122
- if (next.has(email)) {
123
- next.delete(email);
124
- }
125
- else {
126
- next.add(email);
127
- }
128
- return next;
129
- });
138
+ // Up/Down arrows for list navigation in accounts section
139
+ if (activeSection === "accounts") {
140
+ if (key.upArrow) {
141
+ if (!selectMode) {
142
+ setSelectMode(true);
143
+ setSelectedIndex(0);
144
+ }
145
+ else {
146
+ setSelectedIndex(prev => Math.max(0, prev - 1));
147
+ }
148
+ return;
149
+ }
150
+ if (key.downArrow) {
151
+ if (!selectMode) {
152
+ setSelectMode(true);
153
+ setSelectedIndex(0);
154
+ }
155
+ else {
156
+ setSelectedIndex(prev => Math.min(accounts.length - 1, prev + 1));
157
+ }
158
+ return;
159
+ }
160
+ // Space to toggle selection in select mode
161
+ if (selectMode && input === " ") {
162
+ const email = accounts[selectedIndex]?.email;
163
+ if (email) {
164
+ setCheckedEmails(prev => {
165
+ const next = new Set(prev);
166
+ if (next.has(email)) {
167
+ next.delete(email);
168
+ }
169
+ else {
170
+ next.add(email);
171
+ }
172
+ return next;
173
+ });
174
+ }
130
175
  }
131
176
  }
132
177
  });
@@ -312,7 +357,7 @@ function Dashboard({ pluginPath }) {
312
357
  react_1.default.createElement(ink_1.Text, { color: activeSection === "accounts" ? "cyan" : "gray", bold: activeSection === "accounts" }, "[2] Accounts"),
313
358
  react_1.default.createElement(ink_1.Text, null, " "),
314
359
  react_1.default.createElement(ink_1.Text, { color: activeSection === "mcp" ? "cyan" : "gray", bold: activeSection === "mcp" }, "[3] MCP"),
315
- react_1.default.createElement(ink_1.Text, { dimColor: true }, " (Tab to switch)")),
360
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " (\u2190\u2192 or Tab to switch, \u2191\u2193 in Accounts)")),
316
361
  react_1.default.createElement(components_1.SectionBox, { title: "PROVIDERS", borderColor: activeSection === "providers" ? "cyan" : "gray", collapsed: activeSection !== "providers" }, opencodeInfo && react_1.default.createElement(components_1.ProviderList, { providers: opencodeInfo.providers })),
317
362
  react_1.default.createElement(components_1.SectionBox, { title: `PLUGIN ACCOUNTS (${opencodeInfo?.plugins[0]?.name || "antigravity-auth"})`, borderColor: activeSection === "accounts" ? (selectMode ? "yellow" : "cyan") : "gray", collapsed: activeSection !== "accounts" },
318
363
  react_1.default.createElement(components_1.AccountList, { accounts: accounts, selectedIndex: selectMode ? selectedIndex : -1, checkedEmails: checkedEmails, showCheckbox: selectMode })),
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/tui/Dashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/tui/Dashboard.tsx"],"names":[],"mappings":"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"}
@@ -73,7 +73,7 @@ function MenuBar({ onSelect, selectMode = false, selectedCount = 0 }) {
73
73
  react_1.default.createElement(ink_1.Text, { color: "yellow", bold: true },
74
74
  "SELECT MODE - ",
75
75
  selectedCount,
76
- " selected | \u2191\u2193 navigate | SPACE toggle | ENTER confirm"))),
76
+ " selected | \u2191\u2193 navigate | SPACE toggle | \u2190\u2192 switch section"))),
77
77
  react_1.default.createElement(ink_1.Box, { borderStyle: "single", borderColor: selectMode ? "yellow" : "gray", paddingX: 1, justifyContent: "space-between" }, visibleItems.map((item) => (react_1.default.createElement(ink_1.Text, { key: item.action + item.key, dimColor: true },
78
78
  "[",
79
79
  item.key,
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/tui/components/Menu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/tui/components/Menu.tsx"],"names":[],"mappings":"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"}
package/docs/ROADMAP.md CHANGED
@@ -23,14 +23,36 @@
23
23
  - [x] Tab navigation between sections (Providers, Accounts, MCP)
24
24
  - [x] Collapsible sections
25
25
 
26
- ### v0.4.0 - Encrypted Export/Import (Current)
27
- - [ ] **Encrypted Export** - AES-256-GCM with password protection
28
- - [ ] **Plain JSON Export** - Keep original format as option
29
- - [ ] **File Browser UI** - Browse folders, quick locations, paste path
30
- - [ ] **Import from File** - Select .ocam or .json files
31
- - [ ] **Password Input** - Masked input with confirmation
32
- - [ ] **Remember Preferences** - Last export/import folder saved
33
- - [ ] **Overwrite Mode** - Replace existing accounts on import
26
+ ### v0.4.0 - Encrypted Export/Import
27
+ - [x] **Encrypted Export** - AES-256-GCM with password protection
28
+ - [x] **Plain JSON Export** - Keep original format as option
29
+ - [x] **File Browser UI** - Browse folders, quick locations, paste path
30
+ - [x] **Import from File** - Select .ocam or .json files
31
+ - [x] **Password Input** - Masked input with confirmation
32
+ - [x] **Remember Preferences** - Last export/import folder saved
33
+ - [x] **Overwrite Mode** - Replace existing accounts on import
34
+
35
+ ### v0.4.1 - npm Publish
36
+ - [x] Published to npm registry
37
+ - [x] Global install via `npm install -g opencode-account-manager`
38
+ - [x] Commands: `ocam`, `opencode-account-manager`
39
+
40
+ ### v0.4.2 - Antigravity Manager Export Support
41
+ - [x] **AM Export Import** - Support `[{email, refresh_token}]` format
42
+ - [x] **Auto-detect Format** - Recognize encrypted, portable, AM export formats
43
+ - [x] **Format Preview** - Show detected format in import preview
44
+ - [x] **Professional README** - Updated documentation with LLM installation guide
45
+
46
+ ### v0.4.3 - Keyboard Navigation Fix
47
+ - [x] **Number Keys** - Press 1/2/3 to switch sections (Providers/Accounts/MCP)
48
+ - [x] **Tab Navigation** - Fixed Tab key to cycle through sections
49
+ - [x] **UI Indicator** - Show `[1] Providers [2] Accounts [3] MCP` in header
50
+
51
+ ### v0.4.4 - Arrow Key Navigation (Current)
52
+ - [x] **←→ Arrow Keys** - Switch between sections (Providers ↔ Accounts ↔ MCP)
53
+ - [x] **↑↓ Arrow Keys** - Navigate account list, auto-enters select mode
54
+ - [x] **Space Key** - Toggle selection in select mode
55
+ - [x] **Updated Help Text** - Show arrow key hints in UI
34
56
 
35
57
  ---
36
58
 
@@ -62,8 +84,8 @@
62
84
  - [ ] Model usage statistics
63
85
 
64
86
  ### v1.0.0 - Stable Release
87
+ - [x] npm publish
65
88
  - [ ] Full documentation
66
- - [ ] npm publish
67
89
  - [ ] Windows/Mac/Linux installers
68
90
  - [ ] Integration tests
69
91
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-account-manager",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "TUI Dashboard for OpenCode - View providers, MCP servers, and plugin accounts",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {
package/src/cli.ts CHANGED
@@ -41,7 +41,7 @@ const program = new Command();
41
41
  program
42
42
  .name("ocam")
43
43
  .description("OpenCode Account Manager - TUI dashboard and CLI for managing accounts")
44
- .version("0.4.2");
44
+ .version("0.4.4");
45
45
 
46
46
  // Default command - show dashboard
47
47
  program
@@ -97,38 +97,81 @@ export function Dashboard({ pluginPath }: DashboardProps) {
97
97
  useInput((input, key) => {
98
98
  if (activeModal !== "none") return;
99
99
 
100
- // Section switching with Tab
101
- if (key.tab) {
100
+ // Section switching with Tab or Left/Right arrows
101
+ if (key.tab || key.rightArrow) {
102
102
  setActiveSection(prev => {
103
103
  if (prev === "providers") return "accounts";
104
104
  if (prev === "accounts") return "mcp";
105
105
  return "providers";
106
106
  });
107
- setSelectMode(false);
107
+ if (!key.rightArrow || activeSection !== "accounts") {
108
+ setSelectMode(false);
109
+ }
108
110
  return;
109
111
  }
110
112
 
111
- // Only handle list navigation in accounts section with select mode
112
- if (activeSection !== "accounts" || !selectMode) return;
113
+ if (key.leftArrow) {
114
+ setActiveSection(prev => {
115
+ if (prev === "mcp") return "accounts";
116
+ if (prev === "accounts") return "providers";
117
+ return "mcp";
118
+ });
119
+ if (activeSection !== "accounts") {
120
+ setSelectMode(false);
121
+ }
122
+ return;
123
+ }
113
124
 
114
- if (key.upArrow) {
115
- setSelectedIndex(prev => Math.max(0, prev - 1));
125
+ // Number keys for section switching
126
+ if (input === "1") {
127
+ setActiveSection("providers");
128
+ setSelectMode(false);
129
+ return;
116
130
  }
117
- if (key.downArrow) {
118
- setSelectedIndex(prev => Math.min(accounts.length - 1, prev + 1));
131
+ if (input === "2") {
132
+ setActiveSection("accounts");
133
+ return;
119
134
  }
120
- if (input === " ") {
121
- const email = accounts[selectedIndex]?.email;
122
- if (email) {
123
- setCheckedEmails(prev => {
124
- const next = new Set(prev);
125
- if (next.has(email)) {
126
- next.delete(email);
127
- } else {
128
- next.add(email);
129
- }
130
- return next;
131
- });
135
+ if (input === "3") {
136
+ setActiveSection("mcp");
137
+ setSelectMode(false);
138
+ return;
139
+ }
140
+
141
+ // Up/Down arrows for list navigation in accounts section
142
+ if (activeSection === "accounts") {
143
+ if (key.upArrow) {
144
+ if (!selectMode) {
145
+ setSelectMode(true);
146
+ setSelectedIndex(0);
147
+ } else {
148
+ setSelectedIndex(prev => Math.max(0, prev - 1));
149
+ }
150
+ return;
151
+ }
152
+ if (key.downArrow) {
153
+ if (!selectMode) {
154
+ setSelectMode(true);
155
+ setSelectedIndex(0);
156
+ } else {
157
+ setSelectedIndex(prev => Math.min(accounts.length - 1, prev + 1));
158
+ }
159
+ return;
160
+ }
161
+ // Space to toggle selection in select mode
162
+ if (selectMode && input === " ") {
163
+ const email = accounts[selectedIndex]?.email;
164
+ if (email) {
165
+ setCheckedEmails(prev => {
166
+ const next = new Set(prev);
167
+ if (next.has(email)) {
168
+ next.delete(email);
169
+ } else {
170
+ next.add(email);
171
+ }
172
+ return next;
173
+ });
174
+ }
132
175
  }
133
176
  }
134
177
  });
@@ -371,7 +414,7 @@ export function Dashboard({ pluginPath }: DashboardProps) {
371
414
  <Text color={activeSection === "mcp" ? "cyan" : "gray"} bold={activeSection === "mcp"}>
372
415
  [3] MCP
373
416
  </Text>
374
- <Text dimColor> (Tab to switch)</Text>
417
+ <Text dimColor> (←→ or Tab to switch, ↑↓ in Accounts)</Text>
375
418
  </Box>
376
419
 
377
420
  {/* Providers Section */}
@@ -78,14 +78,14 @@ export function MenuBar({ onSelect, selectMode = false, selectedCount = 0 }: Men
78
78
  });
79
79
 
80
80
  return (
81
- <Box flexDirection="column">
82
- {selectMode && (
83
- <Box marginBottom={1} paddingX={1}>
84
- <Text color="yellow" bold>
85
- SELECT MODE - {selectedCount} selected | ↑↓ navigate | SPACE toggle | ENTER confirm
86
- </Text>
87
- </Box>
88
- )}
81
+ <Box flexDirection="column">
82
+ {selectMode && (
83
+ <Box marginBottom={1} paddingX={1}>
84
+ <Text color="yellow" bold>
85
+ SELECT MODE - {selectedCount} selected | ↑↓ navigate | SPACE toggle | ←→ switch section
86
+ </Text>
87
+ </Box>
88
+ )}
89
89
  <Box
90
90
  borderStyle="single"
91
91
  borderColor={selectMode ? "yellow" : "gray"}