@eddyskywalker/dsh-chatgpt-subscription 0.65.0 → 0.66.1
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 +47 -0
- package/lib/client.js +257 -18
- package/lib/client.js.map +1 -1
- package/lib/index.js +2509 -1061
- package/lib/types/client/antigravity/styles.d.ts.map +1 -1
- package/lib/types/client/glm-coding-plan/styles.d.ts.map +1 -1
- package/lib/types/client/kimi-code/KimiCodeSection.d.ts.map +1 -1
- package/lib/types/client/kimi-code/locales.d.ts +50 -2
- package/lib/types/client/kimi-code/locales.d.ts.map +1 -1
- package/lib/types/client/kimi-code/styles.d.ts.map +1 -1
- package/lib/types/client/locales-ru/kimi-code.d.ts.map +1 -1
- package/lib/types/client/locales-ru/progress-updates.d.ts.map +1 -1
- package/lib/types/client/locales-ru/step-code.d.ts.map +1 -1
- package/lib/types/client/progress-updates/locales.d.ts +23 -11
- package/lib/types/client/progress-updates/locales.d.ts.map +1 -1
- package/lib/types/client/progress-updates/settings-binding.d.ts +11 -1
- package/lib/types/client/progress-updates/settings-binding.d.ts.map +1 -1
- package/lib/types/client/progress-updates/settings-section.d.ts +2 -2
- package/lib/types/client/progress-updates/settings-section.d.ts.map +1 -1
- package/lib/types/client/step-code/StepCodeSection.d.ts.map +1 -1
- package/lib/types/client/step-code/locales.d.ts +5 -2
- package/lib/types/client/step-code/locales.d.ts.map +1 -1
- package/lib/types/client/workbuddy/styles.d.ts.map +1 -1
- package/lib/types/compat.d.ts +1 -1
- package/lib/types/host/antigravity/adapter.d.ts +2 -0
- package/lib/types/host/antigravity/adapter.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/budget.d.ts +2 -2
- package/lib/types/host/cache-warmup/budget.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/contracts.d.ts +3 -1
- package/lib/types/host/cache-warmup/contracts.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/install.d.ts +4 -4
- package/lib/types/host/cache-warmup/install.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/projection.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/result-tool.d.ts +3 -1
- package/lib/types/host/cache-warmup/result-tool.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/settings.d.ts +5 -1
- package/lib/types/host/cache-warmup/settings.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/usage.d.ts +1 -1
- package/lib/types/host/cache-warmup/usage.d.ts.map +1 -1
- package/lib/types/host/claude/adapter.d.ts +3 -0
- package/lib/types/host/claude/adapter.d.ts.map +1 -1
- package/lib/types/host/cline-pass/mapper.d.ts.map +1 -1
- package/lib/types/host/common/account-pool.d.ts +27 -1
- package/lib/types/host/common/account-pool.d.ts.map +1 -1
- package/lib/types/host/common/cache-activity.d.ts +14 -0
- package/lib/types/host/common/cache-activity.d.ts.map +1 -0
- package/lib/types/host/common/cache-affinity.d.ts +23 -0
- package/lib/types/host/common/cache-affinity.d.ts.map +1 -0
- package/lib/types/host/common/cache-hint.d.ts +18 -0
- package/lib/types/host/common/cache-hint.d.ts.map +1 -0
- package/lib/types/host/common/failure-classification.d.ts +21 -0
- package/lib/types/host/common/failure-classification.d.ts.map +1 -0
- package/lib/types/host/common/hosted-media.d.ts +36 -0
- package/lib/types/host/common/hosted-media.d.ts.map +1 -0
- package/lib/types/host/common/prefix-request-coordinator.d.ts +46 -0
- package/lib/types/host/common/prefix-request-coordinator.d.ts.map +1 -0
- package/lib/types/host/common/prefix-stability.d.ts +24 -0
- package/lib/types/host/common/prefix-stability.d.ts.map +1 -0
- package/lib/types/host/common/prompt-cache-policy.d.ts +43 -0
- package/lib/types/host/common/prompt-cache-policy.d.ts.map +1 -0
- package/lib/types/host/common/reasoning-dialect.d.ts +24 -0
- package/lib/types/host/common/reasoning-dialect.d.ts.map +1 -0
- package/lib/types/host/common/session-cache-state.d.ts +29 -0
- package/lib/types/host/common/session-cache-state.d.ts.map +1 -0
- package/lib/types/host/common/sticky-image-budget.d.ts +10 -0
- package/lib/types/host/common/sticky-image-budget.d.ts.map +1 -0
- package/lib/types/host/common/tool-runaway.d.ts +52 -0
- package/lib/types/host/common/tool-runaway.d.ts.map +1 -0
- package/lib/types/host/glm-coding-plan/adapter.d.ts +11 -0
- package/lib/types/host/glm-coding-plan/adapter.d.ts.map +1 -1
- package/lib/types/host/kimi-code/account-pool.d.ts +19 -2
- package/lib/types/host/kimi-code/account-pool.d.ts.map +1 -1
- package/lib/types/host/kimi-code/adapter.d.ts +48 -40
- package/lib/types/host/kimi-code/adapter.d.ts.map +1 -1
- package/lib/types/host/kimi-code/cache-affinity.d.ts +112 -0
- package/lib/types/host/kimi-code/cache-affinity.d.ts.map +1 -0
- package/lib/types/host/kimi-code/cache-hint.d.ts +3 -28
- package/lib/types/host/kimi-code/cache-hint.d.ts.map +1 -1
- package/lib/types/host/kimi-code/cache-wait.d.ts +6 -4
- package/lib/types/host/kimi-code/cache-wait.d.ts.map +1 -1
- package/lib/types/host/kimi-code/mapper.d.ts +13 -7
- package/lib/types/host/kimi-code/mapper.d.ts.map +1 -1
- package/lib/types/host/kimi-code/media-files.d.ts +2 -28
- package/lib/types/host/kimi-code/media-files.d.ts.map +1 -1
- package/lib/types/host/kimi-code/repeat-breaker.d.ts +13 -16
- package/lib/types/host/kimi-code/repeat-breaker.d.ts.map +1 -1
- package/lib/types/host/kimi-code/routes.d.ts.map +1 -1
- package/lib/types/host/kimi-code/session-cache-state.d.ts +34 -54
- package/lib/types/host/kimi-code/session-cache-state.d.ts.map +1 -1
- package/lib/types/host/kimi-code/tool-argument-guard.d.ts +36 -0
- package/lib/types/host/kimi-code/tool-argument-guard.d.ts.map +1 -0
- package/lib/types/host/kimi-code/tool-argument-recovery.d.ts +16 -0
- package/lib/types/host/kimi-code/tool-argument-recovery.d.ts.map +1 -0
- package/lib/types/host/minimax-code/adapter.d.ts +5 -1
- package/lib/types/host/minimax-code/adapter.d.ts.map +1 -1
- package/lib/types/host/minimax-code/files-api.d.ts.map +1 -1
- package/lib/types/host/minimax-code/runtime-enhancements.d.ts.map +1 -1
- package/lib/types/host/opendesign/mapper.d.ts.map +1 -1
- package/lib/types/host/qoder/mapper.d.ts.map +1 -1
- package/lib/types/host/responses-client.d.ts +4 -0
- package/lib/types/host/responses-client.d.ts.map +1 -1
- package/lib/types/host/step-code/account-pool.d.ts +2 -2
- package/lib/types/host/step-code/account-pool.d.ts.map +1 -1
- package/lib/types/host/step-code/adapter.d.ts +10 -0
- package/lib/types/host/step-code/adapter.d.ts.map +1 -1
- package/lib/types/host/step-code/routes.d.ts +3 -0
- package/lib/types/host/step-code/routes.d.ts.map +1 -1
- package/lib/types/index.d.ts +22 -3
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/shared/kimi-code-contracts.d.ts +79 -0
- package/lib/types/shared/kimi-code-contracts.d.ts.map +1 -1
- package/lib/types/shared/step-code-contracts.d.ts +5 -0
- package/lib/types/shared/step-code-contracts.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.66.1 - 2026-11-09
|
|
6
|
+
|
|
7
|
+
- **[kimi-code / 号池] 瞬时失败保持账号亲和,只有明确的账号级限制才冷却换号**
|
|
8
|
+
- 普通 429 背压与上游引擎过载不再被当成本账号额度耗尽:重试沿用原账号,不冷却、不轮换;只有响应正文能够证明账号额度或账号限制时,才进入冷却并选择其他账号。流内错误与响应头错误共用同一套分类,避免换号破坏前缀缓存亲和。
|
|
9
|
+
- 持久化有界、非机密的最近请求诊断,卡片显示实际账号、是否切号、请求结果、输入/缓存读写/输出 token 及 reasoning 占比;高推理占比时明确提示成本主要来自推理,而不是缓存失效。
|
|
10
|
+
|
|
11
|
+
- **[kimi-code / 工具调用] 拦截失控参数流,并允许同一步在原账号引导恢复一次**
|
|
12
|
+
- 两种线上协议都在工具执行前拦截超过线路字节预算的参数,以及失控的重复键参数族;`ask_user_question`、大型程序与普通工具分别沿用适合其用途的限制,原始失控参数不会写入恢复提示。
|
|
13
|
+
- 第一次命中专用守卫错误后,在失败 attempt 之后追加最小合法 JSON 提示,由同一个 turn/step 立即重试,并钉住原账号以保留缓存;第二次仍失控则交还默认错误处理,不形成无限恢复循环。
|
|
14
|
+
|
|
15
|
+
- **[cache-warmup / 诊断] 扩大安全结果预览范围,区分前缀延续与新增输入**
|
|
16
|
+
- 有明确通过汇总且无失败证据的测试日志、严格识别根形状的 PTC 工具目录,以及超过当前预算且能可靠结构化的 grep/glob 结果可生成 preview;完整名称、错误集合与汇总按策略保留,完整原文仍通过 `ref://` 补读。混合证据、无法可靠解析或可能丢失关键事实的内容继续逐字保留。
|
|
17
|
+
- Kimi 缓存卡片新增「最近前缀延续」,分别展示最近请求缓存读、新增输入与按 256-token 对齐基线估算的保留比例;该指标仅用于诊断,不声明上游内部缓存契约。
|
|
18
|
+
|
|
19
|
+
- **[glm-coding-plan] 模型目录构建不再写账号池**
|
|
20
|
+
- 目录只需要区域信息,不再调用真实请求选号入口;按号池 revision 与指定账号缓存只读区域快照,避免一次模型选择器刷新被放大成重复 DPAPI 解密、凭据读取和 `lastUsedAt` 回写。未登录或读取失败时不缓存失败结果,登录后仍可重试。
|
|
21
|
+
|
|
22
|
+
- **[client] 修复设置枢纽主按钮悬停与登录行视觉层级**
|
|
23
|
+
- 共享 hover 洗色不再匹配 `.dsha-btn-primary`,避免「保存设置」「添加账号」等主按钮悬停时底色消失、白字落在近白背景上;Antigravity 与 Kimi 两份相同样式同步修复。
|
|
24
|
+
- 删除登录行对所有按钮的无差别 info 填充,保留「添加账号」主按钮与「设备码登录」「导入本地登录」次要按钮的视觉层级,布局规则不变。
|
|
25
|
+
|
|
26
|
+
- **验证**:完整类型检查通过;清洁构建后全量 Vitest 为 384 个文件通过 / 2 个跳过(6992 项通过 / 9 项跳过 / 0 失败);`npm pack --dry-run` 为 977 个文件、约 4.3 MB。按钮修复以 v0.66.0 与当前版本在相同 DOM、760×300 截图区域及浅色主题下完成 Before/After 复核。
|
|
27
|
+
|
|
28
|
+
## 0.66.0 - 2026-11-09
|
|
29
|
+
|
|
30
|
+
- **[shared / cache] Kimi Code 的缓存与运行时优化沉淀为跨线路共享能力,并按上游证据启用**
|
|
31
|
+
- **共享机制**:新增缓存策略注册表、静态前缀稳定化、冷启动请求协调、账号缓存亲和、持久化活动/图片状态、推理方言学习、失败冷却边界与 hosted-media 单飞内核。Codex、Antigravity、Step、Claude、MiniMax 获得静态前缀与 in-flight 冷启动协调;Cline、OpenDesign、Qoder 可学习并回放实际 reasoning 字段;Claude/MiniMax 的粘性图片状态可跨重启恢复。
|
|
32
|
+
- **全线低风险收益**:重复工具调用检测与分级提醒覆盖受控线路;大工具结果 `ref://` 预览及 `cache_warmup_result` 精确补读不再绑死 Kimi。只有 Kimi 保留第 12 次强停,MiniMax 保留官方错误族、ABAB 与轮询规则,其他线路不继承强停。
|
|
33
|
+
- **证据门控**:新增 `toolRunawayGuard`、`cacheWarmupProviders` 与非 volatile 的 `promptCacheOverrides`。Kimi 的 25 分钟 TTL、等待续热、账号级亲和与 `ms://` 协议保持原语义;其他线路只有在明确 TTL、账号隔离或上传协议证据时才开启对应行为。Step 另获官方 5 分钟 TTL 的缓存过期提示与可选亲和选号。
|
|
34
|
+
- **回归与界面**:新增策略、前缀、协调、活动、推理、媒体和 UI 测试;设置区新增工具失控治理开关,中英俄三语同步,并在原 GUI 同视口/主题完成 Before/After 复核。强制类型检查、构建、打包检查与全量 Vitest 均通过(6952 例通过 / 9 跳过 / 0 失败)。
|
|
35
|
+
|
|
36
|
+
- **[kimi-code / 号池] 多账号轮换按「前缀缓存还热着」选账号;冷启动组键补上账号维度**
|
|
37
|
+
- **问题**:服务端的前缀缓存是**按账号**各存一份,而内核 `selectAccount` 只看冷却、令牌与最近使用,永远看不到「这条前缀在哪个账号上还热着」——于是轮换可能把请求发给一个从没见过这段前缀的账号。更糟的是冷启动组键 `region:model:systemPromptHash:toolsHash[:staticPrefixHash]` **不含账号**,插件会在另一个账号烤热之后误判「这组是热的」,跟随者白等 2.5 秒预算,而它那条请求本来就不会命中。
|
|
38
|
+
- **改法**(`src/host/common/account-pool.ts`、`src/host/kimi-code/{account-pool,adapter,cache-affinity}.ts`、`src/index.ts`):内核新增 `AccountSelectionHint` 与 `getEffectiveAccount(..., selection)`——顺序是**钉住账号 > 请求偏好 > 轮换策略**,偏好里不可用/已尝试的 id 直接跳过,全跳过则回落策略(辅助工具的 `getCredentialAccount` 不消费偏好,读凭据不动轮换);`coldStartGroupKey` 追加 `|accountScope`,并新增 `prefixGroupKey` / `isWarmPrefixGroup` 让两处共用同一个「热」定义;新模块 `cache-affinity.ts` 把取舍写成纯函数(剩余额度取**最紧窗口**、`=20%` 仍可用、配额未知按「没证明不足」处理、同份额保持池序);适配器在取凭据之前算一次偏好,只对真的热着的账号读配额。新增默认开启的 volatile 开关 `cacheAffinity`,设置页「进展更新」一格加一行,三语齐备,`DSH_KIMI_CODE_CACHE_AFFINITY` 可覆盖。
|
|
39
|
+
- **刻意不做**:不把亲和做成第四种轮换策略(用户不必为了收益改策略);不因亲和失败而报错(热账号不可用就照旧回落);组键变更会让现存会话各自冷启动一次,这是一次性成本。
|
|
40
|
+
- **回归**:新增 `test/kimi-code-cache-affinity.test.ts` 15 例(最紧窗口、20% 边界、未知配额、冷账号永不入列、稳定排序、开关解析与环境变量);`test/account-pool-core.test.ts` 3 例(偏好压过策略、钉住压过偏好、偏好不可用时回落);`test/kimi-code-adapter.test.ts` 3 例(组键按账号区分、跨账号不再共享冷启动闸门、热账号被优先选中且开关关闭后回到池的选择)——其中「跨账号不再共享闸门」做了反向验证:把组键改回不带账号,该用例立刻失败。
|
|
41
|
+
|
|
42
|
+
- **[kimi-code / 诊断] 卡片显示「开局继承」:这个会话的第一条请求有多少 token 是继承来的**
|
|
43
|
+
- **背景**:跨会话前缀继承是真实存在的(同账号的另一个会话写下的头段,25 分钟内可被新会话读回),但它此前只体现在滚动命中率里,看不出「开局那一两千到上万 token 是谁付的」。同一台机器上的实测:新会话在另一会话结束 3 分钟后开工,首轮读到 14,080 / 21,527(65%);隔 5 小时续跑则只剩 2,304(14%)。
|
|
44
|
+
- **改法**(`src/host/kimi-code/{session-cache-state,adapter,routes}.ts`、`src/shared/kimi-code-contracts.ts`、`src/client/kimi-code/`):持久记录新增 `firstRequestCachedTokens` / `firstRequestPromptTokens`,只在会话首轮写入且之后原样保留(滚动合计会淹没这个数字);DTO 增 `opening`,卡片在「最近前缀状态」下方显示 `开局继承 14,080 / 21,527 tok(65.4%)`,无数据时不画这一行(旧记录与单账号首轮冷启动都属于「没有可说的」)。
|
|
45
|
+
- **回归**:`test/kimi-code-adapter.test.ts` 1 例(首轮写入、次轮不覆盖);`test/kimi-code-k31-card-ui.test.tsx` 2 例(有数据时的三个数字、无数据时不画该行)。
|
|
46
|
+
|
|
47
|
+
- **[kimi-code / 结论归档] 「把全局与工作区 AGENTS.md 拆成两条以提高跨工作区继承」经证伪,不实施**
|
|
48
|
+
- **依据**:宿主 `@deepseek-ai/dsh-agent-instructions` 的 `render.ts` 把每个指令文件渲染成 `Instructions from: <path>\n\n<content>`,全部 section 拼进**同一条** `<system-reminder>`,且 `USER_GLOBAL_DIRECTORIES` 决定全局段本来就在前;本仓库 mapper 的 `orderStaticPrefixMessages` 只按 tier 重排,不改变块内字节顺序。因此拆成两条消息后,跨工作区能匹配到的前缀长度**一个字节都不会变**。
|
|
49
|
+
- **还有一个反效果**:现有重排按 tier 只提升**首次出现**(`seenTiers` / `hoistedByTier`),第二条 tier-2 会被当成 rank 5 挤到用户消息之后——照原方案做会实实在在变差。
|
|
50
|
+
- **仍成立的部分**:工具说明与 `code_run` 恒定说明段本来就在 system prompt 里、已包含在共享的约 14k 头段内;要扩大共享头段只能让更多「全工作区相同」的内容排在第一个工作区相关字节之前,而目前除了语言覆盖已没有这类内容。
|
|
51
|
+
|
|
5
52
|
## 0.65.0 - 2026-11-08
|
|
6
53
|
|
|
7
54
|
- **[antigravity] 出站请求身份、版本清单跟随与控制面契约对齐官方客户端**
|
package/lib/client.js
CHANGED
|
@@ -5072,6 +5072,22 @@ window.__ModuleLoader__.load({
|
|
|
5072
5072
|
unknownMetric: "暂无",
|
|
5073
5073
|
cacheExpired: "本会话已空闲超过缓存有效期,下一轮将重新处理约 {tokens} 个 token。",
|
|
5074
5074
|
cacheDrift: "最近前缀状态",
|
|
5075
|
+
cacheOpening: "开局继承",
|
|
5076
|
+
cacheOpeningValue: "{cached} / {tokens} tok({ratio})",
|
|
5077
|
+
cacheContinuation: "最近前缀延续",
|
|
5078
|
+
cacheContinuationValue: "{cached} / {expected} tok({ratio})· 新增 {fresh} tok",
|
|
5079
|
+
cacheLastRequest: "最近请求",
|
|
5080
|
+
cacheRequestSuccess: "成功",
|
|
5081
|
+
cacheRequestError: "失败",
|
|
5082
|
+
cacheRequestAborted: "已中止",
|
|
5083
|
+
cacheAccountChanged: "(已切号)",
|
|
5084
|
+
cacheLastInput: "本次输入",
|
|
5085
|
+
cacheLastInputValue: "新增 {fresh} · 缓存读 {cached} · 缓存写 {written}",
|
|
5086
|
+
cacheLastOutput: "本次输出",
|
|
5087
|
+
cacheLastReasoning: "其中 reasoning",
|
|
5088
|
+
cacheReasoningValue: "{tokens} tok(占输出 {ratio})",
|
|
5089
|
+
cacheReasoningCost: "本步成本主要来自推理,并非缓存失效。",
|
|
5090
|
+
metricNotReported: "未报告",
|
|
5075
5091
|
cacheDriftFirst: "首个请求(缓存为空)",
|
|
5076
5092
|
cacheDriftStable: "稳定(前缀未变)",
|
|
5077
5093
|
cacheDriftSystemPrompt: "系统提示已变化(缓存失效)",
|
|
@@ -5243,6 +5259,22 @@ window.__ModuleLoader__.load({
|
|
|
5243
5259
|
cacheWarmupSettled: "Steady state ({hits}/{required}) · cap {chars} chars",
|
|
5244
5260
|
unknownMetric: "n/a",
|
|
5245
5261
|
cacheDrift: "Last prefix state",
|
|
5262
|
+
cacheOpening: "Opening inheritance",
|
|
5263
|
+
cacheOpeningValue: "{cached} / {tokens} tok ({ratio})",
|
|
5264
|
+
cacheContinuation: "Latest prefix continuity",
|
|
5265
|
+
cacheContinuationValue: "{cached} / {expected} tok ({ratio}) · {fresh} fresh tok",
|
|
5266
|
+
cacheLastRequest: "Latest request",
|
|
5267
|
+
cacheRequestSuccess: "success",
|
|
5268
|
+
cacheRequestError: "error",
|
|
5269
|
+
cacheRequestAborted: "aborted",
|
|
5270
|
+
cacheAccountChanged: " (account changed)",
|
|
5271
|
+
cacheLastInput: "Input this request",
|
|
5272
|
+
cacheLastInputValue: "{fresh} fresh · {cached} cache read · {written} cache write",
|
|
5273
|
+
cacheLastOutput: "Output this request",
|
|
5274
|
+
cacheLastReasoning: "Reasoning included",
|
|
5275
|
+
cacheReasoningValue: "{tokens} tok ({ratio} of output)",
|
|
5276
|
+
cacheReasoningCost: "Reasoning, not a cache miss, drove this request cost.",
|
|
5277
|
+
metricNotReported: "not reported",
|
|
5246
5278
|
cacheDriftFirst: "First request (cache cold)",
|
|
5247
5279
|
cacheDriftStable: "Stable (prefix unchanged)",
|
|
5248
5280
|
cacheDriftSystemPrompt: "System prompt changed (cache invalidated)",
|
|
@@ -5837,6 +5869,7 @@ window.__ModuleLoader__.load({
|
|
|
5837
5869
|
* number this build cannot read at all falls back to "暂无".
|
|
5838
5870
|
*/
|
|
5839
5871
|
function tokenCount(value, t) {
|
|
5872
|
+
if (value === null) return t.metricNotReported;
|
|
5840
5873
|
return typeof value === "number" && Number.isFinite(value) ? value.toLocaleString() : t.unknownMetric;
|
|
5841
5874
|
}
|
|
5842
5875
|
/**
|
|
@@ -5866,6 +5899,64 @@ window.__ModuleLoader__.load({
|
|
|
5866
5899
|
default: return String(cause);
|
|
5867
5900
|
}
|
|
5868
5901
|
}
|
|
5902
|
+
function KimiLatestRequestRows(input) {
|
|
5903
|
+
const { request, status, t } = input;
|
|
5904
|
+
const account = status.accounts?.find((entry) => entry.id === request.accountId)?.alias ?? request.accountId ?? t.unknownMetric;
|
|
5905
|
+
const outcome = request.outcome === "success" ? t.cacheRequestSuccess : request.outcome === "aborted" ? t.cacheRequestAborted : t.cacheRequestError;
|
|
5906
|
+
const usage = request.usage;
|
|
5907
|
+
const reasoning = usage?.reasoningTokens;
|
|
5908
|
+
const reasoningRatio = usage !== void 0 && reasoning !== null && reasoning !== void 0 && usage.outputTokens > 0 ? reasoning / usage.outputTokens : null;
|
|
5909
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5910
|
+
className: "dsha-row",
|
|
5911
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5912
|
+
className: "dsha-label",
|
|
5913
|
+
children: t.cacheLastRequest
|
|
5914
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5915
|
+
className: "dsha-value",
|
|
5916
|
+
children: [
|
|
5917
|
+
account,
|
|
5918
|
+
request.accountChanged ? t.cacheAccountChanged : "",
|
|
5919
|
+
" · ",
|
|
5920
|
+
outcome
|
|
5921
|
+
]
|
|
5922
|
+
})]
|
|
5923
|
+
}), usage !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
5924
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5925
|
+
className: "dsha-row",
|
|
5926
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5927
|
+
className: "dsha-label",
|
|
5928
|
+
children: t.cacheLastInput
|
|
5929
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5930
|
+
className: "dsha-value",
|
|
5931
|
+
children: t.cacheLastInputValue.replace("{fresh}", tokenCount(usage.freshTokens, t)).replace("{cached}", tokenCount(usage.cacheReadTokens, t)).replace("{written}", tokenCount(usage.cacheWriteTokens, t))
|
|
5932
|
+
})]
|
|
5933
|
+
}),
|
|
5934
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5935
|
+
className: "dsha-row",
|
|
5936
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5937
|
+
className: "dsha-label",
|
|
5938
|
+
children: t.cacheLastOutput
|
|
5939
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5940
|
+
className: "dsha-value",
|
|
5941
|
+
children: tokenCount(usage.outputTokens, t)
|
|
5942
|
+
})]
|
|
5943
|
+
}),
|
|
5944
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5945
|
+
className: "dsha-row",
|
|
5946
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5947
|
+
className: "dsha-label",
|
|
5948
|
+
children: t.cacheLastReasoning
|
|
5949
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5950
|
+
className: "dsha-value",
|
|
5951
|
+
children: reasoning == null ? t.metricNotReported : reasoningRatio === null ? tokenCount(reasoning, t) : t.cacheReasoningValue.replace("{tokens}", tokenCount(reasoning, t)).replace("{ratio}", `${(reasoningRatio * 100).toFixed(1)}%`)
|
|
5952
|
+
})]
|
|
5953
|
+
}),
|
|
5954
|
+
reasoning != null && reasoning >= 1e3 && reasoningRatio !== null && reasoningRatio >= .5 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5955
|
+
className: "dsha-notice",
|
|
5956
|
+
children: t.cacheReasoningCost
|
|
5957
|
+
})
|
|
5958
|
+
] })] });
|
|
5959
|
+
}
|
|
5869
5960
|
function KimiCodeSection({ onModelChange, loadModelDirectory }) {
|
|
5870
5961
|
const [status, setStatus] = (0, react.useState)(null);
|
|
5871
5962
|
const [loading, setLoading] = (0, react.useState)(true);
|
|
@@ -6436,6 +6527,31 @@ window.__ModuleLoader__.load({
|
|
|
6436
6527
|
children: driftLabel(status.cache.lastDrift, t)
|
|
6437
6528
|
})]
|
|
6438
6529
|
}),
|
|
6530
|
+
status.cache.opening !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6531
|
+
className: "dsha-row",
|
|
6532
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
6533
|
+
className: "dsha-label",
|
|
6534
|
+
children: t.cacheOpening
|
|
6535
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
6536
|
+
className: "dsha-value",
|
|
6537
|
+
children: t.cacheOpeningValue.replace("{cached}", status.cache.opening.cachedTokens.toLocaleString()).replace("{tokens}", status.cache.opening.promptTokens.toLocaleString()).replace("{ratio}", `${(status.cache.opening.hitRatio * 100).toFixed(1)}%`)
|
|
6538
|
+
})]
|
|
6539
|
+
}),
|
|
6540
|
+
status.cache.continuation !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6541
|
+
className: "dsha-row",
|
|
6542
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
6543
|
+
className: "dsha-label",
|
|
6544
|
+
children: t.cacheContinuation
|
|
6545
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
6546
|
+
className: "dsha-value",
|
|
6547
|
+
children: t.cacheContinuationValue.replace("{cached}", status.cache.continuation.cachedTokens.toLocaleString()).replace("{expected}", status.cache.continuation.expectedCachedTokens.toLocaleString()).replace("{fresh}", status.cache.continuation.freshTokens.toLocaleString()).replace("{ratio}", `${(status.cache.continuation.retentionRatio * 100).toFixed(1)}%`)
|
|
6548
|
+
})]
|
|
6549
|
+
}),
|
|
6550
|
+
status.cache.lastRequest !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(KimiLatestRequestRows, {
|
|
6551
|
+
status,
|
|
6552
|
+
request: status.cache.lastRequest,
|
|
6553
|
+
t
|
|
6554
|
+
}),
|
|
6439
6555
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6440
6556
|
className: "dsha-row",
|
|
6441
6557
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -12286,6 +12402,7 @@ window.__ModuleLoader__.load({
|
|
|
12286
12402
|
cacheRequestParamsOnHint: "已打开能力位:请求会带上缓存参数。该字段未在 Step 文档中说明,官方对 Step 端点默认也不发。",
|
|
12287
12403
|
cachePricingNote: "单价未文档化(官方模型表里四个 cost 键全是 0),因此本页只展示 token 维度,不展示任何金额。",
|
|
12288
12404
|
cacheEmpty: "本进程还没有任何请求回报过用量,跑一次对话后再看。",
|
|
12405
|
+
cacheExpiredHint: "缓存可能已过期:距上次请求约 {minutes} 分钟,下次会重新处理前缀。",
|
|
12289
12406
|
cacheHitRatioUnavailable: "—"
|
|
12290
12407
|
};
|
|
12291
12408
|
const en$8 = {
|
|
@@ -12453,6 +12570,7 @@ window.__ModuleLoader__.load({
|
|
|
12453
12570
|
cacheRequestParamsOnHint: "The capability is on: requests carry cache parameters. Step does not document them, and the official client does not send them to Step either.",
|
|
12454
12571
|
cachePricingNote: "Unit prices are undocumented (all four cost keys are 0 in the official model table), so this page shows TOKENS ONLY and no money figure at all.",
|
|
12455
12572
|
cacheEmpty: "No request on this machine has reported usage yet — run a conversation and look again.",
|
|
12573
|
+
cacheExpiredHint: "The cache has likely expired: about {minutes} minutes since the last request, so the next turn will reprocess the prefix.",
|
|
12456
12574
|
cacheHitRatioUnavailable: "—"
|
|
12457
12575
|
};
|
|
12458
12576
|
const dictionaries$8 = {
|
|
@@ -13597,6 +13715,11 @@ window.__ModuleLoader__.load({
|
|
|
13597
13715
|
})
|
|
13598
13716
|
]
|
|
13599
13717
|
}),
|
|
13718
|
+
status?.cacheHint !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
13719
|
+
className: "dsha-muted",
|
|
13720
|
+
"data-dsh-part": "step-cache-hint",
|
|
13721
|
+
children: t.cacheExpiredHint.replace("{minutes}", String(Math.floor(status.cacheHint.idleMs / 6e4)))
|
|
13722
|
+
}),
|
|
13600
13723
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
13601
13724
|
className: "dsha-pref-row",
|
|
13602
13725
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t.cacheRequestParams }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -21656,15 +21779,19 @@ window.__ModuleLoader__.load({
|
|
|
21656
21779
|
settingsEnabledName: "进展更新",
|
|
21657
21780
|
settingsEnabledNote: "让 agent 在对话中发布进展更新;本插件的所有线路都可用",
|
|
21658
21781
|
settingsCacheWarmupName: "缓存预热",
|
|
21659
|
-
settingsCacheWarmupNote: "
|
|
21782
|
+
settingsCacheWarmupNote: "按线路配置:投影大型日志结果,原文可通过 ref 按需补读;只影响之后的新结果",
|
|
21660
21783
|
settingsRetrievalName: "检索结果投影",
|
|
21661
|
-
settingsRetrievalNote: "
|
|
21784
|
+
settingsRetrievalNote: "按线路配置:导航任务中投影文件、网页与搜索,编辑审查保留原文;只影响之后的新结果",
|
|
21662
21785
|
settingsCacheWaitWarmupName: "等待缓存续热",
|
|
21663
|
-
settingsCacheWaitWarmupNote: "
|
|
21786
|
+
settingsCacheWaitWarmupNote: "等待子代理期间按缓存 TTL 轻量续热;默认用于 Kimi,其他线路需明确 TTL 并显式启用",
|
|
21787
|
+
settingsCacheAffinityName: "账号缓存亲和",
|
|
21788
|
+
settingsCacheAffinityNote: "多账号轮换时优先选前缀仍热的账号,低额度时让位;默认用于 Kimi,其他线路需证明账号级缓存并显式启用",
|
|
21664
21789
|
settingsPlanModePipelineName: "计划模式管线",
|
|
21665
21790
|
settingsPlanModePipelineNote: "澄清访谈收敛后自动进入计划模式出计划,再交审批(仅调度模式生效);关闭后该模式会请用户手动输入 /plan",
|
|
21666
21791
|
settingsDispatchExecutionGuardName: "调度执行守卫",
|
|
21667
21792
|
settingsDispatchExecutionGuardNote: "执行期拦截子代理越权调用主控工具及等待子代理时的纯 sleep 空等;不改工具声明面,零损耗保护 Kimi 缓存",
|
|
21793
|
+
settingsToolRunawayGuardName: "工具失控治理",
|
|
21794
|
+
settingsToolRunawayGuardNote: "同一工具与参数连续重复时分级提醒;Kimi 保留第 12 次强停,其他线路只提醒",
|
|
21668
21795
|
settingsTeamPolicyCacheGuardName: "智能体团队策略段",
|
|
21669
21796
|
settingsTeamPolicyCacheGuardNote: "把内置 Agent Teams 的策略段从系统提示词摘掉,改为开启团队协作时以尾部消息投递一次;会话中途切开关不再刷掉整段前缀缓存(默认开启)",
|
|
21670
21797
|
settingsThresholdName: "催促阈值",
|
|
@@ -21705,15 +21832,19 @@ window.__ModuleLoader__.load({
|
|
|
21705
21832
|
settingsEnabledName: "Progress updates",
|
|
21706
21833
|
settingsEnabledNote: "Let the agent post progress updates in the conversation; every line of this plugin can use it",
|
|
21707
21834
|
settingsCacheWarmupName: "Cache warmup",
|
|
21708
|
-
settingsCacheWarmupNote: "
|
|
21835
|
+
settingsCacheWarmupNote: "Per-line control: project large log results and read the original through a ref on demand; only new results are affected",
|
|
21709
21836
|
settingsRetrievalName: "Retrieval projection",
|
|
21710
|
-
settingsRetrievalNote: "
|
|
21837
|
+
settingsRetrievalNote: "Per-line control: project files, pages, and searches for navigation; keep source verbatim for editing and review; only new results are affected",
|
|
21711
21838
|
settingsCacheWaitWarmupName: "Wait-time cache keepalive",
|
|
21712
|
-
settingsCacheWaitWarmupNote: "
|
|
21839
|
+
settingsCacheWaitWarmupNote: "Keep the prefix warm while subagents run, using the line TTL; on by default for Kimi, other lines need a known TTL and explicit opt-in",
|
|
21840
|
+
settingsCacheAffinityName: "Account cache affinity",
|
|
21841
|
+
settingsCacheAffinityNote: "Prefer the account whose prefix is still warm, but yield when quota runs low; on by default for Kimi, other lines need proven account-scoped caching and explicit opt-in",
|
|
21713
21842
|
settingsPlanModePipelineName: "Plan-mode pipeline",
|
|
21714
21843
|
settingsPlanModePipelineNote: "After the clarification interview converges, enter plan mode, write the plan and send it for approval (dispatch mode only); turning it off makes that mode ask the user to type /plan",
|
|
21715
21844
|
settingsDispatchExecutionGuardName: "Dispatch execution guard",
|
|
21716
21845
|
settingsDispatchExecutionGuardNote: "Block subagents from calling dispatcher-only tools at execution time and reject pure sleep waits while child agents run; keeps tool declarations untouched to protect the Kimi prefix cache",
|
|
21846
|
+
settingsToolRunawayGuardName: "Tool runaway guard",
|
|
21847
|
+
settingsToolRunawayGuardNote: "Remind the agent when the same tool call repeats; Kimi keeps its 12th-call handoff, while other lines receive reminders only",
|
|
21717
21848
|
settingsTeamPolicyCacheGuardName: "Agent Teams policy section",
|
|
21718
21849
|
settingsTeamPolicyCacheGuardNote: "Lift the built-in Agent Teams policy section out of the system prompt and deliver it as one tail message when team collaboration is switched on, so toggling mid-session no longer rebuilds the whole prefix cache (on by default)",
|
|
21719
21850
|
settingsThresholdName: "Nudge threshold",
|
|
@@ -22645,6 +22776,22 @@ window.__ModuleLoader__.load({
|
|
|
22645
22776
|
unknownMetric: "нет данных",
|
|
22646
22777
|
cacheExpired: "Сессия простаивала дольше времени жизни кеша, поэтому следующий ход заново обработает около {tokens} токенов.",
|
|
22647
22778
|
cacheDrift: "Состояние последнего префикса",
|
|
22779
|
+
cacheOpening: "Наследование на старте",
|
|
22780
|
+
cacheOpeningValue: "{cached} / {tokens} ток. ({ratio})",
|
|
22781
|
+
cacheContinuation: "Непрерывность последнего префикса",
|
|
22782
|
+
cacheContinuationValue: "{cached} / {expected} ток. ({ratio}) · новых: {fresh} ток.",
|
|
22783
|
+
cacheLastRequest: "Последний запрос",
|
|
22784
|
+
cacheRequestSuccess: "успешно",
|
|
22785
|
+
cacheRequestError: "ошибка",
|
|
22786
|
+
cacheRequestAborted: "прервано",
|
|
22787
|
+
cacheAccountChanged: " (аккаунт сменился)",
|
|
22788
|
+
cacheLastInput: "Ввод запроса",
|
|
22789
|
+
cacheLastInputValue: "новых: {fresh} · чтение кеша: {cached} · запись кеша: {written}",
|
|
22790
|
+
cacheLastOutput: "Вывод запроса",
|
|
22791
|
+
cacheLastReasoning: "В том числе reasoning",
|
|
22792
|
+
cacheReasoningValue: "{tokens} ток. ({ratio} вывода)",
|
|
22793
|
+
cacheReasoningCost: "Стоимость этого шага обусловлена рассуждениями, а не промахом кеша.",
|
|
22794
|
+
metricNotReported: "не сообщено",
|
|
22648
22795
|
cacheDriftFirst: "Первый запрос (кеш пуст)",
|
|
22649
22796
|
cacheDriftStable: "Стабильно (префикс не менялся)",
|
|
22650
22797
|
cacheDriftSystemPrompt: "Системный промпт изменился (кеш сброшен)",
|
|
@@ -23127,15 +23274,19 @@ window.__ModuleLoader__.load({
|
|
|
23127
23274
|
settingsEnabledName: "Ход работы",
|
|
23128
23275
|
settingsEnabledNote: "Разрешить агенту публиковать ход работы в диалоге; доступно на всех линиях этого плагина",
|
|
23129
23276
|
settingsCacheWarmupName: "Прогрев кеша",
|
|
23130
|
-
settingsCacheWarmupNote: "
|
|
23277
|
+
settingsCacheWarmupNote: "По линиям: проецировать большие журналы и читать оригинал по ref при необходимости; затрагиваются только новые результаты",
|
|
23131
23278
|
settingsRetrievalName: "Проекция результатов поиска",
|
|
23132
|
-
settingsRetrievalNote: "
|
|
23279
|
+
settingsRetrievalNote: "По линиям: проецировать файлы, страницы и поиск при навигации; сохранять код при правке и ревью; затрагиваются только новые результаты",
|
|
23133
23280
|
settingsCacheWaitWarmupName: "Поддержание кеша при ожидании",
|
|
23134
|
-
settingsCacheWaitWarmupNote: "
|
|
23281
|
+
settingsCacheWaitWarmupNote: "Поддерживать префиксный кеш во время ожидания субагентов по TTL линии; по умолчанию для Kimi, другие линии требуют известный TTL и явного включения",
|
|
23282
|
+
settingsCacheAffinityName: "Сродство кеша учётных записей",
|
|
23283
|
+
settingsCacheAffinityNote: "Предпочитать учётную запись с ещё тёплым префиксом, уступая при низкой квоте; по умолчанию для Kimi, другие линии требуют доказанного разделения кеша по учётным записям и явного включения",
|
|
23135
23284
|
settingsPlanModePipelineName: "Конвейер режима плана",
|
|
23136
23285
|
settingsPlanModePipelineNote: "После схождения уточняющего интервью автоматически войти в режим плана, подготовить план и отправить его на утверждение (только в режиме диспетчера); если выключено, этот режим попросит пользователя ввести /plan вручную",
|
|
23137
23286
|
settingsDispatchExecutionGuardName: "Защита выполнения диспетчера",
|
|
23138
23287
|
settingsDispatchExecutionGuardNote: "Блокировать вызовы инструментов диспетчера субагентами во время выполнения и запрещать пустое ожидание sleep при активных дочерних агентах; не меняет объявления инструментов и сохраняет префиксный кеш Kimi",
|
|
23288
|
+
settingsToolRunawayGuardName: "Защита от циклов инструментов",
|
|
23289
|
+
settingsToolRunawayGuardNote: "Напоминать агенту о повторяющихся вызовах; Kimi сохраняет передачу управления на 12-м вызове, другие линии получают только напоминания",
|
|
23139
23290
|
settingsTeamPolicyCacheGuardName: "Раздел политики Agent Teams",
|
|
23140
23291
|
settingsTeamPolicyCacheGuardNote: "Убрать встроенный раздел политики Agent Teams из системного промпта и передавать его одним сообщением в хвосте при включении командной работы, чтобы переключение посреди сессии больше не пересобирало весь префиксный кеш (включено по умолчанию)",
|
|
23141
23292
|
settingsThresholdName: "Порог напоминания",
|
|
@@ -23439,6 +23590,7 @@ window.__ModuleLoader__.load({
|
|
|
23439
23590
|
cacheRequestParamsOnHint: "Возможность включена: запросы несут параметры кеша. Step их не документирует, и официальный клиент для Step их тоже не отправляет.",
|
|
23440
23591
|
cachePricingNote: "Цены за единицу не документированы (все четыре ключа cost в официальной таблице моделей равны 0), поэтому страница показывает только токены и никаких сумм.",
|
|
23441
23592
|
cacheEmpty: "Ни один запрос на этой машине ещё не сообщил расход — проведите диалог и посмотрите снова.",
|
|
23593
|
+
cacheExpiredHint: "Кеш, вероятно, истёк: с последнего запроса прошло около {minutes} мин., поэтому следующий шаг снова обработает префикс.",
|
|
23442
23594
|
cacheHitRatioUnavailable: "—"
|
|
23443
23595
|
};
|
|
23444
23596
|
//#endregion
|
|
@@ -23961,7 +24113,13 @@ window.__ModuleLoader__.load({
|
|
|
23961
24113
|
.dsha-value{font-size:13px;min-width:0;overflow-wrap:anywhere;text-align:right;color:var(--dsw-alias-label-primary)}
|
|
23962
24114
|
.dsha-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;padding-top:12px}
|
|
23963
24115
|
.dsha-btn{background:var(--dsw-alias-bg-layer-2);border:0.5px solid var(--dsw-alias-border-l2);border-radius:999px;corner-shape:round;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;font-size:13px;line-height:1;padding:8px 13px;white-space:nowrap}
|
|
23964
|
-
|
|
24116
|
+
/* The hover tint belongs to the unfilled button only: it is a translucent wash
|
|
24117
|
+
over the neutral fill, and letting it match .dsha-btn-primary would paint the
|
|
24118
|
+
filled button with the wash while the label stayed white — the primary fill
|
|
24119
|
+
is (0,1,0) and this rule is (0,3,0), so nothing else could win it back. The
|
|
24120
|
+
exclusion is written into the selector, like the shared chip's
|
|
24121
|
+
:not([aria-pressed='true']), so a later filled variant cannot reintroduce it. */
|
|
24122
|
+
.dsha-btn:hover:not(:disabled):not(.dsha-btn-primary){background:var(--dsw-alias-interactive-bg-hover)}
|
|
23965
24123
|
.dsha-btn:disabled{cursor:default;opacity:.5}
|
|
23966
24124
|
.dsha-btn-primary{background:var(--dsw-alias-button-info-fill,#397ee8);border-color:transparent;color:var(--dsw-alias-button-info-label,#fff)}
|
|
23967
24125
|
.dsha-btn-primary:hover:not(:disabled){opacity:.9}
|
|
@@ -24439,7 +24597,13 @@ window.__ModuleLoader__.load({
|
|
|
24439
24597
|
.dsha-value{font-size:13px;min-width:0;overflow-wrap:anywhere;text-align:right;color:var(--dsw-alias-label-primary)}
|
|
24440
24598
|
.dsha-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;padding-top:12px}
|
|
24441
24599
|
.dsha-btn{background:var(--dsw-alias-bg-layer-2);border:0.5px solid var(--dsw-alias-border-l2);border-radius:999px;corner-shape:round;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;font-size:13px;line-height:1;padding:8px 13px;white-space:nowrap}
|
|
24442
|
-
|
|
24600
|
+
/* The hover tint belongs to the unfilled button only: it is a translucent wash
|
|
24601
|
+
over the neutral fill, and letting it match .dsha-btn-primary would paint the
|
|
24602
|
+
filled button with the wash while the label stayed white — the primary fill
|
|
24603
|
+
is (0,1,0) and this rule is (0,3,0), so nothing else could win it back. The
|
|
24604
|
+
exclusion is written into the selector, like the shared chip's
|
|
24605
|
+
:not([aria-pressed='true']), so a later filled variant cannot reintroduce it. */
|
|
24606
|
+
.dsha-btn:hover:not(:disabled):not(.dsha-btn-primary){background:var(--dsw-alias-interactive-bg-hover)}
|
|
24443
24607
|
.dsha-btn:disabled{cursor:default;opacity:.5}
|
|
24444
24608
|
.dsha-btn-primary{background:var(--dsw-alias-button-info-fill,#397ee8);border-color:transparent;color:var(--dsw-alias-button-info-label,#fff)}
|
|
24445
24609
|
.dsha-btn-primary:hover:not(:disabled){opacity:.9}
|
|
@@ -25353,12 +25517,14 @@ window.__ModuleLoader__.load({
|
|
|
25353
25517
|
.dshglm-model-meta{color:var(--dsw-alias-label-tertiary);font-size:11px;margin-left:5px}
|
|
25354
25518
|
.dsha-badge.glm-adopted{background:color-mix(in srgb,var(--dsw-alias-button-info-fill,#397ee8) 16%,var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb,var(--dsw-alias-button-info-fill,#397ee8) 45%,var(--dsw-alias-border-l2));color:var(--dsw-alias-label-primary)}
|
|
25355
25519
|
|
|
25356
|
-
/*
|
|
25357
|
-
|
|
25358
|
-
|
|
25520
|
+
/* 跨线路共享的登录入口按钮行:两区登录入口把多个按钮排进同一行,行本身只负责
|
|
25521
|
+
换行与间距。按钮的主次由各自的 class 决定 —— 主按钮带 .dsha-btn-primary,取信息
|
|
25522
|
+
色填充;次要入口(设备码登录、导入本地登录)保持中性外观,这样一行里才读得出
|
|
25523
|
+
「主入口 + 另外两种进入方式」。这里原先统一涂成信息色,是为了绕开
|
|
25524
|
+
.dsha-btn:hover 盖掉主按钮填充的问题(见 antigravity / kimi-code 两张表里的
|
|
25525
|
+
:not(.dsha-btn-primary));通用 hover 修好后它只剩副作用:把 .dsha-btn 的次要
|
|
25526
|
+
按钮也画成主按钮,故删除。 */
|
|
25359
25527
|
.dsha-account-add-actions{display:flex;flex-wrap:wrap;gap:8px}
|
|
25360
|
-
.dsha-account-add-actions .dsha-btn{background:var(--dsw-alias-button-info-fill,#397ee8);border-color:transparent;color:var(--dsw-alias-button-info-label,#fff)}
|
|
25361
|
-
.dsha-account-add-actions .dsha-btn:hover:not(:disabled){opacity:.9;background:var(--dsw-alias-button-info-fill,#397ee8)}
|
|
25362
25528
|
`, STYLE_ID$3);
|
|
25363
25529
|
}
|
|
25364
25530
|
//#endregion
|
|
@@ -55503,6 +55669,37 @@ window.__ModuleLoader__.load({
|
|
|
55503
55669
|
]
|
|
55504
55670
|
});
|
|
55505
55671
|
}
|
|
55672
|
+
/** 账号缓存亲和那一行的标记:号池两层里靠上的那层带勾(优先用缓存还热的账号)。 */
|
|
55673
|
+
function CacheAffinityMark() {
|
|
55674
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
55675
|
+
viewBox: "0 0 20 20",
|
|
55676
|
+
width: "20",
|
|
55677
|
+
height: "20",
|
|
55678
|
+
fill: "none",
|
|
55679
|
+
stroke: "currentColor",
|
|
55680
|
+
strokeWidth: "1.6",
|
|
55681
|
+
strokeLinecap: "round",
|
|
55682
|
+
strokeLinejoin: "round",
|
|
55683
|
+
"aria-hidden": "true",
|
|
55684
|
+
children: [
|
|
55685
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
55686
|
+
x: "3.5",
|
|
55687
|
+
y: "3.8",
|
|
55688
|
+
width: "13",
|
|
55689
|
+
height: "5",
|
|
55690
|
+
rx: "1.6"
|
|
55691
|
+
}),
|
|
55692
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
55693
|
+
x: "3.5",
|
|
55694
|
+
y: "11.2",
|
|
55695
|
+
width: "13",
|
|
55696
|
+
height: "5",
|
|
55697
|
+
rx: "1.6"
|
|
55698
|
+
}),
|
|
55699
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6.2 6.3 1.2 1.2 2.1-2.3" })
|
|
55700
|
+
]
|
|
55701
|
+
});
|
|
55702
|
+
}
|
|
55506
55703
|
/** 计划模式管线那一行的标记:一份带勾的计划(计划先出、再交审批)。 */
|
|
55507
55704
|
function PlanModeMark() {
|
|
55508
55705
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
@@ -55643,8 +55840,10 @@ window.__ModuleLoader__.load({
|
|
|
55643
55840
|
const cacheWarmup = value.cacheWarmup !== false;
|
|
55644
55841
|
const retrieval = value.cacheWarmupRetrieval !== false;
|
|
55645
55842
|
const cacheWaitWarmup = value.cacheWaitWarmup !== false;
|
|
55843
|
+
const cacheAffinity = value.cacheAffinity !== false;
|
|
55646
55844
|
const planModePipeline = value.planModePipeline !== false;
|
|
55647
55845
|
const dispatchExecutionGuard = value.dispatchExecutionGuard !== false;
|
|
55846
|
+
const toolRunawayGuard = value.toolRunawayGuard !== false;
|
|
55648
55847
|
const teamPolicyCacheGuard = value.teamPolicyCacheGuard !== false;
|
|
55649
55848
|
const threshold = typeof value.progressUpdatesNudgeThreshold === "number" ? value.progressUpdatesNudgeThreshold : 8;
|
|
55650
55849
|
const language = value.progressUpdatesLanguage === "zh" || value.progressUpdatesLanguage === "en" || value.progressUpdatesLanguage === "ru" ? value.progressUpdatesLanguage : "auto";
|
|
@@ -55804,6 +56003,27 @@ window.__ModuleLoader__.load({
|
|
|
55804
56003
|
}
|
|
55805
56004
|
})
|
|
55806
56005
|
}),
|
|
56006
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardRow, {
|
|
56007
|
+
part: "settings-row-cache-affinity",
|
|
56008
|
+
brand: "#1f7a52",
|
|
56009
|
+
mark: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CacheAffinityMark, {}),
|
|
56010
|
+
name: translate("settingsCacheAffinityName"),
|
|
56011
|
+
note: failure?.row === "cacheAffinity" ? failure.text : translate("settingsCacheAffinityNote"),
|
|
56012
|
+
danger: failure?.row === "cacheAffinity",
|
|
56013
|
+
enabled: cacheAffinity,
|
|
56014
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
56015
|
+
type: "button",
|
|
56016
|
+
role: "switch",
|
|
56017
|
+
"aria-checked": cacheAffinity,
|
|
56018
|
+
"aria-label": translate("settingsCacheAffinityName"),
|
|
56019
|
+
className: "dsh-progress-switch",
|
|
56020
|
+
"data-dsh-part": "settings-cache-affinity-switch",
|
|
56021
|
+
disabled: !writable,
|
|
56022
|
+
onClick: () => {
|
|
56023
|
+
write("cacheAffinity", "cacheAffinity", !cacheAffinity);
|
|
56024
|
+
}
|
|
56025
|
+
})
|
|
56026
|
+
}),
|
|
55807
56027
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardRow, {
|
|
55808
56028
|
part: "settings-row-plan-mode-pipeline",
|
|
55809
56029
|
brand: "#566179",
|
|
@@ -55846,6 +56066,27 @@ window.__ModuleLoader__.load({
|
|
|
55846
56066
|
}
|
|
55847
56067
|
})
|
|
55848
56068
|
}),
|
|
56069
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardRow, {
|
|
56070
|
+
part: "settings-row-tool-runaway-guard",
|
|
56071
|
+
brand: "#a15c34",
|
|
56072
|
+
mark: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DispatchGuardMark, {}),
|
|
56073
|
+
name: translate("settingsToolRunawayGuardName"),
|
|
56074
|
+
note: failure?.row === "toolRunawayGuard" ? failure.text : translate("settingsToolRunawayGuardNote"),
|
|
56075
|
+
danger: failure?.row === "toolRunawayGuard",
|
|
56076
|
+
enabled: toolRunawayGuard,
|
|
56077
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
56078
|
+
type: "button",
|
|
56079
|
+
role: "switch",
|
|
56080
|
+
"aria-checked": toolRunawayGuard,
|
|
56081
|
+
"aria-label": translate("settingsToolRunawayGuardName"),
|
|
56082
|
+
className: "dsh-progress-switch",
|
|
56083
|
+
"data-dsh-part": "settings-tool-runaway-guard-switch",
|
|
56084
|
+
disabled: !writable,
|
|
56085
|
+
onClick: () => {
|
|
56086
|
+
write("toolRunawayGuard", "toolRunawayGuard", !toolRunawayGuard);
|
|
56087
|
+
}
|
|
56088
|
+
})
|
|
56089
|
+
}),
|
|
55849
56090
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardRow, {
|
|
55850
56091
|
part: "settings-row-team-policy-cache-guard",
|
|
55851
56092
|
brand: "#8a5a9e",
|
|
@@ -56836,8 +57077,6 @@ window.__ModuleLoader__.load({
|
|
|
56836
57077
|
installPluginStyle("workbuddy", `
|
|
56837
57078
|
.dsh-wb-mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px}
|
|
56838
57079
|
.dsha-account-add-actions{display:flex;flex-wrap:wrap;gap:8px}
|
|
56839
|
-
.dsha-account-add-actions .dsha-btn{background:var(--dsw-alias-button-info-fill,#397ee8);border-color:transparent;color:var(--dsw-alias-button-info-label,#fff)}
|
|
56840
|
-
.dsha-account-add-actions .dsha-btn:hover:not(:disabled){opacity:.9;background:var(--dsw-alias-button-info-fill,#397ee8)}
|
|
56841
57080
|
/* The whole-pool state banner. It renders BEFORE the account list on purpose:
|
|
56842
57081
|
a paused pool means nothing is routable, and a list of green account cards
|
|
56843
57082
|
above that sentence reads as "available" whatever the banner says. */
|