feat: session archive, file open actions, reasoning effort, search fix#1241
Open
Vision0220 wants to merge 9 commits into
Open
feat: session archive, file open actions, reasoning effort, search fix#1241Vision0220 wants to merge 9 commits into
Vision0220 wants to merge 9 commits into
Conversation
feat: add session archive with collapsible sidebar section Add ability to archive sessions so they are hidden from the main session list but remain accessible in a collapsible "Archived Sessions" section at the bottom of the sidebar. Backend: - Add `archived` column to sessions table (auto-migrated via syncTable) - Add POST /sessions/:id/archive and /unarchive endpoints - Filter archived sessions from default list/search queries - Support `includeArchived=true` query parameter Frontend: - Session store: add `archived` field to Session interface, fallback fetchSession in switchSession for sessions not in main list (e.g. archived) - ChatPanel: collapsible archived section fixed at sidebar bottom, archive/unarchive in context menu, filter archived from pinned/unpinned - ChatView: route guard handles archived session IDs via switchSession - HistoryView: archive/unarchive in context menu - i18n: translations for all 9 locales @
Add right-click context menu to file attachments and markdown file cards with three actions: open with default app, show in folder, and download. Backend: - POST /api/hermes/open-file: opens file with system default application - POST /api/hermes/open-in-explorer: reveals file in system file manager - Cross-platform: Windows (cmd/start, explorer), macOS (open), Linux (xdg-open) Frontend: - MessageItem: right-click context menu on file attachments (skips blob URLs) - MarkdownRenderer: right-click context menu on file cards and file links - Client API: openFileWithDefault() and openInExplorer() functions - Original left-click download/preview behavior preserved
- sessions-routes: add archive/unarchive controller mocks - sessions-db-lineage: add archived column to test DB schema - markdown-rendering: add NDropdown mock, openFileWithDefault/openInExplorer - markdown-special-mentions: add missing download API mock exports - markdown-rendering-mermaid-import-timeout: add NDropdown mock - message-item-highlight: add NDropdown mock
Expose the existing agent.reasoning_effort config.yaml option in the Web UI settings panel. Users can now select low/medium/high/xhigh to control model thinking depth (e.g. GPT-5.5 xhigh). The value is written to config.yaml and read by the Python bridge automatically.
Remove archived filter from searchSessions so archived sessions are discoverable via the search modal. Add an 'archived' badge in search results to distinguish them from active sessions.
When opening an archived session from search results, the archived field was not being passed to addOrUpdateSession, causing the session to appear in the regular sidebar instead of the archived section.
P1 fixes: - sessions-db: use buildSessionSelect with tableHasColumn guard to safely handle Hermes state.db that may not have the archived column - download: replace cmd /c start with PowerShell Start-Process to prevent command injection via filenames containing metacharacters P2 fixes: - download: await execFile callback before responding to surface file-open failures to the client instead of silently returning ok - ChatPanel: include archived session IDs in pruneMissingSessions call after archiving to preserve pin state - ChatPanel: clear and reload archived sessions when profile filter changes - HistoryView: disable archive action for non-imported Hermes sessions - ChatView: validate activeSession after switchSession fallback to handle stale route IDs correctly
HermesSessionRow already includes archived and workspace fields, so updateSession Partial type accepts them directly. HistoryView SessionSummary also has archived field, so no cast is needed there either.
Adds session archiving with collapsible sidebar section, file right-click context menus (open/show in folder/download), reasoning effort setting in agent settings, and fixes search to include archived sessions with state preservation.
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
Four features bundled in one PR:
1. Session Archive
archivedcolumn auto-migrated viasyncTable, POST endpoints for archive/unarchiveincludeArchived=truequery param2. File Open Actions
POST /api/hermes/open-fileand/api/hermes/open-in-explorerexecFilewith argument arrays to prevent command injection3. Reasoning Effort Setting
agent.reasoning_effortconfig option in Agent Settings panel4. Search Fix
tableHasColumnguard handles older DBs that may lack thearchivedcolumnTesting
archivedcolumn to test DB schema in sessions-db-lineage test