feat: ship dashboard overhaul and expand runtime test coverage#1
Merged
Conversation
- 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>
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
added a commit
that referenced
this pull request
Feb 25, 2026
feat: ship dashboard overhaul and expand runtime test coverage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Key Changes
dashboard/index.html,src/lerim/app/dashboard.py)tests/run_tests.shas the primary test entrypoint and updated docs accordinglyValidation
python -m pytest tests/test_dashboard_api.py tests/test_dashboard_visual_polish.py tests/test_dashboard_read_only_contract.py -q(15 passed)