Commit Graph

2392 Commits

Author SHA1 Message Date
Mohamed Boudra
53d91a319e fix(app): use pre-parsed props for Codex file edit diffs
ToolCall component had parsedEditEntries, parsedReadEntries, and
parsedCommandDetails props defined but never used them. Now prefers
these pre-parsed props when available, enabling Codex apply_patch
diffs to render correctly in the expanded view.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 01:04:33 +00:00
Mohamed Boudra
4001b7dc0a refactor: remove heuristic parsing, use pure type-based tool rendering
- Remove all heuristic parsing code from message.tsx (hasCommandDetails,
  commandSection, editSections, readSections, hasStructuredContent, etc.)
- Replace with simple raw JSON fallback for tools without structured results
- Fix server-side support for Claude SDK's old_string/new_string params
  (in addition to old_str/new_str)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 19:38:42 +00:00
Mohamed Boudra
38b08fec0c feat: add structured tool result types for better rendering
Server-side:
- Add StructuredToolResult discriminated union type with command, file_write,
  file_edit, file_read, and generic variants
- Implement buildStructuredToolResult in claude-agent.ts to detect tool types
  and emit properly structured results
- Update codex-agent.ts to emit structured command results

Client-side:
- Add type guard and extraction functions for structured results
- Render tool calls based on result.type when available:
  - command: show command, output, exit code
  - file_write/file_edit: show diff viewer with proper +/- format
  - file_read: show file content
  - generic: show raw JSON
- Fall back to heuristic parsing for backwards compatibility

This fixes file writes showing as "Command: success message" - they now
properly show as diffs with +line additions.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 19:24:52 +00:00
Mohamed Boudra
a7df671144 fix(app): deduplicate tool call expansion sections
Command output was being shown three times: as "Command", as "Read Result",
and as raw JSON "Result". Now:
- Skip "Read Result" when command output is already shown
- Skip raw JSON "Result" when we have structured content to display

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 19:05:41 +00:00
Mohamed Boudra
e80989ea78 perf: remove raw field from timeline items to reduce payload size
Remove the `raw` field that was duplicating provider data in timeline
items, reducing WebSocket payload sizes by 64-85%:
- session_state: ~320KB → ~48KB
- agent_stream_snapshot: ~320KB → ~114KB

Changes:
- Remove raw from AgentTimelineItem, AgentStreamEvent, AgentPermissionRequest
- Remove raw assignments from claude-agent.ts and codex-agent.ts
- Remove provider_event handling from stream.ts (only used for Codex raw)
- Update tests to reflect new behavior

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 18:20:33 +00:00
Mohamed Boudra
ae4678bca8 fix: eliminate duplicate WebSocket messages during agent history priming
- Skip dispatching individual agent_stream events when replaying history
  (the snapshot is sent after priming anyway, so individual events were wasted)
- Add WebSocket message logging on client (type, size, id) for debugging
- Change default daemon URL from dev to localhost
- Clean up unused imports in session.ts

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 17:44:07 +00:00
Mohamed Boudra
1b019c4688 chore: update android scripts and add dev runner with IPC restart support 2025-11-28 11:39:31 +01:00
Mohamed Boudra
2c84447ec2 fix(app): resolve create agent dictation confirm handler timing issue
Fixed a state management bug where clicking the checkmark in create agent dictation mode would not trigger processing. The issue was that setIsDictationProcessing(true) was called after stopping the recorder, causing a race condition where the UI never showed the processing state.

Changes:
- Move setIsDictationProcessing(true) to execute immediately at the start of the confirm handler
- Add proper cleanup when audioData is null
- Ensure UI shows loading spinner when checkmark is clicked

This aligns the create agent dictation behavior with the working agent chat dictation implementation.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 10:10:31 +00:00
Mohamed Boudra
b97ae99b2b feat(app): add Android product flavors and env-based daemon config 2025-11-28 08:19:41 +01:00
Mohamed Boudra
08dc2ed937 feat(app): add zustand store for session state management 2025-11-27 21:36:03 +01:00
Mohamed Boudra
bf58e81ce8 refactor(app): simplify session directory with direct snapshots and add sessionReady state
Replace subscription-based session accessor pattern with direct snapshot updates in daemon connections context. Add sessionReady flag to connection state to track when initial agent list has been received. Auto-select first ready host in create agent modal. Migrate from app.json to app.config.js. Add android:release script and Playwright testing docs.
2025-11-27 21:06:48 +01:00
Mohamed Boudra
a01c3f9b73 Flatten home screen agent list and sort by activity
The agent list on the home screen now displays all agents in a single flat
list rather than grouped by host. Each row shows a host badge next to the
agent title so users can still identify which host an agent belongs to.
Agents are sorted globally by status (running first) then by most recent
activity, providing a unified view across all hosts.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 20:18:49 +01:00
Mohamed Boudra
135bcf13a8 Fix create agent modal incorrectly showing hosts as offline
The availability check was failing for online hosts due to a timing
issue: connectionStates would show "online" before SessionProvider
registered its session accessor, causing session to be null.

