Skip to content

feat: add agentic cli preferences#8933

Draft
ieow wants to merge 10 commits into
mainfrom
cw/agentic-cli-notification-preference
Draft

feat: add agentic cli preferences#8933
ieow wants to merge 10 commits into
mainfrom
cw/agentic-cli-notification-preference

Conversation

@ieow

@ieow ieow commented May 29, 2026

Copy link
Copy Markdown
Contributor

Explanation

Adds Agentic CLI notification preferences to authenticated user storage and wires them through NotificationServicesController.

@metamask/authenticated-user-storage

  • Adds AgenticCliPreference (inAppNotificationsEnabled, pushNotificationsEnabled) and an optional agenticCli field on NotificationPreferences (minor semver; the next major release should make it required).
  • Adds DEFAULT_AGENTIC_CLI_PREFERENCES (both flags default to true) and exports it from the package index.
  • getNotificationPreferences: legacy blobs that omit agenticCli are backfilled with a shallow copy of DEFAULT_AGENTIC_CLI_PREFERENCES, then validated against the full schema. When non-null, the returned object always includes agenticCli even though the type marks it optional.
  • putNotificationPreferences: relies on the TypeScript type for write shape; no additional runtime validation is performed on PUT.
  • Updates test mocks and adds coverage for legacy coercion and for ensuring returned defaults are not shared with the exported constant.

@metamask/notification-services-controller

  • Re-exports DEFAULT_AGENTIC_CLI_PREFERENCES from @metamask/authenticated-user-storage.
  • Initializes agenticCli when building fresh notification preferences via buildFreshPreferences.
  • Agentic CLI notification delivery is gated by the Agentic backend using AUS agenticCli preferences; NotificationServicesController does not filter Agentic CLI notifications at fetch time (same as perps and socialAI).
  • Updates test helpers and expectations.

Semver note

This is a minor change: agenticCli is optional on NotificationPreferences, so existing consumers that read-modify-write via getNotificationPreferences do not need code changes. The next major release should make agenticCli required on the type.

References

  • Related to Agentic CLI notification preference work (#8933)

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Extending NotificationPreferences with a new required field is a breaking type change for consumers that build or spread preference objects without agenticCli.

Overview
Adds agentic CLI notification settings to authenticated user storage: a new AgenticCliPreference type (in-app and push toggles) and a required agenticCli field on NotificationPreferences.

Test mocks were updated so MOCK_NOTIFICATION_PREFERENCES includes sample agenticCli values.

Reviewed by Cursor Bugbot for commit a732e09. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a732e09. Configure here.

marketing: MarketingPreference;
perps: PerpsPreference;
socialAI: SocialAIPreference;
agenticCli: AgenticCliPreference;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Validation schema missing new agenticCli field

High Severity

The NotificationPreferences type now requires agenticCli, but NotificationPreferencesSchema in validators.ts was not updated to include a corresponding agenticCli field. The assertNotificationPreferences function uses this schema to validate API responses, then asserts the data is NotificationPreferences. This means API data missing agenticCli will pass validation, yet downstream code will trust it's present — causing runtime undefined access errors.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a732e09. Configure here.

@ieow

ieow commented Jun 9, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.0-preview-ce4057bcb
@metamask-previews/accounts-controller@38.1.2-preview-ce4057bcb
@metamask-previews/address-book-controller@7.1.2-preview-ce4057bcb
@metamask-previews/ai-controllers@0.7.0-preview-ce4057bcb
@metamask-previews/analytics-controller@1.1.0-preview-ce4057bcb
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-ce4057bcb
@metamask-previews/announcement-controller@8.1.0-preview-ce4057bcb
@metamask-previews/app-metadata-controller@2.0.1-preview-ce4057bcb
@metamask-previews/approval-controller@9.0.1-preview-ce4057bcb
@metamask-previews/assets-controller@8.1.0-preview-ce4057bcb
@metamask-previews/assets-controllers@108.2.0-preview-ce4057bcb
@metamask-previews/authenticated-user-storage@2.0.0-preview-ce4057bcb
@metamask-previews/base-controller@9.1.0-preview-ce4057bcb
@metamask-previews/base-data-service@0.1.3-preview-ce4057bcb
@metamask-previews/bridge-controller@73.1.0-preview-ce4057bcb
@metamask-previews/bridge-status-controller@71.2.1-preview-ce4057bcb
@metamask-previews/build-utils@3.0.4-preview-ce4057bcb
@metamask-previews/chain-agnostic-permission@1.6.1-preview-ce4057bcb
@metamask-previews/chomp-api-service@3.1.0-preview-ce4057bcb
@metamask-previews/claims-controller@0.5.2-preview-ce4057bcb
@metamask-previews/client-controller@1.0.1-preview-ce4057bcb
@metamask-previews/compliance-controller@2.0.1-preview-ce4057bcb
@metamask-previews/composable-controller@12.0.1-preview-ce4057bcb
@metamask-previews/config-registry-controller@0.3.2-preview-ce4057bcb
@metamask-previews/connectivity-controller@0.2.0-preview-ce4057bcb
@metamask-previews/controller-utils@12.1.0-preview-ce4057bcb
@metamask-previews/core-backend@6.3.1-preview-ce4057bcb
@metamask-previews/delegation-controller@3.0.1-preview-ce4057bcb
@metamask-previews/earn-controller@12.2.0-preview-ce4057bcb
@metamask-previews/eip-5792-middleware@3.0.4-preview-ce4057bcb
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-ce4057bcb
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-ce4057bcb
@metamask-previews/ens-controller@19.1.3-preview-ce4057bcb
@metamask-previews/eth-block-tracker@15.0.1-preview-ce4057bcb
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-ce4057bcb
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-ce4057bcb
@metamask-previews/foundryup@1.0.1-preview-ce4057bcb
@metamask-previews/gas-fee-controller@26.2.2-preview-ce4057bcb
@metamask-previews/gator-permissions-controller@4.2.0-preview-ce4057bcb
@metamask-previews/geolocation-controller@0.1.3-preview-ce4057bcb
@metamask-previews/json-rpc-engine@10.5.0-preview-ce4057bcb
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-ce4057bcb
@metamask-previews/keyring-controller@26.0.0-preview-ce4057bcb
@metamask-previews/logging-controller@8.0.2-preview-ce4057bcb
@metamask-previews/message-manager@14.1.2-preview-ce4057bcb
@metamask-previews/messenger@1.2.0-preview-ce4057bcb
@metamask-previews/messenger-cli@0.2.0-preview-ce4057bcb
@metamask-previews/money-account-balance-service@1.0.2-preview-ce4057bcb
@metamask-previews/money-account-controller@0.3.1-preview-ce4057bcb
@metamask-previews/money-account-upgrade-controller@2.0.3-preview-ce4057bcb
@metamask-previews/multichain-account-service@10.0.1-preview-ce4057bcb
@metamask-previews/multichain-api-middleware@3.1.2-preview-ce4057bcb
@metamask-previews/multichain-network-controller@3.1.2-preview-ce4057bcb
@metamask-previews/multichain-transactions-controller@7.1.0-preview-ce4057bcb
@metamask-previews/name-controller@9.1.2-preview-ce4057bcb
@metamask-previews/network-controller@32.0.0-preview-ce4057bcb
@metamask-previews/network-enablement-controller@5.2.0-preview-ce4057bcb
@metamask-previews/notification-services-controller@24.1.2-preview-ce4057bcb
@metamask-previews/passkey-controller@2.0.1-preview-ce4057bcb
@metamask-previews/permission-controller@13.1.1-preview-ce4057bcb
@metamask-previews/permission-log-controller@5.1.0-preview-ce4057bcb
@metamask-previews/perps-controller@6.3.0-preview-ce4057bcb
@metamask-previews/phishing-controller@17.2.0-preview-ce4057bcb
@metamask-previews/polling-controller@16.0.6-preview-ce4057bcb
@metamask-previews/preferences-controller@23.1.0-preview-ce4057bcb
@metamask-previews/profile-metrics-controller@3.1.5-preview-ce4057bcb
@metamask-previews/profile-sync-controller@28.1.1-preview-ce4057bcb
@metamask-previews/ramps-controller@14.0.0-preview-ce4057bcb
@metamask-previews/rate-limit-controller@7.0.1-preview-ce4057bcb
@metamask-previews/react-data-query@0.2.1-preview-ce4057bcb
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-ce4057bcb
@metamask-previews/sample-controllers@5.0.1-preview-ce4057bcb
@metamask-previews/seedless-onboarding-controller@10.0.0-preview-ce4057bcb
@metamask-previews/selected-network-controller@26.1.3-preview-ce4057bcb
@metamask-previews/shield-controller@5.1.2-preview-ce4057bcb
@metamask-previews/signature-controller@39.2.3-preview-ce4057bcb
@metamask-previews/snap-account-service@0.2.1-preview-ce4057bcb
@metamask-previews/social-controllers@2.2.1-preview-ce4057bcb
@metamask-previews/storage-service@1.0.1-preview-ce4057bcb
@metamask-previews/subscription-controller@6.1.3-preview-ce4057bcb
@metamask-previews/transaction-controller@66.0.0-preview-ce4057bcb
@metamask-previews/transaction-pay-controller@22.7.0-preview-ce4057bcb
@metamask-previews/user-operation-controller@41.2.3-preview-ce4057bcb
@metamask-previews/wallet@1.0.1-preview-ce4057bcb

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants