Repository navigation
Releases: tommulkins/hermes-plugin-session-analyzer
Release list
v0.3.2 — Unified plugin layout (plugin-catalog ready)
Summary
Restructured to the unified package layout the Hermes desktop runtime-loader and the official plugin catalog expect:
desktop/plugin.js(UI half) anddashboard/(backend half) now sit at the repo root- Added a native
plugin.yaml+ no-op__init__.pyso the plugin passeshermes plugins validateand the plugin-catalog pinned-source CI install.sh/install.ps1source paths updated; installed destinations unchanged — existing manual installs keep working- Fixed stale
dashboard/manifest.jsonversion (0.3.0 → 0.3.2)
No behavior changes. This release is the SHA pin target for the upcoming plugin-catalog entry.
v0.3.1 — Fix Ask AI session-owner resolution error
Ask AI no longer fails with Session owner could not be resolved when opening a new session (regression on connections-registry topologies — two or more backends / profiles).
Root cause: Ask AI pre-created the session with a raw session.create RPC and navigated to it. That bypasses the app's own create path, which is the only place owner hints/tiles/rows get stamped, so the renderer's fail-closed owner resolution refused to route any session-scoped RPC (model pick, prompt send, file attach) to the orphaned session — and the session never reached a state.db.
Fix: Ask AI now opens a fresh draft via host.newChat() — the same door the sidebar '+' uses. No session-scoped RPC is issued; the session is created by the app's own path at send time with full owner bookkeeping.
Behavior change: the new session no longer carries a seeded 'Session analysis: …' title; auto-title takes over from the pasted prompt.
v0.3.0 — Readable insights, copy affordances, lint tooling, tests
v0.3.0: readable insights, copy affordances, lint tooling, tests
Detail-panel improvements:
- Tool calls: fixed-width right-aligned count/token columns with a
labeled header row (tool / calls / ~tokens) — counts no longer drift
row to row; Files touched moved to its own full-width section below - Copy session id: explicit copy-icon button next to the id in the
detail header, alongside right-click on the id (reuses the list's
context menu) - Cache-reset / re-bill events: pill row replaced with per-event rows
carrying a plain-language summary (switched to X with cache rebuild,
upstream 503 re-bill, context compressed); native title tooltips
dropped (slow, clipped at panel edge) - Context growth, Failed calls, Repeated calls: one-line explainers
spelling out why each signal matters (every token in context is
re-billed per call; a failed turn spends tokens and produces nothing;
3+ identical calls is one root cause, not N failures) - ANSI strip restored in _failure_detail (regressed in the earlier
ponytail consolidation; nothing failed without a test, hence the
suite below)
Tests (new tests/ directory):
- test_plugin_api.py: 23 unit tests for _detect_failure,
_failure_detail (ANSI + batch-tool regressions), _strip_ansi,
_event_summary - test_acceptance_live.py: 7 acceptance tests exercising session_detail
against the real state.db (skip when absent, CI-safe)
Lint tooling:
- ESLint 9 (flat config) + react-hooks: unused vars, undefined globals,
hook rules; immutability rule off for the deliberate DOM-drag divider - Ruff (E/F/I/B/UP) for the Python backend; PEP 604 isinstance/typing
updates, B904 raise-from, line-length cleanup; *.py added to
.prettierignore - pnpm lint now runs the trap linter AND eslint; pnpm lint:python for
ruff
v0.2.1
Fix: separator hover/drag dead in packaged builds (issue #2)
The packaged app's Tailwind build only generates classes its own code uses, so plugin-only arbitrary classes (w-[9px], group-hover:opacity-100) were never compiled into the shipped CSS. The sash strip collapsed to 0px width and pointer-events-none on the band wrapper left nothing hit-testable.
- Separator width is now inline (
style={{width: 9}}) — immune to class generation - Hover feedback via React state (
onPointerEnter/onPointerLeave) instead of the missinggroup-hovervariant - Removed
pointer-events-nonefrom the band wrapper
Dev workflow
- Added prettier (pnpm devDep,
.prettierrc.json= defaults, lockfile committed) —pnpm run format - Manifest 0.2.0 → 0.2.1
v0.2.0 — Token percentages, grouped failures, session about
Feature release on top of v0.1.0.
New in v0.2.0
- Token percentages — stat tiles and the inline token bar now show each group's share of total:
in 71.9k (3%)/cache 2.53M (95%)/out 29.2k (1%). Same denominator in both views. - Grouped failed calls — failures are grouped by tool name with count badges; rows inside each group stay chronological. Bordered group boxes.
- Click-through from tool breakdown — tool names with failures are red clickable buttons that smooth-scroll to that tool's failed-calls group.
- Session 'About' — the detail view now shows the session's first real user message under the title, so you can tell what a session was about even when the title is unhelpful. No LLM cost (deterministic first-user-message extraction, synthetic wrappers skipped).
- Manifest version lockstep: 0.2.0.
Install: chmod +x install.sh && ./install.sh (macOS/Linux) or powershell -ExecutionPolicy Bypass -File .\install.ps1 (Windows). Restart Hermes Desktop once.
CI (Windows PS 5.1 parse + config insertion + idempotency, macOS/Linux install.sh) is green on this tag.
v0.1.0 — Session Analyzer
Initial release of Session Analyzer, per-session analytics for Hermes Desktop.
Features
- Session list with load-more (up to 500), live title/id filter, FTS content search with snippets
- Sort: recent or worst (by failed tool calls, red N-failed badges)
- Per-session detail: input/output/cache tokens, spend, duration, message count, deterministic summary, tool-call breakdown
- Expandable failed calls with tool arguments; files touched (writes highlighted)
- Subagents: model, status (completed/error), summary, duration, API calls, input tokens — click to jump to the subagent's own detail; parent id shown on subagent rows
- Ask AI: one click opens a new session with a ready-made analysis prompt (clipboard, paste + pick judge model)
Install
macOS/Linux: chmod +x install.sh && ./install.sh
Windows: powershell -ExecutionPolicy Bypass -File .\install.ps1
CI verifies installers on Windows PowerShell 5.1 (parse + config insertion + idempotency) and macOS/Linux.