No description
Find a file
Nick Misasi 12c8d80f4a
[MM-66591] Channel Summaries with Agents (#9405)
* Add support for Channel Summarization, inline citations

* Add support for Channel Summarization, inline citations

* Revert package-lock to master

* i18n fixes

* e2e fixes

* Remove a few tests as they're already covered by unit

* Ensure channel summary is offline compatible

- Add channel persistence check before switching to summary channel
- Fetch and persist channel/membership if not in database
- Fix TypeScript error handling for unknown error types
- Update tests to properly mock DatabaseManager

* Fixes

* Fix expo-image patch file - remove accidental build artifacts

The patch file was accidentally corrupted with build artifacts from
node_modules/expo-image/android/build/ including .dex files, results.bin,
and Oops.rej. This was causing the 16KB page size compatibility patch
to fail during CI.

* Fix iOS date picker spacing and placeholder text

- Increase snap points on iOS to accommodate inline date picker spinner
- Update AI prompt placeholder to "Ask AI about this channel"

* Fix padding

* Address PR review feedback from larkox

- Fix i18n: use defineMessages pattern instead of separate labelId/defaultLabel
- Replace custom SummaryOptionItem with existing OptionItem component
- Add ScrollView for scrollability on smaller phones
- Extract AgentItem to separate file, use FlatList for virtualization
- Extract DateInputField component, unify DateTimePicker, add useCallback
- Consolidate types into app/products/agents/types/api.ts
- Remove unnecessary fetchPostById (WebSocket handles post delivery)
- Use jest.mocked() instead of 'as jest.Mock' for type safety
- Improve transform.ts: use urlParse, add post ID length constraint,
  validate internal links with serverUrl parameter, add subpath support
- Add transform.test.ts cases for external links, subpaths, URL encoding
- Remove unnecessary Platform.select in inline_entity_link
- Revert video_file.tsx and prefetch.ts to use cachePath (patches include types)

* Update en.json with new channel summary option translations

Added missing translation keys for the defineMessages pattern used
in channel summary sheet options.

* Fix regex patterns and add negative assertions per PR review

- Use exact 26-character constraint in post ID regex instead of
  permissive pattern followed by validation
- Use specific identifier pattern in channel regex instead of [^/]+
- Remove unused ID_PATH_PATTERN and IDENTIFIER_PATH_PATTERN imports
- Add negative assertions to processInlineEntities tests to verify
  mutual exclusivity of link vs inline_entity_link nodes

* Add test cases for non-internal URLs and escaped slashes

Per PR review feedback, added tests for:
- Non-internal URLs with similar shape to internal links
- URLs with escaped slashes (%2F) in various positions

* Improve UI consistency for channel summary date picker and AI input

- Add focus state (border highlight) to AI prompt input on Ask Agents sheet
- Add active state highlight to Start/End date fields in date range picker
- Increase back button tap area on date range picker using hitSlop
- Fix date picker theme mismatch by setting themeVariant based on app theme
- Apply initial date when opening picker so value matches displayed date

Co-authored-by: Cursor <cursoragent@cursor.com>

* Gate AskAgentsOption behind agents plugin availability check

Add a plugin availability check for the "Ask Agents" feature that
mirrors the webapp's useGetAgentsBridgeEnabled hook. Calls
GET /api/v4/agents/status on WebSocket connect and plugin status
change events, stores the result in an RxJS BehaviorSubject
ephemeral store, and conditionally renders the AskAgentsOption
component based on the plugin being available.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix quick actions tests and default date range to last 7 days

Mock useAgentsConfig in quick actions tests so the Ask Agents button
renders when agents plugin availability is gated. Default the date
range picker to the last 7 days instead of empty.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Address enahum's review feedback on channel summaries PR

- Remove pluginEnabled=false on network error in agents_status
- Use enableDynamicSizing for channel summary bottom sheet
- Extract channel navigation logic to switchToChannelByName action
- Move icon color to stylesheet, null guard to parent in InlineEntityLink
- Replace custom URL parsing with parseDeepLink in transform.ts
- Reorder channel membership check before API request in channel_summary
- Use FormattedText, FormattedDate, FloatingTextInput consistently
- Use getErrorMessage for proper intl error handling in alerts
- Simplify agent_item to always use expo-image, memoize styles
- Gate Ask Agents item count on agentsEnabled in header.tsx
- Clean up CLAUDE-IOS-SIMULATOR.md per review suggestions
- Update tests to match new behavior

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix i18n extraction for date_range_picker translated strings

Add defineMessages declarations so the i18n extraction tool can find
the translated string IDs passed through custom props to DateInputField.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix agent profile image not rendering on agent selector

* Reduce channel summary bottom sheet max height from 80% to 50%

The 80% snap point created too much whitespace below the options.
50% fits the main content well while still leaving room for the
iOS date picker spinner when the custom date range view is shown.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Adjust channel summary bottom sheet max height to 65%

50% was too short, cutting off the iOS date picker spinner.
65% provides enough room for the date range view with spinner
while keeping the main options view compact.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Use platform-specific max height for channel summary bottom sheet

iOS uses 65% to accommodate the inline date picker spinner.
Android uses 50% since its modal date picker doesn't need extra space.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Reduce height on android slightly

* Final tweaks for spacing

* Address PR review feedback from larkox and pvev

- Use MessageDescriptor props instead of separate id/defaultMessage strings in DateInputField
- Extract hitSlop constant outside component for render stability
- Normalize date range to UTC start/end of day to avoid timezone data loss
- Replace hardcoded '#FFFFFF' with theme.buttonColor

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 07:00:43 -05:00
.github iOS & Android: Migrate 29 Channel Settings tests from Rainforest to Detox (#9313) 2026-02-09 19:46:27 +05:30
.husky Push react native to 0.73.6 (#7863) 2024-04-22 12:44:39 +02:00
android Bump app build number to 720 (#9511) 2026-02-13 11:41:14 +02:00
app [MM-66591] Channel Summaries with Agents (#9405) 2026-02-13 07:00:43 -05:00
assets [MM-66591] Channel Summaries with Agents (#9405) 2026-02-13 07:00:43 -05:00
build/notice-file Add "APNG4Android" to ignoreDependencies in config.yaml (#8741) 2025-04-02 09:34:25 +03:00
detox [MM-66591] Channel Summaries with Agents (#9405) 2026-02-13 07:00:43 -05:00
docs Add autotranslations (#9324) 2026-02-10 17:50:39 +01:00
eslint Refactor gallery gestures (#8752) 2025-07-22 14:00:57 +08:00
fastlane workflow, fastlane: upload release artifacts new bucket (#9410) 2026-02-03 09:26:34 +01:00
ios Bump app build number to 720 (#9511) 2026-02-13 11:41:14 +02:00
libraries/@mattermost fix(MM-67224): MM Mobile v2.36.0 crash on iOS 16 and below (#9421) 2026-01-19 16:45:56 -07:00
patches feat(MM-65147): upgrade to react-native 0.77.3 (#9253) 2025-12-22 07:35:38 -07:00
scripts New keyboard library Setup (#9278) 2026-01-13 22:38:35 +05:30
share_extension feat(iOS): Add Microsoft Intune MAM integration with multi-server support (#9312) 2025-12-10 13:07:28 +02:00
test Database changes for autotranslations (#9495) 2026-02-10 15:04:35 +01:00
types Add autotranslations (#9324) 2026-02-10 17:50:39 +01:00
.buckconfig Barebones code for v2 2020-11-17 14:20:58 -03:00
.editorconfig MM-35115 [Gekidou] Login flow - Email and Password (#5402) 2021-06-18 00:57:40 -04:00
.flowconfig [Gekidou] Upgrade to RN 0.70 (#6690) 2022-10-20 10:18:25 -03:00
.gitattributes Update v2 dependencies (#5312) 2021-04-14 10:55:29 -04:00
.gitignore feat(iOS): Add Microsoft Intune MAM integration with multi-server support (#9312) 2025-12-10 13:07:28 +02:00
.gitmodules feat(iOS): Add Microsoft Intune MAM integration with multi-server support (#9312) 2025-12-10 13:07:28 +02:00
.node-version chore(deps-dev): allow devs to use Node.js 22 (LTS) (#8657) 2025-03-24 16:28:11 -06:00
.npmrc MM-54535 Fixed hang when using the magic keyboard on iPadOS 17 (#7555) 2023-09-27 18:54:33 +03:00
.nvmrc chore(deps-dev): allow devs to use Node.js 22 (LTS) (#8657) 2025-03-24 16:28:11 -06:00
.ruby-version bump Ruby verison (#8315) 2024-11-07 12:34:24 -04:00
.solidarity Update dependencies and upgrade to RN 0.76.5 (#8421) 2025-01-16 07:11:32 -07:00
.watchmanconfig Barebones code for v2 2020-11-17 14:20:58 -03:00
app.json Barebones code for v2 2020-11-17 14:20:58 -03:00
babel.config.js Agents posts on mobile (#9317) 2025-12-09 03:56:12 -08:00
CHANGELOG.md Barebones code for v2 2020-11-17 14:20:58 -03:00
CLAUDE-IOS-SIMULATOR.md [MM-66591] Channel Summaries with Agents (#9405) 2026-02-13 07:00:43 -05:00
CLAUDE.md [MM-66591] Channel Summaries with Agents (#9405) 2026-02-13 07:00:43 -05:00
CONTRIBUTING.md Barebones code for v2 2020-11-17 14:20:58 -03:00
env.d.ts E2E feature schedule posts (#8709) 2025-04-23 12:10:37 +05:30
eslint.config.mjs Refactor gallery gestures (#8752) 2025-07-22 14:00:57 +08:00
eslint.precommit.config.mjs chore: error on react-hooks/exhaustive-deps during pre-commit (#9105) 2025-09-05 06:08:01 -06:00
Gemfile Update dependencies and upgrade to RN 0.76.5 (#8421) 2025-01-16 07:11:32 -07:00
Gemfile.lock Update dependencies and upgrade to RN 0.76.5 (#8421) 2025-01-16 07:11:32 -07:00
index.ts Add autotranslations (#9324) 2026-02-10 17:50:39 +01:00
ISSUE_TEMPLATE.md Update ISSUE_TEMPLATE.md (#7080) 2023-02-03 08:55:40 -05:00
jest.config.js feat(iOS): Add Microsoft Intune MAM integration with multi-server support (#9312) 2025-12-10 13:07:28 +02:00
jsconfig.json Secure Files and preview PDF inline (#8844) 2025-06-19 15:30:56 +08:00
LICENSE.txt Barebones code for v2 2020-11-17 14:20:58 -03:00
metro.config.js Upgrade RN as well as update or replace other dependencies (#8011) 2024-06-19 09:33:45 +08:00
NOTICE.txt chore: Update NOTICE.txt file with updated dependencies (#9424) 2026-01-19 12:17:55 +02:00
package-lock.json Bump app build and version number (#9501) 2026-02-11 09:55:31 +02:00
package.json Bump app build and version number (#9501) 2026-02-11 09:55:31 +02:00
PULL_REQUEST_TEMPLATE.md Barebones code for v2 2020-11-17 14:20:58 -03:00
react-native.config.js Update v2 dependencies (#5312) 2021-04-14 10:55:29 -04:00
README.md Update README.md (#9443) 2026-01-21 08:08:41 +02:00
SECURITY.md Barebones code for v2 2020-11-17 14:20:58 -03:00
tsconfig.json Agents posts on mobile (#9317) 2025-12-09 03:56:12 -08:00
tsconfig.test.json Barebones code for v2 2020-11-17 14:20:58 -03:00

Mattermost Mobile v2

  • Minimum Server versions: Current ESR version (10.11.0+)
  • Supported iOS versions: 16.0+
  • Supported Android versions: 7.0+

Mattermost is an open source Slack-alternative used by thousands of companies around the world in 21 languages. Learn more at https://mattermost.com.

You can download our apps from the App Store or Google Play Store, or build them yourself.

We plan on releasing monthly updates with new features - check the changelog for what features are currently supported!

Important: If you self-compile the Mattermost Mobile apps you also need to deploy your own Mattermost Push Notification Service.

Android 16KB Page Size Support

Temporary Requirement: To comply with Google Play's 16KB page size requirement for Android devices, this project includes a compatibility patch that must be applied before building for Android.

When to Apply the Patch

  • CI/CD Builds: The patch is automatically applied in GitHub Actions for Android builds
  • Local Development: If you're building Android locally and encounter 16KB page size related issues, run:
npm run apply-16kb-pagesize-patch

This script will:

  1. Update package dependencies to compatible versions
  2. Apply necessary code changes for 16KB page size support
  3. Update patch files for modified dependencies
  4. Regenerate package-lock.json

⚠️ Important Warnings

  • DO NOT commit the changes applied by this patch to the repository
  • These changes will break iOS builds if committed
  • The patch is designed to be applied only during Android CI builds
  • For local development, revert all changes after building Android

Note: This is a temporary solution until all dependencies natively support 16KB page sizes.

How to Contribute

Testing

To help with testing app updates before they're released, you can:

  1. Sign up to be a beta tester
    • Android
    • iOS - Open this link from your iOS device
  2. Install the Mattermost Beta app. New updates in the Beta app are released periodically. You will receive a notification when the new updates are available.
  3. File any bugs you find by filing a GitHub issue with:
    • Device information
    • Repro steps
    • Observed behavior (including screenshot / video when possible)
    • Expected behavior
  4. (Optional) Sign up for our team site

You can leave the Beta testing program at any time:

  • On Android, click this link while logged in with your Google Play email address used to opt-in for the Beta program, then click Leave the program.
  • On iOS, access the Mattermost Beta app page in TestFlight and click Stop Testing.

Contribute Code

  1. Look in GitHub issues for issues marked as [Help Wanted]
  2. Comment to let people know youre working on it
  3. Follow these instructions to set up your developer environment
  4. Join the Native Mobile Apps channel on our team site to ask questions

Frequently Asked Questions

How is data handled on mobile devices after a user account is deactivated?

App data is wiped from the device when a user logs out of the app. If the user is logged in when the account is deactivated, then within one minute the system logs the user out, and as a result all app data is wiped from the device.

I need the code for the v1 version

You can still access it! We have moved the code from master to the v1 branch. Be aware that we will not be providing any more v1 versions or updates in the public stores.

Troubleshooting

I keep getting a message "Cannot connect to the server. Please check your server URL and internet connection."

This sometimes appears when there is an issue with the SSL certificate configuration.

To check that your SSL certificate is set up correctly, test the SSL certificate by visiting a site such as https://www.ssllabs.com/ssltest/index.html. If theres an error about the missing chain or certificate path, there is likely an intermediate certificate missing that needs to be included.

Please note that the apps cannot connect to servers with self-signed certificates, consider using Let's Encrypt instead.

I see a “Connecting…” bar that does not go away

If your app is working properly, you should see a grey “Connecting…” bar that clears or says “Connected” after the app reconnects.

If you are seeing this message all the time, and your internet connection seems fine:

Ask your server administrator if the server uses NGINX or another webserver as a reverse proxy. If so, they should check that it is configured correctly for supporting the websocket connection for APIv4 endpoints.