Commit Graph

663 Commits

Author SHA1 Message Date
Mohamed Boudra
07ca5222c1 fix(server): use createTestLogger in unit tests
Add createTestLogger utility to provide silent pino loggers for tests.
Update test files that construct AgentRegistry, AgentManager, and
agent clients to pass the required logger parameter.
2026-01-17 13:10:02 +07:00
Mohamed Boudra
45096acdcb fix(server): increase hookTimeout and fix ClaudeAgentClient constructor
- Increase vitest hookTimeout from 30s to 60s to prevent hook timeouts
  in e2e tests that need time to start daemon instances
- Add `**/dist/**` to excludes to avoid running compiled test files
- Fix ClaudeAgentClient constructor call in claude-agent-commands.test.ts
  to pass required logger option
2026-01-17 13:09:42 +07:00
Mohamed Boudra
1c9d9367c1 fix(server): remove CI-based test exclusions from vitest config
Enable full server test suite (including e2e and integration tests) to
run in CI. Removed conditional exclude logic based on CI env var.

The suite now runs the same tests in CI and locally, maintaining
parallel execution support via forks pool.
2026-01-17 12:07:00 +07:00
Mohamed Boudra
d964415eba feat(server): improve task CLI with steering, execution order, and planner guidance
- Fix steering notes to check scope task instead of leaf task
- Fix NOT_DONE replan to use scope for bird's eye view
- Pass reason to planner prompt ("Why you were called" section)
- Add execution-order.ts with reusable computeExecutionOrder and buildSortedChildrenMap
- Make 'tree' an alias for 'plan' command
- Add comprehensive help text for run command and acceptance criteria
- Add planner guidance for propagating requirements to subtasks
2026-01-17 11:46:38 +07:00
Mohamed Boudra
420f25f1e9 feat: add download toast, e2e permission tests, and update favicons
- Add download toast component with progress indicator and auto-dismiss
- Add download store for managing file download state
- Add e2e tests for permission prompts (allow/deny flows)
- Add global setup for e2e tests with isolated daemon instance
- Update favicon assets with new design
- Refactor agent-stream-view to use shared tool-call-details component
- Simplify file-explorer-pane component
- Clean up unused screenshots and PRODUCTION.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 20:23:07 +07:00
Mohamed Boudra
f733f2852d fix(app): adjust agent list item spacing 2026-01-16 16:25:53 +07:00
Mohamed Boudra
ed50c168ad refactor(app): unified panel state machine for mobile sidebars
Replace separate sidebar stores with a unified panel store that uses a
discriminated union state machine on mobile. This makes it impossible
for both the agent list and file explorer sidebars to be open at the
same time on mobile.

Mobile state machine (mobileView):
- 'agent': Main agent view (no overlay panel)
- 'agent-list': Agent list sidebar (left overlay)
- 'file-explorer': File explorer sidebar (right overlay)

Desktop retains independent boolean toggles since sidebars sit
alongside content rather than overlaying it.

Key changes:
- Created stores/panel-store.ts with unified state
- Deleted stores/sidebar-store.ts and explorer-sidebar-store.ts
- Updated all components to use new panel store
- Animation contexts derive isOpen from unified state
2026-01-16 16:19:49 +07:00
Mohamed Boudra
b8f056060f feat(server): migrate all logging to pino
- Add pino with pino-pretty for structured logging
- Create root logger in index.ts with child loggers per module
- Support log level via PASEO_LOG env var and config.json
- Support log format (pretty/json) via PASEO_LOG_FORMAT and config.json
- Replace all console.* in runtime code with appropriate log levels
- Scripts use process.stdout/stderr for output
- Error logging uses correct pattern: logger.error({ err }, msg)
2026-01-15 17:16:01 +07:00
Mohamed Boudra
ef853914d5 feat: improve agent stream view UI, fix history replay timestamps, and enhance planner/worker loop 2026-01-15 15:10:08 +07:00
Mohamed Boudra
5289be9c06 feat(task): add TDD pattern guidance to planner prompt
When top-level task mentions "TDD" or "test-driven", planner now
creates test-first task pairs:
1. Write failing test (must fail for RIGHT reason, not syntax errors)
2. Make test pass (depends on failing test task)

This enforces TDD through task structure rather than acceptance criteria.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 10:09:39 +07:00
Mohamed Boudra
02b3f83ae2 feat(task): add acceptance criteria, planner/worker/judge loop
- Add acceptanceCriteria field to tasks (structured checklist)
- Add --accept flag to create/update commands (repeatable, append-only)
- Add failed status for catastrophically stuck tasks
- Implement planner/worker/judge agent loop in run command:
  - Planner (gpt-5.2): breaks down tasks, reorganizes tree, writes criteria
  - Worker (sonnet/codex): implements tasks, cannot mark done
  - Judge (haiku): verifies acceptance criteria with no-excuses policy
