- add context-prune plugin (bcfe51a)
- add custom CSS theming extensibility layer (e917a61)
- add daily-log, oncall-log, web-search, and cr-reader plugins (b3346ad)
- add launchd service for persistent background operation (9fcf70c)
- add LSP config for Swift sourcekit-lsp support (9868c9e)
- add LSP tree-sitter tools, taskei, slack, outlook, internal-search plugins (62b28e7)
- add markdown rendering to knowledge-search and session-search plugins (05a9e77)
- add pi-autoresearch plugin (7aa8bf4)
- add pi-graph-search plugin (eca28ae)
- add plugin runtime core (types, registry, context, error boundary, slot consumers) (311a6f6)
- add scratchpad and session-diff plugins (c4783a4)
- add status-bar slot for persistent plugin indicators (9404858)
- add token-based auth for network-exposed mode (284733f)
- add viewport-fit=cover meta + fix tsconfig types for clean builds (ed361a8)
- backend: inject resume hint on session reload + extend idle reap to 30h (aa118fc)
- centralized shortcut registry with customizable keybindings (c70300c)
- ChatPage mobile layout with drawer sidebar, overflow menu, fullscreen panels (2c7bb4c)
- chat: rich rendering for pi-conductor + subagent + plugin notifications (d3a5938)
- command palette (⌘K), research docs (c5de1a8)
- configurable vault path for Obsidian integration (827ef41)
- convert backend to TypeScript (9c3fe3f)
- document-panel: add binary file detection and UI gating (dbe9b44)
- document-panel: add DocxRenderer, SpreadsheetRenderer, and ImageRenderer (a49cf2d)
- document-panel: add foundation types and packages for multi-format support (56f0bed)
- document-panel: add PdfRenderer with lazy-loaded react-pdf viewer (928a3a8)
- drag-and-drop file uploads, subagent dock, and UI improvements (cc5fb1b)
- extend plugin runtime and add 4 tool-renderer plugins (3636cf4)
- files: support ?tail=<bytes> on /api/file-read for huge logs (22ecacc)
- frontend: make rendered mermaid diagrams resizable and downloadable (cd5dea6)
- graceful pi process shutdown for memory consolidation (bb179c2)
- initial release (89f2509)
- inline comments in document panel + per-slot panel state (b168c4d)
- ios: add app icon — amber gradient with pie emoji (c89a394)
- ios: add AppIntents shortcuts (Ask Pi, Send to Pi, status, chat list) (01d40cc)
- ios: add auth token support to iOS app (57035d7)
- ios: add Contacts integration (slice 4) (ea70add)
- ios: add default model + thinking level settings for new chats (9f578f0)
- ios: add diff viewing with versions tab and LineDiffView (Slice 4) (f3c7395)
- ios: add EventKit Calendar integration (Slice 2) (1736b3d)
- ios: add EventKit Reminders integration (Slice 3) (8870f36)
- ios: add full-text conversation search across all chats (94d1a5d)
- ios: add HealthKit integration (9bfc690)
- ios: add Location integration (Slice 5) (e1eaf27)
- ios: add per-session working directory picker (2225a8b)
- ios: add PiDashShare extension source files (ea883ae)
- ios: add session search, slot tags, and resume with file path (dadfaba)
- ios: add share sheet and copy toolbar to FileViewerSheet (Slice 3) (3b94f95)
- ios: background refresh polling for notifications when app is backgrounded (075e56a)
- ios: configurable working directory for new chats (784ed21)
- ios: cost bar, thinking level sync, git branch pill, chat sheets (794d45f)
- ios: default thinking to medium, filter models to sonnet/opus 4.6 (fbeba2e)
- ios: frequency-based project picker replacing static pinned dirs (1c50489)
- ios: image and document attachments (ffa97da)
- ios: implement command UI system — slash commands, palette, keyboard toolbar, skills rail (a73951a)
- ios: implement iPad NavigationSplitView for split-screen chat (9679a5e)
- ios: inline image rendering in assistant messages and tool results (e009dcd)
- ios: local notifications for chat events (f90cf8a)
- ios: menu-based new chat + CWD picker in share extension (4931ff0)
- ios: rename chat from within chat view (ee8aef6)
- ios: rich system messages for process updates and subagent events (fcdbe7e)
- ios: rich tool views — read/edit/write/bash with diffs and file previews (abdef48)
- ios: slice 1 — artifact cards & FileViewerSheet stub (f15b666)
- ios: Slice 1 — Xcode project scaffold + SPM dependencies (4f71912)
- ios: slice 2 - full-screen file viewer with markdown, code, and image support (4354a1c)
- ios: Slice 2 — real scroll detection, no-jank streaming, send-button spring (452cbfb)
- ios: slice 3 - slot rename, message copy, thinking duration, model in nav (c9cba96)
- ios: Slice 4 — context usage bar, notification badge, session history browser (8ca9a7e)
- ios: slice 5 — timestamps on tap, empty state prompts, temporal grouping, reduced motion, dynamic type (83ed180)
- ios: slice 6 — speech recognition voice input (cdd9753)
- ios: Slices 2-6 — networking fixes, chat list, chat view, tool cards, settings polish (3b6b495)
- ios: tag editor sheet with suggestions and inline management (cc6e306)
- ios: unified command palette hub with model, thinking, rename, tags, and commands (245ba9e)
- ios: wire App Group + migrate ServerConfig to shared UserDefaults (3f8c3c9)
- ios: wire PiDashShare target into project.pbxproj + add xcscheme (c2cce5e)
- ios: working camera with permissions (b75d4a3)
- mobile layout with bottom tab bar and responsive topbar (cba1a6a)
- mobile-responsive other pages + Tailscale start script (471306b)
- phase 2 — status prominence, loading skeleton, toolbar cleanup (82f02c4)
- phase 3 — performance, search, terminal theme, cn() utility (1b65658)
- pinned project directories for quick session launch (8168e52)
- plugins: add demo plugin (Phase 4) (2126761)
- plugins: add Vite codegen plugin and plugin loading (Phase 3) (2da80bc)
- plugins: pi-conductor — rich tool-renderers for ensemble_* tools (b830322)
- referenced files panel, path completion, image handling, backend improvements (fb03b06)
- session search picker, remove notifications/history panels, Cmd+L in welcome view, native text shortcuts in inputs (8c71ca2)
- share-extension: add quick action chips (chat/summarize/extract/vault/research) (ff3868a)
- show custom styles as color-swatch cards in Display tab (746a773)
- slots: surface pi's resolved model and thinking level (5e99f55)
- split-pane view for side-by-side session comparison (487de72)
- startup error indicator in topbar (5c496bd)
- system prompt viewer, updated app icons, settings and styling tweaks (e1bc9b9)
- theme picker sub-mode in command palette (88478a2)
- theme: add Rosé Pine Glass theme + transparent desktop window (49d1c11)
- token/cost tracking, enhanced context gauge, status-grouped sessions (5b9b741)
- tools: forward structured partial-result details to plugin renderers (cc50407)
- ui: add download buttons on file panels and tool cards (dc60b6d)
- ui: add Loops page for autoloop and ralph sessions (8b3eb80)
- unified theme grid — built-in and custom themes in one card (c7047d4)
- widget: add PiDashWidget WidgetKit extension with deep link handling (59ae4c2)
- wire plugin slots into App, ToolCallBlock, and SettingsPage (Phase 2) (5ae32e3)
- a11y: keyboard nav for session, history, and notification rows (75215fa)
- add --liftoff-only and --wasm-lazy-compilation to prevent V8 WASM OOM (05e8523)
- add diagnostic logging for session restore on server restart (a1d21f6)
- add health check watchdog for dead pi RPC processes (1d2659d)
- async state persistence + stall detector to prevent mid-stream hangs (f59e7c6)
- backend: expand tilde in cwd before passing to pi-manager (5031a48)
- don't overwrite user-renamed session titles with auto-generated names (c746c04)
- exit on EADDRINUSE instead of running as zombie (0eff78a)
- files: resolve workspace-relative paths against slot cwd (ae7d728)
- force remount theme picker dialog to clear stale search text (a182ed0)
- frontend: update plugin-registry absolute paths for local machine (a6d3c79)
- guard against double-start and add crash diagnostics (134da68)
- hooks violation in ToolCallBlock, bind host configurable, regex bug, shell injection, df platform compat (c629b6d)
- ios: context usage bar showing 1962% — normalize percent from 0-100 to 0.0-1.0 (7b36b7c)
- ios: fix double slashes in command palette, add Attach chip (453d837)
- ios: include /reload in command palette — useful for picking up new extensions (8479221)
- ios: include auth token in local-file image URL fetches (f0c9e8f)
- ios: move command actions into input bar, remove skills rail (7b319f5)
- ios: persist + attach auth token on REST requests (8a5e4e8)
- ios: prevent CancellationError from being wrapped in APIError (edb79e7)
- ios: prevent duplicate slot on create (race with WS broadcast) (f1b73ce)
- ios: refresh chat messages on appear and foreground return (288469c)
- ios: replace share sheet Picker with explicit list buttons (c2b9074)
- ios: restore Picker UI for share sheet with proper sort order (2a5c753)
- ios: restore share extension target + fix theming build errors (8231a7b)
- ios: reverse share sheet slot list order (5d44815)
- ios: reverse share sheet slot order — menu picker renders bottom-up (e9d5379)
- ios: scroll overshooting past content bottom (2c42cf9)
- ios: share extension image payload format and multi-content handling (ccb30c8)
- ios: share sheet slot sort — use string comparison for ISO timestamps (6a4af92)
- ios: show notification banners in foreground via UNUserNotificationCenterDelegate (44a5ecb)
- ios: slash commands sent with double slash prefix (7ced305)
- ios: slice 1 — copy feedback, return key, model filter (8ff10ca)
- ios: slot timestamps showing 'Just now' — remove updatedAt override in fetchSlots (858e78a)
- ios: sort chat list by last activity, track updatedAt from WS events (c205074)
- ios: sort share sheet sessions by most recently updated (f3f400c)
- ios: stale blue dot badges on old conversations (e8aaa93)
- ios: stop 'Disconnected' banner from showing during normal connection (f67ab8a)
- ios: streaming, ATS, keyboard, model picker — first working build (07319c6)
- ios: suppress CancellationError banners across all async paths (e2ed28f)
- ios: sync streaming state with server on loadHistory (12883a1)
- ios: tappable connection banner with retry + progress indicator (c7390a1)
- ios: tapping notifications now navigates to the relevant chat (55094a5)
- ios: use unstructured Task for initial load to prevent SwiftUI cancellation (25bb5ea)
- ios: wire ChatEmptyStateView + gate ChatView animations on reduceMotion (a9a34f2)
- make chat input independent per session slot (fb00bda)
- mobile panel overlays respect safe areas + prevent scroll chaining (d577e6c)
- mobile: touch targets, safe areas, a11y improvements (af0cfd7)
- mobile: WS chunk dedup, iOS zoom prevention, keyboard-aware nav (2e82c96)
- normalize image payloads to pi's expected format (cfc3dda)
- pi-manager,SystemMessage: pi-conductor cross-repo defenses for items 1 + 11 (e9d2a8a)
- pi-manager: disable idle reaper for pi-conductor compatibility (bbd5546)
- pi-manager: gate followUp on outstanding prompts, not pi.running (8655002)
- pi-manager: repair stuck-turn watchdog (agent_start activity bump + tool tracking) (810cd77)
- prevent false startup_error on /reload (1c596f0)
- prevent stale background poll notifications (6328eee)
- prevent stale WS handlers, exclude /ws from SW cache, add message retention limit (269de11)
- proper mobile responsive layout for iPhone/PWA (e464f55)
- pull Tailscale IP from env instead of hardcoding (f7ca844)
- reload, scroll preservation, comment visibility, panel width, slot scroll (4bc1844)
- resolve both pre-existing test failures (1f9b29d)
- resolve pi-memory path dynamically, remove stale doc review files (d1e4a14)
- session stability improvements (8c837dc)
- session timestamps show actual last activity, not restart time (bec3bbd)
- session-diff sidebar hidden by default, toggleable (5e6c0f9)
- skip stuck turn abort while tools are actively executing (e1fdb96)
- slot timestamps — server sends created_at/updated_at, iOS parses them (31bc2be)
- ssh: use autossh and tighter keepalives for the dashboard tunnel (8460f54)
- strip injected platform blocks from user messages on session restore (5020ba2)
- stuck sessions, startup crash detection, and share extension target (4a34a73)
- surface mid-turn errors and keep spinner active during tool calls (4f764e5)
- ui: loading state for model picker + aria-expanded on ToolGroup toggle (9f612a1)
- use Map key in removeClaims to prevent registry corruption (ba840c0)
- use server running state instead of stale local isStreaming (1a589a7)
- wrap markdown tables in horizontal ScrollView for iPhone (0904b9e)
- pi-manager: remove 5-min stuck-turn force-abort from _healthCheck (dd33d3c)