Vai al contenuto principale
J

dsh-usage-limits

jakehemmerle/dsh-usage-limits

Shows how much of your Claude and Codex plan limits you have used: a line above the prompt in dst with 5-hour and weekly windows, percent used and time to reset, and a ring meter beside the context meter in dsh web that opens a panel listing every window.

Installazione

dsh plugin --profile web add github:jakehemmerle/dsh-usage-limits

README

dsh-usage-limits

A DeepSeek Harness (DSH) plugin that shows how much of your Claude and Codex plan limits you have used: an omp-style line in the terminal client (dst, dsh-TUI) and a ring meter in dsh web. The product and technical specification is SPEC.md; the test plan and evidence are in TESTING.md.

What it shows

dst. One coloured line above the prompt, on the first screen (Launchpad) and in chat, in the format of Jake's omp line:

Claude (proxy) 5h ░░░░░░░░ 1% ↻2h29m 7d ██░░░░░░ 29% ↻5d6h   Codex (proxy) 7d █░░░░░░░ 12% ↻3d11h

Each account shows its 5-hour and weekly windows: a bar, the percent used and the time to the reset. Percents are green below 50%, amber from 50% and red from 80%. A narrow terminal drops the bars, then the reset times, then shortens names (Claude·px), and finally shows only the fullest window. A refresh that fails keeps the last numbers and marks the account stale. Nothing shows until data arrives.

dsh web. A small ring and label beside the composer's context meter in a session, for example Codex (proxy) 7d 52%: the fullest 5-hour or weekly window, coloured by the same thresholds. Click it for a panel that lists every window of every account, including per-model windows such as Weekly · Fable and extra Codex limits, with reset times and stale or error notes.

Meter beside the context meter

Panel, dark theme Panel, light theme

Where the data comes from

Accounts, in display order:

AccountSource
Claude (proxy), Codex (proxy)ProviderProxy: GET <baseURL>/usage/claude and /usage/chatgpt with the proxy client key from PROVIDERPROXY_API_KEY (or proxy.apiKeyEnv)
Claude, CodexDSH's own sign-ins (llm-pi-ai/anthropic, llm-pi-ai/openai-codex) → https://api.anthropic.com/api/oauth/usage, https://chatgpt.com/backend-api/wham/usage

An account that is not configured is left out. The plugin never refreshes, writes or logs tokens; an expired sign-in waits for DSH to refresh it. ProviderProxy accounts are read at most once a minute (the proxy caches its upstream for a minute); direct sign-ins at most every minIntervalMs (default 5 minutes, never below 1 minute), with back-off after errors. dst asks every minute and redraws reset times every 30 seconds without a request; the web page polls the plugin's route every minute.

Install

Both rows are generated by nix-config (home/dsh.nix); by hand they are:

# ~/.dsh/profiles/web/cordis.patch.yml
- insert:
    - id: usage-limits
      name: /path/to/dsh-usage-limits/index.js
      config: &usage
        minIntervalMs: 300000
        proxy:
          baseURL: http://gpu.tail47033e.ts.net:4000/v1
          apiKeyEnv: PROVIDERPROXY_API_KEY
# ~/.dsh/profiles/dsh-tui/cordis.patch.yml
- insert:
    - id: usage-limits
      name: /path/to/dsh-usage-limits/tui.js
      config: *usage

name must point at the entry file (index.js or tui.js), not the package directory. DSH finds the browser half through package.json. dsh-TUI 0.14.0 draws plugin status lines only in chat; the patch in patches/ (applied by nix-config's pkgs/dsh-tui.nix) puts them on the Launchpad too. dsh web loads the plugin when dsh-web starts; dst loads it in each new process.

Test

npm ci
npm test                                   # properties, host runtime, contracts, smoke
DSH_TUI_DIR=<patched dsh-tui> npm run test:e2e:tui   # real dst in tmux
npm run test:e2e:web                       # real dsh web in Playwright

Plugin correlati