dsh-deepseek-account 0.1.4 → 0.1.6
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/CHANGELOG.md +11 -0
- package/README.en.md +4 -4
- package/README.md +4 -4
- package/dist/client/client.js +118 -5
- package/docs/ARCHITECTURE.md +8 -0
- package/docs/releases/v0.1.5.md +58 -0
- package/docs/releases/v0.1.6.md +62 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.6 - 2026-08-30
|
|
4
|
+
|
|
5
|
+
- Replace the Harness settings gear with exactly one DeepSeek whale icon even when shell CSS overrides `hidden` or the settings row re-renders in place.
|
|
6
|
+
- Remove visible Provider quota headings and decorative sidebar backgrounds while retaining accessible labels and complete account details.
|
|
7
|
+
|
|
8
|
+
## 0.1.5 - 2026-08-30
|
|
9
|
+
|
|
10
|
+
- Group Codex five-hour and weekly quota data into compact visual blocks with stronger percentage hierarchy and secondary reset-time rows.
|
|
11
|
+
- Refresh the selected Provider once when the current conversation transitions from running to idle, without polling or duplicate idle refreshes.
|
|
12
|
+
- Replace the generic gear beside the DeepSeek account settings entry with the DeepSeek whale icon, restoring the original shell icon when the plugin unloads.
|
|
13
|
+
|
|
3
14
|
## 0.1.4 - 2026-08-30
|
|
4
15
|
|
|
5
16
|
- Show the remaining Grok quota percentage with its current reset window.
|
package/README.en.md
CHANGED
|
@@ -34,14 +34,14 @@ Requirements:
|
|
|
34
34
|
Install the current stable version:
|
|
35
35
|
|
|
36
36
|
```sh
|
|
37
|
-
dsh plugin --profile web add dsh-deepseek-account@0.1.
|
|
37
|
+
dsh plugin --profile web add dsh-deepseek-account@0.1.6
|
|
38
38
|
dsh web
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
In the current conversation's Web UI:
|
|
42
42
|
|
|
43
|
-
1. The sidebar footer shows account
|
|
44
|
-
2. The “DeepSeek account”
|
|
43
|
+
1. The sidebar footer identifies the current account source with its Provider icon and shows account details without decorative backgrounds; click it to refresh, or let it refresh once automatically after each conversation turn finishes.
|
|
44
|
+
2. The settings navigation replaces the generic gear in place with the DeepSeek whale icon; the “DeepSeek account” page shows CNY/USD total, granted, and topped-up balances.
|
|
45
45
|
3. “Sign in and top up” opens only `https://platform.deepseek.com/balance` in a new page.
|
|
46
46
|
|
|
47
47
|
Continue to pin an exact version when upgrading so pre-release dependencies cannot drift:
|
|
@@ -61,7 +61,7 @@ dsh web
|
|
|
61
61
|
| Showing the last verified balance | The current request failed and the plugin retained a marked stale snapshot | Check the network, retry later, and note the timestamp |
|
|
62
62
|
| Quota source unavailable | The Grok/Codex plugin is absent, stopped, or exposes an incompatible local RPC | Check that plugin; DeepSeek remains unaffected |
|
|
63
63
|
|
|
64
|
-
Automatic reads are cached for up to five minutes,
|
|
64
|
+
Automatic DeepSeek reads are cached for up to five minutes, forced refreshes for 30 seconds, and concurrent reads are coalesced into one request. After each conversation turn, the plugin observes the current session's running-to-idle edge and refreshes the current Provider without polling.
|
|
65
65
|
|
|
66
66
|
## Security design
|
|
67
67
|
|
package/README.md
CHANGED
|
@@ -34,14 +34,14 @@ DeepSeek Harness 的独立账户插件:在一个侧栏入口中展示当前对
|
|
|
34
34
|
安装当前稳定版本:
|
|
35
35
|
|
|
36
36
|
```sh
|
|
37
|
-
dsh plugin --profile web add dsh-deepseek-account@0.1.
|
|
37
|
+
dsh plugin --profile web add dsh-deepseek-account@0.1.6
|
|
38
38
|
dsh web
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
打开当前对话的 Web 界面后:
|
|
42
42
|
|
|
43
|
-
1.
|
|
44
|
-
2.
|
|
43
|
+
1. 侧栏底部以 Provider 图标标识当前账户来源,直接显示无额外底色的账户信息;点击可手动刷新,每轮对话结束后也会主动刷新一次。
|
|
44
|
+
2. 设置导航用 DeepSeek 鲸鱼图标原位替换通用齿轮;“DeepSeek 账户”页面可查看 CNY/USD 的总余额、赠送余额和充值余额。
|
|
45
45
|
3. “登录并充值”只会在新页面打开 `https://platform.deepseek.com/balance`。
|
|
46
46
|
|
|
47
47
|
升级时继续使用精确版本,避免预发布阶段的依赖漂移:
|
|
@@ -61,7 +61,7 @@ dsh web
|
|
|
61
61
|
| 展示上一次成功读取的余额 | 当前请求失败,插件保留了已标记的旧快照 | 检查网络后重试,并留意数据时间 |
|
|
62
62
|
| 额度来源不可用 | Grok/Codex 插件未安装、未运行或其本地 RPC 不兼容 | 检查对应插件;DeepSeek 功能不受影响 |
|
|
63
63
|
|
|
64
|
-
自动读取最多缓存 5
|
|
64
|
+
DeepSeek 自动读取最多缓存 5 分钟,强制刷新最多每 30 秒发起一次上游请求;并发读取会合并为一次请求。每轮对话结束时,插件会监听当前会话由运行变为空闲的边沿并刷新当前 Provider,不使用定时轮询。
|
|
65
65
|
|
|
66
66
|
## 安全设计
|
|
67
67
|
|
package/dist/client/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* global document, window */
|
|
1
|
+
/* global document, MutationObserver, window */
|
|
2
2
|
|
|
3
3
|
window.__ModuleLoader__.load({
|
|
4
4
|
id: "dsh-deepseek-account",
|
|
@@ -175,6 +175,26 @@ window.__ModuleLoader__.load({
|
|
|
175
175
|
return provider
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
+
function subscribeCurrentConversationCompletion(list, onComplete) {
|
|
179
|
+
const currentState = () => {
|
|
180
|
+
const snapshot = list.getSnapshot()
|
|
181
|
+
const sessionId = snapshot.current
|
|
182
|
+
return { sessionId, running: sessionId === undefined ? false : snapshot.byId?.[sessionId]?.running === true }
|
|
183
|
+
}
|
|
184
|
+
let previous = currentState()
|
|
185
|
+
return list.subscribe(() => {
|
|
186
|
+
const current = currentState()
|
|
187
|
+
if (current.sessionId !== undefined && current.sessionId === previous.sessionId && previous.running && !current.running) {
|
|
188
|
+
onComplete(current.sessionId)
|
|
189
|
+
}
|
|
190
|
+
previous = current
|
|
191
|
+
})
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function useConversationCompletionRefresh(sessions, refresh) {
|
|
195
|
+
React.useEffect(() => subscribeCurrentConversationCompletion(sessions.list, () => { void refresh(true) }), [refresh, sessions])
|
|
196
|
+
}
|
|
197
|
+
|
|
178
198
|
function accountProvider(selected) {
|
|
179
199
|
return selected === "llm-grok" || selected === "grok" ? "grok" : selected === "dsh-codex" ? "codex" : "deepseek"
|
|
180
200
|
}
|
|
@@ -219,9 +239,99 @@ window.__ModuleLoader__.load({
|
|
|
219
239
|
}, React.createElement("path", { d: providerIconPaths[provider] ?? providerIconPaths.deepseek }))
|
|
220
240
|
}
|
|
221
241
|
|
|
242
|
+
function mountSettingsNavIcon(button) {
|
|
243
|
+
const existing = button?.querySelector?.("[data-dsh-deepseek-account-nav-icon]")
|
|
244
|
+
if (existing !== null && existing !== undefined) return undefined
|
|
245
|
+
const original = button?.querySelector?.("svg:not([data-dsh-deepseek-account-nav-icon])")
|
|
246
|
+
if (original === null || original === undefined || typeof document.createElementNS !== "function") return undefined
|
|
247
|
+
const icon = document.createElementNS("http://www.w3.org/2000/svg", "svg")
|
|
248
|
+
icon.dataset.dshDeepseekAccountNavIcon = ""
|
|
249
|
+
icon.setAttribute("viewBox", "0 0 24 24")
|
|
250
|
+
icon.setAttribute("width", "16")
|
|
251
|
+
icon.setAttribute("height", "16")
|
|
252
|
+
icon.setAttribute("fill", "currentColor")
|
|
253
|
+
icon.setAttribute("fill-rule", "evenodd")
|
|
254
|
+
icon.setAttribute("focusable", "false")
|
|
255
|
+
icon.setAttribute("aria-hidden", "true")
|
|
256
|
+
const path = document.createElementNS("http://www.w3.org/2000/svg", "path")
|
|
257
|
+
path.setAttribute("d", providerIconPaths.deepseek)
|
|
258
|
+
icon.append(path)
|
|
259
|
+
original.after(icon)
|
|
260
|
+
const hidden = new Map()
|
|
261
|
+
const refresh = () => {
|
|
262
|
+
const current = button.querySelector?.("svg:not([data-dsh-deepseek-account-nav-icon])")
|
|
263
|
+
if (current === null || current === undefined) return
|
|
264
|
+
if (!hidden.has(current)) {
|
|
265
|
+
hidden.set(current, {
|
|
266
|
+
hidden: current.hidden === true,
|
|
267
|
+
display: current.style?.getPropertyValue?.("display") ?? "",
|
|
268
|
+
priority: current.style?.getPropertyPriority?.("display") ?? "",
|
|
269
|
+
})
|
|
270
|
+
}
|
|
271
|
+
current.hidden = true
|
|
272
|
+
current.style?.setProperty?.("display", "none", "important")
|
|
273
|
+
if (button.querySelector?.("[data-dsh-deepseek-account-nav-icon]") !== icon) current.after(icon)
|
|
274
|
+
}
|
|
275
|
+
refresh()
|
|
276
|
+
let mounted = true
|
|
277
|
+
const cleanup = () => {
|
|
278
|
+
if (!mounted) return
|
|
279
|
+
mounted = false
|
|
280
|
+
for (const [element, previous] of hidden) {
|
|
281
|
+
element.hidden = previous.hidden
|
|
282
|
+
if (previous.display === "") element.style?.removeProperty?.("display")
|
|
283
|
+
else element.style?.setProperty?.("display", previous.display, previous.priority)
|
|
284
|
+
}
|
|
285
|
+
hidden.clear()
|
|
286
|
+
icon.remove()
|
|
287
|
+
}
|
|
288
|
+
cleanup.refresh = refresh
|
|
289
|
+
return cleanup
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
function installSettingsNavIcon() {
|
|
293
|
+
if (typeof MutationObserver !== "function" || document.body?.querySelectorAll === undefined) return () => {}
|
|
294
|
+
const labels = new Set([dictionaries.zh.nav, dictionaries.en.nav])
|
|
295
|
+
const mounted = new Map()
|
|
296
|
+
const scan = () => {
|
|
297
|
+
for (const [button, cleanup] of mounted) {
|
|
298
|
+
if (button.isConnected === false) { cleanup(); mounted.delete(button) }
|
|
299
|
+
}
|
|
300
|
+
for (const button of document.body.querySelectorAll("button")) {
|
|
301
|
+
const matches = Array.from(button.querySelectorAll?.("span") ?? [])
|
|
302
|
+
.some((node) => labels.has(node.textContent?.trim()))
|
|
303
|
+
if (!matches) continue
|
|
304
|
+
if (mounted.has(button)) { mounted.get(button).refresh(); continue }
|
|
305
|
+
const cleanup = mountSettingsNavIcon(button)
|
|
306
|
+
if (cleanup !== undefined) mounted.set(button, cleanup)
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
const observer = new MutationObserver(scan)
|
|
310
|
+
observer.observe(document.body, { childList: true, subtree: true })
|
|
311
|
+
scan()
|
|
312
|
+
return () => {
|
|
313
|
+
observer.disconnect()
|
|
314
|
+
for (const cleanup of mounted.values()) cleanup()
|
|
315
|
+
mounted.clear()
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
function SidebarDetails({ provider, state, presentation, t }) {
|
|
320
|
+
if (provider !== "codex" || state.status !== "ready") {
|
|
321
|
+
return React.createElement(React.Fragment, null, ...presentation.lines.map((line, index) =>
|
|
322
|
+
React.createElement("small", { key: `${provider}-${index}` }, line)))
|
|
323
|
+
}
|
|
324
|
+
return React.createElement("span", { className: "dsh-deepseek-account-quota-windows" }, ...state.windows.map((window) =>
|
|
325
|
+
React.createElement("span", { className: "dsh-deepseek-account-quota-window", key: window.kind },
|
|
326
|
+
React.createElement("span", { className: "dsh-deepseek-account-quota-period" }, t(window.kind === "five-hour" ? "fiveHour" : "weekly")),
|
|
327
|
+
React.createElement("strong", { className: "dsh-deepseek-account-quota-remaining" }, `${t("remaining")} ${percentText(window.remainingPercent)}%`),
|
|
328
|
+
React.createElement("small", { className: "dsh-deepseek-account-quota-reset" }, `${t("resetsAt")} ${resetTime(window.resetsAt)}`))))
|
|
329
|
+
}
|
|
330
|
+
|
|
222
331
|
function SidebarBalance({ wide, ctx, client, t }) {
|
|
223
332
|
const provider = useActiveAccountProvider(ctx)
|
|
224
333
|
const { state, busy, refresh } = useAccount(client, provider)
|
|
334
|
+
useConversationCompletionRefresh(ctx.sessions, refresh)
|
|
225
335
|
const currentState = state.provider === provider ? state : { provider, status: "loading" }
|
|
226
336
|
const presentation = sidebarPresentation(provider, currentState, t)
|
|
227
337
|
return React.createElement("button", {
|
|
@@ -230,8 +340,8 @@ window.__ModuleLoader__.load({
|
|
|
230
340
|
}, wide
|
|
231
341
|
? React.createElement(React.Fragment, null,
|
|
232
342
|
React.createElement("span", { className: "dsh-deepseek-account-symbol", "aria-hidden": "true" }, ProviderIcon({ provider })),
|
|
233
|
-
React.createElement("span", { className: "dsh-deepseek-account-copy" },
|
|
234
|
-
|
|
343
|
+
React.createElement("span", { className: "dsh-deepseek-account-copy" },
|
|
344
|
+
SidebarDetails({ provider, state: currentState, presentation, t })),
|
|
235
345
|
React.createElement("span", { "aria-hidden": "true" }, busy ? "…" : "↻"))
|
|
236
346
|
: ProviderIcon({ provider }))
|
|
237
347
|
}
|
|
@@ -264,8 +374,8 @@ window.__ModuleLoader__.load({
|
|
|
264
374
|
if (document.querySelector('style[data-dsh-deepseek-account]')) return () => {}
|
|
265
375
|
const style = document.createElement("style")
|
|
266
376
|
style.dataset.dshDeepseekAccount = ""
|
|
267
|
-
style.textContent = ".dsh-deepseek-account-card{display:grid;width:100%;min-height:48px;margin:3px 0;padding:4px 3px;border:0;border-radius:8px;grid-template-columns:22px minmax(0,1fr) 16px;align-items:center;gap:10px;color:inherit;background:transparent;cursor:pointer;font:inherit;text-align:left}.dsh-deepseek-account-card:hover
|
|
268
|
-
style.textContent += ".dsh-deepseek-account-provider-icon{display:block;width:18px;height:18px;margin:auto}.dsh-deepseek-account-copy{gap:2px}.dsh-deepseek-account-copy small{overflow:visible;line-height:1.35;overflow-wrap:anywhere;text-overflow:clip;white-space:normal}"
|
|
377
|
+
style.textContent = ".dsh-deepseek-account-card{display:grid;width:100%;min-height:48px;margin:3px 0;padding:4px 3px;border:0;border-radius:8px;grid-template-columns:22px minmax(0,1fr) 16px;align-items:center;gap:10px;color:inherit;background:transparent;cursor:pointer;font:inherit;text-align:left}.dsh-deepseek-account-card:hover{background:transparent}.dsh-deepseek-account-rail:hover{background:var(--dsw-alias-interactive-bg-hover)}.dsh-deepseek-account-symbol{font-weight:650;text-align:center}.dsh-deepseek-account-copy{display:flex;min-width:0;flex-direction:column}.dsh-deepseek-account-copy small{overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:11px;text-overflow:ellipsis;white-space:nowrap}.dsh-deepseek-account-rail{display:grid;width:36px;height:36px;margin:4px auto;border:0;border-radius:8px;place-items:center;color:inherit;background:transparent;cursor:pointer;font-size:10px;font-weight:650}.dsh-deepseek-account-page{box-sizing:border-box;width:min(860px,100%);padding:8px 4px 40px;color:var(--dsw-alias-label-primary)}.dsh-deepseek-account-page h2{margin:0}.dsh-deepseek-account-description{color:var(--dsw-alias-label-secondary)}.dsh-deepseek-account-panel{margin-top:14px;padding:18px;border:1px solid var(--dsw-alias-border-l2);border-radius:16px;background:var(--dsw-alias-bg-layer-1)}.dsh-deepseek-account-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.dsh-deepseek-account-head h3{margin:0}.dsh-deepseek-account-head button,.dsh-deepseek-account-topup{min-height:34px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:0 13px;color:inherit;background:transparent;font:inherit}.dsh-deepseek-account-balances{display:grid;margin-top:14px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}.dsh-deepseek-account-balance{display:flex;flex-direction:column;gap:5px;padding:14px;border-radius:12px;background:var(--dsw-alias-bg-layer-2,var(--dsw-alias-interactive-bg-hover))}.dsh-deepseek-account-balance strong{font-size:22px}.dsh-deepseek-account-balance span,.dsh-deepseek-account-panel p,.dsh-deepseek-account-panel small{color:var(--dsw-alias-label-secondary);font-size:12px}.dsh-deepseek-account-warning{color:var(--dsw-alias-state-warn-label)!important}.dsh-deepseek-account-topup{display:inline-flex;align-items:center;color:#fff;text-decoration:none;background:var(--dsw-alias-state-business-primary)}"
|
|
378
|
+
style.textContent += ".dsh-deepseek-account-provider-icon{display:block;width:18px;height:18px;margin:auto}.dsh-deepseek-account-copy{gap:2px}.dsh-deepseek-account-copy small{overflow:visible;line-height:1.35;overflow-wrap:anywhere;text-overflow:clip;white-space:normal}.dsh-deepseek-account-quota-windows{display:grid;gap:4px}.dsh-deepseek-account-quota-window{display:grid;min-width:0;padding:1px 0;border-radius:0;grid-template-columns:auto minmax(0,1fr);align-items:baseline;column-gap:6px;background:transparent}.dsh-deepseek-account-quota-period{font-size:11px;font-weight:650}.dsh-deepseek-account-quota-remaining{min-width:0;color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:600}.dsh-deepseek-account-quota-reset{grid-column:1/-1;font-size:10px!important;line-height:1.25!important}"
|
|
269
379
|
document.head.append(style)
|
|
270
380
|
return () => style.remove()
|
|
271
381
|
}
|
|
@@ -274,6 +384,7 @@ window.__ModuleLoader__.load({
|
|
|
274
384
|
function apply(ctx) {
|
|
275
385
|
ctx.effect(() => ctx.locale.register(namespace, dictionaries), "deepseek-account: dictionaries")
|
|
276
386
|
ctx.effect(() => installStyle(), "deepseek-account: styles")
|
|
387
|
+
ctx.effect(() => installSettingsNavIcon(), "deepseek-account: settings navigation icon")
|
|
277
388
|
const t = ctx.locale.bind(namespace)
|
|
278
389
|
const client = createAccountClient(ctx.connection)
|
|
279
390
|
ctx.slots.inject("sidebar.footer.action", () => ctx.slots.register({
|
|
@@ -293,6 +404,8 @@ window.__ModuleLoader__.load({
|
|
|
293
404
|
module.exports.safeCodexUsage = safeCodexUsage
|
|
294
405
|
module.exports.safeGrokQuota = safeGrokQuota
|
|
295
406
|
module.exports.safeSnapshot = safeSnapshot
|
|
407
|
+
module.exports.installSettingsNavIcon = installSettingsNavIcon
|
|
408
|
+
module.exports.subscribeCurrentConversationCompletion = subscribeCurrentConversationCompletion
|
|
296
409
|
return module.exports
|
|
297
410
|
},
|
|
298
411
|
})
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -18,6 +18,8 @@ browser account client ──> sidebar + DeepSeek settings
|
|
|
18
18
|
│
|
|
19
19
|
├── optional /grok-auth RPC ──> remaining % + current reset window
|
|
20
20
|
└── optional /dsh-codex RPC ──> remaining % + 5-hour/weekly reset windows
|
|
21
|
+
|
|
22
|
+
current session list ── running true→false ──> one forced account refresh
|
|
21
23
|
```
|
|
22
24
|
|
|
23
25
|
充值是独立路径:浏览器只打开固定的 `https://platform.deepseek.com/balance`。插件不参与该网页的登录、Cookie 或付款请求。
|
|
@@ -58,10 +60,16 @@ await balance.read({ force? })
|
|
|
58
60
|
- 调用 DeepSeek、Grok 或 Codex 的本地 RPC;
|
|
59
61
|
- 再次校验所有跨 RPC 数据;
|
|
60
62
|
- 注册侧栏与设置页;
|
|
63
|
+
- 监听当前会话的运行结束边沿,并刷新一次当前 Provider;
|
|
64
|
+
- 在 Harness 尚未提供 settings section 图标接口时,只对中英文“DeepSeek 账户”导航行挂载可清理的鲸鱼图标;
|
|
61
65
|
- 注册中英文文案和局部样式。
|
|
62
66
|
|
|
63
67
|
客户端只依赖投影后的账户状态。`scripts/build.mjs` 会复制确定性产物,并拒绝包含 `DEEPSEEK_API_KEY`、credential resolution 或 Authorization header 特征的客户端文件。
|
|
64
68
|
|
|
69
|
+
完成刷新只观察 `ctx.sessions.list` 已公开的 `current` 与 `running` 状态。同一会话仅在 `true → false` 时触发;初始空闲、重复空闲通知和切换到另一个空闲会话都不能触发。不要为此增加定时轮询或读取完整对话日志。
|
|
70
|
+
|
|
71
|
+
设置导航图标 adapter 只匹配插件拥有的中英文 label,以内联高优先级样式隐藏 Harness 原图标并挂载唯一鲸鱼图标。它必须在同一按钮被 Harness 原位重绘后重新隐藏新的原图标,重复 DOM 通知不得重复挂载;插件卸载时必须断开观察、移除鲸鱼并恢复接触过的全部原图标及其原始样式。Harness 将来提供正式 section 图标接口后,应删除这个临时 adapter。
|
|
72
|
+
|
|
65
73
|
### Optional Provider adapters
|
|
66
74
|
|
|
67
75
|
Grok 的 `/grok-auth` 和 Codex 的 `/dsh-codex` 是外部、可选 seam。它们不是本插件拥有的接口,因此:
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
## 中文
|
|
2
|
+
|
|
3
|
+
`0.1.5` 优化 Codex 额度可读性,在每轮对话结束后主动刷新当前 Provider,并让 DeepSeek 账户设置项使用对应的鲸鱼图标。
|
|
4
|
+
|
|
5
|
+
### 主要变化
|
|
6
|
+
|
|
7
|
+
- Codex 的 5 小时和每周额度改为两个紧凑信息块:窗口与剩余百分比位于主行,重置时间位于次级行。
|
|
8
|
+
- 当前会话从运行变为空闲时,主动刷新一次当前 Provider;初始空闲、重复空闲通知和会话切换不会误触发,也不使用轮询。
|
|
9
|
+
- 将“DeepSeek 账户”设置导航的通用齿轮替换为 DeepSeek 鲸鱼图标;重复渲染不会重复插入,插件卸载时恢复 Harness 原图标。
|
|
10
|
+
|
|
11
|
+
### 兼容性与安全边界
|
|
12
|
+
|
|
13
|
+
- 图标适配只匹配本插件拥有的中英文设置 label,不修改其他设置项。
|
|
14
|
+
- 本版本不接入 DeepSeek 网页登录、用量分析或插件内充值,也不读取网页 Cookie、账户密码或支付数据。
|
|
15
|
+
- Grok/Codex 仍是可选数据源,其登录、模型、设置与 RPC 行为不变。
|
|
16
|
+
|
|
17
|
+
### 验证限制
|
|
18
|
+
|
|
19
|
+
- 自动化测试覆盖配额分层渲染、Provider 图标、设置导航图标的挂载/去重/恢复,以及单次对话完成刷新。
|
|
20
|
+
- 未执行真实 Grok/Codex 账户读取、真实 DeepSeek 余额请求、网页登录或付款;真实 Harness GUI 视觉验收仍需安装后确认。
|
|
21
|
+
|
|
22
|
+
安装:
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
dsh plugin --profile web add dsh-deepseek-account@0.1.5
|
|
26
|
+
dsh web
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
<details>
|
|
30
|
+
<summary>English release notes</summary>
|
|
31
|
+
|
|
32
|
+
`0.1.5` improves Codex quota readability, refreshes the current Provider after each completed conversation turn, and gives the DeepSeek account settings entry its matching whale icon.
|
|
33
|
+
|
|
34
|
+
### Changes
|
|
35
|
+
|
|
36
|
+
- Codex five-hour and weekly quotas render as compact blocks, with the window and remaining percentage on the primary row and reset time on a secondary row.
|
|
37
|
+
- A current-session running-to-idle edge refreshes the selected Provider once. Initial idle state, duplicate idle notifications, and session switches do not trigger false refreshes; no polling is used.
|
|
38
|
+
- The generic settings gear beside “DeepSeek account” is replaced with the DeepSeek whale icon. Re-renders do not duplicate it, and plugin cleanup restores the Harness icon.
|
|
39
|
+
|
|
40
|
+
### Compatibility and security boundaries
|
|
41
|
+
|
|
42
|
+
- The icon adapter matches only this plugin's Chinese and English settings labels and does not modify other entries.
|
|
43
|
+
- This release does not add DeepSeek web login, usage analytics, or in-plugin payment, and it does not read web cookies, passwords, or payment data.
|
|
44
|
+
- Grok and Codex remain optional data sources; their authentication, models, settings, and RPC behavior are unchanged.
|
|
45
|
+
|
|
46
|
+
### Verification limits
|
|
47
|
+
|
|
48
|
+
- Automated tests cover quota hierarchy, Provider icons, settings-icon mount/deduplication/restoration, and one refresh per completed conversation turn.
|
|
49
|
+
- No live Grok/Codex quota read, DeepSeek balance request, web login, or payment was performed. Live Harness GUI visual acceptance remains pending installation.
|
|
50
|
+
|
|
51
|
+
Install:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
dsh plugin --profile web add dsh-deepseek-account@0.1.5
|
|
55
|
+
dsh web
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
</details>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
## 中文
|
|
2
|
+
|
|
3
|
+
`0.1.6` 修正 DeepSeek 账户设置项同时显示齿轮和鲸鱼的问题,并进一步精简侧栏账户信息的视觉层级。
|
|
4
|
+
|
|
5
|
+
### 主要变化
|
|
6
|
+
|
|
7
|
+
- DeepSeek 鲸鱼图标现在会原位替换 Harness 通用齿轮,而不是追加在齿轮旁边。
|
|
8
|
+
- 即使 Harness 样式覆盖 HTML `hidden`,或在同一个设置按钮内重新渲染齿轮 SVG,插件也会保持只显示一个鲸鱼图标。
|
|
9
|
+
- 侧栏不再重复显示“Codex 额度”“Grok 额度”或“账户余额”等 Provider 标题,由对应图标承担视觉识别。
|
|
10
|
+
- 移除展开侧栏卡片及 Codex 5 小时/每周额度行的装饰性底色;Grok 和 DeepSeek 信息同样直接融入侧栏背景。
|
|
11
|
+
- 可访问名称仍保留 Provider 和完整账户信息;插件卸载时会恢复 Harness 原图标及其原始样式。
|
|
12
|
+
|
|
13
|
+
### 兼容性与安全边界
|
|
14
|
+
|
|
15
|
+
- 图标适配只匹配本插件拥有的中英文“DeepSeek 账户”设置项,不修改其他导航项或桌面端代码。
|
|
16
|
+
- 本版本不接入 DeepSeek 网页登录、用量分析或插件内充值,也不读取网页 Cookie、账户密码或支付数据。
|
|
17
|
+
- Grok/Codex 仍是可选数据源,其认证、模型、设置和 RPC 行为不变。
|
|
18
|
+
|
|
19
|
+
### 验证限制
|
|
20
|
+
|
|
21
|
+
- 自动化测试覆盖高优先级隐藏原齿轮、Harness 原位重绘、鲸鱼去重、卸载恢复、图标-only 标题以及无底色账户详情。
|
|
22
|
+
- 已通过模块测试、构建和 npm 打包预检;真实 Harness GUI 视觉验收仍需安装并重启后确认。
|
|
23
|
+
|
|
24
|
+
安装:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
dsh plugin --profile web add dsh-deepseek-account@0.1.6
|
|
28
|
+
dsh web
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
<details>
|
|
32
|
+
<summary>English release notes</summary>
|
|
33
|
+
|
|
34
|
+
`0.1.6` fixes the settings row showing both the generic gear and the DeepSeek whale, and further simplifies the sidebar account presentation.
|
|
35
|
+
|
|
36
|
+
### Changes
|
|
37
|
+
|
|
38
|
+
- The DeepSeek whale now replaces the Harness gear in place instead of being appended beside it.
|
|
39
|
+
- The plugin keeps exactly one whale visible even when Harness CSS overrides HTML `hidden` or the shell re-renders its gear SVG inside the same settings button.
|
|
40
|
+
- The sidebar no longer repeats Provider headings such as “Codex quota”, “Grok quota”, or “Account balance”; the corresponding icon provides visual identity.
|
|
41
|
+
- Decorative backgrounds are removed from expanded sidebar cards and Codex five-hour/weekly rows. Grok and DeepSeek details also sit directly on the sidebar background.
|
|
42
|
+
- Accessible names still retain the Provider and complete account details. Plugin cleanup restores the Harness icon and its original styles.
|
|
43
|
+
|
|
44
|
+
### Compatibility and security boundaries
|
|
45
|
+
|
|
46
|
+
- The icon adapter matches only this plugin's Chinese and English “DeepSeek account” settings entry. It does not modify other navigation entries or desktop application code.
|
|
47
|
+
- This release does not add DeepSeek web login, usage analytics, or in-plugin payment, and it does not read web cookies, passwords, or payment data.
|
|
48
|
+
- Grok and Codex remain optional data sources; their authentication, models, settings, and RPC behavior are unchanged.
|
|
49
|
+
|
|
50
|
+
### Verification limits
|
|
51
|
+
|
|
52
|
+
- Automated tests cover high-priority gear hiding, in-place Harness re-renders, whale deduplication, cleanup restoration, icon-only headings, and background-free account details.
|
|
53
|
+
- Module tests, build, and npm pack preflight passed. Live Harness GUI visual acceptance remains pending installation and restart.
|
|
54
|
+
|
|
55
|
+
Install:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
dsh plugin --profile web add dsh-deepseek-account@0.1.6
|
|
59
|
+
dsh web
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
</details>
|