{"_id":"@dachengge/dsh-cost-manager","_rev":"2-6cb40816edbc29fc20c75b6a79be8930","name":"@dachengge/dsh-cost-manager","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@dachengge/dsh-cost-manager","version":"0.1.0","keywords":["dsh","dsh-plugin","cost","billing","token-usage","budget"],"author":{"url":"赵成成","name":"成哥聊AI"},"license":"Apache-2.0","_id":"@dachengge/dsh-cost-manager@0.1.0","maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"6b5f840a751160563738269cda2666d6b519c0ef","tarball":"https://registry.npmjs.org/@dachengge/dsh-cost-manager/-/dsh-cost-manager-0.1.0.tgz","fileCount":15,"integrity":"sha512-LxhMj0u/xI/xZOa/kh0ehYmEfjZsJ/uMmMax1RT3ueZox+ckSWCHYdy1eKqc83Ob2lKz3JaSFY3/kiimXgs39w==","signatures":[{"sig":"MEQCIFolY9QprsdcrDcRB2ub1DS86Z6rzfunT6gXeHbM756+AiBOyGhlfp2nuSVBHpcXbG1RRjWDQUTy7TQRYUeHhYAd+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":133595},"main":"lib/index.js","type":"module","engines":{"node":">=22.19"},"exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json","./dsh.plugin.json":"./dsh.plugin.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"ce8a3c426a1c87bd43a20407e183744a20df2695","_npmUser":{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"},"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/cost-manager"},"_npmVersion":"11.6.2","description":"DSH 成本管理插件：余额/费用/模型能力/任务会话统计 + 防死（硬地板与欠费切换建议）。适配用户绑定的模型，自动扫描会话用量。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-cost-manager_0.1.0_1789113863144_0.41917935109676674","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"_id":"@dachengge/dsh-cost-manager@0.1.1","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"dist":{"shasum":"7a990ad8a24573231797c18fc91ae02c913625fb","tarball":"https://registry.npmjs.org/@dachengge/dsh-cost-manager/-/dsh-cost-manager-0.1.1.tgz","fileCount":15,"integrity":"sha512-FauGgHd1B1cRhRs7Gxy8M314/GZjiFNlEBSmT/rgqTJ7Yr2gtPF4k2hMo/5+HfvHXC4AgTab2k9jEshfXM61+Q==","signatures":[{"sig":"MEUCICnFuEUeTaM+BBuCaXrs7jbxJc12rCnMu+k4Cyc6SmV8AiEAmowjVMuvJ6cU7MY+chEobwrEBd70zTS88sYyIFOTwp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDpu7eLtn/2SLmrk1TMblTpp/le0XprUignJWGFWdeT9AiA4UuFYj/ZTXK4Rn1mnIlyKh3JDXuuvKpj0yIhPWUjWMw=="}],"unpackedSize":133598},"main":"lib/index.js","name":"@dachengge/dsh-cost-manager","type":"module","author":{"url":"赵成成","name":"成哥聊AI"},"engines":{"node":">=22.19"},"exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json","./dsh.plugin.json":"./dsh.plugin.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"29f4a4ac9c17cd8804f142779a25aca439f39137","license":"Apache-2.0","version":"0.1.1","_npmUser":{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"},"homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","keywords":["dsh","dsh-plugin","cost","billing","token-usage","budget"],"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/cost-manager"},"_npmVersion":"11.6.2","description":"DSH 成本管理插件：余额/费用/模型能力/任务会话统计 + 防死（硬地板与欠费切换建议）。适配用户绑定的模型，自动扫描会话用量。","directories":{},"maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-cost-manager_0.1.1_1789114920643_0.44647110566782433"}}},"time":{"created":"2026-09-11T08:04:22.978Z","modified":"2026-09-11T08:22:00.937Z","0.1.0":"2026-09-11T08:04:23.284Z","0.1.1":"2026-09-11T08:22:00.728Z"},"bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"author":{"url":"赵成成","name":"成哥聊AI"},"license":"Apache-2.0","homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","keywords":["dsh","dsh-plugin","cost","billing","token-usage","budget"],"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/cost-manager"},"description":"DSH 成本管理插件：余额/费用/模型能力/任务会话统计 + 防死（硬地板与欠费切换建议）。适配用户绑定的模型，自动扫描会话用量。","maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"readme":"# @dachengge/dsh-cost-manager\n\nDSH 成本管理插件：把余额、费用、模型能力、任务会话用量统计交给 Agent 自动调用，并内置「防死」机制（硬地板 + 欠费切换建议）。\n\n## 提供 4 个工具\n\n| 工具 | 作用 |\n|---|---|\n| `cost_status` | 各平台余额与状态 + 硬地板提示 + 切换建议 |\n| `cost_stats` | 会话 token 用量统计（按 模型/任务/日，支持时间与关键词筛选） |\n| `cost_report` | 最近花费账本（图片/视频/数字人等实付项，按平台聚合） |\n| `cost_models` | 读用户「绑定的模型」并与价目表对齐（单价/来源/擅长场景） |\n\n## 与用户配置的适配\n\n- 通过 `ctx.llm.listProviders()/listModels()` 读取用户**绑定的模型**，按实际绑定做价目对齐，不做写死的模型假设。\n- 会话用量来自本机 DSH 会话文件（`session.jsonl.zstd`），按用户自己的任务/会话聚合。\n\n## UI：设置页「费用与余额」面板 + 3082 上的实时总览页\n\n插件是**双半区**插件（host + client）：\n\n| 半区 | 文件 | 职责 |\n|---|---|---|\n| Host | `lib/index.js` | 注册 4 个工具；`inject: ['tools','llm','webServer']`；注册 JSON 路由与页面路由 |\n| Host | `lib/page.js` | `GET /cost` 的实时总览页（自包含 HTML，替代原先单独进程的 `cost.mjs serve`） |\n| Host | `lib/board.js` | `GET /board` 运维看板：同一标签内两个页签，iframe 嵌 `/cost` 与 `/dshm` |\n| Client | `lib/client.js` | 浏览器半区，注册到 `settings.section`（费用面板）与 `sidebar.footer.action`（侧栏「运维看板」入口） |\n\n注册的路由（都挂在 DSH 自己的端口下，默认 3082）：\n\n```text\nGET /dsh-cost/api/overview    余额 / 速率 / 用量 / 两套账（?force=1 强制重测）\nGET /cost  ·  /cost/          实时总览页（原 8899 那份，已并入 DSH 端口）\nGET /board ·  /board/         运维看板：费用与余额 / 会话管理 两个页签合一\n```\n\n**多页签看板**说明：`/board` 用 iframe 嵌 `/cost` 与 `/dshm`（同源，均无 `X-Frame-Options`/CSP 限制），\n切换页签只切 `display`——**iframe 不卸载，各自的自动刷新继续跑**，也不会丢当前视图状态。\n页签选择记在 `localStorage`，也支持 `#cost` / `#dshm` 直达。打开时会 `HEAD` 预检两个地址，\n哪一页没就绪（插件没装/没重启）就在该页签上标红点，而不是白屏。\n侧栏底部由 `sidebar.footer.action` 提供「📊 运维看板」入口（新标签打开 `/board`）。\n注意：看板依赖两个插件同时在位——`/cost` 来自本插件，`/dshm` 来自 `@dachengge/dsh-session-manager`。\n\n**布局铁律：`/board` 不渲染自己的页头。** 它只有一条细页签栏（`.tabstrip`，不叫 `header`、\n字号也刻意压小），页面身份交给被嵌入页面自己的页头。否则会出现\"重复头\"（看板一层 + iframe 内一层）。\n`test-smoke.mjs` 为此加了回归断言：`/board` 的 HTML 里 `<header>` 数量必须为 **0**、且不得出现 `class=\"brand\"`。\n\n- 客户端 bundle 采用 DSH 约定格式 `window.__ModuleLoader__.load({ id, factory })`，**纯 JavaScript + `React.createElement`**（禁止 import / TS / JSX）；React 由模块加载器注入。\n- **视觉规范**：`lib/page.js` 与 dshm 的 `/dshm` 页面共用同一套设计令牌与页头结构——同一组 `:root` 变量（`--bg/--panel/--border/--text/--muted/--accent/--green/--yellow/--red/--radius`）、同样的 `<header>` 结构（brand + 副标题 + toolbar、`padding:14px 22px`、`background:var(--panel)`、sticky）、同样的 `.cards/.card/.panel/.foot` 语法。改样式时请与 `dshm/lib/web/index.html` 对齐，不要单独漂移。\n- 数据通路：host 用 `ctx.webServer.register({ kind:'exact', path, handler })` 暴露 JSON/HTML，client 用 `fetch` 取。\n- 面板内容：消耗速率（¥/h + 距硬地板可撑时长，不足 2 小时标红）、各平台余额（低于预警/地板着色）、**两套账**（账 A 估费 / 账 B 实付 / 成本待补，口径不同勿相加）、账 B 按平台分布。\n- 性能：单家余额探测 6s 超时（`COST_CHECK_TIMEOUT_MS` 可调）+ 45s 结果缓存；会话扫描走异步 + mtime 增量 + 30s 缓存，**不阻塞 host 事件循环**；面板用 localStorage 回显上次数据（打开即出内容，后台再刷新）。\n- 账 B（实付记账）文件按优先级查找：`COST_LEDGER` 环境变量 → 包内 `lib/core/data/ledger.jsonl` → 本地开发布局 `../../ledger.jsonl`。包内不含账目数据。\n- 安装后如未显示，硬刷新 Web UI 即可。\n\n## 状态（内联完成，待真机验证）\n\n- ✅ 核心已内联进 `lib/core/`（balances / sessions / pricing / catalog），发布后自包含、无包外相对路径依赖。\n- ✅ 双半区齐全：`dsh.plugin.json` 声明 `client.main`，`package.json` 导出 `./client`。\n- 🔒 **包内不含用户数据**：`ledger.jsonl`（真实记账明细）与 `config.json`（本机阈值设置）不进包，运行时由代码自动创建/回退默认值。`sync-core.mjs` 会主动剔除它们。\n- 同步脚本：`node sync-core.mjs` 把 CLI 侧同源文件复制进 `lib/core/` 并剔除用户数据，防止两套代码漂移。\n- 冒烟测试：`node test-smoke.mjs`（4 个工具 + UI 路由注册与返回结构，含账 B 汇总）、`node test-client.mjs`（客户端半区加载、slot 注册、组件渲染）。\n\n## 如何上市场\n\n`dsh plugin --profile web <args>` 实际转发给 pnpm，所以「上插件市场」= 发布到 npm registry：\n\n```bash\nnpm login                 # 需 npm 账号（当前机器未登录）\ncd dsh-plugin\nnode sync-core.mjs        # 内联核心 + 剔除用户数据\nnpm pack --dry-run        # 复核包内容\nnpm publish --access public\n```\n\n发布前置：① ✅ LICENSE = **Apache-2.0**（已附全文，含专利授权，保留署名）；② ⏳ npm 账号登录（`npm login`，当前机器未登录）；③ ⏳ 真机装进 profile 验证（`dsh plugin --profile web add @dachengge/dsh-cost-manager` + 重启）。\n\n当前包内容（`npm pack --dry-run`）：11 个文件 / 26.1 kB —— LICENSE、README、cordis.patch.yml、dsh.plugin.json、package.json、lib/index.js、lib/client.js、lib/core/{balances,sessions,pricing}.mjs、lib/core/data/catalog.json。\n\n> 本地校验：`node test-smoke.mjs`（host 半区）、`node test-client.mjs`（client 半区）。安装后硬刷新 Web UI 即可看到设置页面板。\n\n## 价目表覆盖\n\n- 31 个模型/工具。绑定模型已对齐：`deepseek-v4-pro`（实测）、`deepseek-v4-flash-vision-exp`（估算 5 元/1M token）、`kimi-k2.6` / `glm-5.2`（已登记，单价待测——前者待余额差法标定，后者为 coding 套餐不计 token 单价）。\n","readmeFilename":"README.zh.md"}