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:
![image](https://github.com/user-attachments/assets/0d3d6e61-1acc-440c-9c7b-8cc473b457ea)
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 🏗️
![auth](https://github.com/user-attachments/assets/56dfbae3-5c12-4324-a29a-846d091d9501)
*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
![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>
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 the development-dependencies group in
/autogpt_platform/autogpt_libs with 1 update:
[ruff](https://github.com/astral-sh/ruff).
Updates `ruff` from 0.8.2 to 0.8.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/releases">ruff's
releases</a>.</em></p>
<blockquote>
<h2>0.8.3</h2>
<h2>Release Notes</h2>
<h3>Preview features</h3>
<ul>
<li>Fix fstring formatting removing overlong implicit concatenated
string in expression part (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14811">#14811</a>)</li>
<li>[<code>airflow</code>] Add fix to remove deprecated keyword
arguments (<code>AIR302</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14887">#14887</a>)</li>
<li>[<code>airflow</code>]: Extend rule to include deprecated names for
Airflow 3.0 (<code>AIR302</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14765">#14765</a>
and <a
href="https://redirect.github.com/astral-sh/ruff/pull/14804">#14804</a>)</li>
<li>[<code>flake8-bugbear</code>] Improve error messages for
<code>except*</code> (<code>B025</code>, <code>B029</code>,
<code>B030</code>, <code>B904</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14815">#14815</a>)</li>
<li>[<code>flake8-bugbear</code>] <code>itertools.batched()</code>
without explicit <code>strict</code> (<code>B911</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14408">#14408</a>)</li>
<li>[<code>flake8-use-pathlib</code>] Dotless suffix passed to
<code>Path.with_suffix()</code> (<code>PTH210</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14779">#14779</a>)</li>
<li>[<code>pylint</code>] Include parentheses and multiple comparators
in check for <code>boolean-chained-comparison</code>
(<code>PLR1716</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14781">#14781</a>)</li>
<li>[<code>ruff</code>] Do not simplify <code>round()</code> calls
(<code>RUF046</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14832">#14832</a>)</li>
<li>[<code>ruff</code>] Don't emit <code>used-dummy-variable</code> on
function parameters (<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14818">#14818</a>)</li>
<li>[<code>ruff</code>] Implement <code>if-key-in-dict-del</code>
(<code>RUF051</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14553">#14553</a>)</li>
<li>[<code>ruff</code>] Mark autofix for <code>RUF052</code> as always
unsafe (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14824">#14824</a>)</li>
<li>[<code>ruff</code>] Teach autofix for
<code>used-dummy-variable</code> about TypeVars etc.
(<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14819">#14819</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-bugbear</code>] Offer unsafe autofix for
<code>no-explicit-stacklevel</code> (<code>B028</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14829">#14829</a>)</li>
<li>[<code>flake8-pyi</code>] Skip all type definitions in
<code>string-or-bytes-too-long</code> (<code>PYI053</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14797">#14797</a>)</li>
<li>[<code>pyupgrade</code>] Do not report when a UTF-8 comment is
followed by a non-UTF-8 one (<code>UP009</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14728">#14728</a>)</li>
<li>[<code>pyupgrade</code>] Mark fixes for
<code>convert-typed-dict-functional-to-class</code> and
<code>convert-named-tuple-functional-to-class</code> as unsafe if they
will remove comments (<code>UP013</code>, <code>UP014</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14842">#14842</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Raise syntax error for mixing <code>except</code> and
<code>except*</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14895">#14895</a>)</li>
<li>[<code>flake8-bugbear</code>] Fix <code>B028</code> to allow
<code>stacklevel</code> to be explicitly assigned as a positional
argument (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14868">#14868</a>)</li>
<li>[<code>flake8-bugbear</code>] Skip <code>B028</code> if
<code>warnings.warn</code> is called with <code>*args</code> or
<code>**kwargs</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14870">#14870</a>)</li>
<li>[<code>flake8-comprehensions</code>] Skip iterables with named
expressions in <code>unnecessary-map</code> (<code>C417</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14827">#14827</a>)</li>
<li>[<code>flake8-pyi</code>] Also remove <code>self</code> and
<code>cls</code>'s annotation (<code>PYI034</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14801">#14801</a>)</li>
<li>[<code>flake8-pytest-style</code>] Fix
<code>pytest-parametrize-names-wrong-type</code> (<code>PT006</code>) to
edit both <code>argnames</code> and <code>argvalues</code> if both of
them are single-element tuples/lists (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14699">#14699</a>)</li>
<li>[<code>perflint</code>] Improve autofix for <code>PERF401</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14369">#14369</a>)</li>
<li>[<code>pylint</code>] Fix <code>PLW1508</code> false positive for
default string created via a mult operation (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14841">#14841</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/DimitriPapadopoulos"><code>@DimitriPapadopoulos</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/UnknownPlatypus"><code>@UnknownPlatypus</code></a></li>
<li><a href="https://github.com/carljm"><code>@carljm</code></a></li>
<li><a href="https://github.com/cclauss"><code>@cclauss</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>
</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.3</h2>
<h3>Preview features</h3>
<ul>
<li>Fix fstring formatting removing overlong implicit concatenated
string in expression part (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14811">#14811</a>)</li>
<li>[<code>airflow</code>] Add fix to remove deprecated keyword
arguments (<code>AIR302</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14887">#14887</a>)</li>
<li>[<code>airflow</code>]: Extend rule to include deprecated names for
Airflow 3.0 (<code>AIR302</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14765">#14765</a>
and <a
href="https://redirect.github.com/astral-sh/ruff/pull/14804">#14804</a>)</li>
<li>[<code>flake8-bugbear</code>] Improve error messages for
<code>except*</code> (<code>B025</code>, <code>B029</code>,
<code>B030</code>, <code>B904</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14815">#14815</a>)</li>
<li>[<code>flake8-bugbear</code>] <code>itertools.batched()</code>
without explicit <code>strict</code> (<code>B911</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14408">#14408</a>)</li>
<li>[<code>flake8-use-pathlib</code>] Dotless suffix passed to
<code>Path.with_suffix()</code> (<code>PTH210</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14779">#14779</a>)</li>
<li>[<code>pylint</code>] Include parentheses and multiple comparators
in check for <code>boolean-chained-comparison</code>
(<code>PLR1716</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14781">#14781</a>)</li>
<li>[<code>ruff</code>] Do not simplify <code>round()</code> calls
(<code>RUF046</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14832">#14832</a>)</li>
<li>[<code>ruff</code>] Don't emit <code>used-dummy-variable</code> on
function parameters (<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14818">#14818</a>)</li>
<li>[<code>ruff</code>] Implement <code>if-key-in-dict-del</code>
(<code>RUF051</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14553">#14553</a>)</li>
<li>[<code>ruff</code>] Mark autofix for <code>RUF052</code> as always
unsafe (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14824">#14824</a>)</li>
<li>[<code>ruff</code>] Teach autofix for
<code>used-dummy-variable</code> about TypeVars etc.
(<code>RUF052</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14819">#14819</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-bugbear</code>] Offer unsafe autofix for
<code>no-explicit-stacklevel</code> (<code>B028</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14829">#14829</a>)</li>
<li>[<code>flake8-pyi</code>] Skip all type definitions in
<code>string-or-bytes-too-long</code> (<code>PYI053</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14797">#14797</a>)</li>
<li>[<code>pyupgrade</code>] Do not report when a UTF-8 comment is
followed by a non-UTF-8 one (<code>UP009</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14728">#14728</a>)</li>
<li>[<code>pyupgrade</code>] Mark fixes for
<code>convert-typed-dict-functional-to-class</code> and
<code>convert-named-tuple-functional-to-class</code> as unsafe if they
will remove comments (<code>UP013</code>, <code>UP014</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14842">#14842</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Raise syntax error for mixing <code>except</code> and
<code>except*</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14895">#14895</a>)</li>
<li>[<code>flake8-bugbear</code>] Fix <code>B028</code> to allow
<code>stacklevel</code> to be explicitly assigned as a positional
argument (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14868">#14868</a>)</li>
<li>[<code>flake8-bugbear</code>] Skip <code>B028</code> if
<code>warnings.warn</code> is called with <code>*args</code> or
<code>**kwargs</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14870">#14870</a>)</li>
<li>[<code>flake8-comprehensions</code>] Skip iterables with named
expressions in <code>unnecessary-map</code> (<code>C417</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14827">#14827</a>)</li>
<li>[<code>flake8-pyi</code>] Also remove <code>self</code> and
<code>cls</code>'s annotation (<code>PYI034</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14801">#14801</a>)</li>
<li>[<code>flake8-pytest-style</code>] Fix
<code>pytest-parametrize-names-wrong-type</code> (<code>PT006</code>) to
edit both <code>argnames</code> and <code>argvalues</code> if both of
them are single-element tuples/lists (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14699">#14699</a>)</li>
<li>[<code>perflint</code>] Improve autofix for <code>PERF401</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14369">#14369</a>)</li>
<li>[<code>pylint</code>] Fix <code>PLW1508</code> false positive for
default string created via a mult operation (<a
href="https://redirect.github.com/astral-sh/ruff/pull/14841">#14841</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="53f2d72e02"><code>53f2d72</code></a>
Revert certain double quotes from workflow shell script (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14939">#14939</a>)</li>
<li><a
href="3629cbf35a"><code>3629cbf</code></a>
Use double quotes consistently for shell scripts (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14938">#14938</a>)</li>
<li><a
href="37f433814c"><code>37f4338</code></a>
Bump version to 0.8.3 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14937">#14937</a>)</li>
<li><a
href="45b565cbb5"><code>45b565c</code></a>
[red-knot] <code>Any</code> cannot be parameterized (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14933">#14933</a>)</li>
<li><a
href="82faa9bb62"><code>82faa9b</code></a>
Add tests demonstrating f-strings with debug expressions in replacements
that...</li>
<li><a
href="2eac00c60f"><code>2eac00c</code></a>
[<code>perflint</code>] fix invalid hoist in <code>perf401</code> (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14369">#14369</a>)</li>
<li><a
href="033ecf5a4b"><code>033ecf5</code></a>
Also have zizmor check for low-severity security issues (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14893">#14893</a>)</li>
<li><a
href="5509a3d7ae"><code>5509a3d</code></a>
Add LSP settings example for Zed editor (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14894">#14894</a>)</li>
<li><a
href="e4885a2fb2"><code>e4885a2</code></a>
[red-knot] Understand <code>typing.Tuple</code> (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14927">#14927</a>)</li>
<li><a
href="a7e5e42b88"><code>a7e5e42</code></a>
[red-knot] Make <code>attributes.md</code> test future-proof (<a
href="https://redirect.github.com/astral-sh/ruff/issues/14923">#14923</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.8.2...0.8.3">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff&package-manager=pip&previous-version=0.8.2&new-version=0.8.3)](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>
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 />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography&package-manager=pip&previous-version=43.0.3&new-version=44.0.0)](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>