feat(session): support unfocused agent windows (--no-focus) (#87)

`bsk session start --no-focus` opens the Agent Window in the background
without stealing focus. The flag threads focused=false through
CLI -> daemon IPC -> tool.session_start -> chrome.windows.create; an
omitted `focused` keeps the extension default (true) so older clients
are unaffected.

Reworked onto current main so it composes with #52 window sizing:
AgentWindowApi.create / SessionManager.start (extension), start_session
(CLI) and the daemon's session start now take options objects/structs
({ size, focused }) instead of colliding positional params.

Co-authored-by: alectimison-maker <alec.timison@gmail.com>
This commit is contained in:
BB-fat
2026-08-12 19:58:53 +08:00
committed by GitHub
co-authored by alectimison-maker
parent 0ce497f017
commit f443cfae74
17 changed files with 235 additions and 43 deletions
+6 -1
View File
@@ -50,6 +50,8 @@ export interface SessionStartParams {
width?: number;
/** Optional Agent Window outer height in CSS pixels (100..=7680). */
height?: number;
/** Defaults to true so existing clients preserve visible Agent Windows. */
focused?: boolean;
}
export interface SessionStartResult {
@@ -99,7 +101,10 @@ export async function handleSessionStart(
const sizeOrErr = validateWindowSize(params.width, params.height);
if (isRpcError(sizeOrErr)) return sizeOrErr;
try {
const ctx = await manager.start(params.session_id, sizeOrErr);
const ctx = await manager.start(params.session_id, {
size: sizeOrErr,
focused: params.focused,
});
return { agent_window_id: ctx.agentWindowId };
} catch (err) {
// chrome.windows.create / SessionManager failures are not CDP