dsh-codearts 1.2.2 → 1.2.4

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 CHANGED
@@ -3,6 +3,67 @@
3
3
  本文件记录本插件的重要改动。格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),
4
4
  版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
5
5
 
6
+ ## [1.2.4] - 2026-11-03
7
+
8
+ ### 变更
9
+
10
+ - **登录回调页不再停在一行「可关闭」提示上,标签页会自己关掉**:华为授权完成后浏览器
11
+ 必然落回 `http://127.0.0.1:<port>/oauth/callback` —— redirect_uri 由华为侧指定,登录成功
12
+ 的标志就是这次 302,华为那边没有自己的「登录成功」页可停留;这一页也没有任何后续逻辑,
13
+ `code` 在响应发出的同一时刻就交给了服务端,token 交换、身份探测与卡片刷新都不依赖它。
14
+ 现在页面先显示「正在返回 DeepSeek Harness…」,300ms 后调用 `window.close()` 自动关闭
15
+ 标签页(卡片用 `window.open` 打开授权页,标签页可自关);只有从卡片的手动链接打开、
16
+ 或浏览器拦截脚本关窗时,才会在 1.2s 后退化成「登录成功,本页可关闭」的提示。
17
+
18
+ ### 新增
19
+
20
+ - **用量里记「缓存命中的输入 token」,弹层保持两列、不摊开**:部分上游在流末尾的
21
+ usage 帧里带 `prompt_tokens_details.cached_tokens`(或平铺的 `cached_tokens` /
22
+ `cache_tokens` / `prompt_cache_hit_tokens`),这块以前被丢掉,只留下一个合计。
23
+ 现在解析并存进账本(缓存是输入的子集,脏数据会钳到输入以内),设置卡片的「今日」
24
+ 与「近 30 天」显示成 `输入 x · 输出 y · 缓存 z`;缓存段**始终显示**(没有命中就是
25
+ `缓存 0`,命中率仅在有命中时附上)—— 隐藏 0 会让「没命中」和「上游没下发该字段」
26
+ 看起来一样,反而分不清功能有没有生效。旧账本(没有 `cachedTokens` 字段)读取时按
27
+ 0 补齐,不需要迁移。
28
+ 底部积分弹层只回答「哪个号还有多少积分」,这些用量数字到设置卡片的「用量」页里看。
29
+ `/api/codearts/debug` 另外返回最近 5 帧 usage 的原样内容
30
+ (`usages`),用来判断上游到底有没有下发缓存字段。
31
+ - **底部的积分挪进输入框工具行、权限控制右边**:输入框下方那行还挤着宿主的 tok/s、
32
+ 缓存命中与上下文圆环,模型名一长(`DeepSeek-V4.1-Flash-20261017`)就压不住。现在
33
+ 积分段挂在 `conversation.input.left`(宿主契约里的「composer 工具行左侧紧凑控件」,
34
+ 渲染在权限 + 计划之后),Provider / 模型 / 倍率 / 排队仍留在输入框下方那行 —— 同一个
35
+ 组件的两个实例,用注入的 `zone` 区分,共用同一份数据和两个显隐开关。点开仍是逐号
36
+ 明细:每个号一行「名字 + 余额」,下面一行 11px 灰字 `入 · 出 · 命中 · 条数`(思考
37
+ token 放到设置卡片里),原来那个悬停才出的原生 title 和跟着走的尾巴 `·` 一并去掉。
38
+ - **设置卡片的「用量」页:数字块 + 横条 + 悬停卡片**:顶部三个数字块(今日 token /
39
+ 缓存命中 / 今日请求)替掉原来的「今日合计 / 近 30 天」两行文字;下面仍按账号、按模型
40
+ 出横向柱状图,悬停任意一行弹出明细卡片(输入 / 输出 / 思考 / 缓存命中 / 请求 /
41
+ 命中率,数字精确到个位带千分位),版式照 `agent-acta` 的 `.tok-tip`:名称打头、
42
+ 分隔线分段、数字等宽右对齐。上游没下发缓存字段时写「上游未下发」,不显示成 0%。
43
+ - **同时记下「思考 token」**:上游在 `completion_tokens_details.reasoning_tokens`
44
+ (平铺的 `reasoning_tokens` 也认)里单列推理模型的思考量 —— 实测华为每帧都带,
45
+ 以前整块丢掉,只看得到一个偏大的「输出」。现在存进账本(它是输出的子集,脏数据钳到
46
+ 输出以内),界面统一显示成 `输出 697(思考 505)`,上游不给就只是 `输出 697`;
47
+ 0 不单独成段,也不显示 `思考 0`。旧账本同样按 0 补齐。
48
+
49
+ ## [1.2.3] - 2026-11-02
50
+
51
+ ### 新增
52
+
53
+ - **模型列表里给「上游说不可用」的模型挂「异常」Tag**:某个模型被上游回
54
+ `InferHub.ModelArts.81003.401`(模型不存在 / 本账号无权限)后,设置卡片的勾选区
55
+ 会挂一个「异常」Tag,悬浮显示上游原始原因。**只标记,不替用户取消勾选**,也
56
+ **不随「刷新模型列表」清掉** —— 刷新只重拉上游清单,而清单里照样有它(2026-11-02
57
+ 实测),复活不了;标记按本地日期自然过期,第二天自动重试。多账号下这个错误只有在
58
+ 所有号都试过之后才会浮上来,所以按模型记全局。
59
+ - **勾选的模型可以点「测试」实测一次**:模型行上多一个「测试」按钮(只对已勾选的
60
+ 模型出现),点一下就用一句 `ping`、`max_tokens: 16` 真发一次请求,逐账号轮着试 ——
61
+ 清单里有 ≠ 能调通,只有实测才知道。成功显示「通过」并**清掉该模型的「异常」标记**;
62
+ 失败显示「失败」,悬浮可看上游原因。同一时间只测一个,不占满上游并发槽位。
63
+ - **点开积分弹层也能看到每个账号今天用了多少 token**:那张逐号明细表多了「今日 Token」
64
+ 一列,数字口径与设置卡片「用量」区块一致(输入 + 输出,按人类习惯缩写成 12.3k),
65
+ 悬浮还能看到输入/输出拆分与请求数。只统计本机经插件发出的请求,不是账号总额度。
66
+
6
67
  ## [1.2.2] - 2026-11-02
7
68
 
8
69
  ### 修复
package/lib/bin.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { B as codeartsAccountsPath, I as isBenefitModel, L as CodeArtsAccountStore, d as fetchCallerIdentity, n as codeartsUsagePath, r as discoverModels, t as CodeArtsUsageTracker } from "./usage-DztQaswb.mjs";
2
+ import { R as isBenefitModel, V as CodeArtsAccountStore, W as codeartsAccountsPath, d as fetchCallerIdentity, n as codeartsUsagePath, r as discoverModels, t as CodeArtsUsageTracker } from "./usage-DGIuT79_.mjs";
3
3
  import { existsSync, statSync } from "node:fs";
4
4
  //#region src/version.ts
5
- const CODEARTS_VERSION = "1.2.2";
5
+ const CODEARTS_VERSION = "1.2.4";
6
6
  //#endregion
7
7
  //#region src/bin.ts
8
8
  /**
@@ -41,6 +41,11 @@ interface CodeArtsSettingsKey {
41
41
  benefitBlocked: string;
42
42
  benefitBlockedHint: string;
43
43
  modelImages: string;
44
+ modelError: string;
45
+ testModel: string;
46
+ testingModel: string;
47
+ testOk: string;
48
+ testFailed: string;
44
49
  refreshModels: string;
45
50
  refreshing: string;
46
51
  refreshed: string;
@@ -57,12 +62,28 @@ interface CodeArtsSettingsKey {
57
62
  modelsLoading: string;
58
63
  usageTitle: string;
59
64
  usageToday: string;
60
- usageTodayTotal: string;
61
- usageLast30: string;
62
- usageByAccount: string;
65
+ usageRange: string;
66
+ usageStatTokens: string;
67
+ usageStatIn: string;
68
+ usageStatThinking: string;
69
+ usageTipInput: string;
70
+ usageTipOutput: string;
71
+ usageTipReasoning: string;
72
+ usageTipCached: string;
73
+ usageTipNoCache: string;
74
+ usageTipRequests: string;
75
+ usageTipHit: string;
76
+ usageStatHit: string;
77
+ usageStatRequests: string;
63
78
  usageRequests: string;
79
+ usageByAccount: string;
64
80
  usageRequestCount: string;
65
81
  usageTokens: string;
82
+ /** 带缓存命中输入的那一版(上游不给缓存字段时仍用 usageTokens)。 */
83
+ usageCompact: string;
84
+ /** 缓存命中率(`命中 76%`)。 */
85
+ usageCacheHit: string;
86
+ /** 接在输出数字后面的思考 token(`输出 697(思考 505)`);没有思考量时不拼。 */
66
87
  usageAllTime: string;
67
88
  usageByModel: string;
68
89
  usageSlots: string;
@@ -89,8 +110,7 @@ interface CodeArtsSettingsKey {
89
110
  creditsDockPanelTitle: string;
90
111
  creditsDockRefresh: string;
91
112
  creditsDockRefreshing: string;
92
- creditsDockColAccount: string;
93
- creditsDockColBalance: string;
113
+ creditsDockNoTokens: string;
94
114
  creditsDockEmpty: string;
95
115
  creditsDockExpiring: string;
96
116
  creditsDockUpdated: string;