Commit Graph

143 Commits

Author SHA1 Message Date
Swifty
ed7c9378eb fix(store): Marketplace - Navbar should say "Marketplace" rather than "Agent Store" (#9069)
Fixes #9067 

### Changes 🏗️

- Renamed elements from Agent Store to Marketplace
2024-12-19 10:20:02 +00:00
Swifty
aaf4ee524d fix(store): Youtube link not showing video on agent page (#9068)
Fixes #9054 

## Changes

- add the video link to the start of the images array
2024-12-19 11:19:37 +01:00
SwiftyOS
234e4a35c4 fix(store): Profile updating is handled in an insecure and potentially broken way 2024-12-19 10:47:10 +01:00
Swifty
4646de463a fix(store): Uploading to store selects two agents (#9065)
Fixes #9059 

### Changes 🏗️

- Changed agent selection from keying on agent name to keying on agent
id
2024-12-19 08:51:01 +00:00
Bently
b1d869aad2 feat(frontend): Disable theme toggle (#9062)
### Changes 🏗️

This disables the theme toggle for now, I did not remove it incase we
plan to properly add it back in the future
2024-12-18 21:45:03 +00:00
Nicholas Tindle
746f3d4e41 feat(platform): Support manually setting up webhooks (#8750)
- 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

![image](https://github.com/user-attachments/assets/1c35f161-7fe4-4916-8506-5ca9a838f398)

- 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>
2024-12-18 19:24:34 +00:00
Bently
e8dd0a297e feat(frontend): Updates to navbar (#9047)
### Changes 🏗️

Updates to navbar and button sizes, added autogpt icon

The navbar now matches the design and resolves [Markeplace - Reduce the
size of the top menu bar, change the font size & the height of the bar
to 64px
#8953](https://github.com/Significant-Gravitas/AutoGPT/issues/8953)


![image](https://github.com/user-attachments/assets/d8b7cfdd-6e57-4f71-bae5-c2b51bfa63f3)

![image](https://github.com/user-attachments/assets/b908a28f-c325-44df-80e4-84f6eca2ddd5)

![image](https://github.com/user-attachments/assets/b4324590-bf27-4fd5-97e2-c7e6047dda15)
2024-12-18 13:28:00 +00:00
Swifty
9d93704264 feat(platform): Add basic library functionality (#9043)
Add functionality to allow users to add agents to their library from the
store page.
2024-12-18 14:01:48 +01:00
Krzysztof Czerwinski
6ec2bacb72 refactor(frontend): Update Supabase and backend API management (#9036)
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>
2024-12-18 09:55:23 +00:00
Bently
95bd268de8 feat(frontend): search results updates (#9024)
This PR covers all of these issues below related to the search bar
section

- [Marketplace - search results - change margins between chips and
section title
#8980](https://github.com/Significant-Gravitas/AutoGPT/issues/8980)
- [Marketplace - search results - #8981
](https://github.com/Significant-Gravitas/AutoGPT/issues/8981)
- [Marketplace - search results - search box reduce height to 60px
#8977](https://github.com/Significant-Gravitas/AutoGPT/issues/8977)
- [Marketplace - search results - increase margins between filter chips
and search box
#8978](https://github.com/Significant-Gravitas/AutoGPT/issues/8978)
- [Marketplace - search results - change line height
#8979](https://github.com/Significant-Gravitas/AutoGPT/issues/8979)

---------

Co-authored-by: Swifty <craigswift13@gmail.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
2024-12-18 09:25:31 +01:00
Krzysztof Czerwinski
0e10e62bfa feat(frontend): Reset password page (#8987)
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>
2024-12-17 18:30:18 +00:00
Nicholas Tindle
abd245cb2b test(frontend): additional build page automation tooling (#8951)
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
2024-12-17 08:55:02 +00:00
Abhimanyu Yadav
cd339b0ffc feat(frontend) : Add optional input support for object, array, multi-select, and select as well. (#8982)
- 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>
2024-12-17 03:52:26 +00:00
Abhimanyu Yadav
569222e9cd feat(blocks): Add depends_on support for input fields (#8852)
- 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>
2024-12-17 03:20:19 +00:00
Abhimanyu Yadav
2fe6eb1df1 feat(blocks): Add support for mutually exclusive input fields (#8856)
- 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>
2024-12-16 23:30:21 +00:00
Nicholas Tindle
f588b69484 fix: merge issues from store -> dev (#9016)
<!-- 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
2024-12-16 16:46:53 -06:00
Swifty
be6d8cbd18 fix(platform): Restored monitor page and monitor spec code. (#8992)
## Changes 🏗️
	
•	Restored monitor page and monitor spec functionality.
•	Disabled failing tests to allow for smoother CI/CD processes.
2024-12-16 18:11:23 +00:00
Swifty
2de5e3dd83 feat(platform): Agent Store V2 (#8874)
# 🌎 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>
2024-12-13 16:35:02 +00:00
Reinier van der Leer
e3cf605e9b feat(frontend): Disallow webhook+input or webhook+webhook in the same graph (#8861)
- 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>
2024-12-12 13:56:28 +00:00
Bently
b16bf42fa3 feat(frontend): Update and fix tutorial (#8943)
This is to fix [Tutorial highlight causes bottom buttons to move up
#8942](https://github.com/Significant-Gravitas/AutoGPT/issues/8942)

### Changes 🏗️

Updates the tutorial to add a short delay before moving onto the next
step which prevents the UI from lifting up in a weird way (skip to 14
seconds in the video below to see this being fixed)
Updates to some of the positioning of the steps

Video to show latest run through whole tutorial 


https://github.com/user-attachments/assets/4cf09a2f-8ed2-45bd-9909-aa92540af845
2024-12-11 19:48:48 +00:00
Abhimanyu Yadav
b8a3ffc04a fix(frontend) : Optional number input (#8940)
- Resolve #8928 

Currently, the frontend renders a string input for an optional integer.
I have now corrected it.

![Screenshot 2024-12-11 at 10 23
48 AM](https://github.com/user-attachments/assets/a47eaf4c-97b0-458c-8a2c-fc66fdd0d770)
2024-12-11 19:25:25 +00:00
Zamil Majdy
6490b4e188 chore(platform):Refactor GraphExecution naming clash and remove unused Graph Execution functions (#8939)
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>
2024-12-11 15:41:15 +00:00
Krzysztof Czerwinski
7a9115db18 fix(frontend): Make pins smaller and fix hover area and highlight for input pins (#8941)
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>
2024-12-11 09:16:36 +00:00
Krzysztof Czerwinski
6307ca1841 feat(platform): Include all agent versions in Runs in Monitor (#8752)
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>
2024-12-11 01:28:50 +00:00
Zamil Majdy
79c0c314e2 feat(frontend): Add field extraction handle for block with object output (#8900)
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>
2024-12-09 21:47:48 +00:00
Abhimanyu Yadav
6997e2a170 fix(frontend) : Increase size of connection pin in blocks (#8920)
- Resolve https://github.com/Significant-Gravitas/AutoGPT/issues/8913

Increase size of Connection pin

<img width="1154" alt="Screenshot 2024-12-09 at 6 44 49 PM"
src="https://github.com/user-attachments/assets/7cd1ad0d-94c3-4027-aeea-d5ecd27e498d">
2024-12-09 13:50:32 +00:00
Nicholas Tindle
b62f411518 feat(frontend): monitor tests (#8880)
<!-- 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
2024-12-06 21:14:33 +00:00
Aarushi
d7c9742d7e feat(frontend/feature-flags): Add LaunchDarkly feature flagging UI (#8847)
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>
2024-12-06 19:11:06 +00:00
Aarushi
dcfad263cb feat(blocks): Add Exa API Blocks (#8835)
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>
2024-12-06 10:45:40 +00:00
Zamil Majdy
9ad9dd9fe1 fix(frontend): Agent output not being re-fetched on each agent output dialog opened (#8883)
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>
2024-12-06 05:15:18 +00:00
Abhimanyu Yadav
227806aef9 feat(blocks): Add code execution block (#8768)
- Resolves #8766 

Creates a block that executes code in an E2B sandbox.

Demo:


https://github.com/user-attachments/assets/460382c4-5bf7-4f96-a539-88ab263777de

---------

Co-authored-by: Reinier van der Leer <github@pwuts.nl>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
2024-12-06 01:16:19 +00:00
Reinier van der Leer
64f5e60d12 feat(blocks): Add webhook block status indicator (#8838)
- 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:

![image](https://github.com/user-attachments/assets/17a33b94-65f0-4e34-a47d-2dd321edecae)
    After:

![image](https://github.com/user-attachments/assets/64afb1e4-e3f2-4ca9-8961-f1245f25477f)

- 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>
2024-12-05 10:35:13 +00:00
Nicholas Tindle
6b742d1a8c docs: add docs for writing playwright tests (#8877)
<!-- 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>
2024-12-04 18:17:17 +00:00
Nicholas Tindle
d4edb9371d feat(blocks): Add Slant 3D printing via API service (#8805)
<!-- 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>
2024-12-04 02:44:29 +00:00
Nicholas Tindle
89011aabe0 feat(frontend): add block tests (#8804)
<!-- 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>
2024-12-03 16:10:46 +00:00
Abhimanyu Yadav
dce9bdd488 Add URL swapping for marketplace based on environment (#8418)
### 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>
2024-12-02 12:12:10 +00:00
Toran Bruce Richards
4aa5f53710 feat(block): Add AI video generator block with Fal txt 2 vid (#8528)
### Background

Implements an AI Video Generator Block for text to image models hosted
on Fal


![image](https://github.com/user-attachments/assets/9cb70015-4174-4419-8c1a-4144f324442f)

---------

Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
Co-authored-by: Aarushi <aarushik93@gmail.com>
2024-11-29 13:04:42 +00:00
Nicholas Tindle
75f9b072a6 refactor(backend): Rename & move IntegrationCredentialsStore to backend (#8648)
- 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>
2024-11-29 11:48:04 +00:00
Aarushi
29f177e70d feat(blocks): Add Hubspot blocks (#8786)
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>
2024-11-29 09:26:43 +00:00
Zamil Majdy
eeb5b4aa46 fix(backend): Fix credentials cost filter not able to filter the block cost (#8837)
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>
2024-11-29 08:46:33 +00:00
Zamil Majdy
520b1d7940 feat(frontend): Make Block description searchable on Block list palette (#8839)
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>
2024-11-29 07:41:02 +00:00
Reinier van der Leer
d2f3f53f57 fix(frontend): Fix missing credentials input when no credentials available (#8834)
Fixes breakage from f1414550 (#8772)

Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
2024-11-27 18:26:15 +00:00
Nicholas Tindle
5dd151b41e feat(tests): add baseline utility for integration testing from frontend ui (#8765) 2024-11-27 09:44:19 +00:00
Zamil Majdy
86fbbae65c fix(frontend): Add text length limit when displaying Graph & Block name with different length in different places (#8746) 2024-11-27 08:37:26 +00:00
Abhimanyu Yadav
6bfe7ff497 fix(frontend): Add integer type definition for node handles (#8803) 2024-11-27 08:16:29 +01:00
Reinier van der Leer
f1414550f9 refactor(platform): Combine per-provider credentials API calls (#8772)
- 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
2024-11-26 17:03:06 +00:00
Reinier van der Leer
eef9bbe991 feat(platform, blocks): Webhook-triggered blocks (#8358)
- 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>
2024-11-25 18:42:36 +01:00
Abhimanyu Yadav
5ee8b62d67 fix: hide content except login when not authenticated to prevent errors (#8398)
* 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>
2024-11-21 15:57:35 +00:00
Bently
63e3244e7e feat(platform): Updates to Runner Output UI (#8717)
* feat(platform): Updates to Runner Output UI

* add copy text button to output boxes

* prettier

---------

Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
2024-11-20 19:35:29 +00:00
Nicholas Tindle
92bfbfad57 feat: generate simple auth tests (#8709) 2024-11-20 15:21:16 +00:00