Repository navigation
Conversation
- Add is_path_ignored guard in Rust status() for libgit2 WT_NEW drift - Add is_path_ignored post-filter in get_diff() for untracked diffs - Rewrite branch_diff_stats() with parity-first approach excluding ignored files - Add frontend sanitizeStatus() filter in GitStore as belt-and-suspenders - Add 12 regression tests for ignored file edge cases - Add demo script runner infrastructure with data-demo attributes - Add DS_Store fix plan document
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c65e5774fd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const hasAssistantMessage = session.messages.some((message) => message.role === 'assistant'); | ||
| return session.isAgentRunning && hasAssistantMessage; |
There was a problem hiding this comment.
Track new assistant output before marking streaming started
waitForStreamingStarted resolves as soon as the session is running and any assistant message exists, which is true immediately in multi-turn sessions that already have prior assistant replies. In that case waitForStreaming can complete before the current turn emits its first chunk, so subsequent demo steps run too early and become flaky; this is reproducible when running a script in an existing chat instead of a fresh session.
Useful? React with 👍 / 👎.
…snap CSS animation on `is-clicking` was overriding the entire transform property, causing the cursor to snap to 0,0 during clicks. Switch to inline transform so translate3d and scale stay in sync.
…kens Replace Radix 12-step gray/accent scale with Orbit's 10-step primitive scale (orbit-100..1000) and semantic token layers (surfaces, controls, borders, git status). Eliminates hardcoded hex values and inline CSS variable references across 60+ components in favor of meaningful Tailwind classes. Adds design documentation for the new color architecture and refactor plan.
Remove conditional logic that switched between a simple Select dropdown (when source control was open) and the full Popover branch picker. Now always shows the Popover with search, branch list, and create branch.
…tore refresh - Skills marketplace with installed/marketplace tabs, scope popover, and skeleton loading - New Rust marketplace backend and path utilities - Sequenced refreshSkills in commands store to prevent stale overwrites - Tool widget consistency updates across all 14 widgets - Skill definitions and tauri mock updates for marketplace support - Changelog, plans, and tests for new features
Improve browser screenshot pipeline with Rust-side decorum screenshot capture, fix browser tool handler routing, and add MCP server enhancements for screenshot tools. Includes tests and updated changelog.
…an docs - Enhance browser MCP server screenshot handling and test coverage - Update Rust browser commands with expanded screenshot-to-file support - Refine browser tool handler and API layer for screenshot capture - Add BROWSER-SCREENSHOT-FILE-PLAN and MARKETPLACE-TRENDING-TOP-PLAN docs - Update agent-browser-integration plan with latest architecture
Add skills_marketplace_browse Tauri command with Trending/Top pill toggle
in the MarketplacePane. Skills are fetched from skills.sh server-rendered
pages and parsed from Next.js RSC payloads.
Fix RSC parser: replace depth-based brace matching (which couldn't reach
skill objects nested at depth 2 inside {"initialSkills":[...]}) with a
marker-anchor approach that finds "skillId" occurrences and extracts the
nearest enclosing {...} object. O(n) and nesting-depth agnostic.
…elcome page redesign, and expanded test coverage - Add iOS runtime backend with MCP server, service lease manager, and session wiring - Improve browser MCP server with ref-epoch tracking, snapshot truncation, and timeout handling - Add image preview component for file viewer with SVG source toggle - Redesign welcome page with ASCII dither background and blur reveal effects - Add browser tool handler improvements and Rust browser commands expansion - Add comprehensive test coverage for browser, file viewer, and activity panel - Add Claude commands (audit-spec, implement, prompt, spec) and Codex skills - Update docs with iOS runtime plan, image preview plan, OAuth fix, and CSP transport
Replace icon-heavy tool headers with verb-based labels (Reading, Edited, Ran, Searching, etc.) and bump text to text-base for better readability. Remove HyperText rotating loader in favor of minimal ShimmerText "Thinking" indicator. Redesign message actions: replace like/dislike with copy + report (Sentry icon) + rewind, use delayed hover state instead of CSS group-hover. Simplify thinking box by removing sparkle icon. Update inline code styling to use --primary color tinting and switch textarea focus from box-shadow to outline.
Migrate Orbit runtime injection, version checking, and method invocation from the TypeScript browser-tool-handler into Rust commands. This simplifies the frontend handler, removes CSP/Tauri API detection logic, and adds browserEnsureRuntime, browserInvokeRuntime, browserGetTitle, and browserGetUrl Tauri commands. Updated tests and spec to match. Moved completed plan docs to docs/due-plans/.
… tracking Add full-stack thinking persistence so thinking blocks survive reload with correct durations and interleave properly with tool calls in the message timeline. Rust backend gains ThinkingPhase struct with content_offset/ordinal fields, phase_durations sidecar metadata, and expanded fingerprint matching. Frontend adds unified segment builder that interleaves thinking/content/tool segments by ordinal, persists thinking blocks on conversation save, and restores them from loaded conversations with proper duration mapping.
…tter Sonner's exit animation sets opacity: 0 on removed toasts, but !opacity-100 (opacity: 1 !important) was winning the specificity battle, causing the toast to stay fully opaque until DOM removal.
…docs index Replace scoped ot-* CSS with glass-surface/liquid-glass-* utility classes, matching the account banner's design language. Add PR review workflow plan to docs index.
Implement immediate AI-powered title generation on first user message, replacing the old deferred approach. Titles appear as skeleton shimmer animations while generating, then animate in. Includes title divergence fix to keep sidebar and header in sync via session-title-service, plus remap-aware retry logic for title updates after session ID changes.
…approach The display-layer approach (CSS animation-delay, RAF opacity manipulation) failed across 6+ iterations due to CSS cascade conflicts, React reconciliation replacing DOM nodes, and timer synchronization issues. This replaces it with a data-layer approach: content accumulates immediately, displayedContent is advanced one word at a time by a service-level RAF controller. Streamdown only renders the visible prefix — no CSS tricks, no DOM manipulation. - Add StreamingRevealController with 33ms streaming / 10ms drain cadence - Decouple content from displayedContent in chat-message-service processEvents - Drain callback defers isStreaming:false until last word is revealed - Filter tool widgets by contentOffset <= displayedContent.length - Replace FlowTokenSegment inline rendering with memoized component - Add 300ms fade-in CSS animation on flow-token creation during streaming - Add data-flow-ord ordinals to rehype-flow-tokens for stable word identity
reconcileMessageId changes msg.id (frontend UUID → SDK UUID) ~150ms after
send. With key={msg.id}, React destroyed and recreated the DOM node,
replaying the entrance animation — the bubble would fade-up a second time
when the thinking stream ended or tools appeared.
Two-part fix:
- Use index keys (messages are append-only within a session)
- Count-based animation detection instead of ID tracking
- onAnimationEnd kills the CSS animation after first play as defense
… delays Move all demo-related files into a single demo/ directory for easier maintenance. Reduce demo playback startup from ~2.8s to ~200ms by removing artificial setTimeout delays.
Add a multi-icon system that lets users swap the macOS Dock icon from Settings → Appearance. Icons auto-discover from bundled folders, switch live via NSImage without restart, and automatically update when the system theme changes between light and dark mode. Architecture: orbit-app-icons crate (objc2 AppKit, unsafe isolated), Tauri command layer (safe Rust), React picker with optimistic UI. Previews served via Tauri asset protocol (no base64 encoding). Also: redesigned welcome page animation, updated build icons, removed unused Assets.car/Info.plist/icon pipeline artifacts.
Summary
265 files changed across Rust backend, React frontend, agent-bridge, and documentation.
Color System Refactor
orbit-100..1000) and semantic token layers (surfaces, controls, borders, git status)globals.cssCOLOR-SYSTEM-REFACTOR.md,DEAD-CSS-REMOVAL-PLAN.md,GEIST-SYSTEM.mdGit Status Hardening
is_path_ignoredguard in Ruststatus()for libgit2WT_NEWmisclassification driftis_path_ignoredpost-filter inget_diff()for untracked diffsbranch_diff_stats()with parity-first approach that excludes ignored filessanitizeStatus()filter in GitStore as belt-and-suspenders defenseBrowser Tools & MCP Server
Skills Marketplace
iOS Runtime Backend
Instant Title Generation
session-title-serviceThinking Phase Persistence
UI Polish & Styling
!opacity-100on account toast that broke exit animationtranslate3d/scaleDocumentation
plans/due/andplans/implemented/sections to docs indexCommits (oldest → newest)
c65e577fix: filter .DS_Store from source control and harden git status3b7b6b1fix: use inline transform for cursor click pulse to prevent position snap9a302derefactor: migrate color system from Radix scales to Orbit semantic tokens844f1f4chore: remove dead CSS variables and unused liquid glass stylesc994c7efix: always show branch picker popover in sidebar9d7ab6dfix: disable text selection on sidebar and compact indicator72bda5afeat: add skills marketplace, tool widget refinements, and commands store refreshfc1b23efeat: fix browser tools screenshot capture and MCP server improvementsec65ea0fix: handle possibly undefined tool in browser MCP screenshot testdb9d519feat: browser screenshot file saving, MCP server improvements, and plan docs203e275feat: add marketplace trending/top browse with fixed RSC parsera5224f8feat: iOS runtime backend, browser MCP improvements, image preview, welcome page redesign, and expanded test coveragebb5586estyle: replace welcome card solid bg with dashed borderbede370style: redesign tool widgets and message actions for cleaner chat UI00b6d2bfeat: move browser runtime injection from frontend to Rust backend62df8d3feat: persist thinking phases with interleaved rendering and duration tracking27ccddadocs: add plans/due and plans/implemented sections to docs index04f5f83fix: remove !opacity-100 from account toast to fix exit animation stutter9d4ba8estyle: migrate update toast to liquid glass design system and update docs index71dad48feat: instant title generation with skeleton loading and divergence fixTest plan
cargo test)cargo clippy --tests).DS_Storeno longer appears in source control panel