Skip to content
Permalink

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
Choose a base ref
...
head repository: OpenSource03/harnss
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.19.0
Choose a head ref
  • 4 commits
  • 66 files changed
  • 2 contributors

Commits on Mar 11, 2026

  1. 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>
    OpenSource03 and claude committed Mar 11, 2026
    Configuration menu
    Copy the full SHA
    2854197 View commit details
    Browse the repository at this point in the history
  2. 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.
    OpenSource03 committed Mar 11, 2026
    Configuration menu
    Copy the full SHA
    dd32b80 View commit details
    Browse the repository at this point in the history
  3. 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>
    OpenSource03 and claude committed Mar 11, 2026
    Configuration menu
    Copy the full SHA
    b00cb7b View commit details
    Browse the repository at this point in the history
  4. chore: bump version to 0.19.0

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    OpenSource03 and claude committed Mar 11, 2026
    Configuration menu
    Copy the full SHA
    8705c2b View commit details
    Browse the repository at this point in the history
Loading