mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-08 22:58:01 -05:00
master
95 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
de78d062a9 |
refactor(backend/api): Clean up API file structure (#11629)
We'll soon be needing a more feature-complete external API. To make way for this, I'm moving some files around so: - We can more easily create new versions of our external API - The file structure of our internal API is more homogeneous These changes are quite opinionated, but IMO in any case they're better than the chaotic structure we have now. ### Changes 🏗️ - Move `backend/server` -> `backend/api` - Move `backend/server/routers` + `backend/server/v2` -> `backend/api/features` - Change absolute sibling imports to relative imports - Move `backend/server/v2/AutoMod` -> `backend/executor/automod` - Combine `backend/server/routers/analytics_*test.py` -> `backend/api/features/analytics_test.py` - Sort OpenAPI spec file ### 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: - CI tests - [x] Clicking around in the app -> no obvious breakage |
||
|
|
3dbc03e488 |
feat(platform): OAuth API & Single Sign-On (#11617)
We want to provide Single Sign-On for multiple AutoGPT apps that use the Platform as their backend. ### Changes 🏗️ Backend: - DB + logic + API for OAuth flow (w/ tests) - DB schema additions for OAuth apps, codes, and tokens - Token creation/validation/management logic - OAuth flow endpoints (app info, authorize, token exchange, introspect, revoke) - E2E OAuth API integration tests - Other OAuth-related endpoints (upload app logo, list owned apps, external `/me` endpoint) - App logo asset management - Adjust external API middleware to support auth with access token - Expired token clean-up job - Add `OAUTH_TOKEN_CLEANUP_INTERVAL_HOURS` setting (optional) - `poetry run oauth-tool`: dev tool to test the OAuth flows and register new OAuth apps - `poetry run export-api-schema`: dev tool to quickly export the OpenAPI schema (much quicker than spinning up the backend) Frontend: - Frontend UI for app authorization (`/auth/authorize`) - Re-redirect after login/signup - Frontend flow to batch-auth integrations on request of the client app (`/auth/integrations/setup-wizard`) - Debug `CredentialInputs` component - Add `/profile/oauth-apps` management page - Add `isOurProblem` flag to `ErrorCard` to hide action buttons when the error isn't our fault - Add `showTitle` flag to `CredentialsInput` to hide built-in title for layout reasons DX: - Add [API guide](https://github.com/Significant-Gravitas/AutoGPT/blob/pwuts/sso/docs/content/platform/integrating/api-guide.md) and [OAuth guide](https://github.com/Significant-Gravitas/AutoGPT/blob/pwuts/sso/docs/content/platform/integrating/oauth-guide.md) ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Manually verify test coverage of OAuth API tests - Test `/auth/authorize` using `poetry run oauth-tool test-server` - [x] Works - [x] Looks okay - Test `/auth/integrations/setup-wizard` using `poetry run oauth-tool test-server` - [x] Works - [x] Looks okay - Test `/profile/oauth-apps` page - [x] All owned OAuth apps show up - [x] Enabling/disabling apps works - [ ] ~~Uploading logos works~~ can only test this once deployed to dev #### For configuration changes: - [x] `.env.default` 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**) |
||
|
|
2f87e13d17 |
feat(platform): Chat system backend (#11230)
Implements foundational backend infrastructure for chat-based agent interaction system. Users will be able to discover, configure, and run marketplace agents through conversational AI. **Note:** Chat routes are behind a feature flag ### Changes 🏗️ **Core Chat System:** - Chat service with LLM orchestration (Claude 3.5 Sonnet, Haiku, GPT-4) - REST API routes for sessions and messages - Database layer for chat persistence - System prompts and configuration **5 Conversational Tools:** 1. `find_agent` - Search marketplace by keywords 2. `get_agent_details` - Fetch agent info, inputs, credentials 3. `get_required_setup_info` - Check user readiness, missing credentials 4. `run_agent` - Execute agents immediately 5. `setup_agent` - Configure scheduled execution with cron **Testing:** - 28 tests across chat tools (23 passing, 5 skipped for scheduler) - Test fixtures for simple, LLM, and Firecrawl agents - Service and data layer tests **Bug Fixes:** - Fixed `setup_agent.py` to create schedules instead of immediate execution - Fixed graph lookup to use UUID instead of username/slug - Fixed credential matching by provider/type instead of ID - Fixed internal tool calls to use `._execute()` instead of `.execute()` ### 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 28 chat tool tests pass (23 pass, 5 skip - require scheduler) - [x] Code formatting and linting pass - [x] Tool execution flow validated through unit tests - [x] Agent discovery, details, and execution tested - [x] Credential parsing and matching tested #### For configuration changes: - [x] `.env.default` 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**) No configuration changes required - all existing settings compatible. |
||
|
|
a78b08f5e7 |
feat(platform): implement admin user impersonation with header-based authentication (#11298)
## Summary Implement comprehensive admin user impersonation functionality to enable admins to act on behalf of any user for debugging and support purposes. ## 🔐 Security Features - **Admin Role Validation**: Only users with 'admin' role can impersonate others - **Header-Based Authentication**: Uses `X-Act-As-User-Id` header for impersonation requests - **Comprehensive Audit Logging**: All impersonation attempts logged with admin details - **Secure Error Handling**: Proper HTTP 403/401 responses for unauthorized access - **SSR Safety**: Client-side environment checks prevent server-side rendering issues ## 🏗️ Architecture ### Backend Implementation (`autogpt_libs/auth/dependencies.py`) - Enhanced `get_user_id` FastAPI dependency to process impersonation headers - Admin role verification using existing `verify_user()` function - Audit trail logging with admin email, user ID, and target user - Seamless integration with all existing routes using `get_user_id` dependency ### Frontend Implementation - **React Hook**: `useAdminImpersonation` for state management and API calls - **Security Banner**: Prominent warning when impersonation is active - **Admin Panel**: Control interface for starting/stopping impersonation - **Session Persistence**: Maintains impersonation state across page refreshes - **Full Page Refresh**: Ensures all data updates correctly on state changes ### API Integration - **Header Forwarding**: All API requests include impersonation header when active - **Proxy Support**: Next.js API proxy forwards headers to backend - **Generated Hooks**: Compatible with existing React Query API hooks - **Error Handling**: Graceful fallback for storage/authentication failures ## 🎯 User Experience ### For Admins 1. Navigate to `/admin/impersonation` 2. Enter target user ID (UUID format with validation) 3. System displays security banner during active impersonation 4. All API calls automatically use impersonated user context 5. Click "Stop Impersonation" to return to admin context ### Security Notice - **Audit Trail**: All impersonation logged with `logger.info()` including admin email - **Session Isolation**: Impersonation state stored in sessionStorage (not persistent) - **No Token Manipulation**: Uses header-based approach, preserving admin's JWT - **Role Enforcement**: Backend validates admin role on every impersonated request ## 🔧 Technical Details ### Constants & Configuration - `IMPERSONATION_HEADER_NAME = "X-Act-As-User-Id"` - `IMPERSONATION_STORAGE_KEY = "admin-impersonate-user-id"` - Centralized in `frontend/src/lib/constants.ts` and `autogpt_libs/auth/dependencies.py` ### Code Quality Improvements - **DRY Principle**: Eliminated duplicate header forwarding logic - **Icon Compliance**: Uses Phosphor Icons per coding guidelines - **Type Safety**: Proper TypeScript interfaces and error handling - **SSR Compatibility**: Environment checks for client-side only operations - **Error Consistency**: Uniform silent failure with logging approach ### Testing - Updated backend auth dependency tests for new function signatures - Added Mock Request objects for comprehensive test coverage - Maintained existing test functionality while extending capabilities ## 🚀 CodeRabbit Review Responses All CodeRabbit feedback has been addressed: 1. ✅ **DRY Principle**: Refactored duplicate header forwarding logic 2. ✅ **Icon Library**: Replaced lucide-react with Phosphor Icons 3. ✅ **SSR Safety**: Added environment checks for sessionStorage 4. ✅ **UI Improvements**: Synchronous initialization prevents flicker 5. ✅ **Error Handling**: Consistent silent failure with logging 6. ✅ **Backend Validation**: Confirmed comprehensive security implementation 7. ✅ **Type Safety**: Addressed TypeScript concerns 8. ✅ **Code Standards**: Followed all coding guidelines and best practices ## 🧪 Testing Instructions 1. **Login as Admin**: Ensure user has admin role 2. **Navigate to Panel**: Go to `/admin/impersonation` 3. **Test Impersonation**: Enter valid user UUID and start impersonation 4. **Verify Banner**: Security banner should appear at top of all pages 5. **Test API Calls**: Verify credits/graphs/etc show impersonated user's data 6. **Check Logging**: Backend logs should show impersonation audit trail 7. **Stop Impersonation**: Verify return to admin context works correctly ## 📝 Files Modified ### Backend - `autogpt_libs/auth/dependencies.py` - Core impersonation logic - `autogpt_libs/auth/dependencies_test.py` - Updated test signatures ### Frontend - `src/hooks/useAdminImpersonation.ts` - State management hook - `src/components/admin/AdminImpersonationBanner.tsx` - Security warning banner - `src/components/admin/AdminImpersonationPanel.tsx` - Admin control interface - `src/app/(platform)/admin/impersonation/page.tsx` - Admin page - `src/app/(platform)/admin/layout.tsx` - Navigation integration - `src/app/(platform)/layout.tsx` - Banner integration - `src/lib/autogpt-server-api/client.ts` - Header injection for API calls - `src/lib/autogpt-server-api/helpers.ts` - Header forwarding logic - `src/app/api/proxy/[...path]/route.ts` - Proxy header forwarding - `src/app/api/mutators/custom-mutator.ts` - Enhanced error handling - `src/lib/constants.ts` - Shared constants ## 🔒 Security Compliance - **Authorization**: Admin role required for impersonation access - **Authentication**: Uses existing JWT validation with additional role checks - **Audit Logging**: Comprehensive logging of all impersonation activities - **Error Handling**: Secure error responses without information leakage - **Session Management**: Temporary sessionStorage without persistent data - **Header Validation**: Proper sanitization and validation of impersonation headers This implementation provides a secure, auditable, and user-friendly admin impersonation system that integrates seamlessly with the existing AutoGPT Platform architecture. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Admin user impersonation to view the app as another user. * New "User Impersonation" admin page for entering target user IDs and managing sessions. * Sidebar link for quick access to the impersonation page. * Persistent impersonation state that updates app data (e.g., credits) and survives page reloads. * Top warning banner when impersonation is active with a Stop Impersonation control. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
04df981115 |
fix(backend): Fix structured logging for cloud environments (#11227)
- Resolves #11226 ### Changes 🏗️ - Drop use of `CloudLoggingHandler` which docs state isn't for use in GKE - For cloud logging, output only structured log entries to `stdout` ### 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 deploy to dev and check logs |
||
|
|
2c6d85d15e |
feat(platform): Shared cache (#11150)
### Problem When running multiple backend pods in production, requests can be routed to different pods causing inconsistent cache states. Additionally, the current cache implementation in `autogpt_libs` doesn't support shared caching across processes, leading to data inconsistency and redundant cache misses. ### Changes 🏗️ - **Moved cache implementation from autogpt_libs to backend** (`/backend/backend/util/cache.py`) - Removed `/autogpt_libs/autogpt_libs/utils/cache.py` - Centralized cache utilities within the backend module - Updated all import statements across the codebase - **Implemented Redis-based shared caching** - Added `shared_cache` parameter to `@cached` decorator for cross-process caching - Implemented Redis connection pooling for efficient cache operations - Added support for cache key pattern matching and bulk deletion - Added TTL refresh on cache access with `refresh_ttl_on_get` option - **Enhanced cache functionality** - Added thundering herd protection with double-checked locking - Implemented thread-local caching with `@thread_cached` decorator - Added cache management methods: `cache_clear()`, `cache_info()`, `cache_delete()` - Added support for both sync and async functions - **Updated store caching** (`/backend/server/v2/store/cache.py`) - Enabled shared caching for all store-related cache functions - Set appropriate TTL values (5-15 minutes) for different cache types - Added `clear_all_caches()` function for cache invalidation - **Added Redis configuration** - Added Redis connection settings to backend settings - Configured dedicated connection pool for cache operations - Set up binary mode for pickle serialization ### 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 Redis connection and cache operations work correctly - [x] Test shared cache across multiple backend instances - [x] Verify cache invalidation with `clear_all_caches()` - [x] Run cache tests: `poetry run pytest backend/backend/util/cache_test.py` - [x] Test thundering herd protection under concurrent load - [x] Verify TTL refresh functionality with `refresh_ttl_on_get=True` - [x] Test thread-local caching for request-scoped data - [x] Ensure no performance regression vs in-memory cache #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes (Redis already configured) - [x] I have included a list of my configuration changes in the PR description (under **Changes**) - Redis cache configuration uses existing Redis service settings (REDIS_HOST, REDIS_PORT, REDIS_PASSWORD) - No new environment variables required |
||
|
|
57a06f7088 |
fix(blocks, security): Fixes for various DoS vulnerabilities (#10798)
This PR addresses multiple critical and medium security vulnerabilities
that could lead to Denial of Service (DoS) attacks. All fixes implement
defense-in-depth strategies with comprehensive testing.
### Changes 🏗️
#### **Critical Security Fixes:**
1. **GHSA-m2wr-7m3r-p52c - ReDoS in CodeExtractionBlock**
- Fixed catastrophic backtracking in regex patterns `\s+[\s\S]*?` and
`\s+(.*?)`
- Replaced with safer patterns: `[ \t]*\n([^\s\S]*?)`
- Files: `backend/blocks/code_extraction_block.py`
2. **GHSA-955p-gpfx-r66j - AITextSummarizerBlock Memory Amplification**
- Added 1MB text size limit and 100 chunk maximum
- Prevents 10K input → 50G memory amplification attacks
- Files: `backend/blocks/llm.py`
3. **GHSA-5cqw-g779-9f9x - RSS Feed XML Bomb DoS**
- Added 10MB feed size limit and 30s timeout
- Prevents deep XML parsing memory exhaustion
- Files: `backend/blocks/rss.py`
4. **GHSA-7g34-7fvq-xxq6 - File Storage Disk Exhaustion**
- Added 100MB per file and 1GB per execution directory limits
- Prevents disk space exhaustion from file uploads
- Files: `backend/util/file.py`
5. **GHSA-pppq-xx2w-7jpq - ExtractTextInformationBlock ReDoS**
- Added 1MB text limit, 1000 match limit, and 5s timeout protection
- Prevents lookahead pattern memory exhaustion
- Files: `backend/blocks/text.py`
6. **GHSA-vw3v-whvp-33v5 - Docker Logging Disk Exhaustion**
- Added log rotation limits at Docker (10MB × 3 files) and application
levels
- Prevents unbounded log growth causing disk exhaustion
- Files: `docker-compose.platform.yml`,
`autogpt_libs/autogpt_libs/logging/config.py`
#### **Additional Security Improvements:**
7. **StepThroughItemsBlock DoS Prevention**
- Added 10,000 item limit and 1MB input size limit
- Prevents large iteration DoS attacks
- Files: `backend/blocks/iteration.py`
8. **XMLParserBlock XML Bomb Prevention**
- Added 10MB XML input size limit
- Files: `backend/blocks/xml_parser.py`
#### **Code Quality:**
- Fixed Python 3.10 typing compatibility issues
- Added comprehensive security test suite
- All code formatted and linted
### 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 comprehensive security test suite covering all
vulnerabilities
- [x] Verified ReDoS patterns are fixed and don't cause timeouts
- [x] Confirmed memory limits prevent amplification attacks
- [x] Tested file size limits prevent disk exhaustion
- [x] Validated log rotation prevents unbounded growth
- [x] Ensured backward compatibility for normal usage
#### For configuration changes:
- [x] `docker-compose.yml` is updated with logging limits
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
### Test Plan 🧪
**Security Tests:**
1. **ReDoS Protection**: Tested with malicious regex inputs (large
spaces) - completes without hanging
2. **Memory Limits**: Verified 2MB text input gets truncated to 1MB,
chunk limits enforced
3. **File Size Limits**: Confirmed 200MB files rejected, directory size
limits enforced
4. **Iteration Limits**: Tested 20K item arrays rejected, large JSON
strings rejected
5. **Timeout Protection**: Dangerous regex patterns timeout after 5s
instead of hanging
**Compatibility Tests:**
- Normal functionality preserved for all blocks
- Existing tests pass with new security limits
- Performance impact minimal for typical usage
### Security Impact 🛡️
**Before:** Multiple attack vectors could cause:
- CPU exhaustion (ReDoS attacks)
- Memory exhaustion (amplification attacks)
- Disk exhaustion (file/log bombs)
- Service unavailability
**After:** All attack vectors mitigated with:
- Input validation and size limits
- Timeout protections
- Resource quotas
- Defense-in-depth approach
All fixes maintain backward compatibility while preventing DoS attacks.
🤖 Generated with [Claude Code](https://claude.ai/code)
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Adds robust DoS protections across blocks (regex, memory, iteration,
XML/RSS, file I/O) and enables app/Docker log rotation with
comprehensive tests.
>
> - **Security hardening**:
> - Replace unsafe regex in `backend/blocks/code_extraction_block.py` to
prevent ReDoS; add safer extraction/removal patterns.
> - Constrain LLM summarizer chunking in `backend/blocks/llm.py` (1MB
cap, chunk/overlap validation, chunk count limit).
> - Limit RSS fetching in `backend/blocks/rss.py` (scheme validation,
10MB cap, timeout, bounded read) and return empty on failure.
> - Impose XML size limit (10MB) in `backend/blocks/xml_parser.py`.
> - Add file upload/download limits in `backend/util/file.py`
(100MB/file, 1GB dir quota) and enforce scanning before write.
> - Enable rotating file logs in `autogpt_libs/logging/config.py` (size
+ backups) and Docker json-file log rotation in
`docker-compose.platform.yml`.
> - **Iteration block**:
> - Add item count/string size limits; fix yielded key for dicts; cap
iterations in `backend/blocks/iteration.py`.
> - **Tests**:
> - New `backend/blocks/test/test_security_fixes.py` covering ReDoS,
timeouts, memory/size and iteration limits, XML/file constraints.
> - **Misc**:
> - Typing fallback for `NotRequired` in `activity_status_generator.py`.
> - Dependency updates in `backend/poetry.lock`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
|
||
|
|
a97ff641c3 |
feat(backend): optimize FastAPI endpoints performance and alert system (#11000)
## Summary Comprehensive performance optimization fixing event loop binding issues and addressing all PR feedback. ### Original Performance Issues Fixed **Event Loop Binding Problems:** - JWT authentication dependencies were synchronous, causing thread pool bottlenecks under high concurrency - FastAPI's default thread pool (40 threads) was insufficient for high-load scenarios - Backend services lacked proper event loop configuration **Security & Performance Improvements:** - Security middleware converted from BaseHTTPMiddleware to pure ASGI for better performance - Added blocks endpoint to cacheable paths for improved response times - Cross-platform uvloop detection with Windows compatibility ### Key Changes Made #### 1. JWT Authentication Async Conversion - **Files**: `autogpt_libs/auth/dependencies.py`, `autogpt_libs/auth/jwt_utils.py` - **Change**: Convert all JWT functions to async (`requires_user`, `requires_admin_user`, `get_user_id`, `get_jwt_payload`) - **Impact**: Eliminates thread pool blocking, improves concurrency handling - **Tests**: All 25+ authentication tests updated to async patterns #### 2. FastAPI Thread Pool Optimization - **File**: `backend/server/rest_api.py:82-93` - **Change**: Configure thread pool size via `config.fastapi_thread_pool_size` - **Default**: Increased from 40 to higher limit for sync operations - **Impact**: Better handling of remaining sync dependencies #### 3. Performance-Optimized Security Middleware - **File**: `backend/server/middleware/security.py` - **Change**: Pure ASGI implementation replacing BaseHTTPMiddleware - **Headers**: HTTP spec compliant capitalization (X-Content-Type-Options, X-Frame-Options, etc.) - **Caching**: Added `/api/blocks` and `/api/v1/blocks` to cacheable paths - **Impact**: Reduced middleware overhead, improved header compliance #### 4. Cross-Platform Event Loop Configuration - **File**: `backend/server/rest_api.py:311-312` - **Change**: Platform-aware uvloop detection: `'uvloop' if platform.system() != 'Windows' else 'auto'` - **Impact**: Windows compatibility while maintaining Unix performance benefits - **Verified**: 'auto' is valid uvicorn default parameter #### 5. Enhanced Caching Infrastructure - **File**: `autogpt_libs/utils/cache.py:118-132` - **Change**: Per-event-loop asyncio.Lock instances prevent cross-loop deadlocks - **Impact**: Thread-safe caching across multiple event loops #### 6. Database Query Limits & Performance - **Files**: Multiple data layer files - **Change**: Added configurable limits to prevent unbounded queries - **Constants**: `MAX_GRAPH_VERSIONS_FETCH=50`, `MAX_USER_API_KEYS_FETCH=500`, etc. - **Impact**: Consistent performance regardless of data volume #### 7. OpenAPI Documentation Improvements - **File**: `backend/server/routers/v1.py:68-85` - **Change**: Added proper response model and schema for blocks endpoint - **Impact**: Better API documentation and type safety #### 8. Error Handling & Retry Logic Fixes - **File**: `backend/util/retry.py:63` - **Change**: Accurate retry threshold comments referencing EXCESSIVE_RETRY_THRESHOLD - **Impact**: Clear documentation for debugging retry scenarios ### ntindle Feedback Addressed ✅ **HTTP Header Capitalization**: All headers now use proper HTTP spec capitalization ✅ **Windows uvloop Compatibility**: Clean platform detection with inline conditional ✅ **OpenAPI Response Model**: Blocks endpoint properly documented in schema ✅ **Retry Comment Accuracy**: References actual threshold constants instead of hardcoded numbers ✅ **Code Cleanliness**: Inline conditionals preferred over verbose if statements ### Performance Testing Results **Before Optimization:** - High latency under concurrent load - Thread pool exhaustion at ~40 concurrent requests - Event loop binding issues causing timeouts **After Optimization:** - Improved concurrency handling with async JWT pipeline - Configurable thread pool scaling - Cross-platform event loop optimization - Reduced middleware overhead ### Backward Compatibility ✅ **All existing functionality preserved** ✅ **No breaking API changes** ✅ **Enhanced test coverage with async patterns** ✅ **Windows and Unix compatibility maintained** ### Files Modified **Core Authentication & Performance:** - `autogpt_libs/auth/dependencies.py` - Async JWT dependencies - `autogpt_libs/auth/jwt_utils.py` - Async JWT utilities - `backend/server/rest_api.py` - Thread pool config + uvloop detection - `backend/server/middleware/security.py` - ASGI security middleware **Database & Limits:** - `backend/data/includes.py` - Performance constants and configurable includes - `backend/data/api_key.py`, `backend/data/credit.py`, `backend/data/graph.py`, `backend/data/integrations.py` - Query limits **Caching & Infrastructure:** - `autogpt_libs/utils/cache.py` - Per-event-loop lock safety - `backend/server/routers/v1.py` - OpenAPI improvements - `backend/util/retry.py` - Comment accuracy **Testing:** - `autogpt_libs/auth/dependencies_test.py` - 25+ async test conversions - `autogpt_libs/auth/jwt_utils_test.py` - Async JWT test patterns Ready for review and production deployment. 🚀 --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
50689218ed | feat(backend): implement comprehensive load testing performance fixes + database health improvements (#10965) | ||
|
|
a978e91271 |
fix(ci, backend): Update Redis image & amend config to work with it (#10952)
CI is currently broken because Bitnami has pulled all `bitnami/redis` images. The current official Redis image on Docker Hub is `redis`. ### Changes 🏗️ - Replace `bitnami/redis:6.2` by `redis:latest` in Backend CI workflow file - Make `REDIS_PASSWORD` optional in the backend settings ### 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] CI no longer broken |
||
|
|
2ffd249aac |
fix(backend/external-api): Improve security & reliability of API key storage (#10796)
Our API key generation, storage, and verification system has a couple of issues that need to be ironed out before full-scale deployment. ### Changes 🏗️ - Move from unsalted SHA256 to salted Scrypt hashing for API keys - Avoid false-negative API key validation due to prefix collision - Refactor API key management code for clarity - [refactor(backend): Clean up API key DB & API code (#10797)](https://github.com/Significant-Gravitas/AutoGPT/pull/10797) - Rename models and properties in `backend.data.api_key` for clarity - Eliminate redundant/custom/boilerplate error handling/wrapping in API key endpoint call stack - Remove redundant/inaccurate `response_model` declarations from API key endpoints Dependencies for `autogpt_libs`: - Add `cryptography` as a dependency - Add `pyright` as a dev dependency ### 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: - Performing these actions through the UI (still) works: - [x] Creating an API key - [x] Listing owned API keys - [x] Deleting an owned API key - [x] Newly created API key can be used in Swagger UI - [x] Existing API key can be used in Swagger UI - [x] Existing API key is re-encrypted with salt on use |
||
|
|
3ec1721d6d |
chore(libs/deps-dev): Bump ruff from 0.12.9 to 0.12.11 in /autogpt_platform/autogpt_libs in the development-dependencies group (#10804)
Bumps the development-dependencies group in /autogpt_platform/autogpt_libs with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.12.9 to 0.12.11 <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.12.11</h2> <h2>Release Notes</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Extend <code>AIR311</code> and <code>AIR312</code> rules (<a href="https://redirect.github.com/astral-sh/ruff/pull/20082">#20082</a>)</li> <li>[<code>airflow</code>] Replace wrong path <code>airflow.io.storage</code> with <code>airflow.io.store</code> (<code>AIR311</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20081">#20081</a>)</li> <li>[<code>flake8-async</code>] Implement <code>blocking-http-call-httpx-in-async-function</code> (<code>ASYNC212</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20091">#20091</a>)</li> <li>[<code>flake8-logging-format</code>] Add auto-fix for f-string logging calls (<code>G004</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19303">#19303</a>)</li> <li>[<code>flake8-use-pathlib</code>] Add autofix for <code>PTH211</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/20009">#20009</a>)</li> <li>[<code>flake8-use-pathlib</code>] Make <code>PTH100</code> fix unsafe because it can change behavior (<a href="https://redirect.github.com/astral-sh/ruff/pull/20100">#20100</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>pyflakes</code>, <code>pylint</code>] Fix false positives caused by <code>__class__</code> cell handling (<code>F841</code>, <code>PLE0117</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20048">#20048</a>)</li> <li>[<code>pyflakes</code>] Fix <code>allowed-unused-imports</code> matching for top-level modules (<code>F401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20115">#20115</a>)</li> <li>[<code>ruff</code>] Fix false positive for t-strings in <code>default-factory-kwarg</code> (<code>RUF026</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20032">#20032</a>)</li> <li>[<code>ruff</code>] Preserve relative whitespace in multi-line expressions (<code>RUF033</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19647">#19647</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>ruff</code>] Handle empty t-strings in <code>unnecessary-empty-iterable-within-deque-call</code> (<code>RUF037</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20045">#20045</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Fix incorrect <code>D413</code> links in docstrings convention FAQ (<a href="https://redirect.github.com/astral-sh/ruff/pull/20089">#20089</a>)</li> <li>[<code>flake8-use-pathlib</code>] Update links to the table showing the correspondence between <code>os</code> and <code>pathlib</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/20103">#20103</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/Avasam"><code>@Avasam</code></a></li> <li><a href="https://github.com/BurntSushi"><code>@BurntSushi</code></a></li> <li><a href="https://github.com/Gankra"><code>@Gankra</code></a></li> <li><a href="https://github.com/Glyphack"><code>@Glyphack</code></a></li> <li><a href="https://github.com/JelleZijlstra"><code>@JelleZijlstra</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/PrettyWood"><code>@PrettyWood</code></a></li> <li><a href="https://github.com/Renkai"><code>@Renkai</code></a></li> <li><a href="https://github.com/TaKO8Ki"><code>@TaKO8Ki</code></a></li> <li><a href="https://github.com/amyreese"><code>@amyreese</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/danparizher"><code>@danparizher</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/hamirmahal"><code>@hamirmahal</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.12.11</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Extend <code>AIR311</code> and <code>AIR312</code> rules (<a href="https://redirect.github.com/astral-sh/ruff/pull/20082">#20082</a>)</li> <li>[<code>airflow</code>] Replace wrong path <code>airflow.io.storage</code> with <code>airflow.io.store</code> (<code>AIR311</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20081">#20081</a>)</li> <li>[<code>flake8-async</code>] Implement <code>blocking-http-call-httpx-in-async-function</code> (<code>ASYNC212</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20091">#20091</a>)</li> <li>[<code>flake8-logging-format</code>] Add auto-fix for f-string logging calls (<code>G004</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19303">#19303</a>)</li> <li>[<code>flake8-use-pathlib</code>] Add autofix for <code>PTH211</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/20009">#20009</a>)</li> <li>[<code>flake8-use-pathlib</code>] Make <code>PTH100</code> fix unsafe because it can change behavior (<a href="https://redirect.github.com/astral-sh/ruff/pull/20100">#20100</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>pyflakes</code>, <code>pylint</code>] Fix false positives caused by <code>__class__</code> cell handling (<code>F841</code>, <code>PLE0117</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20048">#20048</a>)</li> <li>[<code>pyflakes</code>] Fix <code>allowed-unused-imports</code> matching for top-level modules (<code>F401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20115">#20115</a>)</li> <li>[<code>ruff</code>] Fix false positive for t-strings in <code>default-factory-kwarg</code> (<code>RUF026</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20032">#20032</a>)</li> <li>[<code>ruff</code>] Preserve relative whitespace in multi-line expressions (<code>RUF033</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19647">#19647</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>ruff</code>] Handle empty t-strings in <code>unnecessary-empty-iterable-within-deque-call</code> (<code>RUF037</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20045">#20045</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Fix incorrect <code>D413</code> links in docstrings convention FAQ (<a href="https://redirect.github.com/astral-sh/ruff/pull/20089">#20089</a>)</li> <li>[<code>flake8-use-pathlib</code>] Update links to the table showing the correspondence between <code>os</code> and <code>pathlib</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/20103">#20103</a>)</li> </ul> <h2>0.12.10</h2> <h3>Preview features</h3> <ul> <li>[<code>flake8-simplify</code>] Implement fix for <code>maxsplit</code> without separator (<code>SIM905</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19851">#19851</a>)</li> <li>[<code>flake8-use-pathlib</code>] Add fixes for <code>PTH102</code> and <code>PTH103</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/19514">#19514</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>isort</code>] Handle multiple continuation lines after module docstring (<code>I002</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19818">#19818</a>)</li> <li>[<code>pyupgrade</code>] Avoid reporting <code>__future__</code> features as unnecessary when they are used (<code>UP010</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19769">#19769</a>)</li> <li>[<code>pyupgrade</code>] Handle nested <code>Optional</code>s (<code>UP045</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19770">#19770</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>pycodestyle</code>] Make <code>E731</code> fix unsafe instead of display-only for class assignments (<a href="https://redirect.github.com/astral-sh/ruff/pull/19700">#19700</a>)</li> <li>[<code>pyflakes</code>] Add secondary annotation showing previous definition (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19900">#19900</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Fix description of global config file discovery strategy (<a href="https://redirect.github.com/astral-sh/ruff/pull/19188">#19188</a>)</li> <li>Update outdated links to <a href="https://typing.python.org/en/latest/source/stubs.html">https://typing.python.org/en/latest/source/stubs.html</a> (<a href="https://redirect.github.com/astral-sh/ruff/pull/19992">#19992</a>)</li> <li>[<code>flake8-annotations</code>] Remove unused import in example (<code>ANN401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/20000">#20000</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
12cdd45551 |
refactor(backend): Improve auth setup & OpenAPI generation (#10720)
Our current auth setup (`autogpt_libs.auth` + its usage) is quite inconsistent and doesn't do all of its jobs properly. The 401 responses you get when unauthenticated are not included in the OpenAPI spec, causing these to be unaccounted for in the generated frontend API client. Usage of the FastAPI dependencies supplied by `autogpt_libs.auth.depends` aren't consistently used the same way, making maintenance on these hard to oversee. API tests use many different ways to get around the auth requirement, making this also hard to maintain and oversee. This pull request aims to fix all of this and give us a consistent, clean, and self-documenting API auth implementation. - Resolves #10715 ### Changes 🏗️ - Homogenize use of `autogpt_libs.auth` security dependencies throughout the backend - Fix OpenAPI schema generation for 401 responses - Handle possible 401 responses in frontend - Tighten validation and add warnings for weak settings in `autogpt_libs.auth.config` - Increase test coverage for `autogpt_libs.auth` to 100% - Standardize auth setup for API tests - Rename `APIKeyValidator` to `APIKeyAuthenticator` and move to its own module in `backend.server` ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] All tests for `autogpt_libs.auth` pass - [x] All tests for `backend.server` pass - [x] @ntindle does a security audit for these changes - [x] OpenAPI spec for authenticated routes is generated with the appropriate `401` response --------- Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
da585a34e1 |
fix(frontend): Propagate API auth errors to original requestor (#10716)
- Resolves #10713 ### Changes 🏗️ - Remove early exit in API proxy that suppresses auth errors - Remove unused `proxy-action.ts` ### 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] Publish Agent dialog works when logged out - [x] Publish Agent dialog works when logged in --------- Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
4589b15450 |
chore(libs/deps-dev): Bump ruff from 0.12.3 to 0.12.4 in /autogpt_platform/autogpt_libs in the development-dependencies group (#10421)
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <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: Swifty <craigswift13@gmail.com> |
||
|
|
af7d56612d |
fix(logging): remove uvicorn log config to prevent startup deadlock (#10638)
## Problem After applying the CloudLoggingHandler fix to use BackgroundThreadTransport (#10634), scheduler pods entered a new deadlock during startup when uvicorn reconfigures logging. ## Root Cause When uvicorn starts with a log_config parameter, it calls `logging.config.dictConfig()` which: 1. Calls `_clearExistingHandlers()` 2. Which calls `logging.shutdown()` 3. Which tries to `flush()` all handlers including CloudLoggingHandler 4. CloudLoggingHandler with BackgroundThreadTransport tries to flush its queue 5. The background worker thread tries to acquire the logging module lock to check log levels 6. **Deadlock**: shutdown holds lock waiting for flush to complete, worker thread needs lock to continue ## Thread Dump Evidence From py-spy analysis of the stuck pod: - **Thread 21 (FastAPI)**: Stuck in `flush()` waiting for background thread to drain queue - **Thread 13 (google.cloud.logging.Worker)**: Waiting for logging lock in `isEnabledFor()` - **Thread 1 (MainThread)**: Waiting for logging lock in `getLogger()` during SQLAlchemy import - **Threads 30, 31 (Sentry)**: Also waiting for logging lock ## Solution Set `log_config=None` for all uvicorn servers. This prevents uvicorn from calling `dictConfig()` and avoids the deadlock entirely. **Trade-off**: Uvicorn will use its default logging configuration which may produce duplicate log entries (one from uvicorn, one from the app), but the application will start successfully without deadlocks. ## Changes - Set `log_config=None` in all uvicorn.Config() calls - Remove unused `generate_uvicorn_config` imports ## Testing - [x] Verified scheduler pods can start and become healthy - [x] Health checks respond properly - [x] No deadlocks during startup - [x] Application logs still appear (though may be duplicated) ## Related Issues - Fixes the startup deadlock introduced after #10634 |
||
|
|
34dd218a91 |
fix(backend): resolve CloudLoggingHandler deadlock causing scheduler hangs (#10634)
## 🚨 Critical Deadlock Fix: Scheduler Pod Stuck for 3+ Hours This PR resolves a critical production deadlock where scheduler pods become completely unresponsive due to a CloudLoggingHandler locking issue. ## 📋 Incident Summary **Affected Pod**: `autogpt-scheduler-server-6d7b89c4f9-mqp59` - **Duration**: Stuck for 3+ hours (still ongoing) - **Symptoms**: Health checks failing, appears completely dead - **Impact**: No new job executions, system appears down - **Root Cause**: CloudLoggingHandler deadlock with gRPC timeout failure ## 🔍 Detailed Incident Analysis ### The Deadlock Chain 1. **Thread 58 (APScheduler Worker)**: - Completed job successfully - Called `logger.info("Job executed successfully")` - CloudLoggingHandler acquired lock at `logging/__init__.py:976` - Made gRPC call to Google Cloud Logging - **Got stuck in TCP black hole for 3+ hours** 2. **Thread 26 (FastAPI Health Check)**: - Tried to log health check response - **Blocked at `logging/__init__.py:927` waiting for same lock** - Health check never completes → Kubernetes thinks pod is dead 3. **All Other Threads**: Similarly blocked on any logging attempt ### Why gRPC Timeout Failed The gRPC call had a 60-second timeout but has been stuck for 10,775+ seconds because: - **TCP Black Hole**: Network packets silently dropped (firewall/load balancer timeout) - **No Socket Timeout**: Python default is `None` (infinite wait) - **TCP Keepalive Disabled**: Dead connections hang forever - **Kernel-Level Block**: gRPC timeout can't interrupt `socket.recv()` syscall ### Evidence from Thread Dump ```python Thread 58: "ThreadPoolExecutor-0_1" _blocking (grpc/_channel.py:1162) timeout: 60 # ← Should have timed out deadline: 1755061203 # ← Expired 3 hours ago\! emit (logging_v2/handlers/handlers.py:225) # ← HOLDING LOCK handle (logging/__init__.py:978) # ← After acquire() Thread 26: "Thread-4 (__start_fastapi)" acquire (logging/__init__.py:927) # ← BLOCKED waiting for lock self: <CloudLoggingHandler at 0x7a657280d550> # ← Same instance\! ``` ## 🔧 The Fix ### Primary Solution Replace **blocking** `SyncTransport` with **non-blocking** `BackgroundThreadTransport`: ```python # BEFORE (Dangerous - blocks while holding lock) transport=SyncTransport, # AFTER (Safe - queues and returns immediately) transport=BackgroundThreadTransport, ``` ### Why BackgroundThreadTransport Solves It 1. **Non-blocking**: `emit()` returns immediately after queuing 2. **Lock Released**: No network I/O while holding the logging lock 3. **Isolated Failures**: Background thread hangs don't affect main app 4. **Better Performance**: Built-in batching and retry logic ### Additional Hardening - **Socket Timeout**: 30-second global timeout prevents infinite hangs - **gRPC Keepalive**: Detects and closes dead connections faster - **Comprehensive Logging**: Comments explain the deadlock prevention ## 🧪 Technical Validation ### Before (SyncTransport) ``` log.info("message") ↓ acquire_lock() ✅ ↓ gRPC_call() ❌ HANGS FOR HOURS ↓ [DEADLOCK - lock never released] ``` ### After (BackgroundThreadTransport) ``` log.info("message") ↓ acquire_lock() ✅ ↓ queue_message() ✅ Instant ↓ release_lock() ✅ Immediate ↓ [Background thread handles gRPC separately] ``` ## 🚀 Impact & Benefits **Immediate Impact**: - ✅ Prevents CloudLoggingHandler deadlocks - ✅ Health checks respond normally - ✅ System remains observable during network issues - ✅ Scheduler can continue processing jobs **Long-term Benefits**: - 📈 Better logging performance (batching + async) - 🛡️ Resilient to network partitions and timeouts - 🔍 Maintained observability during failures - ⚡ No blocking I/O on critical application threads ## 📊 Files Changed - `autogpt_libs/autogpt_libs/logging/config.py`: Transport change + socket hardening ## 🧪 Test Plan - [x] Validate BackgroundThreadTransport import works - [x] Confirm socket timeout configuration applies - [x] Verify gRPC keepalive environment variables set - [ ] Deploy to staging and verify no deadlocks under load - [ ] Monitor Cloud Logging delivery remains reliable ## 🔍 Monitoring After Deploy - Watch for any logging delivery delays (expected: minimal) - Confirm health checks respond consistently - Verify no more scheduler "hanging" incidents - Monitor gRPC connection patterns in Cloud Logging metrics ## 🎯 Risk Assessment - **Risk**: Very Low - BackgroundThreadTransport is the recommended approach - **Rollback**: Simple revert if any issues observed - **Testing**: Extensively used in production Google Cloud services --- **This fixes a critical production stability issue affecting scheduler reliability and system observability.** 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
a2059c6023 |
refactor(backend): consolidate LaunchDarkly feature flag management (#10632)
This PR consolidates LaunchDarkly feature flag management by moving it from autogpt_libs to backend and fixing several issues with boolean handling and configuration management. ### Changes 🏗️ **Code Structure:** - Move LaunchDarkly client from `autogpt_libs/feature_flag` to `backend/util/feature_flag.py` - Delete redundant `config.py` file and merge LaunchDarkly settings into `backend/util/settings.py` - Update all imports throughout the codebase to use `backend.util.feature_flag` - Move test file to `backend/util/feature_flag_test.py` **Bug Fixes:** - Fix `is_feature_enabled` function to properly return boolean values instead of arbitrary objects that were always evaluating to `True` - Add proper async/await handling for all `is_feature_enabled` calls - Add better error handling when LaunchDarkly client is not initialized **Performance & Architecture:** - Load Settings at module level instead of creating new instances inside functions - Remove unnecessary `sdk_key` parameter from `initialize_launchdarkly()` function - Simplify initialization by using centralized settings management **Configuration:** - Add `launch_darkly_sdk_key` field to `Secrets` class in settings.py with proper validation alias - Remove environment variable fallback in favor of centralized settings ### 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 existing feature flag tests pass (6/6 tests passing) - [x] LaunchDarkly initialization works correctly with settings - [x] Boolean feature flags return correct values instead of objects - [x] Non-boolean flag values are properly handled with warnings - [x] Async/await calls work correctly in AutoMod and activity status generator - [x] Code formatting and imports are correct #### 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**) **Configuration Changes:** - LaunchDarkly SDK key is now managed through the centralized Settings system instead of a separate config file - Uses existing `LAUNCH_DARKLY_SDK_KEY` environment variable (no changes needed to env files) 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
89eb5d1189 |
feat(feature-flag): add LaunchDarkly user context and metadata support (#10595)
## Summary Enable LaunchDarkly feature flags to use rich user context and metadata for advanced targeting, including user segments, account age, email domains, and custom attributes. This unlocks LaunchDarkly's powerful targeting capabilities beyond simple user ID checks. ## Problem LaunchDarkly feature flags were only receiving basic user IDs, preventing the use of: - **Segment-based targeting** (e.g., "employees", "beta users", "new accounts") - **Contextual rules** (e.g., account age, email domain, custom metadata) - **Advanced LaunchDarkly features** like percentage rollouts by user attributes This limited feature flag flexibility and required manual user ID management for targeting. ## Solution ### 🎯 **LaunchDarkly Context Enhancement** - **Rich user context**: Send user metadata, segments, account age, email domain to LaunchDarkly - **Automatic segmentation**: Users automatically categorized as "employee", "new_user", "established_user" etc. - **Custom metadata support**: Any user metadata becomes available for LaunchDarkly targeting - **24-hour caching**: Efficient user context retrieval with TTL cache to reduce database calls ### 📊 **User Context Data** ```python # Before: Only user ID context = Context.builder("user-123").build() # After: Full context with targeting data context = { "email": "user@agpt.co", "created_at": "2023-01-15T10:00:00Z", "segments": ["employee", "established_user"], "email_domain": "agpt.co", "account_age_days": 365, "custom_role": "admin" } ``` ### 🏗️ **Required Infrastructure Changes** To support proper LaunchDarkly serialization, we needed to implement clean application models: #### **Application-Layer User Model** - Created snake_case User model (`created_at`, `email_verified`) for proper JSON serialization - LaunchDarkly expects consistent field naming - camelCase Prisma objects caused validation errors - Added `User.from_db()` converter to safely transform database objects #### **HTTP Client Reliability** - Fixed HTTP 4xx retry issue that was causing unnecessary load - Added layer validation to prevent database objects leaking to external services #### **Type Safety** - Eliminated `Any` types and defensive coding patterns - Proper typing enables better IDE support and catches errors early ## Technical Implementation ### **Core LaunchDarkly Enhancement** ```python # autogpt_libs/feature_flag/client.py @async_ttl_cache(maxsize=1000, ttl_seconds=86400) # 24h cache async def _fetch_user_context_data(user_id: str) -> dict[str, Any]: user = await get_user_by_id(user_id) return _build_launchdarkly_context(user) def _build_launchdarkly_context(user: User) -> dict[str, Any]: return { "email": user.email, "created_at": user.created_at.isoformat(), # snake_case for serialization "segments": determine_user_segments(user), "account_age_days": calculate_account_age(user), # ... more context data } ``` ### **User Segmentation Logic** - **Role-based**: `admin`, `user`, `system` segments - **Domain-based**: `employee` for @agpt.co emails - **Account age**: `new_user` (<7 days), `recent_user` (7-30 days), `established_user` (>30 days) - **Custom metadata**: Any user metadata becomes available for targeting ### **Infrastructure Updates** - `backend/data/model.py`: Application User model with proper serialization - `backend/util/service.py`: HTTP client improvements and layer validation - Multiple files: Migration to use application models for consistency ## LaunchDarkly Usage Examples With this enhancement, you can now create LaunchDarkly rules like: ```yaml # Target employees only - variation: true targets: - values: ["employee"] contextKind: "user" attribute: "segments" # Target new users for gradual rollout - variation: true rollout: variations: - variation: true weight: 25000 # 25% of new users contextKind: "user" bucketBy: "segments" filters: - attribute: "segments" op: "contains" values: ["new_user"] ``` ## Performance & Caching - **24-hour TTL cache**: Dramatically reduces database calls for user context - **Graceful fallbacks**: Simple user ID context if database unavailable - **Efficient caching**: 1000 entry LRU cache with automatic TTL expiration ## Testing - [x] LaunchDarkly context includes all expected user attributes - [x] Segmentation logic correctly categorizes users - [x] 24-hour cache reduces database load - [x] Fallback to simple context works when database unavailable - [x] All existing feature flag functionality preserved - [x] HTTP retry improvements work correctly ## Breaking Changes ✅ **No external API changes** - all existing feature flag usage continues to work ⚠️ **Internal changes only**: - `get_user_by_id()` returns application User model instead of Prisma model - Test utilities need to import User from `backend.data.model` ## Impact 🎯 **Product Impact**: - **Advanced targeting**: Product teams can now use sophisticated LaunchDarkly rules - **Better user experience**: Gradual rollouts, A/B testing, and segment-based features - **Operational efficiency**: Reduced need for manual user ID management 🚀 **Performance Impact**: - **Reduced database load**: 24-hour caching minimizes repeated user context queries - **Improved reliability**: Fixed HTTP retry inefficiencies - **Better monitoring**: Cleaner logs without 4xx retry noise --- **Primary goal**: Enable rich LaunchDarkly targeting with user context and segments **Infrastructure changes**: Required for proper serialization and reliability 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
e60deba05f |
refactor(backend): separate notification service from scheduler (#10579)
## Summary - Create dedicated notification service entry point (backend.notification:main) - Remove NotificationManager from scheduler service for better separation of concerns - Update docker-compose to run notification service on dedicated port 8007 - Configure all services to communicate with separate notification service This refactoring separates the notification service from the scheduler service, allowing them to run as independent microservices instead of two processes in the same pod. ## Changes Made - **New notification service entry point**: Created `backend/backend/notification.py` with dedicated main function - **Updated pyproject.toml**: Added notification service entry point registration - **Modified scheduler service**: Removed NotificationManager from `backend/backend/scheduler.py` - **Docker Compose updates**: Added notification_server service on port 8007, updated NOTIFICATIONMANAGER_HOST references ## Test plan - [x] Verify notification service starts correctly with new entry point - [x] Confirm scheduler service runs without notification manager - [x] Test docker-compose configuration with separate services - [x] Validate service discovery between microservices - [x] Run linting and type checking 🤖 Generated with [Claude Code](https://claude.ai/code) |
||
|
|
e632549175 |
feat(backend): Add AI-generated activity status for agent executions (#10487)
## Summary - Adds AI-generated activity status summaries for agent execution results - Provides users with conversational, non-technical summaries of what their agents accomplished - Includes comprehensive execution data analysis with honest failure reporting ## Changes Made - **Backend**: Added `ActivityStatusGenerator` module with async LLM integration - **Database**: Extended `GraphExecutionStats` and `Stats` models with `activity_status` field - **Frontend**: Added "Smart Agent Execution Summary" display with disclaimer tooltip - **Settings**: Added `execution_enable_ai_activity_status` toggle (disabled by default) - **Testing**: Comprehensive test suite with 12 test cases covering all scenarios ## Key Features - Collects execution data including graph structure, node relations, errors, and I/O samples - Generates user-friendly summaries from first-person perspective - Honest reporting of failures and invalid inputs (no sugar-coating) - Payload optimization for LLM context limits - Full async implementation with proper error handling ## Test Plan - [x] All existing tests pass - [x] New comprehensive test suite covers success/failure scenarios - [x] Feature toggle testing (enabled/disabled states) - [x] Frontend integration displays correctly - [x] Error handling and edge cases covered 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
b9c7642cfc |
feat(backend): Introduce http client refresh on repeated error (#10481)
HTTP requests can fail when the DNS is messed up. Sometimes this kind of issue requires a client reset. ### Changes 🏗️ Introduce HTTP client refresh on repeated 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: <!-- Put your test plan here: --> - [x] Manual run, added tests |
||
|
|
03cf392f05 |
chore(backend/deps, libs/deps): Bump redis from 5.2.x to 6.2.0 (#10177)
Bumps [redis](https://github.com/redis/redis-py) from 5.2.1 to 6.2.0, for both `autogpt_libs` and `backend`. Also, additional fixes in `autogpt_libs/pyproject.toml`: - Move `redis` from dev dependencies to prod dependencies - Fix author info - Sort dependencies > [!NOTE] > Of course dependabot wouldn't do this on its own; this PR has been taken over and augmented by @Pwuts <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/redis/redis-py/releases">redis's releases</a>.</em></p> <blockquote> <h2>6.2.0</h2> <h1>Changes</h1> <h2>🚀 New Features</h2> <ul> <li>Add <code>dynamic_startup_nodes</code> parameter to async RedisCluster (<a href="https://redirect.github.com/redis/redis-py/issues/3646">#3646</a>)</li> <li>Support RESP3 with <code>hiredis-py</code> parser (<a href="https://redirect.github.com/redis/redis-py/issues/3648">#3648</a>)</li> <li>[Async] Support for transactions in async <code>RedisCluster</code> client (<a href="https://redirect.github.com/redis/redis-py/issues/3649">#3649</a>)</li> </ul> <h2>🐛 Bug Fixes</h2> <ul> <li>Revert wrongly changed default value for <code>check_hostname</code> when instantiating <code>RedisSSLContext</code> (<a href="https://redirect.github.com/redis/redis-py/issues/3655">#3655</a>)</li> <li>Fixed potential deadlock from unexpected <code>__del__</code> call (<a href="https://redirect.github.com/redis/redis-py/issues/3654">#3654</a>)</li> </ul> <h2>🧰 Maintenance</h2> <ul> <li>Update <code>search_json_examples.ipynb</code>: Fix the old import <code>indexDefinition</code> -> <code>index_definition</code> (<a href="https://redirect.github.com/redis/redis-py/issues/3652">#3652</a>)</li> <li>Remove mandatory update of the CHANGES file for new PRs. Changes file will be kept for history for versions < 4.0.0 (<a href="https://redirect.github.com/redis/redis-py/issues/3645">#3645</a>)</li> <li>Dropping <code>Python 3.8</code> support as it has reached end of life (<a href="https://redirect.github.com/redis/redis-py/issues/3657">#3657</a>)</li> <li>fix(doc): update Python print output in json doctests (<a href="https://redirect.github.com/redis/redis-py/issues/3658">#3658</a>)</li> <li>Update redis-entraid dependency (<a href="https://redirect.github.com/redis/redis-py/issues/3661">#3661</a>)</li> </ul> <h2></h2> <p>We'd like to thank all the contributors who worked on this release! <a href="https://github.com/JCornat"><code>@JCornat</code></a> <a href="https://github.com/ShubhamKaudewar"><code>@ShubhamKaudewar</code></a> <a href="https://github.com/uglide"><code>@uglide</code></a> <a href="https://github.com/petyaslavova"><code>@petyaslavova</code></a> <a href="https://github.com/vladvildanov"><code>@vladvildanov</code></a></p> <h2>v6.1.1</h2> <h1>Changes</h1> <h2>🐛 Bug Fixes</h2> <ul> <li>Revert wrongly changed default value for <code>check_hostname</code> when instantiating <code>RedisSSLContext</code> (<a href="https://redirect.github.com/redis/redis-py/issues/3655">#3655</a>)</li> <li>Fixed potential deadlock from unexpected <code>__del__</code> call (<a href="https://redirect.github.com/redis/redis-py/issues/3654">#3654</a>)</li> </ul> <h2></h2> <p>We'd like to thank all the contributors who worked on this release! <a href="https://github.com/vladvildanov"><code>@vladvildanov</code></a> <a href="https://github.com/petyaslavova"><code>@petyaslavova</code></a></p> <h2>6.1.0</h2> <h1>Changes</h1> <h2>🚀 New Features</h2> <ul> <li>Support for transactions in <code>RedisCluster</code> client (<a href="https://redirect.github.com/redis/redis-py/issues/3611">#3611</a>)</li> <li>Add equality and hashability to <code>Retry</code> and backoff classes (<a href="https://redirect.github.com/redis/redis-py/issues/3628">#3628</a>)</li> </ul> <h2>🐛 Bug Fixes</h2> <ul> <li>Fix RedisCluster <code>ssl_check_hostname</code> not set to connections. For SSL verification with <code>ssl_cert_reqs="none"</code>, check_hostname is set to <code>False</code> (<a href="https://redirect.github.com/redis/redis-py/issues/3637">#3637</a>) <strong>Important</strong>: The default value for the <code>check_hostname</code> field of <code>RedisSSLContext</code> has been changed as part of this PR - this is a breaking change and should not be introduced in minor versions - unfortunately, it is part of the current release. The breaking change is reverted in the next release to fix the behavior --> 6.2.0</li> <li>Prevent RuntimeError while reinitializing clusters - sync and async (<a href="https://redirect.github.com/redis/redis-py/issues/3633">#3633</a>)</li> <li>Add equality and hashability to <code>Retry</code> and backoff classes (<a href="https://redirect.github.com/redis/redis-py/issues/3628">#3628</a>) - fixes integration with Django RQ</li> <li>Fix <code>AttributeError</code> on <code>ClusterPipeline</code> (<a href="https://redirect.github.com/redis/redis-py/issues/3634">#3634</a>)</li> </ul> <h2>🧰 Maintenance</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
d33459ddb5 |
feat(backend): Integrate GCS file storage with automatic expiration for Agent File Input (#10340)
## Summary
This PR introduces a complete cloud storage infrastructure and file
upload system that agents can use instead of passing base64 data
directly in inputs, while maintaining backward compatibility for the
builder's node inputs.
### Problem Statement
Currently, when agents need to process files, they pass base64-encoded
data directly in the input, which has several limitations:
1. **Size limitations**: Base64 encoding increases file size by ~33%,
making large files impractical
2. **Memory usage**: Large base64 strings consume significant memory
during processing
3. **Network overhead**: Base64 data is sent repeatedly in API requests
4. **Performance impact**: Encoding/decoding base64 adds processing
overhead
### Solution
This PR introduces a complete cloud storage infrastructure and new file
upload workflow:
1. **New cloud storage system**: Complete `CloudStorageHandler` with
async GCS operations
2. **New upload endpoint**: Agents upload files via `/files/upload` and
receive a `file_uri`
3. **GCS storage**: Files are stored in Google Cloud Storage with
user-scoped paths
4. **URI references**: Agents pass the `file_uri` instead of base64 data
5. **Block processing**: File blocks can retrieve actual file content
using the URI
### Changes Made
#### New Files Introduced:
- **`backend/util/cloud_storage.py`** - Complete cloud storage
infrastructure (545 lines)
- **`backend/util/cloud_storage_test.py`** - Comprehensive test suite
(471 lines)
#### Backend Changes:
- **New cloud storage infrastructure** in
`backend/util/cloud_storage.py`:
- Complete `CloudStorageHandler` class with async GCS operations
- Support for multiple cloud providers (GCS implemented, S3/Azure
prepared)
- User-scoped and execution-scoped file storage with proper
authorization
- Automatic file expiration with metadata-based cleanup
- Path traversal protection and comprehensive security validation
- Async file operations with proper error handling and logging
- **New `UploadFileResponse` model** in `backend/server/model.py`:
- Returns `file_uri` (GCS path like
`gcs://bucket/users/{user_id}/file.txt`)
- Includes `file_name`, `size`, `content_type`, `expires_in_hours`
- Proper Pydantic schema instead of dictionary response
- **New `upload_file` endpoint** in `backend/server/routers/v1.py`:
- Complete new endpoint for file upload with cloud storage integration
- Returns GCS path URI directly as `file_uri`
- Supports user-scoped file storage for proper isolation
- Maintains fallback to base64 data URI when GCS not configured
- File size validation, virus scanning, and comprehensive error handling
#### Frontend Changes:
- **Updated API client** in
`frontend/src/lib/autogpt-server-api/client.ts`:
- Modified return type to expect `file_uri` instead of `signed_url`
- Supports the new upload workflow
- **Enhanced file input component** in
`frontend/src/components/type-based-input.tsx`:
- **Builder nodes**: Still use base64 for immediate data retention
without expiration
- **Agent inputs**: Use the new upload endpoint and pass `file_uri`
references
- Maintains backward compatibility for existing workflows
#### Test Updates:
- **New comprehensive test suite** in
`backend/util/cloud_storage_test.py`:
- 27 test cases covering all cloud storage functionality
- Tests for file storage, retrieval, authorization, and cleanup
- Tests for path validation, security, and error handling
- Coverage for user-scoped, execution-scoped, and system storage
- **New upload endpoint tests** in `backend/server/routers/v1_test.py`:
- Tests for GCS path URI format (`gcs://bucket/path`)
- Tests for base64 fallback when GCS not configured
- Validates file upload, virus scanning, and size limits
- Tests user-scoped file storage and access control
### Benefits
1. **New Infrastructure**: Complete cloud storage system with
enterprise-grade features
2. **Scalability**: Supports larger files without base64 size penalties
3. **Performance**: Reduces memory usage and network overhead with async
operations
4. **Security**: User-scoped file storage with comprehensive access
control and path validation
5. **Flexibility**: Maintains base64 support for builder nodes while
providing URI-based approach for agents
6. **Extensibility**: Designed for multiple cloud providers (GCS, S3,
Azure)
7. **Reliability**: Automatic file expiration, cleanup, and robust error
handling
8. **Backward compatibility**: Existing builder workflows continue to
work unchanged
### Usage
**For Agent Inputs:**
```typescript
// 1. Upload file
const response = await api.uploadFile(file);
// 2. Pass file_uri to agent
const agentInput = { file_input: response.file_uri };
```
**For Builder Nodes (unchanged):**
```typescript
// Still uses base64 for immediate data retention
const nodeInput = { file_input: "data:image/jpeg;base64,..." };
```
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] All new cloud storage tests pass (27/27)
- [x] All upload file tests pass (7/7)
- [x] Full v1 router test suite passes (21/21)
- [x] All server tests pass (126/126)
- [x] Backend formatting and linting pass
- [x] Frontend TypeScript compilation succeeds
- [x] Verified GCS path URI format (`gcs://bucket/path`)
- [x] Tested fallback to base64 data URI when GCS not configured
- [x] Confirmed file upload functionality works in UI
- [x] Validated response schema matches Pydantic model
- [x] Tested agent workflow with file_uri references
- [x] Verified builder nodes still work with base64 data
- [x] Tested user-scoped file access control
- [x] Verified file expiration and cleanup functionality
- [x] Tested security validation and path traversal protection
#### For configuration changes:
- [x] No new configuration changes required
- [x] `.env.example` remains compatible
- [x] `docker-compose.yml` remains compatible
- [x] Uses existing GCS configuration from media storage
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude AI <claude@anthropic.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
|
||
|
|
69c420e574 |
chore(libs/deps): Bump the production-dependencies group across 1 directory with 7 updates (#10371)
Bumps the production-dependencies group with 7 updates in the /autogpt_platform/autogpt_libs directory: | Package | From | To | | --- | --- | --- | | [pydantic](https://github.com/pydantic/pydantic) | `2.11.4` | `2.11.7` | | [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.9.1` | `2.10.1` | | [pytest-mock](https://github.com/pytest-dev/pytest-mock) | `3.14.0` | `3.14.1` | | [supabase](https://github.com/supabase/supabase-py) | `2.15.1` | `2.16.0` | | [launchdarkly-server-sdk](https://github.com/launchdarkly/python-server-sdk) | `9.11.1` | `9.12.0` | | [fastapi](https://github.com/fastapi/fastapi) | `0.115.12` | `0.116.1` | | [uvicorn](https://github.com/encode/uvicorn) | `0.34.3` | `0.35.0` | Updates `pydantic` from 2.11.4 to 2.11.7 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/releases">pydantic's releases</a>.</em></p> <blockquote> <h2>v2.11.7 2025-06-14</h2> <!-- raw HTML omitted --> <h2>What's Changed</h2> <h3>Fixes</h3> <ul> <li>Copy <code>FieldInfo</code> instance if necessary during <code>FieldInfo</code> build by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11980">pydantic/pydantic#11980</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.11.6...v2.11.7">https://github.com/pydantic/pydantic/compare/v2.11.6...v2.11.7</a></p> <h2>v2.11.6 2025-06-13</h2> <h2>v2.11.6 (2025-06-13)</h2> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Rebuild dataclass fields before schema generation by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11949">#11949</a></li> <li>Always store the original field assignment on <code>FieldInfo</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11946">#11946</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.11.5...v2.11.6">https://github.com/pydantic/pydantic/compare/v2.11.5...v2.11.6</a></p> <h2>v2.11.5 2025-05-22</h2> <!-- raw HTML omitted --> <h2>What's Changed</h2> <h3>Fixes</h3> <ul> <li>Check if <code>FieldInfo</code> is complete after applying type variable map by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11855">#11855</a></li> <li>Do not delete mock validator/serializer in <code>model_rebuild()</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11890">#11890</a></li> <li>Do not duplicate metadata on model rebuild by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11902">#11902</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.11.4...v2.11.5">https://github.com/pydantic/pydantic/compare/v2.11.4...v2.11.5</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/blob/main/HISTORY.md">pydantic's changelog</a>.</em></p> <blockquote> <h2>v2.11.7 (2025-06-14)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.11.7">GitHub release</a></p> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Copy <code>FieldInfo</code> instance if necessary during <code>FieldInfo</code> build by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11898">#11898</a></li> </ul> <h2>v2.11.6 (2025-06-13)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.11.6">GitHub release</a></p> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Rebuild dataclass fields before schema generation by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11949">#11949</a></li> <li>Always store the original field assignment on <code>FieldInfo</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11946">#11946</a></li> </ul> <h2>v2.11.5 (2025-05-22)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.11.5">GitHub release</a></p> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Check if <code>FieldInfo</code> is complete after applying type variable map by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11855">#11855</a></li> <li>Do not delete mock validator/serializer in <code>model_rebuild()</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11890">#11890</a></li> <li>Do not duplicate metadata on model rebuild by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11902">#11902</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
1502f28481 |
chore(libs/deps): Bump pytest-asyncio from 0.26.0 to 1.0.0 in /autogpt_platform/autogpt_libs (#10175)
Bumps [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) from 0.26.0 to 1.0.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pytest-dev/pytest-asyncio/releases">pytest-asyncio's releases</a>.</em></p> <blockquote> <h2>pytest-asyncio 1.0.0</h2> <h1><a href="https://github.com/pytest-dev/pytest-asyncio/tree/1.0.0">1.0.0</a> - 2025-05-26</h1> <h2>Removed</h2> <ul> <li>The deprecated <em>event_loop</em> fixture. (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1106">#1106</a>)</li> </ul> <h2>Added</h2> <ul> <li>Prelimiary support for Python 3.14 (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1025">#1025</a>)</li> </ul> <h2>Changed</h2> <ul> <li>Scoped event loops (e.g. module-scoped loops) are created once rather than per scope (e.g. per module). This reduces the number of fixtures and speeds up collection time, especially for large test suites. (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1107">#1107</a>)</li> <li>The <em>loop_scope</em> argument to <code>pytest.mark.asyncio</code> no longer forces that a pytest Collector exists at the level of the specified scope. For example, a test function marked with <code>pytest.mark.asyncio(loop_scope="class")</code> no longer requires a class surrounding the test. This is consistent with the behavior of the <em>scope</em> argument to <code>pytest_asyncio.fixture</code>. (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1112">#1112</a>)</li> </ul> <h2>Fixed</h2> <ul> <li>An error caused when using pytest's [--setup-plan]{.title-ref} option. (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/630">#630</a>)</li> <li>Unsuppressed import errors with pytest option <code>--doctest-ignore-import-errors</code> (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/797">#797</a>)</li> <li>A "fixture not found" error in connection with package-scoped loops (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1052">#1052</a>)</li> </ul> <h2>Notes for Downstream Packagers</h2> <ul> <li>Removed a test that had an ordering dependency on other tests. (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1114">#1114</a>)</li> </ul> <h2>pytest-asyncio 1.0.0a1</h2> <h1><a href="https://github.com/pytest-dev/pytest-asyncio/tree/1.0.0a1">1.0.0a1</a> - 2025-05-09</h1> <h2>Removed</h2> <ul> <li>The deprecated <em>event_loop</em> fixture. (<a href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1106">#1106</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
f02bb292b5 |
chore(libs/deps-dev): Bump ruff from 0.12.2 to 0.12.3 in /autogpt_platform/autogpt_libs in the development-dependencies group (#10376)
Bumps the development-dependencies group in /autogpt_platform/autogpt_libs with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.12.2 to 0.12.3 <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.12.3</h2> <h2>Release Notes</h2> <h3>Preview features</h3> <ul> <li>[<code>flake8-bugbear</code>] Support non-context-manager calls in <code>B017</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/19063">#19063</a>)</li> <li>[<code>flake8-use-pathlib</code>] Add autofixes for <code>PTH100</code>, <code>PTH106</code>, <code>PTH107</code>, <code>PTH108</code>, <code>PTH110</code>, <code>PTH111</code>, <code>PTH112</code>, <code>PTH113</code>, <code>PTH114</code>, <code>PTH115</code>, <code>PTH117</code>, <code>PTH119</code>, <code>PTH120</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/19213">#19213</a>)</li> <li>[<code>flake8-use-pathlib</code>] Add autofixes for <code>PTH203</code>, <code>PTH204</code>, <code>PTH205</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18922">#18922</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-return</code>] Fix false-positive for variables used inside nested functions in <code>RET504</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18433">#18433</a>)</li> <li>Treat form feed as valid whitespace before a line continuation (<a href="https://redirect.github.com/astral-sh/ruff/pull/19220">#19220</a>)</li> <li>[<code>flake8-type-checking</code>] Fix syntax error introduced by fix (<code>TC008</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19150">#19150</a>)</li> <li>[<code>pyupgrade</code>] Keyword arguments in <code>super</code> should suppress the <code>UP008</code> fix (<a href="https://redirect.github.com/astral-sh/ruff/pull/19131">#19131</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>[<code>flake8-pyi</code>] Make example error out-of-the-box (<code>PYI007</code>, <code>PYI008</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19103">#19103</a>)</li> <li>[<code>flake8-simplify</code>] Make example error out-of-the-box (<code>SIM116</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19111">#19111</a>)</li> <li>[<code>flake8-type-checking</code>] Make example error out-of-the-box (<code>TC001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19151">#19151</a>)</li> <li>[<code>flake8-use-pathlib</code>] Make example error out-of-the-box (<code>PTH210</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19189">#19189</a>)</li> <li>[<code>pycodestyle</code>] Make example error out-of-the-box (<code>E272</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19191">#19191</a>)</li> <li>[<code>pycodestyle</code>] Make example not raise unnecessary <code>SyntaxError</code> (<code>E114</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19190">#19190</a>)</li> <li>[<code>pydoclint</code>] Make example error out-of-the-box (<code>DOC501</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19218">#19218</a>)</li> <li>[<code>pylint</code>, <code>pyupgrade</code>] Fix syntax errors in examples (<code>PLW1501</code>, <code>UP028</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19127">#19127</a>)</li> <li>[<code>pylint</code>] Update <code>missing-maxsplit-arg</code> docs and error to suggest proper usage (<code>PLC0207</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18949">#18949</a>)</li> <li>[<code>flake8-bandit</code>] Make example error out-of-the-box (<code>S412</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19241">#19241</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/Gankra"><code>@Gankra</code></a></li> <li><a href="https://github.com/InSyncWithFoo"><code>@InSyncWithFoo</code></a></li> <li><a href="https://github.com/LaBatata101"><code>@LaBatata101</code></a></li> <li><a href="https://github.com/MatthewMckee4"><code>@MatthewMckee4</code></a></li> <li><a href="https://github.com/MeGaGiGaGon"><code>@MeGaGiGaGon</code></a></li> <li><a href="https://github.com/MichaReiser"><code>@MichaReiser</code></a></li> <li><a href="https://github.com/NamelessGO"><code>@NamelessGO</code></a></li> <li><a href="https://github.com/UnboundVariable"><code>@UnboundVariable</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/charliermarsh"><code>@charliermarsh</code></a></li> <li><a href="https://github.com/chirizxc"><code>@chirizxc</code></a></li> <li><a href="https://github.com/danparizher"><code>@danparizher</code></a></li> <li><a href="https://github.com/dhruvmanila"><code>@dhruvmanila</code></a></li> <li><a href="https://github.com/fdosani"><code>@fdosani</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> </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.12.3</h2> <h3>Preview features</h3> <ul> <li>[<code>flake8-bugbear</code>] Support non-context-manager calls in <code>B017</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/19063">#19063</a>)</li> <li>[<code>flake8-use-pathlib</code>] Add autofixes for <code>PTH100</code>, <code>PTH106</code>, <code>PTH107</code>, <code>PTH108</code>, <code>PTH110</code>, <code>PTH111</code>, <code>PTH112</code>, <code>PTH113</code>, <code>PTH114</code>, <code>PTH115</code>, <code>PTH117</code>, <code>PTH119</code>, <code>PTH120</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/19213">#19213</a>)</li> <li>[<code>flake8-use-pathlib</code>] Add autofixes for <code>PTH203</code>, <code>PTH204</code>, <code>PTH205</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18922">#18922</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-return</code>] Fix false-positive for variables used inside nested functions in <code>RET504</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/18433">#18433</a>)</li> <li>Treat form feed as valid whitespace before a line continuation (<a href="https://redirect.github.com/astral-sh/ruff/pull/19220">#19220</a>)</li> <li>[<code>flake8-type-checking</code>] Fix syntax error introduced by fix (<code>TC008</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19150">#19150</a>)</li> <li>[<code>pyupgrade</code>] Keyword arguments in <code>super</code> should suppress the <code>UP008</code> fix (<a href="https://redirect.github.com/astral-sh/ruff/pull/19131">#19131</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>[<code>flake8-pyi</code>] Make example error out-of-the-box (<code>PYI007</code>, <code>PYI008</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19103">#19103</a>)</li> <li>[<code>flake8-simplify</code>] Make example error out-of-the-box (<code>SIM116</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19111">#19111</a>)</li> <li>[<code>flake8-type-checking</code>] Make example error out-of-the-box (<code>TC001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19151">#19151</a>)</li> <li>[<code>flake8-use-pathlib</code>] Make example error out-of-the-box (<code>PTH210</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19189">#19189</a>)</li> <li>[<code>pycodestyle</code>] Make example error out-of-the-box (<code>E272</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19191">#19191</a>)</li> <li>[<code>pycodestyle</code>] Make example not raise unnecessary <code>SyntaxError</code> (<code>E114</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19190">#19190</a>)</li> <li>[<code>pydoclint</code>] Make example error out-of-the-box (<code>DOC501</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19218">#19218</a>)</li> <li>[<code>pylint</code>, <code>pyupgrade</code>] Fix syntax errors in examples (<code>PLW1501</code>, <code>UP028</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19127">#19127</a>)</li> <li>[<code>pylint</code>] Update <code>missing-maxsplit-arg</code> docs and error to suggest proper usage (<code>PLC0207</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/18949">#18949</a>)</li> <li>[<code>flake8-bandit</code>] Make example error out-of-the-box (<code>S412</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/19241">#19241</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
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=" |
||
|
|
97e72cb485 |
feat(backend): Make execution engine async-first (#10138)
This change introduced async execution for blocks and the execution engine. Paralellism will be achieved through a single process asynchronous execution instead of process concurrency. ### Changes 🏗️ * Support async execution for the graph executor * Removed process creation for node execution * Update all blocks to support async executions ### 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 graph executions, tested many of the impacted blocks. |
||
|
|
81d3eb7c34 |
feat(backend, frontend): make changes to use our security modules more effectively (#10123)
<!-- Clearly explain the need for these changes: --> Doing the CASA Audit and this is something to check ### Changes 🏗️ - limits APIs to use their specific endpoints - use expected trusted sources for each block and requests call - Use cryptographically valid string comparisons - Don't log secrets <!-- 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] Testing in dev branch once merged --------- Co-authored-by: Swifty <craigswift13@gmail.com> |
||
|
|
45578136e3 |
feat(frontend): Page-specific titles (#9995)
- Resolves #8656 Instead of "NextGen AutoGPT", make page titles like "My Test Agent - Library - AutoGPT Platform", "Settings - AutoGPT Platform", "Builder - AutoGPT Platform". ### Changes 🏗️ - Add specific page titles to `/library`, `/library/agents/[id]`, `/build`, `/profile`, `/profile/api_keys` - Fix page titles on `/marketplace`, `/profile/settings` ### 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] Go to `/marketplace` and check the page title - [x] Go to `/library` and check the page title - [x] Go to `/library/agents/[id]` and check the page title - [x] Go to `/build` and check the page title - [x] Go to `/profile` and check the page title - [x] Go to `/profile/settings` and check the page title - [x] Go to `/profile/api_keys` and check the page title - [ ] ~~Go to `/profile/dashboard` and check the page title~~ - [ ] ~~Go to `/profile/integrations` and check the page title~~ - [ ] ~~Go to `/profile/credits` and check the page title~~ |
||
|
|
d754c2349c |
chore(libs/deps-dev): Update ruff from 0.11.2 to 0.11.10 (#9775)
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.2 to 0.11.10 [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR 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> > **Note** > Automatic rebases have been disabled on this pull request as it has been open for over 30 days. Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
ba91c9f736 |
chore(libs/deps): Update 4 dependencies (#9908)
Bumps the production-dependencies group with 4 updates in the /autogpt_platform/autogpt_libs directory: [google-cloud-logging](https://github.com/googleapis/python-logging), [pydantic](https://github.com/pydantic/pydantic), [pydantic-settings](https://github.com/pydantic/pydantic-settings) and [supabase](https://github.com/supabase/supabase-py). Updates `google-cloud-logging` from 3.11.4 to 3.12.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/googleapis/python-logging/releases">google-cloud-logging's releases</a>.</em></p> <blockquote> <h2>v3.12.1</h2> <h2><a href="https://github.com/googleapis/python-logging/compare/v3.12.0...v3.12.1">3.12.1</a> (2025-04-21)</h2> <h3>Bug Fixes</h3> <ul> <li>Make logging handler close conditional to having the transport opened (<a href="https://redirect.github.com/googleapis/python-logging/issues/990">#990</a>) (<a href=" |
||
|
|
e5368f3857 |
fix: Resolve logger.warn(..) deprecration warnings (#9938)
This small PR resolves the deprecation warnings of the `logger` library: ``` DeprecationWarning: The 'warn' method is deprecated, use 'warning' instead ``` |
||
|
|
ef022720d5 |
fix(backend): Avoid releasing lock that is no longer owned by the current thread (#9878)
There are instances of node executions that were failed and end up stuck in the RUNNING status due to the execution failed to release the lock: ``` 2025-04-24 20:53:31,573 INFO [ExecutionManager|uid:25eba2d1-e9c1-44bc-88c7-43e0f4fbad5a|gid:01f8c315-c163-4dd1-a8a0-d396477c5a9f|nid:f8bf84ae-b1f0-4434-8f04-80f43852bc30]|geid:2e1b35c6-0d2f-4e97-adea-f6fe0d9965d0|neid:590b29ea-63ee-4e24-a429-de5a3e191e72|-] Failed node execution 590b29ea-63ee-4e24-a429-de5a3e191e72: Cannot release a lock that's no longer owned ``` ### Changes 🏗️ Check the ownership of the lock before releasing. ### 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] Existing CI tests. |
||
|
|
9052ee7b95 | fix(backend): Clear RabbitMQ connection cache on execution-manager retry | ||
|
|
e3846c22bd |
fix(backend): Avoid multithreaded pika access (#9832)
### Changes 🏗️ Avoid other threads accessing the channel within the same process. ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Manual agent runs |
||
|
|
71cdc18674 |
fix(backend): Fix cancel_execution can only work once (#9825)
### Changes 🏗️ The recent change to the execution cancelation fix turns out to only work on the first request. This PR change fixes it by reworking how the thread_cached work on async functions. ### 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] Cancel agent executions multiple times |
||
|
|
3771a0924c |
fix(backend): Update deprecated code caused by upgrades (#9758)
This series of upgrades: https://github.com/significant-gravitas/autogpt/pull/9727 https://github.com/Significant-Gravitas/AutoGPT/pull/9728 https://github.com/Significant-Gravitas/AutoGPT/pull/9560 Caused some code in the repo being deprecated, this PR addresses those. ### Changes 🏗️ Fix pydantic config, usage of field, usage of proper prisma `CreateInput` type, pytest loop-scope. ### 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] CI, manual test on running some agents. --------- Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
7179f9cea0 |
feat(backend, libs): Tell uvicorn to use our logger + always log to stdout+stderr (#9742)
<!-- Clearly explain the need for these changes: --> Uvicorn and our logs were ending up in different places, this pr enures uvicorn using our logging config, not their own. ### Changes 🏗️ - Clears uvicorn's loggers for rest, ws - always log to stdout,stderr and additionally log to gcp is appropriate <!-- 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 all possible variants of the log cloud vs not and ensure that uvicorn logs show up in the same place that rest of the system logs do for all --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
05af4a24ce |
chore(libs/deps): bump the production-dependencies group across 1 directory with 4 updates (#9727)
Bumps the production-dependencies group with 4 updates in the /autogpt_platform/autogpt_libs directory: [pydantic](https://github.com/pydantic/pydantic), [pydantic-settings](https://github.com/pydantic/pydantic-settings), [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) and [supabase](https://github.com/supabase/supabase-py). Updates `pydantic` from 2.10.6 to 2.11.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/releases">pydantic's releases</a>.</em></p> <blockquote> <h2>v2.11.1 2025-03-28</h2> <!-- raw HTML omitted --> <h2>What's Changed</h2> <h3>Fixes</h3> <ul> <li>Do not override <code>'definitions-ref'</code> schemas containing serialization schemas or metadata by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11644">pydantic/pydantic#11644</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.11.0...v2.11.1">https://github.com/pydantic/pydantic/compare/v2.11.0...v2.11.1</a></p> <h2>v2.11.0 2025-03-27</h2> <!-- raw HTML omitted --> <h2>What's Changed</h2> <h3>Packaging</h3> <ul> <li>Re-enable memray related tests on Python 3.12+ by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11191">pydantic/pydantic#11191</a></li> <li>Bump astral-sh/setup-uv from 4 to 5 by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11205">pydantic/pydantic#11205</a></li> <li>Add a <code>check_pydantic_core_version()</code> function by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11324">pydantic/pydantic#11324</a></li> <li>Remove <code>greenlet</code> development dependency by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11351">pydantic/pydantic#11351</a></li> <li>Bump ruff from 0.9.2 to 0.9.5 by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11407">pydantic/pydantic#11407</a></li> <li>Improve release automation process by <a href="https://github.com/austinyu"><code>@austinyu</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11427">pydantic/pydantic#11427</a></li> <li>Bump dawidd6/action-download-artifact from 8 to 9 by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11513">pydantic/pydantic#11513</a></li> <li>Bump <code>pydantic-core</code> to v2.32.0 by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11567">pydantic/pydantic#11567</a></li> </ul> <h3>New Features</h3> <ul> <li>Support unsubstituted type variables with both a default and a bound or constraints by <a href="https://github.com/FyZzyss"><code>@FyZzyss</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/10789">pydantic/pydantic#10789</a></li> <li>Add a <code>default_factory_takes_validated_data</code> property to <code>FieldInfo</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11034">pydantic/pydantic#11034</a></li> <li>Raise a better error when a generic alias is used inside <code>type[]</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11088">pydantic/pydantic#11088</a></li> <li>Properly support PEP 695 generics syntax by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11189">pydantic/pydantic#11189</a></li> <li>Properly support type variable defaults by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11332">pydantic/pydantic#11332</a></li> <li>Add support for validating v6, v7, v8 UUIDs by <a href="https://github.com/astei"><code>@astei</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11436">pydantic/pydantic#11436</a></li> <li>Improve alias configuration APIs by <a href="https://github.com/sydney-runkle"><code>@sydney-runkle</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11468">pydantic/pydantic#11468</a></li> <li>Add experimental support for free threading by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11516">pydantic/pydantic#11516</a></li> <li>Add <code>encoded_string()</code> method to the URL types by <a href="https://github.com/YassinNouh21"><code>@YassinNouh21</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11580">pydantic/pydantic#11580</a></li> <li>Add support for <code>defer_build</code> with <code>@validate_call</code> decorator by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11584">pydantic/pydantic#11584</a></li> <li>Allow <code>@with_config</code> decorator to be used with keyword arguments by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11608">pydantic/pydantic#11608</a></li> <li>Simplify customization of default value inclusion in JSON Schema generation by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11634">pydantic/pydantic#11634</a></li> <li>Add <code>generate_arguments_schema()</code> function by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11572">pydantic/pydantic#11572</a></li> </ul> <h3>Changes</h3> <ul> <li>Rework <code>create_model</code> field definitions format by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11032">pydantic/pydantic#11032</a></li> <li>Raise a deprecation warning when a field is annotated as final with a default value by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11168">pydantic/pydantic#11168</a></li> <li>Deprecate accessing <code>model_fields</code> and <code>model_computed_fields</code> on instances by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11169">pydantic/pydantic#11169</a></li> <li>Move core schema generation logic for path types inside the <code>GenerateSchema</code> class by <a href="https://github.com/sydney-runkle"><code>@sydney-runkle</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/10846">pydantic/pydantic#10846</a></li> <li>Move <code>Mapping</code> schema gen to <code>GenerateSchema</code> to complete removal of <code>prepare_annotations_for_known_type</code> workaround by <a href="https://github.com/sydney-runkle"><code>@sydney-runkle</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11247">pydantic/pydantic#11247</a></li> <li>Remove Python 3.8 Support by <a href="https://github.com/sydney-runkle"><code>@sydney-runkle</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11258">pydantic/pydantic#11258</a></li> <li>Optimize calls to <code>get_type_ref</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/10863">pydantic/pydantic#10863</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/blob/main/HISTORY.md">pydantic's changelog</a>.</em></p> <blockquote> <h2>v2.11.1 (2025-03-28)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.11.1">GitHub release</a></p> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Do not override <code>'definitions-ref'</code> schemas containing serialization schemas or metadata by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11644">#11644</a></li> </ul> <h2>v2.11.0 (2025-03-27)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.11.0">GitHub release</a></p> <h3>What's Changed</h3> <p>Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general). See the <a href="https://pydantic.dev/articles/pydantic-v2-11-release">blog post</a> for more details.</p> <h4>Packaging</h4> <ul> <li>Bump <code>pydantic-core</code> to v2.33.0 by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11631">#11631</a></li> </ul> <h4>New Features</h4> <ul> <li>Add <code>encoded_string()</code> method to the URL types by <a href="https://github.com/YassinNouh21"><code>@YassinNouh21</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11580">#11580</a></li> <li>Add support for <code>defer_build</code> with <code>@validate_call</code> decorator by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11584">#11584</a></li> <li>Allow <code>@with_config</code> decorator to be used with keyword arguments by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11608">#11608</a></li> <li>Simplify customization of default value inclusion in JSON Schema generation by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11634">#11634</a></li> <li>Add <code>generate_arguments_schema()</code> function by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11572">#11572</a></li> </ul> <h4>Fixes</h4> <ul> <li>Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11571">#11571</a></li> <li>Fix runtime error when computing model string representation involving cached properties and self-referenced models by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11579">#11579</a></li> <li>Preserve other steps when using the ellipsis in the pipeline API by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11626">#11626</a></li> <li>Fix deferred discriminator application logic by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/11591">#11591</a></li> </ul> <h3>New Contributors</h3> <ul> <li><a href="https://github.com/cmenon12"><code>@cmenon12</code></a> made their first contribution in <a href="https://redirect.github.com/pydantic/pydantic/pull/11562">#11562</a></li> <li><a href="https://github.com/Jeukoh"><code>@Jeukoh</code></a> made their first contribution in <a href="https://redirect.github.com/pydantic/pydantic/pull/11611">#11611</a></li> </ul> <h2>v2.11.0b2 (2025-03-17)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2">GitHub release</a></p> <h3>What's Changed</h3> <h4>Packaging</h4> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
babcb41f43 |
refactor(libs): Remove print statements (#9718)
Remove the debug print statements in the logging module. Every time an app process is started, it prints: ``` Console logging enabled ``` or similar, depending on the logging config. |
||
|
|
abcacacc06 | fix(ci): Update lockfiles | ||
|
|
1162ec1474 |
refactor(backend): Reorganize & clean up execution update system (#9663)
- Prep work for #8782 - Prep work for #8779 ### Changes 🏗️ - refactor(platform): Differentiate graph/node execution events - fix(platform): Subscribe to execution updates by `graph_exec_id` instead of `graph_id`+`graph_version` - refactor(backend): Move all execution related models and functions from `.data.graph` to `.data.execution` - refactor(backend): Reorganize & refactor `.data.execution` - fix(libs): Remove `load_dotenv` in `.auth.config` to fix test config issues - dx: Bump version of `black` in pre-commit config to v24.10.0 to match poetry.lock - Other minor refactoring in both frontend and backend ### 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: - Run an agent in the builder - [x] -> works normally, node I/O is updated in real time - Run an agent in the library - [x] -> works normally --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
e0300f3d13 |
chore(libs/deps-dev): bump ruff from 0.9.6 to 0.9.9 in /autogpt_platform/autogpt_libs in the development-dependencies group (#9559)
Bumps the development-dependencies group in /autogpt_platform/autogpt_libs with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.9.6 to 0.9.9 <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.9.9</h2> <h2>Release Notes</h2> <h3>Preview features</h3> <ul> <li>Fix caching of unsupported-syntax errors (<a href="https://redirect.github.com/astral-sh/ruff/pull/16425">#16425</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Only show unsupported-syntax errors in editors when preview mode is enabled (<a href="https://redirect.github.com/astral-sh/ruff/pull/16429">#16429</a>)</li> </ul> <h2>Contributors</h2> <ul> <li><a href="https://github.com/InSyncWithFoo"><code>@InSyncWithFoo</code></a></li> <li><a href="https://github.com/MichaReiser"><code>@MichaReiser</code></a></li> <li><a href="https://github.com/dhruvmanila"><code>@dhruvmanila</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> </ul> <h2>Install ruff 0.9.9</h2> <h3>Install prebuilt binaries via shell script</h3> <pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-installer.sh | sh </code></pre> <h3>Install prebuilt binaries via powershell script</h3> <pre lang="sh"><code>powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-installer.ps1 | iex" </code></pre> <h2>Download ruff 0.9.9</h2> <table> <thead> <tr> <th>File</th> <th>Platform</th> <th>Checksum</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-apple-darwin.tar.gz">ruff-aarch64-apple-darwin.tar.gz</a></td> <td>Apple Silicon macOS</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-apple-darwin.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-apple-darwin.tar.gz">ruff-x86_64-apple-darwin.tar.gz</a></td> <td>Intel macOS</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-apple-darwin.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-pc-windows-msvc.zip">ruff-aarch64-pc-windows-msvc.zip</a></td> <td>ARM64 Windows</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-pc-windows-msvc.zip.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-pc-windows-msvc.zip">ruff-i686-pc-windows-msvc.zip</a></td> <td>x86 Windows</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-pc-windows-msvc.zip.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-pc-windows-msvc.zip">ruff-x86_64-pc-windows-msvc.zip</a></td> <td>x64 Windows</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-pc-windows-msvc.zip.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-gnu.tar.gz">ruff-aarch64-unknown-linux-gnu.tar.gz</a></td> <td>ARM64 Linux</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-unknown-linux-gnu.tar.gz">ruff-i686-unknown-linux-gnu.tar.gz</a></td> <td>x86 Linux</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64-unknown-linux-gnu.tar.gz">ruff-powerpc64-unknown-linux-gnu.tar.gz</a></td> <td>PPC64 Linux</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz">ruff-powerpc64le-unknown-linux-gnu.tar.gz</a></td> <td>PPC64LE Linux</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-s390x-unknown-linux-gnu.tar.gz">ruff-s390x-unknown-linux-gnu.tar.gz</a></td> <td>S390x Linux</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-s390x-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-unknown-linux-gnu.tar.gz">ruff-x86_64-unknown-linux-gnu.tar.gz</a></td> <td>x64 Linux</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz">ruff-armv7-unknown-linux-gnueabihf.tar.gz</a></td> <td>ARMv7 Linux</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-musl.tar.gz">ruff-aarch64-unknown-linux-musl.tar.gz</a></td> <td>ARM64 MUSL Linux</td> <td><a href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-musl.tar.gz.sha256">checksum</a></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/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's changelog</a>.</em></p> <blockquote> <h2>0.9.9</h2> <h3>Preview features</h3> <ul> <li>Fix caching of unsupported-syntax errors (<a href="https://redirect.github.com/astral-sh/ruff/pull/16425">#16425</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Only show unsupported-syntax errors in editors when preview mode is enabled (<a href="https://redirect.github.com/astral-sh/ruff/pull/16429">#16429</a>)</li> </ul> <h2>0.9.8</h2> <h3>Preview features</h3> <ul> <li>Start detecting version-related syntax errors in the parser (<a href="https://redirect.github.com/astral-sh/ruff/pull/16090">#16090</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>pylint</code>] Mark fix unsafe (<code>PLW1507</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16343">#16343</a>)</li> <li>[<code>pylint</code>] Catch <code>case np.nan</code>/<code>case math.nan</code> in <code>match</code> statements (<code>PLW0177</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16378">#16378</a>)</li> <li>[<code>ruff</code>] Add more Pydantic models variants to the list of default copy semantics (<code>RUF012</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16291">#16291</a>)</li> </ul> <h3>Server</h3> <ul> <li>Avoid indexing the project if <code>configurationPreference</code> is <code>editorOnly</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16381">#16381</a>)</li> <li>Avoid unnecessary info at non-trace server log level (<a href="https://redirect.github.com/astral-sh/ruff/pull/16389">#16389</a>)</li> <li>Expand <code>ruff.configuration</code> to allow inline config (<a href="https://redirect.github.com/astral-sh/ruff/pull/16296">#16296</a>)</li> <li>Notify users for invalid client settings (<a href="https://redirect.github.com/astral-sh/ruff/pull/16361">#16361</a>)</li> </ul> <h3>Configuration</h3> <ul> <li>Add <code>per-file-target-version</code> option (<a href="https://redirect.github.com/astral-sh/ruff/pull/16257">#16257</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>refurb</code>] Do not consider docstring(s) (<code>FURB156</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16391">#16391</a>)</li> <li>[<code>flake8-self</code>] Ignore attribute accesses on instance-like variables (<code>SLF001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16149">#16149</a>)</li> <li>[<code>pylint</code>] Fix false positives, add missing methods, and support positional-only parameters (<code>PLE0302</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16263">#16263</a>)</li> <li>[<code>flake8-pyi</code>] Mark <code>PYI030</code> fix unsafe when comments are deleted (<a href="https://redirect.github.com/astral-sh/ruff/pull/16322">#16322</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Fix example for <code>S611</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16316">#16316</a>)</li> <li>Normalize inconsistent markdown headings in docstrings (<a href="https://redirect.github.com/astral-sh/ruff/pull/16364">#16364</a>)</li> <li>Document MSRV policy (<a href="https://redirect.github.com/astral-sh/ruff/pull/16384">#16384</a>)</li> </ul> <h2>0.9.7</h2> <h3>Preview features</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
af8ea93260 |
feat(backend): handle bounced emails from postmark (#9506)
<!-- Clearly explain the need for these changes: --> If we bounce too many emails from Postmark, they will be really upset with us, which is not so good. We need a way to react when we bounce emails, so we set it up so they notify us via webhooks. We also need to build authentication into those webhooks to prevent random people from sending us fake webhooks. All this together means we need a new route for the inbound webhook. To do this, we need a way to track if the email address is valid. So, after chatting with @itsababseh, we are adding a validated email field that defaults to `True` because all the users are already validated in prod. In dev, we may suffer. ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - Adds special API Key auth handler to the libs so that we can easily test stuff on the /docs endpoint and re-use it if needed - Adds New Secret for this API key from postmark - Adds a validatedEmail boolean to the`User` table - Adds a postmark endpoint to the routers list for handling the inbound webhook from Postmark - "Handle" all the various things this endpoint could send us (most of them we do nothing about) ### 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] Sign up with john@example.com email (the one postmark uses in webhooks) - [x] Set email validation to true - [x] Send the bounce webhook notice - [x] Check it gets set to false #### 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**) |
||
|
|
a694cf1e9d |
chore(libs/deps-dev): bump ruff from 0.9.3 to 0.9.6 in /autogpt_platform/autogpt_libs in the development-dependencies group across 1 directory (#9454)
Bumps the development-dependencies group with 1 update in the /autogpt_platform/autogpt_libs directory: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.9.3 to 0.9.6 <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.9.6</h2> <h2>Release Notes</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Add <code>external_task.{ExternalTaskMarker, ExternalTaskSensor}</code> for <code>AIR302</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16014">#16014</a>)</li> <li>[<code>flake8-builtins</code>] Make strict module name comparison optional (<code>A005</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15951">#15951</a>)</li> <li>[<code>flake8-pyi</code>] Extend fix to Python <= 3.9 for <code>redundant-none-literal</code> (<code>PYI061</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16044">#16044</a>)</li> <li>[<code>pylint</code>] Also report when the object isn't a literal (<code>PLE1310</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15985">#15985</a>)</li> <li>[<code>ruff</code>] Implement <code>indented-form-feed</code> (<code>RUF054</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16049">#16049</a>)</li> <li>[<code>ruff</code>] Skip type definitions for <code>missing-f-string-syntax</code> (<code>RUF027</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16054">#16054</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-annotations</code>] Correct syntax for <code>typing.Union</code> in suggested return type fixes for <code>ANN20x</code> rules (<a href="https://redirect.github.com/astral-sh/ruff/pull/16025">#16025</a>)</li> <li>[<code>flake8-builtins</code>] Match upstream module name comparison (<code>A005</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16006">#16006</a>)</li> <li>[<code>flake8-comprehensions</code>] Detect overshadowed <code>list</code>/<code>set</code>/<code>dict</code>, ignore variadics and named expressions (<code>C417</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15955">#15955</a>)</li> <li>[<code>flake8-pie</code>] Remove following comma correctly when the unpacked dictionary is empty (<code>PIE800</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16008">#16008</a>)</li> <li>[<code>flake8-simplify</code>] Only trigger <code>SIM401</code> on known dictionaries (<a href="https://redirect.github.com/astral-sh/ruff/pull/15995">#15995</a>)</li> <li>[<code>pylint</code>] Do not report calls when object type and argument type mismatch, remove custom escape handling logic (<code>PLE1310</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15984">#15984</a>)</li> <li>[<code>pyupgrade</code>] Comments within parenthesized value ranges should not affect applicability (<code>UP040</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16027">#16027</a>)</li> <li>[<code>pyupgrade</code>] Don't introduce invalid syntax when upgrading old-style type aliases with parenthesized multiline values (<code>UP040</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16026">#16026</a>)</li> <li>[<code>pyupgrade</code>] Ensure we do not rename two type parameters to the same name (<code>UP049</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16038">#16038</a>)</li> <li>[<code>pyupgrade</code>] [<code>ruff</code>] Don't apply renamings if the new name is shadowed in a scope of one of the references to the binding (<code>UP049</code>, <code>RUF052</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16032">#16032</a>)</li> <li>[<code>ruff</code>] Update <code>RUF009</code> to behave similar to <code>B008</code> and ignore attributes with immutable types (<a href="https://redirect.github.com/astral-sh/ruff/pull/16048">#16048</a>)</li> </ul> <h3>Server</h3> <ul> <li>Root exclusions in the server to project root (<a href="https://redirect.github.com/astral-sh/ruff/pull/16043">#16043</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-datetime</code>] Ignore <code>.replace()</code> calls while looking for <code>.astimezone</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16050">#16050</a>)</li> <li>[<code>flake8-type-checking</code>] Avoid <code>TC004</code> false positive where the runtime definition is provided by <code>__getattr__</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16052">#16052</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Improve <code>ruff-lsp</code> migration document (<a href="https://redirect.github.com/astral-sh/ruff/pull/16072">#16072</a>)</li> <li>Undeprecate <code>ruff.nativeServer</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16039">#16039</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/Daverball"><code>@Daverball</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/MichaReiser"><code>@MichaReiser</code></a></li> <li><a href="https://github.com/carlosgmartin"><code>@carlosgmartin</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/junhsonjb"><code>@junhsonjb</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.9.6</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Add <code>external_task.{ExternalTaskMarker, ExternalTaskSensor}</code> for <code>AIR302</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16014">#16014</a>)</li> <li>[<code>flake8-builtins</code>] Make strict module name comparison optional (<code>A005</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15951">#15951</a>)</li> <li>[<code>flake8-pyi</code>] Extend fix to Python <= 3.9 for <code>redundant-none-literal</code> (<code>PYI061</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16044">#16044</a>)</li> <li>[<code>pylint</code>] Also report when the object isn't a literal (<code>PLE1310</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15985">#15985</a>)</li> <li>[<code>ruff</code>] Implement <code>indented-form-feed</code> (<code>RUF054</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16049">#16049</a>)</li> <li>[<code>ruff</code>] Skip type definitions for <code>missing-f-string-syntax</code> (<code>RUF027</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16054">#16054</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-annotations</code>] Correct syntax for <code>typing.Union</code> in suggested return type fixes for <code>ANN20x</code> rules (<a href="https://redirect.github.com/astral-sh/ruff/pull/16025">#16025</a>)</li> <li>[<code>flake8-builtins</code>] Match upstream module name comparison (<code>A005</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16006">#16006</a>)</li> <li>[<code>flake8-comprehensions</code>] Detect overshadowed <code>list</code>/<code>set</code>/<code>dict</code>, ignore variadics and named expressions (<code>C417</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15955">#15955</a>)</li> <li>[<code>flake8-pie</code>] Remove following comma correctly when the unpacked dictionary is empty (<code>PIE800</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16008">#16008</a>)</li> <li>[<code>flake8-simplify</code>] Only trigger <code>SIM401</code> on known dictionaries (<a href="https://redirect.github.com/astral-sh/ruff/pull/15995">#15995</a>)</li> <li>[<code>pylint</code>] Do not report calls when object type and argument type mismatch, remove custom escape handling logic (<code>PLE1310</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15984">#15984</a>)</li> <li>[<code>pyupgrade</code>] Comments within parenthesized value ranges should not affect applicability (<code>UP040</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16027">#16027</a>)</li> <li>[<code>pyupgrade</code>] Don't introduce invalid syntax when upgrading old-style type aliases with parenthesized multiline values (<code>UP040</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16026">#16026</a>)</li> <li>[<code>pyupgrade</code>] Ensure we do not rename two type parameters to the same name (<code>UP049</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16038">#16038</a>)</li> <li>[<code>pyupgrade</code>] [<code>ruff</code>] Don't apply renamings if the new name is shadowed in a scope of one of the references to the binding (<code>UP049</code>, <code>RUF052</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16032">#16032</a>)</li> <li>[<code>ruff</code>] Update <code>RUF009</code> to behave similar to <code>B008</code> and ignore attributes with immutable types (<a href="https://redirect.github.com/astral-sh/ruff/pull/16048">#16048</a>)</li> </ul> <h3>Server</h3> <ul> <li>Root exclusions in the server to project root (<a href="https://redirect.github.com/astral-sh/ruff/pull/16043">#16043</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-datetime</code>] Ignore <code>.replace()</code> calls while looking for <code>.astimezone</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16050">#16050</a>)</li> <li>[<code>flake8-type-checking</code>] Avoid <code>TC004</code> false positive where the runtime definition is provided by <code>__getattr__</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16052">#16052</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Improve <code>ruff-lsp</code> migration document (<a href="https://redirect.github.com/astral-sh/ruff/pull/16072">#16072</a>)</li> <li>Undeprecate <code>ruff.nativeServer</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16039">#16039</a>)</li> </ul> <h2>0.9.5</h2> <h3>Preview features</h3> <ul> <li>Recognize all symbols named <code>TYPE_CHECKING</code> for <code>in_type_checking_block</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/15719">#15719</a>)</li> <li>[<code>flake8-comprehensions</code>] Handle builtins at top of file correctly for <code>unnecessary-dict-comprehension-for-iterable</code> (<code>C420</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15837">#15837</a>)</li> <li>[<code>flake8-logging</code>] <code>.exception()</code> and <code>exc_info=</code> outside exception handlers (<code>LOG004</code>, <code>LOG014</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15799">#15799</a>)</li> <li>[<code>flake8-pyi</code>] Fix incorrect behaviour of <code>custom-typevar-return-type</code> preview-mode autofix if <code>typing</code> was already imported (<code>PYI019</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15853">#15853</a>)</li> <li>[<code>flake8-pyi</code>] Fix more complex cases (<code>PYI019</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15821">#15821</a>)</li> <li>[<code>flake8-pyi</code>] Make <code>PYI019</code> autofixable for <code>.py</code> files in preview mode as well as stubs (<a href="https://redirect.github.com/astral-sh/ruff/pull/15889">#15889</a>)</li> <li>[<code>flake8-pyi</code>] Remove type parameter correctly when it is the last (<code>PYI019</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15854">#15854</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
296eee0b4f |
feat(platform/library): Library v2 > Agent Runs page (#9051)
- Resolves #8780 - Part of #8774 ### Changes 🏗️ - Add new UI components - Add `/agents/[id]` page, with sub-components: - `AgentRunsSelectorList` - `AgentRunSummaryCard` - `AgentRunStatusChip` - `AgentRunDetailsView` - `AgentRunDraftView` - `AgentScheduleDetailsView` Backend improvements: - Improve output of execution-related API endpoints: return `GraphExecution` instead of `NodeExecutionResult[]` - Reduce log spam from Prisma in tests General frontend improvements: - Hide nav link names on smaller screens to prevent navbar overflow - Clean up styling and fix sizing of `agptui/Button` Technical frontend improvements: - Fix tailwind config size increments - Rename `font-poppin` -> `font-poppins` - Clean up component implementations and usages - Yeet all occurrences of `variant="default"` - Remove `default` button variant as duplicate of `outline`; make `outline` the default - Fix minor typing issues DX: - Add front end type-check step to `pre-commit` config - Fix logging setup in conftest.py ### 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: - `/agents/[id]` (new) - Go to page -> list of runs loads - Create new run -> runs; all I/O is visible - Click "Run again" -> runs again with same input - `/monitoring` (existing) - Go to page -> everything loads - Selecting agents and agent runs works --------- Co-authored-by: Nicholas Tindle <nicktindle@outlook.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> Co-authored-by: Swifty <craigswift13@gmail.com> Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
4b76aae1c9 |
chore(libs/deps): bump the production-dependencies group across 1 directory with 4 updates (#9432)
Bumps the production-dependencies group with 4 updates in the /autogpt_platform/autogpt_libs directory: [google-cloud-logging](https://github.com/googleapis/python-logging), [pydantic](https://github.com/pydantic/pydantic), [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) and [supabase](https://github.com/supabase/supabase-py). Updates `google-cloud-logging` from 3.11.3 to 3.11.4 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/googleapis/python-logging/releases">google-cloud-logging's releases</a>.</em></p> <blockquote> <h2>v3.11.4</h2> <h2><a href="https://github.com/googleapis/python-logging/compare/v3.11.3...v3.11.4">3.11.4</a> (2025-01-22)</h2> <h3>Bug Fixes</h3> <ul> <li>Made <code>write_entries</code> raise <code>ValueError</code> on <code>ParseError</code>s (<a href="https://redirect.github.com/googleapis/python-logging/issues/958">#958</a>) (<a href=" |
||
|
|
ef118eff34 |
chore(libs/deps-dev): bump ruff from 0.9.2 to 0.9.3 in /autogpt_platform/autogpt_libs in the development-dependencies group (#9343)
Bumps the development-dependencies group in /autogpt_platform/autogpt_libs with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.9.2 to 0.9.3 <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.9.3</h2> <h2>Release Notes</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Argument <code>fail_stop</code> in DAG has been renamed as <code>fail_fast</code> (<code>AIR302</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15633">#15633</a>)</li> <li>[<code>airflow</code>] Extend <code>AIR303</code> with more symbols (<a href="https://redirect.github.com/astral-sh/ruff/pull/15611">#15611</a>)</li> <li>[<code>flake8-bandit</code>] Report all references to suspicious functions (<code>S3</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15541">#15541</a>)</li> <li>[<code>flake8-pytest-style</code>] Do not emit diagnostics for empty <code>for</code> loops (<code>PT012</code>, <code>PT031</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15542">#15542</a>)</li> <li>[<code>flake8-simplify</code>] Avoid double negations (<code>SIM103</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15562">#15562</a>)</li> <li>[<code>pyflakes</code>] Fix infinite loop with unused local import in <code>__init__.py</code> (<code>F401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15517">#15517</a>)</li> <li>[<code>pylint</code>] Do not report methods with only one <code>EM101</code>-compatible <code>raise</code> (<code>PLR6301</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15507">#15507</a>)</li> <li>[<code>pylint</code>] Implement <code>redefined-slots-in-subclass</code> (<code>W0244</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/9640">#9640</a>)</li> <li>[<code>pyupgrade</code>] Add rules to use PEP 695 generics in classes and functions (<code>UP046</code>, <code>UP047</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15565">#15565</a>, <a href="https://redirect.github.com/astral-sh/ruff/pull/15659">#15659</a>)</li> <li>[<code>refurb</code>] Implement <code>for-loop-writes</code> (<code>FURB122</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/10630">#10630</a>)</li> <li>[<code>ruff</code>] Implement <code>needless-else</code> clause (<code>RUF047</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15051">#15051</a>)</li> <li>[<code>ruff</code>] Implement <code>starmap-zip</code> (<code>RUF058</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15483">#15483</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-bugbear</code>] Do not raise error if keyword argument is present and target-python version is less or equals than 3.9 (<code>B903</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15549">#15549</a>)</li> <li>[<code>flake8-comprehensions</code>] strip parentheses around generators in <code>unnecessary-generator-set</code> (<code>C401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15553">#15553</a>)</li> <li>[<code>flake8-pytest-style</code>] Rewrite references to <code>.exception</code> (<code>PT027</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15680">#15680</a>)</li> <li>[<code>flake8-simplify</code>] Mark fixes as unsafe (<code>SIM201</code>, <code>SIM202</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15626">#15626</a>)</li> <li>[<code>flake8-type-checking</code>] Fix some safe fixes being labeled unsafe (<code>TC006</code>,<code>TC008</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15638">#15638</a>)</li> <li>[<code>isort</code>] Omit trailing whitespace in <code>unsorted-imports</code> (<code>I001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15518">#15518</a>)</li> <li>[<code>pydoclint</code>] Allow ignoring one line docstrings for <code>DOC</code> rules (<a href="https://redirect.github.com/astral-sh/ruff/pull/13302">#13302</a>)</li> <li>[<code>pyflakes</code>] Apply redefinition fixes by source code order (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15575">#15575</a>)</li> <li>[<code>pyflakes</code>] Avoid removing too many imports in <code>redefined-while-unused</code> (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15585">#15585</a>)</li> <li>[<code>pyflakes</code>] Group redefinition fixes by source statement (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15574">#15574</a>)</li> <li>[<code>pylint</code>] Include name of base class in message for <code>redefined-slots-in-subclass</code> (<code>W0244</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15559">#15559</a>)</li> <li>[<code>ruff</code>] Update fix for <code>RUF055</code> to use <code>var == value</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/15605">#15605</a>)</li> </ul> <h3>Formatter</h3> <ul> <li>Fix bracket spacing for single-element tuples in f-string expressions (<a href="https://redirect.github.com/astral-sh/ruff/pull/15537">#15537</a>)</li> <li>Fix unstable f-string formatting for expressions containing a trailing comma (<a href="https://redirect.github.com/astral-sh/ruff/pull/15545">#15545</a>)</li> </ul> <h3>Performance</h3> <ul> <li>Avoid quadratic membership check in import fixes (<a href="https://redirect.github.com/astral-sh/ruff/pull/15576">#15576</a>)</li> </ul> <h3>Server</h3> <ul> <li>Allow <code>unsafe-fixes</code> settings for code actions (<a href="https://redirect.github.com/astral-sh/ruff/pull/15666">#15666</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-bandit</code>] Add missing single-line/dotall regex flag (<code>S608</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15654">#15654</a>)</li> <li>[<code>flake8-import-conventions</code>] Fix infinite loop between <code>ICN001</code> and <code>I002</code> (<code>ICN001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15480">#15480</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.9.3</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Argument <code>fail_stop</code> in DAG has been renamed as <code>fail_fast</code> (<code>AIR302</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15633">#15633</a>)</li> <li>[<code>airflow</code>] Extend <code>AIR303</code> with more symbols (<a href="https://redirect.github.com/astral-sh/ruff/pull/15611">#15611</a>)</li> <li>[<code>flake8-bandit</code>] Report all references to suspicious functions (<code>S3</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15541">#15541</a>)</li> <li>[<code>flake8-pytest-style</code>] Do not emit diagnostics for empty <code>for</code> loops (<code>PT012</code>, <code>PT031</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15542">#15542</a>)</li> <li>[<code>flake8-simplify</code>] Avoid double negations (<code>SIM103</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15562">#15562</a>)</li> <li>[<code>pyflakes</code>] Fix infinite loop with unused local import in <code>__init__.py</code> (<code>F401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15517">#15517</a>)</li> <li>[<code>pylint</code>] Do not report methods with only one <code>EM101</code>-compatible <code>raise</code> (<code>PLR6301</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15507">#15507</a>)</li> <li>[<code>pylint</code>] Implement <code>redefined-slots-in-subclass</code> (<code>W0244</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/9640">#9640</a>)</li> <li>[<code>pyupgrade</code>] Add rules to use PEP 695 generics in classes and functions (<code>UP046</code>, <code>UP047</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15565">#15565</a>, <a href="https://redirect.github.com/astral-sh/ruff/pull/15659">#15659</a>)</li> <li>[<code>refurb</code>] Implement <code>for-loop-writes</code> (<code>FURB122</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/10630">#10630</a>)</li> <li>[<code>ruff</code>] Implement <code>needless-else</code> clause (<code>RUF047</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15051">#15051</a>)</li> <li>[<code>ruff</code>] Implement <code>starmap-zip</code> (<code>RUF058</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15483">#15483</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-bugbear</code>] Do not raise error if keyword argument is present and target-python version is less or equals than 3.9 (<code>B903</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15549">#15549</a>)</li> <li>[<code>flake8-comprehensions</code>] strip parentheses around generators in <code>unnecessary-generator-set</code> (<code>C401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15553">#15553</a>)</li> <li>[<code>flake8-pytest-style</code>] Rewrite references to <code>.exception</code> (<code>PT027</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15680">#15680</a>)</li> <li>[<code>flake8-simplify</code>] Mark fixes as unsafe (<code>SIM201</code>, <code>SIM202</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15626">#15626</a>)</li> <li>[<code>flake8-type-checking</code>] Fix some safe fixes being labeled unsafe (<code>TC006</code>,<code>TC008</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15638">#15638</a>)</li> <li>[<code>isort</code>] Omit trailing whitespace in <code>unsorted-imports</code> (<code>I001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15518">#15518</a>)</li> <li>[<code>pydoclint</code>] Allow ignoring one line docstrings for <code>DOC</code> rules (<a href="https://redirect.github.com/astral-sh/ruff/pull/13302">#13302</a>)</li> <li>[<code>pyflakes</code>] Apply redefinition fixes by source code order (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15575">#15575</a>)</li> <li>[<code>pyflakes</code>] Avoid removing too many imports in <code>redefined-while-unused</code> (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15585">#15585</a>)</li> <li>[<code>pyflakes</code>] Group redefinition fixes by source statement (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15574">#15574</a>)</li> <li>[<code>pylint</code>] Include name of base class in message for <code>redefined-slots-in-subclass</code> (<code>W0244</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15559">#15559</a>)</li> <li>[<code>ruff</code>] Update fix for <code>RUF055</code> to use <code>var == value</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/15605">#15605</a>)</li> </ul> <h3>Formatter</h3> <ul> <li>Fix bracket spacing for single-element tuples in f-string expressions (<a href="https://redirect.github.com/astral-sh/ruff/pull/15537">#15537</a>)</li> <li>Fix unstable f-string formatting for expressions containing a trailing comma (<a href="https://redirect.github.com/astral-sh/ruff/pull/15545">#15545</a>)</li> </ul> <h3>Performance</h3> <ul> <li>Avoid quadratic membership check in import fixes (<a href="https://redirect.github.com/astral-sh/ruff/pull/15576">#15576</a>)</li> </ul> <h3>Server</h3> <ul> <li>Allow <code>unsafe-fixes</code> settings for code actions (<a href="https://redirect.github.com/astral-sh/ruff/pull/15666">#15666</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-bandit</code>] Add missing single-line/dotall regex flag (<code>S608</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15654">#15654</a>)</li> <li>[<code>flake8-import-conventions</code>] Fix infinite loop between <code>ICN001</code> and <code>I002</code> (<code>ICN001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15480">#15480</a>)</li> <li>[<code>flake8-simplify</code>] Do not emit diagnostics for expressions inside string type annotations (<code>SIM222</code>, <code>SIM223</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15405">#15405</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |