Commit Graph

42 Commits

Author SHA1 Message Date
Mohamed Boudra
086dde30cc feat(agent): add git diff viewer and improve permission handling
- Add git diff viewer screen accessible via agent dropdown menu
- Implement git_diff_request/response WebSocket messages
- Add dropdown menu to agent screen header with "View Changes" option
- Clear pending permissions when starting new agent turn to prevent conflicts
- Treat agent refusals as completed rather than failed state
- Add test coverage for permission handling edge cases
- Configure vitest to run in single-threaded mode for stability
- Remove redundant wrapper in agent stream view

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 22:19:16 +01:00
Mohamed Boudra
edf47a24bc refactor(agent): consolidate agent type definitions and add multi-agent-type support 2025-10-26 18:03:03 +01:00
Mohamed Boudra
d47019919e refactor(ui): improve footer controls layout and add scroll-to-bottom button
Simplify agent screen layout by removing redundant status bar container and consolidating all footer controls into the input area component. Add smooth fade animations for realtime mode transitions and a floating scroll-to-bottom button for better UX.

Changes:
- Consolidate status bar and controls into AgentInputArea for cleaner layout hierarchy
- Add scroll-to-bottom button to AgentStreamView with fade animations
- Fix realtime controls stacking on non-agent screens
- Add lastActivityAt serialization to MCP server agent responses
- Remove unnecessary layout wrapper in agent screen

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 15:03:33 +01:00
Mohamed Boudra
c4bb10d3c9 feat: add voice note recording overlay with transcription feedback and worktree support 2025-10-26 13:48:14 +01:00
Mohamed Boudra
dcfdccf07f fix(worktree): implement worktree creation for agent isolation
- Add worktree utility functions for git worktree management
- Fix stale closure issue in create-agent-modal causing worktreeName to not be sent
- Refactor create-agent-modal to use useCallback for all functions in proper order
- Add tilde path expansion before worktree creation to fix "Not in a git repository" error
- Add worktreeName parameter to create_agent_request WebSocket message
- Add debug logging for worktree creation flow
- Remove noisy logging (message chunk updates, session updates, agent update notifications)

The worktree feature allows creating isolated git worktrees for each agent,
enabling work on different branches simultaneously without conflicts.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 13:28:05 +01:00
Mohamed Boudra
4323d7d193 fix(session): emit agent_status on mode change for immediate UI update
When a user accepts an ExitPlanMode permission, the agent sends a
current_mode_update notification. Previously this was only forwarded
as an agent_update message, but the frontend relies on agent_status
messages to update the mode selector UI.

