Commit Graph

97 Commits

Author SHA1 Message Date
Sanju Sivalingam
d03be7365e debug: add logging to session middleware for auth investigation 2026-02-18 11:59:59 +05:30
Sanju Sivalingam
68ca812267 revert(server): use direct DB queries for all auth validation
Reverts middleware and dashboard WS to direct DB session lookups.
Replaces auth.api.verifyApiKey in device WS with direct DB query
using SHA-256 hash matching, removing dependency on BETTER_AUTH_SECRET
for auth validation.
2026-02-18 11:46:48 +05:30
Sanju Sivalingam
a865c1e2f0 fix(android): add explicit connect/request timeouts to WebSocket client
CIO engine had no timeout config, causing connect failures on slower networks.
2026-02-18 11:31:47 +05:30
Sanju Sivalingam
a1ec1ac731 fix(agent): use device screen dimensions for scroll/swipe coordinates
Swipe coordinates were hardcoded for 1080x2400 screens, causing scrolls
to fail on devices with different resolutions. Now reads screenWidth and
screenHeight from DeviceInfo and computes coordinates proportionally.
2026-02-18 10:48:37 +05:30
Sanju Sivalingam
81d78684a5 refactor: use better-auth api for session validation in server middleware and websocket 2026-02-18 10:38:15 +05:30
Sanju Sivalingam
22b13bec2f update android app default server url to production 2026-02-18 10:25:42 +05:30
Sanju Sivalingam
22481c8834 add health endpoint to web app 2026-02-18 10:08:25 +05:30
Sanju Sivalingam
071b3960a7 add start:server script to root package.json 2026-02-18 09:38:04 +05:30
Sanju Sivalingam
7a2a1186a2 use bun instead of node for web start script 2026-02-18 09:31:16 +05:30
Sanju Sivalingam
dbff2e1e35 add start script to web package.json for railway deploy 2026-02-18 09:30:33 +05:30
Sanju Sivalingam
a745815400 update readme and configure monorepo for railway deployment
readme rewritten with ascii diagrams, detailed setup, and conversational tone.
root package.json updated with packageManager field for bun, web workspace,
and build/start scripts pointing to web/ for railway railpack compatibility.
2026-02-18 09:20:03 +05:30
Somasundaram M
b65004e015 Merge pull request #5 from msomu/main
Fix Settings UI reactivity, resolve compiler warnings, update .gitignore
2026-02-18 08:46:41 +05:30
Somasundaram Mahesh
5207e4ea9b Fix Settings UI reactivity, resolve compiler warnings, update .gitignore
- Make screen capture permission and battery optimization states reactive
- Add lifecycle observer to refresh battery status on resume
- Add lifecycle-runtime-compose dependency for non-deprecated LocalLifecycleOwner
- Replace deprecated LocalLifecycleOwner import
- Remove unused REQUEST_CODE constant
- Use KTX createBitmap() and bitmap[x,y] extensions
- Add misc.xml and junie.xml to .gitignore
2026-02-18 07:47:28 +05:30
Sanju Sivalingam
792b42974f feat(agent): implement server-side multi-step skills
Skills (copy_visible_text, find_and_tap, submit_message, read_screen,
wait_for_content, compose_email) were CLI-only using direct ADB. The
server prompt advertised them but they silently failed when chosen.

Now intercepted in the agent loop before actionToCommand() and executed
server-side using existing WebSocket primitives (get_screen, tap, swipe,
clipboard_set). Each skill replaces 3-8 LLM calls with deterministic
server-side logic.
2026-02-18 00:58:59 +05:30
Sanju Sivalingam
db995e4913 fix(agent): prevent stuck loop by adding action history to LLM prompt
The UI agent had no memory of previous actions — each step was a fresh
single-shot LLM call. After typing and sending a message, the LLM saw
an empty text field and retyped the message in a loop.

