Skip to content

feat: ship dashboard overhaul and expand runtime test coverage#1

Merged
kargarisaac merged 18 commits into
mainfrom
feat/add-tests
Feb 25, 2026
Merged

feat: ship dashboard overhaul and expand runtime test coverage#1
kargarisaac merged 18 commits into
mainfrom
feat/add-tests

Conversation

@kargarisaac
Copy link
Copy Markdown
Contributor

Summary

  • ship a major dashboard refresh with stronger overview analytics, 50-per-page runs browsing, full-screen run chat viewer, markdown rendering, and configurable settings persistence from the UI
  • improve runtime/session ingestion behavior with hash-based sync change detection, daemon parallelism controls, and expanded adapter/config/runtime plumbing for better reliability
  • add comprehensive automated coverage across adapters, config, runtime tools, catalog queries, dashboard APIs, integration flows, smoke paths, and e2e scenarios, plus CI and testing docs

Key Changes

  • Dashboard (dashboard/index.html, src/lerim/app/dashboard.py)
    • reworked overview charts (daily + hourly dual-axis), run list columns, session metadata, and model/tool usage extraction from trace files
    • replaced in-page run transcript panes with a full-screen modal chat viewer including role-aware styling and collapsible tool input/output blocks
    • added markdown rendering in transcript messages with safe sanitization
    • added editable settings surface (server/roles/tracing) wired to config API write endpoints
    • improved runs filtering behavior and scope refresh consistency; hid Graph Explorer in UI for now while keeping implementation in place
  • Runtime / Sync / Daemon
    • added hash-based session trace change detection in sync flow
    • added configurable parallel job processing knobs for daemon sync windows/workers
    • added async explore-tool execution support and prompt/config updates for role-driven guidance
  • Testing / Tooling / Docs
    • introduced broad test suite additions across unit/integration/smoke/e2e layers, fixtures, and helpers
    • added tests/run_tests.sh as the primary test entrypoint and updated docs accordingly
    • added CI workflow for lint + unit test gate
    • updated README/CONTRIBUTING/CHANGELOG and dashboard docs/assets

Validation

  • python -m pytest tests/test_dashboard_api.py tests/test_dashboard_visual_polish.py tests/test_dashboard_read_only_contract.py -q (15 passed)

kargarisaac and others added 18 commits February 25, 2026 17:26
- Add conftest, fixtures, helpers, and run_tests.sh
- Move run_tests.sh from scripts/ to tests/
- Add adapter, config, memory, provider, runtime, and catalog tests
- Add tests/README.md with test categories and usage

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Strengthen extraction prompt to actively detect user preferences, habits,
and conventions in session transcripts. Preferences are stored as learnings
with kind=preference.

- Add preference trigger words (I prefer, I like, my style, etc.)
- Expand preference kind description with concrete examples
- Add preference conversation to self-test transcript
- Add preference quality assertions to self-test
Replace the process-once model with SHA-256 content hashing so resumed
or still-active chats are automatically re-processed on the next sync
cycle.

- Add content_hash field to SessionRecord and session_docs schema
- Add compute_file_hash helper (SHA-256 of raw file bytes)
- Each adapter now computes a hash per session file and skips only when
  the hash matches the stored value (previously skipped by run_id alone)
- index_new_sessions returns changed=True for known sessions whose hash
  differs, daemon force-enqueues those for re-extraction
- Add get_indexed_run_hashes() returning {run_id: hash} mapping
- Includes additive DB migration for existing sessions.sqlite3 files
- 17 new unit tests covering hash storage, skip-on-match, return-on-change
  for all four adapters (Claude, Codex, OpenCode, Cursor), catalog, indexer,
  and daemon force-enqueue path
Convert explore tool from sync def/run_sync to async def/await run so
PydanticAI can execute multiple explore calls concurrently when the LLM
emits them in the same tool-call turn. Update all lead agent prompts
(system, sync, chat, maintain) to instruct up to 4 parallel explore calls.
…lization; feat(daemon): parallel job processing with configurable sync window/workers; switch default model to grok-4.1-fast
…and settings

- Populate model usage and tool usage charts from JSONL trace data
- Daily Activity and Activity by Hour use dual Y-axis (count vs tokens)
- Daily Sessions chart only shows agents with actual data
- Runs tab: show project/branch instead of raw path, add session ID column
- Memory tab: dynamic type/kind/project filters from API, project search works
- Rename Session Intelligence to Pipeline; show sync/maintain status cards
- Settings tab: full config (server, 4 roles, tracing) with save to config.toml
- Add POST/PATCH /api/config endpoint for writing user config
- Add cursor and cline agent colors/badges throughout
Remove the Runs transcript/reflect subpanels and keep a clean 50-per-page session list. Open now launches a scoped modal viewer for session chats with role styling and collapsible tool payloads.
- Updated CSS for improved markdown formatting in chat content.
- Modified session statistics to include error handling and unique tool tracking.
- Enhanced derived statistics calculations for better session insights.
- Added new functions for safe HTML rendering of markdown content.
- Updated tests to validate new statistics and error handling features.
- Added a new logo image for the dashboard branding.
- Updated the navbar to use an image for the logo instead of a span.
- Revised the subtitle text for clarity.
- Enhanced the session detail extraction logic to better identify model and tool usage from various payload formats.
- Added tests to validate the extraction of model and tool information from Codex and Cursor trace rows.
…ary tab check

- Simplified the onFilterChange method to always call loadRuns(0) without checking the active tab, improving code clarity and maintainability.
…browsing

- Added a new dashboard section in the README with instructions for running it locally.
- Included an overview of dashboard features such as session metrics, memory management, and settings.
- Introduced a new dashboard image for visual reference.
- Removed outdated screenshot assets to streamline the project.
- Deleted the migration instructions for users transitioning from Acreta to Lerim, as the information is no longer relevant.
- Streamlined the README to focus on current features and usage.
Update documented default role models to OpenRouter grok-4.1-fast and clarify dashboard capabilities, including settings persistence to ~/.lerim/config.toml.
@kargarisaac kargarisaac merged commit c8bd0c9 into main Feb 25, 2026
1 check failed
@kargarisaac kargarisaac deleted the feat/add-tests branch February 25, 2026 18:51
kargarisaac added a commit that referenced this pull request Feb 25, 2026
feat: ship dashboard overhaul and expand runtime test coverage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant