3.4 KiB
3.4 KiB
1. Device config & settings store
- 1.1 Add
storage/device_config.pywith a SQLite-backedDeviceConfigStore(device_id, name, driver_type, connection_info json) following theTaskMetadataStorepattern, withadd,remove,list, andgetmethods - 1.2 Add a
settings(key, value)table to the same store withget_setting/set_settinghelpers, seeded with a defaultmax_steps - 1.3 Add unit tests for
DeviceConfigStore(add/remove/list, settings get/set, unknown key/device handling)
2. Console status API
- 2.1 Add
api/console.pywith anAPIRouter; implementGET /console/devices(list + status viaDeviceManager.list_devices()) - 2.2 Implement
GET /console/tasks(viaTaskMetadataStore.list_tasks()) with optionaldevice_id/statusquery filters - 2.3 Implement
GET /console/tasks/{task_id}(404 on unknown id) - 2.4 Implement
GET /console/tasks/{task_id}/timelinereadingTimeline.read(task_id)/ArtifactStore, inlining screenshots as base64 - 2.5 Add tests for all four endpoints covering populated and empty states, and the 404 case
3. Console config API
- 3.1 Implement
POST /console/devices: validatedriver_typeagainst a supported-driver registry ({"wda": ...}), build thedriver_factory, callDeviceManager.register_device, persist viaDeviceConfigStore; return400for unsupported driver types - 3.2 Implement
DELETE /console/devices/{device_id}: callDeviceManager.unregister_deviceand remove the persisted config; return404for unknown device ids - 3.3 Implement
GET /console/configandPUT /console/configformax_steps, validating positive values (400otherwise), applying the change to the liveTaskRunner.configand persisting it via the settings table - 3.4 Wire startup reload: in
create_app(), read all persisted device configs and the persistedmax_stepssetting, register devices and constructTaskRunnerConfigaccordingly, before returning the app - 3.5 Mount the
consolerouter intocreate_app()inapi/rest.pyand enable permissive CORS for local frontend development - 3.6 Add tests for register/unregister (success + validation errors), config get/update (success + invalid value), and startup reload of persisted devices/settings
4. Web console frontend (independent SPA)
- 4.1 Scaffold an independent Vue 3 + Vite SPA project (in-repo
console/per design's default) with its ownpackage.json/build tooling - 4.2 Implement the device status dashboard view (list + empty state) against
GET /console/devices - 4.3 Implement the task list view (with device/status filters) and task detail + timeline replay view (screenshots) against the console-status-api endpoints
- 4.4 Implement the device configuration screen (add/remove device forms, surfacing API validation errors) against the console-config-api endpoints
- 4.5 Implement the runtime parameter settings form (
max_steps) againstGET/PUT /console/config - 4.6 Document how to run the frontend dev server against the local backend (base URL config, CORS expectations)
5. Verification
- 5.1 Run the full backend test suite (
pytest) and confirm no regressions to existing REST/MCP endpoints - 5.2 Manually verify end-to-end: register a device via the UI, run a task via the existing
/agent/taskendpoint, and confirm its status/timeline/screenshots render correctly in the console