dsh-token-attention
young4ever33/dsh-token-attention
Token Check · 词元管理:DeepSeek Harness (DSH) 的 token 注意力管理面板——按任务/日/周/月记录 token 消耗与费用(命中/未命中/输出/推理),支持 DeepSeek 峰谷计价,并给出换对话、写 hand-off 的执行时机建议。
安装
dsh plugin --profile web add github:young4ever33/dsh-token-attentionREADME
dsh-token-attention — Token Check for DeepSeek Harness
English | 中文说明
Token Check is a token-attention management panel for DeepSeek Harness (DSH). It records every conversation's token usage and estimated cost by task / day / week / month, recognizes task types, and — combined with DeepSeek's peak/off-peak pricing and DSH's context mechanics — tells you when to run a task, whether to switch sessions, and whether to write a hand-off file.
It is not a money-saving tool: it never throttles or cancels requests. It presents facts and advice; you decide.
Features
- Five views in DSH Settings — Overview / Sessions / Tasks / Cost / Settings
- Per-task ledger — token consumption (input hit / miss / output / reasoning) and estimated cost, rolled up by day / week / month
- Task-type recognition & advice engine — best execution window, switch-session, hand-off, context, cost and model suggestions
- Attention KPI — attention score, hit rate, context occupancy, compaction count per session
- Peak/off-peak pricing — DeepSeek off-peak half-price windows (peak 9:00–12:00 / 14:00–18:00), estimated cost breakdown by bucket
- Multi-model breakdown — cost and hit rate per model (e.g. deepseek-v4-flash / pro / grok)
- Ledger export — Markdown / CSV download, one-click hand-off template
- Editable settings — pricing table, peak hours, advice thresholds; new records are priced immediately
- Zero runtime dependencies — local SQLite via
node:sqlite; no network calls
Screenshots
Overview — today's usage, cost, hit rate, attention score, model mix, advice card, and trend
Session card — per-session model breakdown and attention metrics
Tasks — task ledger with Markdown / CSV export
Cost — peak split, cost leverage breakdown, and model comparison
Settings — pricing table, peak hours, and advice thresholds
Install
Once published to npm:
dsh plugin --profile web add dsh-token-attention
Restart DSH, then open Settings → 词元管理 (Token Check). Data is stored at DSH_HOME/token-attention/token_records.db.
Development install (link)
npm install && npm run build
Then register the plugin in the web profile (%APPDATA%\dsh-desktop\harness\profiles\web\package.json):
{
"dependencies": { "dsh-token-attention": "link:/path/to/dsh-token-attention" },
"dsh": { "profile": { "bundles": ["...", "dsh-token-attention"] } }
}
Run pnpm install inside profiles\web, restart DSH, and verify:
curl http://127.0.0.1:<port>/token-attention/api/health # → {"ok":true,...}
How it works
- Collection: the node half subscribes to DSH's
session/eventstream (usage, goal, subagent, compaction, turn) and writes normalized records to SQLite; a startup backfill replays existing sessions with an idempotentlast_seqcursor. - Aggregation: hourly incremental rollups into
daily_agg, with a daily full rebuild for correction. - Advice:
src/shared/advice.tsevaluates context occupancy, turns, hit rate, cost and model mix against your thresholds and suggests concrete actions.
Configuration
Settings are editable in the panel and saved to SQLite:
| Setting | Default |
|---|---|
| Model pricing (¥ / million tokens, off-peak) | flash: hit 0.05 / miss 1.5 / output 4.5 |
| Peak hours (24h, start-inclusive) | 9–12, 14–18 |
| Context-occupancy advice threshold | 70% |
| Turn-count advice threshold | 40 |
| Hit-rate advice threshold | 40% |
Development
npm run typecheck # tsc --noEmit
npm run check # node --check src/client/index.js
npm run build # tsc → dist/
npm run demo # collection-layer demo (idempotency / peak pricing / aggregation assertions)
npm pack # build the publish tarball
Uninstall
Uninstall in DSH Settings → Plugins, or remove the dependency and the bundles entry from the profile's package.json. The data directory DSH_HOME\token-attention\ can be deleted manually; dispose cleans up timers and the SQLite connection.
License
MIT © 2026 Young4ever33