Add missing plural output versions to blocks that yield individual items
in loops but don't provide the complete collection:
- GetRedditPostsBlock: add `posts` output for all Reddit posts
- ReadRSSFeedBlock: add `entries` output for all RSS entries
- AddMemoryBlock: add `results` output for all memory operation results
This allows users to access both individual items (for iteration) and the
complete collection (for aggregate operations) from the same block execution.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The block library was missing two key capabilities that keep coming up
in real-world agent flows:
1. **Granular Mem0 filtering.** Agents often work side-by-side for the
same user, so memories must be scoped to a specific run or agent to
avoid crosstalk.
2. **First-class Google Sheets support.** Many community projects (e.g.,
data-collection, lightweight dashboards, no-code workflows) rely on
Sheets, but we only had a brittle REST call block.
This PR adds fine-grained filters to every Mem0 retrieval block and
introduces a complete, OAuth-ready Google Sheets suite so agents can
create, read, write, format, and manage spreadsheets safely.
:contentReference[oaicite:0]{index=0}
---
### Changes 🏗️
#### 📚 Mem0 block enhancements
* Added `categories_filter`, `metadata_filter`, `limit_memory_to_run`,
and `limit_memory_to_agent` inputs to **SearchMemoryBlock**,
**GetAllMemoriesBlock**, and **GetLatestMemoryBlock**.
* Added identical scoping logic to **AddMemoryBlock** so newly-created
memories can be tied to run/agent IDs.
#### 📊 New Google Sheets blocks (`backend/blocks/google/sheets.py`)
| Block | Purpose |
|-------|---------|
| `GoogleSheetsReadBlock` | Read a range |
| `GoogleSheetsWriteBlock` | Overwrite a range |
| `GoogleSheetsAppendBlock` | Append rows |
| `GoogleSheetsClearBlock` | Clear a range |
| `GoogleSheetsMetadataBlock` | Fetch spreadsheet + sheet info |
| `GoogleSheetsManageSheetBlock` | Create / delete / copy a sheet |
| `GoogleSheetsBatchOperationsBlock` | Batch update / clear |
| `GoogleSheetsFindReplaceBlock` | Find & replace text |
| `GoogleSheetsFormatBlock` | Cell formatting (bg/text colour, bold,
italic, font size) |
| `GoogleSheetsCreateSpreadsheetBlock` | Spin up a new spreadsheet |
* Each block has typed input/output schemas, built-in test mocks, and is
disabled in prod unless Google OAuth is configured.
* Added helper enums (`SheetOperation`, `BatchOperationType`) and
updated **CLAUDE.md** contributor guide with a UUID-generation step.
:contentReference[oaicite:2]{index=2}
---
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Manual E2E run: agent writes chat summary to new spreadsheet,
reads it back, searches memory with run-scoped filter
- [x] Live Google API smoke-tests (read/write/append/clear/format) using
a disposable spreadsheet
## Changes 🏗️
We noticed that in some pages ( `/build` _mainly_ ), where a lot of API
calls are fired in parallel using the old `BackendAPI`( _running many
agent executions_ ) the performance became worse. That is because the
`BackendAPI` was proxied via [server
actions](https://nextjs.org/docs/14/app/building-your-application/data-fetching/server-actions-and-mutations)
( _to make calls to our Backend on the Next.js server_ ).
Looks like server actions don't run in parallel, and their performance
is also subpar, given that we are not hosted on Vercel (they don't
utilise the edge middleware).
These changes cause all `BackendAPI` calls to be proxied via the Next.js
`/api/` route when executed on the browser; when executed on the server,
they bypass the proxy and directly access the API. Hopefully we gain:
- 🚀 Better Performance - API routes are faster than server actions for
this use case
- 🔧 Less Magic - Direct fetch calls instead of hidden server action
complexity
- ♻️ Code Reuse - Leveraging the existing proxy infrastructure used by
react-query
- 🎯 Cleaner Architecture - Single proxy pattern for all API calls
- 🔒 Same Security - Still uses server-side authentication with httpOnly
cookies
## Checklist 📋
### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] E2E tests pass
- [x] Click through the app, there is no issues
- [x] Agent executions are fast again in the builder
- [x] Test file uploads
This PR introduces key-value storage blocks.
### Changes 🏗️
- **Database Schema**: Add AgentNodeExecutionKeyValueData table with
composite primary key (userId, key)
- **Persistence Blocks**: Create PersistInformationBlock and
RetrieveInformationBlock in persistence.py
- **Scope-based Storage**: Support for within_agent (per agent) vs
across_agents (global user) persistence
- **Key Structure**: Use formal # delimiter for storage keys:
`agent#{graph_id}#{key}` and `global#{key}`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run all 244 block tests - all passing ✅
- [x] Test PersistInformationBlock with mock data storage
- [x] Test RetrieveInformationBlock with mock data retrieval
- [x] Verify scope-based key generation (within_agent vs across_agents)
- [x] Verify database function integration through all manager classes
- [x] Run lint and type checking - all passing ✅
- [x] Verify database migration is included and valid
#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [x] `docker-compose.yml` is updated or already compatible with my
changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
Note: This change adds database schema and new blocks but doesn't
require environment or docker-compose changes as it uses existing
database infrastructure.
---------
Co-authored-by: Claude <noreply@anthropic.com>
- Resolves#10298
- Follow-up to #10270
### Changes 🏗️
Amend two changes from #10270:
- Add fallback for `NEXT_PUBLIC_FRONTEND_BASE_URL` in custom-mutator.ts
- Revert rename of `FRONTEND_BASE_URL` to
`NEXT_PUBLIC_FRONTEND_BASE_URL` in `backend/.env.example`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Don't set `NEXT_PUBLIC_FRONTEND_BASE_URL`
- Run the platform locally
- [x] -> `/library` loads normally
#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
## Summary
- Enhanced graph execution cancellation and cleanup mechanisms
- Improved error handling and logging for graph execution lifecycle
- Added timeout handling for graph termination with proper status
updates
- Exposed a new API for stopping graph based on only graph_id or user_id
- Refactored logging metadata structure for better error tracking
## Key Changes
### Backend
- **Graph Execution Management**: Enhanced `stop_graph_execution` with
timeout-based waiting and proper status transitions
- **Execution Cleanup**: Added proper cancellation waiting with timeout
handling in executor manager
- **Logging Improvements**: Centralized `LogMetadata` class and improved
error logging consistency
- **API Enhancements**: Added bulk graph execution stopping
functionality
- **Error Handling**: Better exception handling and status management
for failed/cancelled executions
### Frontend
- **Status Safety**: Added null safety checks for status chips to
prevent runtime errors
- **Execution Control**: Simplified stop execution request handling
## Test Plan
- [x] Verify graph execution can be properly stopped and reaches
terminal state
- [x] Test timeout scenarios for stuck executions
- [x] Validate proper cleanup of running node executions when graph is
cancelled
- [x] Check frontend status chips handle undefined statuses gracefully
- [x] Test bulk execution stopping functionality
🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Claude <noreply@anthropic.com>
## Changes 🏗️
Requests to the Backend happen now on the server, given we moved to
server-side cookies 🍪 ... however the client proxy is not exposing the
API errors to the client correctly. This aim to fix that.
## Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Login to the platform
- [x] Run agents until you encounter an error
- [x] The error is shown on the toast
## Changes 🏗️
<img width="800" alt="Screenshot 2025-07-02 at 16 43 08"
src="https://github.com/user-attachments/assets/d7cd0dd7-e671-4c5d-8ed9-6d8f56371ff5"
/>
During logout, the user state gets cleared but the onboarding provider
continues to run and tries to access onboarding.completedSteps on a null
object, causing a runtime error 😬
This mostly happens because onboarding is broken on local and dev ( the
onboarding agents don't work ), so I manually skip it after creating an
account, navigating to `/marketplace`. That makes me think that the
onboarding provider still thinks I need to onboard, and hence why this
error?
## Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Create a new user
- [x] Instead of completing onboarding, navigate to `/marketplace` via
browser URL
- [x] logout, login/logout again few times and you don't see runtime
errors
# Change details
- **Before**: Each job separately installs dependencies (~4 redundant
installations)
### Massive Redundancy in Setup Steps
Each job repeats these SAME 4 steps:
- Checkout repository
- Set up Node.js (version 21)
- Enable corepack
- Install dependencies (pnpm install --frozen-lockfile)
This happens 4+ times across different jobs:
- lint job
- type-check job
- chromatic job
- test job (runs 2x due to matrix strategy)
### No Dependency Caching
No caching strategy - downloads packages fresh every time
- Every workflow run downloads all packages from scratch
- No benefit from previous runs, even with identical pnpm-lock.yaml
- **After**: Dependencies installed once in setup job, cached and reused
This optimization maintains all existing CI functionality while
significantly improving pipeline efficiency.
A workflow run example is dispatched:
https://github.com/souhailaS/AutoGPT/actions/workflows/platform-frontend-ci.yml
## Additional Context
We are a team of researchers from University of Zurich
(https://www.ifi.uzh.ch/en/zest.html) currently **working on automating
energy optimizations in GitHub Actions workflows**. This optimization
maintains full functionality while significantly reducing computational
overhead and energy consumption.
souhaila.serbout@uzh.ch
Fixes https://github.com/Significant-Gravitas/AutoGPT/issues/10284
### Changes 🏗️
- Allows passing an `aiohttp.BasicAuth` object directly to the `auth`
parameter of the `make_request` function.
- Converts tuple-based auth credentials to `aiohttp.BasicAuth` objects
before making the request.
Fixes
[AUTOGPT-SERVER-4AX](https://sentry.io/organizations/significant-gravitas/issues/6709824432/).
The issue was that: aiohttp's ClientSession.request received a plain
tuple for `auth` instead of an `aiohttp.BasicAuth` object, causing
OAuth2 token exchange failure.
This fix was generated by Seer in Sentry, triggered by Bently. 👁️ Run
ID: 185767
Not quite right? [Click here to continue debugging with
Seer.](https://sentry.io/organizations/significant-gravitas/issues/6709824432/?seerDrawer=true)
### 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
#### 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**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Co-authored-by: seer-by-sentry[bot] <157164994+seer-by-sentry[bot]@users.noreply.github.com>
This PR adds two setup scripts that will setup autogpt fully, it has a
windows .bat and a linux/mac .sh script, for now they are placed in a
new folder called "Installer"
### Note, the installers are supposed to be run outside of the autogpt
repo folder like Desktop/in a new empy folder because it will clone the
repo into the current directory.
I have had to add ``cross-env`` via ``pnpm add cross-env `` as on
windows the env is set differently in the ``package.json`` build section
``"build": "cross-env pnpm run generate:api-client &&
SKIP_STORYBOOK_TESTS=true next build"``
once fully setup i plan to make it so these commands can be run with the
following commands
Linux/Mac
```bash
curl -fsSL https://setup.agpt.co/install.sh -o install.sh && bash install.sh
```
Windows cmd/powershell
```bash
powershell -c "iwr https://setup.agpt.co/install.bat -o install.bat; ./install.bat"
```
Currently the commands above dont work but will later on!
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] I have tested the linux ``install.sh`` on a ubuntu system and it
setup the platform fully.
- [x] I have tested the windows ``install.bat`` on my windows system and
it setup the platform fully.
- [x] I have tested on both OS's and checked with missing prerequisites
to see if it shows the errors and it does
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ubbe <hi@ubbe.dev>
## Changes 🏗️
We want to make running the AutoGPT Front-end as easy as possible. For
that, you should be able to run it with the least amount of commands.
We recently added generated queries and types on the Front-end from the
Back-end OpenAPI schema, to make development easier and catch bugs
earlier. However, with the current setup, developers are forced to run
`pnpm generate:api-all` with the Back-end running, which is annoying.
After this PR, the Front-end can be rerun with just `pnpm i & pnpm dev`.
## Checklist 📋
### For code changes
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run the Front-end with just `pnpm dev` and it works
---------
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
### Changes 🏗️
A new undocumented env var, `NEXT_PUBLIC_AGPT_SERVER_BASE_URL`, was
added to the proxy route for it to work with the new `react-query`
mutator.
I removed it and used the existing `NEXT_PUBLIC_AGPT_SERVER_URL`, so we
have fewer environment variables to manage ( _and this one is already
added to all environments_ ).
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run the server locally
- [x] All pages ( library, marketplace, builder, settings ) work
Graph execution that fails due to interruption or unknown error should
be enqueued back to the queue. However, swallowing the error ends up not
marking the execution as a failure.
### Changes 🏗️
* Avoid keep updating the graph execution status on each node execution
step.
* Added a guard rail to avoid completing graph execution on
non-completed execution status.
* Avoid acknowledging messages from the queue if the graph execution is
not yet completed.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run graph execution, kill the process, re-run the process
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
Currently, we are using PyClamd to run a file anti-virus scan for all
the files uploaded into the platform. We split the file into small
chunks and serially check the chunks for the virus scan. The socket is
not thread-safe, and we need to create multiple sockets across many
threads to leverage concurrency. To make this step concurrent and keep
it fully async, we need to migrate PyClamd to aioclamd.
### Changes 🏗️
Convert pyclamd to aioclamd, leverage chunk parallelism scan with a
semaphore limiting the concurrency limit.
#### Side Note
Shout-out to @tedyu for raising this improvement idea.
### 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] Execute file upload into the platform
## Changes 🏗️
We need to `FRONTEND_BASE_URL` to → `NEXT_PUBLIC_FRONTEND_BASE_URL`
given is needed on the new API client on the Front-end to make requests.
The `NEXT_PUBLIC` prefix is important so that it is available on the
client.
## Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run the app locally
- [x] The library and other pages work
This pull request includes updates to the environment configuration and
API mutator logic in the `autogpt_platform/frontend` directory. The
changes aim to improve flexibility by introducing dynamic base URLs
through environment variables.
Environment configuration updates:
*
[`autogpt_platform/frontend/.env.example`](diffhunk://#diff-72012a00359825421736dc064be74187011cb5b0462bea1ed3a3c5ca80bb3117R2):
Added `NEXT_PUBLIC_FRONTEND_BASE_URL` to define the base URL for the
frontend dynamically.
API mutator logic updates:
*
[`autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts`](diffhunk://#diff-28c5af33c7bd0ecddc1793aa6a27bfd5b4f979b62c29990538aceea3320d8be9L1-R1):
Updated `BASE_URL` to use the `NEXT_PUBLIC_FRONTEND_BASE_URL`
environment variable, enabling dynamic configuration of the API proxy
URL.
### Checklist
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Tested manually and everything is working perfectly
This PR demonstrates how the new data fetching strategy works, so other
developers don’t get confused.
### Changes
- Updated `README.md` to explain the new data fetching strategy.
### Checklist 📋
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Nothing is breaking, everything works great
### Changes
- Restructure library components.
- Divide the component into two parts: one for rendering and one for
hooks.
- Add a `useInfiniteParams` inside the `orval` config to use `page` as
the pagination parameter.
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Manually tested everything and everything works fine
- Resolves#10217https://github.com/user-attachments/assets/26a402f5-6f43-453b-8c83-481380bde853
### Changes 🏗️
Frontend:
- Show message instead of action buttons ("Run" etc) when graph has
webhook node(s)
- Fix check for webhook nodes used in `BlocksControl` and `FlowEditor`
- Clean up `PrimaryActionBar` implementation
- Add `accent` variant to `ui/button:Button`
API:
- Add `GET /library/agents/by-graph/{graph_id}` endpoint
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to Builder
- Add a trigger block
- [x] -> action buttons disappear; message shows in their place
- Save the graph
- Click the "Agent Library" link in the message
- [x] -> app navigates to `/library/agents/[id]` for the newly created
agent
This PR helps to send all the React query requests through a Next.js
server proxy. It works something like this: when a user sends a request,
our custom mutator sends a request to the proxy server, where we add the
auth token to the header and send it to the backend again. 🌐
Users can send a client-side request directly to the backend server
because their browser does have access to auth tokens, so they need to
go via the Next.js server. 🚀
### Changes 🏗️
- Change the position of the generated client, mutator, and transfer
inside `/src/app/api`
- Update the mutator to send the request to the proxy server
- Add a proxy server at `/api/proxy`, which handles the request using
`makeAuthenticatedRequest` and `makeAuthenticatedFileUpload` helpers and
sends the request to the backend
- Remove `getSupabaseClient`, because we do not have access to the auth
token on client side, hence no need 🔑
- Update Orval configs to generate the client at the new position
- Added new backend updates to the auto-generated client.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] The setting page is using React Query and is working fine.
- [x] The mutator is sending requests to the proxy server correctly.
- [x] The proxy server is handling requests correctly.
- [x] The response handling is correct in both the proxy server and the
custom mutator.
## Changes 🏗️
### Overview
Introduces a new responsive `<Dialog />` component that automatically
adapts to screen size, providing optimal UX across devices.
<img width="800" alt="Screenshot 2025-06-27 at 16 00 01"
src="https://github.com/user-attachments/assets/d0c53b30-488f-4102-8100-c9318168d65b"
/>
<img width="300" alt="Screenshot 2025-06-27 at 16 00 12"
src="https://github.com/user-attachments/assets/f2105708-97d9-4a94-8e26-3c2d582ea8cd"
/>
### Key Features
#### 📱 **Responsive Behavior**
- **Desktop**: Modal dialog with overlay
- **Mobile**: Bottom drawer [Vaul](https://vaul.emilkowal.ski/) with
**swipe-to-dismiss** functionality
#### 🎯 **Multiple Interaction Methods**
- `ESC` key to close (both desktop & mobile)
- Click outside to dismiss
- Swipe down to dismiss (mobile drawer)
- Close button (X)
#### ❓ Why I did not use `shadcn/dialog` in this case as a base
While we already use the raw `shadcn/dialog` on the platform, it's
designed as a desktop-only solution and is not really
responsive-friendly. It lacks 📱 mobile-optimisation patterns like
_bottom drawers_, _swipe-to-dismiss gestures_ ( the new implementation
has it via [Vaul](https://vaul.emilkowal.ski/) ), and automatic
breakpoint adaptation according to screen size.
#### 🧩 **Compound Component Pattern**
```tsx
<Dialog title="Example">
<Dialog.Trigger>
<Button>Open Dialog</Button>
</Dialog.Trigger>
<Dialog.Content>
Content goes here
</Dialog.Content>
</Dialog>
```
#### ⚙️ **Flexible Control**
- **Uncontrolled**: Self-managed state via triggers
- **Controlled**: External state management
- **Force open**: rare but might be needed
- **Custom styling**: if needed
## Checklist 📋
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] **Desktop Modal**: Opens/closes via trigger, ESC key, click
outside, close button
- [x] **Mobile Drawer**: Automatically switches at `lg` breakpoint,
swipe-to-dismiss works
- [x] **Controlled Mode**: External state management functions correctly
- [x] **Force Open**: Dialog stays open for preview purposes
- [x] **Custom Styling**: CSS-in-JS overrides work as expected
- [x] **Footer Component**: Action buttons render and function properly
- [x] **No Title Mode**: Dialog works without title prop
- [x] **Accessibility**: Tab navigation, screen reader announcements,
ARIA compliance
- [x] **Responsive Breakpoints**: Component switches modes at correct
screen sizes
- [x] **Storybook**: All stories render and function correctly
---------
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
CreateListBlock can only batch lists based on the size limit, but
sometimes we need the size to be dynamically adjusted based on the token
count.
### Changes 🏗️
Improve CreateListBlock to support batching based on token count
### 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 CreateListBlock
Complete the implementation of the Agent Run Scheduling UX in the
Library.
Demo:
https://github.com/user-attachments/assets/701adc63-452c-4d37-aeea-51788b2774f2
### Changes 🏗️
Frontend:
- Add "Schedule" button + dialog + logic to `AgentRunDraftView`
- Update corresponding logic on `AgentRunsPage`
- Add schedule name field to `CronSchedulerDialog`
- Amend Builder components `useAgentGraph`, `FlowEditor`,
`RunnerUIWrapper` to also handle schedule name input
- Split `CronScheduler` into `CronScheduler`+`CronSchedulerDialog`
- Make `AgentScheduleDetailsView` more fully functional
- Add schedule description to info box
- Add "Delete schedule" button
- Update schedule create/select/delete logic in `AgentRunsPage`
- Improve schedule UX in `AgentRunsSelectorList`
- Switch tabs automatically when a run or schedule is selected
- Remove now-redundant schedule filters
- Refactor `@/lib/monitor/cronExpressionManager` into
`@/lib/cron-expression-utils`
Backend + API:
- Add name and credentials to graph execution schedule job params
- Update schedule API
- `POST /schedules` -> `POST /graphs/{graph_id}/schedules`
- Add `GET /graphs/{graph_id}/schedules`
- Add not found error handling to `DELETE /schedules/{schedule_id}`
- Minor refactoring
Backend:
- Fix "`GraphModel`->`NodeModel` is not fully defined" error in
scheduler
- Add support for all exceptions defined in `backend.util.exceptions` to
RPC logic in `backend.util.service`
- Fix inconsistent log prefixing in `backend.executor.scheduler`
### 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:
- Create a simple agent with inputs and blocks that require credentials;
go to this agent in the Library
- Fill out the inputs and click "Schedule"; make it run every minute
(for testing purposes)
- [x] -> newly created schedule appears in the list
- [x] -> scheduled runs are successful
- Click "Delete schedule"
- [x] -> schedule no longer in list
- [x] -> on deleting the last schedule, view switches back to the Runs
list
- [x] -> no new runs occur from the deleted schedule
Calling LLM using the current block sometimes can break due to the high
context window.
A prompt compaction algorithm is applied (enabled by default) to make
sure the sent prompt is within a context window limit.
### Changes 🏗️
````
Heuristics
--------
* Prefer shrinking the content rather than truncating the conversation.
* If the conversation content is compacted and it's still not enough, then reduce the conversation list.
* The rest of the implementation is adjusted to minimize the LLM call breaking.
Strategy
--------
1. **Token-aware truncation** – progressively halve a per-message cap
(`start_cap`, `start_cap/2`, … `floor_cap`) and apply it to the
*content* of every message except the first and last. Tool shells
are included: we keep the envelope but shorten huge payloads.
2. **Middle-out deletion** – if still over the limit, delete the whole
messages working outward from the centre, **skipping** any message
that contains ``tool_calls`` or has ``role == "tool"``.
3. **Last-chance trim** – if still too big, truncate the *first* and
*last* message bodies down to `floor_cap` tokens.
4. If the prompt is *still* too large:
• raise ``ValueError`` when ``lossy_ok == False`` (default)
• return the partially-trimmed prompt when ``lossy_ok == True``
````
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run an SDM block in a loop until it hits 200000 tokens using the
open-ai O3 model.
- Follow-up fix to #10138
AI erased a bit of functionality from the `GithubReadPullRequestBlock`
in #10138. This PR puts it back and improves on the old format.
### Changes 🏗️
- Include full diff in `changes` output of `GithubReadPullRequestBlock`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- Use the `GithubReadPullRequestBlock` with `include_pr_changes` enabled
- [ ] -> block runs successfully
- [ ] -> full diff included in `changes` output
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>
<html><head></head><body><h3>Why these changes are needed 🧐</h3>
<p>Revid.ai offers several specialised, undocumented rendering flows
beyond the basic “text-to-video” endpoint our platform already
supported.
to:</p>
<ol>
<li>
<p><strong>Generate ads</strong> from copy plus product images
(30-second vertical spots).</p>
</li>
<li>
<p><strong>Turn a single creative prompt</strong> into a fully
AI-generated video (no multi-line script).</p>
</li>
<li>
<p><strong>Transform a screenshot into a narrated, avatar-driven
clip</strong>, ideal for product-led demos.</p>
</li>
</ol>
<p>Without first-class blocks for these flows, users were forced to drop
to raw HTTP nodes, losing schema validation, test mocks and credential
management.</p>
<h3>Changes 🏗️</h3>
Added new category to ``BlockCategory`` in ``block.py`` for ``MARKETING
= "Block that helps with marketing"``
Area | Change | Notes
-- | -- | --
ai_shortform_video_block.py | Refactored out a shared _RevidMixin
(webhook + polling helpers). | Keeps DRY across new blocks.
| Added AudioTrack.DONT_STOP_ME_ABSTRACT_FUTURE_BASS and Voice.EVA
enum members. | Required by Revid sample payloads.
| AIAdMakerVideoCreatorBlock | Implements ai-ad-generator flow;
supports optional input_media_urls, target_duration,
use_only_provided_media.
| AIPromptToVideoCreatorBlock | Implements prompt-to-video flow with
prompt_target_duration.
| AIScreenshotToVideoAdBlock | Implements screenshot-to-video-ad flow
(avatar narration, BG removal).
| Added full pydantic schemas, test stubs & mock hooks for each new
block. | Ensures unit tests pass and blocks appear in UI.
<p>No existing functionality was removed; current <code
inline="">AIShortformVideoCreatorBlock</code> is untouched apart from
enum imports.</p></body></html>
### 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] use the ``AI ShortForm Video Creator`` block to generate a video
and it will work
- [x] same with `` ai ad maker video creator`` block test it and it
should work
- [x] and test ``ai screenshot to video ad`` block it should work
---------
Co-authored-by: Bently <Github@bentlybro.com>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
* Add an enriching email feature toggle for SearchPeopleBlock
* Introduce GetPersonDetailBlock
* Adjust the cost of both blocks
### 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] Execute SearchPeopleBlock & GetPersonDetailBlock
Currently, we don't have a secure way to pass Authorization headers when
calling the `SendWebRequestBlock`.
This hinders the integration of third-party applications that do not yet
have native block support.
### Changes 🏗️
Add Host-scoped credentials support for the newly introduced
SendAuthenticatedWebRequestBlock.
<img width="1000" alt="image"
src="https://github.com/user-attachments/assets/0d3d577a-2b9b-4f0f-9377-0e00a069ba37"
/>
<img width="1000" alt="image"
src="https://github.com/user-attachments/assets/a59b9f16-c89c-453d-a628-1df0dfd60fb5"
/>
### 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] Uses `https://api.openai.com/v1/images/edits` through
SendWebRequestBlock by passing the api-key through host-scoped
credentials.
### Why are these changes needed?
<!-- Clearly explain the need for these changes: -->
These changes document the OAuth integration flow for CASA lvl 2
compliance, specifically addressing the requirement to "Verify
documentation and justification of all the application's trust
boundaries, components, and significant data flows." The documentation
clarifies the two distinct OAuth implementations in AutoGPT: user
authentication via Supabase SSO and API integration credentials for
third-party services.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Created comprehensive OAuth integration flow documentation at
`/docs/content/platform/contributing/oauth-integration-flow.md`
- Documented trust boundaries between frontend (untrusted), backend API
(trusted), and external providers (semi-trusted)
- Added detailed component architecture for both frontend and backend
OAuth implementations
- Included mermaid diagrams illustrating:
- OAuth flow sequences (initiation, authorization, token refresh)
- System architecture showing SSO vs API integration OAuth
- Data flow diagram
- Security architecture layers
- Credential lifecycle state diagram
- Documented security measures including CSRF protection, PKCE
implementation, and token management
- Clarified the distinction between Supabase SSO for user login and
custom OAuth for API integrations
- Added references to source files for up-to-date provider lists rather
than hard-coding all providers
### 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] Created documentation file with proper markdown formatting
- [x] Verified all file paths referenced in documentation exist
- [x] Confirmed mermaid diagrams render correctly
- [x] Validated that the documentation accurately reflects the codebase
implementation
---------
Co-authored-by: Claude <noreply@anthropic.com>
### Changes 🏗️
- We have implemented some backend changes, so I have added a new,
updated OpenAPI specification.
- We have updated the settings and API keys page to enable us to use
React Query for fetching data.
### Checklist 📋
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Settings and api keys page is working correctly
### Changes 🏗️
Implemented `httpOnly` cookies 🍪 for secure session management 💆🏽
- 🙏🏽 **Moved all API requests to server-side execution** for maximum XSS
protection
- All authentication now happens server-side with `httpOnly` cookies (no
JWT tokens exposed to client)
- Created `proxyApiRequest()` and `proxyFileUpload()` server actions to
handle all communication with API
- Updated `BackendAPI._request()` to always use proxy approach for
consistent security
- 🚧 **Exception: WebSocket authentication** requires client-side token
exposure
- Added `getWebSocketToken()` server action to securely provide tokens
only for WebSocket connections
- Maintains secure architecture while we keep the real-time features
- 🧹 **Abstracted implementation details** into reusable helper functions
- Reduced proxy actions from 157 lines to 48 lines (70% reduction)
- Added flexible content-type support ( _JSON, form-urlencoded, custom_
)
- Enhanced error handling for graceful logout scenarios
- 📙 **Renamed `/reset_password` page to `/reset-password`**
- couldn't resist sorry... snake case URLs get me
### 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] Verify all API requests work through server-side proxy
- [x] Confirm httpOnly cookies prevent client-side JWT access
- [x] Test WebSocket connections work with server-provided tokens
- [x] Verify logout scenarios don't throw authentication errors
- [x] Check file uploads work securely through proxy
- [x] Validate zero breaking changes for existing BackendAPI calls
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
Co-authored-by: Swifty <craigswift13@gmail.com>
## Changes 🏗️
<img width="800" alt="Screenshot 2025-06-25 at 20 34 38"
src="https://github.com/user-attachments/assets/bfc90504-85b6-4178-9ace-2aa4d14f16b0"
/>
<br /><br />
- To match what is on the AutoGPT design system
- Unit tests commented because they depend on:
https://github.com/Significant-Gravitas/AutoGPT/pull/10243
## Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run Storybook locally, Badge stories look good
An anti-virus file scan step is added to each file upload step on the
platform before the file is sent to cloud storage or local machine
storage.
### Changes 🏗️
* Added ClamAV service
* Added AV file scan on each upload step
* Added tests & documentation
* Make the step mandatory even on local development
### 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] Tried using FileUploadBlock & AgentFileInputBlock
## Changes 🏗️
<img width="1580" alt="Screenshot 2025-06-25 at 18 11 36"
src="https://github.com/user-attachments/assets/c8b136b6-5897-41fa-a03b-010582c4b879"
/>
<br /><br />
Add a new `<Link />` component that will be the standard when rendering
links on the platform.
It is a wrapper of `next/link` and has an `isExternal` prop; when
supplied `target="_blank"` and `rel="noopener noreferrer"` will be added
to it. It comes with the styles agreed on AutoGPT design system.
## Checklist 📋
### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run Storybook locally
- [x] Tests pass and the component looks good
## Changes 🏗️
<img width="800" alt="Screenshot 2025-06-25 at 17 52 38"
src="https://github.com/user-attachments/assets/18f859cf-5008-4915-925c-1912ab9cf176"
/>
- Depends on #10235 so that we can test the new Chromatic workflow with
this
- Documents our Skeleton atom which is directly
[shadcn/skeleton](https://ui.shadcn.com/docs/components/skeleton)
## Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run storybook locally
- [x] The Skeleton stories look good
## Changes 🏗️
<img width="800" alt="Screenshot 2025-06-25 at 13 43 06"
src="https://github.com/user-attachments/assets/13ffd32e-ffa1-482e-91a6-8363ad6b67df"
/>
<br /><br />
- Setup Chromatic ( install + `package.json` command )
- Make it run on the CI
- Remove a lot of old component in Storybook which were broken or need
deign review
- for now we only keep on Storybook what has been ✅ by design
- Remove `test-storybook:ci` commands
- I plan to run tests via Chromatic, but I want to look at that setup on
a separate PR and in a clean state
## 📋 Checklist
### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] The `chromatic` job succeeds on the CI and the changes appear on
Chromatic's dashboard
## Changes 🏗️
The test data script is not working locally, this should fix it 🤞🏽
- Fixed `agentId` → `agentGraphId` field references in preset matching
logic
- Fixed `agentId` → `agentGraphId` field references in store listing
graph lookup
- Added graph uniqueness logic to prevent duplicate library agents per
user
- Improved data consistency by ensuring proper foreign key relationships
## Checklist 📋
### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Verified script runs without database schema errors
- [x] Confirmed foreign key relationships are properly maintained
- [x] Tested that library agents use unique graphs per user
- [x] Validated preset matching uses correct field references
This PR makes several improvements to the `update_library_agent`
endpoint.
- Resolves#10216
### Changes 🏗️
- Add `DELETE /library/agents/{id}` endpoint
- Fix `PUT /library/agents/{id}` endpoint
- Return updated library agent
- Remove `is_deleted` parameter
- Change method from `PUT` to `PATCH`
Also, a small DX improvement:
- Expose `BackendAPI` globally through `window.api` for local dev
purposes
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Deleting library agents works
- Follow-up fix to #10167
- Resolves#10228
### Changes 🏗️
- Don't assume `block.input_schema.jsonschema()["required"]` exists
- Unbreak handling of `webhook_type` in
`BaseWebhooksManager.get_manual_webhook(..)`
### 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:
- Create an agent with a Generic Webhook Trigger block; go to it in the
Library
- [x] -> `/library/agents/[id]` loads normally
- Follow-up fix to #9862
- Resolves#10097
In #9862, the `AgentExecutorBlock`'s nested input field was renamed from
`data` to `input`, but apparently the frontend also had a reference to
this field and was now broken.
### Changes 🏗️
- Update `getInputPropKey` in `CustomNode` to use `inputs.{key}` instead
of `data.{key}`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Create an agent with at least one input
- Use the agent with at least one input inside another agent
- Set a default value on the input on the agent block
- Save the graph
- [x] -> default input value is saved
AIImageEditorBlock was not able to accept an image from AgentFileInput
or FileStore block.
### Changes 🏗️
* Add support for image loading for the image editor block:
<img width="1081" alt="Screenshot 2025-06-23 at 10 28 45 AM"
src="https://github.com/user-attachments/assets/ac3fea91-9503-4894-bbe3-2dc3c5649a39"
/>
* Avoid rendering a relative path image 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:
<!-- Put your test plan here: -->
- [x] Run AiImageEditor block using AgentFileInput or FileStore block.
This pull request adds support for setting up (webhook-)triggered agents
in the Library. It contains changes throughout the entire stack to make
everything work in the various phases of a triggered agent's lifecycle:
setup, execution, updates, deletion.
Setting up agents with webhook triggers was previously only possible in
the Builder, limiting their use to the agent's creator only. To make it
work in the Library, this change uses the previously introduced
`AgentPreset` to store information on, instead of on the graph's nodes
to which only a graph's creator has access.
- Initial ticket: #10111
- Builds on #9786


### Changes 🏗️
Frontend:
- Amend the Library's `AgentRunDraftView` to handle creating and editing
Presets
- Add `hideIfSingleCredentialAvailable` parameter to `CredentialsInput`
- Add multi-select support to `TypeBasedInput`
- Add Presets section to `AgentRunsSelectorList`
- Amend `AgentRunSummaryCard` for use for Presets
- Add `AgentStatusChip` to display general agent status (for now: Active
/ Inactive / Error)
- Add Preset loading logic and create/update/delete handlers logic to
`AgentRunsPage`
- Rename `IconClose` to `IconCross`
API:
- Add `LibraryAgent` properties `has_external_trigger`,
`trigger_setup_info`, `credentials_input_schema`
- Add `POST /library/agents/{library_agent_id}/setup_trigger` endpoint
- Remove redundant parameters from `POST
/library/presets/{preset_id}/execute` endpoint
Backend:
- Add `POST /library/agents/{library_agent_id}/setup_trigger` endpoint
- Extract non-node-related logic from `on_node_activate` into
`setup_webhook_for_block`
- Add webhook-related logic to `update_preset` and `delete_preset`
endpoints
- Amend webhook infrastructure to work with AgentPresets
- Add preset trigger support to webhook ingress endpoint
- Amend executor stack to work with passed-in node input
(`nodes_input_masks`, generalized from `node_credentials_input_map`)
- Amend graph validation to work with passed-in node input
- Add `AgentPreset`->`IntegrationWebhook` relation
- Add `WebhookWithRelations` model
- Change behavior of `BaseWebhooksManager.get_manual_webhook(..)` to
avoid unnecessary changes of the webhook URL: ignore `events` to find
matching webhook, and update `events` if necessary.
- Fix & improve `AgentPreset` API, models, and DB logic
- Add `isDeleted` filter to get/list queries
- Add `user_id` attribute to `LibraryAgentPreset` model
- Add separate `credentials` property to `LibraryAgentPreset` model
- Fix `library_db.update_preset(..)` replacement of existing
`InputPresets`
- Make `library_db.update_preset(..)` more usage-friendly with separate
parameters for updateable properties
- Add `user_id` checks to various DB functions
- Fix error handling in various endpoints
- Fix cache race condition on `load_webhook_managers()`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Test existing functionality
- [x] Auto-setup and -teardown of webhooks on save in the builder still
works
- [x] Running an agent normally from the Library still works
- Test new functionality
- [x] Setting up a trigger in the Library
- [x] Updating a trigger in the Library
- [x] Disabling and re-enabling a trigger in the Library
- [x] Deleting a trigger in the Library
- [x] Triggers set up in the Library result in a new run when the
webhook receives a payload
This pull request sets up and configures Orval for API client
generation. It automates the process of creating TypeScript clients from
the backend's OpenAPI specification, improving development efficiency
and reducing manual code maintenance.
### Changes 🏗️
- Configures Orval with a new configuration file (`orval.config.ts`).
- Adds scripts to `package.json` for fetching the OpenAPI spec and
generating the API client.
- Implements a custom mutator for handling authentication.
- Adds API client generation as a step in the CI workflow.
- Adds `.gitignore` entry for generated API client files.
- Adds a security middleware to prevent caching of sensitive data.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Verified that the API client is generated correctly.
- [x] Confirmed that the custom mutator is functioning as expected for
authentication.
- [x] Ensured that the new CI workflow step for API client generation is
successful.
- [x] Tested generated API calls
#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
Since auto conversion is applied before merging nested input in the
block, it breaks the auto conversion break.
### Changes 🏗️
* Enabling auto-type conversion on block input schema mismatch for
nested input
* Add batching feature for `CreateListBlock`
* Increase default max_token size for LLM call
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run `AIStructuredResponseGeneratorBlock` with non-string prompt
value (should be auto-converted).
### Changes 🏗️
Add cost calculation for Apollo integration.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run Apollo block Search People & Organizations Block.
### Why? 🤔
<!-- Clearly explain the need for these changes: -->
We need to prevent sensitive data (authentication tokens, API
keys, user credentials, personal information) from being cached by
browsers and proxies. Following the principle of "secure by
default", we're switching from a deny list to an allow list
approach for cache control.
### Changes 🛠️
<!-- Concisely describe all of the changes made in this pull
request: -->
- **Refactored cache control middleware from deny list to allow
list approach**
- By default, ALL endpoints now have `Cache-Control: no-store,
no-cache, must-revalidate, private` headers
- Only explicitly allowed paths (static assets, health checks,
public store pages) can be cached
- This ensures new endpoints are automatically protected without
developers having to remember to add them to a list
- **Updated `SecurityHeadersMiddleware` in
`/backend/backend/server/middleware/security.py`**
- Renamed `SENSITIVE_PATHS` to `CACHEABLE_PATHS`
- Inverted the logic in `is_cacheable_path()` method
- Cache control headers are now applied to all paths NOT in the
allow list
- **Updated test suite to match new behavior**
- Tests now verify that most endpoints have cache control
headers by default
- Tests verify that only allowed paths (static assets, health
endpoints, etc.) can be cached
- **Updated documentation in `CLAUDE.md`**
- Documented the new allow list approach
- Added instructions for developers on how to allow caching for
new endpoints
### 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 modified endpoints work still
- [x] Test modified endpoints correctly have no cache rules
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
Main issues:
* `AIStructuredResponseGeneratorBlock` is not able to produce a list of
objects.
* `SmartDecisionBlock` is not able to call tools with some optional
inputs.
### Changes 🏗️
* Allow persisting `null` / `None` value as execution output.
* Provide `multiple_tool_calls` option for `SmartDecisionBlock`.
* Provide `list_result` option for `AIStructuredResponseGeneratorBlock`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run `SmartDecisionBlock` & `AIStructuredResponseGeneratorBlock`
This PR introduces a custom function for generating unique operation IDs
for OpenAPI specifications to improve auto-generated client code
quality.
## Why This Change?
**Better Auto-Generated Clients**: Default FastAPI operation IDs create
unclear method names in generated clients. Our custom generator produces
clean, readable operation IDs that translate to intuitive method names.
- **Before**: `get_items_api_v1_items_get` → unclear generated methods
- **After**: `get_users_list` → clean, descriptive method names
## Changes
- ✨ **Added**: `custom_generate_unique_id` utility function
- Generates IDs using pattern: `{method}_{tag}_{summary}`
- Ensures uniqueness and readability
- 🔧 **Updated**: FastAPI app configuration to use custom generator
## Checklist
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] OpenAPI docs reflect new operation ID format
- [x] Tested various HTTP methods, tags, and summaries
- [x] Verified app startup functionality
- [x] Validated improved client generation output
Current Apollo blocks only work with keywords; the huge number of list
filter fields doesn't work because it's passing the wrong GET parameter
(missing `[]`).
### Changes 🏗️
Change the GET request to a POST request for Apollo.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run SearchPeopleBlock with title filter
This PR integrates React Query DevTools and ESLint rules to improve the
development workflow and enforce best practices for data fetching.
### Changes:
- **React Query DevTools:**
- Added the `@tanstack/react-query-devtools` package.
- DevTools are enabled by default in the development environment.
- They can be disabled by setting
`NEXT_PUBLIC_REACT_QUERY_DEVTOOL=false` in your environment variables.
- **ESLint Rules:**
- Integrated `@tanstack/eslint-plugin-query` to enforce best practices
and catch common errors in React Query usage.
- **Configuration:**
- Added the `NEXT_PUBLIC_REACT_QUERY_DEVTOOL` variable to the
`.env.example` file so other developers are aware of this option.
- **Documentation:**
- Updated the `README.md` with instructions on how to toggle the
DevTools using the environment variable.
Configuration Changes Checklist
- `.env.example` has been updated with the new environment variable.
### Checklist
For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run the app in development with pnpm dev.
- [x] Verified DevTools toggle with environment variables
- [x] Run pnpm lint in the frontend directory.
- [x] Confirm that linting passes on the current codebase.
### Screenshot
<img width="1512" alt="Screenshot 2025-06-19 at 6 32 22 PM"
src="https://github.com/user-attachments/assets/a3defd23-2c3d-4d20-b152-037d85e04503"
/>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
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>
Issue -
https://linear.app/autogpt/issue/OPEN-2534/set-up-react-query-for-both-client-side-and-server-side-operations
This update adds react-query to the frontend, enabling efficient data
fetching and caching. It uses a singleton QueryClient on the client for
shared cache, creates a new QueryClient for each server request to
prevent data leaks, and supports server-side prefetching for faster
data.
### Changes
- Add @tanstack/react-query dependency
- Set up QueryClient with default config (except 1m staleTime)
- Wrap app with QueryClientProvider for global access
- Ensure safe client/server QueryClient instantiation
> I only changed the staleTime in the default config because the other
settings work well for general use. For specific cases—like when you
want data to stay fresh unless manually invalidated—you can set
staleTime: Infinity in that query.
### 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] Ran frontend locally – it’s working fine
### Changes 🏗️

- Adds a new `<Button>` component that mirrors 1:1 what we have in the
design system
- Documented the new component via stories
- Re-arranged the stories in the Storybook sidebar to show the legacy
ones at the end
Once this is merged, we can start updating buttons on the app to only
use this one, so we have a consistent UX 💆🏽
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run Storybook locally
- [x] Button stories look good ( _in all variants_ )
### Changes 🏗️
Fixes: [Make the default scheduler frequency to daily instead of every
minute
#9985](https://github.com/Significant-Gravitas/AutoGPT/issues/9985)
This simply updates the Schedule Task's default from minute to daily at
09:00 as default time

### 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] Open the Schedule Task UI and see the default is now daily at
09:00
### Changes 🏗️
<img width="800" alt="Screenshot 2025-06-18 at 19 55 24"
src="https://github.com/user-attachments/assets/f3bd662e-cc64-4a32-a030-973b7cf89d8b"
/>
Document the new colour tokens agreed with the design team, and update
the Tailwind theme with them.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run Storybook locally
- [x] Verify the colors story renders well and make sense
## Description
Added the `graph_id` parameter to the stop execution endpoint path
(`/graphs/{graph_id}/executions/{graph_exec_id}/stop`) to fix client
generation from Openapi spec error.
## Problem
The client generation was failing due to missing path parameter
definition for `graph_id` in the stop execution endpoint.
<img width="1412" alt="Screenshot 2025-06-19 at 9 20 17 AM"
src="https://github.com/user-attachments/assets/aa1667d3-05be-48c6-975b-84473830ac03"
/>
## Solution
Added `graph_id` as a path parameter while maintaining the existing
functionality.
## Testing
- [x] Verified OpenAPI client generation works without errors
- [x] Confirmed endpoint functionality remains unchanged
- [x] Tested API calls maintain backward compatibility
## Changes 🏗️
Migrate to [Storybook 9](https://storybook.js.org/docs/migration-guide),
changes are mostly from the migration tool:
``` basg
pnpm storybook@latest upgrade
```
On top of that:
- removed stories for [shadcn](https://ui.shadcn.com/) components
- to avoid confusion, shadcn in our base for the component library, and
is already documented on their website
- removed example stories
- regrouped existing `agpt-ui` stories under `Legacy`
- I need to review them and see if they still fit the expected designs
of the platform or not
<img width="600" alt="Screenshot 2025-06-17 at 13 43 57"
src="https://github.com/user-attachments/assets/ca3d9c1b-9dc4-4684-ac77-6259beeb3e1d"
/>
## Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run `pn storybook` locally
- [x] It works well, and the stories look good
---------
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
Request on block execution can be throttled, and requests between
services can sometimes break. The scope of this PR is to add an
appropriate retry on those.
### Changes 🏗️
* Block request retry: Retry on throttled status code only (504, 429,
etc).
* RPC request retry: Retry connection issues (ConnectError, Timeout,
etc).
* Truncate logging on executor/utils.
### 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 execution
## Changes 🏗️
### ESLint Config
1. **Disabled `react-hooks/exhaustive-deps`:**
- to prevent unnecessary dependency proliferation and rely on code
review instead
2. **Added
[`next/typescript`](https://nextjs.org/docs/app/api-reference/config/eslint#with-typescript):**
- to the ESLint config to make sure we also have TS linting rules
3. **Added custom rule for `@typescript-eslint/no-unused-vars`:**
- to allow underscore-prefixed variables (convention for intentionally
unused), in some cases helpful
From now on, whenever we have unused variables or imports, the `lint` CI
will fail 🔴 , thanks to `next/typescript` that adds
`typescript-eslint/no-unused-vars` 💆🏽
### Minor Fixes
- Replaced empty interfaces with type aliases to resolve
`@typescript-eslint/no-empty-object-type` warnings
- Fixed unsafe non-null assertions with proper null checks
- Removed `@ts-ignore` comments in favour of proper type casting ( _when
possible_ 🙏🏽 )
### Google Analytics Component
- Changed Next.js Script strategy from `beforeInteractive` to
`afterInteractive` to resolve Next.js warnings
- this make sure loading analytics does not block page render 🙏🏽 (
_better page load time_ )
### Are these changes safe?
As long as the Typescript compiler does not complain ( check the
`type-check` job ) we should be save. Most changes are removing unused
code, if that code would be used somewhere else the compiler should
catch it and tell us 🫶
I also typed some code when possible, or bypassed the linter when I
thought it was fair for now. I disabled a couple ESLint rules. Most
importantly the `no-explicity-any` one as we have loads of stuff untyped
yet ( _this should be improved once API types are generated for us_ ).
### DX
Added some settings on `.vscode` folder 📁 so that files will be
formatted on save and also ESLint will fix errors on save when able 💯
### 📈 **Result:**
- ✅ All linting errors resolved
- ✅ Improved TypeScript strict mode compliance
- ✅ Better developer experience with cleaner code
## 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] Lint CI job passes
- [x] There is not type errors ( _TS will catch issue related to these
changes_ )
- Follow-up fix for #9786
A change to a DB statement introduced in #9786 turns out to be breaking.
Apparently `connect` can't just be used for *some* relations: if it is
used, it must be used for *all* relations created by the statement.
### Changes 🏗️
- Fix broken DB statement in `add_store_agent_to_library(..)`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Add store agent to library
Co-authored-by: Swifty <craigswift13@gmail.com>
## Changes 🏗️
### Checklist 📋
<img width="800" alt="Screenshot 2025-06-17 at 14 11 55"
src="https://github.com/user-attachments/assets/61d5a6b9-57f7-4117-bbc6-e78c2cdc5778"
/>
Document the icons for the new design system. With the design team, it
was agreed we will settle on [phosphor
icons](https://phosphoricons.com/), so we will need to migrate
progressively out of `lucide-react`.
### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run Storybook locally
- [x] Check the icons story and displays well
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.
<!-- 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>
<!-- Clearly explain the need for these changes: -->
## Background & Summary of Changes
If a user has a single invalid Agent in their Library (i.e one with a
Block which doesn't exist) currently the Blocks menu does not return any
Agent results.
Valid agents should still load even when some stored graphs are
malformed.
Graphs which are malformed should just be skipped rather than breaking
the entire process, this PR implements that fix, unblocking users with a
malformed Agent in their Library (me!).
## Testing
I have tested this PR in the dev deployment (where I have this issue on
my account) and have confirmed that Agents now show up in the list:
| Before this Change | After this Change |
| ------------------ | ----------------- |
| 
| 
|
## Changes 🏗️
- Validate each graph’s serialization in get_graphs and skip any that
raise an exception
- Added error logging for invalid graphs
## Checklist 📋
For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] poetry run format
- [ ] poetry run test
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)
Fixes [OPEN-2461: Loading a Library Agent with an invalid block causes
all Library Agent Loading to fail in Builder Blocks
Menu](https://linear.app/autogpt/issue/OPEN-2461/loading-a-library-agent-with-an-invalid-block-causes-all-library-agent)
Fixes#9868
This pull request updates the `StoreCard` component in
`autogpt_platform/frontend/src/components/agptui/StoreCard.tsx` to
replace the hardcoded Tailwind CSS class `bg-white` with the more
flexible `bg-background` utility class. This change ensures better
consistency with the application's theming and makes it easier to adapt
to different color schemes, such as light and dark modes.
#### Changes:
- **Before:**
`className="... bg-white ... dark:bg-transparent ..."`

- **After:**
`className="... bg-background ... dark:bg-transparent ..."`

#### Motivation:
- Removes the white background on the cards, which weren't part of the
designs.
No functional or visual changes are expected except for improved support
for custom themes.
---
This PR was entirely generated by an AI Agent.
**Please review and let me know if additional changes are needed!**
Co-authored-by: itsababseh <36419647+itsababseh@users.noreply.github.com>
## 🏗️ Changes
### 🧢 Authentication improvements
- Updates for [CASA compliance](https://appdefensealliance.dev/casa)
- implemented cross-tab login/logout
- logout now triggers cross-device logout
- forgot password triggers cross-device logout
- we are already able to revoke sessions given Supabase stores sessions
🙌🏽
### 📙 Cross-tab login/logout implementation
I implemented some session validation debouncing ( _2-second cooldown_ )
to prevent excessive API calls when switching tabs fast ( _more of an
edge-case but could happen_ ). Cross tab implementation is done via
`localStorage` and `window.visibility` events.
### Refactor and cleanup
Smol things to improve our auth logic on the Frontend:
- created `helpers.ts` with utilities for protected page detection,
admin page routing, and cross-tab communication
- added `STORAGE_KEYS`, `PROTECTED_PAGES`, and `ADMIN_PAGES` constants
for better organization
- refactored server-side Supabase utilities and middleware
- updated import paths to use named exports
## 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] Cross-tab logout synchronization works correctly
- [x] Session validation debouncing prevents excessive API calls
- [x] Protected page redirects function properly
- [x] Authentication state persists correctly across tabs
- [x] Role-based access controls work as expected
- [x] Cross-device logout is performed after forgot password change
### Cross-tab login/logout
https://github.com/user-attachments/assets/5dbdd204-faa2-419f-b989-e31f69ddabd6
### Cross-device logout
https://github.com/user-attachments/assets/aac9c97a-beec-4519-a391-f94f988dc7c8
### Changes 🏗️
<img width="800" alt="Screenshot 2025-06-13 at 18 29 27"
src="https://github.com/user-attachments/assets/6a2f9c23-860f-4f92-8a7a-eeb7839940fd"
/>
- Add a nice overview page for the 👶🏽 baby AutoGPT design system
- Customise the logo on Storybook to show AutoGPT one
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run Storybook
- [x] You see the Overview page which looks good
### Changes 🏗️
<img width="1761" alt="Screenshot 2025-06-13 at 18 40 50"
src="https://github.com/user-attachments/assets/d24a0350-a371-4067-9666-c3206aacce13"
/>
Document border radius tokens, which follow Tailwind default theme
radius scale ✅
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run storybook
- [x] Open the Tokens / Border Radius story
- [x] Verify makes sense
### Changes 🏗️
<img width="800" alt="Screenshot 2025-06-13 at 18 42 54"
src="https://github.com/user-attachments/assets/c1ddffb4-6898-4e2e-8961-49857c0ce65a"
/>
<img width="800" alt="Screenshot 2025-06-13 at 18 01 27"
src="https://github.com/user-attachments/assets/22c5e305-a5ed-469f-916b-38e93aba7f98"
/>
Document spacing tokens, which follow Tailwind default theme spacing
scale ✅
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run storybook
- [x] Open the Tokens / Spacing story
- [x] Verify makes sense
Bumps the production-dependencies group in /autogpt_platform/frontend
with 3 updates:
[@sentry/nextjs](https://github.com/getsentry/sentry-javascript),
[@supabase/supabase-js](https://github.com/supabase/supabase-js) and
[zod](https://github.com/colinhacks/zod).
Updates `@sentry/nextjs` from 9.26.0 to 9.27.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/releases"><code>@sentry/nextjs</code>'s
releases</a>.</em></p>
<blockquote>
<h2>9.27.0</h2>
<ul>
<li>feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li>
<li>feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li>
<li>feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li>
<li>feat(react-router): Export wrappers for server loaders and actions
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li>
<li>fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li>
<li>fix(react-router): Conditionally add <code>ReactRouterServer</code>
integration (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@sentry/browser</code></td>
<td>23.43 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> - with treeshaking flags</td>
<td>23.2 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing)</td>
<td>37.46 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay)</td>
<td>74.68 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay) - with
treeshaking flags</td>
<td>67.94 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay with
Canvas)</td>
<td>79.33 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay, Feedback)</td>
<td>91.13 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Feedback)</td>
<td>39.77 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. sendFeedback)</td>
<td>28.03 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. FeedbackAsync)</td>
<td>32.8 KB</td>
</tr>
<tr>
<td><code>@sentry/react</code></td>
<td>25.15 KB</td>
</tr>
<tr>
<td><code>@sentry/react</code> (incl. Tracing)</td>
<td>39.41 KB</td>
</tr>
<tr>
<td><code>@sentry/vue</code></td>
<td>27.69 KB</td>
</tr>
<tr>
<td><code>@sentry/vue</code> (incl. Tracing)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td><code>@sentry/svelte</code></td>
<td>23.45 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.88 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>37.63 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>72.66 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>77.99 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>72.67 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>111.42 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>222.72 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>235.25 KB</td>
</tr>
<tr>
<td><code>@sentry/nextjs</code> (client)</td>
<td>41.03 KB</td>
</tr>
<tr>
<td><code>@sentry/sveltekit</code> (client)</td>
<td>37.93 KB</td>
</tr>
<tr>
<td><code>@sentry/node</code></td>
<td>146.75 KB</td>
</tr>
<tr>
<td><code>@sentry/node</code> - without tracing</td>
<td>96.03 KB</td>
</tr>
<tr>
<td><code>@sentry/aws-serverless</code></td>
<td>121.19 KB</td>
</tr>
</tbody>
</table>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md"><code>@sentry/nextjs</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.27.0</h2>
<ul>
<li>feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li>
<li>feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li>
<li>feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li>
<li>feat(react-router): Export wrappers for server loaders and actions
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li>
<li>fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li>
<li>fix(react-router): Conditionally add <code>ReactRouterServer</code>
integration (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="650abf323b"><code>650abf3</code></a>
release: 9.27.0</li>
<li><a
href="5a672c90ea"><code>5a672c9</code></a>
Merge pull request <a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16489">#16489</a>
from getsentry/prepare-release/9.27.0</li>
<li><a
href="9d1c05ecf3"><code>9d1c05e</code></a>
meta(changelog): Update changelog for 9.27.0</li>
<li><a
href="6d61be0337"><code>6d61be0</code></a>
fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16484">#16484</a>)</li>
<li><a
href="0a7b915fd7"><code>0a7b915</code></a>
ref(vue): Clarify Vue tracing (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16487">#16487</a>)</li>
<li><a
href="b1fd4a1d47"><code>b1fd4a1</code></a>
test(vue): Add tests for Vue tracing mixins (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16486">#16486</a>)</li>
<li><a
href="497b76e23a"><code>497b76e</code></a>
feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16472">#16472</a>)</li>
<li><a
href="cfa8d41aa2"><code>cfa8d41</code></a>
feat(react-router): Export wrappers for server loaders and actions (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16481">#16481</a>)</li>
<li><a
href="bfe5e888b1"><code>bfe5e88</code></a>
feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16455">#16455</a>)</li>
<li><a
href="45088a2ab7"><code>45088a2</code></a>
feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16476">#16476</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/getsentry/sentry-javascript/compare/9.26.0...9.27.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `@supabase/supabase-js` from 2.49.10 to 2.50.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/supabase/supabase-js/releases"><code>@supabase/supabase-js</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v2.50.0</h2>
<h1><a
href="https://github.com/supabase/supabase-js/compare/v2.49.10...v2.50.0">2.50.0</a>
(2025-06-06)</h1>
<h3>Bug Fixes</h3>
<ul>
<li>add <code>@solana/wallet-standard-features</code> as dev dependency
(<a
href="https://redirect.github.com/supabase/supabase-js/issues/1454">#1454</a>)
(<a
href="146c822768">146c822</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li>bump auth-js to v2.70.0 (<a
href="https://redirect.github.com/supabase/supabase-js/issues/1449">#1449</a>)
(<a
href="217473f6b4">217473f</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="146c822768"><code>146c822</code></a>
fix: add <code>@solana/wallet-standard-features</code> as dev
dependency (<a
href="https://redirect.github.com/supabase/supabase-js/issues/1454">#1454</a>)</li>
<li><a
href="217473f6b4"><code>217473f</code></a>
feat: bump auth-js to v2.70.0 (<a
href="https://redirect.github.com/supabase/supabase-js/issues/1449">#1449</a>)</li>
<li>See full diff in <a
href="https://github.com/supabase/supabase-js/compare/v2.49.10...v2.50.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `zod` from 3.25.51 to 3.25.56
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/colinhacks/zod/releases">zod's
releases</a>.</em></p>
<blockquote>
<h2>v3.25.56</h2>
<h2>Commits:</h2>
<ul>
<li>64bfb7001cf6f2575bf38b5e6130bc73b4b0e371 3.25.56</li>
</ul>
<h2>v3.25.55</h2>
<h2>Commits:</h2>
<ul>
<li>44141ea1dbd48403f14704386119884aeda5cb27 3.25.55</li>
</ul>
<h2>v3.25.54</h2>
<h2>Commits:</h2>
<ul>
<li>8ab237423cd8fdca58dc9e18f45d48d56ca2a24d fix(util): cross realm
IsPlainObject check (<a
href="https://redirect.github.com/colinhacks/zod/issues/4627">#4627</a>)</li>
<li>2be1c6ad909a9d0598d9f45fedc9038213130529 Fix generic assignability
issue. 3.25.54</li>
</ul>
<h2>v3.25.53</h2>
<h2>Commits:</h2>
<ul>
<li>a6adb148012f59d734245c637a577ed413a484e7 zod mini internals (<a
href="https://redirect.github.com/colinhacks/zod/issues/4631">#4631</a>)</li>
<li>da4f92170ac838029178c4622015dbdae4a1de7c 3.25.53</li>
</ul>
<h2>v3.25.52</h2>
<h2>Commits:</h2>
<ul>
<li>2954f40a4e41f61e835ba211ff084467dca1f41e Fix json (<a
href="https://redirect.github.com/colinhacks/zod/issues/4630">#4630</a>)</li>
<li>51dc6f9361851e64a925c3f4ee9364ce4da4c4e7 3.25.52</li>
<li>e479ea76ae1571064c3dade621b3af0ea2dff942 Add test cast for deferred
self-recursion</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="64bfb7001c"><code>64bfb70</code></a>
3.25.56</li>
<li><a
href="44141ea1db"><code>44141ea</code></a>
3.25.55</li>
<li><a
href="2be1c6ad90"><code>2be1c6a</code></a>
Fix generic assignability issue. 3.25.54</li>
<li><a
href="8ab237423c"><code>8ab2374</code></a>
fix(util): cross realm IsPlainObject check (<a
href="https://redirect.github.com/colinhacks/zod/issues/4627">#4627</a>)</li>
<li><a
href="da4f92170a"><code>da4f921</code></a>
3.25.53</li>
<li><a
href="a6adb14801"><code>a6adb14</code></a>
zod mini internals (<a
href="https://redirect.github.com/colinhacks/zod/issues/4631">#4631</a>)</li>
<li><a
href="e479ea76ae"><code>e479ea7</code></a>
Add test cast for deferred self-recursion</li>
<li><a
href="51dc6f9361"><code>51dc6f9</code></a>
3.25.52</li>
<li><a
href="2954f40a4e"><code>2954f40</code></a>
Fix json (<a
href="https://redirect.github.com/colinhacks/zod/issues/4630">#4630</a>)</li>
<li>See full diff in <a
href="https://github.com/colinhacks/zod/compare/v3.25.51...v3.25.56">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ubbe <hi@ubbe.dev>
Co-authored-by: Swifty <craigswift13@gmail.com>
<img width="1410" alt="image"
src="https://github.com/user-attachments/assets/bce407a2-96a1-42e9-9772-b49b8f20886c"
/>
### Changes 🏗️
Add the missing `send execution update` command on completed/update
status change for the node execution.
### 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] Screenshot attached
### Changes 🏗️
<img width="800" alt="Screenshot 2025-06-10 at 14 21 48"
src="https://github.com/user-attachments/assets/d0dba02d-049d-446c-9a25-0f7cec9108bc"
/>
When logging out, I'm redirected to the `/login` page but the account
menu is still visible (however I'm not longer logged out). Refreshing
the page fixes it.
The problem was that `supabase.logOut()` is a client side action, and
`<Navbar />` is a RSC who fetchs the session on the server to display
the state and does not know on the client it was invalidated.
`router.refresh()` solves the issue by forcing RSC on the page to
refetch their state and update server side. Further reading
[here](https://nextjs.org/docs/app/deep-dive/caching#invalidation-1).
I also improved the UX awaiting the promise and displaying a spinner
while the log out action is happening. If logout fails ( _should be very
rare_ ) I'm displaying a toast to not let the user be hanging wondering
what happened.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Login
- [x] Open account menu
- [x] Click `Logout`
- [x] I see a spinner while the action is happening
- [x] I'm redirected to `/login` and I no longer see the account menu
### Changes 🏗️
This simply adds "fal-ai/veo3" to the ``FalModel`` in the
``ai_video_generator.py`` file
Oh i also set it so veo3 also always generates videos with audio so
``generate_audio=True`` is set to true if veo3 is selected
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Test the veo3 model via Fal.ai and it should work.
### Changes 🏗️
Today openAI dropped the prices of the o3 model so this simply drops the
price from 7 to 4
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run the platform with the new price, check the O3 model in the ai
text generator block and see its cheaper to use
Bumps the development-dependencies group in /autogpt_platform/frontend
with 5 updates:
| Package | From | To |
| --- | --- | --- |
| [@storybook/test-runner](https://github.com/storybookjs/test-runner) |
`0.22.0` | `0.22.1` |
|
[@types/negotiator](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/negotiator)
| `0.6.3` | `0.6.4` |
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
| `22.15.29` | `22.15.30` |
| [msw](https://github.com/mswjs/msw) | `2.9.0` | `2.10.2` |
|
[msw-storybook-addon](https://github.com/mswjs/msw-storybook-addon/tree/HEAD/packages/msw-addon)
| `2.0.4` | `2.0.5` |
Updates `@storybook/test-runner` from 0.22.0 to 0.22.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/test-runner/releases"><code>@storybook/test-runner</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v0.22.1</h2>
<h4>🐛 Bug Fix</h4>
<ul>
<li>Patch: Add telemetry to test run <a
href="https://redirect.github.com/storybookjs/test-runner/pull/565">#565</a>
(<a href="https://github.com/yannbf"><code>@yannbf</code></a>)</li>
</ul>
<h4>Authors: 1</h4>
<ul>
<li>Yann Braga (<a
href="https://github.com/yannbf"><code>@yannbf</code></a>)</li>
</ul>
<h2>v0.22.1-next.0</h2>
<h4>🐛 Bug Fix</h4>
<ul>
<li>Replace <code>@storybook/csf</code> with storybook's internal csf
implementation <a
href="https://redirect.github.com/storybookjs/test-runner/pull/556">#556</a>
(<a href="https://github.com/yannbf"><code>@yannbf</code></a>)</li>
</ul>
<h4>Authors: 1</h4>
<ul>
<li>Yann Braga (<a
href="https://github.com/yannbf"><code>@yannbf</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/test-runner/blob/v0.22.1/CHANGELOG.md"><code>@storybook/test-runner</code>'s
changelog</a>.</em></p>
<blockquote>
<h1>v0.22.1 (Sat Jun 07 2025)</h1>
<h4>🐛 Bug Fix</h4>
<ul>
<li>Patch: Add telemetry to test run <a
href="https://redirect.github.com/storybookjs/test-runner/pull/565">#565</a>
(<a href="https://github.com/yannbf"><code>@yannbf</code></a>)</li>
</ul>
<h4>Authors: 1</h4>
<ul>
<li>Yann Braga (<a
href="https://github.com/yannbf"><code>@yannbf</code></a>)</li>
</ul>
<hr />
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ed37196132"><code>ed37196</code></a>
Bump version to: 0.22.1 [skip ci]</li>
<li><a
href="df34390ef7"><code>df34390</code></a>
Update CHANGELOG.md [skip ci]</li>
<li><a
href="0b60c084fe"><code>0b60c08</code></a>
Merge pull request <a
href="https://redirect.github.com/storybookjs/test-runner/issues/565">#565</a>
from storybookjs/telemetry-main</li>
<li><a
href="4baeaf3d3d"><code>4baeaf3</code></a>
Add telemetry to test run</li>
<li>See full diff in <a
href="https://github.com/storybookjs/test-runner/compare/v0.22.0...v0.22.1">compare
view</a></li>
</ul>
</details>
<br />
Updates `@types/negotiator` from 0.6.3 to 0.6.4
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/negotiator">compare
view</a></li>
</ul>
</details>
<br />
Updates `@types/node` from 22.15.29 to 22.15.30
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />
Updates `msw` from 2.9.0 to 2.10.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mswjs/msw/releases">msw's
releases</a>.</em></p>
<blockquote>
<h2>v2.10.2 (2025-06-09)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>TypeScript:</strong> support <code>Response.error()</code>
and <code>HttpResponse.error()</code> as mocked responses (<a
href="https://redirect.github.com/mswjs/msw/issues/2132">#2132</a>)
(72cc8ddac8f030f747b674148b03e5a025e412d2) <a
href="https://github.com/jacquesg"><code>@jacquesg</code></a> <a
href="https://github.com/kettanaito"><code>@kettanaito</code></a></li>
</ul>
<h2>v2.10.1 (2025-06-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>update <code>@mswjs/interceptors</code> to support WebSocket server
protocol (<a
href="https://redirect.github.com/mswjs/msw/issues/2528">#2528</a>)
(6704fa042a3eaa71b68eb7b9028a7464b2b30cef) <a
href="https://github.com/kettanaito"><code>@kettanaito</code></a></li>
</ul>
<h2>v2.10.0 (2025-06-07)</h2>
<h3>Features</h3>
<ul>
<li><strong>WebSocketHandler:</strong> add <code>run</code> method (<a
href="https://redirect.github.com/mswjs/msw/issues/2527">#2527</a>)
(94fc78ea50bd8c3334945d3047650c8b82c2f754) <a
href="https://github.com/kettanaito"><code>@kettanaito</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a30cdf591e"><code>a30cdf5</code></a>
chore(release): v2.10.2</li>
<li><a
href="72cc8ddac8"><code>72cc8dd</code></a>
fix(TypeScript): support <code>Response.error()</code> and
<code>HttpResponse.error()</code> as moc...</li>
<li><a
href="d38097f162"><code>d38097f</code></a>
chore(release): v2.10.1</li>
<li><a
href="6704fa042a"><code>6704fa0</code></a>
fix: update <code>@mswjs/interceptors</code> to support WebSocket server
protocol (<a
href="https://redirect.github.com/mswjs/msw/issues/2528">#2528</a>)</li>
<li><a
href="dce459e32c"><code>dce459e</code></a>
chore(release): v2.10.0</li>
<li><a
href="94fc78ea50"><code>94fc78e</code></a>
feat(WebSocketHandler): add <code>run</code> method (<a
href="https://redirect.github.com/mswjs/msw/issues/2527">#2527</a>)</li>
<li><a
href="ca9d87768e"><code>ca9d877</code></a>
chore: run preview release on all pull requests (<a
href="https://redirect.github.com/mswjs/msw/issues/2526">#2526</a>)</li>
<li>See full diff in <a
href="https://github.com/mswjs/msw/compare/v2.9.0...v2.10.2">compare
view</a></li>
</ul>
</details>
<br />
Updates `msw-storybook-addon` from 2.0.4 to 2.0.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mswjs/msw-storybook-addon/releases">msw-storybook-addon's
releases</a>.</em></p>
<blockquote>
<h2>v2.0.5</h2>
<h4>🐛 Bug Fix</h4>
<ul>
<li>fix: updates types to increase compatibility with storybook types <a
href="https://redirect.github.com/mswjs/msw-storybook-addon/pull/169">#169</a>
(<a
href="https://github.com/rhuanbarreto"><code>@rhuanbarreto</code></a>)</li>
</ul>
<h4>Authors: 1</h4>
<ul>
<li>Rhuan Barreto (<a
href="https://github.com/rhuanbarreto"><code>@rhuanbarreto</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/mswjs/msw-storybook-addon/blob/main/packages/msw-addon/CHANGELOG.md">msw-storybook-addon's
changelog</a>.</em></p>
<blockquote>
<h1>v2.0.5 (Thu Jun 05 2025)</h1>
<h4>🐛 Bug Fix</h4>
<ul>
<li>fix: updates types to increase compatibility with storybook types <a
href="https://redirect.github.com/mswjs/msw-storybook-addon/pull/169">#169</a>
(<a
href="https://github.com/rhuanbarreto"><code>@rhuanbarreto</code></a>)</li>
</ul>
<h4>Authors: 1</h4>
<ul>
<li>Rhuan Barreto (<a
href="https://github.com/rhuanbarreto"><code>@rhuanbarreto</code></a>)</li>
</ul>
<hr />
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ec35e9371f"><code>ec35e93</code></a>
Update CHANGELOG.md [skip ci]</li>
<li><a
href="d67ffc6b26"><code>d67ffc6</code></a>
fix: updates types to increase compatibility with storybook types (<a
href="https://github.com/mswjs/msw-storybook-addon/tree/HEAD/packages/msw-addon/issues/169">#169</a>)</li>
<li>See full diff in <a
href="https://github.com/mswjs/msw-storybook-addon/commits/v2.0.5/packages/msw-addon">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Swifty <craigswift13@gmail.com>
Co-authored-by: Lluis Agusti <hi@llu.lu>
Co-authored-by: Ubbe <hi@ubbe.dev>
### Changes 🏗️
<img width="700" alt="Screenshot 2025-06-09 at 17 01 59"
src="https://github.com/user-attachments/assets/f2b0a3a6-fdf1-4e3e-9caa-d2bf03543dab"
/>
<img width="700" alt="Screenshot 2025-06-09 at 17 02 06"
src="https://github.com/user-attachments/assets/36e27a0b-07f2-4074-8628-cb236d75e4c4"
/>
This PR introduces a comprehensive Typography System for our design
system with improved documentation and developer experience [matching
what we have on
Figma](https://www.figma.com/design/nO9NFynNuicLtkiwvOxrbz/AutoGPT-Design-System?m=dev).
#### **Typography System**
- Created `<Text />` component
- Enforce its usage to ensure consistent typographic styles across the
app
```tsx
<Text variant="h1">Heading 1</Text>
<Text variant="h2">Heading 2</Text>
<Text variant="body">hello world</Text>
<Text variant="small">smol text</Text>
```
- Created `Typography.stories.tsx` on Storybook
- Complete typography overview with font showcases and usage guidelines
#### **Storybook Improvements**
- **Updated TypeScript docgen** configuration for better prop extraction
- **Cleaned up story rendering** to prevent MDX styling pollution
- **Split large story files** into focused, maintainable components
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
**Test Plan:**
- [x] Typography stories render correctly in Storybook
- [x] All Text component variants display properly
- [x] Interactive playground controls function correctly
- [x] No TypeScript or linting errors
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
Allowing depth-first execution will unlock faster processing latency and
a better sense of progress.
<img width="950" alt="image"
src="https://github.com/user-attachments/assets/e2a0e11a-8bc5-4a65-a10d-b5b6c6383354"
/>
### Changes 🏗️
* Prioritize adding a new execution over processing execution output
* Make sure to enqueue each node once when processing output instead of
draining a single node and move on.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run company follower count finder agent.
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
## Changes 🏗️
We were getting the following warnings in the console when running the
local server:
```
⚠ ./node_modules/.pnpm/@sentry+node@9.26.0/node_modules/@sentry/node/build/cjs/sdk
Package import-in-the-middle can't be external
The request import-in-the-middle matches serverExternalPackages (or the default list).
The request could not be resolved by Node.js from the project directory.
Packages that should be external need to be installed in the project directory, so they can be resolved from the output files.
Try to install it into the project directory by running npm install import-in-the-middle from the project directory.
```
### Why were the warnings happening?
The Sentry SDK for Next.js tries to hook into Node.js internals using
packages like `import-in-the-middle` and `require-in-the-middle`. When
Sentry is imported at the top level on a file (even if not enabled), it
tries to load these dependencies... If they are not installed, then we
get these warnings...
### Why does installing the packages fix it?
By installing `import-in-the-middle` and `require-in-the-middle` as dev
dependencies, Sentry finds them and the warnings disappear. This is a
safe workaround for local/dev, and does not affect production.
### Loading Sentry conditionally
One way to avoid these warnings ⚠️ is by loading Sentry conditionally.
That is the approach I took in an earlier PR. However I realised that it
would have to apply to any file importing Sentry:
```ts
import * as Sentry from "@sentry/nextjs";
```
which would end quite messy and affecting a lot of files. I realised
installing the packages is just simpler ( _they won't in the bundle or
affect page load_ ) and using `enabled` in the Sentry initialisation is
also cleaner.
## 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] There are not Sentry warnings when running the local dev server (
with or without `--turbo` )
- [x] Sentry still reports issues in production or staging ( _but not
locally_ )
## Changes
- log helpful hints when metrics fail to record
- clarify API key errors in v1 router
- improve Postmark unsubscribe and webhook logs
- surface actionable feedback across integrations and store APIs
- handle Otto proxy failures with guidance
## Checklist
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan
There are a few UI bugs on the builder that this PR addresses.
<img width="554" alt="image"
src="https://github.com/user-attachments/assets/1be70197-de7e-40fe-ab11-405c145e763d"
/>
### Changes 🏗️
Fix these UI issues:
* (screenshot attached above) Key-value input width was unintentionally
maxed out due to a stale CSS rule.
* When multiple executions within the same node are running, we pick the
latest status, making one running and one completed execution displayed
as completed.
* No balance errors were executed, only displayed while at least one
node execution was triggered, while this can be done directly when the
execution request is triggered.
* Run & Stop button glitch: it's still showing as stopped when the graph
is still running, this is due to way the UI code tracks execution in the
node-level, instead of graph level.
### 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 tests on the described behaviours.
## Changes 🏗️
<img width="500" alt="Screenshot 2025-06-05 at 16 24 35"
src="https://github.com/user-attachments/assets/ccf51917-68fb-4538-bfd9-7ab8bc8ce33a"
/>
<br /><br />
- Allow users to sign in or sign up with Google (SSO), via Supabase
- Prevent password login or signup with `@agpt.co` emails
- Refactor/simplify the login/signup page logic by splitting rendering
and hook logic (
[explanation](https://github.com/Significant-Gravitas/AutoGPT/pull/10117#discussion_r2128793394)
)
### Moved the `createUser` logic to the callback
`api.createUser()` was being called **before** the OAuth flow completes.
Here's what's happening. I moved `api.createUser()` from `providerLogin`
to the **callback handler** where the session is established to make
sure it happens once we get the OK from Google session wise.
## Checklist 📋
### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- [ ] Run this PR on a preview
- [ ] The "Login with Google" button is visible
- [ ] Login/signup with Google works
- [ ] You can't login or signup with password using an `@agpt.co` email
### Changes 🏗️
change ``NEXT_PUBLIC_DISABLE_TURNSTILE`` to ``NEXT_PUBLIC_TURNSTILE``
and set turnstile captcha to be hidden by default
if ``NEXT_PUBLIC_TURNSTILE=enabled`` is set, captcha will work and show
on the frontend login/signup/password reset pages
if ``NEXT_PUBLIC_TURNSTILE=disabled`` is set, captcha will be hidden
from the frontend and is not needed to login/signup/password reset
if ``NEXT_PUBLIC_TURNSTILE`` is not set captcha will be hidden from the
frontend and is not needed to login/signup/password reset
This means users who setup AutoGPT locally will not need to deal with
changing the env to hide captcha
#### 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] start the platform with ``NEXT_PUBLIC_TURNSTILE=enabled`` set to
enabled and captcha shows
- [x] start with ``NEXT_PUBLIC_TURNSTILE=disabled`` and captcha does not
show and you dont need it to login ect
- [x] start with ``NEXT_PUBLIC_TURNSTILE`` not set and the captcha does
not show and you dont need it to login ect
This pull request introduces a comprehensive backend testing guide and
adds new tests for analytics logging and various API endpoints, focusing
on snapshot testing. It also includes corresponding snapshot files for
these tests. Below are the most significant changes:
### Documentation Updates:
* Added a detailed `TESTING.md` file to the backend, providing a guide
for running tests, snapshot testing, writing API route tests, and best
practices. It includes examples for mocking, fixtures, and CI/CD
integration.
### Analytics Logging Tests:
* Implemented tests for logging raw metrics and analytics in
`analytics_test.py`, covering success scenarios, various input values,
invalid requests, and complex nested data. These tests utilize snapshot
testing for response validation.
* Added snapshot files for analytics logging tests, including responses
for success cases, various metric values, and complex analytics data.
[[1]](diffhunk://#diff-654bc5aa1951008ec5c110a702279ef58709ee455ba049b9fa825fa60f7e3869R1-R3)
[[2]](diffhunk://#diff-e0a434b107abc71aeffb7d7989dbfd8f466b5e53f8dea25a87937ec1b885b122R1-R3)
[[3]](diffhunk://#diff-dd0bc0b72264de1a0c0d3bd0c54ad656061317f425e4de461018ca51a19171a0R1-R3)
[[4]](diffhunk://#diff-63af007073db553d04988544af46930458a768544cabd08412265e0818320d11R1-R30)
### Snapshot Files for API Endpoints:
* Added snapshot files for various API endpoint tests, such as:
- Graph-related operations (`graphs_get_single_response`,
`graphs_get_all_response`, `blocks_get_all_response`).
[[1]](diffhunk://#diff-b25dba271606530cfa428c00073d7e016184a7bb22166148ab1726b3e113dda8R1-R29)
[[2]](diffhunk://#diff-1054e58ec3094715660f55bfba1676d65b6833a81a91a08e90ad57922444d056R1-R31)
[[3]](diffhunk://#diff-cfd403ab6f3efc89188acaf993d85e6f792108d1740c7e7149eb05efb73d918dR1-R14)
- User-related operations (`auth_get_or_create_user_response`,
`auth_update_email_response`).
[[1]](diffhunk://#diff-49e65ab1eb6af4d0163a6c54ed10be621ce7336b2ab5d47d47679bfaefdb7059R1-R5)
[[2]](diffhunk://#diff-ac1216f96878bd4356454c317473654d5d5c7c180125663b80b0b45aa5ab52cbR1-R3)
- Credit-related operations (`credits_get_balance_response`,
`credits_get_auto_top_up_response`, `credits_top_up_request_response`).
[[1]](diffhunk://#diff-189488f8da5be74d80ac3fb7f84f1039a408573184293e9ba2e321d535c57cddR1-R3)
[[2]](diffhunk://#diff-ba3c4a6853793cbed24030cdccedf966d71913451ef8eb4b2c4f426ef18ed87aR1-R4)
[[3]](diffhunk://#diff-43d7daa0c82070a9b6aee88a774add8e87533e630bbccbac5a838b7a7ae56a75R1-R3)
- Graph execution and deletion (`blocks_execute_response`,
`graphs_delete_response`).
[[1]](diffhunk://#diff-a2ade7d646ad85a2801e7ff39799a925a612548a1cdd0ed99b44dd870d1465b5R1-R12)
[[2]](diffhunk://#diff-c0d1cd0a8499ee175ce3007c3a87ba5f3235ce02d38ce837560b36a44fdc4a22R1-R3)##
Summary
- add pytest-snapshot to backend dev requirements
- snapshot server route response JSONs
- mention how to update stored snapshots
## Testing
- `poetry run format`
- `poetry run test`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] run poetry run test
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
<!-- Concisely describe all of the changes made in this pull request:
-->
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
<img width="600" alt="Screenshot_2025-06-06_at_3 00 40_PM"
src="https://github.com/user-attachments/assets/2793793e-356f-47b0-8624-9d73af414ff3"
/>
☝🏽 Fix the following warning that gets logged to the console when
running the dev server in the Front-end. It shouldn't cause an actual
auth issue, as Next.js made sure `cookies` can still be called sync;
however, it is safer if we just migrate our calls to `cookies` to be
async 🙏🏽
### 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] There is no cookie warnings when running the FE dev server lcoally
- [x] Authentication works as expected
This is to fix turnstile not resetting properly on failed login/register
### Changes 🏗️
Calling ``turnstile.reset()`` directly seems to fail some times so I
have made a function ``resetCaptcha`` which forces a full reset of the
turnstile widget which should prevent getting stuck when failing to
login the first time
### 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 logging in with a wrong email/password, it should fail with
"Invalid login credentials", you should see the turnstile token refresh,
try login again with correct info and it should work with out getting
stuck
Update ollama docs to add info on how to setup ollama environment vars
for proper access
This includes properly setting the "OLLAMA_HOST" env var with the ip and
port "0.0.0.0:11434" which makes it accessible to AutoGPT thats running
inside of docker
#### 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] Follow the latest setup to test Ollama to make sure it works
## 🤖 Installing Claude Code GitHub App
This PR adds a GitHub Actions workflow that enables Claude Code
integration in our repository.
### What is Claude Code?
[Claude Code](https://claude.ai/code) is an AI coding agent that can
help with:
- Bug fixes and improvements
- Documentation updates
- Implementing new features
- Code reviews and suggestions
- Writing tests
- And more!
### How it works
Once this PR is merged, we'll be able to interact with Claude by
mentioning @claude in a pull request or issue comment.
Once the workflow is triggered, Claude will analyze the comment and
surrounding context, and execute on the request in a GitHub action.
### Important Notes
- **This workflow won't take effect until this PR is merged**
- **@claude mentions won't work until after the merge is complete**
- The workflow runs automatically whenever Claude is mentioned in PR or
issue comments
- Claude gets access to the entire PR or issue context including files,
diffs, and previous comments
### Security
- Our Anthropic API key is securely stored as a GitHub Actions secret
- Only users with write access to the repository can trigger the
workflow
- All Claude runs are stored in the GitHub Actions run history
- Claude's default tools are limited to reading/writing files and
interacting with our repo by creating comments, branches, and commits.
- We can add more allowed tools by adding them to the workflow file
like:
```
allowed_tools: Bash(npm install),Bash(npm run build),Bash(npm run lint),Bash(npm run test)
```
There's more information in the [Claude Code
documentation](http://docs.anthropic.com/s/claude-code-github-actions).
After merging this PR, let's try mentioning @claude in a comment on any
PR to get started!
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
We're encountering a hydration warning on the frontend due to a mismatch
in CSS module hashes. This happens because auto-generated classnames
from `next/font` and `geist` differ between server-side and client-side
rendering. The inconsistency triggers a warning when the client
rehydrates the server-rendered HTML.

### Changes 🏗️
Since the mismatch only affects the `<html>` tag and has no visible
impact on the UI, the most straightforward workaround is to suppress the
warning and still take advantage of `next/font` optimisations.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run the frontend locally
- [x] Page loads without hydration warnings
---------
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
- Part of #9307
- ❗ Blocks #9541
### Changes 🏗️
Backend:
- Fix+improve `GET /library/presets` (`list_presets`) endpoint
- Fix pagination
- Add `graph_id` filter parameter
- Allow partial preset updates: `PUT /presets/{preset_id}` -> `PATCH
/presets/{preset_id}`
- Allow creating preset from graph execution through `POST /presets`
- Clean up models & DB functions
- Split `upsert_preset` into `create_preset` + `update_preset`
- Add `LibraryAgentPresetUpdatable`
- Replace `CreateLibraryAgentPresetRequest` with
`LibraryAgentPresetCreatable`
- Use `LibraryAgentPresetCreatable` as base class for
`LibraryAgentPreset`
- Remove redundant `set_is_deleted_for_library_agent(..)`
- Improve log statements
- Improve DB statements (e.g. by using unique keys where possible)
Frontend:
- Add timestamp parsing logic to library agent preset endpoints
- Brand `LibraryAgentPreset.id` + references
### 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 green
- Since these changes don't affect existing front-end functionality, no
additional testing is needed.
**Goal**: Allow parallel runs within a single node. Currently, we
prevent this to avoid unexpected ordering of the execution.
### Changes 🏗️
#### Executor changes
We decoupled the node execution output processing, which is responsible
for deciding the next executions from the node executor code.
Currently, `execute_node` does two big things:
* Runs the block’s execute(...) (which yields outputs).
* immediately enqueues the next nodes based on those outputs.
This PR makes:
* execute_node(node_exec) -> stream of (output_name, data). That purely
runs the block and yields each output as soon as it’s available.
* Move _enqueue_next_nodes into the graph executor. So the next
execution is handled serially by the graph executor to avoid concurrency
issues.
#### UI changes
The change on the executor also fixes the behavior of the execution
update to the UI We will report the execution output to the UI as soon
as it is available, not when the node execution is fully completed.
This, however, broke the bread calculation logic that assumes each
execution update will never overlap. So the change in this PR makes the
bead calculation take the overlap / duplicated execution update into
account, and simplify the overall calculation logic.
### 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] Execute this agent and observe its concurrency ordering
<img width="1424" alt="image"
src="https://github.com/user-attachments/assets/0fe8259f-9091-4ecc-b824-ce8e8819c2d2"
/>
- Fixes#9215
- [x] ⚠️ Merge first:
https://github.com/Significant-Gravitas/AutoGPT_cloud_infrastructure/pull/93
### Changes 🏗️
- Use `FRONTEND_BASE_URL` instead of Host header to make password reset
redirect link
### 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] Resetting password gives an e-mail with a link that points to the
correct URL
#### 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**)
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
This PR updates the .npmrc file to improve dependency consistency across
local and CI environments when using pnpm.
Specifically:
- `save-exact=true` ensures all dependencies are pinned to exact
versions, preventing version drift ( _especially important for tools
like `prettier`, where even minor changes can lead to inconsistent
formatting in commits_ ).
This change aims to reduce formatting discrepancies and improve
reproducibility across machines and contributors.
### 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] formatting & lint passes on the CI
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
This simply adds a env to hide turnstile for dev deploys
if this env ``NEXT_PUBLIC_DISABLE_TURNSTILE`` is set to false which it
is by default, it will show turnstile, if the env is set to "true" it
will hide the turnstile
#### 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] Login/register with ``NEXT_PUBLIC_DISABLE_TURNSTILE=false`` and
you see the turnstile and that is needed to login/signup
- [x] Login/register with ``NEXT_PUBLIC_DISABLE_TURNSTILE=true`` and you
will see the turnstile is gone, and you can login/signup with out it
<!-- Clearly explain the need for these changes: -->
## Changes 🏗️
### Before
<img width="200" alt="image"
src="https://github.com/user-attachments/assets/8a8e1818-6b8c-4d86-a2b1-a474ba27a6de"
/>
### After
<img width="200" alt="Screenshot 2025-06-05 at 15 26 45"
src="https://github.com/user-attachments/assets/cc28eaeb-626b-46a8-a726-c157b2471ca9"
/>
### Adjustments
- Adjusted the padding account the menu
- Made username display on top of account name nicely
- Both username and account name will be trimmed if they are too long
`...`
## Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Login
- [x] Open account menu ( top-right )
- [x] The alignment of items is right
- [x] Long usernames are handled nicely
- [x] Username and display name don't overlap
- Fixes#10085
### Changes 🏗️
- Remove redirect from `sendResetEmail` server action
### 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] Reset password form exits loading state after request completes
Currently, the get_graph function, with no graph version specifier will
try to fetch the latest version, and when the graph is not owned and the
latest version is not available for listing, it will return `None`
instead of picking the latest graph version available on the store.
### Changes 🏗️
Instead of using the latest graph.version to fetch the store listing,
don't provide any version filter at all and pick up whatever available
version in the store.
### 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] CI, existing tests
- Resolves#10008
### Changes 🏗️
- Update `useSupabase` hook to propagate auth state changes
- Refresh `CredentialsProvider` whenever the user login state changes
- Add `logOut` callback to `useSupabase` hook that handles (client-side)
logout
- Remove server-side `logout` action: the Supabase reference
implementation does it client-side, and doing both causes a race
condition
Refactorings to aid implementation of the above:
- Move `@/hooks/useSupabase` -> `@/lib/supabase/useSupabase`
Other improvements:
- Clean up `login` server action based on reference implementation
- Make `BackendAPI.isAuthenticated()` more efficient and faster
- Remove unused `ProfileDropdown` component
- Improve logic and debug logging in `tests/pages/login.page.ts`
- Improve playwright test output logging
### 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:
- Log out from account (A)
- Log in to other account (B)
- Open builder, add a block for which account B has (multiple)
credentials
- [x] Credentials for account B are shown
- [x] Credentials for account A are *not* shown
**Note: do not reload the page** while going through these steps
<!-- Clearly explain the need for these changes: -->
fixed#10098
### Changes 🏗️
tells dependabot to ignore poetry
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
N/A
Suppose we have pint with list[list[int]] type, and we want directly
insert the a new value inside the first index of the first list e.g:
list[0][0] = X through a dynamic pin, this will be translated into
list_$_0_$_0, and the system does not currently support this.
### Changes 🏗️
Add support for nested dynamic pins for list, object, and dict.
### 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] lots of unit tests
- [x] Tried inserting the value directly on the `value` nested field on
Google Sheets Write block.
<img width="371" alt="image"
src="https://github.com/user-attachments/assets/0a5e7213-b0e0-4fce-9e89-b39f7a583582"
/>
- Resolves#10041
Upgrading to Next v15 isn't trivial, but still a good idea if not simply
necessary.
### Changes 🏗️
- Upgrade Next.js from `v14.2.26` to `v15.3.2`
- Fix usage of now-async APIs `params`, `searchParams`, `headers`
([docs](https://nextjs.org/docs/app/guides/upgrading/version-15#async-request-apis-breaking-change))
- Update Next+TypeScript configs
- Set build target to ES2022 for better performance
- Unignore TypeScript build errors
- Set `hideSourceMaps: false` because OSS FTW :)
- Remove obsolete `webpack.config.js`
- Fix existing warnings/errors
- Fix Sentry missing navigation hook warning
- Fix `DYNAMIC_SERVER_USAGE` build error on `/profile` and
`/marketplace`
- Moved `getStoreData` to a proper server action `getMarketplaceData`
- Fix breaking CSS syntax error in `customnode.css`
- Use Turbopack for faster dev+test build times
- Add separate build step to frontend CI workflow: this also fixes the
test timing out if the build takes too long
Other technical improvements:
- Wrap `handleSortChange` in `MarketplaceSearchPage` in `useCallback`
- Fix typing in `ProfileInfoForm`
- Improve output of frontend tests
> [!NOTE]
> Next prints this error (in dev mode):
> ```
> Error: Route "/marketplace" used `cookies().getAll()`. `cookies()`
should be awaited before using its value. Learn more:
https://nextjs.org/docs/messages/sync-dynamic-apis
> at Object.getAll (src/lib/supabase/getServerSupabase.ts:16:31)
> at getAll (../../src/cookies.ts:115:41)
> ...
> ```
> As far as I can see, this isn't breaking, and will become a warning in
prod. See also [the Next docs about this
issue](https://nextjs.org/docs/messages/sync-dynamic-apis)
### 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] Follow the full release QA test script
#### For configuration changes:
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
### Changes 🏗️
#### Before
<img width="800" alt="Screenshot 2025-06-03 at 16 54 36"
src="https://github.com/user-attachments/assets/2a69b69d-2b01-436e-aab3-8206485a001c"
/>
#### After
<img width="800" alt="Screenshot 2025-06-03 at 16 58 38"
src="https://github.com/user-attachments/assets/4daf41d4-42ce-4119-8e9f-b2b10b524cba"
/>
### 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:
- [ ] checkout this branch ( _we should have PR previews for the app and
Storybook_ )
- [ ] `cd autogpt_platform/frontend`
- [ ] `yarn storybook`
- [ ] the stories road with the right font ( Poppins ) not a serif one 😄
#### For configuration changes:
- [ ] ~~`.env.example` is updated or already compatible with my
changes~~
- [ ] ~~`docker-compose.yml` is updated or already compatible with my
changes~~
- [ ] ~~I have included a list of my configuration changes in the PR
description (under **Changes**)~~
## 🧢 Overview
This PR migrates the AutoGPT Platform frontend from [yarn
1](https://classic.yarnpkg.com/lang/en/) to [pnpm](https://pnpm.io/)
using **corepack** for automatic package manager management.
**yarn1** is not longer maintained and a bit old, moving to **pnpm** we
get:
- ⚡ Significantly faster install times,
- 💾 Better disk space efficiency,
- 🛠️ Better community support and maintenance,
- 💆🏽♂️ Config swap very easy
## 🏗️ Changes
### Package Management Migration
- updated [corepack](https://github.com/nodejs/corepack) to use
[pnpm](https://pnpm.io/)
- Deleted `yarn.lock` and generated new `pnpm-lock.yaml`
- Updated `.gitignore`
### Documentation Updates
- `frontend/README.md`:
- added comprehensive tech stack overview with links
- updated all commands to use pnpm
- added corepack setup instructions
- and included migration disclaimer for yarn users
- `backend/README.md`:
- Updated installation instructions to use pnpm with corepack
- `AGENTS.md`:
- Updated testing commands from yarn to pnpm
### CI/CD & Infrastructure
- **GitHub Workflows** :
- updated all jobs to use pnpm with corepack enable
- cleaned FE Playwright test workflow to avoid Sentry noise
- **Dockerfile**:
- updated to use pnpm with corepack, changed lock file reference, and
updated cache mount path
### 📋 Checklist
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
**Test Plan:**
> assuming you are on the `frontend` folder
- [x] Clean installation works: `rm -rf node_modules && corepack enable
&& pnpm install`
- [x] Development server starts correctly: `pnpm dev`
- [x] Build process works: `pnpm build`
- [x] Linting and formatting work: `pnpm lint` and `pnpm format`
- [x] Type checking works: `pnpm type-check`
- [x] Tests run successfully: `pnpm test`
- [x] Storybook starts correctly: `pnpm storybook`
- [x] Docker build succeeds with new pnpm configuration
- [x] GitHub Actions workflow passes with pnpm commands
#### 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**)
This hotfix adds a GitHub Actions workflow to automate deployment and
undeployment of platform PRs to the development environment through
repository dispatch events.
### Changes 🏗️
- **Added new GitHub Actions workflow**:
`.github/workflows/platform-dev-deploy-event-dispatcher.yml`
- Handles `\!deploy` and `\!undeploy` comment commands on PRs
- Implements permission checks (only owners, members, and collaborators
can deploy)
- Automatically undeploys when PRs are closed with active deployments
- Dispatches events to the cloud infrastructure repository for actual
deployment/undeployment
- Provides user feedback through GitHub comments
### 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 workflow triggers on PR comment creation
- [x] Test permission validation for unauthorized users
- [x] Confirm `\!deploy` command dispatches correct event payload
- [x] Confirm `\!undeploy` command dispatches correct event payload
- [x] Test auto-undeploy on PR closure with active deployment
- [x] Verify appropriate GitHub comments are posted for each action
#### 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:**
- Requires `DISPATCH_TOKEN` secret to be configured for repository
dispatch to cloud infrastructure repo
- Workflow uses `issues: write` and `pull-requests: write` permissions
Now, SendWebRequestBlock can upload files. To make this work, we also
need to improve the UI rendering on the key-value pair input so that it
can also render media/file upload.
### Changes 🏗️
* Add file multipart upload support for SendWebRequestBlock
* Improve key-value input UI rendering to allow rendering any types as a
normal input block (it was only string & number).
<img width="381" alt="image"
src="https://github.com/user-attachments/assets/b41d778d-8f9d-4aec-95b6-0b32bef50e89"
/>
### 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 running http request block, othe key-value pair input block
<!-- Clearly explain the need for these changes: -->
This PR adds a new internal block, **AI Image Editor**, which enables
**text-based image editing** via BlackForest Labs’ Flux Kontext models
on Replicate. This block allows users to input a prompt and optionally a
reference image, and returns a transformed image URL. It supports two
model variants (Pro and Max), with different cost tiers. This
functionality will enhance multimedia capabilities across internal agent
workflows and support richer AI-powered image manipulation.
---
### Changes 🏗️
* Added `FluxKontextBlock` in `backend/blocks/flux_kontext.py`
* Uses `ReplicateClient` to call Flux Kontext Pro or Max models
* Supports inputs for `prompt`, `input_image`, `aspect_ratio`, `seed`,
and `model`
* Outputs transformed image URL or error
* Added credit pricing logic for Flux Kontext models to
`block_cost_config.py`:
* Pro: 10 credits
* Max: 20 credits
* Added documentation for the new block at
`docs/content/platform/blocks/flux_kontext.md`
* Updated block index at `docs/content/platform/blocks/blocks.md` to
include Flux Kontext
---

### 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] Prompt-only input generates an image
* [x] Prompt with image applies edit correctly
* [x] Image respects specified aspect ratio
* [x] Invalid image URL returns helpful error
* [x] Using the same seed gives consistent output
* [x] Output chaining works: result URI can be used in downstream blocks
* [x] Output from Max model shows higher fidelity than Pro
<details>
<summary>Example test plan</summary>
* [x] Create from scratch and execute an agent using Flux Kontext with
at least 3 blocks
* [x] Import agent with Flux Kontext from file upload, and confirm
execution
* [x] Upload agent (with Flux Kontext block) to marketplace (internal
test)
* [x] Import agent from marketplace and confirm correct execution
* [x] Edit agent with Flux Kontext block from monitor and confirm output
</details>
#### 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**)
* No new environment variables or services introduced
<details>
<summary>Examples of configuration changes</summary>
* N/A
</details>
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
This PR adds a comprehensive system requirements section to the
README.md file. Currently, users don't have clear guidance on the
hardware, software, and network requirements needed to run AutoGPT. This
addition will help users determine if their system is capable of running
AutoGPT before attempting installation.
- Resolves#10050
### Changes 🏗️
- Added new "System Requirements" section under "How to Setup for
Self-Hosting" with:
- Hardware Requirements
- CPU specifications (4+ cores)
- RAM requirements (8GB min, 16GB recommended)
- Storage requirements (10GB minimum)
- Software Requirements
- Supported Operating Systems
- Required software with minimum versions
- Development tools requirements
- Network Requirements
- Internet connectivity requirements
- Port access information
- HTTPS connection requirements
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Verified README.md renders correctly on GitHub
- [x] Confirmed all formatting is consistent
- [x] Validated all requirements are accurate
- [x] Checked section placement is logical
- [x] Ensured no other files are modified
#### For configuration changes:
- [x] Not applicable - This PR only contains documentation changes to
README.md
- [x] No configuration files are modified in this update
Co-authored-by: Bently <Github@bentlybro.com>
<!-- Clearly explain the need for these changes: -->
We removed the linked video because out of date so unlink it
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
Comment out video segment until new one posted
### Checklist 📋
#### For code changes:
- [x] no code changes made
### Description 📝
This PR introduces a GitHub Actions workflow that enables
cross-repository event dispatching for development environment
deployments. The workflow listens for specific PR events and dispatches
corresponding deployment/undeployment actions to our cloud
infrastructure repository.
**How it works:**
- The workflow triggers on PR events (opened, synchronized, closed) and
PR target events (labeled, unlabeled)
- When a PR comment containing `!deploy` is detected from authorized
users (PR author, repo owners, members, or collaborators), it dispatches
a deployment event
- When a PR with existing deployments is closed, it automatically
dispatches an undeployment event to clean up resources
**Interaction with target repository:**
The workflow dispatches events to
`Significant-Gravitas/AutoGPT_cloud_infrastructure` with a payload
containing:
- `action`: Either "deploy" or "undeploy"
- `pr_number`: The PR number for tracking
- `pr_title`: Human-readable identifier
- `pr_state`: Current PR state
- `repo`: Source repository name
This enables the infrastructure repository to spin up isolated
development environments for each PR on demand.
### Changes 🏗️
- Added `.github/workflows/dev-deploy-pr-dispatcher.yml` workflow file
- Implements secure cross-repository communication using repository
dispatch events
- Includes authorization checks to ensure only authorized users can
trigger deployments
### Checklist 📋
#### For code changes:
- [x] No code changes - this is a workflow addition only
#### For configuration changes:
- [x] New workflow file added that requires testing
- [x] Requires `DISPATCH_TOKEN` secret to be configured with appropriate
permissions for cross-repository dispatch
- [x] No environment variable changes needed
- [ ] Workflow will be tested after initial merge to verify proper event
dispatching
<!-- Clearly explain the need for these changes: -->
CASA requires a length of 12 passwords, which we did update. When
testing in dev, I realized I missed a few.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
updates a missed prompt
### 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 manually, and read all the prompts carefully
<!-- Clearly explain the need for these changes: -->
We're doing CASA and this is a requirement
### Changes 🏗️
- Requires new passwords to be min length 12
<!-- 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
Users were unable to retry login attempts after a failed authentication
because the Turnstile CAPTCHA widget was not properly resetting. This
forced users to refresh the entire page to attempt login again, creating
a terrible user experience.
Root Cause: The useTurnstile hook had several critical issues:
- The reset() function only cleared state when shouldRender was true and
widget existed
- Widget ID tracking was unreliable due to intercepting
window.turnstile.render
- Token wasn't being cleared on verification failures
- State wasn't being reset consistently across error scenarios
Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Fixed useTurnstile hook reset logic: Modified the reset() function to
always clear all state (token, verified, verifying, error) regardless of
shouldRender condition
- Improved widget ID synchronization: Added setWidgetId prop to the
Turnstile component interface and hook for reliable widget tracking
between component and hook
- Enhanced error handling: Updated handleVerify, handleExpire, and
handleError to properly reset tokens on failures
- Updated all auth components: Added setWidgetId prop to all Turnstile
component usages in login, signup, and password reset pages
- Removed unreliable widget tracking: Eliminated the
window.turnstile.render interception approach in favor of explicit
prop-based communication
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 failed login attempt - CAPTCHA resets properly without page
refresh
- [x] Test failed signup attempt - CAPTCHA resets properly without page
refresh
- [x] Test successful login flow - CAPTCHA works normally
- [x] Test CAPTCHA expiration - State resets correctly
- [x] Test CAPTCHA error scenarios - Error handling works properly
### Changes 🏗️
This PR adds `Run 10 agents` step to wallet tasks that can be done by
running any agents 10 times either from Library or Builder (onboarding
agent run also counts).
- Merge `Finish onboarding` and `See results` steps into one in the
wallet
- User is redirected directly to onboarding agent runs in Library after
congrats screen
- Add `RUN_AGENTS` step and `agentRuns` integer to schema and related
migration
- Running agent from Library and Builder increments `agentRuns`
- Open NPS survey popup when 10 agents are run
- Fix resuming onboarding on login when unfinished
- Remove no longer needed `get-results.mp4` tutorial video
### 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] Onboarding can be completed and proper reward is awarded
- [x] `Run 10 agents` can be completed and reward is awarded
- [x] When unning different agents and the same agent
- [x] Running from library and builder counts
- [x] Onboarding is resumed to last finished step on login
This makes button on the marketplace listing page show `See runs` if
user has an agent in the library.
### Changes 🏗️
- Remove `/` from the related endpoint
- Use `active_version_id` instead of `store_listing_version_id` to check
for the library agent
- Fix `get_store_agent_details`
### 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:
- Log in and pick an agent that has never been in user library
- [x] Button says `Add to library`
- Add the agent and return to the listing page
- [x] Button says `See runs`
- Remove agent from library
- [x] Button says `Add to library`
- Add agent again
- [x] Button says `See runs`
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
- Resolves#9752
- Follow-up fix to #9940
### Changes 🏗️
- `GRAPH_EXECUTION_INCLUDE` ->
`graph_execution_include(include_block_ids)`
- Add `get_io_block_ids()` and `get_webhook_block_ids()` to
`backend.data.blocks`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- [ ] Payload for webhook-triggered runs is shown on
`/library/agents/[id]`
## Summary
- require categories to be selected in PublishAgent popout
### Changes 🏗️
Makes it require the categories to be set before allowing an agent to be
uploaded
added popup notification to say its missing categories
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Try to upload a agent with out setting categories and it will
error and show message saying "Missing Required Fields, Please fill in:
Categories"
- [x] Now try to upload a agent with the categories set and it will work
Co-authored-by: Bently <Github@bentlybro.com>
# Query Optimization for AgentNodeExecution Tables
## Overview
This PR describes the database index optimizations applied to improve
the performance of slow queries in the AutoGPT platform backend.
## Problem Analysis
The following queries were identified as consuming significant database
resources:
### 1. Complex Filtering Query (19.3% of total time)
```sql
SELECT ... FROM "AgentNodeExecution"
WHERE "agentNodeId" = $1
AND "agentGraphExecutionId" = $2
AND "executionStatus" = $3
AND "id" NOT IN (
SELECT "referencedByInputExecId"
FROM "AgentNodeExecutionInputOutput"
WHERE "name" = $4 AND "referencedByInputExecId" IS NOT NULL
)
ORDER BY "addedTime" ASC
```
### 2. Multi-table JOIN Query (8.9% of total time)
```sql
SELECT ... FROM "AgentNodeExecution"
LEFT JOIN "AgentNode" ON ...
LEFT JOIN "AgentBlock" ON ...
WHERE "AgentBlock"."id" IN (...)
AND "executionStatus" != $11
AND "agentGraphExecutionId" IN (...)
ORDER BY "queuedTime" DESC, "addedTime" DESC
```
### 3. Bulk Graph Execution Queries (multiple variations, ~10% combined)
Multiple queries filtering by `agentGraphExecutionId` with various
ordering requirements.
## Optimization Strategy
### 1. Composite Indexes for AgentNodeExecution
Set the following composite indexes to the `AgentNodeExecution` model:
```prisma
@@index([agentGraphExecutionId, agentNodeId, executionStatus])
@@index([addedTime, queuedTime])
```
#### Benefits:
- **Index 1**: Covers the exact WHERE clause of the complex filtering
query, allowing index-only scans
- **Index 2**: Optimizes queries filtering by graph execution and status
- **Index 3**: Supports efficient sorting when filtering by graph
execution
- **Index 4**: Optimizes ORDER BY operations on time fields
### 2. Composite Index for AgentNodeExecutionInputOutput
Added the following composite index:
```prisma
// Input and Output pin names are unique for each AgentNodeExecution.
@@unique([referencedByInputExecId, referencedByOutputExecId, name])
@@index([referencedByOutputExecId])
// Composite index for `upsert_execution_input`.
@@index([name, time])
```
#### Benefits:
- Dramatically improves the NOT IN subquery performance in Query 1
- Allows the database to use an index scan instead of a full table scan
- Reduces the subquery execution time from O(n) to O(log n)
## Expected Performance Improvements
1. **Query 1 (19.3% of total time)**:
- Expected improvement: 80-90% reduction in execution time
- The composite index on `[agentNodeId, agentGraphExecutionId,
executionStatus]` will allow index-only scans
- The subquery will benefit from the new index on
`AgentNodeExecutionInputOutput`
2. **Query 2 (8.9% of total time)**:
- Expected improvement: 50-70% reduction in execution time
- The `[agentGraphExecutionId, executionStatus]` index will reduce the
initial filtering cost
3. **Bulk Queries (10% combined)**:
- Expected improvement: 60-80% reduction in execution time
- Composite indexes including time fields will optimize sorting
operations
## Migration Considerations
1. **Index Creation Time**: Creating these indexes on existing large
tables may take time
2. **Storage Impact**: Each index requires additional storage space
3. **Write Performance**: Slight decrease in INSERT/UPDATE performance
due to index maintenance
## Additional Optimizations
### NotificationEvent Table Index
Added index for notification batch queries:
```prisma
@@index([userNotificationBatchId])
```
This optimizes the query:
```sql
SELECT ... FROM "NotificationEvent"
WHERE "userNotificationBatchId" IN (...)
```
#### Benefits:
- Eliminates full table scans when filtering by batch ID
- Improves query performance from O(n) to O(log n)
- Particularly beneficial for users with many notification events
## Future Optimizations
Consider these additional optimizations if needed:
1. Partitioning `AgentNodeExecution` table by `createdAt` or
`agentGraphExecutionId`
2. Implementing materialized views for frequently accessed aggregate
data
3. Adding covering indexes for specific query patterns
4. Implementing query result caching at the application level
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
- Resolves#10024
Caching the repeated DB calls by the graph lifecycle hooks significantly
speeds up graph update/create calls with many authenticated blocks
(~300ms saved per authenticated block)
### Changes 🏗️
- Add and use `IntegrationCredentialsManager.cached_getter(user_id)` in
lifecycle hooks
- Split `refresh_if_needed(..)` method out of
`IntegrationCredentialsManager.get(..)`
- Simplify interface of lifecycle hooks: change `get_credentials`
parameter to `user_id`
### 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] Save a graph with nodes with credentials
Running the tests locally takes a lot of time and leaves test data
behind in the DB, making it impractical to actually run locally.
I'm disabling the `pytest` hooks in the pre-commit config so the
pre-commit checks can reasonably be used without significant negative
impact to DX.
This doesn't impact UX and there is nothing to test.
- 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~~
Base styling currently being fragmented between `layout.tsx` and
`globals.css` is causing some styling (e.g. application background
color) to be incorrectly overridden.
### Changes 🏗️
- Remove background color override from `<body>`
- Move `<body>` classes from `layout.tsx` to `globals.css`
- Remove background color from elements that shouldn't have their own
background color
- Remove `font-neue`, `font-inter`; replace by Geist (`font-sans`) where
necessary
### 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] Effective background color of application is `#FAFAFA` like before
- [x] Default font is Geist
- [x] Everything looks okay
Changed the section header for "Top Agents" to include a 24px margin.
I have not tested this, an eng needs to test / look at this
## Summary
- set `margin` default to 24px in `AgentsSection`
- apply the bottom margin via an inline style
## Testing
- `npm test` *(fails: playwright not found)*
- `npm run lint` *(fails: next not found)*
### 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 via deployment to the dev branch and verify by designer
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
- Resolves#9992
### Changes 🏗️
- Use `<LoadingBox>` instead of "Loading..." on `/library/agents/[id]`

### 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] Designer approves based on screencapture
This pull request refines the handling of `input_data.content` and
improves error message formatting in the `run` method of `mem0.py`. The
changes enhance robustness and clarity in the code.
### Handling `input_data.content`:
* Updated the `run` method to handle `Content` objects explicitly,
ensuring proper formatting of messages when `input_data.content` is of
type `Content`. Additionally, non-standard types are now converted to
strings for consistent handling.
(`[autogpt_platform/backend/backend/blocks/mem0.pyR127-R130](diffhunk://#diff-d7abf8c3299388129480b6a9be78438fe7e0fbe239da630ebb486ad99c80dd24R127-R130)`)
### Error message formatting:
* Simplified the error message formatting by removing the unnecessary
`object=` keyword in the `str()` conversion of exceptions.
(`[autogpt_platform/backend/backend/blocks/mem0.pyL155-R157](diffhunk://#diff-d7abf8c3299388129480b6a9be78438fe7e0fbe239da630ebb486ad99c80dd24L155-R157)`)
## Summary
- fix AddMemoryBlock so `Content` input uses the underlying string
- improve error handling in Mem0 AddMemoryBlock
## Testing
- `ruff check autogpt_platform/backend/backend/blocks/mem0.py`
- `pre-commit run --files
autogpt_platform/backend/backend/blocks/mem0.py` *(fails: unable to
fetch remote hooks)*
- `poetry run pytest -k AddMemoryBlock -q` *(fails: Error 111 connecting
to localhost:6379)*
Checklist 📋
For code changes:
I have clearly listed my changes in the PR description
I have made a test plan
I have tested my changes according to the test plan:
Payload for webhook-triggered runs is shown on /library/agents/[id]
## Summary
- refine contribution instructions in `autogpt_platform/AGENTS.md`
## Testing
- `pre-commit` *(fails to fetch hooks due to no network access)*
#### 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] Docs only hcnage
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
### Changes 🏗️
Keep the original URL when an HTTP error occurs in
`SendWebRequestBlock`.
### 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 sending POST request on a web that doesn't support POST
request using `SendWebRequestBlock`.
The executor can sometimes become dangling due to the executor stopping
executing messages but the process is not fully killed. This PR avoids
such a scenario by simply keeping retrying it.
### Changes 🏗️
Introduced continuous_retry decorator and use it to executor message
consumption/
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run executor service and execute some agents.
The executor can sometimes become dangling due to the executor stopping
executing messages but the process is not fully killed. This PR avoids
such a scenario by simply keeping retrying it.
### Changes 🏗️
Introduced continuous_retry decorator and use it to executor message
consumption/
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run executor service and execute some agents.
Makes all optional fields on `Credentials` models actually optional, and
sets `exclude_none=True` on the corresponding `model_dump`.
This is a hotfix: after running the `aryshare-revid` branch on the dev
deployment, there is some data in the DB that isn't valid for the
`UserIntegrations` model on the `dev` branch (see
[here](https://github.com/Significant-Gravitas/AutoGPT/pull/9946#discussion_r2098428575)).
### 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] This fix worked on the `aryshare-revid` branch:
52b6d9696b
- Resolves#9987
### Changes 🏗️
- Split `pin_url(..)` out of `validate_url(..)` and call
`extra_url_validator` in between
### 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] GitHub Read Pull Request Block works with "Include PR Changes"
enabled
### Changes 🏗️
Moves the route path for spending
drops min
<!-- 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 locally
---------
Co-authored-by: Bently <Github@bentlybro.com>
- Resolves#9950
### Changes 🏗️
- Move `<OttoChatWidget>` from root layout into `FlowEditor`
- Pass graph info directly into `OttoChatWidget` instead of using
`useAgentGraph`
- Rearrange z-indices of elements in the builder
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to `/build`
- [x] -> chat widget should show up in the bottom right corner
- Open the widget and ask Otto something
- [x] -> should work normally
- Add a few blocks and save the graph
- [x] -> "Include graph data" should show up
- Click "Include graph data" and ask Otto something about your graph
- [x] -> Otto should be aware of the graph structure and metadata
- Resolves#9941
- Follow-up to #9935
### Changes 🏗️
- Show toast when WS connection (dis|re)connects (on `/library/agents/[id]`)
- Implement `BackendAPI.onWebSocketDisconnect`
Related improvements:
- Clean up WebSocket state management & logging in `BackendAPI`
- Clean up & split loading spinner implementation: `Spinner` -> `LoadingBox` + `LoadingSpinner`
Also, unrelated:
- fix(frontend/library): Add 2 second debounce to page refresh logic
This eliminates 3 triple API calls (so 9 -> 3 total) on page load: `GET /library/agents/{agent_id}`, `GET /graphs/{graph_id}/executions`, and `GET /graphs/{graph_id}/executions/{exec_id}`
### 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:
- Start the frontend and backend applications (locally)
- Navigate to `/library/agents/[id]`
- Kill the backend
- [x] -> a toast should appear "Connection to server was lost"
- [x] -> this toast should be shown as long as the server is down
- Re-start the backend
- [x] -> toast should change to show "Connection re-established"
- [x] -> toast should now disappear after 2 seconds
---
Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com>
Resolves#9947
### Changes 🏗️
Backend:
- Send a graph execution update after terminating a run
- Don't wipe the graph execution stats when not passed in to `update_graph_execution_stats`
Frontend:
- Don't hide the output of stopped runs
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to `/library/agents/[id]`
- Run an agent that takes a while (long enough to click stop and see the effect)
- Hit stop after it has executed a few nodes
- [x] -> run status should change to "Stopped"
- [x] -> run stats (steps, duration, cost) should stay the same or increase only one last time
- [x] -> output so far should be visible
- [x] -> shown information should stay the same after refreshing the page
---
Co-authored-by: Krzysztof Czerwinski <34861343+kcze@users.noreply.github.com>
I am disabling all the Twitter and Todoist blocks whose OAuth is not
configured.
> I have already checked it locally. When OAuth is not set, the blocks
do not appear in the block menu
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>
This small PR resolves the deprecation warnings of the `logger` library:
```
DeprecationWarning: The 'warn' method is deprecated, use 'warning' instead
```
Github Blocks use an URL transformer passed to `Requests` to convert web
URLs to the API URLs. This doesn't always work with the anti-SSRF URL
pinning mechanism that was implemented in #8531.
### Changes 🏗️
In `Requests.request(..)`:
- Apply `validate_url` *after* `extra_url_validator`, to prevent
mismatch between `pinned_url` and `original_hostname`
- Simplify logic & add clarifying comments
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Tested the github blocks that had the issue
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
The changes in this PR are to add Llama API support.
### Changes 🏗️
We add both backend and frontend support.
**Backend**:
- Add llama_api provider
- Include models supported by Llama API along with configs
- llm_call
- credential store and llama_api_key field in Settings
**Frontend**:
- Llama API as a type
- Credentials input and provider for Llama API
### Checklist 📋
#### For code changes:
- [X] I have clearly listed my changes in the PR description
- [X] I have tested my changes according to the test plan:
**Test Plan**:
<details>
<summary>AI Text Generator</summary>
- [X] Start-up backend and frontend:
- Start backend with Docker services: `docker compose up -d --build`
- Start frontend: `npm install && npm run dev`
- By visiting http://localhost:3000/, test inference and structured
outputs
- [X] Create from scratch
- [X] Request for Llama API Credentials
<img width="2015" alt="image"
src="https://github.com/user-attachments/assets/3dede402-3718-4441-9327-ecab25c63ebf"
/>
- [X] Execute an agent with at least 3 blocks
<img width="2026" alt="image"
src="https://github.com/user-attachments/assets/59d6d56b-2ccc-4af5-b511-4af312c3f7f8"
/>
- [X] Confirm it executes correctly
</details>
<details>
<summary>Structured Response Generator</summary>
- [X] Start-up backend and frontend:
- Start backend with Docker services: `docker compose up -d --build`
- Start frontend: `npm install && npm run dev`
- By visiting http://localhost:3000/, test inference and structured
outputs
- [X] Create from scratch
- [X] Execute an agent
<img width="2023" alt="image"
src="https://github.com/user-attachments/assets/d1107638-bf1b-45b1-a296-1e0fac29525b"
/>
- [X] Confirm it executes correctly
</details>
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
> Log entry with size 865.8K exceeds maximum size of 256.0K
Some logs are just too large.
### Changes 🏗️
Truncate logging on NotificationManager and LLMBlocks
### 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
<!-- Clearly explain the need for these changes: -->
As part of a small security review, we found that google won't let you
load with integrity. That seems insane but the general workaround is to
load a static copy of your own
### Changes 🏗️
Moves all the google analytics scripts in house instead of loading via
cdn
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] tested it in a new isolated environment to confirm events still
work as expected everywhere they are used
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
A collection of UX update and bug fixes for onboarding and wallet.
### Changes 🏗️
- Show spinner loading indicator when onboarding button is clicked
- Use `getLibraryAgentByStoreListingVersionID` instead of
`addMarketplaceAgentToLibrary` on congrats screen
- Fix `Not enough segments` issue: don't fetch onboarding when user is
logged out
- Minor updates
- Fill some missing deps in deps arrays
- `Spinner` component, styles updates
- Use `useMemo`/`useCallback`
- Show error toast when onboarding agent fails to run:
<img width="405" alt="Screenshot 2025-05-06 at 5 09 01 PM"
src="https://github.com/user-attachments/assets/dd1272da-326a-448d-995d-98ac773b3ee4"
/>
### 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] Onboarding can be completed
- [x] Failing agent shows toast
- [x] Wallet can be opened and works properly (tasks, confetti)
- [x] Dependency arrays don't cause infinite loops
- Resolves#9929
### Changes 🏗️
- Implement `BackendAPI.onWebSocketConnect(..)`
- Improve reliability and reactivity of `/library/agents/[id]`:
- Refresh page data and (re)subscribe and on WebSocket (re)connect
- Break up multi-action hooks into smaller parts to reduce unnecessary
re-renders and requests
- Reduce duplicate requests
- Use `onWebSocketConnect` in `useAgentGraph` as well
- Tidy up `autogpt-server-api/client.ts` a bit
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to `/library/agents/[id]`
- Run the agent
- [x] -> UI should update normally with execution updates
- Suspend your computer, or restart the backend (or WS server) to break
the connection
- DO NOT REFRESH THE TAB ITSELF
- [x] -> On reconnect, page data should be refreshed (check in network
tab of dev tools)
- Run the agent again
- [x] -> UI should update normally with execution updates
Currently both login and signup page show the same feedback on error on
cloud (join the waitlist).
### Changes 🏗️
Update login&signup feedback for cloud.
- Use cards for login and signup feedback instead of html list
- Make login page show prompt to redirect user to signup
<img width="474" alt="Screenshot 2025-05-07 at 4 01 07 PM"
src="https://github.com/user-attachments/assets/45f189ea-5fea-45bb-89f9-7323418d69ea"
/>
<img width="476" alt="Screenshot 2025-05-07 at 4 03 29 PM"
src="https://github.com/user-attachments/assets/96f4cd7f-f3e6-44b2-b647-96ee98063572"
/>
### 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] Signup&login works with correct credentials
- [x] Signup&login shows correct error message on wrong credentials
- [x] Links work correctly
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
This pull request includes a small change to the `get_my_agents`
function in `autogpt_platform/backend/backend/server/v2/store/db.py`.
The change updates the sorting order for retrieving library agents to
use the `updatedAt` field instead of `agentGraphVersion`.
This aligns with the later sorting that is applied to the fetched page
in the frontend.
<!-- 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: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [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**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
John thinks an hourly email is a bit much; I'm inclined to agree.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
swaps the time for dealing the batch for the agent runs from one hour to
one day
### 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] No testing done
We want to add support for reading + writing events for google calendar
so agents can do cool stuff with that!
### Changes 🏗️
* Add support for google calendar blocks
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run manual tests of each block
- [x] Build and run automatic tests
- Follow-up fix for #9862
### Changes 🏗️
- Rename the stored `data` input field to `inputs` on all Agent Executor
nodes in the DB
### 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] Dry-run the query in Supabase to verify that the data operation
works
- [x] CI
```
2025-05-09 11:54:15,171 ERROR Error executing graph 954e6fc8-9c90-46fa-be5b-4063eb519ec7: Block ID AIMusicGeneratorBlock error: 44f6c8ad-d75c-4ae1-8209-aad1c0326928 is already in use
```
### Changes 🏗️
This PR avoids the use of global variables messing up with the way
`load_all_blocks` is cached.
### 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] CI
Currently, there is no guarantee that an error will be reported right
away. And late execution is a serious issue that needs to be addressed
quickly
### Changes 🏗️
Provided a direct alert when late execution occurs.
### 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 run on the late executions job on artificially created late
executions.
This is a follow-up to
https://github.com/Significant-Gravitas/AutoGPT/pull/9903
The continued graph execution restarted all the execution stats from
zero, making the execution stats misleading.
### Changes 🏗️
Continue the execution stats when continuing the graph execution.
### 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 tests, manual graph run with the graph execution aborted
midway.
Some of the code paths in the notification & scheduler service were
synchronous HTTP calls that execute a long-running job that blocks. This
makes the service threads busy waiting.
### Changes 🏗️
* Remove queue_notification API
* Remove DTO
* Move heavy tasks intothe executor
<!-- 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] Manually executing notification service jobs through the scheduler
API
Listing page throws exception on deployment because of supabase auth
issue.
### Changes 🏗️
Catch the exception when getting library agent. This reverts the
behavior of listing page and it'll always show "Add to Library" when
user is logged in.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- [ ] ...
<!-- Clearly explain the need for these changes: -->
The goal of this change is a quick and temporary tweak to improve the
displaying of output text in the Agent Runs screen.
This change is made anticipating that these outputs will be properly
improved in the near future, and is thus just a temporary change in
order to display text in a human readable format.
### Changes 🏗️
There is one change in this PR:
- The class of the Agent Output textbox is changed to properly display
text without impacting the design.
Below is a before and after of this change:
**Before**

**After**

### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
---------
Co-authored-by: Bentlybro <Github@bentlybro.com>
- Resolves#9918
- Follow-up fix for #9914
### Changes 🏗️
- In `get_graph_execution_schedules`, skip jobs when their kwargs can't
be parsed as `GraphExecutionJobArgs`
- Rename methods of `Scheduler` to clarify their scope (scheduled
*graph* 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:
- Go to `/library/agents/[id]` (which calls `GET /api/schedules`)
- [x] -> `GET /api/schedules` request returns HTTP 200
If a node has a multi-credentials input (e.g. AI Text Generator block)
but the discriminator value (e.g. model choice) is missing, the input
can't be discriminated into a single-provider input. Discrimination into
a single-provider input is necessary to make a graph-level credentials
input for use in the Library.
### Changes 🏗️
- feat(backend): Require discriminator fields to always have a value
- dx(frontend): Improve typing of discriminator stuff
- dx(frontend): Fix typing in `NodeOneOfDiscriminatorField` component
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Saving & running graphs with and without credentials works
normally
- Note: We don't have any blocks with a discriminator that doesn't have
a default value, so currently I don't think it's possible to produce a
case where this mechanism would be triggered.
The Library Agent credentials UX (#9789) currently doesn't work for
sub-graphs.
### Changes 🏗️
- Include sub-graphs in generating `Graph.credentials_input_schema`
- Propagate `node_credentials_input_map` into `AgentExecutionBlock`
executions
- Fix: also apply `node_credentials_input_map` in `_enqueue_next_nodes`
### 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:
- Import a graph with sub-graphs that need credentials
- Run this agent from the Library
- [x] -> Should work
Introduce a late execution check scheduled job. The late threshold
duration is configurable.
This initial version only reports the error to Sentry.
### Changes 🏗️
* Added late execution check scheduled job
* Move the registration weekly notification processing job out of API
call and calling it directly from the scheduler service.
### 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 firing of scheduled job through an exposed API
<!-- Clearly explain the need for these changes: -->
We want the scheduler shouldn't scale with the rest API lol
### Changes 🏗️
pulls out the scheduler into its own service
<!-- 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 it
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Currently agent listing on Marketplace have bad UX.
### Changes 🏗️
- Add function and endpoint to check if user has `LibraryAgent` by given
`storeListingVersionId`
- Redesign listing buttons
- `Add to library` shown when user is logged in and doesn't have an
agent in library
- `See runs` shown when user logged in as has the agent in the library
- `Download agent` always shown
- Disabled buttons during processing (adding/downloading)
- Stop raising when owner is trying to add own agent. Now it'll simply
redirect to Library.
- Remove button appearing/flickering after a delay on listing page -
logged in status is now checked in server component.
- Show error toast on adding/redirecting to library and downloading
error
- Update breadcrumbs and page title to say `Marketplace` instead of
`Store`
- `font-geist` -> `font-sans` (`font-geist` var doesn't exist)
### 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] Button on a listing is `Add to library` (no library agent)
- [x] Agent can be added and user is redirected
- [x] Button on the listing is `See runs` and clicking it redirects to
the library agent
- [x] Remove agent from library
- [x] Buttons shows `Add to library` again
- [x] Agent can be re-added
- [x] Agent can be downloaded
- [x] `Add to library` Button is hidden when user is logged out
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Process initializer on the process pool should never fail, but we do
network-related stuff there.
This cause the pool to be in a broken state.
### Changes 🏗️
Remove the health check step on process initializer.
### 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 test
<!-- Clearly explain the need for these changes: -->
Our oauth review wants us to drop this in favor of a diff scope that
will require additional work
### Changes 🏗️
Disables the oauth sheets scopes in prod
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] set env locally
A collection of updates regarding onboarding and wallet.
### Changes 🏗️
- `try-except` instead of `if` when rewarding (skip unnecessary db call)
- Make external services question onboarding step optional
- Add `SmartImage` component to lazy load images with pulse animation
and use it throughout onboarding
- Use store agent name instead of graph graph name (run page)
- Fix some images breaking layout on the agent card (run page)
- Center agent card vertically and horizontally (center on the left half
of page) (run page)
- Delay and tweak confetti when opening wallet and when task finished
(wallet)
- Flash wallet when credits change value
- Make tutorial video grayscale on completed steps (wallet)
- Fix confetti triggering on page refresh (wallet)
- Redirect to agent run page instead of Library after onboarding
- Expand task groups by default (wallet) - this means tutorial videos
are visible by default
### 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] Services step is optional and skipping it doesn't break onboarding
- [x] `SmartImage` works properly
- [x] Agent card is aligned properly, including on page scroll
- [x] Wallet flash when credits value change
- [x] User is redirected to the agent runs page after onboarding
Currently, the agent/graph execution engine is consuming the execution
queue and acknowledges the message after fully completing its execution
or failing it.
However, in the case of the agent executor failing due to a
hardware/resource issue, or the executor did not manage to acknowledge
the execution message. Another agent executor will pick it up and start
the execution again from the beginning.
The scope of this PR is to make the next executor pick up the next work
to continue the pre-existing execution instead of starting it all over
from the beginning.
### Changes 🏗️
* Removed `start_node_execs` from `GraphExecutionEntry`
* Populate the starting graph node from the DB query instead (fetching
Running & Queued node executions).
* Removed `get_incomplete_node_executions` from DB manager.
* Use get_node_executions with a status filter instead.
* Allow graph execution to end in non-FAILED/COMPLETED status, e.g, when
the executor is interrupted, it should be stuck in the running status,
and let other executors continue the task.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run an agent, stop the executor midway, re-reun the executor, the
execution should be continued instead of restarted.
### Changes 🏗️
* Avoid executing any agent with a zero balance.
* Make node execution count global across agents for a single user.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run agents by tweaking the `execution_cost_count_threshold` &
`execution_cost_per_threshold` values.
### Changes 🏗️
* Avoid executing any agent with a zero balance.
* Make node execution count global across agents for a single user.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run agents by tweaking the `execution_cost_count_threshold` &
`execution_cost_per_threshold` values.
Using sync code in the async route often introduces a blocking
event-loop code that impacts stability.
The current RPC system only provides a synchronous client to call the
service endpoints.
The scope of this PR is to provide an entirely decoupled signature
between client and server, allowing the client can mix & match async &
sync options on the client code while not changing the async/sync nature
of the server.
### Changes 🏗️
* Add support for flexible async/sync RPC client.
* Migrate scheduler client to all-async client.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Scheduler route test.
- [x] Modified service_test.py
- [x] Run normal agent executions
Fixes the admin add dollars, in the ``add-money-button.tsx`` file, in
the handleApproveSubmit action it was trying to use formatCredits for
the value which is wrong, this fix changes it
```diff
<form action={handleApproveSubmit}>
<input type="hidden" name="id" value={userId} />
<input
type="hidden"
name="amount"
- value={formatCredits(Number(dollarAmount))}
+ value={Math.round(parseFloat(dollarAmount) * 100)}
/>
```
i was able to add $1, $0.10 and $0.01

```
FAILED test/model_test.py::test_agent_preset_from_db - pydantic_core._pydantic_core.ValidationError: 1 validation error for AgentNodeExecutionInputOutput
E pydantic_core._pydantic_core.ValidationError: 1 validation error for AgentNodeExecutionInputOutput
E data
E JSON input should be string, bytes or bytearray [type=json_type, input_value=Json, input_type=Json]
E For further information visit https://errors.pydantic.dev/2.11/v/json_type
```
### Changes 🏗️
Manually creating a Prisma model often breaks, and we have such an
instance in the test.
This PR fixes the test to make the new Pydantic happy.
### 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
<!-- Clearly explain the need for these changes: -->
We need a way to refund people who spend money on agents wihout making
manual db actions
### Changes 🏗️
- Adds a bunch for refunding users
- Adds reasons and admin id for actions
- Add admin to db manager
- Add UI for this for the admin panel
- Clean up pagination controls
<!-- 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 by importing dev db as baseline
- [x] Add transactions on top for "refund", and make sure all existing
transactions work
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
When an executor dies, an ongoing execution will not be retried and will
just stuck in the running status.
This change avoids such a scenario by allowing an execution of an entry
that is not in QUEUED status with the low-probability risk of double
execution.
### Changes 🏗️
* Allow non-QUEUED status to be re-executed.
* Improve cleanup of node & graph executor.
* Make a cancellation request consumption a separate thread to avoid
being blocked by other messages.
* Remove unused retry loop on the execution manager.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run agent, kill the server, re-run it, agent restarted.
<!-- Clearly explain the need for these changes: -->
This PR fixes [Issue
#9883](https://github.com/Significant-Gravitas/AutoGPT/issues/9883),
where the SendWebRequestBlock crashes when receiving a 204 No Content
response, such as when posting to a Discord webhook. The fix ensures
that empty responses are handled gracefully, and the block does not
crash.
### Changes 🏗️
- Added a check to handle empty HTTP responses (like 204 status) in
SendWebRequestBlock
- Fallback to empty string or None if there is no response content
- Prevents server errors when parsing non-existent response bodies
<!-- 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] Send a POST request to an endpoint that returns 204 No Content
- [x] Confirm that SendWebRequestBlock handles it without crashing
- [x] Confirm that regular 200 OK JSON responses still work
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Lohith-11 <lohithr011@gamil.com>
Co-authored-by: Toran Bruce Richards <toran.richards@gmail.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Add Note to "Getting Started" page for Raspberry Pi 5 page size issue
with `supabase-vector` that prevents `docker compose up` from running
successfully.
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
- Added a Note to the "Getting Started" page that explains a change in
Raspberry Pi OS for Raspberry Pi 5s, and how to revert the change to
avoid an issue running the backend on Docker.
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] No code changes
#### For configuration changes:
- [x] No configuration changes
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
we oopsed and used the wrong attribute for short desc
### Changes 🏗️
Uses sub heading instead now
<!-- 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] check the expected text shows
<!-- Clearly explain the need for these changes: -->
for admins to approve agents for the marketplace, we need to be able to
run them. this is a quick workaround for downloading them so you can put
them in your marketplace to check
### Changes 🏗️
- clones various endpoints related to downloading into an admin side
with logging, and admin checks
- adds download button and removes open in builder action
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] Test downloading agents from local marketplace
- fix#9882
we’re currently using optional multi select, and it’s working great.
We’re able to correctly determine the data type for it. However, there’s
a small issue. We’re not using the correct subSchema that is inside
anyOf on the multi select input. This is why we’re getting the problem
on the Twitter block. It’s the only one that’s using this type of input,
so it’s the only one that’s affected.

---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
### Changes 🏗️
Bring back PrintConsoleBlock
### 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] Print console block
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
The transaction with zero payment amount will not generate a payment ID,
so the checkout failed for this scenario.
### Changes 🏗️
Don't use payment id as transaction key on top-up with zero payment
amount.
### 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] Top-up with stripe coupon
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.
(cherry picked from commit ef022720d5)
👋 Hi there! This PR was automatically generated by Autofix 🤖
This fix was triggered by Toran Bruce Richards.
Fixes
[AUTOGPT-SERVER-1ZY](https://sentry.io/organizations/significant-gravitas/issues/6386687527/).
The issue was that: `llm_call` calculates `max_tokens` without
considering `input_tokens`, causing OpenRouter API errors when the
context window is exceeded.
- Implements a function `estimate_token_count` to estimate the number of
tokens in a list of messages.
- Calculates available tokens based on the context window, estimated
input tokens, and user-defined max tokens.
- Adjusts `max_tokens` for LLM calls to prevent exceeding context window
limits.
- Reduces `max_tokens` by 15% and retries if a token limit error is
encountered during LLM calls.
If you have any questions or feedback for the Sentry team about this
fix, please email [autofix@sentry.io](mailto:autofix@sentry.io) with the
Run ID: 32838.
---------
Co-authored-by: sentry-autofix[bot] <157164994+sentry-autofix[bot]@users.noreply.github.com>
Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com>
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.
### Changes 🏗️
Provide a system toggle for disabling the billing page:
NEXT_PUBLIC_SHOW_BILLING_PAGE
### 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] Toggle `NEXT_PUBLIC_SHOW_BILLING_PAGE` value.
Smart Decision Block was not able to work with sub agent with custom
name input & the bead were not properly propagated in the execution UI.
The scope of this PR is fixing it.
### Changes 🏗️
* Introduce an easy to parse format of tool edge:
`{tool}_^_{func}_~_{arg}`. Graph using SmartDecisionBlock needs to be
re-saved before execution to work.
* Reduce cluttering on a smart decision block logic.
* Fix beads not being shown for a smart decision block tool calling.
### 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] Execute an SDM with some special character input as a tool
<img width="672" alt="image"
src="https://github.com/user-attachments/assets/873556b3-c16a-4dd1-ad84-bc86c636c406"
/>
Update "Edit a copy" modal text when copying marketplace agent in
Library. Update agent action buttons to reflect the design accurately.
### Changes 🏗️
- Update modal text
- Disable copying owned agents (only marketplace allowed)
- `Open in Builder` -> `Customize agent`
- Disabled `Customize agent` instead of hiding
- Change `Delete agent` to non-destructive design
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- [ ] ...
Strip secrets, credentials when forking agent
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- [ ] ...
Currently, we have no visibility on the state of the execution manager,
the scope of this PR is to open up the observability of it by exposing
Prometheus metrics.
### Changes 🏗️
Re-use the execution manager port to expose the Prometheus metrics.
### 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] Hit /metrics on 8002 port
### Changes 🏗️
Set process starting mode to forkserver instead of spawn, if possible,
for performance benefits.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Existing tests
Executor process initialization can fail and cause this error:
```
concurrent.futures.process.BrokenProcessPool: A child process terminated abruptly, the process pool is not usable anymore
```
### Changes 🏗️
Add retry to reduce the chance of the initialization error to happen.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Existing tests
This PR introduces copying agents feature in the Library. Users can copy
and download their library agents but they can edit only the ones they
own (included copied ones).
### Changes 🏗️
- DB migration: add relation in `AgentGraph`: `forked_from_id` and
`forked_from_version`
- Add `fork_graph` function that makes a hardcopy of agent graph and its
nodes (all with new ids)
- Add `fork_library_agent` that copies library agent and its graph for a
user
- Add endpoint `/library/agents/{libraryAgentId}/fork`
- Add UI to `library/agents/[id]/page.tsx`: `Edit a copy` button with
dialog confirmation
### 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] Agent can be copied, edited and runs
### Changes 🏗️

Hide Google Maps system id key on the frontend UI.
### 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
Navbar sometimes disappears outside `/onboarding`.
### Changes 🏗️
This PR solves the problem of disappearing Navbar outside `/onboarding`
by introducing `app/(platform)` route group.
- Move all routes requiring Navbar to `app/(platform)`
- Move `<Navbar>` to `app/(platform)/layout.tsx`
- Move `/onboarding` to `app/(no-navbar/`
- Remove pathname injection to header from middleware and stop relying
on it to hide the navbar
### 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] Common routes work properly
Setting the Google Maps API through the API has never worked on the
platform.
### Changes 🏗️
Set the default api key from the environment variable.
### 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 GoogleMapsBlock
https://github.com/Significant-Gravitas/AutoGPT/pull/9452 was throwing
`operator does not exist: text ? unknown` on deployed dev and so the
function call was commented as a hotfix.
This PR fixes and re-enables the llm model migration function.
### Changes 🏗️
- Uncomment and fix `migrate_llm_models` function
### 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] Migrate nodes with non-existing models
- [x] Don't migrate nodes without any model or with correct models
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
There are cases where the publishing agent execution is failing, making
the agent execution appear to be stuck in a queue, but the execution has
never been in a queue in the first place.
### Changes 🏗️
On publishing failure, we set the graph & starting node execution status
to FAILED and let the UI bubble up the error so the user can try again.
### 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] Normal add execution flow
For unknown reason publishing message can fail sometimes due to the
connection being broken:
MessageQueue suddenly unavailable, connection simply broke, connection
being reset, etc.
### Changes 🏗️
Adding a tenacity retry on AMQP or ConnectionError, which hopefully can
alleviate the issue.
### 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] Simple add execution
- Resolves#9771
- ... in a non-persistent way, so it won't work for webhook-triggered
agents
For webhooks: #9541
### Changes 🏗️
Frontend:
- Add credentials inputs in Library "New run" screen (based on
`graph.credentials_input_schema`)
- Refactor `CredentialsInput` and `useCredentials` to not rely on XYFlow
context
- Unsplit lists of saved credentials in `CredentialsProvider` state
- Move logic that was being executed at component render to `useEffect`
hooks in `CredentialsInput`
Backend:
- Implement logic to aggregate credentials input requirements to one per
provider per graph
- Add `BaseGraph.credentials_input_schema` (JSON schema) computed field
Underlying added logic:
- `BaseGraph._credentials_input_schema` - makes a `BlockSchema` from a
graph's aggregated credentials inputs
- `BaseGraph.aggregate_credentials_inputs()` - aggregates a graph's
nodes' credentials inputs using `CredentialsFieldInfo.combine(..)`
- `BlockSchema.get_credentials_fields_info() -> dict[str,
CredentialsFieldInfo]`
- `CredentialsFieldInfo` model (created from
`_CredentialsFieldSchemaExtra`)
- Implement logic to inject explicitly passed credentials into graph
execution
- Add `credentials_inputs` parameter to `execute_graph` endpoint
- Add `graph_credentials_input` parameter to
`.executor.utils.add_graph_execution(..)`
- Implement `.executor.utils.make_node_credentials_input_map(..)`
- Amend `.executor.utils.construct_node_execution_input`
- Add `GraphExecutionEntry.node_credentials_input_map` attribute
- Amend validation to allow injecting credentials
- Amend `GraphModel._validate_graph(..)`
- Amend `.executor.utils._validate_node_input_credentials`
- Add `node_credentials_map` parameter to
`ExecutionManager.add_execution(..)`
- Amend execution validation to handle side-loaded credentials
- Add `GraphExecutionEntry.node_execution_map` attribute
- Add mechanism to inject passed credentials into node execution data
- Add credentials injection mechanism to node execution queueing logic
in `Executor._on_graph_execution(..)`
- Replace boilerplate logic in `v1.execute_graph` endpoint with call to
existing `.executor.utils.add_graph_execution(..)`
- Replace calls to `.server.routers.v1.execute_graph` with
`add_graph_execution`
Also:
- Address tech debt in `GraphModel._validate_gaph(..)`
- Fix type checking in `BaseGraph._generate_schema(..)`
#### TODO
- [ ] ~~Make "Run again" work with credentials in
`AgentRunDetailsView`~~
- [ ] Prohibit saving a graph if it has nodes with missing discriminator
value for discriminated credentials inputs
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
This redesigns how the task group is displayed when finished for both
expanded and folded state.
### Changes 🏗️
- Folded state now displays `Done` badge and hides tasks
- Expanded state shows only task names and hides details and video
Screenshot:
1. Expanded unfinished group
2. Expanded finished group
3. Folded finished group
<img width="463" alt="Screenshot 2025-04-15 at 2 05 31 PM"
src="https://github.com/user-attachments/assets/40152073-fc0e-47c2-9fd4-a6b0161280e6"
/>
### 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] Finished group displays correctly
- [x] Unfinished group displays correctly
### Changes 🏗️
- Add top-up and auto-refill tabs in the Wallet
- Add shadcn `tabs` component
- Disable increase/decrease spinner buttons on number inputs across
Platform (moved css from `customnode.css` to `globals.css`
### 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] Incorrect values are detected properly
- [x] Top-up works
- [x] Setting auto-refill works
Onboarding executes original agent graph directly without waiting for
marketplace agent to be added to user library.
### Changes 🏗️
- Execute library agent after it's already added to library
### 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] Onboarding agent executes properly
Array fields in `schema.prisma` are non-nullable, but generated
migrations don’t add `NOT NULL` constraints. This causes existing rows
to get `NULL` values when new array columns are added, breaking schema
expectations and leading to bugs.
### Changes 🏗️
- Backfill all `NULL` rows on non-nullable array columns to empty arrays
- Set `NOT NULL` constraint on all array columns
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Existing `NULL` rows are properly backfilled
- [x] Existing arrays are not set to default empty arrays
- [x] Affected columns became non-nullable in the db
### Changes 🏗️
Updates to the setup docs to remove the old unneeded ``git submodule
update --init --recursive --progress`` command + some other small tweaks
around it
If the websocket doesn't disconnect when the user switches to viewing a
different agent, they aren't unsubscribed. If execution updates *from a
different agent* are adopted into the page state, that can cause
crashes.
### Changes 🏗️
- Filter incoming execution updates by `graph_id`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- Go to an agent and initiate a run that will take a while (long enough
to navigate to a different agent)
- Navigate: Library -> [another agent]
- [ ] Runs from the first agent don't show up in the runs list of the
other agent
SmartDecisionBlock sometimes tried to be smart by calling multiple tool
calls and our platform does not support this yet.
### Changes 🏗️
Disable parallel tool calls for OpenAI & OpenRouter LLM provider LLM
blocks.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Tested SmartDecisionBlock & AITextGeneratorBlock
### 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
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
This PR simply changes the logging type from info to debug of node
outputs in the agent.py file.
<!-- 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
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [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**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Bentlybro <Github@bentlybro.com>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
This change simply changes the logging level of node inputs and outputs
to debug level. This change is needed because currently logging all node
data causes logs that are too large for the logger to prevent nodes from
running.
<!-- 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
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [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**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
We have seen instances where the executor gets stuck in a failing
message-consuming loop due to the upstream RabbitMQ being down. The
current message-consuming pattern is not optimal for handling this.
### Changes 🏗️
* Add a retry limit to the execution loop limit.
* Use `basic_consume` instead of `basic_get` for handling message
consumption.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run agents cancel them
- Resolves#9823
The key-value pairs input, like those used in CreateDictionaryBlock, are
assumed to be either a numeric or a string type.
When it has `any` type, it was randomly assumed to be a numeric type.
### Changes 🏗️
Only convert to number when it's explicitly defined to do so on
key-value pair input.
### 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] Tried two different key-value pair input: AiTextGenerator &
CreateDictionary
### 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
### Changes 🏗️
Fix this broken behaviors:
Input data mix-up caused by running two different executions of the same
agent with the same input.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run agent with old user
- [x] Running two different executions of the same agent with the same
input.
<!-- Clearly explain the need for these changes: -->
Swap to pooling supabase connections rather than depending on x number
of max open connections
### Changes 🏗️
Adds direct connect URL to be used throughout the system
<!-- 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 thoroughly all of the endpoints in the dev env with switched
infra matching pr
- [x] Follow the new release plan tests
- [x] Follow the old release plan tests
#### 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**)
<details>
<summary>configuration changes</summary>
- Change how we connect to the database to use direct when configured
and database URL when not
- update prisma for this
- have default matching database and default
</details>
### Changes 🏗️
- Update onboarding to give user rewards for completing steps
- Remove `canvas-confetti` lib and add `party-js` instead; the former
didn't allow to play confetti from a component
- Add onboarding videos in `frontend/public/onboarding/`
- Remove Balance (`CreditsCard.tsx`) and add openable `Wallet.tsx` (and
accompanying `WalletTaskGroup.tsx`) instead that displays grouped
onboarding tasks with descriptions and short instructional videos
- Further relevant updates to `useOnboarding`, `types.ts`
- Implement onboarding rewards
- Add `onboarding_reward` function in `credit.py` that is used to reward
user for finished onboarding tasks safely - transaction key is
deterministic, so the same user won't be rewarded twice for the same
step.
- Add `reward_user` in `onboarding.py`
- Update `UserOnboarding` model and add a migration
<img width="464" alt="Screenshot 2025-04-05 at 6 06 29 PM"
src="https://github.com/user-attachments/assets/fca8d09e-0139-466b-b679-d24117ad01f0"
/>
### 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] Onboarding works
- [x] Tasks can be completed
- [x] Rewards are added correctly for all completed tasks
Currently the execution task is not properly distributed between
executors because we need to send the execution request to the execution
server.
The execution manager now accepts the execution request from the message
queue. Thus, we can remove the synchronous RPC system from this service,
let the system focus on executing the agent, and not spare any process
for the HTTP API interface.
This will also reduce the risk of the execution service being too busy
and not able to accept any add execution requests.
### Changes 🏗️
* Remove the RPC system in Agent Executor
* Allow the cancellation of the execution that is still waiting in the
queue (by avoiding it from being executed).
* Make a unified helper for adding an execution request to the system
and move other execution-related helper functions into
`executor/utils.py`.
* Remove non-db connections (redis / rabbitmq) in Database Manager and
let the client manage this by themselves.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Existing CI, some agent runs
The graph execution queue is not disk-persisted; when the executor dies,
the executions are lost.
The scope of this issue is migrating the execution queue from an
inter-process queue to a RabbitMQ message queue. A sync client should be
used for this.
- Resolves#9746
- Resolves#9714
### Changes 🏗️
Move the execution manager from multiprocess.Queue into persisted
Rabbit-MQ.
### 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] Execute agents.
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
We want to be able to filter errors according to where they occur in
sentry so we need to track and include that data. We also are not
logging everything from app services correctly so fix that up
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds env tracking for frontend
- adds sentry init in app service spawn
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Tested by running and making sure all events + logs are inserted
into sentry correctly
- fix#9003
- fix - #8969
- fix#8970
Adding correct margins in between headers, divider and content.
### Changes made
- Remove any vertical padding or margin from the section.
- Add top and bottom margins to the separator, so the spacing between
sections is handled only by the separator.
- Also, add a size prop in AvatarFallback because its size is currently
broken. It’s not able to extract the size properly from the className.
<!-- Clearly explain the need for these changes: -->
We want to be able to filter errors according to where they occur in
sentry so we need to track and include that data. We also are not
logging everything from app services correctly so fix that up
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds env tracking for frontend
- adds sentry init in app service spawn
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Tested by running and making sure all events + logs are inserted
into sentry correctly
- fix#9003
- fix - #8969
- fix#8970
Adding correct margins in between headers, divider and content.
### Changes made
- Remove any vertical padding or margin from the section.
- Add top and bottom margins to the separator, so the spacing between
sections is handled only by the separator.
- Also, add a size prop in AvatarFallback because its size is currently
broken. It’s not able to extract the size properly from the className.
- fix#9222
- fix#9221
- fix#8966
### Changes made
- Standardized the height of store cards.
- Corrected spacing and responsiveness behavior.
- Removed horizontal margin and max-width from the featured section.
- Fixed the aspect ratio of the agent image in the store card.
- Now, a normal desktop screen displays 3 columns of agents instead of
4.
<img width="1512" alt="Screenshot 2025-04-07 at 7 09 40 AM"
src="https://github.com/user-attachments/assets/50d3b5c9-4e7c-456e-b5f1-7c0093509bd3"
/>
Distilled from #9541 to reduce the scope of that PR.
- Part of #9307
- ❗ Blocks #9786
- ❗ Blocks #9541
### Changes 🏗️
- Fix `LibraryAgent` schema (for #9786)
- Fix relationships between `LibraryAgent`, `AgentGraph`, and
`AgentPreset`
- Impose uniqueness constraint on `LibraryAgent`
- Rename things that are called `agent` that actually refer to a
`graph`/`agentGraph`
- Fix singular/plural forms in DB schema
- Simplify reference names of closely related objects (e.g.
`AgentGraph.AgentGraphExecutions` -> `AgentGraph.Executions`)
- Eliminate use of `# type: ignore` in DB statements
- Add `typed` and `typed_cast` utilities to `backend.util.type`
### 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 static type checking (with all risky `# type: ignore` removed)
- [x] Check that column references in views are updated
- fix#9222
- fix#9221
- fix#8966
### Changes made
- Standardized the height of store cards.
- Corrected spacing and responsiveness behavior.
- Removed horizontal margin and max-width from the featured section.
- Fixed the aspect ratio of the agent image in the store card.
- Now, a normal desktop screen displays 3 columns of agents instead of
4.
<img width="1512" alt="Screenshot 2025-04-07 at 7 09 40 AM"
src="https://github.com/user-attachments/assets/50d3b5c9-4e7c-456e-b5f1-7c0093509bd3"
/>
<!-- Clearly explain the need for these changes: -->
We were duplicating placeholder values across all agents 😨
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
Deep copies the schema instead
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Test the broken agent in dev
- Resolves#9792
### Changes 🏗️
- Replace all `default=[]` -> `default_factory=list`
- Replace all `default={}` -> `default_factory=dict`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] CI
---------
Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com>
The linter currently exits with exit code 0 even if linting fails. This
makes the CI linter permissive which isn't good.
Changes:
- Make linter exit with an error code if a linting step fails
- Fix existing formatting issues
This PR is to add the new [Meta: Llama 4
Maverick](https://openrouter.ai/meta-llama/llama-4-maverick) and [Meta:
Llama 4 Scout](https://openrouter.ai/meta-llama/llama-4-scout) models
via [OpenRouter](https://openrouter.ai/)
### Changes 🏗️
Added the model names to ``llm.py``
```
META_LLAMA_4_SCOUT = "meta-llama/llama-4-scout"
META_LLAMA_4_MAVERICK = "meta-llama/llama-4-maverick"
```
and the modela metadata
```
LlmModel.META_LLAMA_4_SCOUT: ModelMetadata("open_router", 131072, 131072),
LlmModel.META_LLAMA_4_MAVERICK: ModelMetadata("open_router", 1048576, 1000000),
```
and i have added the model price to ``block_cost_config.py``
```
LlmModel.META_LLAMA_4_SCOUT: 1,
LlmModel.META_LLAMA_4_MAVERICK: 1,
```
### Checklist 📋
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Open the build page and place a ai text block, open the model
select and scroll to the bottom and select either of the 2 models
- [x] test them with a prompt and wait for a reply!
This is a prerequisite infra change for
https://github.com/Significant-Gravitas/AutoGPT/issues/9714.
We will need a service where we can maintain our own client (db, redis,
rabbitmq, be it async/sync) and configure our own cadence of
initialization and cleanup.
While refactoring the service.py, an option to use Pyro as an RPC
protocol is also removed.
### Changes 🏗️
* Decouple resource initialization and cleanup from the parent
AppService logic.
* Removed Pyro.
### 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] CI
<!-- Clearly explain the need for these changes: -->
Now that we are trying to use Sentry more, cleaning up some errors ->
warnings is a good idea
### Changes 🏗️
- reduces log level of retry to warning
<!-- 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] check it comes through in sentry
<!-- Clearly explain the need for these changes: -->
We got this error in
sentry:[AUTOGPT-SERVER-33P](https://significant-gravitas.sentry.io/issues/6462614597/events/bb4871d796b04e759ade55197498cff9/)
```
Level: Error
'Secrets' object has no attribute 'ProviderName.GOOGLE_client_id'
```
### Changes 🏗️
- Follows pattern used when accessing these in
`_get_provider_oauth_handler` in the router
<!-- 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 to make sure getting works
Fix https://github.com/Significant-Gravitas/AutoGPT/pull/9632
### Changes 🏗️
- Set default values from input schema to `hardcodedValues` in
`CustomNode.tsx`
### 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] Default values are correctly applied to newly created node
- fix#8956
### Changes:
- Updated line height from 28px to 36px for improved readability.
- Ensured that all section headings (“Featured agents”, “Top agents”,
“Featured creators”, and “Become a creator”) now have a uniform style.
- Verified that font-poppins is correctly set in the Tailwind config
file and layout.tsx.
- Color changed from #282828 to #262626
### Scope:
- This PR only includes typography-related adjustments.

- fix#9425
- Enhancing the functionality of searching blocks on the build page
Currently, it only performs exact matching on the block name and
description. I added a scoring mechanism for searching.
- The scoring algorithm works as follows:
- Returns 1 if no query (all blocks match equally)
- Normalized query for case-insensitive matching
- Returns 3 for exact substring matches in block name (highest priority)
- Returns 2 when all query words appear in the block name (regardless of
order)
- Returns 1.X for blocks with names similar to query using Jaro-Winkler
distance (X is similarity score)
- Returns 0.5 when all query words appear in the block description
(lowest priority)
- Returns 0 for no match
Higher scores will appear first in search results.
> I have used an external library for Jaro-Winkler distance -
[link](https://www.npmjs.com/package/jaro-winkler)
Before

After

### Changes 🏗️
- Use the same code as in Library to display inputs for onboarding agent
- Fixes bug that crashes frontend when showing onboarding inputs
- Remove no longer needed `OnboardingAgentInput` component
### 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 input types display correctly
- [x] Onboarding agent runs
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
Sentry just released logs so lets enrich our details there too
### Changes 🏗️
- Adds sentry logging
- Adds dependencies tracking all of our sentry integrations
- Adds environment tracking to sentry
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Tested to make sure events show up in sentry with the correct
environment logging
<!-- Clearly explain the need for these changes: -->
I oopsed and had an extra unneeded parameter (as @majdyz pointed out)
and wasn't respected everywhere it was used.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Remove parameter
- update all the places AuthFeedback is called
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] Test all pages with authfeedback on it
Co-authored-by: Bently <tomnoon9@gmail.com>
- Resolves#9730
### Changes 🏗️
- feat: Add "Open in builder" run action
- refactor: Add `ActionButtonGroup` to replace boilerplate code in
`AgentRunDetailsView`, `AgentRunDraftView`, `AgentScheduleDetailsView`
- feat: Add link support to `ActionButtonGroup`, `ButtonAction`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to `/library/agents/[id]`
- [x] "Run again" button works
- [x] "Open in builder" button-link works
- Resolves#9731
### Changes 🏗️
- feat: Add "Steps" showing `node_execution_count` to agent run view
- Add `GraphExecutionMeta.stats.node_exec_count` attribute
- feat(backend/executor): Send graph execution update after *every* node
execution (instead of only I/O node executions)
- Update graph execution stats after every node execution
- refactor: Move `GraphExecutionMeta` stats into sub-object
(`cost`, `duration`, `total_run_time` -> `stats.cost`, `stats.duration`,
`stats.node_exec_time`)
### 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:
- View an agent run with 1+ steps on `/library/agents/[id]`
- [x] "Info" section layout doesn't break
- [x] Number of steps is shown
- Initiate a new agent run
- [x] "Steps" increments in real time during execution
In this pull request, the following changes have been made in response
to Issue #9190:
Documentation Changes:
- Added a note to the AutoGPT documentation regarding Docker
installation on Windows.
- Specifically, the note advises users to opt for WSL2 (Windows
Subsystem for Linux version 2) instead of Hyper-V during Docker setup to
prevent issues with Supabase, such as the "unhealthy" status for
supabase-db.
---------
Co-authored-by: Madura Herath <madurah@verdentra.com>
Co-authored-by: Bently <tomnoon9@gmail.com>
- Resolves#9679
### Changes 🏗️
Frontend:
- Fix crash on `payload` graph input
- Fix crash on object type agent I/O values
- Hide "+ New run" if `graph.webhook_id` is set
Backend:
- Add computed field `webhook_id` to `GraphModel`
- Add computed property `webhook_input_node` to `GraphModel`
- Refactor:
- Move `Node.webhook_id` -> `NodeModel.webhook_id`
- Move `NodeModel.block` -> `Node.block` (computed property)
- Replace `get_block(node.block_id)` with `node.block` where sensible
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Create and run a simple graph
- [x] Create a graph with a webhook trigger and ensure it works
- [x] Check out the runs of a webhook-triggered graph and ensure the
page works
<!-- 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>
- Resolves#9716
- Builds on the work done in #9627
### Changes 🏗️
- Remove `safeCopyGraph`; export directly from backend instead
- Explicitly name sanitization functions for *importing* graphs; move to
`@/lib/autogpt-server-api/utils`
- Amend `BackendAPI.getGraph(..)` to delete `.user_id` if `for_export ==
true`
Out-of-scope improvements:
- Add missing `user_id` to frontend `Graph` types
- Add `UserID` branded type for `User.id` + all `user_id` properties
### 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:
- Create and configure an agent with the Publish To Medium block, a
block that uses credentials, and a webhook trigger
- Go to `/monitoring` and click the agent you just created
- [x] -> "Export" button should work
- [x] -> Exported file contains no credentials or secrets
- [x] -> Exported file contains no user IDs
- [x] -> Exported file contains no webhook IDs
- fix#8958
Currently, the arrow button and carousel have a 16px margin, and the
button is placed 12px below the top of the container. This makes the
spacing appear to be 28px. Therefore, place the button and indicator at
the top of the container.
- fix#8965
### Changes Made:
- **Title**: Increased line height from 20px to 32px.
- **Creator Name:**
- Changed font to Geist Sans.
- Updated font size to 20px and leading to 28px.
- **Description**: Applied Geist Sans font.
- **Stats Line:** Applied Geist Sans font.
- Font Configuration Fix:
> Previously, we were using font-gist, which is not defined in the
tailwind config file, hence Updated to use font-sans instead.
I have also fixed the height and width of the profile picture in the
creator card in this PR. The issue is linked below:
- #9314

The margin is perfectly set to 24px; only the height and width of the
image need to be changed.
---------
Co-authored-by: Bently <tomnoon9@gmail.com>
<!-- Clearly explain the need for these changes: -->
One of the pull request review notes from when these were first made is
that they don't belong in the v2 folder. This pr fixes where they are.
### Changes 🏗️
- Moves from v2 to routers for the postmark tooling
<!-- 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] Check that linting and tests pass
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
<!-- Clearly explain the need for these changes: -->
We have logged 272k timeout errors in the past week from the event loop.
Don't raise those as errors.
Also along the way for diagnosing this we found that some items were
inserted into batches with incomplete datasets so handle that too.
### Changes 🏗️
- Handle timeout errors explicitly
- Add better messaging for other error types
- Add filtering for queueing bad mezsaging
- add filtering for reading bad batches
<!-- 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] Pull dev db
- [x] Test new code to check stability + error reduction
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Currently, our CI always uses the latest version of Poetry. This causes
issues with the lockfile check whenever a new Poetry version is
released, especially if that new version has different lockfile
generation behavior.
This new mechanism determines the Poetry version to use as follows:
- Get Poetry version from backend/poetry.lock in the current branch
- Get Poetry version from backend/poetry.lock on the base branch
- Use the newest version out of the two found versions
This way, we don't automatically update to new Poetry versions, but it
is still possible to update to newer versions through pull requests.
The cleanup command was only called on SIGTERM, making it possible for
the service to close without being cleaned. Risking the connection not
being proactively closed when the service is unused.
### Changes 🏗️
Call the cleanup command on the service finally block.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run the service, stop it, see the log is printed (locally)
<!-- Clearly explain the need for these changes: -->
I want to be able to insert data into the graph as a webhook from
various services without making a provider specific webhook for things
like discord, slack, uptime bots, etc.
### Changes 🏗️
- Adds a generic webhook block that others can use
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Test the endpoint that is generated with a graph, making sure to
pass data and consts to it
Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript)
from 8.54.0 to 9.6.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/releases"><code>@sentry/nextjs</code>'s
releases</a>.</em></p>
<blockquote>
<h2>9.6.0</h2>
<h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add
<code>@sentry/tanstackstart-react</code> package and make
<code>@sentry/tanstackstart</code> package a utility package (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that
supports libraries like React and Solid, the
<code>@sentry/tanstackstart</code> SDK package was renamed to
<code>@sentry/tanstackstart-react</code> to reflect that the SDK is
specifically intended to be used for React TanStack Start applications.
Note that the TanStack Start SDK is still in alpha status and may be
subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638">#15638</a>)</li>
<li>feat(deps): bump <code>@sentry/webpack-plugin</code> from 3.2.1 to
3.2.2 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for
instrumentation file (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for
auto instrumentation (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a
href="https://github.com/angelikatyborska"><code>@angelikatyborska</code></a>
and <a
href="https://github.com/nwalters512"><code>@nwalters512</code></a>.
Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@sentry/browser</code></td>
<td>23.15 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay) - with
treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay with
Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td><code>@sentry/react</code></td>
<td>24.97 KB</td>
</tr>
<tr>
<td><code>@sentry/react</code> (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td><code>@sentry/vue</code></td>
<td>27.4 KB</td>
</tr>
<tr>
<td><code>@sentry/vue</code> (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td><code>@sentry/svelte</code></td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td><code>@sentry/nextjs</code> (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td><code>@sentry/sveltekit</code> (client)</td>
<td>36.63 KB</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/blob/9.6.0/CHANGELOG.md"><code>@sentry/nextjs</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.6.0</h2>
<h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add
<code>@sentry/tanstackstart-react</code> package and make
<code>@sentry/tanstackstart</code> package a utility package (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that
supports libraries like React and Solid, the
<code>@sentry/tanstackstart</code> SDK package was renamed to
<code>@sentry/tanstackstart-react</code> to reflect that the SDK is
specifically intended to be used for React TanStack Start applications.
Note that the TanStack Start SDK is still in alpha status and may be
subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638">#15638</a>)</li>
<li>feat(deps): bump <code>@sentry/webpack-plugin</code> from 3.2.1 to
3.2.2 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for
instrumentation file (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for
auto instrumentation (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a
href="https://github.com/angelikatyborska"><code>@angelikatyborska</code></a>
and <a
href="https://github.com/nwalters512"><code>@nwalters512</code></a>.
Thank you for your contributions!</p>
<h2>9.5.0</h2>
<h3>Important Changes</h3>
<p>We found some issues with the new feedback screenshot annotation
where screenshots are not being generated properly. Due to this issue,
we are reverting the feature.</p>
<ul>
<li>Revert "feat(feedback) Allowing annotation via highlighting
& masking (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15484">#15484</a>)"
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15609">#15609</a>)</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>Add cloudflare adapter detection and path generation (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15603">#15603</a>)</li>
<li>deps(nextjs): Bump rollup to <code>4.34.9</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15589">#15589</a>)</li>
<li>feat(bun): Automatically add performance integrations (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15586">#15586</a>)</li>
<li>feat(replay): Bump rrweb to 2.34.0 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15580">#15580</a>)</li>
<li>fix(browser): Call original function on early return from patched
history API (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15576">#15576</a>)</li>
<li>fix(nestjs): Copy metadata in custom decorators (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15598">#15598</a>)</li>
<li>fix(react-router): Fix config type import (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15583">#15583</a>)</li>
<li>fix(remix): Use correct types export for
<code>@sentry/remix/cloudflare</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15599">#15599</a>)</li>
<li>fix(vue): Attach Pinia state only once per event (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15588">#15588</a>)</li>
</ul>
<p>Work in this release was contributed by <a
href="https://github.com/msurdi-a8c"><code>@msurdi-a8c</code></a>, <a
href="https://github.com/namoscato"><code>@namoscato</code></a>, and <a
href="https://github.com/rileyg98"><code>@rileyg98</code></a>. Thank
you for your contributions!</p>
<h2>9.4.0</h2>
<ul>
<li>feat(core): Add types for logs protocol and envelope (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15530">#15530</a>)</li>
<li>feat(deps): Bump <code>@sentry/cli</code> from 2.41.1 to 2.42.2 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15510">#15510</a>)</li>
<li>feat(deps): Bump <code>@sentry/webpack-plugin</code> from 3.1.2 to
3.2.1 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15512">#15512</a>)</li>
<li>feat(feedback) Allowing annotation via highlighting & masking
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15484">#15484</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6ec4602781"><code>6ec4602</code></a>
release: 9.6.0</li>
<li><a
href="5ba80bc5fd"><code>5ba80bc</code></a>
Merge pull request <a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15703">#15703</a>
from getsentry/prepare-release/9.6.0</li>
<li><a
href="8dc6e50597"><code>8dc6e50</code></a>
Remove unnecessary changelog item</li>
<li><a
href="7889768035"><code>7889768</code></a>
meta(changelog): Update changelog for 9.6.0</li>
<li><a
href="2b5526565c"><code>2b55265</code></a>
fix(nextjs): Consider <code>pageExtensions</code> when looking for
instrumentation file ...</li>
<li><a
href="7d88266a6e"><code>7d88266</code></a>
chore(ci): Remove <code>type</code> from canary failure template (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15698">#15698</a>)</li>
<li><a
href="48ed271b6d"><code>48ed271</code></a>
chore(deps): bump esbuild from 0.20.0 to 0.25.0 in
/dev-packages/e2e-tests/te...</li>
<li><a
href="e15988c2ad"><code>e15988c</code></a>
chore: Add external contributor to CHANGELOG.md (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15642">#15642</a>)</li>
<li><a
href="5c4cab7b34"><code>5c4cab7</code></a>
chore(deps): Deduplicate <code>@babel</code> dependencies (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15639">#15639</a>)</li>
<li><a
href="ce1ced8172"><code>ce1ced8</code></a>
chore: Add external contributor to CHANGELOG.md (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15640">#15640</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/getsentry/sentry-javascript/compare/8.54.0...9.6.0">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [psutil](https://github.com/giampaolo/psutil) from 6.1.1 to 7.0.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/giampaolo/psutil/blob/master/HISTORY.rst">psutil's
changelog</a>.</em></p>
<blockquote>
<h1>7.0.0</h1>
<p>2025-02-13</p>
<p><strong>Enhancements</strong></p>
<ul>
<li>669_, [Windows]: <code>net_if_addrs()</code>_ also returns the
<code>broadcast</code> address
instead of <code>None</code>.</li>
<li>2480_: Python 2.7 is no longer supported. Latest version supporting
Python
2.7 is psutil 6.1.X. Install it with: <code>pip2 install
psutil==6.1.*</code>.</li>
<li>2490_: removed long deprecated <code>Process.memory_info_ex()</code>
method. It was
deprecated in psutil 4.0.0, released 8 years ago. Substitute is
<code>Process.memory_full_info()</code>.</li>
</ul>
<p><strong>Bug fixes</strong></p>
<ul>
<li>2496_, [Linux]: Avoid segfault (a cPython bug) on
<code>Process.memory_maps()</code>
for processes that use hundreds of GBs of memory.</li>
<li>2502_, [macOS]: <code>virtual_memory()</code>_ now relies on
<code>host_statistics64</code>
instead of <code>host_statistics</code>. This is the same approach used
by <code>vm_stat</code>
CLI tool, and should grant more accurate results.</li>
</ul>
<p><strong>Compatibility notes</strong></p>
<ul>
<li>2480_: Python 2.7 is no longer supported.</li>
<li>2490_: removed long deprecated <code>Process.memory_info_ex()</code>
method.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ea5b55605f"><code>ea5b556</code></a>
pre-release</li>
<li><a
href="d6e28b7a83"><code>d6e28b7</code></a>
try to fix tests</li>
<li><a
href="104bb3228b"><code>104bb32</code></a>
test cpu_times() for process children</li>
<li><a
href="16c091b380"><code>16c091b</code></a>
test cpu_times() for process children</li>
<li><a
href="eee09da72a"><code>eee09da</code></a>
[OSX] proc.c: Fix goo.gl link in comment for source reference (<a
href="https://redirect.github.com/giampaolo/psutil/issues/2505">#2505</a>)</li>
<li><a
href="17e27801e6"><code>17e2780</code></a>
ci: build aarch64 wheel on GHA aarch64 runner (<a
href="https://redirect.github.com/giampaolo/psutil/issues/2503">#2503</a>)</li>
<li><a
href="1ba8667c89"><code>1ba8667</code></a>
pin black version to 24.X, because new 25.X breaks style</li>
<li><a
href="9c114a5137"><code>9c114a5</code></a>
[OSX] use <code>host_statistics64</code> to get memory metrics (<a
href="https://redirect.github.com/giampaolo/psutil/issues/2502">#2502</a>)</li>
<li><a
href="08d7d43894"><code>08d7d43</code></a>
pin black version to 24.X, because new 25.X breaks style</li>
<li><a
href="a509e5aa18"><code>a509e5a</code></a>
669 windows broadcast addr (<a
href="https://redirect.github.com/giampaolo/psutil/issues/2501">#2501</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/giampaolo/psutil/compare/release-6.1.1...release-7.0.0">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
We keep showing local users error messages that are just not relevant
### Changes 🏗️
Swaps the error messaging logic to be dependent on the behavior of the
specific platform they are on
<!-- 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 with auth container down (simulates incorrect setup) and
validate that error message is shown
- [x] Try normal path
- Follow-up to #9657
<img width="280" alt="image"
src="https://github.com/user-attachments/assets/2f3cd683-db63-485f-8914-5654c34f1a4c"
/>
<img width="520" alt="image"
src="https://github.com/user-attachments/assets/de7e7cb9-61d4-4071-aea8-393ff5200c54"
/>
### Changes 🏗️
* Implement the input UI for Agent Input subtypes.
* Refactor node-input-component, extra out data type decision logic,
share it with runner/library input.
* Add `format` field for short-text, long-text, and mediafile type.
* Unify UI data type enum.
Out of scope:
- Styling for these inputs.
### 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] Use all the available agent input subtypes in an agent and run it
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
- fix#9189
Currently, the list of agents on the "Publish Agent" dialog is random. I
have sorted them so that the latest edited ones appear first, similar to
the library page.
Co-authored-by: Bently <tomnoon9@gmail.com>
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.
- Resolves#8782
### Changes 🏗️
- feat(frontend/library): Use WS subscription to get real-time execution
updates
- feat(backend/ws_api): Send `GraphExecutionUpdate` on all new agent I/O
- Include agent I/O in `GraphExecutionUpdate` (by subclassing
`GraphExecution`)
- Add `IO_BLOCK_IDs` to `.blocks.io`
- feat(backend/ws_api): Add `subscribe_graph_executions` method to
WebSocket API
- feat(backend): Withhold `GraphExecution.node_executions` from requests
by non-graph-owners
- Split `GraphExecutionWithNodes` off of `GraphExecution`
- Use `GraphExecution` as much as possible, as it's a much cheaper query
than `GraphExecutionWithNodes`
- refactor(frontend): Make `GraphExecution.node_executions` optional
- fix(frontend): Parse dates in responses of `/executions` and
`/graphs/{graph_id}/executions`
- refactor(frontend/library): Move sorting logic for agent runs list
from `AgentRunsPage` to `AgentRunsSelectorList`
- refactor(backend/ws_api): Clean up message handler implementations
- refactor(backend/tests): Use `.data.execution.get_graph_execution(..)`
directly instead of `AgentServer.test_get_graph_run_results(..)`
Out-of-scope changes:
- refactor(backend): Remove unnecessary query include from
`.data.graph.get_graph_metadata(..)`
Demo:
https://github.com/user-attachments/assets/8ea6225d-7334-49cb-a522-83f153d840da
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to `/library/agents/[id]` for an agent with inputs and outputs
- Draft and run a new run
- [x] -> should appear in the list of runs at the top
- [x] -> should be selected as soon as the request finishes
- [x] -> new I/O should appear as it is generated
- [x] -> status should be updated in real-time (both in list and in
adjacent details view)
- Click "Run again"
- [x] -> should appear in the list of runs at the top
- [x] -> should be selected as soon as the request finishes
- [x] -> new I/O should appear as it is generated
- [x] -> status should be updated in real-time (both in list and in
adjacent details view)
- Click "Open in builder" under "Agent actions"; run the agent from the
builder
- [x] -> should work the same as before
- [x] -> node I/O should appear in real-time
- [x] -> node execution statuses should update in real-time
This pull request includes several changes to improve the backend
functionality and configuration of the `autogpt_platform`. The most
important changes involve adding a RabbitMQ service for testing,
enhancing logging configuration, updating the linter script to handle
errors gracefully, and modifying test configurations.
Backend configuration improvements:
*
[`autogpt_platform/backend/docker-compose.test.yaml`](diffhunk://#diff-f6a211ff1c6d96d19adb5641ee287258a6af8d72a99e33dafb4a334094205a43R29-R43):
Added RabbitMQ service configuration for testing, including health
checks and environment variables.
*
[`autogpt_platform/backend/.env.example`](diffhunk://#diff-62020caf1b9a15e0e3b9b3b1b69d5f6464bf7643f62354cbbaabf755d57b6064R191-R192):
Added a section delimiter for optional API keys for use in finding the
optional keys end when auto generating integrations.
Error handling and logging enhancements:
*
[`autogpt_platform/backend/linter.py`](diffhunk://#diff-0787e3ef718ac9963df64d9ab1d8e7a3b35dc4ab0cb874c65da6c2901e1e4991R3):
Updated the `run` function to handle `subprocess.CalledProcessError`
exceptions and print error output to `stderr` and prevent raising a
stack trace when it should not.
[[1]](diffhunk://#diff-0787e3ef718ac9963df64d9ab1d8e7a3b35dc4ab0cb874c65da6c2901e1e4991R3)
[[2]](diffhunk://#diff-0787e3ef718ac9963df64d9ab1d8e7a3b35dc4ab0cb874c65da6c2901e1e4991L13-R23)
Testing configuration updates:
*
[`autogpt_platform/backend/pyproject.toml`](diffhunk://#diff-26ebebd91da791c6484f07d9d91484a66f52836708f5294b24365603438b880cR111):
Added `asyncio_default_fixture_loop_scope` to pytest configuration for
better control over asyncio fixtures.
*
[`autogpt_platform/backend/run_tests.py`](diffhunk://#diff-f09930577243a4ef5213bf6191a3c500a4b8d3dcfee2d4b452cf7ce66b3c494fL55):
Removed the `postgres-test` service from the test setup script as we
need all of docker services up for the tests to run.
This PR publicly exposes all the agents listed in the store to the
internet.
### Changes 🏗️
Remove the auth requirement for an agent to download the agent.
### 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] Accessing
`http://localhost:8006/api/store/download/agents/{agentId}` without
authorization key.
When we are cancelling a running graph execution, it's possible that the
graph is already terminated.
We need to allow this process to proceed and update the rest of its node
execution to terminate.
### Changes 🏗️
Instead of erroring out the graph execution status update, we proceed on
updating the node execution status.
### 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] Stop an already terminated graph
Currently, when an agent execution fails to be executed, the front-end
does not display any feedback to the user.
The scope of this change is providing that.
### Changes 🏗️
* Extracted `useToastOnFail` from `credits` page into a unified helper
method.
* Uses `useToastOnFail` on agent execution requests on library pages.
<img width="1000" alt="image"
src="https://github.com/user-attachments/assets/2daa0597-eb93-457d-8887-0f00c4db89ac"
/>
<img width="1000" alt="image"
src="https://github.com/user-attachments/assets/1a541c98-fb95-424f-8ffe-972332b3ce01"
/>
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run agent with invalid input
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
- Resolves#9693
### Changes 🏗️
- Catch the DB error and log a descriptive error message
- Add `NotFoundError` to `backend.util.exceptions`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] ~~I have tested my changes according to the test plan:~~
- Low-stakes change, high effort to test: we'll see if it works from the
production logs
- 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>
This is a follow up to
https://github.com/Significant-Gravitas/AutoGPT/pull/9511 fixing some
issues and updating onboarding.
### Changes 🏗️
- Update `UserOnboarding` data
- Update schema and add migration
- Change `step` in `UserOnboarding` to `completedSteps` array with
`OnboardingStep` enum
- Remove `isCompleted`: this is now inferred from `completedSteps`
values
- Don't onboard if <2 marketplace agents; that prevents self-host
onboarding
- Add endpoints:
- `is_onboarding_enabled`: to check if users should be onboarded (not if
they finished onboarding); now check if there are at least 2 marketplace
agents
- `get_store_agent`: returns `StoreAgentDetails` for given
`store_listing_version_id`
- `get_graph_meta_by_store_listing_version_id`: returns `GraphMeta`
- Add agent to Library just before running it and not when chosen and
remove code that was responsible for removing agent that wasn't run
- Move onboarding to `OnboardingProvider` (it'll be needed globally for
Phase 2)
- Multiple fixes, renames for clarity
### Checklist 📋
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Don't onboard if less than 2 marketplace agents
- [x] Avoid non-input and credentials agents
- [x] Onboarding works and can be finished
- [x] Onboarding resumes
- [x] Onboarding agent runs correctly
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Some existing nodes use models that no longer exist as values on
`LlmModel` enum.
### Changes 🏗️
- Update models for all blocks with `LlmModel` fields that do not exist
in `LlmModel` enum to `gpt-4o`, directly in `AgentNode->constantInput`
db column, on server startup
### 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] Updates wrong models to `gpt-4o` for all affected `AgentNode`s
- [x] Doesn't update correct models
- [x] Doesn't insert model when unnecessary
- [x] Doesn't break other values in jsonb
The current block web requests utility has a logic to avoid the system
firing into blocklisted IPs.
However, the current logic is still prone to a few security issues:
* DNS rebinding attack: due to the lack of guarantee on the used IP not
being changed during the IP checking and firing step.
* Open redirect: due to the request sensitive request headers are still
being propagated throughout the web redirect.
### Changes 🏗️
* Uses IP pinning to request the web.
* Strip `Authorization`, `Proxy-Authorization`, `Cookie` upon web
redirects.
### 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 the web request block, add more tests with different
validation scenarios.
(cherry picked from commit f0df4c9174)
The current block web requests utility has a logic to avoid the system
firing into blocklisted IPs.
However, the current logic is still prone to a few security issues:
* DNS rebinding attack: due to the lack of guarantee on the used IP not
being changed during the IP checking and firing step.
* Open redirect: due to the request sensitive request headers are still
being propagated throughout the web redirect.
### Changes 🏗️
* Uses IP pinning to request the web.
* Strip `Authorization`, `Proxy-Authorization`, `Cookie` upon web
redirects.
### 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 the web request block, add more tests with different
validation scenarios.
Currently, an import statement like `from backend.blocks.basic import
AgentInputBlock` will initialize `backend.blocks` and thereby load all
other blocks. This has quite high potential to cause circular import
issues, and it's bad for performance in cases where we don't want to
load all blocks (yet).
The same goes for `backend.integrations.webhooks`.
### Changes 🏗️
- Change `__init__.py` of `backend.blocks` and
`backend.integrations.webhooks` to cached loader functions rather than
init-time code
- Change type of `BlockWebhookConfig.provider` to `ProviderName`
<!-- test edit to check that this doesn't break anything -->
### 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] Set up and use an agent with a webhook-triggered block
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Agent Input Block subtypes do not have a proper input UI yet on the
library & run input page.
### Changes 🏗️
Provide a toggle to enable these blocks and set it to False by default.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
We need an admin agent approval UI for handling the submissions to the
marketplace
### Changes 🏗️
- Adds routes to the admin routes list
- Fixes the db query for submitting new versions of existing agents
- Add models for responses that include version details
- add the admin pages for agent
- Adds the Admin Agent Data Table
- Add all the new endpoints to the client.ts
Models changes
- convert the Submission status to an enum
- remove is_approved from models which was left incorrectly
- Add StoreListingWithVersions
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Test the admin dashboard for
- [x] Reject
- [x] Accept
- [x] Updating listing
- [x] More version submissions
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Blocks that are not defined in the block cost are pretty much free. The
lack of cost control makes it hard to control its quota. The scope of
this change is providing a way to charge any executions based on the
number of block being executed in real-time.
### Changes 🏗️
* Add execution charge logic based on the number of blocks executed,
controlled by these two configurations:
* `execution_cost_count_threshold`: We will charge the execution based
on the multiple of this number.
* `execution_cost_per_threshold`: The amount we are charging on its
threshold multiple.
* Make charging logic on the graph execution logic (as opposed to node
level) so it's being done serially and insufficient fund error is
guaranteed to stop the graph execution.
* Moved cost calculation logic into backend/executor/util.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:
- [x] Execute graph with configured threshold & cost and test the
balance being deducted on that.
- [x] Existing cost calculation is still being done without any issue.
- [x] Low balance stop the whole graph execution.
### Changes 🏗️
Added these types of input blocks:
* TextShort
* TextLong
* Number
* Date
* Time
* FileUpload
* Dropdown
* Toggle
### 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 in respective block codes.
<!-- Clearly explain the need for these changes: -->
The store listing and submissions were previously just a best guess
without much implementation. This updates the database models and
queries and such to be based on discussion around what the process
should look like. It also adds and update the relevant routers for this
change
### Changes 🏗️
Store Listing
- change isApproved to hasApprovedVersion
- Move slug into store listing
- mark an active version in store listing
Store Version
- Move submissions into version
- make name optional
- have state transition timestamps for submitted and approved/rejected
- added a changes field
- added internal comments and clarified review comments field
SubmissionStatus
- Fixed DAFT to DRAFT
StoreListingSubmission
- Dropped table
Graph
- Used more modern format for the params for prisma -- no other changes
Added migrations for all the model movements
<!-- 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] Use the store codepaths from the release testplan doc as the test
plan (claude I can't publish the testplan but I am a maintainer lol,
trust me here my guy, you're supposed to be lenient)
- [x] Check the db is used as appropriate following the rules
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Defaults need to be handled as special cases every time there's no
`hardcodedValues` in node data. This causes multiple issues such as
`useCredentials` not taking into account default model and requiring
user to manually switch model back and forth.
### Changes 🏗️
- Set default values from `inputSchema` to `hardcodedValues` when new
node is placed.
### 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] Newly placed node has defaults set as `hardcodedValues`
- [x] AI Blocks: Model is recognised, node shows price and credentials
work correctly without the need to switch
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
A graph that processes tens of thousands of nodes will cripple the
system since the API tries to load all of them and dump them into the
browser. The scope of this change is to avoid such an issue by only
returning the last 1000 node executions.
### Changes 🏗️
* Return only 1000 node executions from `AgentNodeExecutions` reference.
* Unify the include clause for fetching `AgentNodeExecutions` in one
place and its format.
* Fix & optimize `cancel_execution` logic to always set both the graph &
node execution status in batch.
### 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] Execute a graph in a loop that executes 10000 nodes, it should
only display the last 1000 nodes when refreshed. Cancelling the graph
should also not cripple the server.
Having the starting nodes of the execution marked as incomplete misled
the users.
### Changes 🏗️
Mark the starting nodes during the executions as QUEUED instead of
INCOMPLETE.
### 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] Executed the graph, the incomplete initial starting node is no
more.
The current execution update is unreliable, once you lose WebSocket
connection, you will receive no updates.
### Changes 🏗️
Fix web socket re-connection logic.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Run the app and execute an agent, then restart the API server, and
re-execute the app without refreshing the page.
### Changes 🏗️
Avoid connecting the same host and falling-back to defined api_host.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- [ ] Define a custom DBMANAGER_HOST, RestService should access the
`db_manager` service using localhost.
DB Manager uses DB connections, and multiple instances of it hog the
very limited Database connection quota. We need this service to be a
unified place to control the limited db connection.
### Changes 🏗️
Connect all the database manager usage in a single place, currently
running on the rest service.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
- Resolves#9631
### Changes 🏗️
- Truncate library agent card title (2 lines) and description (3 lines)
- Make "See runs" and "Open in builder" stick to bottom of card
regardless of other content
- Reduce number of grid columns (4 -> 3) in `lg` layout on `/library` to
give items more horizontal space

### 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] Visually test the changes made on different screen sizes
- Related to #8784
### Changes 🏗️
- feat(frontend/library): Improve agent output styling & fix content
overflow issue
- fix(frontend/library): Fix overlap between content and inset button of
expandable input fields (#9650)
- fix(backend): Unbreak loading graph executions with missing inputs

### 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 with at least one input *not* filled out; view this run
in the Library
- [x] -> page should load normally
- [x] -> agent inputs should load and show normally
- Run an agent that generates long output; view this run in the Library
- [x] -> output should not overflow its container or stretch the page
layout
- [x] -> visually check that the output section looks slick
### Issue
The SendWebRequestBlock currently fails to properly route HTTP error
responses (4xx, 5xx) to their designated output pins (`client_error` and
`server_error`). Instead, these errors are being sent to the default
"Error" pin, breaking expected workflows that depend on proper error
handling.
### Root Cause
The underlying issue is that our custom `requests` module from
`backend.util.request` appears to automatically raise exceptions for
error status codes (similar to how `raise_for_status()` works in the
standard requests library). When these exceptions are thrown, the
block's conditional logic for handling different status codes is
bypassed entirely.
### Changes
This PR adds proper exception handling to catch HTTP errors raised by
the requests module and routes them to the appropriate output pins:
- Added a try-except block to capture `requests.exceptions.HTTPError`
- Extract status code and response data from the caught exception
- Yield to the proper pin based on the status code (4xx → client_error,
5xx → server_error)
- Maintain consistent behavior with the original design intent
### Additional Context
This change maintains backward compatibility while ensuring the block
behaves according to its documented functionality. Users can now
properly handle 4xx and 5xx errors in their workflows as originally
intended.
<!-- Clearly explain the need for these changes: -->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Test the block with new changes and old and ensure expected
behavior
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
<!-- Clearly explain the need for these changes: -->
We accidently send several emails within 10 mins and we're gonna get
blocked for spam if we keep it up
### Changes 🏗️
- moves 1 min to 60 min timer
<!-- 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 via batching a series of notiications over an hour
- Resolves#9622
### Changes 🏗️
- Add pop-out button + modal to input fields in Agent Run Draft view on
`/library/agents/[id]`
- Fix `icon`-variant button styling


### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to an agent's page -> click "+ New run"
- [x] -> pop-out button should show on all input fields
- Enter a value in one of the inputs; click the pop-out button on that
input
- [x] -> input modal with large text field should open
- [x] -> the value you just entered should be present in the modal's
text field
- Edit the value & click "Save"
- [x] -> the modal should close
- [x] -> the value in the corresponding input field should be updated
### Changes 🏗️
<img width="757" alt="image"
src="https://github.com/user-attachments/assets/909aab58-24c7-42ec-9580-ac3e9f32057e"
/>
Since a self-loop is now allowed for AddToListBlock, providing an entry
pin using a static output will cause infinite execution.
This PR change avoid such scenario to be allowed.
### 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] Described above
The change in https://github.com/Significant-Gravitas/AutoGPT/pull/9620
introduces a breaking change in the database volume content; however,
the database's volume location does not change, making switching between
two versions clash.
### Changes 🏗️
Renamed db-config named volume to supabase-config.
### 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] CI
<!-- Clearly explain the need for these changes: -->
We need a sidebar for the admin page, might as well reuse the reusable
component to do so!
### Changes 🏗️
- Extracts the agptui sidebar to a more reusable component
- Update the usage of that sidebar in the settings page
- Use that same sidebar for the admin page
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Test the old sidebar
- [x] Test the new sidebar for admin
Agents using Agent blocks should be seamlessly downloaded from the
marketplace to a file and imported from a file.
Requirements:
* A recursive export process that exports all the required agents to a
single file, no matter how many layers deep (taking care of potential
loops).
* An import process that expects and extracts several agents from a
single file into your library at once.
Considerations:
We need to ensure the reference IDs in the Agent Blocks match/are
updated to match the imported sub-agent ids to prevent broken
references.
### Changes 🏗️
* Add sub_graphs field on Graph model
* Improve graph creation query to support inserting graph + subgraphs in
batch
* Deprecate graph template & remove its column
* Update on marketplace download agent (unified the used method, with
more secure cleanup & proper ownership check).
* Fix failing test cases
### 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] Export graph with sub agents.
- [x] Import the exported graph with sub agents.
- Resolves#9609
### Changes 🏗️
- feat(frontend/library): Add "Export agent to file" button
- fix(frontend/library): Put "Open in builder" button behind access
check
- feat(backend): Improve & move graph export stripping logic
- Add logic to strip `SecretField` values
- Move node stripping logic to `NodeModel` from `GraphModel`
- Add `NodeModel.stripped_for_export()` method
- Add `NodeModel.block` property
### 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:
- Create and configure an agent with the Publish To Medium block and a
block that uses credentials
- Go to `/library/agents/[id]` for the agent you just created
- [x] -> "Open in builder" button should show
- [x] -> "Open in builder" button should work
- [x] -> "Export agent to file" button should show
- [x] -> "Export agent to file" button should work
- [x] -> Exported file contains no credentials or secrets
- [ ] -> ~~Exported file contains no user IDs~~
- Go to `/library/agents/[id]` for an agent from the marketplace
- [x] -> "Open in builder" button should not show
- [x] -> "Export agent to file" button should not show
We have been submoduling Supabase for provisioning local Supabase
instances using docker-compose. Aside from the huge size of unrelated
code being pulled, there is also the risk of pulling unintentional
breaking change from the upstream to the platform.
The latest Supabase changes hide the 5432 port from the supabase-db
container and shift it to the supavisor, the instance that we are
currently not using. This causes an error in the existing setup.
## BREAKING CHANGES
This change will introduce different volume locations for the database
content, pulling this change will make the data content fresh from the
start. To keep your old data with this change, execute this command:
```
cp -r supabase/docker/volumes/db/data db/docker/volumes/db/data
```
### Changes 🏗️
The scope of this PR is snapshotting the current docker-compose code
obtained from the Supabase repository and embedding it into our
repository. This will eliminate the need for submodule / recursive
cloning and bringing the entire Supabase repository into the platform.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Existing CI
<!-- Clearly explain the need for these changes: -->
We're building out admin utilities so we need to bring back the `/admin`
route with RBAC. This PR goes through re-enabling that to work with the
latest changes
### Changes 🏗️
- Adds back removed logic
- Refactors the role checks to fix minor bug for admin page and more
importantly clarify
- Updates routes to the latest
<!-- 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 with admin and authenticated user roles
- [x] Test with logged out user role
- [x] For the above check the all the existing routes + new ones in the
`middleware.ts`
- Resolves#9631
### Changes 🏗️
- Truncate library agent card title (2 lines) and description (3 lines)
- Make "See runs" and "Open in builder" stick to bottom of card
regardless of other content
- Reduce number of grid columns (4 -> 3) in `lg` layout on `/library` to
give items more horizontal space

### 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] Visually test the changes made on different screen sizes
- Related to #8784
### Changes 🏗️
- feat(frontend/library): Improve agent output styling & fix content
overflow issue
- fix(frontend/library): Fix overlap between content and inset button of
expandable input fields (#9650)
- fix(backend): Unbreak loading graph executions with missing inputs

### 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 with at least one input *not* filled out; view this run
in the Library
- [x] -> page should load normally
- [x] -> agent inputs should load and show normally
- Run an agent that generates long output; view this run in the Library
- [x] -> output should not overflow its container or stretch the page
layout
- [x] -> visually check that the output section looks slick
### Issue
The SendWebRequestBlock currently fails to properly route HTTP error
responses (4xx, 5xx) to their designated output pins (`client_error` and
`server_error`). Instead, these errors are being sent to the default
"Error" pin, breaking expected workflows that depend on proper error
handling.
### Root Cause
The underlying issue is that our custom `requests` module from
`backend.util.request` appears to automatically raise exceptions for
error status codes (similar to how `raise_for_status()` works in the
standard requests library). When these exceptions are thrown, the
block's conditional logic for handling different status codes is
bypassed entirely.
### Changes
This PR adds proper exception handling to catch HTTP errors raised by
the requests module and routes them to the appropriate output pins:
- Added a try-except block to capture `requests.exceptions.HTTPError`
- Extract status code and response data from the caught exception
- Yield to the proper pin based on the status code (4xx → client_error,
5xx → server_error)
- Maintain consistent behavior with the original design intent
### Additional Context
This change maintains backward compatibility while ensuring the block
behaves according to its documented functionality. Users can now
properly handle 4xx and 5xx errors in their workflows as originally
intended.
<!-- Clearly explain the need for these changes: -->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Test the block with new changes and old and ensure expected
behavior
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
<!-- Clearly explain the need for these changes: -->
We accidently send several emails within 10 mins and we're gonna get
blocked for spam if we keep it up
### Changes 🏗️
- moves 1 min to 60 min timer
<!-- 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 via batching a series of notiications over an hour
- Resolves#9622
### Changes 🏗️
- Add pop-out button + modal to input fields in Agent Run Draft view on
`/library/agents/[id]`
- Fix `icon`-variant button styling


### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to an agent's page -> click "+ New run"
- [x] -> pop-out button should show on all input fields
- Enter a value in one of the inputs; click the pop-out button on that
input
- [x] -> input modal with large text field should open
- [x] -> the value you just entered should be present in the modal's
text field
- Edit the value & click "Save"
- [x] -> the modal should close
- [x] -> the value in the corresponding input field should be updated
### Changes 🏗️
<img width="757" alt="image"
src="https://github.com/user-attachments/assets/909aab58-24c7-42ec-9580-ac3e9f32057e"
/>
Since a self-loop is now allowed for AddToListBlock, providing an entry
pin using a static output will cause infinite execution.
This PR change avoid such scenario to be allowed.
### 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] Described above
The change in https://github.com/Significant-Gravitas/AutoGPT/pull/9620
introduces a breaking change in the database volume content; however,
the database's volume location does not change, making switching between
two versions clash.
### Changes 🏗️
Renamed db-config named volume to supabase-config.
### 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] CI
<!-- Clearly explain the need for these changes: -->
We need a sidebar for the admin page, might as well reuse the reusable
component to do so!
### Changes 🏗️
- Extracts the agptui sidebar to a more reusable component
- Update the usage of that sidebar in the settings page
- Use that same sidebar for the admin page
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Test the old sidebar
- [x] Test the new sidebar for admin
Agents using Agent blocks should be seamlessly downloaded from the
marketplace to a file and imported from a file.
Requirements:
* A recursive export process that exports all the required agents to a
single file, no matter how many layers deep (taking care of potential
loops).
* An import process that expects and extracts several agents from a
single file into your library at once.
Considerations:
We need to ensure the reference IDs in the Agent Blocks match/are
updated to match the imported sub-agent ids to prevent broken
references.
### Changes 🏗️
* Add sub_graphs field on Graph model
* Improve graph creation query to support inserting graph + subgraphs in
batch
* Deprecate graph template & remove its column
* Update on marketplace download agent (unified the used method, with
more secure cleanup & proper ownership check).
* Fix failing test cases
### 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] Export graph with sub agents.
- [x] Import the exported graph with sub agents.
- Resolves#9609
### Changes 🏗️
- feat(frontend/library): Add "Export agent to file" button
- fix(frontend/library): Put "Open in builder" button behind access
check
- feat(backend): Improve & move graph export stripping logic
- Add logic to strip `SecretField` values
- Move node stripping logic to `NodeModel` from `GraphModel`
- Add `NodeModel.stripped_for_export()` method
- Add `NodeModel.block` property
### 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:
- Create and configure an agent with the Publish To Medium block and a
block that uses credentials
- Go to `/library/agents/[id]` for the agent you just created
- [x] -> "Open in builder" button should show
- [x] -> "Open in builder" button should work
- [x] -> "Export agent to file" button should show
- [x] -> "Export agent to file" button should work
- [x] -> Exported file contains no credentials or secrets
- [ ] -> ~~Exported file contains no user IDs~~
- Go to `/library/agents/[id]` for an agent from the marketplace
- [x] -> "Open in builder" button should not show
- [x] -> "Export agent to file" button should not show
We have been submoduling Supabase for provisioning local Supabase
instances using docker-compose. Aside from the huge size of unrelated
code being pulled, there is also the risk of pulling unintentional
breaking change from the upstream to the platform.
The latest Supabase changes hide the 5432 port from the supabase-db
container and shift it to the supavisor, the instance that we are
currently not using. This causes an error in the existing setup.
## BREAKING CHANGES
This change will introduce different volume locations for the database
content, pulling this change will make the data content fresh from the
start. To keep your old data with this change, execute this command:
```
cp -r supabase/docker/volumes/db/data db/docker/volumes/db/data
```
### Changes 🏗️
The scope of this PR is snapshotting the current docker-compose code
obtained from the Supabase repository and embedding it into our
repository. This will eliminate the need for submodule / recursive
cloning and bringing the entire Supabase repository into the platform.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Existing CI
<!-- Clearly explain the need for these changes: -->
We're building out admin utilities so we need to bring back the `/admin`
route with RBAC. This PR goes through re-enabling that to work with the
latest changes
### Changes 🏗️
- Adds back removed logic
- Refactors the role checks to fix minor bug for admin page and more
importantly clarify
- Updates routes to the latest
<!-- 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 with admin and authenticated user roles
- [x] Test with logged out user role
- [x] For the above check the all the existing routes + new ones in the
`middleware.ts`
Although returning a Prisma object on an RPC is a bad practice, we have
instances where we do so and the type contains a `prisma.Json` field.
This Json field can't be seamlessly serialized and then converted back
into the Prisma object.
### Changes 🏗️
Replacing prisma object as return type on notification service with a
plain pydantic object as DTO.
### 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] Calling notification APIs through the RPC client.
(cherry picked from commit b9f31a9c44)
Although returning a Prisma object on an RPC is a bad practice, we have
instances where we do so and the type contains a `prisma.Json` field.
This Json field can't be seamlessly serialized and then converted back
into the Prisma object.
### Changes 🏗️
Replacing prisma object as return type on notification service with a
plain pydantic object as DTO.
### 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] Calling notification APIs through the RPC client.
DatabaseManager is already provisioned in RestApiService, and
NotificationService lives within the same instance as the Rest Server.
### Changes 🏗️
Moving the DB calls of NotificationService to DatabaseManager.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
(cherry picked from commit f4d4bb83b0)
DatabaseManager is already provisioned in RestApiService, and
NotificationService lives within the same instance as the Rest Server.
### Changes 🏗️
Moving the DB calls of NotificationService to DatabaseManager.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
This is a follow-up of
https://github.com/Significant-Gravitas/AutoGPT/pull/9610
* Addressing the PR comments described in the mentioned PR
* Removed debug logging
* Fix image state loading logic on agent upload 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] Create an library agent and try to create a store listing.
<img width="1409" alt="image"
src="https://github.com/user-attachments/assets/dc86dc97-a33f-4336-ab90-19a53c6f7e0f"
/>
<!-- Clearly explain the need for these changes: -->
We want to be able to process emails on a scheduled basis for summaries.
This adds the baselines for that
### Changes 🏗️
- Adds new tooling to Scheduluer to handle the in-memory schedule for
the weekly processing
- Adds new exposes to notification manager to handle the different data
models for scheduled emails
- adds new models to the notification data models to handle the
different requirements for scheduled emails, closely paralleling the
existing notification ones
- Adds new email template
Note: After testing, email sending was disabled until the template and
data filling are done later down the line. We don't want to email people
random stuff, ya know?
<!-- 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 sending an email on the scheduled basis
- [x] Make sure you get the email, ignoring the fact that all the data
isn't real inside it
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
### Changes 🏗️
We've been auto-generating the thumbnail image for the agent in the
library, this PR is propagating that image as an initial image for the
store listing. This PR also removes the fetch all query for getting the
count for paginating library agent.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Create an library agent and try to create a store listing.
<img width="1409" alt="image"
src="https://github.com/user-attachments/assets/dc86dc97-a33f-4336-ab90-19a53c6f7e0f"
/>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
Removed some indices in the marketplace table that were useless.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
We don't want to spam the user with similar notification types so we
want to group them up over a timespan and handle that as a group of
notifications.
### Changes 🏗️
- Adds a batch queue
- Moves the ExecutionScheduleur to a generic Scheduler
- Makes the Agent run a batch operation
- Fixes various bugs in how we originally made the batch db models and
queries
<!-- 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] Run 10 agents back to back
- [x] Notice how many emails you get
- [x] Wait a bit and you should after an hour (change the cron rule to
speed up testing this) you'll get an email and see all the batches in
your db are empty
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
<!-- Clearly explain the need for these changes: -->
When swapping branches back and forth, I often hit stuff in my db that
is incompatible with other branches. This protects against it a bit
more.
### Changes 🏗️
- Adds filtering around converting data out of the db
<!-- 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 with weird and broken agents in db
- [x] Go to the library page
- [x] Notice in the server console that it warns of bad agents and the
page still loads
It's hard to configure the DB parameter at the moment, this PR gives an
option to provide URL parameter on the Prisma DATABASE_URL.
### Changes 🏗️
Changes:
* Reduce excessive application log
* Make DB configurable
* Set DB connection limit & timeout
### 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:
### Changes 🏗️
Creating a self-loop of the AddToListBlock requires a boilerplate of
adding a dummy block to trigger its execution.

If the only inbound link on an input pin comes from the same block, we
don't wait for that pin on the first execution (as it's never going to
come).
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
addresses the changes requested here [Move to a single source of truth
for docs — Remove duplicate info from readme
#8887](https://github.com/Significant-Gravitas/AutoGPT/issues/8887)
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
changed readme files
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
The Exa Block has a missing error pin which prevents error handling,
this adds that.
<!-- Clearly explain the need for these changes: -->
Per chat with toran, we want one click unsubscribe to work in things
like gmail to reduce spam. This implements the one click unsubscribe
feature, but it is difficult to test due to not being able to control
when it is shown.
### Changes 🏗️
- Adds one click unsub
- Casually fix google reauth by checking the correct variables (approved
to be in pr by Toran)
<!-- 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] Send an email
- [x] Open headers on email and pull the link out
- [x] `curl -X POST <link>` and ensure unsubscribed from all messages.
Note that we can't control when the box is shown on various providers so
we just verify it works on our side for now by checking the headers
#### Configuration changes
Infra pr coming separately, but we did add the secret default to the
.env.example and the docker compose
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
### Changes 🏗️
This is to add the Otto chat bot to the frontend UI.
The changes i have made for this goes as follows:
- I have made and added a basic chat UI widget to the build page, this
will become the main UI for Otto, this will be getting updates in the
future.
- I have made an API route ``/api/otto/ask`` that will receive the
message from the frontend and pass it to the Otto API that we have setup
on GCP.
I already have plans for how we can improve the UI and make it more
modular, this way we can add more features to Otto down the line!
### Config Changes
When we merge this, we will need to add the ENV var for ``otto_api_url``
that will be the URL from GCP where the API is being hosted!
This is now ready for a review as the backend API is up and running, to
who ever does test this, if you want the API url please DM me 😄

### 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] Set the ENV var for ``otto_api_url`` - ask @Bentlybro for this
- [x] Set the ENV var for ``NEXT_PUBLIC_BEHAVE_AS`` to ``CLOUD``
- [x] Send otto a message from the build page frontend
- [x] Send otto a message that contains graph data to see if the sending
graph data works
- Fixes#9579
### Changes 🏗️
- Fetch & use specific graph version to render graph run I/O on
`/library/agents/[id]`
### 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 that yields an output
- [x] -> should render normally without errors
- Rename the Agent Output name
- Save the modified Agent
- Open the Agent in the Agent library and attempt to view the output
from step 1
- [x] -> should render normally without errors
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
Update the security.md based on some advice we got :)
### Changes 🏗️
- Adds an update time window and clarifies time spans
<!-- Concisely describe all of the changes made in this pull request:
-->
This PR adds backend to make Onboarding UI added in
https://github.com/Significant-Gravitas/AutoGPT/pull/9485 functional and
adds missing confetti screen at the end of Onboarding.
*Make sure to have at least any 2 agents in store when testing locally.*
Otherwise the onboarding will finish without showing agents.
Visit `/onboarding/reset` to reset onboarding state, otherwise it'll
always redirect to `/library` once finished.
### Changes 🏗️
- Onboarding opens automatically on sign up and login (if unfinished)
for all users
- Update db schema to add `UserOnboarding` and add migration
- Add GET and PATCH `/onboarding` endpoints and logic to retrieve and
update data Onboarding for a user
- Update `POST /library/agents` endpoint
(`addMarketplaceAgentToLibrary`), so it includes input and output nodes;
these are needed to know input schema for the Onboarding
- Use new endpoints during onboarding to fetch and update data
- Use agents from the marketplace and their input schema for the
onboarding
- Add algorithm to choose store agents based on user answers and related
endpoint `GET /onboarding/agents`
- Redirect outside onboarding if finished and resume on proper page
- Add `canvas-confetti` and `@types/canvas-confetti` frontend packages
- Add and show congrats confetti screen when user runs and agent and
before opening library
- Minor design updates and onboarding fixes
### 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] Redirect to `/onboarding/*` on sign up and sign in (if onboarding
unfinished)
- [x] Onboarding works and can be finished
- [x] Agent runs on finish
- [x] Onboarding state is saved and logging out or refreshing page
restores correct state (user choices)
- [x] When onboarding finished, trying to go into `/onboarding`
redirects to `/library`
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
### Changes 🏗️
There are a few agent-loop issues that this PR is addressing:
* There is a lack of support for agent-loop in Anthropic.
* Duplicated system & user prompt as the main objective prompt in the
agent loop.
* A long rendered text of conversation history by
SmartDecisionMakerBlock agent-loop in the UI.
* A lack of execution input being rendered in the execution list making
it harder to debug.
https://github.com/user-attachments/assets/be430000-bde0-40c6-8f2e-c97ce45b5ed1
### 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] Create from scratch and execute an agent with at least 3 blocks
using SmartDecisionMaker Block.
- Fixes#9577
### Changes 🏗️
- Add the required include statements to `LibraryAgent` queries
- Make a `library_agent_include(user_id)` utility in
`backend.data.includes`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- Go to an agent in the Marketplace; click "Add To Library"
- [ ] -> should work, not return an error
- [ ] -> should redirect to `/library/agents/[id]` -> should load
normally
<!-- Clearly explain the need for these changes: -->
As part of the code review agent, I found these blocks would be useful,
but not required. Adds the ability to list comments on an issue and PR
as well as update comments on an issue, pr and discussion
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds Listing comments block
- Adds updating comment block
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Tested all of the new blocks on #9582 . Review it for context
---------
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Bentlybro <tomnoon9@gmail.com>
<!-- Clearly explain the need for these changes: -->
Trying to run the GitHub Status blocks results in a serialization error
### Changes 🏗️
- Serializes the checks and blocks data objects correctly
<!-- 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] make a one block agent, test it and make sure it works
- Resolves#9542
### Changes 🏗️
- feat(platform): Add "Delete run" button on `/library/agents/[id]` w/
confirm dialog
- Add `AgentGraphExecution.isDeleted` column for soft delete
- Add `DELETE /api/executions/{graph_exec_id}` endpoint
- feat(frontend): Add "Stop run" button on `/library/agents/[id]`
Technical improvements:
- refactor(frontend): Generalize `AgentDeleteConfirmDialog` ->
`DeleteConfirmDialog`
- refactor(frontend): Brand `GraphExecution.execution_id` and
`Schedule.id` to prevent mixing
### 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:
- Click "Delete run" under "Run actions" in the right sidebar
- [x] -> Confirmation dialog should show
- Click "Delete"
- [x] -> run should disappear from list
- [x] -> view should switch to "Draft new run" view
- [x] -> refresh page -> run should not be in list
- Click "Delete" in the menu on a run in the list
- [x] -> Confirmation dialog should show
- Click "Delete"
- [x] -> run should disappear from list
- [x] -> refresh page -> run should not be in list
---------
Co-authored-by: Krzysztof Czerwinski <34861343+kcze@users.noreply.github.com>
Reverts Significant-Gravitas/AutoGPT#9570
Some of the styling changes cause issues with existing parts of the
application, and I don't know if partially reverting would cause issues
with the other refactored components/elements.
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Show that something is happening when a click handler doesn't return
immediately.
### Changes 🏗️
- Show a loading indicator on buttons while their click handler is
running
https://github.com/user-attachments/assets/5878c5a4-cba2-4125-a101-21220d713232
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to `/library/agents/[id]`; click "Run again" on an existing run
- [x] -> loading indicator should show
- [x] -> button state should reset once the API request completes
- [x] Check that existing `Button` elements aren't adversely affected by
the styling changes, especially `overflow-hidden`
### Changes 🏗️
Integrate Ideogram for auto-generating created agent thumbnail

**Note:** switching back to the "old" Replicate-based image generator is
possible by setting `USE_AGENT_IMAGE_GENERATION_V2=false`.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
This PR fixes the layout of the Library page. It properly anchors the
'old experience' message to the bottom of the viewport and improves the
overall page structure using semantic HTML and Tailwind best practices.
Resolves: #9524
### Changes 🏗️
- Restructured the LibraryPage component to use proper semantic HTML
with a `<main>` element
- Added a fixed Alert component at the bottom of the viewport with 8px
margin
- Used ShadcN Alert component for the 'old experience' message for UI
consistency
- Implemented responsive behavior to hide the alert on mobile screens
- Optimized Tailwind classes by using the `container` utility and
removing redundant styles
- Improved accessibility and UX by using appropriate semantic elements
### Screenshot
<img width="926" alt="image"
src="https://github.com/user-attachments/assets/e393007c-639e-4383-922c-41fa67133da8"
/>
### 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:
<details>
<summary>Alert Message at Bottom of Library Page</summary>
- [ ] Visit the Library page and verify the alert appears fixed at the
bottom with 8px margin
- [ ] Resize browser window to various desktop sizes and confirm alert
remains centered
- [ ] Scroll through Library page content and verify the alert stays
fixed at the bottom
- [ ] Open developer tools and toggle to mobile view (width < 640px) to
confirm alert is hidden
- [ ] Test in both light and dark mode to ensure alert styling is
consistent with theme
- [ ] Click the "here" link in the alert and verify it navigates to the
monitoring page
- [ ] Verify that QuestionMarkCircled icon in the alert is properly
styled and visible
</details>
---------
Co-authored-by: Bentlybro <tomnoon9@gmail.com>
Enhance process management with error handling, lifecycle improvements,
and better resource management
- Added robust error handling for process startup failures.
- Implemented proper cleanup of processes during failure scenarios.
- Added detailed error logging for process failures and cleanup
operations.
- Enhanced process lifecycle with health checks.
- Added success logging for process terminations.
These updates enhance the reliability and maintainability of the system.
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Our application currently uses multiple inconsistent button
implementations across the codebase.
This PR standardizes buttons to use our base Button component that
leverages ShadcN, improving UI consistency, maintainability, and
accessibility.
Resolves: #9567
### Changes 🏗️
- Replaced custom button implementations in various components with our
base Button component and greatly reduced redundant overlapping styles.
- Paired with our designer to streamline our `globals.css` to match the
desired approach.
- Added button variant documentation in Storybook
- Deprecated the obsolete 'primary' class and marked it.
### Screenshots 📷
#### Variants
<img width="466" alt="image"
src="https://github.com/user-attachments/assets/9e4f6360-57ec-4f28-b702-e57252d67def"
/>
<img width="418" alt="image"
src="https://github.com/user-attachments/assets/a9af17dc-e8bc-429d-a9ac-8380e34b9089"
/>
<img width="129" alt="image"
src="https://github.com/user-attachments/assets/2df5d184-bb49-4640-bfb4-879360ca35e6"
/>
### 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:
<details>
<summary>Button Consolidation Test Plan</summary>
Visual Verification
- [ ] Verify all button variants (default, destructive, outline,
secondary, ghost, link) render correctly
- [ ] Confirm button styling is consistent across all themes (light,
dark, etc.)
- [ ] Validate that the rounded-full style is applied to appropriate
variants
Functional Testing
- [ ] Test click handlers continue to work on all migrated buttons
- [ ] Verify hover, focus, and active states display correctly on all
buttons
- [ ] Confirm disabled states are working properly
- [ ] Test loading state animations and behavior
Responsive Testing
- [ ] Verify button layouts on mobile devices (< 640px)
- [ ] Confirm button layouts on tablet devices (640px - 1024px)
- [ ] Test button layouts on desktop screens (> 1024px)
</details>
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
### Changes 🏗️
Prevent a graph being executed and do nothing by erroring out when no
starting node is available.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
We've disabled the request for security reasons, and the current request
library breaks on the 301 web response.
### Changes 🏗️
Add manually safe URL redirect on our web request layer.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
For emailing, we want the user to know when an agent stopped because
their balance was too low. This is the first step of that.
### Changes 🏗️
- Raise InsufficientBalanceError from credit system rather than value
error when user runs out of money
- Handle when an agent output isn't hooked up well
- Fix the contents of the email for low balance to be a bit more aligned
with the PRD
- expose the topup intent from the db manager
- objectify the execution stats so we can pass it around a bit more type
safe
- extract the notification stuff in manager into a function
<!-- 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] Set balance to $0.01
- [x] Run an agent that costs something more than $0.01
- [x] Check you get an email
- [x] Check your top up link works
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
- Resolves#9545
### Changes 🏗️
- fix(platform): Make "Delete" button on `/monitoring` soft-delete the
`LibraryAgent` instead of hard-deleting the corresponding `AgentGraph`
- feat(frontend): Add "Delete agent" button on `/library/agents/[id]`
Technical:
- fix(backend): Accept partial input on `update_library_agent` endpoint
- feat(backend): Add `GET /api/library/agents/{library_agent_id}`
endpoint
- refactor(frontend): Replace use of `GraphMeta` by `LibraryAgent` where
possible on `/library/agents/[id]`
Also, out of scope but important:
- fix(frontend): Hide buttons that require direct graph access depending
on `agent.can_access_graph`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Go to the Library and select an agent
- [x] -> `/library/agents/[id]` should load normally
- Save this URL for later (especially the ID)!
- Click "Delete agent" on `/library/agents/[id]`
- [x] -> should show a confirmation dialog
- Click "Delete" to confirm
- [x] -> should redirect back to `/library`
- [x] -> deleted agent should no longer be listed in the Library
- Click "Delete agent" on `/monitoring`
- [x] -> should show a confirmation dialog
- Click "Delete" to confirm
- [x] -> agent should disappear from agent list
- [x] -> views should reset / deselect the deleted agent where
applicable
**Proposal / Request For Comments**
The tool calling provided by the LLM provider requires an output
generated by the tool to be looped back as part of the conversation
history. The scope of this PR is trying to address the need to fulfill
the feature expectation.
### Changes 🏗️
* `Last Tool Output` is introduced to loop back the output of the tool
back to Smart Decision Block.
* Smart Decision Block execution will be pending unless the `Last Tool
Output` us provided where a pending tool call is present in the
conversation history.
* **Known hack**: The last tool output will prefill all the pending tool
calls from the conversation history.
* A few tweaks were required to allow a blocking loop to be executed
without awaiting on all the inbound links.
<img width="1395" alt="image"
src="https://github.com/user-attachments/assets/fdad4407-621b-45d0-a457-76b2d4c853b9"
/>
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
Instead of parsing an LlmMessage by ourselves, we use raw content from
the LLM as conversation history and accept any format it introduces.
Example output:
```
[
{
"role": "system",
"content": "Thinking carefully step by step decide which function to call. Always choose a function call from the list of function signatures. The test graph is basically an all knowing answer machine you can use it to get an answer"
},
{
"role": "user",
"content": "Hey how's the weather today"
},
{
"role": "assistant",
"audio": null,
"content": null,
"refusal": null,
"tool_calls": [
{
"id": "call_Z7CKKIkldylmfWJdE6ZnDxjr",
"type": "function",
"function": {
"name": "storevalueblock",
"arguments": "{\"input\":\"I don't have context for your location. Could you provide one?\"}"
}
}
],
"function_call": null
}
]
```
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
Append prompt into the conversations output & Remove unused output pin
on SmartDecisionBlock.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Now that the MVP for Smar Decision Block is available, we need to add
this info in the block output:
Messages (list) - The messages list sent to the LLM plus its generated
response as the latest assistant entry. This is a single list of
dictionaries in standard LLM API format).
### Changes 🏗️
* Add `conversations` output pin that populates the update
`conversation_history` input pin with the assistant response.
* Refactored `Smart Decision Block` to avoid downloading the whole graph
on each execution, remove code duplication, declutter data fetching.
* Minor UI issue on the smart decision block entry in the search bar.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Co-authored-by: Swifty <craigswift13@gmail.com>
- Resolves#9181
### Changes 🏗️
- Add agent run cost indication to `/monitoring` and
`/library/agents/[id]`
Backend:
- Add `GraphExecutionMeta.cost` property - value sourced from
`AgentGraphExecution.stats["cost"]`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
- Run an agent
- [ ] Check out the agent run on `/library/agents/[id]` -> should show
cost
- [ ] Check out the agent run on `/monitoring` -> should show cost
### Changes 🏗️
Remove Stripe on frontend.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
We want the agent run data to be accurate, which means we need to
collect it in the right place and with the correct data
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Updates email templates
- Updates how we collect the data for the agent run event
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Run agents and read the email we get
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
We allow tuples to be returned from exceptions, but pydantic restricts
their size to 1 b/c the typehint. This fixes that
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds `, ...` to the tuple type hint
### 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] Extracted from other pr where it was tested as part of an
exception
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
Exception can contain more than message, so we propagate the whole args
as long as it is serializable.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
HttpResponse error introduced by RPC is buggy since we are returning the
exception as is instead of the string version of it.
Also `RUNNING` status on the graph execution is missing.
### Changes 🏗️
* Refactored & fixed the exception return handling on RPC failure.
* Add `RUNNING` status update during the graph execution.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
- Follow-up to #9508
HTTP-based RPC has not been fully tested and should be disabled by
default.
### Changes 🏗️
- Disable HTTP-based RPC and use Pyro by default
<!-- 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**)
Originally we did not allow Blocks to be used as tools due to the
limitations of communicating the correct tool function signatures.
It has however, been decided to allow them to be used knowing that there
are limitations with them.
### Changes 🏗️
- Added ability to execute blocks as tools
### Checklist 📋
<img width="613" alt="Screenshot 2025-02-25 at 12 49 26"
src="https://github.com/user-attachments/assets/e614f56d-2bdc-46c9-8c2c-e56f80343bde"
/>
- create an agent with an SDM block and a block as a tool
- run agent and make sure the block can be called as a tool
#### 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:
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
- Resolves#8774
- Resolves#8775
- Includes back-end work for #9168
- Partially implements #8776
- Partially implements #8777
### Changes 🏗️
- Add `/library` page
- Change target of "Library" navigation link from `/monitoring` to
`/library`
- Move `/agents/[id]` page to `/library/agents/[id]`
- Set application background color to `bg-neutral-50`
- Redirect to new library agent's "runs" page (`/library/agents/[id]`)
after adding from marketplace
Further (technical) frontend changes:
- Add types and client methods for all library API endpoints
- Added `primary` variant to `agptui/Button` component
Backend changes:
- Add functionality to library backend
- Aggregate agent status
- Image generation for use in library view
- Add `LibraryAgent.imageUrl` column to DB schema
- Sorting & pagination
- Explicit relation between library agents and their graph's creator
- Refactor & update API endpoints for DX
- Other minor refactoring
- Add missing but required `MEDIA_GCS_BUCKET_NAME` to `.env.example`
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- `/library`
- [x] Create agent from scratch -> should show up on `/library`
- [x] Add agent to library from marketplace -> should show up on
`/library`
- [x] Click on agent in `/library` -> should go to
`/library/agents/[id]`
- [x] Test sorting & pagination functionality
- `/library/agents/[id]`
- [x] Fill out inputs and click "Run" -> should run like normally
- [x] Select completed agent run -> should show all inputs & outputs
- [x] Click "run again" on a completed agent run -> should run
successfully with same input
- [x] `/monitoring` should still work the same as before
---------
Co-authored-by: abhi1992002 <abhimanyu1992002@gmail.com>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
## Task
The SmartDecisionMakerBlock is a specialized block in a graph-based
system that leverages a language model (LLM) to make intelligent
decisions about which tools or functions to invoke based on a
user-provided prompt. It is designed to process input data, interact
with a language model, and dynamically determine the appropriate tools
to call from a set of available options, making it a powerful component
for AI-driven workflows.
## How It Works in Practice
- **Scenario:** Imagine a workflow where a user inputs, "Send an email
to John about the meeting." The SmartDecisionMakerBlock is connected to
tools like send_email, schedule_meeting, and search_contacts.
- **Execution:**
1. The block receives the prompt and system instructions (e.g., "Choose
a function to call").
2.It identifies the available tools from the graph and constructs their
signatures (e.g., send_email(recipient, subject, body)).
3. The LLM analyzes the prompt and decides to call send_email with
arguments like recipient: "John", subject: "Meeting", body: "Let’s
discuss...".
4. The block yields these tool-specific outputs, which can be picked up
by downstream nodes to execute the email-sending action.
## Changes 🏗️
- Add the Smart Decision Maker (SDM) block.
- Break circular imports in integration code.

## Work in Progress
⚠️ **Important note this is a temporary UX for the system - UX will be
addressed in a future PR** ⚠️
### Current Status
I’m currently focused on the smart decision logic. The main additions in
the ongoing PR include:
- Defining function signatures for OpenAI function-calling schemas based
on node links and the linked blocks.
- Adding tests for function signature generation.
- Force all tool calls to be made via an agent. (Need to uncomment)
- Restrict each tool call entry to a single node.
- simplify the output emission process, to emit each parameter one at a
time.
- Change test to use agents and hardcode output how I think it should
work to test it does actually work
- Hook up openai, in a simplified way, to test the function calling
(mock for testing)
- Once all the above is working, use credentials system and build of
llm.py
### What’s Next
- Review Process
### Reviewers Phase 1
This PR is now ready for review, during the first phase of reviews I'm
looking for comments on approach and logic.
Out of scope: code style and organization at this stage
### Reviewers Phase 2
Once we are all happy with the approach and logic. We can open the
review process to general code quality and nits, to be considered.
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
While V2 Library is coming, this has been my pet peeve
<img width="1428" alt="image"
src="https://github.com/user-attachments/assets/39c0b84e-4dfe-44e1-b455-cd0330ae7222"
/>
to
<img width="1428" alt="image"
src="https://github.com/user-attachments/assets/ab41973b-8ce8-4772-a4ab-e0dcd8b75464"
/>
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Due to legacy reasons, we've been using Pyro for our inter-process
communication channel. While it fulfilled our initial needs, there were
a few limitations that have been encountered:
* Each connection will reserve 1 thread, when the thread is running out
there will be no connection being accepted by the service.
* Lack of asynchronous execution mode, we are locked in the sync
execution which ended up wasting the I/O bound workload. Moving away
from this will unlock async execution support for agent blocks.
* Low throughput, while the database is still the main bottleneck, we've
started seeing instances where the service is being denied due to the
high traffic of the Pyro service.
### Changes 🏗️
Replace the usage of Pyro with the FastAPI Rest HTTP server and make the
code work.
Introduced the new config:
`use_http_based_rpc`: Whether to use HTTP-based RPC for communication
between services.
If it's enabled FastAPI will be used, if it's disabled existing Pyro
will be used.
### 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] Create from scratch and execute an agent with at least 3 blocks
with cost (AI blocks).
- [x] Import an agent from file upload, and confirm it executes
correctly
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [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**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
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="524cf6e515"><code>524cf6e</code></a>
Bump version to 0.9.6 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16074">#16074</a>)</li>
<li><a
href="857cf0deb0"><code>857cf0d</code></a>
Revert tailwindcss v4 update (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16075">#16075</a>)</li>
<li><a
href="0f1eb1e2fc"><code>0f1eb1e</code></a>
Improve migration document (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16072">#16072</a>)</li>
<li><a
href="b69eb9099a"><code>b69eb90</code></a>
Fix reference definition labels for backtick-quoted shortcut links (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16035">#16035</a>)</li>
<li><a
href="d2f661f795"><code>d2f661f</code></a>
RUF009 should behave similar to B008 and ignore attributes with
immutable typ...</li>
<li><a
href="07cf8852a3"><code>07cf885</code></a>
[<code>pylint</code>] Also report when the object isn't a literal
(<code>PLE1310</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15985">#15985</a>)</li>
<li><a
href="c08989692b"><code>c089896</code></a>
Update Rust crate rustc-hash to v2.1.1 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16060">#16060</a>)</li>
<li><a
href="869a9543e4"><code>869a954</code></a>
Root exclusions in the server to project root (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16043">#16043</a>)</li>
<li><a
href="cc0a5dd14a"><code>cc0a5dd</code></a>
Directly include <code>Settings</code> struct for the server (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16042">#16042</a>)</li>
<li><a
href="b54e390cb4"><code>b54e390</code></a>
Update Rust crate clap to v4.5.28 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16059">#16059</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.9.3...0.9.6">compare
view</a></li>
</ul>
</details>
<br />
[](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: Bently <tomnoon9@gmail.com>
### Changes 🏗️
Fix these buttons:

<img width="337" alt="image"
src="https://github.com/user-attachments/assets/702bf3e1-7168-4372-8dcf-71abdea0bc19"
/>
<img width="337" alt="image"
src="https://github.com/user-attachments/assets/362a5e44-3bd4-4849-ba92-8b21cfcfe767"
/>
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
Bumps [websockets](https://github.com/python-websockets/websockets) from
13.1 to 14.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/python-websockets/websockets/releases">websockets's
releases</a>.</em></p>
<blockquote>
<h2>14.2</h2>
<p>See <a
href="https://websockets.readthedocs.io/en/stable/project/changelog.html">https://websockets.readthedocs.io/en/stable/project/changelog.html</a>
for details.</p>
<h2>14.1</h2>
<p>See <a
href="https://websockets.readthedocs.io/en/stable/project/changelog.html">https://websockets.readthedocs.io/en/stable/project/changelog.html</a>
for details.</p>
<h2>14.0</h2>
<p>See <a
href="https://websockets.readthedocs.io/en/stable/project/changelog.html">https://websockets.readthedocs.io/en/stable/project/changelog.html</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="624a36cc9c"><code>624a36c</code></a>
Release version 14.2.</li>
<li><a
href="c8242bbb3a"><code>c8242bb</code></a>
Add changelog for <a
href="https://redirect.github.com/python-websockets/websockets/issues/1566">#1566</a>.</li>
<li><a
href="17e309a830"><code>17e309a</code></a>
Mention another symptom in the changelog.</li>
<li><a
href="7de24bd087"><code>7de24bd</code></a>
Improve previous commit.</li>
<li><a
href="7e617b2a57"><code>7e617b2</code></a>
Add regex support in <code>ServerProtocol(origins=...)</code>.</li>
<li><a
href="613f3f0ef8"><code>613f3f0</code></a>
Prevent close() from blocking when reading is paused.</li>
<li><a
href="e7a098e1a0"><code>e7a098e</code></a>
Prevent AssertionError in the recv_events thread.</li>
<li><a
href="031ec31b70"><code>031ec31</code></a>
Prevent close() from blocking when reading is paused.</li>
<li><a
href="6317c00cc5"><code>6317c00</code></a>
Clarify behavior of <code>recv(timeout=0)</code> behavior.</li>
<li><a
href="b1e88fcb77"><code>b1e88fc</code></a>
Bump pypa/cibuildwheel from 2.21.3 to 2.22.0</li>
<li>Additional commits viewable in <a
href="https://github.com/python-websockets/websockets/compare/13.1...14.2">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bentlybro <tomnoon9@gmail.com>
### Changes 🏗️
This PR adds interactive UI for the onboarding flow, without any
connection to the backend.
Visit `/onboarding` to see it!
- Add Onboarding pages to `app/onboarding/`
- Add Onboarding components to `components/onboarding`
Note:
- Backend isn't connected, so the agents won't run and state isn't
preserved
- Onboarding state is lost on refresh
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
When opened graph is running and Builder page is refreshed the bottom
says `Run` but should show `Stop` instead.
### Changes 🏗️
- Fix state on refresh, so that the bottom button is `Stop` if graph is
currently running
### 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] Refresh still retrieves past and ongoing execution updates
- [x] Bottom Builder button says `Stop` when page is refreshed and graph
is running
- [x] `Stop` button works and terminates execution
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
Add email notifications on refund events.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
When we fail to process something, we don't want to keep retrying
forever. We should store those and process them later
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Fix the type of the failed exchange from Direct to Topic to allow
filtering based on name (allows us later to do more advanced handling of
queue types)
- abstract processing the messages in a queue a bit to reduce repeated
code
- abstract how we check if a user wants a notification so that its a bit
easier to process
- Handle errors better
- Abstract model parsing
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
---------
Co-authored-by: Bently <tomnoon9@gmail.com>
There are many occurrences in the UI code that we are defining the font
through class but it refers to the invalid font-family names. This
causes the component to end up rendering the text using Times New Roman.
### Changes 🏗️
Remove manual font definition through string font-family name.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
- 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>
<!-- Clearly explain the need for these changes: -->
We want to support some more advanced search specific actions. These are
the base API layers and sample blocks for some of the services we need.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- support pydantic models as an output format
- add apollo
- add smartlead
- add zerobounce
### 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] Built agents to test
---------
Co-authored-by: Krzysztof Czerwinski <34861343+kcze@users.noreply.github.com>
Co-authored-by: Bently <tomnoon9@gmail.com>
Implemented a fully functional user settings page allowing changes to
account details and notification preferences. This change uses a server
first approach and adds much needed form validation to this page.
This PR has added loading skeletons for better UX during data fetching.
Refactored related components to support these changes and finally
implemented server actions to streamline data ingestion.
## Note to developers:
At the moment the notification switches set back to default upon save.
We will want to pass in this information after the api is implemented.
## Changes 🏗️
Rebuilt / Refactored `SettingsFormInput` to `SettingsForm`:
- Implemented Form Validation
- Implemented a form schema with Zod to validate user input
- Added toast messaging to properly inform the user if the form has been
successfully completed or if there is an error in thrown from the server
action.
Added `loading.tsx`
- Using `Skeletons` we can deliver a better loading UI for our users
causing less screen shifting.
Added `actions.ts`
- Added a server action for the settings page. This server action will
handle the updating of user's settings for this page. It handles the
interaction between the application and supabase. After this server
action is ran we revalidate the path for our settings page ensuring
proper data passed to our components.
There is an additional TODO for @ntindle for the api endpoint getting
created. This endpoint will cover the newly added notification switches
and it's toggles.
## Screenshots 📷
### Before Changes:
<img width="1083" alt="image"
src="https://github.com/user-attachments/assets/f5283fd5-705b-47cf-a7fa-4ca4d7f03444"
/>
### After Changes:
<img width="762" alt="image"
src="https://github.com/user-attachments/assets/20f96f01-b138-4eb7-8867-ce62a2d603d4"
/>
<img width="1083" alt="image"
src="https://github.com/user-attachments/assets/0ae363f5-068f-48e5-8b0f-c079a08f9242"
/>
<img width="1083" alt="image"
src="https://github.com/user-attachments/assets/8cb045ef-f322-4992-881e-fb92281c55cb"
/>
#### Form Validation
<img width="1083" alt="image"
src="https://github.com/user-attachments/assets/b78cfef6-94da-49f1-9c93-56cdb9ea4c96"
/>
<img width="1083" alt="image"
src="https://github.com/user-attachments/assets/ade5dce9-8c4b-40eb-aa0f-ff6d31bc3c3c"
/>
<img width="245" alt="image"
src="https://github.com/user-attachments/assets/88866bbf-4e33-43d9-b04a-b53ac848852d"
/>
### 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:
<details>
<summary>Test Plan</summary>
- [ ] Goto the route of `profile/settings`
- [ ] Add an invalid email and notice the new validation messaging
- [ ] Add invalid passwords that do not match and or is under 8
characters notice the new validation messaging
- [ ] Select the cancel button and notice that the form has been set
back to the default values
- [ ] With the form untouched notice the `Save changes` button is
disabled. Toggle a switch and notice the `Save changes` button is now
enabled.
- [ ] Enter in a valid pair of new passwords in the `New Password` and
`Confirm New Password` input fields and select `Save changes`
- [ ] Enter in the same passwords again and notice that we will now be
shown an Error. This error is bubbling up from supabase in our backend
and is stating `New password should be different from the old password`
</details>
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
- Follow-up to #9258
The front end is fetching `/library/agents` -> `LibraryAgent[]` but
using the result as `GraphMeta[]`. This breaks a bunch of things.
### Changes 🏗️
Frontend:
- Add `LibraryAgent` type for `api.listLibraryAgents()`
- Amend all broken usages of `LibraryAgent` objects
- Introduce branded typing for `LibraryAgent.id` and `GraphMeta.id` to
disallow mixing them. This prevents incorrect use in the future, and
reduces the chance of this frontend issue accumulating interest on
existing open PRs.
Backend:
- Add a migration to create `LibraryAgent` objects for all existing
`AgentGraphs`
### 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] Check that all existing agents are listed in the agents list on
`/monitoring` (check against DB or `GET /api/graphs`)
- [x] Check that all views of `/monitoring` work
- [x] Try to run an agent and check its status
<!-- Clearly explain the need for these changes: -->
I made a mistake in how we check if postmark exists
### Changes 🏗️
- adds a more explicit setting of postmark to none and extra checking to
prevent its use if it isn’t set
<!-- 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] I have no plan, it’s a simple logic bug so if it passes CI it’s
good
### Changes 🏗️
Added the dispute & refund handling on the system.
https://github.com/user-attachments/assets/2d9c7b48-2ee1-401d-be65-5e9787c8130e
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
Poetry.lock is using the old version that the CI is not using.
Set the Poetry version to ^2.1.1.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
We need a way to send emails for the email service to function. We will
depend on Postmark to do that.
This PR adds a simple email-sending service with the required settings
to make it work. It also builds on the previous agent run by sending the
emails that are in the immediate queue. Keep in mind that the email
template leaves a bit to be desired.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Add `email.py` with the minimum required to send an email (plus type
handling)
- Add settings configs for the token and the send address to the
`settings.py` and `.env.example`
- Add a db call to get user email by ID since the `metadata` field of
`prisma.models.User` isn't serializable over our message bus tool `Pyro`
that the `DatabaseManager` uses
- Add a horrible `AgentRun` email template using `jinja2`
- Add `postmarker` to `pyproject.toml`
### 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] Build and run an agent and make sure it emails me (must be signed
into same domain as receiving address for now)
#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [x] I have added a check that disables email if config is not set
correctly
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
We want to send emails on a schedule, in response to events, and be
expandable without being overbearing on the amount of effort to
implement. We also want this to use rabbitmq and be easy for other
services to send messages into.
This PR adds the first use of the service to simply show a log message
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds a new backend service for notifications
- Adds first notification into the service -> Agent Execution
- Adds spawning the notification service
Also
- Adds RabbitMQ to CI so we can test stuff
- Adds a minor fix for one of the migrations that I thought was causing
failures, but isn't but the change is still useful
### 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] Built and ran an agent and ensured the following log line appeared
which shows the event would have sent an email
```
2025-02-10 15:52:02,232 INFO Processing notification:
user_id='96b8d2f5-a036-437f-bd8e-ba8856028553'
type=<NotificationType.AGENT_RUN: 'AGENT_RUN'>
data=AgentRunData(agent_name='CalculatorBlock', credits_used=0.0,
execution_time=0.0, graph_id='30e5f332-a092-4795-892a-b063a8c7bdd9',
node_count=1) created_at=datetime.datetime(2025, 2, 10, 15, 52, 2,
162865)
```
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
None of the other ports are configurable via .env.example listing so
left as is
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
- Blocked by #9267
This re-introduces changes from the following PRs with fixes:
- #9218
- #9211
### Changes 🏗️
- See #9218
- See #9211
Fixes:
- Fix Prisma query statements in `v2.library.db`
- Fix creation of (library) agents
- Fix test cleanup of (library) agents
- Fix handling and passing of `node_input` parameters
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Create & run a new agent
- [x] Update & run an existing agent
### Changes 🏗️
Due to the legacy of SQLite usage, some of the JSON columns are actually
a string column string a stringified JSON column.
The scope of this PR is migrating those columns into an actual JSON
column.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
The email service has requirements to
- Email users when some activity has happened on their account on some
scheduled basis -> We need a way to get active users and the executions
that happened while they were active
- Allow users to configure what emails they get -> Need a user
preference
- Get User email by Id so that we can email them -> Pretty
self-explanatory
We need to add a few new backend queries + db models for the
notification to start handling these details. This is the first set of
those changes based on experience building the app service
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds a new DB Model, `UserNotificationPreferences,` with related
migration
- Adds a new DB Model `NotificationEvent` with related migration to
track what notifications we've sent and how many and such (how much we
add here is open to change depending on what limits on data we want)
- Adds a new DB Model `UserNotificationBatch` with related migration to
handle batching of like models
- Adds queries to get users and executions by `datetime` ranges as `ISO`
strings
- Adds new queries to the `DatabaseManager` and exposes them to the
other `AppService`s
- Exposes all new queries plus an existing one `get_user_by_id`
### 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] I extracted these changes from a working implementation of the
service, and tested they don't bring down the service by being uncalled
by running the standard agent tests we do on release
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
### Changes 🏗️
Introduced `matched_result` & `matched_count` as a batch matched result
list and its count for the block execution of
ExtractTextInformationBlock.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
Added `--progress` to the submodule update, so that cloning progress can
be tracked and does not appear to hang.
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] No code change, just docs.
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [x] No configuration change, just docs.
<details>
<summary> Provide feedback when cloning submodules </summary>
- now updating submodules shows the cloning repo's progress
</details>
Co-authored-by: Your Name <you@example.com>
- Resolves#9467
### Changes 🏗️
- Loosen Python version requirement to include v3.10
Also, fixed a few issues in pyproject.toml:
- Re-sort dependency list
- Update `autogpt-platform-backend` package version to match latest
release
### Background
Resolves: #9313
The application is incorrectly nesting the user's profile settings
within the route of `/marketplace` instead of the appropriate route of
`/profile`
This pr will modify the existing code to handle the relocation of the
(user) directory from the /marketplace to /profile.
### Changes 🏗️
1. Refactored directory of `(user)`:
- Moved the directory of (user) from `/marketplace/(user)` to
`profile/(user)`
2. Update Sidebar and Navbar components:
- Updating the existing code from the routing of market to profile by
modifying the existing routes.
### 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:
<details>
<summary>Test Plan</summary>
- [ ] Navigate to the route of `profile/` and observe the moved page.
- [ ] Navigate to the route of `profile/integrations` and observe the
moved page.
- [ ] Navigate to the route of `profile/api_keys` and observe the moved
page.
- [ ] Navigate to the route of `profile/profile` and observe the moved
page.
- [ ] Navigate to the route of `profile/settings` and observe the moved
page.
- [ ] Navigate to the route of `profile/credits` and observe the moved
page.
</details>
### Background
Resolves: #9313
The marketplace featured agent's section has a bug where if you hover
over a featured agent's card we are getting an incorrect background
color applied to the description.
### Changes 🏗️
1. Refactored `FeaturedStoreCard` to `FeaturedAgentCard`:
- Condensed props and leverage StoreAgent type from api
- Removed onClick handler from props as this is not json serializable
and is not inline with NextJS best practices
- Used built in Card Components from ShadCN to minimize custom styling.
- Optimize images with implementation of the Image component from NextJS
2. Enhanced `FeaturedCardSection` components:
- Removing extensive prop passing and leverage the agent itself with the
StoreAgent type.
- Implemented Link from NextJS to better handler routing and remove the
`useRouter` implementation
- Removed unnecessary handleCardClick method.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
Test Plan
<details>
<summary></summary>
- [ ] Goto the landing page of the application or /marketplace
- [ ] Scroll to the featured agents section
- [ ] Move mouse over each of the cards and observe the image
disappearing and text being shown
- [ ] Observe the background color of the text that replaced the image
matches that of the card
</details>
-Updated pyproject.toml for new dependency gravitasml
-Updated poetry.lock
<!-- Clearly explain the need for these changes: -->
- Issue no #9317 stated that, the addition of an XMLParserBlock is
required.
- It was suggested that the use of gravitasml as external package to be
used for parsing.
- Changes incorporated and tested as per requirements.
### Changes 🏗️
- Added xml_parser.py
- updated pyproject.toml
- updated poetry.lock for dependency changes
<!-- 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: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Scheduling always takes the newest version of an agent.
### Changes 🏗️
This PR allows to schedule any graph version by adding number input to
schedule popup. Number is automatically set to the newest version when
agent is chosen.
<img width="533" alt="Screenshot 2025-02-07 at 5 05 56 PM"
src="https://github.com/user-attachments/assets/357b8810-6f02-4066-b7a3-824d9bfd62af"
/>
- Update API, so it accepts graph version
- Update schedule pop up, so it lets user input version number
- Open and schedule correct agent
- Add `Version` column to the schedules table
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Can schedule version between 1 and max version
- [x] Reject incorrect version
- [x] Table shows proper version
- [x] Removing schedule works
### Changes 🏗️
For Emailing, we need to make a new App Service (NotificationManager)
that will require us to have rabbitmq as a dependency. This is the
backing data library to make that happen + registering it with the app
service base class and connecting when we spawn up a service
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds a rabbitmq library following the existing standard for redis
- Adds rabbitmq to the service
- Adds rabbitmq mgmt library (pika) so that we can connect to rabbitmq
### 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] I tested by adding the following to the executor `@expose
add_execution` and verifying via the UI that the messages show up in the
queue as expected + the agent executes and behaves as normal!

```diff
diff --git a/autogpt_platform/backend/backend/executor/manager.py b/autogpt_platform/backend/backend/executor/manager.py
index 1d965e012..4cd5b403c 100644
--- a/autogpt_platform/backend/backend/executor/manager.py
+++ b/autogpt_platform/backend/backend/executor/manager.py
@@ -18,7 +18,7 @@ if TYPE_CHECKING:
from autogpt_libs.utils.cache import thread_cached
from backend.blocks.agent import AgentExecutorBlock
-from backend.data import redis
+from backend.data import rabbitmq, redis
from backend.data.block import (
Block,
BlockData,
@@ -750,6 +750,19 @@ class ExecutionManager(AppService):
def __init__(self):
super().__init__()
self.use_redis = True
+ self.use_rabbitmq = rabbitmq.RabbitMQConfig(
+ exchanges=[
+ rabbitmq.Exchange(name="execution", type=rabbitmq.ExchangeType.FANOUT),
+ ],
+ queues=[
+ rabbitmq.Queue(
+ name="execution",
+ exchange=rabbitmq.Exchange(
+ name="execution", type=rabbitmq.ExchangeType.FANOUT
+ ),
+ ),
+ ],
+ )
self.use_supabase = True
self.pool_size = settings.config.num_graph_workers
self.queue = ExecutionQueue[GraphExecutionEntry]()
@@ -876,6 +889,12 @@ class ExecutionManager(AppService):
)
self.queue.add(graph_exec)
+ # test rabbitmq
+ self.rabbit.publish_message(
+ exchange=self.rabbit_config.exchanges[0],
+ routing_key=self.rabbit_config.exchanges[0].name,
+ message=graph_exec_id,
+ )
return graph_exec
@expose
```
<!-- Clearly explain the need for these changes: -->
We want to use RabbitMQ for email (and executor in the future) to ensure
message delivery -- something we currently lack with Redis. This PR is
adding RabbitMQ to the docker-compose and setup details with defaults so
that when we start bringing services up, they have the backing to do so.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds rabbitmq container (with exposed API and mgmt ports)
- Adds .env.example config for the backend
- Adds dockercompose config for the backend, and passes the variables
around as needed
### 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] Start the container using docker compose deps subset
#### 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**)
Currently it's only possible to open latest graph from monitor and see
the node execution results only when manually running. This PR adds
ability to open running and finished graphs in builder.
### Changes 🏗️
Builder now handles graph version and execution ID in addition to graph
ID when opening a graph. When an execution ID is provided, node
execution results are fetched and subscribed to in real time. This makes
it possible to open a graph that is already executing and see both
existing node execution data and real-time updates (if it's still
running).
- Use graph version and execution id on the builder page and in
`useAgentGraph`
- Use graph version on the `execute_graph` endpoint
- Use graph version on the websockets to distinguish between versions
- Move `formatEdgeID` to utils; it's used in `useAgentGraph.ts` and in
`Flow.tsx`
### 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] Opening finished execution restores node results
- [x] Opening running execution restores results and continues to run
properly
- [x] Results are separate for each graph across multiple tabs
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
- If a node fails to execute and error contains `Insufficient balance`
show toast with link to Billing page
- Rename `Credits` page to `Billing`
<img width="398" alt="Screenshot 2025-02-05 at 2 27 36 PM"
src="https://github.com/user-attachments/assets/6a5b4db0-a579-4607-a6bd-d5cf9229092f"
/>
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
### What's This PR About?
This PR makes a few simple improvements to how user profiles are handled
in the app:
- **Always Have a Profile:**
If a user doesn't already have a profile, the system now automatically
creates one with some default info (including a fun, randomly generated
username). This way, you never end up with a missing profile.
- **Better Profile Updates:**
Removes the creation of profiles on failed get requests
Bumps the production-dependencies group in /autogpt_platform/frontend
with 4 updates:
[@sentry/nextjs](https://github.com/getsentry/sentry-javascript),
[@stripe/stripe-js](https://github.com/stripe/stripe-js),
[launchdarkly-react-client-sdk](https://github.com/launchdarkly/react-client-sdk)
and [recharts](https://github.com/recharts/recharts).
Updates `@sentry/nextjs` from 8.51.0 to 8.54.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/releases"><code>@sentry/nextjs</code>'s
releases</a>.</em></p>
<blockquote>
<h2>8.54.0</h2>
<ul>
<li>feat(v8/deps): Upgrade all OpenTelemetry dependencies (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15098">#15098</a>)</li>
<li>fix(node/v8): Add compatibility layer for Prisma v5 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15210">#15210</a>)</li>
</ul>
<p>Work in this release was contributed by <a
href="https://github.com/nwalters512"><code>@nwalters512</code></a>.
Thank you for your contribution!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@sentry/browser</code></td>
<td>23.3 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> - with treeshaking flags</td>
<td>23.17 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing)</td>
<td>35.9 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay)</td>
<td>73.27 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay) - with
treeshaking flags</td>
<td>66.71 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay with
Canvas)</td>
<td>77.57 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Tracing, Replay, Feedback)</td>
<td>89.5 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. Feedback)</td>
<td>39.51 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. sendFeedback)</td>
<td>27.91 KB</td>
</tr>
<tr>
<td><code>@sentry/browser</code> (incl. FeedbackAsync)</td>
<td>32.71 KB</td>
</tr>
<tr>
<td><code>@sentry/react</code></td>
<td>25.98 KB</td>
</tr>
<tr>
<td><code>@sentry/react</code> (incl. Tracing)</td>
<td>38.71 KB</td>
</tr>
<tr>
<td><code>@sentry/vue</code></td>
<td>27.58 KB</td>
</tr>
<tr>
<td><code>@sentry/vue</code> (incl. Tracing)</td>
<td>37.75 KB</td>
</tr>
<tr>
<td><code>@sentry/svelte</code></td>
<td>23.46 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.49 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>37.6 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>72.9 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>78.23 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.92 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>111.52 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>225.78 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>238.88 KB</td>
</tr>
<tr>
<td><code>@sentry/nextjs</code> (client)</td>
<td>38.96 KB</td>
</tr>
<tr>
<td><code>@sentry/sveltekit</code> (client)</td>
<td>36.4 KB</td>
</tr>
<tr>
<td><code>@sentry/node</code></td>
<td>162.85 KB</td>
</tr>
<tr>
<td><code>@sentry/node</code> - without tracing</td>
<td>99.14 KB</td>
</tr>
<tr>
<td><code>@sentry/aws-serverless</code></td>
<td>131.23 KB</td>
</tr>
</tbody>
</table>
<h2>8.53.0</h2>
<ul>
<li>feat(v8/nuxt): Add <code>url</code> to
<code>SourcemapsUploadOptions</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15202">#15202</a>)</li>
<li>fix(v8/react): <code>fromLocation</code> can be undefined in
Tanstack Router Instrumentation (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15237">#15237</a>)</li>
</ul>
<p>Work in this release was contributed by <a
href="https://github.com/tannerlinsley"><code>@tannerlinsley</code></a>.
Thank you for your contribution!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@sentry/browser</code></td>
<td>23.3 KB</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/blob/8.54.0/CHANGELOG.md"><code>@sentry/nextjs</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>8.54.0</h2>
<ul>
<li>feat(v8/deps): Upgrade all OpenTelemetry dependencies (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15098">#15098</a>)</li>
<li>fix(node/v8): Add compatibility layer for Prisma v5 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15210">#15210</a>)</li>
</ul>
<p>Work in this release was contributed by <a
href="https://github.com/nwalters512"><code>@nwalters512</code></a>.
Thank you for your contribution!</p>
<h2>8.53.0</h2>
<ul>
<li>feat(v8/nuxt): Add <code>url</code> to
<code>SourcemapsUploadOptions</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15202">#15202</a>)</li>
<li>fix(v8/react): <code>fromLocation</code> can be undefined in
Tanstack Router Instrumentation (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15237">#15237</a>)</li>
</ul>
<p>Work in this release was contributed by <a
href="https://github.com/tannerlinsley"><code>@tannerlinsley</code></a>.
Thank you for your contribution!</p>
<h2>8.52.1</h2>
<ul>
<li>fix(v8/nextjs): Fix nextjs build warning (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15226">#15226</a>)</li>
<li>ref(v8/browser): Add protocol attributes to resource spans <a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15224">#15224</a></li>
<li>ref(v8/core): Don't set <code>this.name</code> to
<code>new.target.prototype.constructor.name</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15222">#15222</a>)</li>
</ul>
<p>Work in this release was contributed by <a
href="https://github.com/Zen-cronic"><code>@Zen-cronic</code></a>.
Thank you for your contribution!</p>
<h2>8.52.0</h2>
<h3>Important Changes</h3>
<ul>
<li><strong>feat(solidstart): Add <code>withSentry</code> wrapper for
SolidStart config (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/15135">#15135</a>)</strong></li>
</ul>
<p>To enable the SolidStart SDK, wrap your SolidStart Config with
<code>withSentry</code>. The <code>sentrySolidStartVite</code> plugin is
now automatically
added by <code>withSentry</code> and you can pass the Sentry build-time
options like this:</p>
<pre lang="js"><code>import { defineConfig } from
'@solidjs/start/config';
import { withSentry } from '@sentry/solidstart';
<p>export default defineConfig(<br />
withSentry(<br />
{<br />
/* Your SolidStart config options... */<br />
},<br />
{<br />
// Options for setting up source maps<br />
org: process.env.SENTRY_ORG,<br />
project: process.env.SENTRY_PROJECT,<br />
authToken: process.env.SENTRY_AUTH_TOKEN,<br />
},<br />
),<br />
);<br />
</code></pre></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e9a45fe6eb"><code>e9a45fe</code></a>
release: 8.54.0</li>
<li><a
href="ff4fb5ffed"><code>ff4fb5f</code></a>
meta(changelog): Update changelog for 8.54.0 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15261">#15261</a>)</li>
<li><a
href="b6a4a4a036"><code>b6a4a4a</code></a>
fix(node/v8): Add compatibility layer for Prisma v5 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15210">#15210</a>)</li>
<li><a
href="3673689441"><code>3673689</code></a>
feat(v8/deps): Upgrade all OpenTelemetry dependencies (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15098">#15098</a>)</li>
<li><a
href="13aadde725"><code>13aadde</code></a>
Merge branch 'release/8.53.0' into v8</li>
<li><a
href="3d8b132fda"><code>3d8b132</code></a>
release: 8.53.0</li>
<li><a
href="f08e6131da"><code>f08e613</code></a>
meta: Update Changelog for 8.53.0 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15243">#15243</a>)</li>
<li><a
href="ef4f210781"><code>ef4f210</code></a>
fix(v8/react): From location can be undefined in Tanstack Router
Instrumentat...</li>
<li><a
href="4df37594f6"><code>4df3759</code></a>
feat(v8/nuxt): Add <code>url</code> to
<code>SourcemapsUploadOptions</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/15202">#15202</a>)</li>
<li><a
href="36bdc47676"><code>36bdc47</code></a>
Merge branch 'release/8.52.1' into v8</li>
<li>Additional commits viewable in <a
href="https://github.com/getsentry/sentry-javascript/compare/8.51.0...8.54.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `@stripe/stripe-js` from 5.5.0 to 5.6.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/stripe/stripe-js/releases"><code>@stripe/stripe-js</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v5.6.0</h2>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<h3>New features</h3>
<h3>Fixes</h3>
<ul>
<li>Fix runServerUpdate type (<a
href="https://redirect.github.com/stripe/stripe-js/issues/712">#712</a>)</li>
<li>Push release commit and tag before creating release (<a
href="https://redirect.github.com/stripe/stripe-js/issues/707">#707</a>)</li>
</ul>
<h3>Changed</h3>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="085deba188"><code>085deba</code></a>
v5.6.0</li>
<li><a
href="d337871030"><code>d337871</code></a>
Fix runServerUpdate type (<a
href="https://redirect.github.com/stripe/stripe-js/issues/712">#712</a>)</li>
<li><a
href="31aef3556c"><code>31aef35</code></a>
Push release commit and tag before creating release (<a
href="https://redirect.github.com/stripe/stripe-js/issues/707">#707</a>)</li>
<li><a
href="f93c985d67"><code>f93c985</code></a>
v5.5.0</li>
<li>See full diff in <a
href="https://github.com/stripe/stripe-js/compare/v5.5.0...v5.6.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `launchdarkly-react-client-sdk` from 3.6.0 to 3.6.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/launchdarkly/react-client-sdk/releases">launchdarkly-react-client-sdk's
releases</a>.</em></p>
<blockquote>
<h2>launchdarkly-react-client-sdk: v3.6.1</h2>
<h2><a
href="https://github.com/launchdarkly/react-client-sdk/compare/launchdarkly-react-client-sdk-v3.6.0...launchdarkly-react-client-sdk-v3.6.1">3.6.1</a>
(2025-01-30)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>update package.json to support react 19 (<a
href="https://redirect.github.com/launchdarkly/react-client-sdk/issues/341">#341</a>)
(<a
href="2c0fc335eb">2c0fc33</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/launchdarkly/react-client-sdk/blob/main/CHANGELOG.md">launchdarkly-react-client-sdk's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/launchdarkly/react-client-sdk/compare/launchdarkly-react-client-sdk-v3.6.0...launchdarkly-react-client-sdk-v3.6.1">3.6.1</a>
(2025-01-30)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>update package.json to support react 19 (<a
href="https://redirect.github.com/launchdarkly/react-client-sdk/issues/341">#341</a>)
(<a
href="2c0fc335eb">2c0fc33</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="090c8db0a2"><code>090c8db</code></a>
chore(main): release launchdarkly-react-client-sdk 3.6.1 (<a
href="https://redirect.github.com/launchdarkly/react-client-sdk/issues/344">#344</a>)</li>
<li><a
href="2c0fc335eb"><code>2c0fc33</code></a>
fix: update package.json to support react 19 (<a
href="https://redirect.github.com/launchdarkly/react-client-sdk/issues/341">#341</a>)</li>
<li>See full diff in <a
href="https://github.com/launchdarkly/react-client-sdk/compare/launchdarkly-react-client-sdk-v3.6.0...launchdarkly-react-client-sdk-v3.6.1">compare
view</a></li>
</ul>
</details>
<br />
Updates `recharts` from 2.15.0 to 2.15.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/recharts/recharts/releases">recharts's
releases</a>.</em></p>
<blockquote>
<h2>v2.15.1</h2>
<h2>What's Changed</h2>
<p>Quick patch release, nothing crazy going on here.</p>
<p>In the meantime please help us test recharts 3.0 alpha <a
href="https://redirect.github.com/recharts/recharts/issues/5445">recharts/recharts#5445</a>
🚀</p>
<h4>Fix</h4>
<ul>
<li><code>Legend - Typescript</code>: add <code>dataKey</code> type to
legend formatter props by <a
href="https://github.com/lucasassisrosa"><code>@lucasassisrosa</code></a>
in <a
href="https://redirect.github.com/recharts/recharts/pull/5511">recharts/recharts#5511</a>.
Fixes <a
href="https://redirect.github.com/recharts/recharts/issues/5508">recharts/recharts#5508</a></li>
</ul>
<h4>Chore</h4>
<ul>
<li>Make sure <code>react-smooth</code> version is up to date in
package.json for R19 support by <a
href="https://github.com/acomanescu"><code>@acomanescu</code></a> in <a
href="https://redirect.github.com/recharts/recharts/pull/5422">recharts/recharts#5422</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/acomanescu"><code>@acomanescu</code></a> made
their first contribution in <a
href="https://redirect.github.com/recharts/recharts/pull/5422">recharts/recharts#5422</a></li>
<li><a
href="https://github.com/lucasassisrosa"><code>@lucasassisrosa</code></a>
made their first contribution in <a
href="https://redirect.github.com/recharts/recharts/pull/5511">recharts/recharts#5511</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/recharts/recharts/compare/v2.15.0...v2.15.1">https://github.com/recharts/recharts/compare/v2.15.0...v2.15.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3ecaab0e88"><code>3ecaab0</code></a>
2.15.1</li>
<li><a
href="786cda6f02"><code>786cda6</code></a>
feat: Add the dataKey type to legend formatter props (<a
href="https://redirect.github.com/recharts/recharts/issues/5511">#5511</a>)</li>
<li><a
href="a3cf0247f9"><code>a3cf024</code></a>
chore: update react-smooth version to support React 19 (<a
href="https://redirect.github.com/recharts/recharts/issues/5422">#5422</a>)</li>
<li>See full diff in <a
href="https://github.com/recharts/recharts/compare/v2.15.0...v2.15.1">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
This PR does two main things:
1) Fixes the nodes block to show the name of the pins, not the generic
word "output".
2) Addes an output block that shows the name and result of the agent
output blocks. This improves readability of the API.
### Changes 🏗️
1) Update nodes block to show the name of the input pin
2) Added an output block to show all the AgentOutputBlocks outputs
3) Added a status field on the agent graph
Example results:
```
{
"execution_id": "ea6b12ac-36f5-4f19-bc94-0df36f028c29",
"status": "COMPLETED",
"nodes": [
{
"node_id": "83cd909d-ff35-43c2-bdc9-a2f5142bd145",
"input": "what is the capital of australia?",
"output": {
"result": [
"what is the capital of australia?"
]
}
},
{
"node_id": "6bdf81fc-2d56-4e32-82d5-24f8c5645cb5",
"input": {
"model": "gpt-4o",
"credentials": {
"id": "604d8e22-3e24-4451-93eb-b17a276d3b8c",
"title": "openai",
"provider": "openai",
"type": "api_key"
},
"prompt": "what is the capital of australia?"
},
"output": {
"response": [
"The capital of Australia is Canberra."
],
"prompt": [
"[{\"role\": \"user\", \"content\": \"what is the capital of australia?\"}]"
]
}
},
{
"node_id": "55aa132a-c298-4cb6-9afe-39a56e492ab6",
"input": "The capital of Australia is Canberra.",
"output": {
"output": [
"The capital of Australia is Canberra."
],
"name": [
"result"
]
}
}
],
"output": [
{
"result": "The capital of Australia is Canberra."
}
]
}
```
### Checklist 📋
#### For code changes:
Testing:
Create an agent
Run it via the API
Fetch the results
Bumps [framer-motion](https://github.com/motiondivision/motion) from
11.16.0 to 12.0.11.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/motiondivision/motion/blob/main/CHANGELOG.md">framer-motion's
changelog</a>.</em></p>
<blockquote>
<h2>[12.0.11] 2025-02-03</h2>
<h3>Fixed</h3>
<ul>
<li>Moving <code>updateSVGDimensions</code> to its own file to help with
tree-shaking.</li>
</ul>
<h2>[12.0.10] 2025-02-03</h2>
<h3>Fixed</h3>
<ul>
<li>Providing <code>MotionValue</code> to <code>motion</code> component
from <code>motion/react-client</code> entrypoint.</li>
</ul>
<h2>[12.0.9] 2025-02-03</h2>
<h3>Fixed</h3>
<ul>
<li>Removing React from bundle.</li>
</ul>
<h2>[12.0.8] 2025-02-03</h2>
<h3>Fixed</h3>
<ul>
<li>Infer type of <code>children</code> prop for
<code>motion.create</code>.</li>
</ul>
<h2>[12.0.7] 2025-01-28</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed SVG transform animations via <code>animate</code>.</li>
</ul>
<h2>[12.0.6] 2025-01-27</h2>
<h3>Fixed</h3>
<ul>
<li>Discard layout projection snapshots if 0x0.</li>
</ul>
<h2>[12.0.5] 2025-01-24</h2>
<h3>Fixed</h3>
<ul>
<li>Fix scale correction for CSS variables.</li>
</ul>
<h2>[12.0.4] 2025-01-24</h2>
<h3>Fixed</h3>
<ul>
<li>Add scale correction for CSS variables.</li>
</ul>
<h2>[12.0.3] 2025-01-23</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ac626f5287"><code>ac626f5</code></a>
v12.0.11</li>
<li><a
href="f0172c942b"><code>f0172c9</code></a>
Latest</li>
<li><a
href="4855269501"><code>4855269</code></a>
Fixing type imports</li>
<li><a
href="553429c4c9"><code>553429c</code></a>
Latest</li>
<li><a
href="1b2e573055"><code>1b2e573</code></a>
v12.0.10</li>
<li><a
href="cfcfe30984"><code>cfcfe30</code></a>
Latest</li>
<li><a
href="97f7cb26fc"><code>97f7cb2</code></a>
Latest</li>
<li><a
href="cbeafb2aed"><code>cbeafb2</code></a>
v12.0.9</li>
<li><a
href="e70c1ba012"><code>e70c1ba</code></a>
Latest</li>
<li><a
href="90f083ed7b"><code>90f083e</code></a>
Latest (<a
href="https://redirect.github.com/motiondivision/motion/issues/3043">#3043</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/motiondivision/motion/compare/v11.16.0...v12.0.11">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
### Changes 🏗️
Instead of letting the user to execution the block then break it
post-execution.
We can charge the user first and execute it afterward.
The trade-offs:
* We can't charge a block that is charged based on the execution time.
* We will also charge failed block executions.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
This PR makes auto-top-up more reliable:
* Auto top-up will not be executed more than once within a single
execution.
* Auto top-up will always be executed even if it was previously failing.
* Auto top-up will never be called twice or triggered when the balance
is more than the threshold, even in the concurrent block executions
set-up.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
The use of credit points (equivalent to cents) can cause confussion, the
scope of this PR is removing the use of it in the UI and using USD value
instead.
### Changes 🏗️
Show US values on:
* credit page
* block cost
* balance button in the navbar
<img width="1440" alt="image"
src="https://github.com/user-attachments/assets/2b6a18b0-f89d-48bf-84bd-0ea6aa9182f7"
/>
<img width="1440" alt="image"
src="https://github.com/user-attachments/assets/7545b496-0e7c-49ea-afc1-a3d1fd3289fb"
/>
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
There are some models missing and their metadata is incorrect.
### Changes 🏗️
- Add models, update metadata and pricing.
- Add `max_output_tokens` to metadata, `None` indicates that max tokes
are unspecified in provider docs
- Added models:
- OpenAI `o3-mini` and `o1`
- Anthropic `claude-3-5-haiku-latest`
- Groq `llama-3.3-70b-versatile`, `deepseek-r1-distill-llama-70b`
- Ollama `llama3.3`
- Use the max output tokens from the provider that handles the least (so
it works for all) for OpenRouter models
- Use `max_output_tokens` and 4096 if `None` as a fallback
- Removed models (no longer working):
- `gemma-7b-it`
- `llama-3.1-70b-versatile`
- `llama-3.1-405b-reasoning`
- Rename llm enum name from `GEMINI_FLASH_1_5_8B` to `GEMINI_FLASH_1_5`
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
### Changes
Make the auto top-up wordings clearer:
<img width="547" alt="Screenshot 2025-02-05 at 1 38 16 AM"
src="https://github.com/user-attachments/assets/9a902442-1815-4a38-af39-d7d4b0e120f0"
/>
<img width="555" alt="Screenshot 2025-02-05 at 1 40 29 AM"
src="https://github.com/user-attachments/assets/4c9c9cdc-2d73-45f2-8a8d-f7ae7f97541b"
/>
es 🏗️
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
* Set the minimum auto top-up amount to 500.
* Add description on minimum and dollar value in the input box.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
Fix return URL of billing portal when platform_base_url !=
frontend_base_url.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
https://github.com/Significant-Gravitas/AutoGPT/pull/9340/files#diff-1b278ebf10a9da0fb5030010222b3a6df2b05a5463cad428cd6c38a1541b0f73R210-R219
introduced a bug where the spend_credit and update_execution is called
inside the loop instead of by the end of the execution.
### Changes 🏗️
Untabbed the `spend_credit` and `update_execution` code outside the
loop.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
I want to be able to screenshot things
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
Adds ScreenshotOne blocks with the ability to screenshot stuff
### 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] Built agent with it
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
### Changes 🏗️
Fix return URL post-top-up, when FRONT_END_BASE_URL is used.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
https://github.com/Significant-Gravitas/AutoGPT/pull/9296 caused these
errors:
<img width="440" alt="image"
src="https://github.com/user-attachments/assets/f100619b-1a4c-44fb-b961-e74210894a91"
/>
<img width="411" alt="image"
src="https://github.com/user-attachments/assets/0c1a8aff-b14f-4ea8-8ae9-b8928c8511cf"
/>
### Changes 🏗️
Removed customer email & return_url.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Type system complains about this entry as impossible but this code path
is possible and without it some blocks are broken (e.g. `Step Through
Items`)
### Changes 🏗️
- Restore `case "object"` in `NodeGenericInputField`
- Update `BlockIOKVSubSchema` type, so ts type checking doesn't complain
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Currently if user tries to sign in with an email that is already
associated with a user they are redirected to login without any
feedback.
### Changes 🏗️
- Show feedback: "User with this email already exists" on signup when
user already registered
- Beta user waitlist message is shown otherwise as previously
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
- Consolidated PR #8967 and #8968.
- Fixed issues #9370 and #9371
- Fixed padding for StoreCard.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Muhammad Safi <muhammadsafi@Muhammads-MacBook-Pro.local>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
<!-- Clearly explain the need for these changes: -->
- Changed the Font weight to semibold.
- Adjusted size to 48px.
- Fixed line-height to 54px.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Muhammad Safi <muhammadsafi@Muhammads-MacBook-Pro.local>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
update backend readme to be more clear on where to run docker
<!-- 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
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
- resolves - #9303
Implement OAuth authentication for Todoist with a basic authentication
mechanism for testing purposes. The basic authentication will be removed
in the next block pr.
> I’ve been using the official Python SDK for Todoist, called
todoist-api-python.
<img width="1129" alt="image"
src="https://github.com/user-attachments/assets/94aab319-7755-413b-91e1-4ad1ba383b83"
/>
### Changes 🏗️
Add a transaction history table on the user credits page.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com>
- Resolves - #9303 and #9304
- Depends on - https://github.com/Significant-Gravitas/AutoGPT/pull/9319
### Blocks list
Block Name | What It Does | Manually Tested
-- | -- | --
Todoist Create Label | Creates a new label in Todoist | ✅
Todoist List Labels | Retrieves all personal labels from Todoist | ✅
Todoist Get Label | Retrieves a specific label by ID | ✅
Todoist Create Task | Creates a new task in Todoist | ✅
Todoist Get Tasks | Retrieves active tasks from Todoist | ✅
Todoist Update Task | Updates an existing task | ✅
Todoist Close Task | Completes/closes a task | ✅
Todoist Reopen Task | Reopens a completed task | ✅
Todoist Delete Task | Permanently deletes a task | ✅
Todoist List Projects | Retrieves all projects from Todoist | ✅
Todoist Create Project | Creates a new project in Todoist | ✅
Todoist Get Project | Retrieves details for a specific project | ✅
Todoist Update Project | Updates an existing project | ✅
Todoist Delete Project | Deletes a project and its contents | ✅
Todoist List Collaborators | Retrieves collaborators on a project | ✅
Todoist List Sections | Retrieves sections from Todoist | ✅
Todoist Get Section | Retrieves details for a specific section | ✅
Todoist Delete Section | Deletes a section and its tasks | ✅
Todoist Create Comment | Creates a new comment on a task or project | ✅
Todoist Get Comments | Retrieves all comments for a task or project | ✅
Todoist Get Comment | Retrieves a specific comment by ID | ✅
Todoist Update Comment | Updates an existing comment | ✅
Todoist Delete Comment | Deletes a comment | ✅
> I’ve only created action blocks in Todoist because webhooks can only
be manually created [we can't do it programatically right now]. I’ve
already emailed Todoist for help, but they haven’t replied yet. Once I
receive a reply, I’ll create a pull request for webhook triggers in
Todoist.
### Changes 🏗️
- Add `div` to recenter page elements
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
The current minimum zoom level restricts zooming out fully. I reduced
the minZoom level to allow more flexible zooming out for users.
### Changes 🏗️
Reduced minZoom from 0.2 to 0.1 in the ReactFlow component to allow
further zooming out.
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ x ] I have clearly listed my changes in the PR description
- [ x ] I have made a test plan
- [ x ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ x ] Tested with different elements and zoom ranges to confirm its a
smooth transition
- [ x ] Checked that canvas and all nodes remain unchanged and
interactive
Co-authored-by: Bently <tomnoon9@gmail.com>
<!-- Clearly explain the need for these changes: -->
User in discord requested the replace text block
### Changes 🏗️
- Adds replace text block
<!-- 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] Passed unit tests
Co-authored-by: Bently <tomnoon9@gmail.com>
1. Stripe is complaining about lack of return url in checkout.
2. Only frontend prevents users from topping-up amounts less than 5$.
### Changes 🏗️
- Set `return_url` and `customer_email` when creating checkout session.
- Change `amount` to `credit_amount` and use credits instead of USD for
clarity when requesting top up.
- Accept only top-ups of 500+ credits (5$) and multiples of 100 credits
*on the backend*.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
### Changes 🏗️
The current state can cause this error:
```
if (snapshot_time.year, snapshot_time.month) == (cur_time.year, cur_time.month):
^^^^^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'year'
```
Which is caused by the timestamp return value possibly a string.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
Make set_auto_top_up accepts AutoTopUpConfig & eliminate hardcoding of
json value.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<!-- Clearly explain the need for these changes: -->
We want to be able to use typechecking and see errors before they occur.
This is a PR to help enable us to do so by fixing the existing errors
and hopefully not causing new ones.
### Changes 🏗️
- adds check to ci
- disables some code points
- fixes lots of type errors
- fixes a bunch of the stories
<!-- 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] added types
- [x] Ran some of the stories
- [x] Asked all the relevant parties for manual checks
---------
Co-authored-by: SwiftyOS <craigswift13@gmail.com>
Currently, the test is failing on Jan 29 because 29th Feb does not
exist.
### Changes 🏗️
Force use the first day of the month for getting the current time.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
### Summary
This pull request fixes the issue of broken connections when copying and
pasting an agent. The connections are now preserved during the
copy-paste operation.
### Changes
- Modified the `useCopyPaste.ts` file to ensure that connections are
preserved during the copy-paste operation.
### Steps to Reproduce
1. Copy a small section from an Agent that features links to outside the
area you're selecting (use shift + click & drag).
2. Go to a fresh builder canvas in a new tab.
3. Paste the copied section.
4. Try to save the Agent; previously, it would fail due to the outgoing
link being broken.
### Testing
- Verified that connections remain intact when copying and pasting
agents.
- Tested by saving the agent to ensure no broken links.
### Related Issue
Fixes
[#9137](https://github.com/Significant-Gravitas/AutoGPT/issues/9137)
### Notes
Please review the changes and let me know if any further adjustments are
needed.
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Bently <tomnoon9@gmail.com>
We want to have some more intelligent and less user managed memory
methods, so we add mem0
### Changes 🏗️
- Adds user_id to kwargs for blocks
- Add mem0 blocks
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
- [x] document adding user_id to kwargs for blocks
- [x] Add run and agent Id as optional checkboxes that will be passed
down to mem0
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] Build and submit an agent to @Torantulino and the marketplace for
a personal AI tutor based on recommendations from the mem0 team
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Especially in case of heavy sandbox customization we don't want to spawn
a new VM every time we need to execute code, especially in circumstances
when time of inactivity is negligible.
### Changes 🏗️
Added two now blocks inside
`autogpt_platform/backend/backend/blocks/code_executor.py` which split
the logic of the CodeExecutionBlock in two parts: InstantiationBlock and
StepExecutionBlock.
The overall setup shall be the done in the InstantiationBlock which then
passes as output the `sandbox_id` which identifies the sandbox instance.
At a later stage any line of code can be executed through
StepExecutionBlock inside the same instance using the e2b library
function `sandbox = Sandbox.connect(sandbox_id=sandbox_id,
api_key=api_key)`. Variables and memory form earlier executions or
instantiation are persisted.
Beware, this approach does not make use of the beta apis to pause and
resume an instance. By using the approach above the VM will likely be
killed after the timeout inactivity set at instantiation time.
### New Features:
* **InstantiationBlock Class**:
- Added a new class to instantiate an isolated sandbox environment with
internet access for code execution. This class includes input and output
schemas, methods for running and executing code, and handles sandbox
setup commands and code execution.
* **StepExecutionBlock Class**:
- Introduced a new class to execute code in a previously instantiated
sandbox environment. This class also includes input and output schemas,
methods for running and executing step code, and handles connecting to
an existing sandbox for code execution.
### Minor Changes:
* **ProgrammingLanguage Enum**:
- Added a blank line for better readability within the
`ProgrammingLanguage` enum definition.
---------
Co-authored-by: Toran Bruce Richards <toran.richards@gmail.com>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
<!-- Clearly explain the need for these changes: -->
We really want to be able to automate with our agents some behaviors
that involve blocking PRs or unblocking them based on automations.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds Status Blocks for github
- Modifies the pull requests block to not have include pr changes as
advanced because that's a wild place to hide it
- Adds some disabled checks blocks that require github app
- Added IfMatches Block to make using stuff easier
### 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] Built agent using
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
<img width="1427" alt="image"
src="https://github.com/user-attachments/assets/de48ceb7-2a90-44e6-a687-d6759a1aa434"
/>
### Changes 🏗️
Block execution that cost credit can fail, the scope of this fix is
making this error as part of the node execution instead of a system
error.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
This re-introduces PR #9179 with some fixes.
This PR enables the execution of store agents even if they are not owned
by the user. Key changes include handling store-listed agents in the
`get_graph` logic, improving execution flow, and ensuring
version-specific handling. These updates support more flexible agent
execution.
### Changes 🏗️
(copied from #9179)
- **Graph Retrieval:** Updated `get_graph` to check store listings for
agents not owned by the user.
- **Version Handling:** Added `graph_version` to execution methods for
consistent version-specific execution.
- **Execution Flow:** Refactored `scheduler.py`, `rest_api.py`, and
other modules for clearer logic and better maintainability.
- **Testing:** Updated `test_manager.py` and other test cases to
validate execution of store-listed agents added test for accessing graph
Out-of-scope changes:
- Add logic to pretty-print Pydantic validation error responses to
backend API client in frontend
---------
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>
<img width="1157" alt="image"
src="https://github.com/user-attachments/assets/5b70aa1e-876f-4163-b69e-c22bd21ea8d3"
/>
### Changes 🏗️
Added auto-top-up credits capability:
* Added autoTopUpConfig column on user
* Added autoTopUp form UI
* Added payment charge logic for top_up_credits
* Added auto-top-up logic on spend_credits
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
In the AI Conversation block it uses
``AIStructuredResponseGeneratorBlock.input`` for the input but it is
missing ollama_host, this means that if i try to use ollama with this
block, ollama_host is not passed, this PR fixes that by simply adding
``ollama_host=input_data.ollama_host`` to the ``class
AIConversationBlock(AIBlockBase):``
```diff
AIStructuredResponseGeneratorBlock.Input(
prompt="",
credentials=input_data.credentials,
model=input_data.model,
conversation_history=input_data.messages,
max_tokens=input_data.max_tokens,
expected_format={},
++ ollama_host=input_data.ollama_host,
),
```
<!-- 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:
- [x] Run the AI Conversation block with a normal provider like GPT-4 to
see if it works like normal
- [x] Run the AI Conversation block with Ollama to make sure the changes
made work
<!-- Clearly explain the need for these changes: -->
Update and adds a basic credential field for use in integrations like
reddit
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Reddit
- Drops the Username and Password for reddit from the .env
- Updates Reddit block with modern provider and credential system
- moves clientid and secret to reading from `Settings().secrets` rather
than input on the block
- moves user agent to `Settings().config`
- SMTP
- update the block to support user password and modern credentials
- Add `UserPasswordCredentials`
- Default API key expiry to None explicitly to help type cohesion
- add `UserPasswordCredentials` with a weird form of `bearer` which we
ideally remove because `basic` is a more appropriate name. This is
dependent on `Webhook _base` allowing a subset of `Credentials`
- Update `Credentials` and `CredentialsType`
- Fix various `OAuth2Credentials | APIKeyCredentials` -> `Credentials`
mismatches between base and derived classes
- Replace `router/@post(create_api_key_credentials)` with
`create_credentials` which now takes a credential and is discriminated
by `type` provided by the credential
- UI/Frontend
- Updated various pages to have saved credential types, icons, and text
for User Pass Credentials
- Update credential input to have an input/modals/selects for user/pass
combos
- Update the types to support having user/pass credentials too (we
should make this more centralized)
- Update Credential Providres to support user_password
- Update `client.ts` to support the new streamlined credential creation
method and endpoint
- DX
- Sort the provider names **again**
TODO:
- [x] Reactivate Conditionally Disabling Reddit
~~- [ ] Look into moving Webhooks base to allow subset of `Credentials`
rather than requiring all webhooks to support the input of all valid
`Credentials` types~~ Out of scope
- [x] Figure out the `singleCredential` calculator in
`credentials-input.tsx` so that it also respects User Pass credentials
and isn't a logic mess
### 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 with agents
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
<!-- Clearly explain the need for these changes: -->
Tests keep failing
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- changes a 20 to 30
<!-- Clearly explain the need for these changes: -->
We are making issues stale that aren’t. With the additions of more
careful project management this has become a hindrance rather than help.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- increases days until stale from 50 to 100
Currently, there is no support for passing files in the platform, each
generated file should be hosted somewhere.
This PR adds support of passing files temporarily during the execution
to open up more block that does multimedia operations.
<img width="583" alt="image"
src="https://github.com/user-attachments/assets/c285de5a-c2a9-41a0-9be1-305a316879d6"
/>
<img width="1291" alt="image"
src="https://github.com/user-attachments/assets/d7bcaf38-80fa-4b51-91da-b4eed80a02c1"
/>
### Changes 🏗️
* Add media support for passing files (local files, base64, URL) and
`FileStoreBlock` (file version of `StoreValueBlock`)
* Add initial multimedia blocks: `LoopVideoBlock` &
`AddAudioToVideoBlock`.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
Linear blocks show up even if oauth isn't configured
### Changes 🏗️
disables the linear blocks if oauth isn't configured
<!-- 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] checked block list with and without oauth configured
Twitter API v2 Client update:
```
.. versionadded:: 4.0
.. versionchanged:: 4.15
Removed ``block`` and ``unblock`` methods, as the endpoints they use
have been removed
```
### Changes 🏗️
Remove TwitterUnblockUserBlock & TwitterBlockUserBlock.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
**Clearly explain the need for these changes:**
The changes were made to enhance the usability and accessibility of the
login and signup forms. By adding appropriate `autocomplete` attributes,
the forms are now more compatible with browsers and password managers,
improving the user experience by supporting autofill, password
generation, and accessibility.
Additionally, the `yarn.lock` file was updated to reflect dependency
changes made during this work, ensuring consistent dependency resolution
across all environments.
This PR also resolves **issue #9312**, which addresses missing
`autocomplete` attributes on login and signup forms.
---
### **Changes 🏗️**
- Added `autocomplete="username"` to the email input field in both login
and signup forms.
- Added `autocomplete="current-password"` to the password input field in
the login form.
- Added `autocomplete="new-password"` to the password and confirm
password input fields in the signup form.
- Updated `yarn.lock` to reflect dependency updates.
- Improved browser compatibility and user accessibility.
- Enhanced support for autofill and password generation for better form
usability.
---
### **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] Verified the `autocomplete` attributes are present in the rendered
HTML using browser DevTools.
- [x] Tested the login form for autofill compatibility with email and
password.
- [x] Tested the signup form with password generation using a password
manager.
- [x] Ensured no functionality or styling was affected by the changes.
<details>
<summary>Example test plan</summary>
- [x] Open the login form and verify that email
(`autocomplete="username"`) and password
(`autocomplete="current-password"`) inputs work with browser autofill.
- [x] Open the signup form and confirm that the password manager
suggests generating a strong password for `autocomplete="new-password"`.
- [x] Verify that form submissions work as expected with no errors.
</details>
---
#### 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**).
<details>
<summary>Examples of configuration changes</summary>
No configuration changes were required for this PR.
</details>
---
### **Issue Resolved:**
This pull request resolves **issue #9312** by adding the necessary
`autocomplete` attributes to the login and signup forms to improve
accessibility and compatibility with password managers.
---------
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
### Changes 🏗️
To ease the debugging, we can expose the prompt sent to the LLM
provider.
<img width="418" alt="image"
src="https://github.com/user-attachments/assets/0c8d7502-4f87-4002-a498-331f341859bd"
/>
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
I have done changes in AgentTable and AgentTableRow components present
in autogpt_platform/frontend directory. The selectedAgents state is
passed on to AgentTableRow component, so that when Select All is
checked, individual check boxes also get checked.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
#### For configuration changes:
- [ ] `.env.example` was already compatible with my changes
- [ ] `docker-compose.yml` was already compatible with my changes
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
To maintain the transaction running-balance integrity, the monthly
top-up balance has to adjust the top-up amount to maintain the balance
of the user to be at least X amount, instead of top-up the user balance
with a fixed X amount.
### Changes 🏗️
* Add an additional query to sum the remaining un-snapshotted balance
(if any).
* Monthly top-up transaction set the amount target_amount -
current_balance instead of fixed target_amount.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
There should be no possibly failing code between graph exec creation and
the actual queueing.
It could risk the graph execution being stuck on the QUEUED status.
### Changes 🏗️
Moved the node exec creation and status update to be inside the graph
execution logic.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
- Resolves#9310
### Changes 🏗️
- Make base layout full width and fix its sizing behavior
- Fix navbar overflowing on the right
- Set padding on `/monitoring`
- Make `/login` and `/signup` layouts self-center
### Checklist 📋
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- Check layouts of all pages
- `/signup`
- `/login`
- `/build`
- `/monitoring`
- `/store`
- `/store/profile`
- `/store/dashboard`
- `/store/settings`
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
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.8.6 to 0.9.2
<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.2</h2>
<h2>Release Notes</h2>
<h3>Preview features</h3>
<ul>
<li>[<code>airflow</code>] Fix typo "security_managr" to
"security_manager" (<code>AIR303</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15463">#15463</a>)</li>
<li>[<code>airflow</code>] extend and fix AIR302 rules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15525">#15525</a>)</li>
<li>[<code>fastapi</code>] Handle parameters with <code>Depends</code>
correctly (<code>FAST003</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15364">#15364</a>)</li>
<li>[<code>flake8-pytest-style</code>] Implement pytest.warns
diagnostics (<code>PT029</code>, <code>PT030</code>, <code>PT031</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/15444">#15444</a>)</li>
<li>[<code>flake8-pytest-style</code>] Test function parameters with
default arguments (<code>PT028</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15449">#15449</a>)</li>
<li>[<code>flake8-type-checking</code>] Avoid false positives for
<code>|</code> in <code>TC008</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15201">#15201</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-todos</code>] Allow VSCode GitHub PR extension style
links in <code>missing-todo-link</code> (<code>TD003</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15519">#15519</a>)</li>
<li>[<code>pyflakes</code>] Show syntax error message for
<code>F722</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15523">#15523</a>)</li>
</ul>
<h3>Formatter</h3>
<ul>
<li>Fix curly bracket spacing around f-string expressions containing
curly braces (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15471">#15471</a>)</li>
<li>Fix joining of f-strings with different quotes when using quote
style <code>Preserve</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15524">#15524</a>)</li>
</ul>
<h3>Server</h3>
<ul>
<li>Avoid indexing the same workspace multiple times (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15495">#15495</a>)</li>
<li>Display context for <code>ruff.configuration</code> errors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15452">#15452</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Remove <code>flatten</code> to improve deserialization error
messages (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15414">#15414</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Parse triple-quoted string annotations as if parenthesized (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15387">#15387</a>)</li>
<li>[<code>fastapi</code>] Update <code>Annotated</code> fixes
(<code>FAST002</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15462">#15462</a>)</li>
<li>[<code>flake8-bandit</code>] Check for <code>builtins</code> instead
of <code>builtin</code> (<code>S102</code>, <code>PTH123</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15443">#15443</a>)</li>
<li>[<code>flake8-pathlib</code>] Fix <code>--select</code> for
<code>os-path-dirname</code> (<code>PTH120</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15446">#15446</a>)</li>
<li>[<code>ruff</code>] Fix false positive on global keyword
(<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15235">#15235</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/Daverball"><code>@Daverball</code></a></li>
<li><a
href="https://github.com/Garrett-R"><code>@Garrett-R</code></a></li>
<li><a
href="https://github.com/Glyphack"><code>@Glyphack</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/cake-monotone"><code>@cake-monotone</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.2</h2>
<h3>Preview features</h3>
<ul>
<li>[<code>airflow</code>] Fix typo "security_managr" to
"security_manager" (<code>AIR303</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15463">#15463</a>)</li>
<li>[<code>airflow</code>] extend and fix AIR302 rules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15525">#15525</a>)</li>
<li>[<code>fastapi</code>] Handle parameters with <code>Depends</code>
correctly (<code>FAST003</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15364">#15364</a>)</li>
<li>[<code>flake8-pytest-style</code>] Implement pytest.warns
diagnostics (<code>PT029</code>, <code>PT030</code>, <code>PT031</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/15444">#15444</a>)</li>
<li>[<code>flake8-pytest-style</code>] Test function parameters with
default arguments (<code>PT028</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15449">#15449</a>)</li>
<li>[<code>flake8-type-checking</code>] Avoid false positives for
<code>|</code> in <code>TC008</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15201">#15201</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-todos</code>] Allow VSCode GitHub PR extension style
links in <code>missing-todo-link</code> (<code>TD003</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15519">#15519</a>)</li>
<li>[<code>pyflakes</code>] Show syntax error message for
<code>F722</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15523">#15523</a>)</li>
</ul>
<h3>Formatter</h3>
<ul>
<li>Fix curly bracket spacing around f-string expressions containing
curly braces (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15471">#15471</a>)</li>
<li>Fix joining of f-strings with different quotes when using quote
style <code>Preserve</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15524">#15524</a>)</li>
</ul>
<h3>Server</h3>
<ul>
<li>Avoid indexing the same workspace multiple times (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15495">#15495</a>)</li>
<li>Display context for <code>ruff.configuration</code> errors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15452">#15452</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Remove <code>flatten</code> to improve deserialization error
messages (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15414">#15414</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Parse triple-quoted string annotations as if parenthesized (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15387">#15387</a>)</li>
<li>[<code>fastapi</code>] Update <code>Annotated</code> fixes
(<code>FAST002</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15462">#15462</a>)</li>
<li>[<code>flake8-bandit</code>] Check for <code>builtins</code> instead
of <code>builtin</code> (<code>S102</code>, <code>PTH123</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15443">#15443</a>)</li>
<li>[<code>flake8-pathlib</code>] Fix <code>--select</code> for
<code>os-path-dirname</code> (<code>PTH120</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15446">#15446</a>)</li>
<li>[<code>ruff</code>] Fix false positive on global keyword
(<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15235">#15235</a>)</li>
</ul>
<h2>0.9.1</h2>
<h3>Preview features</h3>
<ul>
<li>[<code>pycodestyle</code>] Run
<code>too-many-newlines-at-end-of-file</code> on each cell in notebooks
(<code>W391</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15308">#15308</a>)</li>
<li>[<code>ruff</code>] Omit diagnostic for shadowed private function
parameters in <code>used-dummy-variable</code> (<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15376">#15376</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-bugbear</code>] Improve
<code>assert-raises-exception</code> message (<code>B017</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15389">#15389</a>)</li>
</ul>
<h3>Formatter</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0a39348381"><code>0a39348</code></a>
Include build binaries</li>
<li><a
href="027f8009e5"><code>027f800</code></a>
Comment out non-npm-publish jobs</li>
<li><a
href="425870df76"><code>425870d</code></a>
Upload npm publish logs when failed</li>
<li><a
href="c20255abe4"><code>c20255a</code></a>
Bump version to 0.9.2 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15529">#15529</a>)</li>
<li><a
href="420365811f"><code>4203658</code></a>
Fix joining of f-strings with different quotes when using quote style
`Preser...</li>
<li><a
href="fc9dd63d64"><code>fc9dd63</code></a>
[airflow] extend and fix AIR302 rules (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15525">#15525</a>)</li>
<li><a
href="79e52c7fdf"><code>79e52c7</code></a>
[<code>pyflakes</code>] Show syntax error message for <code>F722</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/15523">#15523</a>)</li>
<li><a
href="cf4ab7cba1"><code>cf4ab7c</code></a>
Parse triple quoted string annotations as if parenthesized (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15387">#15387</a>)</li>
<li><a
href="d2656e88a3"><code>d2656e8</code></a>
[<code>flake8-todos</code>] Allow VSCode GitHub PR extension style links
in `missing-tod...</li>
<li><a
href="c53ee608a1"><code>c53ee60</code></a>
Typeshed-sync workflow: add appropriate labels, link directly to failing
run ...</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.8.6...0.9.2">compare
view</a></li>
</ul>
</details>
<br />
[](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>
We have branded it as "Marketplace", so the URL shouldn't be "store".
### Changes 🏗️
- Change frontend URLs from `/store*` to `/marketplace*`
- No API route changes to minimize bugs (follow up:
https://github.com/Significant-Gravitas/AutoGPT/issues/9118)
<!-- Clearly explain the need for these changes: -->
I want to be able to do stuff with linear automatically
### Changes 🏗️
- Adds all the backing details to add linear auth and API access with
oauth (and prep for API key)
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
- Resolves#9253
### Changes 🏗️
- Update state when an error occurs on save, to re-enable the save
button
### 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:
- Try to save an agent with missing required fields -> should give an
error
- Fill out the required fields and try saving again -> should work
We want to allow external api calls against our platform
We also want to keep it sep from internal platform calls for dev ex,
security and scale seperation of concerns
### Changes 🏗️
This PR adds the required external routes
It mounts the new routes on the same app
Infra PR will seprate routing and domains
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
<img width="1445" alt="image"
src="https://github.com/user-attachments/assets/5aeb7ee2-4d06-4a64-889b-599ad68c6dae"
/>
### Changes 🏗️
Added an entry point to open the Stripe billing portal.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com>
We need to be able to determine the cost of graph/node execution.
### Changes 🏗️
* Add these columns into CreditTransaction `metadata` column:
- graph_id
- node_id
- graph_exec_id
- node_exec_id
- block_id
* Drop the `blockId` column and backfill the dropped value into
metadata->>block_id.
* Frequent queries on these values will require an index created on
demand through a migration, depending on the use case.
---------
Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
This PR adds Stripe integration and payment processing for topping-up
user accounts with credits.
### Changes 🏗️
Includes:
- https://github.com/Significant-Gravitas/AutoGPT/pull/9176
#### Top-up flow
1. To top-up a user visits their settings and clicks `Credits` button
(it's unavailable if `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` isn't present)
2. User inputs top-up amount (min 5$ in 1$ increments) and click the
button to confirm.
3. Backend receives top-up request, creates database entry and requests
stripe to provide url for this specific checkout.
4. User gets redirected to externally hosted Stripe checkout page, after
payment (or cancelling) they get redirected back to Credits page.
5. In the meantime Stripe processes payment and sends webhook
confirmation to the backend, backend updates database to activate bought
credits.
6. Credits page shows success (or failure) information (by using url
param `topup=success|cancel`). Credit counter won't update without
refreshing the page unless payment was confirmed before user was back on
Credits page which is the case when testing checkout locally.
<img width="804" alt="Screenshot 2025-01-01 at 2 55 35 PM"
src="https://github.com/user-attachments/assets/22fb518d-b30b-4154-bb4b-edea1d57b6c2"
/>
#### Backend
- Add `stripe` package
- Add environment variables:
- `STRIPE_API_KEY`
- `STRIPE_WEBHOOK_SECRET`
- Add routes:
- `POST /credits`: top-up request, returns Stripe checkout url.
- `POST /credits/stripe_webhook`: Stripe webhook endpoint to notify of
successful payment.
- `PATCH /credits`: prompts beckend to check payment status. It's an
additional failsafe in case webhook fails.
- Update `credit.py` and related files to handle top-up request and
payment confirmation
#### Frontend
- Add `stripe-js` package
- Add `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` environment variable
- Modify user settings sidebar to show `Credits` if
`NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` is available
- Add `store/credits` page where user can top-up their account, it shows
confirmation (or failure) after completing checkout.
- Add `useCredits` hook that returns user credits and allows to request
top-up.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Toggling the advanced option on Exa Contents Block isn't working. It
throws a frontend error.
### Changes 🏗️
Remove Optional from ContentRetrievalSettings in exa/contents.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:
<!-- Put your test plan here: -->
- Add an ExaContentsBlock
- Hit advanced
#### For configuration changes:
N/A
- **Revert "feature(platform): Implement library add, update, remove,
archive functionality (#9218)"**
- **Revert "feat(backend): Add Support for Managing Agent Presets with
Pagination and Soft Delete (#9211)"**
These PRs contain untested changes to DB functions and cause issues in
production.
### Changes 🏗️
1. **Core Features**:
- Add agents to the user's library.
- Update library agents (auto-update, favorite, archive, delete).
- Paginate library agents and presets.
- Execute graphs using presets.
2. **Refactoring**:
- Replaced `UserAgent` with `LibraryAgent`.
- Separated routes for agents and presets.
3. **Schema Changes**:
- Added `LibraryAgent` table with fields like `isArchived`, `isDeleted`,
etc.
- Soft delete functionality for `AgentPreset`.
4. **Testing**:
- Updated tests for `LibraryAgent` operations.
- Added edge case tests for deletion, archiving, and pagination.
5. **Database Migrations**:
- Migration to drop `UserAgent` and add `LibraryAgent`.
- Added fields for soft deletion and auto-update.
Note this includes the changes from the following PR's to avoid merge
conflicts with them:
#9179#9211
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
### Description
This PR enables the execution of store agents even if they are not owned
by the user. Key changes include handling store-listed agents in the
`get_graph` logic, improving execution flow, and ensuring
version-specific handling. These updates support more flexible agent
execution.
### Changes 🏗️
- **Graph Retrieval:** Updated `get_graph` to check store listings for
agents not owned by the user.
- **Version Handling:** Added `graph_version` to execution methods for
consistent version-specific execution.
- **Execution Flow:** Refactored `scheduler.py`, `rest_api.py`, and
other modules for clearer logic and better maintainability.
- **Testing:** Updated `test_manager.py` and other test cases to
validate execution of store-listed agents added test for accessing graph
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
### Changes 🏗️https://github.com/Significant-Gravitas/AutoGPT/actions/runs/12696734339/job/35391431786
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️https://github.com/Significant-Gravitas/AutoGPT/actions/runs/12696734339/job/35391431786
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
We want to allow users to use Nvidia without their own keys
### Changes 🏗️
Added nvidia api key to credentials store.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Python format uses `{Variable}` as the variable placeholder, while Jinja
uses `{{Variable}}` as its default.
Jinja is used as the main templating engine on the system, but the
Python format version is still maintained for backward compatibility.
However, the backward compatibility support can cause a side effect
while passing JSON string value into the block that uses it:
https://github.com/Significant-Gravitas/AutoGPT/issues/9194
### Changes 🏗️
* Use `{{Variable}}` place holder format and removed `{Variable}`
support in these blocks:
- '363ae599-353e-4804-937e-b2ee3cef3da4', -- AgentOutputBlock
- 'db7d8f02-2f44-4c55-ab7a-eae0941f0c30', -- FillTextTemplateBlock
- '1f292d4a-41a4-4977-9684-7c8d560b9f91', -- AITextGeneratorBlock
- 'ed55ac19-356e-4243-a6cb-bc599e9b716f' --
AIStructuredResponseGeneratorBlock
* Add Jinja templating support on `AITextGeneratorBlock` &
`AIStructuredResponseGeneratorBlock`
* Migrated the existing database content to prevent breaking changes.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
The Ollama docs where very out of date and needed updating so I have
updated them and added some screenshots so its easier to follow.
I have also added a new Ollama model to the platform, "llama3.2" as that
is what i based the tutorial off and its name is easy to find in the
list of models
I also added a new folder in the "imgs" dir to store the Ollama related
photo just to keep things tidy
- resolves#8973
Adding smooth scrolling and solving some weird interaction on carousal
### Changes
- Update `CarouselPrevious`, `CarouselPrevious` and add
`CarouselIndicator` in `carousel.tsx`
- Add `CarouselPrevious`, `CarouselPrevious` and `CarouselIndicator`
support in `FeaturedSection.tsx`
### Demo
https://github.com/user-attachments/assets/ba9a22fa-ddf2-469f-ba8a-aee1a7fc5f78
We want to provide certain providers by default on our platform. These
three were not added previously, so fixing that.
### Changes 🏗️
If api keys for Fal Exa or E2B exist in environment variables, load them
by default as credentials that are usable by our users.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
- Resolves#8326
Create a Twitter integration with some small frontend changes.
### Changes
1. Add Twitter OAuth 2.0 with PKCE support for authentication.
2. Add a way to multi-select from a list of enums by creating a
multi-select on the frontend.
3. Add blocks for Twitter integration.
4. `_types.py` for repetitive enums and input types.
5. `_builders.py` for creating parameters without repeating the same
logic.
6. `_serializer.py` to serialize the Tweepy enums into dictionaries so
they can travel easily from Pyro5.
7. `_mappers.py` to map the frontend values to the correct request
values.
> I have added a new multi-select feature because my list contains many
items, and selecting all of them makes the block cluttered. This new
block displays only the first two items and then show something like "2
more" . It works only for list of enums.
### Blocks
Block Name | What It Does | Error Reason | Manual Testing
-- | -- | -- | --
`TwitterBookmarkTweetBlock` | Bookmark a tweet on Twitter | No error | ✅
`TwitterGetBookmarkedTweetsBlock` | Get all your bookmarked tweets from
Twitter | No error | ✅
`TwitterRemoveBookmarkTweetBlock` | Remove a bookmark for a tweet on
Twitter | No error | ✅
`TwitterHideReplyBlock` | Hides a reply of one of your tweets | No error
| ✅
`TwitterUnhideReplyBlock` | Unhides a reply to a tweet | No error | ✅
`TwitterLikeTweetBlock` | Likes a tweet | No error | ✅
`TwitterGetLikingUsersBlock` | Gets information about users who liked
one of your tweets | No error | ✅
`TwitterGetLikedTweetsBlock` | Gets information about tweets liked by
you | No error | ✅
`TwitterUnlikeTweetBlock` | Unlikes a tweet that was previously liked |
No error | ✅
`TwitterPostTweetBlock` | Create a tweet on Twitter with the option to
include one additional element such as media, quote, or deep link. | No
error | ✅
`TwitterDeleteTweetBlock` | Deletes a tweet on Twitter using Twitter ID
| No error | ✅
`TwitterSearchRecentTweetsBlock` | Searches all public Tweets in Twitter
history | No error | ✅
`TwitterGetQuoteTweetsBlock` | Gets quote tweets for a specified tweet
ID | No error | ✅
`TwitterRetweetBlock` | Retweets a tweet on Twitter | No error | ✅
`TwitterRemoveRetweetBlock` | Removes a retweet on Twitter | No error |
✅
`TwitterGetRetweetersBlock` | Gets information about who has retweeted a
tweet | No error | ✅
`TwitterGetUserMentionsBlock` | Returns Tweets where a single user is
mentioned, just put that user ID | No error | ✅
`TwitterGetHomeTimelineBlock` | Returns a collection of the most recent
Tweets and Retweets posted by you and users you follow | No error | ✅
`TwitterGetUserTweetsBlock` | Returns Tweets composed by a single user,
specified by the requested user ID | No error | ✅
`TwitterGetTweetBlock` | Returns information about a single Tweet
specified by the requested ID | No error | ✅
`TwitterGetTweetsBlock` | Returns information about multiple Tweets
specified by the requested IDs | No error | ✅
`TwitterUnblockUserBlock` | Unblock a specific user on Twitter | No
error | ✅
`TwitterGetBlockedUsersBlock` | Get a list of users who are blocked by
the authenticating user | No error | ✅
`TwitterBlockUserBlock` | Block a specific user on Twitter | No error |
✅
`TwitterUnfollowUserBlock` | Allows a user to unfollow another user
specified by target user ID | No error | ✅
`TwitterFollowUserBlock` | Allows a user to follow another user
specified by target user ID | No error | ✅
`TwitterGetFollowersBlock` | Retrieves a list of followers for a
specified Twitter user ID | Need Enterprise level access | ❌
`TwitterGetFollowingBlock` | Retrieves a list of users that a specified
Twitter user ID is following | Need Enterprise level access | ❌
`TwitterUnmuteUserBlock` | Allows a user to unmute another user
specified by target user ID | No error | ✅
`TwitterGetMutedUsersBlock` | Returns a list of users who are muted by
the authenticating user | No error | ✅
`TwitterMuteUserBlock` | Allows a user to mute another user specified by
target user ID | No error | ✅
`TwitterGetUserBlock` | Gets information about a single Twitter user
specified by ID or username | No error | ✅
`TwitterGetUsersBlock` | Gets information about multiple Twitter users
specified by IDs or usernames | No error | ✅
`TwitterSearchSpacesBlock` | Returns live or scheduled Spaces matching
specified search terms [for a week only] | No error | ✅
`TwitterGetSpacesBlock` | Gets information about multiple Twitter Spaces
specified by Space IDs or creator user IDs | No error | ✅
`TwitterGetSpaceByIdBlock` | Gets information about a single Twitter
Space specified by Space ID | No error | ✅
`TwitterGetSpaceBuyersBlock` | Gets list of users who purchased a ticket
to the requested Space | I do not have a monetized account for this | ✅
`TwitterGetSpaceTweetsBlock` | Gets list of Tweets shared in the
requested Space | No error | ✅
`TwitterUnfollowListBlock` | Unfollows a Twitter list for the
authenticated user | No error | ✅
`TwitterFollowListBlock` | Follows a Twitter list for the authenticated
user | No error | ✅
`TwitterListGetFollowersBlock` | Gets followers of a specified Twitter
list | Enterprise level access | ❌
`TwitterGetFollowedListsBlock` | Gets lists followed by a specified
Twitter user | Enterprise level access | ❌
`TwitterGetListBlock` | Gets information about a Twitter List specified
by ID | No error | ✅
`TwitterGetOwnedListsBlock` | Gets all Lists owned by the specified user
| No error | ✅
`TwitterRemoveListMemberBlock` | Removes a member from a Twitter List
that the authenticated user owns | No error | ✅
`TwitterAddListMemberBlock` | Adds a member to a Twitter List that the
authenticated user owns | No error | ✅
`TwitterGetListMembersBlock` | Gets the members of a specified Twitter
List | No error | ✅
`TwitterGetListMembershipsBlock` | Gets all Lists that a specified user
is a member of | No error | ✅
`TwitterGetListTweetsBlock` | Gets tweets from a specified Twitter list
| No error | ✅
`TwitterDeleteListBlock` | Deletes a Twitter List owned by the
authenticated user | No error | ✅
`TwitterUpdateListBlock` | Updates a Twitter List owned by the
authenticated user | No error | ✅
`TwitterCreateListBlock` | Creates a Twitter List owned by the
authenticated user | No error | ✅
`TwitterUnpinListBlock` | Enables the authenticated user to unpin a
List. | No error | ✅
`TwitterPinListBlock` | Enables the authenticated user to pin a List. |
No error | ✅
`TwitterGetPinnedListsBlock` | Returns the Lists pinned by the
authenticated user. | No error | ✅
`TwitterGetDMEventsBlock` | Gets a list of Direct Message events for the
authenticated user | Need Enterprise level access | ❌
`TwitterSendDirectMessageBlock` | Sends a direct message to a Twitter
user | Need Enterprise level access | ❌
`TwitterCreateDMConversationBlock` | Creates a new group direct message
| Need Enterprise level access | ❌
### Need to add more stuff
1. A normal input to select date and time.
2. Some more enterprise-level blocks, especially webhook triggers.
Supported triggers
Event Name | Description
-- | --
Posts (by user) | User creates a new post.
Post deletes (by user) | User deletes an existing post.
@mentions (of user) | User is mentioned in a post.
Replies (to or from user) | User replies to a post or receives a reply
from another user.
Retweets (by user or of user) | User retweets a post or someone retweets
the user's post.
Quote Tweets (by user or of user) | User quote tweets a post or someone
quote tweets the user's post.
Retweets of Quoted Tweets (by user or of user) | Retweets of quote
tweets by the user or of the user.
Likes (by user or of user) | User likes a post or someone likes the
user's post.
Follows (by user or of user) | User follows another user or another user
follows the user.
Unfollows (by user) | User unfollows another user.
Blocks (by user) | User blocks another user.
Unblocks (by user) | User unblocks a previously blocked user.
Mutes (by user) | User mutes another user.
Unmutes (by user) | User unmutes a previously muted user.
Direct Messages sent (by user) | User sends direct messages to other
users.
Direct Messages received (by user) | User receives direct messages from
other users.
Typing indicators (to user) | Indicators showing when someone is typing
a message to the user.
Read receipts (to user) | Indicators showing when the user has read a
message.
Subscription revokes (by user) | User revokes a subscription to a
service or content.
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
### Changes 🏗️
This is to improve how we deal with plain text in the send web request
block.
- Plain text stays as plain text (regardless of JSON toggle)
- Valid JSON with JSON toggle enabled sends as JSON
- JSON-like data with JSON toggle disabled sends as form data
Allow users to create API keys for the AutoGPT platform. The backend is
already set up, and here I’ve added the frontend for it.
### Changes
1. Fix the `response-model` of the API keys endpoints.
2. Add a new page `/store/api_keys`.
3. Add an `APIKeySection` component to create, delete, and view all your
API keys.
<img width="1512" alt="Screenshot 2025-01-07 at 3 59 25 PM"
src="https://github.com/user-attachments/assets/ea4e9d35-eb92-4e10-a4fb-1fc51dfe11bb"
/>
Adding a block to allow users to detect deepfakes in their workflows.
This block takes in an image as input and returns the probability of it
being a deepfake as well as the bounding boxes around the image.
### Changes 🏗️
- Added NvidiaDeepfakeDetectBlock
- Added the ability to upload images on the frontend
- Added the ability to render base64 encoded images on the frontend
<img width="1001" alt="Screenshot 2025-01-07 at 2 16 42 PM"
src="https://github.com/user-attachments/assets/c3d090f3-3981-4235-a66b-f8e2a3920a4d"
/>
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
Webhooks are broken
### Changes 🏗️
Swaps the way we fill webhooks into strings
<!-- 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] Manually test creating a webhook with Github and Compass
The enum's string *representation* was being inserted in the URL instead
of its string *value*.
Before:
`/api/integrations/ProviderName.GITHUB/webhooks/686db48c-e70d-4340-acf9-ccd0338fddc4/ingress`
After:
`/api/integrations/github/webhooks/686db48c-e70d-4340-acf9-ccd0338fddc4/ingress`
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
- Resolves#9182
Formerly known as `FAILED` with error message `TERMINATED`.
### Changes 🏗️
- Add `TERMINATED` to `AgentExecutionStatus` enum in DB schema (and its
mirror in the front end)
- Update executor to give terminated node and graph executions status
`TERMINATED` instead of `FAILED`/`COMPLETED`
- Add `TERMINATED` case to status checks referencing
`AgentExecutionStatus`
### 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:
- Start and forcefully stop a graph execution
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Make all changes necessary to make everything work with Poetry v2.0.0.
- Resolves#9196
## Changes
- Removed `--no-update` flag from `poetry lock` command in codebase
- Removed extra path arguments from `poetry -C [path] run [command]`
occurrences
- Regenerated all lock files in hierarchical order
- Added workaround for Poetry bug where `packages.[i].format` is now
suddenly required
Additionally:
- Fixed up .dockerignore
- Fixes .venv being erroneously copied over from local
- Fixes build context bloat (300MB -> 2.5MB)
- Fixed warnings about entrypoint script not being installed in docker
builds
### Relevant (breaking) changes in v2.0.0
- `--no-update` flag no longer exists for `poetry lock` as it has become
default behavior
- The `-C` option now actually changes the directory, so any path
arguments in `poetry run` commands can/must be removed
- Poetry v2.0.0 uses the new v2.1 lock file spec, so all lock files have
to be regenerated to avoid false-positive lock file updates and checks
on future PRs
- **BUG:** when specifying `poetry.tool.packages`, `format` is required
now
- python-poetry/poetry#9961
Full Poetry v2.0.0 release notes and change log:
https://python-poetry.org/blog/announcing-poetry-2.0.0
- resolves - #9120
### Changes
- Added a new endpoint to download agent files as JSON, allowing users
to retrieve agent data by store listing version ID and version number.
- Introduced a new `get_agent` function in the database module to fetch
agent details and prepare the graph data for download.
- Enhanced the frontend `AgentInfo` component to include a download
button, which triggers the download of the agent file.
- Integrated loading state and user feedback via toast notifications
during the download process.
- Updated the API client to support the new download functionality.
### Demo video
https://github.com/user-attachments/assets/6744a753-297f-4ccc-abde-f56ca24ed2d5
### Example Json
```json
{
"id": "14378095-4cc5-41ea-975e-bd0bce010bea",
"version": 1,
"is_active": true,
"is_template": false,
"name": "something",
"description": "1",
"nodes": [
{
"id": "6914efa0-e4fa-4ce8-802c-d5577cf061b6",
"block_id": "aeb08fc1-2fc1-4141-bc8e-f758f183a822",
"input_default": {},
"metadata": {
"position": {
"x": 756,
"y": 452.5
}
},
"input_links": [],
"output_links": [],
"webhook_id": null,
"graph_id": "14378095-4cc5-41ea-975e-bd0bce010bea",
"graph_version": 1,
"webhook": null
}
],
"links": [],
"input_schema": {
"type": "object",
"properties": {},
"required": []
},
"output_schema": {
"type": "object",
"properties": {},
"required": []
}
}
```
---------
Co-authored-by: SwiftyOS <craigswift13@gmail.com>
- Resolves#8930
- Depends on #8725
### Changes 🏗️
- feat(platform): Support multiple credentials inputs on blocks
Aside from `credentials`, fields within the name pattern `*_credentials`
are now also supported!
- Update docs with info on multi credentials support
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Ask @aarushik93 to test
This moves my recently added blocks: ``GithubCreateFileBlock``,
``GithubUpdateFileBlock``, ``GithubCreateRepositoryBlock`` and
``GithubListStargazersBlock`` to the correct file ``github/repo.py`` as
i placed them in the wrong file originally
There are a few hardcoded margins and padding in the block input layout,
causing the input to sometimes overflow or be used inconsistently.

### Changes 🏗️
* Make padding consistent between left & right, top & bottom.
* Remove hard-coded margins.
* Match the hardcode negative margin for the right node handle to the
left node handle.
* Make the input box take the full width.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Bumps the development-dependencies group with 3 updates in the
/autogpt_platform/market directory:
[pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio),
[ruff](https://github.com/astral-sh/ruff) and
[pyright](https://github.com/RobertCraigie/pyright-python).
Updates `pytest-asyncio` from 0.25.0 to 0.25.1
<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 0.25.1</h2>
<ul>
<li>Fixes an issue that caused a broken event loop when a
function-scoped test was executed in between two tests with wider loop
scope <a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/950">#950</a></li>
<li>Improves test collection speed in auto mode <a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/pull/1020">#1020</a></li>
<li>Corrects the warning that is emitted upon redefining the event_loop
fixture</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="623ab74b80"><code>623ab74</code></a>
docs: Prepare release of v0.25.1.</li>
<li><a
href="c236550e73"><code>c236550</code></a>
docs: Fix broken link to the pytest.mark.asyncio reference.</li>
<li><a
href="41c645b3b7"><code>41c645b</code></a>
fix: Correct warning message when redefining the event_loop
fixture.</li>
<li><a
href="2fd10f8243"><code>2fd10f8</code></a>
docs: Clarify deprecation of event_loop fixture.</li>
<li><a
href="a4e82ab25b"><code>a4e82ab</code></a>
docs: Added changelog entry for <a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1020">#1020</a>.</li>
<li><a
href="04f90445e1"><code>04f9044</code></a>
refactor: Replace the "__original_fixture_loop" magic
attribute with the more...</li>
<li><a
href="dafef6c65b"><code>dafef6c</code></a>
refactor: Extracted a function to mark an event loop as created by
pytest-asy...</li>
<li><a
href="0c931b7eab"><code>0c931b7</code></a>
refactor: Extracted function to check if a loop was created by
pytest-asyncio.</li>
<li><a
href="0642dcd27b"><code>0642dcd</code></a>
fix: Fix broken event loop when a function-scoped test is in between two
wide...</li>
<li><a
href="050a5f81c9"><code>050a5f8</code></a>
[pre-commit.ci] pre-commit autoupdate</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest-asyncio/compare/v0.25.0...v0.25.1">compare
view</a></li>
</ul>
</details>
<br />
Updates `ruff` from 0.8.3 to 0.8.4
<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.8.4</h2>
<h2>Release Notes</h2>
<h3>Preview features</h3>
<ul>
<li>[<code>airflow</code>] Extend <code>AIR302</code> with additional
functions and classes (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15015">#15015</a>)</li>
<li>[<code>airflow</code>] Implement <code>moved-to-provider-in-3</code>
for modules that has been moved to Airflow providers
(<code>AIR303</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14764">#14764</a>)</li>
<li>[<code>flake8-use-pathlib</code>] Extend check for invalid path
suffix to include the case <code>"."</code>
(<code>PTH210</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14902">#14902</a>)</li>
<li>[<code>perflint</code>] Fix panic in <code>PERF401</code> when list
variable is after the <code>for</code> loop (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14971">#14971</a>)</li>
<li>[<code>perflint</code>] Simplify finding the loop target in
<code>PERF401</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15025">#15025</a>)</li>
<li>[<code>pylint</code>] Preserve original value format
(<code>PLR6104</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14978">#14978</a>)</li>
<li>[<code>ruff</code>] Avoid false positives for <code>RUF027</code>
for typing context bindings (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15037">#15037</a>)</li>
<li>[<code>ruff</code>] Check for ambiguous pattern passed to
<code>pytest.raises()</code> (<code>RUF043</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14966">#14966</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-bandit</code>] Check <code>S105</code> for annotated
assignment (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15059">#15059</a>)</li>
<li>[<code>flake8-pyi</code>] More autofixes for
<code>redundant-none-literal</code> (<code>PYI061</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14872">#14872</a>)</li>
<li>[<code>pydocstyle</code>] Skip leading whitespace for
<code>D403</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14963">#14963</a>)</li>
<li>[<code>ruff</code>] Skip <code>SQLModel</code> base classes for
<code>mutable-class-default</code> (<code>RUF012</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14949">#14949</a>)</li>
</ul>
<h3>Bug</h3>
<ul>
<li>[<code>perflint</code>] Parenthesize walrus expressions in autofix
for <code>manual-list-comprehension</code> (<code>PERF401</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15050">#15050</a>)</li>
</ul>
<h3>Server</h3>
<ul>
<li>Check diagnostic refresh support from client capability which
enables dynamic configuration for various editors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15014">#15014</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/DimitriPapadopoulos"><code>@DimitriPapadopoulos</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/TheBits"><code>@TheBits</code></a></li>
<li><a
href="https://github.com/cake-monotone"><code>@cake-monotone</code></a></li>
<li><a href="https://github.com/carljm"><code>@carljm</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/kiran-4444"><code>@kiran-4444</code></a></li>
<li><a
href="https://github.com/krishnan-chandra"><code>@krishnan-chandra</code></a></li>
<li><a
href="https://github.com/rchen152"><code>@rchen152</code></a></li>
<li><a
href="https://github.com/renovate"><code>@renovate</code></a></li>
<li><a href="https://github.com/sharkdp"><code>@sharkdp</code></a></li>
<li><a
href="https://github.com/tarasmatsyk"><code>@tarasmatsyk</code></a></li>
<li><a
href="https://github.com/w0nder1ng"><code>@w0nder1ng</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.8.4</h2>
<h3>Preview features</h3>
<ul>
<li>[<code>airflow</code>] Extend <code>AIR302</code> with additional
functions and classes (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15015">#15015</a>)</li>
<li>[<code>airflow</code>] Implement <code>moved-to-provider-in-3</code>
for modules that has been moved to Airflow providers
(<code>AIR303</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14764">#14764</a>)</li>
<li>[<code>flake8-use-pathlib</code>] Extend check for invalid path
suffix to include the case <code>"."</code>
(<code>PTH210</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14902">#14902</a>)</li>
<li>[<code>perflint</code>] Fix panic in <code>PERF401</code> when list
variable is after the <code>for</code> loop (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14971">#14971</a>)</li>
<li>[<code>perflint</code>] Simplify finding the loop target in
<code>PERF401</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15025">#15025</a>)</li>
<li>[<code>pylint</code>] Preserve original value format
(<code>PLR6104</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14978">#14978</a>)</li>
<li>[<code>ruff</code>] Avoid false positives for <code>RUF027</code>
for typing context bindings (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15037">#15037</a>)</li>
<li>[<code>ruff</code>] Check for ambiguous pattern passed to
<code>pytest.raises()</code> (<code>RUF043</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14966">#14966</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-bandit</code>] Check <code>S105</code> for annotated
assignment (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15059">#15059</a>)</li>
<li>[<code>flake8-pyi</code>] More autofixes for
<code>redundant-none-literal</code> (<code>PYI061</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14872">#14872</a>)</li>
<li>[<code>pydocstyle</code>] Skip leading whitespace for
<code>D403</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14963">#14963</a>)</li>
<li>[<code>ruff</code>] Skip <code>SQLModel</code> base classes for
<code>mutable-class-default</code> (<code>RUF012</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14949">#14949</a>)</li>
</ul>
<h3>Bug</h3>
<ul>
<li>[<code>perflint</code>] Parenthesize walrus expressions in autofix
for <code>manual-list-comprehension</code> (<code>PERF401</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15050">#15050</a>)</li>
</ul>
<h3>Server</h3>
<ul>
<li>Check diagnostic refresh support from client capability which
enables dynamic configuration for various editors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/15014">#15014</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3bb0dac235"><code>3bb0dac</code></a>
Bump version to 0.8.4 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15064">#15064</a>)</li>
<li><a
href="40cba5dc8a"><code>40cba5d</code></a>
[red-knot] Cleanup various <code>todo_type!()</code> messages (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15063">#15063</a>)</li>
<li><a
href="596d80cc8e"><code>596d80c</code></a>
[<code>perflint</code>] Parenthesize walrus expressions in autofix for
`manual-list-comp...</li>
<li><a
href="d8b9a366c8"><code>d8b9a36</code></a>
Disable actionlint hook by default when running pre-commit locally (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15061">#15061</a>)</li>
<li><a
href="85e71ba91a"><code>85e71ba</code></a>
[<code>flake8-bandit</code>] Check <code>S105</code> for annotated
assignment (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15059">#15059</a>)</li>
<li><a
href="2802cbde29"><code>2802cbd</code></a>
Don't special-case class instances in unary expression inference (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15045">#15045</a>)</li>
<li><a
href="ed2bce6ebb"><code>ed2bce6</code></a>
[red-knot] Report invalid exceptions (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15042">#15042</a>)</li>
<li><a
href="f0012df686"><code>f0012df</code></a>
Fix typos in <code>RUF043.py</code> (<a
href="https://redirect.github.com/astral-sh/ruff/issues/15044">#15044</a>)</li>
<li><a
href="0fc4e8f795"><code>0fc4e8f</code></a>
Introduce <code>InferContext</code> (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14956">#14956</a>)</li>
<li><a
href="ac81c72bf3"><code>ac81c72</code></a>
[<code>ruff</code>] Ambiguous pattern passed to
<code>pytest.raises()</code> (<code>RUF043</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14966">#14966</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.8.3...0.8.4">compare
view</a></li>
</ul>
</details>
<br />
Updates `pyright` from 1.1.390 to 1.1.391
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3356df1d40"><code>3356df1</code></a>
[pyright updated to 1.1.391] Update Version (<a
href="https://redirect.github.com/RobertCraigie/pyright-python/issues/327">#327</a>)</li>
<li>See full diff in <a
href="https://github.com/RobertCraigie/pyright-python/compare/v1.1.390...v1.1.391">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Previously, `http://` would be converted to `http://http` and pass the
no-hostname check that way. It eventually fails validation, but only at
hostname lookup which times out -> takes very long.
### Changes 🏗️
- Fix URL canonicalization logic
- Merge `_canonicalize_url` into `validate_url`
### 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] CI
https://github.com/Significant-Gravitas/AutoGPT/issues/8739 causes input
fields that are supposed to be an advanced field end up being a
mandatory field:

*See the retry count field here.
### Changes 🏗️
Set the `advanced` field on each input field, and set the default value
using this logic:
* If it has a default value, set it to True.
* otherwise, False.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
max_overflow parameter description:
```
:param max_overflow=10: the number of connections to allow in
connection pool "overflow", that is connections that can be
opened above and beyond the pool_size setting, which defaults
to five. this is only used with :class:`~sqlalchemy.pool.QueuePool`.
```
### Changes 🏗️
* Prevent additional db connections from being created in addition to
the pool size for the scheduler.
* Make the pool size configurable.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Co-authored-by: Swifty <craigswift13@gmail.com>
Addresses:
https://github.com/Significant-Gravitas/AutoGPT/security/advisories/GHSA-4c8v-hwxc-2356
Currently, no IPv6 is used by default on this system. However, the lack
of block HTTP access prevention to internal systems with IPv6 could be a
potential SSRF.
### Changes 🏗️
Prevent internal IPv6 address access on HTTP request blocks.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Croniter is unused, and it will be deprecated soon.
### Changes 🏗️
Remove croniter.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Co-authored-by: Swifty <craigswift13@gmail.com>
https://github.com/Significant-Gravitas/AutoGPT/pull/9097/files#diff-ef176e50a6a65af5df2182626ea868ce77b76de447c816fb4f80fb4d376c3049R7-R41
introduced styling changes to block UI layout which causes the block
layout broken:

This PR minimally reverts the styling change.
### Changes 🏗️
Minimal CSS revert to make the block UI layout back to normal.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Exception:
```
nid:ce829f66-14b0-4bd3-b748-791e46666cb6|-] Failed node execution ce829f66-14b0-4bd3-b748-791e46666cb6: Cannot release an unlocked lock {}\u001b[0m",
Traceback (most recent call last):\n File \"/app/autogpt_platform/backend/backend/integrations/creds_manager.py\", line 145, in _locked\n yield\n File \"/app/autogpt_platform/backend/backend/integrations/creds_manager.py\", line 115, in acquire\n lock = self._acquire_lock(user_id, credentials_id)",
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^",
File \"/app/autogpt_platform/backend/backend/integrations/creds_manager.py\", line 139, in _acquire_lock",
return self._locks.acquire(key)",
^^^^^^^^^^^^^^^^^^^^^^^^",
File \"/app/autogpt_platform/autogpt_libs/autogpt_libs/utils/synchronize.py\", line 44, in acquire",
lock.acquire()",
File \"/usr/local/lib/python3.11/site-packages/redis/lock.py\", line 218, in acquire",
mod_time.sleep(sleep)",
File \"/app/autogpt_platform/backend/backend/executor/manager.py\", line 471, in <lambda>",
signal.SIGTERM, lambda _, __: cls.on_node_executor_sigterm()",
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^",
File \"/app/autogpt_platform/backend/backend/executor/manager.py\", line 498, in on_node_executor_sigterm",
sys.exit(0)",
SystemExit: 0",
During handling of the above exception, another exception occurred:",
Traceback (most recent call last):\n File \"/app/autogpt_platform/backend/backend/executor/manager.py\", line 539, in _on_node_execution\n for execution in execute_node(\n File \"/app/autogpt_platform/backend/backend/executor/manager.py\", line 175, in execute_node\n credentials, creds_lock = creds_manager.acquire(user_id, credentials_meta.id)",
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^",
File \"/app/autogpt_platform/backend/backend/integrations/creds_manager.py\", line 114, in acquire",
with self._locked(user_id, credentials_id, \"!time_sensitive\"):",
File \"/usr/local/lib/python3.11/contextlib.py\", line 158, in __exit__",
self.gen.throw(typ, value, traceback)",
File \"/app/autogpt_platform/backend/backend/integrations/creds_manager.py\", line 147, in _locked",
lock.release()",
File \"/usr/local/lib/python3.11/site-packages/redis/lock.py\", line 254, in release",
raise LockError(\"Cannot release an unlocked lock\", lock_name=self.name)",
redis.exceptions.LockError: Cannot release an unlocked lock",
```
### Changes 🏗️
```
try:
lock.acquire()
...
finally:
lock.release()
```
pattern can cause an error where the lock is already released due to
timeout.
The scope of the change is to manually check the lock status before
releasing.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
There are UX and design issues with current auth pages; `login`,
`signup` and `reset_password` (including change password).
### Changes 🏗️

*Missing `s` on the login's password error is fixed.
Important changes in bold.
#### All auth pages
- **Split `/login` into `/signup`**
- UI Redesign that adheres to Figma designs
- General code cleanup and improvements
- Fix feedback: it's now shown when needed and clear (e.g. "~~String~~
Password must be...")
- All action functions use `Sentry.withServerActionInstrumentation`
- `PasswordInput` "eye button" shows password only when mouse button is
hold and doesn't capture tab
#### Login page
- **Removed agree to terms checkbox** (it's only on signup now)
- Move provider login function to `actions.ts`
#### Signup page
- **Requires to type password twice**
- Shows waitlist information on *any* database error
#### Reset password page
- **Password update requires to type password twice**
- **When request to send email is processed then the feedback is:
Password reset email sent if user exists. Please check your email.**
- Email sent feedback is black, error is red
- Move send email and update password functions to `actions.ts`
- Disable button when email is sent
#### Other
- Update zod schema objects and move them to `types/auth`
- Move `components/PasswordInput.tsx` to `/components/auth`
- Make common UI elements separate components in `components/auth`
- Update `yarn.lock` (supabase packages)
- Remove redundant letter in `client.ts`
- Don't log error when user auth is missing in `useSupabase`; user is
simply not logged in
### 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] Form feedback:
- [x] Login works
- [x] Signup works
- [x] Reset email works
- [x] Change password works
- [x] Login works
- [x] Signup works
- [x] Reset email is sent
- [x] Reset email logs user in and redirects to `/reset_password`
- [x] Change password works
- [x] Logout works
- [x] All links across auth pages work
Note: OAuth login providers are disabled and so untested.
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
### Changes 🏗️
- Redirect to the marketplace.
- Ensure that the store agent uses agent graph data instead of store
listing data.
- Don’t export agent input values.
- URL sanitization: We can’t open an agent if it has a colon in its
name.
- Show all top agents.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Fixes#9086
### Changes 🏗️
Added styling to the div that encapsulates the description that takes
white space into account
### Checklist 📋
#### 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:
<summary>The test plan was to just make changes to profile bio and check
the creator page to see if new lines were generated properly</summary>
Below is what the new change looks like:
<img width="882" alt="Screenshot 2024-12-20 at 12 21 09 pm"
src="https://github.com/user-attachments/assets/6d396ec7-96f8-4c9c-9d1f-a5bd75c6dc86"
/>
becomes...
<img width="468" alt="Screenshot 2024-12-20 at 12 21 15 pm"
src="https://github.com/user-attachments/assets/9dbe256b-5800-4f17-91c2-4ecffcffbc0b"
/>
Update Marketplace Image generation Prompt and Model
**Changes:**
- Updated the image generation prompt for Marketplace to better
highlight agent functionality:
```
Create a visually engaging app store thumbnail for the AI agent that
highlights what it does in a clear and captivating way:
- **Name**: {agent.name}
- **Description**: {agent.description}
Focus on showcasing its core functionality with an appealing design.
```
- Changed the model to `black-forest-labs/flux-1.1-pro` for improved
results.
Revamp the Exa search block and add two more for Content and Similarity
search.
### Changes 🏗️
- Updated the exa search block input names to be snakecase not camel
case
- Added Advanced to non required fields
- Pulled Content settings into helpers for reuse across blocks
- Updated customnode.css to handle long inputs, especially in the case
of the date input
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
swaps context menu for dropdown menu
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
When the agent submission was filled out incorrectly, there was no error
pop up. It just did nothing.
### Changes 🏗️
Created an array to track which fields are missing
If this array is not empty, a toast is displayed to show which fields
are missing.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
The clickable area on the navbar was very small and the icons were not
clickable
### Changes 🏗️
Wrap the icons as well in Link
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Now agent can be saved multiple times.
### Changes 🏗️
Disable agent save button when saving or running.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
### Changes 🏗️
This is for [Credential ID Exports into Agent JSON #8919
](https://github.com/Significant-Gravitas/AutoGPT/issues/8919)
I have added a new function ``removeCredentials`` into
[``utils.ts``](https://github.com/Significant-Gravitas/AutoGPT/compare/dev...bently/open-2153-credential-id-exports-into-agent-json?expand=1#diff-db26a69e6fb7546dc621634f3c8ee6efa3639e72e02837f753af18b2fdddf7be)
which will go through and look for any "credentials" that are in the
JSON during a agent export, this will then remove them and let the user
download the file.
I have also added the same function to the importing of agents for old
agents that where exported that still contain the credentials, this
means that old agents can be imported with out breaking/causing issues.
When I say it looks for credentials I dont mean actual credentials like
api keys them self, in the JSON that is exported it contains the
following, this needs removing
```
"credentials": {
"id": "6767232a-3407-4c34-85a3-6887d4969f0c",
"title": "Anthropic Toran",
"provider": "anthropic",
"type": "api_key"
},
```
If there is a better way to go about this let me know!
- Resolves#8748
The webhooks system as is works really well for full blown enterprise
webhooks managed via a UI. It does not work for more "chill guy" webhook
tools that just send notifications sometimes.
## Changes 🏗️
- feat(blocks): Add Compass transcription trigger block
- feat(backend): Amend webhooks system to support manual-set-up webhooks
- Make event filter input optional on webhook-triggered nodes
- Make credentials optional on webhook-triggered nodes
- Add code path to re-use existing manual webhook on graph update
- Add `ManualWebhookManagerBase`
- feat(frontend): Add UI to pass webhook URL to user on manual-set-up
webhook blocks

- fix(backend): Strip webhook info from node objects for graph export
- refactor(backend): Rename `backend.integrations.webhooks.base` to
`._base`
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Currently there are random issues (logout, auth desync) and
inconveniences with how Supabase and backend API works.
Resolves:
- https://github.com/Significant-Gravitas/AutoGPT/issues/9006
- https://github.com/Significant-Gravitas/AutoGPT/issues/8912
### Changes 🏗️
This PR streamlines how the Supabase and backend API is used to fix
current errors with auth, remove unnecessary code and make it easier to
use Supabase and backend API.
- Add `getServerSupabase` for server side that returns `SupabaseClient`.
- Add `Spinner` component that is used for loading animation.
- Remove redundant `useUser`, user is fetched in `useSupabase` already.
- Replace most Supabase `create*Client` to `getSupabaseServer` and
`useSupabase`.
- Remove redundant `AutoGPTServerAPI` class and rename
`BaseAutoGPTServerAPI` to `BackendAPI` and use it instead.
- Remove `SupabaseProvider` context; supabase caches internally what's
possible already.
- Move `useSupabase` hook to its own file and update it.
### Helpful table
| Next.js usage | Server | Client |
|---|---|---|
| API | `new BackendAPI();` | `new BackendAPI();`* or `useBackendAPI()`
|
| Supabase | `getServerSupabase();` | `useSupabase();` |
| user, user.role | `getServerUser();`** | `useSupabase();` |
\* `BackendAPI` automatically chooses correct Supabase client, so while
it's recommended to use `useBackendAPI()`, it's ok to use `new
BackendAPI();` in client components and even memoize it: `useMemo(() =>
new BackendAPI(), [])`.
** The reason user isn't returned in `getServerSupabase` is because it
forces async fetch but creating supabase doesn't, so it'd force
`getServerSupabase` to be async or return `{ supabase: SupabaseClient,
user: Promise<User> | null }`. For the same reason `useSupabase`
provides access to `supabase` immediately but `user` *may* be loading,
so there's `isUserLoading` provided as well.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Currently, users have no way to reset their password.
### Changes 🏗️
Add `reset_password` page that displays either form to send reset
password email or lets logged in user change their password. Login page
now shows clickable "Forgot your password?" link. After updating
password user is logged out and redirected to login page.
Note: Link provided in the email just logs user in and redirects to
reset password form but password update isn't enforced.
<img width="279" alt="Screenshot 2024-12-14 at 1 28 39 PM"
src="https://github.com/user-attachments/assets/c7ada10c-74e5-4be3-8033-0912eb5b38f2"
/>
### 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] Email is sent
- [x] Link in the email logs user in and redirects to reset password
form
- [x] Reset password form works
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
The tutorial was a bit harder than we expected to completely automate.
Along the way though, we made these functions so lets keep em in for
future use
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
- Adds a few more functions for the build automation pages
<!-- 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
- [ ] I have tested my changes according to the test plan: Writing tests
Bumps [cryptography](https://github.com/pyca/cryptography) from 43.0.3
to 44.0.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>44.0.0 - 2024-11-27</p>
<pre><code>
* **BACKWARDS INCOMPATIBLE:** Dropped support for LibreSSL < 3.9.
* Deprecated Python 3.7 support. Python 3.7 is no longer supported by
the
Python core team. Support for Python 3.7 will be removed in a future
``cryptography`` release.
* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
3.4.0.
* macOS wheels are now built against the macOS 10.13 SDK. Users on older
versions of macOS should upgrade, or they will need to build
``cryptography`` themselves.
* Enforce the :rfc:`5280` requirement that extended key usage extensions
must
not be empty.
* Added support for timestamp extraction to the
:class:`~cryptography.fernet.MultiFernet` class.
* Relax the Authority Key Identifier requirements on root CA
certificates
during X.509 verification to allow fields permitted by :rfc:`5280` but
forbidden by the CA/Browser BRs.
* Added support for
:class:`~cryptography.hazmat.primitives.kdf.argon2.Argon2id`
when using OpenSSL 3.2.0+.
* Added support for the :class:`~cryptography.x509.Admissions`
certificate extension.
* Added basic support for PKCS7 decryption (including S/MIME 3.2) via
:func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`,
:func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_pem`,
and
:func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_smime`.
<p>.. _v43-0-3:<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f299a48153"><code>f299a48</code></a>
remove deprecated call (<a
href="https://redirect.github.com/pyca/cryptography/issues/12052">#12052</a>)</li>
<li><a
href="439eb0594a"><code>439eb05</code></a>
Bump version for 44.0.0 (<a
href="https://redirect.github.com/pyca/cryptography/issues/12051">#12051</a>)</li>
<li><a
href="2c5ad4d8dc"><code>2c5ad4d</code></a>
chore(deps): bump maturin from 1.7.4 to 1.7.5 in /.github/requirements
(<a
href="https://redirect.github.com/pyca/cryptography/issues/12050">#12050</a>)</li>
<li><a
href="d23968addd"><code>d23968a</code></a>
chore(deps): bump libc from 0.2.165 to 0.2.166 (<a
href="https://redirect.github.com/pyca/cryptography/issues/12049">#12049</a>)</li>
<li><a
href="133c0e02ed"><code>133c0e0</code></a>
Bump x509-limbo and/or wycheproof in CI (<a
href="https://redirect.github.com/pyca/cryptography/issues/12047">#12047</a>)</li>
<li><a
href="f2259d7aa0"><code>f2259d7</code></a>
Bump BoringSSL and/or OpenSSL in CI (<a
href="https://redirect.github.com/pyca/cryptography/issues/12046">#12046</a>)</li>
<li><a
href="e201c870b8"><code>e201c87</code></a>
fixed metadata in changelog (<a
href="https://redirect.github.com/pyca/cryptography/issues/12044">#12044</a>)</li>
<li><a
href="c6104cc366"><code>c6104cc</code></a>
Prohibit Python 3.9.0, 3.9.1 -- they have a bug that causes errors (<a
href="https://redirect.github.com/pyca/cryptography/issues/12045">#12045</a>)</li>
<li><a
href="d6cac753c2"><code>d6cac75</code></a>
Add support for decrypting S/MIME messages (<a
href="https://redirect.github.com/pyca/cryptography/issues/11555">#11555</a>)</li>
<li><a
href="b8e5bfd4d7"><code>b8e5bfd</code></a>
chore(deps): bump libc from 0.2.164 to 0.2.165 (<a
href="https://redirect.github.com/pyca/cryptography/issues/12042">#12042</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pyca/cryptography/compare/43.0.3...44.0.0">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
- Resolve#8976
> Once you have checked whether this is working or not, then I will
remove the optional field block.
### Changes
- Updated `NodeGenericInputField` to handle additional input types:
- Added support for `array` and `object` optional types.
- Enhanced schema definitions for `string` optional type to include
enumerations
### Testing 🔍
- Verified that the new input types function correctly within the
frontend component.
<img width="517" alt="Screenshot 2024-12-13 at 7 08 22 PM"
src="https://github.com/user-attachments/assets/1e4b7c58-2ddc-4082-8a9e-2e11b91495e2"
/>
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
- Resolves part of #8731
### Changes
- Added `depends_on` parameter to SchemaField in `model.py` to specify
field dependencies.
- Updated `useAgentGraph` hook to validate input fields based on their
dependencies, ensuring required fields are set when dependent fields are
filled.
- Modified `BlockIOSubSchemaMeta` to include `depends_on` as an optional
property.
https://github.com/user-attachments/assets/64fd47b3-34dc-48fa-ad90-1c9c5cd4c4a3
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
- resolves part of #8731
### Changes
- Introduced `mutually_exclusive` parameter in `SchemaField` to manage
input exclusivity.
- Implemented logic in `NodeGenericInputField` to disable inputs based
on mutual exclusivity.
- Updated related components to support the new `disabled` state for
inputs.
- Enhanced `BlockIOSubSchemaMeta` to include `mutually_exclusive`
property.
> Currently, I’m disabling the input from the same group (I haven’t
added any frontend validation to prevent users from bypassing it).
https://github.com/user-attachments/assets/71fb9fe4-943b-4724-8acb-6aed2232ed6b
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
Monitor page is broken for me
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Updates monitor page to what was in dev before store pr went in
- Updates graph getting endpoint to handle invalid graphs a bit more
graceful
### 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 to make sure I can start and view my monitor page
# 🌎 Overview
AutoGPT Store Version 2 expands on the Pre-Store by enhancing agent
discovery, providing richer content presentation, and introducing new
user engagement features. The focus is on creating a visually appealing
and interactive marketplace that allows users to explore and evaluate
agents through images, videos, and detailed descriptions.
### Vision
To create a visually compelling and interactive open-source marketplace
for autonomous AI agents, where users can easily discover, evaluate, and
interact with agents through media-rich listings, ratings, and version
history.
### Objectives
📊 Incorporate visuals (icons, images, videos) into agent listings.
⭐ Introduce a rating system and agent run count.
🔄 Provide version history and update logs from creators.
🔍 Improve user experience with advanced search and filtering features.
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Bently <tomnoon9@gmail.com>
Co-authored-by: Aarushi <aarushik93@gmail.com>
### Background
Currently, AutoGPT only supports ollama servers running locally. Often,
this is not the case as the ollama server could be running on a more
suited instance, such as a Jetson board. This PR adds "ollama host" to
the input of all LLM blocks, allowing users to select the ollama host
for the LLM blocks.
### Changes 🏗️
- Changes contained within blocks/llm.py:
- Adding ollama host input to all LLM blocks
- Fixed incorrect parsing of prompt when passing to ollama in the
StructuredResponse block
- Used ollama.Client instances to accomplish this.
### Testing 🔍
Tested all LLM blocks with Ollama remote hosts as well as with the
default localhost value.
### Related issues
https://github.com/Significant-Gravitas/AutoGPT/issues/8225
---------
Co-authored-by: Fried-Squid <Fried-Squid>
Co-authored-by: Toran Bruce Richards <toran.richards@gmail.com>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
Though this is technically possible with the AddToDictionary and
AddToList Blocks, that approach alone feels like a hidden work-around
rather than an intuitive feature, and I'm happy with the duplication in
the name of better experience for our users here.
Changes 🏗️
Added CreateDictionaryBlock class that creates a dictionary from the
provided key-value pairs.
Added CreateListBlock class that creates a list from the provided
values.

---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Bumps the development-dependencies group in /autogpt_platform/market
with 2 updates: [ruff](https://github.com/astral-sh/ruff) and
[pyright](https://github.com/RobertCraigie/pyright-python).
Updates `ruff` from 0.8.1 to 0.8.2
<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.8.2</h2>
<h2>Release Notes</h2>
<h3>Preview features</h3>
<ul>
<li>[<code>airflow</code>] Avoid deprecated values (<code>AIR302</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14582">#14582</a>)</li>
<li>[<code>airflow</code>] Extend removed names for <code>AIR302</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14734">#14734</a>)</li>
<li>[<code>ruff</code>] Extend
<code>unnecessary-regular-expression</code> to non-literal strings
(<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14679">#14679</a>)</li>
<li>[<code>ruff</code>] Implement <code>used-dummy-variable</code>
(<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14611">#14611</a>)</li>
<li>[<code>ruff</code>] Implement <code>unnecessary-cast-to-int</code>
(<code>RUF046</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14697">#14697</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>airflow</code>] Check <code>AIR001</code> from builtin or
providers <code>operators</code> module (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14631">#14631</a>)</li>
<li>[<code>flake8-pytest-style</code>] Remove <code>@</code> in
<code>pytest.mark.parametrize</code> rule messages (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14770">#14770</a>)</li>
<li>[<code>pandas-vet</code>] Skip rules if the <code>panda</code>
module hasn't been seen (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14671">#14671</a>)</li>
<li>[<code>pylint</code>] Fix false negatives for <code>ascii</code> and
<code>sorted</code> in <code>len-as-condition</code>
(<code>PLC1802</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14692">#14692</a>)</li>
<li>[<code>refurb</code>] Guard <code>hashlib</code> imports and mark
<code>hashlib-digest-hex</code> fix as safe (<code>FURB181</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14694">#14694</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>[<code>flake8-import-conventions</code>] Improve syntax check for
aliases supplied in configuration for
<code>unconventional-import-alias</code> (<code>ICN001</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14745">#14745</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Revert: [pyflakes] Avoid false positives in
<code>@no_type_check</code> contexts (<code>F821</code>,
<code>F722</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14615">#14615</a>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14726">#14726</a>)</li>
<li>[<code>pep8-naming</code>] Avoid false positive for <code>class
Bar(type(foo))</code> (<code>N804</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14683">#14683</a>)</li>
<li>[<code>pycodestyle</code>] Handle f-strings properly for
<code>invalid-escape-sequence</code> (<code>W605</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14748">#14748</a>)</li>
<li>[<code>pylint</code>] Ignore <code>@overload</code> in
<code>PLR0904</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14730">#14730</a>)</li>
<li>[<code>refurb</code>] Handle non-finite decimals in
<code>verbose-decimal-constructor</code> (<code>FURB157</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14596">#14596</a>)</li>
<li>[<code>ruff</code>] Avoid emitting <code>assignment-in-assert</code>
when all references to the assigned variable are themselves inside
<code>assert</code>s (<code>RUF018</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14661">#14661</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Improve docs for <code>flake8-use-pathlib</code> rules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14741">#14741</a>)</li>
<li>Improve error messages and docs for
<code>flake8-comprehensions</code> rules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14729">#14729</a>)</li>
<li>[<code>flake8-type-checking</code>] Expands <code>TC006</code> docs
to better explain itself (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14749">#14749</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/Lokejoke"><code>@Lokejoke</code></a></li>
<li><a
href="https://github.com/Matt-Ord"><code>@Matt-Ord</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@MichaReiser</code></a></li>
<li><a
href="https://github.com/Well2333"><code>@Well2333</code></a></li>
<li><a
href="https://github.com/connorskees"><code>@connorskees</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>
</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.8.2</h2>
<h3>Preview features</h3>
<ul>
<li>[<code>airflow</code>] Avoid deprecated values (<code>AIR302</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14582">#14582</a>)</li>
<li>[<code>airflow</code>] Extend removed names for <code>AIR302</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14734">#14734</a>)</li>
<li>[<code>ruff</code>] Extend
<code>unnecessary-regular-expression</code> to non-literal strings
(<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14679">#14679</a>)</li>
<li>[<code>ruff</code>] Implement <code>used-dummy-variable</code>
(<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14611">#14611</a>)</li>
<li>[<code>ruff</code>] Implement <code>unnecessary-cast-to-int</code>
(<code>RUF046</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14697">#14697</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>airflow</code>] Check <code>AIR001</code> from builtin or
providers <code>operators</code> module (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14631">#14631</a>)</li>
<li>[<code>flake8-pytest-style</code>] Remove <code>@</code> in
<code>pytest.mark.parametrize</code> rule messages (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14770">#14770</a>)</li>
<li>[<code>pandas-vet</code>] Skip rules if the <code>panda</code>
module hasn't been seen (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14671">#14671</a>)</li>
<li>[<code>pylint</code>] Fix false negatives for <code>ascii</code> and
<code>sorted</code> in <code>len-as-condition</code>
(<code>PLC1802</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14692">#14692</a>)</li>
<li>[<code>refurb</code>] Guard <code>hashlib</code> imports and mark
<code>hashlib-digest-hex</code> fix as safe (<code>FURB181</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14694">#14694</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>[<code>flake8-import-conventions</code>] Improve syntax check for
aliases supplied in configuration for
<code>unconventional-import-alias</code> (<code>ICN001</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14745">#14745</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Revert: [pyflakes] Avoid false positives in
<code>@no_type_check</code> contexts (<code>F821</code>,
<code>F722</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14615">#14615</a>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14726">#14726</a>)</li>
<li>[<code>pep8-naming</code>] Avoid false positive for <code>class
Bar(type(foo))</code> (<code>N804</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14683">#14683</a>)</li>
<li>[<code>pycodestyle</code>] Handle f-strings properly for
<code>invalid-escape-sequence</code> (<code>W605</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14748">#14748</a>)</li>
<li>[<code>pylint</code>] Ignore <code>@overload</code> in
<code>PLR0904</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14730">#14730</a>)</li>
<li>[<code>refurb</code>] Handle non-finite decimals in
<code>verbose-decimal-constructor</code> (<code>FURB157</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14596">#14596</a>)</li>
<li>[<code>ruff</code>] Avoid emitting <code>assignment-in-assert</code>
when all references to the assigned variable are themselves inside
<code>assert</code>s (<code>RUF018</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14661">#14661</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Improve docs for <code>flake8-use-pathlib</code> rules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14741">#14741</a>)</li>
<li>Improve error messages and docs for
<code>flake8-comprehensions</code> rules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14729">#14729</a>)</li>
<li>[<code>flake8-type-checking</code>] Expands <code>TC006</code> docs
to better explain itself (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14749">#14749</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b0e26e6fc8"><code>b0e26e6</code></a>
Bump version to 0.8.2 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14789">#14789</a>)</li>
<li><a
href="e9941cd714"><code>e9941cd</code></a>
[red-knot] Move standalone expr inference to <code>for</code> non-name
target (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14788">#14788</a>)</li>
<li><a
href="43bf1a8907"><code>43bf1a8</code></a>
Add tests for "keyword as identifier" syntax errors (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14754">#14754</a>)</li>
<li><a
href="fda8b1f884"><code>fda8b1f</code></a>
[<code>ruff</code>] Unnecessary cast to <code>int</code>
(<code>RUF046</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14697">#14697</a>)</li>
<li><a
href="2d3f557875"><code>2d3f557</code></a>
[red-knot] Fallback for <code>typing._NoDefaultType</code> (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14783">#14783</a>)</li>
<li><a
href="bd27bfab5d"><code>bd27bfa</code></a>
[red-knot] Unify <code>setup_db()</code> functions, add
<code>TestDb</code> builder (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14777">#14777</a>)</li>
<li><a
href="155d34bbb9"><code>155d34b</code></a>
[red-knot] Infer precise types for <code>len()</code> calls (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14599">#14599</a>)</li>
<li><a
href="04c887c8fc"><code>04c887c</code></a>
Fix references for <code>async-busy-wait</code> (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14775">#14775</a>)</li>
<li><a
href="af43bd4b0f"><code>af43bd4</code></a>
[red-knot] Gradual forms do not participate in equivalence/subtyping (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14758">#14758</a>)</li>
<li><a
href="614917769e"><code>6149177</code></a>
Remove <code>@</code> in <code>pytest.mark.parametrize</code> rule
messages (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14770">#14770</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.8.1...0.8.2">compare
view</a></li>
</ul>
</details>
<br />
Updates `pyright` from 1.1.389 to 1.1.390
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ee025bc694"><code>ee025bc</code></a>
Pyright NPM Package update to 1.1.390 (<a
href="https://redirect.github.com/RobertCraigie/pyright-python/issues/325">#325</a>)</li>
<li>See full diff in <a
href="https://github.com/RobertCraigie/pyright-python/compare/v1.1.389...v1.1.390">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
- Resolves#8948
### Changes 🏗️
- Parallelize frontend test job into a per-browser matrix
- Speed up "Free Disk Space" step by disabling removal of large system
packages
- Resolves#8853
Disallow combining webhook block with another webhook or input block,
because we can't run those. Our current approach to validating the input
for a graph's starting nodes prohibits such cases.
Demo:
https://github.com/user-attachments/assets/ac098765-bb5f-4218-8cd4-ad992b1b8cda
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Add a webhook-triggered block -> can't add another, also can't add
an input block
- [x] Add an input block -> can't add a webhook-triggered block
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
- Resolves#8931
- Follow-up to #8358
### Changes 🏗️
- Avoid double specifying provider and cred types on `credentials`
inputs
- Move `credentials` sub-schema validation from `CredentialsField` to
`CredentialsMetaInput.validate_credentials_field_schema(..)`, which is
called in `BlockSchema.__pydantic_init_subclass__`
- Use `ProviderName` enum globally
First step for the PAYG System.
### Changes 🏗️
- Add `stripeCustomerId` to `User` model
- Rename model `UserBlockCredit` to `CreditTransaction`
- Rename model `UserBlockCreditType` to `CreditTransactionType`
- Update related code
- Add a migration
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
This is a follow-up of
https://github.com/Significant-Gravitas/AutoGPT/pull/8752
There are several APIs and functions related to graph execution that are
unused now.
There is also confusion about the name of `GraphExecution` that exists
in graph.py & execution.py.
### Changes 🏗️
* Renamed `GraphExecution` in `execution.py` to `GraphExecutionEntry`,
this is only used as a queue entry for execution.
* Removed unused `get_graph_execution` & `list_executions` in
`execution.py`.
* Removed `with_run` option on `get_graph` function in `graph.py`.
* Removed `GraphMetaWithRuns`
* Removed exposed functions only for testing.
* Removed `executions` fields in Graph model.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Krzysztof Czerwinski <34861343+kcze@users.noreply.github.com>
Recently pins were made slightly bigger and misaligned needlessly. The
problem in the linked issue was to fix connection area, not make them
bigger.
- https://github.com/Significant-Gravitas/AutoGPT/issues/8913
### Changes 🏗️
- Revert pins size to smaller
- Fix hover area and highlight for input pins
### 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] Connect, reconnect, remove connection
- [x] Tutorial works
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
The graph version is bumped on each save. While the agent version is
changed, the past execution history is gone because the monitor page
only shows the latest version's execution history.
### Changes 🏗️
- Add `get_executions` on the backend that returns all executions of all
graphs for a user
- Display all executions (for all versions) for graphs in Monitor
- Rename ts mirror type `ExecutionMeta` to `GraphExecution` for
consistency with the backend
- Remove redundant `FlowRun` type on the frontend and use
`GraphExecution` instead
- Round execution duration text in Monitor to one decimal place
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
ExtractTextInformationBlock is only supporting extracting one match.
### Changes 🏗️
Adding find_all option to ExtractTextInformationBlock.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Some table foreign key sources are not properly indexed, causing the
potential full table scan on the code queries.
### Changes 🏗️
Added DB indexes on several tables.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
This addresses
https://github.com/Significant-Gravitas/AutoGPT/issues/8741
We have quite a few blocks with (object) outputs. The only way to really
use these is to use a "Find In Dictionary" block to pick out that
property.
If the structure of the output object is known, we should expose the
properties of the object directly as sub-outputs. This will make a huge
difference in UX and make using these blocks much much easier.
### Changes 🏗️
Recursively flatten object fields into output node handles
<img width="637" alt="image"
src="https://github.com/user-attachments/assets/dac1f691-9866-4bb7-96b7-20fa6ddbb616">
<img width="773" alt="image"
src="https://github.com/user-attachments/assets/f8e7f97c-b245-40bd-b84f-2c044f5f9e23">
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
### Background
The Github PR blocks are not able to function properly because the
correct endpoint is not getting called.
- Resolves#8667
### Changes 🏗️
* Added logic to derive correct endpoint from the given PR url.
* This logic is implemented in multiple blocks viz.
`GithubReadPullRequestBlock`, `GithubAssignPRReviewerBlock`,
`GithubUnassignPRReviewerBlock`, `GithubListPRReviewersBlock`.
### Test
* Github List PR Reviewers
<img width="511" alt="Screenshot 2024-12-03 at 11 03 59 PM"
src="https://github.com/user-attachments/assets/9c69edcf-c2f4-42d2-954d-0fc4d903ae22">
* Github Read Pull Request (Include Pr Changes checked)
<img width="417" alt="Screenshot 2024-12-06 at 12 01 41 PM"
src="https://github.com/user-attachments/assets/986fada7-7fbb-41b6-a42a-47d1e11fa562">
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
**Summary:**
This PR removes the `GEMINI_FLASH_1_5_EXP` model (due to inference on
OpenRouter not working) and introduces several new models to the
`LlmModel` enum. Corresponding updates have been made to the metadata
configurations and block cost settings to reflect the changes.
**Key Changes:**
1. **Removed Models:**
- `GEMINI_FLASH_1_5_EXP`
2. **Added New Models:**
- `QWEN_QWQ_32B_PREVIEW`
- `NOUSRESEARCH_HERMES_3_LLAMA_3_1_405B`
- `NOUSRESEARCH_HERMES_3_LLAMA_3_1_70B`
- `AMAZON_NOVA_LITE_V1`
- `AMAZON_NOVA_MICRO_V1`
- `AMAZON_NOVA_PRO_V1`
- `MICROSOFT_WIZARDLM_2_8X22B`
- `GRYPHE_MYTHOMAX_L2_13B`
3. **Metadata Updates:**
- Added metadata entries for the new models with a max output tokens of
4,000 tokens.
4. **Cost Configuration Updates:**
- Defined block costs for the newly added models:
- `QWEN_QWQ_32B_PREVIEW`: 2 credits
- All other new models: 1 credit
**Testing:**
- Verified that all models can be called without errors with the AI Text
generator block
<!-- Clearly explain the need for these changes: -->
We want to be able to test the monitor page with importing and exporting
agents
### Changes 🏗️
- Adds more test ids
- Builds out monitor.page.ts
- adds import export tests
- Fixes#8791, fixes#8795, fixes#8792
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
Writing/Running the automated tests
### Changes 🏗️
Adding incremental documentation based on YouTube series:
- How to Submit an Agent to the AutoGPT Marketplace
- How to Download and Import an Agent from the AutoGPT Marketplace
(Local Hosting)
- Creating a Basic AI Agent with AutoGPT
- How to Edit an Agent in AutoGPT
- How to Delete an Agent in AutoGPT
---------
Co-authored-by: Bently <tomnoon9@gmail.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
This PR allows us to feature flag on the frontend, this means we can
rollout features in stages, hide features, do AB testing etc.
### Changes 🏗️
Added a LaunchDarkly Provider
Added a withFeatureFlag component
Added two env vars for:
- enabling LD
- specifying the _public_ client side key
Usage:
```
'use client'
import { useFlags } from 'launchdarkly-react-client-sdk'
import { withFeatureFlag } from '@/components/feature-flag/with-feature-flag'
function TestFlagPage() {
const flags = useFlags()
return (
<div className="p-4">
<h1>If you can see this, the feature flag is ON</h1>
<pre>Current flag value: {JSON.stringify(flags, null, 2)}</pre>
</div>
)
}
export default withFeatureFlag(TestFlagPage, 'test-flag')
```
### 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: -->
- [ ] ...
<details>
<summary>Test plan</summary>
- Set LD to false
- Navigate to a test page, should not be visible
- Set LD to true
- Navigate to same test page, should be visible
</details>
#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
- [x] I have updated infra repo
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Bently <tomnoon9@gmail.com>
Co-authored-by: SerchioSD <69461657+serchiosd@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Toran Bruce Richards <toran.richards@gmail.com>
We aren't using Launch Darkly locally and so it's not set up but it was
still attempting to shut down LaunchDarkly when the app shutdown,
causing errors on shutdown. This PR fixes that issue by entirely
disabling LD on local machines.
### Changes 🏗️
Added a contextmanager to handle LaunchDarkly start up and shutdown
Added a check for local environment in said context manager
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Adding Exa API blocks because it does very cool search and web scrapping
### Changes 🏗️
Adding Exa API blocks:
Search
Added a new calendar and time input
Added _auth.py for Exa API too.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
https://github.com/user-attachments/assets/edd6908e-ecf3-45c2-94d7-3f88de70bb8f
### Changes 🏗️
`fetchBlockResults` should always be triggered when `isOutputOpen` is
true.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
### Changes 🏗️
We've seen some symptoms where during the initial startup of the
application the obtained db connection produces an error when the
network is unreachable. This code made sure that the obtained connection
could run the query and retry it on the spot if it was unable to do so.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
We still use plain Jinja objects for text formatting in our block codes.
### Changes 🏗️
Introduced a `TextFormatter` utility class that uses jina
SandboxedEnvironment for safer text formatting.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
We need stricter URL validation for the hostname we can request in the
block code.
### Changes 🏗️
* Canonicalization: Ensures \ are converted to /, adds http:// if
missing, and normalizes the input URL.
* Scheme Check: Only http or https are allowed.
* Hostname Validation:
- Ensures a hostname exists.
- Converts it to an IDNA ASCII form to prevent Unicode spoofing.
- Verifies that the hostname matches a safe DNS pattern.
* Trusted Origins Check: Allows certain hostnames explicitly if needed.
* IP Resolution and Blocking:
- Resolves the hostname to its IP addresses.
- Checks against a list of private/reserved IP networks to prevent SSRF
to internal services.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Bumps the development-dependencies group in /autogpt_platform/market
with 2 updates: [pytest](https://github.com/pytest-dev/pytest) and
[ruff](https://github.com/astral-sh/ruff).
Updates `pytest` from 8.3.3 to 8.3.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest/releases">pytest's
releases</a>.</em></p>
<blockquote>
<h2>8.3.4</h2>
<h1>pytest 8.3.4 (2024-12-01)</h1>
<h2>Bug fixes</h2>
<ul>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12592">#12592</a>:
Fixed <code>KeyError</code>{.interpreted-text role="class"}
crash when using <code>--import-mode=importlib</code> in a directory
layout where a directory contains a child directory with the same
name.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12818">#12818</a>:
Assertion rewriting now preserves the source ranges of the original
instructions, making it play well with tools that deal with the
<code>AST</code>, like <a
href="https://github.com/alexmojaki/executing">executing</a>.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12849">#12849</a>:
ANSI escape codes for colored output now handled correctly in
<code>pytest.fail</code>{.interpreted-text role="func"} with
[pytrace=False]{.title-ref}.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/9353">#9353</a>:
<code>pytest.approx</code>{.interpreted-text role="func"} now
uses strict equality when given booleans.</p>
</li>
</ul>
<h2>Improved documentation</h2>
<ul>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/10558">#10558</a>:
Fix ambiguous docstring of
<code>pytest.Config.getoption</code>{.interpreted-text
role="func"}.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/10829">#10829</a>:
Improve documentation on the current handling of the
<code>--basetemp</code> option and its lack of retention functionality
(<code>temporary directory location and
retention</code>{.interpreted-text role="ref"}).</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12866">#12866</a>:
Improved cross-references concerning the
<code>recwarn</code>{.interpreted-text role="fixture"}
fixture.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12966">#12966</a>:
Clarify <code>filterwarnings</code>{.interpreted-text
role="ref"} docs on filter precedence/order when using
multiple <code>@pytest.mark.filterwarnings
<pytest.mark.filterwarnings ref></code>{.interpreted-text
role="ref"} marks.</p>
</li>
</ul>
<h2>Contributor-facing changes</h2>
<ul>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12497">#12497</a>:
Fixed two failing pdb-related tests on Python 3.13.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="53f8b4e634"><code>53f8b4e</code></a>
Update pypa/gh-action-pypi-publish to v1.12.2</li>
<li><a
href="98dff36c9d"><code>98dff36</code></a>
Prepare release version 8.3.4</li>
<li><a
href="1b474e221d"><code>1b474e2</code></a>
approx: use exact comparison for bool (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/13013">#13013</a>)</li>
<li><a
href="b541721529"><code>b541721</code></a>
docs: Fix wrong statement about sys.modules with importlib import mode
(<a
href="https://redirect.github.com/pytest-dev/pytest/issues/1298">#1298</a>...</li>
<li><a
href="16cb87b650"><code>16cb87b</code></a>
pytest.fail: fix ANSI escape codes for colored output (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/12959">#12959</a>)
(<a
href="https://redirect.github.com/pytest-dev/pytest/issues/12990">#12990</a>)</li>
<li><a
href="be6bc812b0"><code>be6bc81</code></a>
Issue <a
href="https://redirect.github.com/pytest-dev/pytest/issues/12966">#12966</a>
Clarify filterwarnings docs on precedence when using multiple ma...</li>
<li><a
href="7aeb72bbc6"><code>7aeb72b</code></a>
Improve docs on basetemp and retention (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/12912">#12912</a>)
(<a
href="https://redirect.github.com/pytest-dev/pytest/issues/12928">#12928</a>)</li>
<li><a
href="c8758414cf"><code>c875841</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/12917">#12917</a>
from pytest-dev/patchback/backports/8.3.x/ded1f44e5...</li>
<li><a
href="6502816d97"><code>6502816</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/12913">#12913</a>
from jakkdl/dontfailonbadpath</li>
<li><a
href="52135b033f"><code>52135b0</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/12885">#12885</a>
from The-Compiler/pdb-py311 (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/12887">#12887</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest/compare/8.3.3...8.3.4">compare
view</a></li>
</ul>
</details>
<br />
Updates `ruff` from 0.8.0 to 0.8.1
<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.8.1</h2>
<h2>Release Notes</h2>
<h3>Preview features</h3>
<ul>
<li>Formatter: Avoid invalid syntax for format-spec with quotes for all
Python versions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14625">#14625</a>)</li>
<li>Formatter: Consider quotes inside format-specs when choosing the
quotes for an f-string (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14493">#14493</a>)</li>
<li>Formatter: Do not consider f-strings with escaped newlines as
multiline (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14624">#14624</a>)</li>
<li>Formatter: Fix f-string formatting in assignment statement (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14454">#14454</a>)</li>
<li>Formatter: Fix unnecessary space around power operator
(<code>**</code>) in overlong f-string expressions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14489">#14489</a>)</li>
<li>[<code>airflow</code>] Avoid implicit <code>schedule</code> argument
to <code>DAG</code> and <code>@dag</code> (<code>AIR301</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14581">#14581</a>)</li>
<li>[<code>flake8-builtins</code>] Exempt private built-in modules
(<code>A005</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14505">#14505</a>)</li>
<li>[<code>flake8-pytest-style</code>] Fix
<code>pytest.mark.parametrize</code> rules to check calls instead of
decorators (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14515">#14515</a>)</li>
<li>[<code>flake8-type-checking</code>] Implement
<code>runtime-cast-value</code> (<code>TC006</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14511">#14511</a>)</li>
<li>[<code>flake8-type-checking</code>] Implement
<code>unquoted-type-alias</code> (<code>TC007</code>) and
<code>quoted-type-alias</code> (<code>TC008</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/12927">#12927</a>)</li>
<li>[<code>flake8-use-pathlib</code>] Recommend
<code>Path.iterdir()</code> over <code>os.listdir()</code>
(<code>PTH208</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14509">#14509</a>)</li>
<li>[<code>pylint</code>] Extend <code>invalid-envvar-default</code> to
detect <code>os.environ.get</code> (<code>PLW1508</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14512">#14512</a>)</li>
<li>[<code>pylint</code>] Implement <code>len-test</code>
(<code>PLC1802</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14309">#14309</a>)</li>
<li>[<code>refurb</code>] Fix bug where methods defined using lambdas
were flagged by <code>FURB118</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14639">#14639</a>)</li>
<li>[<code>ruff</code>] Auto-add <code>r</code> prefix when string has
no backslashes for <code>unraw-re-pattern</code> (<code>RUF039</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14536">#14536</a>)</li>
<li>[<code>ruff</code>] Implement
<code>invalid-assert-message-literal-argument</code>
(<code>RUF040</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14488">#14488</a>)</li>
<li>[<code>ruff</code>] Implement
<code>unnecessary-nested-literal</code> (<code>RUF041</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14323">#14323</a>)</li>
<li>[<code>ruff</code>] Implement
<code>unnecessary-regular-expression</code> (<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14659">#14659</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Ignore more rules for stub files (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14541">#14541</a>)</li>
<li>[<code>pep8-naming</code>] Eliminate false positives for
single-letter names (<code>N811</code>, <code>N814</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14584">#14584</a>)</li>
<li>[<code>pyflakes</code>] Avoid false positives in
<code>@no_type_check</code> contexts (<code>F821</code>,
<code>F722</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14615">#14615</a>)</li>
<li>[<code>ruff</code>] Detect redirected-noqa in file-level comments
(<code>RUF101</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14635">#14635</a>)</li>
<li>[<code>ruff</code>] Mark fixes for <code>unsorted-dunder-all</code>
and <code>unsorted-dunder-slots</code> as unsafe when there are complex
comments in the sequence (<code>RUF022</code>, <code>RUF023</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14560">#14560</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Avoid fixing code to <code>None | None</code> for
<code>redundant-none-literal</code> (<code>PYI061</code>) and
<code>never-union</code> (<code>RUF020</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14583">#14583</a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/14589">#14589</a>)</li>
<li>[<code>flake8-bugbear</code>] Fix
<code>mutable-contextvar-default</code> to resolve annotated function
calls properly (<code>B039</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14532">#14532</a>)</li>
<li>[<code>flake8-pyi</code>, <code>ruff</code>] Fix traversal of nested
literals and unions (<code>PYI016</code>, <code>PYI051</code>,
<code>PYI055</code>, <code>PYI062</code>, <code>RUF041</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14641">#14641</a>)</li>
<li>[<code>flake8-pyi</code>] Avoid rewriting invalid type expressions
in <code>unnecessary-type-union</code> (<code>PYI055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14660">#14660</a>)</li>
<li>[<code>flake8-type-checking</code>] Avoid syntax errors and type
checking problem for quoted annotations autofix (<code>TC003</code>,
<code>TC006</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14634">#14634</a>)</li>
<li>[<code>pylint</code>] Do not wrap function calls in parentheses in
the fix for unnecessary-dunder-call (<code>PLC2801</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14601">#14601</a>)</li>
<li>[<code>ruff</code>] Handle <code>attrs</code>'s
<code>auto_attribs</code> correctly (<code>RUF009</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14520">#14520</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/Glyphack"><code>@Glyphack</code></a></li>
<li><a
href="https://github.com/InSyncWithFoo"><code>@InSyncWithFoo</code></a></li>
<li><a
href="https://github.com/Lokejoke"><code>@Lokejoke</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@MichaReiser</code></a></li>
<li><a
href="https://github.com/cake-monotone"><code>@cake-monotone</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.8.1</h2>
<h3>Preview features</h3>
<ul>
<li>Formatter: Avoid invalid syntax for format-spec with quotes for all
Python versions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14625">#14625</a>)</li>
<li>Formatter: Consider quotes inside format-specs when choosing the
quotes for an f-string (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14493">#14493</a>)</li>
<li>Formatter: Do not consider f-strings with escaped newlines as
multiline (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14624">#14624</a>)</li>
<li>Formatter: Fix f-string formatting in assignment statement (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14454">#14454</a>)</li>
<li>Formatter: Fix unnecessary space around power operator
(<code>**</code>) in overlong f-string expressions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14489">#14489</a>)</li>
<li>[<code>airflow</code>] Avoid implicit <code>schedule</code> argument
to <code>DAG</code> and <code>@dag</code> (<code>AIR301</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14581">#14581</a>)</li>
<li>[<code>flake8-builtins</code>] Exempt private built-in modules
(<code>A005</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14505">#14505</a>)</li>
<li>[<code>flake8-pytest-style</code>] Fix
<code>pytest.mark.parametrize</code> rules to check calls instead of
decorators (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14515">#14515</a>)</li>
<li>[<code>flake8-type-checking</code>] Implement
<code>runtime-cast-value</code> (<code>TC006</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14511">#14511</a>)</li>
<li>[<code>flake8-type-checking</code>] Implement
<code>unquoted-type-alias</code> (<code>TC007</code>) and
<code>quoted-type-alias</code> (<code>TC008</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/12927">#12927</a>)</li>
<li>[<code>flake8-use-pathlib</code>] Recommend
<code>Path.iterdir()</code> over <code>os.listdir()</code>
(<code>PTH208</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14509">#14509</a>)</li>
<li>[<code>pylint</code>] Extend <code>invalid-envvar-default</code> to
detect <code>os.environ.get</code> (<code>PLW1508</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14512">#14512</a>)</li>
<li>[<code>pylint</code>] Implement <code>len-test</code>
(<code>PLC1802</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14309">#14309</a>)</li>
<li>[<code>refurb</code>] Fix bug where methods defined using lambdas
were flagged by <code>FURB118</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14639">#14639</a>)</li>
<li>[<code>ruff</code>] Auto-add <code>r</code> prefix when string has
no backslashes for <code>unraw-re-pattern</code> (<code>RUF039</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14536">#14536</a>)</li>
<li>[<code>ruff</code>] Implement
<code>invalid-assert-message-literal-argument</code>
(<code>RUF040</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14488">#14488</a>)</li>
<li>[<code>ruff</code>] Implement
<code>unnecessary-nested-literal</code> (<code>RUF041</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14323">#14323</a>)</li>
<li>[<code>ruff</code>] Implement
<code>unnecessary-regular-expression</code> (<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14659">#14659</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Ignore more rules for stub files (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14541">#14541</a>)</li>
<li>[<code>pep8-naming</code>] Eliminate false positives for
single-letter names (<code>N811</code>, <code>N814</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14584">#14584</a>)</li>
<li>[<code>pyflakes</code>] Avoid false positives in
<code>@no_type_check</code> contexts (<code>F821</code>,
<code>F722</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14615">#14615</a>)</li>
<li>[<code>ruff</code>] Detect redirected-noqa in file-level comments
(<code>RUF101</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14635">#14635</a>)</li>
<li>[<code>ruff</code>] Mark fixes for <code>unsorted-dunder-all</code>
and <code>unsorted-dunder-slots</code> as unsafe when there are complex
comments in the sequence (<code>RUF022</code>, <code>RUF023</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14560">#14560</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Avoid fixing code to <code>None | None</code> for
<code>redundant-none-literal</code> (<code>PYI061</code>) and
<code>never-union</code> (<code>RUF020</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14583">#14583</a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/14589">#14589</a>)</li>
<li>[<code>flake8-bugbear</code>] Fix
<code>mutable-contextvar-default</code> to resolve annotated function
calls properly (<code>B039</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14532">#14532</a>)</li>
<li>[<code>flake8-pyi</code>, <code>ruff</code>] Fix traversal of nested
literals and unions (<code>PYI016</code>, <code>PYI051</code>,
<code>PYI055</code>, <code>PYI062</code>, <code>RUF041</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14641">#14641</a>)</li>
<li>[<code>flake8-pyi</code>] Avoid rewriting invalid type expressions
in <code>unnecessary-type-union</code> (<code>PYI055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14660">#14660</a>)</li>
<li>[<code>flake8-type-checking</code>] Avoid syntax errors and type
checking problem for quoted annotations autofix (<code>TC003</code>,
<code>TC006</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14634">#14634</a>)</li>
<li>[<code>pylint</code>] Do not wrap function calls in parentheses in
the fix for unnecessary-dunder-call (<code>PLC2801</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14601">#14601</a>)</li>
<li>[<code>ruff</code>] Handle <code>attrs</code>'s
<code>auto_attribs</code> correctly (<code>RUF009</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14520">#14520</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b3b2c982cd"><code>b3b2c98</code></a>
Update CHANGELOG.md with the new commits for 0.8.1 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14664">#14664</a>)</li>
<li><a
href="abb3c6ea95"><code>abb3c6e</code></a>
[<code>flake8-pyi</code>] Avoid rewriting invalid type expressions in
`unnecessary-type-...</li>
<li><a
href="224fe75a76"><code>224fe75</code></a>
[<code>ruff</code>] Implement
<code>unnecessary-regular-expression</code> (<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14659">#14659</a>)</li>
<li><a
href="dc29f52750"><code>dc29f52</code></a>
[<code>flake8-pyi</code>, <code>ruff</code>] Fix traversal of nested
literals and unions (<code>PYI016</code>,...</li>
<li><a
href="d9cbf2fe44"><code>d9cbf2f</code></a>
Avoids unnecessary overhead for <code>TC004</code>, when
<code>TC001-003</code> are disabled (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14657">#14657</a>)</li>
<li><a
href="3f6c65e78c"><code>3f6c65e</code></a>
[red-knot] Fix merged type after if-else without explicit else branch
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/14621">#14621</a>)</li>
<li><a
href="976c37a849"><code>976c37a</code></a>
Bump version to 0.8.1 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14655">#14655</a>)</li>
<li><a
href="a378ff38dc"><code>a378ff3</code></a>
[red-knot] Fix Boolean flags in mdtests (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14654">#14654</a>)</li>
<li><a
href="d8bca0d3a2"><code>d8bca0d</code></a>
Fix bug where methods defined using lambdas were flagged by FURB118 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14639">#14639</a>)</li>
<li><a
href="6f1cf5b686"><code>6f1cf5b</code></a>
[red-knot] Minor fix in MRO tests (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14652">#14652</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.8.0...0.8.1">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
- Resolves#8884
We need to prevent breaking updates to dependency version requirements
of `autogpt_libs`.
`autogpt_libs/pytroject.toml` and `backend/poetry.lock` are loosely
coupled, and to ensure they stay in sync we need an extra check.
For now I'm also reverting the breaking update of #8787, otherwise this
added CI check will immediately fail.
### Changes
- ci(backend): Add `poetry.lock` check
- Revert "build(deps): bump pydantic from 2.9.2 to 2.10.2 in
/autogpt_platform/autogpt_libs in the production-dependencies group
across 1 directory (#8787)"
- Resolves#8743
- Follow-up to #8358
### Demo
https://github.com/user-attachments/assets/f983dfa2-2dc2-4ab0-8373-e768ba17e6f7
### Changes 🏗️
- feat(frontend): Add webhook status indicator on `CustomNode`
- Add `webhookId` to frontend node data model
- fix(backend): Fix webhook ping endpoint
- Remove `provider` path parameter
- Fix return values and error handling
- Fix `WebhooksManager.trigger_ping(..)`
- Add `credentials` parameter
- Fix usage of credentials
- Fix `.data.integrations.wait_for_webhook_event(..)`
- Add `AsyncRedisEventBus.wait_for_event(..)`
- feat(frontend): Add `BackendAPIProvider` + `useBackendAPI`
- feat(frontend): Improve layout of node header
Before:

After:

- refactor(backend): Clean up `.data.integrations`
- refactor(backend): Fix naming in `.data.queue` for understandability
### 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] Add webhook block, save -> gray indicator
- [x] Add necessary info to webhook block, save -> green indicator
- [x] Remove necessary info, save -> gray indicator
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
Nick wants others to be able to write tests besides Nick
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Fixes various import errors across the docs to fix dead links
- Adds Docs for making and debugging your own tests
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
<!-- Clearly explain the need for these changes: -->
I want to be able to have agents 3d print things and deliver them to my
house!
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Adds slant3d as a provider
- Adds slant3d order webhook (disabled on the cloud by default due to
how it notifies users)
- Adds several blocks to order from slant3d
- Diables Get Orders (for the same reason as webhook)
### 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
<details>
<summary>Test Plan</summary>
- [ ] Add filament block and fill API key
- [ ] Run filament block
- [ ] Add slice block and use this value:
https://files.printables.com/media/prints/1081287/stls/8176524_a9edde2d-68c1-41de-a207-b584fcf42f30_f9127d5b-39ed-4ef8-b59f-d3a0bc874373/rod-holder.stl
- [ ] Run slice block
- [ ] Add estimate blocks (print and shipping) and use your address, and
the above file
- [ ] select petg and count 1
- [ ] run the blocks
- [ ] Create an order using same information
- [ ] Run the block and note the order number
- [ ] Delete the create order block so you don't keep ordering stuff
- [ ] Run get orders block
- [ ] Check your order exists
- [ ] Run the cancel order block with the order id
- [ ] run the get orders block and check the order no longer exists
</details>
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
<!-- Clearly explain the need for these changes: -->
We want to be able to automatically test agent running creation and
building via the build page
### Changes 🏗️
- updates many UI elements to have new data ids
- adds page for build
- adds spec for build
<!-- 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:
- [x] Run the UI Tests!
---------
Co-authored-by: Bently <tomnoon9@gmail.com>
- resolve#8739
I don't think so that this is a frontend issue [might be wrong] ,
because if we are not classifying that a particular input is `advanced =
true/false`. Then we automatically get `advanced = True`.
<img width="1142" alt="Screenshot 2024-11-27 at 10 36 59 AM"
src="https://github.com/user-attachments/assets/e8d9c037-5b8b-45b2-b40b-8390bc63de99">
Bumps the development-dependencies group in
/autogpt_platform/autogpt_libs with 1 update:
[ruff](https://github.com/astral-sh/ruff).
Updates `ruff` from 0.8.0 to 0.8.1
<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.8.1</h2>
<h2>Release Notes</h2>
<h3>Preview features</h3>
<ul>
<li>Formatter: Avoid invalid syntax for format-spec with quotes for all
Python versions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14625">#14625</a>)</li>
<li>Formatter: Consider quotes inside format-specs when choosing the
quotes for an f-string (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14493">#14493</a>)</li>
<li>Formatter: Do not consider f-strings with escaped newlines as
multiline (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14624">#14624</a>)</li>
<li>Formatter: Fix f-string formatting in assignment statement (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14454">#14454</a>)</li>
<li>Formatter: Fix unnecessary space around power operator
(<code>**</code>) in overlong f-string expressions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14489">#14489</a>)</li>
<li>[<code>airflow</code>] Avoid implicit <code>schedule</code> argument
to <code>DAG</code> and <code>@dag</code> (<code>AIR301</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14581">#14581</a>)</li>
<li>[<code>flake8-builtins</code>] Exempt private built-in modules
(<code>A005</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14505">#14505</a>)</li>
<li>[<code>flake8-pytest-style</code>] Fix
<code>pytest.mark.parametrize</code> rules to check calls instead of
decorators (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14515">#14515</a>)</li>
<li>[<code>flake8-type-checking</code>] Implement
<code>runtime-cast-value</code> (<code>TC006</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14511">#14511</a>)</li>
<li>[<code>flake8-type-checking</code>] Implement
<code>unquoted-type-alias</code> (<code>TC007</code>) and
<code>quoted-type-alias</code> (<code>TC008</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/12927">#12927</a>)</li>
<li>[<code>flake8-use-pathlib</code>] Recommend
<code>Path.iterdir()</code> over <code>os.listdir()</code>
(<code>PTH208</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14509">#14509</a>)</li>
<li>[<code>pylint</code>] Extend <code>invalid-envvar-default</code> to
detect <code>os.environ.get</code> (<code>PLW1508</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14512">#14512</a>)</li>
<li>[<code>pylint</code>] Implement <code>len-test</code>
(<code>PLC1802</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14309">#14309</a>)</li>
<li>[<code>refurb</code>] Fix bug where methods defined using lambdas
were flagged by <code>FURB118</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14639">#14639</a>)</li>
<li>[<code>ruff</code>] Auto-add <code>r</code> prefix when string has
no backslashes for <code>unraw-re-pattern</code> (<code>RUF039</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14536">#14536</a>)</li>
<li>[<code>ruff</code>] Implement
<code>invalid-assert-message-literal-argument</code>
(<code>RUF040</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14488">#14488</a>)</li>
<li>[<code>ruff</code>] Implement
<code>unnecessary-nested-literal</code> (<code>RUF041</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14323">#14323</a>)</li>
<li>[<code>ruff</code>] Implement
<code>unnecessary-regular-expression</code> (<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14659">#14659</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Ignore more rules for stub files (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14541">#14541</a>)</li>
<li>[<code>pep8-naming</code>] Eliminate false positives for
single-letter names (<code>N811</code>, <code>N814</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14584">#14584</a>)</li>
<li>[<code>pyflakes</code>] Avoid false positives in
<code>@no_type_check</code> contexts (<code>F821</code>,
<code>F722</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14615">#14615</a>)</li>
<li>[<code>ruff</code>] Detect redirected-noqa in file-level comments
(<code>RUF101</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14635">#14635</a>)</li>
<li>[<code>ruff</code>] Mark fixes for <code>unsorted-dunder-all</code>
and <code>unsorted-dunder-slots</code> as unsafe when there are complex
comments in the sequence (<code>RUF022</code>, <code>RUF023</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14560">#14560</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Avoid fixing code to <code>None | None</code> for
<code>redundant-none-literal</code> (<code>PYI061</code>) and
<code>never-union</code> (<code>RUF020</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14583">#14583</a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/14589">#14589</a>)</li>
<li>[<code>flake8-bugbear</code>] Fix
<code>mutable-contextvar-default</code> to resolve annotated function
calls properly (<code>B039</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14532">#14532</a>)</li>
<li>[<code>flake8-pyi</code>, <code>ruff</code>] Fix traversal of nested
literals and unions (<code>PYI016</code>, <code>PYI051</code>,
<code>PYI055</code>, <code>PYI062</code>, <code>RUF041</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14641">#14641</a>)</li>
<li>[<code>flake8-pyi</code>] Avoid rewriting invalid type expressions
in <code>unnecessary-type-union</code> (<code>PYI055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14660">#14660</a>)</li>
<li>[<code>flake8-type-checking</code>] Avoid syntax errors and type
checking problem for quoted annotations autofix (<code>TC003</code>,
<code>TC006</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14634">#14634</a>)</li>
<li>[<code>pylint</code>] Do not wrap function calls in parentheses in
the fix for unnecessary-dunder-call (<code>PLC2801</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14601">#14601</a>)</li>
<li>[<code>ruff</code>] Handle <code>attrs</code>'s
<code>auto_attribs</code> correctly (<code>RUF009</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14520">#14520</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/Glyphack"><code>@Glyphack</code></a></li>
<li><a
href="https://github.com/InSyncWithFoo"><code>@InSyncWithFoo</code></a></li>
<li><a
href="https://github.com/Lokejoke"><code>@Lokejoke</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@MichaReiser</code></a></li>
<li><a
href="https://github.com/cake-monotone"><code>@cake-monotone</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.8.1</h2>
<h3>Preview features</h3>
<ul>
<li>Formatter: Avoid invalid syntax for format-spec with quotes for all
Python versions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14625">#14625</a>)</li>
<li>Formatter: Consider quotes inside format-specs when choosing the
quotes for an f-string (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14493">#14493</a>)</li>
<li>Formatter: Do not consider f-strings with escaped newlines as
multiline (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14624">#14624</a>)</li>
<li>Formatter: Fix f-string formatting in assignment statement (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14454">#14454</a>)</li>
<li>Formatter: Fix unnecessary space around power operator
(<code>**</code>) in overlong f-string expressions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14489">#14489</a>)</li>
<li>[<code>airflow</code>] Avoid implicit <code>schedule</code> argument
to <code>DAG</code> and <code>@dag</code> (<code>AIR301</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14581">#14581</a>)</li>
<li>[<code>flake8-builtins</code>] Exempt private built-in modules
(<code>A005</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14505">#14505</a>)</li>
<li>[<code>flake8-pytest-style</code>] Fix
<code>pytest.mark.parametrize</code> rules to check calls instead of
decorators (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14515">#14515</a>)</li>
<li>[<code>flake8-type-checking</code>] Implement
<code>runtime-cast-value</code> (<code>TC006</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14511">#14511</a>)</li>
<li>[<code>flake8-type-checking</code>] Implement
<code>unquoted-type-alias</code> (<code>TC007</code>) and
<code>quoted-type-alias</code> (<code>TC008</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/12927">#12927</a>)</li>
<li>[<code>flake8-use-pathlib</code>] Recommend
<code>Path.iterdir()</code> over <code>os.listdir()</code>
(<code>PTH208</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14509">#14509</a>)</li>
<li>[<code>pylint</code>] Extend <code>invalid-envvar-default</code> to
detect <code>os.environ.get</code> (<code>PLW1508</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14512">#14512</a>)</li>
<li>[<code>pylint</code>] Implement <code>len-test</code>
(<code>PLC1802</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14309">#14309</a>)</li>
<li>[<code>refurb</code>] Fix bug where methods defined using lambdas
were flagged by <code>FURB118</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14639">#14639</a>)</li>
<li>[<code>ruff</code>] Auto-add <code>r</code> prefix when string has
no backslashes for <code>unraw-re-pattern</code> (<code>RUF039</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/14536">#14536</a>)</li>
<li>[<code>ruff</code>] Implement
<code>invalid-assert-message-literal-argument</code>
(<code>RUF040</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14488">#14488</a>)</li>
<li>[<code>ruff</code>] Implement
<code>unnecessary-nested-literal</code> (<code>RUF041</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14323">#14323</a>)</li>
<li>[<code>ruff</code>] Implement
<code>unnecessary-regular-expression</code> (<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14659">#14659</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Ignore more rules for stub files (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14541">#14541</a>)</li>
<li>[<code>pep8-naming</code>] Eliminate false positives for
single-letter names (<code>N811</code>, <code>N814</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14584">#14584</a>)</li>
<li>[<code>pyflakes</code>] Avoid false positives in
<code>@no_type_check</code> contexts (<code>F821</code>,
<code>F722</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14615">#14615</a>)</li>
<li>[<code>ruff</code>] Detect redirected-noqa in file-level comments
(<code>RUF101</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14635">#14635</a>)</li>
<li>[<code>ruff</code>] Mark fixes for <code>unsorted-dunder-all</code>
and <code>unsorted-dunder-slots</code> as unsafe when there are complex
comments in the sequence (<code>RUF022</code>, <code>RUF023</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14560">#14560</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Avoid fixing code to <code>None | None</code> for
<code>redundant-none-literal</code> (<code>PYI061</code>) and
<code>never-union</code> (<code>RUF020</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14583">#14583</a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/14589">#14589</a>)</li>
<li>[<code>flake8-bugbear</code>] Fix
<code>mutable-contextvar-default</code> to resolve annotated function
calls properly (<code>B039</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14532">#14532</a>)</li>
<li>[<code>flake8-pyi</code>, <code>ruff</code>] Fix traversal of nested
literals and unions (<code>PYI016</code>, <code>PYI051</code>,
<code>PYI055</code>, <code>PYI062</code>, <code>RUF041</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14641">#14641</a>)</li>
<li>[<code>flake8-pyi</code>] Avoid rewriting invalid type expressions
in <code>unnecessary-type-union</code> (<code>PYI055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14660">#14660</a>)</li>
<li>[<code>flake8-type-checking</code>] Avoid syntax errors and type
checking problem for quoted annotations autofix (<code>TC003</code>,
<code>TC006</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14634">#14634</a>)</li>
<li>[<code>pylint</code>] Do not wrap function calls in parentheses in
the fix for unnecessary-dunder-call (<code>PLC2801</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14601">#14601</a>)</li>
<li>[<code>ruff</code>] Handle <code>attrs</code>'s
<code>auto_attribs</code> correctly (<code>RUF009</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14520">#14520</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b3b2c982cd"><code>b3b2c98</code></a>
Update CHANGELOG.md with the new commits for 0.8.1 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14664">#14664</a>)</li>
<li><a
href="abb3c6ea95"><code>abb3c6e</code></a>
[<code>flake8-pyi</code>] Avoid rewriting invalid type expressions in
`unnecessary-type-...</li>
<li><a
href="224fe75a76"><code>224fe75</code></a>
[<code>ruff</code>] Implement
<code>unnecessary-regular-expression</code> (<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14659">#14659</a>)</li>
<li><a
href="dc29f52750"><code>dc29f52</code></a>
[<code>flake8-pyi</code>, <code>ruff</code>] Fix traversal of nested
literals and unions (<code>PYI016</code>,...</li>
<li><a
href="d9cbf2fe44"><code>d9cbf2f</code></a>
Avoids unnecessary overhead for <code>TC004</code>, when
<code>TC001-003</code> are disabled (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14657">#14657</a>)</li>
<li><a
href="3f6c65e78c"><code>3f6c65e</code></a>
[red-knot] Fix merged type after if-else without explicit else branch
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/14621">#14621</a>)</li>
<li><a
href="976c37a849"><code>976c37a</code></a>
Bump version to 0.8.1 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14655">#14655</a>)</li>
<li><a
href="a378ff38dc"><code>a378ff3</code></a>
[red-knot] Fix Boolean flags in mdtests (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14654">#14654</a>)</li>
<li><a
href="d8bca0d3a2"><code>d8bca0d</code></a>
Fix bug where methods defined using lambdas were flagged by FURB118 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14639">#14639</a>)</li>
<li><a
href="6f1cf5b686"><code>6f1cf5b</code></a>
[red-knot] Minor fix in MRO tests (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14652">#14652</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.8.0...0.8.1">compare
view</a></li>
</ul>
</details>
<br />
[](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>
- Resolves#8859
- Follow-up to #8751
### Changes
- Add `autogpt_libs` to the backend CI path filter
- Add `ruff format` step for `autogpt_libs` to `linter.py` and
`pre-commit` config
- Run `poetry run format` with the new setup
<!-- Clearly explain the need for these changes: -->
On windows this file load kept crashing stuff on startup so I specified
the encoding
### Changes 🏗️
<!-- 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] Run the app!
Replace Dict with dict
### Changes 🏗️
Replace Dict with dict
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Once we release api key feature, we will want to be able to rate limit
as well. This is the foundation for that.
For now it is a blanket rate limit, later we will be able to add tiered
rate limits
### Changes 🏗️
Added new middleware libary in autogpt_libs which contains the logic for
getting the api key, storing it's details in redis and checking how many
requests it's done, how many are left and what the reset time is.
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
<!-- Clearly explain the need for these changes: -->
Huntr isn't offering a security bounty for autogpt at the moment so
remove it in favor of github security adviosories
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
comments out huntr line in case they decide to offer it again in the
future
### Fixes#8371
These changes are needed to automatically switch between local and
production marketplace URLs, ensuring the app connects to the correct
environment (dev or prod) without manual intervention.
### Changes 🏗️
1. Swaps marketplace URL based on APP_ENV (dev or prod).
2. Ensures correct URL is used for local or production environments.
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
Dependabot's commit messages are bulky and don't use our commit message
scopes. Although not fully customizable, this partially fixes it.
### Changes 🏗️
- Fix dependabot commit message scopes
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
linter.py, only applies in the `backend` module, not `autogpt_libs`.
The scope of this PR is to clear this out.
### Changes 🏗️
* Add a linting scope to both the `backend` & `autogpt_libs` modules,
and apply the linter.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
When calculating the next month, we are not rolling the month number
causing an error on credits.
### Changes 🏗️
Add modulo while calculating next month.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
- Move `autogpt_libs.supabase_integration_credentials_store` into
`backend`
- `.store` -> `backend.integrations.credentials_store`
- `.types` -> added to `backend.data.model`
- Rename `SupabaseIntegrationCredentialsStore` to
`IntegrationCredentialsStore`
We wanted to get a few security things in quickly in #8403 and had to
make some compromises to do so. This picks those up and fixes them.
- Resolves#8540
### 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: -->
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
This fix is triggered by an error observed on db connection failure on
SupaBase:
```
2024-11-28 07:45:24,724 INFO [DatabaseManager] Starting...
2024-11-28 07:45:24,726 INFO [PID-18|DatabaseManager|Prisma-7f32369c-6432-4edb-8e71-ef820332b9e4] Acquiring connection started...
2024-11-28 07:45:24,726 INFO [PID-18|DatabaseManager|Prisma-7f32369c-6432-4edb-8e71-ef820332b9e4] Acquiring connection completed successfully.
{"is_panic":false,"message":"Can't reach database server at `...pooler.supabase.com:5432`\n\nPlease make sure your database server is running at `....pooler.supabase.com:5432`.","meta":{"database_host":"...pooler.supabase.com","database_port":5432},"error_code":"P1001"}
2024-11-28 07:45:35,153 INFO [PID-18|DatabaseManager|Prisma-7f32369c-6432-4edb-8e71-ef820332b9e4] Acquiring connection failed: Could not connect to the query engine. Retrying now...
2024-11-28 07:45:36,155 INFO [PID-18|DatabaseManager|Redis-e14a33de-2d81-4536-b48b-a8aa4b1f4766] Acquiring connection started...
2024-11-28 07:45:36,181 INFO [PID-18|DatabaseManager|Redis-e14a33de-2d81-4536-b48b-a8aa4b1f4766] Acquiring connection completed successfully.
2024-11-28 07:45:36,183 INFO [PID-18|DatabaseManager|Pyro-2722cd29-4dbd-4cf9-882f-73842658599d] Starting Pyro Service started...
2024-11-28 07:45:36,189 INFO [DatabaseManager] Connected to Pyro; URI = PYRO:DatabaseManager@0.0.0.0:8005
2024-11-28 07:46:28,241 ERROR Error in get_user_integrations: All connection attempts failed
```
Where even
```
2024-11-28 07:45:35,153 INFO [PID-18|DatabaseManager|Prisma-7f32369c-6432-4edb-8e71-ef820332b9e4] Acquiring connection failed: Could not connect to the query engine. Retrying now...
```
is present, the Redis connection is still proceeding without waiting for
the retry to complete. This was likely caused by Tenacity not fully
awaiting the DB connection acquisition command.
### Changes 🏗️
* Add special handling for the async function to explicitly await the
function execution result on each retry.
* Explicitly raise exceptions on `db.connect()` if the db is not
connected even after `prisma.connect()` command.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
This PR adds the first few Hubspot blocks so we can create _real_ sales
and marketing agents.
### Changes 🏗️
Added Hubspot blocks;
- Aded auth for hubspot
- Added Company block
- Added Contact block
- Added Engagement block
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
We've started enabling cost based on the *partial value* of the
`credentials` field. And this logic has never been supported.
### Changes 🏗️
* Add partial object matching on the input data filter for evaluating
the block cost.
* Add missing credentials for `ExtractWebsiteContentBlock`
* Removed fallback cost on LLM blocks.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
Blocks should be easy to search, the name is sometimes not
straightforward, but the description does.
<img width="576" alt="image"
src="https://github.com/user-attachments/assets/0528b019-0ebc-4e6f-8a3c-40323a671b13">
### Changes 🏗️
Make the block description searchable.
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [ ] ...
<details>
<summary>Example test plan</summary>
- [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
- [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
- [ ] Edit an agent from monitor, and confirm it executes correctly
</details>
#### For configuration changes:
- [ ] `.env.example` is updated or already compatible with my changes
- [ ] `docker-compose.yml` is updated or already compatible with my
changes
- [ ] I have included a list of my configuration changes in the PR
description (under **Changes**)
<details>
<summary>Examples of configuration changes</summary>
- Changing ports
- Adding new services that need to communicate with each other
- Secrets or environment variable changes
- New or infrastructure changes such as databases
</details>
* docs(backend): Add `--build` to docker command in Getting Started guide (#8762)
* updated URL on README.md
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
- Add `/integrations/credentials` endpoint which lists all credentials for the authenticated user
- Amend credential fetching logic in front end to fetch all at once instead of per provider
- Resolves#8770
- Resolves (hopefully) #8613
- feat(blocks): Add GitHub Pull Request Trigger block
## feat(platform): Add support for Webhook-triggered blocks
- ⚠️ Add `PLATFORM_BASE_URL` setting
- Add webhook config option and `BlockType.WEBHOOK` to `Block`
- Add check to `Block.__init__` to enforce type and shape of webhook event filter
- Add check to `Block.__init__` to enforce `payload` input on webhook blocks
- Add check to `Block.__init__` to disable webhook blocks if `PLATFORM_BASE_URL` is not set
- Add `Webhook` model + CRUD functions in `backend.data.integrations` to represent webhooks created by our system
- Add `IntegrationWebhook` to DB schema + reference `AgentGraphNode.webhook_id`
- Add `set_node_webhook(..)` in `backend.data.graph`
- Add webhook-related endpoints:
- `POST /integrations/{provider}/webhooks/{webhook_id}/ingress` endpoint, to receive webhook payloads, and for all associated nodes create graph executions
- Add `Node.is_triggered_by_event_type(..)` helper method
- `POST /integrations/{provider}/webhooks/{webhook_id}/ping` endpoint, to allow testing a webhook
- Add `WebhookEvent` + pub/sub functions in `backend.data.integrations`
- Add `backend.integrations.webhooks` module, including:
- `graph_lifecycle_hooks`, e.g. `on_graph_activate(..)`, to handle corresponding webhook creation etc.
- Add calls to these hooks in the graph create/update endpoints
- `BaseWebhooksManager` + `GithubWebhooksManager` to handle creating + registering, removing + deregistering, and retrieving existing webhooks, and validating incoming payloads
## Other improvements
- fix(blocks): Allow having an input and output pin with the same name
- fix(blocks): Add tooltip with description in places where block inputs are rendered without `NodeHandle`
- feat(blocks): Allow hiding inputs (e.g. `payload`) with `SchemaField(hidden=True)`
- fix(frontend): Fix `MultiSelector` component styling
- feat(frontend): Add `AlertDialog` UI component
- feat(frontend): Add `NodeMultiSelectInput` component
- feat(backend/data): Add `NodeModel` with `graph_id`, `graph_version`; `GraphModel` with `user_id`
- Add `make_graph_model(..)` helper function in `backend.data.graph`
- refactor(backend/data): Make `RedisEventQueue` generic and move to `backend.data.execution`
- refactor(frontend): Deduplicate & clean up code for different block types in `generateInputHandles(..)` in `CustomNode`
- dx(backend): Add `MissingConfigError`, `NeedConfirmation` exception
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
* fix: hide content except login when not authenticated to prevent errors
* Remove supabase folder from tracking
* Remove supabase folder from Git tracking
* adding git submodule
* adding git submodule
* Discard changes to .gitignore
* only showing AutoGPT logo if user is not present
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
Co-authored-by: Swifty <craigswift13@gmail.com>
Co-authored-by: Toran Bruce Richards <toran.richards@gmail.com>
This PR reduces image size by 4.9GB (93%) and reduces uncached build time from ~7m to ~5m20s.
- Use cache mount to prevent Yarn cache from being included in `yarn install` layer
- Leverage Next.js output tracing to generate minimal application w/ tree-shaken dependencies
- Add non-root user following the Next.js reference Dockerfile
* feat: Add Open Router integration credentials
- Added support for Open Router integration credentials in the Supabase integration credentials store.
- Updated the LLM provider field to include "open_router" as a valid provider option.
- Added Open Router API key field to the backend settings.
- Updated the profile page to display the Open Router integration credentials.
- Updated the credentials input and provider components to include Open Router as a provider option.
- Updated the autogpt-server-api types to include "open_router" as a provider name.
- Updated the LLM provider schema to include "open_router" as a valid provider name.
- Added GEMINI_FLASH_1_5_8B as the first Open Router LLM
* Add type ignore to new llm prompt to match the rest of them.
* Update LlmModel with a selection of new OpenRouter models
* format
- Remove `secrets_dir` and other references to `get_secrets_path()`
- Remove unused `get_config_path()`
Follow-up to #8521, which removed the `secrets` dir but not the references to it.
In #8524, the "llm" credentials provider was replaced. There are still entries with `"provider": "llm"` in the system though, and those break if not migrated.
- SQL migration to fix the obvious ones where we know the provider from `credentials.id`
- Non-SQL migration to fix the rest
In #8524, the "llm" credentials provider was replaced. There are still entries with "provider": "llm" in the system though, and those break if not migrated.
- SQL migration to fix the obvious ones where we know the provider from `credentials.id`
- Non-SQL migration to fix the rest
* fix(backend): Add execution persistence for execution scheduler service
* scheduler REST API cleanup
* Fix to binary
* Adapt UI with new API
* Remove schedule.py
* Remove unused class
* Fix linting
* ci(frontend,backend,classic): update branch from develop to dev
* ci(frontend, infra): enable ci on other tools
* Update classic-autogpt-docker-ci.yml
* fix: don't error if the folder exists
* fix: drop bad test
* Revert "fix: drop bad test"
This reverts commit c478d3cf4c.
* fix: turn off the correct test 👀
* fix: remove more
* Discard changes to .github/workflows/classic-autogpt-ci.yml
* Update classic-autogpt-docker-ci.yml
* Update classic-autogpt-docker-release.yml
* Update classic-autogpts-ci.yml
* Discard changes to .github/workflows/classic-forge-ci.yml
* Discard changes to .github/workflows/classic-autogpts-ci.yml
* Discard changes to .github/workflows/classic-python-checks.yml
* Discard changes to .github/workflows/repo-pr-label.yml
* Discard changes to .github/workflows/platform-backend-ci.yml
* Update classic-benchmark-ci.yml
* Update classic-frontend-ci.yml
Reverts c707ee9 (#8646)
The problem analysis that led to #8646 contained some errors, so the migration removed in the PR doesn't seem to have been the cause of the problem we were hunting. Also, this migration is an essential part of the security improvement that we made 2 weeks ago.
* add: api generator functions and endpoints
* Rebase onto dev, refactor API manager location, remove suspended key revoke, and update API code for Prisma compatibility
* add: key_manager
* reversing changes og poetry.lock
* add: changing hash mexhansim in API Manager
* add: changing hash mexhansim in API Manager
* fixing some simple bugs
* fix linting and adding better error handling
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
* feat(block): Add AIImageGeneratorBlock
This commit adds the AIImageGeneratorBlock class to the backend. The AIImageGeneratorBlock is responsible for generating images using various AI models through a unified interface.
* Remove unsupported inputs and add more styles
* Update autogpt_platform/backend/backend/blocks/ai_image_generator_block.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* run format
* Add test mock
* mock client run
* Refactor AIImageGeneratorBlock to use a separate function for running the client
* Update Credential description
* Rename ModelProvider to ImageGenModel
* Add missing block run function
* fix mock
* .
* Refactor AIImageGeneratorBlock to move run_client function inside class
* Fix broken reference to run client and tidy code.
* Refactor AIImageGeneratorBlock to improve code structure and error handling
* Move client into run client instantiation function.
* Refactor AIImageGeneratorBlock to handle output as FileOutput and improve error handling
* run format
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
- Add condition to hide `credentials` input title in `CustomNode:generateInputHandles`
- Add `title={schema.description}` to `<CredentialsInput>` title element
* Add support for default credentials to unreal block
* Refactor block cost configuration and add new blocks
This commit refactors the block cost configuration file and adds support for new blocks. The changes include:
- Importing the `AIMusicGeneratorBlock`, `JinaEmbeddingBlock`, and `UnrealTextToSpeechBlock` classes
- Updating the `BLOCK_COSTS` dictionary to include costs for the new blocks
These changes enable the usage of the newly introduced blocks.
- Resolves#8635
- fix(frontend): Fix type mismatch of `CredentialsField` schema between frontend and backend
- Fix usages of `credentialsSchema.credentials_provider`
- refactor(backend): Create `CredentialsFieldSchemaExtra` model in backend so it can be mirrored directly in frontend
- Add check to enforce multi-provider `CredentialsField` always has `discriminator`
- dx: Add type checking shortcut `yarn type-check` / `npm run type-check` for frontend
- Change `provider` of default credentials to actual provider names (e.g. `anthropic`), remove `llm` provider
- Add `discriminator` and `discriminator_mapping` to `CredentialsField` that allows to filter credentials input to only allow providers for matching models in `useCredentials` hook (thanks @ntindle for the idea!); e.g. user chooses `GPT4_TURBO` so then only OpenAI credentials are allowed
- Choose credentials automatically and hide credentials input on the node completely if there's only one possible option
- Move `getValue` and `parseKeys` to utils
- Add `ANTHROPIC`, `GROQ` and `OLLAMA` to providers in frontend `types.ts`
- Add `hidden` field to credentials that is used for default system keys to hide them in user profile
- Now `provider` field in `CredentialsField` can accept multiple providers as a list
-----------------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* feat(platform): Add AIMusicGeneratorBlock for music generation
* refactor(platform): Refactor AIMusicGeneratorBlock for improved error handling and logging
* refactor(ui): Refactor ContentRenderer to support audio rendering
* format
* Frontend format and lint
- fix naming of hooks
- fix `pyright` hooks (b0rked by repo restructure)
- fix `forge` path (b0rked by faulty replace-all when the repo was restructured)
- fix `black` hook to work on all Python versions
- add `poetry install` hooks
- add `ruff`, `isort`, `pyright`, `pytest`, and `prisma generate` hooks for `backend/`
- add `ruff` and `pyright` hooks for `autogpt_libs/`
* reseal secrets
* update DB url
* rotate prod db
* rotate prod
* rotate server
* builder valuse
* public env vars in env files
* public env vars in env files
* reseal secrets
* update DB url
* rotate prod db
* rotate prod
* rotate server
* builder valuse
* public env vars in env files
* public env vars in env files
* add pinecone and jina blocks
* udpate based on comments
* backend updates
* frontend updates
* type hint
* more type hints
* another type hint
* update run signature
* shared jina provider
* fix linting
* lockfile
* remove noqa
* remove noqa
* remove vector db folder
* line
* update pincone credentials provider
* fix imports
* formating
* update frontend
* Test (#8425)
* h
* Discard changes to autogpt_platform/backend/poetry.lock
* fix: broken dep
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
* Fix issue where marketplace breaks if no agents are returned
* Fix issue where marketplace breaks if no agents are returned
* Remove supabase folder from tracking
* adding supabase submodule
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
* fix(backend): Fix error pin output not being propagated into the next nodes
* fix(backend): Reverse pyro config refactor
* Revert "fix(backend): Fix error pin output not being propagated into the next nodes"
This reverts commit 2ff50a94ec.
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
* ci with workload identity
* temp update
* update name
* wip
* update auth step
* update provider name
* remove audience
* temp set to false
* update registry naming
* update context
* update login
* revert temp updates
* add prod iam and pool
* add release deploy with approval
* use gha default approval behaviour
* add back in release trigger
* add new line
* add prod migrations
* prod migrations without check
* ci with workload identity
* temp update
* update name
* wip
* update auth step
* update provider name
* remove audience
* temp set to false
* update registry naming
* update context
* update login
* revert temp updates
* add prod iam and pool
* add release deploy with approval
* use gha default approval behaviour
* add back in release trigger
* add new line
* feat(frontend,backend): testing
* feat: testing
* feat(backend): it works for reading email
* feat(backend): more docs on google
* fix(frontend,backend): formatting
* feat(backend): more logigin (i know this should be debug)
* feat(backend): make real the default scopes
* feat(backend): tests and linting
* fix: code review prep
* feat: sheets block
* feat: liniting
* Update route.ts
* Update autogpt_platform/backend/backend/integrations/oauth/google.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* Update autogpt_platform/backend/backend/server/routers/integrations.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* fix: revert opener change
* feat(frontend): add back opener
required to work on mac edge
* feat(frontend): drop typing list import from gmail
* fix: code review comments
* feat: code review changes
* feat: code review changes
* fix(backend): move from asserts to checks so they don't get optimized away in the future
* fix(backend): code review changes
* fix(backend): remove google specific check
* fix: add typing
* fix: only enable google blocks when oauth is configured for google
* fix: errors are real and valid outputs always when output
* fix(backend): add provider detail for debuging scope declines
* Update autogpt_platform/frontend/src/components/integrations/credentials-input.tsx
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* fix(frontend): enhance with comment, typeof error isn't known so this is best way to ensure the stringifyication will work
* feat: code review change requests
* fix: linting
* fix: reduce error catching
* fix: doc messages in code
* fix: check the correct scopes object 😄
* fix: remove double (and not needed) try catch
* fix: lint
* fix: scopes
* feat: handle the default scopes better
* feat: better email objectification
* feat: process attachements
turns out an email doesn't need a body
* fix: lint
* Update google.py
* Update autogpt_platform/backend/backend/data/block.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* fix: quit trying and except failure
* Update autogpt_platform/backend/backend/server/routers/integrations.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* feat: don't allow expired states
* fix: clarify function name and purpose
* feat: code links updates
* feat: additional docs on adding a block
* fix: type hint missing which means the block won't work
* fix: linting
* fix: docs formatting
* Update issues.py
* fix: improve the naming
* fix: formatting
* Update new_blocks.md
* Update new_blocks.md
* feat: better docs on what the args mean
* feat: more details on yield
* Update new_blocks.md
* fix: remove ignore from docs build
* feat: initial migration
* feat: migration tested with supabase-> prisma data location
* add custom migrations and script
* update migration command
* formatting and linting
* updated migration script
* add direct db url
* add find files
* rename
* use binary instead of source
* temp adding supabase
* remove unused functions
* adding missed merge
* fix: commit hash for lock
* ci: fix lint
* fix: minor bugs that prevented connecting and migrating to dbs and auth
* fix: linting
* fix: missed await
* fix(backend): phase one pr updates
* fix: handle error with returning user object from database_manager
* fix: linting
* Address comments
* Make the migration safe
* Update migration doc
* Move misplaced model functions
* Grammar
* Revert lock
* Remove irrelevant changes
* Remove irrelevant changes
* Avoid adding trigger on public schema
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Aarushi <aarushik93@gmail.com>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
* ci: create dependabot
* ci: target the dev branch for dependabot
* ci: group prs
* ci: group updates
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
* Create repo-pr-enforce-base-branch.yml
* fix quotes
* test
* fix github token
* fix trigger and CLI config
* change back trigger because otherwise I can't test it
* fix the fix
* fix repo selection
* fix perms?
* fix quotes and newlines escaping in message
* Update repo-pr-enforce-base-branch.yml
* grrr escape sequences in bash
* test
* clean up
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
* fix(market): agent pagination and search errors
* fix(frontend): search was not paginated
* fix: linting
* feat(market): linting ci
* fix(ci): branch limit name
* feat(platform): List and revoke credentials in user profile (#8207)
Display existing credentials (OAuth and API keys) for all current providers: Google, Github, Notion and allow user to remove them. For providers that support it, we also revoke the tokens through the API: of the providers we currently have, Google and GitHub support it; Notion doesn't.
- Add credentials list and `Delete` button in `/profile`
- Add `revoke_tokens` abstract method to `BaseOAuthHandler` and implement it in each provider
- Revoke OAuth tokens for providers on `DELETE` `/{provider}/credentials/{cred_id}`, and return whether tokens could be revoked
- Update `autogpt-server-api/baseClient.ts:deleteCredentials` with `CredentialsDeleteResponse` return type
Bonus:
- Update `autogpt-server-api/baseClient.ts:_request` to properly handle empty server responses
* fix(backend): Lower the number of node workers to save DB connections (#8331)
Change [graph]×[node] worker limit from 10×5 to 10×3
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* fix(ci,platform): Add dev branch trigger to all ci (#8339)
* update ci for dev
* update classic
* remove duplicate dev
* fix(frontend): Fix styling inconsistencies in input elements (#8337)
- Apply consistent border styling to `Input`, `Select`, and `Textarea`
- Remove `rounded-xl` from node input elements
- Add `whitespace-nowrap` to `CustomNode` header category tags
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
* feat(builder): Use configmap for builder (#8343)
use configmap in builder
* fix(platform,infra): Checkin non secret values (#8344)
checkin non secrets
* security(platform): Add sealed secrets (#8342)
* add sealed secrets
* add encrypted secrets
* remove extra space
* Tf public media buckets (#8324)
* fix(infra): Fix sealed secret names (#8350)
* fix sealed secret names
* fix names and add annotation
* feat(backend): Introduce executors shared DB connection (#8340)
* update health checkendpoint
---------
Co-authored-by: Krzysztof Czerwinski <34861343+kcze@users.noreply.github.com>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Swifty <craigswift13@gmail.com>
Display existing credentials (OAuth and API keys) for all current providers: Google, Github, Notion and allow user to remove them. For providers that support it, we also revoke the tokens through the API: of the providers we currently have, Google and GitHub support it; Notion doesn't.
- Add credentials list and `Delete` button in `/profile`
- Add `revoke_tokens` abstract method to `BaseOAuthHandler` and implement it in each provider
- Revoke OAuth tokens for providers on `DELETE` `/{provider}/credentials/{cred_id}`, and return whether tokens could be revoked
- Update `autogpt-server-api/baseClient.ts:deleteCredentials` with `CredentialsDeleteResponse` return type
Bonus:
- Update `autogpt-server-api/baseClient.ts:_request` to properly handle empty server responses
- ci(frontend): Ensure CI fails if `yarn.lock` is inconsistent with `package.json`
- dx(frontend): Add Prettier check to `lint` script in `package.json`
- dx(frontend): Add `packageManager` to `package.json` for Corepack support
- build(frontend): Use `yarn` consistently in the Dockerfile
- feat(backend/executor): Change credential injection mechanism to acquire credentials from `AgentServer` just before execution
- Also locks the credentials for the duration of the execution
- feat(backend/server): Add thread-safe `IntegrationCredentialsManager` to handle and synchronize credentials-related operations
- feat(libs): Add mutexes to `SupabaseIntegrationCredentialsStore` to ensure thread-safety
Also:
- feat(backend): Added Pydantic model (de)serialization support to `@expose` decorator
Refactorings:
- refactor(backend, libs): Move `KeyedMutex` to `autogpt_libs.utils.synchronize`
- refactor(backend/server): Make `backend.server.integrations` module with `router`, `creds_manager`, and `utils` in it
* feat(backend): logic to disable enums based on python logic
* feat(backend): add behave as setting and clarify its purpose and APP_ENV
APP_ENV is used for not cloud vs local but the application environment such as local/dev/prod so we need BehaveAs as well
* fix(backend): various uses of AppEnvironment without the Enum or incorrectly
AppEnv in the logging library will never be cloud due to the restrictions applied when loading settings in by pydantic settings. This commit fixes this error, however the code path for logging may now be incorrect
* feat(backend): use a metaclass to disable ollama in the cloud environment
* fix: formatting
* fix(backend): typing improvements
* fix(backend): more linting 😭
* feat(frontend,backend): testing
* feat: testing
* feat(backend): it works for reading email
* feat(backend): more docs on google
* fix(frontend,backend): formatting
* feat(backend): more logigin (i know this should be debug)
* feat(backend): make real the default scopes
* feat(backend): tests and linting
* fix: code review prep
* feat: sheets block
* feat: liniting
* Update route.ts
* Update autogpt_platform/backend/backend/integrations/oauth/google.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* Update autogpt_platform/backend/backend/server/routers/integrations.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* fix: revert opener change
* feat(frontend): add back opener
required to work on mac edge
* feat(frontend): drop typing list import from gmail
* fix: code review comments
* feat: code review changes
* feat: code review changes
* fix(backend): move from asserts to checks so they don't get optimized away in the future
* fix(backend): code review changes
* fix(backend): remove google specific check
* fix: add typing
* fix: only enable google blocks when oauth is configured for google
* fix: errors are real and valid outputs always when output
* fix(backend): add provider detail for debuging scope declines
* Update autogpt_platform/frontend/src/components/integrations/credentials-input.tsx
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* fix(frontend): enhance with comment, typeof error isn't known so this is best way to ensure the stringifyication will work
* feat: code review change requests
* fix: linting
* fix: reduce error catching
* fix: doc messages in code
* fix: check the correct scopes object 😄
* fix: remove double (and not needed) try catch
* fix: lint
* fix: scopes
* feat: handle the default scopes better
* feat: better email objectification
* feat: process attachements
turns out an email doesn't need a body
* fix: lint
* Update google.py
* Update autogpt_platform/backend/backend/data/block.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* fix: quit trying and except failure
* Update autogpt_platform/backend/backend/server/routers/integrations.py
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* feat: don't allow expired states
* fix: clarify function name and purpose
* feat: code links updates
* feat: additional docs on adding a block
* fix: type hint missing which means the block won't work
* fix: linting
* fix: docs formatting
* Update issues.py
* fix: improve the naming
* fix: formatting
* Update new_blocks.md
* Update new_blocks.md
* feat: better docs on what the args mean
* feat: more details on yield
* Update new_blocks.md
* fix: remove ignore from docs build
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
* add ideogram ai image gen
* fixed revid secret api key being removed
* fixed auto checks errors
* Add AI Upscale option to IdeogramModelBlock
- Introduced an 'Upscale Image' option in the input schema to allow users to upscale generated images.
- Created the 'UpscaleOption' enum with options 'AI Upscale' and 'No Upscale'.
- Implemented the 'upscale_image' method to download the generated image into RAM and send it to the Ideogram AI upscale API without saving it to disk.
- Updated the 'run' method to handle the upscaling process based on the user's input.
- Ensured that the image processing is done entirely in memory (RAM) without writing to disk.
- Updated test inputs and mocks to reflect the new 'Upscale Image' option.
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
* updates to tutorial
* updates to get user to save
* Update tutorial.ts
* final updates to end of tutorial
* Prettier
* add back data-id for badge within the blocks
* Prettier
* Updated onOpenChange code style
* modifying how handle text is rendered
* Rounding input boxes
* Modifying layout of nodes
* formatting
* update edge start / end positions
* updated handle rendering
* moved outputs down and disabled toggle
* formatting
* update font
* update key name formatting
* modify layout of input items
* updated the add property button
* feat(platform): Sync on new UI design
* simplify UI
* block list add border and remove padding
* add highlight on navbar button
* Change block header so block costs line up correctly
* fix history type issue
* formatting
* tweaking css to hide white spot
* fixed white spot
* Added context menu
* Changed status badge color
* getting error colors just right
* Added a NodeOutputs component for rendering the outputs
* tidy up
* Change Add Item Button Color
* changed cursor on hover in block control panel
* formatting
* updated formatting of tutoral and tally buttons
* fix(platform): Fix text area input not updating input field
* Address comments
* Add missing color
* fix lint errors
* Cleanup context logic
* Make inputref reliable
* Update coloring
* fix(platform): Fix unexpected closing block list on tutorial
* Add X-scrolling
* Remove excessive shadows
* Remove another excessive shadows
* Another patch patch patch
* Add border on context menu
* Cleanup executions
* Cleanup executions
* Makr border darker
* Make border darker
* Fix input reset
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
- refactor(blocks): Assign new IDs to 13 blocks
- Create DB migration to update block IDs in existing DB entities
- feat(frontend): Add `updateBlockIDs` "middleware" to `AgentImportForm` loader in front end
* feat(blocks): Add AIShortformVideoCreatorBlock
- Added a new block called AIShortformVideoCreatorBlock to create shortform videos using revid.ai.
- The block takes input parameters such as script, background music, and voice ID.
- It uses the revid.ai API to create the video and waits for completion using a webhook proxy service.
- Once the video is ready, it returns the URL of the created video.
- This block takes anywhere from 5 seconds to several minutes to complete depending on the length of the video.
Add revid.ai API key to Secrets
- Added a new field in the Secrets class to store the revid.ai API key.
* refactor(blocks): Remove unused webhook code in AIShortformVideoCreatorBlock
* Add background music track options.
* Add preset voice options
* Add generation preset and visual style configuration options.
* Remove "morpher" video type due to long generation times and low quality.
Plus extend timeout cut-off.
* Add audio track configuration options.
* refactor AudioTrack selection into single class
* format
* Add test mocks
* run format
* Added Replicate Flux Blocks
* updated poetry lock file for replicate
* Refactor ReplicateFluxAdvancedModelBlock to use an enum for replicate_model_name rather than free strings.
* Refactor ReplicateFluxAdvancedModelBlock to use an enum for output_format instead of free strings
* Refactor ReplicateFluxAdvancedModelBlock to stop requiring people to type a random seed
* Refactor ReplicateFluxAdvancedModelBlock to stop requiring people to type a random seed
* run format
* poetry run format
* Delete ReplicateFluxBasicModelBlock
* Mark model name as not advanced
* tweak input order
* Fix test
---------
Co-authored-by: Toran Bruce Richards <toran.richards@gmail.com>
* Feat(Builder): Add Google Maps Search Block
* format
* Updates to google maps search block
* fixes
* format + updates again
* fix for pytest
* format again
* updates based on new comments
* fix for format?
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
* feat(platform): Enhance AITextSummarizerBlock with configurable summary style and focus
The AITextSummarizerBlock in the autogpt_platform/backend/backend/blocks/llm.py file has been enhanced to include the following changes:
- Added a new enum class, SummaryStyle, with options for concise, detailed, bullet points, and numbered list styles.
- Added a new input parameter, focus, to specify the topic of the summary.
- Modified the _summarize_chunk method to include the style and focus in the prompt.
- Modified the _combine_summaries method to include the style and focus in the prompt.
These changes allow users to customize the style and focus of the generated summaries, providing more flexibility and control.
* run formatting and linting
## Config
- For Supabase, the back end needs `SUPABASE_URL`, `SUPABASE_SERVICE_ROLE_KEY`, and `SUPABASE_JWT_SECRET`
- For the GitHub integration to work, the back end needs `GITHUB_CLIENT_ID` and `GITHUB_CLIENT_SECRET`
- For integrations OAuth flows to work in local development, the back end needs `FRONTEND_BASE_URL` to generate login URLs with accurate redirect URLs
## REST API
- Tweak output of OAuth `/login` endpoint: add `state_token` separately in response
- Add `POST /integrations/{provider}/credentials` (for API keys)
- Add `DELETE /integrations/{provider}/credentials/{cred_id}`
## Back end
- Add Supabase support to `AppService`
- Add `FRONTEND_BASE_URL` config option, mainly for local development use
### `autogpt_libs.supabase_integration_credentials_store`
- Add `CredentialsType` alias
- Add `.bearer()` helper methods to `APIKeyCredentials` and `OAuth2Credentials`
### Blocks
- Add `CredentialsField(..) -> CredentialsMetaInput`
## Front end
### UI components
- `CredentialsInput` for use on `CustomNode`: allows user to add/select credentials for a service.
- `APIKeyCredentialsModal`: a dialog for creating API keys
- `OAuth2FlowWaitingModal`: a dialog to indicate that the application is waiting for the user to log in to the 3rd party service in the provided pop-up window
- `NodeCredentialsInput`: wrapper for `CredentialsInput` with the "usual" interface of node input components
- New icons: `IconKey`, `IconKeyPlus`, `IconUser`, `IconUserPlus`
### Data model
- `CredentialsProvider`: introduces the app-level `CredentialsProvidersContext`, which acts as an application-wide store and cache for credentials metadata.
- `useCredentials` for use on `CustomNode`: uses `CredentialsProvidersContext` and provides node-specific credential data and provider-specific data/functions
- `/auth/integrations/oauth_callback` route to close the loop to the `CredentialsInput` after a user completes sign-in to the external service
- Add `BlockIOCredentialsSubSchema`
### API client
- Add `isAuthenticated` method
- Add methods for integration OAuth flow: `oAuthLogin`, `oAuthCallback`
- Add CRD methods for credentials: `createAPIKeyCredentials`, `listCredentials`, `getCredentials`, `deleteCredentials`
- Add mirrored types `CredentialsMetaResponse`, `CredentialsMetaInput`, `OAuth2Credentials`, `APIKeyCredentials`
- Add GitHub blocks + "DEVELOPER_TOOLS" category
- Add `**kwargs` to `Block.run(..)` signature to support additional kwargs
- Add support for loading blocks from nested modules (e.g. `blocks/github/issues.py`)
#### Executor
- Add strict support for `credentials` fields on blocks
- Fetch credentials for graph execution and pass them down through to the node execution
* move to supabase pg instance
* remove postgres and bind supabase port
* Updated setup
- Switched db name to postgres to work with prisma studio
- Added platform schema
- Added Market-migartions
- bound prisma studio port
* remove studio port
* updated .env
* updated readmes
---------
Co-authored-by: SwiftyOS <craigswift13@gmail.com>
Restructuring the Repo to make it clear the difference between classic autogpt and the autogpt platform:
* Move the "classic" projects `autogpt`, `forge`, `frontend`, and `benchmark` into a `classic` folder
* Also rename `autogpt` to `original_autogpt` for absolute clarity
* Rename `rnd/` to `autogpt_platform/`
* `rnd/autogpt_builder` -> `autogpt_platform/frontend`
* `rnd/autogpt_server` -> `autogpt_platform/backend`
* Adjust any paths accordingly
* update pr template wording
* add what and how
* Update .github/PULL_REQUEST_TEMPLATE.md
---------
Co-authored-by: Toran Bruce Richards <toran.richards@gmail.com>
- Add two endpoints to OAuth `integrations.py`:
- `GET /integrations/{provider}/credentials` - list all credentials for a provider, without secrets (metadata only)
- `GET /integrations/{provider}/credentials/{cred_id}` - retrieve a set of credentials (including secrets)
- Add `username` property to `Credentials` types
- Add logic to populate `username` in OAuth handlers
- Expand `CredentialsMetaResponse` and remove `credentials_` prefix from properties
- Fix `autogpt_libs` dependency caching issue
- Remove accidentally duplicated OAuth handler files in `autogpt_server/integrations`
* Feat(Builder): Add Runner input and ouput screens
* Fix run button not working
* prettier
* prettier again -- forgot flow
* fix input scaling + auto close on run
* removed "Runner Input" button to make it auto open runner input if input block is + Fixed issue with output not showing in output UI
* replaced runner output icon and added a new icon for it
* replaced IconOutput icon with LogOut from lucide-react
* prettier
* fix type safety issue + add error handling for formatOutput
* Updates based on comments
* prettier for utils
### Background
We need a way to set an execution quota per user for each block execution.
### Changes 🏗️
* Introduced a `UserBlockCredit`, a transaction table tracking the block usage along with it cost/quota.
* The tracking is toggled by `ENABLE_CREDIT` config, default = false.
* Introduced `BLOCK_COSTS` | `GET /blocks/costs` as a source of information for the cost on each block depending on the input configuration.
Improvements:
* Refactor logging in manager.py to always print a prefix and pass the metadata.
* Make executionStatus on AgentNodeExecution prisma enum. And add executionStatus on AgentGraphExecution.
* Use executionStatus from AgentGraphExecution to improve waiting logic on test_manager.py.
- feat(server): Initial draft of OAuth init and exchange endpoints
- Add `supabase` dependency
- Add Supabase credentials to `Secrets`
- Add `get_supabase` utility to `.server.utils`
- Add `.server.integrations` API segment with initial implementations for OAuth init and exchange endpoints
- Move integration OAuth handlers to `autogpt_server.integrations.oauth`
- Change constructor of `SupabaseIntegrationCredentialsStore` to take a Supabase client
- Fix type issues in `GoogleOAuthHandler`
* feat(builder): Add skeleton loading components for Monitor views
Introduce skeleton components for Agents, Flow Runs List, and Flow Runs Status sections to enhance loading state indication. These components help improve user experience by visually outlining content placeholders while data is being fetched.
* feat(builder): Leveraging NextJS's error boundary with error.tsx
Replace the basic error page with a more detailed and interactive error component. The new component includes a retry option, a link to the homepage, and logs the error details to the console. It also aligns with NextJS standards
---------
- Make process/service startup/shutdown messages consistent
- Configure `uvicorn` to use our logging config instead of its own
- Replace `print(..)` statements in ws_api.py with log statements
- Improve log statements in ws_api.py
- Handle JSON-encoding inside `.data.execution.upsert_execution_output(..)` to ensure it is always encoded the same
- Amend `.executor.manager.execute_node(..)` to pass unencoded data into `upsert_execution_output(..)`
- Add SIGTERM handler and `cleanup()` hook to `AppProcess`
- Implement `cleanup()` on `AppService` to close DB and Redis connections
- Implement `cleanup()` on `ExecutionManager` to shut down worker pool
- Add `atexit` and SIGTERM handlers to node executor to close DB connection and shut down node workers
- Improve logging in `.executor.manager`
- Fix shutdown order of `.util.test:SpinTestServer`
- feat(builder): Add "Stop Run" buttons to monitor and builder
- Implement additional state management in `useAgentGraph` hook
- Add "stop" request mechanism
- Implement execution status tracking using WebSockets
- Add `isSaving`, `isRunning`, `isStopping` outputs
- Add `requestStopRun` method
- Rename `requestSaveRun` to `requestSaveAndRun` for clarity
- Add needed functionality for the above to `AutoGPTServerAPI` client
- Add `stopGraphExecution` method
- Add support for multiple handlers per WebSocket method
- Fix parsing of timestamps in `execution_event` WebSocket messages
- Add `IconSquare` from Lucide to `@/components/ui/icons`
- feat(server): Add `POST /graphs/{graph_id}/executions/{graph_exec_id}/stop` route
- Add `stop_graph_run` method to `AgentServer`
- feat(server): Add `cancel_execution` method to `ExecutionManager`
- Replace node executor `ProcessPoolExecutor` by `multiprocessing.Pool` (which has a `terminate()` method)
- Remove now unnecessary `Executor.wait_future(..)` method
- Add `get_graph_execution(..)` in `.data.execution`
- fix(server): Reduce number of node executors to 5 per graph executor
This is necessary because `multiprocessing.Pool` spawns its workers on init, instead of based on demand like `ProcessPoolExecutor` does
- dx(server): Improve debug logging in `ExecutionManager`
- ci(server): Add debug logging mode to CI Pytest step
### Other improvements
Server:
- Improve output type of `ExecutionManager.add_execution(..)`
- Renamed a few things in `.server.rest_api` for consistency
Front end:
- Improved typing in `AutoGPTServerAPI` client
In `autogpt_server.util.lock:KeyedMutex`:
- track number of pending requests for each lock
- only remove a lock from `self.locks` when the number of pending lock requests hits 0
* move migrations, update networking and dockignore
* update docs
* remove sqlite from ci
* remove schema linting checks
* fix formatting
* remove schema linting
* add test script
* formatting and linting
* stop pg not down
* seperate test db
* diff port
* remove duplicate
### **User description**
### Background
The scope of this change is collecting the required information that will be needed for the execution analytics.
### Changes 🏗️
* Add sentry integration.
* Refactor logging_metadata on manager.py.
* Collect graph-level & node-level instrumentation.
* Introduced `stats` column for `AgentNodeExecution` & `AgentGraphExecution`.
- Add `advanced` to `SchemaField` and pass it to `json_extra`
- Add `advanced` to `BlockIOSubSchemaMeta` type
- Update `CustomNode`, so that:
- non-required advanced inputs are hidden
- non-advanced and required inputs are always shown
- Add minimize/maximize button in the corner of modal to make it significantly larger and centered
- Add copy button to copy all text
- Add optional `title` to display as a modal header
- fix type propagation by `AppService.run_and_wait(..)`
- fix type propagation by `@expose` and add note
- fix type propagation by `wait(..)` in `.executor.manager.execute_node(..)`
- fix type propagation by `wait(..)` in `.executor.manager._enqueue_next_nodes(..)`
- remove unnecessary null checks for `.data.graph.get_node(..)`
- fix type issue in `ExecutionScheduler`
- reduce use of `# type: ignore` in `.data.execution`
- reduce usage of `# type: ignore` in `.executor.manager`
- reduce usage of `# type: ignore` in `.server`
- reduce usage of `# type: ignore` in cli.py
- update `pyright` to v1.1.378
* standalone websocket server
* add websocket url
* wip: talk to ws directly
* rename to api server
* dockerfile and queue
* fix paths
* update poetry lock
* helm charts for websockets
* create seperate deployments for websockets and rest server with redis queue for async comms
* delete duplicate queue
* add depends in ws_api
* singleton for conn manager
* update from review
* fix CI
* address feedback
* update readme
* update docker file and add migration step in readm
* ad watch
* add step to copy example env file
* put connect back in
- Update styling and use tailwind more
- Add `react-toast` dependency
- Fix output button not changing checked state on execution
- Make status a badge in node's corner
- Rename `output_data` to `executionResults` and store multiple results with execution UUIDs
- Add `DataTable` component that displays execution outputs
- Outputs can be copied and there's a toast displayed as a feedback
Issue 1:
Input text field cursor keeps moving to the end of the text.
Try to type "Hello World!" into the input text. Then try to type "some string" in the middle of the "Hello" and "World".
Issue 2:
History should only tracks on the input box onBlur/onLeave
Try to type a "longcharacters" and try to undo it, the undo is removing 1 character at a time, polluting the history, and make the undo pretty much unusable.
Issue 3:
KeyValue & ArrayInput is non-undoable.
Try to add key-value or add an entry to the list, it doesn't undo the value, but you need to click as many number of entries being added to make the undo work again
* Feat(Builder): Add first guide tutorial
* added more steps + some fixes
* added local storage to fix starting every time going to build
* update copy & paste to support mac
* small fix
* Prettier fixes
* Added "Skip Tutorial" button to first step
* some fixes based on requests
* revert camelCase change
* add ability to use url to reset tutorial
* prettier
* Added Tutorial button next to tally
* prettier
* change pinBlocksPopover to setPinBlocksPopover
* fixes + update + prettier
* made the resetTutorial url dynamic
* force to /build on reset tutorial
* fix renaming
* prettier
Update ReactFlow to version 12 and split `Flow.tsx` into `useAgentGraph` hook that takes care of agent state and API calls to the server.
- Update ReactFlow to v12 ([migration guide](https://reactflow.dev/learn/troubleshooting/migrate-to-v12))
- Move `setIsAnyModalOpen` to `FlowContext`
- Make `setHardcodedValues` and `setErrors` functions of `CustomNode` and utilize new `updateNodeData` ReactFlow API
- Fix type errors
- `useAgentGraph` hook
- Take care of all API calls, websocket, agent state and logic
- Make saving and execution async and thus more consistent and reliable
- Save&run requests are state
- Wait for node ids to sync with backend reactively
- Queue execution updates
- Memoize functions using `useCallback`
### Background
Currently, there is no way to construct the output of nodes into a composite data structure (list/dict/object) using the builder UI.
The backend already supports this feature by connecting the output pin to the input pin using these format:
* <pin_name>_$_<list_index> for constructing list
* <pin_name>_#_<dict_key> for constructing dict
* <pin_name>_@_<field_name> for constructing object
The scope of this PR is implementing the UX for this in the builder UI.
### Changes 🏗️
<img width="765" alt="image" src="https://github.com/user-attachments/assets/8fc319a4-1350-410f-98cf-24f2aa2bc34b">
This allows you to add more pins in a key value & list input: `_$_` list constructor & `_#_` dict constructor.
### Background
Boolean without default value is a UX problem. It's currently displayed as a toggle and it has no way to describe the `null` value.
So we need to prevent blocks from introducing a nullable boolean.
### Changes 🏗️
Add explicit check to prevent nullable boolean. Fix existing block field that has nullable boolean.
* talking head
* linting
* remove clip id, not needed
* add more descriptive name
* add min requirement to polling attempts and intervals
* add docs and link to docs
* remove extra space
* force new tab
* fix linting
* add did key to .env.template
### Background
We don't have an ordering guarantee on the node execution.
Let's say we have a node that has to execute different data A, B, and C.
The current implementation limits the execution to 1 execution at a time, but there is no guarantee that A, B, and C will be executed in order.
The initial implementation did not have any restrictions, so it used to be A, B, and C executed in parallel
In the current implementation with the per-node constraint, it's A, B, C are executed serially but with no guarantee of ordering.
The scope of this PR is to guarantee that order.
### Changes 🏗️
Guaranteeing the execution per node ordering by avoiding any re-enqueue mechanism. If there are two executions run in the same node, the first one will be executed and the other will block. The blocking mechanism is indeed sub-optimal, the performance improvement can be done later (a follow-up issue will be added).
* feat(builder): checkbox for tos on login page
* feat(builder): submit agent page
DOES NOT WORK
* feat(builder): basic upload (not working)
* feat(builder): submit page more working but still not
* fix(builder): working categories, not dynamic
* feat(builder, server): enable submissions (auth error)
* fix(lint): linting
* feat(builder): submit page terms of service
* fix(builder): update lockfile
* lint(builder): lint marketplace files
- Add static link/connection support on the frontend and display them as dashed lines
- Remove queueing for static connections - there'll always be only one bead waiting at the end
- Make beads slightly larger and further from the end arrow
* Add Advanced Chatbot with History using Discord
* Update Discord Chatbot with History_v145.json
update is_active to false and is_template to true
---------
Co-authored-by: Bently <tomnoon9@gmail.com>
The execution graph is supposed to be typed, but there are cases where generic types like Any were used, and there are cases, where incompatible data passed into the wrong type.
If such a thing happens on runtime, we should do the best-effort conversion instead of breaking the run. E.g.: try to json-stringify the object to str input, or try to parse number in the string to int input, etc.
* Make `userId` required on DB entities `AgentGraph`, `AgentGraphExecution`, and `AgentGraphExecutionSchedule`
* Add SQLite and Postgres migrations to make `userId` required and set `userId` to `3e53486c-cf57-477e-ba2a-cb02dc828e1a` on existing entries without `userId`
* Amend `create_graph` endpoint and `.data.graph`, `.data.execution` methods to handle required `user_id`
* Add `.data.user.DEFAULT_USER_ID` constant to replace hardcoded literals
* refactor(builder): Migrate `FlowEditor` to use ReactFlow's state management system
We have been keeping two copies of node and edge data: one inside ReactFlow and one outside.
It works, but it's accidental and implicit and there is no reason to be using shadow copies rather than a single data source.
- Replace `useNodesState` and `useEdgesState` with `useReactFlow` hook
- Use `addNodes`, `addEdges`, and `deleteElements` where appropriate instead of `setNodes`/`setEdges` to allow use of event hooks
- Consolidate all edge -> node state sync logic into `onEdgesChange` event handler
This replaces `updateNodesOnEdgeChange`, part of `onConnect`, and `onEdgesDelete`.
- Move node deletion logic from `CustomNode` to `FlowEditor:onNodesChange`
* fix(builder): Refactor and fix copy-paste mechanism
- Rename variables for readability
- Use an ID map to correctly set the source and target IDs for the pasted edges
- Move `monitor/page.tsx` to `page.tsx`
- Remove redirect from `/` to `/build`
- Set temporary redirect from `/monitor` to `/` to prevent breaking UX (may be removed after a grace period, e.g. 2024-09-01)
* adding auth to store
* Add ability to submit agents and review them before being added to the market
* Added auth decorator
* Added auth to market api client
* fix(builder): Fix drag-select behavior on `NodeKeyValueInput`
* fix(github): Added in fallback variables for postgres testing (#7715)
Co-authored-by: Leslie Cruz <lelcruz@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
* feat(builder): basic tally feedback form (#7725)
* removed database changes
* moved auth to libs project
* fixed formatting
* cleaned up auth
* Added tests and database migration
* delete decorator
* feat(builder): Add new icons and integrate with ControlPanel
Introduce SVG icons and replace ControlPanel dependencies with new icons. The ControlPanel component now uses the new icon components for improved consistency.
* feat(builder): add additional icon and update icons in NavBar
Introduced the new icon with relevant documentation and examples. Replaced existing icon imports with the newly defined icons in the NavBar component for consistency.
* feat(builder): Add icon for megaphone and replace usage
Introduced the IconMegaphone for reuse across the application. Updated TallyPopup to utilize IconMegaphone instead of the previous Megaphone icon from lucide-react.
* fix(builder): Running prettier to format changed files.
Adjusted various files for consistent code formatting. Ensured proper spacing and alignment of imports, JSX tags, and object properties to enhance readability and maintain coding standards. No functional changes made.
- Amend `AutoGPTServerAPI.sendWebSocketMessage(..)` to automatically (re)connect the websocket if disconnected
- Amend `AutoGPTServerAPI.connectWebSocket()` to prevent race conditions
* adding auth to store
* Added auth decorator
* Added auth to market api client
* removed database changes
* moved auth to libs project
* fixed formatting
* Switched to using fastapi dependencies
* Return a user object
* removed logging of the token
* Added tests
### Background
CurrentDateAndTimeBlock would fail if the test is not complete within 1-second wall-time.
In the case a test started at the second 01:59:59, it becomes flaky.
We can change the test to only assert the type. But this is also a good chance to add more assertion options for Block: a custom function.
### Changes 🏗️
Change assertion for the time block using an additional margin of error.
* Added listing, sorting, filtering and ordering of agents
* feat(market): general upkeep for vscode and small docs
* feat(market): most of search
* fix(market): hinting on the sort was weird + linting
* feat(market): migrations and schema updates
* lint(market): autolint
* feat(market): better search
* feat(market): file download
* feat(market): analytics of downloads
* Added tracking of views
* changed all imports to be fully qualified
* Upgrade sentry sdk
* Added an admin endpoint to submit new agents
* fixes
* Added endpoint that just tracks download
* Starting adding the marketplace page
* Marketplace client
* Create template of the marketplace page
* Updated client
* fix(market): debug port
* feat(market): agents by downloads
* fix(market, builder): hook up frontend and backend
* feat(builder, market): build a "better" market page that loads data
* feat(builder): updated search (working) and page (kinda working)
* feat(builder): add a feature agents ui (not backed yet)
* feat(builder): improve detail page content
* Added run script
* Added pre populate database command
* Add AnalyticsTracker on create agent
* Add download counts for top agents
* Add hb page prometheus metrics
* Added featured agents funcitonality
* renamed endpoint to health
* Adding download flow
* normalised api routes
* update readme
* feat(market) : default featured
* formatting
* revert changes to autogpt and forge
* Updated Readme
* Eerror when creating an agent from a template installed from (#7697)
fix creating graph from template
* Add dockerfile
* z level fix
* Updated env vars
* updated populate url
* formatting
* fixed linting error
* Set defaults
* Allow only next.js dev server
* fixed url
* removed graph reassignment as due to change in master
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
### Background
This change brings the capability to decompose a graph into sub-graphs. The objective of this feature is to allow a user to build a visually modular, and easier-to-understand graph. Also, allowing you to import a graph into your existing graph, without decluttering your existing graph.
This feature will require more implementation on the UI side, to allow the grouping of subgraph to be represented as a node in the builder.
### Changes 🏗️
Introduced a subgraph functionality with the following property:
* Sub-graph is simply a set of nodes that are grouped together, making it representable as a node.
* Sub-graph input & output pins/schema are the `InputBlock` / `OutputBlock` nodes present in the subgraph.
* The previous point implies that connecting two nodes from different sub-graphs, other than input/output nodes, is not allowed.
* Graph can be nested, but defined flatly, e.g.: graph is now only represented by three components: nodes, links, and subgraphs (a set of list of nodes). A nested subgraph is simply connecting a node inside a subgraph into another `InputBlock` node of another subgraph.
* fix(builder): Adding prettier configuration files and to package.
* fix(builder): Running script "format" added to the package.json
* feat(builder): Adding a job to the yaml file. This job will run "format" which leverages prettier.
* feat(builder): Running script "format" and merging master
* feat(builder): Setting configuration to prettier defaults in .prettierrc.json, and adding a requested newline in the .prettierignore
* feat(builder): Updating the CI to not add a job for prettier but instead add a check to verify prettier was run before commiting.
* feat(builder): Confirming CI update fails when user does not run prettier first. Updating with file changes after prettier
* feat(builder): Running prettier write to fix warnings
* fix(builder): Removing .prett
per PR change request
* fix(builder): Running prettier formatter
* fix(builder): Running prettier formatter check found additional files
* fix(builder): Running prettier format
* fix(builder): Removing running "format" command from PR due to a change request.
* fix(builder): Removing running "format" command from PR due to a change request.
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
* feat(Block): Add AdvancedLlmCallBlock
Adds a block for handling advanced LLM calls, enabling messages to be handled within the AutoGPT builder.
* fix linting
* Super early version of the discord bots blocks
* updated to add secrets for token + other fixes
* lint & format
* rename DiscordBot to DiscordReader
* add discord-py
* fix poetry lock
* rm duplicated file
* updated name to add Block to end
* update .env.template to add DISCORD_BOT_TOKEN
* updates to add description Field
* swap channel name and message content + add field description
---------
Co-authored-by: Bently <bently@bentlybro.com>
- Merge `Flow.tsx:CustomNodeData` type definition into `CustomNode.tsx:CustomNodeData`
- Move `lib/types:BlockSchema` type definition into `lib/autogpt-server-api/types` in place of `ObjectSchema`
- Expand and rename `BlockSchema` -> `BlockIOSchema` + `BlockIORootSchema`
- Fix all `BlockIOSchema` related type narrowing checks
- Add warning messages to fallback cases in `NodeInputField` logic
Co-authored-by: Swifty <craigswift13@gmail.com>
* feat(Builder): Implement undo/redo functionality
* updates to work with latest UI
* add CTRL + Z & CTRL + Y support
* fixed undo/redo for inputs in nodes
* fix for deleting node
* fixes to make the undo/redo work better
* small fix
* Updates based on feedback
* add margin right to space out buttons
* added CTRL + SHIFT + Z for redo
This PR adds Supabase Auth (cloud) integration, login and profile UI, configures password login and three OAuth providers: Google, GitHub and Discord.
For `Account` button to show up and ability to login two env vars need to be set in `.env.local`: `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_ANON_KEY`. OAuth providers are by the Supabase and don't require env vars.
Email confirmation (for email/password signup) is disabled because there's limit of 3 emails per hour without custom SMTP server configuration. [Link](https://supabase.com/dashboard/project/adfjtextkuilwuhzdjpf/auth/templates) to configure custom SMTP server and email template.
### Added dependencies:
- "@supabase/ssr": "^0.4.0"
- "@supabase/supabase-js": "^2.45.0"
- "react-icons": "^5.2.1"
### Added pages/routes:
- `app/auth/auth-code-error/page.tsx`: displayed when login using OAuth provider fails
- `app/auth/callback/route.ts`: route accessed when logging in using OAuth provider; it passes session code to Supabase
- `app/auth/confirm/route.ts`: accessed when confirming email, users will be directed here from email they get after signing in.
- `app/error/page.tsx`: Generic error page without explanation (any errors should be visible in the console)
- `app/login/page.tsx` and `app/login/actions.ts`: Login page and related login/signup server actions
- `app/profile/page.tsx`: Profile page, displays email address of the user and button to logout
### Changes
- Update `layout.tsx`: add `Log In` button and make icons consistent. The log in button shows up if user is logged out, avatar is shown when logged in, and if supabase is unavailable nothing shows up.
- Login form is verified using `zod` on the frontend (recommended by shadcn) and in case login fails feedback is displayed. On successful login users are redirected to `/profile`
- Add `PasswordInput` component, [source](https://gist.github.com/mjbalcueva/b21f39a8787e558d4c536bf68e267398)
- Add `SupabaseProvider` with context for Supabase accessed via hook `useSupabase(): { supabase: SupabaseClient | null, isLoading: boolean }`
- Add `useUser` hook to get `{ user, session, isLoading, error }` on the client
- Add `getServerUser`: async function to get `{ user: User | null, error: string | null }` on the server side
- Add `src/middleware.ts` and `client.ts`, `server.ts`, `middleware.ts` in `src/lib/supabase` which are utility functions and middleware to refresh auth token
### Background
We need an explicit block for providing input & output for the graph.
This will later allow us to build a subgraph with pre-declared input & output schema.
This will also allow us to set input for the node in the middle of the graph, and enable a graph to have output values.
### Changes 🏗️
* Add InputBlock & OutputBlock
* Add graph structure validation on the graph execution step that asserts the following property:
- All mandatory input pin, has to be connected or have a default value, except the `InputBlock` node.
- All links have to connect valid nodes, and the sink & source name using the valid block field.
* Feat(Builder): Clear Status and Output upon graph edit
* close output dropdown on graph edit
* make deleting edge clear block outputs
* make it so deleting nodes clears block output
### Background
Migration not being synced has caused issues and CI is not catching this yet.
### Changes 🏗️
* Added schema check in both sqlite & postgres prisma.schema on linting step.
* Introduced `poetry run schema` for syncing prisma.schema + generating migration in both files.
* Set up helm and tf for backend
* update helm charts and settings
* remove example files
* use latest tag
* delay and timeouts for probes
* env based pyro host
* default backend
* linting
* add helm linting in CI
* read from settings
* fix formatting
* update to use config
* Set up helm and tf for backend
* update helm charts and settings
* remove example files
* use latest tag
* delay and timeouts for probes
* env based pyro host
* default backend
* linting
* read from settings
* fix formatting
* update to use config
* fix(builder): Implementing a basic shadCn theme until color palette is decided upon
* feat(builder): Separating NavBar into its own component and providing a standard UI/UX Approach
* feat(builder): Removing old implementation of logo, removing excessive css implementation, updating styles to better support standard desktop views.
* feature(builder): Addition of UI component Sheet from ShadCn for update
### Background
Pyro for API Server is not using Prisma, but still holding a Prisma connection.
The fast-API thread is also holding a Prisma connection, making Prisma connected in two different loop within a single process.
### Changes 🏗️
Disable a Prisma connection on Pyro thread for Server API process.
Fix test flakiness issue due to concurrency issue.
### Background
Input from the input pin is consumed only once. While this is required in most of the use cases, there are some cases where the input can only be produced once, and that input needs to be re-used just like an input default value, that is passively providing input data, without triggering any execution. The scope of this change is providing that functionality in the link level, this property will be called **`static link`** in this system.
### Changes 🏗️
Provides a static link feature with the following behaviours:
* A link can be marked `static` to become a static link.
* Once a node produces an output it will persist the output data and propagate the output to the other nodes through the link, for a static link, instead of making the data queued in the input pin, it will override the default value.
* Any input executions still waiting for the input will be backfilled using this output produced by the static link.
* And any upcoming executions that will use the input will always reuse the output produced by the static link.
See the added test to see the expected usage.
- Add `ajv` dependency to check values against json schema
- Add `errors` and `setErrors` to `CustomNodeData`
- Add `validateNodes` run before executing agent
- Add `*` on labels for required fields
- Add `setNestedProperty` and `removeEmptyStringsAndNulls` utility function
- Fix type signatures of `sendWebSocketMessage(..)`, `onWebSocketMessage(..)`, `runGraph(..)` in `autogpt-server-api/client`
- Add `WebsocketMessageTypeMap`
- Fix type signature of `updateNodesWithExecutionData` in `FlowEditor`
### Background
When multiple executors are executing the same node within the same graph execution, two node executions can read the same queue of input and read the same value—making the data that is supposed to be consumed once, consumed by two executions. The lack of lock & concurrency support for parallel execution within a single graph causes this issue.
Node concurrency also introduces poor UX in the current frontend implementation, when two nodes are executed in parallel, the current UI will not display its parallel execution update, but instead, it shows the updates that override each other. Until the execution observability is improved on the builder UI, this capability will be limited.
### Changes 🏗️
The scope of this change is to solve this issue by:
* Decouple Graph execution & Node execution, each has its own configured process pool.
* Make sure there is only 1 execution per node (we still allow parallel executions on different nodes) in a graph.
* Fixed concurrency issue by adding distributed lock API on agent_server.
* Few cleanups:
- Add more logging with geid & neid prefix on graph/node executions
- Moved execution status update to agent-server for a single source of status update (required by conn-manager/web-socket)
- Configured node parallelism to 10 & graph parallelism to 10 by default, so in the very rare worst-case, there can be 100 node executions.
- Re-use server resource for each integration test run
- Set `node.data.connections` based on `graph.links` in `loadGraph(..)`
- Use reactflow's built-in `useNodesState`, `useEdgesState` to replace some boilerplate functions that do exactly the same
Resolves#7392
* refactor(MathsBlock): Simplify output to return numeric result directly
- Remove MathsResult class and explanation field
- Update Output schema to use float type
- Simplify run method to yield numeric result only
- Adjust error handling to return inf or nan for errors
- Update test cases to reflect new output structure
* run format
* refactor(CounterBlock): Simplify output to return count as integer
- Remove CounterResult class
- Update Output schema to use int type directly
- Simplify run method to yield count without explanation
- Modify error handling to return -1 for any errors
- Update test case to reflect new output structure
* ci(server): add sqlite processing
* ci(server): try setting DATABASE_URL based on db platform
* fix(server): swap default back to sqlite
* ci(server): go back to database url
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
* replace SQLite with Postgres
* dockerfiles and optional docker compose set up
* Update rnd/autogpt_builder/Dockerfile
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* address feedback
* Update .dockerignore
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* Remove example files folder
* remove backend and frontend from docker compose
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
* feat: Add YouTubeTranscriber block for extracting transcripts from YouTube videos
* feat: Add youtube-transcript-api dependency to pyproject.toml
* feat: Add SchemaField and test_mock to YoutTube Transcriber.
* feat: update lock
* fix(server): the agbenchmark was out of date
* fix(server): linting
* fix(server): drop mock
* fix(server): poetry locked in
* fix(server): test had ... at the end?
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Fixes#7508
- Amend `app/configurator.py:check_model(..)` to check multiple models at once and save duplicate API calls
- Amend `MultiProvider.get_available_providers()` to verify availability by fetching models and handle failure
feat: Add support for new Groq models
The commit adds support for new Groq models, including LLAMA3_1_405B, LLAMA3_1_70B, and LLAMA3_1_8B. These models are part of the preview release and offer enhanced reasoning and versatility capabilities.
* feat(blocks): Add MathsBlock for performing mathematical operations
The commit adds a new block called MathsBlock to perform various mathematical operations such as addition, subtraction, multiplication, division, and exponentiation. The block takes input parameters for the operation type, two numbers, and an option to round the result. It returns the result of the calculation along with an explanation of the performed operation.
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
* feat: Add RSSReaderBlock for reading RSS feeds
The commit adds a new `RSSReaderBlock` class in the `rss-reader-block.py` file. This block allows users to read RSS feeds by providing the URL of the feed, start datetime, polling rate, and a flag to run the block continuously. The block fetches the feed using the `feedparser` library and returns the title, link, description, publication date, author, and categories of each RSS item.
This commit also includes the addition of the `feedparser` dependency in the `pyproject.toml` file.
* fix(server): update lock file
* updated poetry lock
* fixed rss reader testing
* Updated error message in test to include check info
* Set starttime as 1 day ago
* Changed start time to time period
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
- Handles:
- Add `NodeHandle` to draw input and output handles
- Position handles relatively
- Make entire handle label clickable/connectable
- Add input/output types below labels
- Change color on hover and when connected
- "Connected" no longer shows up when connected
- Edges:
- Draw edge above node when connecting to the same node
- Add custom `ConnectionLine`; drawn when making a connection
- Add `CustomEdge`; drawn for existing connections
- Add arrow to the edge end
- Colorize depending on type
- Input field modal:
- Select all text when opened
- Disable node dragging
- CSS:
- Remove not needed styling
- Use tailwind classes instead of css for some components
- Minor style changes
- Add shadcn switch
- Change bottom node buttons (for properties and advanced) to switches
- Format code
- fix(builder/monitor): Export `Graph` rather than `GraphMeta`
- Fixes#7557
- refactor(builder): Split up `lib/autogpt_server_api` into multi-file module
- Resolves#7555
- Rename `lib/autogpt_server_api` to `lib/autogpt-server-api`
- Split up `lib/autogpt-server-api` into `/client`, `/types`
- Move `ObjectSchema` from `lib/types` to `lib/autogpt-server-api/types`
- Make definition of `Node['metadata']['position']` independent of `reactflow.XYPosition`
- fix(builder/monitor): Strip secrets from graph on export
- Resolves#7492
- Add `safeCopyGraph` function in `lib/autogpt-server-api/utils`
- Use `safeCopyGraph` to strip secrets from graph on export in `/monitor` > `FlowInfo`
### Background
Input from the input pin is consumed only once, and the default input can always be used. So when you have an input pin overriding the default input, the value will be used only once and the following run will always fall back to the default input. This can mislead the user.
Expected behaviour: the node should NOT RUN, making connected pins only use their connection(s) for sources of data.
### Changes 🏗️
* Make pin connection the mandatory source of input and not falling back to default value.
* Fix the type flakiness on block input & output. Unify the typing for BlockInput & BlockOutput using the right alias to avoid wrong typing.
* Add comment on alias
* automated test on the new behaviour.
- Let `GET /graphs` return `GraphMeta[]` instead of `string[]` (list of IDs)
- Rename `AutoGPTServerAPI` method `listGraphIDs` -> `listGraphs` and adjust return type
- Replace all usages of `Graph` with `GraphMeta` in `/monitor`
- Delete `data.graph:get_graph_ids()`
This commit updates the `CreateMediumPostBlock` class in `create_medium_post.py` to use the secret value for the `author_id` parameter. Previously, it was using the plain value, which caused the value to be sent incorrectly to the API.
* feat: Add CreateMediumPostBlock to create Medium posts
* feat: Add medium_api_key to Secrets class in settings.py
* feat: Update medium post block to work with latest system.
* feat: Add medium_author_id field to Secrets class in settings.py
* run isort
* run black
Builder:
* Add download button to agent info view
- Add download button to `FlowInfo`
- Add `exportAsJSONFile(..)` function to lib/utils.ts
* Add Create button + menu to /monitor page
- Add "Create | v" split button to Agent list
- Add list of templates to Create menu
- Add "Import from file" option + dialog
- Create `AgentImportForm` component
- Install `Form`, `Label`, `Switch` components from shad/cn UI
- Install `Dialog` component from shad/cn
* Support saving/editing Templates
- Add `templateID` query parameter to `/build`
- Use `templateID` query parameter in `AgentImportForm` redirect if imported as template
- Make `FlowEditor` suitable for saving/editing templates
- Add `template` (boolean) parameter to `FlowEditor` component
- Add conditions to all `createGraph` or `updateGraph` calls, to use `createTemplate`/`updateTemplate` if applicable
- Add "Save as Template" button, visible if the graph is new (unsaved)
- Hide "Save & Run Agent" button when editing a template
* Add template endpoints to `AutoGPTServerAPI` client
- Add `listTemplates()`
- Add `getTemplate(id, version?)`
- Add `getTemplateAllVersions(id)`
- Add `createTemplate(templateCreateBody)`
- Add `updateTemplate(id, template)`
* fix inner alignment of `<Input type="file">` elements
Server:
* fix(server): Fix return of `create_graph` for templates
- Add prefix `/api` to `APIRouter` in server.py
- Update API client in Builder
- Update default `AGPT_SERVER_URL` in .env.template
- Update default `baseUrl` in `AutoGPTServerAPI` constructor
* Add minimal implementation of `LlamafileProvider`, a new `ChatModelProvider` for llamafiles. It extends `BaseOpenAIProvider` and only overrides methods that are necessary to get the system to work at a basic level.
* Add support for `mistral-7b-instruct-v0.2`. This is the only model currently supported by `LlamafileProvider` because this is the only model I tested anything with.
* Add instructions to use AutoGPT with llamafile in the docs at `autogpt/setup/index.md`
* Add helper script to get it running quickly at `scripts/llamafile/serve.py`
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
### Background
Add formatter & linter command.
Tools: ruff --> isort --> black --> pyright.
### Changes 🏗️
Introduced:
* `poetry run format`
* `poetry run lint`
`poetry run lint` will be executed on CI.
- Renamed `Schema` to `BlockSchema` and moved to `lib/types.ts`
- Add `SchemaTooltip` component that renders markdown tooltip for node fields
- Add `SecretField` function (which uses `BlockSecret` as value) that replaces `BlockFieldSecret` functionality for models
- Rename `get` to `get_secret_value` to make name clearer and inline with pydantic `Secret` types
- Add shadcn tooltip
- Add `react-markdown` dependency
- Add `SchemaField` that works like Pydantic `Field` but allows to add extra json schema values. This PR adds `placeholder` entry but it could be extended with other data.
- Render `placeholder` inside input fields if available.
- Restyle placeholders so they are visually distinct from user-entered values
### Background
The main scope of this change is enhancing the system capability (by fixing bug, correcting execution behaviour) to allow for creating a graph with a loop, to allow the use case of block auto-generation agent.
### Changes 🏗️
* Main changes: Add block_autogen.py (block auto-generation agent graph example).
* Refactor on test boilerplate: introduced `util/test` for initiating a server, and waiting graph execution.
* Removing unnecessary db lookup and duplicated codes used for sending execution updates on agent executor.
* Removed redundant code on test and cli code.
* Moved block test execution helper into the main code (so blockinstallerblock can use it).
* Eliminate the need of explicitly add a module into the `AVAILABLE_BLOCKS` list, any block class under the `block` folder will be auto-discovered.
* Few patches on the existing blocks.
1. Add graph versioning functionality:
- Add `version`, `isActive` fields in the `AgentGraph` model
- Add `agentGraphVersion` field in related models
- Amend & add API endpoints for graph versioning (see below)
- Amend & add data layer functions (`autogpt_server.data`) to support new operations & data schema
2. Add graph template functionality:
- Add `isTemplate` fields in the `AgentGraph` model
- Add `GraphMeta` model for template/graph metadata
- Add API endpoints for template management (see below)
- Amend & add data layer functions (`autogpt_server.data`) to support new operations & data schema
3. Enhance graph creation:
- Amended `create_graph` route to handle template-based graph creation
4. Code refactoring:
- Improved import statements
- Enhanced error handling in graph creation
5. Minor improvements:
- Add validator to auto-assign `Graph.id` if not set
## API Changes
New endpoints:
- `GET /templates`: Retrieve all templates (metadata only)
- `POST /templates`: Create a new template
- `PUT /graphs/{graph_id}`: Create a new version of a graph
- `GET /templates/{graph_id}`: Get a specific template
- `PUT /templates/{graph_id}`: Create a new version of a graph template
- `GET /graphs/{graph_id}/versions`: Get all versions of a graph
- `GET /templates/{graph_id}/versions`: Get all versions of a graph template
- `GET /graphs/{graph_id}/versions/{version}`: Get a specific graph version
- `PUT /graphs/{graph_id}/versions/active`: Set active graph version
Modified endpoints:
- `POST /graphs`: Now supports creating graphs directly from templates
- `GET /graphs/{graph_id}`: Add `version` query parameter
- `GET /graphs/{graph_id}/executions`: Add `graph_version` query parameters
## UI changes
- Improve `/build` / `FlowEditor` save mechanism
- Implement updating current agent instead of creating a new agent on every save
- Add check to only save a new version if local graph has been edited
- Add `deepEquals` function to lib/utils.ts
- Add version indicators and selector on `/monitor`

- Add shad/cn `DropdownMenu` component
- Update `AutoGPTServerAPI` client
- Update input/output types with added attributes (see above)
- Add parameter `version` to `getFlow`
- Add parameter `flowVersion?` to `listFlowRunIDs`
- Add endpoint `updateFlow(flowID, FlowUpdateable)`
- Add endpoint `createFlow(fromTemplateID, templateVersion)` (overload)
- Add endpoint `getFlowAllVersions(id)`
- Add endpoint `setFlowActiveVersion(flowID, version)`
This commit adds support for the following models:
```python
# OpenAI Models
GPT4O = "gpt-4o"
GPT4_TURBO = "gpt-4-turbo"
GPT3_5_TURBO = "gpt-3.5-turbo"
# Anthropic models
CLAUDE_3_5_SONNET = "claude-3-5-sonnet-20240620"
CLAUDE_3_HAIKU = "claude-3-haiku-20240307"
# Groq models
LLAMA3_8B = "llama3-8b-8192"
LLAMA3_70B = "llama3-70b-8192"
MIXTRAL_8X7B = "mixtral-8x7b-32768"
GEMMA_7B = "gemma-7b-it"
GEMMA2_9B = "gemma2-9b-it"
```
Every model has been tested with a single LLM block and is confirmed to be working in that setup.
- Add `autogpt` and `forge` dependency to the `autogpt_server`
- Add `AutoGPTAgentBlock` that initializes and runs a single agent loop on execution
- Add `BlockAgent` that inherits from `autogpt` `Agent` and is a thin extension on the agent that allows to disable components
- Add `OutputComponent` that adds `output` command for the agent
- Improve responsive grid layout
- Remove `container` class from `<main>` to utilize full screen width
- Improve detail views & add view for run details
- Make flow run list entries selectable
- Create `FlowInfo` and `FlowRunInfo` components
- Improve layout of `FlowRunsStats`
- Improve ScrollableLegend spacing & styling
- Hide scroll bar of scrollable legend
- Center legend items if there is space left
- Round icons
- Vertically align icons with labels
- FIX: Add condition to not display legend items for series with `legendType="none"`
- Add periodic 5s refresh of non-terminal flow run statuses
- Split off `refreshFlowRuns(flowID)` from `fetchFlowsAndRuns()`
- Add effect to run `refreshFlowRuns` every 5 seconds
- Improve and expand FlowRun info
- Add `FlowRun.totalRunTime`: sum of the individual execution durations of all nodes
- Add `FlowRun.endTime`
- Use `NodeExecutionResult.add_time` instead of `start_time` as `FlowRun.startTime`
- Sort Flows by last executed
- Add icons to navbar items & hide unused items Backtrack and Explore
- Change UI mentions of "(Agent) Flow" to "Agent"
### Background
Credentials for blocks could only be defined through the block input. The scope of this change is providing system-wide that becomes the default value for these input blocks.
### Changes 🏗️
* Add system-wide credential support for agent blocks `BlockFieldSecret`.
* Update llmcall & reddit block to adopt `BlockFieldSecret`.
* reverts dark theme for now
* change "Show/Hide nodes" button to be "Icon"
* swap over to light mode + fix sizing
* fix color for agent name + description text
* Change navbar to white
* Added darkmode tag for the navbar
* Added dark mode text color
* Changed to tailwind classes
---------
Co-authored-by: Bentlybro <tomnoon9@gmail.com>
* reverts dark theme for now
* change "Show/Hide nodes" button to be "Icon"
* swap over to light mode + fix sizing
* fix color for agent name + description text
* Change navbar to white
* Added darkmode tag for the navbar
* Added dark mode text color
---------
Co-authored-by: Bentlybro <tomnoon9@gmail.com>
* reverts dark theme for now
* change "Show/Hide nodes" button to be "Icon"
* swap over to light mode + fix sizing
* fix color for agent name + description text
* update icon
Sample test input and output on the block can serve as documentation and auto-generated unit-testing code for the agent block.
What's within the scope of this change:
Adding the fields for block test (input, output, mocks), and its execution.
What's still outside the scope:
Handling of mock and stub for a block using sensitive credentials or network calls or 3rd-party connections.
* Refactor on the link structure and API
* Refactor on the link structure and API
* Cleanup IDS
* Remove run_id
* Update block interface
* Added websockets dependency
* Adding routes
* Adding in websocket code
* Added cli to test the websocket
* Added an outline of the message formats I plan on using
* Added webscoket message types
* Updated poetry lock
* Adding subscription logic
* Updating subscription mechanisms
* update cli
* Send updates to server
* Get single execution data
* Fix type hints and renamed function
* add callback function and type hints
* fix type hints
* Updated manager to use property
* Added in websocket updates
* Added connection manager tests
* Added tests for ws_api
* trying to work around process issues
* test formatting
* Added a create and execute command for the cli
* Updated send format
* websockets command working
* cli update
* Added model.py
* feat: Update server.py and manager.py
- Initialize blocks in AgentServer lifespan context
- Remove unnecessary await in AgentServer get_graph_blocks
- Fix type hinting in manager.py
- Validate input data in validate_exec function
* fix tests
* feat: Add autogpt_server.blocks.sample and autogpt_server.blocks.text modules
This commit adds the `autogpt_server.blocks.sample` and `autogpt_server.blocks.text` modules to the project. These modules contain blocks that are used in the execution of the Autogpt server. The `ParrotBlock` and `PrintingBlock` classes are imported from `autogpt_server.blocks.sample`, while the `TextFormatterBlock` class is imported from `autogpt_server.blocks.text`. This addition enhances the functionality of the server by providing additional blocks for text processing and sample operations.
* fixed circular import issue
* Update readme
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
* feat(autogpt_builder): Add `AutoGPTServerAPI` client
* migrate API calls in Flow.tsx to new API client
* feat(autogpt_server): Add `/graphs/{graph_id}/executions` endpoint
In `data/execution.py`:
- Add `list_executions` function
- Rename `get_executions` to `get_execution_results`
In `server/server.py`:
- Add route
- Add `AgentServer.list_graph_runs`
- Rename `AgentServer.get_executions` to `get_run_execution_results`
* feat(autogpt_builder): Add `listFlowRunIDs` endpoint to `AutoGPTServerAPI` client
* Move `Schema` to `types.ts` and rename to `ObjectSchema`
* feat(rnd): Add type hint and strong pydantic type validation for block input/output + add reddit agent-blocks.
* feat(rnd): Add type hint and strong pydantic type validation for block input/output + add reddit agent-blocks.
* Fix reddit block
* Fix serialization
* Eliminate deprecated class property
* Remove RedditCredentialsBlock
* Cache jsonschema computation, add dictionary construction
* Add dict_split and list_split to output, add more blocks
* Add objc_split for completeness, int both input and output
* Update reddit block
* Add reddit test (untested)
* Resolved json issue on pydantic
* Add creds check on client
* Add dict <--> pydantic object flexibility
* Fix error retry
* Skip reddit test
* Code cleanup
* Chang prompt
* Make this work
* Fix linting
* Hide input_links and output_links from Node
* Add docs
* updating UI to handle deeply nested data structures for reddit usecase
* changing expected key in reddit post to comment
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
* feat(rnd): Add type hint and strong pydantic type validation for block input/output + add reddit agent-blocks.
* feat(rnd): Add type hint and strong pydantic type validation for block input/output + add reddit agent-blocks.
* Fix reddit block
* Fix serialization
* Eliminate deprecated class property
* Remove RedditCredentialsBlock
* Cache jsonschema computation, add dictionary construction
* Add dict_split and list_split to output, add more blocks
* Add objc_split for completeness, int both input and output
* Update reddit block
* Add reddit test (untested)
* Resolved json issue on pydantic
* Add creds check on client
* Add dict <--> pydantic object flexibility
* Fix error retry
* Skip reddit test
* Code cleanup
* Chang prompt
* Make this work
* Fix linting
* Hide input_links and output_links from Node
* Add docs
---------
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
- Add `google-api-python-client-stubs` dev dependency
- Add version specification to `google-api-python-client` dependency
- Fix type error (by ignoring it) in forge/components/web/search.py
Update Pydantic dependency of `autogpt`, `forge` and `benchmark` to `^2.7`
[Pydantic Migration Guide](https://docs.pydantic.dev/2.7/migration/)
- Migrate usages of now-deprecated functions to their replacements
- Update `Field` definitions
- Ellipsis `...` for required fields is deprecated
- `Field` no longer supports extra `kwargs`, replace use of this feature with field metadata
- Replace `Config` class for specifying model configuration with `model_config = ConfigDict(..)`
- Removed `ModelContainer` in `BaseAgent`, component configuration dict is now directly serialized using Pydantic v2 helper functions
- Forked `agent-protocol` and updated `packages/client/python` for Pydantic v2 support: https://github.com/Significant-Gravitas/agent-protocol
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
- Implement message based history in `ActionHistoryComponent`
- Make non-summarized message count configurable (`ActionHistoryComponent.full_message_count`)
- Run `ActionHistoryComponent` after `SystemComponent` so that history messages are last in the prompt
- Omit final instruction message if prompt already contains assistant messages
- Filter `raw_message` from `ActionProposal.schema()`
---------
Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com>
* Create optional `build` dependency group
* Move `cx-freeze` dependency to `build` dependency group
To include the `build` group when installing dependencies, run `poetry install --with=build`.
Fixes#7297 (`cx-freeze` dependency install fails after #7271)
On AgentServer, To create a Block like StringFormatterBlock or LllmCallBlock, we need some way to dynamically link input pins and aggregate them into a single list input. This will give a better experience for the user to construct an input and link it from the output of the other nodes. The scope of this change is adding support for that in the least intrusive way.
Proposal
To differentiate the input list name and its singular entry we are using the $_<index> prefix. For example:
For the input items: list[int], you can set a pin items with values like [1,2,3,4]. But you can also add input pins like items_$_0 or items_$_4 with values 1 or 2, which will be appended to the items input in alphabetical order.
The execution engine will guarantee to wait for the execution until all the input pin value is produced, so input pin with list input will produce fix-sized list.
* Getting started with nextjs
* fix linting
* remove gitignore for package.json
* pulling in reactflow components
* updating css
* use environment variables
* clean up css / ui a lil
* Fixed nodes/run button animation
so they are always visible
---------
Co-authored-by: Bentlybro <tomnoon9@gmail.com>
### Background
The current implementation of AgentServer doesn't allow for a single pin to be connected to multiple nodes, this will be problematic when you have a single output node that needs to be propagated into many nodes. Or multiple nodes that possibly feed the data into a single pin (first come first serve).
This infra change is also part of the preparation for changing the `block` interface to return a stream of output instead of a single output. Treating blocks as streams requires this capability.
### Changes 🏗️
* Update block run interface from returning `(output_name, output_data)` to `Generator[(output_name, output_data)]`
* Removed `agent` term in the API, replace it with `graph` for consistency.
* Reintroduced `AgentNodeExecutionInputOutput`. `AgentNodeExecution` input & output will be a list of `AgentNodeExecutionInputOutput` which describes the input & output data of its execution. Making an execution has 1-many relation to its input output data.
* Propagating the relation and block interface change into the execution engine.
### Background
Agent execution should be able to be triggered in a recurring manner.
This PR introduced an ExecutionScheduling service, a process responsible for managing the execution schedule and triggering its execution based on a predefined cron expression.
### Changes 🏗️
* Added `scheduler.py` / `ExecutionScheduler` implementation.
* Added scheduler test.
* Added `AgentExecutionSchedule` table and its logical model & prisma queries.
* Moved `add_execution` from API server to `execution_manager`
### Background
This PR adds support on IPC on autogpt_server.
To make this happen, there are a couple of refactoring efforts being made (will be described in the `Changes` section).
Currently, there are three independent processes:
```
AgentServer ----> ExecutionManager
|
--> ExecutionScheduler
```
### Changes 🏗️
* Added Pyro5 for IPC support.
* Introduced `AppService`: a class to construct an independent process that can expose a method to other running processes (this is analogous to a microservice).
* Introduced `AppProcess`: used by `AppService` a class for creating a child process that can be executed in the background.
* Adapting existing codebase to user `AppService`.
Remove many env vars and use component-level configuration that could be loaded from file instead.
### Changed
- `BaseAgent` provides `serialize_configs` and `deserialize_configs` that can save and load all component configuration as json `str`. Deserialized components/values overwrite existing values, so not all values need to be present in the serialized config.
- Decoupled `forge/content_processing/text.py` from `Config`
- Kept `execute_local_commands` in `Config` because it's needed to know if OS info should be included in the prompt
- Updated docs to reflect changes
- Renamed `Config` to `AppConfig`
### Added
- Added `ConfigurableComponent` class for components and following configs:
- `ActionHistoryConfiguration`
- `CodeExecutorConfiguration`
- `FileManagerConfiguration` - now file manager allows to have multiple agents using the same workspace
- `GitOperationsConfiguration`
- `ImageGeneratorConfiguration`
- `WebSearchConfiguration`
- `WebSeleniumConfiguration`
- `BaseConfig` in `forge` and moved `Config` (now inherits from `BaseConfig`) back to `autogpt`
- Required `config_class` attribute for the `ConfigurableComponent` class that should be set to configuration class for a component
`--component-config-file` CLI option and `COMPONENT_CONFIG_FILE` env var and field in `Config`. This option allows to load configuration from a specific file, CLI option takes precedence over env var.
- Added comments to config models
### Removed
- Unused `change_agent_id` method from `FileManagerComponent`
- Unused `allow_downloads` from `Config` and CLI options (it should be in web component config if needed)
- CLI option `--browser-name` (the option is inside `WebSeleniumConfiguration`)
- Unused `workspace_directory` from CLI options
- No longer needed variables from `Config` and docs
- Unused fields from `Config`: `image_size`, `audio_to_text_provider`, `huggingface_audio_to_text_model`
- Removed `files` and `workspace` class attributes from `FileManagerComponent`
When an agent is resumed from a mid-cycle state (having made a proposal but not executed it yet), we need to use the previously determined `current_episode.action` proposal instead of calling `agent.propose_action()` again.
* Rename `assert_config_has_openai_api_key` to `assert_config_has_required_llm_api_keys`
* Make OpenAI credential check conditional (only if an OpenAI model is selected in the config)
* Implement checks for Groq and Anthropic credentials
* Use API calls for Groq and OpenAI credential checks to make sure the keys are valid
If you are using AutoGPT with `SMART_LLM=gpt-3.5-turbo`, your problems may be caused by
the [limitations](https://github.com/Significant-Gravitas/AutoGPT/issues?q=is%3Aissue+label%3A%22AI+model+limitation%22) of GPT-3.5.
options:
- GPT-3.5
- GPT-4
- GPT-4(32k)
- Azure
- Groq
- Anthropic
- Llamafile
- Other (detail in issue)
validations:
required:true
@@ -126,6 +128,13 @@ body:
label:Specify the area
description:Please specify the area you think is best related to the issue.
- type:input
attributes:
label:What commit or version are you using?
description:It is helpful for us to reproduce to know what version of the software you were using when this happened. Please run `git log -n 1 --pretty=format:"%H"` to output the full commit hash.
echo "Running the following command: poetry run agbenchmark --mock --category=coding"
poetry run agbenchmark --mock --category=coding
echo "Running the following command: poetry run agbenchmark --test=WriteFile"
poetry run agbenchmark --test=WriteFile
# echo "Running the following command: poetry run agbenchmark --test=WriteFile"
# poetry run agbenchmark --test=WriteFile
cd ../benchmark
poetry install
echo "Adding the BUILD_SKILL_TREE environment variable. This will attempt to add new elements in the skill tree. If new elements are added, the CI fails because they should have been pushed"
# required to fetch internal or private CodeQL packs
packages:read
# only required for workflows in private repositories
actions:read
contents:read
strategy:
fail-fast:false
matrix:
include:
- language:typescript
build-mode:none
- language:python
build-mode:none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name:Checkout repository
uses:actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name:Initialize CodeQL
uses:github/codeql-action/init@v3
with:
languages:${{ matrix.language }}
build-mode:${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
config:|
paths-ignore:
- classic/frontend/build/**
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if:matrix.build-mode == 'manual'
shell:bash
run:|
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
All contributions to [the autogpt_platform folder](https://github.com/Significant-Gravitas/AutoGPT/blob/master/autogpt_platform) will be under our [Contribution License Agreement](https://github.com/Significant-Gravitas/AutoGPT/blob/master/autogpt_platform/Contributor%20License%20Agreement%20(CLA).md). By making a pull request contributing to this folder, you agree to the terms of our CLA for your contribution. All contributions to other folders will be under the MIT license.
## In short
1. Avoid duplicate work, issues, PRs etc.
2. We encourage you to collaborate with fellow community members on some of our bigger
[todo's][roadmap]!
* We highly recommend to post your idea and discuss it in the [dev channel].
4. Create a draft PR when starting work on bigger changes.
3.Please also consider contributing something other than code; see the
[contribution guide] for options.
3. Create a draft PR when starting work on bigger changes.
4.Adhere to the [Code Guidelines]
5. Clearly explain your changes when submitting a PR.
6. Don't submit broken code: test/validate your changes.
7. Avoid making unnecessary changes, especially if they're purely based on your personal
preferences. Doing so is the maintainers' job. ;-)
8. Please also consider contributing something other than code; see the
All portions of this repository are under one of two licenses. The majority of the AutoGPT repository is under the MIT License below. The autogpt_platform folder is under the
Polyform Shield License.
MIT License
Copyright (c) 2023 Toran Bruce Richards
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
**AutoGPT** is a generalist LLM based AI agent that can autonomously accomplish minor tasks.
**AutoGPT** is a powerful platform that allows you to create, deploy, and manage continuous AI agents that automate complex workflows.
**Examples**:
## Hosting Options
- Download to self-host
- [Join the Waitlist](https://bit.ly/3ZDijAI) for the cloud-hosted beta
- Look up and summarize this research paper
- Write a marketing for food supplements
- Write a blog post detailing the news in AI
## How to Setup for Self-Hosting
> [!NOTE]
> Setting up and hosting the AutoGPT Platform yourself is a technical process.
> If you'd rather something that just works, we recommend [joining the waitlist](https://bit.ly/3ZDijAI) for the cloud-hosted beta.
### System Requirements
Before proceeding with the installation, ensure your system meets the following requirements:
#### Hardware Requirements
- CPU: 4+ cores recommended
- RAM: Minimum 8GB, 16GB recommended
- Storage: At least 10GB of free space
#### Software Requirements
- Operating Systems:
- Linux (Ubuntu 20.04 or newer recommended)
- macOS (10.15 or newer)
- Windows 10/11 with WSL2
- Required Software (with minimum versions):
- Docker Engine (20.10.0 or newer)
- Docker Compose (2.0.0 or newer)
- Git (2.30 or newer)
- Node.js (16.x or newer)
- npm (8.x or newer)
- VSCode (1.60 or newer) or any modern code editor
#### Network Requirements
- Stable internet connection
- Access to required ports (will be configured in Docker)
- Ability to make outbound HTTPS connections
### Updated Setup Instructions:
We've moved to a fully maintained and regularly updated documentation site.
👉 [Follow the official self-hosting guide here](https://docs.agpt.co/platform/getting-started/)
This tutorial assumes you have Docker, VSCode, git and npm installed.
### 🧱 AutoGPT Frontend
The AutoGPT frontend is where users interact with our powerful AI automation platform. It offers multiple ways to engage with and leverage our AI agents. This is the interface where you'll bring your AI automation ideas to life:
**Agent Builder:** For those who want to customize, our intuitive, low-code interface allows you to design and configure your own AI agents.
**Workflow Management:** Build, modify, and optimize your automation workflows with ease. You build your agent by connecting blocks, where each block performs a single action.
**Deployment Controls:** Manage the lifecycle of your agents, from testing to production.
**Ready-to-Use Agents:** Don't want to build? Simply select from our library of pre-configured agents and put them to work immediately.
**Agent Interaction:** Whether you've built your own or are using pre-configured agents, easily run and interact with them through our user-friendly interface.
**Monitoring and Analytics:** Keep track of your agents' performance and gain insights to continually improve your automation processes.
[Read this guide](https://docs.agpt.co/platform/new_blocks/) to learn how to build your own custom blocks.
### 💽 AutoGPT Server
The AutoGPT Server is the powerhouse of our platform This is where your agents run. Once deployed, agents can be triggered by external sources and can operate continuously. It contains all the essential components that make AutoGPT run smoothly.
**Source Code:** The core logic that drives our agents and automation processes.
**Infrastructure:** Robust systems that ensure reliable and scalable performance.
**Marketplace:** A comprehensive marketplace where you can find and deploy a wide range of pre-built agents.
### 🐙 Example Agents
Here are two examples of what you can do with AutoGPT:
1.**Generate Viral Videos from Trending Topics**
- This agent reads topics on Reddit.
- It identifies trending topics.
- It then automatically creates a short-form video based on the content.
2.**Identify Top Quotes from Videos for Social Media**
- This agent subscribes to your YouTube channel.
- When you post a new video, it transcribes it.
- It uses AI to identify the most impactful quotes to generate a summary.
- Then, it writes a post to automatically publish to your social media.
These examples show just a glimpse of what you can achieve with AutoGPT! You can create customized workflows to build agents for any use case.
---
### Mission and Licencing
Our mission is to provide the tools, so that you can focus on what matters:
- 🏗️ **Building** - Lay the foundation for something amazing.
@@ -23,19 +108,29 @@ Be part of the revolution! **AutoGPT** is here to stay, at the forefront of AI i
**📖 [Documentation](https://docs.agpt.co)**
 | 
**🚀 [Contributing](CONTRIBUTING.md)**
 | 
**🛠️ [Build your own Agent - Quickstart](QUICKSTART.md)**
## 🧱 Building blocks
**Licensing:**
MIT License: The majority of the AutoGPT repository is under the MIT License.
Polyform Shield License: This license applies to the autogpt_platform folder.
For more information, see https://agpt.co/blog/introducing-the-autogpt-platform
---
## 🤖 AutoGPT Classic
> Below is information about the classic version of AutoGPT.
**🛠️ [Build your own Agent - Quickstart](classic/FORGE-QUICKSTART.md)**
### 🏗️ Forge
**Forge your own agent!** – Forge is a ready-to-go template for your agent application. All the boilerplate code is already handled, letting you channel all your creativity into the things that set *your* agent apart. All tutorials are located [here](https://medium.com/@aiedge/autogpt-forge-e3de53cc58ec). Components from the [`forge.sdk`](/forge/forge/sdk) can also be used individually to speed up development and reduce boilerplate in your agent project.
**Forge your own agent!** – Forge is a ready-to-go toolkit to build your own agent application. It handles most of the boilerplate code, letting you channel all your creativity into the things that set *your* agent apart. All tutorials are located [here](https://medium.com/@aiedge/autogpt-forge-e3de53cc58ec). Components from [`forge`](/classic/forge/) can also be used individually to speed up development and reduce boilerplate in your agent project.
🚀 [**Getting Started with Forge**](https://github.com/Significant-Gravitas/AutoGPT/blob/master/forge/tutorials/001_getting_started.md) –
🚀 [**Getting Started with Forge**](https://github.com/Significant-Gravitas/AutoGPT/blob/master/classic/forge/tutorials/001_getting_started.md) –
This guide will walk you through the process of creating your own agent and using the benchmark and user interface.
📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/tree/master/forge) about Forge
📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/forge) about Forge
### 🎯 Benchmark
@@ -45,7 +140,7 @@ This guide will walk you through the process of creating your own agent and usin
📦 [`agbenchmark`](https://pypi.org/project/agbenchmark/) on Pypi
 | 
📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/blob/master/benchmark) about the Benchmark
📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/benchmark) about the Benchmark
### 💻 UI
@@ -55,7 +150,7 @@ This guide will walk you through the process of creating your own agent and usin
The frontend works out-of-the-box with all agents in the repo. Just use the [CLI] to run your agent of choice!
📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/tree/master/frontend) about the Frontend
📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/frontend) about the Frontend
### ⌨️ CLI
@@ -84,7 +179,7 @@ Just clone the repo, install dependencies with `./run setup`, and you should be
[](https://discord.gg/autogpt)
To report a bug or request a feature, create a [GitHub Issue](https://github.com/Significant-Gravitas/AutoGPT/issues/new/choose). Please ensure someone else hasn’t created an issue for the same topic.
To report a bug or request a feature, create a [GitHub Issue](https://github.com/Significant-Gravitas/AutoGPT/issues/new/choose). Please ensure someone else hasn't created an issue for the same topic.
## 🤝 Sister projects
@@ -94,6 +189,8 @@ To maintain a uniform standard and ensure seamless compatibility with many curre
- [**Reporting a Vulnerability**](#reporting-a-vulnerability)
## Reporting Security Issues
## Using AutoGPT Securely
We take the security of our project seriously. If you believe you have found a security vulnerability, please report it to us privately. **Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.**
### Restrict Workspace
> **Important Note**: Any code within the `classic/` folder is considered legacy, unsupported, and out of scope for security reports. We will not address security vulnerabilities in this deprecated code.
Since agents can read and write files, it is important to keep them restricted to a specific workspace. This happens by default *unless* RESTRICT_TO_WORKSPACE is set to False.
<!--- [Huntr.dev](https://huntr.com/repos/significant-gravitas/autogpt) - where you may be eligible for a bounty-->
Disabling RESTRICT_TO_WORKSPACE can increase security risks. However, if you still need to disable it, consider running AutoGPT inside a [sandbox](https://developers.google.com/code-sandboxing), to mitigate some of these risks.
### Reporting Process
1.**Submit Report**: Use one of the above channels to submit your report
2.**Response Time**: Our team will acknowledge receipt of your report within 14 business days.
3.**Collaboration**: We will collaborate with you to understand and validate the issue
4.**Resolution**: We will work on a fix and coordinate the release process
### Untrusted inputs
### Disclosure Policy
- Please provide detailed reports with reproducible steps
- Include the version/commit hash where you discovered the vulnerability
- Allow us a 90-day security fix window before any public disclosure
- After patch is released, allow 30 days for users to update before public disclosure (for a total of 120 days max between update time and fix time)
- Share any potential mitigations or workarounds if known
When handling untrusted inputs, it's crucial to isolate the execution and carefully pre-process inputs to mitigate script injection risks.
## Supported Versions
Only the following versions are eligible for security updates:
For maximum security when handling untrusted inputs, you may need to employ the following:
| Version | Supported |
|---------|-----------|
| Latest release on master branch | ✅ |
| Development commits (pre-master) | ✅ |
| Classic folder (deprecated) | ❌ |
| All other versions | ❌ |
* Sandboxing: Isolate the process.
* Updates: Keep your libraries (including AutoGPT) updated with the latest security patches.
* Input Sanitation: Before feeding data to the model, sanitize inputs rigorously. This involves techniques such as:
* Validation: Enforce strict rules on allowed characters and data types.
* Filtering: Remove potentially malicious scripts or code fragments.
* Encoding: Convert special characters into safe representations.
* Verification: Run tooling that identifies potential script injections (e.g. [models that detect prompt injection attempts](https://python.langchain.com/docs/guides/safety/hugging_face_prompt_injection)).
## Security Best Practices
When using this project:
1. Always use the latest stable version
2. Review security advisories before updating
3. Follow our security documentation and guidelines
4. Keep your dependencies up to date
5. Do not use code from the `classic/` folder as it is deprecated and unsupported
### Data privacy
## Past Security Advisories
For a list of past security advisories, please visit our [Security Advisory Page](https://github.com/Significant-Gravitas/AutoGPT/security/advisories) and [Huntr Disclosures Page](https://huntr.com/repos/significant-gravitas/autogpt).
To protect sensitive data from potential leaks or unauthorized access, it is crucial to sandbox the agent execution. This means running it in a secure, isolated environment, which helps mitigate many attack vectors.
### Untrusted environments or networks
Since AutoGPT performs network calls to the OpenAI API, it is important to always run it with trusted environments and networks. Running it on untrusted environments can expose your API KEY to attackers.
Additionally, running it on an untrusted network can expose your data to potential network attacks.
However, even when running on trusted networks, it is important to always encrypt sensitive data while sending it over the network.
### Multi-Tenant environments
If you intend to run multiple AutoGPT brains in parallel, it is your responsibility to ensure the models do not interact or access each other's data.
The primary areas of concern are tenant isolation, resource allocation, model sharing and hardware attacks.
- Tenant Isolation: you must make sure that the tenants run separately to prevent unwanted access to the data from other tenants. Keeping model network traffic separate is also important because you not only prevent unauthorized access to data, but also prevent malicious users or tenants sending prompts to execute under another tenant’s identity.
- Resource Allocation: a denial of service caused by one tenant can affect the overall system health. Implement safeguards like rate limits, access controls, and health monitoring.
- Data Sharing: in a multi-tenant design with data sharing, ensure tenants and users understand the security risks and sandbox agent execution to mitigate risks.
- Hardware Attacks: the hardware (GPUs or TPUs) can also be attacked. [Research](https://scholar.google.com/scholar?q=gpu+side+channel) has shown that side channel attacks on GPUs are possible, which can make data leak from other brains or processes running on the same system at the same time.
## Reporting a Vulnerability
Beware that none of the topics under [Using AutoGPT Securely](#using-AutoGPT-securely) are considered vulnerabilities on AutoGPT.
However, If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released.
Please disclose it as a private [security advisory](https://github.com/Significant-Gravitas/AutoGPT/security/advisories/new).
A team of volunteers on a reasonable-effort basis maintains this project. As such, please give us at least 90 days to work on a fix before public exposure.
Thank you for your interest in the AutoGPT open source project at [https://github.com/Significant-Gravitas/AutoGPT](https://github.com/Significant-Gravitas/AutoGPT) stewarded by Determinist Ltd (“**Determinist**”), with offices at 3rd Floor 1 Ashley Road, Altrincham, Cheshire, WA14 2DT, United Kingdom. The form of license below is a document that clarifies the terms under which You, the person listed below, may contribute software code described below (the “**Contribution**”) to the project. We appreciate your participation in our project, and your help in improving our products, so we want you to understand what will be done with the Contributions. This license is for your protection as well as the protection of Determinist and its licensees; it does not change your rights to use your own Contributions for any other purpose.
By submitting a Pull Request which modifies the content of the “autogpt\_platform” folder at [https://github.com/Significant-Gravitas/AutoGPT/tree/master/autogpt\_platform](https://github.com/Significant-Gravitas/AutoGPT/tree/master/autogpt_platform), You hereby agree:
1\. **You grant us the ability to use the Contributions in any way**. You hereby grant to Determinist a non-exclusive, irrevocable, worldwide, royalty-free, sublicenseable, transferable license under all of Your relevant intellectual property rights (including copyright, patent, and any other rights), to use, copy, prepare derivative works of, distribute and publicly perform and display the Contributions on any licensing terms, including without limitation: (a) open source licenses like the GNU General Public License (GPL), the GNU Lesser General Public License (LGPL), the Common Public License, or the Berkeley Science Division license (BSD); and (b) binary, proprietary, or commercial licenses.
2\. **Grant of Patent License**. You hereby grant to Determinist a worldwide, non-exclusive, royalty-free, irrevocable, license, under any rights you may have, now or in the future, in any patents or patent applications, to make, have made, use, offer to sell, sell, and import products containing the Contribution or portions of the Contribution. This license extends to patent claims that are infringed by the Contribution alone or by combination of the Contribution with other inventions.
4\. **Limitations on Licenses**. The licenses granted in this Agreement will continue for the duration of the applicable patent or intellectual property right under which such license is granted. The licenses granted in this Agreement will include the right to grant and authorize sublicenses, so long as the sublicenses are within the scope of the licenses granted in this Agreement. Except for the licenses granted herein, You reserve all right, title, and interest in and to the Contribution.
5\. **You are able to grant us these rights**. You represent that You are legally entitled to grant the above license. If Your employer has rights to intellectual property that You create, You represent that You are authorized to make the Contributions on behalf of that employer, or that Your employer has waived such rights for the Contributions.
3\. **The Contributions are your original work**. You represent that the Contributions are Your original works of authorship, and to Your knowledge, no other person claims, or has the right to claim, any right in any invention or patent related to the Contributions. You also represent that You are not legally obligated, whether by entering into an agreement or otherwise, in any way that conflicts with the terms of this license. For example, if you have signed an agreement requiring you to assign the intellectual property rights in the Contributions to an employer or customer, that would conflict with the terms of this license.
6\. **We determine the code that is in our products**. You understand that the decision to include the Contribution in any product or source repository is entirely that of Determinist, and this agreement does not guarantee that the Contributions will be included in any product.
7\. **No Implied Warranties.** Determinist acknowledges that, except as explicitly described in this Agreement, the Contribution is provided on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
Welcome to the AutoGPT Platform - a powerful system for creating and running AI agents to solve business problems. This platform enables you to harness the power of artificial intelligence to automate tasks, analyze data, and generate insights for your organization.
## Getting Started
### Prerequisites
- Docker
- Docker Compose V2 (comes with Docker Desktop, or can be installed separately)
- Node.js & NPM (for running the frontend application)
### Running the System
To run the AutoGPT Platform, follow these steps:
1. Clone this repository to your local machine and navigate to the `autogpt_platform` directory within the repository:
This command will copy the `.env.example` file to `.env`. You can modify the `.env` file to add your own environment variables.
3. Run the following command:
```
docker compose up -d
```
This command will start all the necessary backend services defined in the `docker-compose.yml` file in detached mode.
4. Navigate to `frontend` within the `autogpt_platform` directory:
```
cd frontend
```
You will need to run your frontend application separately on your local machine.
5. Run the following command:
```
cp .env.example .env.local
```
This command will copy the `.env.example` file to `.env.local` in the `frontend` directory. You can modify the `.env.local` within this folder to add your own environment variables for the frontend application.
6. Run the following command:
Enable corepack and install dependencies by running:
```
corepack enable
pnpm i
```
Generate the API client (this step is required before running the frontend):
```
pnpm generate:api-client
```
Then start the frontend application in development mode:
```
pnpm dev
```
7. Open your browser and navigate to `http://localhost:3000` to access the AutoGPT Platform frontend.
### Docker Compose Commands
Here are some useful Docker Compose commands for managing your AutoGPT Platform:
- `docker compose up -d`: Start the services in detached mode.
- `docker compose stop`: Stop the running services without removing them.
- `docker compose rm`: Remove stopped service containers.
- `docker compose build`: Build or rebuild services.
- `docker compose down`: Stop and remove containers, networks, and volumes.
- `docker compose watch`: Watch for changes in your services and automatically update them.
### Sample Scenarios
Here are some common scenarios where you might use multiple Docker Compose commands:
1. Updating and restarting a specific service:
```
docker compose build api_srv
docker compose up -d --no-deps api_srv
```
This rebuilds the `api_srv` service and restarts it without affecting other services.
2. Viewing logs for troubleshooting:
```
docker compose logs -f api_srv ws_srv
```
This shows and follows the logs for both `api_srv` and `ws_srv` services.
3. Scaling a service for increased load:
```
docker compose up -d --scale executor=3
```
This scales the `executor` service to 3 instances to handle increased load.
4. Stopping the entire system for maintenance:
```
docker compose stop
docker compose rm -f
docker compose pull
docker compose up -d
```
This stops all services, removes containers, pulls the latest images, and restarts the system.
5. Developing with live updates:
```
docker compose watch
```
This watches for changes in your code and automatically updates the relevant services.
6. Checking the status of services:
```
docker compose ps
```
This shows the current status of all services defined in your docker-compose.yml file.
These scenarios demonstrate how to use Docker Compose commands in combination to manage your AutoGPT Platform effectively.
### Persisting Data
To persist data for PostgreSQL and Redis, you can modify the `docker-compose.yml` file to add volumes. Here's how:
1. Open the `docker-compose.yml` file in a text editor.
2. Add volume configurations for PostgreSQL and Redis services:
```yaml
services:
postgres:
# ... other configurations ...
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
# ... other configurations ...
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
```
3. Save the file and run `docker compose up -d` to apply the changes.
This configuration will create named volumes for PostgreSQL and Redis, ensuring that your data persists across container restarts.
### API Client Generation
The platform includes scripts for generating and managing the API client:
- `pnpm fetch:openapi`: Fetches the OpenAPI specification from the backend service (requires backend to be running on port 8006)
- `pnpm generate:api-client`: Generates the TypeScript API client from the OpenAPI specification using Orval
- `pnpm generate:api-all`: Runs both fetch and generate commands in sequence
#### Manual API Client Updates
If you need to update the API client after making changes to the backend API:
1. Ensure the backend services are running:
```
docker compose up -d
```
2. Generate the updated API client:
```
pnpm generate:api-all
```
This will fetch the latest OpenAPI specification and regenerate the TypeScript client code.
This guide covers testing practices for the AutoGPT Platform backend, with a focus on snapshot testing for API endpoints.
## Table of Contents
- [Overview](#overview)
- [Running Tests](#running-tests)
- [Snapshot Testing](#snapshot-testing)
- [Writing Tests for API Routes](#writing-tests-for-api-routes)
- [Best Practices](#best-practices)
## Overview
The backend uses pytest for testing with the following key libraries:
-`pytest` - Test framework
-`pytest-asyncio` - Async test support
-`pytest-mock` - Mocking support
-`pytest-snapshot` - Snapshot testing for API responses
## Running Tests
### Run all tests
```bash
poetry run test
```
### Run specific test file
```bash
poetry run pytest path/to/test_file.py
```
### Run with verbose output
```bash
poetry run pytest -v
```
### Run with coverage
```bash
poetry run pytest --cov=backend
```
## Snapshot Testing
Snapshot testing captures the output of your code and compares it against previously saved snapshots. This is particularly useful for testing API responses.
### How Snapshot Testing Works
1. First run: Creates snapshot files in `snapshots/` directories
2. Subsequent runs: Compares output against saved snapshots
3. Changes detected: Test fails if output differs from snapshot
### Creating/Updating Snapshots
When you first write a test or when the expected output changes:
```bash
poetry run pytest path/to/test.py --snapshot-update
```
⚠️ **Important**: Always review snapshot changes before committing! Use `git diff` to verify the changes are expected.
- Place tests next to the code: `routes.py` → `routes_test.py`
- Use descriptive test names: `test_create_user_with_invalid_email`
- Group related tests in classes when appropriate
### 2. Test Coverage
- Test happy path and error cases
- Test edge cases (empty data, invalid formats)
- Test authentication and authorization
### 3. Snapshot Testing Guidelines
- Review all snapshot changes carefully
- Don't snapshot sensitive data
- Keep snapshots focused and minimal
- Update snapshots intentionally, not accidentally
### 4. Async Testing
- Use regular `def` for FastAPI TestClient tests
- Use `async def` with `@pytest.mark.asyncio` for testing async functions directly
### 5. Fixtures
Create reusable fixtures for common test data:
```python
@pytest.fixture
defsample_user():
return{
"email":"test@example.com",
"name":"Test User"
}
deftest_create_user(sample_user,snapshot):
response=client.post("/users",json=sample_user)
# ... test implementation
```
## CI/CD Integration
The GitHub Actions workflow automatically runs tests on:
- Pull requests
- Pushes to main branch
Snapshot tests work in CI by:
1. Committing snapshot files to the repository
2. CI compares against committed snapshots
3. Fails if snapshots don't match
## Troubleshooting
### Snapshot Mismatches
- Review the diff carefully
- If changes are expected: `poetry run pytest --snapshot-update`
- If changes are unexpected: Fix the code causing the difference
### Async Test Issues
- Ensure async functions use `@pytest.mark.asyncio`
- Use `AsyncMock` for mocking async functions
- FastAPI TestClient handles async automatically
### Import Errors
- Check that all dependencies are in `pyproject.toml`
- Run `poetry install` to ensure dependencies are installed
- Verify import paths are correct
## Summary
Snapshot testing provides a powerful way to ensure API responses remain consistent. Combined with traditional assertions, it creates a robust test suite that catches regressions while remaining maintainable.
Remember: Good tests are as important as good code!
f"{block.name} has a boolean field with no default value"
)
available_blocks[block.id]=block_cls
returnavailable_blocks
__all__=["load_all_blocks"]
defall_subclasses(cls:type[T])->list[type[T]]:
subclasses=cls.__subclasses__()
forsubclassinsubclasses:
subclasses+=all_subclasses(subclass)
returnsubclasses
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.