-
-
Notifications
You must be signed in to change notification settings - Fork 23
Permalink
Choose a base ref
{{ refName }}
default
Choose a head ref
{{ refName }}
default
Comparing changes
Choose two branches to see what’s changed or to start a new pull request.
If you need to, you can also or
learn more about diff comparisons.
Open a pull request
Create a new pull request by comparing changes across two branches. If you need to, you can also .
Learn more about diff comparisons here.
base repository: OpenSource03/harnss
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.18.1
Could not load branches
Nothing to show
Loading
Could not load tags
Nothing to show
{{ refName }}
default
Loading
...
head repository: OpenSource03/harnss
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.19.0
Could not load branches
Nothing to show
Loading
Could not load tags
Nothing to show
{{ refName }}
default
Loading
- 4 commits
- 66 files changed
- 2 contributors
Commits on Mar 11, 2026
-
feat: session prefetch, streaming perf, dark theme overhaul, and UI p…
…olish Performance — Session switching: - Add session payload prefetch via requestIdleCallback, caching up to 6 recently-used session payloads in memory so switching is near-instant instead of hitting disk every time - Introduce .meta.json sidecar files for session persistence — sessions:list now reads tiny sidecar files instead of parsing full session JSONs, making sidebar load dramatically faster for projects with many sessions - Convert sessions IPC to fully async (replaces fs.existsSync/readFileSync with fs.promises equivalents throughout sessions.ts) - Remove pretty-printing from session JSON writes (no more 2-space indent) to reduce file size and write time - Wrap session restore in startTransition so React can batch the state updates without blocking the UI - Add switchRequestId guard to prevent stale disk loads from overwriting a newer session switch - Make saveCurrentSession fire-and-forget (void) during session switches so the outgoing save doesn't block the incoming session render - Consolidate 5 separate session-metadata-sync effects (model, totalCost, lastMessageAt, isProcessing, hasPendingPermission) into a single unified effect in useSessionPersistence to eliminate redundant setSessions map passes per render cycle Performance — Streaming & rendering: - Optimize useClaude flushStreamingToState from O(n) array map to O(1) indexed splice by caching the streaming message index in a ref (streamingIndexRef) and updating only that single element - Cache message_start index at insertion time so the very first flush already has O(1) lookup - Add deferred ReactMarkdown rendering for off-screen assistant messages via IntersectionObserver — messages start as plain whitespace-pre-wrap text and swap to full markdown parsing only when scrolled into view (200px rootMargin for pre-loading) - Cache turnSummaryByEndIndex computation — skip full extractTurnSummaries when message structure hasn't changed (streaming content updates only modify the last message, not the structure) - Cache toolGroups computation similarly via prevToolGroupsInputRef - Optimize activeTodos memo to depend on messages.length instead of the full messages array, since todo extraction only cares about new messages not streaming content updates Performance — Git panel: - Add repoStatesCache (Map<projectPath, RepoState[]>) so switching back to a project shows cached git state instantly before the refresh poll - Add requestIdRef staleness guard to prevent race conditions when projectPath changes rapidly - Split refreshAll (full discover + load) from refreshKnownRepos (refresh existing repos only) so the 3s poll doesn't re-discover repos - Add reportError for git discovery failures Performance — Background session store: - Remove O(n) message clone in initFromState — the active view treats message arrays immutably so the existing objects can be reused - Combine the two separate message iteration loops (parentToolMap + plan counter) into a single pass - Detect streaming messages inline during the single pass instead of a separate findLast call Performance — Layout settings: - Introduce ProjectLayoutState cache with readProjectLayoutState / writeProjectLayoutState to batch all per-project layout dimensions (rightPanelWidth, toolsPanelWidth, toolsSplitRatios, rightSplitRatio, bottomToolsHeight, bottomToolsSplitRatios) into a single React state object, eliminating 6 separate useState + useEffect re-init cycles on project switch - Remove redundant layout re-reads from the projectId change effect since the unified layout state handles it Dark theme overhaul: - Lower dark mode background lightness from oklch(0.203) to oklch(0.107) for a significantly darker, more contrasty dark theme - Update dark glass sidebar to use semi-transparent oklch(0.107) instead of fully transparent, giving the sidebar a dark base tint - Adjust glass sidebar border and accent colors for the darker base - Update dark space theme base lightness from 0.214 to 0.12 with reduced tint strength (0.013 vs 0.02) for subtler space coloring - Update window backgroundColor to #040404 to match the darker theme - Strengthen light-mode island border gradient opacity values for better definition (0.10→0.14 edges, 0.04→0.06 midpoints) - Apply island gradient styling to non-glass light mode too (was previously glass-only via .glass-enabled:not(.dark)) - Add box-shadow to light-mode islands for subtle depth - Add filter: invert(1) brightness(2) for sidebar engine icons in light glass mode so they remain visible against the bright background Transparency & appearance settings: - Rename getGlassEnabled to getGlassSupported throughout (main.ts, preload.ts, window.d.ts) — the IPC now reports platform capability, not user preference - Move glass-enabled class application from App.tsx useEffect to preload.ts so the class is set before React mounts, eliminating the flash of non-glass rendering on startup - Read transparency user preference from localStorage in preload to decide whether to apply glass-enabled class (defaults to enabled) - Add "Transparent tool picker" setting — removes the island background from the ToolPicker strip so icons float over the window - Add "Colored sidebar icons" setting — toggles per-tool color tints on the ToolPicker strip and panel header icons - Redesign the island/flat layout picker in AppearanceSettings with visual preview cards showing mini app illustrations - Replace raw <select> elements with ShadCN Select components across all settings views - Move tool-related settings into a dedicated "Tools" section with Wrench icon, separate from the "Layout" section - Add new ShadCN Select UI component (src/components/ui/select.tsx) UI & interaction polish: - Add per-tool color tints to ToolPicker icons (emerald for terminal, sky for browser, orange for git, amber for files, teal for project files, violet for MCP, blue for tasks, indigo for agents) - Add colored header icons across all tool panels (TodoPanel, McpPanel, BackgroundAgentsPanel, BrowserPanel, FilesPanel, ToolsPanel) - Add engine icons to sidebar session items — shows Claude/Codex CDN icons or ACP agent icons via new engine-icons.ts utility - Extract getAgentIcon and getSessionEngineIcon into src/lib/engine-icons.ts - Add "Unqueue" button to queued messages with X icon and destructive hover style, wired through unqueueMessage in useMessageQueue - Redesign AskUserQuestion permission prompt with paginated question navigation (Back/Next), collapse/expand functionality, multi-select checkboxes, step counter, and more compact option cards - Add BashContent output truncation — outputs over 200 lines are collapsed with a "Show full output (N lines)" / "Collapse" toggle - Add ThinkingBlock chunk coalescing — completed thinking chunks are periodically merged into baseText via a 500ms interval to keep the animated chunk list small and prevent unbounded DOM growth Space & project management: - Extract resolveProjectForSpace and getStoredProjectGitCwd into src/lib/space-projects.ts with unit tests - Add activeSpaceProject and activeSpaceTerminalCwd to the orchestrator so the terminal and git panels can resolve the correct working directory when the active project doesn't match the space - Move readLastSessionMap earlier in useAppOrchestrator so it's available for resolveProjectForSpace - Scope useSettings to activeSpaceProject for consistent per-project settings when switching spaces Git panel styling refresh: - Increase foreground opacity across all git panel elements (text, icons, badges, borders) for better readability — e.g. commit hashes from /35 to /45, subjects from /55 to /70, section headers from /45 to /60 - Tighten vertical spacing (mt-1 to mt-0.5, py-1 to py-0.5) - Add colored header icons for git panel sections - Replace raw selects with SettingsSelect in InlineSelector - Consolidate settings shared.tsx: export SettingsSelect alongside SettingRow, remove the raw selectClass export Agent & infrastructure: - Add perf-deep-audit agent definition (.claude/agents/perf-deep-audit.md) for deep performance reviews of Electron/React/Vite code - Use reportError instead of bare log() in sessions IPC handlers - Seed background store even for non-live sessions (remove the liveSessionIdsRef guard) so switching away from a loaded-from-disk session still captures its state - Fix ProjectSection icon picker opening — use controlled DropdownMenu state with openingIconPickerRef flag and onCloseAutoFocus prevention to avoid Radix focus management conflicts - Remove dead useEffect in App.tsx that duplicated glass class logic Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for 2854197 - Browse repository at this point
Copy the full SHA 2854197View commit details -
refactor: enhance AppLayout and ChatView components with improved gra…
…dient handling and viewport height tracking - Update gradient calculations in AppLayout for better visual effects based on light glass settings. - Modify top and bottom fade backgrounds to utilize color-mix for enhanced appearance. - Introduce viewport height tracking in ChatView to optimize layout adjustments during content changes. - Implement ResizeObserver to monitor both content and viewport height changes, ensuring smoother scrolling behavior.
Configuration menu - View commit details
-
Copy full SHA for dd32b80 - Browse repository at this point
Copy the full SHA dd32b80View commit details -
feat: scoped permission rules, local settings source, scroll sync, an…
…d git status fix - Add scoped "always allow" dropdown to permission prompt with per-destination rule persistence (session, local, project, user settings) - Forward updatedPermissions through SDK permission bridge for rule saving - Include "local" in settingSources for all SDK query paths - Extract top scroll progress to a pure helper and sync it on programmatic scrolls - Fix useGitStatus loading flag race with separate tracking ref - Refine glass morphism gradient tuning (lighter titlebar, softer top fade) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for b00cb7b - Browse repository at this point
Copy the full SHA b00cb7bView commit details -
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for 8705c2b - Browse repository at this point
Copy the full SHA 8705c2bView commit details
Loading
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v0.18.1...v0.19.0