opencode-account-manager 0.6.5 → 0.6.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardView.d.ts","sourceRoot":"","sources":["../../../src/tui/components/DashboardView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIhE,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACrD;AA+KD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,kBAAkB,qBA8L3F"}
1
+ {"version":3,"file":"DashboardView.d.ts","sourceRoot":"","sources":["../../../src/tui/components/DashboardView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIhE,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACrD;AA+KD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,kBAAkB,qBA+O3F"}
@@ -146,12 +146,39 @@ function DashboardView({ accounts, selectedIndex, healthResults }) {
146
146
  react_1.default.createElement(ink_1.Text, { dimColor: true }, "No accounts configured."),
147
147
  react_1.default.createElement(ink_1.Text, { dimColor: true }, "Press P to open actions and import accounts.")));
148
148
  }
149
- const displayModels = getDisplayModels(accounts);
149
+ const { stdout } = (0, ink_1.useStdout)();
150
+ const terminalColumns = stdout?.columns ?? 120;
151
+ const terminalRows = stdout?.rows ?? 30;
152
+ const allModels = getDisplayModels(accounts);
150
153
  const modelColumnWidth = 20;
151
- const emailWidth = 28;
152
154
  const healthWidth = 2;
153
155
  const lastUsedWidth = 14;
154
- const totalWidth = 3 + emailWidth + healthWidth + displayModels.length * modelColumnWidth + lastUsedWidth;
156
+ const scrollbarWidth = 1;
157
+ const innerWidth = Math.max(60, terminalColumns - 6);
158
+ const baseWidth = 3 + healthWidth + lastUsedWidth + scrollbarWidth;
159
+ const maxEmailWidth = Math.min(28, Math.max(12, innerWidth - baseWidth - modelColumnWidth));
160
+ const emailWidth = maxEmailWidth;
161
+ const remainingWidth = innerWidth - baseWidth - emailWidth;
162
+ const maxModels = Math.max(1, Math.floor(remainingWidth / modelColumnWidth));
163
+ const displayModels = allModels.slice(0, maxModels);
164
+ const totalWidth = baseWidth + emailWidth + displayModels.length * modelColumnWidth;
165
+ const maxRowsFromTerminal = Math.max(8, terminalRows - 18);
166
+ const visibleRows = Math.max(8, Math.min(maxRowsFromTerminal, accounts.length || 8));
167
+ const maxOffset = Math.max(0, accounts.length - visibleRows);
168
+ const scrollOffset = Math.max(0, Math.min(selectedIndex - Math.floor(visibleRows / 2), maxOffset));
169
+ const visibleAccounts = accounts.slice(scrollOffset, scrollOffset + visibleRows);
170
+ const paddedAccounts = [
171
+ ...visibleAccounts,
172
+ ...Array.from({ length: Math.max(0, visibleRows - visibleAccounts.length) }, () => undefined),
173
+ ];
174
+ const showScrollbar = accounts.length > visibleRows;
175
+ const thumbSize = showScrollbar
176
+ ? Math.max(1, Math.round((visibleRows * visibleRows) / accounts.length))
177
+ : 0;
178
+ const maxThumbTop = Math.max(0, visibleRows - thumbSize);
179
+ const thumbTop = showScrollbar && maxOffset > 0
180
+ ? Math.round((scrollOffset / maxOffset) * maxThumbTop)
181
+ : 0;
155
182
  const healthCounts = healthResults
156
183
  ? accounts.reduce((acc, account) => {
157
184
  const status = healthResults[(0, config_store_1.normalizeHealthKey)(account.email)]?.status || "not_checked";
@@ -183,25 +210,35 @@ function DashboardView({ accounts, selectedIndex, healthResults }) {
183
210
  displayModels.map(model => (react_1.default.createElement(ink_1.Box, { key: model.key, width: modelColumnWidth },
184
211
  react_1.default.createElement(ink_1.Text, { dimColor: true, bold: true }, model.shortName)))),
185
212
  react_1.default.createElement(ink_1.Box, { width: lastUsedWidth },
186
- react_1.default.createElement(ink_1.Text, { dimColor: true, bold: true }, "LAST USED"))),
213
+ react_1.default.createElement(ink_1.Text, { dimColor: true, bold: true }, "LAST USED")),
214
+ react_1.default.createElement(ink_1.Box, { width: scrollbarWidth },
215
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "|"))),
187
216
  react_1.default.createElement(ink_1.Box, { paddingX: 1 },
188
217
  react_1.default.createElement(ink_1.Text, { dimColor: true }, "─".repeat(totalWidth))),
189
- accounts.map((account, index) => {
190
- const isSelected = index === selectedIndex;
191
- const isDisabled = account.enabled === false;
192
- // Truncate email
193
- const email = account.email.length > emailWidth - 3
194
- ? account.email.slice(0, emailWidth - 6) + "..."
195
- : account.email;
196
- const health = healthResults?.[(0, config_store_1.normalizeHealthKey)(account.email)];
197
- return (react_1.default.createElement(ink_1.Box, { key: account.email, paddingX: 1 },
218
+ paddedAccounts.map((account, index) => {
219
+ const rowIndex = scrollOffset + index;
220
+ const isSelected = account ? rowIndex === selectedIndex : false;
221
+ const isDisabled = account ? account.enabled === false : false;
222
+ const email = account
223
+ ? (account.email.length > emailWidth - 3
224
+ ? account.email.slice(0, emailWidth - 6) + "..."
225
+ : account.email)
226
+ : "";
227
+ const health = account ? healthResults?.[(0, config_store_1.normalizeHealthKey)(account.email)] : undefined;
228
+ const scrollbarChar = showScrollbar
229
+ ? (index >= thumbTop && index < thumbTop + thumbSize ? "#" : "|")
230
+ : " ";
231
+ return (react_1.default.createElement(ink_1.Box, { key: account ? account.email : `empty-${index}`, paddingX: 1 },
198
232
  react_1.default.createElement(ink_1.Box, { width: 3 },
199
233
  react_1.default.createElement(ink_1.Text, { bold: isSelected }, isSelected ? "› " : " ")),
200
234
  react_1.default.createElement(ink_1.Box, { width: emailWidth },
201
- react_1.default.createElement(ink_1.Text, { bold: isSelected, dimColor: isDisabled }, email)),
202
- react_1.default.createElement(ink_1.Box, { width: healthWidth },
203
- react_1.default.createElement(HealthBadge_1.HealthBadge, { result: health, compact: true })),
235
+ react_1.default.createElement(ink_1.Text, { bold: isSelected, dimColor: isDisabled || !account }, email)),
236
+ react_1.default.createElement(ink_1.Box, { width: healthWidth }, account ? react_1.default.createElement(HealthBadge_1.HealthBadge, { result: health, compact: true }) : react_1.default.createElement(ink_1.Text, { dimColor: true }, " ")),
204
237
  displayModels.map(model => {
238
+ if (!account) {
239
+ return (react_1.default.createElement(ink_1.Box, { key: model.key, width: modelColumnWidth },
240
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " ".repeat(modelColumnWidth - 1))));
241
+ }
205
242
  const status = getModelStatus(account, model.key);
206
243
  if (isDisabled) {
207
244
  return (react_1.default.createElement(ink_1.Box, { key: model.key, width: modelColumnWidth },
@@ -210,7 +247,9 @@ function DashboardView({ accounts, selectedIndex, healthResults }) {
210
247
  return (react_1.default.createElement(ModelCell, { key: model.key, status: status, width: modelColumnWidth }));
211
248
  }),
212
249
  react_1.default.createElement(ink_1.Box, { width: lastUsedWidth },
213
- react_1.default.createElement(ink_1.Text, { dimColor: true }, formatLastUsed(account.lastUsed)))));
250
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, account ? formatLastUsed(account.lastUsed) : "")),
251
+ react_1.default.createElement(ink_1.Box, { width: scrollbarWidth },
252
+ react_1.default.createElement(ink_1.Text, { dimColor: showScrollbar }, scrollbarChar))));
214
253
  }),
215
254
  react_1.default.createElement(ink_1.Box, { paddingX: 1, marginTop: 1 },
216
255
  react_1.default.createElement(ink_1.Text, { dimColor: true }, "─".repeat(totalWidth))),
@@ -256,12 +295,12 @@ function DashboardView({ accounts, selectedIndex, healthResults }) {
256
295
  react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2588\u2588\u2588\u2588 100%"),
257
296
  react_1.default.createElement(ink_1.Text, { dimColor: true }, " \u2591\u2591\u2591\u2591 limited "),
258
297
  react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2500\u2500 disabled "),
259
- react_1.default.createElement(ink_1.Text, { color: "green" }, "\u2713"),
298
+ react_1.default.createElement(ink_1.Text, { color: "green" }, "v"),
260
299
  react_1.default.createElement(ink_1.Text, { dimColor: true }, " ok "),
261
- react_1.default.createElement(ink_1.Text, { color: "yellow" }, "\u26A0"),
300
+ react_1.default.createElement(ink_1.Text, { color: "yellow" }, "!"),
262
301
  react_1.default.createElement(ink_1.Text, { dimColor: true }, " verify "),
263
- react_1.default.createElement(ink_1.Text, { color: "red" }, "\u2718"),
302
+ react_1.default.createElement(ink_1.Text, { color: "red" }, "x"),
264
303
  react_1.default.createElement(ink_1.Text, { dimColor: true }, " error "),
265
- react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u00B7 unchecked"))));
304
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, ". unchecked"))));
266
305
  }
