All notable changes to @ttthree/tokmon will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
- Eureka sessions showing zero cost after the
.craft-agent→.eurekadirectory rebrand. SDK JSONL lookup now searches both~/.craft-agent/.claudeand~/.eureka/.claude.
- Request-time
usageEventsattribution for Claude Code, Codex, and Eureka fallback token sources, enabling long sessions to be counted on the days their model requests actually occurred.
- Dashboard date filters, timelines, burn clock, project activity, and model-cost breakdowns now use request-level usage events instead of session start time.
- Corpus golden snapshots now include request-level token/cost events and updated aggregate totals.
- Parser cursor schema invalidation now forces unchanged files to be re-read after request-level attribution changes, backfilling event data without manual cache clearing.
- Eureka SDK token loss for dotted
sdkCwd—encodeClaudeProjectPath()now also replaces.with-(mirroring Claude Code's on-disk encoding). Previously, sessions whosesdkCwdcontained a dotted segment (e.g..craft-agent/...) silently logged 0 tokens / $0 on incremental collects because the constructed CC jsonl path didn't exist on disk. - Corpus golden generator (
parseAllPure) now dedupes by${source}:${id}to mirrorcollect()'s keyed map. Without this, workspaces reachable from two overlapping eureka source paths (legacy.craft-agent/workspacesand new.eureka/workspaces) were double-counted in the goldens but not at runtime. mars-e2etest timeout bumped from 20s to 60s, andfs.rmcleanup now usesmaxRetries: 5, retryDelay: 100to tolerate Windows file-handle locking.
- Machine filter in the dashboard header (renders only when ≥2 machines exist), threaded through session / totals / project filters.
- New shared
IconDropdownportal-popover component used by the header filters and (now) the theme picker. npm run dev:web(Vite) andnpm run dev:all(concurrent API + Vite) scripts for HMR'd development of the dashboard.- Automated release workflow: merging a version-bump PR to
mainpublishes to npm (with provenance), tagsv<version>, and creates a matching GitHub Release.
- Header collapses into a single
h-8row: agent / machine / time selectors, tabs, and refresh share one bar; the standalone "Token Monitor" title is removed (theTOKMON v0.x.yeyebrow stays). ThemePickermigrated ontoIconDropdown, removing ~140 lines of duplicated portal/menu code.
selectedProjectnow resets against the filtered project set, so a project that disappears under the current agent/machine combination cannot silently keep narrowing the visible session list.
- Stray
@ttthree/tokmonself-dependency that pinned the package to apkg.pr.newpreview URL.
tokmon --versionnow reads frompackage.jsoninstead of a stale hard-coded string.
- Stacked cost bars per source in the Token & Cost Trend chart when the source filter is set to "all".
- Chart legend so users can identify each token series and cost source.
- npm registry version-check timeout bumped from 3s to 8s (cold DNS/TLS was frequently triggering "operation was aborted" toasts).
- Dashboard re-checks for new releases every 5 minutes instead of only on initial mount.
- Corpus-backed test harness with golden snapshots.
- E2E UI tests for the dashboard.
- Token accounting accuracy fixes (cache-hit rate, double-count, project attribution) for Copilot CLI sessions.
- Codex parser gracefully handles older/alternate threads schemas.
- Port auto-fallback when default port is busy.
- Mars orchestrator session source.
- Settings tab and friendly machine name.
- Chart label split-color polish.
- Windows-safe pricing filenames.
- Codex rollout JSONL parsing for turns/tools/duration/replay.
chmod +x dist/cli/index.jsso the npx-installed binary is executable.
- Initial release with Claude Code, Codex, Copilot CLI, and Eureka source support, GitHub sync, and the dashboard.