Commit Graph

589 Commits

Author SHA1 Message Date
Mohamed Boudra
41b321a621 fix(git-diff): include untracked (new) files in diff output
Uses git ls-files --others to find untracked files and git diff --no-index
to generate diff output showing their content as additions.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 08:30:53 +07:00
Mohamed Boudra
bf22373502 feat(git-diff): add 10-second auto-refetch interval
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 08:25:22 +07:00
Mohamed Boudra
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 Boudra
0806fd7965 feat(file-explorer): add download progress toast and auto-restart dev server
- Add download status toast (downloading/complete/error) for file downloads
- Update to use expo-file-system's new File API
- Auto-restart dev server on crash (non-zero exit codes)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 23:48:32 +07:00
Mohamed Boudra
33a3031f74 fix(agent): restore MCP wait timeout and fix direct URL navigation
- Restore 50-second self-imposed timeout for agent wait operations in MCP
  server. Returns friendly message instead of letting SDK timeout trigger
  generic "tool failed" error that confuses orchestrator agents.

- Fix direct URL navigation to agent screens by waiting for WebSocket
  connection before initializing. Previously, init would fire before WS
  connected, fail silently, and never retry due to guard ref.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 23:47:58 +07:00
Mohamed Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
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 Boudra
4185db9c75 feat(app): update app icons to new butterfly design
Replace walking person icons with new Paseo butterfly branding.
Remove unused react logos and android background/monochrome assets.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 15:53:06 +07:00
Mohamed Boudra
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 Boudra
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 Boudra
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 Boudra
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
63247f73b3 feat(file-explorer): add file download with share sheet support 2026-01-01 13:07:51 +07:00
Mohamed Boudra
57a86d011a Add file download tokens over WS and HTTP 2025-12-29 12:12:13 +07:00
Mohamed Boudra
15b62448cb Fix dictation auto-grow performance - revert to original fast path 2025-12-29 11:51:12 +07:00
Mohamed Boudra
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
09d4acce4c Clean up Claude agent SDK message conversion
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 11:02:02 +07:00
Mohamed Boudra
7a024ce7fd Migrate image encoding to expo-file-system File API 2025-12-29 10:51:06 +07:00
Mohamed Boudra
1200bce7e3 Fix Codex image prompt data URLs 2025-12-29 10:34:43 +07:00
Mohamed Boudra
0ffac203af Test Codex image attachment temp path 2025-12-29 10:28:24 +07:00
Mohamed Boudra
b559422cb0 Write Codex image attachments to temp files 2025-12-29 10:13:00 +07:00
Mohamed Boudra
a087b085e6 Add multimodal prompt blocks for agent prompts 2025-12-29 09:15:09 +07:00
Mohamed Boudra
6160d96716 Fix web image base64 encoding 2025-12-29 09:09:53 +07:00
Mohamed Boudra
d5f5351d37 Add image attachments to agent creation 2025-12-29 09:07:54 +07:00
Mohamed Boudra
5d24e0eee8 Investigation: Image attachments are broken
Tested image attachment flow via Playwright MCP. Found three issues:

1. Agent creation silently drops images (by design - TODO in code)
2. Web platform fails base64 encoding (expo-file-system not available)
3. Server buildAgentPrompt only creates text summary, never sends bytes

Added fix tasks to plan.md and detailed report in
REPORT-image-attachment-investigation.md.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 09:03:58 +07:00
Mohamed Boudra
62181e1f4c Review daemon test coverage 2025-12-29 00:23:35 +07:00
Mohamed Boudra
db9887d723 Validate new agent URL params 2025-12-29 00:22:40 +07:00
Mohamed Boudra
890708a55a Checkpoint typecheck and code quality review 2025-12-29 00:19:30 +07:00