deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
基元律动费用中心 —— DeepSeek Harness(DSH)插件,把基元律动 tokenrhythm.studio 的模型清单、账户余额、用量与密钥管理,集中到侧栏底部一个小面板里;另支持阶跃星辰(StepFun)Step Plan 与 ZCode 桌面端套餐额度的可选接入。
在 DSH 侧栏底部(设置按钮上方)点击「基元律动-费用中心」入口即可打开可拖拽面板;也可以直接按 Ctrl+J(macOS Cmd+J)呼出/收起。入口左侧是品牌标 + 名称,右侧常驻总余额胶囊(切号即刷、预警转琥珀色);悬停入口可浮出限时余额时间线——逐笔列出每笔限时额度和「N 天后失效」(实时计算,无限时额度时不显示);侧栏收起时只保留品牌图标。
截图取自 v0.5.2(当时是三页签)。当前版本已扩展为 余额 / 用量 / 模型 / 状态 / 密钥 五个页签 + 标题位提供商切换器(基元律动|阶跃|ZCode),版式沿用同一套设计令牌,功能以正文为准。
模型页签 —— 分类筛选 + 卡片网格 + 状态联动

余额主卡 —— 账户余额 + 限时额度占比

设置页 —— 账号管理 + Cookie 兜底

侧栏入口 —— 品牌标 + 常驻总余额 + 预警点

