mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-11 23:35:25 -05:00
de6f4fca23c69d278aaeff4eaa0a04e9938286d7
674 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
de6f4fca23 | Merge branch 'master' into dev | ||
|
|
fb4b8ed9fc |
feat: track users with sentry on client side (not backend yet) (#11077)
<!-- Clearly explain the need for these changes: --> We need to be able to count user impact by user count which means we need to track that ### Changes 🏗️ - Attaches user id to frontend actions (which hopefully propagate to the backend in some places) <!-- 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] Test login -> shows on sentry - [x] Test logout -> no longer shows on sentry |
||
|
|
7c47f54e25 |
feat(frontend): add an API key modal for adding credentials in new builder. (#11105)
In this PR, I’ve added an API Key modal to the new builder so users can add API key credentials. https://github.com/user-attachments/assets/68da226c-3787-4950-abb0-7a715910355e ### Changes - Updated the credential field to support API key. - Added a modal for creating new API keys and improved the selection UI for credentials. - Refactored components for better modularity and maintainability. - Enhanced styling and user experience in the FlowEditor components. - Updated OpenAPI documentation for better clarity on credential operations. ### 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] Able to create API key perfectly. - [x] can select the correct credentials. |
||
|
|
927042d93e | fix(frontend): more turnstile experiments (2) | ||
|
|
4244979a45 | fix(frontend): more turnstile experiments | ||
|
|
aa27365e7f | fix(frontend): fix captcha reset | ||
|
|
b86aa8b14e |
feat(frontend): launchdarkly tracking on frontend browser (#11076)
<!-- Clearly explain the need for these changes: --> We struggle to identify where issues are coming from feature flags and which are from normal use. This adds that split on the frontend. ### Changes 🏗️ Include sentry in the LD initialization <!-- 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] Test that launch darkly flags get attached to the frontend (browser only) |
||
|
|
e7ab2626f5 | fix(frontend): remove captcha ref reset | ||
|
|
ff58ce174b |
fix(frontend): possible login issues related to turnstile (#11094)
## Changes 🏗️ We are seeing login and authentication issues in production and staging. Locally though, the app behaves fine. We also had issues related to the CAPTCHA in the past. Our CAPTCHA code is less than ideal, with some heavy `useEffect` that will load the Turnstile script into the DOM. I have the impression that is loading the script multiple times ( due to dependencies on the effects array not being well set ), or the like causing associated login issues. Created a new Turnstile component using [`react-turnstile`](https://docs.page/marsidev/react-turnstile) that is way simpler and should hopefully be more stable. I also fixed an issue with the Credits popover layout rendering cropped on the window. ## 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 on the app multiple times with Turnstile ON, everything is stable - [x] Credits popover appears on the right place ### For configuration changes: None |
||
|
|
2d8ab6b7c0 |
feat(frontend): add selecting UI for custom node in new builder (#11091)
React Flow has built-in functionality to select multiple nodes by using `cmd` + click. You can also select using rectangle selection by holding the shift key. However, we need to design a custom node after it’s selected. <img width="845" height="510" alt="Screenshot 2025-10-06 at 12 41 16 PM" src="https://github.com/user-attachments/assets/c91f22e3-2211-46b6-b3d3-fbc89148e99a" /> ### Tests - [x] Selecting Ui is visible after selecting a node, using cmd + click, and after rectangle selection. |
||
|
|
a7306970b8 |
refactor(frontend): simplify marketplace search page and update data fetching (#11061)
This PR refactors the marketplace search page to improve code maintainability, readability, and follows modern React patterns by extracting complex logic into a custom hook and creating dedicated components. ### 🔄 Changes #### **Architecture Improvements** - **Component Extraction**: Replaced the monolithic `SearchResults` component with a cleaner `MainSearchResultPage` component that focuses solely on presentation - **Custom Hook Pattern**: Extracted all business logic and state management into `useMainSearchResultPage` hook for better separation of concerns - **Loading State Component**: Added dedicated `MainSearchResultPageLoading` component for consistent loading UI #### **Code Simplification** - **Reduced search page to 19 lines** (from 175 lines) by removing inline logic and state management - **Centralized data fetching** using auto-generated API endpoints (`useGetV2ListStoreAgents`, `useGetV2ListStoreCreators`) - **Improved error handling** with dedicated error states and loading states #### **Feature Updates** - **Sort Options**: Commented out "Most Recent" and "Highest Rated" sort options due to backend limitations (no date/rating data available) - **Client-side Sorting**: Implemented client-side sorting for "runs" and "rating" as a temporary solution - **Search Filters**: Maintained filter functionality for agents/creators with improved state management ### 📊 Impact - **Better Developer Experience**: Code is now more modular and easier to understand - **Improved Maintainability**: Business logic separated from presentation layer - **Future-Ready**: Structure prepared for backend improvements when date/rating data becomes available - **Type Safety**: Leveraging TypeScript with auto-generated API types ### 🧪 Testing Checklist - [x] Search functionality works correctly with various search terms - [x] Filter chips correctly toggle between "All", "Agents", and "Creators" - [x] Sort dropdown displays only "Most Runs" option - [x] Client-side sorting correctly sorts agents and creators by runs - [x] Loading state displays while fetching data - [x] Error state displays when API calls fail - [x] "No results found" message appears for empty searches - [x] Search bar in results page is functional - [x] Results display correctly with proper layout and styling |
||
|
|
c42f94ce2a |
feat(frontend): add new credential field for new builder (#11066)
In this PR, I’ve added a feature to select a credential from a list and also provided a UI to create a new credential if desired. <img width="443" height="157" alt="Screenshot 2025-10-06 at 9 28 07 AM" src="https://github.com/user-attachments/assets/d9e72a14-255d-45b6-aa61-b55c2465dd7e" /> #### Frontend Changes: - **Refactored credential field** from a single component to a modular architecture: - Created `CredentialField/` directory with separated concerns - Added `SelectCredential.tsx` component for credential selection UI with provider details display - Implemented `useCredentialField.ts` custom hook for credential data fetching with 10-minute caching - Added `helpers.ts` with credential filtering and provider name formatting utilities - Added loading states with skeleton UI while fetching credentials - **Enhanced UI/UX features**: - Dropdown selector showing credentials with provider, title, username, and host details - Visual key icon for each credential option - Placeholder "Add API Key" button (implementation pending) - Loading skeleton UI for better perceived performance - Smart filtering of credentials based on provider requirements - **Template improvements**: - Updated `FieldTemplate.tsx` to properly handle credential field display - Special handling for credential field labels showing provider-specific names - Removed input handle for credential fields in the node editor #### Backend Changes: - **API Documentation improvements**: - Added OpenAPI summaries to `/credentials` endpoint ("List Credentials") - Added summary to `/{provider}/credentials/{cred_id}` endpoint ("Get Specific Credential By ID") ### Test Plan 📋 - [x] Navigate to the flow builder - [x] Add a block that requires credentials (e.g., API block) - [x] Verify the credential dropdown loads and displays available credentials - [x] Check that only credentials matching the provider requirements are shown |
||
|
|
7f8cf36ceb |
feat(frontend): Add description to Upload Agent dialog (#11053)
### Changes 🏗️ - Added a description to the Upload Agent dialog to provide more context for users. Fixes [BUILDER-3N1](https://sentry.io/organizations/significant-gravitas/issues/6915512912/). The issue was that: DialogContent in LibraryUploadAgentDialog lacks an accessible description, violating WAI-ARIA standards. <img width="2066" height="1740" alt="image" src="https://github.com/user-attachments/assets/c876fb33-4375-4a66-a6a2-6b13c00ef8d3" /> ### 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] Test it works - [x] Get design approval Co-authored-by: seer-by-sentry[bot] <157164994+seer-by-sentry[bot]@users.noreply.github.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
0978566089 |
fix(frontend): performance and layout issues (#11036)
## Changes 🏗️ ### Performance (Onboarding) 🐎 - Moved non-UI logic into `providers/onboarding/helpers.ts` to reduce provider complexity. - Memoized provider value and narrowed state updates to cut unnecessary re-renders. - Deferred non-critical effects until after mount to lower initial JS work. **Result:** faster initial render and smoother onboarding flows under load. ### Layout and overflow fixes 📐 - Replaced `w-screen` with `w-full` in platform/admin/profile layouts and marketplace wrappers to avoid 100vw scrollbar overflow. - Adjusted mobile navbar position (`right-0` instead of `-right-4`) to prevent off-viewport elements. **Result:** removed horizontal scrolling on Marketplace, Library, and Settings pages; Build remains unaffected. ### New Generic Error pages - Standardized global error handling in `app/global-error.tsx` for consistent display and user feedback. - Added platform-scoped error page(s) under `app/(platform)/error` for route-level failures with a consistent layout. - Improved retry affordances using existing `ErrorCard`. ## 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] Verify onboarding flows render faster and re-render less (DevTools flamegraph) - [x] Confirm no horizontal scrolling on Marketplace, Library, Settings at common widths - [x] Validate mobile navbar stays within viewport - [x] Trigger errors to confirm global and platform error pages render consistently ### For configuration changes: None |
||
|
|
4a1cb6d64b |
fix(frontend): performance and layout issues (#11036)
## Changes 🏗️ ### Performance (Onboarding) 🐎 - Moved non-UI logic into `providers/onboarding/helpers.ts` to reduce provider complexity. - Memoized provider value and narrowed state updates to cut unnecessary re-renders. - Deferred non-critical effects until after mount to lower initial JS work. **Result:** faster initial render and smoother onboarding flows under load. ### Layout and overflow fixes 📐 - Replaced `w-screen` with `w-full` in platform/admin/profile layouts and marketplace wrappers to avoid 100vw scrollbar overflow. - Adjusted mobile navbar position (`right-0` instead of `-right-4`) to prevent off-viewport elements. **Result:** removed horizontal scrolling on Marketplace, Library, and Settings pages; Build remains unaffected. ### New Generic Error pages - Standardized global error handling in `app/global-error.tsx` for consistent display and user feedback. - Added platform-scoped error page(s) under `app/(platform)/error` for route-level failures with a consistent layout. - Improved retry affordances using existing `ErrorCard`. ## 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] Verify onboarding flows render faster and re-render less (DevTools flamegraph) - [x] Confirm no horizontal scrolling on Marketplace, Library, Settings at common widths - [x] Validate mobile navbar stays within viewport - [x] Trigger errors to confirm global and platform error pages render consistently ### For configuration changes: None |
||
|
|
7c9db7419a |
fix(frontend): Display run cost correctly - convert cents to dollars run detail components (#10997)
Fixed costs being displayed as raw cent values instead of properly
formatted dollar amounts in the frontend monitoring and agent run detail
pages.
## Problem
The platform was showing costs incorrectly in two key areas:
- **Monitoring page**: Total cost displayed as raw cents with incorrect
"seconds" unit (e.g., "Total cost: 150 seconds")
- **Agent run details**: Individual run costs displayed as raw cents
(e.g., "Cost: $150" for what should be $1.50)
## Solution
Updated the affected components to properly convert cents to dollars
with consistent formatting:
**FlowRunsStatus.tsx** - Fixed total cost calculation and display:
```tsx
// Before
{filteredFlowRuns.reduce((total, run) => total + (run.stats?.cost ?? 0), 0)} seconds
// After
${(filteredFlowRuns.reduce((total, run) => total + (run.stats?.cost ?? 0), 0) / 100).toFixed(2)}
```
**RunDetailHeader.tsx** - Fixed individual run cost display:
```tsx
// Before
Cost: ${run.stats.cost}
// After
Cost: ${(run.stats.cost / 100).toFixed(2)}
```
## Validation
- Backend correctly stores costs in cents (verified in models and
database schemas)
- Email notification templates already handle the conversion properly
using `(credits_used|float)/100`
- Other components use the existing `formatCredits()` utility which
correctly converts cents to dollars
- No security vulnerabilities introduced (CodeQL verification passed)
- All linting and formatting checks pass
The fix ensures users now see accurate dollar amounts (e.g., $1.50
instead of $150 or "150 seconds") across the platform's cost reporting
interfaces.

> [!WARNING]
>
> <details>
> <summary>Firewall rules blocked me from connecting to one or more
addresses (expand for details)</summary>
>
> #### I tried to connect to the following addresses, but was blocked by
firewall rules:
>
> - `checkpoint.prisma.io`
> - Triggering command: `/usr/bin/node
/root/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/child
{"product":"prisma","version":"5.17.0","cli_install_type":"local","information":"","local_timestamp":"2025-09-25T21:41:17Z","project_hash":"a5170f80","cli_path":"/root/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/index.js","cli_path_hash":"40bbdaf9","endpoint":"REDACTED","disable":false,"arch":"x64","os":"linux","node_version":"v20.19.5","ci":false,"ci_name":"","command":"generate","schema_providers":["postgresql"],"schema_preview_features":[],"schema_generators_providers":["prisma-client-py"],"cache_file":"/root/.cache/checkpoint-nodejs/prisma-40bbdaf9","cache_duration":43200000,"remind_duration":172800000,"force":false,"timeout":5000,"unref":true,"child_path":"/root/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/child","client_event_id":"","previous_client_event_id":"","check_if_update_available":false}`
(dns block)
> - Triggering command: `/usr/bin/node
/root/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/child
{"product":"prisma","version":"5.17.0","cli_install_type":"local","information":"","local_timestamp":"2025-09-25T21:41:19Z","project_hash":"a5170f80","cli_path":"/root/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/index.js","cli_path_hash":"40bbdaf9","endpoint":"REDACTED","disable":false,"arch":"x64","os":"linux","node_version":"v20.19.5","ci":false,"ci_name":"","command":"migrate
deploy","schema_providers":["postgresql"],"schema_preview_features":[],"schema_generators_providers":["prisma-client-py"],"cache_file":"/root/.cache/checkpoint-nodejs/prisma-40bbdaf9","cache_duration":43200000,"remind_duration":172800000,"force":false,"timeout":5000,"unref":true,"child_path":"/root/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/child","client_event_id":"","previous_client_event_id":"","check_if_update_available":false}`
(dns block)
> - Triggering command: `/opt/hostedtoolcache/node/21.7.3/x64/bin/node
/home/REDACTED/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/child
{"product":"prisma","version":"5.17.0","cli_install_type":"local","information":"","local_timestamp":"2025-09-25T21:44:58Z","project_hash":"c6190a20","cli_path":"/home/REDACTED/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/index.js","cli_path_hash":"8d85b642","endpoint":"REDACTED","disable":false,"arch":"x64","os":"linux","node_version":"v21.7.3","ci":true,"ci_name":"GitHub
Actions","command":"generate","schema_providers":["postgresql"],"schema_preview_features":[],"schema_generators_providers":["prisma-client-py"],"cache_file":"/home/REDACTED/.cache/checkpoint-nodejs/prisma-8d85b642","cache_duration":43200000,"remind_duration":172800000,"force":false,"timeout":5000,"unref":true,"child_path":"/home/REDACTED/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/build/child","client_event_id":"","previous_client_event_id":"","check_if_update_available":false}`
(dns block)
> - `fonts.googleapis.com`
> - Triggering command: `node
/home/REDACTED/work/AutoGPT/AutoGPT/autogpt_platform/frontend/node_modules/.bin/../next/dist/bin/next
build` (dns block)
> -
`https://api.github.com/repos/Significant-Gravitas/Significant-Gravitas%2FAutoGPT/languages`
> - Triggering command:
`/home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps
/home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js`
(http block)
> - `o1.ingest.sentry.io`
> - Triggering command: `node
/home/REDACTED/work/AutoGPT/AutoGPT/autogpt_platform/frontend/node_modules/.bin/../next/dist/bin/next
build` (dns block)
>
> If you need me to access, download, or install something from one of
these locations, you can either:
>
> - Configure [Actions setup
steps](https://gh.io/copilot/actions-setup-steps) to set up my
environment, which run before the firewall is enabled
> - Add the appropriate URLs or hosts to the custom allowlist in this
repository's [Copilot coding agent
settings](https://github.com/Significant-Gravitas/AutoGPT/settings/copilot/coding_agent)
(admins only)
>
> </details>
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>Costs are being shown as dollars rather than cents based
on the new runs page</issue_title>
> <issue_description></issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> </comments>
>
</details>
Fixes Significant-Gravitas/AutoGPT#10886
<!-- START COPILOT CODING AGENT TIPS -->
---
💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ntindle <8845353+ntindle@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
|
||
|
|
18bbd8e572 |
fix(frontend): Fix confetti (#11031)
### Changes 🏗️ - Fix not being able to complete `MARKETPLACE_RUN_AGENT` task - Fix confetti shooting on every refresh - Fix confetti shooting from top-left corner ### 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] Bugs eradicated |
||
|
|
047f011520 |
fix(platform): resolve authentication performance bottlenecks and improve reliability (#11028)
## Summary Fix critical authentication performance bottlenecks causing infinite loading during login and malformed redirect URL handling. ## Root Cause Analysis - **OnboardingProvider** was running expensive `isOnboardingEnabled()` database queries on every route for all users - **Timezone detection** was calling backend APIs during authentication flow instead of only during onboarding - **Malformed redirect URLs** like `/marketplace,%20/marketplace` causing authentication callback failures - **Arbitrary setTimeout** creating race conditions instead of proper authentication state management ## Changes Made ### 1. Backend: Cache Expensive Onboarding Queries (`backend/data/onboarding.py`) - Add `@cached(maxsize=1, ttl_seconds=300)` decorator to `onboarding_enabled()` - Cache expensive database queries for 5 minutes to prevent repeated execution during auth - Optimize query with `take=MIN_AGENT_COUNT + 1` to stop counting early - Fix typo: "Onboading" → "Onboarding" ### 2. Frontend: Optimize OnboardingProvider (`providers/onboarding/onboarding-provider.tsx`) - **Route-based optimization**: Only call `isOnboardingEnabled()` when user is actually on `/onboarding/*` routes - **Preserve functionality**: Still fetch `getUserOnboarding()` for step completion tracking on all routes - **Smart redirects**: Only handle onboarding completion redirects when on onboarding routes - **Performance improvement**: Eliminates expensive database calls for 95% of page loads ### 3. Frontend: Fix Timezone Detection Race Conditions (`hooks/useOnboardingTimezoneDetection.ts`) - **Remove setTimeout hack**: Replace arbitrary 1000ms timeout with proper authentication state checks - **Add route filtering**: Only run timezone detection on `/onboarding/*` routes using `pathname.startsWith()` - **Proper auth dependencies**: Use `useSupabase()` hook to wait for `user` and `!isUserLoading` - **Fire-and-forget updates**: Change from `mutateAsync()` to `mutate()` to prevent blocking UI ### 4. Frontend: Apply Fire-and-Forget Pattern (`hooks/useTimezoneDetection.ts`) - Change timezone auto-detection from `mutateAsync()` to `mutate()` - Prevents blocking user interactions during background timezone updates - API still executes successfully, user doesn't wait for response ### 5. Frontend: Enhanced URL Validation (`auth/callback/route.ts`) - **Add malformed URL detection**: Check for commas and spaces in redirect URLs - **Constants**: Use `DEFAULT_REDIRECT_PATH = "/marketplace"` instead of hardcoded strings - **Better error handling**: Try-catch with fallback to safe default path - **Path depth limits**: Reject suspiciously deep URLs (>5 segments) - **Race condition mitigation**: Default to `/marketplace` for corrupted URLs with warning logs ## Technical Implementation ### Performance Optimizations - **Database caching**: 5-minute cache prevents repeated expensive onboarding queries - **Route-aware logic**: Heavy operations only run where needed (`/onboarding/*` routes) - **Non-blocking updates**: Timezone updates don't block authentication flow - **Proper state management**: Wait for actual authentication instead of arbitrary delays ### Authentication Flow Improvements - **Eliminate race conditions**: No more setTimeout guessing - wait for proper auth state - **Faster auth**: Remove blocking timezone API calls during login flow - **Better UX**: Handle malformed URLs gracefully instead of failing ## Files Changed - `backend/data/onboarding.py` - Add caching to expensive queries - `providers/onboarding/onboarding-provider.tsx` - Route-based optimization - `hooks/useOnboardingTimezoneDetection.ts` - Proper auth state + route filtering + fire-and-forget - `hooks/useTimezoneDetection.ts` - Fire-and-forget pattern - `auth/callback/route.ts` - Enhanced URL validation ## Impact - **Eliminates infinite loading** during authentication flow - **Improves auth response times** from 5-11+ seconds to sub-second - **Prevents malformed redirect URLs** that confused users - **Reduces database load** through intelligent caching - **Maintains all existing functionality** with better performance - **Eliminates race conditions** from arbitrary timeouts ## Validation - ✅ All pre-commit hooks pass (format, lint, typecheck) - ✅ No breaking changes to existing functionality - ✅ Backward compatible with all onboarding flows - ✅ Enhanced error logging and graceful fallbacks 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
48a0faa611 |
feat(frontend): Restore onboarding steps (#11027)
Wallet update removed `BUILDER_OPEN` and `BUILDER_RUN_AGENT`. ### Changes 🏗️ - Restore completion codepaths for `BUILDER_OPEN` and `BUILDER_RUN_AGENT` for analytical purposes ### 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] Tasks are completed silently |
||
|
|
aad0434cb2 |
feat(frontend): Enhance Sentry integration and TallyPopup telemetry (#10862)
Added Sentry captureConsoleIntegration and extraErrorDataIntegration to client, edge, and server configs. Improved replay integration with unmasking support. Updated TallyPopup to collect and expose Sentry replay data, user agent, and page URL for enhanced telemetry and debugging. Improved event handling and error logging for Tally events. Marked CustomNode title for Sentry unmasking.<!-- Clearly explain the need for these changes: --> ### Changes 🏗️ Reconfigure sentry Pass the id with sentry replay to tally alongside prefilling email, and passing non user identifying attributes like platform url, full url, and is authenticated. <!-- 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] Test the results show up in sentry - [x] Test the url works in tally |
||
|
|
f33ec1f2ec |
feat(platform): New retention-focused tasks and wallet update (#10977)
### Changes 🏗️ - Rename wallet and update design - Update tasks and add Hidden Tasks section - Update onboarding backend code and related db migration - Add progress bar for some tasks ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] All tasks can be finished - [x] Finished tasks add correct amount of credits --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
e68b873bcf |
chore(frontend/deps): Bump @faker-js/faker from 9.9.0 to 10.0.0 in /autogpt_platform/frontend (#10806)
Bumps [@faker-js/faker](https://github.com/faker-js/faker) from 9.9.0 to 10.0.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/faker-js/faker/releases"><code>@faker-js/faker</code>'s releases</a>.</em></p> <blockquote> <h2>v10.0.0</h2> <h2>New & Noteworthy</h2> <ul> <li>esm only (for cjs support look into migration guide, we got you covered 😉)</li> <li>remove v9 deprecations</li> <li>change default error strategy to 'fail' in word module</li> <li>remove invalid credit card issuer patterns</li> <li>see our <a href="https://v10.fakerjs.dev/guide/upgrading.html">migration guide</a></li> </ul> <h2>What's Changed</h2> <ul> <li>ci: use node 24 by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3543">faker-js/faker#3543</a></li> <li>infra: stop using node 18 by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3536">faker-js/faker#3536</a></li> <li>infra: use import.meta.dirname by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3542">faker-js/faker#3542</a></li> <li>chore(deps): update devdependencies (major) by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3512">faker-js/faker#3512</a></li> <li>chore(deps): update eslint by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3555">faker-js/faker#3555</a></li> <li>chore(deps): update dependency <code>@vitest/eslint-plugin</code> to v1.3.4 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3554">faker-js/faker#3554</a></li> <li>chore(deps): update devdependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3556">faker-js/faker#3556</a></li> <li>chore(deps): lock file maintenance by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3557">faker-js/faker#3557</a></li> <li>feat!: esm only by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3540">faker-js/faker#3540</a></li> <li>refactor!: remove deprecations by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3553">faker-js/faker#3553</a></li> <li>docs: migration guide for v10 by <a href="https://github.com/matthewmayer"><code>@matthewmayer</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3559">faker-js/faker#3559</a></li> <li>infra: more precise engines field by <a href="https://github.com/matthewmayer"><code>@matthewmayer</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3561">faker-js/faker#3561</a></li> <li>refactor(word)!: change default error strategy to 'fail' by <a href="https://github.com/xDivisionByZerox"><code>@xDivisionByZerox</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3560">faker-js/faker#3560</a></li> <li>chore(release): 10.0.0-beta.0 by <a href="https://github.com/fakerjs-bot"><code>@fakerjs-bot</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3565">faker-js/faker#3565</a></li> <li>docs: Minor improvements to migration guide by <a href="https://github.com/matthewmayer"><code>@matthewmayer</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3569">faker-js/faker#3569</a></li> <li>chore(deps): update pnpm to v10.13.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3570">faker-js/faker#3570</a></li> <li>chore(deps): update devdependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3571">faker-js/faker#3571</a></li> <li>chore(deps): update eslint by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3572">faker-js/faker#3572</a></li> <li>chore(deps): lock file maintenance by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3562">faker-js/faker#3562</a></li> <li>chore(deps): update dependency typescript to v5.9.2 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3576">faker-js/faker#3576</a></li> <li>chore(deps): update pnpm to v10.14.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3579">faker-js/faker#3579</a></li> <li>chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to 2baa40a by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3575">faker-js/faker#3575</a></li> <li>chore(deps): update devdependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3577">faker-js/faker#3577</a></li> <li>chore(deps): update eslint (major) by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3580">faker-js/faker#3580</a></li> <li>chore(deps): update eslint by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3578">faker-js/faker#3578</a></li> <li>feat(locale): extended list of colors in Polish by <a href="https://github.com/pkuczynski"><code>@pkuczynski</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3586">faker-js/faker#3586</a></li> <li>refactor(locale): remove invalid credit card issuer patterns by <a href="https://github.com/xDivisionByZerox"><code>@xDivisionByZerox</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3568">faker-js/faker#3568</a></li> <li>docs: update migration guide with findings from playground update by <a href="https://github.com/xDivisionByZerox"><code>@xDivisionByZerox</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3587">faker-js/faker#3587</a></li> <li>chore: fix typo in test by <a href="https://github.com/noritaka1166"><code>@noritaka1166</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3591">faker-js/faker#3591</a></li> <li>chore(deps): update all non-major dependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3596">faker-js/faker#3596</a></li> <li>chore(deps): update amannn/action-semantic-pull-request action to v6 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3598">faker-js/faker#3598</a></li> <li>chore(deps): update devdependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3599">faker-js/faker#3599</a></li> <li>chore(deps): update actions/checkout action to v5 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3597">faker-js/faker#3597</a></li> <li>chore(deps): update dependency cypress to v15 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3603">faker-js/faker#3603</a></li> <li>chore(deps): update dependency vitepress to v1.6.4 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3601">faker-js/faker#3601</a></li> <li>chore(deps): pin dependency node to 24.6.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3600">faker-js/faker#3600</a></li> <li>chore(deps): update dependency typescript-eslint to v8.40.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3602">faker-js/faker#3602</a></li> <li>chore(deps): update dependency eslint-plugin-jsdoc to v54 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3604">faker-js/faker#3604</a></li> <li>chore(deps): lock file maintenance by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3584">faker-js/faker#3584</a></li> <li>chore(release): 10.0.0 by <a href="https://github.com/fakerjs-bot"><code>@fakerjs-bot</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3605">faker-js/faker#3605</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/faker-js/faker/blob/next/CHANGELOG.md"><code>@faker-js/faker</code>'s changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/faker-js/faker/compare/v10.0.0-beta.0...v10.0.0">10.0.0</a> (2025-08-21)</h2> <h3>New Locales</h3> <ul> <li><strong>locale:</strong> extended list of colors in Polish (<a href="https://redirect.github.com/faker-js/faker/issues/3586">#3586</a>) (<a href=" |
||
|
|
4530e97e59 |
feat(platform/blocks): Add table input UI and builder block (#10829)
<!-- Clearly explain the need for these changes: --> https://github.com/user-attachments/assets/909a6ecf-5731-424c-8dee-fe25db907365 ### Need 💡 This PR introduces a new "Table Input" block and corresponding UI component, allowing users to easily input structured, tabular data directly within the agent builder. This addresses the need for a user-friendly way to define custom column headers and populate rows of data, which is then output as a list of dictionaries. ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> * **New `TableInputBlock` (backend):** A new block (`backend/backend/blocks/table_input.py`) has been added. It defines an `Input` schema with `headers` (a list of strings for column names) and `value` (a list of dictionaries representing table rows). The block outputs the `value` data in the specified dictionary format. * **New `NodeTableInput` Component (frontend):** A new React component (`frontend/src/components/node-table-input.tsx`) was created to render an editable table UI, supporting dynamic row addition/removal and cell editing. * **Frontend Integration:** * `NodeGenericInputField` and `NodeObjectInputTree` were updated to pass `parentContext` down the component hierarchy. * `NodeArrayInput` was modified to conditionally render the new `NodeTableInput` component. It now detects when an array field (`selfKey` is "value") is part of a parent context that defines `headers`, indicating it should be rendered as a table. ### 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] Add a "Table Input" block to the builder. - [x] Define custom headers (e.g., "Name", "Email"). - [x] Add several rows of data using the table UI. - [x] Verify that adding, editing, and removing rows works as expected. - [x] Connect the output of the "Table Input" block to another block (e.g., a "Print" block) and confirm the output format is a list of dictionaries with the defined headers as keys. - [x] Test with an empty table (no rows). - [x] Test with no headers defined (should default). - [x] Test that an empty row returns empty data (is this a good behavior? example output of the block ``` { "advanced": false, "column_headers": [ "Col 1", "Col 2", "Col 3" ], "name": "table_input", "value": [ { "Col 1": "row 1", "Col 2": "row 1", "Col 3": "row 1" }, { "Col 1": "val 1", "Col 2": "val 2", "Col 3": "val 3" } ] } ``` --- <a href="https://cursor.com/background-agent?bcId=bc-b8d31867-1034-4374-852c-b92ca69cc399"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-cursor-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-cursor-light.svg"> <img alt="Open in Cursor" src="https://cursor.com/open-in-cursor.svg"> </picture> </a> <a href="https://cursor.com/agents?id=bc-b8d31867-1034-4374-852c-b92ca69cc399"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-web-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-web-light.svg"> <img alt="Open in Web" src="https://cursor.com/open-in-web.svg"> </picture> </a> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Nicholas Tindle <ntindle@users.noreply.github.com> |
||
|
|
8ac2228e1e |
chore(frontend/deps): Upgrade @sentry/nextjs from 9.42.0 to 10.8.0 (#10802)
Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 9.42.0 to 10.8.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/releases"><code>@sentry/nextjs</code>'s releases</a>.</em></p> <blockquote> <h2>10.8.0</h2> <h3>Important Changes</h3> <ul> <li> <p><strong>feat(sveltekit): Add Compatibility for builtin SvelteKit Tracing (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17423">#17423</a>)</strong></p> <p>This release makes the <code>@sentry/sveltekit</code> SDK compatible with SvelteKit's native <a href="https://svelte.dev/docs/kit/observability">observability support</a> introduced in SvelteKit version <code>2.31.0</code>. If you enable both, instrumentation and tracing, the SDK will now initialize early enough to set up additional instrumentation like database queries and it will pick up spans emitted from SvelteKit.</p> <p>We will follow up with docs how to set up the SDK soon. For now, If you're on SvelteKit version <code>2.31.0</code> or newer, you can easily opt into the new feature:</p> <ol> <li> <p>Enable <a href="https://svelte.dev/docs/kit/observability">experimental tracing and instrumentation support</a> in <code>svelte.config.js</code>:</p> </li> <li> <p>Move your <code>Sentry.init()</code> call from <code>src/hooks.server.(js|ts)</code> to the new <code>instrumentation.server.(js|ts)</code> file:</p> <pre lang="ts"><code>// instrumentation.server.ts import * as Sentry from '@sentry/sveltekit'; <p>Sentry.init({<br /> dsn: '...',<br /> // rest of your config<br /> });<br /> </code></pre></p> <p>The rest of your Sentry config in <code>hooks.server.ts</code> (<code>sentryHandle</code> and <code>handleErrorWithSentry</code>) should stay the same.</p> </li> </ol> <p>If you prefer to stay on the hooks-file based config for now, the SDK will continue to work as previously.</p> <p>Thanks to the Svelte team and <a href="https://github.com/elliott-with-the-longest-name-on-github"><code>@elliott-with-the-longest-name-on-github</code></a> for implementing observability support and for reviewing our PR!</p> </li> </ul> <h3>Other Changes</h3> <ul> <li>fix(react): Avoid multiple name updates on navigation spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17438">#17438</a>)</li> </ul> <!-- raw HTML omitted --> <ul> <li>test(profiling): Add tests for current state of profiling (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17470">#17470</a>)</li> </ul> <!-- raw HTML omitted --> <h2>Bundle size 📦</h2> <table> <thead> <tr> <th>Path</th> <th>Size</th> </tr> </thead> <tbody> <tr> <td><code>@sentry/browser</code></td> <td>23.59 KB</td> </tr> <tr> <td><code>@sentry/browser</code> - with treeshaking flags</td> <td>22.2 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing)</td> <td>38.94 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay)</td> <td>76.4 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay) - with treeshaking flags</td> <td>66.43 KB</td> </tr> </tbody> </table> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md"><code>@sentry/nextjs</code>'s changelog</a>.</em></p> <blockquote> <h2>10.8.0</h2> <h3>Important Changes</h3> <ul> <li> <p><strong>feat(sveltekit): Add Compatibility for builtin SvelteKit Tracing (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17423">#17423</a>)</strong></p> <p>This release makes the <code>@sentry/sveltekit</code> SDK compatible with SvelteKit's native <a href="https://svelte.dev/docs/kit/observability">observability support</a> introduced in SvelteKit version <code>2.31.0</code>. If you enable both, instrumentation and tracing, the SDK will now initialize early enough to set up additional instrumentation like database queries and it will pick up spans emitted from SvelteKit.</p> <p>We will follow up with docs how to set up the SDK soon. For now, If you're on SvelteKit version <code>2.31.0</code> or newer, you can easily opt into the new feature:</p> <ol> <li> <p>Enable <a href="https://svelte.dev/docs/kit/observability">experimental tracing and instrumentation support</a> in <code>svelte.config.js</code>:</p> </li> <li> <p>Move your <code>Sentry.init()</code> call from <code>src/hooks.server.(js|ts)</code> to the new <code>instrumentation.server.(js|ts)</code> file:</p> <pre lang="ts"><code>// instrumentation.server.ts import * as Sentry from '@sentry/sveltekit'; <p>Sentry.init({<br /> dsn: '...',<br /> // rest of your config<br /> });<br /> </code></pre></p> <p>The rest of your Sentry config in <code>hooks.server.ts</code> (<code>sentryHandle</code> and <code>handleErrorWithSentry</code>) should stay the same.</p> </li> </ol> <p>If you prefer to stay on the hooks-file based config for now, the SDK will continue to work as previously.</p> <p>Thanks to the Svelte team and <a href="https://github.com/elliott-with-the-longest-name-on-github"><code>@elliott-with-the-longest-name-on-github</code></a> for implementing observability support and for reviewing our PR!</p> </li> </ul> <h3>Other Changes</h3> <ul> <li>fix(react): Avoid multiple name updates on navigation spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17438">#17438</a>)</li> </ul> <!-- raw HTML omitted --> <ul> <li>test(profiling): Add tests for current state of profiling (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17470">#17470</a>)</li> </ul> <!-- raw HTML omitted --> <h2>10.7.0</h2> <h3>Important Changes</h3> <ul> <li><strong>feat(cloudflare): Add <code>instrumentPrototypeMethods</code> option to instrument RPC methods for DurableObjects (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17424">#17424</a>)</strong></li> </ul> <p>By default, <code>Sentry.instrumentDurableObjectWithSentry</code> will not wrap any RPC methods on the prototype. To enable wrapping for RPC methods, set <code>instrumentPrototypeMethods</code> to <code>true</code> or, if performance is a concern, a list of only the methods you want to instrument:</p> <pre lang="js"><code></tr></table> </code></pre> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
da6e1ad26d |
refactor(frontend): enhance builder UI for better performance (#10922)
### Changes 🏗️ This PR introduces a new high-performance builder interface for the AutoGPT platform, implementing a React Flow-based visual editor with optimized state management and rendering. #### Key Changes: 1. **New Flow Editor Implementation** - Built on React Flow for efficient graph rendering and interaction - Implements a node-based visual workflow builder with custom nodes and edges - Dynamic form generation using React JSON Schema Form (RJSF) for block inputs - Intelligent connection handling with visual feedback 2. **State Management Optimization** - Added Zustand for lightweight, performant state management - Separated node and edge stores for better data isolation - Reduced unnecessary re-renders through granular state updates 3. **Dual Builder View (Temporary)** - Added toggle between old and new builder implementations - Allows A/B testing and gradual migration - Feature flagged for controlled rollout 4. **Enhanced UI Components** - Custom form widgets for various input types (date, time, file, etc.) - Array and object editors with improved UX - Connection handles with visual state indicators - Advanced mode toggle for complex configurations 5. **Architecture Improvements** - Modular component structure for better code organization - Comprehensive documentation for the new system - Type-safe implementation with TypeScript #### Dependencies Added: - `zustand` (v5.0.2) - State management - `@rjsf/core` (v5.22.8) - JSON Schema Form core - `@rjsf/utils` (v5.22.8) - RJSF utilities - `@rjsf/validator-ajv8` (v5.22.8) - Schema validation ### Performance Improvements 🚀 - **Reduced Re-renders**: Zustand's shallow comparison and selective subscriptions minimize unnecessary component updates - **Optimized Graph Rendering**: React Flow provides efficient canvas-based rendering for large workflows - **Lazy Loading**: Components are loaded on-demand reducing initial bundle size - **Memoized Computations**: Heavy calculations are cached to avoid redundant processing ### Test Plan 📋 #### 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 Checklist: - [x] Create a new agent from scratch with at least 5 blocks - [x] Connect blocks and verify connections render correctly - [x] Switch between old and new builder views - [x] Test all form input types (text, number, boolean, array, object) - [x] Verify data persistence when switching views - [x] Test advanced mode toggle functionality - [x] Performance test with 50+ blocks to verify smooth interaction ### Migration Strategy The implementation includes a temporary toggle to switch between the old and new builder. This allows for: - Gradual user migration - A/B testing to measure performance improvements - Fallback option if issues are discovered - Collecting user feedback before full rollout ### Documentation Comprehensive documentation has been added: - `/components/FlowEditor/docs/README.md` - Architecture overview and store management - `/components/FlowEditor/docs/FORM_CREATOR.md` - Detailed form system documentation --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
ebeefc96e8 |
feat(backend): implement caching layer for store API endpoints (Part 1) (#10975)
## Summary
This PR introduces comprehensive caching for the Store API endpoints to
improve performance and reduce database load. This is **Part 1** in a
series of PRs to add comprehensive caching across our entire API.
### Key improvements:
- Implements caching layer using the existing `@cached` decorator from
`autogpt_libs.utils.cache`
- Reduces database queries by 80-90% for frequently accessed public data
- Built-in thundering herd protection prevents database overload during
cache expiry
- Selective cache invalidation ensures data freshness when mutations
occur
## Details
### Cached endpoints with TTLs:
- **Public data (5-10 min TTL):**
- `/agents` - Store agents list (2 min)
- `/agents/{username}/{agent_name}` - Agent details (5 min)
- `/graph/{store_listing_version_id}` - Agent graphs (10 min)
- `/agents/{store_listing_version_id}` - Agent by version (10 min)
- `/creators` - Creators list (5 min)
- `/creator/{username}` - Creator details (5 min)
- **User-specific data (1 min TTL):**
- `/profile` - User profiles (5 min)
- `/myagents` - User's own agents (1 min)
- `/submissions` - User's submissions (1 min)
### Cache invalidation strategy:
- Profile updates → clear user's profile cache
- New reviews → clear specific agent cache + agents list
- New submissions → clear agents list + user's caches
- Submission edits → clear related version caches
### Cache management endpoints:
- `GET /cache/info` - Monitor cache statistics
- `POST /cache/clear` - Clear all caches
- `POST /cache/clear/{cache_name}` - Clear specific cache
## Changes
<!-- REQUIRED: Bullet point summary of changes -->
- Added caching decorators to all suitable GET endpoints in store routes
- Implemented cache invalidation on data mutations (POST/PUT/DELETE)
- Added cache management endpoints for monitoring and manual clearing
- Created comprehensive test suite for cache_delete functionality
- Verified thundering herd protection works correctly
## Testing
<!-- How to test your changes -->
- ✅ Created comprehensive test suite (`test_cache_delete.py`)
validating:
- Selective cache deletion works correctly
- Cache entries are properly invalidated on mutations
- Other cache entries remain unaffected
- cache_info() accurately reflects state
- ✅ Tested thundering herd protection with concurrent requests
- ✅ Verified all endpoints return correct data with and without cache
## Checklist
<!-- REQUIRED: Be sure to check these off before marking the PR ready
for review. -->
- [x] I have self-reviewed this PR's diff, line by line
- [x] I have updated and tested the software architecture documentation
(if applicable)
- [x] I have run the agent to verify that it still works (if applicable)
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
|
||
|
|
0c363a1cea |
fix(frontend): force dynamic rendering on marketplace (#10957)
## Changes 🏗️ When building on Vercel: ``` at Object.start (.next/server/chunks/2744.js:1:312830) { description: "Route /marketplace couldn't be rendered statically because it used `cookies`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error", digest: 'DYNAMIC_SERVER_USAGE' } Failed to get server auth token: Error: Dynamic server usage: Route /marketplace couldn't be rendered statically because it used `cookies`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error at r (.next/server/chunks/8450.js:22:7298) at n (.next/server/chunks/4735.js:1:37020) at g (.next/server/chunks/555.js:1:31925) at m (.next/server/chunks/555.js:1:87056) at h (.next/server/chunks/555.js:1:932) at k (.next/server/chunks/555.js:1:25195) at queryFn (.next/server/chunks/555.js:1:25590) at Object.f [as fn] (.next/server/chunks/2744.js:1:316625) at q (.next/server/chunks/2744.js:1:312288) at Object.start (.next/server/chunks/2744.js:1:312830) { description: "Route /marketplace couldn't be rendered statically because it used `cookies`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error", digest: 'DYNAMIC_SERVER_USAGE' } ``` That's because the `/marketplace` page prefetches the store agents data on the server, and that query uses `cookies` for Auth. In theory, those endpoints can be called without auth, but I think if you are logged that affects the results. The simpler for now is to tell Next.js to not try to statically render it and render on the fly with caching. According to AI we shouldn't see much difference performance wise: > Short answer: Usually no noticeable slowdown. You’ll trade a small TTFB increase (server renders per request) for correct behavior with cookies. Overall interactivity stays the same since we still dehydrate React Query data. Why it’s fine: Server already had to fetch marketplace data; doing it at request-time vs build-time is roughly the same cost for users. Hydration uses the prefetched data, avoiding extra client round-trips. If you want extra speed: If those endpoints don’t need auth, we can skip reading cookies during server prefetch and enable ISR (e.g., revalidate=60) for partial caching. Or move the cookie-dependent parts to the client and keep the page static. ## 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] Page load marketplace is fine and not slow - [x] No build cookies errors ### For configuration changes: None |
||
|
|
e5d870a348 |
refactor(frontend): move old components to __legacy__ (#10953)
## Changes 🏗️ Moving non-design-system components ( old ) to a `components/__legacy__` folder 📁 so like this is more obvious for developers that they should not import them or use them on new features. What is now top-level in `/components` is what it is actively maintained. Document some existing components like `<Alert />`. More on this coming on follow-up PRs. ## Checklist 📋 ### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Test and types pass on the CI - [x] Run app locally, click around, looks good ### For configuration changes: None |
||
|
|
3f19cba28f |
fix(frontend/builder): Fix moved blocks disappearing on save (#10951)
- Resolves #10926 - Fixes a bug introduced in #10779 ### Changes 🏗️ - Fix `.metadata.position` in graph save payload - Make node reconciliation after graph save more robust ### 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] Moved nodes don't disappear on graph save |
||
|
|
f283e6c514 |
refactor(frontend): cleanup of components folder (2/3) (#10942)
## Changes 🏗️ Following up my initial PR to tidy up the `components` folder https://github.com/Significant-Gravitas/AutoGPT/pull/10940. This is mostly moving files around and renaming some + documenting them on the design system as needed. Should be pretty safe as long as types on the CI pass. ## 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] Click around, looks ok - [x] Test and types pass on the CI ### For configuration changes: None |
||
|
|
9fc2101e7e |
refactor(frontend): tidy up on components folder (#10940)
## Changes 🏗️ Re-organise the `components` folder, moving things which are not re-used across screens or part of the design system out of it. ## 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] It works and test/types pass CI wise ### For configuration changes: None |
||
|
|
634f826d82 | Merge branch 'master' into dev | ||
|
|
6d6bf308fc |
fix(frontend): marketplace page load and caching (#10934)
## Changes 🏗️ ### **Server-Side:** - ✅ **ISR Cache**: Page cached for 60 seconds, served instantly - ✅ **Prefetch**: All API calls made on server, not client - ✅ **Static Generation**: HTML pre-rendered with data - ✅ **Streaming**: Loading states show immediately ### **Client-Side:** - ✅ **No API Calls**: Data hydrated from server cache - ✅ **Fast Hydration**: React Query uses prefetched data - ✅ **Smart Caching**: 60s stale time prevents unnecessary requests - ✅ **Progressive Loading**: Suspense boundaries for better UX ### **🔄 Caching Strategy:** 1. **Server**: ISR cache (60s) → API calls → Static HTML 2. **CDN**: Cached HTML served instantly 3. **Client**: Hydrated data from server → No additional API calls 4. **Background**: ISR regenerates stale pages automatically ### **🎯 Result:** - **First Visit**: Instant HTML + hydrated data (no client API calls) - **Subsequent Visits**: Instant cached page - **Background Updates**: Automatic revalidation every 60s - **Optimal Performance**: Server-side rendering + client-side caching ## 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] Marketplace page loads are faster ### For configuration changes: None |
||
|
|
dd84fb5c66 |
feat(platform): Add public share links for agent run results (#10938)
<!-- Clearly explain the need for these changes: --> This PR adds the ability for users to share their agent run results publicly via shareable links. Users can generate a public link that allows anyone to view the outputs of a specific agent execution without requiring authentication. This feature enables users to share their agent results with clients, colleagues, or the community. https://github.com/user-attachments/assets/5508f430-07d0-4cd3-87bc-301b0b005cce ### Changes 🏗️ #### Backend Changes - **Database Schema**: Added share tracking fields to `AgentGraphExecution` model in Prisma schema: - `isShared`: Boolean flag to track if execution is shared - `shareToken`: Unique token for the share URL - `sharedAt`: Timestamp when sharing was enabled - **API Endpoints**: Added three new REST endpoints in `/backend/backend/server/routers/v1.py`: - `POST /graphs/{graph_id}/executions/{graph_exec_id}/share`: Enable sharing for an execution - `DELETE /graphs/{graph_id}/executions/{graph_exec_id}/share`: Disable sharing - `GET /share/{share_token}`: Retrieve shared execution data (public endpoint) - **Data Models**: - Created `SharedExecutionResponse` model for public-safe execution data - Added `ShareRequest` and `ShareResponse` Pydantic models for type-safe API responses - Updated `GraphExecutionMeta` to include share status fields - **Security**: - All share management endpoints verify user ownership before allowing changes - Public endpoint only exposes OUTPUT block data, no intermediate execution details - Share tokens are UUIDs for security #### Frontend Changes - **ShareButton Component** (`/frontend/src/components/ShareButton.tsx`): - Modal dialog for managing share settings - Copy-to-clipboard functionality for share links - Clear warnings about public accessibility - Uses Orval-generated API hooks for enable/disable operations - **Share Page** (`/frontend/src/app/(no-navbar)/share/[token]/page.tsx`): - Clean, navigation-free page for viewing shared executions - Reuses existing `RunOutputs` component for consistent output rendering - Proper error handling for invalid/disabled share links - Loading states during data fetch - **API Integration**: - Fixed custom mutator to properly set Content-Type headers for POST requests with empty bodies - Generated TypeScript types via Orval for type-safe API 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: <!-- Test plan: --> - [x] Enable sharing for an agent execution and verify share link is generated - [x] Copy share link and verify it copies to clipboard - [x] Open share link in incognito/private browser and verify outputs are displayed - [x] Disable sharing and verify share link returns 404 - [x] Try to enable/disable sharing for another user's execution (should fail with 404) - [x] Verify share page shows proper loading and error states - [x] Test that only OUTPUT blocks are shown in shared view, no intermediate data = |
||
|
|
33679f3ffe |
feat(platform): Add instructions field to agent submissions (#10931)
## Summary Added an optional "Instructions" field for agent submissions to help users understand how to run agents and what to expect. <img width="1000" alt="image" src="https://github.com/user-attachments/assets/015c4f0b-4bdd-48df-af30-9e52ad283e8b" /> <img width="1000" alt="image" src="https://github.com/user-attachments/assets/3242cee8-a4ad-4536-bc12-64b491a8ef68" /> <img width="1000" alt="image" src="https://github.com/user-attachments/assets/a9b63e1c-94c0-41a4-a44f-b9f98e446793" /> ### Changes Made **Backend:** - Added `instructions` field to `AgentGraph` and `StoreListingVersion` database models - Updated `StoreSubmission`, `LibraryAgent`, and related Pydantic models - Modified store submission API routes to handle instructions parameter - Updated all database functions to properly save/retrieve instructions field - Added graceful handling for cases where database doesn't yet have the field **Frontend:** - Added instructions field to agent submission flow (PublishAgentModal) - Positioned below "Recommended Schedule" section as specified - Added instructions display in library/run flow (RunAgentModal) - Positioned above credentials section with informative blue styling - Added proper form validation with 2000 character limit - Updated all TypeScript types and API client interfaces ### Key Features - ✅ Optional field - fully backward compatible - ✅ Proper positioning in both submission and run flows - ✅ Character limit validation (2000 chars) - ✅ User-friendly display with "How to use this agent" styling - ✅ Only shows when instructions are provided ### Testing - Verified Pydantic model validation works correctly - Confirmed schema validation enforces character limits - Tested graceful handling of missing database fields - Code formatting and linting completed ## Test plan - [ ] Test agent submission with instructions field - [ ] Test agent submission without instructions (backward compatibility) - [ ] Verify instructions display correctly in run modal - [ ] Test character limit validation - [ ] Verify database migrations work properly 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
7d2ab61546 |
feat(platform): Disable Trigger Setup through Builder (#10418)
We want users to set up triggers through the Library rather than the Builder. - Resolves #10413 https://github.com/user-attachments/assets/515ed80d-6569-4e26-862f-2a663115218c ### Changes 🏗️ - Update node UI to push users to Library for trigger set-up and management - Add note redirecting to Library for trigger set-up - Remove webhook status indicator and webhook URL section - Add `libraryAgent: LibraryAgent` to `BuilderContext` for access inside `CustomNode` - Move library agent loader from `FlowEditor` to `useAgentGraph` - Implement `migrate_legacy_triggered_graphs` migrator function - Remove `on_node_activate` hook (which previously handled webhook setup) - Propagate `created_at` from DB to `GraphModel` and `LibraryAgentPreset` models ### 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] Existing node triggers are converted to triggered presets (visible in the Library) - [x] Converted triggered presets work - [x] Trigger node inputs are disabled and handles are hidden - [x] Trigger node message links to the correct Library Agent when saved |
||
|
|
f82adeb959 |
feat(library): Add agent favoriting functionality (#10828)
### Need 💡 This PR introduces the ability for users to "favorite" agents in the library view, enhancing agent discoverability and organization. Favorited agents will be visually marked with a heart icon and prioritized in the library list, appearing at the top. This feature is distinct from pinning specific agent runs. ### Changes 🏗️ * **Backend:** * Updated `LibraryAgent` model in `backend/server/v2/library/model.py` to include the `is_favorite` field when fetching from the database. * **Frontend:** * Updated `LibraryAgent` TypeScript type in `autogpt-server-api/types.ts` to include `is_favorite`. * Modified `LibraryAgentCard.tsx` to display a clickable heart icon, indicating the favorite status. * Implemented a click handler on the heart icon to toggle the `is_favorite` status via an API call, including loading states and toast notifications. * Updated `useLibraryAgentList.ts` to implement client-side sorting, ensuring favorited agents appear at the top of the list. * Updated `openapi.json` to include `is_favorite` in the `LibraryAgent` schema and regenerated frontend API types. * Installed `@orval/core` for API generation. ### 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] Verify that the heart icon is displayed correctly on `LibraryAgentCard` for both favorited (filled red) and unfavorited (outlined gray) agents. - [x] Click the heart icon on an unfavorited agent: - [x] Confirm the icon changes to filled red. - [x] Verify a "Added to favorites" toast notification appears. - [x] Confirm the agent moves to the top of the library list. - [x] Check that the agent card does not navigate to the agent details page. - [x] Click the heart icon on a favorited agent: - [x] Confirm the icon changes to outlined gray. - [x] Verify a "Removed from favorites" toast notification appears. - [x] Confirm the agent's position adjusts in the list (no longer at the very top unless other sorting criteria apply). - [x] Check that the agent card does not navigate to the agent details page. - [x] Test the loading state: rapidly click the heart icon and observe the `opacity-50 cursor-not-allowed` styling. - [x] Verify that the sorting correctly places all favorited agents at the top, maintaining their original relative order within the favorited group, and the same for unfavorited agents. #### For configuration changes: - [ ] `.env.default` is updated or already compatible with my changes - [ ] `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**) --- <a href="https://cursor.com/background-agent?bcId=bc-43e8f98c-e4ea-4149-afc8-5eea3d1ab439"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-cursor-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-cursor-light.svg"> <img alt="Open in Cursor" src="https://cursor.com/open-in-cursor.svg"> </picture> </a> <a href="https://cursor.com/agents?id=bc-43e8f98c-e4ea-4149-afc8-5eea3d1ab439"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-web-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-web-light.svg"> <img alt="Open in Web" src="https://cursor.com/open-in-web.svg"> </picture> </a> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> Co-authored-by: Nicholas Tindle <ntindle@users.noreply.github.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
6f08a1cca7 | fix: the api key credentials weren't registering correctly (#10936) | ||
|
|
1ddf92eed4 |
fix(frontend): new agent run page design refinements (#10924)
## Changes 🏗️ Implements all the following changes... 1. The margins between the runs, on the left hand side.. reduced them around `6px` ? 2. Make agent inputs full width 3. Make "Schedule setup" section displayed in a second modal 4. When an agent is running, we should not show the "Delete agent" button 5. Copy changes around the actions for agent/runs 6. Large button height should be `52px` 7. Fix margins between + New Run button and the runs & scheduled menu 8. Make border white on cards Also... - improve the naming of some components to reflect better their context/usage - show on the inputs section when an agent is using already API keys or credentials - fix runs/schedules not auto-selecting once created ## 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 with the new agent runs page enabled - [x] Test the above ### For configuration changes: None |
||
|
|
381558342a |
fix(frontend/builder): Fix moved blocks disappearing on no-op save (#10927)
- Resolves #10926 ### Changes 🏗️ - Fix save no-op if graph has no changes ### 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] Saving a graph after only moving nodes doesn't make those nodes disappear |
||
|
|
f262bb9307 |
fix(platform): add timezone awareness to scheduler (#10921)
### Changes 🏗️ This PR restores and improves timezone awareness in the scheduler service to correctly handle daylight savings time (DST) transitions. The changes ensure that scheduled agents run at the correct local time even when crossing DST boundaries. #### Backend Changes: - **Scheduler Service (`scheduler.py`):** - Added `user_timezone` parameter to `add_graph_execution_schedule()` method - CronTrigger now uses the user's timezone instead of hardcoded UTC - Added timezone field to `GraphExecutionJobInfo` for visibility - Falls back to UTC with a warning if no timezone is provided - Extracts and includes timezone information from job triggers - **API Router (`v1.py`):** - Added optional `timezone` field to `ScheduleCreationRequest` - Fetches user's saved timezone from profile if not provided in request - Passes timezone to scheduler client when creating schedules - Converts `next_run_time` back to user timezone for display #### Frontend Changes: - **Schedule Creation Modal:** - Now sends user's timezone with schedule creation requests - Uses browser's local timezone if user hasn't set one in their profile - **Schedule Display Components:** - Updated to show timezone information in schedule details - Improved formatting of schedule information in monitoring views - Fixed schedule table display to properly show timezone-aware times - **Cron Expression Utils:** - Removed UTC conversion logic from `formatTime()` function - Cron expressions are now stored in the schedule's timezone - Simplified humanization logic since no conversion is needed - **API Types & OpenAPI:** - Added `timezone` field to schedule-related types - Updated OpenAPI schema to include timezone parameter ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [ ] I have tested my changes according to the test plan: ### Test Plan 🧪 #### 1. Schedule Creation Tests - [ ] Create a new schedule and verify the timezone is correctly saved - [ ] Create a schedule without specifying timezone - should use user's profile timezone - [ ] Create a schedule when user has no profile timezone - should default to UTC with warning #### 2. Daylight Savings Time Tests - [ ] Create a schedule for a daily task at 2:00 PM in a DST timezone (e.g., America/New_York) - [ ] Verify the schedule runs at 2:00 PM local time before DST transition - [ ] Verify the schedule still runs at 2:00 PM local time after DST transition - [ ] Check that the next_run_time adjusts correctly across DST boundaries #### 3. Display and UI Tests - [ ] Verify timezone is displayed in schedule details view - [ ] Verify schedule times are shown in user's local timezone in monitoring page - [ ] Verify cron expression humanization shows correct local times - [ ] Check that schedule table shows timezone information #### 4. API Tests - [ ] Test schedule creation API with timezone parameter - [ ] Test schedule creation API without timezone parameter - [ ] Verify GET schedules endpoint returns timezone information - [ ] Verify next_run_time is converted to user timezone in responses #### 5. Edge Cases - [ ] Test with various timezones (UTC, EST, PST, Europe/London, Asia/Tokyo) - [ ] Test with invalid timezone strings - should handle gracefully - [ ] Test scheduling at DST transition times (2:00 AM during spring forward) - [ ] Verify existing schedules without timezone info default to UTC #### 6. Regression Tests - [ ] Verify existing schedules continue to work - [ ] Verify schedule deletion still works - [ ] Verify schedule listing endpoints work correctly - [ ] Check that scheduled graph executions trigger as expected --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
5a6978b07d |
feat(frontend): Add expandable view for block output (#10773)
### Need for these changes 💥 https://github.com/user-attachments/assets/5b9007a1-0c49-44c6-9e8b-52bf23eec72c Users currently cannot view the full output result from a block when inspecting the Output Data History panel or node previews, as the content is clipped. This makes debugging and analysis of complex outputs difficult, forcing users to copy data to external editors. This feature improves developer efficiency and user experience, especially for blocks with large or nested responses, and reintroduces a highly requested functionality that existed previously. ### Changes 🏗️ * **New `ExpandableOutputDialog` component:** Introduced a reusable modal dialog (`ExpandableOutputDialog.tsx`) designed to display complete, untruncated output data. * **`DataTable.tsx` enhancement:** Added an "Expand" button (Maximize2 icon) to each data entry in the Output Data History panel. This button appears on hover and opens the `ExpandableOutputDialog` for a full view of the data. * **`NodeOutputs.tsx` enhancement:** Integrated the "Expand" button into node output previews, allowing users to view full output data directly from the node details. * The `ExpandableOutputDialog` provides a large, scrollable content area, displaying individual items in organized cards, with options to copy individual items or all data, along with execution ID and pin name metadata. ### 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] Navigate to an agent session with executed blocks. - [x] Open the Output Data History panel. - [x] Hover over a data entry to reveal the "Expand" button. - [x] Click the "Expand" button and verify the `ExpandableOutputDialog` opens, displaying the full, untruncated content. - [x] Verify scrolling works for large outputs within the dialog. - [x] Test "Copy Item" and "Copy All" buttons within the dialog. - [x] Navigate to a custom node in the graph. - [x] Inspect a node's output (if applicable). - [x] Hover over the output data to reveal the "Expand" button. - [x] Click the "Expand" button and verify the `ExpandableOutputDialog` opens, displaying the full content. --- Linear Issue: [OPEN-2593](https://linear.app/autogpt/issue/OPEN-2593/add-expandable-view-for-full-block-output-preview) <a href="https://cursor.com/background-agent?bcId=bc-27badeb8-2b49-4286-aa16-8245dfd33bfc"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-cursor-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-cursor-light.svg"> <img alt="Open in Cursor" src="https://cursor.com/open-in-cursor.svg"> </picture> </a> <a href="https://cursor.com/agents?id=bc-27badeb8-2b49-4286-aa16-8245dfd33bfc"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-web-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-web-light.svg"> <img alt="Open in Web" src="https://cursor.com/open-in-web.svg"> </picture> </a> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> Co-authored-by: Nicholas Tindle <ntindle@users.noreply.github.com> |
||
|
|
339ec733cb |
fix(platform): add timezone awareness to scheduler (#10921)
### Changes 🏗️ This PR restores and improves timezone awareness in the scheduler service to correctly handle daylight savings time (DST) transitions. The changes ensure that scheduled agents run at the correct local time even when crossing DST boundaries. #### Backend Changes: - **Scheduler Service (`scheduler.py`):** - Added `user_timezone` parameter to `add_graph_execution_schedule()` method - CronTrigger now uses the user's timezone instead of hardcoded UTC - Added timezone field to `GraphExecutionJobInfo` for visibility - Falls back to UTC with a warning if no timezone is provided - Extracts and includes timezone information from job triggers - **API Router (`v1.py`):** - Added optional `timezone` field to `ScheduleCreationRequest` - Fetches user's saved timezone from profile if not provided in request - Passes timezone to scheduler client when creating schedules - Converts `next_run_time` back to user timezone for display #### Frontend Changes: - **Schedule Creation Modal:** - Now sends user's timezone with schedule creation requests - Uses browser's local timezone if user hasn't set one in their profile - **Schedule Display Components:** - Updated to show timezone information in schedule details - Improved formatting of schedule information in monitoring views - Fixed schedule table display to properly show timezone-aware times - **Cron Expression Utils:** - Removed UTC conversion logic from `formatTime()` function - Cron expressions are now stored in the schedule's timezone - Simplified humanization logic since no conversion is needed - **API Types & OpenAPI:** - Added `timezone` field to schedule-related types - Updated OpenAPI schema to include timezone parameter ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [ ] I have tested my changes according to the test plan: ### Test Plan 🧪 #### 1. Schedule Creation Tests - [ ] Create a new schedule and verify the timezone is correctly saved - [ ] Create a schedule without specifying timezone - should use user's profile timezone - [ ] Create a schedule when user has no profile timezone - should default to UTC with warning #### 2. Daylight Savings Time Tests - [ ] Create a schedule for a daily task at 2:00 PM in a DST timezone (e.g., America/New_York) - [ ] Verify the schedule runs at 2:00 PM local time before DST transition - [ ] Verify the schedule still runs at 2:00 PM local time after DST transition - [ ] Check that the next_run_time adjusts correctly across DST boundaries #### 3. Display and UI Tests - [ ] Verify timezone is displayed in schedule details view - [ ] Verify schedule times are shown in user's local timezone in monitoring page - [ ] Verify cron expression humanization shows correct local times - [ ] Check that schedule table shows timezone information #### 4. API Tests - [ ] Test schedule creation API with timezone parameter - [ ] Test schedule creation API without timezone parameter - [ ] Verify GET schedules endpoint returns timezone information - [ ] Verify next_run_time is converted to user timezone in responses #### 5. Edge Cases - [ ] Test with various timezones (UTC, EST, PST, Europe/London, Asia/Tokyo) - [ ] Test with invalid timezone strings - should handle gracefully - [ ] Test scheduling at DST transition times (2:00 AM during spring forward) - [ ] Verify existing schedules without timezone info default to UTC #### 6. Regression Tests - [ ] Verify existing schedules continue to work - [ ] Verify schedule deletion still works - [ ] Verify schedule listing endpoints work correctly - [ ] Check that scheduled graph executions trigger as expected --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
6575b655f0 |
fix(frontend): improve agent runs page loading state (#10914)
## Changes 🏗️ https://github.com/user-attachments/assets/356e5364-45be-4f6e-bd1c-cc8e42bf294d And also tidy up the some of the logic around hooks. I also added a `okData` helper to avoid having to type case ( `as` ) so much with the generated types ( given the `response` is a union depending on `status: 200 | 400 | 401` ... ) ## 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 PR locally with the `new-agent-runs` flag enabled - [x] Check the nice loading state ### For configuration changes: None |
||
|
|
7c2df24d7c |
fix(frontend): delete actions behind dialogs in agent runs view (#10915)
## Changes 🏗️ <img width="800" height="630" alt="Screenshot 2025-09-12 at 17 38 34" src="https://github.com/user-attachments/assets/103d7e10-e924-4831-b0e7-b7df608a205f" /> <img width="800" height="524" alt="Screenshot 2025-09-12 at 17 38 30" src="https://github.com/user-attachments/assets/aeec2ac7-4bea-4ec9-be0c-4491104733cb" /> <img width="800" height="750" alt="Screenshot 2025-09-12 at 17 38 26" src="https://github.com/user-attachments/assets/e0b28097-8352-4431-ae4a-9dc3e3bcf9eb" /> - All the `Delete` actions on the new Agent Library Runs page should be behind confirmation dialogs - Re-arrange the file structure a bit 💆🏽 - Make the buttons min-width a bit more generous ## 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] Test the above #### For configuration changes: None |
||
|
|
6a2d7e0fb0 |
fix(frontend): handle avatar missing images better (#10903)
## Changes 🏗️ I think this helps `next/image` being more tolerant when optimising images from certain origins according to Claude. ## 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] Deploy preview to dev - [x] Verify avatar images load better ### For configuration changes: None |
||
|
|
f490b01abb |
feat(frontend): Add Vercel Analytics and Speed Insights (#10904)
## Summary - Added Vercel Analytics for tracking page views and user interactions - Added Vercel Speed Insights for monitoring Web Vitals and performance metrics - Fixed incorrect placement of SpeedInsights component (was between html and head tags) ## Changes - Import Analytics and SpeedInsights components from Vercel packages - Place both components correctly within the body tag - Ensure proper HTML structure and Next.js best practices ## Test plan - [x] Verify components are imported correctly - [x] Confirm no HTML validation errors - [x] Test that analytics work when deployed to Vercel - [x] Verify Speed Insights metrics are being collected |
||
|
|
e70c970ab6 |
feat(frontend): new <Avatar /> component using next/image (#10897)
## Changes 🏗️ <img width="800" height="648" alt="Screenshot 2025-09-10 at 22 00 01" src="https://github.com/user-attachments/assets/eb396d62-01f2-45e5-9150-4e01dfcb71d0" /><br /> Adds a new `<Avatar />` component and uses that across the app. Is a copy of [shadcn/avatar](https://duckduckgo.com/?q=shadcn+avatar&t=brave&ia=web) with the following modifications: - renders images with [`next/image`](https://duckduckgo.com/?q=next+image&t=brave&ia=web) by default - this ensures avatars rendered on the app are optimised and resized ✔️ - it will work as long as all the domains are white-listed in `nextjs.config.mjs` - allows to bypass and use a normal `<img />` tag via an `as` prop if needed - sometimes we might need to render images from a dynamic cdn 🤷🏽♂️ ## 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] ... ### For configuration changes: None |
||
|
|
3bbce71678 |
feat(builder): Block menu redesign - part 3 (#10864)
### Changes 🏗️ #### Block Menu Redesign - Part 3 This PR continues the block menu redesign effort, implementing the new content sections and improving the overall user experience. The changes focus on better organization, pagination, error handling, and visual consistency. #### Key Features Implemented: **1. New Content Organization** - **All Blocks Content**: Complete listing of all available blocks with category-based organization and infinite scroll support (`AllBlocksContent/`) - **My Agents Content**: Display and manage user's own agents with pagination (`MyAgentsContent/`) - **Marketplace Agents Content**: Browse and add marketplace agents with improved loading states (`MarketplaceAgentsContent/`) - **Integration Blocks**: Dedicated view for integration-specific blocks with better filtering (`IntegrationBlocks/`) - **Suggestion Content**: Smart suggestions based on user context and search history (`SuggestionContent/`) - **Integrations Content**: Browse available integrations in a dedicated view (`IntegrationsContent/`) **2. Enhanced UI Components** - **Paginated Lists**: New pagination components for blocks and integrations (`PaginatedBlocksContent/`, `PaginatedIntegrationList/`) - **Block List**: Reusable block list component with consistent styling (`BlockList/`) - **Improved Error Handling**: Comprehensive error states with retry functionality across all content types - **Loading States**: Skeleton loaders for better perceived performance **3. Infrastructure Improvements** - **Centralized Styles**: New `style.ts` file for consistent styling across components - **Better State Management**: Enhanced context provider with improved menu state handling - **Mock Flag Support**: Added feature flags for testing new block features - **Default State Enum**: Refactored to use enums for menu default states **4. Visual Assets** - Added 50+ new integration icons/logos for better visual representation - Updated existing integration images for consistency **5. Code Quality** - Improved error handling with proper error cards and retry mechanisms - Consistent formatting and import organization - Enhanced TypeScript types and interfaces - Better separation of concerns with dedicated hooks for each content type #### Technical Details: - **Files Changed**: 96 files - **Additions**: 1,380 lines - **Deletions**: 162 lines - **New Components**: 10+ new React components with dedicated hooks - **Integration Icons**: 50+ new PNG images for various integrations #### Breaking Changes: None - All changes are backwards compatible --- ### Test Plan 📋 - [x] Create a new agent and verify all blocks are accessible - [x] Test infinite scroll in "All Blocks" view - [x] Verify pagination works correctly in marketplace agents view - [x] Test error states by simulating network failures - [x] Check that all new integration icons display correctly - [x] Test adding agents from marketplace view - [x] Ensure skeleton loaders appear during data fetching > Generated by claude |
||
|
|
34fbf4377f |
fix(frontend): allow lazy loading of images (#10895)
The `next/image` component has inbuilt lazy loading enabled, but in some
components, we are bypassing it using a priority flag. So, I have
reverted this in this PR.
### 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] Lazy loading is working perfectly locally.
|