From 858dc7adc3d2b2ff174ea34a2572ae74b30c206f Mon Sep 17 00:00:00 2001 From: Bently Date: Thu, 2 Jan 2025 14:46:14 +0000 Subject: [PATCH 1/6] feat(blocks): Add github create repo block (#9169) This adds a new block, Github Create Repository Block (GithubCreateRepositoryBlock) which lets you create a new github repo. i have used this to make these repos so i know it works https://github.com/Bentlybro/discord-whisper-transcriber https://github.com/Bentlybro/PyAGI-Framework https://github.com/Bentlybro/FlaskNotes ![image](https://github.com/user-attachments/assets/17127839-7dc9-4b8a-bc60-8b55cb02fde9) --- .../backend/blocks/github/pull_requests.py | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/autogpt_platform/backend/backend/blocks/github/pull_requests.py b/autogpt_platform/backend/backend/blocks/github/pull_requests.py index 905b6e346..cd5c7a358 100644 --- a/autogpt_platform/backend/backend/blocks/github/pull_requests.py +++ b/autogpt_platform/backend/backend/blocks/github/pull_requests.py @@ -732,3 +732,111 @@ class GithubUpdateFileBlock(Block): yield "sha", sha except Exception as e: yield "error", str(e) + + +class GithubCreateRepositoryBlock(Block): + class Input(BlockSchema): + credentials: GithubCredentialsInput = GithubCredentialsField("repo") + name: str = SchemaField( + description="Name of the repository to create", + placeholder="my-new-repo", + ) + description: str = SchemaField( + description="Description of the repository", + placeholder="A description of the repository", + default="", + ) + private: bool = SchemaField( + description="Whether the repository should be private", + default=False, + ) + auto_init: bool = SchemaField( + description="Whether to initialize the repository with a README", + default=True, + ) + gitignore_template: str = SchemaField( + description="Git ignore template to use (e.g., Python, Node, Java)", + default="", + ) + + class Output(BlockSchema): + url: str = SchemaField(description="URL of the created repository") + clone_url: str = SchemaField(description="Git clone URL of the repository") + error: str = SchemaField( + description="Error message if the repository creation failed" + ) + + def __init__(self): + super().__init__( + id="029ec3b8-1cfd-46d3-b6aa-28e4a706efd1", + description="This block creates a new GitHub repository.", + categories={BlockCategory.DEVELOPER_TOOLS}, + input_schema=GithubCreateRepositoryBlock.Input, + output_schema=GithubCreateRepositoryBlock.Output, + test_input={ + "name": "test-repo", + "description": "A test repository", + "private": False, + "auto_init": True, + "gitignore_template": "Python", + "credentials": TEST_CREDENTIALS_INPUT, + }, + test_credentials=TEST_CREDENTIALS, + test_output=[ + ("url", "https://github.com/owner/test-repo"), + ("clone_url", "https://github.com/owner/test-repo.git"), + ], + test_mock={ + "create_repository": lambda *args, **kwargs: ( + "https://github.com/owner/test-repo", + "https://github.com/owner/test-repo.git", + ) + }, + ) + + @staticmethod + def create_repository( + credentials: GithubCredentials, + name: str, + description: str, + private: bool, + auto_init: bool, + gitignore_template: str, + ) -> tuple[str, str]: + api = get_api(credentials, convert_urls=False) # Disable URL conversion + data = { + "name": name, + "description": description, + "private": private, + "auto_init": auto_init, + } + + if gitignore_template: + data["gitignore_template"] = gitignore_template + + # Create repository using the user endpoint + response = api.post("https://api.github.com/user/repos", json=data) + result = response.json() + + return result["html_url"], result["clone_url"] + + def run( + self, + input_data: Input, + *, + credentials: GithubCredentials, + **kwargs, + ) -> BlockOutput: + try: + url, clone_url = self.create_repository( + credentials, + input_data.name, + input_data.description, + input_data.private, + input_data.auto_init, + input_data.gitignore_template, + ) + yield "url", url + yield "clone_url", clone_url + except Exception as e: + yield "error", str(e) From d7d69f397f544764ac3924b6362f27cff78ca259 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jan 2025 08:46:55 -0600 Subject: [PATCH 2/6] chore(frontend/deps-dev): bump the development-dependencies group across 1 directory with 5 updates (#9150) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the development-dependencies group with 5 updates in the /autogpt_platform/frontend directory: | Package | From | To | | --- | --- | --- | | [@chromatic-com/storybook](https://github.com/chromaui/addon-visual-tests) | `3.2.2` | `3.2.3` | | [@storybook/test-runner](https://github.com/storybookjs/test-runner) | `0.20.1` | `0.21.0` | | [concurrently](https://github.com/open-cli-tools/concurrently) | `9.1.0` | `9.1.1` | | [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `15.1.0` | `15.1.3` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss) | `3.4.16` | `3.4.17` | Updates `@chromatic-com/storybook` from 3.2.2 to 3.2.3
Release notes

Sourced from @​chromatic-com/storybook's releases.

v3.2.3

🐛 Bug Fix

Authors: 2

Changelog

Sourced from @​chromatic-com/storybook's changelog.

v3.2.3 (Thu Dec 19 2024)

🐛 Bug Fix

Authors: 2


Commits

Updates `@storybook/test-runner` from 0.20.1 to 0.21.0
Release notes

Sourced from @​storybook/test-runner's releases.

v0.21.0

🚀 Enhancement

🐛 Bug Fix

Authors: 3

v0.21.0-next.1

🐛 Bug Fix

Authors: 1

v0.21.0-next.0

🚀 Enhancement

Authors: 1

v0.20.2-next.0

🐛 Bug Fix

Authors: 1

Changelog

Sourced from @​storybook/test-runner's changelog.

v0.21.0 (Fri Dec 20 2024)

🚀 Enhancement

🐛 Bug Fix

Authors: 3


Commits

Updates `concurrently` from 9.1.0 to 9.1.1
Release notes

Sourced from concurrently's releases.

v9.1.1

What's Changed

Full Changelog: https://github.com/open-cli-tools/concurrently/compare/v9.1.0...v9.1.1

Commits

Updates `eslint-config-next` from 15.1.0 to 15.1.3
Release notes

Sourced from eslint-config-next's releases.

v15.1.3

[!NOTE]
This release is backporting bug fixes. It does not include all pending features/changes on canary.

Core Changes

  • Retry manifest file loading only in dev mode: #73900
  • Use shared worker for lint & typecheck steps: #74154

Credits

Huge thanks to @​unstubbable and @​ztanner for helping!

v15.1.2

[!NOTE]
This release is backporting bug fixes. It does not include all pending features/changes on canary.

Core Changes

Credits

Huge thanks to @​ztanner for helping!

v15.1.1

[!NOTE]
This release is backporting bug fixes. It does not include all pending features/changes on canary.

Core Changes

Credits

Huge thanks to @​devjiwonchoi and @​ztanner for helping!

v15.1.1-canary.23

Misc Changes

  • docs: remove catch-all for opengraph-image: #74338

Credits

Huge thanks to @​leerob for helping!

v15.1.1-canary.22

Misc Changes

  • Fix typo in generateViewport docs: #74288

Credits

... (truncated)

Commits

Updates `tailwindcss` from 3.4.16 to 3.4.17
Release notes

Sourced from tailwindcss's releases.

v3.4.17

Fixed

  • Work around Node v22.12+ issue (#15421)
Changelog

Sourced from tailwindcss's changelog.

[3.4.17] - 2024-12-17

Fixed

  • Work around Node v22.12+ issue (#15421)
Commits

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) ---
Dependabot commands and options
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 ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore 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 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 ` 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 ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- autogpt_platform/frontend/package.json | 10 +++--- autogpt_platform/frontend/yarn.lock | 50 +++++++++++++------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/autogpt_platform/frontend/package.json b/autogpt_platform/frontend/package.json index 1d3545133..f3fbd5385 100644 --- a/autogpt_platform/frontend/package.json +++ b/autogpt_platform/frontend/package.json @@ -81,7 +81,7 @@ "zod": "^3.23.8" }, "devDependencies": { - "@chromatic-com/storybook": "^3.2.2", + "@chromatic-com/storybook": "^3.2.3", "@playwright/test": "^1.48.2", "@storybook/addon-a11y": "^8.3.5", "@storybook/addon-essentials": "^8.4.2", @@ -92,7 +92,7 @@ "@storybook/nextjs": "^8.4.2", "@storybook/react": "^8.3.5", "@storybook/test": "^8.3.5", - "@storybook/test-runner": "^0.20.1", + "@storybook/test-runner": "^0.21.0", "@types/negotiator": "^0.6.3", "@types/node": "^22.9.0", "@types/react": "^18", @@ -100,9 +100,9 @@ "@types/react-modal": "^3.16.3", "axe-playwright": "^2.0.3", "chromatic": "^11.12.5", - "concurrently": "^9.0.1", + "concurrently": "^9.1.1", "eslint": "^8", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.3", "eslint-plugin-storybook": "^0.11.0", "msw": "^2.7.0", "msw-storybook-addon": "^2.0.3", @@ -110,7 +110,7 @@ "prettier": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.9", "storybook": "^8.4.5", - "tailwindcss": "^3.4.15", + "tailwindcss": "^3.4.17", "typescript": "^5" }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", diff --git a/autogpt_platform/frontend/yarn.lock b/autogpt_platform/frontend/yarn.lock index 6cac860ac..edd6d72fc 100644 --- a/autogpt_platform/frontend/yarn.lock +++ b/autogpt_platform/frontend/yarn.lock @@ -1018,10 +1018,10 @@ "@types/tough-cookie" "^4.0.5" tough-cookie "^4.1.4" -"@chromatic-com/storybook@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@chromatic-com/storybook/-/storybook-3.2.2.tgz#08754443de55618f802f88450c35266fd6d25db5" - integrity sha512-xmXt/GW0hAPbzNTrxYuVo43Adrtjue4DeVrsoIIEeJdGaPNNeNf+DHMlJKOBdlHmCnFUoe9R/0mLM9zUp5bKWw== +"@chromatic-com/storybook@^3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@chromatic-com/storybook/-/storybook-3.2.3.tgz#0f4d167ac80fcb38293a92c230c43446049b6758" + integrity sha512-3+hfANx79kIjP1qrOSLxpoAXOiYUA0S7A0WI0A24kASrv7USFNNW8etR5TjUilMb0LmqKUn3wDwUK2h6aceQ9g== dependencies: chromatic "^11.15.0" filesize "^10.0.12" @@ -1698,10 +1698,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.20.tgz#0be2cc955f4eb837516e7d7382284cd5bc1d5a02" integrity sha512-JfDpuOCB0UBKlEgEy/H6qcBSzHimn/YWjUHzKl1jMeUO+QVRdzmTTl8gFJaNO87c8DXmVKhFCtwxQ9acqB3+Pw== -"@next/eslint-plugin-next@15.1.0": - version "15.1.0" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz#421b47ad0772e11b2d67416054675cd32f95b8b7" - integrity sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg== +"@next/eslint-plugin-next@15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.3.tgz#32777736af151577df52d83f25c0c22bc9f3cb5e" + integrity sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg== dependencies: fast-glob "3.3.1" @@ -3213,10 +3213,10 @@ "@storybook/react-dom-shim" "8.4.7" "@storybook/theming" "8.4.7" -"@storybook/test-runner@^0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@storybook/test-runner/-/test-runner-0.20.1.tgz#e2efa6266d512312a6b810db376da2919008cccd" - integrity sha512-3WU/th/uncIR6vpQDK9hKjiZjmczsluoLbgkRV7ufxY9IgHCGcbIjvT5EPS+XZIaOrNGjaPsyB5cE1okKn9iSA== +"@storybook/test-runner@^0.21.0": + version "0.21.0" + resolved "https://registry.yarnpkg.com/@storybook/test-runner/-/test-runner-0.21.0.tgz#31e7a6878e15a3f4d5555c57a135dd4d13fce9c4" + integrity sha512-aG2QvKXSIjMN1CA9PJK/esnidZWgt1gAkfo9Kqf8+NqBSsmP/2GyL5vxu1lkRFO/4qCv5JenNZ5Uj6ie4b2oag== dependencies: "@babel/core" "^7.22.5" "@babel/generator" "^7.22.5" @@ -5192,10 +5192,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concurrently@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.0.tgz#8da6d609f4321752912dab9be8710232ac496aa0" - integrity sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg== +concurrently@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.1.tgz#609dde2ce12f4f12d6a5ea6eace4c38bb7ab2ead" + integrity sha512-6VX8lrBIycgZKTwBsWS+bLrmkGRkDmvtGsYylRN9b93CygN6CbK46HmnQ3rdSOR8HRjdahDrxb5MqD9cEFOg5Q== dependencies: chalk "^4.1.2" lodash "^4.17.21" @@ -6120,12 +6120,12 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-15.1.0.tgz#25a9a076b059905fd0cf3f6f832771724dfcbbdf" - integrity sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw== +eslint-config-next@15.1.3: + version "15.1.3" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-15.1.3.tgz#7656b47591745bcdbd60d396282924d89f82eea6" + integrity sha512-wGYlNuWnh4ujuKtZvH+7B2Z2vy9nONZE6ztd+DKF7hAsIabkrxmD4TzYHzASHENo42lmz2tnT2B+zN2sOHvpJg== dependencies: - "@next/eslint-plugin-next" "15.1.0" + "@next/eslint-plugin-next" "15.1.3" "@rushstack/eslint-patch" "^1.10.3" "@typescript-eslint/eslint-plugin" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" @@ -11045,10 +11045,10 @@ tailwindcss-animate@^1.0.7: resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== -tailwindcss@^3.4.15: - version "3.4.16" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.16.tgz#35a7c3030844d6000fc271878db4096b6a8d2ec9" - integrity sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw== +tailwindcss@^3.4.17: + version "3.4.17" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" + integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" From fa98827fd175063d5245d1161e44e5f90e14d67f Mon Sep 17 00:00:00 2001 From: Reinier van der Leer Date: Fri, 3 Jan 2025 10:48:30 +0100 Subject: [PATCH 3/6] fix(backend): Fix validation of hostname-less URLs (#9171) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, `http://` would be converted to `http://http` and pass the no-hostname check that way. It eventually fails validation, but only at hostname lookup which times out -> takes very long. ### Changes 🏗️ - Fix URL canonicalization logic - Merge `_canonicalize_url` into `validate_url` ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] CI --- .../backend/backend/util/request.py | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/autogpt_platform/backend/backend/util/request.py b/autogpt_platform/backend/backend/util/request.py index 10b716f2c..9a3fa0c5e 100644 --- a/autogpt_platform/backend/backend/util/request.py +++ b/autogpt_platform/backend/backend/util/request.py @@ -33,20 +33,6 @@ ALLOWED_SCHEMES = ["http", "https"] HOSTNAME_REGEX = re.compile(r"^[A-Za-z0-9.-]+$") # Basic DNS-safe hostname pattern -def _canonicalize_url(url: str) -> str: - """ - Normalizes the URL by: - 1. Stripping whitespace and trailing slashes. - 2. Ensuring the scheme is http:// or https:// if missing. - 3. Replacing backslashes with forward slashes. - """ - url = url.strip().strip("/") - if not url.startswith(("http://", "https://")): - url = "http://" + url - url = url.replace("\\", "/") - return url - - def _is_ip_blocked(ip: str) -> bool: """ Checks if the IP address is in a blocked network. @@ -61,9 +47,12 @@ def validate_url(url: str, trusted_origins: list[str]) -> str: to a private, link-local, or otherwise blocked IP address — unless the hostname is explicitly trusted. """ - # Normalize/canonicalize input - url = _canonicalize_url(url) + # Canonicalize URL + url = url.strip("/ ").replace("\\", "/") parsed = urlparse(url) + if not parsed.scheme: + url = f"http://{url}" + parsed = urlparse(url) # Check scheme if parsed.scheme not in ALLOWED_SCHEMES: From fe8393a82fa30226ee1d9c1acccdd30b9159b9e1 Mon Sep 17 00:00:00 2001 From: Bently Date: Fri, 3 Jan 2025 09:48:51 +0000 Subject: [PATCH 4/6] feat(blocks): Add github list stargazers block (#9172) This adds a list stargazers block, its using https://docs.github.com/en/rest/activity/starring?apiVersion=2022-11-28#list-stargazers ![image](https://github.com/user-attachments/assets/0fe87a97-ebea-40c2-818d-28f6555ae91c) --- .../backend/blocks/github/pull_requests.py | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/autogpt_platform/backend/backend/blocks/github/pull_requests.py b/autogpt_platform/backend/backend/blocks/github/pull_requests.py index cd5c7a358..f890ba0d5 100644 --- a/autogpt_platform/backend/backend/blocks/github/pull_requests.py +++ b/autogpt_platform/backend/backend/blocks/github/pull_requests.py @@ -840,3 +840,93 @@ class GithubCreateRepositoryBlock(Block): yield "clone_url", clone_url except Exception as e: yield "error", str(e) + + +class GithubListStargazersBlock(Block): + class Input(BlockSchema): + credentials: GithubCredentialsInput = GithubCredentialsField("repo") + repo_url: str = SchemaField( + description="URL of the GitHub repository", + placeholder="https://github.com/owner/repo", + ) + + class Output(BlockSchema): + class StargazerItem(TypedDict): + username: str + url: str + + stargazer: StargazerItem = SchemaField( + title="Stargazer", + description="Stargazers with their username and profile URL", + ) + error: str = SchemaField( + description="Error message if listing stargazers failed" + ) + + def __init__(self): + super().__init__( + id="a4b9c2d1-e5f6-4g7h-8i9j-0k1l2m3n4o5p", # Generated unique UUID + description="This block lists all users who have starred a specified GitHub repository.", + categories={BlockCategory.DEVELOPER_TOOLS}, + input_schema=GithubListStargazersBlock.Input, + output_schema=GithubListStargazersBlock.Output, + test_input={ + "repo_url": "https://github.com/owner/repo", + "credentials": TEST_CREDENTIALS_INPUT, + }, + test_credentials=TEST_CREDENTIALS, + test_output=[ + ( + "stargazer", + { + "username": "octocat", + "url": "https://github.com/octocat", + }, + ) + ], + test_mock={ + "list_stargazers": lambda *args, **kwargs: [ + { + "username": "octocat", + "url": "https://github.com/octocat", + } + ] + }, + ) + + @staticmethod + def list_stargazers( + credentials: GithubCredentials, repo_url: str + ) -> list[Output.StargazerItem]: + api = get_api(credentials) + # Add /stargazers to the repo URL to get stargazers endpoint + stargazers_url = f"{repo_url}/stargazers" + # Set accept header to get starred_at timestamp + headers = {"Accept": "application/vnd.github.star+json"} + response = api.get(stargazers_url, headers=headers) + data = response.json() + + stargazers: list[GithubListStargazersBlock.Output.StargazerItem] = [ + { + "username": stargazer["login"], + "url": stargazer["html_url"], + } + for stargazer in data + ] + return stargazers + + def run( + self, + input_data: Input, + *, + credentials: GithubCredentials, + **kwargs, + ) -> BlockOutput: + try: + stargazers = self.list_stargazers( + credentials, + input_data.repo_url, + ) + yield from (("stargazer", stargazer) for stargazer in stargazers) + except Exception as e: + yield "error", str(e) From e7689a1eb7dbcc5d032f1d99ee9e70cb6780f62f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Jan 2025 09:49:36 +0000 Subject: [PATCH 5/6] chore(market/deps-dev): bump the development-dependencies group across 1 directory with 3 updates (#9165) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the development-dependencies group with 3 updates in the /autogpt_platform/market directory: [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio), [ruff](https://github.com/astral-sh/ruff) and [pyright](https://github.com/RobertCraigie/pyright-python). Updates `pytest-asyncio` from 0.25.0 to 0.25.1
Release notes

Sourced from pytest-asyncio's releases.

pytest-asyncio 0.25.1

  • Fixes an issue that caused a broken event loop when a function-scoped test was executed in between two tests with wider loop scope #950
  • Improves test collection speed in auto mode #1020
  • Corrects the warning that is emitted upon redefining the event_loop fixture
Commits
  • 623ab74 docs: Prepare release of v0.25.1.
  • c236550 docs: Fix broken link to the pytest.mark.asyncio reference.
  • 41c645b fix: Correct warning message when redefining the event_loop fixture.
  • 2fd10f8 docs: Clarify deprecation of event_loop fixture.
  • a4e82ab docs: Added changelog entry for #1020.
  • 04f9044 refactor: Replace the "__original_fixture_loop" magic attribute with the more...
  • dafef6c refactor: Extracted a function to mark an event loop as created by pytest-asy...
  • 0c931b7 refactor: Extracted function to check if a loop was created by pytest-asyncio.
  • 0642dcd fix: Fix broken event loop when a function-scoped test is in between two wide...
  • 050a5f8 [pre-commit.ci] pre-commit autoupdate
  • Additional commits viewable in compare view

Updates `ruff` from 0.8.3 to 0.8.4
Release notes

Sourced from ruff's releases.

0.8.4

Release Notes

Preview features

  • [airflow] Extend AIR302 with additional functions and classes (#15015)
  • [airflow] Implement moved-to-provider-in-3 for modules that has been moved to Airflow providers (AIR303) (#14764)
  • [flake8-use-pathlib] Extend check for invalid path suffix to include the case "." (PTH210) (#14902)
  • [perflint] Fix panic in PERF401 when list variable is after the for loop (#14971)
  • [perflint] Simplify finding the loop target in PERF401 (#15025)
  • [pylint] Preserve original value format (PLR6104) (#14978)
  • [ruff] Avoid false positives for RUF027 for typing context bindings (#15037)
  • [ruff] Check for ambiguous pattern passed to pytest.raises() (RUF043) (#14966)

Rule changes

  • [flake8-bandit] Check S105 for annotated assignment (#15059)
  • [flake8-pyi] More autofixes for redundant-none-literal (PYI061) (#14872)
  • [pydocstyle] Skip leading whitespace for D403 (#14963)
  • [ruff] Skip SQLModel base classes for mutable-class-default (RUF012) (#14949)

Bug

  • [perflint] Parenthesize walrus expressions in autofix for manual-list-comprehension (PERF401) (#15050)

Server

  • Check diagnostic refresh support from client capability which enables dynamic configuration for various editors (#15014)

Contributors

... (truncated)

Changelog

Sourced from ruff's changelog.

0.8.4

Preview features

  • [airflow] Extend AIR302 with additional functions and classes (#15015)
  • [airflow] Implement moved-to-provider-in-3 for modules that has been moved to Airflow providers (AIR303) (#14764)
  • [flake8-use-pathlib] Extend check for invalid path suffix to include the case "." (PTH210) (#14902)
  • [perflint] Fix panic in PERF401 when list variable is after the for loop (#14971)
  • [perflint] Simplify finding the loop target in PERF401 (#15025)
  • [pylint] Preserve original value format (PLR6104) (#14978)
  • [ruff] Avoid false positives for RUF027 for typing context bindings (#15037)
  • [ruff] Check for ambiguous pattern passed to pytest.raises() (RUF043) (#14966)

Rule changes

  • [flake8-bandit] Check S105 for annotated assignment (#15059)
  • [flake8-pyi] More autofixes for redundant-none-literal (PYI061) (#14872)
  • [pydocstyle] Skip leading whitespace for D403 (#14963)
  • [ruff] Skip SQLModel base classes for mutable-class-default (RUF012) (#14949)

Bug

  • [perflint] Parenthesize walrus expressions in autofix for manual-list-comprehension (PERF401) (#15050)

Server

  • Check diagnostic refresh support from client capability which enables dynamic configuration for various editors (#15014)
Commits
  • 3bb0dac Bump version to 0.8.4 (#15064)
  • 40cba5d [red-knot] Cleanup various todo_type!() messages (#15063)
  • 596d80c [perflint] Parenthesize walrus expressions in autofix for `manual-list-comp...
  • d8b9a36 Disable actionlint hook by default when running pre-commit locally (#15061)
  • 85e71ba [flake8-bandit] Check S105 for annotated assignment (#15059)
  • 2802cbd Don't special-case class instances in unary expression inference (#15045)
  • ed2bce6 [red-knot] Report invalid exceptions (#15042)
  • f0012df Fix typos in RUF043.py (#15044)
  • 0fc4e8f Introduce InferContext (#14956)
  • ac81c72 [ruff] Ambiguous pattern passed to pytest.raises() (RUF043) (#14966)
  • Additional commits viewable in compare view

Updates `pyright` from 1.1.390 to 1.1.391
Commits

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) ---
Dependabot commands and options
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 ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore 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 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 ` 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 ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- autogpt_platform/market/poetry.lock | 52 +++++++++++++------------- autogpt_platform/market/pyproject.toml | 6 +-- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/autogpt_platform/market/poetry.lock b/autogpt_platform/market/poetry.lock index f110bd3fb..3f340814d 100644 --- a/autogpt_platform/market/poetry.lock +++ b/autogpt_platform/market/poetry.lock @@ -829,13 +829,13 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pyright" -version = "1.1.390" +version = "1.1.391" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.390-py3-none-any.whl", hash = "sha256:ecebfba5b6b50af7c1a44c2ba144ba2ab542c227eb49bc1f16984ff714e0e110"}, - {file = "pyright-1.1.390.tar.gz", hash = "sha256:aad7f160c49e0fbf8209507a15e17b781f63a86a1facb69ca877c71ef2e9538d"}, + {file = "pyright-1.1.391-py3-none-any.whl", hash = "sha256:54fa186f8b3e8a55a44ebfa842636635688670c6896dcf6cf4a7fc75062f4d15"}, + {file = "pyright-1.1.391.tar.gz", hash = "sha256:66b2d42cdf5c3cbab05f2f4b76e8bec8aa78e679bfa0b6ad7b923d9e027cadb2"}, ] [package.dependencies] @@ -871,13 +871,13 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments [[package]] name = "pytest-asyncio" -version = "0.25.0" +version = "0.25.1" description = "Pytest support for asyncio" optional = false python-versions = ">=3.9" files = [ - {file = "pytest_asyncio-0.25.0-py3-none-any.whl", hash = "sha256:db5432d18eac6b7e28b46dcd9b69921b55c3b1086e85febfe04e70b18d9e81b3"}, - {file = "pytest_asyncio-0.25.0.tar.gz", hash = "sha256:8c0610303c9e0442a5db8604505fc0f545456ba1528824842b37b4a626cbf609"}, + {file = "pytest_asyncio-0.25.1-py3-none-any.whl", hash = "sha256:c84878849ec63ff2ca509423616e071ef9cd8cc93c053aa33b5b8fb70a990671"}, + {file = "pytest_asyncio-0.25.1.tar.gz", hash = "sha256:79be8a72384b0c917677e00daa711e07db15259f4d23203c59012bcd989d4aee"}, ] [package.dependencies] @@ -1058,29 +1058,29 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.8.3" +version = "0.8.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.3-py3-none-linux_armv6l.whl", hash = "sha256:8d5d273ffffff0acd3db5bf626d4b131aa5a5ada1276126231c4174543ce20d6"}, - {file = "ruff-0.8.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e4d66a21de39f15c9757d00c50c8cdd20ac84f55684ca56def7891a025d7e939"}, - {file = "ruff-0.8.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c356e770811858bd20832af696ff6c7e884701115094f427b64b25093d6d932d"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c0a60a825e3e177116c84009d5ebaa90cf40dfab56e1358d1df4e29a9a14b13"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fb782f4db39501210ac093c79c3de581d306624575eddd7e4e13747e61ba18"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f26bc76a133ecb09a38b7868737eded6941b70a6d34ef53a4027e83913b6502"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:01b14b2f72a37390c1b13477c1c02d53184f728be2f3ffc3ace5b44e9e87b90d"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53babd6e63e31f4e96ec95ea0d962298f9f0d9cc5990a1bbb023a6baf2503a82"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ae441ce4cf925b7f363d33cd6570c51435972d697e3e58928973994e56e1452"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7c65bc0cadce32255e93c57d57ecc2cca23149edd52714c0c5d6fa11ec328cd"}, - {file = "ruff-0.8.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5be450bb18f23f0edc5a4e5585c17a56ba88920d598f04a06bd9fd76d324cb20"}, - {file = "ruff-0.8.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8faeae3827eaa77f5721f09b9472a18c749139c891dbc17f45e72d8f2ca1f8fc"}, - {file = "ruff-0.8.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:db503486e1cf074b9808403991663e4277f5c664d3fe237ee0d994d1305bb060"}, - {file = "ruff-0.8.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6567be9fb62fbd7a099209257fef4ad2c3153b60579818b31a23c886ed4147ea"}, - {file = "ruff-0.8.3-py3-none-win32.whl", hash = "sha256:19048f2f878f3ee4583fc6cb23fb636e48c2635e30fb2022b3a1cd293402f964"}, - {file = "ruff-0.8.3-py3-none-win_amd64.whl", hash = "sha256:f7df94f57d7418fa7c3ffb650757e0c2b96cf2501a0b192c18e4fb5571dfada9"}, - {file = "ruff-0.8.3-py3-none-win_arm64.whl", hash = "sha256:fe2756edf68ea79707c8d68b78ca9a58ed9af22e430430491ee03e718b5e4936"}, - {file = "ruff-0.8.3.tar.gz", hash = "sha256:5e7558304353b84279042fc584a4f4cb8a07ae79b2bf3da1a7551d960b5626d3"}, + {file = "ruff-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:58072f0c06080276804c6a4e21a9045a706584a958e644353603d36ca1eb8a60"}, + {file = "ruff-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ffb60904651c00a1e0b8df594591770018a0f04587f7deeb3838344fe3adabac"}, + {file = "ruff-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6ddf5d654ac0d44389f6bf05cee4caeefc3132a64b58ea46738111d687352296"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e248b1f0fa2749edd3350a2a342b67b43a2627434c059a063418e3d375cfe643"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf197b98ed86e417412ee3b6c893f44c8864f816451441483253d5ff22c0e81e"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c41319b85faa3aadd4d30cb1cffdd9ac6b89704ff79f7664b853785b48eccdf3"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9f8402b7c4f96463f135e936d9ab77b65711fcd5d72e5d67597b543bbb43cf3f"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e56b3baa9c23d324ead112a4fdf20db9a3f8f29eeabff1355114dd96014604"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:736272574e97157f7edbbb43b1d046125fce9e7d8d583d5d65d0c9bf2c15addf"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fe710ab6061592521f902fca7ebcb9fabd27bc7c57c764298b1c1f15fff720"}, + {file = "ruff-0.8.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:13e9ec6d6b55f6da412d59953d65d66e760d583dd3c1c72bf1f26435b5bfdbae"}, + {file = "ruff-0.8.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:97d9aefef725348ad77d6db98b726cfdb075a40b936c7984088804dfd38268a7"}, + {file = "ruff-0.8.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ab78e33325a6f5374e04c2ab924a3367d69a0da36f8c9cb6b894a62017506111"}, + {file = "ruff-0.8.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8ef06f66f4a05c3ddbc9121a8b0cecccd92c5bf3dd43b5472ffe40b8ca10f0f8"}, + {file = "ruff-0.8.4-py3-none-win32.whl", hash = "sha256:552fb6d861320958ca5e15f28b20a3d071aa83b93caee33a87b471f99a6c0835"}, + {file = "ruff-0.8.4-py3-none-win_amd64.whl", hash = "sha256:f21a1143776f8656d7f364bd264a9d60f01b7f52243fbe90e7670c0dfe0cf65d"}, + {file = "ruff-0.8.4-py3-none-win_arm64.whl", hash = "sha256:9183dd615d8df50defa8b1d9a074053891ba39025cf5ae88e8bcb52edcc4bf08"}, + {file = "ruff-0.8.4.tar.gz", hash = "sha256:0d5f89f254836799af1615798caa5f80b7f935d7a670fad66c5007928e57ace8"}, ] [[package]] @@ -1298,4 +1298,4 @@ watchmedo = ["PyYAML (>=3.10)"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "5dbf6cd95ba8e80c4a6b4e6a54c6cdfb1488619e4293d1d5a8572c5330485493" +content-hash = "c62380410681d30c5c5da8b047c449c92196f2a25ea5d353db2a3e5470737513" diff --git a/autogpt_platform/market/pyproject.toml b/autogpt_platform/market/pyproject.toml index 279a11116..d89695abf 100644 --- a/autogpt_platform/market/pyproject.toml +++ b/autogpt_platform/market/pyproject.toml @@ -24,12 +24,12 @@ prometheus-fastapi-instrumentator = "^7.0.0" autogpt-libs = {path = "../autogpt_libs"} [tool.poetry.group.dev.dependencies] pytest = "^8.3.4" -pytest-asyncio = "^0.25.0" +pytest-asyncio = "^0.25.1" pytest-watcher = "^0.4.3" requests = "^2.32.3" -ruff = "^0.8.3" -pyright = "^1.1.390" +ruff = "^0.8.4" +pyright = "^1.1.391" isort = "^5.13.2" black = "^24.10.0" From 8f1a0659768eb9eaf2984cf93e6ce8edaf6b7249 Mon Sep 17 00:00:00 2001 From: Zamil Majdy Date: Fri, 3 Jan 2025 17:59:06 +0700 Subject: [PATCH 6/6] fix(frontend): Make input layout & padding consistent (#9170) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There are a few hardcoded margins and padding in the block input layout, causing the input to sometimes overflow or be used inconsistently. ![image](https://github.com/user-attachments/assets/8a9b8e0d-04fd-4660-94d3-5dfe69cbc77d) ### Changes 🏗️ * Make padding consistent between left & right, top & bottom. * Remove hard-coded margins. * Match the hardcode negative margin for the right node handle to the left node handle. * Make the input box take the full width. ### Checklist 📋 #### For code changes: - [ ] I have clearly listed my changes in the PR description - [ ] I have made a test plan - [ ] I have tested my changes according to the test plan: - [ ] ...
Example test plan - [ ] 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
#### 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**)
Examples of configuration changes - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases
--- .../frontend/src/components/CustomNode.tsx | 10 +++------- .../frontend/src/components/NodeHandle.tsx | 2 +- .../frontend/src/components/customnode.css | 8 ++------ .../src/components/node-input-components.tsx | 19 ++++++++++--------- 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/autogpt_platform/frontend/src/components/CustomNode.tsx b/autogpt_platform/frontend/src/components/CustomNode.tsx index 735abe555..7d2e6c54b 100644 --- a/autogpt_platform/frontend/src/components/CustomNode.tsx +++ b/autogpt_platform/frontend/src/components/CustomNode.tsx @@ -726,13 +726,10 @@ export function CustomNode({ {/* Body */} -
+
{/* Input Handles */} {data.uiType !== BlockUIType.NOTE ? ( -
+
{data.uiType === BlockUIType.WEBHOOK_MANUAL && (data.webhook ? ( @@ -781,7 +778,6 @@ export function CustomNode({
@@ -790,7 +786,7 @@ export function CustomNode({ {data.uiType !== BlockUIType.NOTE && ( <> -
+
{data.outputSchema && generateOutputHandles(data.outputSchema, data.uiType)} diff --git a/autogpt_platform/frontend/src/components/NodeHandle.tsx b/autogpt_platform/frontend/src/components/NodeHandle.tsx index 137e5e4c3..f733c1763 100644 --- a/autogpt_platform/frontend/src/components/NodeHandle.tsx +++ b/autogpt_platform/frontend/src/components/NodeHandle.tsx @@ -82,7 +82,7 @@ const NodeHandle: FC = ({ data-testid={`output-handle-${keyName}`} position={Position.Right} id={keyName} - className="group -mr-[26px]" + className="group -mr-[38px]" >
{label} diff --git a/autogpt_platform/frontend/src/components/customnode.css b/autogpt_platform/frontend/src/components/customnode.css index d947540f4..8e4ed0c87 100644 --- a/autogpt_platform/frontend/src/components/customnode.css +++ b/autogpt_platform/frontend/src/components/customnode.css @@ -15,15 +15,11 @@ .custom-node [data-id^="date-picker"], .custom-node [data-list-container], .custom-node [data-add-item], -.custom-node [data-content-settings] { - min-width: calc(100% - 2.5rem); - max-width: 400px; -} - -.array-item-container { +.custom-node [data-content-settings]. .array-item-container { display: flex; align-items: center; min-width: calc(100% - 2.5rem); + max-width: 100%; } .custom-node .custom-switch { diff --git a/autogpt_platform/frontend/src/components/node-input-components.tsx b/autogpt_platform/frontend/src/components/node-input-components.tsx index 04999420f..b97e2ed4e 100644 --- a/autogpt_platform/frontend/src/components/node-input-components.tsx +++ b/autogpt_platform/frontend/src/components/node-input-components.tsx @@ -201,7 +201,7 @@ export const NodeGenericInputField: FC<{ className, displayName, }) => { - className = cn(className, "my-2"); + className = cn(className); displayName ||= propSchema.title || beautifyString(propKey); if ("allOf" in propSchema) { @@ -876,18 +876,19 @@ const NodeArrayInput: FC<{ (c) => c.targetHandle === entryKey && c.target === nodeId, ); return ( -
+
+
- {!isConnected && (schema.items ? (