Small repo, few rules.
lib/client.js is generated. Edit lib/core.js (rate card, tariff
clock, fold) or src/ui.js (browser surface), then:
node scripts/build-client.mjspnpm test runs --check first and fails if you forgot. The point is
that the price table lives in exactly one file — a cost plugin with two
copies eventually shows two different numbers for the same session.
pnpm install
pnpm test- Prices change: update the table in
lib/core.jsand itsfetched:date in the README, cite the pricing page, and add aCHANGELOG.mdentry. Both READMEs carry the table; both change. - New behavior gets a test. The fold is pure and the tariff clock is arithmetic, so there is no excuse not to.
- UI changes need a screenshot from a real dsh session, not a mock. If the visible readout changes, the README's images change with it.
- Keep the model surface empty.
dsh-meteradds no tool and no prompt section; a change that puts cost in the agent's context window is a different plugin.
README.md and README.zh.md are peers — a change to one that affects
meaning belongs in both. The UI dictionaries live at the top of
src/ui.js; a new key needs both en and zh entries, and the en
object doubles as the fallback when no locale service is installed.