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 |
| --- | --- | --- | --- |
|

|

|

|

|

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 Bhagat and Claude 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
Wenxi and Claude 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
Wenxi and Claude 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 Sun and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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
SubashMohan and Claude 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