Commit Graph
60 Commits
Author SHA1 Message Date
roshan aaa78990a6 fix(chat): show blocked and redirected custom tool calls as failed (#16368)
## Description

Part 3 of the
[ENG-4416](https://linear.app/onyx-app/issue/ENG-4416/ux-plugins-and-tool-flow-nits)
stack. A custom tool call blocked by the SSRF check (or answered with a
redirect) raised `ToolCallException` before any `CustomToolDelta`, so
the step list said "get_meta_data completed".

- `CustomTool.run()` now returns a failed `CustomToolCallSummary` and
emits a `CustomToolDelta` with `CustomToolErrorInfo` for blocked
destinations (`status_code=None`) and redirects (the 3xx code). This
reuses the existing 401/403 error path, so the error also persists in
history.
- `CustomToolRenderer` shows "{tool} was blocked" with the error icon
and error surface. HTTP failures keep "{tool} failed ({code})".
- The LLM gets the same short message the user sees.

| Before | After | After reload | Mobile |
| --- | --- | --- | --- |
|
![before](https://app.devin.ai/api/presigned_proxy?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjpudWxsLCJidWNrZXRfbmFtZSI6ImRldmluYXR0YWNobWVudHMiLCJidWNrZXRfa2V5IjoiYXR0YWNobWVudHNfcHJpdmF0ZS9vcmdfT2NlNnlnR2RrdGJQekZsaS8xN2M4NzBmOC1mN2QxLTRhZmMtOTJlOS05MjA3ZjIyOTY0MDYiLCJpYXQiOjE3OTI1NTczOTIsIm9yZ19pZCI6Im9yZ19PY2U2eWdHZGt0YlB6RmxpIiwiZmlsZW5hbWUiOiJibG9ja2VkLXRvb2wtZG9uZS5wbmcifQ._FurQrQrApzCTY8kfPRGGceyXv67CDXPMWarqGRUUag)
|
![after](https://app.devin.ai/api/presigned_proxy?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjpudWxsLCJidWNrZXRfbmFtZSI6ImRldmluYXR0YWNobWVudHMiLCJidWNrZXRfa2V5IjoiYXR0YWNobWVudHNfcHJpdmF0ZS9vcmdfT2NlNnlnR2RrdGJQekZsaS80OGE0MTRhMS1lNWI5LTRkOTItYjhiYy0zOWJmMTg2ZDI3NjMiLCJpYXQiOjE3OTI1NTczOTIsIm9yZ19pZCI6Im9yZ19PY2U2eWdHZGt0YlB6RmxpIiwiZmlsZW5hbWUiOiJibG9ja2VkLXRvb2wtZXhwYW5kZWQtZGVza3RvcC5wbmcifQ.w3cJq2pLwzEQ0tTFWZhFen_3Er4C2obm7e5Fj8PikN4)
|
![reload](https://app.devin.ai/api/presigned_proxy?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjpudWxsLCJidWNrZXRfbmFtZSI6ImRldmluYXR0YWNobWVudHMiLCJidWNrZXRfa2V5IjoiYXR0YWNobWVudHNfcHJpdmF0ZS9vcmdfT2NlNnlnR2RrdGJQekZsaS80OTMwMDJjMC1kYmVjLTQxZmMtYWIwNy1mOGYzODE4Y2Y5NWMiLCJpYXQiOjE3OTI1NTczOTIsIm9yZ19pZCI6Im9yZ19PY2U2eWdHZGt0YlB6RmxpIiwiZmlsZW5hbWUiOiJibG9ja2VkLXRvb2wtcmVsb2FkLWRlc2t0b3AucG5nIn0.G6jDHd5gN_Dre0utwEEP0H1kT60stetm-L-7Pqzj6iQ)
|
![mobile](https://app.devin.ai/api/presigned_proxy?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjpudWxsLCJidWNrZXRfbmFtZSI6ImRldmluYXR0YWNobWVudHMiLCJidWNrZXRfa2V5IjoiYXR0YWNobWVudHNfcHJpdmF0ZS9vcmdfT2NlNnlnR2RrdGJQekZsaS9lMWM1NjQwNS1hM2FhLTQ5YjgtYWU0Mi1iNDBhZjRlYzA4OTUiLCJpYXQiOjE3OTI1NTczOTIsIm9yZ19pZCI6Im9yZ19PY2U2eWdHZGt0YlB6RmxpIiwiZmlsZW5hbWUiOiJibG9ja2VkLXRvb2wtZXhwYW5kZWQtbW9iaWxlLnBuZyJ9.6i7DBU4S-6P9fvgrfKT_U1QV9DgxS39apmJ16CnzL_0)
|


![flow](https://app.devin.ai/api/presigned_proxy?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjpudWxsLCJidWNrZXRfbmFtZSI6ImRldmluYXR0YWNobWVudHMiLCJidWNrZXRfa2V5IjoiYXR0YWNobWVudHNfcHJpdmF0ZS9vcmdfT2NlNnlnR2RrdGJQekZsaS8wMjhlZjM4Ni0zYTcyLTQ0NzItYTZlMi1mMTllODhiNzQ5OWMiLCJpYXQiOjE3OTI1NTczOTIsIm9yZ19pZCI6Im9yZ19PY2U2eWdHZGt0YlB6RmxpIiwiZmlsZW5hbWUiOiJhZnRlci1ibG9ja2VkLWRlc2t0b3Aud2VicCJ9.tFAbmOk535udvZk_wDwUrQ5MBvYyGyCWZ0-laqVKlLs)

The last "Done" row is the timeline's turn-finished step (`showDoneStep`
in `useTimelineUIState`), shown for every finished turn. It no longer
reads as the tool's result.

## How Has This Been Tested?

- Local ODS stack + gpt-4.1-mini: an OpenAPI plugin on
`169.254.169.254.nip.io`; asked chat to call it. Desktop, reload and
mobile show "was blocked" and no "completed"; API log shows the
metadata-IP refusal.
- `pytest backend/tests/unit/onyx/tools/custom`: 105 passed (blocked,
redirect, and delta/summary parity cases).
- New `CustomToolRenderer.test.tsx` (blocked + HTTP failure).
- `pre-commit` (ty, ruff, tsc, oxlint) on touched files.

## Additional Options

- [x] [Optional] Please cherry-pick this PR to the latest release
version.


Link to Devin session:
https://app.devin.ai/sessions/09df74c24e19407bbf0e7ab775b5cb0a
Open in Devin Desktop:
https://app.devin.ai/desktop/session/09df74c24e19407bbf0e7ab775b5cb0a?variant=devin
Requested by: @rohoswagger

<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Fixes custom tool calls blocked by the SSRF check or answered with a
redirect so they show as failed instead of "completed" in the chat step
list.

- `CustomTool.run()` now returns a failed `CustomToolCallSummary` and
emits a `CustomToolDelta` with error info for blocked destinations and
redirects instead of raising `ToolCallException`, reusing the existing
401/403 error path so the error persists in history.
- `CustomToolRenderer` shows "{tool} was blocked" with the error icon
and error surface; HTTP failures keep "{tool} failed ({code})".
- The LLM receives the same short message the user sees.

<sup>Written for commit 29b59437a1.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/onyx-dot-app/onyx/pull/16368?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="View guided diff"
src="https://www.cubic.dev/buttons/review-in-cubic-light.svg"></picture></a>
<a
href="https://www.cubic.dev/action/auto-fix/pr/onyx-dot-app/onyx/16368?returnTo=https%3A%2F%2Fgithub.com%2Fonyx-dot-app%2Fonyx%2Fpull%2F16368&source=description"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"><img
alt="Turn on auto-fix"
src="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

- **Bug Fixes**
- Custom tool requests blocked by security checks or redirects now
appear as structured failures instead of unexpected errors.
- Error details, including HTTP status codes where available, are
consistently shown in the conversation.
- Blocked and authentication-related errors now display clear,
non-collapsible status messages.

- **Localization**
  - Added blocked-tool status translations across supported languages.

- **Tests**
- Added coverage for blocked destinations, redirects, HTTP failures, and
error rendering.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-10-21 17:06:14 +00:00
roshan 1257f6bb44 refactor(web): replace lucide-react and react-icons with @opal/icons (#16240)
## Description

**Targets main.** This is the first of four cleanup PRs (#16240, #16241,
#16242, #16243) that fix the design-system violations that #16234
(merged) put in the warn-only baseline. This PR replaces `lucide-react`
and `react-icons` with `@opal/icons`.

### Before and after

10 files imported `lucide-react` (3) or `react-icons` (7). This PR
migrates them all, except for 3 icons that have no Opal match. Three
files are now clean of the design-system rules, so they are removed from
the baseline in `web/.oxlintrc.json`:
- `src/app/admin/agents/CollapsibleSection.tsx`
- `src/app/app/message/messageComponents/interfaces.ts`
- `src/views/admin/connectors/FederatedDetailPage/index.tsx`

### Changes (all under `web/src/`)

| File | Old | New |
| --- | --- | --- |
| `app/admin/agents/CollapsibleSection.tsx` | `FiSettings` |
`SvgSettings` (size 16 kept) |
| `app/admin/bots/[bot-id]/channels/SlackChannelConfigFormFields.tsx` |
lucide `AlertCircle` | `SvgAlertCircle` (classes kept) |
| `app/admin/documents/feedback/DocumentFeedbackTable.tsx` | `FiEye`,
`FiEyeOff` | `SvgEye`, `SvgEyeOff` |
| `app/admin/documents/sets/page.tsx` | `FiCheckCircle`, `FiClock`,
`FiAlertTriangle`, `FiLock`, `FiEdit2` | The matching `Svg*` icons;
`FiEdit2` becomes `SvgEdit` |
| `app/app/message/errorHelpers.tsx` | lucide `AlertCircle`, `Clock`,
`Lock`, `Server` | The matching `Svg*` icons |
| `app/app/message/messageComponents/interfaces.ts` | `IconType` from
`react-icons` | `IconFunctionComponent \| null`. No caller passes a
react-icons icon any more |
| `app/app/message/messageComponents/toolDisplayHelpers.tsx` | `FiTool`,
`FiCircle` | `SvgWrench`, `SvgCircle` |
| `app/ee/admin/performance/query-history/[id]/page.tsx` | `FiBook` |
`SvgBook` |
| `app/ee/admin/standard-answer/page.tsx` | `FiTag` | `SvgTag` (size 16)
|
| `views/admin/connectors/FederatedDetailPage/index.tsx` | lucide
`Loader2` | `SvgLoader` (classes kept) |

### Kept on purpose (no matching Opal icon)

These sites still trip the rule and stay in the baseline. Each needs an
icon added to `web/lib/opal/src/icons/` from Figma first:
- `Wifi` in `errorHelpers.tsx`: Opal has no wifi or signal icon.
- `FiUnlock` in `documents/sets/page.tsx`: Opal has `lock` but no unlock
icon. The lock and unlock icons in that table now come from different
sets.
- `FiList` in `toolDisplayHelpers.tsx`: no Opal icon has the same
bullet-list shape (`list-tree`, `list-check` and `text-lines` all
differ).

### Visual differences reviewers should check

- **Size:** react-icons default to `1em`, but Opal icons have no default
size, so I set an explicit size from the text size around each icon:
  - `SvgEye`/`SvgEyeOff` are 12 (they sit in `text-xs`).
  - `SvgBook` is 14 (it sits in `text-sm`).
- `SvgEdit` is 16. Its button sets no text size, so this one is a guess.
- **Stroke:** lucide icons use stroke width 2, and Opal icons use 1.5,
so lines look slightly thinner.
- **`FiEdit2` to `SvgEdit`:** Opal's pencil has an underline.
- **`FiCircle` to `SvgCircle`:** the Opal circle is smaller (r=4 in a 16
box, where the old one was r=10 in a 24 box). It is only the fallback
when there are no packets, and `ReasoningRenderer` already uses
`SvgCircle`.

## How Has This Been Tested?

- oxlint: in the changed files, only the 3 icons listed above still
report. The full run has 0 errors.
- `bun run types:check`: no type errors, and type coverage stays at
99.04%.
- pre-commit (oxfmt, oxlint) passes on the changed files.

## Additional Options

- [ ] [Optional] Please cherry-pick this PR to the latest release
version.



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Style**
* Updated icons across admin pages, document controls, chat tools, and
message error states for a more consistent appearance.
* Loading indicators, visibility controls, and error-state behavior
remain unchanged.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-10-20 00:31:43 +00:00
4fcd7350d5 feat(web): Opal foundations, status icons, copy and formats for the indexing mock (#16165)
Co-authored-by: Nik <nikolas.garza5@gmail.com>
Co-authored-by: nik <nik@onyx.app>
2026-10-17 22:27:56 +00:00
Raunak BhagatandClaude Opus 5.5 a5bb9dad6f feat(connectors): check a credential before a connector is created (#15007)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:48:36 +00:00
WenxiandClaude Opus 5.5 26185be857 fix(chat): scope stop requests to one stream (#15497)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 17:54:28 +00:00
Justin Tahara 4996c43c8a chore(deps): bump qs to 6.16.0 (#15482) 2026-10-02 18:46:07 +00:00
Justin Tahara 11b61b7125 chore(deps): bump brace-expansion to 5.0.12 / 1.1.21 (#15476) 2026-10-02 18:46:05 +00:00
Justin Tahara 3717121eea chore(deps): bump shell-quote to 1.11.0 (#15465) 2026-10-02 17:06:03 +00:00
Justin Tahara 45d1769930 chore(deps): bump compression to 1.8.2 (#15463) 2026-10-02 17:05:56 +00:00
WenxiandClaude Opus 5.5 76be2d94b0 refactor(chat): stop sending the unused top_level_branching packet (#15099)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 21:23:34 +00:00
Yuhong SunandClaude Opus 5.5 8ced9bc01f chore: remove Vespa and consolidate the document index interface (#15336)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 19:22:34 +00:00
Justin Tahara b72b2ed149 chore(deps): override uuid to 11.1.1 in mobile (#15366) 2026-10-01 18:05:10 +00:00
Justin Tahara b2d9153e59 chore(deps): bump brace-expansion to 5.0.11 / 1.1.20 (#15364) 2026-10-01 18:05:05 +00:00
Justin Tahara 184f7f995d chore(deps): bump js-yaml to 4.3.2 / 3.15.2 (#15363) 2026-10-01 18:05:02 +00:00
Justin Tahara 66507c727f fix(clients): protect navigation and sensitive request data (#14833) 2026-09-16 23:08:45 +00:00
Raunak Bhagat 916192bddf fix(i18n): Translate the enabled-count phrase (#14581) 2026-09-09 00:19:39 +00:00
SubashMohanandClaude Sonnet 5 bcfdd98071 feat(mobile): add model selector and fix composer and actions bugs (#14383)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-31 16:31:14 +00:00
SubashMohanandClaude Opus 5 a7d66a8b77 chore(mobile): upgrade to Expo SDK 57 and refresh dependencies (#14166)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 06:07:53 +00:00
SubashMohanandClaude Opus 4.7 be8cfa6144 feat(permissions):new group based permission system (#10172)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-08-17 16:32:51 +00:00
SubashMohanandClaude Opus 5 8ba0796770 feat(mobile): source selection in the actions menu + token refresh loop (#13825)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 04:40:17 +00:00
SubashMohanandClaude Opus 5 c3d184ffd8 feat(mobile): actions menu — force a tool + enable/disable per agent (#13728)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 05:52:08 +00:00
SubashMohanandClaude Opus 5 ac2add1016 feat(mobile): deep-research toggle in the chat composer (#13726)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 05:35:56 +00:00
SubashMohanandClaude Opus 5 b345a930ed feat(mobile): agent timeline composition + parallel tabs (#13695)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 05:06:50 +00:00
SubashMohanandClaude Opus 5 45b92975cc feat(mobile): reasoning renderer + full-text reader for the agent timeline (#13694)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 04:51:43 +00:00
SubashMohanandClaude Opus 4.8 7f4f3ad0e1 feat(mobile): timeline primitives + StepContainer (#13690)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-04 04:39:53 +00:00
SubashMohanandClaude Opus 4.8 ac4b3ce8af feat(mobile): render-prop renderer contract + answer migration (#13611)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 05:49:09 +00:00
SubashMohanandClaude Opus 4.8 cd9d0fbc8c feat(mobile): timeline state hooks (#13609)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 05:48:56 +00:00
SubashMohanandClaude Opus 4.8 a2db84de8d feat(mobile): timeline processor + pacing hooks (#13610)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 05:48:31 +00:00
SubashMohanandClaude Opus 4.8 f123a4415c feat(mobile): agentic timeline grouping engine + packet contracts (#13092)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 06:09:59 +00:00
SubashMohanandClaude Opus 4.8 ad09138cbc feat(mobile): input-bar controls spec + tool-options foundation (#13091)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 05:48:27 +00:00
Nikolas Garza 1816f15cf8 refactor(opal): rename action-link-* tokens to action-selection-* (#13529) 2026-07-28 23:58:41 +00:00
Nikolas Garza 9a9ad1e101 feat(auth): remove AUTH_TYPE and the AuthType enum, serve multi_tenant (#13029) 2026-07-16 21:08:07 +00:00
SubashMohanandClaude Opus 4.8 ce299b5d1b feat(mobile): chat citations + cited sources (#13025)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 08:24:17 +00:00
SubashMohanandClaude Opus 4.8 ee6ee482c6 feat(mobile): web-parity auto-scroll control for streaming chat (#13022)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 05:09:42 +00:00
SubashMohanandClaude Opus 4.8 2fb3dd1049 feat(mobile): chat message/streaming polish, agent timeline, file management (#12987)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 03:26:39 +00:00
SubashMohanandClaude Opus 4.8 3aa6ceb2d2 refactor(mobile): unify file handling into one file-keyed store (#12916)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 03:40:23 +00:00
SubashMohanandClaude Opus 4.8 bc0e90b1aa feat(mobile): per-message file attachments in the chat composer (#12804)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 15:33:46 +00:00
SubashMohanandClaude Opus 4.8 7e4ad4ff74 feat(mobile): project file management — upload, indexing, link/unlink (#12691)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 05:20:34 +00:00
SubashMohanandClaude Opus 4.8 7a35a3a293 refactor(mobile): unify chat + project into one persistent ChatSurface (#12687)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 16:40:21 +00:00
SubashMohanandClaude Opus 4.8 700c0c44be feat(mobile): projects — list, select, chat-within (#12648)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 03:33:31 +00:00
SubashMohanandClaude Opus 4.8 4edea31558 feat(mobile): agent selection — gallery, sidebar rail, avatars (#12647)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 05:24:08 +00:00
SubashMohanandClaude Opus 4.8 1e81e64b46 feat(mobile): add settings layout primitives + tab nav (#12587)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 02:40:25 +00:00
SubashMohanandClaude Opus 4.8 c183828acb feat(mobile): resume in-flight chat runs + auto-name new sessions (#12585)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 02:40:14 +00:00
SubashMohanandClaude Opus 4.8 f422e9aca2 feat(mobile): core chat send/stream/markdown (PR3) (#12557)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 15:31:25 +00:00
SubashMohanandClaude Opus 4.8 49d57a78a4 feat(mobile): chat data-layer foundation (parser, tree, contracts) (#12506)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 14:30:27 +00:00
SubashMohanandClaude Opus 4.8 53677adf9a feat(mobile): authed chat shell + sessions history (#12501)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 14:07:24 +00:00
SubashMohanandClaude Fable 5 61d121bb3a chore(mobile): trim verbose code comments to lean style (#12429)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-06-25 16:13:13 +00:00
SubashMohanandClaude Opus 4.8 4839e67b68 feat(mobile): Google sign-in via system browser (PKCE) + dedicated backend OAuth callback (#12424)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 14:27:43 +00:00
SubashMohanandClaude Opus 4.8 70ff6cd1de feat(mobile): email/password auth flow (connect, login, signup, gate) (#12374)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 02:07:11 +00:00
SubashMohanandClaude Opus 4.8 3ddc0d4c94 feat(mobile): react-hook-form input layouts + InputTypeIn-parity atoms (#12303)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 13:55:32 +00:00