dsh-ssh-tui 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +36 -6
- package/README.md +24 -13
- package/lib/approval-reviewer.js +102 -17
- package/lib/approval-reviewer.js.map +1 -1
- package/lib/auto-approval.js +312 -29
- package/lib/auto-approval.js.map +1 -1
- package/lib/footer.js +337 -0
- package/lib/footer.js.map +1 -0
- package/lib/i18n/en.js +83 -8
- package/lib/i18n/en.js.map +1 -1
- package/lib/i18n/index.js +1 -0
- package/lib/i18n/index.js.map +1 -1
- package/lib/i18n/zh.js +83 -8
- package/lib/i18n/zh.js.map +1 -1
- package/lib/json-args.js +30 -0
- package/lib/json-args.js.map +1 -0
- package/lib/paint.js +262 -0
- package/lib/paint.js.map +1 -0
- package/lib/picker.js +407 -56
- package/lib/picker.js.map +1 -1
- package/lib/plan.js +369 -0
- package/lib/plan.js.map +1 -0
- package/lib/quota.js +408 -0
- package/lib/quota.js.map +1 -0
- package/lib/session-list.js +18 -21
- package/lib/session-list.js.map +1 -1
- package/lib/term-text.js +827 -0
- package/lib/term-text.js.map +1 -0
- package/lib/tool-present.js +744 -0
- package/lib/tool-present.js.map +1 -0
- package/lib/transcript-types.js +6 -0
- package/lib/transcript-types.js.map +1 -0
- package/lib/tui.js +747 -3077
- package/lib/tui.js.map +1 -1
- package/lib/types/approval-reviewer.d.ts +18 -4
- package/lib/types/auto-approval.d.ts +53 -2
- package/lib/types/footer.d.ts +155 -0
- package/lib/types/i18n/index.d.ts +2 -0
- package/lib/types/json-args.d.ts +7 -0
- package/lib/types/paint.d.ts +78 -0
- package/lib/types/picker.d.ts +99 -7
- package/lib/types/plan.d.ts +80 -0
- package/lib/types/quota.d.ts +94 -0
- package/lib/types/session-list.d.ts +13 -0
- package/lib/types/term-text.d.ts +130 -0
- package/lib/types/tool-present.d.ts +165 -0
- package/lib/types/transcript-types.d.ts +152 -0
- package/lib/types/tui.d.ts +39 -665
- package/package.json +1 -1
package/lib/quota.js
ADDED
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode / SuperGrok / DeepSeek quota and prepaid-balance parsers.
|
|
3
|
+
*/
|
|
4
|
+
import { t } from './i18n/index.js';
|
|
5
|
+
/** Build per-model reasoningEfforts from a provider-level reasoning default. */
|
|
6
|
+
export function reasoningEffortsForDefault(reasoning) {
|
|
7
|
+
if (typeof reasoning !== 'string')
|
|
8
|
+
return undefined;
|
|
9
|
+
const level = reasoning.trim();
|
|
10
|
+
if (level === '' || level === 'off')
|
|
11
|
+
return undefined;
|
|
12
|
+
return { off: null, [level]: level };
|
|
13
|
+
}
|
|
14
|
+
export const OPENCODE_GO_USAGE_URL = 'https://opencode.ai/zen/go/v1/usage';
|
|
15
|
+
export const OPENCODE_ZEN_BASE_URL = 'https://opencode.ai/zen/v1';
|
|
16
|
+
export const SUPERGROK_BILLING_URL = 'https://cli-chat-proxy.grok.com/v1/billing?format=credits';
|
|
17
|
+
export const DEEPSEEK_PUBLIC_BASE_URL = 'https://api.deepseek.com';
|
|
18
|
+
/** OpenAI-completions gateways: probe these relative to the configured base URL. */
|
|
19
|
+
export const OPENAI_COMPAT_BALANCE_PATHS = [
|
|
20
|
+
'/user/balance',
|
|
21
|
+
'/dashboard/billing/credit_grants',
|
|
22
|
+
'/v1/dashboard/billing/credit_grants',
|
|
23
|
+
'/v1/dashboard/billing/subscription',
|
|
24
|
+
];
|
|
25
|
+
const QUOTA_ALERT_THRESHOLDS = [50, 25, 10, 5];
|
|
26
|
+
/** Remaining % at or below this is “close” and uses the faster cadence. */
|
|
27
|
+
const QUOTA_NEAR_THRESHOLD_PERCENT = 55;
|
|
28
|
+
/**
|
|
29
|
+
* Classify the currently selected provider as an OpenCode route. Built-in
|
|
30
|
+
* `opencode`/`opencode-go` ids are recognized directly, and custom llm-pi-ai
|
|
31
|
+
* routes are recognized by their `opencode.ai` base URL.
|
|
32
|
+
*/
|
|
33
|
+
export function openCodeSourceFor(provider, llmPiAiSection) {
|
|
34
|
+
const section = llmPiAiSection;
|
|
35
|
+
const profile = section?.providers?.[provider];
|
|
36
|
+
const baseURL = typeof profile?.baseURL === 'string' ? profile.baseURL : undefined;
|
|
37
|
+
const lowerBase = baseURL?.toLowerCase() ?? '';
|
|
38
|
+
const isGo = provider === 'opencode-go' || lowerBase.includes('opencode.ai/zen/go');
|
|
39
|
+
const isZen = provider === 'opencode' || (lowerBase.includes('opencode.ai/zen') && !isGo);
|
|
40
|
+
if (!isGo && !isZen)
|
|
41
|
+
return null;
|
|
42
|
+
const apiKeyEnv = typeof profile?.apiKeyEnv === 'string' && profile.apiKeyEnv.trim() !== ''
|
|
43
|
+
? profile.apiKeyEnv
|
|
44
|
+
: provider === 'opencode'
|
|
45
|
+
? 'OPENCODE_API_KEY'
|
|
46
|
+
: provider === 'opencode-go'
|
|
47
|
+
? 'OPENCODE_GO_API_KEY'
|
|
48
|
+
: `${provider.replaceAll('-', '_').toUpperCase()}_API_KEY`;
|
|
49
|
+
const label = typeof profile?.displayName === 'string' && profile.displayName.trim() !== ''
|
|
50
|
+
? profile.displayName
|
|
51
|
+
: isGo ? 'OpenCode Go' : 'OpenCode Zen';
|
|
52
|
+
return {
|
|
53
|
+
provider,
|
|
54
|
+
flavor: isGo ? 'go' : 'zen',
|
|
55
|
+
label,
|
|
56
|
+
apiKeyEnv,
|
|
57
|
+
...(baseURL === undefined ? {} : { baseURL }),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function openCodeGoUsageWindow(value) {
|
|
61
|
+
if (typeof value !== 'object' || value === null)
|
|
62
|
+
return undefined;
|
|
63
|
+
const raw = value;
|
|
64
|
+
return {
|
|
65
|
+
...(typeof raw.status === 'string' ? { status: raw.status } : {}),
|
|
66
|
+
...(typeof raw.percent === 'number' && Number.isFinite(raw.percent) ? { percent: raw.percent } : {}),
|
|
67
|
+
...(typeof raw.resetsAt === 'string' ? { resetsAt: raw.resetsAt } : {}),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/** A days/hours/minutes/seconds relative duration for quota reset times. */
|
|
71
|
+
function formatRelativeDuration(ms) {
|
|
72
|
+
const seconds = Math.max(0, Math.floor(ms / 1000));
|
|
73
|
+
if (seconds < 60)
|
|
74
|
+
return `${seconds}s`;
|
|
75
|
+
if (seconds < 3600)
|
|
76
|
+
return `${Math.floor(seconds / 60)}m${seconds % 60}s`;
|
|
77
|
+
if (seconds < 86400) {
|
|
78
|
+
return `${Math.floor(seconds / 3600)}h${Math.floor(seconds % 3600 / 60)}m`;
|
|
79
|
+
}
|
|
80
|
+
return `${Math.floor(seconds / 86400)}d${Math.floor(seconds % 86400 / 3600)}h`;
|
|
81
|
+
}
|
|
82
|
+
/** One compact `████░░ 40.0% · 正常 · 约 2m 后重置` line for a Go limit. */
|
|
83
|
+
function formatOpenCodeGoWindow(label, value) {
|
|
84
|
+
const window = openCodeGoUsageWindow(value);
|
|
85
|
+
const percent = window?.percent === undefined
|
|
86
|
+
? null
|
|
87
|
+
: Math.max(0, Math.min(100, window.percent));
|
|
88
|
+
const state = window?.status === 'rate-limited'
|
|
89
|
+
? t('quota.throttled')
|
|
90
|
+
: window?.status === 'ok'
|
|
91
|
+
? t('quota.ok')
|
|
92
|
+
: window?.status ?? t('quota.unknown');
|
|
93
|
+
const parts = [label];
|
|
94
|
+
if (percent !== null) {
|
|
95
|
+
const barWidth = 16;
|
|
96
|
+
const filled = Math.round(percent / 100 * barWidth);
|
|
97
|
+
parts.push(`${'█'.repeat(filled)}${'░'.repeat(barWidth - filled)} ${percent.toFixed(1)}%`);
|
|
98
|
+
}
|
|
99
|
+
parts.push(state);
|
|
100
|
+
if (window?.resetsAt !== undefined) {
|
|
101
|
+
const reset = new Date(window.resetsAt);
|
|
102
|
+
if (!Number.isNaN(reset.getTime())) {
|
|
103
|
+
const until = reset.getTime() - Date.now();
|
|
104
|
+
parts.push(until > 0
|
|
105
|
+
? t('quota.resetInFull', { duration: formatRelativeDuration(until), when: reset.toLocaleString() })
|
|
106
|
+
: t('quota.resetAt', { when: reset.toLocaleString() }));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return ` ${parts.join(' · ')}`;
|
|
110
|
+
}
|
|
111
|
+
export function remainingPercentFromUsed(usedPercent) {
|
|
112
|
+
if (!Number.isFinite(usedPercent))
|
|
113
|
+
return 100;
|
|
114
|
+
return Math.max(0, Math.min(100, Math.round((100 - usedPercent) * 10) / 10));
|
|
115
|
+
}
|
|
116
|
+
/** Cross a remaining-percent threshold from above (50 / 25 / 10 / 5).
|
|
117
|
+
* Only the tightest (lowest) crossed threshold is returned, so one drop
|
|
118
|
+
* never paints 50/25/10 as three identical warnings. */
|
|
119
|
+
export function crossedQuotaThresholds(previousRemaining, remaining) {
|
|
120
|
+
const crossed = QUOTA_ALERT_THRESHOLDS.filter(threshold => remaining <= threshold && (previousRemaining === undefined || previousRemaining > threshold));
|
|
121
|
+
if (crossed.length === 0)
|
|
122
|
+
return [];
|
|
123
|
+
return [crossed[crossed.length - 1]];
|
|
124
|
+
}
|
|
125
|
+
export function quotaAlertText(snapshot, window) {
|
|
126
|
+
const reset = window.resetsAt === undefined ? '' : `(${formatQuotaReset(window.resetsAt)})`;
|
|
127
|
+
return t('quota.alert', {
|
|
128
|
+
plan: snapshot.plan,
|
|
129
|
+
period: quotaPeriodLabel(window.period),
|
|
130
|
+
percent: window.remainingPercent.toFixed(0),
|
|
131
|
+
reset,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* How often to re-fetch quota or prepaid balance, counted in model steps.
|
|
136
|
+
* Default is every 10 steps. Near a remaining-percent threshold, hourly
|
|
137
|
+
* windows refresh every 4 steps.
|
|
138
|
+
*/
|
|
139
|
+
export function quotaRefreshEverySteps(window) {
|
|
140
|
+
if (window === undefined)
|
|
141
|
+
return 10;
|
|
142
|
+
const near = window.remainingPercent <= QUOTA_NEAR_THRESHOLD_PERCENT;
|
|
143
|
+
if (window.period === 'hourly' && near)
|
|
144
|
+
return 4;
|
|
145
|
+
return 10;
|
|
146
|
+
}
|
|
147
|
+
/** @deprecated Same cadence as {@link quotaRefreshEverySteps}; the name predates step accounting. */
|
|
148
|
+
export const quotaRefreshEveryTurns = quotaRefreshEverySteps;
|
|
149
|
+
function quotaPeriodLabel(period) {
|
|
150
|
+
if (period === 'hourly')
|
|
151
|
+
return t('quota.periodHourly');
|
|
152
|
+
if (period === 'weekly')
|
|
153
|
+
return t('quota.periodWeekly');
|
|
154
|
+
if (period === 'monthly')
|
|
155
|
+
return t('quota.periodMonthly');
|
|
156
|
+
return t('quota.periodUnknown');
|
|
157
|
+
}
|
|
158
|
+
function formatQuotaReset(iso) {
|
|
159
|
+
const reset = new Date(iso);
|
|
160
|
+
if (Number.isNaN(reset.getTime()))
|
|
161
|
+
return iso;
|
|
162
|
+
const until = reset.getTime() - Date.now();
|
|
163
|
+
return until > 0
|
|
164
|
+
? t('quota.resetIn', { duration: formatRelativeDuration(until) })
|
|
165
|
+
: t('quota.resetAt', { when: reset.toLocaleString() });
|
|
166
|
+
}
|
|
167
|
+
export function parseSuperGrokBilling(payload) {
|
|
168
|
+
if (payload === null || typeof payload !== 'object') {
|
|
169
|
+
throw new Error(t('quota.supergrokUnrecognized'));
|
|
170
|
+
}
|
|
171
|
+
const root = payload;
|
|
172
|
+
const cfg = root.config;
|
|
173
|
+
if (cfg === null || typeof cfg !== 'object') {
|
|
174
|
+
throw new Error(t('quota.supergrokUnrecognized'));
|
|
175
|
+
}
|
|
176
|
+
const config = cfg;
|
|
177
|
+
const usedRaw = config.creditUsagePercent ?? config.credit_usage_percent;
|
|
178
|
+
const used = typeof usedRaw === 'number' && Number.isFinite(usedRaw) ? usedRaw : 0;
|
|
179
|
+
const periodRaw = config.currentPeriod ?? config.current_period;
|
|
180
|
+
const periodObj = periodRaw !== null && typeof periodRaw === 'object' ? periodRaw : undefined;
|
|
181
|
+
const type = typeof periodObj?.type === 'string' ? periodObj.type : '';
|
|
182
|
+
const period = type.includes('WEEKLY') ? 'weekly' : type.includes('MONTHLY') ? 'monthly' : 'unknown';
|
|
183
|
+
const end = typeof periodObj?.end === 'string'
|
|
184
|
+
? periodObj.end
|
|
185
|
+
: typeof config.billingPeriodEnd === 'string'
|
|
186
|
+
? config.billingPeriodEnd
|
|
187
|
+
: typeof config.billing_period_end === 'string'
|
|
188
|
+
? config.billing_period_end
|
|
189
|
+
: undefined;
|
|
190
|
+
const plan = typeof root.subscription_tier === 'string' && root.subscription_tier.trim() !== ''
|
|
191
|
+
? root.subscription_tier.trim()
|
|
192
|
+
: typeof root.subscriptionTier === 'string' && root.subscriptionTier.trim() !== ''
|
|
193
|
+
? root.subscriptionTier.trim()
|
|
194
|
+
: 'SuperGrok';
|
|
195
|
+
return {
|
|
196
|
+
provider: 'xai',
|
|
197
|
+
plan,
|
|
198
|
+
windows: [{
|
|
199
|
+
label: period === 'monthly' ? t('quota.windowMonthly') : t('quota.windowWeekly'),
|
|
200
|
+
period: period === 'unknown' ? 'weekly' : period,
|
|
201
|
+
remainingPercent: remainingPercentFromUsed(used),
|
|
202
|
+
...(end === undefined ? {} : { resetsAt: end }),
|
|
203
|
+
}],
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
export function parseOpenCodeGoQuota(payload, provider) {
|
|
207
|
+
const raw = payload;
|
|
208
|
+
const usage = raw?.usage;
|
|
209
|
+
if (usage === null || usage === undefined)
|
|
210
|
+
throw new Error(t('quota.unrecognized'));
|
|
211
|
+
const windows = [];
|
|
212
|
+
const push = (label, period, value) => {
|
|
213
|
+
const window = openCodeGoUsageWindow(value);
|
|
214
|
+
if (window?.percent === undefined)
|
|
215
|
+
return;
|
|
216
|
+
windows.push({
|
|
217
|
+
label,
|
|
218
|
+
period,
|
|
219
|
+
remainingPercent: remainingPercentFromUsed(window.percent),
|
|
220
|
+
...(window.resetsAt === undefined ? {} : { resetsAt: window.resetsAt }),
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
push(t('quota.windowHourly'), 'hourly', usage.rolling);
|
|
224
|
+
push(t('quota.windowWeekly'), 'weekly', usage.weekly);
|
|
225
|
+
push(t('quota.windowMonthly'), 'monthly', usage.monthly);
|
|
226
|
+
if (windows.length === 0)
|
|
227
|
+
throw new Error(t('quota.unrecognized'));
|
|
228
|
+
return { provider, plan: 'OpenCode Go', windows };
|
|
229
|
+
}
|
|
230
|
+
export function formatQuotaSnapshot(snapshot) {
|
|
231
|
+
const lines = [t('quota.snapshotHeader', { plan: snapshot.plan, provider: snapshot.provider })];
|
|
232
|
+
for (const window of snapshot.windows) {
|
|
233
|
+
const remaining = Math.max(0, Math.min(100, window.remainingPercent));
|
|
234
|
+
const barWidth = 16;
|
|
235
|
+
const filled = Math.round(remaining / 100 * barWidth);
|
|
236
|
+
const reset = window.resetsAt === undefined ? '' : ` · ${formatQuotaReset(window.resetsAt)}`;
|
|
237
|
+
const bar = `${'█'.repeat(filled)}${'░'.repeat(barWidth - filled)}`;
|
|
238
|
+
lines.push(t('quota.snapshotWindow', {
|
|
239
|
+
label: window.label,
|
|
240
|
+
bar,
|
|
241
|
+
percent: remaining.toFixed(1),
|
|
242
|
+
reset,
|
|
243
|
+
}));
|
|
244
|
+
}
|
|
245
|
+
return lines.join('\n');
|
|
246
|
+
}
|
|
247
|
+
/** Compact `/status` quota line: tightest window first, then the rest. */
|
|
248
|
+
export function formatQuotaStatusLine(snapshot) {
|
|
249
|
+
if (snapshot === undefined || snapshot.windows.length === 0)
|
|
250
|
+
return 'quota: none';
|
|
251
|
+
const tightest = tightestQuotaWindow(snapshot);
|
|
252
|
+
const ordered = tightest === undefined
|
|
253
|
+
? snapshot.windows
|
|
254
|
+
: [tightest, ...snapshot.windows.filter(window => window !== tightest)];
|
|
255
|
+
const parts = ordered.map(window => {
|
|
256
|
+
const remaining = Math.max(0, Math.min(100, window.remainingPercent));
|
|
257
|
+
return `${window.label} ${remaining.toFixed(0)}%`;
|
|
258
|
+
});
|
|
259
|
+
return `quota: ${snapshot.plan} ${parts.join(' · ')}`;
|
|
260
|
+
}
|
|
261
|
+
/** Tightest remaining window — used for threshold alerts. */
|
|
262
|
+
export function tightestQuotaWindow(snapshot) {
|
|
263
|
+
return snapshot.windows.reduce((best, window) => {
|
|
264
|
+
if (best === undefined || window.remainingPercent < best.remainingPercent)
|
|
265
|
+
return window;
|
|
266
|
+
return best;
|
|
267
|
+
}, undefined);
|
|
268
|
+
}
|
|
269
|
+
/** Render the OpenCode Go quota payload as a transcript block. */
|
|
270
|
+
export function formatOpenCodeGoUsage(payload, source) {
|
|
271
|
+
return formatQuotaSnapshot(parseOpenCodeGoQuota(payload, source.provider));
|
|
272
|
+
}
|
|
273
|
+
export function joinUrl(base, path) {
|
|
274
|
+
const root = base.replace(/\/+$/u, '');
|
|
275
|
+
const suffix = path.startsWith('/') ? path : `/${path}`;
|
|
276
|
+
if (root.endsWith('/v1') && suffix.startsWith('/v1/'))
|
|
277
|
+
return `${root}${suffix.slice(3)}`;
|
|
278
|
+
return `${root}${suffix}`;
|
|
279
|
+
}
|
|
280
|
+
export function parseDeepSeekBalance(payload, provider = 'deepseek-official') {
|
|
281
|
+
if (payload === null || typeof payload !== 'object') {
|
|
282
|
+
throw new Error(t('quota.deepseekUnrecognized'));
|
|
283
|
+
}
|
|
284
|
+
const raw = payload;
|
|
285
|
+
const infos = Array.isArray(raw.balance_infos) ? raw.balance_infos : [];
|
|
286
|
+
const lines = [];
|
|
287
|
+
for (const item of infos) {
|
|
288
|
+
if (item === null || typeof item !== 'object')
|
|
289
|
+
continue;
|
|
290
|
+
const row = item;
|
|
291
|
+
const currency = typeof row.currency === 'string' ? row.currency : undefined;
|
|
292
|
+
const total = typeof row.total_balance === 'string' ? row.total_balance : typeof row.total_balance === 'number' ? String(row.total_balance) : undefined;
|
|
293
|
+
if (total === undefined)
|
|
294
|
+
continue;
|
|
295
|
+
lines.push({
|
|
296
|
+
label: t('balance.available'),
|
|
297
|
+
amount: total,
|
|
298
|
+
...(currency === undefined ? {} : { currency }),
|
|
299
|
+
});
|
|
300
|
+
const granted = typeof row.granted_balance === 'string' ? row.granted_balance : undefined;
|
|
301
|
+
const topped = typeof row.topped_up_balance === 'string' ? row.topped_up_balance : undefined;
|
|
302
|
+
if (granted !== undefined)
|
|
303
|
+
lines.push({ label: t('balance.granted'), amount: granted, ...(currency === undefined ? {} : { currency }) });
|
|
304
|
+
if (topped !== undefined)
|
|
305
|
+
lines.push({ label: t('balance.topped'), amount: topped, ...(currency === undefined ? {} : { currency }) });
|
|
306
|
+
}
|
|
307
|
+
if (lines.length === 0)
|
|
308
|
+
throw new Error(t('quota.deepseekUnrecognized'));
|
|
309
|
+
return {
|
|
310
|
+
provider,
|
|
311
|
+
plan: t('route.deepseek'),
|
|
312
|
+
available: typeof raw.is_available === 'boolean' ? raw.is_available : undefined,
|
|
313
|
+
lines,
|
|
314
|
+
sourcePath: '/user/balance',
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
function numberish(value) {
|
|
318
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
319
|
+
return String(value);
|
|
320
|
+
if (typeof value === 'string' && value.trim() !== '')
|
|
321
|
+
return value.trim();
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
function recordOf(value) {
|
|
325
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
326
|
+
? value
|
|
327
|
+
: undefined;
|
|
328
|
+
}
|
|
329
|
+
/** Best-effort parse of OpenAI-compatible credit/balance JSON. */
|
|
330
|
+
export function parseOpenAiCompatibleBalance(payload, provider, path) {
|
|
331
|
+
const raw = recordOf(payload);
|
|
332
|
+
if (raw === undefined)
|
|
333
|
+
return undefined;
|
|
334
|
+
const lines = [];
|
|
335
|
+
const totalGranted = numberish(raw.total_granted);
|
|
336
|
+
const totalUsed = numberish(raw.total_used);
|
|
337
|
+
const totalAvailable = numberish(raw.total_available);
|
|
338
|
+
if (totalAvailable !== undefined)
|
|
339
|
+
lines.push({ label: t('balance.remaining'), amount: totalAvailable, currency: 'USD' });
|
|
340
|
+
if (totalGranted !== undefined)
|
|
341
|
+
lines.push({ label: t('balance.total'), amount: totalGranted, currency: 'USD' });
|
|
342
|
+
if (totalUsed !== undefined)
|
|
343
|
+
lines.push({ label: t('balance.used'), amount: totalUsed, currency: 'USD' });
|
|
344
|
+
const hardLimit = numberish(raw.hard_limit_usd ?? raw.hard_limit);
|
|
345
|
+
const softLimit = numberish(raw.soft_limit_usd ?? raw.soft_limit);
|
|
346
|
+
if (hardLimit !== undefined)
|
|
347
|
+
lines.push({ label: t('balance.hard'), amount: hardLimit, currency: 'USD' });
|
|
348
|
+
if (softLimit !== undefined)
|
|
349
|
+
lines.push({ label: t('balance.soft'), amount: softLimit, currency: 'USD' });
|
|
350
|
+
const data = recordOf(raw.data) ?? raw;
|
|
351
|
+
const balance = numberish(data.balance ?? data.total_balance ?? data.credit ?? data.credits ?? data.quota);
|
|
352
|
+
if (lines.length === 0 && balance !== undefined) {
|
|
353
|
+
lines.push({ label: t('balance.generic'), amount: balance, currency: typeof data.currency === 'string' ? data.currency : undefined });
|
|
354
|
+
}
|
|
355
|
+
if (Array.isArray(raw.balance_infos)) {
|
|
356
|
+
try {
|
|
357
|
+
return { ...parseDeepSeekBalance(raw, provider), plan: provider, sourcePath: path };
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
// Not DeepSeek-shaped despite the field name.
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
if (lines.length === 0)
|
|
364
|
+
return undefined;
|
|
365
|
+
return { provider, plan: provider, lines, sourcePath: path };
|
|
366
|
+
}
|
|
367
|
+
/** Compact footer chip: `余额 86.42 CNY`. Prefers remaining/available lines. */
|
|
368
|
+
export function formatFooterBalance(snapshot) {
|
|
369
|
+
const preferred = snapshot.lines.find(line => /剩余|可用|余额|available|remaining|credit/iu.test(line.label))
|
|
370
|
+
?? snapshot.lines[0];
|
|
371
|
+
if (preferred === undefined)
|
|
372
|
+
return undefined;
|
|
373
|
+
const amount = preferred.amount.trim();
|
|
374
|
+
if (amount === '')
|
|
375
|
+
return undefined;
|
|
376
|
+
const currency = preferred.currency === undefined || preferred.currency === '' ? '' : ` ${preferred.currency}`;
|
|
377
|
+
return t('footer.balance', { amount: `${amount}${currency}` });
|
|
378
|
+
}
|
|
379
|
+
export function formatAccountBalance(snapshot) {
|
|
380
|
+
const header = [t('balance.header', { plan: snapshot.plan, provider: snapshot.provider })];
|
|
381
|
+
if (snapshot.available === false)
|
|
382
|
+
header.push(t('balance.unavailable'));
|
|
383
|
+
for (const line of snapshot.lines) {
|
|
384
|
+
const currency = line.currency === undefined ? '' : ` ${line.currency}`;
|
|
385
|
+
header.push(` ${line.label} · ${line.amount}${currency}`);
|
|
386
|
+
}
|
|
387
|
+
if (snapshot.sourcePath !== undefined)
|
|
388
|
+
header.push(t('balance.source', { path: snapshot.sourcePath }));
|
|
389
|
+
return header.join('\n');
|
|
390
|
+
}
|
|
391
|
+
/** Extract a safe human-readable message from an OpenCode error payload. */
|
|
392
|
+
export function openCodeApiErrorMessage(payload) {
|
|
393
|
+
if (typeof payload !== 'object' || payload === null)
|
|
394
|
+
return '';
|
|
395
|
+
const raw = payload;
|
|
396
|
+
const error = raw.error;
|
|
397
|
+
if (typeof error === 'string' && error.trim() !== '')
|
|
398
|
+
return error.trim();
|
|
399
|
+
if (typeof error === 'object' && error !== null) {
|
|
400
|
+
const message = error.message;
|
|
401
|
+
if (typeof message === 'string' && message.trim() !== '')
|
|
402
|
+
return message.trim();
|
|
403
|
+
}
|
|
404
|
+
if (typeof raw.message === 'string' && raw.message.trim() !== '')
|
|
405
|
+
return raw.message.trim();
|
|
406
|
+
return '';
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=quota.js.map
|
package/lib/quota.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota.js","sourceRoot":"","sources":["../src/quota.ts"],"names":[],"mappings":"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"}
|
package/lib/session-list.js
CHANGED
|
@@ -57,18 +57,6 @@ export function formatSessionTime(timestamp) {
|
|
|
57
57
|
const pad = (value) => String(value).padStart(2, '0');
|
|
58
58
|
return `${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
59
59
|
}
|
|
60
|
-
/**
|
|
61
|
-
* List the most recent resumable top-level sessions, newest first.
|
|
62
|
-
*
|
|
63
|
-
* Subagent-owned sessions and the current session are excluded. Sessions
|
|
64
|
-
* whose event log cannot be inspected are kept (marked `unreadable`) instead
|
|
65
|
-
* of silently disappearing from history; readable sessions with user input
|
|
66
|
-
* sort first. The label is the user's first input, falling back to the
|
|
67
|
-
* session title and then the id.
|
|
68
|
-
* @param persistence - the session persistence service.
|
|
69
|
-
* @param currentId - the live session to exclude (empty at launch).
|
|
70
|
-
* @returns up to nine candidates in display order.
|
|
71
|
-
*/
|
|
72
60
|
/** Whether one durable event is a user-authored message. */
|
|
73
61
|
function isUserMessageEvent(event) {
|
|
74
62
|
const candidate = event;
|
|
@@ -111,6 +99,19 @@ async function pruneSessionArtifacts(persistence, meta) {
|
|
|
111
99
|
}
|
|
112
100
|
/** Upper bound on one inspection batch, so the picker never fans out unbounded. */
|
|
113
101
|
const INSPECT_BATCH_SIZE = 30;
|
|
102
|
+
/**
|
|
103
|
+
* List resumable top-level sessions, newest first.
|
|
104
|
+
*
|
|
105
|
+
* Subagent-owned sessions and the current session are excluded. Sessions
|
|
106
|
+
* whose event log cannot be inspected are kept (marked `unreadable`) instead
|
|
107
|
+
* of silently disappearing from history; readable sessions with user input
|
|
108
|
+
* sort first. The label is the persisted title, then the user's first input,
|
|
109
|
+
* then the id.
|
|
110
|
+
* @param persistence - the session persistence service.
|
|
111
|
+
* @param currentId - the live session to exclude (empty at launch).
|
|
112
|
+
* @returns every resumable candidate in display order (attachable live
|
|
113
|
+
* hosts first, then readable logs, then unreadable).
|
|
114
|
+
*/
|
|
114
115
|
export async function listResumableSessions(persistence, currentId, listHosts = listAttachableHosts) {
|
|
115
116
|
const headers = await persistence.list();
|
|
116
117
|
const candidates = headers
|
|
@@ -174,10 +175,10 @@ export async function listResumableSessions(persistence, currentId, listHosts =
|
|
|
174
175
|
};
|
|
175
176
|
}
|
|
176
177
|
};
|
|
177
|
-
// Headers only carry creation time
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
//
|
|
178
|
+
// Headers only carry creation time. Inspect in bounded batches so a large
|
|
179
|
+
// store cannot fan out unbounded, but do not stop after a fixed count —
|
|
180
|
+
// the picker filters and scrolls, so older real conversations must stay
|
|
181
|
+
// reachable. Recent empty boot rows are pruned instead of listed.
|
|
181
182
|
const inspected = [];
|
|
182
183
|
for (let offset = 0; offset < candidates.length; offset += INSPECT_BATCH_SIZE) {
|
|
183
184
|
const batch = candidates.slice(offset, offset + INSPECT_BATCH_SIZE);
|
|
@@ -192,8 +193,6 @@ export async function listResumableSessions(persistence, currentId, listHosts =
|
|
|
192
193
|
}
|
|
193
194
|
inspected.push(item);
|
|
194
195
|
}
|
|
195
|
-
if (inspected.filter(item => item.hasUserInput).length >= 9)
|
|
196
|
-
break;
|
|
197
196
|
}
|
|
198
197
|
const resumable = inspected.filter(item => item.hasUserInput || item.unreadable === true);
|
|
199
198
|
const hosts = await listHosts();
|
|
@@ -248,8 +247,6 @@ export async function listResumableSessions(persistence, currentId, listHosts =
|
|
|
248
247
|
resumable.sort((a, b) => (a.attach === undefined ? 1 : 0) - (b.attach === undefined ? 1 : 0)
|
|
249
248
|
|| (a.unreadable === true ? 1 : 0) - (b.unreadable === true ? 1 : 0)
|
|
250
249
|
|| b.updatedAt - a.updatedAt);
|
|
251
|
-
return resumable
|
|
252
|
-
.slice(0, 9)
|
|
253
|
-
.map(({ hasUserInput: _hasUserInput, ...rest }) => rest);
|
|
250
|
+
return resumable.map(({ hasUserInput: _hasUserInput, ...rest }) => rest);
|
|
254
251
|
}
|
|
255
252
|
//# sourceMappingURL=session-list.js.map
|
package/lib/session-list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-list.js","sourceRoot":"","sources":["../src/session-list.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-list.js","sourceRoot":"","sources":["../src/session-list.ts"],"names":[],"mappings":"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"}
|