@jxgame2020/dsh-token-quota 0.1.13 → 0.1.15

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 CHANGED
@@ -170,7 +170,7 @@ window.__ModuleLoader__.load({
170
170
  }
171
171
  //#endregion
172
172
  //#region \0dsh-css:/Users/jxgame/Desktop/works/deepseek-harness-package/dsh-token-quota/packages/token-quota/src/client/TokenQuotaPanel.module.css.mjs
173
- const css = ".NPLLIq_panel{box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);pointer-events:auto;z-index:40;border-radius:12px;flex-direction:column;width:320px;max-height:min(72vh,560px);display:flex;position:fixed;top:56px;right:12px;overflow:hidden;box-shadow:0 8px 28px #0000002e}.NPLLIq_header{border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;touch-action:none;justify-content:space-between;align-items:flex-start;gap:8px;padding:10px 12px;display:flex}.NPLLIq_header:active{cursor:grabbing}.NPLLIq_headerText{flex-direction:column;gap:2px;min-width:0;display:flex}.NPLLIq_title{color:var(--dsw-alias-label-primary);align-items:baseline;gap:6px;font-size:13px;font-weight:600;display:flex}.NPLLIq_version{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:10px;font-weight:500}.NPLLIq_versionNew{color:var(--dsw-alias-status-warning-foreground,#b56900);background:var(--dsw-alias-status-warning-background,#fff6d7);cursor:default;border-radius:4px;padding:1px 6px}.NPLLIq_subtitle{color:var(--dsw-alias-label-secondary);font-size:11px}.NPLLIq_collapse{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 6px;font-size:11px}.NPLLIq_collapse:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_body{padding:4px 0;overflow-y:auto}.NPLLIq_row{border-bottom:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:6px;padding:8px 12px;display:flex}.NPLLIq_rowHeader{justify-content:space-between;align-items:center;gap:8px;display:flex}.NPLLIq_rowName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:6px;font-size:12px;font-weight:500;display:inline-flex;overflow:hidden}.NPLLIq_currentBadge{color:var(--dsw-alias-state-success-primary);border:1px solid var(--dsw-alias-state-success-primary);border-radius:8px;flex:none;padding:1px 6px;font-size:10px}.NPLLIq_rowMeta{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.NPLLIq_bar{background:var(--dsw-alias-bg-layer-1);border-radius:3px;height:6px;overflow:hidden}.NPLLIq_fillIdle{background:var(--dsw-alias-brand-primary);height:100%;transition:width .2s}.NPLLIq_fillWarn{background:var(--dsw-alias-state-warn-primary);height:100%;transition:width .2s}.NPLLIq_fillOver{background:var(--dsw-alias-state-error-primary);height:100%;transition:width .2s}.NPLLIq_controls{align-items:center;gap:6px;display:flex}.NPLLIq_input{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-primary);border-radius:6px;flex:1;padding:4px 8px;font-size:11px}.NPLLIq_input::placeholder{color:var(--dsw-alias-label-secondary)}.NPLLIq_save,.NPLLIq_switch{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px;font-size:11px}.NPLLIq_save:hover,.NPLLIq_switch:hover:not(:disabled){background:var(--dsw-alias-bg-layer-2)}.NPLLIq_switch:disabled{opacity:.5;cursor:default}.NPLLIq_notice,.NPLLIq_noticeError{color:var(--dsw-alias-label-secondary);padding:10px 12px;font-size:12px}.NPLLIq_noticeError{color:var(--dsw-alias-state-error-primary)}.NPLLIq_tab{background:var(--dsw-alias-brand-primary);border:1px solid var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-overlay);pointer-events:auto;cursor:pointer;z-index:90;border-radius:10px;align-items:center;gap:6px;padding:9px 14px;font-size:12px;font-weight:600;display:inline-flex;position:fixed;top:56px;right:12px;box-shadow:0 6px 20px #00000040}.NPLLIq_tab:hover{filter:brightness(1.08)}.NPLLIq_tabIcon{font-size:12px;line-height:1}.NPLLIq_tabLabel{white-space:nowrap}.NPLLIq_headerActions{flex:none;align-items:center;gap:4px;display:flex}.NPLLIq_settingsBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 6px;font-size:11px}.NPLLIq_settingsBtn:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_selectBtn{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:1px 6px;font-size:10px}.NPLLIq_selectBtn:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_gearBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;margin-left:6px;padding:0 2px;font-size:12px;line-height:1}.NPLLIq_gearBtn:hover{color:var(--dsw-alias-label-primary)}.NPLLIq_fullNotice{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-state-error-primary);border-radius:8px;margin:6px 12px;padding:8px 10px;font-size:12px}.NPLLIq_upgradeBanner{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-divider-1,#0000001a);border-radius:8px;margin:6px 12px;padding:10px 30px 10px 10px;font-size:12px;position:relative}.NPLLIq_upgradeBannerText{margin-bottom:6px;font-weight:600}.NPLLIq_upgradeCommands{flex-direction:column;gap:4px;display:flex}.NPLLIq_upgradeCommandRow{align-items:center;gap:6px;display:flex}.NPLLIq_upgradeCommand{background:var(--dsw-alias-bg-layer-2,#0000000a);white-space:nowrap;border-radius:4px;flex:1;min-width:0;padding:4px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;overflow-x:auto}.NPLLIq_copyBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;flex:none;padding:3px 8px;font-size:11px}.NPLLIq_copyBtn:hover{background:var(--dsw-alias-bg-layer-3,#00000014)}.NPLLIq_upgradeHint{color:var(--dsw-alias-label-secondary);margin-top:6px;font-size:11px}.NPLLIq_upgradeClose{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;font-size:16px;line-height:1;position:absolute;top:4px;right:6px}.NPLLIq_upgradeClose:hover{background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary)}.NPLLIq_checkUpdatesRow{justify-content:space-between;align-items:center;gap:12px;display:flex}.NPLLIq_checkUpdatesLabel{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.NPLLIq_checkUpdatesLabel input{margin:0}.NPLLIq_checkBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;white-space:nowrap;text-align:center;border-radius:4px;flex:none;min-width:72px;padding:4px 10px;font-size:12px}.NPLLIq_checkBtn:hover:not(:disabled){background:var(--dsw-alias-bg-layer-3,#00000014)}.NPLLIq_checkBtn:disabled{opacity:.6;cursor:default}.NPLLIq_checkErrorHint{color:var(--dsw-alias-state-error-primary,#c00);background:var(--dsw-alias-state-error-background,#ff00000f);border:1px solid var(--dsw-alias-state-error-border,#b4000040);word-break:break-all;border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px;line-height:1.4}.NPLLIq_dialog{z-index:100;box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;gap:12px;width:280px;max-height:80vh;padding:14px;display:flex;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%);box-shadow:0 8px 28px #00000040}.NPLLIq_dialogTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.NPLLIq_dialogSection{flex-direction:column;gap:6px;display:flex}.NPLLIq_dialogLabel{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:500}.NPLLIq_monitorHint{color:var(--dsw-alias-label-secondary);font-size:11px}.NPLLIq_monitorList{flex-direction:column;gap:2px;max-height:180px;display:flex;overflow-y:auto}.NPLLIq_monitorRow{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:2px 4px;font-size:12px;display:flex}.NPLLIq_monitorRow:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_monitorName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.NPLLIq_radioRow{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:3px 4px;font-size:12px;display:flex}.NPLLIq_radioRow:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_dialogActions{justify-content:flex-end;gap:6px;display:flex}.NPLLIq_dialogBtn,.NPLLIq_dialogBtnPrimary{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;border-radius:6px;padding:4px 12px;font-size:11px}.NPLLIq_dialogBtn{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary)}.NPLLIq_dialogBtnPrimary{background:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-overlay)}.NPLLIq_dialogHeader{z-index:2;background:var(--dsw-alias-bg-overlay);cursor:grab;user-select:none;touch-action:none;justify-content:space-between;align-items:center;gap:8px;margin:-14px -14px 0;padding:14px 14px 8px;display:flex;position:sticky;top:-14px}.NPLLIq_dialogHeader:active{cursor:grabbing}.NPLLIq_dialogClose{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:none;justify-content:center;align-items:center;font-size:18px;line-height:1;display:flex}.NPLLIq_dialogClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_resetRow{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.NPLLIq_resetSelect{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:6px;padding:3px 6px;font-size:12px}.NPLLIq_logTable{border-collapse:collapse;width:100%;font-size:11px}.NPLLIq_logTable th{text-align:left;color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);padding:4px 6px;font-weight:500}.NPLLIq_logTable td{color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);font-variant-numeric:tabular-nums;padding:4px 6px}.NPLLIq_logDayCol{white-space:nowrap;color:var(--dsw-alias-label-secondary)}.NPLLIq_logModelCol{text-overflow:ellipsis;white-space:nowrap;max-width:160px;overflow:hidden}.NPLLIq_logUsedCol{text-align:right}.NPLLIq_logDialog{gap:0;width:380px;max-height:min(72vh,480px);padding:0}.NPLLIq_logHeader{background:var(--dsw-alias-bg-overlay);cursor:grab;user-select:none;touch-action:none;flex:none;justify-content:space-between;align-items:center;gap:8px;padding:14px 14px 8px;display:flex}.NPLLIq_logHeader:active{cursor:grabbing}.NPLLIq_logScroll{flex:1;min-height:0;padding:0 14px 14px;overflow:auto}.NPLLIq_logToolbar{flex:1;align-items:center;gap:6px;display:flex}.NPLLIq_logSearch{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);min-width:0;color:var(--dsw-alias-label-primary);border-radius:4px;flex:1;padding:3px 6px;font-size:11px}.NPLLIq_logSearch:focus{border-color:var(--dsw-alias-accent-1,#4a9eff);outline:none}.NPLLIq_logClearBtn{border:1px solid var(--dsw-alias-state-error-border,#b400004d);color:var(--dsw-alias-state-error-primary,#c00);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;flex:none;padding:3px 8px;font-size:11px}.NPLLIq_logClearBtn:hover{background:var(--dsw-alias-state-error-background,#ff00000f)}.NPLLIq_logPager{border-top:1px solid var(--dsw-alias-divider-1,#00000014);background:var(--dsw-alias-bg-overlay);color:var(--dsw-alias-label-secondary);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:6px 14px;font-size:11px;display:flex}.NPLLIq_logPagerInfo{white-space:nowrap}.NPLLIq_logPagerControls{align-items:center;gap:4px;display:flex}.NPLLIq_logPagerBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);width:24px;height:24px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;font-size:13px;line-height:1}.NPLLIq_logPagerBtn:disabled{opacity:.4;cursor:default}.NPLLIq_logPagerPages{text-align:center;min-width:50px;color:var(--dsw-alias-label-secondary)}.NPLLIq_logPageSizeSelect{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;padding:2px 4px;font-size:11px}.NPLLIq_dialogOverlay{z-index:100001;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.NPLLIq_logClearDialog{gap:0;width:320px;padding:16px}.NPLLIq_dialogBody{color:var(--dsw-alias-label-secondary);margin:6px 0 10px;font-size:12px;line-height:1.5}.NPLLIq_logClearDate{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);width:100%;color:var(--dsw-alias-label-primary);border-radius:6px;margin-bottom:12px;padding:6px 8px;font-size:13px}.NPLLIq_logClearDate:focus{border-color:var(--dsw-alias-accent-1,#4a9eff);outline:none}";
173
+ const css = ".NPLLIq_panel{box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);pointer-events:auto;z-index:40;opacity:1;border-radius:12px;flex-direction:column;width:320px;max-height:min(72vh,560px);transition:opacity .18s;display:flex;position:fixed;top:56px;right:12px;overflow:hidden;box-shadow:0 8px 28px #0000002e}.NPLLIq_panelDim{opacity:.55}.NPLLIq_panelDimStrong{opacity:.3}.NPLLIq_header{border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;touch-action:none;justify-content:space-between;align-items:flex-start;gap:8px;padding:10px 12px;display:flex}.NPLLIq_header:active{cursor:grabbing}.NPLLIq_headerText{flex-direction:column;gap:2px;min-width:0;display:flex}.NPLLIq_title{color:var(--dsw-alias-label-primary);align-items:baseline;gap:6px;font-size:13px;font-weight:600;display:flex}.NPLLIq_version{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:10px;font-weight:500}.NPLLIq_versionNew{color:var(--dsw-alias-status-warning-foreground,#b56900);background:var(--dsw-alias-status-warning-background,#fff6d7);cursor:default;border-radius:4px;padding:1px 6px}.NPLLIq_subtitle{color:var(--dsw-alias-label-secondary);font-size:11px}.NPLLIq_collapse{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 6px;font-size:11px}.NPLLIq_collapse:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_body{padding:4px 0;overflow-y:auto}.NPLLIq_row{border-bottom:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:6px;padding:8px 12px;display:flex}.NPLLIq_rowHeader{justify-content:space-between;align-items:center;gap:8px;display:flex}.NPLLIq_rowName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:6px;font-size:12px;font-weight:500;display:inline-flex;overflow:hidden}.NPLLIq_currentBadge{color:var(--dsw-alias-state-success-primary);border:1px solid var(--dsw-alias-state-success-primary);border-radius:8px;flex:none;padding:1px 6px;font-size:10px}.NPLLIq_rowMeta{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.NPLLIq_bar{background:var(--dsw-alias-bg-layer-1);border-radius:3px;height:6px;overflow:hidden}.NPLLIq_fillIdle{background:var(--dsw-alias-brand-primary);height:100%;transition:width .2s}.NPLLIq_fillWarn{background:var(--dsw-alias-state-warn-primary);height:100%;transition:width .2s}.NPLLIq_fillOver{background:var(--dsw-alias-state-error-primary);height:100%;transition:width .2s}.NPLLIq_controls{align-items:center;gap:6px;display:flex}.NPLLIq_input{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-primary);border-radius:6px;flex:1;padding:4px 8px;font-size:11px}.NPLLIq_input::placeholder{color:var(--dsw-alias-label-secondary)}.NPLLIq_save,.NPLLIq_switch{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px;font-size:11px}.NPLLIq_save:hover,.NPLLIq_switch:hover:not(:disabled){background:var(--dsw-alias-bg-layer-2)}.NPLLIq_switch:disabled{opacity:.5;cursor:default}.NPLLIq_notice,.NPLLIq_noticeError{color:var(--dsw-alias-label-secondary);padding:10px 12px;font-size:12px}.NPLLIq_noticeError{color:var(--dsw-alias-state-error-primary)}.NPLLIq_tab{background:var(--dsw-alias-brand-primary);border:1px solid var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-overlay);pointer-events:auto;cursor:pointer;z-index:90;border-radius:10px;align-items:center;gap:6px;padding:9px 14px;font-size:12px;font-weight:600;display:inline-flex;position:fixed;top:56px;right:12px;box-shadow:0 6px 20px #00000040}.NPLLIq_tab:hover{filter:brightness(1.08)}.NPLLIq_tabIcon{font-size:12px;line-height:1}.NPLLIq_tabLabel{white-space:nowrap}.NPLLIq_headerActions{flex:none;align-items:center;gap:4px;display:flex}.NPLLIq_settingsBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 6px;font-size:11px}.NPLLIq_settingsBtn:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_selectBtn{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:1px 6px;font-size:10px}.NPLLIq_selectBtn:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_gearBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;margin-left:6px;padding:0 2px;font-size:12px;line-height:1}.NPLLIq_gearBtn:hover{color:var(--dsw-alias-label-primary)}.NPLLIq_fullNotice{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-state-error-primary);border-radius:8px;margin:6px 12px;padding:8px 10px;font-size:12px}.NPLLIq_upgradeBanner{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-divider-1,#0000001a);border-radius:8px;margin:6px 12px;padding:10px 30px 10px 10px;font-size:12px;position:relative}.NPLLIq_upgradeBannerText{margin-bottom:6px;font-weight:600}.NPLLIq_upgradeCommands{flex-direction:column;gap:4px;display:flex}.NPLLIq_upgradeCommandRow{align-items:center;gap:6px;display:flex}.NPLLIq_upgradeCommand{background:var(--dsw-alias-bg-layer-2,#0000000a);white-space:nowrap;border-radius:4px;flex:1;min-width:0;padding:4px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;overflow-x:auto}.NPLLIq_copyBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;flex:none;padding:3px 8px;font-size:11px}.NPLLIq_copyBtn:hover{background:var(--dsw-alias-bg-layer-3,#00000014)}.NPLLIq_upgradeHint{color:var(--dsw-alias-label-secondary);margin-top:6px;font-size:11px}.NPLLIq_upgradeClose{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;font-size:16px;line-height:1;position:absolute;top:4px;right:6px}.NPLLIq_upgradeClose:hover{background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary)}.NPLLIq_checkUpdatesRow{justify-content:space-between;align-items:center;gap:12px;display:flex}.NPLLIq_checkUpdatesLabel{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.NPLLIq_checkUpdatesLabel input{margin:0}.NPLLIq_checkBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;white-space:nowrap;text-align:center;border-radius:4px;flex:none;min-width:72px;padding:4px 10px;font-size:12px}.NPLLIq_checkBtn:hover:not(:disabled){background:var(--dsw-alias-bg-layer-3,#00000014)}.NPLLIq_checkBtn:disabled{opacity:.6;cursor:default}.NPLLIq_checkErrorHint{color:var(--dsw-alias-state-error-primary,#c00);background:var(--dsw-alias-state-error-background,#ff00000f);border:1px solid var(--dsw-alias-state-error-border,#b4000040);word-break:break-all;border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px;line-height:1.4}.NPLLIq_dialog{z-index:100;box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;gap:12px;width:280px;max-height:80vh;padding:14px;display:flex;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%);box-shadow:0 8px 28px #00000040}.NPLLIq_dialogTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.NPLLIq_dialogSection{flex-direction:column;gap:6px;display:flex}.NPLLIq_dialogLabel{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:500}.NPLLIq_monitorHint{color:var(--dsw-alias-label-secondary);font-size:11px}.NPLLIq_monitorList{flex-direction:column;gap:2px;max-height:180px;display:flex;overflow-y:auto}.NPLLIq_monitorRow{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:2px 4px;font-size:12px;display:flex}.NPLLIq_monitorRow:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_monitorName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.NPLLIq_radioRow{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:3px 4px;font-size:12px;display:flex}.NPLLIq_radioRow:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_dialogActions{justify-content:flex-end;gap:6px;display:flex}.NPLLIq_dialogBtn,.NPLLIq_dialogBtnPrimary{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;border-radius:6px;padding:4px 12px;font-size:11px}.NPLLIq_dialogBtn{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary)}.NPLLIq_dialogBtnPrimary{background:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-overlay)}.NPLLIq_dialogHeader{z-index:2;background:var(--dsw-alias-bg-overlay);cursor:grab;user-select:none;touch-action:none;justify-content:space-between;align-items:center;gap:8px;margin:-14px -14px 0;padding:14px 14px 8px;display:flex;position:sticky;top:-14px}.NPLLIq_dialogHeader:active{cursor:grabbing}.NPLLIq_dialogClose{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:none;justify-content:center;align-items:center;font-size:18px;line-height:1;display:flex}.NPLLIq_dialogClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_resetRow{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.NPLLIq_resetSelect{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:6px;padding:3px 6px;font-size:12px}.NPLLIq_logTable{border-collapse:collapse;width:100%;font-size:11px}.NPLLIq_logTable th{text-align:left;color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);padding:4px 6px;font-weight:500}.NPLLIq_logTable td{color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);font-variant-numeric:tabular-nums;padding:4px 6px}.NPLLIq_logDayCol{white-space:nowrap;color:var(--dsw-alias-label-secondary)}.NPLLIq_logModelCol{text-overflow:ellipsis;white-space:nowrap;max-width:160px;overflow:hidden}.NPLLIq_logUsedCol{text-align:right}.NPLLIq_logDialog{gap:0;width:380px;max-height:min(72vh,480px);padding:0}.NPLLIq_logHeader{background:var(--dsw-alias-bg-overlay);cursor:grab;user-select:none;touch-action:none;flex:none;justify-content:space-between;align-items:center;gap:8px;padding:14px 14px 8px;display:flex}.NPLLIq_logHeader:active{cursor:grabbing}.NPLLIq_logScroll{flex:1;min-height:0;padding:0 14px 14px;overflow:auto}.NPLLIq_logToolbar{flex:1;align-items:center;gap:6px;display:flex}.NPLLIq_logSearch{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);min-width:0;color:var(--dsw-alias-label-primary);border-radius:4px;flex:1;padding:3px 6px;font-size:11px}.NPLLIq_logSearch:focus{border-color:var(--dsw-alias-accent-1,#4a9eff);outline:none}.NPLLIq_logClearBtn{border:1px solid var(--dsw-alias-state-error-border,#b400004d);color:var(--dsw-alias-state-error-primary,#c00);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;flex:none;padding:3px 8px;font-size:11px}.NPLLIq_logClearBtn:hover{background:var(--dsw-alias-state-error-background,#ff00000f)}.NPLLIq_logPager{border-top:1px solid var(--dsw-alias-divider-1,#00000014);background:var(--dsw-alias-bg-overlay);color:var(--dsw-alias-label-secondary);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:6px 14px;font-size:11px;display:flex}.NPLLIq_logPagerInfo{white-space:nowrap}.NPLLIq_logPagerControls{align-items:center;gap:4px;display:flex}.NPLLIq_logPagerBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);width:24px;height:24px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;font-size:13px;line-height:1}.NPLLIq_logPagerBtn:disabled{opacity:.4;cursor:default}.NPLLIq_logPagerPages{text-align:center;min-width:50px;color:var(--dsw-alias-label-secondary)}.NPLLIq_logPageSizeSelect{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;padding:2px 4px;font-size:11px}.NPLLIq_dialogOverlay{z-index:100001;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.NPLLIq_logClearDialog{gap:0;width:320px;padding:16px}.NPLLIq_dialogBody{color:var(--dsw-alias-label-secondary);margin:6px 0 10px;font-size:12px;line-height:1.5}.NPLLIq_logClearDate{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);width:100%;color:var(--dsw-alias-label-primary);border-radius:6px;margin-bottom:12px;padding:6px 8px;font-size:13px}.NPLLIq_logClearDate:focus{border-color:var(--dsw-alias-accent-1,#4a9eff);outline:none}";
174
174
  const tagId = "@jxgame2020/dsh-token-quota/TokenQuotaPanel.module.css";
175
175
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
176
176
  const tag = document.createElement("style");
@@ -180,86 +180,88 @@ window.__ModuleLoader__.load({
180
180
  document.head.appendChild(tag);
181
181
  }
182
182
  var TokenQuotaPanel_module_css_default = {
183
- "logPager": "NPLLIq_logPager",
184
- "checkUpdatesLabel": "NPLLIq_checkUpdatesLabel",
185
- "dialogHeader": "NPLLIq_dialogHeader",
186
- "resetRow": "NPLLIq_resetRow",
187
- "logSearch": "NPLLIq_logSearch",
188
- "upgradeHint": "NPLLIq_upgradeHint",
189
- "settingsBtn": "NPLLIq_settingsBtn",
190
- "monitorRow": "NPLLIq_monitorRow",
191
- "dialogBody": "NPLLIq_dialogBody",
183
+ "fullNotice": "NPLLIq_fullNotice",
184
+ "upgradeBanner": "NPLLIq_upgradeBanner",
192
185
  "logHeader": "NPLLIq_logHeader",
193
- "save": "NPLLIq_save",
194
- "currentBadge": "NPLLIq_currentBadge",
195
- "upgradeCommands": "NPLLIq_upgradeCommands",
186
+ "title": "NPLLIq_title",
187
+ "rowHeader": "NPLLIq_rowHeader",
188
+ "dialogBtnPrimary": "NPLLIq_dialogBtnPrimary",
189
+ "settingsBtn": "NPLLIq_settingsBtn",
190
+ "version": "NPLLIq_version",
191
+ "headerText": "NPLLIq_headerText",
192
+ "gearBtn": "NPLLIq_gearBtn",
193
+ "checkUpdatesRow": "NPLLIq_checkUpdatesRow",
194
+ "monitorList": "NPLLIq_monitorList",
196
195
  "switch": "NPLLIq_switch",
197
- "collapse": "NPLLIq_collapse",
198
- "checkErrorHint": "NPLLIq_checkErrorHint",
199
- "header": "NPLLIq_header",
200
- "input": "NPLLIq_input",
201
196
  "upgradeBannerText": "NPLLIq_upgradeBannerText",
202
- "fillOver": "NPLLIq_fillOver",
203
- "title": "NPLLIq_title",
204
- "row": "NPLLIq_row",
205
- "selectBtn": "NPLLIq_selectBtn",
206
- "copyBtn": "NPLLIq_copyBtn",
207
197
  "checkBtn": "NPLLIq_checkBtn",
208
- "dialogClose": "NPLLIq_dialogClose",
198
+ "monitorName": "NPLLIq_monitorName",
199
+ "copyBtn": "NPLLIq_copyBtn",
209
200
  "logDayCol": "NPLLIq_logDayCol",
210
- "upgradeBanner": "NPLLIq_upgradeBanner",
211
- "dialogActions": "NPLLIq_dialogActions",
201
+ "logPager": "NPLLIq_logPager",
202
+ "resetSelect": "NPLLIq_resetSelect",
203
+ "logPagerInfo": "NPLLIq_logPagerInfo",
204
+ "logClearDate": "NPLLIq_logClearDate",
205
+ "logPagerBtn": "NPLLIq_logPagerBtn",
206
+ "fillWarn": "NPLLIq_fillWarn",
207
+ "rowMeta": "NPLLIq_rowMeta",
208
+ "subtitle": "NPLLIq_subtitle",
209
+ "dialogBody": "NPLLIq_dialogBody",
210
+ "fillIdle": "NPLLIq_fillIdle",
211
+ "selectBtn": "NPLLIq_selectBtn",
212
+ "controls": "NPLLIq_controls",
213
+ "resetRow": "NPLLIq_resetRow",
214
+ "upgradeCommands": "NPLLIq_upgradeCommands",
212
215
  "versionNew": "NPLLIq_versionNew",
213
- "checkUpdatesRow": "NPLLIq_checkUpdatesRow",
214
- "dialogLabel": "NPLLIq_dialogLabel",
216
+ "body": "NPLLIq_body",
217
+ "row": "NPLLIq_row",
218
+ "upgradeHint": "NPLLIq_upgradeHint",
215
219
  "monitorHint": "NPLLIq_monitorHint",
216
- "bar": "NPLLIq_bar",
217
- "version": "NPLLIq_version",
218
- "notice": "NPLLIq_notice",
219
- "logToolbar": "NPLLIq_logToolbar",
220
- "logUsedCol": "NPLLIq_logUsedCol",
221
220
  "logPagerControls": "NPLLIq_logPagerControls",
222
- "dialog": "NPLLIq_dialog",
223
221
  "logClearDialog": "NPLLIq_logClearDialog",
224
- "rowHeader": "NPLLIq_rowHeader",
225
- "fillWarn": "NPLLIq_fillWarn",
226
- "noticeError": "NPLLIq_noticeError",
227
- "logModelCol": "NPLLIq_logModelCol",
228
- "logDialog": "NPLLIq_logDialog",
229
- "rowMeta": "NPLLIq_rowMeta",
230
- "logClearBtn": "NPLLIq_logClearBtn",
231
- "monitorName": "NPLLIq_monitorName",
232
- "logPagerBtn": "NPLLIq_logPagerBtn",
222
+ "currentBadge": "NPLLIq_currentBadge",
233
223
  "dialogSection": "NPLLIq_dialogSection",
234
- "radioRow": "NPLLIq_radioRow",
235
- "monitorList": "NPLLIq_monitorList",
236
- "logPagerInfo": "NPLLIq_logPagerInfo",
224
+ "bar": "NPLLIq_bar",
225
+ "panelDim": "NPLLIq_panelDim",
226
+ "headerActions": "NPLLIq_headerActions",
227
+ "upgradeClose": "NPLLIq_upgradeClose",
228
+ "header": "NPLLIq_header",
229
+ "dialogLabel": "NPLLIq_dialogLabel",
230
+ "upgradeCommand": "NPLLIq_upgradeCommand",
231
+ "noticeError": "NPLLIq_noticeError",
232
+ "notice": "NPLLIq_notice",
233
+ "dialogBtn": "NPLLIq_dialogBtn",
234
+ "logToolbar": "NPLLIq_logToolbar",
235
+ "tab": "NPLLIq_tab",
236
+ "tabIcon": "NPLLIq_tabIcon",
237
237
  "panel": "NPLLIq_panel",
238
+ "collapse": "NPLLIq_collapse",
239
+ "dialogTitle": "NPLLIq_dialogTitle",
238
240
  "logTable": "NPLLIq_logTable",
241
+ "fillOver": "NPLLIq_fillOver",
242
+ "dialog": "NPLLIq_dialog",
243
+ "radioRow": "NPLLIq_radioRow",
244
+ "dialogHeader": "NPLLIq_dialogHeader",
245
+ "logClearBtn": "NPLLIq_logClearBtn",
246
+ "logModelCol": "NPLLIq_logModelCol",
247
+ "panelDimStrong": "NPLLIq_panelDimStrong",
239
248
  "logPagerPages": "NPLLIq_logPagerPages",
240
- "gearBtn": "NPLLIq_gearBtn",
241
- "dialogBtn": "NPLLIq_dialogBtn",
242
- "controls": "NPLLIq_controls",
243
- "logScroll": "NPLLIq_logScroll",
244
- "upgradeClose": "NPLLIq_upgradeClose",
245
- "resetSelect": "NPLLIq_resetSelect",
246
249
  "logPageSizeSelect": "NPLLIq_logPageSizeSelect",
250
+ "dialogOverlay": "NPLLIq_dialogOverlay",
251
+ "upgradeCommandRow": "NPLLIq_upgradeCommandRow",
252
+ "dialogClose": "NPLLIq_dialogClose",
253
+ "checkErrorHint": "NPLLIq_checkErrorHint",
247
254
  "rowName": "NPLLIq_rowName",
255
+ "checkUpdatesLabel": "NPLLIq_checkUpdatesLabel",
256
+ "logSearch": "NPLLIq_logSearch",
257
+ "dialogActions": "NPLLIq_dialogActions",
258
+ "monitorRow": "NPLLIq_monitorRow",
259
+ "save": "NPLLIq_save",
260
+ "logUsedCol": "NPLLIq_logUsedCol",
261
+ "logDialog": "NPLLIq_logDialog",
262
+ "logScroll": "NPLLIq_logScroll",
248
263
  "tabLabel": "NPLLIq_tabLabel",
249
- "tab": "NPLLIq_tab",
250
- "fillIdle": "NPLLIq_fillIdle",
251
- "headerText": "NPLLIq_headerText",
252
- "tabIcon": "NPLLIq_tabIcon",
253
- "dialogTitle": "NPLLIq_dialogTitle",
254
- "body": "NPLLIq_body",
255
- "upgradeCommandRow": "NPLLIq_upgradeCommandRow",
256
- "dialogOverlay": "NPLLIq_dialogOverlay",
257
- "subtitle": "NPLLIq_subtitle",
258
- "headerActions": "NPLLIq_headerActions",
259
- "upgradeCommand": "NPLLIq_upgradeCommand",
260
- "dialogBtnPrimary": "NPLLIq_dialogBtnPrimary",
261
- "logClearDate": "NPLLIq_logClearDate",
262
- "fullNotice": "NPLLIq_fullNotice"
264
+ "input": "NPLLIq_input"
263
265
  };
264
266
  //#endregion
265
267
  //#region lib/types/client/TokenQuotaPanel.js
@@ -350,6 +352,8 @@ window.__ModuleLoader__.load({
350
352
  const [collapsed, setCollapsed] = (0, react.useState)(false);
351
353
  const [drafts, setDrafts] = (0, react.useState)({});
352
354
  const [editingKey, setEditingKey] = (0, react.useState)(null);
355
+ const [hovered, setHovered] = (0, react.useState)(false);
356
+ const [inputActive, setInputActive] = (0, react.useState)(false);
353
357
  const [panelPos, setPanelPos] = (0, react.useState)(loadPanelPos);
354
358
  const [settingsPos, setSettingsPos] = (0, react.useState)(null);
355
359
  const [logPos, setLogPos] = (0, react.useState)(null);
@@ -390,6 +394,17 @@ window.__ModuleLoader__.load({
390
394
  (0, react.useEffect)(() => {
391
395
  if (sessionId !== void 0) load(sessionId);
392
396
  }, [sessionId, load]);
397
+ (0, react.useEffect)(() => {
398
+ const onFocusIn = (event) => {
399
+ const target = event.target;
400
+ const isInput = target !== null && (target.matches("input, textarea, [contenteditable=\"true\"]") || target.closest("input, textarea, [contenteditable=\"true\"]") !== null);
401
+ setInputActive(isInput);
402
+ };
403
+ window.addEventListener("focusin", onFocusIn);
404
+ return () => {
405
+ window.removeEventListener("focusin", onFocusIn);
406
+ };
407
+ }, []);
393
408
  const rows = (0, react.useMemo)(() => mergeModelRows(groups, snapshot, current), [
394
409
  groups,
395
410
  snapshot,
@@ -483,14 +498,21 @@ window.__ModuleLoader__.load({
483
498
  setLimit(row.key, parsed);
484
499
  };
485
500
  const visibleRows = rows.filter((row) => isMonitoredKey(row.key) || row.current);
501
+ const panelDimClass = hovered ? "" : inputActive ? TokenQuotaPanel_module_css_default.panelDimStrong : TokenQuotaPanel_module_css_default.panelDim;
486
502
  return (0, react_jsx_runtime.jsxs)("div", {
487
503
  ref: panelRef,
488
- className: TokenQuotaPanel_module_css_default.panel,
504
+ className: `${TokenQuotaPanel_module_css_default.panel}${panelDimClass !== "" ? ` ${panelDimClass}` : ""}`,
489
505
  style: panelPos !== null ? {
490
506
  left: panelPos.x,
491
507
  top: panelPos.y,
492
508
  right: "auto"
493
509
  } : void 0,
510
+ onPointerEnter: () => {
511
+ setHovered(true);
512
+ },
513
+ onPointerLeave: () => {
514
+ setHovered(false);
515
+ },
494
516
  children: [
495
517
  (0, react_jsx_runtime.jsxs)("div", {
496
518
  className: TokenQuotaPanel_module_css_default.header,
@@ -506,13 +528,13 @@ window.__ModuleLoader__.load({
506
528
  title: t("upgradeAvailableHint"),
507
529
  children: [
508
530
  "v",
509
- "0.1.13",
531
+ "0.1.15",
510
532
  " → v",
511
533
  upgrade.latestVersion
512
534
  ]
513
535
  }) : (0, react_jsx_runtime.jsxs)("span", {
514
536
  className: TokenQuotaPanel_module_css_default.version,
515
- children: ["v", "0.1.13"]
537
+ children: ["v", "0.1.15"]
516
538
  })]
517
539
  }), (0, react_jsx_runtime.jsx)("div", {
518
540
  className: TokenQuotaPanel_module_css_default.subtitle,
package/lib/index.js CHANGED
@@ -406,11 +406,11 @@ var TokenQuotaService = class TokenQuotaService extends Service {
406
406
  return this.upgradeCheck;
407
407
  }
408
408
  async doRefreshUpgrade() {
409
- const current = "0.1.13";
409
+ const current = "0.1.15";
410
410
  let latest;
411
411
  try {
412
412
  const response = await fetch(REGISTRY_LATEST_URL, {
413
- headers: { accept: "application/vnd.npm.install-v1+json" },
413
+ headers: { accept: "application/json" },
414
414
  signal: AbortSignal.timeout(1e4)
415
415
  });
416
416
  if (!response.ok) {
@@ -90,6 +90,11 @@ export function TokenQuotaPanel({ t, load, setLimit, selectModel, setMonitored,
90
90
  const [collapsed, setCollapsed] = useState(false);
91
91
  const [drafts, setDrafts] = useState({});
92
92
  const [editingKey, setEditingKey] = useState(null);
93
+ // Hover / focus state for the translucent-while-idle behaviour: the panel
94
+ // dims when the mouse is away (and especially while typing in the composer)
95
+ // so the chat content behind it stays readable; hovering restores it.
96
+ const [hovered, setHovered] = useState(false);
97
+ const [inputActive, setInputActive] = useState(false);
93
98
  // Draggable placements: the panel persists across reloads; the dialogs
94
99
  // start centered (null) and remember where they were dragged to.
95
100
  const [panelPos, setPanelPos] = useState(loadPanelPos);
@@ -137,6 +142,18 @@ export function TokenQuotaPanel({ t, load, setLimit, selectModel, setMonitored,
137
142
  if (sessionId !== undefined)
138
143
  load(sessionId);
139
144
  }, [sessionId, load]);
145
+ // Track whether any text input (composer, search, dialogs) currently has
146
+ // focus, so the panel can dim while the user types elsewhere.
147
+ useEffect(() => {
148
+ const onFocusIn = (event) => {
149
+ const target = event.target;
150
+ const isInput = target !== null && (target.matches('input, textarea, [contenteditable="true"]')
151
+ || target.closest('input, textarea, [contenteditable="true"]') !== null);
152
+ setInputActive(isInput);
153
+ };
154
+ window.addEventListener('focusin', onFocusIn);
155
+ return () => { window.removeEventListener('focusin', onFocusIn); };
156
+ }, []);
140
157
  const rows = useMemo(() => mergeModelRows(groups, snapshot, current), [groups, snapshot, current]);
141
158
  // All directory models, flattened for the monitoring picker.
142
159
  const allModels = useMemo(() => groups.flatMap(group => group.models.map((model) => ({
@@ -220,7 +237,10 @@ export function TokenQuotaPanel({ t, load, setLimit, selectModel, setMonitored,
220
237
  setLimit(row.key, parsed);
221
238
  };
222
239
  const visibleRows = rows.filter(row => isMonitoredKey(row.key) || row.current);
223
- return (_jsxs("div", { ref: panelRef, className: css.panel, style: panelPos !== null ? { left: panelPos.x, top: panelPos.y, right: 'auto' } : undefined, children: [_jsxs("div", { className: css.header, onPointerDown: (event) => { beginDrag(event, panelRef.current, applyPanelPos); }, children: [_jsxs("div", { className: css.headerText, children: [_jsxs("div", { className: css.title, children: [t('title'), __TOKEN_QUOTA_VERSION__ !== undefined && __TOKEN_QUOTA_VERSION__ !== '' && (upgrade !== null
240
+ // The panel dims when the pointer is away; dimming is stronger while the
241
+ // user is typing in an input elsewhere so the text behind stays readable.
242
+ const panelDimClass = hovered ? '' : inputActive ? css.panelDimStrong : css.panelDim;
243
+ return (_jsxs("div", { ref: panelRef, className: `${css.panel}${panelDimClass !== '' ? ` ${panelDimClass}` : ''}`, style: panelPos !== null ? { left: panelPos.x, top: panelPos.y, right: 'auto' } : undefined, onPointerEnter: () => { setHovered(true); }, onPointerLeave: () => { setHovered(false); }, children: [_jsxs("div", { className: css.header, onPointerDown: (event) => { beginDrag(event, panelRef.current, applyPanelPos); }, children: [_jsxs("div", { className: css.headerText, children: [_jsxs("div", { className: css.title, children: [t('title'), __TOKEN_QUOTA_VERSION__ !== undefined && __TOKEN_QUOTA_VERSION__ !== '' && (upgrade !== null
224
244
  ? (_jsxs("span", { className: `${css.version} ${css.versionNew}`, title: t('upgradeAvailableHint'), children: ["v", __TOKEN_QUOTA_VERSION__, " \u2192 v", upgrade.latestVersion] }))
225
245
  : (_jsxs("span", { className: css.version, children: ["v", __TOKEN_QUOTA_VERSION__] })))] }), _jsx("div", { className: css.subtitle, children: t('subtitle') })] }), _jsxs("div", { className: css.headerActions, onPointerDown: (event) => { event.stopPropagation(); }, children: [_jsx("button", { type: "button", className: css.settingsBtn, onClick: () => { actions.setLogOpen(true); }, children: t('logs') }), _jsx("button", { type: "button", className: css.settingsBtn, onClick: openSettings, children: t('settings') }), _jsx("button", { type: "button", className: css.collapse, onClick: () => { setCollapsed(true); }, children: t('collapse') })] })] }), _jsxs("div", { className: css.body, children: [loading && _jsx("div", { className: css.notice, children: t('loading') }), error !== null && _jsx("div", { className: css.noticeError, children: error }), fullNotice !== null && (_jsx("div", { className: css.fullNotice, role: "alert", children: fullNotice })), upgrade !== null && !upgradeDismissed && (_jsxs("div", { className: css.upgradeBanner, role: "alert", children: [_jsx("div", { className: css.upgradeBannerText, children: t('upgradeAvailable').replace('{version}', upgrade.latestVersion) }), _jsx("div", { className: css.upgradeCommands, children: upgrade.commands.map(cmd => (_jsxs("div", { className: css.upgradeCommandRow, children: [_jsx("code", { className: css.upgradeCommand, children: cmd }), _jsx("button", { type: "button", className: css.copyBtn, onClick: () => { void copyToClipboard(cmd); }, children: t('copy') })] }, cmd))) }), _jsx("div", { className: css.upgradeHint, children: t('upgradeHint') }), _jsx("button", { type: "button", className: css.upgradeClose, onClick: () => { actions.setUpgradeDismissed(true); }, "aria-label": t('close'), children: "\u00D7" })] })), !loading && error === null && visibleRows.length === 0 && (_jsx("div", { className: css.notice, children: monitored !== null && monitored.length === 0 ? t('noMonitored') : t('waiting') })), visibleRows.map((row) => {
226
246
  const state = barStateOf(row);
@@ -434,8 +434,11 @@ export class TokenQuotaService extends Service {
434
434
  }
435
435
  let latest;
436
436
  try {
437
+ // NOTE: do NOT send `accept: application/vnd.npm.install-v1+json` here —
438
+ // that install-manifest media type gets 406 from some proxies/mirrors/CDNs.
439
+ // Plain JSON works everywhere and still carries the `version` field.
437
440
  const response = await fetch(REGISTRY_LATEST_URL, {
438
- headers: { accept: 'application/vnd.npm.install-v1+json' },
441
+ headers: { accept: 'application/json' },
439
442
  signal: AbortSignal.timeout(10_000),
440
443
  });
441
444
  if (!response.ok) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jxgame2020/dsh-token-quota",
3
3
  "description": "Daily per-model token quota accounting, enforcement, and a floating quota panel for the DeepSeek Harness — a fully self-contained plugin (no core-Harness wiring, no generated RPC contract)",
4
- "version": "0.1.13",
4
+ "version": "0.1.15",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },