Visitar URL original
Collect analytics on AI agent usage by jmagman · Pull Request #187630 · flutter/flutter · GitHub
Skip to content

Collect analytics on AI agent usage - #187630

Merged
auto-submit[bot] merged 5 commits into
flutter:masterfrom
jmagman:agents
Jul 7, 2026
Merged

auto-submit[bot] merged 5 commits into
flutter:masterfrom
jmagman:agents

Conversation

@jmagman

@jmagman jmagman commented Jun 5, 2026 •

Copy link
Copy Markdown
Member

Collect telemetry on which AI agents are calling flutter commands, based on environment variables the agents add in their sessions.

This uses the unified_analytics change dart-lang/tools#2423

There's a conversation in that PR about making AiAgent.detectAgentName return a Set. I am adding this now dart-lang/tools#2455 (GA needs the user_property list values to be a string delineated by commas anyway, so it's not a breaking change), and then migrate this code over to it. However, I'd like to land this as-is ASAP to make it before the next stable cutoff.

Fixes #187623.

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@jmagman jmagman self-assigned this Jun 5, 2026
@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label Jun 5, 2026
@jmagman jmagman added the tool Affects the "flutter" command-line tool. See also t: labels. label Jun 5, 2026
@jmagman

jmagman commented Jun 17, 2026

Copy link
Copy Markdown
Member Author

/gemini review

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

Copy link
Copy Markdown
Contributor

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 introduces AI agent detection to BotDetector and integrates it with unified_analytics to bypass bot suppression when Flutter tools are executed by an AI agent. It also updates the unified_analytics package dependency and adds corresponding unit tests. Feedback was provided to optimize the lazy initialization of aiAgentName using a late final variable to correctly cache null results and avoid redundant environment lookups.

@github-actions github-actions Bot removed the CICD Run CI/CD label Jun 17, 2026
@jmagman jmagman added the CICD Run CI/CD label Jun 17, 2026
@jmagman
jmagman marked this pull request as ready for review July 6, 2026 17:41

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

Copy link
Copy Markdown
Contributor

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 unified analytics reporting in flutter_tools to detect if the tool is run by an AI agent. When an AI agent is detected, the standard bot check that suppresses analytics is bypassed, and the agent's name is passed to the analytics instance. Additionally, unit tests are added to verify this behavior and ensure the agent name is correctly recorded. There are no review comments, and I have no feedback to provide.

@bkonyi bkonyi added the autosubmit Merge PR when tree becomes green via auto submit App label Jul 7, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Jul 7, 2026
Merged via the queue into flutter:master with commit 7fbcc08 Jul 7, 2026
168 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jul 7, 2026
Rusino pushed a commit to Rusino/flutter that referenced this pull request Jul 7, 2026
Collect telemetry on which AI agents are calling `flutter` commands,
based on environment variables the agents add in their sessions.

This uses the `unified_analytics` change
dart-lang/tools#2423

There's a conversation in that PR about making `AiAgent.detectAgentName`
return a `Set`. I am adding this now
dart-lang/tools#2455 (GA needs the user_property
list values to be a string delineated by commas anyway, so it's not a
breaking change), and then migrate this code over to it. However, I'd
like to land this as-is ASAP to make it before the next stable cutoff.

Fixes flutter#187623.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
@jmagman
jmagman deleted the agents branch July 7, 2026 16:03
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Jul 8, 2026
…12137)

Manual roll Flutter from 6995038d96ef to 91939cc4db78 (48 revisions)

Manual roll requested by stuartmorgan@google.com

flutter/flutter@6995038...91939cc

2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 80ae1deed9ed to 075fbe4778d9 (6 revisions) (flutter/flutter#189067)
2026-07-07 katelovett@google.com Bump customer testing version for new registrants (flutter/flutter#189070)
2026-07-07 engine-flutter-autoroll@skia.org Roll Packages from fc00ceb to 92525f5 (2 revisions) (flutter/flutter#189069)
2026-07-07 47866232+chunhtai@users.noreply.github.com fix android semantics integration test hangs due to postframe callback (flutter/flutter#189043)
2026-07-07 katelovett@google.com Bump goldctl (flutter/flutter#189030)
2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 71db7c06c5fe to 80ae1deed9ed (2 revisions) (flutter/flutter#189060)
2026-07-07 magder@google.com Collect analytics on AI agent usage (flutter/flutter#187630)
2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 125a76cc4cf3 to 71db7c06c5fe (4 revisions) (flutter/flutter#189054)
2026-07-07 engine-flutter-autoroll@skia.org Roll Dart SDK from 70577d6f2bba to c648e3429d76 (1 revision) (flutter/flutter#189052)
2026-07-07 vuhoangminh97@gmail.com Fix RenderSliverPadding setter assertion (flutter/flutter#187353)
2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 2dde156aec3e to 125a76cc4cf3 (3 revisions) (flutter/flutter#189037)
2026-07-07 49402500+fahaddoc@users.noreply.github.com Explain asynchronous causes in the setState() called after dispose() error (flutter/flutter#187294)
2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 7dccd1e79a5b to 2dde156aec3e (2 revisions) (flutter/flutter#189035)
2026-07-07 116356835+AbdeMohlbi@users.noreply.github.com Add `STRING_CATALOG_GENERATE_SYMBOLS = YES;` (flutter/flutter#188163)
2026-07-07 31859944+LongCatIsLooong@users.noreply.github.com Print warnings on Intel Macs / targeting Intel Macs (flutter/flutter#188835)
2026-07-07 engine-flutter-autoroll@skia.org Roll Dart SDK from 4c03f64b19f6 to 70577d6f2bba (1 revision) (flutter/flutter#189031)
2026-07-07 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from n1Lm2Z4DZkfC3bwj5... to 7RjQJBW3m-3Jl-7jr... (flutter/flutter#189032)
2026-07-06 31859944+LongCatIsLooong@users.noreply.github.com Recommend `OverlayPortal.overlayChildLayoutBuilder` over Target-Follower (flutter/flutter#188894)
2026-07-06 154381524+flutteractionsbot@users.noreply.github.com Sync CHANGELOG.md from stable (flutter/flutter#189025)
2026-07-06 matt.kosarek@canonical.com Rename preferredSize to size and preferredConstraints to constraints in the windowing API (flutter/flutter#189017)
2026-07-06 6655696+guidezpl@users.noreply.github.com Skip locked issues in no-response check (flutter/flutter#188950)
2026-07-06 47866232+chunhtai@users.noreply.github.com Fix potential race condtion in android_semantics_integration_test (flutter/flutter#188830)
2026-07-06 codefu@google.com ci: udpate wait-for-engine-build composite action to cocoon (flutter/flutter#189020)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from 2b55eed5500d to 7dccd1e79a5b (3 revisions) (flutter/flutter#189021)
2026-07-06 jesswon@google.com [AGP 9] Update Flutter Template Versions (flutter/flutter#188762)
2026-07-06 126701490+richyo-codes@users.noreply.github.com fix(engine/windows): keep tooltip position rect alive - fix use after free (flutter/flutter#188476)
2026-07-06 bkonyi@google.com [Tool] Fix null check operator crash in currentPackageConfig (flutter/flutter#188454)
2026-07-06 bkonyi@google.com [Tool] Gracefully handle WDAC/AppLocker blocks for impellerc (flutter/flutter#188452)
2026-07-06 bkonyi@google.com [flutter_tools] Throw DaemonException if app fails to start early (flutter/flutter#188921)
2026-07-06 engine-flutter-autoroll@skia.org Roll Dart SDK from ce7a2567eb59 to 4c03f64b19f6 (2 revisions) (flutter/flutter#189015)
2026-07-06 bkonyi@google.com [flutter_tools, engine] Add --disable-service-origin-check option to disable VM service origin checks (flutter/flutter#188745)
2026-07-06 bkonyi@google.com [flutter_tools] Fix test flakiness in widget_preview_detection_test.dart (flutter/flutter#188922)
2026-07-06 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#189009)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from c0e2b9667d91 to 2b55eed5500d (1 revision) (flutter/flutter#189006)
2026-07-06 engine-flutter-autoroll@skia.org Roll Packages from 2fbe873 to fc00ceb (1 revision) (flutter/flutter#189007)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from b68567542f81 to c0e2b9667d91 (1 revision) (flutter/flutter#189004)
2026-07-06 Rusino@users.noreply.github.com Fixing multiline GetBoxesForRange (flutter/flutter#188803)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from e15ea7a4b927 to b68567542f81 (4 revisions) (flutter/flutter#189000)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from 79806692425f to e15ea7a4b927 (2 revisions) (flutter/flutter#188992)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from 2826ae6dc649 to 79806692425f (1 revision) (flutter/flutter#188991)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from 7f99eee20fd6 to 2826ae6dc649 (1 revision) (flutter/flutter#188990)
2026-07-06 737941+loic-sharma@users.noreply.github.com Add debugPaintFocusBoxes (flutter/flutter#188288)
2026-07-05 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from bkK6BLiZDRnE7AQQj... to n1Lm2Z4DZkfC3bwj5... (flutter/flutter#188989)
2026-07-05 engine-flutter-autoroll@skia.org Roll Skia from 75a4bf6706bd to 7f99eee20fd6 (2 revisions) (flutter/flutter#188988)
...
kalyujniy pushed a commit to brickit-app/camera that referenced this pull request Jul 8, 2026
…lutter#12137)

Manual roll Flutter from 6995038d96ef to 91939cc4db78 (48 revisions)

Manual roll requested by stuartmorgan@google.com

flutter/flutter@6995038...91939cc

2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 80ae1deed9ed to 075fbe4778d9 (6 revisions) (flutter/flutter#189067)
2026-07-07 katelovett@google.com Bump customer testing version for new registrants (flutter/flutter#189070)
2026-07-07 engine-flutter-autoroll@skia.org Roll Packages from fc00ceb to 92525f5 (2 revisions) (flutter/flutter#189069)
2026-07-07 47866232+chunhtai@users.noreply.github.com fix android semantics integration test hangs due to postframe callback (flutter/flutter#189043)
2026-07-07 katelovett@google.com Bump goldctl (flutter/flutter#189030)
2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 71db7c06c5fe to 80ae1deed9ed (2 revisions) (flutter/flutter#189060)
2026-07-07 magder@google.com Collect analytics on AI agent usage (flutter/flutter#187630)
2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 125a76cc4cf3 to 71db7c06c5fe (4 revisions) (flutter/flutter#189054)
2026-07-07 engine-flutter-autoroll@skia.org Roll Dart SDK from 70577d6f2bba to c648e3429d76 (1 revision) (flutter/flutter#189052)
2026-07-07 vuhoangminh97@gmail.com Fix RenderSliverPadding setter assertion (flutter/flutter#187353)
2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 2dde156aec3e to 125a76cc4cf3 (3 revisions) (flutter/flutter#189037)
2026-07-07 49402500+fahaddoc@users.noreply.github.com Explain asynchronous causes in the setState() called after dispose() error (flutter/flutter#187294)
2026-07-07 engine-flutter-autoroll@skia.org Roll Skia from 7dccd1e79a5b to 2dde156aec3e (2 revisions) (flutter/flutter#189035)
2026-07-07 116356835+AbdeMohlbi@users.noreply.github.com Add `STRING_CATALOG_GENERATE_SYMBOLS = YES;` (flutter/flutter#188163)
2026-07-07 31859944+LongCatIsLooong@users.noreply.github.com Print warnings on Intel Macs / targeting Intel Macs (flutter/flutter#188835)
2026-07-07 engine-flutter-autoroll@skia.org Roll Dart SDK from 4c03f64b19f6 to 70577d6f2bba (1 revision) (flutter/flutter#189031)
2026-07-07 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from n1Lm2Z4DZkfC3bwj5... to 7RjQJBW3m-3Jl-7jr... (flutter/flutter#189032)
2026-07-06 31859944+LongCatIsLooong@users.noreply.github.com Recommend `OverlayPortal.overlayChildLayoutBuilder` over Target-Follower (flutter/flutter#188894)
2026-07-06 154381524+flutteractionsbot@users.noreply.github.com Sync CHANGELOG.md from stable (flutter/flutter#189025)
2026-07-06 matt.kosarek@canonical.com Rename preferredSize to size and preferredConstraints to constraints in the windowing API (flutter/flutter#189017)
2026-07-06 6655696+guidezpl@users.noreply.github.com Skip locked issues in no-response check (flutter/flutter#188950)
2026-07-06 47866232+chunhtai@users.noreply.github.com Fix potential race condtion in android_semantics_integration_test (flutter/flutter#188830)
2026-07-06 codefu@google.com ci: udpate wait-for-engine-build composite action to cocoon (flutter/flutter#189020)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from 2b55eed5500d to 7dccd1e79a5b (3 revisions) (flutter/flutter#189021)
2026-07-06 jesswon@google.com [AGP 9] Update Flutter Template Versions (flutter/flutter#188762)
2026-07-06 126701490+richyo-codes@users.noreply.github.com fix(engine/windows): keep tooltip position rect alive - fix use after free (flutter/flutter#188476)
2026-07-06 bkonyi@google.com [Tool] Fix null check operator crash in currentPackageConfig (flutter/flutter#188454)
2026-07-06 bkonyi@google.com [Tool] Gracefully handle WDAC/AppLocker blocks for impellerc (flutter/flutter#188452)
2026-07-06 bkonyi@google.com [flutter_tools] Throw DaemonException if app fails to start early (flutter/flutter#188921)
2026-07-06 engine-flutter-autoroll@skia.org Roll Dart SDK from ce7a2567eb59 to 4c03f64b19f6 (2 revisions) (flutter/flutter#189015)
2026-07-06 bkonyi@google.com [flutter_tools, engine] Add --disable-service-origin-check option to disable VM service origin checks (flutter/flutter#188745)
2026-07-06 bkonyi@google.com [flutter_tools] Fix test flakiness in widget_preview_detection_test.dart (flutter/flutter#188922)
2026-07-06 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#189009)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from c0e2b9667d91 to 2b55eed5500d (1 revision) (flutter/flutter#189006)
2026-07-06 engine-flutter-autoroll@skia.org Roll Packages from 2fbe873 to fc00ceb (1 revision) (flutter/flutter#189007)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from b68567542f81 to c0e2b9667d91 (1 revision) (flutter/flutter#189004)
2026-07-06 Rusino@users.noreply.github.com Fixing multiline GetBoxesForRange (flutter/flutter#188803)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from e15ea7a4b927 to b68567542f81 (4 revisions) (flutter/flutter#189000)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from 79806692425f to e15ea7a4b927 (2 revisions) (flutter/flutter#188992)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from 2826ae6dc649 to 79806692425f (1 revision) (flutter/flutter#188991)
2026-07-06 engine-flutter-autoroll@skia.org Roll Skia from 7f99eee20fd6 to 2826ae6dc649 (1 revision) (flutter/flutter#188990)
2026-07-06 737941+loic-sharma@users.noreply.github.com Add debugPaintFocusBoxes (flutter/flutter#188288)
2026-07-05 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from bkK6BLiZDRnE7AQQj... to n1Lm2Z4DZkfC3bwj5... (flutter/flutter#188989)
2026-07-05 engine-flutter-autoroll@skia.org Roll Skia from 75a4bf6706bd to 7f99eee20fd6 (2 revisions) (flutter/flutter#188988)
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Collect analytics on AI agent usage

2 participants