Skip to content

tokenarchive 0.2.0

Latest

Choose a tag to compare

@ddyy ddyy released this 21 Aug 16:38
· 6 commits to main since this release

Everything in the dashboard can now be read in tokens instead of dollars, and
a device that stops reporting can no longer hide behind one that hasn't.

Display as: dollars or tokens

A switch above the totals — and again in the sticky bar once they scroll away —
measures the whole page either way. It is not a relabelling: the chart's bars,
axis and cumulative curve, the coverage strip's quartile shading, the billing
windows, and the model, device, agent and project lists all recompute, and the
lists reorder, because bars sorted by one measure read as unsorted under the
other. Switching never disturbs what you have selected.

The reordering is the point. A model can sit at 45% of the leading bar by cost
and 95% by tokens — it is doing nearly as much work for half the money, which
the cost view alone cannot show.

A live block's projection stays in dollars in either mode: it is a cost forecast,
and there is no token equivalent to convert it into.

Known limitation: selecting a project swaps the chart and the coverage strip
for session-grained views, and those two are still drawn from cost regardless of
the switch. Session records do carry token counts, so this is an omission rather
than a limit of the data, and it will be fixed.

Per-device health

Each device in the health panel now has its own status dot, its own
last-snapshot date, and its own missing-days list. Previously a single archive
wide calculation meant one current machine could report the last 30 days as
fully captured while another had been silent for a week.

Row detail on hover

Hovering any row in the model, device, agent or project lists gives the full
name the column had to truncate, the cost, the token count, the implied rate per
million tokens, and the row's share of what is on screen. Project rows add the
session count and the span they cover, still labelled as whole-session totals.

The headline agent tile is no longer hardcoded

The fifth stat tile used to be "Claude only". It now names whichever agent leads
the current view. For a Claude-heavy archive it shows the same number as before;
for anyone else it stops privileging one vendor in a headline slot on a page
that tracks every CLI ccusage detects.

Also

  • An installer: npx tokenarchive sets up the daily snapshot job end to end —
    runtime files, LaunchAgent, keychain token, and one verified first run — and
    proves it worked instead of promising it. --uninstall removes everything
    except your archive.
  • The Worker serves MCP at POST /mcp, authenticated with read-only mcp:
    tokens minted at /admin, so agents on machines that do not hold the archive
    can query it. Both servers answer from one shared tool implementation.
  • Ingest tokens are now bound to the device they were minted for, so one
    compromised machine cannot write as another.
  • Snapshot-controlled strings are escaped before being embedded in the
    dashboard's inline script.
  • setup.js probes for unflagged node:sqlite rather than guessing from a
    version range, and refuses to finish if no dashboard was produced.

Full changelog: https://github.com/ddyy/tokenarchive/commits/v0.2.0