Releases: Jannchie/dsh-bill
Release list
v0.13.1
Install: dsh plugin --profile web add dsh-bill — then restart dsh web.
Fixes
- The always-on cost line's settings row named two different places for one surface. Its title said the line sits above the composer while its description said it sits under the shipped stats line. Both are true — the stats line is itself above the composer — but read together they describe two places. The title now names the surface, as the other three rows do, and the anchor is left to the description.
v0.13.0
Install: dsh plugin --profile web add dsh-bill — then restart dsh web.
Every surface is now optional, and preferences persist
The four places the plugin shows up — the composer dock line, the per-turn cost line, the Cost tab, and the sidebar budget — can each be turned off individually on the Cost page in settings.
Preferences (budget, budget currency, and those four toggles) are stored in $DSH_HOME/dsh-bill/prefs.json, under the same lock-and-atomic-replace discipline as the spend records, read-modify-write so two windows don't clobber each other. The budget never actually persisted before this release — it went through the harness's own settings document, whose API proxy serves the browser a fixed allowlist of namespaces, so a plugin's namespace was accepted and then dropped on every write.
Budget carries its own currency
A budget is a commitment in some currency; it no longer silently changes meaning when you switch the report's display currency to take a look.
Fixes
- The report tab inherits Chat's background instead of painting its own, so the two tabs sit on the same ground. Cards are outline-only and the heatmap mixes toward transparent.
- The range picker and the currency select are one shape. The
<select>kept its native appearance (and its own corner radius) withoutappearance: none; the two also differed by 2px in height. - The daily-cost chart's x-axis is constrained to the width the bars actually occupy, so the end date no longer floats far past the last bar. Ticks drop the year — it's constant within a range, and each bar's tooltip carries the full date.
bill_statsregisters again. Itsparameterspassed a wrapped object schema wheredefineToolwants a property map. This had never registered on a dev machine, masked by a separate bug:optionalHostImportnever resolved anything under alink:ed checkout, because Node resolves the symlink first and the lookup then walks up from the checkout, never seeing the profile. Both optional registrations are now wrapped — a throw inside a plugin fiber takes down the whole harness, and a cost plugin should at worst fail to register its own things.
Style
Every surface is built on the host's --dsw-* design tokens — colors, the composite font ramp, easing and shadows — measured against DSH's own shipped components rather than approximated.
Docs
An English README.md ships beside the Chinese README.zh.md, paired by a checked-in blob hash so the two cannot silently drift.