Skip to content

[Snyk] Upgrade react from 18.2.0 to 18.3.1#2

Open
tpsaint wants to merge 211 commits into
devfrom
snyk-upgrade-c48dda022f5a5c2a9347a2585f0cd0bf
Open

[Snyk] Upgrade react from 18.2.0 to 18.3.1#2
tpsaint wants to merge 211 commits into
devfrom
snyk-upgrade-c48dda022f5a5c2a9347a2585f0cd0bf

Conversation

@tpsaint

@tpsaint tpsaint commented Sep 9, 2025

Copy link
Copy Markdown
Owner

snyk-top-banner

Snyk has created this PR to upgrade react from 18.2.0 to 18.3.1.

ℹ️ Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


  • The recommended version is 388 versions ahead of your current version.

  • The recommended version was released a year ago.

Release notes
Package name: react
  • 18.3.1 - 2024-04-26
    • Export act from react f1338f
  • 18.3.0 - 2024-04-25

    This release is identical to 18.2 but adds warnings for deprecated APIs and other changes that are needed for React 19.

    Read the React 19 Upgrade Guide for more info.

    React

    • Allow writing to this.refs to support string ref codemod 909071
    • Warn for deprecated findDOMNode outside StrictMode c3b283
    • Warn for deprecated test-utils methods d4ea75
    • Warn for deprecated Legacy Context outside StrictMode 415ee0
    • Warn for deprecated string refs outside StrictMode #25383
    • Warn for deprecated defaultProps for function components #25699
    • Warn when spreading key #25697
    • Warn when using act from test-utils d4ea75

    React DOM

    • Warn for deprecated unmountComponentAtNode 8a015b
    • Warn for deprecated renderToStaticNodeStream #28874
  • 18.3.0-next-fecc288b7-20221025 - 2022-10-25
  • 18.3.0-next-fccf3a9fb-20230213 - 2023-02-14
  • 18.3.0-next-fabef7a6b-20221215 - 2022-12-16
  • 18.3.0-next-fa4314841-20230502 - 2023-05-03
  • 18.3.0-next-f828bad38-20230313 - 2023-03-13
  • 18.3.0-next-f0efa1164-20220901 - 2022-09-02
  • 18.3.0-next-f0534ae94-20221202 - 2022-12-05
  • 18.3.0-next-efc6a08e9-20220923 - 2022-09-23
  • 18.3.0-next-ee8509801-20230117 - 2023-01-17
  • 18.3.0-next-edbfc6399-20221128 - 2022-11-29
  • 18.3.0-next-ed545ae3d-20230425 - 2023-04-25
  • 18.3.0-next-e98225485-20221129 - 2022-11-30
  • 18.3.0-next-e7c5af45c-20221023 - 2022-10-24
  • 18.3.0-next-e6a062bd2-20220913 - 2022-09-13
  • 18.3.0-next-e61fd91f5-20220630 - 2022-06-30
  • 18.3.0-next-e40893d09-20221005 - 2022-10-06
  • 18.3.0-next-e225fa43a-20220711 - 2022-07-12
  • 18.3.0-next-e1dd0a2f5-20221115 - 2022-11-16
  • 18.3.0-next-de7d1c907-20221223 - 2022-12-26
  • 18.3.0-next-dd5365878-20230407 - 2023-04-07
  • 18.3.0-next-dd2d65227-20220708 - 2022-07-11
  • 18.3.0-next-d962f35ca-20230418 - 2023-04-18
  • 18.3.0-next-d925a8d0b-20221024 - 2022-10-24
  • 18.3.0-next-d807eb52c-20221205 - 2022-12-06
  • 18.3.0-next-d49e0e0be-20230302 - 2023-03-02
  • 18.3.0-next-d1e35c703-20221110 - 2022-11-10
  • 18.3.0-next-d1bb1c586-20220922 - 2022-09-22
  • 18.3.0-next-d1432ba93-20220628 - 2022-06-29
  • 18.3.0-next-cf665c4b7-20220620 - 2022-06-21
  • 18.3.0-next-cf3932be5-20221027 - 2022-10-28
  • 18.3.0-next-cce18e350-20221023 - 2022-10-23
  • 18.3.0-next-cb5084d1c-20220924 - 2022-09-24
  • 18.3.0-next-ca990e9a7-20220804 - 2022-08-05
  • 18.3.0-next-ca2cf319f-20230223 - 2023-02-24
  • 18.3.0-next-c8b778b7f-20220825 - 2022-08-25
  • 18.3.0-next-c89a83695-20220923 - 2022-09-23
  • 18.3.0-next-c8369527e-20230420 - 2023-04-21
  • 18.3.0-next-c80e54116-20220907 - 2022-09-07
  • 18.3.0-next-c739cef2f-20220912 - 2022-09-12
  • 18.3.0-next-c54e3541b-20221111 - 2022-11-14
  • 18.3.0-next-c3b18571d-20220707 - 2022-07-07
  • 18.3.0-next-c28f313e6-20220908 - 2022-09-09
  • 18.3.0-next-c1f5884ff-20220705 - 2022-07-05
  • 18.3.0-next-c1d414d75-20220923 - 2022-09-23
  • 18.3.0-next-c08d8b804-20221118 - 2022-11-21
  • 18.3.0-next-bfb9cbd8c-20230223 - 2023-02-24
  • 18.3.0-next-b72ed698f-20230303 - 2023-03-03
  • 18.3.0-next-b4204ede6-20220803 - 2022-08-04
  • 18.3.0-next-b14f8da15-20230403 - 2023-04-03
  • 18.3.0-next-b14d7fa4b-20221209 - 2022-12-09
  • 18.3.0-next-b0671f9ea-20230130 - 2023-01-30
  • 18.3.0-next-afe664d9d-20220913 - 2022-09-14
  • 18.3.0-next-ae7ad8b4c-20220927 - 2022-09-27
  • 18.3.0-next-abbbdf4ce-20220930 - 2022-09-30
  • 18.3.0-next-aa9988e5e-20221010 - 2022-10-10
  • 18.3.0-next-a8c16a004-20221012 - 2022-10-13
  • 18.3.0-next-a8875eab7-20230310 - 2023-03-10
  • 18.3.0-next-a6bf46689-20221014 - 2022-10-14
  • 18.3.0-next-a4bed4696-20220627 - 2022-06-28
  • 18.3.0-next-a0619e26c-20221207 - 2022-12-07
  • 18.3.0-next-9ff738f53-20220826 - 2022-08-29
  • 18.3.0-next-9fcaf88d5-20220801 - 2022-08-02
  • 18.3.0-next-9fb2469a6-20230308 - 2023-03-08
  • 18.3.0-next-9e67e7a31-20220823 - 2022-08-23
  • 18.3.0-next-9cdf8a99e-20221018 - 2022-10-18
  • 18.3.0-next-9c54b29b4-20230322 - 2023-03-23
  • 18.3.0-next-9a9da7721-20230409 - 2023-04-10
  • 18.3.0-next-996e4c0d5-20221212 - 2022-12-12
  • 18.3.0-next-992911981-20220718 - 2022-07-19
  • 18.3.0-next-987292815-20221019 - 2022-10-19
  • 18.3.0-next-975b64464-20220914 - 2022-09-15
  • 18.3.0-next-955cad9bc-20220623 - 2022-06-24
  • 18.3.0-next-934177598-20221022 - 2022-10-22
  • 18.3.0-next-8e35b5060-20220706 - 2022-07-06
  • 18.3.0-next-8e17bfd14-20230322 - 2023-03-22
  • 18.3.0-next-8b9ac8175-20230131 - 2023-01-31
  • 18.3.0-next-8951c5fc9-20220915 - 2022-09-16
  • 18.3.0-next-86b0e9199-20230429 - 2023-05-01
  • 18.3.0-next-85de6fde5-20230328 - 2023-03-29
  • 18.3.0-next-85bb7b685-20230406 - 2023-04-06
  • 18.3.0-next-855b77c9b-20230202 - 2023-02-03
  • 18.3.0-next-84a0a171e-20221214 - 2022-12-15
  • 18.3.0-next-8342a0992-20230327 - 2023-03-27
  • 18.3.0-next-8310854ce-20230331 - 2023-03-31
  • 18.3.0-next-81d4ee9ca-20221223 - 2022-12-23
  • 18.3.0-next-819687279-20221208 - 2022-12-08
  • 18.3.0-next-7f8c501f6-20230420 - 2023-04-20
  • 18.3.0-next-7bcc68772-20220811 - 2022-08-11
  • 18.3.0-next-7b25b961d-20220930 - 2022-09-30
  • 18.3.0-next-7b0642bb9-20230412 - 2023-04-13
  • 18.3.0-next-7a4336c40-20220712 - 2022-07-13
  • 18.3.0-next-79c582981-20221021 - 2022-10-21
  • 18.3.0-next-796d31809-20220812 - 2022-08-15
  • 18.3.0-next-790ebc962-20230404 - 2023-04-05
  • 18.3.0-next-758fc7fde-20230207 - 2023-02-08
  • 18.3.0-next-703c67560-20230307 - 2023-03-07
  • 18.3.0-next-7028ce745-20220907 - 2022-09-08
  • 18.3.0-next-7002a6743-20230110 - 2023-01-11
  • 18.3.0-next-6ff1733e6-20230225 - 2023-02-27
  • 18.3.0-next-6fb8133ed-20221116 - 2022-11-17
  • 18.3.0-next-6ef466c68-20220816 - 2022-08-16
  • 18.3.0-next-6eadbe0c4-20230425 - 2023-04-26
  • 18.3.0-next-6ddcbd4f9-20230209 - 2023-02-09
  • 18.3.0-next-6883d7944-20221101 - 2022-11-01
  • 18.3.0-next-67a61d5bd-20230228 - 2023-03-01
  • 18.3.0-next-65e32e58b-20221019 - 2022-10-20
  • 18.3.0-next-65b3449c8-20221005 - 2022-10-05
  • 18.3.0-next-5fcf1a4b4-20221221 - 2022-12-22
  • 18.3.0-next-5f34b051d-20220725 - 2022-07-25
  • 18.3.0-next-5dd90c562-20230502 - 2023-05-02
  • 18.3.0-next-5d60a0b84-20221006 - 2022-10-07
  • 18.3.0-next-594093496-20230209 - 2023-02-09
  • 18.3.0-next-58742c21b-20230411 - 2023-04-11
  • 18.3.0-next-56ffca8b9-20221117 - 2022-11-18
  • 18.3.0-next-56a3c18e5-20230314 - 2023-03-14
  • 18.3.0-next-56389e81f-20220619 - 2022-06-20
  • 18.3.0-next-555ece0cd-20230112 - 2023-01-12
  • 18.3.0-next-55542bc73-20230210 - 2023-02-10
  • 18.3.0-next-54f297a60-20221017 - 2022-10-17
  • 18.3.0-next-5379b6123-20230105 - 2023-01-06
  • 18.3.0-next-522f47345-20220614 - 2022-06-15
  • 18.3.0-next-513417d69-20221007 - 2022-10-10
  • 18.3.0-next-4fcc9184a-20230217 - 2023-02-17
  • 18.3.0-next-4f8ffec45-20230115 - 2023-01-16
  • 18.3.0-next-4ea063b56-20221101 - 2022-11-02
  • 18.3.0-next-4dda96a40-20221213 - 2022-12-13
  • 18.3.0-next-4cd788aef-20220630 - 2022-07-01
  • 18.3.0-next-4bf2113a1-20230206 - 2023-02-06
  • 18.3.0-next-4bd245e9e-20221104 - 2022-11-04
  • 18.3.0-next-4a4ef2706-20230212 - 2023-02-13
  • 18.3.0-next-49f8254d6-20220722 - 2022-07-22
  • 18.3.0-next-49f741046-20230305 - 2023-03-06
  • 18.3.0-next-491aec5d6-20230501 - 2023-05-01
  • 18.3.0-next-47cf4e578-20230315 - 2023-03-15
  • 18.3.0-next-41b4714f1-20230328 - 2023-03-28
  • 18.3.0-next-41110021f-20230301 - 2023-03-01
  • 18.3.0-next-3f3b46c84-20220730 - 2022-08-01
  • 18.3.0-next-3de926449-20220927 - 2022-09-28
  • 18.3.0-next-3ddbedd05-20220719 - 2022-07-20
  • 18.3.0-next-3d615fc14-20220919 - 2022-09-19
  • 18.3.0-next-3d443cad7-20220823 - 2022-08-24
  • 18.3.0-next-3ba7add60-20221201 - 2022-12-01
  • 18.3.0-next-3b814327e-20221014 - 2022-10-14
  • 18.3.0-next-39a3b72c6-20230414 - 2023-04-14
  • 18.3.0-next-3706edb81-20230308 - 2023-03-09
  • 18.3.0-next-3554c8852-20230320 - 2023-03-20
  • 18.3.0-next-353c30252-20221202 - 2022-12-02
  • 18.3.0-next-338e6a967-20221004 - 2022-10-04
  • 18.3.0-next-32baab38f-20220811 - 2022-08-12
  • 18.3.0-next-30eb267ab-20220708 - 2022-07-08
  • 18.3.0-next-2ef24145e-20230202 - 2023-02-03
  • 18.3.0-next-2d80a0cd6-20221003 - 2022-10-03
  • 18.3.0-next-2cf4352e1-20221011 - 2022-10-11
  • 18.3.0-next-2c7dea736-20220726 - 2022-07-26
  • 18.3.0-next-2b1fb91a5-20221220 - 2022-12-21
  • 18.3.0-next-2ac77aab9-20221029 - 2022-10-31
  • 18.3.0-next-28a574ea8-20221027 - 2022-10-27
  • 18.3.0-next-2655c9354-20221121 - 2022-11-22
  • 18.3.0-next-2619886ac-20230105 - 2023-01-05
  • 18.3.0-next-229c86af0-20220616 - 2022-06-16
  • 18.3.0-next-21021fb0f-20230412 - 2023-04-12
  • 18.3.0-next-20a257c25-20220929 - 2022-09-29
  • 18.3.0-next-1f248bdd7-20230419 - 2023-04-19
  • 18.3.0-next-1e5245df8-20220817 - 2022-08-17
  • 18.3.0-next-1e3e30dae-20221108 - 2022-11-08
  • 18.3.0-next-1d3fc9c9c-20221023 - 2022-10-23
  • 18.3.0-next-1a08f1478-20221103 - 2022-11-03
  • 18.3.0-next-19e9a4c68-20220818 - 2022-08-18
  • 18.3.0-next-189f70e17-20230216 - 2023-02-16
  • 18.3.0-next-18282f881-20230428 - 2023-04-28
  • 18.3.0-next-17e2a15be-20220808 - 2022-08-08
  • 18.3.0-next-167853026-20220626 - 2022-06-27
  • 18.3.0-next-1528c5ccd-20230306 - 2023-03-06
  • 18.3.0-next-1308e49a6-20230330 - 2023-03-30
  • 18.3.0-next-12a1d140e-20230321 - 2023-03-21
  • 18.3.0-next-0ffc7f632-20230330 - 2023-03-30
  • 18.3.0-next-0f4a83596-20230110 - 2023-01-10
  • 18.3.0-next-0de3ddf56-20220825 - 2022-08-26
  • 18.3.0-next-0cac4d54c-20220921 - 2022-09-21
  • 18.3.0-next-0c11baa6a-20221022 - 2022-10-22
  • 18.3.0-next-0ba4698c7-20230201 - 2023-02-01
  • 18.3.0-next-0b974418c-20230106 - 2023-01-09
  • 18.3.0-next-0b54e0047-20220914 - 2022-09-15
  • 18.3.0-next-02206099a-20220714 - 2022-07-14
  • 18.3.0-canary-feed8f3f9-20240118 - 2024-01-19
  • 18.3.0-canary-fdc8c81e0-20230707 - 2023-07-07
  • 18.3.0-canary-fdb368d9e-20230725 - 2023-07-26
  • 18.3.0-canary-fda1f0b90-20230509 - 2023-05-09
  • 18.3.0-canary-fc801116c-20230629 - 2023-06-29
  • 18.3.0-canary-fbc9b68d6-20231123 - 2023-11-23
  • 18.3.0-canary-fb10a2c66-20240228 - 2024-02-29
  • 18.3.0-canary-f81c0f1ed-20230927 - 2023-09-27
  • 18.3.0-canary-f359f9b41-20230810 - 2023-08-10
  • 18.3.0-canary-f1039be4a-20240107 - 2024-01-08
  • 18.3.0-canary-f0e808e5b-20240214 - 2024-02-14
  • 18.3.0-canary-efb381bbf-20230505 - 2023-05-05
  • 18.3.0-canary-ee68446ff-20231115 - 2023-11-15
  • 18.3.0-canary-eb33bd747-20240312 - 2024-03-12
  • 18.3.0-canary-ea17cc18f-20230807 - 2023-08-07
  • 18.3.0-canary-e91142dd6-20230705 - 2023-07-06
  • 18.3.0-canary-e61a60fac-20231011 - 2023-10-12
  • 18.3.0-canary-e5205658f-20230913 - 2023-09-13
  • 18.3.0-canary-e3fb7c1de-20230621 - 2023-06-21
  • 18.3.0-canary-e373190fa-20240325 - 2024-03-25
  • 18.3.0-canary-e1d20fc0c-20240122 - 2024-01-22
  • 18.3.0-canary-e1ad4aa36-20230601 - 2023-06-02
  • 18.3.0-canary-df12d7eac-20230510 - 2023-05-11
  • 18.3.0-canary-ddff50469-20230829 - 2023-08-29
  • 18.3.0-canary-dddfe6882-20231005 - 2023-10-05
  • 18.3.0-canary-dd480ef92-20230822 - 2023-08-22
  • 18.3.0-canary-db69f95e4-20231002 - 2023-10-03
  • 18.3.0-canary-d900fadbf-20230929 - 2023-09-29
  • 18.3.0-canary-d803f519e-20231020 - 2023-10-20
  • 18.3.0-canary-d7a98a5e9-20230517 - 2023-05-17
  • 18.3.0-canary-d6dcad6a8-20230914 - 2023-09-14
  • 18.3.0-canary-d445cee60-20230718 - 2023-07-19
  • 18.3.0-canary-d3def4793-20240208 - 2024-02-08
  • 18.3.0-canary-d1c8cdae3-20230619 - 2023-06-20
  • 18.3.0-canary-ce6842d8f-20230610 - 2023-06-12
  • 18.3.0-canary-ce2bc58a9-20231102 - 2023-11-03
  • 18.3.0-canary-cb3404a0c-20230807 - 2023-08-08
  • 18.3.0-canary-cb2439624-20231219 - 2023-12-19
  • 18.3.0-canary-c8deb5db6-20230622 - 2023-06-22
  • 18.3.0-canary-c5b937576-20231219 - 2023-12-21
  • 18.3.0-canary-c47c306a7-20231109 - 2023-11-09
  • 18.3.0-canary-c3048aab4-20240326 - 2024-03-26
  • 18.3.0-canary-c29ca23af-20231205 - 2023-12-05
  • 18.3.0-canary-c17a27ef4-20231127 - 2023-11-28
  • 18.3.0-canary-bff6be8eb-20230925 - 2023-09-26
  • 18.3.0-canary-be67db46b-20231010 - 2023-10-10
  • 18.3.0-canary-bbc8530ed-20230912 - 2023-09-12
  • 18.3.0-canary-bbb9cb116-20231117 - 2023-11-17
  • 18.3.0-canary-bb0944fe5-20240313 - 2024-03-13
  • 18.3.0-canary-ba5e6a832-20240208 - 2024-02-09
  • 18.3.0-canary-b9be4537c-20230905 - 2023-09-06
  • 18.3.0-canary-b8e47d988-20231023 - 2023-10-23
  • 18.3.0-canary-b7972822b-20230503 - 2023-05-03
  • 18.3.0-canary-b5810163e-20230509 - 2023-05-10
  • 18.3.0-canary-b4cdd3e89-20230823 - 2023-08-23
  • 18.3.0-canary-b36ae8d7a-20231207 - 2023-12-07
  • 18.3.0-canary-b30030471-20240117 - 2024-01-18
  • 18.3.0-canary-b2d637128-20240123 - 2024-01-23
  • 18.3.0-canary-b27725923-20230821 - 2023-08-21
  • 18.3.0-canary-b00e27342-20230505 - 2023-05-05
  • 18.3.0-canary-aef7ce554-20230503 - 2023-05-03
  • 18.3.0-canary-aec521a96-20231114 - 2023-11-15
  • 18.3.0-canary-ade82b8dd-20230816 - 2023-08-17
  • 18.3.0-canary-ad720f36e-20240206 - 2024-02-06
  • 18.3.0-canary-aba93acb6-20231205 - 2023-12-06
  • 18.3.0-canary-ab31a9ed2-20230824 - 2023-08-25
  • 18.3.0-canary-a9cc32511-20240215 - 2024-02-16
  • 18.3.0-canary-a9985529f-20231025 - 2023-10-25
  • 18.3.0-canary-a870b2d54-20240314 - 2024-03-14
  • 18.3.0-canary-a6ed60a8e-20230929 - 2023-10-02
  • 18.3.0-canary-a515d753b-20240220 - 2024-02-20
  • 18.3.0-canary-a4939017f-20240320 - 2024-03-20
  • 18.3.0-canary-a41957507-20231017 - 2023-10-17
  • 18.3.0-canary-a3aae7fb0-20231208 - 2023-12-08
  • 18.3.0-canary-a389046a5-20230512 - 2023-05-12
  • 18.3.0-canary-a20eea251-20230809 - 2023-08-10
  • 18.3.0-canary-a1f97589f-20230526 - 2023-05-30
  • 18.3.0-canary-a1c62b8a7-20230627 - 2023-06-28
  • 18.3.0-canary-a17467e7e-20231102 - 2023-11-02
  • 18.3.0-canary-9f4fbec5f-20230717 - 2023-07-18
  • 18.3.0-canary-9ba1bbd65-20230922 - 2023-09-22
  • 18.3.0-canary-9b4f847d9-20230901 - 2023-09-01
  • 18.3.0-canary-9abf6fa31-20231017 - 2023-10-17
  • 18.3.0-canary-9a72e6227-20230525 - 2023-05-25
  • 18.3.0-canary-997f52fbb-20230803 - 2023-08-04
  • 18.3.0-canary-98f3f14d2-20230818 - 2023-08-18
  • 18.3.0-canary-98b8359f6-20240223 - 2024-02-23
  • 18.3.0-canary-971b62f47-20240129 - 2024-01-29
  • 18.3.0-canary-966d17483-20240305 - 2024-03-05
  • 18.3.0-canary-9617d39ec-20231018 - 2023-10-18
  • 18.3.0-canary-95ec12839-20240205 - 2024-02-05
  • 18.3.0-canary-953cb02f6-20230907 - 2023-09-07
  • 18.3.0-canary-9377e1010-20230712 - 2023-07-12
  • 18.3.0-canary-910045696-20230607 - 2023-06-07
  • 18.3.0-canary-8ec962d82-20230623 - 2023-06-23
  • 18.3.0-canary-8c8ee9ee6-20231026 - 2023-10-26
  • 18.3.0-canary-8bb6ee1d3-20240125 - 2024-01-25
  • 18.3.0-canary-88df88f94-20230613 - 2023-06-13
  • 18.3.0-canary-88d56b8e8-20231004 - 2023-10-04
  • 18.3.0-canary-87cb0bf18-20231129 - 2023-11-30
  • 18.3.0-canary-8039e6d0b-20231026 - 2023-10-26
  • 18.3.0-canary-7cd98ef2b-20230509 - 2023-05-10
  • 18.3.0-canary-7ac5e9a60-20230508 - 2023-05-08
  • 18.3.0-canary-77c4ac2ce-20231031 - 2023-11-01
  • 18.3.0-canary-763612647-20240126 - 2024-01-26
  • 18.3.0-canary-7508dcd5c-20231108 - 2023-11-08
  • 18.3.0-canary-746890329-20231108 - 2023-11-09
  • 18.3.0-canary-720de7f81a-20241220 - 2024-12-20
  • 18.3.0-canary-7118f5dd7-20230705 - 2023-07-05
  • 18.3.0-canary-6f1324395-20231004 - 2023-10-04
  • 18.3.0-canary-6db7f4209-20231021 - 2023-10-23
  • 18.3.0-canary-6c7b41da3-20231123 - 2023-11-24
  • 18.3.0-canary-6c3b8dbfe-20240226 - 2024-02-26
  • 18.3.0-canary-6b3834a45-20231110 - 2023-11-10
  • 18.3.0-canary-6aacd3fa1-20230626 - 2023-06-27
  • 18.3.0-canary-67cc9ba87-20231016 - 2023-10-16
  • 18.3.0-canary-670811593-20240322 - 2024-03-22
  • 18.3.0-canary-6639ed3b3-20240111 - 2024-01-11
  • 18.3.0-canary-640ccebb7-20231201 - 2023-12-04
  • 18.3.0-canary-627b7abd6-20230911 - 2023-09-11
  • 18.3.0-canary-62512bafc-20230928 - 2023-09-28
  • 18.3.0-canary-613e6f5fc-20230616 - 2023-06-16
  • 18.3.0-canary-60a927d04-20240113 - 2024-01-14
  • 18.3.0-canary-5dd35968b-20231201 - 2023-12-01
  • 18.3.0-canary-5c607369c-20240116 - 2024-01-17
  • 18.3.0-canary-5bcade5fc-20231208 - 2023-12-08
  • 18.3.0-canary-59831c98c-20240218 - 2024-02-19
  • 18.3.0-canary-596827f6a-20240205 - 2024-02-05
  • 18.3.0-canary-593ecee66-20231114 - 2023-11-14
  • 18.3.0-canary-587ae49d7-20230720 - 2023-07-20
  • 18.3.0-canary-56e20051c-20240311 - 2024-03-11
  • 18.3.0-canary-546fe4681-20230713 - 2023-07-13
  • 18.3.0-canary-546178f91-20231005 - 2023-10-05
  • 18.3.0-canary-53ac21937-20230703 - 2023-07-03
  • 18.3.0-canary-537228f9f-20231010 - 2023-10-11
  • 18.3.0-canary-535c038d1-20230522 - 2023-05-23
  • 18.3.0-canary-533fc28c1-20230810 - 2023-08-11
  • 18.3.0-canary-5309f1028-20230517 - 2023-05-18
  • 18.3.0-canary-52d542ad6-20231107 - 2023-11-08
  • 18.3.0-canary-51ffd3564-20231025 - 2023-10-25
  • 18.3.0-canary-4ddc019ac-20230614 - 2023-06-14
  • 18.3.0-canary-4cd706566-20230512 - 2023-05-14
  • 18.3.0-canary-4b877b6c6-20230519 - 2023-05-22
  • 18.3.0-canary-4b84f1161-20240318 - 2024-03-19
  • 18.3.0-canary-4b2a1115a-20240202 - 2024-02-02
  • 18.3.0-canary-49eba0193-20230926 - 2023-09-27
  • 18.3.0-canary-493f72b0a-20230727 - 2023-07-27
  • 18.3.0-canary-47beb96cc-20240222 - 2024-02-22
  • 18.3.0-canary-456d153bb-20230828 - 2023-08-28
  • 18.3.0-canary-432b9f1d9-20231110 - 2023-11-13
  • 18.3.0-canary-41f0e9dae-20230907 - 2023-09-08
  • 18.3.0-canary-3ff846d10-20230724 - 2023-07-24
  • 18.3.0-canary-3e00e58a6-20231217 - 2023-12-18
  • 18.3.0-canary-3d9b20132-20240124 - 2024-01-24
  • 18.3.0-canary-3c27178a2-20230920 - 2023-09-21
  • 18.3.0-canary-3bcd2de01-20240227 - 2024-02-27
  • 18.3.0-canary-388686f29-20230503 - 2023-05-03
  • 18.3.0-canary-3808b01b3-20230830 - 2023-08-31
  • 18.3.0-canary-338dddc08-20240307 - 2024-03-08
  • 18.3.0-canary-31603f19d-20240109 - 2024-01-09
  • 18.3.0-canary-2f8f77602-20240229 - 2024-03-01
  • 18.3.0-canary-2e470a788-20240214 - 2024-02-15
  • 18.3.0-canary-2cd19ed1d-20240207 - 2024-02-07
  • 18.3.0-canary-2c338b16f-20231116 - 2023-11-16
  • 18.3.0-canary-2bc7d336a-20240205 - 2024-02-06
  • 18.3.0-canary-2983249dd-20231107 - 2023-11-07
  • 18.3.0-canary-2807d781a-20230918 - 2023-09-18
  • 18.3.0-canary-247738465-20240130 - 2024-01-30
  • 18.3.0-canary-21a161fa3-20230609 - 2023-06-09
  • 18.3.0-canary-2153a2966-20230628 - 2023-06-29
  • 18.3.0-canary-20c91b653-20231018 - 2023-10-18
  • 18.3.0-canary-201becd3d-20230808 - 2023-08-09
  • 18.3.0-canary-1fdacbefd-20230630 - 2023-06-30
  • 18.3.0-canary-1dba980e1f-20241220 - 2024-12-20
  • 18.3.0-canary-1d5667a12-20240102 - 2024-01-03
  • 18.3.0-canary-1cea38448-20230530 - 2023-05-31
  • 18.3.0-canary-1b1dcb8a4-20230920 - 2023-09-20
  • 18.3.0-canary-1a001dac6-20230812 - 2023-08-12
  • 18.3.0-canary-178c267a4e-20241218 - 2024-12-19
  • 18.3.0-canary-16d053d59-20230506 - 2023-05-07
  • 18.3.0-canary-151e75a12-20231010 - 2023-10-10
  • 18.3.0-canary-14fd9630e-20240213 - 2024-02-13
  • 18.3.0-canary-14898b6a9-20240318 - 2024-03-18
  • 18.3.0-canary-13d0225c7-20230928 - 2023-09-28
  • 18.3.0-canary-1219d57fc-20240201 - 2024-02-01
  • 18.3.0-canary-0fb5b61ac-20230814 - 2023-08-15
  • 18.3.0-canary-0e352ea01-20231109 - 2023-11-10
  • 18.3.0-canary-0cdfef19b-20231211 - 2023-12-11
  • 18.3.0-canary-0c6348758-20231030 - 2023-10-30
  • 18.3.0-canary-0ac3ea471-20240111 - 2024-01-12
  • 18.3.0-canary-0a360642d-20230711 - 2023-07-12
  • 18.3.0-canary-09fbee89d-20231013 - 2023-10-13
  • 18.3.0-canary-09285d5a7-20230925 - 2023-09-25
  • 18.3.0-canary-08cd087ca-20240110 - 2024-01-10
  • 18.3.0-canary-08a39539f-20231031 - 2023-11-01
  • 18.3.0-canary-03d6f7cf0-20240209 - 2024-02-09
  • 18.3.0-canary-035a41c4e-20230704 - 2023-07-04
  • 18.3.0-canary-034130c02-20240303 - 2024-03-04
  • 18.3.0-canary-0210f0b08-20230525 - 2023-05-26
  • 18.3.0-canary-01ab35a9a-20240228 - 2024-02-28
  • 18.3.0-canary-018c58c9c-20230601 - 2023-06-01
  • 18.3.0-canary-0066e0b68-20240306 - 2024-03-06
  • 18.2.0 - 2022-06-14

    React DOM

    React DOM Server

    • Pass information about server errors to the client. (@ salazarm and @ gnoff in #24551 and #24591)
    • Allow to provide a reason when aborting the HTML stream. (@ gnoff in #24680)
    • Eliminate extraneous text separators in the HTML where possible. (@ gnoff in #24630)
    • Disallow complex children inside <title> elements to match the browser constraints. (@ gnoff in #24679)
    • Fix buffering in some worker environments by explicitly setting highWaterMark to 0. (@ jplhomer in #24641)

    Server Components (Experimental)

    • Add support for useId() inside Server Components. (@ gnoff) in #24172
from react GitHub release notes

Important

  • Check the changes in this PR to ensure they won't cause issues with your project.
  • This PR was automatically created by Snyk using the credentials of a real user.

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

For more information:

ntindle and others added 30 commits July 18, 2025 16:12
…nificant-Gravitas#10411)

This PR adds a database index to improve query performance based on
Supabase query performance insights and index recommendations. These
indexes target frequently queried columns and relationships to reduce
query execution time.

### Changes 🏗️
- Added index on `AgentNodeExecutionInputOutput.agentPresetId`

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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 schema changes are valid Prisma syntax
- [x] Confirmed indexes target frequently queried columns based on
Supabase recommendations
  - [x] Ensured no duplicate indexes are created

#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [x] `docker-compose.yml` is updated or already compatible with my
changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)
…ndexes (Significant-Gravitas#10412)

### Changes 🏗️

This PR optimizes database performance by adding missing foreign key
indexes, removing unused/redundant indexes, cleaning up all legacy
untracked indexes, and adding performance indexes for materialized views
to achieve 100% optimized database indexing.

**Foreign Key Indexes Added:**
- `AgentGraph`: `[forkedFromId, forkedFromVersion]` - For fork
relationship queries
- `AgentGraphExecution`: `[agentPresetId]` - For preset-based execution
filtering
- `AgentNodeExecution`: `[agentNodeId]` - For node execution lookups
- `AgentNodeExecutionInputOutput`: `[agentPresetId]` - For preset
input/output queries
- `AgentPreset`: `[agentGraphId, agentGraphVersion]` & `[webhookId]` -
For graph and webhook lookups
- `LibraryAgent`: `[agentGraphId, agentGraphVersion]` & `[creatorId]` -
For agent and creator queries
- `StoreListing`: `[agentGraphId, agentGraphVersion]` - For marketplace
agent lookups
- `StoreListingReview`: `[reviewByUserId]` - For user review queries

**Unused/Redundant Indexes Removed:**
- `User.email` - Unused index identified by linter
- `AnalyticsMetrics.userId` - Unused index causing write overhead
- `AnalyticsDetails.type` - Redundant (covered by composite `[userId,
type]`)
- `APIKey.key`, `APIKey.status` - Unused indexes
- Named index `"analyticsDetails"` - Converted to standard composite
index

**All Legacy Untracked Indexes Removed:**
- `idx_store_listing_version_status` - Redundant with Prisma composite
index
- `idx_slv_agent` - Redundant with Prisma-managed `[agentGraphId,
agentGraphVersion]`
- `idx_store_listing_version_approved_listing` - Redundant with unique
constraint
- `StoreListing_agentId_owningUserId_idx` - Legacy index superseded by
current strategy
- `StoreListing_isDeleted_isApproved_idx` - Replaced by optimized
composite index
- `StoreListing_isDeleted_idx` - Redundant with composite index
- `StoreListingVersion_agentId_agentVersion_isDeleted_idx` - Legacy
index replaced
- `idx_store_listing_approved` - Redundant with existing `[owningUserId,
slug]` unique constraint and `[isDeleted, hasApprovedVersion]` index
- `idx_slv_categories_gin` - Specialized array search index removed (can
be re-added if category filtering is implemented)
- `idx_profile_user` - Duplicate of Prisma-managed `Profile_userId_idx`

**Materialized View Performance Indexes Added:**
- `idx_mv_review_stats_rating` on `mv_review_stats(avg_rating DESC)` -
Optimizes sorting agents by rating
- `idx_mv_review_stats_count` on `mv_review_stats(review_count DESC)` -
Optimizes sorting agents by review count

**Result: 100% Optimized Database Indexing**
- All database indexes are now defined and managed through Prisma schema
- No more untracked indexes requiring manual SQL maintenance
- Added performance indexes for materialized views used by marketplace
views
- Improved query performance for agent sorting and filtering
- Enhanced maintainability and consistency across environments

**Schema Comments Updated:**
- Removed all references to dropped untracked indexes
- Simplified documentation to reflect Prisma-only approach for regular
tables
- Added comprehensive documentation for materialized view indexes and
their purposes
- Maintained documentation for materialized view refresh strategy

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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] Schema changes compile successfully with Prisma
- [x] Migration adds required FK indexes and materialized view
performance indexes
- [x] Migration drops all legacy indexes and redundant untracked indexes
  - [x] All pre-commit hooks pass (linting, formatting, type checking)
  - [x] No breaking changes to existing foreign key relationships
  - [x] Verified existing Prisma indexes cover all query patterns
  - [x] Schema comments comprehensively document all indexing strategy
- [x] Materialized view performance indexes optimize marketplace sorting

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Swifty <craigswift13@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
…nificant-Gravitas#10401)

## Summary
- Introduced correct health check API for AppService
- Fixed service health check mechanism to properly handle health status
monitoring

## Changes Made
- Updated health check implementation in AppService.
- Make rest service health check checks the health of DatabaseManager
too.

## Test plan
- [x] Verify health check endpoint responds correctly
- [x] Test health check mechanism under various service states
- [x] Validate monitoring and alerting integration

🤖 Generated with [Claude Code](https://claude.ai/code)
…rder (Significant-Gravitas#10352)

### Changes 🏗️

This PR adds a new utility block to the basic blocks collection. This
block provides a simple way to reverse the order of elements in any
list.

**New Features:**
- Added  class in 
- Block accepts any list as input and returns the same list with
elements in reversed order
- Preserves the original list (creates a copy before reversing)
- Works with lists containing any type of elements

**Technical Details:**
- Block ID: 
- Category: 
- Input:  - The list to reverse (accepts )
- Output:  - The list with elements in reversed order
- Includes test input/output for validation

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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] Created an agent with the ReverseListOrderBlock
  - [x] Tested with various list types (numbers, strings, mixed types)
  - [x] Verified the block preserves the original list
  - [x] Confirmed the block correctly reverses the order of elements
  - [x] Tested with empty lists and single-element lists
- [x] Verified the block integrates properly with other blocks in a
workflow

#### For configuration changes:
- [x]  is updated or already compatible with my changes
- [x]  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 required - this is a pure code
addition that uses the existing block framework.

Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
…nt import (Significant-Gravitas#10409)

Currently, we only create a library entry of the top-most graph when
importing the graph from an exported file.
This can cause some complications, as there is no way to remove the
library entry of it.

### Changes 🏗️

Create the library entry for all the subgraphs during the import
process.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  <!-- Put your test plan here: -->
  - [x] Export an agent with subgraphs and import it back.
## Changes 🏗️

Launch Darkly is not being initialised in production, despite on paper
all env variables being well set 🧐

I tried doing production builds locally, and I noticed this provider
needs to be initialised on the client because Launch Darkly flags are
designed to work on the client side, where they can access user context
and browser environment.

## Checklist 📋

### For code changes:
- [x] I have clearly listed 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] Did production build locally and run it
- [x] See LD initialised on the console after the `use client` directive
was added


### For configuration changes:

None
… scheduler pod (Significant-Gravitas#10425)

Rest-Api service is a vital service where we should minimize the amount
of external resources impacting it.
And the NotificationManager service is running as a singleton in nature
(similar to the scheduler service), so it makes sense to put it in a
single pod.

### Changes 🏗️

Move the NotificationManager service from rest-api pod to the scheduler
pod

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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
… scheduler pod (Significant-Gravitas#10425)

Rest-Api service is a vital service where we should minimize the amount
of external resources impacting it.
And the NotificationManager service is running as a singleton in nature
(similar to the scheduler service), so it makes sense to put it in a
single pod.

### Changes 🏗️

Move the NotificationManager service from rest-api pod to the scheduler
pod

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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
…ling (Significant-Gravitas#10415)

## Summary
- Add thread safety to NodeExecutionProgress class to prevent race
conditions between graph executor and node executor threads
- Fixes potential data corruption and lost outputs during concurrent
access to shared output lists
- Uses single global lock per node for minimal performance impact
- Instead of blocking the node evaluation before adding another node
evaluation, we move on to the next node, in case another node completes
it.

## Changes
- Added `threading.Lock` to NodeExecutionProgress class
- Protected `add_output()` calls from node executor thread with lock
- Protected `pop_output()` calls from graph executor thread with lock
- Protected `_pop_done_task()` output checks with lock

## Problem Solved
The `NodeExecutionProgress.output` dictionary was being accessed
concurrently:
- `add_output()` called from node executor thread (asyncio thread) 
- `pop_output()` called from graph executor thread (main thread)
- Python lists are not thread-safe for concurrent append/pop operations
- This could cause data corruption, index errors, and lost outputs

## Test Plan
- [x] Existing executor tests pass
- [x] No performance regression (operations are microsecond-level)
- [x] Thread safety verified through code analysis

## Technical Details
- Single `threading.Lock()` per NodeExecutionProgress instance (~64
bytes)
- Lock acquisition time (~100-200ns) is minimal compared to list
operations
- Maintains order guarantees for same node_execution_id processing
- No GIL contention issues as operations are very brief

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
…nificant-Gravitas#10422)

### Changes ️

The previous implementation of the `LaunchDarklyProvider` had a race
condition where it would only initialize after the user's authentication
state was fully resolved. This caused two primary issues:

1. A delay in evaluating any feature flags, leading to a "flash of
un-styled/un-flagged content" until the user session was loaded.
2. An unreliable transition from an un-flagged state to a flagged state,
which could cause UI flicker or incorrect flag evaluations upon login.


This pull request refactors the provider to follow a more robust,
industry-standard pattern. It now initializes immediately with an
`anonymous` context, ensuring flags are available from the very start of
the application lifecycle. When the user logs in and their session
becomes available, the provider seamlessly transitions to an
authenticated context, guaranteeing that the correct flags are evaluated
consistently.

### 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:

	**Test Plan:**
	
- [x] **Anonymous User:** Load the application in an incognito window
without logging in. Verify that feature flags are evaluated correctly
for an anonymous user. Check the browser console for the
`[LaunchDarklyProvider] Using anonymous context` message.
- [x] **Login Flow:** While on the site, log in. Verify that the UI
updates with the correct feature flags for the authenticated user. Check
the console for the `[LaunchDarklyProvider] Using authenticated context`
message and confirm the LaunchDarkly client re-initializes.
- [x] **Authenticated User (Page Refresh):** As a logged-in user,
refresh the page. Verify that the application loads directly with the
authenticated user's flags, leveraging the cached session and
bootstrapped flags from `localStorage`.
- [x] **Logout Flow:** While logged in, log out. Verify that the UI
reverts to the anonymous user's state and flags. The provider `key`
should change back to "anonymous", triggering another re-mount.





<details><summary>Summary of Code Changes</summary>

- Refactored `LaunchDarklyProvider` to handle user authentication state
changes gracefully.
- The provider now initializes immediately with an `anonymous` user
context while the Supabase user session is loading.
- Once the user is authenticated, the provider's context is updated to
reflect the logged-in user's details.
- Added a `key` prop to the `<LDProvider>` component, using the user's
ID (or "anonymous"). This forces React to re-mount the provider when the
user's identity changes, ensuring a clean re-initialization of the
LaunchDarkly SDK.
- Enabled `localStorage` bootstrapping (`options={{ bootstrap:
"localStorage" }}`) to cache flags and improve performance on subsequent
page loads.
- Added `console.debug` statements for improved observability into the
provider's state (anonymous vs. authenticated).


</details>

#### For configuration changes:

- `.env.example` is updated or already compatible with my changes
- `docker-compose.yml` is updated or already compatible with my changes
- I have included a list of my configuration changes in the PR
description (under **Changes**)


<details>
<summary>Configuration Changes</summary>

- No configuration changes were made. This PR relies on existing
environment variables (`NEXT_PUBLIC_LAUNCHDARKLY_CLIENT_ID` and
`NEXT_PUBLIC_LAUNCHDARKLY_ENABLED`).


</details>

---------

Co-authored-by: Lluis Agusti <hi@llu.lu>
…tas#10430)

<!-- Clearly explain the need for these changes: -->
We setup launchdarkly so now we can dynamically control which blocks are
available on the UI

### Changes 🏗️
enables the google blocks + fixes the LD .env.example for the local env
<!-- 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] Deploy to test environment and verify the blocks show correctly vs
are hidden when toggling Launch darlky rules
…ng rendered (Significant-Gravitas#10431)

Some AgentInput can store empty string as the default value, this will
cause error on non string input.

Error:
```
2025-07-22 23:14:10,424 WARNING  Invalid <class 'backend.blocks.io.AgentToggleInputBlock.Input'>: {'name': 'Enriched info (including email), will double the search cost', 'value': '', 'advanced': False, 'placeholder_values': []}, 1 validation error for Input
value
  Input should be a valid boolean, unable to interpret input [type=bool_parsing, input_value='', input_type=str]
    For further information visit https://errors.pydantic.dev/2.11/v/bool_parsing
2025-07-22 23:14:10,424 WARNING  Invalid <class 'backend.blocks.io.AgentNumberInputBlock.Input'>: {'name': 'Expected New Leads Count', 'value': '', 'advanced': False, 'placeholder_values': []}, 1 validation error for Input
value
  Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
    For further information visit https://errors.pydantic.dev/2.11/v/int_parsing
```

### Changes 🏗️

Ignore invalid field when constructing agent input schema.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  <!-- Put your test plan here: -->
- [x] Use AgentNumberInput and AgenToggleInput with empty string value.
## Changes 🏗️


https://github.com/user-attachments/assets/42e1c896-5f3b-447c-aee9-4f5963c217d9

There is now a 🔔 icon on the Navigation bar that shows previous agent
runs and displays real-time agent running status.

If you run an agent, the bell will show on a badge how many agents are
running. If you hover over it, a hint appears. If you click on it, it
opens a dropdown and displays the executions with their status ( _which
should match what we have in library functionality, not design-wise_ ).

I leveraged the existing APIs for this purpose. Most of the run logic is
[encapsulated on this
hook](https://github.com/Significant-Gravitas/AutoGPT/compare/dev...feat/agent-notifications?expand=1#diff-a9e7f2904d6283b094aca19b64c7168e8c66be1d5e0bb454be8978cb98526617)
and is also an independent `<AgentActivityDropdown />` component.

Clicking on an agent run opens that run in the library page.

This new functionality is covered by E2E tests 💆🏽 ✔️ 

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] The navigation bar layout looks good when logged out
  - [x] The navigation bar layout looks good when logged in
  - [x] Open an agent in the library and click `Run`
- [x] See the real-time activity of the agent running on the navigation
bar bell icon

### For configuration changes:

_No configuration changes needed._
…/autogpt_platform/frontend with 9 updates (Significant-Gravitas#10419)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ubbe <hi@ubbe.dev>
…e sevice (Significant-Gravitas#10437)

It's hard to debug two processes running in the same pod. We need to
decouple the two processes into two services.

### Changes 🏗️

Move DatabaseManager away from RestAPI as a standalone serice

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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
…Significant-Gravitas#10438)

We've been reporting agents that are stuck on the `QUEUED` status. This
change includes the one on. RUNNING status that's been stuck for more
than 24hours.

### Changes 🏗️

Report agent on RUNNING status for more than 24hours.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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
…vitas#10440)

## Changes 🏗️

Fixed WebSocket connection errors during multi-tab logout 💆🏽 

<img width="1193" height="273" alt="Screenshot 2025-07-23 at 22 23 35"
src="https://github.com/user-attachments/assets/bf6f964d-bcb0-4a2a-adff-1194defe1e61"
/>

Previously, when users logged out in one browser tab, WebSocket
connections in other open tabs would continue trying to reconnect with
invalid authentication tokens, causing console errors and potential
runtime errors.

### What was fixed
- WebSocket connections are now properly disconnected when logout occurs
in any tab
- cross-tab logout mechanism now includes WebSocket cleanup to prevent
reconnection errors
- added logic to prevent automatic reconnection after intentional
disconnection
- added E2E tests to cover this case

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Manual testing: Login in multiple tabs, navigate to builder
(establishes WebSocket), logout from one tab, verify no console errors
- [x] E2E test: Added automated test covering multi-tab logout with
WebSocket cleanup verification
  - [x] Verified cross-tab logout still works correctly
- [x] Confirmed WebSocket connections reconnect properly after fresh
login

### For configuration changes:
None
…cker mode (Significant-Gravitas#10443)

Significant-Gravitas#10437 migrated
DatabaseManager away from RestApi, but this change is not yet reflected
in Docker Compose, which causes the self-hosted Docker mode to break.

### Changes 🏗️

Add DatabaseManager process in docker.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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] `docker compose up`
…ignificant-Gravitas#10410)

<!-- Clearly explain the need for these changes: -->

### Changes 🏗️

<!-- Concisely describe all of the changes made in this pull request:
-->

This PR contains code changes that will resolve the cursor jump issue in
the **Note** block Significant-Gravitas#9252 . The changes in code affects the
NodeTextBoxInput component to transfer the state into local state and
not mutate the `value` prop directly.

Also includes change to use store admin which is from rebase issue but
approved by maintainer @ntindle

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Tested the note block allows to edit text normally
 


https://github.com/user-attachments/assets/f2800bf1-9867-4627-ac9d-44718627b263

---------

Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>
Co-authored-by: Ubbe <hi@ubbe.dev>
…tas#10446)

## Changes 🏗️

- Make docker + deps cache actually work on the FE CI
- Run the E2E test data script before Playwright

## Checklist 📋

### For code changes:
- [x] I have clearly listed 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 is faster in repeated runs ( _uses cache_ )
  - [x] Test data script runs successfully 

### For configuration changes:
None
Bumps the production-dependencies group with 8 updates in the
/autogpt_platform/backend directory:

| Package | From | To |
| --- | --- | --- |
| [anthropic](https://github.com/anthropics/anthropic-sdk-python) |
`0.57.1` | `0.59.0` |
|
[google-api-python-client](https://github.com/googleapis/google-api-python-client)
| `2.176.0` | `2.177.0` |
| [jsonschema](https://github.com/python-jsonschema/jsonschema) |
`4.24.1` | `4.25.0` |
| [mem0ai](https://github.com/mem0ai/mem0) | `0.1.114` | `0.1.115` |
| [openai](https://github.com/openai/openai-python) | `1.97.0` |
`1.97.1` |
| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.33.0` |
`2.33.2` |
| [supabase](https://github.com/supabase/supabase-py) | `2.16.0` |
`2.17.0` |
|
[youtube-transcript-api](https://github.com/jdepoix/youtube-transcript-api)
| `1.1.1` | `1.2.1` |


Updates `anthropic` from 0.57.1 to 0.59.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-python/releases">anthropic's
releases</a>.</em></p>
<blockquote>
<h2>v0.59.0</h2>
<h2>0.59.0 (2025-07-23)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.58.2...v0.59.0">v0.58.2...v0.59.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> removed older deprecated models (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/38998fdab79b62349481c9c49579a825a5a33761">38998fd</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>parsing:</strong> ignore empty metadata (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/7099f32a401b1f2a08b358562e325571a5fce8f6">7099f32</a>)</li>
<li><strong>parsing:</strong> parse extra field types (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/dbea8a40469c30533e30dc1762bfba83159f090d">dbea8a4</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> version bump (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/5defffa3ab4b0299759f2a45ffa3f7a49e8c2ba5">5defffa</a>)</li>
</ul>
<h2>v0.58.2</h2>
<h2>0.58.2 (2025-07-18)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.58.1...v0.58.2">v0.58.1...v0.58.2</a></p>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> version bump (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/cd5d1adc34e488f1c9e3a6d2a46f69e5c168e3f6">cd5d1ad</a>)</li>
</ul>
<h2>v0.58.1</h2>
<h2>0.58.1 (2025-07-18)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.58.0...v0.58.1">v0.58.0...v0.58.1</a></p>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> version bump (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/31c3b380e5ceab20789080c65cef9bd74e318a3e">31c3b38</a>)</li>
</ul>
<h2>v0.58.0</h2>
<h2>0.58.0 (2025-07-18)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.57.1...v0.58.0">v0.57.1...v0.58.0</a></p>
<h3>Features</h3>
<ul>
<li>clean up environment call outs (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/4f64e9c1bdb142bbcff2072baa709afdea348889">4f64e9c</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md">anthropic's
changelog</a>.</em></p>
<blockquote>
<h2>0.59.0 (2025-07-23)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.58.2...v0.59.0">v0.58.2...v0.59.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> removed older deprecated models (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/38998fdab79b62349481c9c49579a825a5a33761">38998fd</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>parsing:</strong> ignore empty metadata (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/7099f32a401b1f2a08b358562e325571a5fce8f6">7099f32</a>)</li>
<li><strong>parsing:</strong> parse extra field types (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/dbea8a40469c30533e30dc1762bfba83159f090d">dbea8a4</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> version bump (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/5defffa3ab4b0299759f2a45ffa3f7a49e8c2ba5">5defffa</a>)</li>
</ul>
<h2>0.58.2 (2025-07-18)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.58.1...v0.58.2">v0.58.1...v0.58.2</a></p>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> version bump (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/cd5d1adc34e488f1c9e3a6d2a46f69e5c168e3f6">cd5d1ad</a>)</li>
</ul>
<h2>0.58.1 (2025-07-18)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.58.0...v0.58.1">v0.58.0...v0.58.1</a></p>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> version bump (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/31c3b380e5ceab20789080c65cef9bd74e318a3e">31c3b38</a>)</li>
</ul>
<h2>0.58.0 (2025-07-18)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.57.1...v0.58.0">v0.57.1...v0.58.0</a></p>
<h3>Features</h3>
<ul>
<li>clean up environment call outs (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/4f64e9c1bdb142bbcff2072baa709afdea348889">4f64e9c</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> don't send Content-Type header on GET
requests (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/727268f2bd4cb42aa1472e1f0c6a92fd6a5cb122">727268f</a>)</li>
<li><strong>parsing:</strong> correctly handle nested discriminated
unions (<a
href="https://github.com/anthropics/anthropic-sdk-python/commit/44dd47e15ed91af912eac4791421e11504c3094b">44dd47e</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/28fefb7648967b9a612f3f96d4421dbaf9d8b650"><code>28fefb7</code></a>
release: 0.59.0</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/b2d8c264f86287628a3ffb69db5a1bedd2353d71"><code>b2d8c26</code></a>
fix(parsing): parse extra field types</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/fce21e1daf1f328eec801ae3ba3d4cd63999f6d0"><code>fce21e1</code></a>
feat(api): removed older deprecated models</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/8d49f6091567abb5b9971b319f35b14d04c6a8c2"><code>8d49f60</code></a>
fix(parsing): ignore empty metadata</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/e054e76c93bfc0894f192fddf78e9d504507ba88"><code>e054e76</code></a>
chore(internal): version bump</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/79f7f10a71b859953cfadbab98069ce574706b02"><code>79f7f10</code></a>
release: 0.58.2</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/db95cdc0ab93939b264caf62ee982c8c1ce81633"><code>db95cdc</code></a>
chore(internal): version bump</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/16e941334b5e49c4dd73daaea1f550d53eedba26"><code>16e9413</code></a>
release: 0.58.1</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/b69c9ff676cc5b3188b55044f99cbc49b11f6855"><code>b69c9ff</code></a>
chore(internal): version bump</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-python/commit/423601de8d2b8dcd07d57070ace9a17aa5eb447e"><code>423601d</code></a>
release: 0.58.0</li>
<li>Additional commits viewable in <a
href="https://github.com/anthropics/anthropic-sdk-python/compare/v0.57.1...v0.59.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `google-api-python-client` from 2.176.0 to 2.177.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/google-api-python-client/releases">google-api-python-client's
releases</a>.</em></p>
<blockquote>
<h2>v2.177.0</h2>
<h2><a
href="https://github.com/googleapis/google-api-python-client/compare/v2.176.0...v2.177.0">2.177.0</a>
(2025-07-22)</h2>
<h3>Features</h3>
<ul>
<li><strong>admin:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/90d92b4dedbe4d3c562e81095832f6620af50320">https://togithub.com/googleapis/google-api-python-client/commit/90d92b4dedbe4d3c562e81095832f6620af50320</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>adsenseplatform:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/70cde9e2f6f37e4f894d61ec7560ec006c90d275">https://togithub.com/googleapis/google-api-python-client/commit/70cde9e2f6f37e4f894d61ec7560ec006c90d275</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>aiplatform:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/fef1ed967fb47272f82a7309454e477959f6272e">https://togithub.com/googleapis/google-api-python-client/commit/fef1ed967fb47272f82a7309454e477959f6272e</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>analyticsadmin:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/1609c8ffe2d28a36f3f128d823d7d0e499794843">https://togithub.com/googleapis/google-api-python-client/commit/1609c8ffe2d28a36f3f128d823d7d0e499794843</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>androidpublisher:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/f4e40100db38312ab6213c8af955d25b94ed8c87">https://togithub.com/googleapis/google-api-python-client/commit/f4e40100db38312ab6213c8af955d25b94ed8c87</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>apphub:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/d192cdf02d0e2468454bf20048c6595313b2a17f">https://togithub.com/googleapis/google-api-python-client/commit/d192cdf02d0e2468454bf20048c6595313b2a17f</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>backupdr:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/2d03602be0079c3e3aab99982f2a3f570399c567">https://togithub.com/googleapis/google-api-python-client/commit/2d03602be0079c3e3aab99982f2a3f570399c567</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>beyondcorp:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/992f2f231e390b30f5a42b954f2d615595385d8d">https://togithub.com/googleapis/google-api-python-client/commit/992f2f231e390b30f5a42b954f2d615595385d8d</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>chat:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/2bf379026a8e633e53221accbf12b51354b763b5">https://togithub.com/googleapis/google-api-python-client/commit/2bf379026a8e633e53221accbf12b51354b763b5</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>chromemanagement:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/6a2c4a5ea84185eafc96baecf93f8d05ef662bb0">https://togithub.com/googleapis/google-api-python-client/commit/6a2c4a5ea84185eafc96baecf93f8d05ef662bb0</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>civicinfo:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/38e107ad9417f213b23542c7cddeeff3aef23416">https://togithub.com/googleapis/google-api-python-client/commit/38e107ad9417f213b23542c7cddeeff3aef23416</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>cloudasset:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/0d243636fd6ccf64038513819abd5e6709f4edc7">https://togithub.com/googleapis/google-api-python-client/commit/0d243636fd6ccf64038513819abd5e6709f4edc7</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>cloudbilling:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/68858fd5140496a62a29ba6ac24ca86b8d5e0812">https://togithub.com/googleapis/google-api-python-client/commit/68858fd5140496a62a29ba6ac24ca86b8d5e0812</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>compute:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/0670bbe7c2f2047aea20bb902ac8d971dd4761be">https://togithub.com/googleapis/google-api-python-client/commit/0670bbe7c2f2047aea20bb902ac8d971dd4761be</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>compute:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/0a77325ff1334cbd9bdc633401995c82dcdfa4e6">https://togithub.com/googleapis/google-api-python-client/commit/0a77325ff1334cbd9bdc633401995c82dcdfa4e6</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>connectors:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/0a4db90998f12781fe6cf1baae2b9b1d5883ee6f">https://togithub.com/googleapis/google-api-python-client/commit/0a4db90998f12781fe6cf1baae2b9b1d5883ee6f</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>contactcenteraiplatform:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/39f0f5a371ec5ea99d530855004af028f8ac9819">https://togithub.com/googleapis/google-api-python-client/commit/39f0f5a371ec5ea99d530855004af028f8ac9819</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>contactcenterinsights:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/6cd0f3b819b900a4893a460041e31915452ec4ad">https://togithub.com/googleapis/google-api-python-client/commit/6cd0f3b819b900a4893a460041e31915452ec4ad</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>container:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/0e91158f4e8857ddf25cb79addf50d18333d9569">https://togithub.com/googleapis/google-api-python-client/commit/0e91158f4e8857ddf25cb79addf50d18333d9569</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>dataflow:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/b0faf39e2d7ceb4cc119253b8bddae8a997d02a5">https://togithub.com/googleapis/google-api-python-client/commit/b0faf39e2d7ceb4cc119253b8bddae8a997d02a5</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>dataform:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/d47f453ea58e07b7573ae7c975e37ad0115817c7">https://togithub.com/googleapis/google-api-python-client/commit/d47f453ea58e07b7573ae7c975e37ad0115817c7</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>dataplex:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/30d50fe41f86855c11c095ab9e4e448e85509775">https://togithub.com/googleapis/google-api-python-client/commit/30d50fe41f86855c11c095ab9e4e448e85509775</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>datastream:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/d2fb73fff76efbb483c88bd7e2726d8d370e1907">https://togithub.com/googleapis/google-api-python-client/commit/d2fb73fff76efbb483c88bd7e2726d8d370e1907</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>dialogflow:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/a861178e2fed467cf747ce97662ea0f8724b03e1">https://togithub.com/googleapis/google-api-python-client/commit/a861178e2fed467cf747ce97662ea0f8724b03e1</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>discoveryengine:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/656a393a359ce1c842614503ddc4b3891e705b97">https://togithub.com/googleapis/google-api-python-client/commit/656a393a359ce1c842614503ddc4b3891e705b97</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>discoveryengine:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/e32141e90de609a378f85282c0a22df2ddcd4f57">https://togithub.com/googleapis/google-api-python-client/commit/e32141e90de609a378f85282c0a22df2ddcd4f57</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>displayvideo:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/04588ff4641b9fba78b52c651a9e0a4ee8a25565">https://togithub.com/googleapis/google-api-python-client/commit/04588ff4641b9fba78b52c651a9e0a4ee8a25565</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>dlp:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/8bed23577732e3fc2ebbe1776759e837cde4a68b">https://togithub.com/googleapis/google-api-python-client/commit/8bed23577732e3fc2ebbe1776759e837cde4a68b</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>documentai:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/799e9acca0c16517042626caa0dfdfcaefb753cf">https://togithub.com/googleapis/google-api-python-client/commit/799e9acca0c16517042626caa0dfdfcaefb753cf</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>firebaseapphosting:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/faa576796737b33058886e3958642096fde8093c">https://togithub.com/googleapis/google-api-python-client/commit/faa576796737b33058886e3958642096fde8093c</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>firebasedataconnect:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/da5ae903995f13fc9bd78bd605e1ced59055241b">https://togithub.com/googleapis/google-api-python-client/commit/da5ae903995f13fc9bd78bd605e1ced59055241b</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>firebaseml:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/f658e6a1c5c12531c1aa78354fbf3df491436ca7">https://togithub.com/googleapis/google-api-python-client/commit/f658e6a1c5c12531c1aa78354fbf3df491436ca7</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>gkehub:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/f475ccbb03ac291b1a55ed150cc1781213abaae8">https://togithub.com/googleapis/google-api-python-client/commit/f475ccbb03ac291b1a55ed150cc1781213abaae8</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>healthcare:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/3652423200b34b9a3c64f1bffe94ed45127783b9">https://togithub.com/googleapis/google-api-python-client/commit/3652423200b34b9a3c64f1bffe94ed45127783b9</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>managedkafka:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/6db60695a4f971fcc02bf04ee68065e91b07ff4c">https://togithub.com/googleapis/google-api-python-client/commit/6db60695a4f971fcc02bf04ee68065e91b07ff4c</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>merchantapi:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/2aada479dbcab5044c994e34697854f4dee7da51">https://togithub.com/googleapis/google-api-python-client/commit/2aada479dbcab5044c994e34697854f4dee7da51</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>merchantapi:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/e4c81be4e22aa92ba8eb5889b8f485388cf279d5">https://togithub.com/googleapis/google-api-python-client/commit/e4c81be4e22aa92ba8eb5889b8f485388cf279d5</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>migrationcenter:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/55d8296b794d88994b164be3cac99da153a15849">https://togithub.com/googleapis/google-api-python-client/commit/55d8296b794d88994b164be3cac99da153a15849</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>netapp:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/30b488418dccad7b2aabfdb5766ef5f3b5a2a411">https://togithub.com/googleapis/google-api-python-client/commit/30b488418dccad7b2aabfdb5766ef5f3b5a2a411</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>networkmanagement:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/37999dc933b9b7af5cbda6083786517fbee3eddb">https://togithub.com/googleapis/google-api-python-client/commit/37999dc933b9b7af5cbda6083786517fbee3eddb</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
<li><strong>networksecurity:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/4171b55c7654fc2b6585722fdd48b0a2fbc1e364">https://togithub.com/googleapis/google-api-python-client/commit/4171b55c7654fc2b6585722fdd48b0a2fbc1e364</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>notebooks:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/42f4eac549dd9085d08b3d9e36d0b129dc32217c">https://togithub.com/googleapis/google-api-python-client/commit/42f4eac549dd9085d08b3d9e36d0b129dc32217c</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>oracledatabase:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/c2fbbec002b98811fd331bf7cbe1684634ada9e0">https://togithub.com/googleapis/google-api-python-client/commit/c2fbbec002b98811fd331bf7cbe1684634ada9e0</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940">6844949</a>)</li>
<li><strong>recaptchaenterprise:</strong> Update the api <a
href="https://togithub.com/googleapis/google-api-python-client/commit/33f2183b4a02cb34aa03ca0c271fed4b88d29101">https://togithub.com/googleapis/google-api-python-client/commit/33f2183b4a02cb34aa03ca0c271fed4b88d29101</a>
(<a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075">1a80b7e</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/google-api-python-client/commit/2423ea179b56fe64bfbed85742ed38a717bd0856"><code>2423ea1</code></a>
chore(main): release 2.177.0 (<a
href="https://redirect.github.com/googleapis/google-api-python-client/issues/2628">#2628</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-python-client/commit/6844949fa0562840b1157e81809f05ccdb8e9940"><code>6844949</code></a>
chore: Update discovery artifacts (<a
href="https://redirect.github.com/googleapis/google-api-python-client/issues/2629">#2629</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-python-client/commit/1a80b7e383841018c9e5e6eaa22e30b9227cd075"><code>1a80b7e</code></a>
chore: Update discovery artifacts (<a
href="https://redirect.github.com/googleapis/google-api-python-client/issues/2627">#2627</a>)</li>
<li>See full diff in <a
href="https://github.com/googleapis/google-api-python-client/compare/v2.176.0...v2.177.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `jsonschema` from 4.24.1 to 4.25.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/python-jsonschema/jsonschema/releases">jsonschema's
releases</a>.</em></p>
<blockquote>
<h2>v4.25.0</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Add support for the <code>iri</code> and <code>iri-reference</code>
formats to the <code>format-nongpl</code> extra by <a
href="https://github.com/jkowalleck"><code>@​jkowalleck</code></a> in <a
href="https://redirect.github.com/python-jsonschema/jsonschema/pull/1388">python-jsonschema/jsonschema#1388</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/jkowalleck"><code>@​jkowalleck</code></a> made
their first contribution in <a
href="https://redirect.github.com/python-jsonschema/jsonschema/pull/1388">python-jsonschema/jsonschema#1388</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/python-jsonschema/jsonschema/compare/v4.24.1...v4.25.0">https://github.com/python-jsonschema/jsonschema/compare/v4.24.1...v4.25.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst">jsonschema's
changelog</a>.</em></p>
<blockquote>
<h1>v4.25.0</h1>
<ul>
<li>Add support for the <code>iri</code> and <code>iri-reference</code>
formats to the <code>format-nongpl</code> extra via the MIT-licensed
<code>rfc3987-syntax</code>.
They were alread supported by the <code>format</code> extra. (<a
href="https://redirect.github.com/python-jsonschema/jsonschema/issues/1388">#1388</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/python-jsonschema/jsonschema/commit/9889f69eb5ccb532e2147465697f30c82b2a8bb0"><code>9889f69</code></a>
Add the new functionality to the CHANGELOG.</li>
<li><a
href="https://github.com/python-jsonschema/jsonschema/commit/18855d01f7839083efc5bad1ca67688a7177be42"><code>18855d0</code></a>
Merge pull request <a
href="https://redirect.github.com/python-jsonschema/jsonschema/issues/1388">#1388</a>
from jkowalleck/feat/validate_rfc3987_non-gpl/rfc398...</li>
<li><a
href="https://github.com/python-jsonschema/jsonschema/commit/1a6067fc441177d1911446c7325eee7c776007ae"><code>1a6067f</code></a>
adjust rfc3987-syntax min-version</li>
<li><a
href="https://github.com/python-jsonschema/jsonschema/commit/8dd4f567caffc8b7e27eeebc8f23a889a3168bbb"><code>8dd4f56</code></a>
feat: use non-GPL validator for rfc3987</li>
<li>See full diff in <a
href="https://github.com/python-jsonschema/jsonschema/compare/v4.24.1...v4.25.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `mem0ai` from 0.1.114 to 0.1.115
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mem0ai/mem0/releases">mem0ai's
releases</a>.</em></p>
<blockquote>
<h2>0.1.115</h2>
<h2>What's Changed</h2>
<ul>
<li>Show details for query tokens by <a
href="https://github.com/Dev-Khant"><code>@​Dev-Khant</code></a> in <a
href="https://redirect.github.com/embedchain/embedchain/pull/1392">embedchain/embedchain#1392</a></li>
<li>Version bump by <a
href="https://github.com/Dev-Khant"><code>@​Dev-Khant</code></a> in <a
href="https://redirect.github.com/embedchain/embedchain/pull/1460">embedchain/embedchain#1460</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/embedchain/embedchain/compare/0.1.114...0.1.115">https://github.com/embedchain/embedchain/compare/0.1.114...0.1.115</a></p>
<h2>v0.1.115</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix: Memgraph Graph Generation Issue by <a
href="https://github.com/akshat1423"><code>@​akshat1423</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3109">mem0ai/mem0#3109</a></li>
<li>Security Link updated by <a
href="https://github.com/Itz-Antaripa"><code>@​Itz-Antaripa</code></a>
in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3108">mem0ai/mem0#3108</a></li>
<li>Add metadata field to memory update schema by <a
href="https://github.com/whysosaket"><code>@​whysosaket</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3115">mem0ai/mem0#3115</a></li>
<li>Fix: Changed keyword from assisstant to secretary by <a
href="https://github.com/V-Silpin"><code>@​V-Silpin</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/2937">mem0ai/mem0#2937</a></li>
<li>Abstraction for Project in MemoryClient by <a
href="https://github.com/Dev-Khant"><code>@​Dev-Khant</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3067">mem0ai/mem0#3067</a></li>
<li>feat: Memory Exports by <a
href="https://github.com/whysosaket"><code>@​whysosaket</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3117">mem0ai/mem0#3117</a></li>
<li>Add JavaScript examples for memory export API by <a
href="https://github.com/whysosaket"><code>@​whysosaket</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3119">mem0ai/mem0#3119</a></li>
<li>Add structured_data_schema to MemoryOptions interface by <a
href="https://github.com/whysosaket"><code>@​whysosaket</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3125">mem0ai/mem0#3125</a></li>
<li>AWS Bedrock Integration and spell checks by <a
href="https://github.com/Itz-Antaripa"><code>@​Itz-Antaripa</code></a>
in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3124">mem0ai/mem0#3124</a></li>
<li>Update personalized deep research example with GitHub link by <a
href="https://github.com/whysosaket"><code>@​whysosaket</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3136">mem0ai/mem0#3136</a></li>
<li>Restore and update handle_post_message implementation by <a
href="https://github.com/whysosaket"><code>@​whysosaket</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3152">mem0ai/mem0#3152</a></li>
<li>Updated livekit 1.0 integration by <a
href="https://github.com/parshvadaftari"><code>@​parshvadaftari</code></a>
in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3073">mem0ai/mem0#3073</a></li>
<li>docs: Add comprehensive LLM-friendly documentation by <a
href="https://github.com/askdevai-bot"><code>@​askdevai-bot</code></a>
in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3154">mem0ai/mem0#3154</a></li>
<li>Multi-LLM Research Team powered by memory by <a
href="https://github.com/Itz-Antaripa"><code>@​Itz-Antaripa</code></a>
in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3160">mem0ai/mem0#3160</a></li>
<li>Agno Mem0Tools update by <a
href="https://github.com/Itz-Antaripa"><code>@​Itz-Antaripa</code></a>
in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3139">mem0ai/mem0#3139</a></li>
<li>Multiagent Learning System with LlamaIndex by <a
href="https://github.com/Itz-Antaripa"><code>@​Itz-Antaripa</code></a>
in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3063">mem0ai/mem0#3063</a></li>
<li>Content Writing Example Rewrite by <a
href="https://github.com/Itz-Antaripa"><code>@​Itz-Antaripa</code></a>
in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3142">mem0ai/mem0#3142</a></li>
<li>Update Changelog by <a
href="https://github.com/Dev-Khant"><code>@​Dev-Khant</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3211">mem0ai/mem0#3211</a></li>
<li>docs: Update for new Project API and deprecation notices by <a
href="https://github.com/whysosaket"><code>@​whysosaket</code></a> in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3212">mem0ai/mem0#3212</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/V-Silpin"><code>@​V-Silpin</code></a>
made their first contribution in <a
href="https://redirect.github.com/mem0ai/mem0/pull/2937">mem0ai/mem0#2937</a></li>
<li><a
href="https://github.com/askdevai-bot"><code>@​askdevai-bot</code></a>
made their first contribution in <a
href="https://redirect.github.com/mem0ai/mem0/pull/3154">mem0ai/mem0#3154</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/mem0ai/mem0/compare/v0.1.114...v0.1.115">https://github.com/mem0ai/mem0/compare/v0.1.114...v0.1.115</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/mem0ai/mem0/blob/main/docs/changelog.mdx">mem0ai's
changelog</a>.</em></p>
<blockquote>
<hr />
<h2>title: &quot;Product Updates&quot;
mode: &quot;wide&quot;</h2>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p><strong>New Features &amp; Updates:</strong></p>
<ul>
<li>Enhanced project management via <code>client.project</code> and
<code>AsyncMemoryClient.project</code> interfaces</li>
<li>Full support for project CRUD operations (create, read, update,
delete)</li>
<li>Project member management: add, update, remove, and list
members</li>
<li>Manage project settings including custom instructions, categories,
retrieval criteria, and graph enablement</li>
<li>Both sync and async support for all project management
operations</li>
</ul>
<p><strong>Improvements:</strong></p>
<ul>
<li>
<p><strong>Documentation:</strong></p>
<ul>
<li>Added detailed API reference and usage examples for new project
management methods.</li>
<li>Updated all docs to use <code>client.project.get()</code> and
<code>client.project.update()</code> instead of deprecated methods.</li>
</ul>
</li>
<li>
<p><strong>Deprecation:</strong></p>
<ul>
<li>Marked <code>get_project()</code> and <code>update_project()</code>
as deprecated (these methods were already present); added warnings to
guide users to the new API.</li>
</ul>
</li>
</ul>
<p><strong>Bug Fixes:</strong></p>
<ul>
<li><strong>Tests:</strong>
<ul>
<li>Fixed Gemini embedder and LLM test mocks for correct error handling
and argument structure.</li>
</ul>
</li>
<li><strong>vLLM:</strong>
<ul>
<li>Fixed duplicate import in vLLM module.</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p><strong>New Features:</strong></p>
<ul>
<li><strong>OpenAI Agents:</strong> Added OpenAI agents SDK support</li>
<li><strong>Amazon Neptune:</strong> Added Amazon Neptune Analytics
graph_store configuration and integration</li>
<li><strong>vLLM:</strong> Added vLLM support</li>
</ul>
<p><strong>Improvements:</strong></p>
<ul>
<li><strong>Documentation:</strong>
<ul>
<li>Added SOC2 and HIPAA compliance documentation</li>
<li>Enhanced group chat feature documentation for platform</li>
<li>Added Google AI ADK Integration documentation</li>
<li>Fixed documentation images and links</li>
</ul>
</li>
<li><strong>Setup:</strong> Fixed Mem0 setup, logging, and documentation
issues</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/mem0ai/mem0/commit/33500a7ce27cd37a169772202822c133faca91a0"><code>33500a7</code></a>
Version bump (<a
href="https://redirect.github.com/mem0ai/mem0/issues/1460">#1460</a>)</li>
<li><a
href="https://github.com/mem0ai/mem0/commit/4880557d5108ec6ebad40977f55cd8a80a1eda72"><code>4880557</code></a>
Show details for query tokens (<a
href="https://redirect.github.com/mem0ai/mem0/issues/1392">#1392</a>)</li>
<li>See full diff in <a
href="https://github.com/mem0ai/mem0/compare/0.1.114...0.1.115">compare
view</a></li>
</ul>
</details>
<br />

Updates `openai` from 1.97.0 to 1.97.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/openai/openai-python/releases">openai's
releases</a>.</em></p>
<blockquote>
<h2>v1.97.1</h2>
<h2>1.97.1 (2025-07-22)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-python/compare/v1.97.0...v1.97.1">v1.97.0...v1.97.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>parsing:</strong> ignore empty metadata (<a
href="https://github.com/openai/openai-python/commit/58c359ff67fd6103268e4405600fd58844b6f27b">58c359f</a>)</li>
<li><strong>parsing:</strong> parse extra field types (<a
href="https://github.com/openai/openai-python/commit/d524b7e201418ccc9b5c2206da06d1be011808e5">d524b7e</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>api:</strong> event shapes more accurate (<a
href="https://github.com/openai/openai-python/commit/f3a9a9229280ecb7e0b2779dd44290df6d9824ef">f3a9a92</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/openai/openai-python/blob/main/CHANGELOG.md">openai's
changelog</a>.</em></p>
<blockquote>
<h2>1.97.1 (2025-07-22)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-python/compare/v1.97.0...v1.97.1">v1.97.0...v1.97.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>parsing:</strong> ignore empty metadata (<a
href="https://github.com/openai/openai-python/commit/58c359ff67fd6103268e4405600fd58844b6f27b">58c359f</a>)</li>
<li><strong>parsing:</strong> parse extra field types (<a
href="https://github.com/openai/openai-python/commit/d524b7e201418ccc9b5c2206da06d1be011808e5">d524b7e</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>api:</strong> event shapes more accurate (<a
href="https://github.com/openai/openai-python/commit/f3a9a9229280ecb7e0b2779dd44290df6d9824ef">f3a9a92</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/openai/openai-python/commit/e6c6757553bbdb777c31d0daf5916fb9e2b47ff8"><code>e6c6757</code></a>
release: 1.97.1</li>
<li><a
href="https://github.com/openai/openai-python/commit/48df6b4c30d7e4b1f8a60cf3d34bce8dab06a30b"><code>48df6b4</code></a>
fix(parsing): parse extra field types</li>
<li><a
href="https://github.com/openai/openai-python/commit/bf4a9a422e5eaffa90863439ddfd8a82cbaaa636"><code>bf4a9a4</code></a>
chore(api): event shapes more accurate</li>
<li><a
href="https://github.com/openai/openai-python/commit/c6b933520213cddea927c4fe83c1abe2f66893d8"><code>c6b9335</code></a>
fix(parsing): ignore empty metadata</li>
<li><a
href="https://github.com/openai/openai-python/commit/fa466c099aab0213f3ce09d5adcfca5ae2bf58a4"><code>fa466c0</code></a>
codegen metadata</li>
<li>See full diff in <a
href="https://github.com/openai/openai-python/compare/v1.97.0...v1.97.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `sentry-sdk` from 2.33.0 to 2.33.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-python/releases">sentry-sdk's
releases</a>.</em></p>
<blockquote>
<h2>2.33.2</h2>
<h3>Various fixes &amp; improvements</h3>
<ul>
<li>ref(spotlight): Do not import <code>sentry_sdk.spotlight</code>
unless enabled (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4607">#4607</a>)
by <a
href="https://github.com/sentrivana"><code>@​sentrivana</code></a></li>
<li>ref(gnu-integration): update clickhouse stacktrace parsing (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4598">#4598</a>)
by <a
href="https://github.com/MeredithAnya"><code>@​MeredithAnya</code></a></li>
</ul>
<h2>2.33.1</h2>
<h3>Various fixes &amp; improvements</h3>
<ul>
<li>fix(integrations): allow explicit op parameter in
<code>ai_track</code> (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4597">#4597</a>)
by <a
href="https://github.com/mshavliuk"><code>@​mshavliuk</code></a></li>
<li>fix: Fix <code>abs_path</code> bug in <code>serialize_frame</code>
(<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4599">#4599</a>)
by <a
href="https://github.com/szokeasaurusrex"><code>@​szokeasaurusrex</code></a></li>
<li>Remove pyrsistent from test dependencies (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4588">#4588</a>)
by <a
href="https://github.com/musicinmybrain"><code>@​musicinmybrain</code></a></li>
<li>Remove explicit <code>__del__</code>'s in threaded classes (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4590">#4590</a>)
by <a
href="https://github.com/sl0thentr0py"><code>@​sl0thentr0py</code></a></li>
<li>Remove forked from test_transport, separate gevent tests and
generalize capturing_server to be module level (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4577">#4577</a>)
by <a
href="https://github.com/sl0thentr0py"><code>@​sl0thentr0py</code></a></li>
<li>Improve token usage recording (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4566">#4566</a>)
by <a
href="https://github.com/antonpirker"><code>@​antonpirker</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md">sentry-sdk's
changelog</a>.</em></p>
<blockquote>
<h2>2.33.2</h2>
<h3>Various fixes &amp; improvements</h3>
<ul>
<li>ref(spotlight): Do not import <code>sentry_sdk.spotlight</code>
unless enabled (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4607">#4607</a>)
by <a
href="https://github.com/sentrivana"><code>@​sentrivana</code></a></li>
<li>ref(gnu-integration): update clickhouse stacktrace parsing (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4598">#4598</a>)
by <a
href="https://github.com/MeredithAnya"><code>@​MeredithAnya</code></a></li>
</ul>
<h2>2.33.1</h2>
<h3>Various fixes &amp; improvements</h3>
<ul>
<li>fix(integrations): allow explicit op parameter in
<code>ai_track</code> (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4597">#4597</a>)
by <a
href="https://github.com/mshavliuk"><code>@​mshavliuk</code></a></li>
<li>fix: Fix <code>abs_path</code> bug in <code>serialize_frame</code>
(<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4599">#4599</a>)
by <a
href="https://github.com/szokeasaurusrex"><code>@​szokeasaurusrex</code></a></li>
<li>Remove pyrsistent from test dependencies (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4588">#4588</a>)
by <a
href="https://github.com/musicinmybrain"><code>@​musicinmybrain</code></a></li>
<li>Remove explicit <code>__del__</code>'s in threaded classes (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4590">#4590</a>)
by <a
href="https://github.com/sl0thentr0py"><code>@​sl0thentr0py</code></a></li>
<li>Remove forked from test_transport, separate gevent tests and
generalize capturing_server to be module level (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4577">#4577</a>)
by <a
href="https://github.com/sl0thentr0py"><code>@​sl0thentr0py</code></a></li>
<li>Improve token usage recording (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4566">#4566</a>)
by <a
href="https://github.com/antonpirker"><code>@​antonpirker</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/getsentry/sentry-python/commit/f4907a9bbf8586954b4c2d651126fb5534344942"><code>f4907a9</code></a>
release: 2.33.2</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/24790ebb2728e03a2044b0a877220b4823cc6418"><code>24790eb</code></a>
ref(spotlight): Do not import <code>sentry_sdk.spotlight</code> unless
enabled (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4607">#4607</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/0e7304989312affda1127ede95b5b4eda243ba8e"><code>0e73049</code></a>
ref(gnu-integration): update clickhouse stacktrace parsing (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4598">#4598</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/ca3241ec64e01ff7e51ce23ef0a03bd8801b5b5b"><code>ca3241e</code></a>
Merge branch 'release/2.33.1'</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/5cd43be59611576e5bdfad28a9df50bc9652ac4c"><code>5cd43be</code></a>
meta: Update CHANGELOG.md</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/38c27dd99a7759ec02937d92738a3fecf81cfb88"><code>38c27dd</code></a>
release: 2.33.1</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/7b028b6c83c4d8ad9191864f25ef7d34ad95b111"><code>7b028b6</code></a>
fix(integrations): allow explicit op parameter in <code>ai_track</code>
(<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4597">#4597</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/d32e2eed6e2db041301ba43d212ca34342efd701"><code>d32e2ee</code></a>
fix: Fix <code>abs_path</code> bug in <code>serialize_frame</code> (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4599">#4599</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/b065719ddd91aa27098f3875e48d2d3004349b0c"><code>b065719</code></a>
Remove pyrsistent from test dependencies (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4588">#4588</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/34dcba4acca5d1b33656e4fa5fe87d9c7816de34"><code>34dcba4</code></a>
Remove explicit <strong>del</strong>'s in threaded classes (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/4590">#4590</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/getsentry/sentry-python/compare/2.33.0...2.33.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `supabase` from 2.16.0 to 2.17.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/supabase/supabase-py/releases">supabase's
releases</a>.</em></p>
<blockquote>
<h2>v2.17.0</h2>
<h2><a
href="https://github.com/supabase/supabase-py/compare/v2.16.0...v2.17.0">2.17.0</a>
(2025-07-16)</h2>
<h3>Features</h3>
<ul>
<li><strong>deps:</strong> bump realtime from 2.5.3 to 2.6.0 (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1172">#1172</a>)
(<a
href="https://github.com/supabase/supabase-py/commit/89fa81a6beaba3b3f3837e055d4860999e40f664">89fa81a</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>add note about explicit client.auth.sign_out() for proper shutdown
(<a
href="https://redirect.github.com/supabase/supabase-py/issues/926">#926</a>)
(<a
href="https://redirect.github.com/supabase/supabase-py/issues/1163">#1163</a>)
(<a
href="https://github.com/supabase/supabase-py/commit/b657308e61253a70cf966b71c58e5b17a83e36a8">b657308</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/supabase/supabase-py/blob/main/CHANGELOG.md">supabase's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/supabase/supabase-py/compare/v2.16.0...v2.17.0">2.17.0</a>
(2025-07-16)</h2>
<h3>Features</h3>
<ul>
<li><strong>deps:</strong> bump realtime from 2.5.3 to 2.6.0 (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1172">#1172</a>)
(<a
href="https://github.com/supabase/supabase-py/commit/89fa81a6beaba3b3f3837e055d4860999e40f664">89fa81a</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>add note about explicit client.auth.sign_out() for proper shutdown
(<a
href="https://redirect.github.com/supabase/supabase-py/issues/926">#926</a>)
(<a
href="https://redirect.github.com/supabase/supabase-py/issues/1163">#1163</a>)
(<a
href="https://github.com/supabase/supabase-py/commit/b657308e61253a70cf966b71c58e5b17a83e36a8">b657308</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/supabase/supabase-py/commit/35c1a198fbd1a56551baefb1b5eb5f81278eaf19"><code>35c1a19</code></a>
chore(main): release 2.17.0 (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1164">#1164</a>)</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/ea1152d9d5049470ab95738ff06c0c06fa82e952"><code>ea1152d</code></a>
chore(typo): change PyPi tp PyPI in README (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1175">#1175</a>)</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/880a706454c55738682fbea40c40b315258c7e21"><code>880a706</code></a>
chore(deps-dev): bump ruff from 0.12.2 to 0.12.3 (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1173">#1173</a>)</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/89fa81a6beaba3b3f3837e055d4860999e40f664"><code>89fa81a</code></a>
feat(deps): bump realtime from 2.5.3 to 2.6.0 (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1172">#1172</a>)</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/c07e9a46fe290ac7a8f04e556d334afe647cf264"><code>c07e9a4</code></a>
chore: pin supabase dependencies versions (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1170">#1170</a>)</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/4b193f5dfd1a03ed86d44bd0c2be68490a6b5589"><code>4b193f5</code></a>
chore(deps): bump gotrue from 2.12.2 to 2.12.3 (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1168">#1168</a>)</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/3a67df6bf0394913135cd891c80553cc56e51db5"><code>3a67df6</code></a>
chore(deps-dev): bump ruff from 0.12.1 to 0.12.2 (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1167">#1167</a>)</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/a1db7a724dd360304af71e07cda02dd3b8e7904b"><code>a1db7a7</code></a>
chore: replace isort, black, pyupgrade and autoflake with ruff (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1165">#1165</a>)</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/b657308e61253a70cf966b71c58e5b17a83e36a8"><code>b657308</code></a>
docs: add note about explicit client.auth.sign_out() for proper shutdown
(<a
href="https://redirect.github.com/supabase/supabase-py/issues/92">#92</a>...</li>
<li><a
href="https://github.com/supabase/supabase-py/commit/aef197f3dc484df3a2b623ac2f9ae52755a84f9d"><code>aef197f</code></a>
chore(realtime): bump realtime from 2.5.1 to 2.5.3 (<a
href="https://redirect.github.com/supabase/supabase-py/issues/1162">#1162</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/supabase/supabase-py/compare/v2.16.0...v2.17.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `youtube-transcript-api` from 1.1.1 to 1.2.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/jdepoix/youtube-transcript-api/releases">youtube-transcript-api's
releases</a>.</em></p>
<blockquote>
<h2>v1.2.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Added the property <code>filter_ip_locations</code> to
<code>WebshareProxyConfig</code>. This allows for limiting the pool of
IPs that Webshare will be rotating through to those located in specific
countries. By choosing locations that are close to the machine that is
doing the requests, latency can be reduced. Also, this can be used to
work around location-based restrictions.
<pre lang="python"><code>ytt_api = YouTubeTranscriptApi(
    proxy_config=WebshareProxyConfig(
        proxy_username=&quot;&lt;proxy-username&gt;&quot;,
        proxy_password=&quot;&lt;proxy-password&gt;&quot;,
        filter_ip_locations=[&quot;de&quot;, &quot;us&quot;],
    )
)
<h1>Webshare will now only rotate through IPs located in Germany or the
United States!</h1>
<p>ytt_api.fetch(video_id)
</code></pre>
The full list of available locations (and how many IPs are available in
each location) can be found <a
href="https://www.webshare.io/features/proxy-locations?referral_code=w0xno53eb50g">here</a>.</li></p>
<li>[Fixes <a
href="https://redirect.github.com/jdepoix/youtube-transcript-api/issues/483">#483</a>]
Add <code>__all__</code> to <code>__init__.py</code> to support mypy
--strict usage by <a
href="https://github.com/Jer-Pha"><code>@​Jer-Pha</code></a> in <a
href="https://redirect.github.com/jdepoix/youtube-transcript-api/pull/486">jdepoix/youtube-transcript-api#486</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Jer-Pha"><code>@​Jer-Pha</code></a> made
their first contribution in <a
href="https://redirect.github.com/jdepoix/youtube-transcript-api/pull/486">jdepoix/youtube-transcript-api#486</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/jdepoix/youtube-transcript-api/compare/v1.2.0...v1.2.1">https://github.com/jdepoix/youtube-transcript-api/compare/v1.2.0...v1.2.1</a></p>
<h2>v1.2.0</h2>
<h2>What's Changed</h2>
<ul>
<li><strong>[BREAKING]</strong> Removed the deprecated methods
<code>get_transcript</code>, <code>get_transcripts</code> and
<code>list_transcripts</code>. They have already been deprecated in
<code>v1.0.0</code>, but I've kept them around to allow for an easier
migration to <code>v1.0.0</code>. However, these methods have led to a
lot of issues being created due to people initializing a
<code>YouTubeTranscriptApi</code> object and passing a proxy config into
the constructor, but then calling the deprecated static methods on that
object. As these methods are static they don't/can't access the state
set in the constructor, therefore, the proxy config is ignored.</li>
</ul>
<h2>Migration Guide</h2>
<p>If you're still using <code>get_transcript</code>,
<code>get_transcripts</code> you have to change your code as
follows:</p>
<pre lang="python"><code># old API
transcript = YouTubeTranscriptApi.get_transcript(&quot;abc&quot;)
<h1>new API</h1>
<p>ytt_api = YouTubeTranscriptApi()
transcript = ytt_api.fetch(&quot;abc&quot;).to_raw_data()
</code></pre></p>
<p>If you're still using <code>list_transcripts</code> you have to
change your code as follows:</p>
<pre lang="python"><code># old API
transcript_list = YouTubeTranscriptApi.list_transcripts(&quot;abc&quot;)
<h1>new API</h1>
<p>ytt_api = YouTubeTranscriptApi()
transcript_list = ytt_api.list(&quot;abc&quot;)
</code></pre></p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/jdepoix/youtube-transcript-api/compare/v1.1.1...v1.2.0">https://github.com/jdepoix/youtube-transcript-api/compare/v1.1.1...v1.2.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/aa50f3735cfc60016408b6bd7b41065489221a5f"><code>aa50f37</code></a>
v1.2.1</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/2c88d5c261f7007606a731586a2206d9e0fbc6de"><code>2c88d5c</code></a>
Merge pull request <a
href="https://redirect.github.com/jdepoix/youtube-transcript-api/issues/486">#486</a>
from Jer-Pha/bugfix/ISSUE-483</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/d948c984555e9cd2c0a8a5fbdf4d1bc17b15e6bc"><code>d948c98</code></a>
Merge branch 'master' into bugfix/ISSUE-483</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/11306c2288b2309d2e3980e70ff60ae100c3e2d9"><code>11306c2</code></a>
Merge pull request <a
href="https://redirect.github.com/jdepoix/youtube-transcript-api/issues/490">#490</a>
from jdepoix/feature/filter-webshare-ip-locations</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/4fa89a579953c107a8da7fddb0e1bd588acd9c24"><code>4fa89a5</code></a>
Merge branch 'master' into bugfix/ISSUE-483</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/747e245703641f581fe1c5d427a0fa2c3dbd3c8d"><code>747e245</code></a>
fmt</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/bf17e50119571a29883010a5ce9a780bd1a51c76"><code>bf17e50</code></a>
added filter_ip_locations property to WebshareProxyConfig</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/da6920bf5dac2a061375f7170b2540294b72b891"><code>da6920b</code></a>
Merge pull request <a
href="https://redirect.github.com/jdepoix/youtube-transcript-api/issues/488">#488</a>
from jdepoix/feature/remove-depcreated-methods</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/a951854edc0ac7b72368ec2be991ca8fec27f623"><code>a951854</code></a>
v1.2.0</li>
<li><a
href="https://github.com/jdepoix/youtube-transcript-api/commit/ed8b666608707c821716cef9c70b5ddaf57ce6af"><code>ed8b666</code></a>
removed deprecated methods: get_transcript, get_transcripts,
list_transcripts</li>
<li>Additional commits viewable in <a
href="https://github.com/jdepoix/youtube-transcript-api/compare/v1.1.1...v1.2.1">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
## Overview

This PR adds comprehensive Airtable integration to the AutoGPT platform,
enabling users to seamlessly connect their Airtable bases with AutoGPT
workflows for powerful no-code automation capabilities.

## Why Airtable Integration?

Airtable is one of the most popular no-code databases used by teams for
project management, CRMs, inventory tracking, and countless other use
cases. This integration brings significant value:

- **Data Automation**: Automate data entry, updates, and synchronization
between Airtable and other services
- **Workflow Triggers**: React to changes in Airtable bases with
webhook-based triggers
- **Schema Management**: Programmatically create and manage Airtable
table structures
- **Bulk Operations**: Efficiently process large amounts of data with
batch create/update/delete operations

## Key Features

### 🔌 Webhook Trigger
- **AirtableWebhookTriggerBlock**: Listens for changes in Airtable bases
and triggers workflows
- Supports filtering by table, view, and specific fields
- Includes webhook signature validation for security

### 📊 Record Operations  
- **AirtableCreateRecordsBlock**: Create single or multiple records (up
to 10 at once)
- **AirtableUpdateRecordsBlock**: Update existing records with upsert
support
- **AirtableDeleteRecordsBlock**: Delete single or multiple records
- **AirtableGetRecordBlock**: Retrieve specific record details
- **AirtableListRecordsBlock**: Query records with filtering, sorting,
and pagination

### 🏗️ Schema Management
- **AirtableCreateTableBlock**: Create new tables with custom field
definitions
- **AirtableUpdateTableBlock**: Modify table properties
- **AirtableAddFieldBlock**: Add new fields to existing tables
- **AirtableUpdateFieldBlock**: Update field properties

## Technical Implementation Details

### Authentication
- Supports both API Key and OAuth authentication methods
- OAuth implementation includes proper token refresh handling
- Credentials are securely managed through the platform's credential
system

### Webhook Security
- Added `credentials` parameter to WebhooksManager interface for proper
signature validation
- HMAC-SHA256 signature verification ensures webhook authenticity
- Webhook cursor tracking prevents duplicate event processing

### API Integration
- Comprehensive API client (`_api.py`) with full type safety
- Proper error handling and response validation
- Support for all Airtable field types and operations

## Changes 🏗️ 

### Added Blocks:
- AirtableWebhookTriggerBlock
- AirtableCreateRecordsBlock
- AirtableDeleteRecordsBlock
- AirtableGetRecordBlock
- AirtableListRecordsBlock
- AirtableUpdateRecordsBlock
- AirtableAddFieldBlock
- AirtableCreateTableBlock
- AirtableUpdateFieldBlock
- AirtableUpdateTableBlock

### Modified Files:
- Updated WebhooksManager interface to support credential-based
validation
- Modified all webhook handlers to support the new interface

## Test Plan 📋

### Manual Testing Performed:
1. **Authentication Testing**
   - ✅ Verified API key authentication works correctly
   - ✅ Tested OAuth flow including token refresh
   - ✅ Confirmed credentials are properly encrypted and stored

2. **Webhook Testing**
   - ✅ Created webhook subscriptions for different table events
   - ✅ Verified signature validation prevents unauthorized requests
   - ✅ Tested cursor tracking to ensure no duplicate events
   - ✅ Confirmed webhook cleanup on block deletion

3. **Record Operations Testing**
   - ✅ Created single and batch records with various field types
   - ✅ Updated records with and without upsert functionality
   - ✅ Listed records with filtering, sorting, and pagination
   - ✅ Deleted single and multiple records
   - ✅ Retrieved individual record details

4. **Schema Management Testing**
   - ✅ Created tables with multiple field types
   - ✅ Added fields to existing tables
   - ✅ Updated table and field properties
   - ✅ Verified proper error handling for invalid field types

5. **Error Handling Testing**
   - ✅ Tested with invalid credentials
   - ✅ Verified proper error messages for API limits
   - ✅ Confirmed graceful handling of network errors

### Security Considerations 🔒

1. **API Key Management**
   - API keys are stored encrypted in the credential system
   - Keys are never logged or exposed in error messages
   - Credentials are passed securely through the execution context

2. **Webhook Security**
   - HMAC-SHA256 signature validation on all incoming webhooks
   - Webhook URLs use secure ingress endpoints
   - Proper cleanup of webhooks when blocks are deleted

3. **OAuth Security**
   - OAuth tokens are securely stored and refreshed
   - Scopes are limited to necessary permissions
   - Token refresh happens automatically before expiration

## Configuration Requirements

No additional environment variables or configuration changes are
required. The integration uses the existing credential management
system.

## Checklist 📋

#### For code changes:
- [x] I have read the [contributing
instructions](https://github.com/Significant-Gravitas/AutoGPT/blob/master/.github/CONTRIBUTING.md)
- [x] Confirmed that `make lint` passes
- [x] Confirmed that `make test` passes  
- [x] Updated documentation where needed
- [x] Added/updated tests for new functionality
- [x] Manually tested all blocks with real Airtable bases
- [x] Verified backwards compatibility of webhook interface changes

#### Security:
- [x] No hard-coded secrets or sensitive information
- [x] Proper input validation on all user inputs
- [x] Secure credential handling throughout
…ficant-Gravitas#9946)

This PR implements a comprehensive Ayrshare social media integration for
AutoGPT Platform, enabling users to post content across multiple social
media platforms through a unified interface. Ayrshare provides a single
API to manage posts across Facebook, Twitter/X, LinkedIn, Instagram,
YouTube, TikTok, Pinterest, Reddit, Telegram, Google My Business,
Bluesky, Snapchat, and Threads.

The integration addresses the need for social media automation and
content distribution workflows within AutoGPT agents, allowing users to:
- Connect their social media accounts via SSO
- Post content with platform-specific options and constraints
- Schedule posts across multiple platforms simultaneously
- Handle platform-specific media requirements and validation

⚠️ To simplify the review process all except the twitter post block has
been commented out, future pr's will uncomment other platfroms so we can
test them in isolation.

### Changes 🏗️

#### Backend Integration (`backend/integrations/ayrshare.py`)
- **AyrshareClient**: Complete API client implementation with post
creation, profile management, and JWT generation
- **SocialPlatform enum**: Comprehensive platform definitions for all
supported social networks
- **Response models**: PostResponse, ProfileResponse, JWTResponse for
type-safe API interactions
- **Error handling**: Custom AyrshareAPIException with proper HTTP
status code handling

#### Social Media Posting Blocks (`backend/blocks/ayrshare/post.py`)
- **BaseAyrshareInput**: Shared input schema with common fields (post
text, media URLs, scheduling, etc.)
- **Platform-specific blocks**: 13 dedicated posting blocks, each with
platform-specific validation and options:
  - PostToFacebookBlock: Carousel, Reels, Stories, targeting, alt text
- PostToXBlock: Threads, polls, long posts, premium features, subtitles
- PostToLinkedInBlock: Document support, visibility controls, audience
targeting
  - PostToInstagramBlock: Stories, Reels, user tags, collaborators
- PostToYouTubeBlock: Video uploads, playlists, visibility, country
targeting
  - PostToPinterestBlock: Pins, carousels, board management
  - PostToTikTokBlock: Video/image posts, AI labeling, brand content
  - PostToRedditBlock: Basic posting functionality
  - PostToTelegramBlock: GIF handling, mentions
  - PostToGMBBlock: Event/offer posts, call-to-action buttons
  - PostToBlueskyBlock: Character limit validation, alt text
  - PostToSnapchatBlock: Story types, video thumbnails
  - PostToThreadsBlock: Hashtag restrictions, carousel support

#### Helper Models
- **CarouselItem**: Facebook carousel configuration
- **CallToAction, EventDetails, OfferDetails**: Google My Business post
types
- **InstagramUserTag**: Instagram user tagging with coordinates
- **LinkedInTargeting**: LinkedIn audience targeting options
- **PinterestCarouselOption**: Pinterest carousel image options
- **YouTubeTargeting**: YouTube country blocking/allowing

#### Authentication & SSO (`backend/server/integrations/router.py`)
- **SSO endpoint**: `/integrations/ayrshare/sso_url` for account linking
- **Profile management**: Automatic profile creation and key management
- **JWT generation**: Secure token generation for social media account
linking
- **Platform allowlist**: Configured access to all supported social
platforms

#### Frontend Integration (`frontend/src/components/CustomNode.tsx`)
- **AYRSHARE block type**: New BlockUIType.AYRSHARE for
Ayrshare-specific nodes
- **SSO button**: "Connect Social Media Accounts" with loading states
- **Handle generation**: Special handling for Ayrshare blocks with SSO
integration

#### Configuration
- **Environment variables**: Added AYRSHARE_API_KEY and AYRSHARE_JWT_KEY
to .env.example
- **Block registration**: All Ayrshare blocks registered in
AYRSHARE_NODE_IDS array

#### Type Safety & Error Handling
- **Modern typing**: Updated to use `list`, `dict`, `Any` instead of
legacy typing
- **Comprehensive validation**: Platform-specific constraints (character
limits, media counts, file types)
- **User-friendly errors**: Clear error messages for validation failures
and API 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:

  **Test Plan:**
  
  **Backend API Testing:**
  - [x] Verify AyrshareClient initializes correctly with API key
  - [x] Test JWT generation for SSO authentication
  - [x] Test profile creation and management
  - [x] Verify all 13 posting blocks are properly registered
  - [x] Test platform-specific validation rules for each block
  - [x] Verify error handling for missing credentials and API failures
  
  **Frontend Integration Testing:**
  - [x] Verify AYRSHARE block type renders correctly in flow editor
  - [x] Test SSO button functionality and popup window behavior
  - [x] Confirm loading states work properly during authentication
  - [x] Verify input handles generate correctly for Ayrshare blocks
  - [x] Test platform-specific input fields and validation
  
  **End-to-End Workflow Testing:**
  - [x] Create agent with Ayrshare posting blocks
  - [x] Test SSO flow: click "Connect Social Media Accounts" button
  - [x] Verify popup opens with Ayrshare authentication page
  - [x] Test social media account linking process
  - [x] Create posts with various platform-specific options:
      - [ X ] X (Twitter) - tested basic posting with image
  - [] Test scheduling functionality across platforms
  - [x] Verify media upload constraints and validation
  - [] Test error handling for invalid inputs and failed posts
  
  **Error Case Testing:**
  - [] Test behavior with missing AYRSHARE_API_KEY configuration
  - [] Test invalid social media credentials handling
  - [] Test network failure scenarios
  - [] Verify platform-specific validation error messages
  - [] Test character limit enforcement per platform
  - [] Test media file type and size restrictions
  
  **Security Testing:**
  - [ x ] Verify JWT tokens are properly generated and validated
  - [x] Test profile key isolation between users
  - [x] Confirm sensitive credentials are not logged
  - [x] Verify SSO popup prevents XSS attacks

#### For configuration changes:
- [x] `.env.example` is updated or already compatible with my changes
- [x] `docker-compose.yml` is updated or already compatible with my
changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)

**Configuration Changes:**
- Added `AYRSHARE_API_KEY` environment variable for Ayrshare API
authentication
- Added `AYRSHARE_JWT_KEY` environment variable for SSO token generation
- No docker-compose.yml changes required (uses existing backend
services)

---------

Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
## Changes 🏗️

- Close websocket connections gracefully during logout ( _whether from
another tab or not_ )
- Also fixed an error on `HeroSection` that shows when the onboarding is
disabled locally ( `null` )
- Uncomment legit tests about connecting/saving agents
- Centralise local storage usage through a single service with typed
keys

## Checklist 📋

### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Login in 3 tabs ( 1 builder, 1 marketplace, 1 agent run view )
  - [x] Logout from the marketplace tab
- [x] The other tabs show logout state gracefully without toasts or
errors
- [x] Websocket connections are closed ( _devtools console shows that_ )

### For configuration changes:

None
Bentlybro and others added 18 commits August 25, 2025 12:47
…nt-Gravitas#10728)

AutoModManager now captures and propagates the content_id from the
moderation API for both input and output moderation. AutoModResponse and
ModerationError are updated to include content_id, allowing better
traceability of moderation actions and error reporting, with this the
error message will now show ``Failed due to content moderation
(Moderation ID: uuid-here)``

This is good for if a user is having a issue with automod and its
falsely flagging there runs we can use the moderation ID to look at
automod to see whats going on

<!-- Clearly explain the need for these changes: -->

### Changes 🏗️

Just some updates to receive the content_id from AutoMod and then show
it in the "Failed due to content moderation" message

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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 autogpt with AM and trigger it and it will show the content_id
in the error message
…ificant-Gravitas#10718)

### Changes 🏗️

This PR implements email notifications for agent creators when their
agent submissions are approved or rejected by an admin in the
marketplace.

Specifically, the changes include:
- Added `AGENT_APPROVED` and `AGENT_REJECTED` notification types to
`schema.prisma`.
- Created `AgentApprovalData` and `AgentRejectionData` Pydantic models
for notification data.
- Configured the notification system to use immediate queues and new
Jinja2 templates for these types.
- Designed two new email templates: `agent_approved.html.jinja2` and
`agent_rejected.html.jinja2`, with dynamic content for agent details,
reviewer feedback, and relevant action links.
- Modified the `review_store_submission` function to:
    - Include `User` and `Reviewer` data in the database query.
- Construct and queue the appropriate email notification based on the
approval/rejection status.
- Ensure email sending failures do not block the agent review process.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Approve an agent via the admin dashboard.
- [x] Verify the agent creator receives an "Agent Approved" email with
correct details and a link to the store.
  - [x] Reject an agent via the admin dashboard (providing a reason).
- [x] Verify the agent creator receives an "Agent Rejected" email with
correct details, the rejection reason, and a link to resubmit.
- [x] Verify that if email sending fails (e.g., misconfigured SMTP), the
agent approval/rejection process still completes successfully without
error.

<img width="664" height="975" alt="image"
src="https://github.com/user-attachments/assets/d397f2dc-56eb-45ab-877e-b17f1fc234d1"
/>
<img width="664" height="975" alt="image"
src="https://github.com/user-attachments/assets/25597752-f68c-46fe-8888-6c32f5dada01"
/>


---
Linear Issue: [SECRT-1168](https://linear.app/autogpt/issue/SECRT-1168)

<a
href="https://cursor.com/background-agent?bcId=bc-7394906c-0341-4bd0-8842-6d9d6f83c56c">
  <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-7394906c-0341-4bd0-8842-6d9d6f83c56c">
  <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>
…itas#10707)

Co-authored-by: Swifty <craigswift13@gmail.com>
resolve issue Significant-Gravitas#10692 where scheduled time and actual run
…ions (Significant-Gravitas#10656)

Co-authored-by: SwiftyOS <craigswift13@gmail.com>
Co-authored-by: Claude <claude@users.noreply.github.com>
Co-authored-by: majdyz <zamil@agpt.co>
this fixes and makes the moderation message properly show the moderation
ID

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  <!-- Put your test plan here: -->
- [x] try trigger moderation and have it shows the moderation id in the
error message
…gnificant-Gravitas#10533)

Handle invalid or empty response from MusicGen model


Fixes: Significant-Gravitas#9145
> ⚠️ Note: This PR does not directly fix issue Significant-Gravitas#9145 (failed run marked
as success), but improves the validation of the URL to reduce the
chances of invalid states entering the system. This is a related
improvement, but not the root cause fix.


### Description
During execution of the meta/musicgen model via Replicate API, the
application failed
with an error indicating the model returned an empty or invalid
response.
Although some API calls succeeded, this error showed the logic was not
checking the
structure and content of the result properly before processing it.

PROBLEM:
CONTEXT:
API: Replicate
MODEL: meta/musicgen:671ac645
STATUS: Failed after 3 attempts
ERROR_MESSAGE: "Unexpected error: Model returned empty or invalid
response"
CAUSE:
- The original logic did not validate result structure.
- It assumed any non-null output was valid, including strings like "No
output received".
- This led to invalid/malformed results being passed to the frontend.


### Changes 🏗️

- Added `AIMusicGeneratorBlock` to support music generation using Meta’s
MusicGen models via Replicate API.
- Supports configurable inputs like prompt, model version, duration,
temperature, top_k/p, and normalization.
- Uses robust retry logic for reliability.
- Output returns audio URL; errors return user-friendly message.

BEFORE_CODE: |
```
if result and result != "No output received":
     yield "result", result
     return
```

AFTER_CODE: |

```
if result and isinstance(result, str) and result.startswith("http"):
      yield "result", result
      return
```

### Checklist 📋

#### For code changes:
- [x] Clearly listed changes in the PR description
- [x] Added test plan and mock outputs
- [x] Tested with various prompts and confirmed working output

### Test Plan

- [x] Ran locally with valid Replicate API key
- [x] Generated audio with different prompts
- [x] Simulated failure to verify retry and error message

---------

Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
…eeded for their contexts (Significant-Gravitas#10717)

The database manager had both sync and async clients that contained
overlapping methods, including some that weren't actually used in their
respective contexts. This violated the principle that each client should
only expose the methods it needs.

## Problem

The `DatabaseManagerClient` (sync) included
`get_user_execution_summary_data`, but this method was only ever used in
async contexts like the notifications system. This created unnecessary
coupling and violated the design goal of having focused,
context-specific clients.

## Solution

After comprehensive analysis of actual method usage across the codebase:

- **Removed** `get_user_execution_summary_data` from
`DatabaseManagerClient` since it's only used in async contexts
(notifications)
- **Verified** all remaining methods on both clients are actively used
in their respective contexts:
- Sync client (11 methods): Used in monitoring and main execution thread
- Async client (26 methods): Used in node execution, blocks, and
notifications
- **Maintained** the base `DatabaseManager` class with the union of all
methods needed by either client

## Impact

Each client now contains exactly the methods it needs for its specific
usage patterns:

- `DatabaseManagerClient` handles synchronous operations like monitoring
and credit management
- `DatabaseManagerAsyncClient` handles asynchronous operations like node
execution, persistence, and notifications

The change is minimal and surgical - only removing one unused method
while preserving all actually-used functionality.

Fixes Significant-Gravitas#10658.

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/Significant-Gravitas/AutoGPT/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Swifty <craigswift13@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ntindle <8845353+ntindle@users.noreply.github.com>
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
Co-authored-by: Bently <Github@bentlybro.com>
…ficant-Gravitas#10716)

- Resolves Significant-Gravitas#10713

### Changes 🏗️

- Remove early exit in API proxy that suppresses auth errors
- Remove unused `proxy-action.ts`

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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] Publish Agent dialog works when logged out
  - [x] Publish Agent dialog works when logged in

---------

Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Backend for the Blocks Menu Redesign.

### Changes 🏗️

- Add optional `agent_name` to the `AgentExecutorBlock` - displayed as
the block name in the Builder
- Include `output_schema` in the `LibraryAgent` model
- Make `v2.store.db.py:get_store_agents` accept multiple creators filter
- Add `api/builder` router with endpoints (and accompanying logic in
`v2/builder/db` and models in `v2/builder/models`)
  - `/suggestions`: elements for the suggestions tab
  - `/categories`: categories with a number of blocks per each
  - `/blocks`: blocks based on category, type or provider
  - `/providers`: integration providers with their block counts
- `/serach`: search blocks (including integrations), marketplace agents
and user library agents
  - `/counts`: element counts for each category in the Blocks Menu.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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] Modified function `get_store_agents` works in existing code paths
  - [x] Agent executor block works
  - [x] New endpoints work
  - [x] Existing Builder menu is unaffected

---------

Co-authored-by: Abhimanyu Yadav <abhimanyu1992002@gmail.com>
Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com>
…ges (Significant-Gravitas#10746)

### Changes 🏗️

This PR fixes an infinite loop issue in the execution manager where
malformed or unparseable messages would be continuously requeued,
causing high CPU usage and preventing the system from processing
legitimate messages.

**Key changes:**
- Modified `_ack_message()` function to accept explicit `requeue`
parameter
- Set `requeue=False` for malformed/unparseable messages that cannot be
fixed by retrying
- Set `requeue=False` for duplicate execution attempts (graph already
running)
- Kept `requeue=True` for legitimate failures that may succeed on retry
(e.g., temporary resource constraints, network issues)

**Technical details:**
The previous implementation always set `requeue=True` when rejecting
messages with `basic_nack()`. This caused problematic messages to be
immediately re-delivered to the consumer, creating an infinite loop for:
1. Messages with invalid JSON that cannot be parsed
2. Messages for executions that are already running (duplicates)

These scenarios will never succeed regardless of how many times they're
retried, so they should be rejected without requeueing to prevent
resource exhaustion.

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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 malformed messages are rejected without requeue
- [x] Confirmed duplicate execution messages are rejected without
requeue
- [x] Ensured legitimate failures (shutdown, pool full) still requeue
properly
- [x] Tested that normal message processing continues to work correctly
…t-Gravitas#10750)

- Fixes Significant-Gravitas#10749

### Changes 🏗️

- Fix implementation of `useAgentRunsInfinite.upsertAgentRun(..)`

### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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] New runs appear in runs list
…ficant-Gravitas#10731)

- resolves -
Significant-Gravitas#10618

When we have a dropdown with a large description, the actions button is
moved out of the dialog box. To fix this, I’ve added a temporary
solution, but in the future, we need to change the entire layout.


### Checklist 📋
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] Everything works perfectly locally.
…ignificant-Gravitas#10737)

### Changes 🏗️
- Updated the creator page to utilize React Query for data fetching,
improving performance and reliability.
- Removed legacy API calls and integrated prefetching for creator
details and agents.
- Introduced a new MainCreatorPage component for better separation of
concerns.
- Added a hydration boundary for managing server state.

### Checklist 📋

### Checklist 📋
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] All marketplace E2E tests are working.
- [x] I’ve tested all the links and checked if everything renders
perfectly on the marketplace page.
…tas#10751)

Added basic stagehand integration:

<img width="667" height="609" alt="Screenshot 2025-08-27 at 09 20 18"
src="https://github.com/user-attachments/assets/11ab2941-0913-4346-a1d4-45980711e0f9"
/>


[stagehand_v35.json](https://github.com/user-attachments/files/22002924/stagehand_v35.json)

### Changes 🏗️

- Act Block
- Extract Block
- Observe Block

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] I have added a sample agent
- [x] I have created an agent that uses these blocks and ensured it runs
Adds support for Ideogram V3 model while maintaining backward
compatibility with existing models (V1,
V1_TURBO, V2, V2_TURBO). Updates default model to V3 and implements
smart API routing to handle
Ideogram's new V3 endpoint requirements.

Changes Made

- Added V3 model support: Added V_3 to IdeogramModelName enum and set as
default
- Dual API endpoint handling:
- V3 models route to new /v1/ideogram-v3/generate endpoint with updated
payload format
- Legacy models (V1, V2, Turbo variants) continue using /generate
endpoint
- Model-specific feature filtering:
- V1 models: Basic parameters only (no style_type or color_palette
support)
- V2/V2_TURBO: Full legacy feature support including style_type and
color_palette
- V3: New endpoint with aspect ratio mapping and updated parameter
structure
- Aspect ratio compatibility: Added mapping between internal enum values
and V3's expected format
(ASPECT_1_1 → 1x1)
- Updated pricing: V3 model costs 18 credits (vs 16 for other models)
- Updated default usage: Store image generation now uses V3 by default

Technical Details

Ideogram updated their API with a separate V3 endpoint that has
different requirements:
- Different URL path (/v1/ideogram-v3/generate)
- Different aspect ratio format (e.g., 1x1 instead of ASPECT_1_1)
- Model-specific feature support (V1 models don't support style_type,
etc.)

The implementation intelligently routes requests to the appropriate
endpoint based on the selected model
while maintaining a single unified interface.

I tested all the models and they are working here
<img width="1804" height="887" alt="image"
src="https://github.com/user-attachments/assets/9f2e44ca-50a4-487f-987c-3230dd72fb5e"
/>


### Checklist 📋

#### For code changes:
- [x] I have clearly listed 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 Ideogram model block and watch as they all work!
Snyk has created this PR to upgrade react from 18.2.0 to 18.3.1.

See this package in npm:
react

See this project in Snyk:
https://app.snyk.io/org/tpsaint1966/project/52068c5f-4860-4e0f-9bd7-059ca3f532a3?utm_source=github&utm_medium=referral&page=upgrade-pr
@github-actions

github-actions Bot commented Sep 9, 2025

Copy link
Copy Markdown

This PR targets the master branch but does not come from dev or a hotfix/* branch.

Automatically setting the base branch to dev.

@github-actions github-actions Bot changed the base branch from master to dev September 9, 2025 17:45
@snyk-io

snyk-io Bot commented Sep 9, 2025

Copy link
Copy Markdown

🎉 Snyk checks have passed. No issues have been found so far.

security/snyk check is complete. No issues have been found. (View Details)

@openhands-ai

openhands-ai Bot commented Sep 9, 2025

Copy link
Copy Markdown

Looks like there are a few issues preventing this PR from being merged!

  • GitHub Actions are failing:
    • Repo - PR Status Checker
    • Classic - Agent smoke tests
    • Classic - AGBenchmark CI
    • Classic - Python checks

If you'd like me to help, just leave a comment, like

@OpenHands please fix the failing actions on PR #2 at branch `snyk-upgrade-c48dda022f5a5c2a9347a2585f0cd0bf`

Feel free to include any additional details that might help me get this PR into a better state.

You can manage your notification settings

@github-actions

Copy link
Copy Markdown

This pull request has conflicts with the base branch, please resolve those so we can evaluate the pull request.

tpsaint pushed a commit that referenced this pull request Jun 26, 2026
…failure exit (Significant-Gravitas#12918)

## Background

[SECRT-2275](https://linear.app/autogpt/issue/SECRT-2275). User report:
when a copilot ("autopilot") turn is interrupted by a usage-limit,
tool-call-limit, or other run interruption, the user's recent work
disappears. User described it as: "my initial message was lost 3 times
and it disappeared, then when I would say 'continue' it would do a
random old task."

Investigation surfaced two distinct failure modes. This PR addresses
both.

- **Mode 1** — rate-limit (or other pre-stream rejection) at turn start:
the user's text only ever lives in the optimistic `useChat` bubble; the
backend rejects before the message is persisted, so the bubble is a lie
and a refresh / retry would lose the text.
- **Mode 2** — long-running turn interrupted mid-stream: the entire
turn's progress (assistant text, tool calls, reasoning) vanishes on
interruption — what users describe as "the turn is gone."

## Mode 1 — frontend: restore unsent text on 429

Backend can't recover this on its own: `check_rate_limit` raises before
`append_and_save_message`, so by the time the 429 surfaces there is no
DB row to roll forward. See
`autogpt_platform/backend/backend/api/features/chat/routes.py:916-922`
(rate-limit check) and `routes.py:945` (later append-and-save).

Frontend fix in
`autogpt_platform/frontend/src/app/(platform)/copilot/useCopilotStream.ts`:
when `useChat`'s `onError` reports a usage-limit error, we

- drop the optimistic user bubble (DB has no record of it, so leaving it
would be a phantom),
- push `lastSubmittedMsgRef.current` back into the composer via the
existing `setInitialPrompt` slot — the same slot URL pre-fills use, so
`useChatInput`'s `consumeInitialPrompt` effect picks it up
automatically,
- clear `lastSubmittedMsgRef` so the dedup guard doesn't block re-send.

In-memory only; surviving a hard refresh while rate-limited is a
separate follow-up (would need localStorage persistence with TTL).

Test:
`autogpt_platform/frontend/src/app/(platform)/copilot/__tests__/useCopilotStream.test.ts`
— verifies the composer is repopulated and the optimistic bubble is
dropped on a 429.

## Mode 2 — backend: preserve interrupted partial in DB

### Root cause

The SDK retry loop in `stream_chat_completion_sdk` always rolls back
`session.messages` to the pre-attempt watermark on any exception. That
rollback is correct **before a retry** so attempt #2 doesn't duplicate
attempt #1's content. But it runs **before the retry decision is made**,
so when retries are exhausted (or no retry is attempted) the partial
work is discarded too.

Three branches of the retry loop ended in a final-failure state with
side effects worse than just losing the partial:
- `_HandledStreamError` non-transient: rollback then add error marker —
partial gone
- `Exception` with `events_yielded > 0`: rollback then break — **no
error marker added either**, so on refresh the chat looks like nothing
happened even though the user just watched tokens stream live
- `Exception` non-context-non-transient + the while-`else:` exhaustion
path: same, no marker
- Outer except (cancellation, GeneratorExit cleanup): didn't restore
captured partial

### Fix

`autogpt_platform/backend/backend/copilot/sdk/service.py`:

1. **`_InterruptedAttempt` dataclass** — holds the rolled-back `partial:
list[ChatMessage]` + optional `handled_error: _HandledErrorInfo`. Three
methods drive the contract:
- `capture(session, transcript_builder, transcript_snap,
pre_attempt_msg_count)` — slices `session.messages`, restores the
transcript, strips trailing error markers to prevent duplicate markers
after restore.
- `clear()` — drops captured state on a successful retry so outer
cleanup paths don't replay pre-retry content.
- `finalize(session, state, display_msg, retryable=...) ->
list[StreamBaseResponse]` — re-attaches partial, synthesizes
`tool_result` rows for orphan `tool_use` blocks, appends the canonical
error marker, and returns the flushed events so the caller can yield
them to the client (no double-flush).
2. **`_flush_orphan_tool_uses_to_session(session, state) ->
list[StreamBaseResponse]`** — synthesizes `tool_result` rows for any
`tool_use` that never resolved before the error so the next turn's LLM
context stays API-valid (Anthropic rejects orphan tool_use). Uses the
public `adapter.flush_unresolved_tool_calls` and returns the events for
the caller to yield.
3. **`_classify_final_failure(...) -> _FinalFailure | None`** — picks
the display message + stream code + retryable flag for the final-failure
exit. One source of truth for the in-history error marker and the
client-facing `StreamError` SSE yield so they can't drift.
4. **Consolidated post-loop emit**: the former three scattered blocks
(partial restore + redundant re-flush + two separate `yield StreamError`
sites) collapsed to one block driven by `_classify_final_failure` →
`_FinalFailure` → `finalize()` → yield events + single `StreamError`.
5. **Adapter `flush_unresolved_tool_calls`** (renamed from
`_flush_unresolved_tool_calls` to drop the `# noqa: SLF001` suppressors
on cross-module callers).

Each retry-loop rollback site calls `interrupted.capture(...)`; the
success break calls `interrupted.clear()`; the post-loop failure block
calls `interrupted.finalize(...)` exactly once.

The baseline service already preserves partial work via its existing
finally block — no change needed there.

## Tests

Backend (`backend/copilot/sdk/interrupted_partial_test.py`, new, 18
tests):

- `TestInterruptedAttemptCapture` — slice semantics + stale-marker
stripping
- `TestInterruptedAttemptFinalize` — appends partial then marker,
handles empty partial, no-op on `None` session, flushes unresolved tools
between partial and marker, returns flushed events for caller to yield
- `TestFlushOrphanToolUses` — synthesizes `tool_result` rows, returns
events, no-op on None state / no unresolved
- `TestClassifyFinalFailure` — handled_error wins, attempts_exhausted,
transient_exhausted, stream_err fallback, returns None on success path
- `TestRetryRollbackContract` — end-to-end: capture + finalize yields
the exact content the user saw streaming live plus the error marker

1022 total SDK tests pass (baseline + new).

Frontend (`useCopilotStream.test.ts`): 1 new test — `restores the unsent
text and drops the optimistic user bubble on 429 usage-limit`.

## Out of scope

- Frontend rendering tweaks for the interrupted-turn marker (existing
error-marker rendering already works).
- Refresh-survival of the unsent text in Mode 1 (would require
localStorage persistence with TTL) — separate follow-up.
- Hard process-kill / OOM where Python `finally` doesn't run — needs a
different mechanism (pod-level checkpoint sweeper).

## Checklist

- [x] My code follows the style guidelines of this project
(black/isort/ruff via `poetry run format`)
- [x] I have performed a self-review of my own code
- [x] I have added relevant unit tests
- [x] I have run lint and tests locally (1022 SDK tests pass)

## Test plan

- [ ] Verify a long-running turn that hits transient-retry exhaustion
preserves partial assistant text + tool results in chat history after
refresh
- [ ] Verify the next user message after an interrupted turn carries
enough context that the model can continue the prior task instead of
inventing a new one
- [ ] Verify a successful retry (attempt #1 fails, attempt #2 succeeds)
shows ONLY attempt #2's content (no leaked partial from #1)
- [ ] Verify hitting daily usage limit at turn start re-populates the
composer with the unsent text and removes the optimistic user bubble

---------

Co-authored-by: Claude <noreply@anthropic.com>
tpsaint pushed a commit that referenced this pull request Jun 26, 2026
…e-limit through DB-manager (Significant-Gravitas#12992)

## Why

Two production fixes surfaced from John Ababseh's dev testing on
2026-05-01 (Discord thread `1499923303609925793`):

- **Issue #5** — chat session `c93dc51f-bb38-4427-975a-6dc033358689`
finished after multiple minutes of work and showed only `(Done — no
further commentary.)` Langfuse trace `7d1a674eb7c84ffb5a4b34875306eea9`
shows the model wrote the entire restaurant-list answer **inside an
extended-thinking `ThinkingBlock`** (931 completion tokens, $0.50 spend)
and ended the turn with empty `content: []`. Our existing thinking-only
guard immediately stamped the placeholder, so the user never saw the
actual answer the model already generated.
- **Issue #2** — every image-generation request
(`AIImageCustomizerBlock` / `AIImageGeneratorBlock`) on dev failed with
`prisma.errors.ClientNotConnectedError: Client is not connected to the
query engine`. Regression from Significant-Gravitas#12780 (tier-based workspace file storage
limits): the new pre-write quota check at `util/workspace.py:225` called
`get_workspace_total_size` directly from `backend.data.workspace`, which
is a Prisma read. The copilot-executor process doesn't connect Prisma —
it RPCs into `database-manager` for everything else — so every
`manager.write_file()` from a tool blew up.

## What

- **Issue 5** — layered fallback for thinking-only final turns:
1. Adapter sets `pending_thinking_only_reprompt` and defers
placeholder/StreamFinish.
2. Driver re-enters the SDK loop and fires one synthetic
`client.query("Please write a brief user-facing summary of what you
found...")`.
3. If the re-prompt also returns thinking-only, promote the most recent
`ThinkingBlock` content to a visible `TextDelta`.
4. Only when thinking is also empty, emit the original `(Done — no
further commentary.)` placeholder.
Bounded to **one** re-prompt per turn so the worst case is ~one extra
LLM call.

- **Issue 2** — route the storage-limit pre-check through the existing
`workspace_db()` accessor and expose `get_workspace_total_size` on
`DatabaseManager` so the copilot-executor RPCs into database-manager
(where Prisma is connected), the same path other workspace queries on
this codepath use.

## How

`backend/copilot/sdk/response_adapter.py`
- New `pending_thinking_only_reprompt`, `thinking_only_reprompted`,
`_last_thinking_content` fields on `SDKResponseAdapter`.
- Capture latest `block.thinking` when streaming reasoning so the
second-tier promote-fallback has content.
- ResultMessage thinking-only branch — first hit defers; second hit
prefers `_last_thinking_content`, falls back to placeholder.

`backend/copilot/sdk/service.py`
- Wrap the `async for sdk_msg in _iter_sdk_messages(client):` block in a
`while True:` retry loop. After the inner loop ends, check
`pending_thinking_only_reprompt` — if set and not yet retried, fire
`client.query(_THINKING_ONLY_REPROMPT, ...)` and re-enter; else break.
Most of the diff is +4-space indentation churn.
- Module-level `_THINKING_ONLY_REPROMPT` constant for the re-prompt
copy.

`backend/data/db_manager.py`
- Import `get_workspace_total_size` and expose it via `_(...)` so it
becomes an RPC on `DatabaseManager` and the corresponding async client.

`backend/util/workspace.py`
- Drop the direct `get_workspace_total_size` import; call
`workspace_db().get_workspace_total_size(self.workspace_id)` instead.

`backend/util/workspace_test.py`,
`backend/copilot/sdk/response_adapter_test.py`
- Existing thinking-only test split into three: defer-on-first-pass,
promote-thinking-on-second-pass,
fallback-to-placeholder-when-no-thinking.
- Updated `test_flush_unresolved_at_result_message` to expect deferral
instead of immediate placeholder.
- New
`test_write_file_storage_check_routes_through_workspace_db_accessor`
proving the storage-limit pre-check goes through the accessor (would
have caught Issue 2).

## Test plan

- [x] `poetry run pytest backend/copilot/sdk/response_adapter_test.py
backend/util/workspace_test.py` — 67 pass
- [x] `poetry run ruff check` on changed files — clean
- [x] `poetry run black` / `poetry run isort` on changed files — clean
- [x] `/pr-test --fix` against dev preview to exercise the re-prompt +
image-write paths end-to-end
- [x] `/pr-polish` until merge-ready

## Related

- Regression introduced by Significant-Gravitas#12780 (tier-based workspace file storage
limits)
tpsaint pushed a commit that referenced this pull request Jun 26, 2026
…ight caps (Significant-Gravitas#13069)

## Why

We hard-capped concurrent AutoPilot turns at 15 per user as a hotfix,
which rejected the 16th request with HTTP 429 — blunt UX, easy to hit by
accident. This PR keeps the safeguard but introduces a **soft running
cap of 5** with a **FIFO queue up to 15 in-flight (running + queued)**.
The user can submit beyond 5; the dispatcher auto-promotes queued
sessions as running slots free.

## What

- **Soft cap: 5 running tasks per user** (configurable:
`max_running_copilot_turns_per_user`).
- **Hard cap: 15 in-flight (running + queued) per user** (existing
setting, semantics shifted from "concurrent" to "in-flight").
- **FIFO queue at the SESSION level.** `ChatSession.chatStatus` is a
single text enum: `idle` (default) | `queued` | `running` (open enum).
The user's pending message is just a normal `ChatMessage` row; the
session carries the lifecycle.
- **Cancel:** the existing `POST /sessions/{session_id}/cancel` handles
both states uniformly. Queued sessions flip back to `idle` (no executor
cancel needed); running sessions publish a RabbitMQ cancel event as
before. No dedicated `/queued-tasks/*` endpoints.
- **Frontend:** Queued-state badge on the latest user message of any
session whose `chat_status === 'queued'`. Sidebar shows a green pulsing
dot for `running` and a purple hourglass for `queued` so the user can
see at a glance which of their chats are in flight. Cancel button on the
badge calls the same session-cancel endpoint.

## How

| Layer | Storage | Purpose |
|---|---|---|
| Session lifecycle | `ChatSession.chatStatus` (this PR) | Soft cap
(count `running`) + queue (count `queued`), single source of truth |
| Dispatcher payload | `ChatMessage.metadata` JSONB (this PR) |
Submit-time `file_ids` / `mode` / `model` / `permissions` / `context` /
`request_arrival_at` stashed on the queued user row so promotion can
replay the turn faithfully |
| Execution | RabbitMQ (existing) | Worker pool, retries |

### Queue lifecycle — where it lives, who clears it

**Storage.** The queue lives entirely in Postgres (no Redis sorted set,
no Lua). Per session: a single `chatStatus` text column (`idle | queued
| running`, open enum), plus the user's pending message persisted as a
normal `ChatMessage` row with the dispatcher's submit-time payload
stashed in `metadata` JSONB.

**Submission path** (`backend/copilot/turn_queue.py:enqueue_turn`):
1. HTTP route tries immediate dispatch via `acquire_turn_slot`. If user
is at the 5-running cap, `ConcurrentTurnLimitError` is raised.
2. Route catches the error and falls through to `try_enqueue_turn`
which: checks the 15 in-flight hard cap, persists the user message +
metadata, then CAS-flips `ChatSession.chatStatus` `idle` → `queued`.
Returns an empty-stream response so the SSE client knows the message
landed.

**Promotion path**
(`backend/copilot/turn_queue.py:dispatch_next_for_user`) — **fires
per-user, not globally**:
1. **Trigger #1:** `mark_session_completed` (in `stream_registry.py`) —
after every turn completes (success / failure / cancel), the session's
`user_id` is read from Redis meta and `dispatch_next_for_user(user_id)`
is invoked. The dispatcher errors are swallowed with a loud log so a
queue hiccup never breaks the completion path.
2. **Trigger #2:** periodic timer (covers missed dispatch events / GKE
rolling restarts).
3. Picks the user's oldest queued session via
`list_chat_sessions_by_status(user_id, queued)` ordered by `updatedAt`.
4. Re-validates paywall + per-window USD cap — paywalled / rate-limited
sessions stay `queued` for the next tick.
5. CAS-claims `queued` → `running`. Recovers the user message +
submit-time `metadata`, builds a `TurnSlot`, calls `dispatch_turn`. On
any error during dispatch, rolls the session back to `queued`.

**Cancellation** (`POST /sessions/{id}/cancel`): single endpoint handles
both lifecycle states — queued sessions flip back to `idle` (no executor
cancel needed); running sessions publish a RabbitMQ cancel event as
before.

The cap and queue queries are both `count` / `find_many` on
`ChatSession` by `chatStatus`. Both running-turn tracking and queue
admission are non-locked CAS-then-count — same TOCTOU tolerance the
graph-execution credit rate-limit accepts on its INCRBY path. Going
briefly to 16/17 in-flight under burst is acceptable; the cap is a
safeguard, not a budget.

The DB-manager surface is **4 generic ChatSession primitives**
(`count_chat_sessions_by_status`, `list_chat_sessions_by_status`,
`update_chat_session_status` with optional `expect_status` CAS gate,
`get_chat_session_status`) plus the existing `add_chat_message` extended
with optional `message_id` + `metadata`. Adding a new lifecycle state is
a code-only change at call sites. DB access goes through
`backend.data.db_accessors.chat_db()` so the dispatcher works from both
the HTTP server (Prisma directly) and the CoPilotExecutor subprocess
(RPC via `DatabaseManager`).

Route gates (`is_turn_in_flight`, `acquire_turn_slot`) treat both
`queued` and `running` as "in flight", so a resubmit to a queued session
lands in the pending buffer or falls through to the cross-session queue
rather than racing the dispatcher.

## Test plan

- [x] Backend unit tests — `active_turns_test.py`, `turn_queue_test.py`,
`db_test.py` (60+ tests covering admission, refresh, release,
queued-collision, cap-rollback, dispatcher branches:
paywall/rate-limited stays queued, rate-limit unavailable, happy path,
dispatch failure → restore).
- [x] **New integration tests** in `stream_registry_test.py`: pin the
per-user slot-free dispatcher invocation on `mark_session_completed`,
plus the error-swallowing behaviour so a queue hiccup never breaks the
turn completion path.
- [x] Migration scoped to additive nullable column + an additional
non-partial index (cheap on Postgres, no table rewrite, no backfill
needed).
- [x] Frontend integration tests (Vitest): queued-state badge, cancel
button, error paths (404 silent, 5xx destructive toast, network error),
sidebar running/queued/idle indicators.
- [x] Live UI proof inline on the PR ([scroll
down](Significant-Gravitas#13069 (comment))):
Queued badge, pill tooltip, cancel-hover red state, after-cancel hidden
— all rendered by the production component against a real backend
running this branch. Sidebar running-dot + queued-hourglass also
screenshotted.
- [x] CI: lint, types, integration_test, end-to-end tests.

### Stuck-running bugs found and fixed in this PR

Audit during review surfaced multiple "DB says running, executor isn't
actually running it" failure modes. Every one fixed in this PR; none
deferred.

| # | Scenario | Symptom | Fix |
|---|---|---|---|
| 1 | Executor crashes mid-turn, Redis meta TTLs out, DB `chatStatus`
stays `running` | Sidebar green dot forever; new submits buffer
indefinitely | `cancel_session_task` now calls `release_turn_slot` on
the no-active-session branch — the user clicking Cancel always clears
the orphan. `get_session` route also resets when DB says `running` but
Redis is empty, so just opening the stuck chat clears it. |
| 2 | `acquire_turn_slot` flips DB `idle → running` but the request
aborts before `dispatch_turn` runs | Same orphan, no Redis meta written
| Same fixes as #1 catch this on the next cancel/open. The new periodic
sweep below covers the no-interaction case. |
| 3 | `dispatch_turn` succeeds at `create_session` (Redis meta written)
but fails at the RabbitMQ enqueue | Redis hash sits at
`status='running'` until TTL; `is_turn_in_flight` keeps reporting
in-flight | `dispatch_turn` now uses `try/finally` on a `committed` flag
— Redis meta is deleted on ANY non-happy-path exit including
`CancelledError` (which `except Exception` would miss). Cleanup runs
inside `dispatch_turn` itself so both the HTTP `schedule_chat_turn` path
and the queue dispatcher path are covered. |
| 4 | `mark_session_completed` itself fails mid-completion (Redis blip
during the CAS) | DB never flips back to `idle` | Same chat-open /
cancel reset fixes handle this. No proactive sweep was viable here
because we can't distinguish "legit long-running tool call" from "stuck"
without a Redis side check. |
| 5 | Dispatcher rollback used `except Exception`, leaking on
`CancelledError` | Task cancellation during dispatch could leave DB
stuck at `running` | Switched to `except BaseException` in
`dispatch_next_for_user` so cancellation still rolls back the DB claim.
Pairs with the `try/finally` in `dispatch_turn` for full Redis+DB
symmetry. |
| 6 | `chatStatus` was an open `TEXT` column with no DB-level validation
| A typo like `"runnin"` could persist and break the cap-count |
Converted to a Postgres enum `ChatSessionStatus` (`idle | queued |
running`) — invalid values now rejected at the DB layer. Future states
need a tiny `ALTER TYPE ADD VALUE` migration (cheap on PG 12+). |

**Why no periodic sweep.** The reactive cleanups (rows 1 and 2) catch
every user-visible path: clicking Cancel and opening the chat both reset
the orphan. The existing 6h+5min inline stale-CAS in
`get_active_session` remains the ultimate backstop. Adding a per-pod
APScheduler job would chase the narrow "user has stuck sessions but
never opens them and never cancels" case at the cost of constant
operational surface — not worth it for this rare scenario.

All paths that mutate `chatStatus` now also clean the matching Redis
state (either inline or via the sweep) — the two layers stay in sync.

### Cap + queue safety against double-promotion (carry-over from earlier
review)

- `mark_session_completed` does `release_turn_slot` (running → idle)
BEFORE `dispatch_next_for_user`. Two concurrent completions release two
slots first, then race the CAS on the same head — only one wins per
slot, so at most N promotions for N releases. Cap holds.
- `claim_queued_session` is an atomic Postgres `UPDATE … WHERE
chatStatus='queued' AND id=…`: keyed to the specific head row, only one
CAS matches.
- All db.py functions exposed on `DatabaseManager` return primitives or
DTOs (`ChatSessionInfo`, `ChatMessage`) — no raw Prisma rows cross the
RPC boundary, so the executor subprocess can safely route through
`chat_db()`.
tpsaint pushed a commit that referenced this pull request Jun 26, 2026
…avitas#13370)

### Why / What / How

**Why:** A TAC Security CASA assessment (ESOF AppSec ADA) of
`platform.agpt.co` flagged several missing/leaky HTTP response headers.
None are critical (overall ESOF score 9.1/10, "Low"), but all must be
remediated to pass the CASA Tier 2 & Tier 3 assessments. Verified live
today: prod sends `X-Powered-By: Next.js` and is missing both
`X-Frame-Options` and `X-Content-Type-Options`.

**What:** Adds baseline security response headers in the frontend
Next.js config and disables the framework-fingerprinting header.

**How:** Defines the headers in `nextConfig.headers()` (applied to
`/:path*`) and sets `poweredByHeader: false`. The existing
`Document-Policy: js-profiling` header was previously nested inside the
Sentry plugin options (2nd arg to `withSentryConfig`), where it does not
apply on the non-Sentry build path — it's moved into the Next config so
every build path emits the full header set.

### Changes 🏗️

- `autogpt_platform/frontend/next.config.mjs`:
- `poweredByHeader: false` → removes `X-Powered-By: Next.js` (finding
#5; partially addresses proxy disclosure #3)
  - `X-Frame-Options: SAMEORIGIN` → anti-clickjacking (finding #2)
  - `X-Content-Type-Options: nosniff` → anti-MIME-sniffing (finding #4)
- Moved `Document-Policy: js-profiling` from the Sentry options into
`nextConfig.headers()` so it (and the new headers) apply on all build
paths

**Not addressed here (platform-level / separate):**
- CORS `Access-Control-Allow-Origin: *` on `/_next/static/media/*` fonts
(#1) — injected by Vercel for font assets; overriding risks breaking
Next's `crossorigin` font preloads. Needs a separate, deploy-verified
change.
- `Server: Vercel` header and TRACE/TRACK methods (#3) — injected at the
Vercel edge, no in-repo lever.
- Info-only items #6/#7/#8/#9 are scanner observations or already
handled (backend cache-protection middleware sends `no-store` on
sensitive routes).

`SAMEORIGIN` was chosen over `DENY` so same-origin embedding
(share/preview flows) keeps working; easy to tighten if the app is never
framed.

### Checklist 📋

#### For configuration changes:
- [x] `.env.default` is updated or already compatible with my changes
(no env changes)
- [x] `docker-compose.yml` is updated or already compatible with my
changes (no compose changes)
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)

#### Test plan:
- [x] `pnpm format`, `pnpm lint`, `pnpm types` pass locally
- [ ] After deploy, verify response headers on `platform.agpt.co`:
  - [ ] `X-Frame-Options: SAMEORIGIN` present
  - [ ] `X-Content-Type-Options: nosniff` present
  - [ ] `X-Powered-By` absent
- [ ] `Document-Policy: js-profiling` still present (Sentry profiling
unaffected)
- [ ] App still renders and fonts load (no clickjacking/embedding
regressions)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Config-only HTTP header changes with no auth or data-path changes;
`SAMEORIGIN` framing is a deliberate tradeoff that should be
smoke-tested after deploy for embed/preview and font loading.
> 
> **Overview**
> Addresses CASA assessment gaps on the Next.js frontend by
**disabling** `X-Powered-By: Next.js` via `poweredByHeader: false` and
**adding** global response headers on `/:path*` through
`nextConfig.headers()`: `X-Content-Type-Options: nosniff`,
`X-Frame-Options: SAMEORIGIN`, and `Document-Policy: js-profiling`.
> 
> **`Document-Policy`** (and the new security headers) were previously
defined only inside the optional `withSentryConfig` wrapper, so builds
that skip the Sentry webpack plugin never emitted them. They now live on
the base Next config so every build path gets the same header set.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
2c6931e. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.