Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
0c295c4
feat: Concierge Tab Cleanup
cakesoft-vaibhav May 11, 2026
f820d3c
feat: Implement Help AI feature with chat and issue submission
cakesoft-vaibhav May 14, 2026
0cb3ddb
feat: Refactor Help AI components to improve UI consistency and respo…
cakesoft-vaibhav May 14, 2026
3f7fd2c
feat: Enhance Help AI chat and draft card components for improved mes…
cakesoft-vaibhav May 14, 2026
5c62a59
feat: Add greeting messages for Help AI and enhance email handling in…
cakesoft-vaibhav May 14, 2026
cba7774
Merge branch 'upgrade/rn-0.83.9' into feat/AiChat
cakesoft-vaibhav May 15, 2026
53ef9f9
feat: enhance HelpAiChat metadata structure and update helpAi persist…
cakesoft-vaibhav May 18, 2026
ba5d727
feat: integrate ChatBubble icon and enhance Help AI components for im…
cakesoft-vaibhav May 18, 2026
90e4920
feat: remove ChatBubble icon from HelpAiEntryCard for cleaner UI
antuz123 May 19, 2026
d4af83e
feat: add appId parameter to helpChat and submitHelpIssue methods; in…
cakesoft-vaibhav May 19, 2026
5759d2f
fix: ios App crash on keeper ai chat screen
cakesoft-vaibhav May 19, 2026
629873d
feat: update Chat feature name
cakesoft-vaibhav May 19, 2026
bd6613a
fix: keyboard overlapping issue on ios
cakesoft-vaibhav May 19, 2026
738ca8c
feat: add RagChunkAdmin screen and integrate access check functionality
cakesoft-vaibhav May 21, 2026
a964885
feat: update typing indicator text and enhance chat history UI with i…
cakesoft-vaibhav May 21, 2026
786048a
specs: Testnet indicator to Wallets, Keys, Receive, and Send Confirma…
antuz123 May 21, 2026
02507fc
feat: add titleSuffix prop to HomeScreenHeader for Testnet indication
antuz123 May 21, 2026
2dc2f93
spec archive: Testnet indicator to Wallets, Keys, Receive, and Send C…
antuz123 May 21, 2026
dcd552b
Merge pull request #6984 from KeeperCommunity/feat/AiChat-updateRag
cakesoft-vaibhav May 22, 2026
3fbc6cc
Merge pull request #6983 from KeeperCommunity/feat/network-indicator
Parsh May 22, 2026
bfa6167
feat: add chat bubble icon and enhance HelpAiChat UI with improved la…
cakesoft-vaibhav May 22, 2026
9a1e8bd
feat: implement help escalation link/route/email constants
cakesoft-vaibhav May 25, 2026
367e865
feat: Ask Keeper Disclaimer modal
cakesoft-vaibhav May 25, 2026
e8519ab
fix: iOS Icon missing issue
cakesoft-vaibhav May 25, 2026
fce2b8c
feat: update HelpAiChat styles for improved vertical padding on Android
cakesoft-vaibhav May 25, 2026
7ec6c9c
feat: add link sanitization functions for HelpAiChat responses
cakesoft-vaibhav May 25, 2026
b262be7
feat: add additional allowed domains for HelpAiChat links
cakesoft-vaibhav May 25, 2026
62a987a
specs: sensitive input guard for Ask Keeper chat feature
Parsh May 25, 2026
2fa176b
feat: implement sensitive input detection for chat and draft submissions
Parsh May 25, 2026
ff8e837
feat: add tests for sensitive input detection in HelpAi features
Parsh May 25, 2026
5f49c1f
feat: remove keyword-label detection for sensitive input to reduce fa…
Parsh May 25, 2026
55dcae8
archive(specs): sensitive input guard for chat and draft submissions
Parsh May 25, 2026
8745854
Merge pull request #6987 from KeeperCommunity/feat/sensitive-input-guard
cakesoft-vaibhav May 26, 2026
85de5f3
feat: add ragTimestamp field and validation to RagChunkAdminScreen
cakesoft-vaibhav May 26, 2026
8d7bf76
feat: add AskKeeperInfo screen and update navigation from disclaimer …
cakesoft-vaibhav May 26, 2026
d4466c4
feat: standardize LOCK_ICON_SIZE usage across HelpAiChat and HelpAiEn…
cakesoft-vaibhav May 26, 2026
a226918
feat: added e2e test cases for ask keeper
shashank-shinde May 26, 2026
f2a7433
Merge branch 'feat/AiChat' of github.com:KeeperCommunity/bitcoin-keep…
shashank-shinde May 26, 2026
d4e20f3
feat: add README for Maestro E2E automation and update package.json s…
shashank-shinde May 26, 2026
2bc3dbc
feat: implement Fab component and integrate it into HelpAiChatHistory…
cakesoft-vaibhav May 27, 2026
843df0f
Merge branch 'sprint' into feat/AiChat
cakesoft-vaibhav May 28, 2026
ec604d5
Merge branch 'feat/AiChat' into feat/AiChat-rateLimiting
cakesoft-vaibhav May 28, 2026
c75b2e0
Merge pull request #6995 from KeeperCommunity/feat/AiChat-rateLimiting
cakesoft-vaibhav May 28, 2026
4552a56
feat: add chat icons and integrate into HelpAi components
cakesoft-vaibhav May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions flows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# Maestro E2E Automation