- Hybrid replanning: after NOT_DONE and every N completions
- Parent tasks blocked until all children are done
- Add getDescendants method for children tree traversal
- Update getReady/getBlocked/getClosed to use children tree for scope

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 10:00:01 +07:00
Mohamed Boudra
86ea9966fc test: exclude claude-agent test in CI 2026-01-14 19:47:09 +07:00
Mohamed Boudra
b6ab9f3bc1 test: exclude more integration tests in CI 2026-01-14 19:44:33 +07:00
Mohamed Boudra
1cbe185ac5 test: exclude e2e and integration tests in CI 2026-01-14 19:42:46 +07:00
Mohamed Boudra
347389965c test: skip opencode integration tests in CI 2026-01-14 19:37:03 +07:00
Mohamed Boudra
aa090748a6 chore: sync all local changes 2026-01-14 19:23:27 +07:00
Mohamed Boudra
cc815f6fa2 feat: add favicon and app icon images 2026-01-14 19:22:57 +07:00
Mohamed Boudra
6ac2ef7366 feat: add favicon status hook 2026-01-14 19:19:04 +07:00
Mohamed Boudra
83b989124e fix: import unistyles config before components 2026-01-14 19:17:47 +07:00
Mohamed Boudra
6c9abe0854 feat: add web build and deploy scripts for app 2026-01-14 19:12:50 +07:00
Mohamed Boudra
f1827731ed fix: resolve type errors for CI deployment 2026-01-14 19:11:01 +07:00
Mohamed Boudra
b756bedbe7 fix: use GITHUB_TOKEN for package auth 2026-01-14 19:08:11 +07:00
Mohamed Boudra
bf6c97357f fix: add GitHub packages auth for app deployment
The expo-two-way-audio package is hosted on GitHub's npm registry
and requires authentication to download.
2026-01-14 18:59:14 +07:00
Mohamed Boudra
b8a8965ba7 Add website to workspaces 2026-01-14 18:38:26 +07:00
Mohamed Boudra
51ed99b8a8 Add website package and assets 2026-01-14 18:37:41 +07:00
Mohamed Boudra
358b9aded9 Add deployment workflows for website and app 2026-01-14 18:36:51 +07:00
Mohamed Boudra
92e141f19c Website content updates and docs section
- Add docs pages with Getting Started and Best Practices
- Rewrite hero copy, FAQ collapsible sections
- Remove "Not another cloud sandbox" section title
- Darken hero backdrop
2026-01-14 18:36:19 +07:00
Mohamed Boudra
070073be6b Add FAQ section to website
- Is this free? (open source, bring your own CLI credentials and API keys)
- Does my code leave my machine? (local agents, optional E2E relay)
- What agents does it support? (Claude Code, Codex, OpenCode)
- What's the business model? (none, sharing what I built for myself)
- Why did you build this? (origin story with Termux/SSH struggles)
- Isn't this just more screen time? (less desk time, better quality of life)
2026-01-14 16:52:24 +07:00
Mohamed Boudra
70e2d66dd5 feat: persist draft messages and UI refinements
- Add dedicated draft-store with AsyncStorage persistence for drafts
  that survive app refresh/crash
