Set intent package to com.google.android.gm to bypass app chooser,
update tool description to guide agent to tap Send via screen.read +
app.automate, and add 4 mock validation tests plus a real end-to-end
Gmail send test with Samsung chooser fallback handling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add AccessibilityBridge for bidirectional tool<->service communication
- Upgrade CellClawAccessibility: swipe gestures (left/right/up/down),
screen reading with element bounds, find_element, wait_and_read
- AppAutomateTool now awaits results instead of fire-and-forget
- Add ScreenReadTool (screen.read) - read-only AUTO policy for
reading foreground app UI elements and text
- Swipe gestures calibrated for card-swiping apps (60% screen width)
- All 3 E2E agent loop tests pass on Samsung Galaxy Z Flip
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Test verifies Gemini calls browser.search with correct query params
- Query correctly contains boston and date keywords
- All 4 Gemini integration tests pass on phone + emulator
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add EmailSendTool (email.send) using Android ACTION_SENDTO intent
- Add Gemini integration tests (completion, tool use, streaming)
- Move API key from hardcoded test to BuildConfig via local.properties
- Update default Gemini model from 2.0-flash to 2.5-flash
- Add email.send to AutonomyPolicy defaults (ASK)
- Register EmailSendTool in AppModule DI
- Update unit tests for new model name
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add GeminiProvider with Gemini API function calling support
- Add ProviderManager to handle provider selection and API key management
- Update AgentLoop to use ProviderManager instead of hardcoded Anthropic
- Redesign SetupScreen with provider selection cards (radio buttons)
- Update SettingsScreen with per-provider API key management
- Update DI module to provide all three providers
- Add unit tests for GeminiProvider and ProviderManager
- Tested on emulator and physical device (Samsung Galaxy Z Flip)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix SSE streaming: replace inline processSSE with readLine loop
to allow suspend emit() calls inside the flow
- Remove @Serializable from CompletionRequest (ToolApiDefinition
is not serializable)
- Fix LocationTool type inference for suspendCancellableCoroutine
- Add gradlew/gradlew.bat and gradle-wrapper.jar
Build: assembleDebug passes, APK generated (20.7MB)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>