This directory contains end-to-end UI automation flows for the Keeper app using Maestro.

## Instructions

Use these flows to validate onboarding, wallet, RGB assets, settings, backup, and recovery journeys on development builds.

Before running tests:
- Make sure the app is built and installed on your target device/emulator.
- Use the dev app id expected by flows: `io.hexawallet.keeper`.
- Run from repository root unless noted otherwise.

## Installation

### Prerequisites

- Node.js `>=20`
- Android emulator or iOS simulator (or physical device)
- Tribe app installed with dev flavor

### Install Maestro CLI

Use one of the following:

```bash
brew install maestro
```

or

```bash
curl -Ls "https://get.maestro.mobile.dev" | bash
```

Verify installation:

```bash
maestro --version
```

## How To Use

### 1. Start your device and app

From repo root, run one of:

```bash
npm run androidDevDebug
```

or

```bash
npm run ios
```

### 2. Run a full regression flow

```bash
npm run maestro:test:regression-dev
```

### 3. Run a single flow directly

```bash
maestro test flows/addwallet.yaml
```

### 4. Run with verbose logs (useful for debugging)

```bash
maestro test --verbose flows/refreshwallet.yaml
```

## Folder Structure

```text
flows/
├── addNewKey.yaml
├── addwallet.yaml
├── appsettings.yaml
├── buyBTC.yaml
├── copywalletaddress.yaml
├── editwallet.yaml
├── editwalletdetails.yaml
├── exportseed.yaml
├── healthCheckKey.yaml
├── hidendeletekey.yaml
├── keySetting.yaml
├── login.yaml
├── newapp.yaml
├── receive.yaml
├── receivesats.yaml
├── refreshwallet.yaml
├── sanity.yaml
├── send.yaml
├── setpin.yaml
├── subscription.yaml
├── support_chat.yaml
├── versionhistory.yaml
├── viewwallet.yaml
└── walletSetting.yaml
```

## Commands

### Existing npm script

```bash
npm run maestro:test:regression
```

Runs:

```bash
maestro test flows/refreshwallet.yaml
```

### Useful direct commands

Run add wallet flow:

```bash
maestro test flows/addwallet.yaml
```


## Notes