267
306
  //# sourceMappingURL=DashboardView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardView.js","sourceRoot":"","sources":["../../../src/tui/components/DashboardView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DashboardView.js","sourceRoot":"","sources":["../../../src/tui/components/DashboardView.tsx"],"names":[],"mappings":"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"}
@@ -19,15 +19,15 @@ const HEALTH_COLORS = {
19
19
  not_configured: "gray",
20
20
  };
21
21
  const HEALTH_ICONS = {
22
- ok: "",
23
- verification_required: "",
24
- revoked: "",
25
- disabled: "",
26
- deleted: "",
27
- password_changed: "",
28
- network_error: "",
22
+ ok: "v",
23
+ verification_required: "!",
24
+ revoked: "x",
25
+ disabled: "-",
26
+ deleted: "x",
27
+ password_changed: "!",
28
+ network_error: "~",
29
29
  unknown_error: "?",
30
- not_checked: "·",
30
+ not_checked: ".",
31
31
  not_configured: "-",
32
32
  };
33
33
  const HEALTH_LABELS = {
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "opencode-account-manager",
3
- "version": "0.6.5",
3
+ "version": "0.6.6",
4
4
  "description": "TUI Dashboard for OpenCode - View providers, MCP servers, and plugin accounts",
5
5
  "main": "dist/cli.js",
6
- "bin": {
7
- "ocam": "dist/cli.js",
8
- "opencode-account-manager": "dist/cli.js"
9
- },
6
+ "bin": {
7
+ "ocam": "dist/cli.js",
8
+ "opencode-account-manager": "dist/cli.js"
9
+ },
10
10
  "scripts": {
11
11
  "build": "npx tsc",
12
12
  "dev": "npx tsc -w",
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { Box, Text } from "ink";
2
+ import { Box, Text, useStdout } from "ink";
3
3
  import { Account, AccountHealthResult } from "../../core/types";
4
4
  import { normalizeHealthKey } from "../../core/config-store";
5
5
  import { HealthBadge } from "./HealthBadge";
@@ -193,12 +193,43 @@ export function DashboardView({ accounts, selectedIndex, healthResults }: Dashbo
193
193
  );
194
194
  }
195
195
 
196
- const displayModels = getDisplayModels(accounts);
196
+ const { stdout } = useStdout();
197
+ const terminalColumns = stdout?.columns ?? 120;
198
+ const terminalRows = stdout?.rows ?? 30;
199
+
200
+ const allModels = getDisplayModels(accounts);
197
201
  const modelColumnWidth = 20;
198
- const emailWidth = 28;
199
202
  const healthWidth = 2;
200
203
  const lastUsedWidth = 14;
201
- const totalWidth = 3 + emailWidth + healthWidth + displayModels.length * modelColumnWidth + lastUsedWidth;
204
+ const scrollbarWidth = 1;
205
+
206
+ const innerWidth = Math.max(60, terminalColumns - 6);
207
+ const baseWidth = 3 + healthWidth + lastUsedWidth + scrollbarWidth;
208
+ const maxEmailWidth = Math.min(28, Math.max(12, innerWidth - baseWidth - modelColumnWidth));
209
+ const emailWidth = maxEmailWidth;
210
+ const remainingWidth = innerWidth - baseWidth - emailWidth;
211
+ const maxModels = Math.max(1, Math.floor(remainingWidth / modelColumnWidth));
212
+ const displayModels = allModels.slice(0, maxModels);
213
+ const totalWidth = baseWidth + emailWidth + displayModels.length * modelColumnWidth;
214
+
215
+ const maxRowsFromTerminal = Math.max(8, terminalRows - 18);
216
+ const visibleRows = Math.max(8, Math.min(maxRowsFromTerminal, accounts.length || 8));
217
+ const maxOffset = Math.max(0, accounts.length - visibleRows);
218
+ const scrollOffset = Math.max(0, Math.min(selectedIndex - Math.floor(visibleRows / 2), maxOffset));
219
+ const visibleAccounts = accounts.slice(scrollOffset, scrollOffset + visibleRows);
220
+ const paddedAccounts: Array<Account | undefined> = [
221
+ ...visibleAccounts,
222
+ ...Array.from({ length: Math.max(0, visibleRows - visibleAccounts.length) }, () => undefined),
223
+ ];
224
+
225
+ const showScrollbar = accounts.length > visibleRows;
226
+ const thumbSize = showScrollbar
227
+ ? Math.max(1, Math.round((visibleRows * visibleRows) / accounts.length))
228
+ : 0;
229
+ const maxThumbTop = Math.max(0, visibleRows - thumbSize);
230
+ const thumbTop = showScrollbar && maxOffset > 0
231
+ ? Math.round((scrollOffset / maxOffset) * maxThumbTop)
232
+ : 0;
202
233
 
203
234
  const healthCounts = healthResults
204
235
  ? accounts.reduce(
@@ -244,6 +275,9 @@ export function DashboardView({ accounts, selectedIndex, healthResults }: Dashbo
244
275
  <Box width={lastUsedWidth}>
245
276
  <Text dimColor bold>LAST USED</Text>
246
277
  </Box>
278
+ <Box width={scrollbarWidth}>
279
+ <Text dimColor>|</Text>
280
+ </Box>
247
281
  </Box>
248
282
 
249
283
  {/* Separator */}
@@ -252,19 +286,24 @@ export function DashboardView({ accounts, selectedIndex, healthResults }: Dashbo
252
286
  </Box>
253
287
 
254
288
  {/* Account rows */}
255
- {accounts.map((account, index) => {
256
- const isSelected = index === selectedIndex;
257
- const isDisabled = account.enabled === false;
258
-
259
- // Truncate email
260
- const email = account.email.length > emailWidth - 3
261
- ? account.email.slice(0, emailWidth - 6) + "..."
262
- : account.email;
289
+ {paddedAccounts.map((account, index) => {
290
+ const rowIndex = scrollOffset + index;
291
+ const isSelected = account ? rowIndex === selectedIndex : false;
292
+ const isDisabled = account ? account.enabled === false : false;
263
293
 
264
- const health = healthResults?.[normalizeHealthKey(account.email)];
294
+ const email = account
295
+ ? (account.email.length > emailWidth - 3
296
+ ? account.email.slice(0, emailWidth - 6) + "..."
297
+ : account.email)
298
+ : "";
299
+
300
+ const health = account ? healthResults?.[normalizeHealthKey(account.email)] : undefined;
301
+ const scrollbarChar = showScrollbar
302
+ ? (index >= thumbTop && index < thumbTop + thumbSize ? "#" : "|")
303
+ : " ";
265
304
 
266
305
  return (
267
- <Box key={account.email} paddingX={1}>
306
+ <Box key={account ? account.email : `empty-${index}`} paddingX={1}>
268
307
  {/* Selection cursor */}
269
308
  <Box width={3}>
270
309
  <Text bold={isSelected}>
@@ -276,7 +315,7 @@ export function DashboardView({ accounts, selectedIndex, healthResults }: Dashbo
276
315
  <Box width={emailWidth}>
277
316
  <Text
278
317
  bold={isSelected}
279
- dimColor={isDisabled}
318
+ dimColor={isDisabled || !account}
280
319
  >
281
320
  {email}
282
321
  </Text>
@@ -284,36 +323,46 @@ export function DashboardView({ accounts, selectedIndex, healthResults }: Dashbo
284
323
 
285
324
  {/* Health indicator */}
286
325
  <Box width={healthWidth}>
287
- <HealthBadge result={health} compact={true} />
326
+ {account ? <HealthBadge result={health} compact={true} /> : <Text dimColor> </Text>}
288
327
  </Box>
289
328
 
290
329
  {/* Model columns */}
330
+ {displayModels.map(model => {
331
+ if (!account) {
332
+ return (
333
+ <Box key={model.key} width={modelColumnWidth}>
334
+ <Text dimColor>{" ".repeat(modelColumnWidth - 1)}</Text>
335
+ </Box>
336
+ );
337
+ }
291
338
 
292
- {displayModels.map(model => {
293
- const status = getModelStatus(account, model.key);
294
-
295
- if (isDisabled) {
296
- return (
297
- <Box key={model.key} width={modelColumnWidth}>
298
- <Text dimColor>── disabled ──</Text>
299
- </Box>
300
- );
301
- }
302
-
303
- return (
304
- <ModelCell
305
- key={model.key}
306
- status={status}
307
- width={modelColumnWidth}
308
- />
309
- );
310
- })}
311
- <Box width={lastUsedWidth}>
312
- <Text dimColor>{formatLastUsed(account.lastUsed)}</Text>
313
- </Box>
314
- </Box>
315
- );
316
- })}
339
+ const status = getModelStatus(account, model.key);
340
+
341
+ if (isDisabled) {
342
+ return (
343
+ <Box key={model.key} width={modelColumnWidth}>
344
+ <Text dimColor>── disabled ──</Text>
345
+ </Box>
346
+ );
347
+ }
348
+
349
+ return (
350
+ <ModelCell
351
+ key={model.key}
352
+ status={status}
353
+ width={modelColumnWidth}
354
+ />
355
+ );
356
+ })}
357
+ <Box width={lastUsedWidth}>
358
+ <Text dimColor>{account ? formatLastUsed(account.lastUsed) : ""}</Text>
359
+ </Box>
360
+ <Box width={scrollbarWidth}>
361
+ <Text dimColor={showScrollbar}>{scrollbarChar}</Text>
362
+ </Box>
363
+ </Box>
364
+ );
365
+ })}
317
366
 
318
367
  {/* Summary */}
319
368
  <Box paddingX={1} marginTop={1}>
@@ -366,10 +415,10 @@ export function DashboardView({ accounts, selectedIndex, healthResults }: Dashbo
366
415
  <Text dimColor>████ 100%</Text>
367
416
  <Text dimColor> ░░░░ limited </Text>
368
417
  <Text dimColor>── disabled </Text>
369
- <Text color="green">✓</Text><Text dimColor> ok </Text>
370
- <Text color="yellow">⚠</Text><Text dimColor> verify </Text>
371
- <Text color="red">✘</Text><Text dimColor> error </Text>
372
- <Text dimColor unchecked</Text>
418
+ <Text color="green">v</Text><Text dimColor> ok </Text>
419
+ <Text color="yellow">!</Text><Text dimColor> verify </Text>
420
+ <Text color="red">x</Text><Text dimColor> error </Text>
421
+ <Text dimColor>. unchecked</Text>
373
422
  </Box>
374
423
  </Box>
375
424
  );
@@ -21,15 +21,15 @@ const HEALTH_COLORS: Record<AccountHealthStatus, string> = {
21
21
  };
22
22
 
23
23
  const HEALTH_ICONS: Record<AccountHealthStatus, string> = {
24
- ok: "",
25
- verification_required: "",
26
- revoked: "",
27
- disabled: "",
28
- deleted: "",
29
- password_changed: "",
30
- network_error: "",
24
+ ok: "v",
25
+ verification_required: "!",
26
+ revoked: "x",
27
+ disabled: "-",
28
+ deleted: "x",
29
+ password_changed: "!",
30
+ network_error: "~",
31
31
  unknown_error: "?",
32
- not_checked: "·",
32
+ not_checked: ".",
33
33
  not_configured: "-",
34
34
  };
35
35