🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Token 用量热力图 apodemakeles/dsh-token-dashboard

DeepSeek Harness
apodemakeles79 天前有提交已提供中文文档扫描:含敏感能力

以贡献图风格查看本机每日每周 token 消耗

31.4/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add apodemakeles/dsh-token-dashboard
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/9/30) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@apodemakeles/dsh-token-dashboard(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.5.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 14:16:04

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 85 处,展示前 49 条)
  • 写入本地文件
    lib/index.js:40
    appendFileSync(path, `${( new Date()).toISOString()} [${scope}] ${message}${suffix}\n`);
  • 读取本地文件
    lib/index.js:42
    if (statSync(path).size > MAX_BYTES) truncateSync(path, 0);
  • 写入本地文件
    lib/index.js:42
    if (statSync(path).size > MAX_BYTES) truncateSync(path, 0);
  • 发起网络请求
    lib/index.js:839
    await this.request({
  • 发起网络请求
    lib/index.js:864
    const result = await this.request(command);
  • 发起网络请求
    lib/index.js:883
    const result = await this.request(command, SNAPSHOT_TIMEOUT_MS);
  • 发起网络请求
    lib/index.js:897
    const result = await this.request(command, SNAPSHOT_TIMEOUT_MS);
  • 发起网络请求
    lib/index.js:911
    const result = await this.request(command, DRAIN_TIMEOUT_MS);
  • 发起网络请求
    lib/index.js:924
    const result = await this.request(command);
  • 写入本地文件
    lib/index.js:1155
    mkdirSync(tokenDashboardDir(home), {
  • 读取本地文件
    lib/cli.js:28
    if (!existsSync(dbPath)) return {
  • 写入本地文件
    lib/cli.js:77
    mkdirSync(dir, {
  • 写入本地文件
    lib/cli.js:82
    chmodSync(dir, 448);
  • 写入本地文件
    lib/cli.js:88
    writeFileSync(tmp, JSON.stringify(payload, null, 2), { mode: 384 });
  • 写入本地文件
    lib/cli.js:89
    renameSync(tmp, intentPath(home));
  • 写入本地文件
    lib/cli.js:91
    chmodSync(intentPath(home), 384);
  • 读取本地文件
    lib/cli.js:102
    const intent = existsSync(intentPath(this.home)) ? readFileSync(intentPath(this.home), "utf8") : null;
  • 读取本地文件
    lib/cli.js:102
    const intent = existsSync(intentPath(this.home)) ? readFileSync(intentPath(this.home), "utf8") : null;
  • 读取本地文件
    lib/cli.js:106
    if (existsSync(dir)) {
  • 读取本地文件
    lib/cli.js:107
    for (const name of readdirSync(dir)) if (name.startsWith("usage-v1.backup-")) backups.push(name);
  • 读取本地文件
    lib/cli.js:148
    if (existsSync(canonical)) {
  • 写入本地文件
    lib/cli.js:174
    if (existsSync(canonical)) renameSync(canonical, preRestore);
  • 删除本地文件
    lib/cli.js:187
    rmSync(target, { force: true });
  • 写入本地文件
    lib/usage-worker.js:284
    chmodSync(dbPath, 384);
  • 发起网络请求
    src/client/snapshot.ts:17
    const res = await fetch(url, {
  • 写入本地文件
    src/durable/diag.ts:37
    appendFileSync(path, `${new Date().toISOString()} [${scope}] ${message}${suffix}\n`)
  • 读取本地文件
    src/durable/diag.ts:39
    if (statSync(path).size > MAX_BYTES) truncateSync(path, 0)
  • 写入本地文件
    src/durable/diag.ts:39
    if (statSync(path).size > MAX_BYTES) truncateSync(path, 0)
  • 读取本地文件
    src/durable/maintenance.ts:73
    if (!existsSync(dbPath)) return { exists: false, applicationId: null, userVersion: null, projectionVersion: null, phase: null, quickCheck: null }
  • 写入本地文件
    src/durable/maintenance.ts:100
    mkdirSync(dir, { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/durable/maintenance.ts:102
    chmodSync(dir, 0o700)
  • 写入本地文件
    src/durable/maintenance.ts:112
    writeFileSync(tmp, JSON.stringify(payload, null, 2), { mode: 0o600 })
  • 写入本地文件
    src/durable/maintenance.ts:113
    renameSync(tmp, intentPath(home))
  • 写入本地文件
    src/durable/maintenance.ts:115
    chmodSync(intentPath(home), 0o600)
  • 读取本地文件
    src/durable/maintenance.ts:127
    const intent = existsSync(intentPath(this.home)) ? readFileSync(intentPath(this.home), 'utf8') : null
  • 读取本地文件
    src/durable/maintenance.ts:127
    const intent = existsSync(intentPath(this.home)) ? readFileSync(intentPath(this.home), 'utf8') : null
  • 读取本地文件
    src/durable/maintenance.ts:131
    if (existsSync(dir)) {
  • 读取本地文件
    src/durable/maintenance.ts:132
    for (const name of readdirSync(dir)) {
  • 读取本地文件
    src/durable/maintenance.ts:172
    if (existsSync(canonical)) {
  • 写入本地文件
    src/durable/maintenance.ts:204
    if (existsSync(canonical)) renameSync(canonical, preRestore)
  • 删除本地文件
    src/durable/maintenance.ts:221
    rmSync(target, { force: true })
  • 写入本地文件
    src/durable/sqlite-store.ts:215
    chmodSync(dbPath, 0o600)
  • 发起网络请求
    src/durable/worker-client.ts:125
    await this.request({
  • 发起网络请求
    src/durable/worker-client.ts:152
    const result = await this.request(command)
  • 发起网络请求
    src/durable/worker-client.ts:172
    const result = await this.request(command, SNAPSHOT_TIMEOUT_MS)
  • 发起网络请求
    src/durable/worker-client.ts:187
    const result = await this.request(command, SNAPSHOT_TIMEOUT_MS)
  • 发起网络请求
    src/durable/worker-client.ts:202
    const result = await this.request(command, DRAIN_TIMEOUT_MS)
  • 发起网络请求
    src/durable/worker-client.ts:210
    const result = await this.request(command)
  • 写入本地文件
    src/index.ts:30
    mkdirSync(dir, { recursive: true, mode: 0o700 })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-settings@deepseek-ai/dsh-system-prompt
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 每日token用量看板
  • 每周token用量看板
  • 贡献图风格热力图

README

由 DeepSeek 最新模型翻译生成
@apodemakeles/dsh-token-dashboard 一个 DeepSeek Harness (DSH) Web GUI 插件:token 消耗热力图面板。以 GitHub 贡献图风格展示本机所有项目的每日/每周 token 总消耗。Usage facts 由常驻 Worker 投影到本地 SQLite,打开面板不会扫描会话日志。 状态:已发布 v0.2.0 —— GitHub 分发已上线;当前未发布到 npm。 界面截图 周视图 Token 用量周视图热力图 日视图 Token 用量日视图柱状图 功能 - 宿主半区 —— 监听实时 session/event,经过 DSH 持久化屏障后把最小 usage 增量发给常驻 Worker;Worker 独占 SQLite(node:sqlite),原子提交 facts/checkpoint,并提供单一一致快照接口。 - 客户端半区 —— 在侧边栏注册 Token 入口,打开专用面板渲染热力图(周视图网格 + 日视图)。每次打开/刷新/翻页只请求一次 GET /api/token-dashboard/snapshot。 - CLI —— dsh-token-dashboard status|verify|rebuild|backups|restore|cleanup 提供本地运维。
展开完整文档(README 剩余 1 节)
@apodemakeles/dsh-token-dashboard

一个 DeepSeek Harness (DSH) Web GUI 插件:token 消耗热力图面板。以 GitHub 贡献图风格展示本机所有项目的每日/每周 token 总消耗。Usage facts 由常驻 Worker 投影到本地 SQLite,打开面板不会扫描会话日志。

状态:已发布 v0.2.0 —— GitHub 分发已上线;当前未发布到 npm。

界面截图

周视图

Token 用量周视图热力图

日视图

Token 用量日视图柱状图

功能

- 宿主半区 —— 监听实时 session/event,经过 DSH 持久化屏障后把最小 usage 增量发给常驻 Worker;Worker 独占 SQLite(node:sqlite),原子提交 facts/checkpoint,并提供单一一致快照接口。
- 客户端半区 —— 在侧边栏注册 Token 入口,打开专用面板渲染热力图(周视图网格 + 日视图)。每次打开/刷新/翻页只请求一次 GET /api/token-dashboard/snapshot。
- CLI —— dsh-token-dashboard status|verify|rebuild|backups|restore|cleanup 提供本地运维。

安装

从 GitHub:

dsh plugin --profile web add github:apodemakeles/dsh-token-dashboard

安装后重启 dsh web。打开任意项目会话,点击侧边栏的 Token 入口即可看到热力图面板。

当前未发布 npm 包,请使用上面的 GitHub 安装方式。

数据与运维

- 投影数据库:$DSH_HOME/data/token-dashboard/usage-v1.sqlite(缺省 ~/.dsh)。
- Total tokens = inputTokens + outputTokens + cacheReadTokens(cache read 计入头条)。
- 面板只调用 snapshot 路由,不触发 listSnapshots、inspect、readFrom、flush 或补扫。
- 首次启动会在后台初始化数据库,面板显示 phase/progress 直到 ready。

开发

git clone https://github.com/apodemakeles/dsh-token-dashboard.git
cd dsh-token-dashboard
pnpm install && pnpm build
dsh plugin --profile web add link:$(pwd)

项目地图(规划 tracker)见 .scratch/dsh-token-dashboard/map.md,架构合同见 docs/durable-usage-architecture.md,完整联调循环(watch / HMR / 重启规则)见 docs/dev-loop.md。

已知限制

- 仅统计本机:权威来源是 ~/.dsh/sessions,SQLite 是可重建投影。
- host/Worker 改动需要重启 DSH;client HMR 不覆盖常驻 Worker。
- Node 24 的 node:sqlite 仍为实验特性;插件启动时做能力检查,不全局屏蔽警告。

协议

MIT
预览分享卡片长什么样 ↓apodemakeles/dsh-token-dashboard
分享 · DeepSeek Harness Hub
apodemakeles/dsh-token-dashboard

以贡献图风格查看本机每日每周 token 消耗

这是你的仓库?认领条目

回到顶部