dsh-bottom-info-bar 1.4.0 → 1.4.2
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/lib/client.js +23 -13
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -113,7 +113,7 @@ function installStyles() {
|
|
|
113
113
|
.bi-offpeak { color: var(--dsw-alias-state-success-primary, #16a34a); font-weight: 700; }
|
|
114
114
|
.bi-err { color: var(--dsw-alias-state-error-primary, #dc2626); }
|
|
115
115
|
.bi-stale{ color: var(--dsw-alias-state-warn-primary, #d97706); }
|
|
116
|
-
.bi-update{ color: var(--dsw-alias-state-error-primary, #dc2626); }
|
|
116
|
+
.bi-update{ color: var(--dsw-alias-state-error-primary, #dc2626); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
|
|
117
117
|
`;
|
|
118
118
|
document.head.appendChild(style);
|
|
119
119
|
return function () { style.remove(); };
|
|
@@ -482,14 +482,29 @@ module.exports = {
|
|
|
482
482
|
|
|
483
483
|
// ---- 订阅制模式(互斥替换余额制版,row2 只三类信息):
|
|
484
484
|
// 订阅服务+模型 → 三窗口额度 → 距重置倒计时(最紧窗口);余额/时段/花费/token 均不显示 ----
|
|
485
|
-
function
|
|
485
|
+
function subscriptionFailureHint(error, source) {
|
|
486
|
+
const kind = error && error.kind;
|
|
487
|
+
const serviceName = source === 'opencode-go' ? 'OpenCode Go' : 'ChatGPT';
|
|
488
|
+
const message = error && typeof error.message === 'string' ? error.message : '';
|
|
489
|
+
const statusMatch = message.match(/HTTP (\d{3})/);
|
|
490
|
+
const status = statusMatch ? statusMatch[1] : '';
|
|
491
|
+
if (kind === 'no-key') return '原因:未找到 ' + serviceName + ' 订阅登录凭证。解决:请重新授权 ' + serviceName + '。';
|
|
492
|
+
if (kind === 'auth' || status === '401') return '原因:' + serviceName + ' 登录凭证已失效。解决:请重新授权 ' + serviceName + '。';
|
|
493
|
+
if (status === '403') return '原因:' + serviceName + ' 接口拒绝访问。解决:请重新授权,或稍后再试。';
|
|
494
|
+
if (status === '429') return '原因:' + serviceName + ' 接口请求过于频繁。解决:请稍后再试,避免频繁刷新。';
|
|
495
|
+
if (kind === 'timeout' || /timeout|timed out|abort/i.test(message)) return '原因:' + serviceName + ' 额度接口响应超时。解决:请检查网络并稍后再试。';
|
|
496
|
+
if (kind === 'parse') return '原因:' + serviceName + ' 返回的数据格式暂时无法识别。解决:请稍后再试,或更新插件。';
|
|
497
|
+
return '原因:' + serviceName + ' 额度接口暂时不可用。解决:请检查网络并稍后再试。';
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
function pushSubscriptionGroups(groups) {
|
|
486
501
|
groups.push(subscriptionProviderGroup());
|
|
487
502
|
const sub = state.sub;
|
|
488
503
|
const errors = state.errors || {};
|
|
489
504
|
if (!sub) {
|
|
490
505
|
if (errors.sub) {
|
|
491
506
|
// 本次 RPC 失败且无旧数据:显示失败信息而非永久"加载中…"
|
|
492
|
-
groups.push(React.createElement('span', { className: 'bi-
|
|
507
|
+
groups.push(React.createElement('span', { className: 'bi-stale', key: 'suberr', title: subscriptionFailureHint({ kind: 'exception', message: String(errors.sub) }) }, '⚠ 刷新失败'));
|
|
493
508
|
} else {
|
|
494
509
|
groups.push(React.createElement('span', { key: 'subload' }, '订阅额度加载中…'));
|
|
495
510
|
}
|
|
@@ -504,14 +519,7 @@ module.exports = {
|
|
|
504
519
|
// no-key(无令牌/缺 access_token)与 auth(令牌失效 401)→ 统一"未绑定/重新绑定"引导——
|
|
505
520
|
// 令牌由独立插件 dsh-chatgpt-subscription 维护,本插件只读令牌显示额度,不自行绑定/续期
|
|
506
521
|
if (sub.error && !hasData) {
|
|
507
|
-
|
|
508
|
-
const hint = sub.source === 'opencode-go'
|
|
509
|
-
? '未配置 OpenCode Go → 设置→模型 填写 OPENCODE_GO_API_KEY'
|
|
510
|
-
: '未绑定 ChatGPT 订阅 → 安装 dsh-chatgpt-subscription 插件授权绑定';
|
|
511
|
-
groups.push(React.createElement('span', { className: 'bi-err', key: 'subnokey' }, hint));
|
|
512
|
-
} else {
|
|
513
|
-
groups.push(React.createElement('span', { className: 'bi-err', key: 'suberr' }, '订阅额度获取失败:' + sub.error.message));
|
|
514
|
-
}
|
|
522
|
+
groups.push(React.createElement('span', { className: 'bi-stale', key: 'substale', title: subscriptionFailureHint(sub.error, sub.source) }, '⚠ 刷新失败'));
|
|
515
523
|
return;
|
|
516
524
|
}
|
|
517
525
|
// 窗口缺失(如 Codex 无 5 小时窗口)→ 跳过窗口组,不占位、不报错
|
|
@@ -558,7 +566,7 @@ module.exports = {
|
|
|
558
566
|
));
|
|
559
567
|
// host 快照失败(sub.error)或本次 RPC 失败(errors.sub)→ 均保留旧数据 + 降级标记
|
|
560
568
|
if (sub.error || errors.sub) {
|
|
561
|
-
groups.push(React.createElement('span', { className: 'bi-stale', key: 'substale', title: '
|
|
569
|
+
groups.push(React.createElement('span', { className: 'bi-stale', key: 'substale', title: subscriptionFailureHint(sub.error || { kind: 'exception', message: String(errors.sub || '') }) }, '⚠ 刷新失败'));
|
|
562
570
|
}
|
|
563
571
|
// 距重置倒计时(与显示的窗口一致,确保额度与倒计时匹配)
|
|
564
572
|
if (displayWindow && displayWindow.resetsAt) {
|
|
@@ -602,7 +610,9 @@ module.exports = {
|
|
|
602
610
|
}
|
|
603
611
|
|
|
604
612
|
if (updateInfo && updateInfo.available === true) {
|
|
605
|
-
groups.push(React.createElement('span', {
|
|
613
|
+
groups.push(React.createElement('span', {
|
|
614
|
+
className: 'bi-update', key: 'update', title: '请告知你的 Agent 将本插件更新到“' + updateInfo.latest + '”版本。',
|
|
615
|
+
}, '新版本提醒'));
|
|
606
616
|
}
|
|
607
617
|
|
|
608
618
|
// ---- 组装 ----
|
package/package.json
CHANGED