- If tests fail due to timing, retry with `--verbose` and inspect the exact step that failed.
106 changes: 100 additions & 6 deletions flows/newapp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,113 @@ appId: io.hexawallet.keeper
---
- runFlow: setpin.yaml
- extendedWaitUntil:
visible: 'Welcome'
visible: 'Welcome to Bitcoin Keeper'
timeout: 5000
- assertVisible:
id: 'view_startNewTile'
- tapOn:
id: 'view_startNewTile'
- assertVisible: 'Start New'
- tapOn: 'Start New'
- extendedWaitUntil:
visible: 'Next'
timeout: 30000
timeout: 200000
- tapOn: 'Next'
- waitForAnimationToEnd:
timeout: 2000
- extendedWaitUntil:
notVisible:
id: 'toast_message'
timeout: 20000
- extendedWaitUntil:
visible: 'Protect Your Recovery Key'
timeout: 10000
- assertVisible: "Skip for Now"
- assertVisible: "Back Up Now"
- tapOn: "Skip for Now"
- extendedWaitUntil:
visible: 'Continue Without Backup?'
timeout: 5000
- assertVisible: "Skip Backup"
- assertVisible: "Backup Now"
- tapOn: "Skip Backup"


- tapOn: "Keys"
- tapOn: "Ask"
- tapOn: "More"
- tapOn: "Wallets"
- tapOn: "Mobile Wallet"
- assertVisible: "Pull Down to Refresh"
- tapOn: "Okay"
- tapOn: "Receive\nBitcoin"
- tapOn:
id: "btn_back"
- tapOn:
point: 6%,8%
- tapOn: "More"
- tapOn: "Recovery Key"
- tapOn:
id: "key_1"
- tapOn:
id: "key_1"
- tapOn:
id: "key_1"
- tapOn:
id: "key_1"
- tapOn: "Proceed"
- tapOn: "Backup Now"
- evalScript: ${output.seedWordIndex = 0}

- repeat:
while:
true: ${output.seedWordIndex <= 12}
commands:
- tapOn:
id: ${"btn_seed_word_" + output.seedWordIndex}
- copyTextFrom:
id: ${"text_seed_word_" + output.seedWordIndex}
- evalScript: ${output["W" + output.seedWordIndex] = maestro.copiedText}
- evalScript: ${output.seedWordIndex = output.seedWordIndex + 1}

- tapOn: "Next"
- tapOn: "Skip"
- tapOn:
id: "btn_back"
- scroll
- tapOn:
id: "btn_setting_Dark Mode"
- tapOn:
id: "btn_setting_Dark Mode"
- tapOn:
id: "btn_setting_General Preferences"
- tapOn:
id: "btn_back"
- tapOn:
id: "btn_setting_App Settings"
- tapOn:
id: "btn_setting_Server Settings"
- tapOn:
id: "btn_back"
- tapOn:
id: "btn_setting_App Access"
- tapOn:
id: "btn_back"
- tapOn:
id: "btn_setting_Tor Settings"
- tapOn:
id: "btn_back"
- tapOn:
id: "btn_setting_Version History"
- tapOn:
id: "btn_back"
- tapOn:
id: "btn_setting_Multi User Mode"
- tapOn:
id: "btn_back"
- tapOn:
id: "btn_setting_Network Type"
- assertVisible: "Network Type"
- tapOn:
id: "btn_close_modal"
- tapOn:
id: "btn_back"
- tapOn: "Wallets"


1 change: 1 addition & 0 deletions flows/sanity.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
appId: io.hexawallet.keeper
---
- runFlow: newapp.yaml
- runFlow: support_chat.yaml
- runFlow: addwallet.yaml
- runFlow: addNewKey.yaml

5 changes: 3 additions & 2 deletions flows/setpin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ appId: io.hexawallet.keeper
timeout: 5000
- assertVisible: 'Continue'
- tapOn: 'Continue'
- tapOn: 'Cancel'
- swipe:
direction: LEFT
- swipe:
Expand All @@ -43,5 +44,5 @@ appId: io.hexawallet.keeper
direction: LEFT
- waitForAnimationToEnd:
timeout: 5000
- assertVisible: 'Start App'
- tapOn: 'Start App'
- assertVisible: 'Get Started'
- tapOn: 'Get Started'
Loading
Loading