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.
Files changed (2) hide show
  1. package/lib/client.js +23 -13
  2. 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 pushSubscriptionGroups(groups) {
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-err', key: 'suberr' }, '订阅额度获取失败:' + errors.sub));
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
- if (sub.error.kind === 'no-key' || sub.error.kind === 'auth') {
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', { className: 'bi-update', key: 'update' }, '↑ ' + updateInfo.latest));
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-bottom-info-bar",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "description": "DeepSeek Harness 底部信息栏插件:替换对话输入框下方的原生统计栏,显示服务商/具体模型、真实余额、高峰(琥珀)/空闲(绿)价与倒计时、本对话·今日·近一月·全部花费。安装一次,每次打开 DSH 自动生效。",
5
5
  "keywords": [
6
6
  "deepseek",