mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-08 22:58:01 -05:00
70d00b4104812565f22b10835483009c22e3a83c
7309 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
70d00b4104 |
fix(ci): Delete pr_reviewer section in .pr_agent.toml (#11024)
Remove pr_reviewer section from configuration <!-- Clearly explain the need for these changes: --> ### Changes 🏗️ removes the out of config status section <!-- Concisely describe all of the changes made in this pull request: --> ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] validated by global config |
||
|
|
aad0434cb2 |
feat(frontend): Enhance Sentry integration and TallyPopup telemetry (#10862)
Added Sentry captureConsoleIntegration and extraErrorDataIntegration to client, edge, and server configs. Improved replay integration with unmasking support. Updated TallyPopup to collect and expose Sentry replay data, user agent, and page URL for enhanced telemetry and debugging. Improved event handling and error logging for Tally events. Marked CustomNode title for Sentry unmasking.<!-- Clearly explain the need for these changes: --> ### Changes 🏗️ Reconfigure sentry Pass the id with sentry replay to tally alongside prefilling email, and passing non user identifying attributes like platform url, full url, and is authenticated. <!-- Concisely describe all of the changes made in this pull request: --> ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Test the results show up in sentry - [x] Test the url works in tally |
||
|
|
f33ec1f2ec |
feat(platform): New retention-focused tasks and wallet update (#10977)
### Changes 🏗️ - Rename wallet and update design - Update tasks and add Hidden Tasks section - Update onboarding backend code and related db migration - Add progress bar for some tasks ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] All tasks can be finished - [x] Finished tasks add correct amount of credits --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
e68b873bcf |
chore(frontend/deps): Bump @faker-js/faker from 9.9.0 to 10.0.0 in /autogpt_platform/frontend (#10806)
Bumps [@faker-js/faker](https://github.com/faker-js/faker) from 9.9.0 to 10.0.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/faker-js/faker/releases"><code>@faker-js/faker</code>'s releases</a>.</em></p> <blockquote> <h2>v10.0.0</h2> <h2>New & Noteworthy</h2> <ul> <li>esm only (for cjs support look into migration guide, we got you covered 😉)</li> <li>remove v9 deprecations</li> <li>change default error strategy to 'fail' in word module</li> <li>remove invalid credit card issuer patterns</li> <li>see our <a href="https://v10.fakerjs.dev/guide/upgrading.html">migration guide</a></li> </ul> <h2>What's Changed</h2> <ul> <li>ci: use node 24 by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3543">faker-js/faker#3543</a></li> <li>infra: stop using node 18 by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3536">faker-js/faker#3536</a></li> <li>infra: use import.meta.dirname by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3542">faker-js/faker#3542</a></li> <li>chore(deps): update devdependencies (major) by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3512">faker-js/faker#3512</a></li> <li>chore(deps): update eslint by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3555">faker-js/faker#3555</a></li> <li>chore(deps): update dependency <code>@vitest/eslint-plugin</code> to v1.3.4 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3554">faker-js/faker#3554</a></li> <li>chore(deps): update devdependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3556">faker-js/faker#3556</a></li> <li>chore(deps): lock file maintenance by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3557">faker-js/faker#3557</a></li> <li>feat!: esm only by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3540">faker-js/faker#3540</a></li> <li>refactor!: remove deprecations by <a href="https://github.com/Shinigami92"><code>@Shinigami92</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3553">faker-js/faker#3553</a></li> <li>docs: migration guide for v10 by <a href="https://github.com/matthewmayer"><code>@matthewmayer</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3559">faker-js/faker#3559</a></li> <li>infra: more precise engines field by <a href="https://github.com/matthewmayer"><code>@matthewmayer</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3561">faker-js/faker#3561</a></li> <li>refactor(word)!: change default error strategy to 'fail' by <a href="https://github.com/xDivisionByZerox"><code>@xDivisionByZerox</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3560">faker-js/faker#3560</a></li> <li>chore(release): 10.0.0-beta.0 by <a href="https://github.com/fakerjs-bot"><code>@fakerjs-bot</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3565">faker-js/faker#3565</a></li> <li>docs: Minor improvements to migration guide by <a href="https://github.com/matthewmayer"><code>@matthewmayer</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3569">faker-js/faker#3569</a></li> <li>chore(deps): update pnpm to v10.13.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3570">faker-js/faker#3570</a></li> <li>chore(deps): update devdependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3571">faker-js/faker#3571</a></li> <li>chore(deps): update eslint by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3572">faker-js/faker#3572</a></li> <li>chore(deps): lock file maintenance by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3562">faker-js/faker#3562</a></li> <li>chore(deps): update dependency typescript to v5.9.2 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3576">faker-js/faker#3576</a></li> <li>chore(deps): update pnpm to v10.14.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3579">faker-js/faker#3579</a></li> <li>chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to 2baa40a by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3575">faker-js/faker#3575</a></li> <li>chore(deps): update devdependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3577">faker-js/faker#3577</a></li> <li>chore(deps): update eslint (major) by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3580">faker-js/faker#3580</a></li> <li>chore(deps): update eslint by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3578">faker-js/faker#3578</a></li> <li>feat(locale): extended list of colors in Polish by <a href="https://github.com/pkuczynski"><code>@pkuczynski</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3586">faker-js/faker#3586</a></li> <li>refactor(locale): remove invalid credit card issuer patterns by <a href="https://github.com/xDivisionByZerox"><code>@xDivisionByZerox</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3568">faker-js/faker#3568</a></li> <li>docs: update migration guide with findings from playground update by <a href="https://github.com/xDivisionByZerox"><code>@xDivisionByZerox</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3587">faker-js/faker#3587</a></li> <li>chore: fix typo in test by <a href="https://github.com/noritaka1166"><code>@noritaka1166</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3591">faker-js/faker#3591</a></li> <li>chore(deps): update all non-major dependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3596">faker-js/faker#3596</a></li> <li>chore(deps): update amannn/action-semantic-pull-request action to v6 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3598">faker-js/faker#3598</a></li> <li>chore(deps): update devdependencies by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3599">faker-js/faker#3599</a></li> <li>chore(deps): update actions/checkout action to v5 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3597">faker-js/faker#3597</a></li> <li>chore(deps): update dependency cypress to v15 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3603">faker-js/faker#3603</a></li> <li>chore(deps): update dependency vitepress to v1.6.4 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3601">faker-js/faker#3601</a></li> <li>chore(deps): pin dependency node to 24.6.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3600">faker-js/faker#3600</a></li> <li>chore(deps): update dependency typescript-eslint to v8.40.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3602">faker-js/faker#3602</a></li> <li>chore(deps): update dependency eslint-plugin-jsdoc to v54 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3604">faker-js/faker#3604</a></li> <li>chore(deps): lock file maintenance by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/faker-js/faker/pull/3584">faker-js/faker#3584</a></li> <li>chore(release): 10.0.0 by <a href="https://github.com/fakerjs-bot"><code>@fakerjs-bot</code></a> in <a href="https://redirect.github.com/faker-js/faker/pull/3605">faker-js/faker#3605</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/faker-js/faker/blob/next/CHANGELOG.md"><code>@faker-js/faker</code>'s changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/faker-js/faker/compare/v10.0.0-beta.0...v10.0.0">10.0.0</a> (2025-08-21)</h2> <h3>New Locales</h3> <ul> <li><strong>locale:</strong> extended list of colors in Polish (<a href="https://redirect.github.com/faker-js/faker/issues/3586">#3586</a>) (<a href=" |
||
|
|
4530e97e59 |
feat(platform/blocks): Add table input UI and builder block (#10829)
<!-- Clearly explain the need for these changes: --> https://github.com/user-attachments/assets/909a6ecf-5731-424c-8dee-fe25db907365 ### Need 💡 This PR introduces a new "Table Input" block and corresponding UI component, allowing users to easily input structured, tabular data directly within the agent builder. This addresses the need for a user-friendly way to define custom column headers and populate rows of data, which is then output as a list of dictionaries. ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> * **New `TableInputBlock` (backend):** A new block (`backend/backend/blocks/table_input.py`) has been added. It defines an `Input` schema with `headers` (a list of strings for column names) and `value` (a list of dictionaries representing table rows). The block outputs the `value` data in the specified dictionary format. * **New `NodeTableInput` Component (frontend):** A new React component (`frontend/src/components/node-table-input.tsx`) was created to render an editable table UI, supporting dynamic row addition/removal and cell editing. * **Frontend Integration:** * `NodeGenericInputField` and `NodeObjectInputTree` were updated to pass `parentContext` down the component hierarchy. * `NodeArrayInput` was modified to conditionally render the new `NodeTableInput` component. It now detects when an array field (`selfKey` is "value") is part of a parent context that defines `headers`, indicating it should be rendered as a table. ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Add a "Table Input" block to the builder. - [x] Define custom headers (e.g., "Name", "Email"). - [x] Add several rows of data using the table UI. - [x] Verify that adding, editing, and removing rows works as expected. - [x] Connect the output of the "Table Input" block to another block (e.g., a "Print" block) and confirm the output format is a list of dictionaries with the defined headers as keys. - [x] Test with an empty table (no rows). - [x] Test with no headers defined (should default). - [x] Test that an empty row returns empty data (is this a good behavior? example output of the block ``` { "advanced": false, "column_headers": [ "Col 1", "Col 2", "Col 3" ], "name": "table_input", "value": [ { "Col 1": "row 1", "Col 2": "row 1", "Col 3": "row 1" }, { "Col 1": "val 1", "Col 2": "val 2", "Col 3": "val 3" } ] } ``` --- <a href="https://cursor.com/background-agent?bcId=bc-b8d31867-1034-4374-852c-b92ca69cc399"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-cursor-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-cursor-light.svg"> <img alt="Open in Cursor" src="https://cursor.com/open-in-cursor.svg"> </picture> </a> <a href="https://cursor.com/agents?id=bc-b8d31867-1034-4374-852c-b92ca69cc399"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-web-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-web-light.svg"> <img alt="Open in Web" src="https://cursor.com/open-in-web.svg"> </picture> </a> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Nicholas Tindle <ntindle@users.noreply.github.com> |
||
|
|
477c261488 |
feat(blocks): Add claude-sonnet-4.5 (#11023)
## Summary
Adds claude-sonnet-4.5 model to the platform and sets the price to 9
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] test the new claude-sonnet-4.5 model on the platform to make sure
it works
|
||
|
|
8ac2228e1e |
chore(frontend/deps): Upgrade @sentry/nextjs from 9.42.0 to 10.8.0 (#10802)
Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 9.42.0 to 10.8.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/releases"><code>@sentry/nextjs</code>'s releases</a>.</em></p> <blockquote> <h2>10.8.0</h2> <h3>Important Changes</h3> <ul> <li> <p><strong>feat(sveltekit): Add Compatibility for builtin SvelteKit Tracing (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17423">#17423</a>)</strong></p> <p>This release makes the <code>@sentry/sveltekit</code> SDK compatible with SvelteKit's native <a href="https://svelte.dev/docs/kit/observability">observability support</a> introduced in SvelteKit version <code>2.31.0</code>. If you enable both, instrumentation and tracing, the SDK will now initialize early enough to set up additional instrumentation like database queries and it will pick up spans emitted from SvelteKit.</p> <p>We will follow up with docs how to set up the SDK soon. For now, If you're on SvelteKit version <code>2.31.0</code> or newer, you can easily opt into the new feature:</p> <ol> <li> <p>Enable <a href="https://svelte.dev/docs/kit/observability">experimental tracing and instrumentation support</a> in <code>svelte.config.js</code>:</p> </li> <li> <p>Move your <code>Sentry.init()</code> call from <code>src/hooks.server.(js|ts)</code> to the new <code>instrumentation.server.(js|ts)</code> file:</p> <pre lang="ts"><code>// instrumentation.server.ts import * as Sentry from '@sentry/sveltekit'; <p>Sentry.init({<br /> dsn: '...',<br /> // rest of your config<br /> });<br /> </code></pre></p> <p>The rest of your Sentry config in <code>hooks.server.ts</code> (<code>sentryHandle</code> and <code>handleErrorWithSentry</code>) should stay the same.</p> </li> </ol> <p>If you prefer to stay on the hooks-file based config for now, the SDK will continue to work as previously.</p> <p>Thanks to the Svelte team and <a href="https://github.com/elliott-with-the-longest-name-on-github"><code>@elliott-with-the-longest-name-on-github</code></a> for implementing observability support and for reviewing our PR!</p> </li> </ul> <h3>Other Changes</h3> <ul> <li>fix(react): Avoid multiple name updates on navigation spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17438">#17438</a>)</li> </ul> <!-- raw HTML omitted --> <ul> <li>test(profiling): Add tests for current state of profiling (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17470">#17470</a>)</li> </ul> <!-- raw HTML omitted --> <h2>Bundle size 📦</h2> <table> <thead> <tr> <th>Path</th> <th>Size</th> </tr> </thead> <tbody> <tr> <td><code>@sentry/browser</code></td> <td>23.59 KB</td> </tr> <tr> <td><code>@sentry/browser</code> - with treeshaking flags</td> <td>22.2 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing)</td> <td>38.94 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay)</td> <td>76.4 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay) - with treeshaking flags</td> <td>66.43 KB</td> </tr> </tbody> </table> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md"><code>@sentry/nextjs</code>'s changelog</a>.</em></p> <blockquote> <h2>10.8.0</h2> <h3>Important Changes</h3> <ul> <li> <p><strong>feat(sveltekit): Add Compatibility for builtin SvelteKit Tracing (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17423">#17423</a>)</strong></p> <p>This release makes the <code>@sentry/sveltekit</code> SDK compatible with SvelteKit's native <a href="https://svelte.dev/docs/kit/observability">observability support</a> introduced in SvelteKit version <code>2.31.0</code>. If you enable both, instrumentation and tracing, the SDK will now initialize early enough to set up additional instrumentation like database queries and it will pick up spans emitted from SvelteKit.</p> <p>We will follow up with docs how to set up the SDK soon. For now, If you're on SvelteKit version <code>2.31.0</code> or newer, you can easily opt into the new feature:</p> <ol> <li> <p>Enable <a href="https://svelte.dev/docs/kit/observability">experimental tracing and instrumentation support</a> in <code>svelte.config.js</code>:</p> </li> <li> <p>Move your <code>Sentry.init()</code> call from <code>src/hooks.server.(js|ts)</code> to the new <code>instrumentation.server.(js|ts)</code> file:</p> <pre lang="ts"><code>// instrumentation.server.ts import * as Sentry from '@sentry/sveltekit'; <p>Sentry.init({<br /> dsn: '...',<br /> // rest of your config<br /> });<br /> </code></pre></p> <p>The rest of your Sentry config in <code>hooks.server.ts</code> (<code>sentryHandle</code> and <code>handleErrorWithSentry</code>) should stay the same.</p> </li> </ol> <p>If you prefer to stay on the hooks-file based config for now, the SDK will continue to work as previously.</p> <p>Thanks to the Svelte team and <a href="https://github.com/elliott-with-the-longest-name-on-github"><code>@elliott-with-the-longest-name-on-github</code></a> for implementing observability support and for reviewing our PR!</p> </li> </ul> <h3>Other Changes</h3> <ul> <li>fix(react): Avoid multiple name updates on navigation spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17438">#17438</a>)</li> </ul> <!-- raw HTML omitted --> <ul> <li>test(profiling): Add tests for current state of profiling (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17470">#17470</a>)</li> </ul> <!-- raw HTML omitted --> <h2>10.7.0</h2> <h3>Important Changes</h3> <ul> <li><strong>feat(cloudflare): Add <code>instrumentPrototypeMethods</code> option to instrument RPC methods for DurableObjects (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17424">#17424</a>)</strong></li> </ul> <p>By default, <code>Sentry.instrumentDurableObjectWithSentry</code> will not wrap any RPC methods on the prototype. To enable wrapping for RPC methods, set <code>instrumentPrototypeMethods</code> to <code>true</code> or, if performance is a concern, a list of only the methods you want to instrument:</p> <pre lang="js"><code></tr></table> </code></pre> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
91dd9364bb |
fix(backend): implement retry mechanism for SmartDecisionMaker tool call validation (#11015)
<!-- Clearly explain the need for these changes: --> This PR fixes a critical production issue where SmartDecisionMakerBlock was silently accepting tool calls with typo'd parameter names (e.g., 'maximum_keyword_difficulty' instead of 'max_keyword_difficulty'), causing downstream blocks to receive null values and execution failures. The solution implements comprehensive parameter validation with automatic retry when the LLM provides malformed tool calls, giving the LLM specific feedback to correct the errors. ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> **Core Validation & Retry Logic (`backend/blocks/smart_decision_maker.py`)** - Add tool call parameter validation against function schema - Implement retry mechanism using existing `create_retry_decorator` from `backend.util.retry` - Validate provided parameters against expected schema properties and required fields - Generate specific error messages for unknown parameters (typos) and missing required parameters - Add error feedback to conversation history for LLM learning on retry attempts - Use `input_data.retry` field to configure number of retry attempts **Comprehensive Test Coverage (`backend/blocks/test/test_smart_decision_maker.py`)** - Add `test_smart_decision_maker_parameter_validation` with 4 comprehensive test scenarios: 1. Tool call with typo'd parameter (should retry and eventually fail with clear error) 2. Tool call missing required parameter (should fail immediately with clear error) 3. Valid tool call with optional parameter missing (should succeed) 4. Valid tool call with all parameters provided (should succeed) - Verify retry mechanism works correctly and respects retry count - Mock LLM responses for controlled testing of validation logic **Load Tests Documentation Update (`load-tests/README.md`)** - Update documentation to reflect current orchestrator-based architecture - Remove references to deprecated `run-tests.js` and `comprehensive-orchestrator.js` - Streamline documentation to focus on working `orchestrator/orchestrator.js` - Update NPM scripts and command examples for current workflow - Clean up outdated file references to match actual infrastructure **Production Impact** - **Prevents silent failures**: Tool call parameter typos now cause retries instead of null downstream values - **Maintains compatibility**: No breaking changes to existing SmartDecisionMaker functionality - **Improves reliability**: LLM receives feedback to correct parameter errors - **Configurable retries**: Uses existing `retry` field for user control - **Accurate documentation**: Load-tests docs now match actual working infrastructure ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Run existing SmartDecisionMaker tests to ensure no regressions: `poetry run pytest backend/blocks/test/test_smart_decision_maker.py -xvs` ✅ All 4 tests passed - [x] Run new parameter validation test specifically: `poetry run pytest backend/blocks/test/test_smart_decision_maker.py::test_smart_decision_maker_parameter_validation -xvs` ✅ Passed with retry behavior confirmed - [x] Verify retry mechanism works by checking log output for retry attempts ✅ Confirmed in test logs - [x] Test tool call validation with different scenarios (typos, missing params, valid calls) ✅ All scenarios covered and working - [x] Run code formatting and linting: `poetry run format` ✅ All formatters passed - [x] Verify no breaking changes to existing SmartDecisionMaker functionality ✅ All existing tests pass - [x] Verify load-tests documentation accuracy ✅ README now matches actual orchestrator infrastructure #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) **Note**: No configuration changes were needed as this uses existing retry infrastructure and block schema validation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
f314fbf14f |
fix(backend): resolve two critical long-running agent execution failures (#11011)
## Summary
Fix two production issues causing agent execution failures that occurred
this morning:
1. **AsyncRedisLock Release Error** (ExecutionID:
08b2c251-ee27-45de-b88d-1792823ca3ee)
- Error: "Cannot release a lock that's no longer owned"
- Root cause: Race condition where lock expires during long database
operations
- Location: backend/executor/manager.py synchronized context manager
2. **Tool Call Parameter Validation** (ExecutionID:
766fd9a0-5f22-4a77-96e8-14c9d02f3292)
- Issue: LLM used typo'd parameter 'maximum_keyword_difficulty' instead
of 'max_keyword_difficulty'
- SmartDecisionMakerBlock silently accepted typo, setting correct
parameter to null
- Result: Downstream blocks received null values causing execution
failures
## Changes Made
### AsyncRedisLock Error Handling
- Add try-catch blocks around AsyncRedisLock.release() calls in
ExecutionManager and OAuth refresh
- Prevent crashes when locks expire between ownership check and release
- Log warnings instead of crashing execution
### Tool Call Parameter Validation
- **Reject unknown parameters**: Raise ValueError for typo'd parameter
names with detailed error messages
- **Allow optional parameters**: Only validate missing REQUIRED
parameters
- **Safe parameter access**: Use .get() to handle optional parameters
with defaults
- **Clean code**: Extract parameters object once to eliminate
duplication
## Technical Implementation
**Lock Release Protection:**
```python
if await lock.locked() and await lock.owned():
try:
await lock.release()
except Exception as e:
logger.warning(f"Failed to release lock for key {key}: {e}")
```
**Parameter Validation Logic:**
```python
# Get parameters schema from tool definition
if tool_def and "function" in tool_def and "parameters" in tool_def["function"]:
parameters = tool_def["function"]["parameters"]
expected_args = parameters.get("properties", {})
required_params = set(parameters.get("required", []))
# Detect parameter typos and missing required params
unexpected_args = provided_args - expected_args_set
missing_required_args = required_params - provided_args
if unexpected_args or missing_required_args:
raise ValueError(error_msg) # Detailed error explaining the problem
```
## Testing
- [x] All existing tests pass
- [x] Lock error handling prevents execution crashes
- [x] Tool validation catches typos while allowing optional parameters
- [x] Maintains backward compatibility with existing workflows
## Impact
- ✅ No more "Cannot release a lock" crashes during long database
operations
- ✅ Tool calls with typo'd parameters are rejected with clear error
messages
- ✅ Optional parameters work correctly with default values
- ✅ Production stability improved with graceful error handling
## Files Modified
- `backend/executor/manager.py` - AsyncRedisLock error handling in
synchronized context
- `backend/integrations/creds_manager.py` - OAuth refresh lock error
handling
- `backend/blocks/smart_decision_maker.py` - Tool call parameter
validation with typo detection
Fixes two critical production failures that were causing 2/5 agent runs
to fail this morning.
---------
Co-authored-by: Claude <noreply@anthropic.com>
|
||
|
|
a97ff641c3 |
feat(backend): optimize FastAPI endpoints performance and alert system (#11000)
## Summary Comprehensive performance optimization fixing event loop binding issues and addressing all PR feedback. ### Original Performance Issues Fixed **Event Loop Binding Problems:** - JWT authentication dependencies were synchronous, causing thread pool bottlenecks under high concurrency - FastAPI's default thread pool (40 threads) was insufficient for high-load scenarios - Backend services lacked proper event loop configuration **Security & Performance Improvements:** - Security middleware converted from BaseHTTPMiddleware to pure ASGI for better performance - Added blocks endpoint to cacheable paths for improved response times - Cross-platform uvloop detection with Windows compatibility ### Key Changes Made #### 1. JWT Authentication Async Conversion - **Files**: `autogpt_libs/auth/dependencies.py`, `autogpt_libs/auth/jwt_utils.py` - **Change**: Convert all JWT functions to async (`requires_user`, `requires_admin_user`, `get_user_id`, `get_jwt_payload`) - **Impact**: Eliminates thread pool blocking, improves concurrency handling - **Tests**: All 25+ authentication tests updated to async patterns #### 2. FastAPI Thread Pool Optimization - **File**: `backend/server/rest_api.py:82-93` - **Change**: Configure thread pool size via `config.fastapi_thread_pool_size` - **Default**: Increased from 40 to higher limit for sync operations - **Impact**: Better handling of remaining sync dependencies #### 3. Performance-Optimized Security Middleware - **File**: `backend/server/middleware/security.py` - **Change**: Pure ASGI implementation replacing BaseHTTPMiddleware - **Headers**: HTTP spec compliant capitalization (X-Content-Type-Options, X-Frame-Options, etc.) - **Caching**: Added `/api/blocks` and `/api/v1/blocks` to cacheable paths - **Impact**: Reduced middleware overhead, improved header compliance #### 4. Cross-Platform Event Loop Configuration - **File**: `backend/server/rest_api.py:311-312` - **Change**: Platform-aware uvloop detection: `'uvloop' if platform.system() != 'Windows' else 'auto'` - **Impact**: Windows compatibility while maintaining Unix performance benefits - **Verified**: 'auto' is valid uvicorn default parameter #### 5. Enhanced Caching Infrastructure - **File**: `autogpt_libs/utils/cache.py:118-132` - **Change**: Per-event-loop asyncio.Lock instances prevent cross-loop deadlocks - **Impact**: Thread-safe caching across multiple event loops #### 6. Database Query Limits & Performance - **Files**: Multiple data layer files - **Change**: Added configurable limits to prevent unbounded queries - **Constants**: `MAX_GRAPH_VERSIONS_FETCH=50`, `MAX_USER_API_KEYS_FETCH=500`, etc. - **Impact**: Consistent performance regardless of data volume #### 7. OpenAPI Documentation Improvements - **File**: `backend/server/routers/v1.py:68-85` - **Change**: Added proper response model and schema for blocks endpoint - **Impact**: Better API documentation and type safety #### 8. Error Handling & Retry Logic Fixes - **File**: `backend/util/retry.py:63` - **Change**: Accurate retry threshold comments referencing EXCESSIVE_RETRY_THRESHOLD - **Impact**: Clear documentation for debugging retry scenarios ### ntindle Feedback Addressed ✅ **HTTP Header Capitalization**: All headers now use proper HTTP spec capitalization ✅ **Windows uvloop Compatibility**: Clean platform detection with inline conditional ✅ **OpenAPI Response Model**: Blocks endpoint properly documented in schema ✅ **Retry Comment Accuracy**: References actual threshold constants instead of hardcoded numbers ✅ **Code Cleanliness**: Inline conditionals preferred over verbose if statements ### Performance Testing Results **Before Optimization:** - High latency under concurrent load - Thread pool exhaustion at ~40 concurrent requests - Event loop binding issues causing timeouts **After Optimization:** - Improved concurrency handling with async JWT pipeline - Configurable thread pool scaling - Cross-platform event loop optimization - Reduced middleware overhead ### Backward Compatibility ✅ **All existing functionality preserved** ✅ **No breaking API changes** ✅ **Enhanced test coverage with async patterns** ✅ **Windows and Unix compatibility maintained** ### Files Modified **Core Authentication & Performance:** - `autogpt_libs/auth/dependencies.py` - Async JWT dependencies - `autogpt_libs/auth/jwt_utils.py` - Async JWT utilities - `backend/server/rest_api.py` - Thread pool config + uvloop detection - `backend/server/middleware/security.py` - ASGI security middleware **Database & Limits:** - `backend/data/includes.py` - Performance constants and configurable includes - `backend/data/api_key.py`, `backend/data/credit.py`, `backend/data/graph.py`, `backend/data/integrations.py` - Query limits **Caching & Infrastructure:** - `autogpt_libs/utils/cache.py` - Per-event-loop lock safety - `backend/server/routers/v1.py` - OpenAPI improvements - `backend/util/retry.py` - Comment accuracy **Testing:** - `autogpt_libs/auth/dependencies_test.py` - 25+ async test conversions - `autogpt_libs/auth/jwt_utils_test.py` - Async JWT test patterns Ready for review and production deployment. 🚀 --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
114f604d7b | Merge branch 'master' of github.com:Significant-Gravitas/AutoGPT into dev | ||
|
|
3abea1ed96 |
fix(backend): prevent duplicate graph executions across multiple executor pods (#11008)
## Problem Multiple executor pods could simultaneously execute the same graph, leading to: - Duplicate executions and wasted resources - Inconsistent execution states and results - Race conditions in graph execution management - Inefficient resource utilization in cluster environments ## Solution Implement distributed locking using ClusterLock to ensure only one executor pod can process a specific graph execution at a time. ## Key Changes ### Core Fix: Distributed Execution Coordination - **ClusterLock implementation**: Redis-based distributed locking prevents duplicate executions - **Atomic lock acquisition**: Only one executor can hold the lock for a specific graph execution - **Automatic lock expiry**: Prevents deadlocks if executor pods crash or become unresponsive - **Graceful degradation**: System continues operating even if Redis becomes temporarily unavailable ### Technical Implementation - Move ClusterLock to `backend/executor/` alongside ExecutionManager (its primary consumer) - Comprehensive integration tests (27 test scenarios) ensure reliability under all conditions - Redis client compatibility for different deployment configurations - Rate-limited lock refresh to minimize Redis load ### Reliability Improvements - **Context manager support**: Automatic lock cleanup prevents resource leaks - **Ownership verification**: Locks can only be refreshed/released by the owner - **Concurrency testing**: Thread-safe operations verified under high contention - **Error handling**: Robust failure scenarios including network partitions ## Test Coverage - ✅ Concurrent executor coordination (prevents duplicate executions) - ✅ Lock expiry and refresh mechanisms (prevents deadlocks) - ✅ Redis connection failures (graceful degradation) - ✅ Thread safety under high load (production scenarios) - ✅ Long-running executions with periodic refresh ## Impact - **No more duplicate executions**: Eliminates wasted compute resources and inconsistent results - **Improved reliability**: Robust distributed coordination across executor pods - **Better resource utilization**: Only one pod processes each execution - **Scalable architecture**: Supports multiple executor pods without conflicts ## Validation - All integration tests pass ✅ - Existing ExecutionManager functionality preserved ✅ - No breaking changes to APIs ✅ - Production-ready distributed locking ✅ 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
da6e1ad26d |
refactor(frontend): enhance builder UI for better performance (#10922)
### Changes 🏗️ This PR introduces a new high-performance builder interface for the AutoGPT platform, implementing a React Flow-based visual editor with optimized state management and rendering. #### Key Changes: 1. **New Flow Editor Implementation** - Built on React Flow for efficient graph rendering and interaction - Implements a node-based visual workflow builder with custom nodes and edges - Dynamic form generation using React JSON Schema Form (RJSF) for block inputs - Intelligent connection handling with visual feedback 2. **State Management Optimization** - Added Zustand for lightweight, performant state management - Separated node and edge stores for better data isolation - Reduced unnecessary re-renders through granular state updates 3. **Dual Builder View (Temporary)** - Added toggle between old and new builder implementations - Allows A/B testing and gradual migration - Feature flagged for controlled rollout 4. **Enhanced UI Components** - Custom form widgets for various input types (date, time, file, etc.) - Array and object editors with improved UX - Connection handles with visual state indicators - Advanced mode toggle for complex configurations 5. **Architecture Improvements** - Modular component structure for better code organization - Comprehensive documentation for the new system - Type-safe implementation with TypeScript #### Dependencies Added: - `zustand` (v5.0.2) - State management - `@rjsf/core` (v5.22.8) - JSON Schema Form core - `@rjsf/utils` (v5.22.8) - RJSF utilities - `@rjsf/validator-ajv8` (v5.22.8) - Schema validation ### Performance Improvements 🚀 - **Reduced Re-renders**: Zustand's shallow comparison and selective subscriptions minimize unnecessary component updates - **Optimized Graph Rendering**: React Flow provides efficient canvas-based rendering for large workflows - **Lazy Loading**: Components are loaded on-demand reducing initial bundle size - **Memoized Computations**: Heavy calculations are cached to avoid redundant processing ### Test Plan 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: #### Test Checklist: - [x] Create a new agent from scratch with at least 5 blocks - [x] Connect blocks and verify connections render correctly - [x] Switch between old and new builder views - [x] Test all form input types (text, number, boolean, array, object) - [x] Verify data persistence when switching views - [x] Test advanced mode toggle functionality - [x] Performance test with 50+ blocks to verify smooth interaction ### Migration Strategy The implementation includes a temporary toggle to switch between the old and new builder. This allows for: - Gradual user migration - A/B testing to measure performance improvements - Fallback option if issues are discovered - Collecting user feedback before full rollout ### Documentation Comprehensive documentation has been added: - `/components/FlowEditor/docs/README.md` - Architecture overview and store management - `/components/FlowEditor/docs/FORM_CREATOR.md` - Detailed form system documentation --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
634fffb967 |
fix(blocks): Handle NoneType in DataForSEO Blocks and Add missing Err (#11004)
This PR fixes critical issues in the DataForSEO blocks to improve error handling and prevent runtime exceptions. ### Changes 🏗️ 1. **Fixed NoneType error in DataForSEO Related Keywords Block** (#10990) - Added null check to ensure `items` is always a list before iteration - Prevents TypeError when API returns None for items field - Ensures robust handling of unexpected API responses 2. **Added error output pins to DataForSEO blocks** (#10981) - Added `error` field to Output schema in both `related_keywords.py` and `keyword_suggestions.py` - Wrapped entire `run` methods in try-except blocks - Errors are now properly yielded to the error output pin, allowing agents to handle failures gracefully ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Verified that DataForSEO blocks handle None responses without throwing TypeError - [x] Confirmed error output pins capture and yield exceptions properly - [x] Ensured backwards compatibility with existing block implementations - [x] Tested both Related Keywords and Keyword Suggestions blocks #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) --- Fixes #10990 Fixes #10981 Generated with [Claude Code](https://claude.ai/code) <!-- Clearly explain the need for these changes: --> ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> ### Checklist 📋 #### For code changes: - [ ] I have clearly listed my changes in the PR description - [ ] I have made a test plan - [ ] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.default` 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: Toran Bruce Richards <toran.richards@gmail.com> |
||
|
|
f3ec426c82 |
fix(blocks): Handle NoneType in DataForSEO Blocks and Add missing Error pins (#10995)
This PR fixes critical issues in the DataForSEO blocks to improve error handling and prevent runtime exceptions. ### Changes 🏗️ 1. **Fixed NoneType error in DataForSEO Related Keywords Block** (#10990) - Added null check to ensure `items` is always a list before iteration - Prevents TypeError when API returns None for items field - Ensures robust handling of unexpected API responses 2. **Added error output pins to DataForSEO blocks** (#10981) - Added `error` field to Output schema in both `related_keywords.py` and `keyword_suggestions.py` - Wrapped entire `run` methods in try-except blocks - Errors are now properly yielded to the error output pin, allowing agents to handle failures gracefully ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Verified that DataForSEO blocks handle None responses without throwing TypeError - [x] Confirmed error output pins capture and yield exceptions properly - [x] Ensured backwards compatibility with existing block implementations - [x] Tested both Related Keywords and Keyword Suggestions blocks #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) --- Fixes #10990 Fixes #10981 Generated with [Claude Code](https://claude.ai/code) |
||
|
|
0b267f573e |
feat(blocks): Improve JSON generation+parsing in AI Structured Response block (#10960)
The AI Structured Response Generator block currently doesn't support responses that aren't pure JSON. This prohibits multi-step prompting because reasoning content is not allowed in the response, which in turn limits performance. ### Changes 🏗️ - Adjust prompt to enclose JSON in pre-defined tags so we can extract it from a response that isn't pure JSON - Adjust mechanism to extract and parse JSON - Add `force_json_output` input (advanced, default `False`) - Update incorrect `max_output_tokens` values for Claude 4 and 3.7 to prevent responses from being cut off due to `max_tokens` ### Checklist 📋 #### For code changes: - [x] I have clearly listed 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] LLMs correctly follows response generation instructions - [x] LLMs follow system response format instructions even if user prompt contains conflicting instructions - [x] JSON is extracted from response successfully - [x] `force_json_output` works (at least for models that support it) Tested with Claude 4 Sonnet, various GPT models, and Llama 3.3 70B. --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
7bd571d9ce |
fix(blocks): Default disable HTML escaping in all blocks with templating features (#10955)
- Resolves #10954 Unnecessary escaping distorts content and so should be disabled wherever the output isn't used in HTML. ### Changes 🏗️ - Disable HTML escaping on prompt value insertion in AI blocks - Make HTML escaping optional in text formatting and output blocks ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] `SandboxedEnvironment(autoescape=False).from_string(template_str).render(values)` doesn't escape characters with HTML entities |
||
|
|
7a331651ba |
feat(backend): enhance database indexes for AgentGraph and AgentGraphExecution performance (#10985)
## Summary Enhances database performance by improving indexes on `AgentGraph` and `AgentGraphExecution` tables for better query efficiency. ### Changes 🏗️ - **Database Schema**: Updated Prisma schema to enhance database indexes - Modified `AgentGraph` index from `[userId, isActive]` to `[userId, isActive, id, version]` for better compound query performance - Enhanced `AgentGraphExecution` index from `[userId]` to `[userId, isDeleted, createdAt]` to support filtered queries with sorting - **Migration**: Auto-generated Prisma migration to implement the index changes - Drops existing indexes: `AgentGraph_userId_isActive_idx` and `AgentGraphExecution_userId_idx` - Creates new compound indexes: `AgentGraph_userId_isActive_id_version_idx` and `AgentGraphExecution_userId_isDeleted_createdAt_idx` ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Verified migration runs successfully - [x] Confirmed database queries continue to work with new indexes - [x] Tested that existing functionality remains unaffected #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
5bc69adc33 | Merge branch 'master' of github.com:Significant-Gravitas/AutoGPT into dev | ||
|
|
f4bcc8494f |
hotfix: Fix Agent node missing inputs and outputs (#10987)
Restore `include=AGENT_GRAPH_INCLUDE` that is needed to build schema
from the nodes.
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] I/O is back on the Agent node
|
||
|
|
4c000086e6 |
feat(backend): implement clean k6 load testing infrastructure (#10978)
## Summary Implement comprehensive k6 load testing infrastructure for the AutoGPT Platform with clean file organization, unified test runner, and cloud integration. ## Key Features ### 🗂️ Clean File Organization - **tests/basic/**: Simple validation tests (connectivity, single endpoints) - **tests/api/**: Core functionality tests (API endpoints, graph execution) - **tests/marketplace/**: User-facing feature tests (public/library access) - **tests/comprehensive/**: End-to-end scenario tests (complete user journeys) - **orchestrator/**: Advanced test orchestration for full suites ### 🚀 Unified Test Runner - **Single entry point**: `run-tests.js` for both local and cloud execution - **7 available tests**: From basic connectivity to comprehensive platform journeys - **Flexible execution**: Run individual tests, comma-separated lists, or all tests - **Auto-configuration**: Different VU/duration settings for local vs cloud execution ### 🔐 Advanced Authentication - **Pre-authenticated tokens**: 24-hour JWT tokens eliminate Supabase rate limiting - **Configurable generation**: Default 10 tokens, scalable to 150+ for high concurrency - **Graceful handling**: Proper auth failure detection and recovery - **ES module compatible**: Modern JavaScript with full import/export support ### ☁️ k6 Cloud Integration - **Cloud execution**: Tests run on k6 cloud infrastructure for consistent results - **Real-time monitoring**: Live dashboards with performance metrics - **URL tracking**: Automatic test result URL capture and storage - **Sequential orchestration**: Proper delays between tests for resource management ## Test Coverage ### Performance Validated - **Core API**: 100 VUs successfully testing `/api/credits`, `/api/graphs`, `/api/blocks`, `/api/executions` - **Graph Execution**: 80 VUs for complete workflow pipeline testing - **Marketplace**: 150 VUs for public browsing, 100 VUs for authenticated library operations - **Authentication**: 150+ concurrent users with pre-authenticated token scaling ### User Journey Simulation - **Dashboard workflows**: Credits checking, graph management, execution monitoring - **Marketplace browsing**: Public search, agent discovery, category filtering - **Library operations**: Agent adding, favoriting, forking, detailed views - **Complete workflows**: End-to-end platform usage with realistic user behavior ## Technical Implementation ### ES Module Compatibility - Full ES module support with modern JavaScript imports/exports - Proper module execution patterns for Node.js compatibility - Clean separation between CommonJS legacy and modern ES modules ### Error Handling & Monitoring - **Separate metrics**: HTTP status, authentication, JSON validation, overall success - **Graceful degradation**: Auth failures don't crash VUs, proper error tracking - **Performance thresholds**: Configurable P95/P99 latency and error rate limits - **Custom counters**: Track operation types, success rates, user journey completion ### Infrastructure Benefits - **Rate limit protection**: Pre-auth tokens prevent Supabase auth bottlenecks - **Scalable testing**: Support for 150+ concurrent users with proper token management - **Cloud consistency**: Tests run on dedicated k6 cloud servers for reliable results - **Development workflow**: Local execution for debugging, cloud for performance validation ## Usage ### Quick Start ```bash # Setup and verification export SUPABASE_SERVICE_KEY="your-service-key" node generate-tokens.js node run-tests.js verify # Local testing (development) node run-tests.js run core-api-test DEV # Cloud testing (performance) node run-tests.js cloud all DEV ``` ### NPM Scripts ```bash npm run verify # Quick setup check npm test # All tests locally npm run cloud # All tests in k6 cloud ``` ## Validation Results ✅ **Authentication**: 100% success rate with fresh 24-hour tokens ✅ **File Structure**: All imports and references verified correct ✅ **Test Execution**: All 7 tests execute successfully with proper metrics ✅ **Cloud Integration**: k6 cloud execution working with proper credentials ✅ **Documentation**: Complete README with usage examples and troubleshooting ## Files Changed ### Core Infrastructure - `run-tests.js`: Unified test runner supporting local/cloud execution - `generate-tokens.js`: ES module compatible token generation with 24-hour expiry - `README.md`: Comprehensive documentation with updated file references ### Organized Test Structure - `tests/basic/connectivity-test.js`: Basic connectivity validation - `tests/basic/single-endpoint-test.js`: Individual API endpoint testing - `tests/api/core-api-test.js`: Core authenticated API endpoints - `tests/api/graph-execution-test.js`: Graph workflow pipeline testing - `tests/marketplace/public-access-test.js`: Public marketplace browsing - `tests/marketplace/library-access-test.js`: Authenticated marketplace/library operations - `tests/comprehensive/platform-journey-test.js`: Complete user journey simulation ### Configuration - `configs/environment.js`: Environment URLs and performance settings - `package.json`: NPM scripts and dependencies for unified workflow This infrastructure provides a solid foundation for continuous performance monitoring and load testing of the AutoGPT Platform. 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
9c6cc5b29d | Merge branch 'dev' autogpt-platform-beta-v0.6.30 | ||
|
|
b34973ca47 |
feat: Add 'depth' parameter to DataForSEO Related Keywords block (#10983)
Fixes #10982 <!-- Clearly explain the need for these changes: --> The DataForSEO Related Keywords block was missing the `depth` parameter, which is a critical parameter that controls the comprehensiveness of keyword research. The depth parameter determines the number of related keywords returned by the API, ranging from 1 keyword at depth 0 to approximately 4680 keywords at depth 4. ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - Added `depth` parameter to the DataForSEO Related Keywords block as an integer input field (range 0-4) - Added `depth` parameter to the `related_keywords` method signature in the API client - Updated the API client to include the depth parameter in the request payload when provided - Added documentation explaining the depth parameter's effect on the number of returned keywords - Fixed missing parameter in function signature that was causing runtime errors ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Verified the depth parameter appears correctly in the block UI with appropriate range validation (0-4) - [x] Confirmed the parameter is passed correctly to the API client - [x] Tested that omitting the depth parameter doesn't break existing functionality (defaults to None) - [x] Verified the implementation follows the existing pattern for optional parameters in the DataForSEO blocks #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) Note: No configuration changes were required for this feature addition. --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Toran Bruce Richards <Torantulino@users.noreply.github.com> |
||
|
|
2bc6a56877 |
fix(backend): Fix GCS timeout error in FileInput blocks (#10976)
## Summary - Fixed "Timeout context manager should be used inside a task" error occurring intermittently in FileInput blocks when downloading files from Google Cloud Storage - Implemented proper async session management for GCS client to ensure operations run within correct task context - Added comprehensive logging to help diagnose and monitor the issue in production ## Changes ### Core Fix - Modified `CloudStorageHandler._retrieve_file_gcs()` to create a fresh GCS client and session for each download operation - This ensures the aiohttp session is always created within the proper async task context, preventing the timeout error - The fix trades a small amount of efficiency for reliability, but only affects download operations ### Logging Enhancements - Added detailed logging in `store_media_file()` to track execution context and async task state - Enhanced `scan_content_safe()` to specifically catch and log timeout errors with CRITICAL level - Added context logging in virus scanner around `asyncio.create_task()` calls - Upgraded key debug logs to info level for visibility in production ### Code Quality - Fixed unbound variable issue where `async_client` could be referenced before initialization - Replaced bare `except:` clauses with proper exception handling - Fixed unused parameters warning in `__aexit__` method ## Testing - The timeout error was occurring intermittently in production when FileInput blocks processed GCS files - With these changes, the error should be eliminated as the session is always created in the correct context - Comprehensive logging allows monitoring of the fix effectiveness in production ## Context The root cause was that `gcloud-aio-storage` was creating its internal aiohttp session/timeout context outside of an async task context when called by the executor. This happened intermittently depending on how the executor scheduled block execution. ## Related Issues - Addresses timeout errors reported in FileInput block execution - Improves reliability of file uploads from the platform ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Test a multiple file input agent and it works - [x] Test the agent that is causing the failure and it works 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
87c773d03a |
fix(backend): Fix GCS timeout error in FileInput blocks (#10976)
## Summary - Fixed "Timeout context manager should be used inside a task" error occurring intermittently in FileInput blocks when downloading files from Google Cloud Storage - Implemented proper async session management for GCS client to ensure operations run within correct task context - Added comprehensive logging to help diagnose and monitor the issue in production ## Changes ### Core Fix - Modified `CloudStorageHandler._retrieve_file_gcs()` to create a fresh GCS client and session for each download operation - This ensures the aiohttp session is always created within the proper async task context, preventing the timeout error - The fix trades a small amount of efficiency for reliability, but only affects download operations ### Logging Enhancements - Added detailed logging in `store_media_file()` to track execution context and async task state - Enhanced `scan_content_safe()` to specifically catch and log timeout errors with CRITICAL level - Added context logging in virus scanner around `asyncio.create_task()` calls - Upgraded key debug logs to info level for visibility in production ### Code Quality - Fixed unbound variable issue where `async_client` could be referenced before initialization - Replaced bare `except:` clauses with proper exception handling - Fixed unused parameters warning in `__aexit__` method ## Testing - The timeout error was occurring intermittently in production when FileInput blocks processed GCS files - With these changes, the error should be eliminated as the session is always created in the correct context - Comprehensive logging allows monitoring of the fix effectiveness in production ## Context The root cause was that `gcloud-aio-storage` was creating its internal aiohttp session/timeout context outside of an async task context when called by the executor. This happened intermittently depending on how the executor scheduled block execution. ## Related Issues - Addresses timeout errors reported in FileInput block execution - Improves reliability of file uploads from the platform ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Test a multiple file input agent and it works - [x] Test the agent that is causing the failure and it works 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
ebeefc96e8 |
feat(backend): implement caching layer for store API endpoints (Part 1) (#10975)
## Summary
This PR introduces comprehensive caching for the Store API endpoints to
improve performance and reduce database load. This is **Part 1** in a
series of PRs to add comprehensive caching across our entire API.
### Key improvements:
- Implements caching layer using the existing `@cached` decorator from
`autogpt_libs.utils.cache`
- Reduces database queries by 80-90% for frequently accessed public data
- Built-in thundering herd protection prevents database overload during
cache expiry
- Selective cache invalidation ensures data freshness when mutations
occur
## Details
### Cached endpoints with TTLs:
- **Public data (5-10 min TTL):**
- `/agents` - Store agents list (2 min)
- `/agents/{username}/{agent_name}` - Agent details (5 min)
- `/graph/{store_listing_version_id}` - Agent graphs (10 min)
- `/agents/{store_listing_version_id}` - Agent by version (10 min)
- `/creators` - Creators list (5 min)
- `/creator/{username}` - Creator details (5 min)
- **User-specific data (1 min TTL):**
- `/profile` - User profiles (5 min)
- `/myagents` - User's own agents (1 min)
- `/submissions` - User's submissions (1 min)
### Cache invalidation strategy:
- Profile updates → clear user's profile cache
- New reviews → clear specific agent cache + agents list
- New submissions → clear agents list + user's caches
- Submission edits → clear related version caches
### Cache management endpoints:
- `GET /cache/info` - Monitor cache statistics
- `POST /cache/clear` - Clear all caches
- `POST /cache/clear/{cache_name}` - Clear specific cache
## Changes
<!-- REQUIRED: Bullet point summary of changes -->
- Added caching decorators to all suitable GET endpoints in store routes
- Implemented cache invalidation on data mutations (POST/PUT/DELETE)
- Added cache management endpoints for monitoring and manual clearing
- Created comprehensive test suite for cache_delete functionality
- Verified thundering herd protection works correctly
## Testing
<!-- How to test your changes -->
- ✅ Created comprehensive test suite (`test_cache_delete.py`)
validating:
- Selective cache deletion works correctly
- Cache entries are properly invalidated on mutations
- Other cache entries remain unaffected
- cache_info() accurately reflects state
- ✅ Tested thundering herd protection with concurrent requests
- ✅ Verified all endpoints return correct data with and without cache
## Checklist
<!-- REQUIRED: Be sure to check these off before marking the PR ready
for review. -->
- [x] I have self-reviewed this PR's diff, line by line
- [x] I have updated and tested the software architecture documentation
(if applicable)
- [x] I have run the agent to verify that it still works (if applicable)
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
|
||
|
|
83fe8d5b94 |
fix(backend): make preset migration not crash the system (#10966)
<!-- Clearly explain the need for these changes: --> For those who develop blocks, they may or may not exist in the code at the same time as the database. > Create block in one branch, test, then move to another branch the block is not in This migration will prevent startup in that case. ### Changes 🏗️ Adds a try except around the migration <!-- Concisely describe all of the changes made in this pull request: --> ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Test that startup actually works --------- Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
50689218ed | feat(backend): implement comprehensive load testing performance fixes + database health improvements (#10965) | ||
|
|
ddff09a8e4 |
feat(blocks): add NotionReadPage block (#10760)
Introduces a Notion Read Page block that fetches a page by ID via the Notion REST API. This is a first step toward Notion integration in the AutoGPT Platform. Motivation - Notion was not integrated yet. Im starting with a small block to add capability incrementally. ### Notes - I referred to the Todoist block implementation as a reference since I’m a beginner. - This is my first PR here - The block passed `docker compose run --rm rest_server pytest -q` successfully <!-- Clearly explain the need for these changes: --> <!-- Concisely describe all of the changes made in this pull request: --> ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: ### Test plan - [x] Ran `docker compose run --rm rest_server pytest -q backend/blocks/test/test_block.py -k notion` - [x] Confirmed tests passed (2 passed, 652 deselected, warnings only). - [x] Ran poetry run format to fix linters and tests --------- Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> Co-authored-by: Nicholas Tindle <nicktindle@outlook.com> |
||
|
|
0c363a1cea |
fix(frontend): force dynamic rendering on marketplace (#10957)
## Changes 🏗️ When building on Vercel: ``` at Object.start (.next/server/chunks/2744.js:1:312830) { description: "Route /marketplace couldn't be rendered statically because it used `cookies`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error", digest: 'DYNAMIC_SERVER_USAGE' } Failed to get server auth token: Error: Dynamic server usage: Route /marketplace couldn't be rendered statically because it used `cookies`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error at r (.next/server/chunks/8450.js:22:7298) at n (.next/server/chunks/4735.js:1:37020) at g (.next/server/chunks/555.js:1:31925) at m (.next/server/chunks/555.js:1:87056) at h (.next/server/chunks/555.js:1:932) at k (.next/server/chunks/555.js:1:25195) at queryFn (.next/server/chunks/555.js:1:25590) at Object.f [as fn] (.next/server/chunks/2744.js:1:316625) at q (.next/server/chunks/2744.js:1:312288) at Object.start (.next/server/chunks/2744.js:1:312830) { description: "Route /marketplace couldn't be rendered statically because it used `cookies`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error", digest: 'DYNAMIC_SERVER_USAGE' } ``` That's because the `/marketplace` page prefetches the store agents data on the server, and that query uses `cookies` for Auth. In theory, those endpoints can be called without auth, but I think if you are logged that affects the results. The simpler for now is to tell Next.js to not try to statically render it and render on the fly with caching. According to AI we shouldn't see much difference performance wise: > Short answer: Usually no noticeable slowdown. You’ll trade a small TTFB increase (server renders per request) for correct behavior with cookies. Overall interactivity stays the same since we still dehydrate React Query data. Why it’s fine: Server already had to fetch marketplace data; doing it at request-time vs build-time is roughly the same cost for users. Hydration uses the prefetched data, avoiding extra client round-trips. If you want extra speed: If those endpoints don’t need auth, we can skip reading cookies during server prefetch and enable ISR (e.g., revalidate=60) for partial caching. Or move the cookie-dependent parts to the client and keep the page static. ## Checklist 📋 ### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Run the app - [x] Page load marketplace is fine and not slow - [x] No build cookies errors ### For configuration changes: None |
||
|
|
e5d870a348 |
refactor(frontend): move old components to __legacy__ (#10953)
## Changes 🏗️ Moving non-design-system components ( old ) to a `components/__legacy__` folder 📁 so like this is more obvious for developers that they should not import them or use them on new features. What is now top-level in `/components` is what it is actively maintained. Document some existing components like `<Alert />`. More on this coming on follow-up PRs. ## Checklist 📋 ### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Test and types pass on the CI - [x] Run app locally, click around, looks good ### For configuration changes: None |
||
|
|
3f19cba28f |
fix(frontend/builder): Fix moved blocks disappearing on save (#10951)
- Resolves #10926 - Fixes a bug introduced in #10779 ### Changes 🏗️ - Fix `.metadata.position` in graph save payload - Make node reconciliation after graph save more robust ### Checklist 📋 #### For code changes: - [x] I have clearly listed 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] Moved nodes don't disappear on graph saveautogpt-platform-beta-v0.6.29 |
||
|
|
a978e91271 |
fix(ci, backend): Update Redis image & amend config to work with it (#10952)
CI is currently broken because Bitnami has pulled all `bitnami/redis` images. The current official Redis image on Docker Hub is `redis`. ### Changes 🏗️ - Replace `bitnami/redis:6.2` by `redis:latest` in Backend CI workflow file - Make `REDIS_PASSWORD` optional in the backend settings ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] CI no longer broken |
||
|
|
f283e6c514 |
refactor(frontend): cleanup of components folder (2/3) (#10942)
## Changes 🏗️ Following up my initial PR to tidy up the `components` folder https://github.com/Significant-Gravitas/AutoGPT/pull/10940. This is mostly moving files around and renaming some + documenting them on the design system as needed. Should be pretty safe as long as types on the CI pass. ## Checklist 📋 ### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Run the app locally - [x] Click around, looks ok - [x] Test and types pass on the CI ### For configuration changes: None |
||
|
|
9fc2101e7e |
refactor(frontend): tidy up on components folder (#10940)
## Changes 🏗️ Re-organise the `components` folder, moving things which are not re-used across screens or part of the design system out of it. ## Checklist 📋 ### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Run the app locally - [x] It works and test/types pass CI wise ### For configuration changes: None |
||
|
|
634f826d82 | Merge branch 'master' into dev autogpt-platform-beta-v0.6.28 | ||
|
|
6d6bf308fc |
fix(frontend): marketplace page load and caching (#10934)
## Changes 🏗️ ### **Server-Side:** - ✅ **ISR Cache**: Page cached for 60 seconds, served instantly - ✅ **Prefetch**: All API calls made on server, not client - ✅ **Static Generation**: HTML pre-rendered with data - ✅ **Streaming**: Loading states show immediately ### **Client-Side:** - ✅ **No API Calls**: Data hydrated from server cache - ✅ **Fast Hydration**: React Query uses prefetched data - ✅ **Smart Caching**: 60s stale time prevents unnecessary requests - ✅ **Progressive Loading**: Suspense boundaries for better UX ### **🔄 Caching Strategy:** 1. **Server**: ISR cache (60s) → API calls → Static HTML 2. **CDN**: Cached HTML served instantly 3. **Client**: Hydrated data from server → No additional API calls 4. **Background**: ISR regenerates stale pages automatically ### **🎯 Result:** - **First Visit**: Instant HTML + hydrated data (no client API calls) - **Subsequent Visits**: Instant cached page - **Background Updates**: Automatic revalidation every 60s - **Optimal Performance**: Server-side rendering + client-side caching ## Checklist 📋 ### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Run the app locally - [x] Marketplace page loads are faster ### For configuration changes: None |
||
|
|
dd84fb5c66 |
feat(platform): Add public share links for agent run results (#10938)
<!-- Clearly explain the need for these changes: --> This PR adds the ability for users to share their agent run results publicly via shareable links. Users can generate a public link that allows anyone to view the outputs of a specific agent execution without requiring authentication. This feature enables users to share their agent results with clients, colleagues, or the community. https://github.com/user-attachments/assets/5508f430-07d0-4cd3-87bc-301b0b005cce ### Changes 🏗️ #### Backend Changes - **Database Schema**: Added share tracking fields to `AgentGraphExecution` model in Prisma schema: - `isShared`: Boolean flag to track if execution is shared - `shareToken`: Unique token for the share URL - `sharedAt`: Timestamp when sharing was enabled - **API Endpoints**: Added three new REST endpoints in `/backend/backend/server/routers/v1.py`: - `POST /graphs/{graph_id}/executions/{graph_exec_id}/share`: Enable sharing for an execution - `DELETE /graphs/{graph_id}/executions/{graph_exec_id}/share`: Disable sharing - `GET /share/{share_token}`: Retrieve shared execution data (public endpoint) - **Data Models**: - Created `SharedExecutionResponse` model for public-safe execution data - Added `ShareRequest` and `ShareResponse` Pydantic models for type-safe API responses - Updated `GraphExecutionMeta` to include share status fields - **Security**: - All share management endpoints verify user ownership before allowing changes - Public endpoint only exposes OUTPUT block data, no intermediate execution details - Share tokens are UUIDs for security #### Frontend Changes - **ShareButton Component** (`/frontend/src/components/ShareButton.tsx`): - Modal dialog for managing share settings - Copy-to-clipboard functionality for share links - Clear warnings about public accessibility - Uses Orval-generated API hooks for enable/disable operations - **Share Page** (`/frontend/src/app/(no-navbar)/share/[token]/page.tsx`): - Clean, navigation-free page for viewing shared executions - Reuses existing `RunOutputs` component for consistent output rendering - Proper error handling for invalid/disabled share links - Loading states during data fetch - **API Integration**: - Fixed custom mutator to properly set Content-Type headers for POST requests with empty bodies - Generated TypeScript types via Orval for type-safe API calls ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Test plan: --> - [x] Enable sharing for an agent execution and verify share link is generated - [x] Copy share link and verify it copies to clipboard - [x] Open share link in incognito/private browser and verify outputs are displayed - [x] Disable sharing and verify share link returns 404 - [x] Try to enable/disable sharing for another user's execution (should fail with 404) - [x] Verify share page shows proper loading and error states - [x] Test that only OUTPUT blocks are shown in shared view, no intermediate data = |
||
|
|
33679f3ffe |
feat(platform): Add instructions field to agent submissions (#10931)
## Summary Added an optional "Instructions" field for agent submissions to help users understand how to run agents and what to expect. <img width="1000" alt="image" src="https://github.com/user-attachments/assets/015c4f0b-4bdd-48df-af30-9e52ad283e8b" /> <img width="1000" alt="image" src="https://github.com/user-attachments/assets/3242cee8-a4ad-4536-bc12-64b491a8ef68" /> <img width="1000" alt="image" src="https://github.com/user-attachments/assets/a9b63e1c-94c0-41a4-a44f-b9f98e446793" /> ### Changes Made **Backend:** - Added `instructions` field to `AgentGraph` and `StoreListingVersion` database models - Updated `StoreSubmission`, `LibraryAgent`, and related Pydantic models - Modified store submission API routes to handle instructions parameter - Updated all database functions to properly save/retrieve instructions field - Added graceful handling for cases where database doesn't yet have the field **Frontend:** - Added instructions field to agent submission flow (PublishAgentModal) - Positioned below "Recommended Schedule" section as specified - Added instructions display in library/run flow (RunAgentModal) - Positioned above credentials section with informative blue styling - Added proper form validation with 2000 character limit - Updated all TypeScript types and API client interfaces ### Key Features - ✅ Optional field - fully backward compatible - ✅ Proper positioning in both submission and run flows - ✅ Character limit validation (2000 chars) - ✅ User-friendly display with "How to use this agent" styling - ✅ Only shows when instructions are provided ### Testing - Verified Pydantic model validation works correctly - Confirmed schema validation enforces character limits - Tested graceful handling of missing database fields - Code formatting and linting completed ## Test plan - [ ] Test agent submission with instructions field - [ ] Test agent submission without instructions (backward compatibility) - [ ] Verify instructions display correctly in run modal - [ ] Test character limit validation - [ ] Verify database migrations work properly 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
fc8c5ccbb6 |
feat(backend): enhance agent retrieval logic in store agent page (#10933)
This PR enhances the agent retrieval logic in the store database to ensure accurate fetching of the latest approved agent versions. The changes address scenarios where agents may have multiple versions with different approval statuses. ## 🔧 Changes Made ### Enhanced Agent Retrieval Logic (`get_store_agent_details`) - **Active Version Priority**: Added logic to prioritize fetching agents based on the `activeVersionId` when available - **Fallback to Latest Approved**: When no active version is set, the system now falls back to the latest approved version (sorted by version number descending) - **Improved Accuracy**: Ensures users always see the most relevant agent version based on the current store listing state ### Improved Agent Filtering (`get_my_agents`) - **Enhanced Store Listing Filter**: Modified the filter to only include store listings that have at least one available version - **Nested Version Check**: Added nested filtering to check for `isAvailable: true` in the versions, preventing empty or unavailable listings from appearing ## ✅ Testing Checklist - [x] Test fetching agent details with an active version set - [x] Test fetching agent details without an active version (should fall back to latest approved) - [x] Test `get_my_agents` returns only agents with available store listing versions - [x] Verify no agents with only unavailable versions appear in results - [x] Test with agents having multiple versions with different approval statuses |
||
|
|
7d2ab61546 |
feat(platform): Disable Trigger Setup through Builder (#10418)
We want users to set up triggers through the Library rather than the Builder. - Resolves #10413 https://github.com/user-attachments/assets/515ed80d-6569-4e26-862f-2a663115218c ### Changes 🏗️ - Update node UI to push users to Library for trigger set-up and management - Add note redirecting to Library for trigger set-up - Remove webhook status indicator and webhook URL section - Add `libraryAgent: LibraryAgent` to `BuilderContext` for access inside `CustomNode` - Move library agent loader from `FlowEditor` to `useAgentGraph` - Implement `migrate_legacy_triggered_graphs` migrator function - Remove `on_node_activate` hook (which previously handled webhook setup) - Propagate `created_at` from DB to `GraphModel` and `LibraryAgentPreset` models ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Existing node triggers are converted to triggered presets (visible in the Library) - [x] Converted triggered presets work - [x] Trigger node inputs are disabled and handles are hidden - [x] Trigger node message links to the correct Library Agent when saved |
||
|
|
c2f11dbcfa |
fix(blocks): Fix feedback loops in AI Structured Response Generator (#10932)
Improve the overall reliability of the AI Structured Response Generator block from ~40% to ~100%. This block has been giving me a lot of hassle over the past week and this improvement is an easy win. - Resolves #10916 ### Changes 🏗️ - Improve reliability of AI Structured Response Generator block - Fix feedback loops (total success rate ~40% -> 100%) - Improve system prompt (one-shot success rate ~40% -> ~76%) ### Checklist 📋 #### For code changes: - [x] I have clearly listed 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] JSON decode errors are turned into a useful feedback message - [x] LLM effectively corrects itself based on the feedback message |
||
|
|
f82adeb959 |
feat(library): Add agent favoriting functionality (#10828)
### Need 💡 This PR introduces the ability for users to "favorite" agents in the library view, enhancing agent discoverability and organization. Favorited agents will be visually marked with a heart icon and prioritized in the library list, appearing at the top. This feature is distinct from pinning specific agent runs. ### Changes 🏗️ * **Backend:** * Updated `LibraryAgent` model in `backend/server/v2/library/model.py` to include the `is_favorite` field when fetching from the database. * **Frontend:** * Updated `LibraryAgent` TypeScript type in `autogpt-server-api/types.ts` to include `is_favorite`. * Modified `LibraryAgentCard.tsx` to display a clickable heart icon, indicating the favorite status. * Implemented a click handler on the heart icon to toggle the `is_favorite` status via an API call, including loading states and toast notifications. * Updated `useLibraryAgentList.ts` to implement client-side sorting, ensuring favorited agents appear at the top of the list. * Updated `openapi.json` to include `is_favorite` in the `LibraryAgent` schema and regenerated frontend API types. * Installed `@orval/core` for API generation. ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Verify that the heart icon is displayed correctly on `LibraryAgentCard` for both favorited (filled red) and unfavorited (outlined gray) agents. - [x] Click the heart icon on an unfavorited agent: - [x] Confirm the icon changes to filled red. - [x] Verify a "Added to favorites" toast notification appears. - [x] Confirm the agent moves to the top of the library list. - [x] Check that the agent card does not navigate to the agent details page. - [x] Click the heart icon on a favorited agent: - [x] Confirm the icon changes to outlined gray. - [x] Verify a "Removed from favorites" toast notification appears. - [x] Confirm the agent's position adjusts in the list (no longer at the very top unless other sorting criteria apply). - [x] Check that the agent card does not navigate to the agent details page. - [x] Test the loading state: rapidly click the heart icon and observe the `opacity-50 cursor-not-allowed` styling. - [x] Verify that the sorting correctly places all favorited agents at the top, maintaining their original relative order within the favorited group, and the same for unfavorited agents. #### For configuration changes: - [ ] `.env.default` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) --- <a href="https://cursor.com/background-agent?bcId=bc-43e8f98c-e4ea-4149-afc8-5eea3d1ab439"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-cursor-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-cursor-light.svg"> <img alt="Open in Cursor" src="https://cursor.com/open-in-cursor.svg"> </picture> </a> <a href="https://cursor.com/agents?id=bc-43e8f98c-e4ea-4149-afc8-5eea3d1ab439"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-web-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-web-light.svg"> <img alt="Open in Web" src="https://cursor.com/open-in-web.svg"> </picture> </a> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> Co-authored-by: Nicholas Tindle <ntindle@users.noreply.github.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
6f08a1cca7 | fix: the api key credentials weren't registering correctly (#10936) | ||
|
|
1ddf92eed4 |
fix(frontend): new agent run page design refinements (#10924)
## Changes 🏗️ Implements all the following changes... 1. The margins between the runs, on the left hand side.. reduced them around `6px` ? 2. Make agent inputs full width 3. Make "Schedule setup" section displayed in a second modal 4. When an agent is running, we should not show the "Delete agent" button 5. Copy changes around the actions for agent/runs 6. Large button height should be `52px` 7. Fix margins between + New Run button and the runs & scheduled menu 8. Make border white on cards Also... - improve the naming of some components to reflect better their context/usage - show on the inputs section when an agent is using already API keys or credentials - fix runs/schedules not auto-selecting once created ## Checklist 📋 ### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Run the app locally with the new agent runs page enabled - [x] Test the above ### For configuration changes: None |
||
|
|
4c0dd27157 |
dx(platform): Add manual dispatch to deploy workflows (#10918)
When deploying from the infra repo, migrations aren't run which can cause issues. We need to be able to manually dispatch deployment from this repo so that the migrations are run as well. ### Changes 🏗️ - add manual dispatch to deploy workflows ### Checklist 📋 #### For code changes: - [x] I have clearly listed 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] Either it works or it doesn't but this PR won't break anything existing |
||
|
|
17fcf68f2e |
feat: Separate OpenAI key for smart agent execution summary and other internal AI calls (#10930)
### Changes 🏗️ Separate the API key for internal usage (smart agent execution summary) and block usage. ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Manual test after deployment |
||
|
|
381558342a |
fix(frontend/builder): Fix moved blocks disappearing on no-op save (#10927)
- Resolves #10926 ### Changes 🏗️ - Fix save no-op if graph has no changes ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Saving a graph after only moving nodes doesn't make those nodes disappear |
||
|
|
1fdc02467b |
feat(backend): Add comprehensive Prometheus instrumentation for observability (#10923)
## Summary - Implement comprehensive Prometheus metrics instrumentation for all FastAPI services - Add custom business metrics for graph/block executions - Enable dual publishing to both Grafana Cloud and internal Prometheus ## Related Infrastructure PR - https://github.com/Significant-Gravitas/AutoGPT_cloud_infrastructure/pull/214 ## Changes ### 📊 Metrics Infrastructure - Added `prometheus-fastapi-instrumentator` dependency for automatic HTTP metrics - Created centralized `instrumentation.py` module for consistent metrics across services - Instrumented REST API, WebSocket, and External API services ### 📈 Automatic HTTP Metrics All FastAPI services now automatically collect: - **Request latency**: Histogram with custom buckets (10ms to 60s) - **Request/response size**: Track payload sizes - **Request counts**: By method, endpoint, and status code - **Active requests**: Real-time count of in-progress requests - **Error rates**: 4xx and 5xx responses ### 🎯 Custom Business Metrics Added domain-specific metrics: - **Graph executions**: Count by status (success/error/validation_error) - **Block executions**: Count and duration by block_type and status - **WebSocket connections**: Active connection gauge - **Database queries**: Duration histogram by operation and table - **RabbitMQ messages**: Count by queue and status - **Authentication**: Attempts by method and status - **API key usage**: By provider and block type - **Rate limiting**: Hit count by endpoint ### 🔌 Service Endpoints Each service exposes metrics at `/metrics`: - REST API (port 8006): `/metrics` - WebSocket (port 8001): `/metrics` - External API: `/external-api/metrics` - Executor (port 8002): Already had metrics, now enhanced ### 🏷️ Kubernetes Integration Updated Helm charts with pod annotations: ```yaml prometheus.io/scrape: "true" prometheus.io/port: "8006" # or appropriate port prometheus.io/path: "/metrics" ``` ## Testing - [x] Install dependencies: `poetry install` - [x] Run services: `poetry run serve` - [x] Check metrics endpoints are accessible - [x] Verify metrics are being collected - [x] Confirm Grafana Agent can scrape metrics - [x] Test graph/block execution tracking - [x] Verify WebSocket connection metrics ## Performance Impact - Minimal overhead (~1-2ms per request) - Metrics are collected asynchronously - Can be disabled via `ENABLE_METRICS=false` env var ## Next Steps 1. Deploy to dev environment 2. Configure Grafana Cloud dashboards 3. Set up alerting rules based on metrics 4. Add more custom business metrics as needed 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
f262bb9307 |
fix(platform): add timezone awareness to scheduler (#10921)
### Changes 🏗️ This PR restores and improves timezone awareness in the scheduler service to correctly handle daylight savings time (DST) transitions. The changes ensure that scheduled agents run at the correct local time even when crossing DST boundaries. #### Backend Changes: - **Scheduler Service (`scheduler.py`):** - Added `user_timezone` parameter to `add_graph_execution_schedule()` method - CronTrigger now uses the user's timezone instead of hardcoded UTC - Added timezone field to `GraphExecutionJobInfo` for visibility - Falls back to UTC with a warning if no timezone is provided - Extracts and includes timezone information from job triggers - **API Router (`v1.py`):** - Added optional `timezone` field to `ScheduleCreationRequest` - Fetches user's saved timezone from profile if not provided in request - Passes timezone to scheduler client when creating schedules - Converts `next_run_time` back to user timezone for display #### Frontend Changes: - **Schedule Creation Modal:** - Now sends user's timezone with schedule creation requests - Uses browser's local timezone if user hasn't set one in their profile - **Schedule Display Components:** - Updated to show timezone information in schedule details - Improved formatting of schedule information in monitoring views - Fixed schedule table display to properly show timezone-aware times - **Cron Expression Utils:** - Removed UTC conversion logic from `formatTime()` function - Cron expressions are now stored in the schedule's timezone - Simplified humanization logic since no conversion is needed - **API Types & OpenAPI:** - Added `timezone` field to schedule-related types - Updated OpenAPI schema to include timezone parameter ### 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: ### Test Plan 🧪 #### 1. Schedule Creation Tests - [ ] Create a new schedule and verify the timezone is correctly saved - [ ] Create a schedule without specifying timezone - should use user's profile timezone - [ ] Create a schedule when user has no profile timezone - should default to UTC with warning #### 2. Daylight Savings Time Tests - [ ] Create a schedule for a daily task at 2:00 PM in a DST timezone (e.g., America/New_York) - [ ] Verify the schedule runs at 2:00 PM local time before DST transition - [ ] Verify the schedule still runs at 2:00 PM local time after DST transition - [ ] Check that the next_run_time adjusts correctly across DST boundaries #### 3. Display and UI Tests - [ ] Verify timezone is displayed in schedule details view - [ ] Verify schedule times are shown in user's local timezone in monitoring page - [ ] Verify cron expression humanization shows correct local times - [ ] Check that schedule table shows timezone information #### 4. API Tests - [ ] Test schedule creation API with timezone parameter - [ ] Test schedule creation API without timezone parameter - [ ] Verify GET schedules endpoint returns timezone information - [ ] Verify next_run_time is converted to user timezone in responses #### 5. Edge Cases - [ ] Test with various timezones (UTC, EST, PST, Europe/London, Asia/Tokyo) - [ ] Test with invalid timezone strings - should handle gracefully - [ ] Test scheduling at DST transition times (2:00 AM during spring forward) - [ ] Verify existing schedules without timezone info default to UTC #### 6. Regression Tests - [ ] Verify existing schedules continue to work - [ ] Verify schedule deletion still works - [ ] Verify schedule listing endpoints work correctly - [ ] Check that scheduled graph executions trigger as expected --------- Co-authored-by: Claude <noreply@anthropic.com> |