justify-content:flex-end 推过去)。原先轨道是灰底、橙段在左,只看得出「限时占多少」;现在两段各自有语义、且限时贴着右端。限时额度恰为 0 时不画橙段(填充段带 2px 最小宽,留着会在纯蓝条右端挂一颗橙色小点)。橙色在本插件里专属「限时额度」这一语义:ZCode 页那张占比条走中性配方(灰轨道 + 主题蓝填充),不出现橙色USED_UP)也保留,否则就说不清「这一路总共赠送过多少」。摘要行另给「累计赠送」「未到期」两个数pageTopBar + acctLine(ZCode 那页左侧文案是「ZCode 账号:…」);ZCode 活动页没有时间与账号段,右上角就只有刷新按钮。时刻一律 24 小时制(自建 fmtClock/fmtClockDay):浏览器本地化的时刻格式化会把 12 小时制随系统区域漏出来,英文区域下实测显示「9:37:58 PM」N / 30 天有调用 · 明细起 XXXX-XX-XX)——空格子占多数是常态,角标说清「空的是真空」而不是「没加载出来」。悬停有调用的格子才浮出当日明细(模型列表 + 各自金额 / 调用数、开源节省)——当天无调用的格子没有可看的东西,不弹浮层。浮层靠左/右边缘的格子自动贴边、第一行的翻到下方,不会被面板裁掉基元律动 | 阶跃 | ZCode 切换器切到阶跃(未配置阶跃账号时这一段不出现).dim 卡仍是虚线框 + 透明卡面,其两格回落 soft,保持原来的观感;「显示中」那一态保持原样式不动(用户指定):accent 8% 叠在白卡面上 + 格面 soft + 左侧 3px accent 竖条密钥(138****0001))——增删密钥不可逆,归属不该藏在二级页面里,切了「显示」不进页签就知道这堆密钥是谁的;账号还没探明时退回纯「密钥」,页签文本统一次 nowrap + 省略号防长账号名撑爆两格布局。密钥页顶部原来还有一行归属标签(「「xxx」的密钥」+ 跟随说明),已按用户要求整块删除——归属信息由页签标签承担,不必在同一屏写两遍stepRpc 省略 username 时按 pickStepAccount 的口径兜底到活跃账号,所以 stepGetSess 的省略态也必须兜底到 activeAccount——多账号重构时这里漏了,而四个密钥 stepRpc 又恰好都没传 username,于是 ListAccessKeys 稳定报「无可用会话」(已修)。现在四个密钥调用(列表 / 取完整值 / 创建 / 删除)全都显式带 username,测试对每处调用逐一断言。显式传了 username 却没会话时不许兜底到活跃账号——那正是「查 B 回了 A 的结果」这类张冠李戴 bug 的温床subscriptionResetAt(订阅月池总表),缺失时降级到 type=1 桶的 nextResetAt。这个字段没有实测过(schema 注释标称秒级、与 expired_at 同口径),所以加了合理性窗口 [今天-1年, 今天+3年]——窗口外一律不显示,宁可不显示,也不显示一个公元 5 万年的错日期。剩余天数走日历日口径(0=今天、1=明天、负=已过),与限时额度到期天数一致;不用 ceil,否则「今晚就重置」会被算成「还剩 1 天」pwMask 掩码,明文走独立路由 按需单取(只认账号池内的 username,池外 404)——和密钥「列表只回掩码、完整值按需单取」是同一口径。删除账号时会顺手收掉已展开的明文Mini / Plus / Pro / Max,四档四色:蓝 / 青 / 紫 / 琥珀,透明度 12%),档位信息只在这一处出现。认不出的档位一律不画——画个错档位比不画糟得多。垂直位置写死 top:44px 而非百分比:卡片一展开明细就长高,相对整卡定位的水印会跟着跑(实测「一点击展开,水印的位置就变了」)12月20日 到期。档位已由水印表达,套餐名与自动续费状态再占一行纯属重复,已删;没有可显示的到期信息时整行不渲染,不留空占位accessToken.duration = 1800s,cookie token 与 JSON token 的 JWT exp 均为 30 分钟),但过期后不用重新输密码:PassportService/RefreshToken 能用旧 cookie(Oasis-Token + Oasis-Webid)换回本人的新会话——实测过期 1 分钟的 token 打 RefreshToken 返 200、mode=2、身份指纹一致、新 token 打 RPC 直接 200。临期前 5 分钟主动续,一路用不到 401。稳态下打开面板:已有凭据的账号零请求,只有一条凭据都没有的账号才需要首次登录;会话齐了之后并发查询全部账号,不用逐个等。底部有 N / M 进度,撞平台软频控会自动中止并说明卡在哪个账号oasis_id 不同、RPC 401)。所以续期拿到新 token 后必须比对 oasis_id|organization_id,对不上就整条会话丢掉并落回密码重登——绝不让 A 的设备令牌顶替 B 的会话~/.zcode/v2(host 侧路由同样有门禁,双重保险);关闭即停读,面板恢复原样~/.zcode/v2,跟随数据目录设置,兼容改过 dataBaseDir 的用户),直连官方接口查询当前套餐——档位 / 到期 / 剩余额度百分比 / 已用占比 / 分项限额;BigModel 通道优先,自动回退 z.ai 余额接口,兼容个人订阅与活动赠送多套餐切片。每 60 秒自动刷新Ctrl+J 呼出/收起面板(macOS 为 Cmd+J):按一下开、再按一下关,不必去点侧栏入口globalShortcut 开放给插件,所以 DSH 窗口不是焦点时按了没反应Ctrl+Alt+J:浏览器不转发 Ctrl+J(那是「下载」),只承认 primary+alt / primary+shift 这类双修饰组合。若在 web 端也写 Ctrl+J,快捷键注册会直接失败,桌面端一并失效conversation.input.right 槽位:DOM 上排在模型选择座之前、同处 .trailing flex 组,该组无 row-reverse)。顺序为计划在左、压缩在右(压缩紧邻模型选择器)。图标路径与官方输入行控件同源(16×16 网格),28×28 方形、图标 14px;文案放在 aria-label 与 hover 提示里,不占版面· 上次失败:…)。压缩按钮旁原先那条「压缩中…/结果/报错」回显行已整条删除,连自动消失的计时器与对应 CSS 规则一并清掉(不留没人渲染的死规则)running(与官方 InputBar 取的是同一个字段)——轮次进行中平台一定拒绝 /compact(活动中的压缩/非空闲 agent),不该给一个点了必然失败的按钮。计划按钮不受这个条件影响(它只在自己的命令在飞时禁用)/compact:把较早的对话历史替换为一条摘要,不消耗模型轮次。命令自己的结果仍照常出现在对话里的命令行(DSH 渲染 conversation.chat.commandview):没有可压缩历史是 No compactable history yet.,轮次占用中是平台侧的固定文案「暂不可用」——按钮这一侧不再复述这些文字。上下文占用超过 60% 时按钮转红(浅红底 + 红图标 + 红描边),当前百分比也写进 tooltip;口径与官方 ContextMeter 逐字一致:min(100, round((projectedTokens ?? pressureTokens) / contextWindow * 100)),拿不到投影时不红/plan;激活后按钮转蓝(accent 高亮的「计划中」态),再点执行 /plan off 退出。状态读的是宿主投影(plan 的 {active, pending},宿主折叠值)而非本地猜测——与官方计划片同一数据源/plan 在对话里的命令行:那句「Plan mode on. Use /plan off to leave.」/「Plan mode off.」是命令的返回值文本,DSH 会把命令运行渲染成一行(conversation.chat.commandview,按命令名分派)。本插件占住 plan 这个键并渲染空,那一行就不再出现。只藏 plan——/compact 的结果(压缩了多少条历史、省了多少 token)是有效信息,照常保留commands.execute(agentId, line, submittedAttachments)——第三个是「本次提交的附件」,按钮调用没有附件,所以传 [](之后才是可选的取消信号)。少传会在发出 RPC 之前就被客户端网关拦下抛错(实测 client api: commands/execute expected 3 business argument(s) …, got 2),表现就是「点了没反应」。本插件不再为更早的两参数契约做兼容:v0.5.18 试过读 typert 描述符自适应实参个数,v0.5.19 起直接写死桌面端契约,少一层会猜错的东西dl、各占一栏,现在合成一个单栏 dl 逐行列出(用户指定「不要并排」)--mb-mc-min-w: 190px,同时把面板默认宽度从 560 提到 660(DEFAULT_PANEL_W,默认几何 / 拖拽兜底 / prefs 兜底四处同源)。列数 = floor((面板宽 − 34 + 8) ÷ 198):面板 660(新默认)与 661 都是 3 列(卡宽 ≈203px),拖到 ≥818 才自然变 4 列,<620 回落 2 列、<422 单列;骨架屏网格同下限,加载态不跳列。面板宽度存在 prefs 里,已有安装的实际宽度不受默认值改动影响(老默认 560 仍是 2 列).trailing 无条件渲染 rightItems,只有模型选择座会进入 locked 态),所以「轮次中不可用」这件事必须由按钮自己禁用表达,而不是指望它被隐藏;没挂 dsh-command-compact / dsh-plan-mode 时,对应按钮不出现(不摆一个必然报错的按钮);命令桥缺失时连注册都不发生,面板与余额功能完全不受影响notice 形式的用户消息(「The user switched this session to plan mode.」/「…back to the default mode.」)。本插件无法只挑计划模式那一类隐藏——它的 DOM 钩子(data-context-summary)被 8 种 notice 共用(模型切换、子代理完成、任务/目标、webhook、工具提醒…),按 DOM 隐藏会把那些有效通知一起干掉;宿主侧也没有开关(dsh-plan-mode 的 config 只接受 section,未知键直接加载失败)。真要去掉,只能接受「所有 notice 行都不显示」,需要的话说一声tr_session)兜底登录(默认折叠,用的时候展开)takeover:false 也不再采纳(否则老存档会停在「不接管」而界面上再无入口改回来)。同一轮按用户要求删掉的还有:基元分组的「当前会话」状态卡(「已登录 · sess_…」,会话由插件自动续期,不需要看)、「阶跃账号(Step Plan)」说明卡与「去「账户」页签管理账号」按钮(账号增删本来就在面板「账户」页签,不必再写一张卡把人指过去)——这些卡一并不渲染,连带的 CSS 规则(.dsh-mb-status-row / .dsh-mb-status-pill / .dsh-mb-key-owner*)与死参数同时清掉任选以下一种方式安装,安装后需重启 DSH,侧栏底部才会出现入口。
方式一:插件市场(收录后可用)
在 DSH 插件市场搜索「基元律动费用中心」或 dsh-tokenrhythm-bill,一键安装。
方式二:命令行 · npm 源(推荐,秒级安装)
dsh plugin --profile web add dsh-tokenrhythm-bill
已装过旧版本?重复执行上述命令即可更新到最新版,然后重启 DSH。
平台登录接口不可用时:浏览器登录 tokenrhythm.studio → F12 → 应用 → Cookie → 复制
tr_session的值,粘贴到「备用:粘贴网页会话 Cookie」框中保存(直接粘贴tr_session=sess_…整串也认)。Cookie 过期后余额页签会引导你回设置重新登录。
会话自动续期:登录成功后 Cookie 保存在本机并自动复用;粘贴新 Cookie 即完成切换账号(自动识别身份)。会话过期时,若该账号已保存密码则自动重登同一账号并继续刚才的操作,全程无感;未保存密码的账号才会提示重新登录。
余额 / 模型 / 密钥页签要知道「哪个 baseURL 是基元律动」,靠的是 DSH 的 LLM 提供商名册(llm-pi-ai.providers,baseURL 含 tokenrhythm 才算余额可用)。这个名册的位置随 DSH 版本变过:
| DSH 版本 | 活存储 | 本插件的读法 |
|---|---|---|
| 0.1.6 及更早 | ~/.dsh/settings.yaml 的 llm-pi-ai.providers 段 |
直接读(flow / block 两种布局都支持) |
| 0.1.7 及以后 | ~/.dsh/profiles/<name>/cordis.patch.yml 里 - id: llm-pi-ai 条目的 config.providers |
回退读补丁层 |
为什么会有这张表:0.1.7 起 DSH 把
settings.yaml废除了——设置服务把它改名成settings.yaml.imported,各段写进当前 profile 的补丁层,此后原文件不再重建(重建会造成第二次导入,把 Setup 默认值盖回用户的选择上)。所以升级后~/.dsh/settings.yaml消失是正常现象,不是配置丢了。插件按「settings.yaml → 装着本插件的 profile 的补丁层 → 其余 profile 的补丁层 → 家目录级补丁层」的顺序取第一个非空结果,只读不写,绝不替你重建
settings.yaml。
如果面板提示「未配置基元律动(tokenrhythm)提供商」,说明这两处都没有 baseURL 含 tokenrhythm 的 llm-pi-ai 条目——在 DSH 设置里加一个 baseURL 为 https://tokenrhythm.studio/v1 的提供商即可(同一个 profile 的补丁层会自动带上,无需手动编辑文件)。
/api/usage-daily 分桶 30 天 = /api/usage/panel?range=30d 的 summary),所以空格子是真空,不是页面坏了。日历标题行右上角的角标会写明 N / 30 天有调用 · 明细起 XXXX-XX-XX。USED_UP)。留着它是为了说清历史——「累计赠送 ¥184」这个数只有把每一笔赠送都列全才对得上;删掉用完的,账就平不了了。这些行整行压暗,不抢眼。settings.yaml,名册改存 profile 补丁层,详见「提供商名册从哪来」)。以前这类失败会被概算成一句「没有提供商」,让人照着去改一个本来没问题的文件;现在 host 说什么就显示什么。名册本身没问题却仍报错,多半是插件版本太旧。Ctrl+J 按了面板没反应? 三步排查:① DSH 窗口是不是当前焦点窗口(应用内快捷键,非全局热键);② 有没有模态对话框开着(设置等模态打开时按键被刻意忽略);③ 进 设置 → 快捷键 搜「费用中心」,看命令在不在、绑键是否被清空或与别的命令冲突。三者都排除后仍无效,说明快捷键服务没被加载——此时面板与侧栏入口照常可用,只是没有快捷键。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。