diff --git a/src/main/runtime/rpc/rpc-caller-scope.ts b/src/main/runtime/rpc/rpc-caller-scope.ts index b44b8d8c2a2..ecb1a0fb430 100644 --- a/src/main/runtime/rpc/rpc-caller-scope.ts +++ b/src/main/runtime/rpc/rpc-caller-scope.ts @@ -29,7 +29,9 @@ export const OWNER_RPC_CALLER_SCOPE: RpcCallerScope = { kind: 'owner' } // Why: a paired desktop, web client or `--host runtime:` CLI is this runtime's full remote UI, so its // standard set covers what that UI drives here (settings, accounts, skills, SSH and server updates). -// Everything else (desktop control, pairing and push admin) is refused unless granted at pairing. +// None of these exceeds `workspace`, which already runs commands as the user (see +// rpc-method-permission.ts). Desktop control needs a grant at pairing; pairing admin is never +// granted to this row. const RUNTIME_PAIRED_STANDARD: ReadonlySet = new Set([ 'workspace', 'settings-write', diff --git a/src/main/runtime/rpc/rpc-method-permission.ts b/src/main/runtime/rpc/rpc-method-permission.ts index 43d06460f62..bc4ab5270f0 100644 --- a/src/main/runtime/rpc/rpc-method-permission.ts +++ b/src/main/runtime/rpc/rpc-method-permission.ts @@ -3,9 +3,18 @@ * * The dispatcher grants each caller kind a set of these (rpc-caller-scope.ts), so a new method * cannot ship without someone deciding which callers may reach it. + * + * `workspace` means the caller can run code as this host's user: it opens terminals and starts + * agents here. Anything a terminal command could do anyway (browsing directories, installing + * skills, changing launch env or SSH targets) is therefore not a boundary for a `workspace` + * caller. Those stay separate tiers so a narrower row (an SSH host's CLI) can refuse them; mobile + * is gated by its own method-name allowlist instead. For a paired runtime client the real + * boundaries are `desktop-control` (granted per device at pairing) and `pairing-admin` (never + * granted to it). */ export type RpcMethodPermission = - /** Projects, worktrees, terminals, files, git, browser, orchestration and integrations. */ + /** Projects, worktrees, terminals, files, git, browser, orchestration and integrations; equals + * running commands as this host's user. */ | 'workspace' /** Drives this machine's own desktop: clicks, keys and app state outside Orca. */ | 'desktop-control' diff --git a/src/renderer/src/components/settings/RuntimePairingGeneratorForm.tsx b/src/renderer/src/components/settings/RuntimePairingGeneratorForm.tsx index 1c5176a999c..8fed6b1f1d1 100644 --- a/src/renderer/src/components/settings/RuntimePairingGeneratorForm.tsx +++ b/src/renderer/src/components/settings/RuntimePairingGeneratorForm.tsx @@ -305,7 +305,13 @@ export function RuntimePairingGeneratorForm({ )} ) : null} -
+
+

+ {translate( + 'auto.components.settings.RuntimePairingUrlGenerator.pairedRunsAsYou', + 'A paired client can run commands as you on this computer.' + )} +