opencode-account-manager 0.5.8 → 0.6.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.
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/tui/Dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AA+BnD,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,cAAc,qBAuhBvD"}
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/tui/Dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AA+BnD,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,cAAc,qBAqhBvD"}
@@ -399,36 +399,36 @@ function Dashboard({ pluginPath }) {
399
399
  return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", padding: 1 },
400
400
  react_1.default.createElement(components_1.Header, { title: "OpenCode Account Manager", subtitle: activeTab === "dashboard" ? "Dashboard" : "Settings" }),
401
401
  react_1.default.createElement(ink_1.Box, { marginBottom: 1 },
402
- react_1.default.createElement(ink_1.Text, { backgroundColor: activeTab === "dashboard" ? "cyan" : undefined, color: activeTab === "dashboard" ? "black" : "gray", bold: activeTab === "dashboard" }, " DASHBOARD "),
402
+ react_1.default.createElement(ink_1.Text, { inverse: activeTab === "dashboard", bold: activeTab === "dashboard" }, " DASHBOARD "),
403
403
  react_1.default.createElement(ink_1.Text, null, " "),
404
- react_1.default.createElement(ink_1.Text, { backgroundColor: activeTab === "settings" ? "cyan" : undefined, color: activeTab === "settings" ? "black" : "gray", bold: activeTab === "settings" }, " SETTINGS "),
405
- react_1.default.createElement(ink_1.Text, { dimColor: true }, " (Tab to switch)")),
404
+ react_1.default.createElement(ink_1.Text, { inverse: activeTab === "settings", bold: activeTab === "settings" }, " SETTINGS "),
405
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " [Tab]")),
406
406
  react_1.default.createElement(components_1.StatsRow, { stats: [
407
407
  { label: "Accounts", value: summary.total, color: "white" },
408
- { label: "Available", value: summary.available, color: "green" },
409
- { label: "Limited", value: summary.limited, color: "yellow" },
410
- { label: "Providers", value: configSummary?.providers || 0, color: "cyan" },
411
- { label: "MCP", value: configSummary?.mcpEnabled || 0, color: "magenta" },
408
+ { label: "Available", value: summary.available, color: "white" },
409
+ { label: "Limited", value: summary.limited, color: "gray" },
410
+ { label: "Providers", value: configSummary?.providers || 0, color: "white" },
411
+ { label: "MCP", value: configSummary?.mcpEnabled || 0, color: "white" },
412
412
  ] }),