Changed selectedDaemonIsUnavailable to selectedDaemonIsOffline which
only checks connectionStates status (the single source of truth for
connection state), removing the redundant session and ws.isConnected
checks. isTargetDaemonReady still requires session for actual operations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 20:12:11 +01:00
Mohamed Boudra
0c571f6f43 Add loading indicator to home screen while agents are fetching
useAggregatedAgents now returns { groups, isLoading } where isLoading is true
while the daemon registry loads or while hosts are connecting without a session.
HomeScreen shows an ActivityIndicator during loading, then either the agent
list or empty state. Offline hosts don't block loading—only connecting hosts do.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 20:07:33 +01:00
Mohamed Boudra
69881d3862 Remove connection status banners from home screen
Host health now only displays in Settings. The home screen no longer
shows offline/connecting/error banners for hosts, following the
principle that a stopped host is not an error.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 20:03:22 +01:00
Mohamed Boudra
c88bbd3ee8 Rename "Server" to "Host" in Settings add-host form and restart alert
- Change placeholder text from "My Server" to "My Host"
- Change restart success alert title from "Server reachable" to "Host reachable"

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 19:58:31 +01:00
Mohamed Boudra
e98952bf4c Remove manual connect prompts 2025-11-26 19:47:55 +01:00
Mohamed Boudra
0db0e1ad23 Clarify automatic host reconnection 2025-11-26 19:33:43 +01:00
Mohamed Boudra
393aa44e68 feat: auto reconnect hosts when app resumes 2025-11-26 19:26:27 +01:00
Mohamed Boudra
99b055d2f9 Remove global settings test form 2025-11-26 19:09:19 +01:00
Mohamed Boudra
4f00e07284 Eliminate hidden host defaults 2025-11-26 19:02:47 +01:00
Mohamed Boudra
670c38ab8c Remove legacy host auto-connect state 2025-11-26 18:53:53 +01:00
Mohamed Boudra
737e8904be Remove auto-connect toggle from host settings 2025-11-26 18:42:36 +01:00
Mohamed Boudra
db87f331fb Remove primary host plumbing 2025-11-26 18:30:04 +01:00
Mohamed Boudra
5807f62f1a Remove active host dependency from UI actions 2025-11-26 18:04:40 +01:00
Mohamed Boudra
e6d2998904 Remove primary host concept 2025-11-26 17:51:25 +01:00
Mohamed Boudra
3524b0facb Remove active host notion from UI 2025-11-26 17:39:07 +01:00
Mohamed Boudra
04d51fbe10 Rename daemon UI copy to host 2025-11-26 17:26:25 +01:00
Mohamed Boudra
59967aad87 chore: land multi-daemon rollout 2025-11-26 08:47:49 +00:00
Mohamed Boudra
4ab79b1a50 feat: add multi-daemon support with session routing and connection management
Introduce DaemonRegistry and DaemonConnections contexts for managing multiple server connections. Add session directory for aggregating agents across daemons, with automatic routing based on agent/server context.

Key changes:
- Add daemon profile management (add/edit/remove/set default)
- Implement connection state tracking with reconnection and exponential backoff
- Create useAggregatedAgents hook for unified agent list across daemons
- Add useDaemonSession and useDaemonRequest hooks for daemon-scoped operations
- Update agent routes to include serverId for proper session routing
- Add connection health indicators on home screen and settings
- Persist session snapshots per daemon for faster hydration on reconnect
- Guard screens gracefully when target daemon is offline
- Add React Query for consistent loading/error state management

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 08:25:02 +01:00
Mohamed Boudra
7d8979e125 chore: declare encryption usage 2025-11-24 23:16:31 +01:00
Mohamed Boudra
cc4a210ebe chore: align expo slug for eas 2025-11-24 22:33:49 +01:00
Mohamed Boudra
30d1b63b2b chore: typecheck and build readiness 2025-11-24 22:31:41 +01:00
Mohamed Boudra
a95184cc5a Fix agent web loading issues 2025-11-23 14:49:29 +01:00
Mohamed Boudra
3b20cf0654 Capture Cmd+D dictation on web 2025-11-23 14:36:01 +01:00
Mohamed Boudra
6aa9b1c72e Add web dictation recorder and shortcuts 2025-11-23 14:32:08 +01:00
Mohamed Boudra
47a99f5668 Fix reasoning timeline UI and type errors 2025-11-23 14:12:53 +01:00
Mohamed Boudra
95bacf8fc7 feat: add git branch/worktree setup, message queueing, file explorer improvements, and server restart 2025-11-22 23:20:42 +01:00
Mohamed Boudra
9feec81047 feat: improve audio streaming and add wait-for-agent cancellation support 2025-11-16 18:02:13 +01:00
Mohamed Boudra
e1bcb97e29 chore: update app icons and branding assets with black adaptive icon background 2025-11-16 13:55:13 +01:00
Mohamed Boudra
b046dae799 refactor: rebrand project from voice-dev to paseo across all packages and configs 2025-11-15 20:45:09 +01:00
Mohamed Boudra
b39497d08f refactor headers into shared screen shell 2025-11-15 20:29:23 +01:00
Mohamed Boudra
adda0d92d0 Fix repo typecheck failures 2025-11-15 20:17:47 +01:00
Mohamed Boudra
42a51124af feat: show agent working indicator in stream 2025-11-15 19:51:57 +01:00
Mohamed Boudra
94862b73f4 Adjust AgentInput controls for send-only state 2025-11-15 19:46:37 +01:00
Mohamed Boudra
ec8aee2c12 feat: use stop icon for cancel control 2025-11-15 19:44:21 +01:00
Mohamed Boudra
8e6508f01f Surface codex provider tool events live 2025-11-15 19:41:40 +01:00
Mohamed Boudra
9dcc8314b2 Add barge-in telemetry 2025-11-15 19:31:27 +01:00
Mohamed Boudra
4bd36c0808 feat: keep agents running during orchestrator speech 2025-11-15 19:21:57 +01:00
Mohamed Boudra
24a245bd17 auto-focus orchestrator agent during realtime 2025-11-15 19:18:39 +01:00