Commit Graph

523 Commits

Author SHA1 Message Date
Nwani Victory
f78614247f fix: transfer NodeTextBoxInput to use local state to fix cursor jump (#10410)
<!-- Clearly explain the need for these changes: -->

### Changes 🏗️

<!-- Concisely describe all of the changes made in this pull request:
-->

This PR contains code changes that will resolve the cursor jump issue in
the **Note** block #9252 . The changes in code affects the
NodeTextBoxInput component to transfer the state into local state and
not mutate the `value` prop directly.

Also includes change to use store admin which is from rebase issue but
approved by maintainer @ntindle

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Tested the note block allows to edit text normally
 


https://github.com/user-attachments/assets/f2800bf1-9867-4627-ac9d-44718627b263

---------

Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Ubbe <hi@ubbe.dev>
2025-07-24 18:37:09 +00:00
Ubbe
e7f8602945 fix(frontend): handle websocket connection on logout (#10440)
## Changes 🏗️

Fixed WebSocket connection errors during multi-tab logout 💆🏽 

<img width="1193" height="273" alt="Screenshot 2025-07-23 at 22 23 35"
src="https://github.com/user-attachments/assets/bf6f964d-bcb0-4a2a-adff-1194defe1e61"
/>

Previously, when users logged out in one browser tab, WebSocket
connections in other open tabs would continue trying to reconnect with
invalid authentication tokens, causing console errors and potential
runtime errors.

### What was fixed
- WebSocket connections are now properly disconnected when logout occurs
in any tab
- cross-tab logout mechanism now includes WebSocket cleanup to prevent
reconnection errors
- added logic to prevent automatic reconnection after intentional
disconnection
- added E2E tests to cover this case

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Manual testing: Login in multiple tabs, navigate to builder
(establishes WebSocket), logout from one tab, verify no console errors
- [x] E2E test: Added automated test covering multi-tab logout with
WebSocket cleanup verification
  - [x] Verified cross-tab logout still works correctly
- [x] Confirmed WebSocket connections reconnect properly after fresh
login

### For configuration changes:
None
2025-07-24 07:36:50 +00:00
dependabot[bot]
708e84fba6 chore(frontend/deps-dev): Bump the development-dependencies group in /autogpt_platform/frontend with 9 updates (#10419)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ubbe <hi@ubbe.dev>
2025-07-23 11:43:39 +00:00
Ubbe
41363b1cbe feat(frontend): agent activity dropdown (#10416)
## Changes 🏗️


https://github.com/user-attachments/assets/42e1c896-5f3b-447c-aee9-4f5963c217d9

There is now a 🔔 icon on the Navigation bar that shows previous agent
runs and displays real-time agent running status.

If you run an agent, the bell will show on a badge how many agents are
running. If you hover over it, a hint appears. If you click on it, it
opens a dropdown and displays the executions with their status ( _which
should match what we have in library functionality, not design-wise_ ).

I leveraged the existing APIs for this purpose. Most of the run logic is
[encapsulated on this
hook](https://github.com/Significant-Gravitas/AutoGPT/compare/dev...feat/agent-notifications?expand=1#diff-a9e7f2904d6283b094aca19b64c7168e8c66be1d5e0bb454be8978cb98526617)
and is also an independent `<AgentActivityDropdown />` component.

Clicking on an agent run opens that run in the library page.

This new functionality is covered by E2E tests 💆🏽 ✔️ 

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] The navigation bar layout looks good when logged out
  - [x] The navigation bar layout looks good when logged in
  - [x] Open an agent in the library and click `Run`
- [x] See the real-time activity of the agent running on the navigation
bar bell icon

### For configuration changes:

_No configuration changes needed._
2025-07-22 17:29:09 +00:00
Nicholas Tindle
f8b9e80829 feat(backend): enable the google blocks + fix .env (#10430)
<!-- Clearly explain the need for these changes: -->
We setup launchdarkly so now we can dynamically control which blocks are
available on the UI

### Changes 🏗️
enables the google blocks + fixes the LD .env.example for the local env
<!-- Concisely describe all of the changes made in this pull request:
-->

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  <!-- Put your test plan here: -->
- [x] Deploy to test environment and verify the blocks show correctly vs
are hidden when toggling Launch darlky rules
2025-07-22 15:41:20 +00:00
Nicholas Tindle
ae6ef8c0c2 refactor(frontend): improve LaunchDarkly provider initialization (#10422)
### Changes ️

The previous implementation of the `LaunchDarklyProvider` had a race
condition where it would only initialize after the user's authentication
state was fully resolved. This caused two primary issues:

1. A delay in evaluating any feature flags, leading to a "flash of
un-styled/un-flagged content" until the user session was loaded.
2. An unreliable transition from an un-flagged state to a flagged state,
which could cause UI flicker or incorrect flag evaluations upon login.


This pull request refactors the provider to follow a more robust,
industry-standard pattern. It now initializes immediately with an
`anonymous` context, ensuring flags are available from the very start of
the application lifecycle. When the user logs in and their session
becomes available, the provider seamlessly transitions to an
authenticated context, guaranteeing that the correct flags are evaluated
consistently.

### Checklist 

#### For code changes:

- I have clearly listed my changes in the PR description
- I have made a test plan
- I have tested my changes according to the test plan:

	**Test Plan:**
	
- [x] **Anonymous User:** Load the application in an incognito window
without logging in. Verify that feature flags are evaluated correctly
for an anonymous user. Check the browser console for the
`[LaunchDarklyProvider] Using anonymous context` message.
- [x] **Login Flow:** While on the site, log in. Verify that the UI
updates with the correct feature flags for the authenticated user. Check
the console for the `[LaunchDarklyProvider] Using authenticated context`
message and confirm the LaunchDarkly client re-initializes.
- [x] **Authenticated User (Page Refresh):** As a logged-in user,
refresh the page. Verify that the application loads directly with the
authenticated user's flags, leveraging the cached session and
bootstrapped flags from `localStorage`.
- [x] **Logout Flow:** While logged in, log out. Verify that the UI
reverts to the anonymous user's state and flags. The provider `key`
should change back to "anonymous", triggering another re-mount.





<details><summary>Summary of Code Changes</summary>

- Refactored `LaunchDarklyProvider` to handle user authentication state
changes gracefully.
- The provider now initializes immediately with an `anonymous` user
context while the Supabase user session is loading.
- Once the user is authenticated, the provider's context is updated to
reflect the logged-in user's details.
- Added a `key` prop to the `<LDProvider>` component, using the user's
ID (or "anonymous"). This forces React to re-mount the provider when the
user's identity changes, ensuring a clean re-initialization of the
LaunchDarkly SDK.
- Enabled `localStorage` bootstrapping (`options={{ bootstrap:
"localStorage" }}`) to cache flags and improve performance on subsequent
page loads.
- Added `console.debug` statements for improved observability into the
provider's state (anonymous vs. authenticated).


</details>

#### For configuration changes:

- `.env.example` is updated or already compatible with my changes
- `docker-compose.yml` is updated or already compatible with my changes
- I have included a list of my configuration changes in the PR
description (under **Changes**)


<details>
<summary>Configuration Changes</summary>

- No configuration changes were made. This PR relies on existing
environment variables (`NEXT_PUBLIC_LAUNCHDARKLY_CLIENT_ID` and
`NEXT_PUBLIC_LAUNCHDARKLY_ENABLED`).


</details>

---------

Co-authored-by: Lluis Agusti <hi@llu.lu>
2025-07-22 11:47:04 +00:00
Ubbe
61d0892686 fix(frontend): init LD on the client (#10414)
## Changes 🏗️

Launch Darkly is not being initialised in production, despite on paper
all env variables being well set 🧐

I tried doing production builds locally, and I noticed this provider
needs to be initialised on the client because Launch Darkly flags are
designed to work on the client side, where they can access user context
and browser environment.

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Did production build locally and run it
- [x] See LD initialised on the console after the `use client` directive
was added


### For configuration changes:

None
2025-07-21 13:35:52 +00:00
Ubbe
e9b682cc7a fix(frontend): launch darkly initialisation (#10408)
## Changes 🏗️

Only initialise Launch Darkly if we have a user and the config is set. 

### Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Once merged login into app and see if Launch Darkly initialises

### For configuration changes:

No
2025-07-19 05:42:10 +00:00
Ubbe
926fd8df22 fix(frontend): unhide catpcha (#10407)
<!-- Clearly explain the need for these changes: -->

### Changes 🏗️

<img width="563" height="400" alt="Screenshot 2025-07-19 at 00 50 25"
src="https://github.com/user-attachments/assets/ce9b2fe3-a244-40ed-a7a9-27b983ec90f2"
/>

Introduced an error on my previous PR:
https://github.com/Significant-Gravitas/AutoGPT/pull/10397 (
`shouldRender` should be taken in account... )

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Login / logout as normal completing challenge


#### For configuration changes:

None
2025-07-18 21:11:40 +00:00
Ubbe
87f9af606e feat(frontend): hide captcha if verified (#10397)
## Changes 🏗️

Do not render the Cloudflare CAPTCHA if the user has already passed
verification.

## Checklist 📋

### For code changes

- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Try with Cloudflare enabled
  - [x] Shows the CAPTCHA when not verified
  - [x] CAPTCHA is hidden when verified  

### For configuration changes

None
2025-07-18 20:18:03 +00:00
Ubbe
574f851143 feat(frontend): beta blocks via launchdarkly + E2E improvements (#10398)
## Changes 🏗️


https://github.com/user-attachments/assets/dd635fa1-d8ea-4e5b-b719-2c7df8e57832

Using [LaunchDarkly](https://launchdarkly.com/), introduce the concept
of "beta" blocks, which are blocks that will be disabled in production
unless enabled via a feature flag. This allows us to safely hide and
test certain blocks in production safely.

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Checkout and run FE locally
  - [x] With the `beta-blocks` flag `disabled` in LD
- [x] Go to the builder and see **you can't** add the blocks specified
on the flag
  - [x] With the `beta-blocks` flag `enabled` in LD
- [x] Go to the builder and see **you can** add the blocks specified on
the flag

### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes

🚧 We need to add the `NEXT_PUBLIC_LAUNCHDARKLY_CLIENT_ID` to the dev and
prod environments.
2025-07-18 19:24:11 +00:00
Zamil Majdy
d33459ddb5 feat(backend): Integrate GCS file storage with automatic expiration for Agent File Input (#10340)
## Summary

This PR introduces a complete cloud storage infrastructure and file
upload system that agents can use instead of passing base64 data
directly in inputs, while maintaining backward compatibility for the
builder's node inputs.

### Problem Statement

Currently, when agents need to process files, they pass base64-encoded
data directly in the input, which has several limitations:
1. **Size limitations**: Base64 encoding increases file size by ~33%,
making large files impractical
2. **Memory usage**: Large base64 strings consume significant memory
during processing
3. **Network overhead**: Base64 data is sent repeatedly in API requests
4. **Performance impact**: Encoding/decoding base64 adds processing
overhead

### Solution

This PR introduces a complete cloud storage infrastructure and new file
upload workflow:
1. **New cloud storage system**: Complete `CloudStorageHandler` with
async GCS operations
2. **New upload endpoint**: Agents upload files via `/files/upload` and
receive a `file_uri`
3. **GCS storage**: Files are stored in Google Cloud Storage with
user-scoped paths
4. **URI references**: Agents pass the `file_uri` instead of base64 data
5. **Block processing**: File blocks can retrieve actual file content
using the URI

### Changes Made

#### New Files Introduced:
- **`backend/util/cloud_storage.py`** - Complete cloud storage
infrastructure (545 lines)
- **`backend/util/cloud_storage_test.py`** - Comprehensive test suite
(471 lines)

#### Backend Changes:
- **New cloud storage infrastructure** in
`backend/util/cloud_storage.py`:
  - Complete `CloudStorageHandler` class with async GCS operations
- Support for multiple cloud providers (GCS implemented, S3/Azure
prepared)
- User-scoped and execution-scoped file storage with proper
authorization
  - Automatic file expiration with metadata-based cleanup
  - Path traversal protection and comprehensive security validation
  - Async file operations with proper error handling and logging

- **New `UploadFileResponse` model** in `backend/server/model.py`:
- Returns `file_uri` (GCS path like
`gcs://bucket/users/{user_id}/file.txt`)
  - Includes `file_name`, `size`, `content_type`, `expires_in_hours`
  - Proper Pydantic schema instead of dictionary response

- **New `upload_file` endpoint** in `backend/server/routers/v1.py`:
  - Complete new endpoint for file upload with cloud storage integration
  - Returns GCS path URI directly as `file_uri`
  - Supports user-scoped file storage for proper isolation
  - Maintains fallback to base64 data URI when GCS not configured
- File size validation, virus scanning, and comprehensive error handling

#### Frontend Changes:
- **Updated API client** in
`frontend/src/lib/autogpt-server-api/client.ts`:
  - Modified return type to expect `file_uri` instead of `signed_url`
  - Supports the new upload workflow

- **Enhanced file input component** in
`frontend/src/components/type-based-input.tsx`:
- **Builder nodes**: Still use base64 for immediate data retention
without expiration
- **Agent inputs**: Use the new upload endpoint and pass `file_uri`
references
  - Maintains backward compatibility for existing workflows

#### Test Updates:
- **New comprehensive test suite** in
`backend/util/cloud_storage_test.py`:
  - 27 test cases covering all cloud storage functionality
  - Tests for file storage, retrieval, authorization, and cleanup
  - Tests for path validation, security, and error handling
  - Coverage for user-scoped, execution-scoped, and system storage

- **New upload endpoint tests** in `backend/server/routers/v1_test.py`:
  - Tests for GCS path URI format (`gcs://bucket/path`)
  - Tests for base64 fallback when GCS not configured
  - Validates file upload, virus scanning, and size limits
  - Tests user-scoped file storage and access control

### Benefits

1. **New Infrastructure**: Complete cloud storage system with
enterprise-grade features
2. **Scalability**: Supports larger files without base64 size penalties
3. **Performance**: Reduces memory usage and network overhead with async
operations
4. **Security**: User-scoped file storage with comprehensive access
control and path validation
5. **Flexibility**: Maintains base64 support for builder nodes while
providing URI-based approach for agents
6. **Extensibility**: Designed for multiple cloud providers (GCS, S3,
Azure)
7. **Reliability**: Automatic file expiration, cleanup, and robust error
handling
8. **Backward compatibility**: Existing builder workflows continue to
work unchanged

### Usage

**For Agent Inputs:**
```typescript
// 1. Upload file
const response = await api.uploadFile(file);
// 2. Pass file_uri to agent
const agentInput = { file_input: response.file_uri };
```

**For Builder Nodes (unchanged):**
```typescript
// Still uses base64 for immediate data retention
const nodeInput = { file_input: "data:image/jpeg;base64,..." };
```

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] All new cloud storage tests pass (27/27)
  - [x] All upload file tests pass (7/7)
  - [x] Full v1 router test suite passes (21/21)
  - [x] All server tests pass (126/126)
  - [x] Backend formatting and linting pass
  - [x] Frontend TypeScript compilation succeeds
  - [x] Verified GCS path URI format (`gcs://bucket/path`)
  - [x] Tested fallback to base64 data URI when GCS not configured
  - [x] Confirmed file upload functionality works in UI
  - [x] Validated response schema matches Pydantic model
  - [x] Tested agent workflow with file_uri references
  - [x] Verified builder nodes still work with base64 data
  - [x] Tested user-scoped file access control
  - [x] Verified file expiration and cleanup functionality
  - [x] Tested security validation and path traversal protection

#### For configuration changes:
- [x] No new configuration changes required
- [x] `.env.example` remains compatible 
- [x] `docker-compose.yml` remains compatible
- [x] Uses existing GCS configuration from media storage

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude AI <claude@anthropic.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
2025-07-18 10:20:54 +07:00
Nicholas Tindle
c451337cb5 fix(docs): missing tags from code that are referenced in docs (#10400)
<!-- Clearly explain the need for these changes: -->
The docs have an issue with not building due to changes made in the
process of updating the e2e testing to remove the monitor page.

### Changes 🏗️

<!-- Concisely describe all of the changes made in this pull request:
-->
fixes the missing start and end tags that prevent docs from building. 

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  <!-- Put your test plan here: -->
  - [x] run the build and check for no errors indicating missing tags
  - [x] deploy to netlify
2025-07-18 01:15:35 +00:00
Abhimanyu Yadav
e720f92123 feat(tests): Add E2E test data creator script for comprehensive testing (#10368)
### Changes
- Introduced a new script to generate test data for end-to-end (E2E)
tests using API functions, ensuring compatibility with future model
changes.
- The script creates test users, agent blocks, graphs, profiles, library
agents, presets, API keys, and store submissions.
- Utilizes external services for image and video URLs, and includes
error handling for data creation processes.
- Provides a summary of created data upon completion, enhancing the
testing framework for the AutoGPT platform.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Test scripts are working perfectly and not breaking anything. Data
is also correctly visible in the database.
2025-07-17 15:47:21 +00:00
Ubbe
b6a51fdc19 fix(frontend): navbar missing (#10396)
## Changes 🏗️

<img width="1843" height="321" alt="Screenshot 2025-07-17 at 15 48 01"
src="https://github.com/user-attachments/assets/63f528f7-1dc3-4587-a5af-d02b2c858191"
/>

In this recent PR
https://github.com/Significant-Gravitas/AutoGPT/pull/10394/ the
navigation bar disappeared when logged out. A change was introduced
where the navigation bar does not show up if we don't have profile data
( _which we won't have when logged out_ ). This solves it + adds tests
covering the navigation bar in the logged out state.

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Run this locally
  - [x] See the navbar appearing
  - [x] E2E tests pass on the CI

### For configuration changes:

None
2025-07-17 12:23:28 +00:00
Ubbe
d3bfad2a10 refactor(frontend): e2e tests setup + speed + readability (#10388)
## Changes 🏗️

### User creation tests

Now, all tests use the users created via the platform signup in
`global-setup.ts`. Their login details are on a `.auth/user-pool.json`
file. I have the delete the logic that created tests users via Supabase
directly.

### Build tests speed

I have refactored the builder tests, so that, instead of adding 100s of
blocks under a given test user session, a new test user logins and adds
block for each letter:
```
Test user 1
  - logins and adds blocks starting with "a"
Test user 2
  - logins and adds blocks starting with "b"
```
Given that we know the builder becomes slow once we have 30 or more
blocks, in this way a test user never adds more than 10 blocks on a
given test ( _without losing coverage_ ), so we don't need time-outs or
artificially waiting due to the UI being slow.

### Readability test changes

Refactor existing tests, using short-hand utilities, to be:
- easier to write
- clearer to read
- easier to debug

```ts
// Selectors
getId("id") // --> page.getByTestId("id")
getText("foo") // --> page.getByText("id")
getButton("Run") // --> page.getByRole("button", {name: "Run"}
...
// Assetions
const btn = getButton("Save")
isVisible(btn) // --> expect(btn).toBeVisible()
```
These utilities live under `selectors.ts` and `assertions.ts`. Their
usage is optional but encouraged.


## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Refactored tests code looks good
  - [x] E2E tests are 🟢 on the CI 

### For configuration changes:

No config changes
2025-07-17 10:01:40 +00:00
dependabot[bot]
08f0d94640 chore(frontend/deps): Bump dotenv from 16.5.0 to 17.2.0 in /autogpt_platform/frontend (#10377)
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dotenv&package-manager=npm_and_yarn&previous-version=16.5.0&new-version=17.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-17 04:11:59 +00:00
dependabot[bot]
11cb94ba78 chore(frontend/deps-dev): Bump @types/node from 22.15.30 to 24.0.13 in /autogpt_platform/frontend (#10379)
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/node&package-manager=npm_and_yarn&previous-version=22.15.30&new-version=24.0.13)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-17 03:33:21 +00:00
Abhimanyu Yadav
f2a26b547b feat(frontend): add prefetch queries for various endpoints and enhance API configurations (#10394)
This update enhances the performance and user experience by allowing
data to be prefetched, reducing loading times on the frontend.

### Changes
- Introduced `usePrefetch` in Orval configuration to support
prefetching.
- Added prefetch queries for user profiles, admin listings history,
notification preferences, and execution schedules.
- Updated OpenAPI specifications to include descriptions for provider
names and adjusted required fields in request models.
- Enhanced the Navbar component to utilize the new prefetch
functionality for user profile data.
- Improved type definitions for various models to ensure better
integration with the API.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] I’ve checked everything manually, and everything is working fine.
2025-07-16 12:46:02 +00:00
Ubbe
ee44f3b4a9 fix(frontend): navbar profile query not working (#10392)
## Changes 🏗️

<img width="800" height="265" alt="Screenshot 2025-07-16 at 13 10 57"
src="https://github.com/user-attachments/assets/01164bde-0523-4284-bf74-d1a735b77d5c"
/>

When redoing the navigation bar, I moved the profile query to be
executed on the server using the new
[react-query](https://tanstack.com/query/latest) generated hooks.

The README [states the new hooks can be called on the
server](https://github.com/Significant-Gravitas/AutoGPT/blob/master/autogpt_platform/frontend/README.md#server-side-prefetching),
but when looking deeply into the implementation of
[`custom-mutator.ts`](https://github.com/Significant-Gravitas/AutoGPT/blob/master/autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts),
it turns out they can not ( yet ) as `custom-mutator` calls the proxy
API ( _which can't be called from a RSC_ 😅 ).

### Solution

For now, I changed the call to be made through the old `BackendAPI`,
which can be called client and server side  ( _I did that as part of
the server 🍪 migration_ ) and added an E2E test to catch this ever
disappears again.

Next, I will open a separate PR refactoring `custom-mutator` so that it
can be called on the server.

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Run the app
  - [x] Login
- [x] You see your account name and email when opening the account menu
2025-07-16 09:41:16 +00:00
Nicholas Tindle
a07b0c7a7a Merge branch 'master' into dev 2025-07-15 14:52:19 -05:00
dependabot[bot]
0deaaf9e8f chore(frontend/deps-dev): Bump the development-dependencies group in /autogpt_platform/frontend with 4 updates (#10382)
Bumps the development-dependencies group in /autogpt_platform/frontend
with 4 updates:
[@playwright/test](https://github.com/microsoft/playwright),
[@tanstack/react-query-devtools](https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools),
[msw](https://github.com/mswjs/msw) and
[prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss).

Updates `@playwright/test` from 1.53.2 to 1.54.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/microsoft/playwright/releases"><code>@​playwright/test</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v1.54.1</h2>
<h3>Highlights</h3>
<p><a
href="https://redirect.github.com/microsoft/playwright/issues/36650">microsoft/playwright#36650</a>
- [Regression]: 1.54.0 breaks downloading browsers when an HTTP(S) proxy
is used</p>
<h2>Browser Versions</h2>
<ul>
<li>Chromium 139.0.7258.5</li>
<li>Mozilla Firefox 140.0.2</li>
<li>WebKit 26.0</li>
</ul>
<p>This version was also tested against the following stable
channels:</p>
<ul>
<li>Google Chrome 140</li>
<li>Microsoft Edge 140</li>
</ul>
<h2>v1.54.0</h2>
<h2>Highlights</h2>
<ul>
<li>
<p>New cookie property <code>partitionKey</code> in <a
href="https://playwright.dev/docs/api/class-browsercontext#browser-context-cookies">browserContext.cookies()</a>
and <a
href="https://playwright.dev/docs/api/class-browsercontext#browser-context-add-cookies">browserContext.addCookies()</a>.
This property allows to save and restore partitioned cookies. See <a
href="https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Privacy_sandbox/Partitioned_cookies">CHIPS
MDN article</a> for more information. Note that browsers have different
support and defaults for cookie partitioning.</p>
</li>
<li>
<p>New option <code>noSnippets</code> to disable code snippets in the
html report.</p>
<pre lang="js"><code>import { defineConfig } from '@playwright/test';
<p>export default defineConfig({
reporter: [['html', { noSnippets: true }]]
});
</code></pre></p>
</li>
<li>
<p>New property <code>location</code> in test annotations, for example
in <a
href="https://playwright.dev/docs/api/class-testresult#test-result-annotations">testResult.annotations</a>
and <a
href="https://playwright.dev/docs/api/class-testinfo#test-info-annotations">testInfo.annotations</a>.
It shows where the annotation like <code>test.skip</code> or
<code>test.fixme</code> was added.</p>
</li>
</ul>
<h2>Command Line</h2>
<ul>
<li>
<p>New option <code>--user-data-dir</code> in multiple commands. You can
specify the same user data dir to reuse browsing state, like
authentication, between sessions.</p>
<pre lang="bash"><code>npx playwright codegen
--user-data-dir=./user-data
</code></pre>
</li>
<li>
<p>Option <code>-gv</code> has been removed from the <code>npx
playwright test</code> command. Use <code>--grep-invert</code>
instead.</p>
</li>
<li>
<p><code>npx playwright open</code> does not open the test recorder
anymore. Use <code>npx playwright codegen</code> instead.</p>
</li>
</ul>
<h2>Miscellaneous</h2>
<ul>
<li>Support for Node.js 16 has been removed.</li>
<li>Support for Node.js 18 has been deprecated, and will be removed in
the future.</li>
</ul>
<h2>Browser Versions</h2>
<ul>
<li>Chromium 139.0.7258.5</li>
<li>Mozilla Firefox 140.0.2</li>
<li>WebKit 26.0</li>
</ul>
<p>This version was also tested against the following stable
channels:</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="97b6b881b7"><code>97b6b88</code></a>
chore: mark 1.54.1 (<a
href="https://redirect.github.com/microsoft/playwright/issues/36655">#36655</a>)</li>
<li><a
href="0071756019"><code>0071756</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/36654">#36654</a>):
Revert &quot;fix: get rid of url.parse in network code&quot; (<a
href="https://redirect.github.com/microsoft/playwright/issues/36654">#36654</a>)</li>
<li><a
href="3da07a7049"><code>3da07a7</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/36625">#36625</a>):
chore: render overlay on top of modal dom content</li>
<li><a
href="b01d0d1e5f"><code>b01d0d1</code></a>
chore: mark v1.54.0 (<a
href="https://redirect.github.com/microsoft/playwright/issues/36626">#36626</a>)</li>
<li><a
href="12834b026e"><code>12834b0</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/36624">#36624</a>):
chore: update v1.54 release notes</li>
<li><a
href="82ce7360fd"><code>82ce736</code></a>
test: remove stale fixme/skips in capabilities spec (<a
href="https://redirect.github.com/microsoft/playwright/issues/36617">#36617</a>)</li>
<li><a
href="fab30432b1"><code>fab3043</code></a>
chore: v1.54 release notes (<a
href="https://redirect.github.com/microsoft/playwright/issues/36620">#36620</a>)</li>
<li><a
href="ba32a24467"><code>ba32a24</code></a>
chore: push action in context to the recorder app (<a
href="https://redirect.github.com/microsoft/playwright/issues/36611">#36611</a>)</li>
<li><a
href="090e5aa754"><code>090e5aa</code></a>
chore: update WebKit version to 26.0 (<a
href="https://redirect.github.com/microsoft/playwright/issues/36619">#36619</a>)</li>
<li><a
href="2edbe2562f"><code>2edbe25</code></a>
chore: update browser_patches to
9638cca873674fdb6c97a524be0d3ae4874f805a (<a
href="https://redirect.github.com/microsoft/playwright/issues/3">#3</a>...</li>
<li>Additional commits viewable in <a
href="https://github.com/microsoft/playwright/compare/v1.53.2...v1.54.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `@tanstack/react-query-devtools` from 5.81.5 to 5.83.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/TanStack/query/releases"><code>@​tanstack/react-query-devtools</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v5.83.0</h2>
<p>Version 5.83.0 - 7/11/25, 5:00 PM</p>
<h2>Changes</h2>
<h3>Feat</h3>
<ul>
<li>core: QueryObserver returns isEnabled flag (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9408">#9408</a>)
(23c8908) by Dominik Dorfmeister</li>
</ul>
<h3>Test</h3>
<ul>
<li>solid-query/suspense: remove &quot;vi.waitFor&quot;, and add
&quot;advanceTimersByTimeAsync&quot;, &quot;expect&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9407">#9407</a>)
(0569891) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>svelte-query/createMutation: switch to fake timers, replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot;, and add
&quot;expect&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9382">#9382</a>)
(d6930fd) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>svelte-query/createQueries: switch to fake timers, and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9383">#9383</a>)
(ab7fd72) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>svelte-query/createQuery: switch to fake timers, replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot;, and add
&quot;expect&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9384">#9384</a>)
(2212fff) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>svelte-query/useIsFetching: switch to fake timers, add
&quot;expect&quot;, &quot;vi.waitFor&quot;, and replace
&quot;findByText&quot; with &quot;getByText&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9386">#9386</a>)
(06cb8eb) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useIsMutating: remove &quot;vi.waitFor&quot;, and add
&quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9404">#9404</a>)
(9ecfbf7) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useMutationState: remove &quot;vi.waitFor&quot;, and add
&quot;advanceTimersByTimeAsync&quot;, &quot;expect&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9405">#9405</a>)
(89f9483) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useQueries: remove &quot;vi.waitFor&quot;, and add
&quot;advanceTimersByTimeAsync&quot;, &quot;expect&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9406">#9406</a>)
(daad8e3) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>svelte-query/createInfiniteQuery: switch to fake timers, and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9381">#9381</a>)
(b32904c) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useIsFetching: remove &quot;vi.waitFor&quot;, and add
&quot;advanceTimersByTimeAsync&quot;, &quot;expect&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9403">#9403</a>)
(e2bcbe8) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/transition: remove &quot;vi.waitFor&quot;, and add
&quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9402">#9402</a>)
(eb1cab7) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/QueryClientProvider: remove &quot;vi.waitFor&quot;, and
add &quot;advanceTimersByTimeAsync&quot;, &quot;expect&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9401">#9401</a>)
(93978d3) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>svelte-query/useMutationState: switch to fake timers, and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9388">#9388</a>)
(32467aa) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>svelte-query/useIsMutating: switch to fake timers, add
&quot;expect&quot;, &quot;vi.waitFor&quot;, and replace
&quot;findByText&quot; with &quot;getByText&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9387">#9387</a>)
(c597f76) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useIsFetching: switch to fake timers, replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; and
&quot;findByText&quot; with &quot;getByText&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9377">#9377</a>)
(bce4d7e) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>svelte-query/QueryClientProvider: switch to fake timers, replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot;, and add
&quot;expect&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9385">#9385</a>)
(c0fd94e) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useQueries: switch to fake timers and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9380">#9380</a>)
(f7c83c2) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/suspense: switch to fake timers and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9375">#9375</a>)
(d1c8cff) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useMutationState: switch to fake timers and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9379">#9379</a>)
(94f2150) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useIsMutating: switch to fake timers and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9378">#9378</a>)
(509064a) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/transition: switch to fake timers and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9376">#9376</a>)
(27d82a7) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/useInfiniteQuery: switch to fake timers, and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9391">#9391</a>)
(a0aeac0) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>solid-query/QueryClientProvider: switch to fake timers and replace
&quot;waitFor&quot; with &quot;vi.waitFor&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9374">#9374</a>)
(c66af8a) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>vue-query/vueQueryPlugin: switch to fake timers and replace
&quot;sleep&quot; with &quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9372">#9372</a>)
(8c79719) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>vue-query/useIsMutating: switch to fake timers and replace
&quot;sleep&quot; with &quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9373">#9373</a>)
(47f7e86) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>vue-query/useIsFetching: switch to fake timers and replace
&quot;sleep&quot; with &quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9370">#9370</a>)
(367a96e) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>vue-query/useQueries: switch to fake timers and replace
&quot;sleep&quot; with &quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9369">#9369</a>)
(fc0b23e) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>vue-query/queryClient: switch to fake timers and replace
&quot;sleep&quot; with &quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9371">#9371</a>)
(79893c8) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>vue-query/useInfiniteQuery: switch to fake timers and replace
&quot;sleep&quot; with &quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9368">#9368</a>)
(fc2a95c) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>react-query/usePrefetchQuery: remove &quot;vi.waitFor&quot; and add
&quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9355">#9355</a>)
(c9daf2c) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>react-query/useQueries: remove &quot;waitFor&quot; and add
&quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9367">#9367</a>)
(fd7c655) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>react-query/useInfiniteQuery: remove &quot;vi.waitFor&quot; and add
&quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9366">#9366</a>)
(f6085d0) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>react-query/useMutation: remove &quot;vi.waitFor&quot;, add
&quot;advanceTimersByTimeAsync&quot; and replace &quot;findByText&quot;
with &quot;getByText&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9352">#9352</a>)
(c680879) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>react-query/mutationOptions: switch to fake timers, remove
&quot;vi.waitFor&quot;, and add &quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9397">#9397</a>)
(5765378) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>react-query/suspense: remove &quot;vi.waitFor&quot; and add
&quot;advanceTimersByTime&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9350">#9350</a>)
(f580f08) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>react-query/useQuery: remove &quot;vi.waitFor&quot;, add
&quot;advanceTimersByTimeAsync&quot; and replace &quot;findByText&quot;
with &quot;getByText&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9363">#9363</a>)
(eaf768b) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
<li>react-query/useSuspenseQueries: remove &quot;waitFor&quot; and add
&quot;advanceTimersByTimeAsync&quot; (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9356">#9356</a>)
(a0a0812) by <a
href="https://github.com/sukvvon"><code>@​sukvvon</code></a></li>
</ul>
<h2>Packages</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="390424bcdd"><code>390424b</code></a>
release: v5.83.0</li>
<li><a
href="4287e68336"><code>4287e68</code></a>
release: v5.82.0</li>
<li><a
href="4425423588"><code>4425423</code></a>
chore(*): migrate tsup configuration files to TypeScript format (<a
href="https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools/issues/9330">#9330</a>)</li>
<li>See full diff in <a
href="https://github.com/TanStack/query/commits/v5.83.0/packages/react-query-devtools">compare
view</a></li>
</ul>
</details>
<br />

Updates `msw` from 2.10.3 to 2.10.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mswjs/msw/releases">msw's
releases</a>.</em></p>
<blockquote>
<h2>v2.10.4 (2025-07-12)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>HttpHandler:</strong> use correct query parameters docs link
(<a href="https://redirect.github.com/mswjs/msw/issues/2547">#2547</a>)
(6cdce81de5576e5049899a729ab3a1424550c003) <a
href="https://github.com/kettanaito"><code>@​kettanaito</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e4101030fe"><code>e410103</code></a>
chore(release): v2.10.4</li>
<li><a
href="6cdce81de5"><code>6cdce81</code></a>
fix(HttpHandler): use correct query parameters docs link (<a
href="https://redirect.github.com/mswjs/msw/issues/2547">#2547</a>)</li>
<li>See full diff in <a
href="https://github.com/mswjs/msw/compare/v2.10.3...v2.10.4">compare
view</a></li>
</ul>
</details>
<br />

Updates `prettier-plugin-tailwindcss` from 0.6.13 to 0.6.14
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases">prettier-plugin-tailwindcss's
releases</a>.</em></p>
<blockquote>
<h2>v0.6.14</h2>
<ul>
<li>Add support for OXC + Hermes Prettier plugins (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/pull/376">#376</a>,
<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/pull/380">#380</a>)</li>
<li>Sort template literals in Angular expressions (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/pull/377">#377</a>)</li>
<li>Don't repeatedly add backslashes to escape sequences when formatting
(<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/pull/381">#381</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md">prettier-plugin-tailwindcss's
changelog</a>.</em></p>
<blockquote>
<h2>[0.6.14] - 2025-07-09</h2>
<ul>
<li>Add support for OXC + Hermes Prettier plugins (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/pull/376">#376</a>,
<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/pull/380">#380</a>)</li>
<li>Sort template literals in Angular expressions (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/pull/377">#377</a>)</li>
<li>Don't repeatedly add backslashes to escape sequences when formatting
(<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/pull/381">#381</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e4072ec25a"><code>e4072ec</code></a>
0.6.14</li>
<li><a
href="63d1f5c705"><code>63d1f5c</code></a>
Don't repeatedly add backslashes to escape sequences when formatting (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/issues/381">#381</a>)</li>
<li><a
href="a265c5b795"><code>a265c5b</code></a>
Fix parsing TypeScript with OXC (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/issues/380">#380</a>)</li>
<li><a
href="8e4efba29a"><code>8e4efba</code></a>
Test against Prettier v3.6 (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/issues/375">#375</a>)</li>
<li><a
href="afa39a56cc"><code>afa39a5</code></a>
Create FUNDING.yml</li>
<li><a
href="9b87e4a50e"><code>9b87e4a</code></a>
Sort template literals in Angular expressions (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/issues/377">#377</a>)</li>
<li><a
href="3f06943f1e"><code>3f06943</code></a>
Add support for OXC + Hermes plugins (<a
href="https://redirect.github.com/tailwindlabs/prettier-plugin-tailwindcss/issues/376">#376</a>)</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.6.13...v0.6.14">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 10:51:01 +00:00
dependabot[bot]
9be4b1f4cc chore(frontend/deps-dev): Bump chromatic from 11.25.2 to 13.1.2 in /autogpt_platform/frontend (#10385)
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chromatic&package-manager=npm_and_yarn&previous-version=11.25.2&new-version=13.1.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 10:50:37 +00:00
Ubbe
fde3533943 fix(frontend): logout pages design adjustments (#10342)
## Changes 🏗️

- Put `Continue with Google` button below the other button on the forms
( _to confirm with design_ )
- Ensure some vertical spacing so the forms don't end touching the
header on small screens
- Apply style adjustments asked by design on navbar links

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Check the above

### For configuration changes:

None
2025-07-14 10:28:09 +00:00
Ubbe
a789f87734 fix(frontend): disable Cloudflare on Vercel previews (#10354)
## Changes 🏗️

Disable the Cloudflare check:

<img width="600" height="861" alt="Screenshot 2025-07-11 at 18 51 46"
src="https://github.com/user-attachments/assets/792ecca0-967e-4cef-a562-789125452d2f"
/>

On Vercel previews, so we can use previews for testing Front-end only
changes.

Vercel previews have dynamically generated URLs:
```
https://{branch}-{commit}-significant-gravitas.vercel.app/login
```

So if Cloudflare does not support URL wildcards we will neeed to do this
🙇🏽 ( _as an experiment_ )

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] You can login on the preview
  
### For configuration changes:

None
2025-07-14 10:27:56 +00:00
Abhimanyu Yadav
0b6e46d363 fix(frontend): fix my agent count in the library (#10357)
Currently, my agents count is showing the initial agent count loads on
the library and then adding more agents after pagination.

### Changes 🏗️
- I’ve used `total_items` inside the pagination response and shown the
correct result.

### Demo

https://github.com/user-attachments/assets/b9a2cf18-c9fc-42f8-b0d4-3f8a7ad3cbc5


### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Manually test everything, and it works fine.
2025-07-14 10:20:33 +00:00
Reinier van der Leer
36f5f24333 feat(platform/builder): Builder credentials support + UX improvements (#10323)
- Resolves #10313
- Resolves #10333

Before:


https://github.com/user-attachments/assets/a105b2b0-a90b-4bc6-89da-bef3f5a5fa1f
- No credentials input
- Stuttery experience when panning or zooming the viewport

After:


https://github.com/user-attachments/assets/f58d7864-055f-4e1c-a221-57154467c3aa
- Pretty much the same UX as in the Library, with fully-fledged
credentials input support
- Much smoother when moving around the canvas

### Changes 🏗️

Frontend:
- Add credentials input support to Run UX in Builder
  - Pass run inputs instead of storing them on the input nodes
- Re-implement `RunnerInputUI` using `AgentRunDetailsView`; rename to
`RunnerInputDialog`
    - Make `AgentRunDraftView` more flexible
    - Remove `RunnerInputList`, `RunnerInputBlock`
- Make moving around in the Builder *smooooth* by reducing unnecessary
re-renders
  - Clean up and partially re-write bead management logic
- Replace `request*` fire-and-forget methods in `useAgentGraph` with
direct action async callbacks
- Clean up run input UI components
  - Simplify `RunnerUIWrapper`
- Add `isEmpty` utility function in `@/lib/utils` (expanding on
`_.isEmpty`)
- Fix default value handling in `TypeBasedInput` (**Note:** after all
the changes I've made I'm not sure this is still necessary)
- Improve & clean up Builder test implementations

Backend + API:
- Fix front-end `Node`, `GraphMeta`, and `Block` types
- Small refactor of `Graph` to match naming of some `LibraryAgent`
attributes
- Fix typing of `list_graphs`,
`get_graph_meta_by_store_listing_version_id` endpoints
  - Add `GraphMeta` model and `GraphModel.meta()` shortcut
- Move `POST /library/agents/{library_agent_id}/setup-trigger` to `POST
/library/presets/setup-trigger`

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - Test the new functionality in the Builder:
    - [x] Running an agent with (credentials) inputs from the builder
      - [x] Beads behave correctly
    - [x] Running an agent without any inputs from the builder
    - [x] Scheduling an agent from the builder
    - [x] Adding and searching blocks in the block menu
- [x] Test that all existing `AgentRunDraftView` functionality in the
Library still works the same
    - [x] Run an agent
    - [x] Schedule an agent
    - [x] View past runs
- [x] Run an agent with inputs, then edit the agent's inputs and view
the agent in the Library (should be fine)
2025-07-11 15:46:06 +00:00
Ubbe
5741331250 feat(frontend): logged out pages UI updates (#10314)
## Changes 🏗️

<img width="800" alt="Screenshot 2025-07-07 at 13 16 44"
src="https://github.com/user-attachments/assets/0d404958-d4c9-454d-b71a-9dd677fe0fdc"
/>

<img width="800" alt="Screenshot 2025-07-07 at 13 17 08"
src="https://github.com/user-attachments/assets/1142f6d5-a6af-485d-b42e-98afd26de3ed"
/>

Update the UI of the logged-out pages ( _login, signup,
reset-password..._ ) using the new Design System components, so the app
starts to look a bit more cohesive 💆🏽

Some notes:

- I refactored the `<AuthCard />` components a bit to be easier to use
- I split the render from hook login on login/signup
- I added a couple of modals to improve the UX when logging in with
Google or using non-whitelisted emails
  -  _see below my comments for more context_ 
- When there are API errors, they are shown in a toast to prevent the
layout of the form from jumping
- When using the components in the UI, an issue with border-radius, see
comments for an explanation




## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Logout on the platform
  - [x] Check the updated Login/Signup/Reset password pages
  - [x] The UI looks good and is consistent
  - [x]  The forms work as expected
2025-07-10 18:27:24 +00:00
Ubbe
2fda8dfd32 feat(frontend): new navbar design (#10341)
## Changes 🏗️

<img width="900" height="327" alt="Screenshot 2025-07-10 at 20 12 38"
src="https://github.com/user-attachments/assets/044f00ed-7e05-46b7-a821-ce1cb0ee9298"
/>
<br /><br />

Navbar updated to look pretty from the new designs:
- the logo is now centred instead of on the left
- menu items have been updated to a smaller font-size and less radius
- icons have been updated

I also generated the API files ( _sorry for the noise_ ). I had to do
some border-radius and button updates on the atoms/tokens for it to look
good.

## Checklist 📋

## For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Login/logout
  - [x] The new navbar looks good across screens 

## For configuration changes

No config changes
2025-07-10 18:06:12 +00:00
Ubbe
22c76eab61 feat(toast): update styles (#10339)
## Changes 🏗️

Style refinements on Toasts.

## Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Check Storybook toast stories
  - [x] They match Figma 

#### For configuration changes:

None
2025-07-10 15:04:14 +00:00
Swifty
7688a9701e perf(backend/db): Optimize StoreAgent and Creator views with database indexes and materialized views (#10084)
### Summary
Performance optimization for the platform's store and creator
functionality by adding targeted database indexes and implementing
materialized views to reduce query execution time.

### Changes 🏗️

**Database Performance Optimizations:**
- Added strategic database indexes for `StoreListing`,
`StoreListingVersion`, `StoreListingReview`, `AgentGraphExecution`, and
`Profile` tables
- Implemented materialized views (`mv_agent_run_counts`,
`mv_review_stats`) to cache expensive aggregation queries
- Optimized `StoreAgent` and `Creator` views to use materialized views
and improved query patterns
- Added automated refresh function with 15-minute scheduling for
materialized views (when pg_cron extension is available)

**Key Performance Improvements:**
- Filtered indexes on approved store listings to speed up marketplace
queries
- GIN index on categories for faster category-based searches
- Composite indexes for common query patterns (e.g., listing + version
lookups)
- Pre-computed agent run counts and review statistics to eliminate
expensive aggregations

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Verified migration runs successfully without errors
  - [x] Confirmed materialized views are created and populated correctly
- [x] Tested StoreAgent and Creator view queries return expected results
  - [x] Validated automatic refresh function works properly
  - [x] Confirmed rollback migration successfully removes all changes

#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [x] `docker-compose.yml` is updated or already compatible with my
changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)

**Note:** No configuration changes were required as this is purely a
database schema optimization.
2025-07-10 14:57:55 +00:00
Swifty
243400e128 feat(platform): Add Block Development SDK with auto-registration system (#10074)
## Block Development SDK - Simplifying Block Creation

### Problem
Currently, creating a new block requires manual updates to **5+ files**
scattered across the codebase:
- `backend/data/block_cost_config.py` - Manually add block costs
- `backend/integrations/credentials_store.py` - Add default credentials
- `backend/integrations/providers.py` - Register new providers
- `backend/integrations/oauth/__init__.py` - Register OAuth handlers
- `backend/integrations/webhooks/__init__.py` - Register webhook
managers

This creates significant friction for developers, increases the chance
of configuration errors, and makes the platform difficult to scale.

### Solution
This PR introduces a **Block Development SDK** that provides:
- Single import for all block development needs: `from backend.sdk
import *`
- Automatic registration of all block configurations
- Zero external file modifications required
- Provider-based configuration with inheritance

### Changes 🏗️

#### 1. **New SDK Module** (`backend/sdk/`)
- **`__init__.py`**: Unified exports of 68+ block development components
- **`registry.py`**: Central auto-registration system for all block
configurations
- **`builder.py`**: `ProviderBuilder` class for fluent provider
configuration
- **`provider.py`**: Provider configuration management
- **`cost_integration.py`**: Automatic cost application system

#### 2. **Provider Builder Pattern**
```python
# Configure once, use everywhere
my_provider = (
    ProviderBuilder("my-service")
    .with_api_key("MY_SERVICE_API_KEY", "My Service API Key")
    .with_base_cost(5, BlockCostType.RUN)
    .build()
)
```

#### 3. **Automatic Cost System**
- Provider base costs automatically applied to all blocks using that
provider
- Override with `@cost` decorator for block-specific pricing
- Tiered pricing support with cost filters

#### 4. **Dynamic Provider Support**
- Modified `ProviderName` enum to accept any string via `_missing_`
method
- No more manual enum updates for new providers

#### 5. **Application Integration**
- Added `sync_all_provider_costs()` to `initialize_blocks()` for
automatic cost registration
- Maintains full backward compatibility with existing blocks

#### 6. **Comprehensive Examples** (`backend/blocks/examples/`)
- `simple_example_block.py` - Basic block structure
- `example_sdk_block.py` - Provider with credentials
- `cost_example_block.py` - Various cost patterns
- `advanced_provider_example.py` - Custom API clients
- `example_webhook_sdk_block.py` - Webhook configuration

#### 7. **Extensive Testing**
- 6 new test modules with 30+ test cases
- Integration tests for all SDK features
- Cost calculation verification
- Provider registration tests

### Before vs After

**Before SDK:**
```python
# 1. Multiple complex imports
from backend.data.block import Block, BlockCategory, BlockOutput
from backend.data.model import SchemaField, CredentialsField
# ... many more imports

# 2. Update block_cost_config.py
BLOCK_COSTS[MyBlock] = [BlockCost(...)]

# 3. Update credentials_store.py
DEFAULT_CREDENTIALS.append(...)

# 4. Update providers.py enum
# 5. Update oauth/__init__.py
# 6. Update webhooks/__init__.py
```

**After SDK:**
```python
from backend.sdk import *

# Everything configured in one place
my_provider = (
    ProviderBuilder("my-service")
    .with_api_key("MY_API_KEY", "My API Key")
    .with_base_cost(10, BlockCostType.RUN)
    .build()
)

class MyBlock(Block):
    class Input(BlockSchema):
        credentials: CredentialsMetaInput = my_provider.credentials_field()
        data: String = SchemaField(description="Input data")
    
    class Output(BlockSchema):
        result: String = SchemaField(description="Result")
    
    # That's it\! No external files to modify
```

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Created new blocks using SDK pattern with provider configuration
  - [x] Verified automatic cost registration for provider-based blocks
  - [x] Tested cost override with @cost decorator
  - [x] Confirmed custom providers work without enum modifications
  - [x] Verified all example blocks execute correctly
  - [x] Tested backward compatibility with existing blocks
  - [x] Ran all SDK tests (30+ tests, all passing)
  - [x] Created blocks with credentials and verified authentication
  - [x] Tested webhook block configuration
  - [x] Verified application startup with auto-registration

#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
(no changes needed)
- [x] `docker-compose.yml` is updated or already compatible with my
changes (no changes needed)
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)

### Impact

- **Developer Experience**: Block creation time reduced from hours to
minutes
- **Maintainability**: All block configuration in one place
- **Scalability**: Support hundreds of blocks without enum updates
- **Type Safety**: Full IDE support with proper type hints
- **Testing**: Easier to test blocks in isolation

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
2025-07-10 16:17:55 +02:00
Ubbe
b3b5eefe2c feat(frontend): change to use Sonner toast (#10334)
## Changes 🏗️

Makes changes to use [Sonner for Toasts](https://sonner.emilkowal.ski/)
rather than the [Radix UI
primitive](https://www.radix-ui.com/primitives/docs/components/toast).

<img width="431" alt="Screenshot 2025-07-09 at 15 49 47"
src="https://github.com/user-attachments/assets/c09c3c1e-fd80-44d2-9336-c955c2d4f288"
/>
<img width="444" alt="Screenshot 2025-07-09 at 15 51 05"
src="https://github.com/user-attachments/assets/cc2a3491-7b76-44e2-8bec-3ad0ac917148"
/>
<img width="450" alt="Screenshot 2025-07-09 at 15 51 50"
src="https://github.com/user-attachments/assets/e8ede05d-3488-43f4-aa43-7d3cba92a050"
/>


https://github.com/user-attachments/assets/deb4ce1c-13bb-4f69-890e-9b8680c848e7

<img width="500" alt="Screenshot 2025-07-09 at 15 59 09"
src="https://github.com/user-attachments/assets/5636969d-4c9a-41e6-acd1-afa49b8e70c6"
/>

Sonner is [the one used in
shadcn](https://ui.shadcn.com/docs/components/toast) nowadays, because
it brings great UX on touch devices:
- allows to swipe to dismiss
- they can stack nicely if multiple toasts appear ( see video 📹 )
- when stack, hovering over them reveals them all nicely ( see video 📹 )

I kept the existing `useToast()` API used on the pages, so I had to only
refactor the hook not the calls 🏁

## Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Login
  - [x] Click around the app and trigger toasts
  - [x] Toasts look good 

### For configuration changes

Nope
2025-07-09 17:09:16 +00:00
dependabot[bot]
fe36ba55dd chore(frontend/deps): Bump the production-dependencies group across 1 directory with 12 updates (#10321)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 09:39:21 +00:00
dependabot[bot]
b12507fb21 chore(frontend/deps-dev): Bump the development-dependencies group in /autogpt_platform/frontend with 11 updates (#10322)
Bumps the development-dependencies group in /autogpt_platform/frontend
with 11 updates:

| Package | From | To |
| --- | --- | --- |
| [@playwright/test](https://github.com/microsoft/playwright) | `1.53.1`
| `1.53.2` |
|
[@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y)
| `9.0.14` | `9.0.15` |
|
[@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs)
| `9.0.14` | `9.0.15` |
|
[@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links)
| `9.0.14` | `9.0.15` |
|
[@storybook/addon-onboarding](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/onboarding)
| `9.0.14` | `9.0.15` |
|
[@storybook/nextjs](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/nextjs)
| `9.0.14` | `9.0.15` |
|
[@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash)
| `4.17.19` | `4.17.20` |
|
[eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next)
| `15.3.4` | `15.3.5` |
|
[eslint-plugin-storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/eslint-plugin)
| `9.0.14` | `9.0.15` |
| [msw](https://github.com/mswjs/msw) | `2.10.2` | `2.10.3` |
|
[storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core)
| `9.0.14` | `9.0.15` |

Updates `@playwright/test` from 1.53.1 to 1.53.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/microsoft/playwright/releases"><code>@​playwright/test</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v1.53.2</h2>
<h3>Highlights</h3>
<p><a
href="https://redirect.github.com/microsoft/playwright/issues/36317">microsoft/playwright#36317</a>
- [Regression]: Merging pre-1.53 blob reports loses attachments
<a
href="https://redirect.github.com/microsoft/playwright/pull/36357">microsoft/playwright#36357</a>
- [Regression (Chromium)]: CDP missing trailing slash
<a
href="https://redirect.github.com/microsoft/playwright/issues/36292">microsoft/playwright#36292</a>
- [Bug (MSEdge)]: Edge fails to launch when using
<code>msRelaunchNoCompatLayer</code></p>
<h2>Browser Versions</h2>
<ul>
<li>Chromium 138.0.7204.23</li>
<li>Mozilla Firefox 139.0</li>
<li>WebKit 18.5</li>
</ul>
<p>This version was also tested against the following stable
channels:</p>
<ul>
<li>Google Chrome 137</li>
<li>Microsoft Edge 137</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8c38de4d13"><code>8c38de4</code></a>
chore: mark v1.53.2 (<a
href="https://redirect.github.com/microsoft/playwright/issues/36502">#36502</a>)</li>
<li><a
href="50d76d7910"><code>50d76d7</code></a>
(<a
href="https://redirect.github.com/microsoft/playwright/issues/36462">#36462</a>):
fix(chromium): fix compatibility with Edge msRelaunchNoCompatLayer
...</li>
<li><a
href="48be646aa4"><code>48be646</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/36443">#36443</a>):
fix(blob): correctly type pre-1.53 onTestEnd event for a...</li>
<li><a
href="dc1555648b"><code>dc15556</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/36377">#36377</a>):
chore: follow-up to connectOverCDP fetch logic</li>
<li><a
href="4d0938cb2e"><code>4d0938c</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/36357">#36357</a>):
fix: adding trialing slash detection logic back in urlTo...</li>
<li>See full diff in <a
href="https://github.com/microsoft/playwright/compare/v1.53.1...v1.53.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `@storybook/addon-a11y` from 9.0.14 to 9.0.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/releases"><code>@​storybook/addon-a11y</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v9.0.15</h2>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md"><code>@​storybook/addon-a11y</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d6367d8de4"><code>d6367d8</code></a>
Bump version from &quot;9.0.14&quot; to &quot;9.0.15&quot; [skip
ci]</li>
<li>See full diff in <a
href="https://github.com/storybookjs/storybook/commits/v9.0.15/code/addons/a11y">compare
view</a></li>
</ul>
</details>
<br />

Updates `@storybook/addon-docs` from 9.0.14 to 9.0.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/releases"><code>@​storybook/addon-docs</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v9.0.15</h2>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md"><code>@​storybook/addon-docs</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d6367d8de4"><code>d6367d8</code></a>
Bump version from &quot;9.0.14&quot; to &quot;9.0.15&quot; [skip
ci]</li>
<li>See full diff in <a
href="https://github.com/storybookjs/storybook/commits/v9.0.15/code/addons/docs">compare
view</a></li>
</ul>
</details>
<br />

Updates `@storybook/addon-links` from 9.0.14 to 9.0.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/releases"><code>@​storybook/addon-links</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v9.0.15</h2>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md"><code>@​storybook/addon-links</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d6367d8de4"><code>d6367d8</code></a>
Bump version from &quot;9.0.14&quot; to &quot;9.0.15&quot; [skip
ci]</li>
<li>See full diff in <a
href="https://github.com/storybookjs/storybook/commits/v9.0.15/code/addons/links">compare
view</a></li>
</ul>
</details>
<br />

Updates `@storybook/addon-onboarding` from 9.0.14 to 9.0.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/releases"><code>@​storybook/addon-onboarding</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v9.0.15</h2>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md"><code>@​storybook/addon-onboarding</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d6367d8de4"><code>d6367d8</code></a>
Bump version from &quot;9.0.14&quot; to &quot;9.0.15&quot; [skip
ci]</li>
<li>See full diff in <a
href="https://github.com/storybookjs/storybook/commits/v9.0.15/code/addons/onboarding">compare
view</a></li>
</ul>
</details>
<br />

Updates `@storybook/nextjs` from 9.0.14 to 9.0.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/releases"><code>@​storybook/nextjs</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v9.0.15</h2>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md"><code>@​storybook/nextjs</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d6367d8de4"><code>d6367d8</code></a>
Bump version from &quot;9.0.14&quot; to &quot;9.0.15&quot; [skip
ci]</li>
<li>See full diff in <a
href="https://github.com/storybookjs/storybook/commits/v9.0.15/code/frameworks/nextjs">compare
view</a></li>
</ul>
</details>
<br />

Updates `@types/lodash` from 4.17.19 to 4.17.20
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash">compare
view</a></li>
</ul>
</details>
<br />

Updates `eslint-config-next` from 15.3.4 to 15.3.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vercel/next.js/releases">eslint-config-next's
releases</a>.</em></p>
<blockquote>
<h2>v15.3.5</h2>
<blockquote>
<p>[!NOTE]<br />
This release is backporting bug fixes. It does <strong>not</strong>
include all pending features/changes on canary.</p>
</blockquote>
<h3>Core Changes</h3>
<ul>
<li>Turbopack: list assert/strict as external (<a
href="https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next/issues/80884">#80884</a>)</li>
<li>omit searchParam data from FlightRouterState before transport (<a
href="https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next/issues/80734">#80734</a>)</li>
<li>bugfix: propagate staleTime to seeded prefetch entry (<a
href="https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next/issues/81263">#81263</a>)</li>
</ul>
<h3>Misc Changes</h3>
<ul>
<li>document turbopack trace viewer (<a
href="https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next/issues/78184">#78184</a>)</li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/ztanner"><code>@​ztanner</code></a>, <a
href="https://github.com/mischnic"><code>@​mischnic</code></a>, and <a
href="https://github.com/bgw"><code>@​bgw</code></a> for helping!</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e678913aec"><code>e678913</code></a>
v15.3.5</li>
<li>See full diff in <a
href="https://github.com/vercel/next.js/commits/v15.3.5/packages/eslint-config-next">compare
view</a></li>
</ul>
</details>
<br />

Updates `eslint-plugin-storybook` from 9.0.14 to 9.0.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/releases">eslint-plugin-storybook's
releases</a>.</em></p>
<blockquote>
<h2>v9.0.15</h2>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md">eslint-plugin-storybook's
changelog</a>.</em></p>
<blockquote>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d6367d8de4"><code>d6367d8</code></a>
Bump version from &quot;9.0.14&quot; to &quot;9.0.15&quot; [skip
ci]</li>
<li>See full diff in <a
href="https://github.com/storybookjs/storybook/commits/v9.0.15/code/lib/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `msw` from 2.10.2 to 2.10.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mswjs/msw/releases">msw's
releases</a>.</em></p>
<blockquote>
<h2>v2.10.3 (2025-07-04)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>ws:</strong> support <code>resolutionContext</code> on
<code>parse</code> and <code>run</code> (<a
href="https://redirect.github.com/mswjs/msw/issues/2544">#2544</a>)
(024568571990b6068601a0ba9f03e143ccbbfffb) <a
href="https://github.com/kettanaito"><code>@​kettanaito</code></a></li>
<li><strong>getResponse:</strong> support <code>resolutionContext</code>
argument (<a
href="https://redirect.github.com/mswjs/msw/issues/2543">#2543</a>)
(ce3ab1fdd3b353d6a1d8db3c69532bde44483a8a) <a
href="https://github.com/kettanaito"><code>@​kettanaito</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="594e91f3b0"><code>594e91f</code></a>
chore(release): v2.10.3</li>
<li><a
href="0245685719"><code>0245685</code></a>
fix(ws): support <code>resolutionContext</code> on <code>parse</code>
and <code>run</code> (<a
href="https://redirect.github.com/mswjs/msw/issues/2544">#2544</a>)</li>
<li><a
href="ce3ab1fdd3"><code>ce3ab1f</code></a>
fix(getResponse): support <code>resolutionContext</code> argument (<a
href="https://redirect.github.com/mswjs/msw/issues/2543">#2543</a>)</li>
<li><a
href="13e52aa154"><code>13e52aa</code></a>
test: add type test for mocked responses without type arguments (<a
href="https://redirect.github.com/mswjs/msw/issues/2538">#2538</a>)</li>
<li>See full diff in <a
href="https://github.com/mswjs/msw/compare/v2.10.2...v2.10.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `storybook` from 9.0.14 to 9.0.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/releases">storybook's
releases</a>.</em></p>
<blockquote>
<h2>v9.0.15</h2>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md">storybook's
changelog</a>.</em></p>
<blockquote>
<h2>9.0.15</h2>
<ul>
<li>CLI: Do not fail incompatible package check in doctor if only core
packages used - <a
href="https://redirect.github.com/storybookjs/storybook/pull/31886">#31886</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
<li>React: Bump
<code>@​joshwooding/vite-plugin-react-docgen-typescript</code> to 0.6.1
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/31899">#31899</a>,
thanks <a
href="https://github.com/mrginglymus"><code>@​mrginglymus</code></a>!</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d6367d8de4"><code>d6367d8</code></a>
Bump version from &quot;9.0.14&quot; to &quot;9.0.15&quot; [skip
ci]</li>
<li>See full diff in <a
href="https://github.com/storybookjs/storybook/commits/v9.0.15/code/core">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-08 21:03:15 +00:00
Ubbe
fbae861379 fix(frontend): profile photo form upload (#10331)
## Changes 🏗️

### The Issue

- Backend returns: `"https://storage.googleapis.com/..."` (valid JSON
string)
- Frontend was calling `response.text()` which gave:
`"\"https://storage.googleapis.com/...\""`
- This resulted in a URL with extra quotes that couldn't be loaded

### The Fix
I changed both file upload methods to use `response.json()` instead of
`response.text()`:

1. **Client-side uploads** (`_makeClientFileUpload`): Changed `return
await response.text();` to `return await response.json();`
2. **Server-side uploads** (`makeAuthenticatedFileUpload`): Changed
`return await response.text();` to `return await response.json();`

Now when the backend returns a JSON string like
`"https://example.com/file.png"`, the frontend will properly parse it as
JSON and extract just the URL without the quotes.

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Login
  - [x] Upload an image on your profile
  - [x] It works  


### For configuration changes:

No configuration changes
2025-07-08 19:50:50 +00:00
Abhimanyu Yadav
2183c94c58 feat(frontend): update data fetching strategy and restructure dashboard page (#10265)
This plugin helps users organise library pages and use React Query for
data fetching on these pages.

### Changes

- Restructure the component position.
- Divide the component into two parts: one for rendering and the other
for hooks.
- Change data fetching from the normal fetch to an autogenerated React
query.
- Everything is shifted to the client side.

### Important Notes

- I haven’t changed any UI in this. I’ve divided it into sub-parts
because my main focus is on data fetching.
- Edit is not working, so I need to fix it in the follow-up PR. I
haven’t broken it; it broke already.
- I need to fix prop drilling in further PRs.
- I need to fix loading states.

> I haven’t changed the credit page or integration because I’m getting
errors while setting up Stripe for testing. My card is constantly
declined, and the integration page is attached to the builder page. I’ll
add changes to it when I’m working with the builder.

### Checklist 📋

- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
   - [x] Tested manually and everything is working perfectly
   - [x] Verified agent listing loads correctly
   - [x] Confirmed delete functionality works
2025-07-08 13:21:22 +00:00
Zamil Majdy
02d3b42745 fix(backend;frontend): Add auto-type convertion support for optional types (#10325)
Auto type conversion doesn't work on optional type.

To reproduce:
<img width="981" alt="image"
src="https://github.com/user-attachments/assets/92198d32-bce9-44fd-a9b0-b7b431aec3ba"
/>

Use the AgentNumberInput block and try to pass a string value to the
sub-agent that uses it.


### Changes 🏗️

Added optional type auto conversation support.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  <!-- Put your test plan here: -->
  - [x] Try to convert string to optional[int]
2025-07-08 08:20:13 +07:00
Ubbe
4bf73f63f4 fix(frontend): vulnerability dep (#10319)
## Changes 🏗️

`pbkdf2` should be on `3.1.3` to address [this
alert](https://github.com/Significant-Gravitas/AutoGPT/security/dependabot/343).

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] pnpm installs work

### For configuration changes:

None
2025-07-07 19:03:08 +00:00
Ubbe
189c353c59 fix(frontend): make reading input_schema way more defensive (#10318)
## Changes 🏗️

<img width="800" alt="Screenshot 2025-07-07 at 22 24 07"
src="https://github.com/user-attachments/assets/72551f58-e41d-4a67-839b-98f63c6aad6b"
/>

Looking at the generated types, it looks like `input_schema` for the
agent can be anything:
-
[libraryAgent](https://github.com/Significant-Gravitas/AutoGPT/blob/dev/autogpt_platform/frontend/src/app/api/__generated__/models/libraryAgent.ts#L18-L38)
-
[libraryAgentInputSchema](https://github.com/Significant-Gravitas/AutoGPT/blob/dev/autogpt_platform/frontend/src/app/api/__generated__/models/libraryAgentInputSchema.ts#L9)

But the Front-end is reading it optimistically through the hardcoded
types on Backend API:

-
[GraphIOSchema](443995d79a/autogpt_platform/frontend/src/lib/autogpt-server-api/types.ts (L324-L329))

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Login
  - [x] Open agents in library
  - [x] The page does not break  

### For configuration changes:

No configuration changes.
2025-07-07 18:43:55 +00:00
Ubbe
07461a88cf fix(frontend): better proxy error logging (#10305)
## Changes 🏗️

If the proxied API call fails with an error that is not JSON-like,
expose it still to the client so it can be shown.

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Login
  - [x] Try to top up credits
- [x] You see a better failure on the error toast when redirected back
to the app

---------

Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
2025-07-07 13:37:51 +00:00
Ubbe
daf05cb7bf fix(frontend): fix agent run details view (#10311)
## Changes 🏗️

Fixes the layout getting very wide if the output of an agent is very
long:


https://github.com/user-attachments/assets/e032f425-ed9a-4a13-925f-1bb444f84ef1

It also makes the library agent code a bit more defensive, I get full
page errors on certain agents in the library:

<img width="800" alt="Screenshot 2025-07-04 at 17 35 46"
src="https://github.com/user-attachments/assets/ff8ae461-3792-4e94-941e-9fdd2ead1c87"
/>



## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Login and go to agent in library
  - [x] It loads without errors
- [x] When the execution output is long, it doesn't make the page wider
2025-07-07 13:37:32 +00:00
Abhimanyu Yadav
29bdbf3650 fix(frontend): auth e2e tests (#10312)
This pull request introduces extensive updates to the frontend testing
infrastructure, focusing on Playwright-based testing for user
authentication flows. Key changes include the addition of a global setup
for creating test users, new utilities for managing test user pools, and
expanded test coverage for signup and authentication scenarios.

### Testing Infrastructure Enhancements:

* **Global Setup for Tests**:
- Added `globalSetup` in `playwright.config.ts` to create test users
before all tests run. This ensures consistent test data across test
suites. (`autogpt_platform/frontend/playwright.config.ts`,
[autogpt_platform/frontend/playwright.config.tsR16-R17](diffhunk://#diff-27484f7f20f2eb1aeb289730a440f3a126fa825a7b3fae1f9ed19e217c4f2e40R16-R17))
- Implemented `global-setup.ts` to handle test user creation and save
user pools to the file system. Includes fallback for reusing existing
user pools if available.
(`autogpt_platform/frontend/src/tests/global-setup.ts`,
[autogpt_platform/frontend/src/tests/global-setup.tsR1-R43](diffhunk://#diff-3a8141beba2a6117e0eb721c35b39acc168a8f913ee625ce056c6fab5ac3b192R1-R43))

* **Test User Management Utilities**:
- Added functions in `auth.ts` to create, save, load, and clean up test
users. Supports batch creation and file-based persistence for user
pools. (`autogpt_platform/frontend/src/tests/utils/auth.ts`,
[autogpt_platform/frontend/src/tests/utils/auth.tsR1-R190](diffhunk://#diff-198b5d07aa72d50c153a70ecdfdc4bacc408c2d638c90d858f40d0183549973bR1-R190))
- Enhanced `user-generator.ts` to generate individual or multiple test
users with customizable options.
(`autogpt_platform/frontend/src/tests/utils/user-generator.ts`,
[autogpt_platform/frontend/src/tests/utils/user-generator.tsR2-R41](diffhunk://#diff-a7cb4f403a4cf3605ed1046b0263412205e56e51b16052a9da1e8db9bf34b940R2-R41))

### Expanded Test Coverage:

* **Signup Flow Tests**:
- Added comprehensive tests for signup functionality, including
successful signup, form validation, custom credentials, and duplicate
email handling. (`autogpt_platform/frontend/src/tests/signup.spec.ts`,
[autogpt_platform/frontend/src/tests/signup.spec.tsR1-R113](diffhunk://#diff-d1baa54deff7f3b1eedefd6cec5619ae8edd872d361ef57b6c32998ed22d6661R1-R113))
- Developed `signup.ts` utility functions to automate signup processes
and validate form behavior.
(`autogpt_platform/frontend/src/tests/utils/signup.ts`,
[autogpt_platform/frontend/src/tests/utils/signup.tsR1-R184](diffhunk://#diff-cb05d73a6bd7a129759b0b3382825e90cde561a42fc85b6a25777f6bd2f84511R1-R184))

* **Authentication Utilities**:
- Introduced `SigninUtils` in `signin.ts` for login, logout, and
authentication cycle testing. Provides reusable methods for verifying
user states. (`autogpt_platform/frontend/src/tests/utils/signin.ts`,
[autogpt_platform/frontend/src/tests/utils/signin.tsR1-R94](diffhunk://#diff-7cfec955c159d69f51ba9fcca7d979be090acd6fe246b125551d60192d697d98R1-R94))

### Minor Updates:

* Added environment variable `BROWSER_TYPE` to CI workflow for
browser-specific Playwright tests.
(`.github/workflows/platform-frontend-ci.yml`,
[.github/workflows/platform-frontend-ci.ymlR215-R216](diffhunk://#diff-29396f5dccefac146b71bed295fdbb790b17fda6a5ce2e9f4f8abe80eb14a527R215-R216))

These changes collectively improve the robustness and maintainability of
the frontend testing framework, enabling more reliable and scalable
testing of user authentication features.

### Checklist 📋

- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Validated all authentication tests, and they are working
2025-07-07 13:04:14 +00:00
Reinier van der Leer
6de1e470d9 fix(frontend/library): Support number values in empty input check (#10308)
- Resolves #10307
- Follow-up fix to #10167

### Changes 🏗️

- Update check for empty/missing inputs in `AgentRunDraftView` to
correctly handle number values

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] In the library, run an agent that requires a number input
2025-07-04 12:23:27 +00:00
Ubbe
67eefdd35c fix(frontend): handle JSON requests without payload (#10310)
## Changes 🏗️

We created a proxy route ( `/api/proxy/...` ) to handle API calls made
in the browser from the legacy `BackendAPI`, ensuring security and
compatibility with server cookies 💆🏽 🍪

However, the code on the proxy was written optimistically, expecting the
payload to be present in the JSON requests... even though many requests,
such as `POST` or `PATCH`, can sometimes be fired without a body.

This fixed the issue we saw when stopping a running agent wasn't
working, because to stop it, fires a `PATCH` without a payload.

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Checkout and run this locally
  - [x] Login
  - [x] Go to Library
  - [x] Run agent
  - [x] Stop it
  - [x] It works without errors
2025-07-04 12:14:30 +00:00
Ubbe
01950ccc42 fix(frontend): password reset via server callback (#10303)
## Changes 🏗️

### Root Cause

With httpOnly cookies, the Supabase client can't automatically exchange
password reset codes for sessions client-side because it can't access
the secure cookies 🍪 ( _which is a good thing_ ).

Previously, when users clicked email reset links, the Supabase client on
the browser would automatically handle the code exchange, but
with`httpOnly`, this is not possible because the Supabase browser client
does not have access to session info, so it fails silently 🥵

### Solution

Moved password reset code exchange to server-side middleware that can
access `httpOnly` cookies and properly create authenticated sessions.

### Code Changes

**`middleware.ts`**
- intercepts `/reset-password` URLs containing `code` parameter
- uses helper function to exchange code for session server-side
- redirects with error parameters if exchange fails
- moved `getUser()` call to avoid middleware timing issues

**`reset-password/page.tsx`**
- added toast notifications for password reset errors
- checks URL parameters for error messages on page load

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Password reset emails send successfully
  - [x] Valid reset codes exchange for sessions server-side
  - [x] Invalid/expired codes show error messages via toast
  - [x] Successfully authenticated users can change passwords
  - [x] URL parameters are cleaned up after error display
  - [x] Middleware doesn't break normal authentication flows
  
 ### For configuration changes:

For this to work we need to configure Supabase with the new
password-reset redirect URL.
```
/api/auth/callback/reset-password
```
- [x] Already added in Supabase dev
- [ ] We need to add it on Supabase prod
2025-07-04 12:09:13 +00:00
Ubbe
04e90da031 fix(frontend): proxy via API route no actions (#10296)
## Changes 🏗️

We noticed that in some pages ( `/build` _mainly_ ), where a lot of API
calls are fired in parallel using the old `BackendAPI`( _running many
agent executions_ ) the performance became worse. That is because the
`BackendAPI` was proxied via [server
actions](https://nextjs.org/docs/14/app/building-your-application/data-fetching/server-actions-and-mutations)
( _to make calls to our Backend on the Next.js server_ ).

Looks like server actions don't run in parallel, and their performance
is also subpar, given that we are not hosted on Vercel (they don't
utilise the edge middleware).

These changes cause all `BackendAPI` calls to be proxied via the Next.js
`/api/` route when executed on the browser; when executed on the server,
they bypass the proxy and directly access the API. Hopefully we gain:

- 🚀 Better Performance - API routes are faster than server actions for
this use case
- 🔧 Less Magic - Direct fetch calls instead of hidden server action
complexity
- ♻️ Code Reuse - Leveraging the existing proxy infrastructure used by
react-query
- 🎯 Cleaner Architecture - Single proxy pattern for all API calls
- 🔒 Same Security - Still uses server-side authentication with httpOnly
cookies

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] E2E tests pass
  - [x] Click through the app, there is no issues
  - [x] Agent executions are fast again in the builder
  - [x] Test file uploads
2025-07-03 15:18:47 +00:00
Zamil Majdy
90fb223114 fix(frontend): Fix status chip not showing on graph with INCOMPLETE status 2025-07-03 07:25:59 -07:00
Reinier van der Leer
b1f3122243 fix(frontend): Add fallback for NEXT_PUBLIC_FRONTEND_BASE_URL to API proxy (#10299)
- Resolves #10298
- Follow-up to #10270

### Changes 🏗️

Amend two changes from #10270:

- Add fallback for `NEXT_PUBLIC_FRONTEND_BASE_URL` in custom-mutator.ts
- Revert rename of `FRONTEND_BASE_URL` to
`NEXT_PUBLIC_FRONTEND_BASE_URL` in `backend/.env.example`

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - Don't set `NEXT_PUBLIC_FRONTEND_BASE_URL`
  - Run the platform locally
  - [x] -> `/library` loads normally

#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
2025-07-03 12:26:50 +00:00
Zamil Majdy
f1cc2afbda feat(backend): improve stop graph execution reliability (#10293)
## Summary
- Enhanced graph execution cancellation and cleanup mechanisms
- Improved error handling and logging for graph execution lifecycle
- Added timeout handling for graph termination with proper status
updates
- Exposed a new API for stopping graph based on only graph_id or user_id
- Refactored logging metadata structure for better error tracking

## Key Changes
### Backend
- **Graph Execution Management**: Enhanced `stop_graph_execution` with
timeout-based waiting and proper status transitions
- **Execution Cleanup**: Added proper cancellation waiting with timeout
handling in executor manager
- **Logging Improvements**: Centralized `LogMetadata` class and improved
error logging consistency
- **API Enhancements**: Added bulk graph execution stopping
functionality
- **Error Handling**: Better exception handling and status management
for failed/cancelled executions

### Frontend
- **Status Safety**: Added null safety checks for status chips to
prevent runtime errors
- **Execution Control**: Simplified stop execution request handling

## Test Plan
- [x] Verify graph execution can be properly stopped and reaches
terminal state
- [x] Test timeout scenarios for stuck executions
- [x] Validate proper cleanup of running node executions when graph is
cancelled
- [x] Check frontend status chips handle undefined statuses gracefully
- [x] Test bulk execution stopping functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-02 21:21:26 +00:00