413
413
  react_1.default.createElement(ink_1.Box, { marginY: 1 },
414
414
  react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2191\u2193 navigate \u2022 Space select \u2022 "),
415
- react_1.default.createElement(ink_1.Text, { color: "cyan", bold: true }, "R"),
415
+ react_1.default.createElement(ink_1.Text, { bold: true }, "R"),
416
416
  react_1.default.createElement(ink_1.Text, { dimColor: true }, " refresh \u2022 "),
417
- react_1.default.createElement(ink_1.Text, { color: "cyan", bold: true }, "P"),
417
+ react_1.default.createElement(ink_1.Text, { bold: true }, "P"),
418
418
  react_1.default.createElement(ink_1.Text, { dimColor: true }, " actions \u2022 "),
419
- react_1.default.createElement(ink_1.Text, { color: "cyan", bold: true }, "Tab"),
420
- react_1.default.createElement(ink_1.Text, { dimColor: true }, " switch \u2022 Q quit"),
421
- checkedEmails.size > 0 && (react_1.default.createElement(ink_1.Text, { color: "yellow" },
419
+ react_1.default.createElement(ink_1.Text, { bold: true }, "Q"),
420
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " quit"),
421
+ checkedEmails.size > 0 ? (react_1.default.createElement(ink_1.Text, null,
422
422
  " \u2022 ",
423
423
  checkedEmails.size,
424
- " selected"))),
424
+ " selected")) : null),
425
425
  isLoading && loadingStep ? (react_1.default.createElement(ink_1.Box, { marginBottom: 1, paddingX: 1 },
426
- react_1.default.createElement(ink_1.Text, { color: "cyan" },
426
+ react_1.default.createElement(ink_1.Text, { dimColor: true },
427
427
  "\u27F3 ",
428
428
  loadingStep))) : null,
429
429
  activeTab === "dashboard" ? (
430
- // Dashboard Tab - Rate limits view like Antigravity Manager
431
- react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1 },
430
+ // Dashboard Tab - Rate limits view
431
+ react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", padding: 1 },
432
432
  react_1.default.createElement(components_1.DashboardView, { accounts: accounts, selectedIndex: dashboardIndex }))) : (
433
433
  // Settings Tab - Original sections view
434
434
  react_1.default.createElement(react_1.default.Fragment, null,
@@ -441,7 +441,7 @@ function Dashboard({ pluginPath }) {
441
441
  "Config: ",
442
442
  opencodeInfo?.configPath || "N/A")),
443
443
  message ? (react_1.default.createElement(ink_1.Box, { marginTop: 1 },
444
- react_1.default.createElement(ink_1.Text, { color: "green" },
444
+ react_1.default.createElement(ink_1.Text, { dimColor: true },
445
445
  "\u2192 ",
446
446
  message))) : null,
447
447
  activeModal === "palette" && (react_1.default.createElement(ink_1.Box, { position: "absolute", marginTop: 3, marginLeft: 10 },
@@ -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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"}
@@ -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,MAAM,kBAAkB,CAAC;AAE3C,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AA0DD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,kBAAkB,qBAyG5E"}
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,MAAM,kBAAkB,CAAC;AAE3C,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAgID,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,kBAAkB,qBAmI5E"}
@@ -6,106 +6,171 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DashboardView = DashboardView;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const ink_1 = require("ink");
9
- // Model families for rate limit display
10
- const MODEL_FAMILIES = ["claude", "gemini", "gpt", "deepseek", "o1", "o3"];
9
+ // Model definitions with display names
10
+ const MODEL_CONFIGS = [
11
+ { key: "claude", displayName: "Claude", shortName: "Claude" },
12
+ { key: "gemini", displayName: "Gemini Pro", shortName: "G Pro" },
13
+ { key: "gemini-cli:gemini-3-flash-preview", displayName: "Gemini Flash", shortName: "G Flash" },
14
+ { key: "gemini-cli:gemini-3-pro-preview", displayName: "Gemini Pro", shortName: "G Pro" },
15
+ { key: "gemini-cli:gemini-2.5-pro", displayName: "G 2.5 Pro", shortName: "G2.5P" },
16
+ { key: "gemini-cli:imagen-3", displayName: "Imagen 3", shortName: "Img3" },
17
+ ];
11
18
  function formatTimeRemaining(resetTime) {
12
19
  const now = Date.now();
13
20
  if (resetTime <= now)
14
- return "";
21
+ return "0h 0m";
15
22
  const remaining = resetTime - now;
16
23
  const hours = Math.floor(remaining / 3600000);
17
24
  const minutes = Math.floor((remaining % 3600000) / 60000);
18
- if (hours > 0) {
19
- return `${hours}h ${minutes}m`;
25
+ if (hours >= 24) {
26
+ const days = Math.floor(hours / 24);
27
+ return `${days}d ${hours % 24}h`;
20
28
  }
21
- return `${minutes}m`;
29
+ return `${hours}h ${minutes}m`;
22
30
  }
23
- function getAccountStatus(account) {
24
- if (!account.enabled) {
25
- return { status: "DISABLED", color: "gray" };
26
- }
31
+ function calculatePercentage(resetTime) {
27
32
  const now = Date.now();
28
- const rateLimits = account.rateLimitResetTimes || {};
29
- const limitedModels = Object.entries(rateLimits)
30
- .filter(([_, time]) => time > now);
31
- if (limitedModels.length === 0) {
32
- return { status: "AVAILABLE", color: "green" };
33
- }
34
- return { status: "LIMITED", color: "yellow" };
33
+ if (resetTime <= now)
34
+ return 100;
35
+ const remaining = resetTime - now;
36
+ const maxTime = 5 * 3600000; // 5 hours as max reference
37
+ const elapsed = maxTime - remaining;
38
+ const pct = Math.max(0, Math.min(100, Math.round((elapsed / maxTime) * 100)));
39
+ return pct;
35
40
  }
36
- function getRateLimitBar(account, model) {
41
+ function getModelStatus(account, modelKey) {
37
42
  const now = Date.now();
38
- const resetTime = account.rateLimitResetTimes?.[model] || 0;
43
+ const rateLimits = account.rateLimitResetTimes || {};
44
+ // Check if model is rate limited
45
+ const resetTime = rateLimits[modelKey] || 0;
39
46
  if (resetTime <= now) {
40
- return { bar: "████████", color: "green", time: "" };
47
+ return {
48
+ available: true,
49
+ timeRemaining: "0h 0m",
50
+ percentage: 100,
51
+ resetTime: 0,
52
+ };
41
53
  }
42
- // Calculate remaining time as percentage (assume 24h max)
43
- const remaining = resetTime - now;
44
- const maxTime = 24 * 3600000; // 24 hours
45
- const percentage = Math.min(1, remaining / maxTime);
46
- const filledBlocks = Math.round((1 - percentage) * 8);
47
- const emptyBlocks = 8 - filledBlocks;
48
54
  return {
49
- bar: "█".repeat(filledBlocks) + "░".repeat(emptyBlocks),
50
- color: percentage > 0.5 ? "red" : "yellow",
51
- time: formatTimeRemaining(resetTime),
55
+ available: false,
56
+ timeRemaining: formatTimeRemaining(resetTime),
57
+ percentage: calculatePercentage(resetTime),
58
+ resetTime,
52
59
  };
53
60
  }
54
- function DashboardView({ accounts, selectedIndex }) {
55
- if (accounts.length === 0) {
56
- return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", padding: 1 },
57
- react_1.default.createElement(ink_1.Text, { dimColor: true }, "No accounts found. Press P to open actions and import accounts.")));
58
- }
59
- // Get all unique models from accounts
60
- const allModels = new Set();
61
+ function getActiveModels(accounts) {
62
+ const now = Date.now();
63
+ const activeKeys = new Set();
64
+ // Collect all model keys that have rate limit data
61
65
  accounts.forEach(acc => {
62
66
  if (acc.rateLimitResetTimes) {
63
- Object.keys(acc.rateLimitResetTimes).forEach(m => allModels.add(m));
67
+ Object.keys(acc.rateLimitResetTimes).forEach(key => {
68
+ activeKeys.add(key);
69
+ });
64
70
  }
65
71
  });
66
- // Use predefined families or detected models
67
- const displayModels = MODEL_FAMILIES.filter(m => accounts.some(acc => acc.rateLimitResetTimes?.[m]));
68
- if (displayModels.length === 0) {
69
- displayModels.push("claude", "gemini"); // Default columns
72
+ // Return models that are in our config OR have rate limit data
73
+ const models = MODEL_CONFIGS.filter(m => activeKeys.has(m.key));
74
+ // If no models found, show default ones
75
+ if (models.length === 0) {
76
+ return MODEL_CONFIGS.slice(0, 2); // Claude and Gemini
77
+ }
78
+ return models;
79
+ }
80
+ // Progress bar component using text
81
+ function ProgressBar({ percentage, width = 8 }) {
82
+ const filled = Math.round((percentage / 100) * width);
83
+ const empty = width - filled;
84
+ // Color based on percentage
85
+ const color = percentage === 100 ? "white" : percentage >= 50 ? "gray" : "gray";
86
+ return (react_1.default.createElement(ink_1.Text, { color: color },
87
+ "█".repeat(filled),
88
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "░".repeat(empty))));
89
+ }
90
+ // Model cell component
91
+ function ModelCell({ status, width = 18 }) {
92
+ return (react_1.default.createElement(ink_1.Box, { width: width },
93
+ react_1.default.createElement(ink_1.Box, { width: 8 },
94
+ react_1.default.createElement(ProgressBar, { percentage: status.percentage, width: 6 })),
95
+ react_1.default.createElement(ink_1.Box, { width: 6 },
96
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, status.timeRemaining.padStart(5))),
97
+ react_1.default.createElement(ink_1.Box, { width: 4 },
98
+ react_1.default.createElement(ink_1.Text, { color: status.percentage === 100 ? "white" : "gray" },
99
+ String(status.percentage).padStart(3),
100
+ "%"))));
101
+ }
102
+ function DashboardView({ accounts, selectedIndex }) {
103
+ if (accounts.length === 0) {
104
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 1 },
105
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "No accounts configured."),
106
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "Press P to open actions and import accounts.")));
70
107
  }
108
+ const activeModels = getActiveModels(accounts);
109
+ const modelColumnWidth = 18;
110
+ const emailWidth = 28;
71
111
  return (react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
72
- react_1.default.createElement(ink_1.Box, null,
73
- react_1.default.createElement(ink_1.Box, { width: 30 },
74
- react_1.default.createElement(ink_1.Text, { bold: true, color: "cyan" }, "ACCOUNT")),
75
- react_1.default.createElement(ink_1.Box, { width: 12 },
76
- react_1.default.createElement(ink_1.Text, { bold: true, color: "cyan" }, "STATUS")),
77
- displayModels.map(model => (react_1.default.createElement(ink_1.Box, { key: model, width: 14 },
78
- react_1.default.createElement(ink_1.Text, { bold: true, color: "cyan" }, model.toUpperCase()))))),
79
- react_1.default.createElement(ink_1.Box, null,
80
- react_1.default.createElement(ink_1.Text, { dimColor: true }, "─".repeat(30 + 12 + displayModels.length * 14))),
112
+ react_1.default.createElement(ink_1.Box, { paddingX: 1 },
113
+ react_1.default.createElement(ink_1.Box, { width: 3 },
114
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " ")),
115
+ react_1.default.createElement(ink_1.Box, { width: emailWidth },
116
+ react_1.default.createElement(ink_1.Text, { dimColor: true, bold: true }, "EMAIL")),
117
+ activeModels.map(model => (react_1.default.createElement(ink_1.Box, { key: model.key, width: modelColumnWidth },
118
+ react_1.default.createElement(ink_1.Text, { dimColor: true, bold: true }, model.shortName))))),
119
+ react_1.default.createElement(ink_1.Box, { paddingX: 1 },
120
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "─".repeat(3 + emailWidth + activeModels.length * modelColumnWidth))),
81
121
  accounts.map((account, index) => {
82
122
  const isSelected = index === selectedIndex;
83
- const { status, color } = getAccountStatus(account);
123
+ const isDisabled = account.enabled === false;
84
124
  // Truncate email
85
- const emailDisplay = account.email.length > 28
86
- ? account.email.slice(0, 25) + "..."
125
+ const email = account.email.length > emailWidth - 3
126
+ ? account.email.slice(0, emailWidth - 6) + "..."
87
127
  : account.email;
88
- return (react_1.default.createElement(ink_1.Box, { key: account.email },
89
- react_1.default.createElement(ink_1.Text, { color: isSelected ? "cyan" : undefined }, isSelected ? "▸ " : " "),
90
- react_1.default.createElement(ink_1.Box, { width: 28 },
91
- react_1.default.createElement(ink_1.Text, { color: isSelected ? "cyan" : (account.enabled === false ? "gray" : "white"), bold: isSelected }, emailDisplay)),
92
- react_1.default.createElement(ink_1.Box, { width: 12 },
93
- react_1.default.createElement(ink_1.Text, { color: color }, status)),
94
- displayModels.map(model => {
95
- const { bar, color: barColor, time } = getRateLimitBar(account, model);
96
- return (react_1.default.createElement(ink_1.Box, { key: model, width: 14 },
97
- react_1.default.createElement(ink_1.Text, { color: barColor }, bar),
98
- time ? react_1.default.createElement(ink_1.Text, { dimColor: true },
99
- " ",
100
- time) : null));
128
+ return (react_1.default.createElement(ink_1.Box, { key: account.email, paddingX: 1 },
129
+ react_1.default.createElement(ink_1.Box, { width: 3 },
130
+ react_1.default.createElement(ink_1.Text, { bold: isSelected }, isSelected ? "› " : " ")),
131
+ react_1.default.createElement(ink_1.Box, { width: emailWidth },
132
+ react_1.default.createElement(ink_1.Text, { bold: isSelected, dimColor: isDisabled }, email)),
133
+ activeModels.map(model => {
134
+ const status = getModelStatus(account, model.key);
135
+ if (isDisabled) {
136
+ return (react_1.default.createElement(ink_1.Box, { key: model.key, width: modelColumnWidth },
137
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2500\u2500 disabled \u2500\u2500")));
138
+ }
139
+ return (react_1.default.createElement(ModelCell, { key: model.key, status: status, width: modelColumnWidth }));
101
140
  })));
102
141
  }),
103
- react_1.default.createElement(ink_1.Box, { marginTop: 1 },
104
- react_1.default.createElement(ink_1.Text, { color: "green" }, "\u2588\u2588\u2588\u2588"),
105
- react_1.default.createElement(ink_1.Text, { dimColor: true }, " Available "),
106
- react_1.default.createElement(ink_1.Text, { color: "yellow" }, "\u2591\u2591\u2591\u2591"),
107
- react_1.default.createElement(ink_1.Text, { dimColor: true }, " Limited "),
108
- react_1.default.createElement(ink_1.Text, { color: "gray" }, "\u2588\u2588\u2588\u2588"),
109
- react_1.default.createElement(ink_1.Text, { dimColor: true }, " Disabled"))));
142
+ react_1.default.createElement(ink_1.Box, { paddingX: 1, marginTop: 1 },
143
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "".repeat(3 + emailWidth + activeModels.length * modelColumnWidth))),
144
+ react_1.default.createElement(ink_1.Box, { paddingX: 1 },
145
+ react_1.default.createElement(ink_1.Text, { dimColor: true },
146
+ accounts.length,
147
+ " accounts"),
148
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " \u2502 "),
149
+ react_1.default.createElement(ink_1.Text, null, accounts.filter(a => {
150
+ if (a.enabled === false)
151
+ return false;
152
+ const now = Date.now();
153
+ const limits = a.rateLimitResetTimes || {};
154
+ return !Object.values(limits).some(t => t > now);
155
+ }).length),
156
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " available"),
157
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " \u2502 "),
158
+ react_1.default.createElement(ink_1.Text, { dimColor: true },
159
+ accounts.filter(a => {
160
+ if (a.enabled === false)
161
+ return false;
162
+ const now = Date.now();
163
+ const limits = a.rateLimitResetTimes || {};
164
+ return Object.values(limits).some(t => t > now);
165
+ }).length,
166
+ " limited"),
167
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " \u2502 "),
168
+ react_1.default.createElement(ink_1.Text, { dimColor: true },
169
+ accounts.filter(a => a.enabled === false).length,
170
+ " disabled")),
171
+ react_1.default.createElement(ink_1.Box, { paddingX: 1, marginTop: 1 },
172
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2588\u2588\u2588\u2588 100%"),
173
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, " \u2591\u2591\u2591\u2591 limited "),
174
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2500\u2500 disabled"))));
110
175
  }