Now we detect current_mode_update notifications and emit an additional
agent_status message immediately, ensuring the UI updates without
waiting for the agent to complete its turn.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 10:18:51 +01:00
Mohamed Boudra
7fee9d4dc4 refactor(agent-manager): add error logging for agent prompt refusal 2025-10-26 09:52:43 +01:00
Mohamed Boudra
fdaf403f13 chore(deps): upgrade claude-code-acp to v0.8.5 and improve test lifecycle management 2025-10-26 09:51:18 +01:00
Mohamed Boudra
b1faab72ce chore(deps): upgrade claude-code-acp to v0.8.4 and mark express dependencies as optional 2025-10-26 08:57:57 +01:00
Mohamed Boudra
1d8e86985b test(agent-manager): add session ID verification and improve agent state persistence 2025-10-26 08:29:52 +01:00
Mohamed Boudra
604e359437 test(agent-manager): add test for loading persisted agent and sending new prompt 2025-10-26 07:59:35 +01:00
Mohamed Boudra
9f22acfead fix(agent-manager): persist agent state before killing to enable resumption 2025-10-26 07:53:51 +01:00
Mohamed Boudra
a81a8a86b8 test: replace console.log with assertion for agent mode verification 2025-10-26 07:44:33 +01:00
Mohamed Boudra
0cc9666df0 chore: reset agents.json and add mode change handling to agent manager 2025-10-26 07:41:27 +01:00
Mohamed Boudra
a3224175ee feat: add image upload support to agent chat with attachment preview 2025-10-26 07:35:06 +01:00
Mohamed Boudra
8d591da671 refactor: add dynamic input height, agent sorting, and last activity tracking 2025-10-25 21:56:44 +02:00
Mohamed Boudra
1d6de732b6 feat: implement graceful agent shutdown and update dev script
- Add graceful shutdown to AgentManager that waits for processing agents to complete
- Update server to handle SIGTERM and SIGINT with proper agent cleanup
- Switch dev script to use node --watch --import tsx for faster restarts
- Add shutdown timeout handling with configurable wait period

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-25 21:20:27 +02:00
Mohamed Boudra
1fd9b77680 refactor: upgrade claude-code-acp to v0.8.3 and optimize agent initialization flow 2025-10-25 19:37:13 +02:00
Mohamed Boudra
42e5f864a6 refactor: improve formatting consistency and session persistence in agent management 2025-10-25 18:50:56 +02:00
Mohamed Boudra
d2313b9d1c refactor: memoize useWebSocket return value and improve formatting consistency 2025-10-25 18:49:42 +02:00
Mohamed Boudra
64d1518a6f Prompt is too long 2025-10-25 15:14:44 +02:00
Mohamed Boudra
3115c702bf refactor(server): implement lazy agent initialization with state machine pattern 2025-10-24 20:18:25 +02:00
Mohamed Boudra
8d93eeb5c5 feat: switch to local claude-code-acp package and remove screen transition animations 2025-10-24 18:10:12 +02:00
Mohamed Boudra
dd4fa90c5a fix: resolve session resumption issue by storing Claude's internal session ID
- Add discriminated union for agent options with proper type (claude)
- Store Claude's internal session ID separately from ACP session ID
- Use Zod schema validation for persisted agents
- Use correct session ID when resuming agents (Claude ID for Claude agents)
- Update to @boudra/claude-code-acp@0.8.1 which extracts Claude session ID
2025-10-24 17:09:37 +02:00
Mohamed Boudra
3483bd9afd fix: improve realtime controls layout and add agent status bar
- Change realtime controls to horizontal layout with fixed height (88px)
- Add orientation prop to VolumeMeter for horizontal/vertical modes
- Create AgentStatusBar component showing mode badge and agent status
- Add agent persistence system for managing agent state across restarts
- Fix bottom sheet dismiss handling to clear state properly
- Remove debug timer from realtime controls

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-24 11:17:05 +02:00
Mohamed Boudra
15320819a7 fix: migrate to @boudra/expo-two-way-audio and add tool call details bottom sheet 2025-10-23 20:01:52 +02:00
Mohamed Boudra
74fffcd8a3 refactor: optimize audio initialization and fix agent interactions
- Lazy initialize audio (on-demand instead of mount) in both player and Speechmatics hooks
- Add audio session teardown on stop for proper cleanup
- Implement agent audio recording with sendAgentAudio in AgentInputArea
- Fix Android navigation race condition in CreateAgentModal (navigate before closing)
- Add animations to global footer and agent screen (FadeIn/FadeOut)
- Auto-cancel stuck agents when sending new messages
- Fix permission request ID propagation from AgentManager to Session
- Apply theme background color via AppContainer wrapper

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 13:15:18 +02:00
Mohamed Boudra
91d691f31d ```
refactor: reset message IDs on new turn and add activity log handlers

- Reset assistant message and thought IDs when starting new agent turn
- Add comprehensive activity log handlers in session context
- Handle tool calls, results, and errors with proper state updates
- Add transcription and assistant chunk streaming handlers
- Improve audio playback with proper error handling and confirmation
- Use generateMessageId() for consistent ID generation
- Filter out transcription activity logs from chat
- Stop audio playback when real speech is detected
```
2025-10-23 12:22:42 +02:00
Mohamed Boudra
41be2d4096 ```
refactor: implement async agent creation flow with loading states

- Add loading states and request tracking to agent creation modal
- Move agent creation logic from parent to modal component
- Add automatic navigation to agent page after creation
- Implement requestId-based response matching for agent_created events
- Add audio output handling in session context
- Improve modal UX with disabled states during creation
```
2025-10-23 12:04:12 +02:00
Mohamed Boudra
85a0e46ba9 ```
feat: add recent paths suggestions and improve UX polish

- Add recent paths hook to persist and suggest working directories
- Update Android icon assets and simplify adaptive icon configuration
- Remove background styling from header icon buttons for cleaner look
- Export expandTilde utility for path normalization in agent creation
- Add horizontal scrollable chips for recent path suggestions
```
2025-10-23 11:26:36 +02:00
Mohamed Boudra
8177aa0c2a feat: add home screen with agent list and orchestrator navigation 2025-10-23 11:11:20 +02:00
Mohamed Boudra
0893a9dc33 ```
refactor: improve agent notification types and fix activity curator

- Convert agent notifications to discriminated union (session/permission/status)
- Fix activity curator to properly handle typed session updates
- Serialize Date objects in AgentInfo for JSON compatibility
- Use activity curator for title generation context
- Reduce console.error to console.warn for non-critical WebSocket errors
- Improve spacing in agent stream views
- Delay title generation until 15+ updates available
```
2025-10-23 09:01:38 +02:00
Mohamed Boudra
30bf4d1b63 ```
feat: implement agent permission flow with gesture-based sidebar navigation

Add permission request/response system for agent tool calls with UI approval flow, implement swipeable agent sidebar with edge gesture detection, and enhance agent updates with stable message IDs for proper deduplication across reconnections.

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

Co-Authored-By: Claude <noreply@anthropic.com>
```
2025-10-23 08:36:42 +02:00
Mohamed Boudra
70bdbd74eb refactor: deduplicate user messages and sync agent history on reconnection 2025-10-22 22:38:15 +02:00
Mohamed Boudra
b86e5fbb3f Based on the changes, I can see this is a significant feature addition that adds the ability to create agents and communicate with them through both text and audio, with a modal UI for agent creation and mode switching.
```
feat: add agent creation modal and agent-specific messaging

- Add CreateAgentModal component for creating new agents with mode selection
- Implement agent-specific text and audio message routing
- Add mode selector modal with visual mode switching UI
- Introduce unified stream reducer pattern for agent activity
- Refactor AgentStreamView to use StreamItem[] instead of raw notifications
- Update ActiveProcesses to show orchestrator pill and support mode switching
- Add message types: send_agent_message, send_agent_audio, create_agent_request, set_agent_mode
- Implement agent audio transcription and message forwarding in session handler
- Add mode badge UI showing current agent mode
- Update tmux capture-pane to allowed commands

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

Co-Authored-By: Claude <noreply@anthropic.com>
```
2025-10-22 22:06:00 +02:00
Mohamed Boudra
eb0d04904e Based on the changes, here's the commit message:
```
refactor: convert AgentManager to global singleton across sessions

Move AgentManager initialization from per-session to single global instance. Agents now persist across sessions, with sessions subscribing/unsubscribing to agent updates rather than creating/destroying agents.
```
2025-10-22 20:08:40 +02:00
Mohamed Boudra
ce07b54920 ```
refactor: improve UI polish with empty state, spacing, and remove status messages
```
2025-10-22 19:42:13 +02:00
Mohamed Boudra
8b9561b379 ```
feat: add realtime mode drift protection and improve voice UX
```
2025-10-22 19:06:59 +02:00
Mohamed Boudra
674977d6f8 feat: improve agent activity UI and fix status update propagation
**Agent Activity UI Improvements:**
- Create typed discriminated unions for SessionNotification updates
- Add AgentActivity component with specialized rendering for each update type
- Group consecutive text chunks into single messages (like main chat)
- Add collapsible tool call rendering with input/output details
- Add plan rendering with task status indicators
- Add fallback rendering for unknown activity types (badge + drawer)

**Agent Status Update Fix:**
- Fix agent killing not updating UI status
- Session now detects status change notifications and emits agent_status messages
- Agent manager delays agent deletion to allow status updates to propagate
- Frontend agent_status handler now receives proper updates

**Technical Details:**
- Created /packages/app/src/types/agent-activity.ts with typed session updates
- Created /packages/app/src/components/agent-activity.tsx with activity renderers
- Updated AgentStreamView to use grouped activities with useMemo
- Modified session.ts subscribeToAgent to emit agent_status on status changes
- Modified agent-manager.ts killAgent to delay deletion for status propagation

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2025-10-22 18:10:29 +02:00
Mohamed Boudra
e1e14b1473 feat: improve UI/UX with volume meter and refine input area styling
- Add VolumeMeter component for realtime audio visualization
- Refactor input area to show volume meter in realtime mode
- Update button styling and layout for cleaner interface
- Improve text input integration with better visual hierarchy
- Add volume state tracking to Speechmatics audio hook
- Add agent working directory validation on creation
- Update agent prompt with better orchestration guidelines

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2025-10-22 18:00:59 +02:00
Mohamed Boudra
32d4944c58 feat: migrate from NativeWind to react-native-unistyles and add Speechmatics audio
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 14:38:46 +02:00
Mohamed Boudra
e646f410be Prompt is too long 2025-10-22 09:06:18 +02:00