{"url":"https://api.github.com/repos/google-gemini/gemini-cli/pulls/28935","id":4326148877,"node_id":"PR_kwDOObWEYM8AAAABAdvLDQ","html_url":"https://github.com/google-gemini/gemini-cli/pull/28935","diff_url":"https://github.com/google-gemini/gemini-cli/pull/28935.diff","patch_url":"https://github.com/google-gemini/gemini-cli/pull/28935.patch","issue_url":"https://api.github.com/repos/google-gemini/gemini-cli/issues/28935","commits_url":"https://api.github.com/repos/google-gemini/gemini-cli/pulls/28935/commits","review_comments_url":"https://api.github.com/repos/google-gemini/gemini-cli/pulls/28935/comments","review_comment_url":"https://api.github.com/repos/google-gemini/gemini-cli/pulls/comments{/number}","comments_url":"https://api.github.com/repos/google-gemini/gemini-cli/issues/28935/comments","statuses_url":"https://api.github.com/repos/google-gemini/gemini-cli/statuses/52a85105c49ab9bba0f2ccb03df56018787ea703","number":28935,"state":"closed","locked":false,"title":"fix(sandbox): isolate Docker and container runtime sockets and binaries in macOS Seatbelt","user":{"login":"josebalius","id":339080,"node_id":"MDQ6VXNlcjMzOTA4MA==","avatar_url":"https://avatars.githubusercontent.com/u/339080?v=4","gravatar_id":"","url":"https://api.github.com/users/josebalius","html_url":"https://github.com/josebalius","followers_url":"https://api.github.com/users/josebalius/followers","following_url":"https://api.github.com/users/josebalius/following{/other_user}","gists_url":"https://api.github.com/users/josebalius/gists{/gist_id}","starred_url":"https://api.github.com/users/josebalius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/josebalius/subscriptions","organizations_url":"https://api.github.com/users/josebalius/orgs","repos_url":"https://api.github.com/users/josebalius/repos","events_url":"https://api.github.com/users/josebalius/events{/privacy}","received_events_url":"https://api.github.com/users/josebalius/received_events","type":"User","user_view_type":"public","site_admin":false},"body":"Deny access to container runtime daemon UNIX domain sockets, CLI binaries, Mach/XPC service lookups, and POSIX shared memory within macOS Seatbelt sandbox profiles to prevent sandbox escape via container hypervisor filesystem mounts (e.g., Docker Desktop VirtioFS).\r\n\r\nExplicitly denies:\r\n- UNIX domain sockets: /var/run/docker.sock, /private/var/run/docker.sock, /Users/Shared/.docker, and user runtime sockets in ~/.docker/, ~/.colima/, ~/.orbstack/, ~/.rd/\r\n- Container CLI and daemon binaries: docker, dockerd, docker-compose, podman, colima, orb in standard install paths (/usr/local/bin, /opt/homebrew/bin, etc.)\r\n- Container service Mach/XPC lookups and POSIX shared memory\r\n\r\nIncludes unit tests verifying profile generation and rule invariants across all built-in macOS Seatbelt profiles.\r\n\r\n## Summary\r\n\r\nIsolates Docker and container runtimes within macOS Seatbelt (`sandbox-exec`) profiles to prevent sandbox escapes. \r\n\r\nOn macOS hosts with Docker Desktop (or OrbStack/Colima/Rancher Desktop) running, the sandbox previously allowed broad process execution, file reading, and outbound networking. This combination allowed sandboxed processes to communicate with the container daemon socket and spin up privileged containers that mount the host filesystem via VirtioFS, bypassing the Seatbelt filesystem boundary. This change explicitly denies access to container sockets, CLI binaries, Mach/XPC services, and shared memory across all built-in macOS Seatbelt profiles.\r\n\r\n## Details\r\n\r\n- **UNIX Domain Socket Denial:** Denies `file-read*` and `file-write*` to Docker daemon sockets at `/var/run/docker.sock`, `/private/var/run/docker.sock`, `/Users/Shared/.docker`, and user-level runtime paths (`~/.docker/run/`, `~/.docker/desktop/`, `~/.colima/`, `~/.orbstack/run/`, `~/.rd/`).\r\n- **Binary Execution Denial:** Denies `process-exec` for container runtimes (`docker`, `dockerd`, `docker-compose`, `podman`, `colima`, `orb`) in common install locations (`/usr/local/bin`, `/opt/homebrew/bin`, `/Applications/*.app`).\r\n- **IPC & Service Lookup Denial:** Denies `mach-lookup` for `com.docker.*` and `dev.kdrag0n.OrbStack`, as well as `ipc-posix-shm*` for Docker-related shared memory prefixes.\r\n- **Coverage:** Applied consistently across:\r\n  - Dynamic profile builder in `@google/gemini-cli-core` (`baseProfile.ts`)\r\n  - All 6 static/embedded profiles in `@google/gemini-cli` (`sandbox-macos-*.sb` and `sandboxBuiltinProfiles.ts`)\r\n- **Unit & Invariant Tests:** Added test suites in `packages/core/src/sandbox/macos/seatbeltArgsBuilder.test.ts` and `packages/cli/src/utils/sandbox-macos-profiles.test.ts` to prevent silent regressions.\r\n\r\n## How to Validate\r\n\r\n### 1. Automated Unit Tests\r\nRun the core and CLI Seatbelt profile test suites:\r\n```bash\r\nnpm test -w @google/gemini-cli-core -- src/sandbox/macos/seatbeltArgsBuilder.test.ts\r\nnpm test -w @google/gemini-cli -- src/utils/sandbox-macos-profiles.test.ts\r\n```\r\n**Expected Result:** All 52 tests pass.\r\n\r\n### 2. End-to-End macOS Seatbelt Enforcement Test\r\nVerify that the macOS kernel denies container socket reads and binary execution when running inside `sandbox-exec`:\r\n\r\n```bash\r\n# 1. Create a dummy socket in ~/.docker/run/\r\nmkdir -p \"$HOME/.docker/run\" && touch \"$HOME/.docker/run/docker.sock\"\r\n\r\n# 2. Attempt to read the socket within the restrictive sandbox\r\nsandbox-exec \\\r\n  -D TARGET_DIR=\"$(pwd)\" \\\r\n  -D TMP_DIR=\"/tmp\" \\\r\n  -D HOME_DIR=\"$HOME\" \\\r\n  -D CACHE_DIR=\"$(getconf DARWIN_USER_CACHE_DIR)\" \\\r\n  -D INCLUDE_DIR_0=/dev/null \\\r\n  -D INCLUDE_DIR_1=/dev/null \\\r\n  -D INCLUDE_DIR_2=/dev/null \\\r\n  -D INCLUDE_DIR_3=/dev/null \\\r\n  -D INCLUDE_DIR_4=/dev/null \\\r\n  -f packages/cli/src/utils/sandbox-macos-restrictive-open.sb \\\r\n  cat \"$HOME/.docker/run/docker.sock\"\r\n\r\n# Expected Output:\r\n# cat: /Users/.../.docker/run/docker.sock: Operation not permitted (Exit code 1)\r\n\r\n# 3. Clean up\r\nrm -f \"$HOME/.docker/run/docker.sock\"\r\n```\r\n\r\n### 3. Full Lint & Typecheck\r\n```bash\r\nnpm run typecheck\r\nnpm run lint\r\n```\r\n**Expected Result:** Both checks complete with 0 errors and 0 warnings.\r\n\r\n\r\n## Pre-Merge Checklist\r\n\r\n<!-- Check all that apply before requesting review or merging. -->\r\n\r\n- [ ] Updated relevant documentation and README (if needed)\r\n- [ ] Added/updated tests (if needed)\r\n- [ ] Noted breaking changes (if any)\r\n- [ ] Validated on required platforms/methods:\r\n  - [ ] MacOS\r\n    - [ ] npm run\r\n    - [ ] npx\r\n    - [ ] Docker\r\n    - [ ] Podman\r\n    - [ ] Seatbelt\r\n  - [ ] Windows\r\n    - [ ] npm run\r\n    - [ ] npx\r\n    - [ ] Docker\r\n  - [ ] Linux\r\n    - [ ] npm run\r\n    - [ ] npx\r\n    - [ ] Docker\r\n","labels":[{"id":9777682686,"node_id":"LA_kwDOObWEYM8AAAACRsuY_g","url":"https://api.github.com/repos/google-gemini/gemini-cli/labels/size/l","name":"size/l","description":"A large sized PR","color":"691e60","default":false,"archived_at":null,"archived_by":null},{"id":9953267273,"node_id":"LA_kwDOObWEYM8AAAACUULOSQ","url":"https://api.github.com/repos/google-gemini/gemini-cli/labels/status/need-issue","name":"status/need-issue","description":"Pull requests that need to have an associated issue.","color":"fbca04","default":false,"archived_at":null,"archived_by":null}],"milestone":null,"active_lock_reason":null,"created_at":"2026-08-20T19:57:13Z","updated_at":"2026-09-08T04:34:09Z","closed_at":"2026-08-21T16:27:09Z","merged_at":"2026-08-21T16:27:09Z","merge_commit_sha":"5411f113cafae26161b4969b0237b8e1e024e2c2","assignee":{"login":"josebalius","id":339080,"node_id":"MDQ6VXNlcjMzOTA4MA==","avatar_url":"https://avatars.githubusercontent.com/u/339080?v=4","gravatar_id":"","url":"https://api.github.com/users/josebalius","html_url":"https://github.com/josebalius","followers_url":"https://api.github.com/users/josebalius/followers","following_url":"https://api.github.com/users/josebalius/following{/other_user}","gists_url":"https://api.github.com/users/josebalius/gists{/gist_id}","starred_url":"https://api.github.com/users/josebalius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/josebalius/subscriptions","organizations_url":"https://api.github.com/users/josebalius/orgs","repos_url":"https://api.github.com/users/josebalius/repos","events_url":"https://api.github.com/users/josebalius/events{/privacy}","received_events_url":"https://api.github.com/users/josebalius/received_events","type":"User","user_view_type":"public","site_admin":false},"assignees":[{"login":"josebalius","id":339080,"node_id":"MDQ6VXNlcjMzOTA4MA==","avatar_url":"https://avatars.githubusercontent.com/u/339080?v=4","gravatar_id":"","url":"https://api.github.com/users/josebalius","html_url":"https://github.com/josebalius","followers_url":"https://api.github.com/users/josebalius/followers","following_url":"https://api.github.com/users/josebalius/following{/other_user}","gists_url":"https://api.github.com/users/josebalius/gists{/gist_id}","starred_url":"https://api.github.com/users/josebalius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/josebalius/subscriptions","organizations_url":"https://api.github.com/users/josebalius/orgs","repos_url":"https://api.github.com/users/josebalius/repos","events_url":"https://api.github.com/users/josebalius/events{/privacy}","received_events_url":"https://api.github.com/users/josebalius/received_events","type":"User","user_view_type":"public","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"head":{"label":"google-gemini:fix/sandbox-macos-container-isolation","ref":"fix/sandbox-macos-container-isolation","repo":{"id":968197216,"node_id":"R_kgDOObWEYA","name":"gemini-cli","full_name":"google-gemini/gemini-cli","owner":{"login":"google-gemini","id":161781182,"node_id":"O_kgDOCaSVvg","avatar_url":"https://avatars.githubusercontent.com/u/161781182?v=4","gravatar_id":"","url":"https://api.github.com/users/google-gemini","html_url":"https://github.com/google-gemini","followers_url":"https://api.github.com/users/google-gemini/followers","following_url":"https://api.github.com/users/google-gemini/following{/other_user}","gists_url":"https://api.github.com/users/google-gemini/gists{/gist_id}","starred_url":"https://api.github.com/users/google-gemini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google-gemini/subscriptions","organizations_url":"https://api.github.com/users/google-gemini/orgs","repos_url":"https://api.github.com/users/google-gemini/repos","events_url":"https://api.github.com/users/google-gemini/events{/privacy}","received_events_url":"https://api.github.com/users/google-gemini/received_events","type":"Organization","user_view_type":"public","site_admin":false},"private":false,"fork":false,"archived":false,"disabled":false,"description":"An open-source AI agent that brings the power of Gemini directly into your terminal.","homepage":"https://geminicli.com","language":"TypeScript","visibility":"public","is_template":false,"topics":["ai","ai-agents","cli","gemini","gemini-api","mcp-client","mcp-server"],"forks_count":14696,"forks":14696,"stargazers_count":107238,"watchers_count":107238,"watchers":107238,"open_issues_count":787,"open_issues":787,"size":103821,"default_branch":"main","has_issues":true,"has_projects":true,"has_wiki":false,"has_pages":true,"has_downloads":false,"has_discussions":true,"has_pull_requests":true,"pushed_at":"2026-10-05T11:07:50Z","created_at":"2025-04-17T17:04:31Z","updated_at":"2026-10-05T22:53:08Z","allow_forking":true,"web_commit_signoff_required":false,"pull_request_creation_policy":"all","license":{"key":"apache-2.0","name":"Apache License 2.0","url":"https://api.github.com/licenses/apache-2.0","spdx_id":"Apache-2.0","node_id":"MDc6TGljZW5zZTI="},"url":"https://api.github.com/repos/google-gemini/gemini-cli","html_url":"https://github.com/google-gemini/gemini-cli","archive_url":"https://api.github.com/repos/google-gemini/gemini-cli/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/google-gemini/gemini-cli/assignees{/user}","blobs_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/blobs{/sha}","branches_url":"https://api.github.com/repos/google-gemini/gemini-cli/branches{/branch}","collaborators_url":"https://api.github.com/repos/google-gemini/gemini-cli/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/google-gemini/gemini-cli/comments{/number}","commits_url":"https://api.github.com/repos/google-gemini/gemini-cli/commits{/sha}","compare_url":"https://api.github.com/repos/google-gemini/gemini-cli/compare/{base}...{head}","contents_url":"https://api.github.com/repos/google-gemini/gemini-cli/contents/{+path}","contributors_url":"https://api.github.com/repos/google-gemini/gemini-cli/contributors","deployments_url":"https://api.github.com/repos/google-gemini/gemini-cli/deployments","downloads_url":"https://api.github.com/repos/google-gemini/gemini-cli/downloads","events_url":"https://api.github.com/repos/google-gemini/gemini-cli/events","forks_url":"https://api.github.com/repos/google-gemini/gemini-cli/forks","git_commits_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/tags{/sha}","git_url":"git://github.com/google-gemini/gemini-cli.git","issue_comment_url":"https://api.github.com/repos/google-gemini/gemini-cli/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/google-gemini/gemini-cli/issues/events{/number}","issues_url":"https://api.github.com/repos/google-gemini/gemini-cli/issues{/number}","keys_url":"https://api.github.com/repos/google-gemini/gemini-cli/keys{/key_id}","labels_url":"https://api.github.com/repos/google-gemini/gemini-cli/labels{/name}","languages_url":"https://api.github.com/repos/google-gemini/gemini-cli/languages","merges_url":"https://api.github.com/repos/google-gemini/gemini-cli/merges","milestones_url":"https://api.github.com/repos/google-gemini/gemini-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/google-gemini/gemini-cli/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/google-gemini/gemini-cli/pulls{/number}","releases_url":"https://api.github.com/repos/google-gemini/gemini-cli/releases{/id}","ssh_url":"git@github.com:google-gemini/gemini-cli.git","stargazers_url":"https://api.github.com/repos/google-gemini/gemini-cli/stargazers","statuses_url":"https://api.github.com/repos/google-gemini/gemini-cli/statuses/{sha}","subscribers_url":"https://api.github.com/repos/google-gemini/gemini-cli/subscribers","subscription_url":"https://api.github.com/repos/google-gemini/gemini-cli/subscription","tags_url":"https://api.github.com/repos/google-gemini/gemini-cli/tags","teams_url":"https://api.github.com/repos/google-gemini/gemini-cli/teams","trees_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/trees{/sha}","clone_url":"https://github.com/google-gemini/gemini-cli.git","mirror_url":null,"hooks_url":"https://api.github.com/repos/google-gemini/gemini-cli/hooks","svn_url":"https://github.com/google-gemini/gemini-cli"},"sha":"52a85105c49ab9bba0f2ccb03df56018787ea703","user":{"login":"google-gemini","id":161781182,"node_id":"O_kgDOCaSVvg","avatar_url":"https://avatars.githubusercontent.com/u/161781182?v=4","gravatar_id":"","url":"https://api.github.com/users/google-gemini","html_url":"https://github.com/google-gemini","followers_url":"https://api.github.com/users/google-gemini/followers","following_url":"https://api.github.com/users/google-gemini/following{/other_user}","gists_url":"https://api.github.com/users/google-gemini/gists{/gist_id}","starred_url":"https://api.github.com/users/google-gemini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google-gemini/subscriptions","organizations_url":"https://api.github.com/users/google-gemini/orgs","repos_url":"https://api.github.com/users/google-gemini/repos","events_url":"https://api.github.com/users/google-gemini/events{/privacy}","received_events_url":"https://api.github.com/users/google-gemini/received_events","type":"Organization","user_view_type":"public","site_admin":false}},"base":{"label":"google-gemini:main","ref":"main","repo":{"id":968197216,"node_id":"R_kgDOObWEYA","name":"gemini-cli","full_name":"google-gemini/gemini-cli","owner":{"login":"google-gemini","id":161781182,"node_id":"O_kgDOCaSVvg","avatar_url":"https://avatars.githubusercontent.com/u/161781182?v=4","gravatar_id":"","url":"https://api.github.com/users/google-gemini","html_url":"https://github.com/google-gemini","followers_url":"https://api.github.com/users/google-gemini/followers","following_url":"https://api.github.com/users/google-gemini/following{/other_user}","gists_url":"https://api.github.com/users/google-gemini/gists{/gist_id}","starred_url":"https://api.github.com/users/google-gemini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google-gemini/subscriptions","organizations_url":"https://api.github.com/users/google-gemini/orgs","repos_url":"https://api.github.com/users/google-gemini/repos","events_url":"https://api.github.com/users/google-gemini/events{/privacy}","received_events_url":"https://api.github.com/users/google-gemini/received_events","type":"Organization","user_view_type":"public","site_admin":false},"private":false,"fork":false,"archived":false,"disabled":false,"description":"An open-source AI agent that brings the power of Gemini directly into your terminal.","homepage":"https://geminicli.com","language":"TypeScript","visibility":"public","is_template":false,"topics":["ai","ai-agents","cli","gemini","gemini-api","mcp-client","mcp-server"],"forks_count":14696,"forks":14696,"stargazers_count":107238,"watchers_count":107238,"watchers":107238,"open_issues_count":787,"open_issues":787,"size":103821,"default_branch":"main","has_issues":true,"has_projects":true,"has_wiki":false,"has_pages":true,"has_downloads":false,"has_discussions":true,"has_pull_requests":true,"pushed_at":"2026-10-05T11:07:50Z","created_at":"2025-04-17T17:04:31Z","updated_at":"2026-10-05T22:53:08Z","allow_forking":true,"web_commit_signoff_required":false,"pull_request_creation_policy":"all","license":{"key":"apache-2.0","name":"Apache License 2.0","url":"https://api.github.com/licenses/apache-2.0","spdx_id":"Apache-2.0","node_id":"MDc6TGljZW5zZTI="},"url":"https://api.github.com/repos/google-gemini/gemini-cli","html_url":"https://github.com/google-gemini/gemini-cli","archive_url":"https://api.github.com/repos/google-gemini/gemini-cli/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/google-gemini/gemini-cli/assignees{/user}","blobs_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/blobs{/sha}","branches_url":"https://api.github.com/repos/google-gemini/gemini-cli/branches{/branch}","collaborators_url":"https://api.github.com/repos/google-gemini/gemini-cli/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/google-gemini/gemini-cli/comments{/number}","commits_url":"https://api.github.com/repos/google-gemini/gemini-cli/commits{/sha}","compare_url":"https://api.github.com/repos/google-gemini/gemini-cli/compare/{base}...{head}","contents_url":"https://api.github.com/repos/google-gemini/gemini-cli/contents/{+path}","contributors_url":"https://api.github.com/repos/google-gemini/gemini-cli/contributors","deployments_url":"https://api.github.com/repos/google-gemini/gemini-cli/deployments","downloads_url":"https://api.github.com/repos/google-gemini/gemini-cli/downloads","events_url":"https://api.github.com/repos/google-gemini/gemini-cli/events","forks_url":"https://api.github.com/repos/google-gemini/gemini-cli/forks","git_commits_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/tags{/sha}","git_url":"git://github.com/google-gemini/gemini-cli.git","issue_comment_url":"https://api.github.com/repos/google-gemini/gemini-cli/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/google-gemini/gemini-cli/issues/events{/number}","issues_url":"https://api.github.com/repos/google-gemini/gemini-cli/issues{/number}","keys_url":"https://api.github.com/repos/google-gemini/gemini-cli/keys{/key_id}","labels_url":"https://api.github.com/repos/google-gemini/gemini-cli/labels{/name}","languages_url":"https://api.github.com/repos/google-gemini/gemini-cli/languages","merges_url":"https://api.github.com/repos/google-gemini/gemini-cli/merges","milestones_url":"https://api.github.com/repos/google-gemini/gemini-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/google-gemini/gemini-cli/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/google-gemini/gemini-cli/pulls{/number}","releases_url":"https://api.github.com/repos/google-gemini/gemini-cli/releases{/id}","ssh_url":"git@github.com:google-gemini/gemini-cli.git","stargazers_url":"https://api.github.com/repos/google-gemini/gemini-cli/stargazers","statuses_url":"https://api.github.com/repos/google-gemini/gemini-cli/statuses/{sha}","subscribers_url":"https://api.github.com/repos/google-gemini/gemini-cli/subscribers","subscription_url":"https://api.github.com/repos/google-gemini/gemini-cli/subscription","tags_url":"https://api.github.com/repos/google-gemini/gemini-cli/tags","teams_url":"https://api.github.com/repos/google-gemini/gemini-cli/teams","trees_url":"https://api.github.com/repos/google-gemini/gemini-cli/git/trees{/sha}","clone_url":"https://github.com/google-gemini/gemini-cli.git","mirror_url":null,"hooks_url":"https://api.github.com/repos/google-gemini/gemini-cli/hooks","svn_url":"https://github.com/google-gemini/gemini-cli"},"sha":"30573d2e4d85bdc2c0ae8218c377cd410336da77","user":{"login":"google-gemini","id":161781182,"node_id":"O_kgDOCaSVvg","avatar_url":"https://avatars.githubusercontent.com/u/161781182?v=4","gravatar_id":"","url":"https://api.github.com/users/google-gemini","html_url":"https://github.com/google-gemini","followers_url":"https://api.github.com/users/google-gemini/followers","following_url":"https://api.github.com/users/google-gemini/following{/other_user}","gists_url":"https://api.github.com/users/google-gemini/gists{/gist_id}","starred_url":"https://api.github.com/users/google-gemini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google-gemini/subscriptions","organizations_url":"https://api.github.com/users/google-gemini/orgs","repos_url":"https://api.github.com/users/google-gemini/repos","events_url":"https://api.github.com/users/google-gemini/events{/privacy}","received_events_url":"https://api.github.com/users/google-gemini/received_events","type":"Organization","user_view_type":"public","site_admin":false}},"_links":{"comments":{"href":"https://api.github.com/repos/google-gemini/gemini-cli/issues/28935/comments"},"commits":{"href":"https://api.github.com/repos/google-gemini/gemini-cli/pulls/28935/commits"},"statuses":{"href":"https://api.github.com/repos/google-gemini/gemini-cli/statuses/52a85105c49ab9bba0f2ccb03df56018787ea703"},"html":{"href":"https://github.com/google-gemini/gemini-cli/pull/28935"},"issue":{"href":"https://api.github.com/repos/google-gemini/gemini-cli/issues/28935"},"review_comments":{"href":"https://api.github.com/repos/google-gemini/gemini-cli/pulls/28935/comments"},"review_comment":{"href":"https://api.github.com/repos/google-gemini/gemini-cli/pulls/comments{/number}"},"self":{"href":"https://api.github.com/repos/google-gemini/gemini-cli/pulls/28935"}},"author_association":"CONTRIBUTOR","auto_merge":null,"draft":false,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"DavidAPierce","id":208860998,"node_id":"U_kgDODHL3Rg","avatar_url":"https://avatars.githubusercontent.com/u/208860998?v=4","gravatar_id":"","url":"https://api.github.com/users/DavidAPierce","html_url":"https://github.com/DavidAPierce","followers_url":"https://api.github.com/users/DavidAPierce/followers","following_url":"https://api.github.com/users/DavidAPierce/following{/other_user}","gists_url":"https://api.github.com/users/DavidAPierce/gists{/gist_id}","starred_url":"https://api.github.com/users/DavidAPierce/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DavidAPierce/subscriptions","organizations_url":"https://api.github.com/users/DavidAPierce/orgs","repos_url":"https://api.github.com/users/DavidAPierce/repos","events_url":"https://api.github.com/users/DavidAPierce/events{/privacy}","received_events_url":"https://api.github.com/users/DavidAPierce/received_events","type":"User","user_view_type":"public","site_admin":false},"comments":6,"review_comments":12,"maintainer_can_modify":false,"commits":4,"additions":686,"deletions":7,"changed_files":10}