111
176
  //# 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":";;;;;AAuIA,sCAmIC;AA1QD,kDAA0B;AAC1B,6BAAgC;AAQhC,uCAAuC;AACvC,MAAM,aAAa,GAAG;IACpB,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;IAC7D,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE;IAChE,EAAE,GAAG,EAAE,mCAAmC,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE;IAC/F,EAAE,GAAG,EAAE,iCAAiC,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE;IACzF,EAAE,GAAG,EAAE,2BAA2B,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE;IAClF,EAAE,GAAG,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE;CAC3E,CAAC;AASF,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,SAAS,IAAI,GAAG;QAAE,OAAO,OAAO,CAAC;IAErC,MAAM,SAAS,GAAG,SAAS,GAAG,GAAG,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IAE1D,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACpC,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,CAAC;AACjC,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,SAAS,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAEjC,MAAM,SAAS,GAAG,SAAS,GAAG,GAAG,CAAC;IAClC,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,2BAA2B;IACxD,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB,EAAE,QAAgB;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAErD,iCAAiC;IACjC,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACrB,OAAO;YACL,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,OAAO;YACtB,UAAU,EAAE,GAAG;YACf,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,mBAAmB,CAAC,SAAS,CAAC;QAC7C,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC;QAC1C,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,QAAmB;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACrB,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACjD,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhE,wCAAwC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;IACxD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oCAAoC;AACpC,SAAS,WAAW,CAAC,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,EAA0C;IACpF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7B,4BAA4B;IAC5B,MAAM,KAAK,GAAG,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhF,OAAO,CACL,8BAAC,UAAI,IAAC,KAAK,EAAE,KAAK;QACf,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QACnB,8BAAC,UAAI,IAAC,QAAQ,UAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAQ,CACpC,CACR,CAAC;AACJ,CAAC;AAED,uBAAuB;AACvB,SAAS,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,EAA2C;IAChF,OAAO,CACL,8BAAC,SAAG,IAAC,KAAK,EAAE,KAAK;QACf,8BAAC,SAAG,IAAC,KAAK,EAAE,CAAC;YACX,8BAAC,WAAW,IAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,GAAI,CACpD;QACN,8BAAC,SAAG,IAAC,KAAK,EAAE,CAAC;YACX,8BAAC,UAAI,IAAC,QAAQ,UAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAQ,CACpD;QACN,8BAAC,SAAG,IAAC,KAAK,EAAE,CAAC;YACX,8BAAC,UAAI,IAAC,KAAK,EAAE,MAAM,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACtD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACjC,CACH,CACF,CACP,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAsB;IAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC;YACrC,8BAAC,UAAI,IAAC,QAAQ,oCAA+B;YAC7C,8BAAC,UAAI,IAAC,QAAQ,yDAAoD,CAC9D,CACP,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ;QAEzB,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC;YACd,8BAAC,SAAG,IAAC,KAAK,EAAE,CAAC;gBACX,8BAAC,UAAI,IAAC,QAAQ,UAAE,GAAG,CAAQ,CACvB;YACN,8BAAC,SAAG,IAAC,KAAK,EAAE,UAAU;gBACpB,8BAAC,UAAI,IAAC,QAAQ,QAAC,IAAI,kBAAa,CAC5B;YACL,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACzB,8BAAC,SAAG,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,gBAAgB;gBAC1C,8BAAC,UAAI,IAAC,QAAQ,QAAC,IAAI,UAAE,KAAK,CAAC,SAAS,CAAQ,CACxC,CACP,CAAC,CACE;QAGN,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC;YACd,8BAAC,UAAI,IAAC,QAAQ,UAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,GAAG,YAAY,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAQ,CACvF;QAGL,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAC/B,MAAM,UAAU,GAAG,KAAK,KAAK,aAAa,CAAC;YAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;YAE7C,iBAAiB;YACjB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC;gBACjD,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK;gBAChD,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YAElB,OAAO,CACL,8BAAC,SAAG,IAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;gBAElC,8BAAC,SAAG,IAAC,KAAK,EAAE,CAAC;oBACX,8BAAC,UAAI,IAAC,IAAI,EAAE,UAAU,IACnB,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACpB,CACH;gBAGN,8BAAC,SAAG,IAAC,KAAK,EAAE,UAAU;oBACpB,8BAAC,UAAI,IACH,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,UAAU,IAEnB,KAAK,CACD,CACH;gBAGL,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACxB,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBAElD,IAAI,UAAU,EAAE,CAAC;wBACf,OAAO,CACL,8BAAC,SAAG,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,gBAAgB;4BAC1C,8BAAC,UAAI,IAAC,QAAQ,+CAAsB,CAChC,CACP,CAAC;oBACJ,CAAC;oBAED,OAAO,CACL,8BAAC,SAAS,IACR,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,gBAAgB,GACvB,CACH,CAAC;gBACJ,CAAC,CAAC,CACE,CACP,CAAC;QACJ,CAAC,CAAC;QAGF,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;YAC5B,8BAAC,UAAI,IAAC,QAAQ,UAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,GAAG,YAAY,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAQ,CACvF;QAEN,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC;YACd,8BAAC,UAAI,IAAC,QAAQ;gBACX,QAAQ,CAAC,MAAM;4BACX;YACP,8BAAC,UAAI,IAAC,QAAQ,qBAAW;YACzB,8BAAC,UAAI,QACF,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACnB,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK;oBAAE,OAAO,KAAK,CAAC;gBACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,CAAC,CAAC,mBAAmB,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC,MAAM,CACJ;YACP,8BAAC,UAAI,IAAC,QAAQ,uBAAkB;YAChC,8BAAC,UAAI,IAAC,QAAQ,qBAAW;YACzB,8BAAC,UAAI,IAAC,QAAQ;gBACX,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;oBACnB,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK;wBAAE,OAAO,KAAK,CAAC;oBACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,MAAM,GAAG,CAAC,CAAC,mBAAmB,IAAI,EAAE,CAAC;oBAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC,MAAM;2BACJ;YACP,8BAAC,UAAI,IAAC,QAAQ,qBAAW;YACzB,8BAAC,UAAI,IAAC,QAAQ;gBACX,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,MAAM;4BAC5C,CACH;QAGN,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;YAC5B,8BAAC,UAAI,IAAC,QAAQ,0CAAiB;YAC/B,8BAAC,UAAI,IAAC,QAAQ,iDAAwB;YACtC,8BAAC,UAAI,IAAC,QAAQ,kCAAmB,CAC7B,CACF,CACP,CAAC;AACJ,CAAC"}
