opencode-account-manager 0.4.1
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/LICENSE +21 -0
- package/README.md +266 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +183 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/accounts.d.ts +19 -0
- package/dist/core/accounts.d.ts.map +1 -0
- package/dist/core/accounts.js +181 -0
- package/dist/core/accounts.js.map +1 -0
- package/dist/core/config-store.d.ts +48 -0
- package/dist/core/config-store.d.ts.map +1 -0
- package/dist/core/config-store.js +206 -0
- package/dist/core/config-store.js.map +1 -0
- package/dist/core/crypto.d.ts +40 -0
- package/dist/core/crypto.d.ts.map +1 -0
- package/dist/core/crypto.js +172 -0
- package/dist/core/crypto.js.map +1 -0
- package/dist/core/importers/amJson.d.ts +17 -0
- package/dist/core/importers/amJson.d.ts.map +1 -0
- package/dist/core/importers/amJson.js +131 -0
- package/dist/core/importers/amJson.js.map +1 -0
- package/dist/core/opencode-config.d.ts +92 -0
- package/dist/core/opencode-config.d.ts.map +1 -0
- package/dist/core/opencode-config.js +148 -0
- package/dist/core/opencode-config.js.map +1 -0
- package/dist/core/paths.d.ts +5 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +38 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/types.d.ts +74 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +30 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +5 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +35 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/tui/Dashboard.d.ts +7 -0
- package/dist/tui/Dashboard.d.ts.map +1 -0
- package/dist/tui/Dashboard.js +331 -0
- package/dist/tui/Dashboard.js.map +1 -0
- package/dist/tui/components/AccountList.d.ts +18 -0
- package/dist/tui/components/AccountList.d.ts.map +1 -0
- package/dist/tui/components/AccountList.js +92 -0
- package/dist/tui/components/AccountList.js.map +1 -0
- package/dist/tui/components/Box.d.ts +11 -0
- package/dist/tui/components/Box.d.ts.map +1 -0
- package/dist/tui/components/Box.js +15 -0
- package/dist/tui/components/Box.js.map +1 -0
- package/dist/tui/components/ExportModal.d.ts +10 -0
- package/dist/tui/components/ExportModal.d.ts.map +1 -0
- package/dist/tui/components/ExportModal.js +192 -0
- package/dist/tui/components/ExportModal.js.map +1 -0
- package/dist/tui/components/FileBrowser.d.ts +12 -0
- package/dist/tui/components/FileBrowser.d.ts.map +1 -0
- package/dist/tui/components/FileBrowser.js +349 -0
- package/dist/tui/components/FileBrowser.js.map +1 -0
- package/dist/tui/components/Header.d.ts +8 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +20 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/ImportModal.d.ts +10 -0
- package/dist/tui/components/ImportModal.d.ts.map +1 -0
- package/dist/tui/components/ImportModal.js +215 -0
- package/dist/tui/components/ImportModal.js.map +1 -0
- package/dist/tui/components/McpServerList.d.ts +8 -0
- package/dist/tui/components/McpServerList.d.ts.map +1 -0
- package/dist/tui/components/McpServerList.js +35 -0
- package/dist/tui/components/McpServerList.js.map +1 -0
- package/dist/tui/components/Menu.d.ts +10 -0
- package/dist/tui/components/Menu.d.ts.map +1 -0
- package/dist/tui/components/Menu.js +83 -0
- package/dist/tui/components/Menu.js.map +1 -0
- package/dist/tui/components/PasswordInput.d.ts +12 -0
- package/dist/tui/components/PasswordInput.d.ts.map +1 -0
- package/dist/tui/components/PasswordInput.js +130 -0
- package/dist/tui/components/PasswordInput.js.map +1 -0
- package/dist/tui/components/ProviderList.d.ts +8 -0
- package/dist/tui/components/ProviderList.d.ts.map +1 -0
- package/dist/tui/components/ProviderList.js +37 -0
- package/dist/tui/components/ProviderList.js.map +1 -0
- package/dist/tui/components/SectionBox.d.ts +10 -0
- package/dist/tui/components/SectionBox.d.ts.map +1 -0
- package/dist/tui/components/SectionBox.js +16 -0
- package/dist/tui/components/SectionBox.js.map +1 -0
- package/dist/tui/components/StatsRow.d.ts +13 -0
- package/dist/tui/components/StatsRow.d.ts.map +1 -0
- package/dist/tui/components/StatsRow.js +18 -0
- package/dist/tui/components/StatsRow.js.map +1 -0
- package/dist/tui/components/StatusBadge.d.ts +8 -0
- package/dist/tui/components/StatusBadge.d.ts.map +1 -0
- package/dist/tui/components/StatusBadge.js +30 -0
- package/dist/tui/components/StatusBadge.js.map +1 -0
- package/dist/tui/components/index.d.ts +14 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +32 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/index.d.ts +5 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +13 -0
- package/dist/tui/index.js.map +1 -0
- package/docs/BLUEPRINT.md +476 -0
- package/docs/ROADMAP.md +74 -0
- package/package.json +38 -0
- package/src/cli.ts +207 -0
- package/src/core/accounts.ts +215 -0
- package/src/core/config-store.ts +212 -0
- package/src/core/crypto.ts +162 -0
- package/src/core/importers/amJson.ts +185 -0
- package/src/core/opencode-config.ts +217 -0
- package/src/core/paths.ts +32 -0
- package/src/core/types.ts +118 -0
- package/src/core/utils.ts +28 -0
- package/src/tui/Dashboard.tsx +431 -0
- package/src/tui/components/AccountList.tsx +155 -0
- package/src/tui/components/Box.tsx +37 -0
- package/src/tui/components/ExportModal.tsx +255 -0
- package/src/tui/components/FileBrowser.tsx +393 -0
- package/src/tui/components/Header.tsx +26 -0
- package/src/tui/components/ImportModal.tsx +288 -0
- package/src/tui/components/McpServerList.tsx +67 -0
- package/src/tui/components/Menu.tsx +103 -0
- package/src/tui/components/PasswordInput.tsx +159 -0
- package/src/tui/components/ProviderList.tsx +61 -0
- package/src/tui/components/SectionBox.tsx +35 -0
- package/src/tui/components/StatsRow.tsx +33 -0
- package/src/tui/components/StatusBadge.tsx +33 -0
- package/src/tui/components/index.ts +13 -0
- package/src/tui/index.tsx +11 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Dashboard = Dashboard;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const ink_1 = require("ink");
|
|
39
|
+
const components_1 = require("./components");
|
|
40
|
+
const accounts_1 = require("../core/accounts");
|
|
41
|
+
const paths_1 = require("../core/paths");
|
|
42
|
+
const amJson_1 = require("../core/importers/amJson");
|
|
43
|
+
const opencode_config_1 = require("../core/opencode-config");
|
|
44
|
+
function safeReadPluginFile(pluginPath) {
|
|
45
|
+
try {
|
|
46
|
+
return (0, accounts_1.readPluginAccountsFile)(pluginPath);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return (0, accounts_1.createEmptyPluginAccountsFile)();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function Dashboard({ pluginPath }) {
|
|
53
|
+
const { exit } = (0, ink_1.useApp)();
|
|
54
|
+
const resolvedPath = (0, paths_1.getPluginAccountsPath)(pluginPath);
|
|
55
|
+
// OpenCode config state
|
|
56
|
+
const [opencodeInfo, setOpencodeInfo] = (0, react_1.useState)(null);
|
|
57
|
+
// Plugin accounts state
|
|
58
|
+
const [accounts, setAccounts] = (0, react_1.useState)([]);
|
|
59
|
+
const [summary, setSummary] = (0, react_1.useState)({ total: 0, available: 0, limited: 0 });
|
|
60
|
+
const [message, setMessage] = (0, react_1.useState)(null);
|
|
61
|
+
// UI state
|
|
62
|
+
const [activeSection, setActiveSection] = (0, react_1.useState)("providers");
|
|
63
|
+
const [selectMode, setSelectMode] = (0, react_1.useState)(false);
|
|
64
|
+
const [selectedIndex, setSelectedIndex] = (0, react_1.useState)(0);
|
|
65
|
+
const [checkedEmails, setCheckedEmails] = (0, react_1.useState)(new Set());
|
|
66
|
+
// Modal state
|
|
67
|
+
const [activeModal, setActiveModal] = (0, react_1.useState)("none");
|
|
68
|
+
const showMessage = (msg, duration = 3000) => {
|
|
69
|
+
setMessage(msg);
|
|
70
|
+
setTimeout(() => setMessage(null), duration);
|
|
71
|
+
};
|
|
72
|
+
const loadOpencodeConfig = () => {
|
|
73
|
+
const info = (0, opencode_config_1.parseOpencodeInfo)();
|
|
74
|
+
setOpencodeInfo(info);
|
|
75
|
+
};
|
|
76
|
+
const loadAccounts = () => {
|
|
77
|
+
const file = safeReadPluginFile(resolvedPath);
|
|
78
|
+
setAccounts(file.accounts);
|
|
79
|
+
setSummary((0, accounts_1.summarizeAccounts)(file.accounts));
|
|
80
|
+
setCheckedEmails(new Set());
|
|
81
|
+
setSelectedIndex(0);
|
|
82
|
+
};
|
|
83
|
+
const refresh = () => {
|
|
84
|
+
loadOpencodeConfig();
|
|
85
|
+
loadAccounts();
|
|
86
|
+
showMessage("Refreshed", 2000);
|
|
87
|
+
};
|
|
88
|
+
(0, react_1.useEffect)(() => {
|
|
89
|
+
loadOpencodeConfig();
|
|
90
|
+
loadAccounts();
|
|
91
|
+
}, []);
|
|
92
|
+
// Keyboard navigation (only when no modal is open)
|
|
93
|
+
(0, ink_1.useInput)((input, key) => {
|
|
94
|
+
if (activeModal !== "none")
|
|
95
|
+
return;
|
|
96
|
+
// Section switching with Tab
|
|
97
|
+
if (key.tab) {
|
|
98
|
+
setActiveSection(prev => {
|
|
99
|
+
if (prev === "providers")
|
|
100
|
+
return "accounts";
|
|
101
|
+
if (prev === "accounts")
|
|
102
|
+
return "mcp";
|
|
103
|
+
return "providers";
|
|
104
|
+
});
|
|
105
|
+
setSelectMode(false);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Only handle list navigation in accounts section with select mode
|
|
109
|
+
if (activeSection !== "accounts" || !selectMode)
|
|
110
|
+
return;
|
|
111
|
+
if (key.upArrow) {
|
|
112
|
+
setSelectedIndex(prev => Math.max(0, prev - 1));
|
|
113
|
+
}
|
|
114
|
+
if (key.downArrow) {
|
|
115
|
+
setSelectedIndex(prev => Math.min(accounts.length - 1, prev + 1));
|
|
116
|
+
}
|
|
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
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// Export completion handler
|
|
134
|
+
const handleExportComplete = (filePath) => {
|
|
135
|
+
setActiveModal("none");
|
|
136
|
+
showMessage(`Exported to ${filePath}`, 4000);
|
|
137
|
+
};
|
|
138
|
+
// Import completion handler
|
|
139
|
+
const handleImportComplete = (importedAccounts, newCount, overwrittenCount) => {
|
|
140
|
+
// Merge imported accounts with existing (overwrite mode)
|
|
141
|
+
const file = safeReadPluginFile(resolvedPath);
|
|
142
|
+
const merged = (0, accounts_1.mergeAccounts)(file, importedAccounts, "merge");
|
|
143
|
+
(0, accounts_1.writePluginAccountsFile)(pluginPath, merged);
|
|
144
|
+
setActiveModal("none");
|
|
145
|
+
loadAccounts();
|
|
146
|
+
showMessage(`Imported: ${newCount} new, ${overwrittenCount} updated`, 4000);
|
|
147
|
+
};
|
|
148
|
+
const handleImportAM = () => {
|
|
149
|
+
const amPath = (0, paths_1.getAmFolderPath)();
|
|
150
|
+
const result = (0, amJson_1.importFromAmFolder)(amPath);
|
|
151
|
+
if (result.errors.length > 0) {
|
|
152
|
+
showMessage(`Error: ${result.errors[0]}`, 5000);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (result.accounts.length === 0) {
|
|
156
|
+
showMessage(`No accounts found in AM (${result.skipped.length} skipped)`, 4000);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const existingFile = safeReadPluginFile(resolvedPath);
|
|
160
|
+
const merged = (0, accounts_1.mergeAccounts)(existingFile, result.accounts, "merge");
|
|
161
|
+
(0, accounts_1.writePluginAccountsFile)(pluginPath, merged);
|
|
162
|
+
const added = merged.accounts.length - existingFile.accounts.length;
|
|
163
|
+
showMessage(`Imported from AM: ${result.accounts.length} found, ${added} new. Total: ${merged.accounts.length}`, 5000);
|
|
164
|
+
loadAccounts();
|
|
165
|
+
};
|
|
166
|
+
const handleEnableSelected = () => {
|
|
167
|
+
if (checkedEmails.size === 0) {
|
|
168
|
+
showMessage("No accounts selected", 2000);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const file = safeReadPluginFile(resolvedPath);
|
|
172
|
+
let count = 0;
|
|
173
|
+
file.accounts = file.accounts.map(acc => {
|
|
174
|
+
if (checkedEmails.has(acc.email)) {
|
|
175
|
+
count++;
|
|
176
|
+
return { ...acc, enabled: true };
|
|
177
|
+
}
|
|
178
|
+
return acc;
|
|
179
|
+
});
|
|
180
|
+
(0, accounts_1.writePluginAccountsFile)(pluginPath, file);
|
|
181
|
+
showMessage(`Enabled ${count} accounts`, 3000);
|
|
182
|
+
loadAccounts();
|
|
183
|
+
setSelectMode(false);
|
|
184
|
+
};
|
|
185
|
+
const handleDisableSelected = () => {
|
|
186
|
+
if (checkedEmails.size === 0) {
|
|
187
|
+
showMessage("No accounts selected", 2000);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const file = safeReadPluginFile(resolvedPath);
|
|
191
|
+
let count = 0;
|
|
192
|
+
file.accounts = file.accounts.map(acc => {
|
|
193
|
+
if (checkedEmails.has(acc.email)) {
|
|
194
|
+
count++;
|
|
195
|
+
return { ...acc, enabled: false };
|
|
196
|
+
}
|
|
197
|
+
return acc;
|
|
198
|
+
});
|
|
199
|
+
(0, accounts_1.writePluginAccountsFile)(pluginPath, file);
|
|
200
|
+
showMessage(`Disabled ${count} accounts`, 3000);
|
|
201
|
+
loadAccounts();
|
|
202
|
+
setSelectMode(false);
|
|
203
|
+
};
|
|
204
|
+
const handleDeleteSelected = () => {
|
|
205
|
+
if (checkedEmails.size === 0) {
|
|
206
|
+
showMessage("No accounts selected", 2000);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const file = safeReadPluginFile(resolvedPath);
|
|
210
|
+
const beforeCount = file.accounts.length;
|
|
211
|
+
file.accounts = file.accounts.filter(acc => !checkedEmails.has(acc.email));
|
|
212
|
+
const deletedCount = beforeCount - file.accounts.length;
|
|
213
|
+
(0, accounts_1.writePluginAccountsFile)(pluginPath, file);
|
|
214
|
+
showMessage(`Deleted ${deletedCount} accounts`, 3000);
|
|
215
|
+
loadAccounts();
|
|
216
|
+
setSelectMode(false);
|
|
217
|
+
};
|
|
218
|
+
const handleSelectAll = () => {
|
|
219
|
+
setCheckedEmails(new Set(accounts.map(a => a.email)));
|
|
220
|
+
};
|
|
221
|
+
const handleSelectNone = () => {
|
|
222
|
+
setCheckedEmails(new Set());
|
|
223
|
+
};
|
|
224
|
+
const handleAction = (action) => {
|
|
225
|
+
// Don't handle actions when modal is open
|
|
226
|
+
if (activeModal !== "none")
|
|
227
|
+
return;
|
|
228
|
+
switch (action) {
|
|
229
|
+
case "refresh":
|
|
230
|
+
refresh();
|
|
231
|
+
break;
|
|
232
|
+
case "export":
|
|
233
|
+
setActiveModal("export");
|
|
234
|
+
break;
|
|
235
|
+
case "import-file":
|
|
236
|
+
setActiveModal("import");
|
|
237
|
+
break;
|
|
238
|
+
case "import-am":
|
|
239
|
+
handleImportAM();
|
|
240
|
+
break;
|
|
241
|
+
case "toggle-select-mode":
|
|
242
|
+
if (activeSection === "accounts") {
|
|
243
|
+
setSelectMode(prev => !prev);
|
|
244
|
+
setCheckedEmails(new Set());
|
|
245
|
+
setSelectedIndex(0);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
showMessage("Switch to Accounts section first (Tab)", 2000);
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
case "select-all":
|
|
252
|
+
handleSelectAll();
|
|
253
|
+
break;
|
|
254
|
+
case "select-none":
|
|
255
|
+
handleSelectNone();
|
|
256
|
+
break;
|
|
257
|
+
case "enable-selected":
|
|
258
|
+
handleEnableSelected();
|
|
259
|
+
break;
|
|
260
|
+
case "disable-selected":
|
|
261
|
+
handleDisableSelected();
|
|
262
|
+
break;
|
|
263
|
+
case "delete-selected":
|
|
264
|
+
handleDeleteSelected();
|
|
265
|
+
break;
|
|
266
|
+
case "export-selected":
|
|
267
|
+
if (checkedEmails.size === 0) {
|
|
268
|
+
showMessage("No accounts selected", 2000);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
setActiveModal("export-selected");
|
|
272
|
+
}
|
|
273
|
+
break;
|
|
274
|
+
case "quit":
|
|
275
|
+
exit();
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
// Calculate stats
|
|
280
|
+
const configSummary = opencodeInfo ? (0, opencode_config_1.getConfigSummary)(opencodeInfo) : null;
|
|
281
|
+
// Get accounts to export (all or selected)
|
|
282
|
+
const getAccountsForExport = () => {
|
|
283
|
+
if (activeModal === "export-selected") {
|
|
284
|
+
return accounts.filter(acc => checkedEmails.has(acc.email));
|
|
285
|
+
}
|
|
286
|
+
return accounts;
|
|
287
|
+
};
|
|
288
|
+
// If modal is open, render only the modal
|
|
289
|
+
if (activeModal === "export" || activeModal === "export-selected") {
|
|
290
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", padding: 1 },
|
|
291
|
+
react_1.default.createElement(components_1.ExportModal, { accounts: getAccountsForExport(), onComplete: handleExportComplete, onCancel: () => setActiveModal("none") })));
|
|
292
|
+
}
|
|
293
|
+
if (activeModal === "import") {
|
|
294
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", padding: 1 },
|
|
295
|
+
react_1.default.createElement(components_1.ImportModal, { existingAccounts: accounts, onComplete: handleImportComplete, onCancel: () => setActiveModal("none") })));
|
|
296
|
+
}
|
|
297
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", padding: 1 },
|
|
298
|
+
react_1.default.createElement(components_1.Header, { title: "OpenCode Account Manager", subtitle: "Dashboard" }),
|
|
299
|
+
react_1.default.createElement(components_1.StatsRow, { stats: [
|
|
300
|
+
{ label: "Providers", value: configSummary?.providers || 0, color: "cyan" },
|
|
301
|
+
{ label: "Models", value: configSummary?.models || 0, color: "yellow" },
|
|
302
|
+
{ label: "MCP On", value: configSummary?.mcpEnabled || 0, color: "green" },
|
|
303
|
+
{ label: "MCP Off", value: configSummary?.mcpDisabled || 0, color: "red" },
|
|
304
|
+
{ label: "Accounts", value: summary.total, color: "white" },
|
|
305
|
+
{ label: "Available", value: summary.available, color: "green" },
|
|
306
|
+
{ label: "Limited", value: summary.limited, color: "yellow" },
|
|
307
|
+
] }),
|
|
308
|
+
react_1.default.createElement(ink_1.Box, { marginY: 1 },
|
|
309
|
+
react_1.default.createElement(ink_1.Text, { dimColor: true }, "Sections: "),
|
|
310
|
+
react_1.default.createElement(ink_1.Text, { color: activeSection === "providers" ? "cyan" : "gray", bold: activeSection === "providers" }, "[1] Providers"),
|
|
311
|
+
react_1.default.createElement(ink_1.Text, null, " "),
|
|
312
|
+
react_1.default.createElement(ink_1.Text, { color: activeSection === "accounts" ? "cyan" : "gray", bold: activeSection === "accounts" }, "[2] Accounts"),
|
|
313
|
+
react_1.default.createElement(ink_1.Text, null, " "),
|
|
314
|
+
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)")),
|
|
316
|
+
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
|
+
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
|
+
react_1.default.createElement(components_1.AccountList, { accounts: accounts, selectedIndex: selectMode ? selectedIndex : -1, checkedEmails: checkedEmails, showCheckbox: selectMode })),
|
|
319
|
+
react_1.default.createElement(components_1.SectionBox, { title: "MCP SERVERS", borderColor: activeSection === "mcp" ? "cyan" : "gray", collapsed: activeSection !== "mcp" }, opencodeInfo && react_1.default.createElement(components_1.McpServerList, { servers: opencodeInfo.mcpServers })),
|
|
320
|
+
react_1.default.createElement(ink_1.Box, { marginTop: 1 },
|
|
321
|
+
react_1.default.createElement(ink_1.Text, { dimColor: true },
|
|
322
|
+
"Config: ",
|
|
323
|
+
opencodeInfo?.configPath || "N/A")),
|
|
324
|
+
react_1.default.createElement(ink_1.Box, { marginTop: 1 },
|
|
325
|
+
react_1.default.createElement(components_1.MenuBar, { onSelect: handleAction, selectMode: selectMode, selectedCount: checkedEmails.size })),
|
|
326
|
+
message && (react_1.default.createElement(ink_1.Box, { marginTop: 1 },
|
|
327
|
+
react_1.default.createElement(ink_1.Text, { color: "green" },
|
|
328
|
+
"\u2192 ",
|
|
329
|
+
message)))));
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=Dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/tui/Dashboard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Account } from "../../core/types";
|
|
3
|
+
interface AccountRowProps {
|
|
4
|
+
account: Account;
|
|
5
|
+
isSelected?: boolean;
|
|
6
|
+
isChecked?: boolean;
|
|
7
|
+
showCheckbox?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function AccountRow({ account, isSelected, isChecked, showCheckbox }: AccountRowProps): React.JSX.Element;
|
|
10
|
+
interface AccountListProps {
|
|
11
|
+
accounts: Account[];
|
|
12
|
+
selectedIndex?: number;
|
|
13
|
+
checkedEmails?: Set<string>;
|
|
14
|
+
showCheckbox?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function AccountList({ accounts, selectedIndex, checkedEmails, showCheckbox }: AccountListProps): React.JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=AccountList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/AccountList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA2CD,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,eAAe,qBA8C3F;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAkB,EAClB,aAAyB,EACzB,YAAoB,EACrB,EAAE,gBAAgB,qBAyClB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AccountRow = AccountRow;
|
|
7
|
+
exports.AccountList = AccountList;
|
|
8
|
+
const react_1 = __importDefault(require("react"));
|
|
9
|
+
const ink_1 = require("ink");
|
|
10
|
+
const StatusBadge_1 = require("./StatusBadge");
|
|
11
|
+
function formatDuration(ms) {
|
|
12
|
+
if (ms <= 0)
|
|
13
|
+
return "-";
|
|
14
|
+
const minutes = Math.floor(ms / 60000);
|
|
15
|
+
const hours = Math.floor(minutes / 60);
|
|
16
|
+
const days = Math.floor(hours / 24);
|
|
17
|
+
if (days > 0)
|
|
18
|
+
return `${days}d ${hours % 24}h`;
|
|
19
|
+
if (hours > 0)
|
|
20
|
+
return `${hours}h ${minutes % 60}m`;
|
|
21
|
+
return `${minutes}m`;
|
|
22
|
+
}
|
|
23
|
+
function getAccountStatus(account) {
|
|
24
|
+
if (account.enabled === false) {
|
|
25
|
+
return { status: "disabled", resetIn: "-", limitDetails: [] };
|
|
26
|
+
}
|
|
27
|
+
const resets = account.rateLimitResetTimes || {};
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
const limitDetails = [];
|
|
30
|
+
// Build detailed limit info for each model
|
|
31
|
+
for (const [model, resetTime] of Object.entries(resets)) {
|
|
32
|
+
if (resetTime > now) {
|
|
33
|
+
limitDetails.push(`${model}: ${formatDuration(resetTime - now)}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (limitDetails.length === 0) {
|
|
37
|
+
return { status: "available", resetIn: "-", limitDetails: [] };
|
|
38
|
+
}
|
|
39
|
+
const nextReset = Math.min(...Object.values(resets).filter((v) => v > now));
|
|
40
|
+
return {
|
|
41
|
+
status: "limited",
|
|
42
|
+
resetIn: formatDuration(nextReset - now),
|
|
43
|
+
limitDetails,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function AccountRow({ account, isSelected, isChecked, showCheckbox }) {
|
|
47
|
+
const { status, resetIn, limitDetails } = getAccountStatus(account);
|
|
48
|
+
const project = account.projectId || account.managedProjectId || "-";
|
|
49
|
+
const checkbox = showCheckbox
|
|
50
|
+
? (isChecked ? "[x]" : "[ ]")
|
|
51
|
+
: "";
|
|
52
|
+
const cursor = isSelected ? ">" : " ";
|
|
53
|
+
const emailColor = status === "disabled" ? "gray" : (isSelected ? "white" : "cyan");
|
|
54
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
|
|
55
|
+
react_1.default.createElement(ink_1.Box, { flexDirection: "row", paddingX: 1 },
|
|
56
|
+
react_1.default.createElement(ink_1.Box, { width: 2 },
|
|
57
|
+
react_1.default.createElement(ink_1.Text, { color: isSelected ? "yellow" : "white" }, cursor)),
|
|
58
|
+
showCheckbox && (react_1.default.createElement(ink_1.Box, { width: 4 },
|
|
59
|
+
react_1.default.createElement(ink_1.Text, { color: isChecked ? "green" : "gray" }, checkbox))),
|
|
60
|
+
react_1.default.createElement(ink_1.Box, { width: 28 },
|
|
61
|
+
react_1.default.createElement(ink_1.Text, { color: emailColor, strikethrough: status === "disabled" }, account.email)),
|
|
62
|
+
react_1.default.createElement(ink_1.Box, { width: 18 },
|
|
63
|
+
react_1.default.createElement(ink_1.Text, { dimColor: true }, project.slice(0, 16))),
|
|
64
|
+
react_1.default.createElement(ink_1.Box, { width: 12 },
|
|
65
|
+
react_1.default.createElement(StatusBadge_1.StatusBadge, { status: status })),
|
|
66
|
+
react_1.default.createElement(ink_1.Box, { width: 10 },
|
|
67
|
+
react_1.default.createElement(ink_1.Text, { dimColor: true }, resetIn))),
|
|
68
|
+
status === "limited" && limitDetails.length > 0 && (react_1.default.createElement(ink_1.Box, { paddingLeft: showCheckbox ? 8 : 4 },
|
|
69
|
+
react_1.default.createElement(ink_1.Text, { color: "gray" },
|
|
70
|
+
"\u2514\u2500 ",
|
|
71
|
+
limitDetails.join(" | "))))));
|
|
72
|
+
}
|
|
73
|
+
function AccountList({ accounts, selectedIndex = -1, checkedEmails = new Set(), showCheckbox = false }) {
|
|
74
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
|
|
75
|
+
react_1.default.createElement(ink_1.Box, { flexDirection: "row", paddingX: 1, marginBottom: 1 },
|
|
76
|
+
react_1.default.createElement(ink_1.Box, { width: 2 },
|
|
77
|
+
react_1.default.createElement(ink_1.Text, { dimColor: true }, " ")),
|
|
78
|
+
showCheckbox && (react_1.default.createElement(ink_1.Box, { width: 4 },
|
|
79
|
+
react_1.default.createElement(ink_1.Text, { bold: true, dimColor: true }, "SEL"))),
|
|
80
|
+
react_1.default.createElement(ink_1.Box, { width: 28 },
|
|
81
|
+
react_1.default.createElement(ink_1.Text, { bold: true, dimColor: true }, "EMAIL")),
|
|
82
|
+
react_1.default.createElement(ink_1.Box, { width: 18 },
|
|
83
|
+
react_1.default.createElement(ink_1.Text, { bold: true, dimColor: true }, "PROJECT")),
|
|
84
|
+
react_1.default.createElement(ink_1.Box, { width: 12 },
|
|
85
|
+
react_1.default.createElement(ink_1.Text, { bold: true, dimColor: true }, "STATUS")),
|
|
86
|
+
react_1.default.createElement(ink_1.Box, { width: 10 },
|
|
87
|
+
react_1.default.createElement(ink_1.Text, { bold: true, dimColor: true }, "RESET IN"))),
|
|
88
|
+
accounts.map((account, index) => (react_1.default.createElement(AccountRow, { key: account.email, account: account, isSelected: index === selectedIndex, isChecked: checkedEmails.has(account.email), showCheckbox: showCheckbox }))),
|
|
89
|
+
accounts.length === 0 && (react_1.default.createElement(ink_1.Box, { paddingX: 1 },
|
|
90
|
+
react_1.default.createElement(ink_1.Text, { dimColor: true }, "No accounts found")))));
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=AccountList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountList.js","sourceRoot":"","sources":["../../../src/tui/components/AccountList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface BoxProps {
|
|
3
|
+
title?: string;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
borderColor?: string;
|
|
6
|
+
width?: number | string;
|
|
7
|
+
padding?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function Box({ title, children, borderColor, width, padding, }: BoxProps): React.JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=Box.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Box.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Box.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,WAAoB,EACpB,KAAK,EACL,OAAW,GACZ,EAAE,QAAQ,qBAmBV"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Box = Box;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const ink_1 = require("ink");
|
|
9
|
+
function Box({ title, children, borderColor = "cyan", width, padding = 1, }) {
|
|
10
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: borderColor, width: width, paddingX: padding },
|
|
11
|
+
title && (react_1.default.createElement(ink_1.Box, { marginBottom: 1 },
|
|
12
|
+
react_1.default.createElement(ink_1.Text, { bold: true, color: borderColor }, title))),
|
|
13
|
+
children));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=Box.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Box.js","sourceRoot":"","sources":["../../../src/tui/components/Box.tsx"],"names":[],"mappings":";;;;;AAWA,kBAyBC;AApCD,kDAA0B;AAC1B,6BAA0C;AAU1C,SAAgB,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,MAAM,EACpB,KAAK,EACL,OAAO,GAAG,CAAC,GACF;IACT,OAAO,CACL,8BAAC,SAAM,IACL,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,OAAO;QAEhB,KAAK,IAAI,CACR,8BAAC,SAAM,IAAC,YAAY,EAAE,CAAC;YACrB,8BAAC,UAAI,IAAC,IAAI,QAAC,KAAK,EAAE,WAAW,IAC1B,KAAK,CACD,CACA,CACV;QACA,QAAQ,CACF,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Account } from "../../core/types";
|
|
3
|
+
interface ExportModalProps {
|
|
4
|
+
accounts: Account[];
|
|
5
|
+
onComplete: (filePath: string) => void;
|
|
6
|
+
onCancel: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function ExportModal({ accounts, onComplete, onCancel }: ExportModalProps): React.JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ExportModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportModal.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ExportModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,EACL,OAAO,EAIR,MAAM,kBAAkB,CAAC;AAQ1B,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAID,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,gBAAgB,qBAoO/E"}
|