mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-15 01:58:23 -05:00
feat/execution-data
7183 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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) |
||
|
|
309114a727 | Merge commit from fork | ||
|
|
4ffb99bfb0 |
feat(backend): Add block error rate monitoring and Discord alerts (#10332)
## Summary This PR adds a simple block error rate monitoring system that runs every 24 hours (configurable) and sends Discord alerts when blocks exceed the error rate threshold. ## Changes Made **Modified Files:** - `backend/executor/scheduler.py` - Added `report_block_error_rates` function and scheduled job - `backend/util/settings.py` - Added configuration options - `backend/.env.example` - Added environment variable examples - Refactor scheduled job logics in scheduler.py into seperate files ## Configuration ```bash # Block Error Rate Monitoring BLOCK_ERROR_RATE_THRESHOLD=0.5 # 50% error rate threshold BLOCK_ERROR_RATE_CHECK_INTERVAL_SECS=86400 # 24 hours ``` ## How It Works 1. **Scheduled Job**: Runs every 24 hours (configurable via `BLOCK_ERROR_RATE_CHECK_INTERVAL_SECS`) 2. **Error Rate Calculation**: Queries last 24 hours of node executions and calculates error rates per block 3. **Threshold Check**: Alerts on blocks with ≥50% error rate (configurable via `BLOCK_ERROR_RATE_THRESHOLD`) 4. **Discord Alert**: Sends alert to Discord using existing `discord_system_alert` function 5. **Manual Execution**: Available via `execute_report_block_error_rates()` scheduler client method ## Alert Format ``` Block Error Rate Alert: 🚨 Block 'DeprecatedGPT3Block' has 75.0% error rate (75/100) in the last 24 hours 🚨 Block 'BrokenImageBlock' has 60.0% error rate (30/50) in the last 24 hours ``` ## Testing Can be tested manually via: ```python from backend.executor.scheduler import SchedulerClient client = SchedulerClient() result = client.execute_report_block_error_rates() ``` ## Implementation Notes - Follows the same pattern as `report_late_executions` function - Only checks blocks with ≥10 executions to avoid noise - Uses existing Discord notification infrastructure - Configurable threshold and check interval - Proper error handling and logging ## Test plan - [x] Verify configuration loads correctly - [x] Test error rate calculation with existing database - [x] Confirm Discord integration works - [x] Test manual execution via scheduler client - [x] Verify scheduled job runs correctly 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude AI <claude@anthropic.com> Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
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> |
||
|
|
c77cb1fcfb |
fix(backend/library): Fix sub_graphs check in LibraryAgent.from_db(..) (#10316)
- Follow-up fix for #10301 The condition that determines whether `LibraryAgent.credentials_input_schema` is set incorrectly handles empty lists of sub-graphs. ### Changes 🏗️ - Check if `sub_graphs is not None` rather than using the boolean interpretation of `sub_graphs` ### 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: - Trivial change, no test needed. |
||
|
|
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> |
||
|
|
45c1ca1ca1 |
chore(libs/deps-dev): Bump ruff from 0.11.10 to 0.11.13 in /autogpt_platform/autogpt_libs in the development-dependencies group (#10178)
Bumps the development-dependencies group in /autogpt_platform/autogpt_libs with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.11.10 to 0.11.13 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/releases">ruff's releases</a>.</em></p> <blockquote> <h2>0.11.13</h2> <h2>Release Notes</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Add unsafe fix for module moved cases (<code>AIR301</code>,<code>AIR311</code>,<code>AIR312</code>,<code>AIR302</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18367">#18367</a>,<a href="https://redirect.github.com/astral-sh/ruff/pull/18366">#18366</a>,<a href="https://redirect.github.com/astral-sh/ruff/pull/18363">#18363</a>,<a href="https://redirect.github.com/astral-sh/ruff/pull/18093">#18093</a>)</li> <li>[<code>refurb</code>] Add coverage of <code>set</code> and <code>frozenset</code> calls (<code>FURB171</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18035">#18035</a>)</li> <li>[<code>refurb</code>] Mark <code>FURB180</code> fix unsafe when class has bases (<a href="https://redirect.github.com/astral-sh/ruff/pull/18149">#18149</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>perflint</code>] Fix missing parentheses for lambda and ternary conditions (<code>PERF401</code>, <code>PERF403</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18412">#18412</a>)</li> <li>[<code>pyupgrade</code>] Apply <code>UP035</code> only on py313+ for <code>get_type_hints()</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18476">#18476</a>)</li> <li>[<code>pyupgrade</code>] Make fix unsafe if it deletes comments (<code>UP004</code>,<code>UP050</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18393">#18393</a>, <a href="https://redirect.github.com/astral-sh/ruff/pull/18390">#18390</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>fastapi</code>] Avoid false positive for class dependencies (<code>FAST003</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18271">#18271</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Update editor setup docs for Neovim and Vim (<a href="https://redirect.github.com/astral-sh/ruff/pull/18324">#18324</a>)</li> </ul> <h3>Other changes</h3> <ul> <li>Support Python 3.14 template strings (t-strings) in formatter and parser (<a href="https://redirect.github.com/astral-sh/ruff/pull/17851">#17851</a>)</li> </ul> <h2>Contributors</h2> <ul> <li><a href="https://github.com/AlexWaygood"><code>@AlexWaygood</code></a></li> <li><a href="https://github.com/BurntSushi"><code>@BurntSushi</code></a></li> <li><a href="https://github.com/InSyncWithFoo"><code>@InSyncWithFoo</code></a></li> <li><a href="https://github.com/Lee-W"><code>@Lee-W</code></a></li> <li><a href="https://github.com/MatthewMckee4"><code>@MatthewMckee4</code></a></li> <li><a href="https://github.com/MichaReiser"><code>@MichaReiser</code></a></li> <li><a href="https://github.com/Viicos"><code>@Viicos</code></a></li> <li><a href="https://github.com/abhijeetbodas2001"><code>@abhijeetbodas2001</code></a></li> <li><a href="https://github.com/carljm"><code>@carljm</code></a></li> <li><a href="https://github.com/chirizxc"><code>@chirizxc</code></a></li> <li><a href="https://github.com/dcreager"><code>@dcreager</code></a></li> <li><a href="https://github.com/dhruvmanila"><code>@dhruvmanila</code></a></li> <li><a href="https://github.com/dylwil3"><code>@dylwil3</code></a></li> <li><a href="https://github.com/github-actions"><code>@github-actions</code></a></li> <li><a href="https://github.com/ibraheemdev"><code>@ibraheemdev</code></a></li> <li><a href="https://github.com/lipefree"><code>@lipefree</code></a></li> <li><a href="https://github.com/mtshiba"><code>@mtshiba</code></a></li> <li><a href="https://github.com/naslundx"><code>@naslundx</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> <li><a href="https://github.com/otakutyrant"><code>@otakutyrant</code></a></li> <li><a href="https://github.com/renovate"><code>@renovate</code></a></li> <li><a href="https://github.com/robsdedude"><code>@robsdedude</code></a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's changelog</a>.</em></p> <blockquote> <h2>0.11.13</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Add unsafe fix for module moved cases (<code>AIR301</code>,<code>AIR311</code>,<code>AIR312</code>,<code>AIR302</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18367">#18367</a>,<a href="https://redirect.github.com/astral-sh/ruff/pull/18366">#18366</a>,<a href="https://redirect.github.com/astral-sh/ruff/pull/18363">#18363</a>,<a href="https://redirect.github.com/astral-sh/ruff/pull/18093">#18093</a>)</li> <li>[<code>refurb</code>] Add coverage of <code>set</code> and <code>frozenset</code> calls (<code>FURB171</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18035">#18035</a>)</li> <li>[<code>refurb</code>] Mark <code>FURB180</code> fix unsafe when class has bases (<a href="https://redirect.github.com/astral-sh/ruff/pull/18149">#18149</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>perflint</code>] Fix missing parentheses for lambda and ternary conditions (<code>PERF401</code>, <code>PERF403</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18412">#18412</a>)</li> <li>[<code>pyupgrade</code>] Apply <code>UP035</code> only on py313+ for <code>get_type_hints()</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18476">#18476</a>)</li> <li>[<code>pyupgrade</code>] Make fix unsafe if it deletes comments (<code>UP004</code>,<code>UP050</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18393">#18393</a>, <a href="https://redirect.github.com/astral-sh/ruff/pull/18390">#18390</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>fastapi</code>] Avoid false positive for class dependencies (<code>FAST003</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18271">#18271</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Update editor setup docs for Neovim and Vim (<a href="https://redirect.github.com/astral-sh/ruff/pull/18324">#18324</a>)</li> </ul> <h3>Other changes</h3> <ul> <li>Support Python 3.14 template strings (t-strings) in formatter and parser (<a href="https://redirect.github.com/astral-sh/ruff/pull/17851">#17851</a>)</li> </ul> <h2>0.11.12</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Revise fix titles (<code>AIR3</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18215">#18215</a>)</li> <li>[<code>pylint</code>] Implement <code>missing-maxsplit-arg</code> (<code>PLC0207</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/17454">#17454</a>)</li> <li>[<code>pyupgrade</code>] New rule <code>UP050</code> (<code>useless-class-metaclass-type</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18334">#18334</a>)</li> <li>[<code>flake8-use-pathlib</code>] Replace <code>os.symlink</code> with <code>Path.symlink_to</code> (<code>PTH211</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18337">#18337</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-bugbear</code>] Ignore <code>__debug__</code> attribute in <code>B010</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18357">#18357</a>)</li> <li>[<code>flake8-async</code>] Fix <code>anyio.sleep</code> argument name (<code>ASYNC115</code>, <code>ASYNC116</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18262">#18262</a>)</li> <li>[<code>refurb</code>] Fix <code>FURB129</code> autofix generating invalid syntax (<a href="https://redirect.github.com/astral-sh/ruff/pull/18235">#18235</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-implicit-str-concat</code>] Add autofix for <code>ISC003</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18256">#18256</a>)</li> <li>[<code>pycodestyle</code>] Improve the diagnostic message for <code>E712</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18328">#18328</a>)</li> <li>[<code>flake8-2020</code>] Fix diagnostic message for <code>!=</code> comparisons (<code>YTT201</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18293">#18293</a>)</li> <li>[<code>pyupgrade</code>] Make fix unsafe if it deletes comments (<code>UP010</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18291">#18291</a>)</li> </ul> <h3>Documentation</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
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=" |
||
|
|
ab4eb10c3d |
chore(backend/deps-dev): Bump the development-dependencies group across 1 directory with 4 updates (#10173)
Bumps the development-dependencies group with 4 updates in the /autogpt_platform/backend directory: [poethepoet](https://github.com/nat-n/poethepoet), [pyright](https://github.com/RobertCraigie/pyright-python), [requests](https://github.com/psf/requests) and [ruff](https://github.com/astral-sh/ruff). Updates `poethepoet` from 0.34.0 to 0.35.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/nat-n/poethepoet/releases">poethepoet's releases</a>.</em></p> <blockquote> <h2>0.35.0</h2> <h2>Enhancements</h2> <ul> <li>Support script tasks that run packages with a <code>__main__</code> module by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/300">nat-n/poethepoet#300</a></li> <li>Allow virtualenv location to reference special git related env vars by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/302">nat-n/poethepoet#302</a></li> <li>Simplify CLI help page header by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/291">nat-n/poethepoet#291</a></li> </ul> <h2>Fixes</h2> <ul> <li>Don't register hidden tasks with poetry plugin by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/292">nat-n/poethepoet#292</a></li> <li>Don't resolve symlinks to poetry in PoetryExecutor by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/293">nat-n/poethepoet#293</a></li> <li>Crash with invalid help option on task by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/294">nat-n/poethepoet#294</a></li> <li>Always validate task args when loading config by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/295">nat-n/poethepoet#295</a></li> <li>Coerce switch case values to string to avoid errors by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/296">nat-n/poethepoet#296</a></li> <li>Always print help when no arguments provided by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/299">nat-n/poethepoet#299</a></li> <li>Suppress useless global options in the poetry plugin cli by <a href="https://github.com/nat-n"><code>@nat-n</code></a> in <a href="https://redirect.github.com/nat-n/poethepoet/pull/301">nat-n/poethepoet#301</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/nat-n/poethepoet/compare/v0.34.0...v0.35.0">https://github.com/nat-n/poethepoet/compare/v0.34.0...v0.35.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/nat-n/poethepoet/compare/v0.34.0...v0.35.0">compare view</a></li> </ul> </details> <br /> Updates `pyright` from 1.1.401 to 1.1.402 <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 |
||
|
|
42e141012f |
chore(backend/deps): Bump the production-dependencies group across 1 directory with 20 updates (#10242)
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: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
b7f9dcf419 |
fix(backend): add back perplexity_llama (#10327)
<!-- Clearly explain the need for these changes: --> We flew too close to the sun ### Changes 🏗️ adds back perplexity due to the need to remove it after it has already been migrated not before or the system will automatically migrate it to a different model so that it is one that exists <!-- 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] tested locally; no impact since we are simply re-enabling itautogpt-platform-beta-v0.6.15 |
||
|
|
a4ff8402f1 |
feat(backend): add Perplexity Sonar models (#10326)
<!-- Clearly explain the need for these changes: --> Adds the latest Perplexity Sonar models from OpenRouter and removes the decommissioned Sonar Large model. ### Changes 🏗️ - Added constants for `perplexity/sonar`, `perplexity/sonar-pro`, and `perplexity/sonar-deep-research` in the `LlmModel` enum - Included metadata entries for the new models - Mapped the new models in the cost configuration with their respective pricing tiers - Removed the outdated Sonar Large model ### 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] `poetry run format` - [x] `poetry run test` #### 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**) |
||
|
|
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
|
||
|
|
5ff6d2ca56 | fix(backend): Fix stop graph response on already stopped graph | ||
|
|
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
|
||
|
|
171deea806 | feat(block): Added best-effort support of multiple/parallel tool calls for SmartDecisionMaker Block | ||
|
|
149bbd910a | feat(block): Introduce GoogleSheetsFindBlock | ||
|
|
c6741e7c14 | fix(block): Fix Broken SmartDecisionManager block using Anthropic | ||
|
|
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 |
||
|
|
358ce1d258 |
fix(backend/library): Include subgraphs in get_library_agent (#10301)
- Resolves #10300 - Follow-up fix to #10167 ### Changes 🏗️ - Include sub-graphs in `get_library_agent` 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: - [x] Executing agent with sub-graphs that require credentials works |
||
|
|
a5691c0e89 | feat(block): Add dict append capability for GoogleSheetsAppendBlock | ||
|
|
0b35dff1e6 | fix(block): Fix failing GoogleSheetsAppendBlock on undefined append range | ||
|
|
6cf9136cdd | feat(block): Support URL format input instead of ID for Google Sheet blocks | ||
|
|
5d91a9c9b9 | feat(block): Make RetrieveInformationBlock output static | ||
|
|
e3d84d87f8 |
fix(blocks): restore batching logic in CreateListBlock
During data manipulation refactoring, the CreateListBlock lost its important batching functionality with max_size and max_tokens parameters. This restores the original implementation that can yield lists in chunks based on size or token limits. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
9fecbe2a31 |
feat(blocks): add plural outputs where blocks yield singular values in loops (#10304)
## Summary
This PR adds missing plural output versions to blocks that yield
individual items in loops but don't provide the complete collection,
enabling both individual item access (for iteration) and complete
collection access (for aggregate operations).
## Changes
### GitHub Blocks (existing)
- **GithubListPullRequestsBlock**: Added `pull_requests` output
alongside existing `pull_request`
- **GithubListPRReviewersBlock**: Added `reviewers` output alongside
existing `reviewer`
### Additional Blocks (added in this PR)
- **GetRedditPostsBlock**: Added `posts` output for complete list of
Reddit posts
- **ReadRSSFeedBlock**: Added `entries` output for complete list of RSS
entries
- **AddMemoryBlock**: Added `results` output for complete list of memory
operation results
## Pattern Applied
The pattern ensures blocks provide both:
```python
# Complete collection first
yield "plural_output", all_items
# Then individual items for iteration
for item in all_items:
yield "singular_output", item
```
## Testing
- Updated test outputs to include plural versions
- All blocks maintain backward compatibility with existing singular
outputs
- `poetry run format` - ✅ Passed
- `poetry run test` - ✅ Blocks validated
## Benefits
- **Iteration**: Users can still iterate over individual items as before
- **Aggregation**: Users can now access complete collections for
operations like counting, filtering, or batch processing
- **Compatibility**: Existing workflows continue to work unchanged
🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
|
||
|
|
4744e0f6b1 |
feat(blocks): add data manipulation blocks and refactor basic.py (#10261)
### Changes 🏗️ #### New List Operation Blocks - Implement `GetListItemBlock` for retrieving an element at a specific index, with negative index support - Introduce `RemoveFromListBlock` to remove or pop items and optionally return the removed value - Add `ReplaceListItemBlock` to overwrite an item at a given index and return the old value - Provide `ListIsEmptyBlock` for quickly checking if a list has no elements #### New Dictionary Operation Blocks (for consistency with list operations) - Add `RemoveFromDictionaryBlock` to remove key-value pairs and optionally return the removed value - Implement `ReplaceDictionaryValueBlock` to replace values for a specified key and return the old value - Provide `DictionaryIsEmptyBlock` for checking if a dictionary has no elements #### Code Organization & Refactoring - **Created `data_manipulation.py`**: Moved all dictionary and list manipulation blocks to a dedicated file to prevent `basic.py` from becoming too large - **Refactored `basic.py`**: Now contains only core utility blocks (FileStore, StoreValue, PrintToConsole, Note, UniversalTypeConverter) - **Ensured consistency**: Dictionary and list blocks now have equivalent functionality and follow the same patterns - **Removed redundancy**: Eliminated duplicate `GetDictionaryValueBlock` since `FindInDictionaryBlock` already provides comprehensive lookup functionality - **Preserved UUIDs**: All existing block UUIDs maintained to ensure no breaking changes #### Block Organization Summary **`basic.py` (core utilities):** - `FileStoreBlock`, `StoreValueBlock`, `PrintToConsoleBlock`, `NoteBlock`, `UniversalTypeConverterBlock` **`data_manipulation.py` (dictionary & list operations):** - **Dictionary blocks:** Create, Add, Find, Remove, Replace, IsEmpty - **List blocks:** Create, Add, Find, Get, Remove, Replace, IsEmpty ### 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] `poetry run format` - [x] `poetry run test` - [x] `pnpm format` <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </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>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
24b4ab9864 |
feat(block): Enhance Mem0 blocks filetering & add more GoogleSheets blocks (#10287)
The block library was missing two key capabilities that keep coming up
in real-world agent flows:
1. **Granular Mem0 filtering.** Agents often work side-by-side for the
same user, so memories must be scoped to a specific run or agent to
avoid crosstalk.
2. **First-class Google Sheets support.** Many community projects (e.g.,
data-collection, lightweight dashboards, no-code workflows) rely on
Sheets, but we only had a brittle REST call block.
This PR adds fine-grained filters to every Mem0 retrieval block and
introduces a complete, OAuth-ready Google Sheets suite so agents can
create, read, write, format, and manage spreadsheets safely.
:contentReference[oaicite:0]{index=0}
---
### Changes 🏗️
#### 📚 Mem0 block enhancements
* Added `categories_filter`, `metadata_filter`, `limit_memory_to_run`,
and `limit_memory_to_agent` inputs to **SearchMemoryBlock**,
**GetAllMemoriesBlock**, and **GetLatestMemoryBlock**.
* Added identical scoping logic to **AddMemoryBlock** so newly-created
memories can be tied to run/agent IDs.
#### 📊 New Google Sheets blocks (`backend/blocks/google/sheets.py`)
| Block | Purpose |
|-------|---------|
| `GoogleSheetsReadBlock` | Read a range |
| `GoogleSheetsWriteBlock` | Overwrite a range |
| `GoogleSheetsAppendBlock` | Append rows |
| `GoogleSheetsClearBlock` | Clear a range |
| `GoogleSheetsMetadataBlock` | Fetch spreadsheet + sheet info |
| `GoogleSheetsManageSheetBlock` | Create / delete / copy a sheet |
| `GoogleSheetsBatchOperationsBlock` | Batch update / clear |
| `GoogleSheetsFindReplaceBlock` | Find & replace text |
| `GoogleSheetsFormatBlock` | Cell formatting (bg/text colour, bold,
italic, font size) |
| `GoogleSheetsCreateSpreadsheetBlock` | Spin up a new spreadsheet |
* Each block has typed input/output schemas, built-in test mocks, and is
disabled in prod unless Google OAuth is configured.
* Added helper enums (`SheetOperation`, `BatchOperationType`) and
updated **CLAUDE.md** contributor guide with a UUID-generation step.
:contentReference[oaicite:2]{index=2}
---
### 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] Manual E2E run: agent writes chat summary to new spreadsheet,
reads it back, searches memory with run-scoped filter
- [x] Live Google API smoke-tests (read/write/append/clear/format) using
a disposable spreadsheet
|
||
|
|
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 |
||
|
|
d4646c249d | feat(backend): implement KV data storage blocks | ||
|
|
095199bfa6 |
feat(backend): implement KV data storage blocks (#10294)
This PR introduces key-value storage blocks. ### Changes 🏗️ - **Database Schema**: Add AgentNodeExecutionKeyValueData table with composite primary key (userId, key) - **Persistence Blocks**: Create PersistInformationBlock and RetrieveInformationBlock in persistence.py - **Scope-based Storage**: Support for within_agent (per agent) vs across_agents (global user) persistence - **Key Structure**: Use formal # delimiter for storage keys: `agent#{graph_id}#{key}` and `global#{key}` ### 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 all 244 block tests - all passing ✅ - [x] Test PersistInformationBlock with mock data storage - [x] Test RetrieveInformationBlock with mock data retrieval - [x] Verify scope-based key generation (within_agent vs across_agents) - [x] Verify database function integration through all manager classes - [x] Run lint and type checking - all passing ✅ - [x] Verify database migration is included and valid #### 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: This change adds database schema and new blocks but doesn't require environment or docker-compose changes as it uses existing database infrastructure. --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
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 |
||
|
|
e2bd727798 |
feat: optimize frontend CI with shared setup job (#10286)
# Change details
- **Before**: Each job separately installs dependencies (~4 redundant
installations)
### Massive Redundancy in Setup Steps
Each job repeats these SAME 4 steps:
- Checkout repository
- Set up Node.js (version 21)
- Enable corepack
- Install dependencies (pnpm install --frozen-lockfile)
This happens 4+ times across different jobs:
- lint job
- type-check job
- chromatic job
- test job (runs 2x due to matrix strategy)
### No Dependency Caching
No caching strategy - downloads packages fresh every time
- Every workflow run downloads all packages from scratch
- No benefit from previous runs, even with identical pnpm-lock.yaml
- **After**: Dependencies installed once in setup job, cached and reused
This optimization maintains all existing CI functionality while
significantly improving pipeline efficiency.
A workflow run example is dispatched:
https://github.com/souhailaS/AutoGPT/actions/workflows/platform-frontend-ci.yml
## Additional Context
We are a team of researchers from University of Zurich
(https://www.ifi.uzh.ch/en/zest.html) currently **working on automating
energy optimizations in GitHub Actions workflows**. This optimization
maintains full functionality while significantly reducing computational
overhead and energy consumption.
souhaila.serbout@uzh.ch
|