bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
DeepSeek Harness(DSH)插件:显示 DeepSeek API 余额,并判断当前是否为高峰时段。
在设置页新增「余额与高峰」卡片:
GET /user/balance 接口拉取账户余额(总额 / 赠金 / 充值,按币种展示)。默认策略与 DeepSeek 现行官方定价一致:
| 项目 | 值 |
|---|---|
| 高峰时段(北京时间) | 09:00–12:00、14:00–18:00(开始含、结束不含) |
| 空闲时段价格 | 高峰价格的 50% |
| 周末 | 周六、周日全天按低谷价计费(2026-08-23 起规则) |
时区、高峰窗口、周末规则全部可配置——将来政策再变,改配置即可,无需发版。
dsh plugin --profile web add dsh-balance
重启 dsh web(或桌面应用)后,打开「设置 → 余额与高峰」。普通 profile 无需配置 API Key:插件自动复用 Harness 凭据服务里保存的 DeepSeek 密钥(即「模型」页面填写的那一个),或回退到环境变量 DEEPSEEK_API_KEY。
需要 dsh web ≥ 0.1.0-rc.6(设置分区基础能力)。更老的主机上卡片不会出现,其余功能不受影响。
所有字段均可选,默认值如上。可在「设置 → 插件 → 插件配置」页面修改,或写入 cordis.patch.yml:
- id: dsh-balance
name: dsh-balance
config:
# apiKey: "" # 显式指定密钥;否则自动用凭据/环境变量
# baseUrl: https://api.deepseek.com
# timezone: Asia/Shanghai # 窗口所在的 IANA 时区
# refreshSeconds: 300 # 余额缓存 TTL(最小 10)
# weekendOffPeak: true # 周末全天按低谷价
# peakWindows: [[9,12],[14,18]] # [起始时,结束时] 或 [时,分,时,分]
# offpeakRatio: 0.5 # 仅展示用:低谷价/高峰价
「插件配置」页暴露 timezone、weekendOffPeak、refreshSeconds、peakWindows 四个字段。apiKey 刻意留在插件配置里:密钥更合适的归属是 Harness 自身的凭据管理,而且那里配置的密钥会被自动使用。
| 路由 | 说明 |
|---|---|
GET /dsh-balance/status | 完整状态:余额(缓存)、高峰状态、下次切换、密钥来源(脱敏)。 |
POST /dsh-balance/refresh | 强制重新拉取余额,绕过缓存。 |
仅同源访问。响应中永不出现 API Key,只有 sk-…abcd 形式的脱敏提示。
fetch、Intl、node:test);客户端 bundle 是纯 JS 的 __ModuleLoader__ 工厂,安装即用、无需编译。Intl.DateTimeFormat 在指定 IANA 时区读取本地时间与星期,与宿主机时区无关,不引入时区数据库依赖。NO_KEY、INVALID_KEY、RATE_LIMITED、TIMEOUT、NETWORK、BAD_SHAPE)。webServer / settings / credentials / schemastery 时,对应部分静默跳过,其余功能照常工作。密钥处理方式见 SECURITY.md(不落日志、不出现在响应中、只以脱敏形式展示)。可直接复制的配置示例见 examples/cordis.patch.yml。
npm test # 或 node --test
npm run check # 全量语法检查 + 跑测试
共 41 个用例:高峰窗口边界(窗口起止、周末、时区无关性、自定义窗口)、余额客户端(错误分类、缓存、单飞、失败保留旧值)、以及基于桩宿主的路由端到端测试。
lib/index.js cordis 插件入口(apply、配置装配)
lib/peak.js 纯函数:高峰/低谷判断 + 下次切换时刻(时区感知)
lib/balance.js DeepSeek 余额客户端(TTL 缓存、单飞)
lib/keys.js API Key 解析:配置 → 凭据 → 环境变量
lib/routes.js HTTP 路由 + 状态组装
lib/settings.js 可选 settings 命名空间(GUI 配置字段)
lib/config.js 默认值、校验、包版本
client/client.js 设置分区 UI(纯 JS、免构建)
test/ node:test 单元 + 集成测试
MIT