- Add RECENT_ACTIONS (last 5 actions with text/result) to user prompt
- Add chat app completion detection rule to dynamic prompt
- Add send-success hints for WhatsApp and Messages apps
- Add git convention to CLAUDE.md (no co-author lines)
2026-02-18 00:53:13 +05:30
Sanju Sivalingam
9193b02d36 fix(agent): address code review issues
- Add empty goal guard in parser (returns done instead of passthrough)
- Replace `as any` casts in pipeline.ts with proper ActionDecision types
- Add runtime type guards for untrusted LLM output in classifier
- Add intent action to dynamic prompt so UI agent can fire intents

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:32:14 +05:30
Sanju Sivalingam
3769b21ed1 refactor(agent): delete preprocessor.ts (replaced by parser.ts) 2026-02-18 00:28:50 +05:30
Sanju Sivalingam
d5c3466554 feat(agent): wire intent-first pipeline into all entrypoints
Replace preprocessor+runAgentLoop with runPipeline in both device.ts
(WebSocket) and goals.ts (REST). The pipeline orchestrates: deterministic
parser (stage 1) -> LLM classifier (stage 2) -> lean UI agent (stage 3).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:28:13 +05:30
Sanju Sivalingam
18b8509081 feat(agent): add pipeline mode with dynamic prompts to agent loop
When pipelineMode is enabled in AgentLoopOptions, the loop uses
buildDynamicPrompt() with per-screen context (editable fields,
scrollable elements, app hints, stuck state) instead of the static
mega-prompt. Legacy mode (default) is unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:24:25 +05:30
Sanju Sivalingam
3f389c5de6 feat(agent): add dynamic prompt builder for Stage 3 UI agent 2026-02-18 00:22:24 +05:30
Sanju Sivalingam
91a828452b feat(agent): add Stage 2 LLM goal classifier 2026-02-18 00:15:56 +05:30
Sanju Sivalingam
5dd199e0b8 feat(agent): add Stage 1 deterministic goal parser 2026-02-18 00:09:15 +05:30
Sanju Sivalingam
122bf87e72 feat(agent): add app-specific hints registry 2026-02-18 00:07:24 +05:30
Sanju Sivalingam
41a49f0619 feat(shared): add PipelineResult, IntentCommand, DeviceCapabilities types
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:04:36 +05:30
Sanju Sivalingam
e300f04e13 feat: installed apps, stop goal, auth fixes, remote commands
- Android: fetch installed apps via PackageManager, send to server on connect
- Android: add QUERY_ALL_PACKAGES permission for full app visibility
- Android: fix duplicate Intent import, increase accessibility retry window
- Android: default server URL to ws:// instead of wss://
- Server: store installed apps in device metadata JSONB
- Server: inject installed apps context into LLM prompt
- Server: preprocessor resolves app names from device's actual installed apps
- Server: add POST /goals/stop endpoint with AbortController cancellation
- Server: rewrite session middleware to direct DB token lookup
- Server: goals route fetches user's saved LLM config from DB
- Web: show installed apps in device detail Overview tab with search
- Web: add Stop button for running goals
- Web: replace API routes with remote commands (submitGoal, stopGoal)
- Web: add error display for goal submission failures
- Shared: add InstalledApp type and apps message to protocol
2026-02-17 22:50:18 +05:30
Sanju Sivalingam
fae5fd3534 fix: goals route now finds devices by persistent DB ID, not connection UUID 2026-02-17 21:22:43 +05:30
Sanju Sivalingam
5b73e89217 fix: add valibot schemas to query() functions — fixes bad request on detail page 2026-02-17 21:16:58 +05:30
Sanju Sivalingam
423cd7af01 fix: add getDevice query, fix IN clause, add error handling to getDeviceStats 2026-02-17 21:13:50 +05:30
Sanju Sivalingam
b240887b0e fix: resolve type errors in devices pages 2026-02-17 21:08:47 +05:30
Sanju Sivalingam
9de0b040dc feat: rewrite device detail page with tabbed layout (Overview/Sessions/Run)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:05:26 +05:30
Sanju Sivalingam
a46af1a236 feat: rewrite devices page as phone-card grid
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:04:18 +05:30
Sanju Sivalingam
a5bfe74384 feat: add DeviceCard.svelte phone-frame component
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:03:25 +05:30
Sanju Sivalingam
9423ed85ff feat: add device stats query and enrich listDevices with metrics
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:02:07 +05:30
Sanju Sivalingam
bf92ff4742 feat: handle heartbeat messages, update battery in DB + dashboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:01:06 +05:30
Sanju Sivalingam
c3d6674793 feat: add 60s battery heartbeat to ConnectionService
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:59:33 +05:30
Sanju Sivalingam
a7738936f2 feat: extend DeviceInfo with battery, manufacturer, heartbeat
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:55:42 +05:30
Sanju Sivalingam
0c0efe9b1e chore: remove docs/plans from repo and gitignore it
Contains product architecture, roadmaps, and implementation plans
that should not be public.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:17:06 +05:30
Sanju Sivalingam
c395f9d83e feat: add DB persistence, real-time WebSocket, goal preprocessor, and Android companion app
- Add device/session/step DB persistence in server agent loop
- Add goal preprocessor for compound goals (e.g., "open YouTube and search X")
- Add step-level logging to agent loop
- Fix dashboard WebSocket auth (direct DB token lookup instead of auth.api)
- Fix web layout to use locals.session.token instead of cookie
- Add dashboard-ws.svelte.ts WebSocket store with auto-reconnect
- Rewrite devices page with direct DB queries and real-time updates
- Add device detail page with live step display and session history
- Add Android companion app resources, themes, and screen capture consent

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:12:41 +05:30
Sanju Sivalingam
ea707af83e fix(android): add CHANGE_NETWORK_STATE for foreground service on SDK 36
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:41:59 +05:30
Sanju Sivalingam
61fcecd021 fix(android): add screenHash to screen responses, handle goal_failed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:17:48 +05:30
Sanju Sivalingam
4e9f0e14ae feat(android): add HomeScreen, SettingsScreen, LogsScreen with bottom nav
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:55:02 +05:30
Sanju Sivalingam
516b83bd0f feat(android): add ReliableWebSocket, CommandRouter, ConnectionService
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:51:19 +05:30
Sanju Sivalingam
ac7fc85891 feat(android): add GestureExecutor and ScreenCaptureManager
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:47:10 +05:30
Sanju Sivalingam
0e8ff24e08 feat(android): add AccessibilityService, ScreenTreeBuilder, permissions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:43:42 +05:30
Sanju Sivalingam
78b605bc86 feat(android): add data models, DataStore settings, Application class
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:40:56 +05:30
Sanju Sivalingam
e22326cbd3 feat(android): add Ktor, serialization, DataStore, navigation dependencies
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:38:56 +05:30
Sanju Sivalingam
2c17ba40e8 docs: add Android companion app design
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:21:34 +05:30
Sanju Sivalingam
61461199db fix: add non-null assertion for deviceId route param
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:06:23 +05:30
Sanju Sivalingam
c659dfd8cc feat: add web Dockerfile for Railway deployment
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:46:31 +05:30
Sanju Sivalingam
84af22e4a1 feat: add goal proxy API route
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:45:52 +05:30