@goodandready/dsh-subscriptions 0.6.56 → 0.6.58
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 +25 -25
- package/lib/config-schema.js +2 -0
- package/lib/usage.js +8 -6
- package/lib/vendors/claude.js +32 -1
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -60,7 +60,7 @@ window.__ModuleLoader__.load({
|
|
|
60
60
|
'.dsub-helpBox{margin-top:8px;padding:12px 14px;border-radius:8px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);font-size:12px;line-height:1.6}' +
|
|
61
61
|
'.dsub-helpHead{display:flex;align-items:center;justify-content:space-between;font-weight:600;margin-bottom:8px;color:var(--dsw-alias-brand-primary)}' +
|
|
62
62
|
'.dsub-helpStep{margin-bottom:6px;color:var(--dsw-alias-label-primary)}' +
|
|
63
|
-
'.dsub-btnActive{background:var(--dsw-alias-brand-primary);color:var(--dsw-alias-
|
|
63
|
+
'.dsub-btnActive{background:var(--dsw-alias-brand-primary);color:var(--dsw-alias-label-primary-foreground);border-color:var(--dsw-alias-brand-primary)}' +
|
|
64
64
|
'.dsub-h{font-size:13.5px;font-weight:600;color:var(--dsw-alias-label-primary)}' +
|
|
65
65
|
'.dsub-sub{font-size:12px;color:var(--dsw-alias-label-secondary)}' +
|
|
66
66
|
'.dsub-dim{font-size:11.5px;color:var(--dsw-alias-label-tertiary)}' +
|
|
@@ -74,14 +74,14 @@ window.__ModuleLoader__.load({
|
|
|
74
74
|
'.dsub-inp{height:30px;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);border-radius:6px;padding:0 8px;font-size:12px;min-width:180px}' +
|
|
75
75
|
'.dsub-inp:focus{outline:none;border-color:var(--dsw-alias-brand-primary)}' +
|
|
76
76
|
'.dsub-box{border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:10px;margin-top:8px;background:var(--dsw-alias-bg-layer-2)}' +
|
|
77
|
-
'.dsub-cooldown{display:inline-block;padding:2px 6px;border-radius:4px;background:var(--dsw-alias-state-
|
|
77
|
+
'.dsub-cooldown{display:inline-block;padding:2px 6px;border-radius:4px;background:var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-bg-layer-1);font-size:11px;font-weight:600}' +
|
|
78
78
|
'.dsub-bar{position:relative;height:6px;border-radius:3px;background:var(--dsw-alias-bg-layer-1);overflow:hidden;flex:1;min-width:80px}' +
|
|
79
79
|
'.dsub-barFill{height:100%;border-radius:3px;background:var(--dsw-alias-state-success-primary);transition:width .2s}' +
|
|
80
|
-
'.dsub-barWarn .dsub-barFill{background:var(--dsw-alias-state-
|
|
80
|
+
'.dsub-barWarn .dsub-barFill{background:var(--dsw-alias-state-warn-primary)}' +
|
|
81
81
|
'.dsub-barFull .dsub-barFill{background:var(--dsw-alias-state-error-primary)}' +
|
|
82
82
|
'.dsub-barRow{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--dsw-alias-label-secondary)}' +
|
|
83
83
|
'.dsub-manual{display:flex;flex-direction:column;gap:6px;margin-top:4px;padding-top:10px;border-top:1px solid var(--dsw-alias-border-l2)}' +
|
|
84
|
-
'.dsub-verify{font-size:12px;color:var(--dsw-alias-state-
|
|
84
|
+
'.dsub-verify{font-size:12px;color:var(--dsw-alias-state-warn-primary)}' +
|
|
85
85
|
'.dsub-verify a{color:var(--dsw-alias-brand-primary)}' +
|
|
86
86
|
'.dsub-pill{display:inline-flex;align-items:center;gap:7px;height:28px;padding:0 11px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600;cursor:pointer;box-shadow:0 1px 3px color-mix(in srgb, black 15%, transparent),inset 0 1px 0 color-mix(in srgb, white 6%, transparent);transition:all .16s ease;user-select:none}' +
|
|
87
87
|
'.dsub-pill:hover{background:var(--dsw-alias-bg-layer-3);border-color:var(--dsw-alias-label-tertiary);transform:translateY(-1px);box-shadow:0 3px 8px color-mix(in srgb, black 25%, transparent),inset 0 1px 0 color-mix(in srgb, white 10%, transparent)}' +
|
|
@@ -89,7 +89,7 @@ window.__ModuleLoader__.load({
|
|
|
89
89
|
'.dsub-pillTag{padding:1px 5px;border-radius:4px;font-size:10.5px;font-weight:700;letter-spacing:.02em;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary)}' +
|
|
90
90
|
'.dsub-led{width:7px;height:7px;border-radius:50%;flex:none;transition:all .2s ease}' +
|
|
91
91
|
'.dsub-ledOk{background:var(--dsw-alias-state-success-primary);box-shadow:0 0 6px color-mix(in srgb,var(--dsw-alias-state-success-primary) 70%,transparent)}' +
|
|
92
|
-
'.dsub-ledWarn{background:var(--dsw-alias-state-
|
|
92
|
+
'.dsub-ledWarn{background:var(--dsw-alias-state-warn-primary);box-shadow:0 0 6px color-mix(in srgb,var(--dsw-alias-state-warn-primary) 70%,transparent)}' +
|
|
93
93
|
'.dsub-ledBad{background:var(--dsw-alias-state-error-primary);box-shadow:0 0 6px color-mix(in srgb,var(--dsw-alias-state-error-primary) 70%,transparent)}' +
|
|
94
94
|
'.dsub-ledOff{background:var(--dsw-alias-label-tertiary)}' +
|
|
95
95
|
'.dsub-modalWrap{position:fixed;inset:0;z-index:10020;display:grid;place-items:center;background:color-mix(in srgb, black 65%, transparent);backdrop-filter:blur(10px);animation:dsubFadeIn .16s ease-out}' +
|
|
@@ -111,7 +111,7 @@ window.__ModuleLoader__.load({
|
|
|
111
111
|
'.dsub-header-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:8px 0 12px;margin-bottom:8px;border-bottom:1px solid var(--dsw-alias-border-l2)}' +
|
|
112
112
|
'.dsub-badge{font-size:12px;padding:3px 10px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2);display:inline-flex;align-items:center;gap:5px;font-weight:500}' +
|
|
113
113
|
'.dsub-badge-ok{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 10%,transparent)}' +
|
|
114
|
-
'.dsub-badge-warn{border-color:var(--dsw-alias-state-
|
|
114
|
+
'.dsub-badge-warn{border-color:var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 10%,transparent)}' +
|
|
115
115
|
'.dsub-badge-bad{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}' +
|
|
116
116
|
'.dsub-badge-neutral{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2)}' +
|
|
117
117
|
'.dsub-section-card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:10px;margin-top:12px}' +
|
|
@@ -134,7 +134,7 @@ window.__ModuleLoader__.load({
|
|
|
134
134
|
'.dsub-barTrack{height:6px;border-radius:3px;background:var(--dsw-alias-bg-layer-1);overflow:hidden}' +
|
|
135
135
|
'.dsub-barFillGrad{height:100%;border-radius:3px;transition:width .3s ease}' +
|
|
136
136
|
'.dsub-panel-box{margin-top:10px;padding:12px 14px;border-radius:10px;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);display:flex;flex-direction:column;gap:8px}' +
|
|
137
|
-
'.dsub-panel-warn{border-color:color-mix(in srgb,var(--dsw-alias-state-
|
|
137
|
+
'.dsub-panel-warn{border-color:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 40%,transparent);background:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 5%,transparent)}' +
|
|
138
138
|
'.dsub-panel-title{font-size:13px;font-weight:600;color:var(--dsw-alias-label-primary);display:flex;align-items:center;justify-content:space-between}' +
|
|
139
139
|
'.dsub-panel-desc{font-size:12px;color:var(--dsw-alias-label-secondary);line-height:1.4}' +
|
|
140
140
|
'.dsub-usage-grid{display:flex;flex-direction:column;gap:8px;margin-top:4px}' +
|
|
@@ -144,12 +144,12 @@ window.__ModuleLoader__.load({
|
|
|
144
144
|
'.dsub-usage-fill{height:100%;border-radius:999px;transition:width .3s ease}' +
|
|
145
145
|
'.dsub-usage-meta{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--dsw-alias-label-secondary)}' +
|
|
146
146
|
'.dsub-tag-ok{border-color:color-mix(in srgb,var(--dsw-alias-state-success-primary) 30%,transparent);color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 8%,transparent);padding:1px 7px;border-radius:999px;font-size:11px;font-weight:600;border-style:solid;border-width:1px}' +
|
|
147
|
-
'.dsub-tag-warn{border-color:color-mix(in srgb,var(--dsw-alias-state-
|
|
147
|
+
'.dsub-tag-warn{border-color:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 40%,transparent);color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 8%,transparent);padding:1px 7px;border-radius:999px;font-size:11px;font-weight:600;border-style:solid;border-width:1px}' +
|
|
148
148
|
'.dsub-tag-bad{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 40%,transparent);color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 8%,transparent);padding:1px 7px;border-radius:999px;font-size:11px;font-weight:600;border-style:solid;border-width:1px}' +
|
|
149
149
|
'.dsub-slot-meta-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:12px;padding-top:10px;border-top:1px solid var(--dsw-alias-border-l2);font-size:12px}' +
|
|
150
150
|
'.dsub-ref-tag{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--dsw-alias-label-secondary)}' +
|
|
151
151
|
'.dsub-ref-tag code{padding:2px 6px;border-radius:4px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);font-family:ui-monospace,monospace;color:var(--dsw-alias-label-primary);font-size:11px}' +
|
|
152
|
-
'.dsub-speed-tag{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--dsw-alias-brand-
|
|
152
|
+
'.dsub-speed-tag{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--dsw-alias-brand-primary);background:color-mix(in srgb,var(--dsw-alias-brand-primary) 8%,transparent);padding:2px 8px;border-radius:6px;font-weight:500;border:1px solid color-mix(in srgb,var(--dsw-alias-brand-primary) 20%,transparent)}' +
|
|
153
153
|
'.dsub-btn-danger{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 40%,transparent)!important;color:var(--dsw-alias-state-error-primary)!important}' +
|
|
154
154
|
'.dsub-btn-danger:hover:not(:disabled){background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 12%,transparent)!important}' +
|
|
155
155
|
'.dsub-poolTitle{margin-top:16px;margin-bottom:8px;font-size:11.5px;font-weight:700;color:var(--dsw-alias-label-secondary);text-transform:uppercase;letter-spacing:.05em}' +
|
|
@@ -157,12 +157,12 @@ window.__ModuleLoader__.load({
|
|
|
157
157
|
'.dsub-accountCard:hover{background:var(--dsw-alias-bg-layer-3);border-color:var(--dsw-alias-label-tertiary)}' +
|
|
158
158
|
'.dsub-brandBadge{width:32px;height:32px;border-radius:8px;display:grid;place-items:center;font-size:12px;font-weight:700;flex-shrink:0}' +
|
|
159
159
|
'.dsub-brandCodex{background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 15%,transparent);color:var(--dsw-alias-state-success-primary);border:1px solid color-mix(in srgb,var(--dsw-alias-state-success-primary) 30%,transparent)}' +
|
|
160
|
-
'.dsub-brandClaude{background:color-mix(in srgb,var(--dsw-alias-state-
|
|
161
|
-
'.dsub-brandGrok{background:color-mix(in srgb,var(--dsw-alias-
|
|
160
|
+
'.dsub-brandClaude{background:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 15%,transparent);color:var(--dsw-alias-state-warn-primary);border:1px solid color-mix(in srgb,var(--dsw-alias-state-warn-primary) 30%,transparent)}' +
|
|
161
|
+
'.dsub-brandGrok{background:color-mix(in srgb,var(--dsw-alias-state-business-primary, var(--dsw-alias-brand-primary)) 15%,transparent);color:var(--dsw-alias-state-business-primary, var(--dsw-alias-brand-primary));border:1px solid color-mix(in srgb,var(--dsw-alias-state-business-primary, var(--dsw-alias-brand-primary)) 30%,transparent)}' +
|
|
162
162
|
'.dsub-brandAgy{background:color-mix(in srgb,var(--dsw-alias-brand-primary) 15%,transparent);color:var(--dsw-alias-brand-primary);border:1px solid color-mix(in srgb,var(--dsw-alias-brand-primary) 30%,transparent)}' +
|
|
163
163
|
'.dsub-brandOllama{background:color-mix(in srgb,var(--dsw-alias-label-tertiary) 15%,transparent);color:var(--dsw-alias-label-secondary);border:1px solid color-mix(in srgb,var(--dsw-alias-label-tertiary) 30%,transparent)}' +
|
|
164
|
-
'.dsub-brandKimi{background:color-mix(in srgb,var(--dsw-alias-state-
|
|
165
|
-
'.dsub-brandGlm{background:color-mix(in srgb,var(--dsw-alias-state-
|
|
164
|
+
'.dsub-brandKimi{background:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 15%,transparent);color:var(--dsw-alias-state-warn-primary);border:1px solid color-mix(in srgb,var(--dsw-alias-state-warn-primary) 30%,transparent)}' +
|
|
165
|
+
'.dsub-brandGlm{background:color-mix(in srgb,var(--dsw-alias-state-business-primary, var(--dsw-alias-brand-primary)) 15%,transparent);color:var(--dsw-alias-state-business-primary, var(--dsw-alias-brand-primary));border:1px solid color-mix(in srgb,var(--dsw-alias-state-business-primary, var(--dsw-alias-brand-primary)) 30%,transparent)}' +
|
|
166
166
|
'.dsub-planBadge{display:inline-flex;align-items:center;padding:1px 6px;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;background:color-mix(in srgb,var(--dsw-alias-brand-primary) 15%,transparent);color:var(--dsw-alias-brand-primary);border:1px solid color-mix(in srgb,var(--dsw-alias-brand-primary) 30%,transparent);margin-left:6px}' +
|
|
167
167
|
|
|
168
168
|
'.dsub-accInfo{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}' +
|
|
@@ -170,18 +170,18 @@ window.__ModuleLoader__.load({
|
|
|
170
170
|
'.dsub-accName{font-size:13px;font-weight:600}' +
|
|
171
171
|
'.dsub-accStatusTag{font-size:10.5px;font-weight:600;padding:1px 6px;border-radius:4px}' +
|
|
172
172
|
'.dsub-statusOk{background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 15%,transparent);color:var(--dsw-alias-state-success-primary)}' +
|
|
173
|
-
'.dsub-statusWarn{background:color-mix(in srgb,var(--dsw-alias-state-
|
|
173
|
+
'.dsub-statusWarn{background:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 15%,transparent);color:var(--dsw-alias-state-warn-primary)}' +
|
|
174
174
|
'.dsub-statusBad{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 15%,transparent);color:var(--dsw-alias-state-error-primary)}' +
|
|
175
175
|
'.dsub-statusOff{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-tertiary)}' +
|
|
176
176
|
'.dsub-modalFoot{display:flex;align-items:center;justify-content:space-between;margin-top:16px;padding-top:12px;border-top:1px solid var(--dsw-alias-border-l2)}' +
|
|
177
|
-
'.dsub-btnPrimary{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;font-size:12px;font-weight:600;background:var(--dsw-alias-brand-primary);color:var(--dsw-alias-
|
|
177
|
+
'.dsub-btnPrimary{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;font-size:12px;font-weight:600;background:var(--dsw-alias-brand-primary);color:var(--dsw-alias-label-primary-foreground);border:0;cursor:pointer;transition:opacity .15s}' +
|
|
178
178
|
'.dsub-btnPrimary:hover{opacity:.9}' +
|
|
179
179
|
'.dsub-btnSec{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border-radius:7px;font-size:11.5px;font-weight:500;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;text-decoration:none;transition:all .15s}' +
|
|
180
180
|
'.dsub-btnSec:hover{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-tertiary)}' +
|
|
181
181
|
'.dsub-cq{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--dsw-alias-label-secondary);padding:0 6px}' +
|
|
182
182
|
'.dsub-cqBar{position:relative;width:40px;height:5px;border-radius:3px;background:var(--dsw-alias-bg-layer-1);overflow:hidden}' +
|
|
183
183
|
'.dsub-cqBarFill{height:100%;border-radius:3px;background:var(--dsw-alias-state-success-primary)}' +
|
|
184
|
-
'.dsub-cqBarWarn .dsub-cqBarFill{background:var(--dsw-alias-state-
|
|
184
|
+
'.dsub-cqBarWarn .dsub-cqBarFill{background:var(--dsw-alias-state-warn-primary)}' +
|
|
185
185
|
'.dsub-cqBarFull .dsub-cqBarFill{background:var(--dsw-alias-state-error-primary)}' +
|
|
186
186
|
'.dsub-cqB{font-variant-numeric:tabular-nums;font-weight:600;color:var(--dsw-alias-label-primary)}' +
|
|
187
187
|
'.dsub-diag{font:11px/1.5 ui-monospace,SFMono-Regular,monospace;max-height:260px;overflow:auto;white-space:pre-wrap;word-break:break-word;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:10px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary)}'
|
|
@@ -1413,7 +1413,7 @@ const cssId = 'dsh-subscriptions/settings.module.css'
|
|
|
1413
1413
|
React.createElement('div', { style: { padding: '8px 0', overflowX: 'auto' } },
|
|
1414
1414
|
React.createElement('table', { style: { width: '100%', fontSize: '12px', borderCollapse: 'collapse' } },
|
|
1415
1415
|
React.createElement('thead', null,
|
|
1416
|
-
React.createElement('tr', { style: { borderBottom: '1px solid var(--dsw-alias-border-
|
|
1416
|
+
React.createElement('tr', { style: { borderBottom: '1px solid var(--dsw-alias-border-l2)', textAlign: 'left', opacity: 0.7 } },
|
|
1417
1417
|
React.createElement('th', { style: { padding: '6px' } }, t('healthAccount')),
|
|
1418
1418
|
React.createElement('th', { style: { padding: '6px' } }, t('healthScore')),
|
|
1419
1419
|
React.createElement('th', { style: { padding: '6px' } }, t('healthLatency')),
|
|
@@ -1424,11 +1424,11 @@ const cssId = 'dsh-subscriptions/settings.module.css'
|
|
|
1424
1424
|
React.createElement('tbody', null,
|
|
1425
1425
|
accounts.map((acc, idx) => {
|
|
1426
1426
|
const sc = acc.healthScore != null ? acc.healthScore : 100
|
|
1427
|
-
const healthColor = sc >= 80 ? 'var(--dsw-alias-state-success-primary)' : (sc >= 50 ? 'var(--dsw-alias-state-
|
|
1427
|
+
const healthColor = sc >= 80 ? 'var(--dsw-alias-state-success-primary)' : (sc >= 50 ? 'var(--dsw-alias-state-warn-primary)' : 'var(--dsw-alias-state-error-primary)')
|
|
1428
1428
|
const isQ = acc.status === 'quarantine' || (acc.quarantineUntil && Number(acc.quarantineUntil) > Date.now())
|
|
1429
1429
|
const statusLabel = isQ ? ('⛔ ' + t('healthQuarantine')) : (acc.status === 'probing' ? ('🟡 ' + t('healthWarmup')) : (acc.configured ? ('🟢 ' + t('healthActive')) : ('⚪ ' + t('healthIdle'))))
|
|
1430
1430
|
const pct = acc.usagePercent != null ? Math.round(acc.usagePercent) : null
|
|
1431
|
-
return React.createElement('tr', { key: (acc.ref || acc.provider + acc.index || idx), style: { borderBottom: '1px solid var(--dsw-alias-border-
|
|
1431
|
+
return React.createElement('tr', { key: (acc.ref || acc.provider + acc.index || idx), style: { borderBottom: '1px solid var(--dsw-alias-border-l3)' } },
|
|
1432
1432
|
React.createElement('td', { style: { padding: '6px', fontWeight: 600 } }, (acc.provider ? acc.provider.toUpperCase() : 'LLM') + ' #' + (acc.index || 1) + (acc.label ? ' (' + acc.label + ')' : '')),
|
|
1433
1433
|
React.createElement('td', { style: { padding: '6px', color: healthColor } }, sc + '%'),
|
|
1434
1434
|
React.createElement('td', { style: { padding: '6px' } }, acc.latencyMs ? acc.latencyMs + ' ms' : '—'),
|
|
@@ -1976,7 +1976,7 @@ const cssId = 'dsh-subscriptions/settings.module.css'
|
|
|
1976
1976
|
function renderItem(label, pct, detail){
|
|
1977
1977
|
var p = Math.min(100, Math.max(0, Math.round(pct)))
|
|
1978
1978
|
var tagCls = p >= 90 ? 'dsub-tag-bad' : (p >= 70 ? 'dsub-tag-warn' : 'dsub-tag-ok')
|
|
1979
|
-
var fillBg = p >= 90 ? 'var(--dsw-alias-state-error-primary)' : (p >= 70 ? 'var(--dsw-alias-state-
|
|
1979
|
+
var fillBg = p >= 90 ? 'var(--dsw-alias-state-error-primary)' : (p >= 70 ? 'var(--dsw-alias-state-warn-primary)' : 'var(--dsw-alias-state-success-primary)')
|
|
1980
1980
|
return React.createElement('div', { key: label, className: 'dsub-usage-card' },
|
|
1981
1981
|
React.createElement('div', { className: 'dsub-usage-head' },
|
|
1982
1982
|
React.createElement('span', null, label),
|
|
@@ -2105,7 +2105,7 @@ const cssId = 'dsh-subscriptions/settings.module.css'
|
|
|
2105
2105
|
React.createElement('div', { className: 'dsub-header', style: { cursor: 'default' } },
|
|
2106
2106
|
React.createElement('div', { className: 'dsub-headText' },
|
|
2107
2107
|
React.createElement('div', { className: 'dsub-name' }, cardT('title')),
|
|
2108
|
-
React.createElement('div', { className: 'dsub-description', style: { color: 'var(--dsw-alias-state-
|
|
2108
|
+
React.createElement('div', { className: 'dsub-description', style: { color: 'var(--dsw-alias-state-warn-primary)' } },
|
|
2109
2109
|
cardT('unavailable') || cardT('settingsUnavailable') || 'Settings are unavailable',
|
|
2110
2110
|
),
|
|
2111
2111
|
),
|
|
@@ -2529,7 +2529,7 @@ const cssId = 'dsh-subscriptions/settings.module.css'
|
|
|
2529
2529
|
React.createElement('div', { className: 'dsub-heroTitle' },
|
|
2530
2530
|
React.createElement('span', { className: 'dsub-brandBadge ' + b.cls, style: { width: 24, height: 24, fontSize: 11 } }, b.icon),
|
|
2531
2531
|
React.createElement('span', null, (a.provider ? a.provider.toUpperCase() : 'LLM') + (a.index ? ' #' + a.index : '')),
|
|
2532
|
-
a.fastMode ? React.createElement('span', { className: 'dsub-pillTag', style: { background: 'color-mix(in srgb,var(--dsw-alias-state-
|
|
2532
|
+
a.fastMode ? React.createElement('span', { className: 'dsub-pillTag', style: { background: 'color-mix(in srgb,var(--dsw-alias-state-warn-primary) 15%,transparent)', color: 'var(--dsw-alias-state-warn-primary)' } }, '⚡ FAST 1.5x') : null,
|
|
2533
2533
|
),
|
|
2534
2534
|
React.createElement('span', { className: 'dsub-heroModel' }, a.model || 'active model'),
|
|
2535
2535
|
),
|
|
@@ -2544,7 +2544,7 @@ const cssId = 'dsh-subscriptions/settings.module.css'
|
|
|
2544
2544
|
className: 'dsub-barFillGrad',
|
|
2545
2545
|
style: {
|
|
2546
2546
|
width: Math.min(100, Math.max(0, primPct)) + '%',
|
|
2547
|
-
background: primPct >= 90 ? 'var(--dsw-alias-state-error-primary)' : (primPct >= 50 ? 'var(--dsw-alias-state-
|
|
2547
|
+
background: primPct >= 90 ? 'var(--dsw-alias-state-error-primary)' : (primPct >= 50 ? 'var(--dsw-alias-state-warn-primary)' : 'var(--dsw-alias-state-success-primary)'),
|
|
2548
2548
|
},
|
|
2549
2549
|
}),
|
|
2550
2550
|
),
|
|
@@ -2559,7 +2559,7 @@ const cssId = 'dsh-subscriptions/settings.module.css'
|
|
|
2559
2559
|
className: 'dsub-barFillGrad',
|
|
2560
2560
|
style: {
|
|
2561
2561
|
width: Math.min(100, Math.max(0, secPct)) + '%',
|
|
2562
|
-
background: secPct >= 90 ? 'var(--dsw-alias-state-error-primary)' : (secPct >= 50 ? 'var(--dsw-alias-state-
|
|
2562
|
+
background: secPct >= 90 ? 'var(--dsw-alias-state-error-primary)' : (secPct >= 50 ? 'var(--dsw-alias-state-warn-primary)' : 'var(--dsw-alias-brand-primary)'),
|
|
2563
2563
|
},
|
|
2564
2564
|
}),
|
|
2565
2565
|
),
|
|
@@ -2608,7 +2608,7 @@ const cssId = 'dsh-subscriptions/settings.module.css'
|
|
|
2608
2608
|
className: 'dsub-barFillGrad',
|
|
2609
2609
|
style: {
|
|
2610
2610
|
width: Math.min(100, Math.max(0, pct)) + '%',
|
|
2611
|
-
background: pct >= 90 ? 'var(--dsw-alias-state-error-primary)' : (pct >= 50 ? 'var(--dsw-alias-state-
|
|
2611
|
+
background: pct >= 90 ? 'var(--dsw-alias-state-error-primary)' : (pct >= 50 ? 'var(--dsw-alias-state-warn-primary)' : 'var(--dsw-alias-state-success-primary)'),
|
|
2612
2612
|
},
|
|
2613
2613
|
}),
|
|
2614
2614
|
) : null,
|
package/lib/config-schema.js
CHANGED
|
@@ -94,6 +94,8 @@ export const Config = z.object({
|
|
|
94
94
|
.description('Custom model catalog for Codex.'),
|
|
95
95
|
claudeSystemPrefix: z.string().volatile().default('')
|
|
96
96
|
.description('System prompt prefix for Claude.'),
|
|
97
|
+
claudeCcVersion: z.string().volatile().default('')
|
|
98
|
+
.description('Claude Code version header for billing attribution (default: 2.1.289.7e2).'),
|
|
97
99
|
claudeModels: z.array(z.any()).volatile().default([])
|
|
98
100
|
.description('Custom model catalog for Claude.'),
|
|
99
101
|
grokModels: z.array(z.any()).volatile().default([])
|
package/lib/usage.js
CHANGED
|
@@ -3,8 +3,9 @@ export function numberOrNull(value) {
|
|
|
3
3
|
return Number.isFinite(n) ? n : null
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
export function windowPercent(obj) {
|
|
6
|
+
export function windowPercent(obj, key) {
|
|
7
7
|
if (!obj || typeof obj !== 'object') return null
|
|
8
|
+
if (key === 'extra_usage' || (obj.monthly_limit != null && obj.used_credits != null)) return null
|
|
8
9
|
return numberOrNull(
|
|
9
10
|
obj.utilization ?? obj.used_percent ?? obj.usedPercent ?? obj.creditUsagePercent ?? obj.used_percentage,
|
|
10
11
|
)
|
|
@@ -12,9 +13,9 @@ export function windowPercent(obj) {
|
|
|
12
13
|
|
|
13
14
|
export function deepestUsedPercent(obj) {
|
|
14
15
|
let max = null
|
|
15
|
-
function walk(value, depth) {
|
|
16
|
+
function walk(value, key, depth) {
|
|
16
17
|
if (!value || typeof value !== 'object' || depth > 8) return
|
|
17
|
-
const here = windowPercent(value)
|
|
18
|
+
const here = windowPercent(value, key)
|
|
18
19
|
if (here != null) max = max == null ? here : Math.max(max, here)
|
|
19
20
|
const remaining = numberOrNull(value.remainingFraction)
|
|
20
21
|
if (remaining != null) {
|
|
@@ -26,11 +27,11 @@ export function deepestUsedPercent(obj) {
|
|
|
26
27
|
const used = usedFrac * 100
|
|
27
28
|
max = max == null ? used : Math.max(max, used)
|
|
28
29
|
}
|
|
29
|
-
for (const child of Object.
|
|
30
|
-
if (child && typeof child === 'object') walk(child, depth + 1)
|
|
30
|
+
for (const [k, child] of Object.entries(value)) {
|
|
31
|
+
if (child && typeof child === 'object') walk(child, k, depth + 1)
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
|
-
walk(obj, 0)
|
|
34
|
+
walk(obj, '', 0)
|
|
34
35
|
return max
|
|
35
36
|
}
|
|
36
37
|
|
|
@@ -81,6 +82,7 @@ const WINDOW_LABELS = {
|
|
|
81
82
|
secondary_window: { zh: "7天", en: "7d" },
|
|
82
83
|
monthly: { zh: "月度", en: "month" },
|
|
83
84
|
credits: { zh: "点数", en: "credits" },
|
|
85
|
+
extra_usage: { zh: "额外用量", en: "extra" },
|
|
84
86
|
}
|
|
85
87
|
|
|
86
88
|
export function windowLabel(id) {
|
package/lib/vendors/claude.js
CHANGED
|
@@ -56,6 +56,7 @@ export function defaults() {
|
|
|
56
56
|
return {
|
|
57
57
|
clientId: '9d1c250a-e61b-44d9-88ed-5944d1962f5e',
|
|
58
58
|
redirectUri: 'https://console.anthropic.com/oauth/code/callback',
|
|
59
|
+
claudeCcVersion: '2.1.289.7e2',
|
|
59
60
|
models: [
|
|
60
61
|
{ id: 'claude-opus-5', name: 'Claude Opus 5' },
|
|
61
62
|
{ id: 'claude-sonnet-5', name: 'Claude Sonnet 5' },
|
|
@@ -137,7 +138,9 @@ export async function listModels(blob, cfg, fetchImpl) {
|
|
|
137
138
|
"Accept": "application/json",
|
|
138
139
|
"anthropic-version": "2023-06-01",
|
|
139
140
|
}
|
|
140
|
-
if (blob.accessToken.startsWith("sk-ant-")) {
|
|
141
|
+
if (blob.accessToken.startsWith("sk-ant-oat") || blob.accessToken.startsWith("sk-ant-ort")) {
|
|
142
|
+
headers["Authorization"] = `Bearer ${blob.accessToken}`
|
|
143
|
+
} else if (blob.accessToken.startsWith("sk-ant-")) {
|
|
141
144
|
headers["x-api-key"] = blob.accessToken
|
|
142
145
|
} else {
|
|
143
146
|
headers["Authorization"] = `Bearer ${blob.accessToken}`
|
|
@@ -200,9 +203,37 @@ export async function usage(blob, _cfg, fetchImpl) {
|
|
|
200
203
|
}
|
|
201
204
|
}
|
|
202
205
|
|
|
206
|
+
export function makeClaudeBillingHeader(cfg) {
|
|
207
|
+
const ccVersion = (cfg && cfg.claudeCcVersion) || '2.1.289.7e2'
|
|
208
|
+
const cch = (globalThis.__DSH_CC_H__ || (() => {
|
|
209
|
+
globalThis.__DSH_CC_H__ = Math.random().toString(16).slice(2, 6)
|
|
210
|
+
return globalThis.__DSH_CC_H__
|
|
211
|
+
})())
|
|
212
|
+
const turnIndex = (globalThis.__DSH_CC_TURN__ = (globalThis.__DSH_CC_TURN__ || 0) + 1)
|
|
213
|
+
return `x-anthropic-billing-header: cc_version=${ccVersion}; cc_entrypoint=sdk-cli; cch=${cch}; cc_turn_origin=sdk; cc_prompt_index=0; cc_turn_index=${turnIndex};`
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export function applyClaudeBillingHeader(payload, cfg) {
|
|
217
|
+
if (process.env.CLAUDE_CODE_ATTRIBUTION_HEADER === '0') return payload
|
|
218
|
+
if (!payload) return payload
|
|
219
|
+
const headerText = makeClaudeBillingHeader(cfg)
|
|
220
|
+
const headerBlock = { type: 'text', text: headerText }
|
|
221
|
+
if (Array.isArray(payload.system)) {
|
|
222
|
+
if (!payload.system.some((b) => typeof b === 'object' && b && typeof b.text === 'string' && b.text.startsWith('x-anthropic-billing-header:'))) {
|
|
223
|
+
payload.system = [headerBlock, ...payload.system]
|
|
224
|
+
}
|
|
225
|
+
} else if (typeof payload.system === 'string' && payload.system.trim()) {
|
|
226
|
+
payload.system = [headerBlock, { type: 'text', text: payload.system }]
|
|
227
|
+
} else if (!payload.system) {
|
|
228
|
+
payload.system = [headerBlock]
|
|
229
|
+
}
|
|
230
|
+
return payload
|
|
231
|
+
}
|
|
232
|
+
|
|
203
233
|
export async function* streamOnce({ blob, options, fetchImpl, headers, config, signal }) {
|
|
204
234
|
const payload = anthropicPayload(options, config.systemPrefix || IDENTITY)
|
|
205
235
|
applyClaudeThinking(payload, options)
|
|
236
|
+
applyClaudeBillingHeader(payload, config)
|
|
206
237
|
const res = await fetchImpl(API, {
|
|
207
238
|
method: 'POST',
|
|
208
239
|
headers: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-subscriptions",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.58",
|
|
4
4
|
"description": "Use ChatGPT Codex, Claude, Grok, Antigravity, Kimi, GLM, Cursor, Kiro, Copilot, Qwen, ERNIE, Spark, JetBrains, Perplexity, Replit, and Cody subscriptions as DeepSeek Harness LLM providers via OAuth.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|