@@ -9,12 +9,10 @@ const ink_1 = require("ink");
9
9
  function Header({ title = "OpenCode Account Manager", subtitle, }) {
10
10
  return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginBottom: 1 },
11
11
  react_1.default.createElement(ink_1.Box, null,
12
- react_1.default.createElement(ink_1.Text, { bold: true, color: "cyan" },
13
- "* ",
14
- title),
15
- subtitle && react_1.default.createElement(ink_1.Text, { dimColor: true },
16
- " - ",
17
- subtitle)),
12
+ react_1.default.createElement(ink_1.Text, { bold: true, color: "white" }, title),
13
+ subtitle ? react_1.default.createElement(ink_1.Text, { dimColor: true },
14
+ " / ",
15
+ subtitle) : null),
18
16
  react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")));
19
17
  }
20
18
  //# sourceMappingURL=Header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":";;;;;AAQA,wBAiBC;AAzBD,kDAA0B;AAC1B,6BAAgC;AAOhC,SAAgB,MAAM,CAAC,EACrB,KAAK,GAAG,0BAA0B,EAClC,QAAQ,GACI;IACZ,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC;QACzC,8BAAC,SAAG;YACF,8BAAC,UAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM;;gBAClB,KAAK,CACH;YACN,QAAQ,IAAI,8BAAC,UAAI,IAAC,QAAQ;;gBAAK,QAAQ,CAAQ,CAC5C;QACN,8BAAC,UAAI,IAAC,QAAQ,6YAEP,CACH,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":";;;;;AAQA,wBAiBC;AAzBD,kDAA0B;AAC1B,6BAAgC;AAOhC,SAAgB,MAAM,CAAC,EACrB,KAAK,GAAG,0BAA0B,EAClC,QAAQ,GACI;IACZ,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC;QACzC,8BAAC,SAAG;YACF,8BAAC,UAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,IACrB,KAAK,CACD;YACN,QAAQ,CAAC,CAAC,CAAC,8BAAC,UAAI,IAAC,QAAQ;;gBAAK,QAAQ,CAAQ,CAAC,CAAC,CAAC,IAAI,CAClD;QACN,8BAAC,UAAI,IAAC,QAAQ,6YAEP,CACH,CACP,CAAC;AACJ,CAAC"}
@@ -9,8 +9,8 @@ const ink_1 = require("ink");
9
9
  function SectionBox({ title, children, borderColor = "gray", collapsed = false }) {
10
10
  return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: borderColor, marginBottom: 1 },
11
11
  react_1.default.createElement(ink_1.Box, { paddingX: 1 },
12
- react_1.default.createElement(ink_1.Text, { bold: true, color: "white" }, title),
13
- collapsed && react_1.default.createElement(ink_1.Text, { dimColor: true }, " (collapsed)")),
14
- !collapsed && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingY: 0 }, children))));
12
+ react_1.default.createElement(ink_1.Text, { bold: true }, title),
13
+ collapsed ? react_1.default.createElement(ink_1.Text, { dimColor: true }, " (collapsed)") : null),
14
+ !collapsed ? (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingY: 0 }, children)) : null));
15
15
  }
16
16
  //# sourceMappingURL=SectionBox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SectionBox.js","sourceRoot":"","sources":["../../../src/tui/components/SectionBox.tsx"],"names":[],"mappings":";;;;;AAUA,gCAwBC;AAlCD,kDAA0B;AAC1B,6BAAgC;AAShC,SAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,MAAM,EACpB,SAAS,GAAG,KAAK,EACD;IAChB,OAAO,CACL,8BAAC,SAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,CAAC;QAEf,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC;YACd,8BAAC,UAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,IAAE,KAAK,CAAQ;YACtC,SAAS,IAAI,8BAAC,UAAI,IAAC,QAAQ,yBAAoB,CAC5C;QACL,CAAC,SAAS,IAAI,CACb,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,IACpC,QAAQ,CACL,CACP,CACG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"SectionBox.js","sourceRoot":"","sources":["../../../src/tui/components/SectionBox.tsx"],"names":[],"mappings":";;;;;AAUA,gCAwBC;AAlCD,kDAA0B;AAC1B,6BAAgC;AAShC,SAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,MAAM,EACpB,SAAS,GAAG,KAAK,EACD;IAChB,OAAO,CACL,8BAAC,SAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,CAAC;QAEf,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC;YACd,8BAAC,UAAI,IAAC,IAAI,UAAE,KAAK,CAAQ;YACxB,SAAS,CAAC,CAAC,CAAC,8BAAC,UAAI,IAAC,QAAQ,yBAAoB,CAAC,CAAC,CAAC,IAAI,CAClD;QACL,CAAC,SAAS,CAAC,CAAC,CAAC,CACZ,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,IACpC,QAAQ,CACL,CACP,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAC;AACJ,CAAC"}
@@ -7,15 +7,15 @@ exports.StatusBadge = StatusBadge;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const ink_1 = require("ink");
9
9
  const STATUS_COLORS = {
10
- available: "green",
11
- limited: "yellow",
10
+ available: "white",
11
+ limited: "gray",
12
12
  disabled: "gray",
13
- error: "red",
13
+ error: "gray",
14
14
  };
15
15
  const STATUS_ICONS = {
16
16
  available: "●",
17
- limited: "",
18
- disabled: "x",
17
+ limited: "",
18
+ disabled: "",
19
19
  error: "!",
20
20
  };
21
21
  function StatusBadge({ status, label }) {
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../src/tui/components/StatusBadge.tsx"],"names":[],"mappings":";;;;;AAsBA,kCAUC;AAhCD,kDAA0B;AAC1B,6BAA2B;AAO3B,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,SAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAoB;IAC7D,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;IAE3C,OAAO,CACL,8BAAC,UAAI,IAAC,KAAK,EAAE,KAAK;QACf,IAAI;;QAAG,IAAI,CACP,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../src/tui/components/StatusBadge.tsx"],"names":[],"mappings":";;;;;AAsBA,kCAUC;AAhCD,kDAA0B;AAC1B,6BAA2B;AAO3B,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,SAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAoB;IAC7D,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;IAE3C,OAAO,CACL,8BAAC,UAAI,IAAC,KAAK,EAAE,KAAK;QACf,IAAI;;QAAG,IAAI,CACP,CACR,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-account-manager",
3
- "version": "0.5.8",
3
+ "version": "0.6.1",
4
4
  "description": "TUI Dashboard for OpenCode - View providers, MCP servers, and plugin accounts",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {
@@ -463,59 +463,57 @@ export function Dashboard({ pluginPath }: DashboardProps) {
463
463
  {/* Tab bar */}
464
464
  <Box marginBottom={1}>
465
465
  <Text
466
- backgroundColor={activeTab === "dashboard" ? "cyan" : undefined}
467
- color={activeTab === "dashboard" ? "black" : "gray"}
466
+ inverse={activeTab === "dashboard"}
468
467
  bold={activeTab === "dashboard"}
469
468
  >
470
469
  {" DASHBOARD "}
471
470
  </Text>
472
471
  <Text> </Text>
473
472
  <Text
474
- backgroundColor={activeTab === "settings" ? "cyan" : undefined}
475
- color={activeTab === "settings" ? "black" : "gray"}
473
+ inverse={activeTab === "settings"}
476
474
  bold={activeTab === "settings"}
477
475
  >
478
476
  {" SETTINGS "}
479
477
  </Text>
480
- <Text dimColor> (Tab to switch)</Text>
478
+ <Text dimColor> [Tab]</Text>
481
479
  </Box>
482
480
 
483
481
  {/* Global Stats */}
484
482
  <StatsRow
485
483
  stats={[
486
484
  { label: "Accounts", value: summary.total, color: "white" },
487
- { label: "Available", value: summary.available, color: "green" },
488
- { label: "Limited", value: summary.limited, color: "yellow" },
489
- { label: "Providers", value: configSummary?.providers || 0, color: "cyan" },
490
- { label: "MCP", value: configSummary?.mcpEnabled || 0, color: "magenta" },
485
+ { label: "Available", value: summary.available, color: "white" },
486
+ { label: "Limited", value: summary.limited, color: "gray" },
487
+ { label: "Providers", value: configSummary?.providers || 0, color: "white" },
488
+ { label: "MCP", value: configSummary?.mcpEnabled || 0, color: "white" },
491
489
  ]}
492
490
  />
493
491
 
494
492
  {/* Help bar */}
495
493
  <Box marginY={1}>
496
494
  <Text dimColor>↑↓ navigate • Space select • </Text>
497
- <Text color="cyan" bold>R</Text>
495
+ <Text bold>R</Text>
498
496
  <Text dimColor> refresh • </Text>
499
- <Text color="cyan" bold>P</Text>
497
+ <Text bold>P</Text>
500
498
  <Text dimColor> actions • </Text>
501
- <Text color="cyan" bold>Tab</Text>
502
- <Text dimColor> switch • Q quit</Text>
503
- {checkedEmails.size > 0 && (
504
- <Text color="yellow"> • {checkedEmails.size} selected</Text>
505
- )}
499
+ <Text bold>Q</Text>
500
+ <Text dimColor> quit</Text>
501
+ {checkedEmails.size > 0 ? (
502
+ <Text> • {checkedEmails.size} selected</Text>
503
+ ) : null}
506
504
  </Box>
507
505
 
508
506
  {/* Loading indicator */}
509
507
  {isLoading && loadingStep ? (
510
508
  <Box marginBottom={1} paddingX={1}>
511
- <Text color="cyan">⟳ {loadingStep}</Text>
509
+ <Text dimColor>⟳ {loadingStep}</Text>
512
510
  </Box>
513
511
  ) : null}
514
512
 
515
513
  {/* Tab content */}
516
514
  {activeTab === "dashboard" ? (
517
- // Dashboard Tab - Rate limits view like Antigravity Manager
518
- <Box flexDirection="column" borderStyle="round" borderColor="cyan" padding={1}>
515
+ // Dashboard Tab - Rate limits view
516
+ <Box flexDirection="column" borderStyle="round" borderColor="gray" padding={1}>
519
517
  <DashboardView
520
518
  accounts={accounts}
521
519
  selectedIndex={dashboardIndex}
@@ -563,7 +561,7 @@ export function Dashboard({ pluginPath }: DashboardProps) {
563
561
  {/* Message */}
564
562
  {message ? (
565
563
  <Box marginTop={1}>
566
- <Text color="green">→ {message}</Text>
564
+ <Text dimColor>→ {message}</Text>
567
565
  </Box>
568
566
  ) : null}
569
567
 
@@ -7,164 +7,260 @@ interface DashboardViewProps {
7
7
  selectedIndex: number;
8
8
  }
9
9
 
10
- // Model families for rate limit display
11
- const MODEL_FAMILIES = ["claude", "gemini", "gpt", "deepseek", "o1", "o3"];
10
+ // Model definitions with display names
11
+ const MODEL_CONFIGS = [
12
+ { key: "claude", displayName: "Claude", shortName: "Claude" },
13
+ { key: "gemini", displayName: "Gemini Pro", shortName: "G Pro" },
14
+ { key: "gemini-cli:gemini-3-flash-preview", displayName: "Gemini Flash", shortName: "G Flash" },
15
+ { key: "gemini-cli:gemini-3-pro-preview", displayName: "Gemini Pro", shortName: "G Pro" },
16
+ { key: "gemini-cli:gemini-2.5-pro", displayName: "G 2.5 Pro", shortName: "G2.5P" },
17
+ { key: "gemini-cli:imagen-3", displayName: "Imagen 3", shortName: "Img3" },
18
+ ];
19
+
20
+ interface ModelStatus {
21
+ available: boolean;
22
+ timeRemaining: string;
23
+ percentage: number;
24
+ resetTime: number;
25
+ }
12
26
 
13
27
  function formatTimeRemaining(resetTime: number): string {
14
28
  const now = Date.now();
15
- if (resetTime <= now) return "";
29
+ if (resetTime <= now) return "0h 0m";
16
30
 
17
31
  const remaining = resetTime - now;
18
32
  const hours = Math.floor(remaining / 3600000);
19
33
  const minutes = Math.floor((remaining % 3600000) / 60000);
20
34
 
21
- if (hours > 0) {
22
- return `${hours}h ${minutes}m`;
35
+ if (hours >= 24) {
36
+ const days = Math.floor(hours / 24);
37
+ return `${days}d ${hours % 24}h`;
23
38
  }
24
- return `${minutes}m`;
39
+ return `${hours}h ${minutes}m`;
25
40
  }
26
41
 
27
- function getAccountStatus(account: Account): { status: string; color: string } {
28
- if (!account.enabled) {
29
- return { status: "DISABLED", color: "gray" };
30
- }
42
+ function calculatePercentage(resetTime: number): number {
43
+ const now = Date.now();
44
+ if (resetTime <= now) return 100;
31
45
 
46
+ const remaining = resetTime - now;
47
+ const maxTime = 5 * 3600000; // 5 hours as max reference
48
+ const elapsed = maxTime - remaining;
49
+ const pct = Math.max(0, Math.min(100, Math.round((elapsed / maxTime) * 100)));
50
+ return pct;
51
+ }
52
+
53
+ function getModelStatus(account: Account, modelKey: string): ModelStatus {
32
54
  const now = Date.now();
33
55
  const rateLimits = account.rateLimitResetTimes || {};
34
- const limitedModels = Object.entries(rateLimits)
35
- .filter(([_, time]) => time > now);
36
56
 
37
- if (limitedModels.length === 0) {
38
- return { status: "AVAILABLE", color: "green" };
57
+ // Check if model is rate limited
58
+ const resetTime = rateLimits[modelKey] || 0;
59
+
60
+ if (resetTime <= now) {
61
+ return {
62
+ available: true,
63
+ timeRemaining: "0h 0m",
64
+ percentage: 100,
65
+ resetTime: 0,
66
+ };
39
67
  }
40
68
 
41
- return { status: "LIMITED", color: "yellow" };
69
+ return {
70
+ available: false,
71
+ timeRemaining: formatTimeRemaining(resetTime),
72
+ percentage: calculatePercentage(resetTime),
73
+ resetTime,
74
+ };
42
75
  }
43
76
 
44
- function getRateLimitBar(account: Account, model: string): { bar: string; color: string; time: string } {
77
+ function getActiveModels(accounts: Account[]): typeof MODEL_CONFIGS {
45
78
  const now = Date.now();
46
- const resetTime = account.rateLimitResetTimes?.[model] || 0;
79
+ const activeKeys = new Set<string>();
47
80
 
48
- if (resetTime <= now) {
49
- return { bar: "████████", color: "green", time: "" };
81
+ // Collect all model keys that have rate limit data
82
+ accounts.forEach(acc => {
83
+ if (acc.rateLimitResetTimes) {
84
+ Object.keys(acc.rateLimitResetTimes).forEach(key => {
85
+ activeKeys.add(key);
86
+ });
87
+ }
88
+ });
89
+
90
+ // Return models that are in our config OR have rate limit data
91
+ const models = MODEL_CONFIGS.filter(m => activeKeys.has(m.key));
92
+
93
+ // If no models found, show default ones
94
+ if (models.length === 0) {
95
+ return MODEL_CONFIGS.slice(0, 2); // Claude and Gemini
50
96
  }
51
97
 
52
- // Calculate remaining time as percentage (assume 24h max)
53
- const remaining = resetTime - now;
54
- const maxTime = 24 * 3600000; // 24 hours
55
- const percentage = Math.min(1, remaining / maxTime);
56
- const filledBlocks = Math.round((1 - percentage) * 8);
57
- const emptyBlocks = 8 - filledBlocks;
98
+ return models;
99
+ }
100
+
101
+ // Progress bar component using text
102
+ function ProgressBar({ percentage, width = 8 }: { percentage: number; width?: number }) {
103
+ const filled = Math.round((percentage / 100) * width);
104
+ const empty = width - filled;
58
105
 
59
- return {
60
- bar: "".repeat(filledBlocks) + "".repeat(emptyBlocks),
61
- color: percentage > 0.5 ? "red" : "yellow",
62
- time: formatTimeRemaining(resetTime),
63
- };
106
+ // Color based on percentage
107
+ const color = percentage === 100 ? "white" : percentage >= 50 ? "gray" : "gray";
108
+
109
+ return (
110
+ <Text color={color}>
111
+ {"█".repeat(filled)}
112
+ <Text dimColor>{"░".repeat(empty)}</Text>
113
+ </Text>
114
+ );
115
+ }
116
+
117
+ // Model cell component
118
+ function ModelCell({ status, width = 18 }: { status: ModelStatus; width?: number }) {
119
+ return (
120
+ <Box width={width}>
121
+ <Box width={8}>
122
+ <ProgressBar percentage={status.percentage} width={6} />
123
+ </Box>
124
+ <Box width={6}>
125
+ <Text dimColor>{status.timeRemaining.padStart(5)}</Text>
126
+ </Box>
127
+ <Box width={4}>
128
+ <Text color={status.percentage === 100 ? "white" : "gray"}>
129
+ {String(status.percentage).padStart(3)}%
130
+ </Text>
131
+ </Box>
132
+ </Box>
133
+ );
64
134
  }
65
135
 
66
136
  export function DashboardView({ accounts, selectedIndex }: DashboardViewProps) {
67
137
  if (accounts.length === 0) {
68
138
  return (
69
- <Box flexDirection="column" padding={1}>
70
- <Text dimColor>No accounts found. Press P to open actions and import accounts.</Text>
139
+ <Box flexDirection="column" paddingX={1}>
140
+ <Text dimColor>No accounts configured.</Text>
141
+ <Text dimColor>Press P to open actions and import accounts.</Text>
71
142
  </Box>
72
143
  );
73
144
  }
74
145
 
75
- // Get all unique models from accounts
76
- const allModels = new Set<string>();
77
- accounts.forEach(acc => {
78
- if (acc.rateLimitResetTimes) {
79
- Object.keys(acc.rateLimitResetTimes).forEach(m => allModels.add(m));
80
- }
81
- });
82
-
83
- // Use predefined families or detected models
84
- const displayModels = MODEL_FAMILIES.filter(m =>
85
- accounts.some(acc => acc.rateLimitResetTimes?.[m])
86
- );
87
-
88
- if (displayModels.length === 0) {
89
- displayModels.push("claude", "gemini"); // Default columns
90
- }
146
+ const activeModels = getActiveModels(accounts);
147
+ const modelColumnWidth = 18;
148
+ const emailWidth = 28;
91
149
 
92
150
  return (
93
151
  <Box flexDirection="column">
94
- {/* Header row */}
95
- <Box>
96
- <Box width={30}>
97
- <Text bold color="cyan">ACCOUNT</Text>
152
+ {/* Header */}
153
+ <Box paddingX={1}>
154
+ <Box width={3}>
155
+ <Text dimColor>{" "}</Text>
98
156
  </Box>
99
- <Box width={12}>
100
- <Text bold color="cyan">STATUS</Text>
157
+ <Box width={emailWidth}>
158
+ <Text dimColor bold>EMAIL</Text>
101
159
  </Box>
102
- {displayModels.map(model => (
103
- <Box key={model} width={14}>
104
- <Text bold color="cyan">{model.toUpperCase()}</Text>
160
+ {activeModels.map(model => (
161
+ <Box key={model.key} width={modelColumnWidth}>
162
+ <Text dimColor bold>{model.shortName}</Text>
105
163
  </Box>
106
164
  ))}
107
165
  </Box>
108
-
166
+
109
167
  {/* Separator */}
110
- <Box>
111
- <Text dimColor>{"─".repeat(30 + 12 + displayModels.length * 14)}</Text>
168
+ <Box paddingX={1}>
169
+ <Text dimColor>{"─".repeat(3 + emailWidth + activeModels.length * modelColumnWidth)}</Text>
112
170
  </Box>
113
171
 
114
172
  {/* Account rows */}
115
173
  {accounts.map((account, index) => {
116
174
  const isSelected = index === selectedIndex;
117
- const { status, color } = getAccountStatus(account);
175
+ const isDisabled = account.enabled === false;
118
176
 
119
177
  // Truncate email
120
- const emailDisplay = account.email.length > 28
121
- ? account.email.slice(0, 25) + "..."
178
+ const email = account.email.length > emailWidth - 3
179
+ ? account.email.slice(0, emailWidth - 6) + "..."
122
180
  : account.email;
123
181
 
124
182
  return (
125
- <Box key={account.email}>
126
- {/* Selection indicator */}
127
- <Text color={isSelected ? "cyan" : undefined}>
128
- {isSelected ? "▸ " : " "}
129
- </Text>
183
+ <Box key={account.email} paddingX={1}>
184
+ {/* Selection cursor */}
185
+ <Box width={3}>
186
+ <Text bold={isSelected}>
187
+ {isSelected ? "› " : " "}
188
+ </Text>
189
+ </Box>
130
190
 
131
191
  {/* Email */}
132
- <Box width={28}>
192
+ <Box width={emailWidth}>
133
193
  <Text
134
- color={isSelected ? "cyan" : (account.enabled === false ? "gray" : "white")}
135
194
  bold={isSelected}
195
+ dimColor={isDisabled}
136
196
  >
137
- {emailDisplay}
197
+ {email}
138
198
  </Text>
139
199
  </Box>
140
200
 
141
- {/* Status */}
142
- <Box width={12}>
143
- <Text color={color}>{status}</Text>
144
- </Box>
145
-
146
- {/* Rate limit bars for each model */}
147
- {displayModels.map(model => {
148
- const { bar, color: barColor, time } = getRateLimitBar(account, model);
201
+ {/* Model columns */}
202
+ {activeModels.map(model => {
203
+ const status = getModelStatus(account, model.key);
204
+
205
+ if (isDisabled) {
206
+ return (
207
+ <Box key={model.key} width={modelColumnWidth}>
208
+ <Text dimColor>── disabled ──</Text>
209
+ </Box>
210
+ );
211
+ }
212
+
149
213
  return (
150
- <Box key={model} width={14}>
151
- <Text color={barColor}>{bar}</Text>
152
- {time ? <Text dimColor> {time}</Text> : null}
153
- </Box>
214
+ <ModelCell
215
+ key={model.key}
216
+ status={status}
217
+ width={modelColumnWidth}
218
+ />
154
219
  );
155
220
  })}
156
221
  </Box>
157
222
  );
158
223
  })}
159
224
 
225
+ {/* Summary */}
226
+ <Box paddingX={1} marginTop={1}>
227
+ <Text dimColor>{"─".repeat(3 + emailWidth + activeModels.length * modelColumnWidth)}</Text>
228
+ </Box>
229
+
230
+ <Box paddingX={1}>
231
+ <Text dimColor>
232
+ {accounts.length} accounts
233
+ </Text>
234
+ <Text dimColor> │ </Text>
235
+ <Text>
236
+ {accounts.filter(a => {
237
+ if (a.enabled === false) return false;
238
+ const now = Date.now();
239
+ const limits = a.rateLimitResetTimes || {};
240
+ return !Object.values(limits).some(t => t > now);
241
+ }).length}
242
+ </Text>
243
+ <Text dimColor> available</Text>
244
+ <Text dimColor> │ </Text>
245
+ <Text dimColor>
246
+ {accounts.filter(a => {
247
+ if (a.enabled === false) return false;
248
+ const now = Date.now();
249
+ const limits = a.rateLimitResetTimes || {};
250
+ return Object.values(limits).some(t => t > now);
251
+ }).length} limited
252
+ </Text>
253
+ <Text dimColor> │ </Text>
254
+ <Text dimColor>
255
+ {accounts.filter(a => a.enabled === false).length} disabled
256
+ </Text>
257
+ </Box>
258
+
160
259
  {/* Legend */}
161
- <Box marginTop={1}>
162
- <Text color="green">████</Text>
163
- <Text dimColor> Available </Text>
164
- <Text color="yellow">░░░░</Text>
165
- <Text dimColor> Limited </Text>
166
- <Text color="gray">████</Text>
167
- <Text dimColor> Disabled</Text>
260
+ <Box paddingX={1} marginTop={1}>
261
+ <Text dimColor>████ 100%</Text>
262
+ <Text dimColor> ░░░░ limited </Text>
263
+ <Text dimColor>── disabled</Text>
168
264
  </Box>
169
265
  </Box>
170
266
  );
@@ -13,10 +13,10 @@ export function Header({
13
13
  return (
14
14
  <Box flexDirection="column" marginBottom={1}>
15
15
  <Box>
16
- <Text bold color="cyan">
17
- * {title}
16
+ <Text bold color="white">
17
+ {title}
18
18
  </Text>
19
- {subtitle && <Text dimColor> - {subtitle}</Text>}
19
+ {subtitle ? <Text dimColor> / {subtitle}</Text> : null}
20
20
  </Box>
21
21
  <Text dimColor>
22
22
  ────────────────────────────────────────────────────────────────
@@ -22,14 +22,14 @@ export function SectionBox({
22
22
  marginBottom={1}
23
23
  >
24
24
  <Box paddingX={1}>
25
- <Text bold color="white">{title}</Text>
26
- {collapsed && <Text dimColor> (collapsed)</Text>}
25
+ <Text bold>{title}</Text>
26
+ {collapsed ? <Text dimColor> (collapsed)</Text> : null}
27
27
  </Box>
28
- {!collapsed && (
28
+ {!collapsed ? (
29
29
  <Box flexDirection="column" paddingY={0}>
30
30
  {children}
31
31
  </Box>
32
- )}
32
+ ) : null}
33
33
  </Box>
34
34
  );
35
35
  }
@@ -1,33 +1,33 @@
1
- import React from "react";
2
- import { Box, Text } from "ink";
3
-
4
- interface StatCardProps {
5
- label: string;
6
- value: string | number;
7
- color?: string;
8
- }
9
-
10
- export function StatCard({ label, value, color = "white" }: StatCardProps) {
11
- return (
12
- <Box flexDirection="column" marginRight={2}>
13
- <Text dimColor>{label}</Text>
14
- <Text bold color={color}>
15
- {value}
16
- </Text>
17
- </Box>
18
- );
19
- }
20
-
21
- interface StatsRowProps {
22
- stats: StatCardProps[];
23
- }
24
-
25
- export function StatsRow({ stats }: StatsRowProps) {
26
- return (
27
- <Box flexDirection="row" marginY={1}>
28
- {stats.map((stat, index) => (
29
- <StatCard key={index} {...stat} />
30
- ))}
31
- </Box>
32
- );
33
- }
1
+ import React from "react";
2
+ import { Box, Text } from "ink";
3
+
4
+ interface StatCardProps {
5
+ label: string;
6
+ value: string | number;
7
+ color?: string;
8
+ }
9
+
10
+ export function StatCard({ label, value, color = "white" }: StatCardProps) {
11
+ return (
12
+ <Box flexDirection="column" marginRight={2}>
13
+ <Text dimColor>{label}</Text>
14
+ <Text bold color={color}>
15
+ {value}
16
+ </Text>
17
+ </Box>
18
+ );
19
+ }
20
+
21
+ interface StatsRowProps {
22
+ stats: StatCardProps[];
23
+ }
24
+
25
+ export function StatsRow({ stats }: StatsRowProps) {
26
+ return (
27
+ <Box flexDirection="row" marginY={1}>
28
+ {stats.map((stat, index) => (
29
+ <StatCard key={index} {...stat} />
30
+ ))}
31
+ </Box>
32
+ );
33
+ }
@@ -1,33 +1,33 @@
1
- import React from "react";
2
- import { Text } from "ink";
3
-
4
- interface StatusBadgeProps {
5
- status: "available" | "limited" | "disabled" | "error";
6
- label?: string;
7
- }
8
-
9
- const STATUS_COLORS: Record<string, string> = {
10
- available: "green",
11
- limited: "yellow",
12
- disabled: "gray",
13
- error: "red",
14
- };
15
-
16
- const STATUS_ICONS: Record<string, string> = {
17
- available: "●",
18
- limited: "",
19
- disabled: "x",
20
- error: "!",
21
- };
22
-
23
- export function StatusBadge({ status, label }: StatusBadgeProps) {
24
- const color = STATUS_COLORS[status] || "gray";
25
- const icon = STATUS_ICONS[status] || "?";
26
- const text = label || status.toUpperCase();
27
-
28
- return (
29
- <Text color={color}>
30
- {icon} {text}
31
- </Text>
32
- );
33
- }
1
+ import React from "react";
2
+ import { Text } from "ink";
3
+
4
+ interface StatusBadgeProps {
5
+ status: "available" | "limited" | "disabled" | "error";
6
+ label?: string;
7
+ }
8
+
9
+ const STATUS_COLORS: Record<string, string> = {
10
+ available: "white",
11
+ limited: "gray",
12
+ disabled: "gray",
13
+ error: "gray",
14
+ };
15
+
16
+ const STATUS_ICONS: Record<string, string> = {
17
+ available: "●",
18
+ limited: "",
19
+ disabled: "",
20
+ error: "!",
21
+ };
22
+
23
+ export function StatusBadge({ status, label }: StatusBadgeProps) {
24
+ const color = STATUS_COLORS[status] || "gray";
25
+ const icon = STATUS_ICONS[status] || "?";
26
+ const text = label || status.toUpperCase();
27
+
28
+ return (
29
+ <Text color={color}>
30
+ {icon} {text}
31
+ </Text>
32
+ );
33
+ }