Unreleased

v0.16.22026-08-27

Fixed

  • Opening a missing file reported success: OpenFile handed the path straight to the platform opener, and those openers detach and report a bad path through their own UI rather than through an exit status, so a file that did not exist looked identical to a successful open. It now validates the path before launching, matching the check OpenDir and OpenURL already performed.
  • A configured shell that is not installed was silently replaced: an unknown default_shell fell back to the platform default without any message, so the setting appeared to have applied while a different shell actually launched. The substitution is now reported in the status line, consistent with the existing warning for a shell whose path cannot be resolved.
  • Batch launch status messages never appeared: the multi-select limit notice and the resume-interrupted notice were both cleared on the way out of the batch launch, so neither could ever reach the status bar. The stale selection status is now cleared on entry instead, leaving later messages intact.

Changed

  • Dependencies: sqlite 1.57.0, bubbletea 2.0.9, and bubbles 2.2.1, plus astro 7.2.4 and marked 18.0.10 for the website.
  • npm install policy: website installs now enforce a minimum release age, so a freshly published package is not adopted immediately, and esbuild's install script is denied because its platform binary already arrives as an optional dependency and the script is not needed to build.

v0.16.12026-08-24

Fixed

  • Grouped views collapsing to a single group — grouped queries ordered rows by pivot label before applying max_sessions, so the entire row budget was spent on whichever label sorted first and every other group disappeared. The cap now keeps the sessions the active sort puts first, and groups are ordered by label afterwards. This also restores the all time range, which appeared to stop partway through history for the same reason.
  • Excluded words not hiding sessions — the filter matched raw stored text while the list displays summaries with whitespace collapsed, so a phrase typed exactly as shown (Task Invoke against a stored ## Task\n\nInvoke…) never matched. Matching now normalizes both sides, folds case for accented and non-Latin text, and covers checkpoint content in addition to summaries and turns.
  • Group collapse state lost on refresh — an absent expand entry meant both "never shown" and "user collapsed", so the background refresh re-expanded anything collapsed and made the collapse-all key appear to toggle at random. Groups now track whether they have already been given their default state. This also fixes default_collapsed, which was reverted by the first refresh.

v0.16.02026-08-18

Added

CLI

  • dispatch resume — interactively select and resume folder-scoped sessions from a searchable table with full session metadata, incremental result batches, and shared launch behavior. (#392)

Changed

  • Session-list and grouped-query performance — reduce query scans and rendering allocations, improving grouping, rendering, and folder toggling. (#395)
  • Toolchain and dependencies — require Go 1.26.6 and refresh Go and website dependencies.

Fixed

  • Search completeness and filtering — search all user-visible session content fields, preserve uncapped free-text results, and restore excluded-word filtering.
  • Search/resume safety and routing — match exact folders and native descendants, normalize Windows paths, sanitize CSV and terminal output, and prevent command names in multi-word queries from hijacking Dispatch.
  • Background refresh UI — hide the loading indicator during automatic session reloads.

v0.15.02026-08-12

Added

TUI

  • Related sessions in the preview pane — the preview now lists sessions related to the selected one, ranked by shared refs, then repository and branch, then working directory. Press the shown number key to jump straight to a related session. (#183)
  • Project quick-start rows — repositories discovered on disk that have no recorded sessions now appear in the list, so you can start a session in a project directly from Dispatch instead of leaving to run dispatch new. (#178)
  • Named launch sets — save a group of sessions under a name and relaunch the whole set at once. Missing members are reported rather than silently skipped. (#179)
  • Search match highlighting in the preview pane — matches for the active search are highlighted inline in the preview, so you can see why a session matched. (#181)
  • Help rendered from effective keybindings — the help overlay is now generated from your configured keybindings instead of a hardcoded list, so remapped keys show their real values. (#260)
  • Live activity watcher, dispatch new, and resume rename — sessions update live as activity is pushed, plus a new command and a renamed resume flow. (#359)

CLI

  • dispatch path — print only a session's working directory so you can cd "$(dispatch path <id>)". Resolves the session by full ID, alias, short ID prefix, --last, or --current the same way dispatch open does. Errors if the session has no recorded directory or the directory no longer exists.
  • dispatch alias: set, reassign, clear (--clear), or remove (--remove) a session alias from the command line, completing the CLI parity that tag and notes already have. Supports --json.
  • dispatch watch --exec <cmd>: run a command on each session attention transition while streaming. Session context is passed through DISPATCH_SESSION_ID, DISPATCH_SESSION_STATE, DISPATCH_SESSION_PREV_STATE, DISPATCH_SESSION_REPO, DISPATCH_SESSION_BRANCH, DISPATCH_SESSION_FOLDER, and DISPATCH_SESSION_SUMMARY environment variables. Hook output goes to stderr and a failing hook never stops the watch loop.
  • dispatch config validate and dispatch config schema — check a config file against the JSON Schema and print the schema itself. (#259)
  • dispatch config export / import — move your configuration between machines. (#363)
  • dispatch aliases list output — print every session alias in a readable list. (#382)
  • dispatch tags --csv and --markdown — machine- and doc-friendly tag output. (#374, #380)
  • dispatch views --csv — CSV output for named views. (#381)
  • dispatch stats folder breakdown — sessions grouped by working directory alongside the existing repository and branch breakdowns. (#375)
  • dispatch doctor workspace reporting — doctor now flags sessions whose recorded workspace no longer exists. (#362)

Fixed

  • Session state and launch reliability — reject oversized continuation plans, preserve legacy configuration compatibility, keep scoped watch results scoped on metadata failures, propagate watcher cancellation, and surface companion-updater failures.
  • Storage safety and performance — use read/write-only SQLite maintenance, report busy WAL checkpoints, bound Chronicle reindex memory, remove a redundant search query, move event reads off the TUI update loop, and reuse known repository metadata.
  • Installer and release trust — verify future release artifacts with Sigstore identity, use a pinned v0.14.0 checksum trust anchor during migration, publish immutable installer assets, constrain releases to main, and make retry behavior safe.
  • Website and dependency safety — sanitize rendered changelog HTML and enforce strict npm peer dependency resolution.
  • Session repository detection — Dispatch now prefers the live git origin of a session's working directory over the repository recorded at session creation, so renamed or re-pointed remotes display correctly. (#350)
  • Keybinding config mirror driftnew_session and focus_window were present in the key map but missing from the config schema and help groups, so they could not be remapped and were absent from help.
  • Silent ID truncation in session lookups — looking up sessions or session refs by ID silently dropped everything past the first 500 IDs. Both lookups now run in batches, so large launch sets and related-session ranking are correct at any size.
  • Unquoted {cwd} in the new-session command — the working directory is now shell-quoted before substitution, so directories containing shell metacharacters can no longer inject commands.

Changed

  • Screenshot workflow — one command now regenerates screenshots across platforms. (#261)
  • Documentation screenshots — regenerated all 240 UI captures across five themes and synchronized installation, CLI, configuration, sorting, and quality-pipeline documentation with the current code.
  • Automation hardening — pin setup tools, fail CI when required tools cannot install, add Linux ARM64 cross-compilation, and improve Windows/macOS/Linux portability.

Removed

  • Runtime Copilot SDK features: removed semantic AI session search and SDK completion analysis. Session search now uses local SQLite FTS5 and LIKE exclusively, while continuation plans use deterministic plan.md parsing.
  • Recent/frecency sort: removed the confusing launch-frequency sort and its persisted launch statistics. Existing frecency defaults and named views now fall back to updated.

v0.14.02026-07-18

This release turns Dispatch from a TUI-only tool into a scriptable CLI: most session operations are now available as non-interactive commands with JSON output, and the TUI gains a git status overlay plus several navigation and organization features.

Added

CLI commands

  • dispatch open — resume a session by ID, alias, or short ID prefix. Supports --last (most recent), --print (print the resume command without launching), --stdin (batch resume piped IDs), --mode (inplace, tab, window, pane), scoped resume (--repo, --branch, --folder, --current to auto-detect from the working directory), and per-launch --agent, --model, and --yolo overrides
  • dispatch new — start a fresh session from the CLI in the current or a given directory, with the same per-launch overrides as open
  • dispatch stats — session totals and breakdowns by repository, branch, and host type, with --json, --csv, --calendar (activity heatmap), --top, and date/scope filters
  • dispatch search — non-interactive session search with --json, --table, and --ids / --format ids output, --deep search, and repo/branch/date/limit filters
  • dispatch export — save a session as Markdown, JSON, or HTML, with --redact (mask secrets), --stdout, and batch export by --repo, --branch, or --query
  • dispatch configlist, get, set, unset (reset to default), edit (open in your editor), and path
  • dispatch tags — list every tag in use with per-tag session counts
  • dispatch tag <id> — add, remove, or set tags on a session (--add, --remove, --set, --json)
  • dispatch notes — get, set, or clear a session's local notes
  • dispatch views — list named views and switch the active view
  • dispatch aliases — list every session alias
  • dispatch compare — compare two sessions side by side (metadata, files, refs), with --json
  • dispatch info <id> — print a concise summary of one session
  • dispatch watch — monitor attention state across sessions; stream transitions or take a one-shot --once snapshot, with --json and --interval
  • dispatch prune — report and remove stale config entries for sessions that no longer exist (--apply, --json)
  • dispatch man — generate a roff man page
  • dispatch completion — bash, zsh, fish, and PowerShell scripts, with dynamic completion of session aliases and config keys
  • dispatch doctor --json — machine-readable diagnostics; doctor also reports the detected Copilot CLI version and stored session count

TUI

  • Git status overlay (i) — shows the git status of the folder a session is mapped to: current branch and upstream, push/pull stats (commits ahead to push, behind to pull), working-tree counts (staged, modified, untracked, deleted, conflicts), and a scrollable changed-file list. The same push/pull stats appear inline on each session row and in the preview pane
  • Open linked reference (b) — open a session's linked pull request, issue, or commit on github.com
  • Frecency sort — rank sessions by a blend of launch frequency and recency
  • Session tags (#) — attach comma-separated tags and filter with the tag: search token
  • Session aliases (A) — give a session a short alias and resume it with dispatch open <alias>
  • Fullscreen preview zoom (z) — view the preview pane fullscreen
  • Configurable list columns — choose which optional columns (repo, folder, turns, host) appear in the session list
  • Jump navigationg / Home jump to top, G / End jump to bottom
  • Date search tokensafter: and before: narrow the list by session activity date
  • Waiting notifications — optional desktop notification when a session enters the waiting state
  • Configurable keybindings — remap any key via config.json
  • Split-pane launch — open sessions in a tmux split when running inside tmux
  • Open working directory (O) — open the selected session's working directory in the system file manager (Explorer, Finder, or the Linux file manager)
  • Bulk hide and favorite — with sessions marked via Space, h and * apply to the whole selection instead of just the cursor session
  • Search query argument — pass a search string on the command line (dispatch auth or dispatch fix auth bug) to launch the TUI with the search box pre-filled and the list already filtered

Configuration

  • DISPATCH_CONFIG — environment variable to override the config file path
  • Configurable auto-refresh — set auto_refresh_seconds (also in the settings panel) to tune the session-list poll interval, or set it to 0 to turn polling off and refresh only with r or reindex

Changed

  • Upgraded Go and website dependencies to latest

Fixed

  • Hardened the swarm CLI commands: open scoped resume now picks the most recently active match, open --current errors instead of resuming an unrelated session when nothing can be detected, watch counts interrupted sessions separately, stats --csv neutralizes spreadsheet formula injection, prune refuses to apply against an empty store, and tag resolves ID prefixes

v0.13.02026-06-30

Added

  • Markdown export (X) — export selected sessions as structured Markdown documents to ~/.config/dispatch/exports/
  • Git workspace badges — colored status indicators (dirty, untracked, ahead, behind, missing) next to each session based on its working directory
  • Search tokens — structured filtering in the search bar with repo:, branch:, folder:, host:, status:, has:plan, is:favorite, is:hidden
  • Preview secret redaction — automatically masks Bearer tokens, GitHub PATs, Azure connection strings, and .env secrets in the preview pane (toggle in config)
  • Local session notes (m) — attach personal notes to any session, stored locally in config
  • Named views (V) — save and switch between filter presets (e.g., "Work", "Personal")
  • Open touched files (F) — file picker overlay to open files a session touched in your system editor
  • Activity timeline (T) — chronological view of all session events (turns, checkpoints, files, refs) in the preview pane
  • Compare sessions (D) — side-by-side comparison of two selected sessions (metadata, files, refs with diff highlighting)
  • Command palette (:) — filterable overlay listing all available commands with keyboard shortcuts
  • "Git changes" filter in the attention picker

Fixed

  • Security: replaced cmd /c start with explorer.exe for file opening on Windows to prevent command injection
  • Reduced false positives in secret redaction (20-char minimum for Bearer, segment boundaries for .env keywords)

Changed

  • Upgraded all Go dependencies to latest
  • Extracted string constants for sort fields, time ranges, pivot modes, and sort orders (goconst compliance)

v0.12.12026-06-24

Changed

  • Compacted session list row layout — merged check and cursor into a single selector column, reduced tree indent from 4 to 2 spaces, and fixed host icon to a constant-width column for consistent text alignment
  • Added tests for narrow-width rendering, tree-mode indent, and selector state transitions
  • Updated indirect dependencies (charmbracelet/ultraviolet, charmbracelet/x/exp/slice)

v0.12.02026-06-24

Added

  • Word filtering — new excluded_words config option and Settings panel field. Enter a comma-separated list of words; sessions whose name or turn content contains any word (case-insensitive) are hidden from the list

v0.11.12026-06-21

Changed

  • Updated all Go dependencies to latest (copilot-sdk v1.0.2, sqlite v1.53.0, lipgloss v2.0.4, x/sync v0.21.0, x/sys v0.46.0, and others)
  • Updated astro to v6.4.8 in website
  • Bumped actions/checkout from v6 to v7.0.0 in CI workflows
  • Applied npm audit fixes (postcss, vite)

v0.11.02026-06-08

Added

  • View-state persistence — sort field, sort order, pivot/grouping, time range, and preview visibility are now saved to config.json on every change and restored on next launch
  • default_sort_order config field ("asc" / "desc") for persisting sort direction
  • Config versioning and migration system (config_version field) to safely evolve settings across dispatch updates
  • Migration v0→v1: auto-converts deprecated launchInPlace boolean to launch_mode string

Documentation

  • Added default_sort_order to README config options table
  • Noted persistence behavior on sort, sort order, pivot, and preview toggle in keybindings docs

v0.10.92026-06-07

Fixed

  • Release workflow changelog gate now uses inline grep (mage not available in CI runner)

v0.10.82026-06-07

Fixed

  • Added changelog entries for v0.10.0-v0.10.7 (were missing from release archives)
  • Documented DISPATCH_SESSION_STATE environment variable in CLI help and website
  • Fixed absolute machine-specific paths in docs/keybindings.md
  • Updated CONTRIBUTING.md Go version (1.26.4) and project structure

CI

  • Release workflow now verifies CHANGELOG.md has an entry before tagging (mage changelogCheck)

v0.10.72026-06-07

Changed

  • Moved ColorScheme type from tui/styles to config package (fixes upward dependency)
  • Decoupled copilot package from data via SessionQuerier interface
  • Moved Version to dedicated internal/version package
  • Extracted applySessionFilters/applyGroupFilters helpers (eliminates 6 repeated filter chains)
  • Added closeRows helper to eliminate nolint:errcheck in store.go
  • Added sdkContext helper for Copilot SDK operations
  • Replaced FormatInt wrapper with direct strconv.Itoa calls
  • Replaced time.Sleep with timer+select in waitForLog for clean shutdown
  • Used typed SQLite errors instead of string matching in store.go
  • Added context.Context parameter to Maintain()

Fixed

  • Deep search and AI session results now show attention/plan/work status indicators immediately
  • io.LimitReader added to GitHub API response decoding (1 MB cap)
  • Improved ChronicleReindex output matching reliability
  • Removed 4 dead functions (hiddenCount, launchNewSession, IconHidden, IconList)

CI

  • Pinned golangci-lint to v2.12.2 (was latest)
  • Cross-compile job now runs on pushes to main (was PR-only)
  • Added 60% coverage threshold enforcement

Tests

  • Added 740+ lines of new tests: handler coverage, components, platform, chronicle, copilot
  • Fixed timing-dependent TestStop_TerminatesLoop in dbwatch
  • Removed trivial constant-value tests

v0.10.62026-06-06

Fixed

  • Go 1.26.4 stdlib CVE mitigations
  • DBWatcher concurrency fixes

Dependencies

  • Updated indirect dependencies

v0.10.52026-06-05

Dependencies

  • Updated all Go dependencies to latest

v0.10.42026-06-05

Changed

  • Session refresh uses PRAGMA data_version for efficient change detection
  • Simplified reindex flow

v0.10.32026-05-21

Fixed

  • Quality sweep: code review, security, and docs fixes (#115)
  • Installer uses unauthenticated redirect for version resolution

v0.10.12026-05-18

Fixed

  • Authenticate GitHub API requests in update command (#104)

v0.10.02026-05-18

Changed

  • Decomposed Model struct into focused sub-models (#78)
  • Extracted Update method into per-message handler functions (#77)
  • Consolidated filter methods with shared predicate helper (#34)
  • Consolidated dot-rendering with shared renderDot helper (#40)
  • Deduplicated ScanAttention preamble with shared scanner helper (#39)
  • Deduplicated Nerd Font detection into shared helper (#80)
  • Extracted hardcoded model name to package-level constant (#81)
  • Parallelized sequential queries in GetSession with errgroup
  • Replaced correlated COUNT subqueries with JOIN-based aggregation

Fixed

  • Goroutine leak in waitForDBChangeCmd when channel is nil (#57)
  • Protected mutable style variables with sync.RWMutex (#51)
  • Prefer errors.Is/As over string-based error matching (#50)
  • Propagated context in copilot client where safe (#52)
  • Reused HTTP client and propagated context in update command (#64, #65)
  • Handled os.UserHomeDir error in store initialization (#79)

Performance

  • Added missing index on session_files.session_id (#60)
  • Cached padding string in session list render loop (#62)

CI

  • Added Dependabot config for Go, Actions, and npm (#71)
  • Pinned Go dev tool versions to prevent supply chain attacks (#76)
  • Added coverage profiling and artifact upload (#69)
  • Used PR workflow instead of direct push in release (#75)
  • Aligned pages.yml action versions with other workflows (#68)

Tests

  • Added coverage for self-update binary replacement (#85)
  • Added coverage for doAnalyze completion analysis (#84)
  • Added coverage for work status scanning pipeline (#83)
  • Added coverage for session launch and terminal detection (#82)
  • Added coverage for Windows chronicle PTY and dbwatch (#86)
  • Added meaningful assertions to TUI view and launch tests (#56)

Documentation

  • Documented all network-facing features in SECURITY.md (#72)
  • Documented glamour/lipgloss dual-dependency (#59)

Dependencies

  • Updated indirect dependencies to latest stable versions (#44)
  • Bumped Astro to 6.3.3, TypeScript to 6.0.3
  • Bumped CI actions: golangci-lint-action 9.2.0, goreleaser-action 7.2.1, setup-node 6.4.0

v0.9.02026-05-14

Added

  • FTS5 full-text search with BM25 ranking (falls back to LIKE for older CLI versions)
  • Session refs integration: searching numbers matches PR/issue/commit references
  • Incremental auto-refresh: session list updates within 2 seconds when Copilot CLI writes new data
  • Finer attention classification: Working, Thinking, and Compacting states
  • Host type icons: distinct icons for CLI, Cloud, and Actions sessions

Changed

  • Reindex renamed to "Rebuild Index" — now a manual repair action
  • Normal session refresh is automatic via DB change detection (no reindex needed)

Fixed

  • Time filter showing sessions from wrong hours due to timezone offset in SQLite comparison
  • Expand/collapse badge icons confused with sort direction controls (now uses distinct symbols)

Dependencies

  • Updated all Go dependencies to latest (38 packages)
  • github.com/github/copilot-sdk/go: v0.2.0 → v0.3.0 (breaking change handled)
  • charm.land/bubbletea/v2: v2.0.2 → v2.0.6
  • charm.land/bubbles/v2: v2.0.0 → v2.1.0
  • modernc.org/sqlite: v1.47.0 → v1.50.1
  • go.opentelemetry.io/otel: v1.35.0 → v1.43.0

v0.8.02026-04-08

Added

  • Work status detection — analyze plan.md files to identify sessions with incomplete planned work (#32)
    • New WorkStatus type: Unknown, Complete, Incomplete, NoPlan, Analyzing, Error
    • Plan parsing to detect incomplete tasks (unchecked checkboxes, pending items)
    • Copilot SDK analyze_completion tool for AI-powered completion analysis
    • Colored dot indicators in session list showing work completion status
    • Work status display in the preview panel metadata
    • Work status filtering via ! status picker (incomplete, complete)
    • Status bar shows scan progress and completion summary
  • Shift+arrow range selection (Shift+↑ / Shift+↓) — select a contiguous range of sessions using Shift+Up/Down arrow keys, matching standard OS file manager behavior (#33). Anchor is set on first shift-press; plain arrow resets. Correctly skips folder nodes in tree mode
  • Conversation sort default — preview pane conversation now defaults to newest-first (descending). Toggle with o key or click the sort arrow next to "Conversation"
  • Interrupted sessions in demo modedispatch --demo now shows orange ⚡ interrupted sessions alongside waiting, active, stale, and idle states
  • ANSI-clean preview selection — copying text from the preview pane now strips ANSI escape codes for clean clipboard content

Changed

  • ! status picker now includes "Incomplete work", "Complete work", and "Favorites only" rows
  • Work status scan no longer runs on startup — press R to scan explicitly
  • Conversation sort click target enlarged — clicking anywhere on the "Conversation" header zone (separator, label, or gap) toggles sort order
  • conversation_newest_first config now defaults to true; explicit false preserved when saved

Breaking — Keybinding Overhaul

  • OL: "Open selected" renamed to "Launch selected" and moved to L (frees O so o/O are no longer an unrelated pair)
  • F removed: "Filter favorites" absorbed into ! status picker as "Favorites only" row
  • M removed: "Filter plans" absorbed into ! status picker as "Has plan" row
  • RN: "Resume interrupted" moved to N (uppercase; n = next waiting — related concepts)
  • R = Scan work status (new): Explicitly scans all sessions with plans for work completion status

Security

  • Eliminate TOCTOU race in readFileIfExists and WriteContinuationPlan — replaced Lstat-then-operate with open-then-Fstat pattern
  • Harden stripDelimiters against spaced delimiter variant bypass in prompt injection defense
  • Add cancellable context to AI work status scan with 10-minute timeout

Fixed

  • AttentionInterrupted missing from sort priority — now correctly sorted at priority 2
  • Deep search results and AI session loads now apply full filter chain (attention, plan, work status)
  • AI work status fallback for sessions without AI results — continuation plans preserved
  • Symlink overwrite vulnerability in WriteContinuationPlan — added Lstat safety check
  • Auto-generated section feedback loop in plan parser — stripAutoGeneratedSection now prevents re-parsing cycles
  • Blocking I/O moved off UI thread for work status scanning
  • R key now re-scans plans before work status for fresh data
  • Race detector guard in mage preflight — step 8 now skips gracefully when CGO/gcc unavailable
  • Flaky test timing in copilot search lock test — replaced time.Sleep with channel-based synchronization

v0.7.02026-03-23

Fixed

  • Release workflow: move contributor notes to temp dir before goreleaser to avoid archive contamination

v0.6.02026-03-23

Fixed

  • CI: add rebase before push in release workflow to prevent non-fast-forward failures

v0.5.02026-03-23

Re-release of v0.4.0 — no functional changes. Tag correction.

v0.4.02026-03-23

Added

  • Expand/collapse all toggle — collapse or expand all folder groups in tree view with a single key (#31). New default_collapsed config option
  • Copy session ID (c) — copy the selected session's ID to the system clipboard. Click the ID row in the preview pane for the same effect (#27)
  • "Has plan" status filter — the ! attention status picker now includes a "Has plan" row to filter sessions with plan.md files (#29)
  • Plan indicator in preview — sessions with a plan.md file show "Plan: Yes" in the preview pane metadata (#22)
  • Configurable preview position — move the preview pane to right, bottom, left, or top (#18)
  • Conversation sort toggle (o) — toggle between oldest-first and newest-first conversation display in the preview pane; also clickable via the sort arrow in the conversation header
  • Contributor recognition — automated contributor attribution in releases (#24)
    • mage contributors target regenerates CONTRIBUTORS.md from git history
    • go run ./cmd/contributors/ CLI tool for release-time contributor extraction
    • Co-authored-by trailer parsing (recognizes AI pair programming)
    • Bot filtering (excludes CI bots, keeps Copilot co-authorship)
    • First-time contributor detection and highlighting
  • Charm ecosystem v2 — upgraded bubbletea, bubbles, lipgloss, glamour, and copilot-sdk to v2 (#26)

Changed

  • Copy session ID keybinding changed from y (yank) to c (copy) for better discoverability
  • CI skips runs for non-code changes (docs, markdown); pages actions pinned to SHA

Fixed

  • Git Bash MinTTY detection and path quoting (#15, #16)
  • Windows Terminal split-pane flags corrected (-H/-V instead of invalid --direction) (#20)
  • Worktree PATH shadowing, session ID validation, folder launch constant extraction
  • M-03 and M-05 security findings from red team audit
  • LF line endings enforced via .gitattributes (eol=lf)
  • TestLaunchSession no longer spawns zombie terminal processes (#28)
  • gofmt formatting stabilized across doc comments

v0.3.02026-03-19

Added

  • Session favorites (* / F) — star sessions with * key, filter to show only favorites with F, persistent in config
  • Multi-session open — select multiple sessions with Space, open all at once with O
    • a / d to select all / deselect all
    • Ctrl+click for mouse selection, Shift+click for range select
    • Selection count displayed in footer
    • ✓ indicator on selected sessions
  • Attention indicators — colored dots showing real-time session AI activity status
    • Five states: waiting (purple), active (green), stale (yellow), interrupted (orange ⚡), idle (gray)
    • Determined by scanning session-state lock files and event logs
    • n to jump to next waiting session
    • ! to open attention status filter picker
    • Auto-refreshes on every reindex
  • Workspace recovery — detect sessions interrupted by crash/reboot and resume them
    • New "interrupted" attention status (orange ⚡) for sessions killed mid-work
    • Stale lock file detection with 72-hour window (covers weekend crashes)
    • R to batch-resume all interrupted sessions
    • workspace_recovery config toggle (default: on)
    • Defensive lock file parsing with graceful degradation
  • Self-update (dispatch update) — downloads latest release from GitHub and replaces in-place
    • SHA-256 checksum verification
    • Interprocess lock prevents concurrent updates
    • Background version check on every launch with 24-hour cache
    • Post-exit notification when a new version is available
  • Preview pane shows absolute local timestamps with timezone
  • Preview pane shows full session ID (no longer truncated)
  • Demo mode enhancements (fake attention data, realistic timestamps)
  • WSL cross-testing (mage testWSL) for Unix code path coverage
  • Race detection as separate preflight step
  • Install verification as preflight step

Changed

  • Auto-version release workflow with patch/minor/major dropdown

Fixed

  • Demo mode timestamp format mismatch — timestamps now use RFC3339 format (fixes 1h range showing no sessions)
  • Date pivot now groups sessions by local timezone instead of UTC (fixes #5)
  • Reindex cancel crash — stale log pump messages discarded after cancel
  • Reindex overlay log text left-alignment fixed
  • Removed excluded directory count from header badges
  • Removed hidden session count from footer

v0.1.02026-03-10

Added

  • Full chronicle reindex via Copilot CLI pseudo-terminal (r key or --reindex)

    • Launches copilot.exe in ConPTY (Windows) or creack/pty (Unix)
    • Sends /chronicle reindex for complete ETL rebuild (sessions, turns, checkpoints, files, refs)
    • Streaming log overlay shows real-time progress
    • Falls back to FTS5 index maintenance if Copilot CLI binary is not found
    • Footer shows last reindex time and r reindex hint
  • Terminal UI for browsing GitHub Copilot CLI sessions

  • Full-text search across session summaries, conversations, checkpoints, and file references

  • Two-tier search: quick (session fields) and deep (turns, checkpoints, files, refs) with debounce

  • Filter panel with time range (1h, 1d, 7d, all) and sort options

  • Sortable by updated, created, turns, name, or folder

  • Grouping/pivot modes: folder, repository, branch, date, or flat list

  • Preview pane with chat-style conversation display (side-border formatting)

  • Pane-aware mouse scrolling (scroll the pane under cursor)

  • Clickable header elements (search, filters, sort, pivot)

  • Click to select, double-click folders to launch new session

  • Four launch modes: in-place, new tab, new window, split pane

  • Split pane launch mode for Windows Terminal with configurable direction (auto, right, down, left, up)

  • Configurable shell, terminal, agent, model, and custom commands

  • Session hiding with per-session toggle

  • Directory exclusion via configuration

  • Cross-platform support (Windows, macOS, Linux)

  • Windows Terminal theme detection and inheritance

  • Nerd Font detection with fallback icons

  • Vim-style navigation (j/k) alongside arrow keys

  • Configuration persistence in platform-specific config directory

  • disp shorthand alias created by installer

  • Read-only database access with parameterized queries

  • Session ID validation and shell command escaping