Skip to content

Commit 54f9665

Browse files
committed
Merge branch 'main' into VickyStash/bugfix/88238-fix-new-message-indication
2 parents 4707963 + 885f601 commit 54f9665

50 files changed

Lines changed: 2549 additions & 801 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/settings.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@
5252
"mcp__sentry__search_events",
5353
"mcp__sentry__search_issue_events",
5454
"mcp__sentry__search_issues",
55-
"mcp__sentry__whoami"
55+
"mcp__sentry__whoami",
56+
"Bash(agent-device *)",
57+
"Bash(echo \"$(npm root -g)/agent-device/skills/agent-device\")"
5658
]
5759
},
5860
"enabledPlugins": {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
name: agent-device
3+
description: Drive iOS and Android devices for the Expensify App - testing, debugging, performance profiling, bug reproduction, and feature verification. Use when the developer needs to interact with the mobile app on a device.
4+
allowed-tools: Bash(agent-device *) Bash(npm root *)
5+
---
6+
7+
# agent-device
8+
9+
## Pre-flight
10+
11+
`agent-device` CLI version: !`agent-device --version 2>&1 || echo "NOT_INSTALLED"`
12+
13+
Canonical skill reference path (read these files directly for device automation guidance - bootstrap, exploration, verification, debugging): !`echo "$(npm root -g)/agent-device/skills/agent-device"`
14+
15+
> If the version line above shows `NOT_INSTALLED` or a command-not-found error, **STOP** and instruct the developer to install it: `npm install -g agent-device`. All device interaction depends on it.

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,5 +162,8 @@ modules/*/lib/
162162
.playwright-output/
163163
.playwright-mcp/
164164

165+
# agent-device
166+
agent-device-output/
167+
165168
# cspell cache
166169
.cspellcache

CLAUDE.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,9 @@ npm run web
278278
### Browser Testing
279279
Use the `/playwright-app-testing` skill to test and debug the App in a browser. Use this skill after making frontend changes to verify your work, or when the user requests testing.
280280

281+
### Mobile Device Testing
282+
Use the `/agent-device` skill to drive the App on iOS and Android (simulators or real devices) for interactive testing, performance profiling, bug reproduction, and device-specific debugging. Requires `npm install -g agent-device` - the skill's pre-flight check will surface the install instruction if missing.
283+
281284
## Architecture Decisions
282285

283286
### React Native New Architecture

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ For detailed setup instructions for each platform, see the following guides:
4848
* **📱 iOS Development**: [iOS Setup Instructions](contributingGuides/SETUP_IOS.md)
4949
* **🤖 Android Development**: [Android Setup Instructions](contributingGuides/SETUP_ANDROID.md)
5050

51+
**Optional AI-assisted mobile testing:** If you use Claude Code, the [`/agent-device` skill](.claude/skills/agent-device/SKILL.md) drives iOS and Android simulators or devices for interactive testing, debugging, and performance profiling. Requires `npm install -g agent-device`.
52+
5153
## General Troubleshooting
5254
1. If you are having issues with **_Getting Started_**, please reference [React Native's Documentation](https://reactnative.dev/docs/environment-setup)
5355
2. If you are running into CORS errors like (in the browser dev console)
Lines changed: 1 addition & 0 deletions
Loading

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"perf-test": "NODE_OPTIONS=--experimental-vm-modules npx reassure",
4646
"typecheck": "NODE_OPTIONS=--max_old_space_size=8192 tsc",
4747
"typecheck-tsgo": "tsgo --noEmit --incremental --tsBuildInfoFile tsconfig.tsgo.tsbuildinfo",
48-
"lint": "NODE_OPTIONS=--max_old_space_size=8192 eslint . --max-warnings=313 --cache --cache-location=node_modules/.cache/eslint --cache-strategy content --concurrency=auto",
48+
"lint": "NODE_OPTIONS=--max_old_space_size=8192 eslint . --max-warnings=292 --cache --cache-location=node_modules/.cache/eslint --cache-strategy content --concurrency=auto",
4949
"lint-changed": "NODE_OPTIONS=--max_old_space_size=8192 ./scripts/lintChanged.sh",
5050
"lint-watch": "npx eslint-watch --watch --changed",
5151
"shellcheck": "./scripts/shellCheck.sh",

src/CONST/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,7 @@ const CONST = {
886886
PAY_INVOICE_VIA_EXPENSIFY: 'payInvoiceViaExpensify',
887887
SUGGESTED_FOLLOWUPS: 'suggestedFollowups',
888888
GUSTO: 'gustoNewDot',
889+
BULK_DUPLICATE_REPORT: 'bulkDuplicateReport',
889890
BULK_EDIT: 'bulkEdit',
890891
NEW_MANUAL_EXPENSE_FLOW: 'newManualExpenseFlow',
891892
BULK_SUBMIT_APPROVE_PAY: 'bulkSubmitApprovePay',
@@ -7554,6 +7555,7 @@ const CONST = {
75547555
CHANGE_REPORT: 'changeReport',
75557556
SPLIT: 'split',
75567557
DUPLICATE: 'duplicate',
7558+
DUPLICATE_REPORT: 'duplicateReport',
75577559
UNDELETE: 'undelete',
75587560
},
75597561
BULK_DUPLICATE_LIMIT: 50,

src/components/AddUnreportedExpenseFooter.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ function AddUnreportedExpenseFooter({selectedIds, report, reportToConfirm, repor
5858
const [quickAction] = useOnyx(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE);
5959
const [betas] = useOnyx(ONYXKEYS.BETAS);
6060
const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report?.chatReportID}`);
61+
const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policy?.id}`);
6162

6263
const handleConfirm = () => {
6364
if (selectedIds.size === 0) {
@@ -93,6 +94,7 @@ function AddUnreportedExpenseFooter({selectedIds, report, reportToConfirm, repor
9394
reportNextStep,
9495
policyCategories,
9596
allTransactions: selectedTransactions,
97+
policyTagList,
9698
});
9799
}
98100
});

src/components/Icon/chunks/illustrations.chunk.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ import CalendarMonthly from '@assets/images/simple-illustrations/simple-illustra
113113
import CarIce from '@assets/images/simple-illustrations/simple-illustration__car-ice.svg';
114114
import Car from '@assets/images/simple-illustrations/simple-illustration__car.svg';
115115
import Chair from '@assets/images/simple-illustrations/simple-illustration__chair.svg';
116+
import Chalkboard from '@assets/images/simple-illustrations/simple-illustration__chalkboard.svg';
116117
import ChatBubbles from '@assets/images/simple-illustrations/simple-illustration__chatbubbles.svg';
117118
import CheckboxText from '@assets/images/simple-illustrations/simple-illustration__checkboxtext.svg';
118119
import CheckmarkCircle from '@assets/images/simple-illustrations/simple-illustration__checkmarkcircle.svg';
@@ -398,6 +399,7 @@ const Illustrations = {
398399
Trophy,
399400
Trophy1,
400401
FoodTruck,
402+
Chalkboard,
401403

402404
// Multifactor Authentication Illustrations
403405
MagnifyingGlassSpyMouthClosed,

0 commit comments

Comments
 (0)