[browser] POST /v1/instances/:id/browse + browser.task runner type
The entry point that starts a generic browser task.
Do
POST /v1/instances/:id/browse { url, objective, dryRun? } — owner-scoped, requires a live runtime; starts BrowserTaskWorkflow (mirrors startJobApply in routes/instances-apply.ts).
- New runner task type
browser.task in packages/browser-runner (mirror job.apply_agent; reuse the existing /browser/* primitives; the runner already exposes generic snapshot/act).
dryRun guard that blocks irreversible actions (like apply's submit guard) for safe testing.
Acceptance
Depends on the engine extraction + BrowserTaskWorkflow. Part of the browser-generalization epic.
[browser]
POST /v1/instances/:id/browse+browser.taskrunner typeThe entry point that starts a generic browser task.
Do
POST /v1/instances/:id/browse { url, objective, dryRun? }— owner-scoped, requires a live runtime; startsBrowserTaskWorkflow(mirrorsstartJobApplyinroutes/instances-apply.ts).browser.taskinpackages/browser-runner(mirrorjob.apply_agent; reuse the existing/browser/*primitives; the runner already exposes generic snapshot/act).dryRunguard that blocks irreversible actions (like apply's submit guard) for safe testing.Acceptance
POST /browsestarts a task; runner acceptsbrowser.task(no "Unknown task type").dryRunprevents irreversible actions; omitting it acts for real.Depends on the engine extraction + BrowserTaskWorkflow. Part of the browser-generalization epic.