Commit Graph
719 Commits
Author SHA1 Message Date
Mohamed BoudraandClaude Opus 4.5 a187f26e1b feat(git-diff): add Lezer-based syntax highlighting
- Add @lezer/highlight and language parsers (JS/TS, JSON, CSS, HTML, Python, Markdown)
- Create syntax-highlighter utility that parses code with Lezer and returns highlight tokens
- Integrate highlighting into diff view with color-coded tokens
- Keywords (purple), strings (green), numbers (orange), functions (blue), types (yellow), etc.
- Highlighting respects add/remove line backgrounds

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 10:07:08 +07:00
Mohamed BoudraandClaude Opus 4.5 4c8a79f288 style(git-diff): remove bold from line counts
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 09:37:06 +07:00
Mohamed BoudraandClaude Opus 4.5 607decff84 feat(git-diff): redesign diff UI with collapsible files and line counts
- Make each file section collapsible (expanded by default)
- Remove bold from file name, use normal weight
- Truncate long file paths with ellipsis
- Show +X -Y line counts in file header
- Add "New" badge indicator for new files
- Remove horizontal scroll, let diff content wrap
- Add chevron icon that rotates on expand/collapse

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 09:36:38 +07:00
Mohamed BoudraandClaude Opus 4.5 ecd9ddb4a2 feat(sidebar): add "View More" button and all agents screen
- Make AgentList a pure display component (remove sorting/slicing logic)
- Add listFooterComponent prop to AgentList for extensibility
- Add SIDEBAR_AGENT_LIMIT (15) in sidebar, show "View More" when exceeded
- Create /agents screen showing full sorted agent list
- Update settings page styling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 00:14:27 +07:00
Mohamed BoudraandClaude Opus 4.5 348242541c feat(git-diff): add React Query with pull-to-refresh and cleaner diff display
- Add useGitDiffQuery hook using React Query for caching and revalidation
- Add sendRpcRequest utility for promisified WebSocket RPC with requestId matching
- Add requestId to git_diff_request/response for proper request correlation
- Enable pull-to-refresh via RefreshControl in GitDiffPane
- Auto-revalidate when sidebar opens with "changes" tab active
- Clean up diff display: remove metadata noise, strip +/- prefixes
- Default both sidebars open on web platform

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 21:27:35 +07:00
Mohamed BoudraandClaude Opus 4.5 8c33df472f feat(explorer-sidebar): add right-side file explorer and git diff panel
- Add swipe-left gesture to open explorer sidebar on mobile
- Implement Changes (git diff) and Files tabs with toggle
- Add responsive gallery columns based on container width
- Handle hardware back button to close sidebar first
- Add gesture conflict resolution for horizontal scroll in diffs
- Add resize handle with cursor change on desktop
- Add sorting selector (name, modified, size) in file explorer

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 14:27:59 +07:00
Mohamed BoudraandClaude Opus 4.5 9d7e44851c feat(file-explorer): add parallel thumbnail loading and file preview
- Implement parallel thumbnail queue (2 concurrent) for gallery view
- Add BottomSheetModal file preview with 80% snap point
- Add pull-to-refresh for directory listings
- Fix image loading race conditions with Set-based in-flight tracking

Also includes:
- message-input: add Cmd+Shift+D dictation toggle shortcut
- message: update user message bubble to darker zinc color
- Add PRODUCTION.md deployment guide

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 08:41:43 +07:00
Mohamed BoudraandClaude Opus 4.5 edb3258ae9 feat(sidebar): add interactive drag-to-open gesture
Sidebar now follows the finger during swipe-to-open gesture from anywhere
on the screen. Uses shared animation context between AppContainer and
SlidingSidebar for synchronized translateX values.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 12:46:53 +07:00
Mohamed BoudraandClaude Opus 4.5 719ef75f3d fix(agent-list): use gesture-handler FlatList for scroll compatibility
Import FlatList from react-native-gesture-handler instead of react-native
so it properly coordinates with parent gesture handlers. This allows
vertical scrolling inside the sidebar while still supporting swipe-to-close.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:55:26 +07:00
Mohamed BoudraandClaude Opus 4.5 3033685aab fix(sidebar): allow vertical scrolling in mobile agent list
Changed from Gesture.Simultaneous() to Gesture.Race() so that vertical
scroll and horizontal swipe-to-close are mutually exclusive based on
initial movement direction.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:51:53 +07:00
Mohamed BoudraandClaude Opus 4.5 c5dddeb2e0 style(sidebar): use darker border color on New Agent hover
Changed from white to zinc[500] for a subtler effect.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:45:58 +07:00
Mohamed BoudraandClaude Opus 4.5 e121a90a58 style(sidebar): add smooth transition to New Agent button hover
150ms transition for border-color and background-color.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:42:54 +07:00
Mohamed BoudraandClaude Opus 4.5 330a75a445 style(sidebar): add hover effect to New Agent button
On hover: white border and light muted background.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:31:12 +07:00
Mohamed BoudraandClaude Opus 4.5 74ed95cc08 style(sidebar): use white text for New Agent button
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:29:04 +07:00
Mohamed BoudraandClaude Opus 4.5 9c09f32dca perf(agent-list): limit sidebar to 15 agents for fast rendering
Agents requiring attention are sorted to the top before slicing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:22:00 +07:00
Mohamed BoudraandClaude Opus 4.5 2a44b08d4b style(sidebar): change New Agent button to outline style
Make the button less prominent since it's not frequently used once
you're actively coding with an agent. Changed from filled primary
to outline with muted colors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:21:26 +07:00
Mohamed BoudraandClaude Opus 4.5 dbf9b7e75d feat(sidebar): restructure layout and fix agent selection highlighting
- Move New Agent button to top header, Settings button to bottom footer
- Settings screen now uses MenuHeader for consistent hamburger menu
- Remove default background from agent list items (only show on hover/selected)
- Fix selected agent highlighting by parsing serverId:agentId from pathname
  instead of using useLocalSearchParams (which doesn't update on same-pattern route navigation)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:06:23 +07:00
Mohamed BoudraandClaude Opus 4.5 7b55740a9e fix(sidebar): use fast fade instead of slide when navigating
Slide animation freezes halfway when navigation starts. Now uses
instant snap + 100ms backdrop fade for agent selection. Gestures
still use the slide animation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:55:40 +07:00
Mohamed BoudraandClaude Opus 4.5 75895b17d4 fix(sidebar): eliminate tap delay by triggering animation directly
The animation was waiting ~32ms for React's useEffect cycle before
starting. Now handleAgentSelectMobile triggers the close animation
immediately using withTiming on shared values, bypassing useEffect.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:52:17 +07:00
Mohamed BoudraandClaude Opus 4.5 344ef87b10 fix(agent-list): close sidebar immediately on agent tap
Move onAgentSelect callback before navigation so the sidebar closes
instantly instead of waiting for the navigation to complete.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:21:33 +07:00
Mohamed BoudraandClaude Opus 4.5 020d244b26 feat(app): add sliding sidebar navigation for mobile
- Homepage now shows "New Agent" form, agent list moves to sidebar
- Hamburger menu replaces back arrow on all screens
- Mobile: full-screen sidebar overlay with swipe-to-close gesture
- Desktop: fixed 320px sidebar, toggle via hamburger
- Smooth bezier-eased animations (220ms)
- Sidebar closes on agent select (mobile only)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:16:27 +07:00
Mohamed BoudraandClaude Opus 4.5 1f33dcb4c1 fix(input): handle Cmd+D when TextInput has focus
Prevents browser bookmark dialog from appearing when using
Cmd+D to toggle dictation while typing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 20:03:42 +07:00
Mohamed BoudraandClaude Opus 4.5 fb92eb199e feat(input): add Cmd+D keyboard shortcut for dictation on web
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 19:57:59 +07:00
Mohamed BoudraandClaude Opus 4.5 1f9a35dafd refactor(app): remove unused CreateAgentModal
Agent creation now uses the /agent/new route exclusively.
Remove the legacy modal and related deep link handling.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 19:48:05 +07:00
Mohamed Boudra a12af74c7b refactor(app): simplify agent list UI and remove unused sidebar component 2026-01-03 19:39:24 +07:00
Mohamed BoudraandClaude Opus 4.5 e8890a2fc1 wip: uncommitted changes
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 16:06:40 +07:00
Mohamed BoudraandClaude Opus 4.5 8add1a6620 feat(tool-call-sheet): improve MCP tool call display
- Extract key-value pairs from tool arguments and results
- Add Input/Output group headers with visual separation
- Fix Playwright MCP tool calls not being clickable (pass data.input as args)
- Increase default sheet height to 60%
- Add extractKeyValuePairs utility function using Zod

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 15:23:49 +07:00
Mohamed BoudraandClaude Opus 4.5 914cebc914 feat(input): add web autofocus and Cmd+Enter force send
- Add autoFocus prop to MessageInput and AgentInputArea
- Auto-focus input on web when entering agent or new agent screens
- Add Cmd+Enter (Mac) / Ctrl+Enter (Windows) to bypass queue and send immediately
- Add forceSend property to MessagePayload interface

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 15:23:41 +07:00
Mohamed BoudraandClaude Opus 4.5 e3d25dc38e Fix working indicator padding calculation
Account for list's spacing[2] padding - use spacing[2] for bubble
so total equals spacing[4] to match input area

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 21:31:36 +07:00
Mohamed BoudraandClaude Opus 4.5 8023aed98b Fix working indicator padding and remove redundant streaming dots
- Align working indicator left padding with AssistantMessage (spacing[4])
- Remove isStreaming prop and "..." indicator from AssistantMessage
- The WorkingIndicator already shows agent is running, no need for duplicate

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 21:26:05 +07:00
Mohamed Boudra b3a1729df2 Use replace navigation for agent switches 2026-01-01 16:55:58 +07:00
Mohamed Boudra 0c4d1c3a58 Buffer streaming chunks to reduce rerenders 2026-01-01 15:43:06 +07:00
Mohamed Boudra 15b62448cb Fix dictation auto-grow performance - revert to original fast path 2025-12-29 11:51:12 +07:00
Mohamed BoudraandClaude Opus 4.5 0cb8bbcf62 Improve dictation UX: transcribe-only mode with UI fixes
- Dictation now appends transcribed text to input instead of auto-sending
- Voice button stays visible even with attachments or existing text
- Dictation works on create agent screen (not just agent chat)
- Input auto-grows when dictation appends text
- New agent screen input has solid background (no transparency)
- Timer preserves duration after confirming (no scary reset to zero)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 11:24:15 +07:00
Mohamed Boudra ffc6bd3ba5 Fix inline path linking for absolute cwd paths 2025-12-29 00:15:21 +07:00
Mohamed Boudra 5120f73f49 Add host selector to import agent modal 2025-12-29 00:06:06 +07:00
Mohamed Boudra 95c821a4c6 fix: restore input on submission error and enforce clean working tree for git operations 2025-12-27 09:35:40 +07:00
Mohamed BoudraandClaude Opus 4.5 40835bbe9d Fix Codex history persistence after daemon restart
- Modified loadPersistedHistoryFromDisk() to use sessionId or conversationId as fallback
- Added rollout path and session dir persistence in agent metadata
- Added fallback to default Codex session root when metadata path is empty
- Cleaned up create-agent-modal.tsx (removed 800+ lines of dead code)
- Updated app routing and home-footer cleanup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 11:39:20 +07:00
Mohamed BoudraandClaude Opus 4.5 26da925de6 Redesign new agent page UI layout
- Move host selector to header (right side) with icon + name + status dot
- Combine provider/model/mode into single "Agent" dropdown
- Replace Git branch/worktree toggles with segmented IsolationControl (None/Branch/Worktree)
- Only show Git section for git repositories (hide for non-git directories)
- Wrap config section in ScrollView for proper scrolling
- Simplify layout: Working Directory → Agent → Git (when applicable)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 21:40:35 +07:00
Mohamed BoudraandClaude Opus 4.5 54f0583334 Add Git Options Section to new agent page
- Added GitOptionsSection and ToggleRow components to agent-form-dropdowns.tsx
- Added useDaemonRequest hook for git_repo_info_request in new.tsx
- Added git-related state: baseBranch, createNewBranch, branchName, createWorktree, worktreeSlug
- Added git validation logic: isNonGitDirectory, gitBlockingError, validateWorktreeName
- Updated handleCreateFromInput to include git options in createAgent call
- Git section only shows when working directory is set
- Auto-populates base branch from current branch
- Shows dirty directory warning
- Validates branch/worktree names

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 21:17:25 +07:00
Mohamed BoudraandClaude Opus 4.5 bd7752b4f4 Add visual loading indicator to new agent page
- Add isSubmitLoading prop to AgentInputArea component to allow parent
  to control loading state externally
- When isSubmitLoading is true:
  - Show ActivityIndicator instead of ArrowUp icon in send button
  - Disable send button with reduced opacity
- Pass isLoading state from new.tsx to AgentInputArea via isSubmitLoading prop

Files changed:
- packages/app/src/components/agent-input-area.tsx:53-54, 98, 1050-1060
- packages/app/src/app/agent/new.tsx:472

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 21:07:46 +07:00
Mohamed BoudraandClaude Opus 4.5 fe5e86d514 Add agent list sidebar on large screens
Show AgentList as a left sidebar (280px) when viewing an agent on
screens >= 768px wide. The current agent is highlighted with a
primary-colored border and accent background.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 11:43:14 +07:00
Mohamed BoudraandClaude Opus 4.5 37da13a38b Fix markdown list text wrapping on Android
- Add custom list rendering rules in message.tsx for proper flex layout
- Remove flexWrap from list content styles (causes Android clipping)
- Use flex: 1 and flexShrink: 1 for natural text wrapping
- Add minWidth: 0 to content containers for proper shrinking

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 04:41:37 +00:00
Mohamed BoudraandClaude Opus 4.5 eb48ae0f6b Make Running and Finished status mutually exclusive
Running takes priority over Finished indicator.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 23:14:54 +07:00
Mohamed Boudra 993eed0628 Allow agent creation outside git repos 2025-12-23 23:11:48 +07:00
Mohamed Boudra 38c1f52035 Use agent directories for working dir suggestions 2025-12-23 23:11:48 +07:00
Mohamed Boudra c4b9a68c6b Replace needs attention with finished status 2025-12-23 23:11:48 +07:00
Mohamed BoudraandClaude Opus 4.5 6a9b57ae0c Simplify agent list UI and add bearer token auth for Codex MCP
- Replace SectionList with FlatList in agent list, sorting attention items to top
- Persist server selection preference in create agent modal
- Add bearer token authentication support for agent-control MCP endpoint
- Pass bearer token through Codex wrapper script for MCP auth

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 22:11:51 +07:00
Mohamed Boudra 957decc1f7 Trim dictation toasts to failures 2025-12-23 14:02:55 +07:00
Mohamed BoudraandClaude Opus 4.5 38a4c70aec Improve markdown styling and enable text selection on mobile
- Fix agent chat bottom scroll padding by adding overflow hidden to inputAreaContainer
- Create shared markdown-styles.ts with comprehensive styling for tables, headings, code blocks, blockquotes, and horizontal rules
- Enable text selection in AssistantMessage and AgentThoughtMessage by overriding markdown render rules with selectable={true}
- Path chips remain non-selectable to preserve onPress navigation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 12:32:52 +07:00