Skip to content

v0.0.6: color system, browser tools, instant titles, thinking phases, UI polish - #73

Merged
fazxes merged 24 commits into
mainfrom
v0.0.6
Mar 17, 2026
Merged

fazxes merged 24 commits into
mainfrom
v0.0.6

Conversation

@fazxes

@fazxes fazxes commented Mar 3, 2026 •

Copy link
Copy Markdown
Member

Summary

265 files changed across Rust backend, React frontend, agent-bridge, and documentation.

Color System Refactor

  • 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)
  • Eliminate hardcoded hex values and inline CSS variable references across 60+ components in favor of meaningful Tailwind classes
  • Remove ~925 lines of dead CSS variables and unused liquid glass styles from globals.css
  • Add design documentation: COLOR-SYSTEM-REFACTOR.md, DEAD-CSS-REMOVAL-PLAN.md, GEIST-SYSTEM.md

Git Status Hardening

  • Add is_path_ignored guard in Rust status() for libgit2 WT_NEW misclassification drift
  • Add is_path_ignored post-filter in get_diff() for untracked diffs
  • Rewrite branch_diff_stats() with parity-first approach that excludes ignored files
  • Add frontend sanitizeStatus() filter in GitStore as belt-and-suspenders defense
  • Add 12+ regression tests covering ignored file edge cases

Browser Tools & MCP Server

  • Browser screenshot file saving with proper path handling
  • Fix browser tools screenshot capture pipeline
  • MCP server improvements and stability fixes
  • Move browser runtime injection from frontend to Rust backend (eliminates frontend eval)
  • Handle possibly undefined tool in browser MCP screenshot test

Skills Marketplace

  • Add skills marketplace with trending/top browse views
  • Fixed RSC parser for marketplace content rendering
  • Tool widget refinements and commands store refresh

iOS Runtime Backend

  • iOS runtime backend implementation
  • Browser MCP improvements for mobile targets
  • Image preview support
  • Welcome page redesign with expanded test coverage

Instant Title Generation

  • Implement immediate AI-powered title generation on first user message (replaces deferred approach)
  • Skeleton shimmer loading animation while title generates
  • Title divergence fix — keeps sidebar and header in sync via session-title-service
  • Remap-aware retry logic for title updates after session ID changes
  • New tests: e2e title generation, title remap retry, chat actions title generation

Thinking Phase Persistence

  • Persist thinking phases with interleaved rendering
  • Duration tracking for each thinking phase
  • Correct rendering order when thinking blocks interleave with content

UI Polish & Styling

  • Redesign tool widgets and message actions for cleaner chat UI
  • Replace welcome card solid bg with dashed border outline
  • Migrate update toast to liquid glass design system
  • Fix !opacity-100 on account toast that broke exit animation
  • Fix cursor click pulse snapping to (0,0) — switch to inline translate3d/scale
  • Always show branch picker popover in sidebar
  • Disable text selection on sidebar items and compact indicator

Documentation

  • Add plans/due/ and plans/implemented/ sections to docs index
  • Move instant-title-generation from due → implemented
  • Add title-divergence-fix and title-skeleton-loading to implemented plans
  • Update PRODUCTION-PR-REVIEW-WORKFLOW plan

Commits (oldest → newest)

  1. c65e577 fix: filter .DS_Store from source control and harden git status
  2. 3b7b6b1 fix: use inline transform for cursor click pulse to prevent position snap
  3. 9a302de refactor: migrate color system from Radix scales to Orbit semantic tokens
  4. 844f1f4 chore: remove dead CSS variables and unused liquid glass styles
  5. c994c7e fix: always show branch picker popover in sidebar
  6. 9d7ab6d fix: disable text selection on sidebar and compact indicator
  7. 72bda5a feat: add skills marketplace, tool widget refinements, and commands store refresh
  8. fc1b23e feat: fix browser tools screenshot capture and MCP server improvements
  9. ec65ea0 fix: handle possibly undefined tool in browser MCP screenshot test
  10. db9d519 feat: browser screenshot file saving, MCP server improvements, and plan docs
  11. 203e275 feat: add marketplace trending/top browse with fixed RSC parser
  12. a5224f8 feat: iOS runtime backend, browser MCP improvements, image preview, welcome page redesign, and expanded test coverage
  13. bb5586e style: replace welcome card solid bg with dashed border
  14. bede370 style: redesign tool widgets and message actions for cleaner chat UI
  15. 00b6d2b feat: move browser runtime injection from frontend to Rust backend
  16. 62df8d3 feat: persist thinking phases with interleaved rendering and duration tracking
  17. 27ccdda docs: add plans/due and plans/implemented sections to docs index
  18. 04f5f83 fix: remove !opacity-100 from account toast to fix exit animation stutter
  19. 9d4ba8e style: migrate update toast to liquid glass design system and update docs index
  20. 71dad48 feat: instant title generation with skeleton loading and divergence fix

Test plan

  • All Rust tests pass (cargo test)
  • Clippy clean (cargo clippy --tests)
  • Frontend tests pass (Vitest)
  • Pre-commit hooks pass (ESLint, Prettier, rustfmt, clippy)
  • Color system renders correctly in both light and dark themes
  • .DS_Store no longer appears in source control panel
  • Browser screenshots save to disk correctly
  • Title generates immediately on first message with skeleton loading
  • Thinking phases persist and render with correct interleaving
  • Update toast uses liquid glass styling

- 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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +168 to +169
const hasAssistantMessage = session.messages.some((message) => message.role === 'assistant');
return session.isAgentRunning && hasAssistantMessage;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

fazxes added 5 commits March 3, 2026 07:01
…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.
@fazxes fazxes changed the title fix: filter .DS_Store from source control and harden git status v0.0.6: color system refactor, git hardening, UI polish Mar 4, 2026
fazxes added 14 commits March 4, 2026 13:17
…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.
@fazxes fazxes changed the title v0.0.6: color system refactor, git hardening, UI polish v0.0.6: color system, browser tools, instant titles, thinking phases, UI polish Mar 7, 2026
fazxes added 4 commits March 7, 2026 22:14
…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.
@fazxes
fazxes merged commit d940c3b into main Mar 17, 2026
13 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant