From eb6f57239b0a737c592fe3f31b819acb2462d89d Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Sat, 4 Apr 2026 23:18:27 -0700 Subject: [PATCH] feat: tab enforcement + POST /pair endpoint + activity attribution Server-side tab ownership check blocks scoped agents from writing to unowned tabs. Special-case newtab records ownership for scoped tokens. POST /pair endpoint creates setup keys for the pairing ceremony. Activity events now include clientId for attribution. Co-Authored-By: Claude Opus 4.6 (1M context) --- browse/src/activity.ts | 1 + browse/src/server.ts | 62 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/browse/src/activity.ts b/browse/src/activity.ts index e76467d4..b15eb45a 100644 --- a/browse/src/activity.ts +++ b/browse/src/activity.ts @@ -31,6 +31,7 @@ export interface ActivityEntry { result?: string; tabs?: number; mode?: string; + clientId?: string; } // ─── Buffer & Subscribers ─────────────────────────────────────── diff --git a/browse/src/server.ts b/browse/src/server.ts index 657b20b5..20c03d0f 100644 --- a/browse/src/server.ts +++ b/browse/src/server.ts @@ -870,6 +870,33 @@ async function handleCommand(body: any, tokenInfo?: TokenInfo | null): Promise