mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-10 14:55:16 -05:00
b6a51fdc19a70d133c8dc8348b35a06cc94883fc
509 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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 |
||
|
|
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 |
||
|
|
08f0d94640 |
chore(frontend/deps): Bump dotenv from 16.5.0 to 17.2.0 in /autogpt_platform/frontend (#10377)
[](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> |
||
|
|
11cb94ba78 |
chore(frontend/deps-dev): Bump @types/node from 22.15.30 to 24.0.13 in /autogpt_platform/frontend (#10379)
[](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> |
||
|
|
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.
|
||
|
|
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 |
||
|
|
a07b0c7a7a | Merge branch 'master' into dev | ||
|
|
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=" |
||
|
|
9be4b1f4cc |
chore(frontend/deps-dev): Bump chromatic from 11.25.2 to 13.1.2 in /autogpt_platform/frontend (#10385)
[](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> |
||
|
|
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 |
||
|
|
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 |
||
|
|
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. |
||
|
|
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) |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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. |
||
|
|
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> |
||
|
|
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 |
||
|
|
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> |
||
|
|
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=" |
||
|
|
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 |
||
|
|
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
|
||
|
|
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] |
||
|
|
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 |
||
|
|
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](
|
||
|
|
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> |
||
|
|
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 |
||
|
|
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
|
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
90fb223114 | fix(frontend): Fix status chip not showing on graph with INCOMPLETE status | ||
|
|
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**) |
||
|
|
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> |
||
|
|
f394a0eabb |
fix(frontend): do not swallow errors on the proxy (#10289)
## Changes 🏗️ Requests to the Backend happen now on the server, given we moved to server-side cookies 🍪 ... however the client proxy is not exposing the API errors to the client correctly. This aim to fix that. ## 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 to the platform - [x] Run agents until you encounter an error - [x] The error is shown on the toast |
||
|
|
311bcc7751 |
fix(frontend): onboarding runtime error (#10288)
## Changes 🏗️ <img width="800" alt="Screenshot 2025-07-02 at 16 43 08" src="https://github.com/user-attachments/assets/d7cd0dd7-e671-4c5d-8ed9-6d8f56371ff5" /> During logout, the user state gets cleared but the onboarding provider continues to run and tries to access onboarding.completedSteps on a null object, causing a runtime error 😬 This mostly happens because onboarding is broken on local and dev ( the onboarding agents don't work ), so I manually skip it after creating an account, navigating to `/marketplace`. That makes me think that the onboarding provider still thinks I need to onboard, and hence why this error? ## 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] Create a new user - [x] Instead of completing onboarding, navigate to `/marketplace` via browser URL - [x] logout, login/logout again few times and you don't see runtime errors |
||
|
|
22d58367ec |
dx(platform): Add initial setup scripts for linux and windows (#9912)
This PR adds two setup scripts that will setup autogpt fully, it has a windows .bat and a linux/mac .sh script, for now they are placed in a new folder called "Installer" ### Note, the installers are supposed to be run outside of the autogpt repo folder like Desktop/in a new empy folder because it will clone the repo into the current directory. I have had to add ``cross-env`` via ``pnpm add cross-env `` as on windows the env is set differently in the ``package.json`` build section ``"build": "cross-env pnpm run generate:api-client && SKIP_STORYBOOK_TESTS=true next build"`` once fully setup i plan to make it so these commands can be run with the following commands Linux/Mac ```bash curl -fsSL https://setup.agpt.co/install.sh -o install.sh && bash install.sh ``` Windows cmd/powershell ```bash powershell -c "iwr https://setup.agpt.co/install.bat -o install.bat; ./install.bat" ``` Currently the commands above dont work but will later on! ### 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 have tested the linux ``install.sh`` on a ubuntu system and it setup the platform fully. - [x] I have tested the windows ``install.bat`` on my windows system and it setup the platform fully. - [x] I have tested on both OS's and checked with missing prerequisites to see if it shows the errors and it does |
||
|
|
d076d0175f |
chore(frontend/deps-dev): Bump the development-dependencies group in /autogpt_platform/frontend with 9 updates (#10277)
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> |
||
|
|
a33d58dd33 |
chore(frontend): add generated files/queries to Git (#10281)
## Changes 🏗️ We want to make running the AutoGPT Front-end as easy as possible. For that, you should be able to run it with the least amount of commands. We recently added generated queries and types on the Front-end from the Back-end OpenAPI schema, to make development easier and catch bugs earlier. However, with the current setup, developers are forced to run `pnpm generate:api-all` with the Back-end running, which is annoying. After this PR, the Front-end can be rerun with just `pnpm i & pnpm dev`. ## 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 Front-end with just `pnpm dev` and it works --------- Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com> |
||
|
|
254bb6236f |
fix(frontend): use NEXT_PUBLIC_AGPT_SERVER_URL on proxy route (#10280)
### Changes 🏗️ A new undocumented env var, `NEXT_PUBLIC_AGPT_SERVER_BASE_URL`, was added to the proxy route for it to work with the new `react-query` mutator. I removed it and used the existing `NEXT_PUBLIC_AGPT_SERVER_URL`, so we have fewer environment variables to manage ( _and this one is already added to all environments_ ). ### 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 server locally - [x] All pages ( library, marketplace, builder, settings ) work |
||
|
|
89a5ba69e5 | fix(blocks): Fix boolean/toggle block input with false/disabled value | ||
|
|
b32ac898db |
fix(frontend): migrate to NEXT_PUBLIC_FRONTEND_BASE_URL (#10270)
## Changes 🏗️ We need to `FRONTEND_BASE_URL` to → `NEXT_PUBLIC_FRONTEND_BASE_URL` given is needed on the new API client on the Front-end to make requests. The `NEXT_PUBLIC` prefix is important so that it is available on the client. ## 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 locally - [x] The library and other pages work |
||
|
|
4f6e66447f |
fix(frontend): fix custom mutator of orval (#10269)
This pull request includes updates to the environment configuration and API mutator logic in the `autogpt_platform/frontend` directory. The changes aim to improve flexibility by introducing dynamic base URLs through environment variables. Environment configuration updates: * [`autogpt_platform/frontend/.env.example`](diffhunk://#diff-72012a00359825421736dc064be74187011cb5b0462bea1ed3a3c5ca80bb3117R2): Added `NEXT_PUBLIC_FRONTEND_BASE_URL` to define the base URL for the frontend dynamically. API mutator logic updates: * [`autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts`](diffhunk://#diff-28c5af33c7bd0ecddc1793aa6a27bfd5b4f979b62c29990538aceea3320d8be9L1-R1): Updated `BASE_URL` to use the `NEXT_PUBLIC_FRONTEND_BASE_URL` environment variable, enabling dynamic configuration of the API proxy URL. ### 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 |
||
|
|
fae927e2a7 |
feat(docs): update README.md to show how new data fetching works (#10268)
This PR demonstrates how the new data fetching strategy works, so other
developers don’t get confused.
### Changes
- Updated `README.md` to explain the new data fetching strategy.
### 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] Nothing is breaking, everything works great
|
||
|
|
6ef8119708 |
feat(frontend): use the new set up on library data fetching client (#10266)
### Changes
- Restructure library components.
- Divide the component into two parts: one for rendering and one for
hooks.
- Add a `useInfiniteParams` inside the `orval` config to use `page` as
the pagination parameter.
#### 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 tested everything and everything works fine
|
||
|
|
a0a7129081 |
fix(frontend): design system feedback (#10253)
## Changes 🏗️ I had a catch-up yesterday with Olivia, we agreed to implement these fixes on our 👶🏽 component library ### 1. Update button loading states <img width="600" alt="Screenshot 2025-06-27 at 15 13 12" src="https://github.com/user-attachments/assets/a9ec8d0b-5f2c-4675-ae38-41ce81a3d699" /> When `loading`, all buttons will have a grey background and white text, except if it is the `ghost` variant. ### 2. Update new border radius tokens <img width="300" alt="Screenshot 2025-06-27 at 15 15 46" src="https://github.com/user-attachments/assets/9cc7ea52-420c-4d61-b682-0cffe1843ad8" /> Updated the `border-radius` scale to the one in Figma. [Reference](https://www.figma.com/design/nO9NFynNuicLtkiwvOxrbz/AutoGPT-Design-System?node-id=634-8255&t=hGgDUzLoLdSqpJIe-1). ### 3. Add `secondary` link variant <img width="319" alt="Screenshot 2025-06-27 at 15 13 02" src="https://github.com/user-attachments/assets/dc307d32-2f35-4110-bc7e-0ef6dd3d78e3" /> We have 2 types of links, `primary` ( _without underline but shows on hover_ ) and `secondary` ( _with underline_ ) ## 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 Storybook locally, stories look good --------- Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com> |
||
|
|
f3202fa776 |
feat(platform/builder): Hide action buttons on triggered graphs (#10218)
- Resolves #10217 https://github.com/user-attachments/assets/26a402f5-6f43-453b-8c83-481380bde853 ### Changes 🏗️ Frontend: - Show message instead of action buttons ("Run" etc) when graph has webhook node(s) - Fix check for webhook nodes used in `BlocksControl` and `FlowEditor` - Clean up `PrimaryActionBar` implementation - Add `accent` variant to `ui/button:Button` API: - Add `GET /library/agents/by-graph/{graph_id}` endpoint ### 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: - Go to Builder - Add a trigger block - [x] -> action buttons disappear; message shows in their place - Save the graph - Click the "Agent Library" link in the message - [x] -> app navigates to `/library/agents/[id]` for the newly created agent |
||
|
|
b5c7f381c1 |
feat(platform): centralize api calls in nextjs for token handling (#10222)
This PR helps to send all the React query requests through a Next.js server proxy. It works something like this: when a user sends a request, our custom mutator sends a request to the proxy server, where we add the auth token to the header and send it to the backend again. 🌐 Users can send a client-side request directly to the backend server because their browser does have access to auth tokens, so they need to go via the Next.js server. 🚀 ### Changes 🏗️ - Change the position of the generated client, mutator, and transfer inside `/src/app/api` - Update the mutator to send the request to the proxy server - Add a proxy server at `/api/proxy`, which handles the request using `makeAuthenticatedRequest` and `makeAuthenticatedFileUpload` helpers and sends the request to the backend - Remove `getSupabaseClient`, because we do not have access to the auth token on client side, hence no need 🔑 - Update Orval configs to generate the client at the new position - Added new backend updates to the auto-generated client. ### 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 setting page is using React Query and is working fine. - [x] The mutator is sending requests to the proxy server correctly. - [x] The proxy server is handling requests correctly. - [x] The response handling is correct in both the proxy server and the custom mutator. |