Add opt-in browser tools for desktop tabs
* Add opt-in browser tools for desktop tabs Adds the daemon opt-in, desktop tab routing, MCP tools, and real browser automation surfaces for Paseo desktop browser tabs. * Fix browser tools CI expectations * Address browser tools review findings * Restrict browser file automation paths * Fix browser upload test on Windows * Harden browser navigation inputs * Make browser tools create usable tabs * Update browser MCP empty-state test * Fail browser tab creation when registration times out * Fix browser screenshots for agents * Hide disabled browser tools from agents * Address browser tools architecture review * Replace browser tools review tests * Wrap browser tab registration errors * Mock Expo Router in app unit tests * Handle invalid browser automation requests * Return browser failure on desktop disconnect * Update browser disconnect websocket test * Relax browser timeout polling test * Handle invalid browser responses * Return browser failure when send fails * Remove local diagnostics and fixture paths * Fix dev service home fallback * Use worktree home for dev services * Use managed daemon in desktop dev * fix(browser): keep agent tabs addressable Track agent-active browser targets separately from human-focused tabs and keep resident webviews alive for automation. Browser tool visibility now comes from registration while the broker reports disabled execution. * refactor(browser): register tools through catalog Move browser tool registration onto the shared Paseo tool catalog so the MCP server remains only the transport adapter. * fix(settings): translate browser tools host error
This commit is contained in:
@@ -3816,7 +3816,7 @@ test("open_project_request does not match a new child directory to an existing p
|
||||
const session = createSessionForWorkspaceTests();
|
||||
const projects = new Map<string, ReturnType<typeof createPersistedProjectRecord>>();
|
||||
const workspaces = new Map<string, ReturnType<typeof createPersistedWorkspaceRecord>>();
|
||||
const home = path.resolve("/Users/moboudra");
|
||||
const home = path.resolve("/home/developer");
|
||||
const worktree = path.join(home, ".paseo", "worktrees", "project-config-lifecycle-textarea");
|
||||
|
||||
projects.set(
|
||||
@@ -3825,7 +3825,7 @@ test("open_project_request does not match a new child directory to an existing p
|
||||
projectId: home,
|
||||
rootPath: home,
|
||||
kind: "non_git",
|
||||
displayName: "moboudra",
|
||||
displayName: "developer",
|
||||
createdAt: "2026-04-24T09:00:00.000Z",
|
||||
updatedAt: "2026-04-24T09:00:00.000Z",
|
||||
}),
|
||||
@@ -3837,7 +3837,7 @@ test("open_project_request does not match a new child directory to an existing p
|
||||
projectId: home,
|
||||
cwd: home,
|
||||
kind: "directory",
|
||||
displayName: "moboudra",
|
||||
displayName: "developer",
|
||||
createdAt: "2026-04-24T09:00:00.000Z",
|
||||
updatedAt: "2026-04-24T09:00:00.000Z",
|
||||
}),
|
||||
@@ -3882,7 +3882,7 @@ test("open_project_request does not unarchive an archived parent workspace for a
|
||||
const session = createSessionForWorkspaceTests();
|
||||
const projects = new Map<string, ReturnType<typeof createPersistedProjectRecord>>();
|
||||
const workspaces = new Map<string, ReturnType<typeof createPersistedWorkspaceRecord>>();
|
||||
const home = path.resolve("/Users/moboudra");
|
||||
const home = path.resolve("/home/developer");
|
||||
const worktree = path.join(home, ".paseo", "worktrees", "project-config-lifecycle-textarea");
|
||||
const archivedAt = "2026-04-24T08:00:00.000Z";
|
||||
|
||||
@@ -3950,9 +3950,9 @@ test("open_project_request reclassifies an archived directory workspace when git
|
||||
const session = createSessionForWorkspaceTests();
|
||||
const projects = new Map<string, ReturnType<typeof createPersistedProjectRecord>>();
|
||||
const workspaces = new Map<string, ReturnType<typeof createPersistedWorkspaceRecord>>();
|
||||
const repoRoot = path.resolve("/Users/moboudra/dev/paseo");
|
||||
const repoRoot = path.resolve("/home/developer/dev/paseo");
|
||||
const cwd = path.join(
|
||||
path.resolve("/Users/moboudra"),
|
||||
path.resolve("/home/developer"),
|
||||
".paseo",
|
||||
"worktrees",
|
||||
"orchestrate",
|
||||
@@ -4049,9 +4049,9 @@ test("open_project_request reclassifies an active directory workspace when git m
|
||||
const session = createSessionForWorkspaceTests();
|
||||
const projects = new Map<string, ReturnType<typeof createPersistedProjectRecord>>();
|
||||
const workspaces = new Map<string, ReturnType<typeof createPersistedWorkspaceRecord>>();
|
||||
const repoRoot = path.resolve("/Users/moboudra/dev/paseo");
|
||||
const repoRoot = path.resolve("/home/developer/dev/paseo");
|
||||
const cwd = path.join(
|
||||
path.resolve("/Users/moboudra"),
|
||||
path.resolve("/home/developer"),
|
||||
".paseo",
|
||||
"worktrees",
|
||||
"orchestrate",
|
||||
@@ -4167,9 +4167,9 @@ test("open_project_request groups a plain git worktree under an existing repo pr
|
||||
const session = createSessionForWorkspaceTests();
|
||||
const projects = new Map<string, ReturnType<typeof createPersistedProjectRecord>>();
|
||||
const workspaces = new Map<string, ReturnType<typeof createPersistedWorkspaceRecord>>();
|
||||
const repoRoot = path.resolve("/Users/moboudra/dev/paseo");
|
||||
const repoRoot = path.resolve("/home/developer/dev/paseo");
|
||||
const cwd = path.join(
|
||||
path.resolve("/Users/moboudra"),
|
||||
path.resolve("/home/developer"),
|
||||
".paseo",
|
||||
"worktrees",
|
||||
"orchestrate",
|
||||
|
||||
Reference in New Issue
Block a user