- Reduce markdown bold weight from bold to medium (500)
- Various theme and component style updates
- Server bootstrap and config improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-14 10:07:54 +07:00
Mohamed Boudra
34a49c147f feat: add smart notification routing with device-aware heartbeats and push support 2026-01-13 16:07:34 +07:00
Mohamed Boudra
4803589ea1 Add copy button for assistant turns in agent stream
- Add TurnCopyButton component that copies all assistant messages from a turn
- Detect turn boundaries (before user message or end of stream when not running)
- Lazily compute turn content on click to avoid render-time overhead
- Ghost icon style with hover effect (color lightens)
2026-01-13 12:06:33 +07:00
Mohamed Boudra
7f7f5c53e6 Add server-side client activity tracking for smart notifications
- Add client_heartbeat message type for clients to report activity
- Add shouldNotify field to attention_required events
- Track client activity (focusedAgentId, lastActivityAt) per session
- WebSocketServer checks all sessions to determine shouldNotify
- If any client is active on the agent (within 60s), shouldNotify=false
- Add onAgentAttention callback to AgentManager for clean separation
2026-01-13 11:50:13 +07:00
Mohamed Boudra
2fa7ec17cb WIP: Refactor and polyfill updates
- Add crypto polyfill for Expo
- Update daemon client and websocket server
- Simplify codex agent tests
2026-01-13 11:06:21 +07:00
Mohamed Boudra
868f9fb571 WIP: Large refactor checkpoint
- Refactored daemon client and RPC layer
- Added new client package structure in server
- Removed legacy hooks (use-daemon-request, use-session-rpc, use-websocket)
- Added use-daemon-client hook
- Added e2e test infrastructure with Playwright
- Updated agent providers and session handling
- Removed codex-sdk patches
2026-01-12 13:30:20 +07:00
Mohamed Boudra
7c2e959c19 Ignore task metadata 2026-01-11 23:56:56 +07:00
Mohamed Boudra
32fe3bd4a0 Add OS notifications for agent attention 2026-01-11 23:46:14 +07:00
Mohamed Boudra
f81fd1c01a Add command autocomplete and stream spacing updates 2026-01-11 22:36:34 +07:00
Mohamed Boudra
0ec2fc62db feat(agent): add command support to ClaudeAgentSession
- Add AgentSlashCommand and AgentCommandResult types
- Add listCommands() and executeCommand() to AgentSession interface
- Implement command support in ClaudeAgentSession
- Fix user message handling for local command output (string content)
- Add POC scripts for command investigation
- Add TDD tests for command functionality
2026-01-11 17:16:08 +07:00
Mohamed Boudra
e57cad2660 feat(app): extract form preferences into dedicated hook with per-provider storage 2026-01-11 16:21:59 +07:00
Mohamed Boudra
ebabcc09e5 feat: add opencode provider and refactor stream model to head/tail architecture 2026-01-11 16:00:25 +07:00
Mohamed Boudra
7fe10f9b4a Prompt is too long 2026-01-11 09:29:00 +07:00
Mohamed Boudra
f5810c18ac feat(app): add text selection and fix shell error display
- Add selectable prop to all Text components in tool call content areas
- Add ShellErrorResultSchema to parse tool_result error format
- Update ShellToolCallSchema to extract content from error results
- Also handle tool_result extraction in formatValue as fallback
2026-01-11 00:20:29 +07:00
Mohamed Boudra
018e3b6a8c feat(app): extract tool call details for inline/sheet display
- Create ToolCallDetailsContent component for shared content rendering
- Add useToolCallDetails hook for parsing tool call data
- Desktop (md+): expand tool call details inline below badge
- Mobile (xs/sm): open bottom sheet on tap (unchanged behavior)
- Remove unused props from ToolCall component

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-11 00:10:26 +07:00
Mohamed Boudra
a0abf4a79f feat(app): add Read tool call display with file path and content
- Add ReadToolCallSchema to parse Read tool calls (file_path, offset, limit)
- Display file path immediately from input (before result arrives)
- Show offset/limit range when specified
- Display file content in scrollable area when result completes

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-10 23:55:44 +07:00
Mohamed Boudra
9048198045 fix(app): use gesture handler ScrollView in tool call sheet 2026-01-10 23:51:06 +07:00
Mohamed Boudra
3ea26d7504 chore(app): remove temporary test screenshots 2026-01-10 23:49:24 +07:00
Mohamed Boudra
5aebb418df fix(app): auto-grow text input on iOS
Remove explicit height style on iOS TextInput - only use minHeight/maxHeight
to allow native auto-sizing. Web still uses explicit height for controlled
sizing via onContentSizeChange measurement.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-10 23:47:37 +07:00
Mohamed Boudra
f073be0b98 feat(app): improve tool call sheet with word-level diff and better UX
- Add word-level highlighting using LCS algorithm for edit diffs
- Match diff colors to explorer sidebar (GitHub-style rgba backgrounds)
- Use discriminated union for tool call parsing (shell, edit, generic)
- Add horizontal scroll for bash/command output instead of wrapping
- Remove status badge from bottom sheet header
- Fix sheet snap points (60%/95%) and disable dynamic sizing
- Add min-width to diff viewer for full-width backgrounds

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-10 23:37:13 +07:00
Mohamed Boudra
42129926ae feat(app): add maestro tests, download progress, and task hierarchy
Add Maestro E2E test flows for app launch and sidebar interactions. Implement download progress tracking with speed/ETA display in file explorer. Extend task CLI with parent-child hierarchy, body content from stdin, and ancestor context in task show. Fix explorer sidebar gesture to allow horizontal scrolling while preserving close swipe. Replace hardcoded monospace font with Fonts.mono constant. Fix RefreshControl to only show spinner on manual pull-to-refresh.
2026-01-10 22:44:57 +07:00
Mohamed Boudra
584b0413a5 refactor: unify layout widths and font sizes
- Add MAX_CONTENT_WIDTH (820px) constant for consistent chat/form widths
- Bump theme font sizes (base now 16px) for better readability
- Apply max width to stream view, input area, and new agent form
- Position new agent form at bottom of scroll area
- Remove working directory helper text
- Add cmd+b sidebar toggle when textarea is focused
2026-01-09 19:11:35 +07:00