Skip to content

fix(cli): preserve Request headers in DevTools activity logger#26078

Merged
Adib234 merged 2 commits intomainfrom
adibakm/devtools-activity-logger
Apr 28, 2026
Merged

fix(cli): preserve Request headers in DevTools activity logger#26078
Adib234 merged 2 commits intomainfrom
adibakm/devtools-activity-logger

Conversation

@Adib234
Copy link
Copy Markdown
Contributor

@Adib234 Adib234 commented Apr 27, 2026

Summary

This PR fixes a bug in the DevTools fetch interceptor (ActivityLogger.patchGlobalFetch) where headers, methods, and bodies were being stripped when provided via a Request object (the first argument to fetch) instead of the init argument. This specifically caused issues with update checks (using ky) when private npm registries required authentication, leading to 403 errors.

Details

The interceptor was assuming that all request metadata resided in the init parameter. When libraries like ky pass a Request object with headers (e.g., Authorization) and an empty init object, the interceptor would create a new Headers object from the empty init, add the x-activity-request-id, and pass that to the original fetch, effectively overriding and losing the original headers on the Request object.

This fix:

  • Fallbacks to extracting the method from the Request object if not in init.
  • Merges headers from both the Request object and init.
  • Fallbacks to the Request object's body if init.body is missing.

Related Issues

Fixes #23481

How to Validate

  1. Run unit tests to ensure the regression test passes:
    npm test -w @google/gemini-cli -- src/utils/activityLogger.test.ts
  2. (Optional) Manual verification:
    • Enable devtools in settings: "general": { "devtools": true }.
    • Perform a fetch call passing a Request object with custom headers and an empty init object.
    • Verify (e.g., via a mock server or logging) that the headers are correctly received by the target.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Podman
      • Seatbelt
    • Windows
      • npm run
      • npx
      • Docker
    • Linux
      • npm run
      • npx
      • Docker

@Adib234 Adib234 requested a review from a team as a code owner April 27, 2026 20:44
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a bug in the DevTools fetch interceptor where request metadata was being lost when a Request object was used as the primary argument. By ensuring that methods and headers are correctly merged from both the Request object and the init parameter, the fix restores compatibility with libraries like ky that rely on this pattern, specifically resolving authentication issues with private npm registries.

Highlights

  • Request Metadata Preservation: Updated the fetch interceptor to correctly extract and merge methods and headers from Request objects, preventing them from being overwritten by empty init objects.
  • Regression Testing: Added a new unit test to verify that custom headers and methods are preserved when using the Request object pattern.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the ActivityLogger to support Request objects in fetch calls, ensuring methods and headers are correctly captured. A new test case validates this functionality. Review feedback points out that the current header merging logic violates the Fetch API specification, which requires init.headers to replace input.headers. Improvements were also suggested to use object spread and nullish coalescing for better code consistency.

Comment thread packages/cli/src/utils/activityLogger.ts
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 27, 2026

Size Change: +237 B (0%)

Total Size: 33.9 MB

Filename Size Change
./bundle/chunk-6CE7MC2L.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-7MZLJYP5.js 0 B -14.7 MB (removed) 🏆
./bundle/chunk-BB4ECRTZ.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-QELRWQ43.js 0 B -2.73 MB (removed) 🏆
./bundle/chunk-UG4JF3Q2.js 0 B -673 kB (removed) 🏆
./bundle/chunk-UQSUR5NJ.js 0 B -3.43 kB (removed) 🏆
./bundle/core-SBDYHOQV.js 0 B -48.1 kB (removed) 🏆
./bundle/devtoolsService-QAPVRKZF.js 0 B -27.8 kB (removed) 🏆
./bundle/gemini-YBVNLMFL.js 0 B -574 kB (removed) 🏆
./bundle/interactiveCli-3P45P5O6.js 0 B -1.31 MB (removed) 🏆
./bundle/liteRtServerManager-24PPPOCE.js 0 B -2.08 kB (removed) 🏆
./bundle/oauth2-provider-FDIWOY3D.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-AZ2F5E7C.js 673 kB +673 kB (new file) 🆕
./bundle/chunk-BZBWK6HY.js 2.73 MB +2.73 MB (new file) 🆕
./bundle/chunk-SWIV3UUN.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-VWRMNYGF.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-XQQJ7PHY.js 14.7 MB +14.7 MB (new file) 🆕
./bundle/chunk-XVKRPZG2.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/core-LSCACF6B.js 48.1 kB +48.1 kB (new file) 🆕
./bundle/devtoolsService-7X42SKQU.js 28 kB +28 kB (new file) 🆕
./bundle/gemini-TG63ULWS.js 574 kB +574 kB (new file) 🆕
./bundle/interactiveCli-QXTE6GZJ.js 1.31 MB +1.31 MB (new file) 🆕
./bundle/liteRtServerManager-2TGO43Q3.js 2.08 kB +2.08 kB (new file) 🆕
./bundle/oauth2-provider-BXJB5MNN.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-MTD736U4.js 1.97 MB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/cleanup-3SMQAVBW.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 4.97 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-NSOLCG4U.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-74QEIN7P.js 0 B -622 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-IFSMQXNC.js 932 B +932 B (new file) 🆕
./bundle/start-W5IAY2Z7.js 622 B +622 B (new file) 🆕

compressed-size-action

@gemini-cli gemini-cli Bot added the area/core Issues related to User Interface, OS Support, Core Functionality label Apr 27, 2026
Bojun-Vvibe added a commit to Bojun-Vvibe/oss-contributions that referenced this pull request Apr 27, 2026
@Adib234 Adib234 enabled auto-merge April 28, 2026 14:00
@Adib234 Adib234 added this pull request to the merge queue Apr 28, 2026
Merged via the queue into main with commit 59b2dea Apr 28, 2026
27 checks passed
@Adib234 Adib234 deleted the adibakm/devtools-activity-logger branch April 28, 2026 17:49
TirthNaik-99 pushed a commit to TirthNaik-99/gemini-cli that referenced this pull request May 4, 2026
kimjune01 pushed a commit to kimjune01/gemini-cli-claude that referenced this pull request May 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/core Issues related to User Interface, OS Support, Core Functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: DevTools activity logger fetch interceptor strips headers from Request objects

2 participants