Skip to content

feat(platform): replace Supabase Auth with Better Auth - #13330

Merged
ntindle merged 85 commits into
devfrom
better-auth-migration
Jul 30, 2026
Merged

feat(platform): replace Supabase Auth with Better Auth#13330
ntindle merged 85 commits into
devfrom
better-auth-migration

Conversation

@ntindle

@ntindle ntindle commented Jun 10, 2026

Copy link
Copy Markdown
Member

Why / What / How

Why: The platform's only hard dependency on the Supabase stack was auth (GoTrue + Kong + the auth.users schema). That dependency forced every deployment — including local/self-hosted — to run the full docker-compose Supabase sidecar, which blocks the longer-term goal of shipping the platform as a single container or packaged app.

What: Replaces Supabase Auth with Better Auth (1.6.x) embedded in the Next.js frontend, with zero session loss for existing users and zero password resets.

How:

  • Auth service lives in the Next.js server at /api/auth/* (cookie-based DB sessions, tables in the platform schema of the existing Postgres, owned by Prisma migrations — one migration authority).
  • Backend validation: the JWT plugin signs ES256 tokens published at /api/auth/jwks; autogpt_libs.auth now validates asymmetric tokens against JWT_JWKS_URL while keeping the legacy HS256 shared-secret path active, dispatched by token algorithm. JWT claims are shaped identically to GoTrue's (sub, email, role, user_metadata.name, aud: "authenticated"), so no route/handler changes were needed.
  • No session loss: three mechanisms layered —
    1. backend dual-validation keeps in-flight legacy JWTs working,
    2. a supabase-bridge Better Auth plugin silently upgrades a legacy Supabase cookie (signature-verified, accepted up to SUPABASE_BRIDGE_MAX_TOKEN_AGE_DAYS past expiry since refresh tokens have no issuer anymore) into a Better Auth session, triggered by middleware exactly once per browser,
    3. scripts/migrate-supabase-auth.ts copies auth.users/auth.identities into the Better Auth tables preserving UUIDs (no FK orphans) and bcrypt hashes (Better Auth is configured with bcrypt hashing, so GoTrue passwords keep verifying).
  • Token plumbing: browser API calls already go through /api/proxy, so backend JWTs are minted server-side from the cookie session (with a per-session mint cache) — the browser never holds a JWT.
  • Compose: kong, auth (GoTrue), studio, meta removed; db is now plain pgvector/pgvector:pg16 with an init shim that creates a minimal auth.users so the historical migration chain applies on fresh databases.

Changes 🏗️

  • autogpt_libs.auth: JWKS (ES256/RS256/EdDSA) validation via JWT_JWKS_URL + legacy JWT_VERIFY_KEY HS256 path; config validation requires at least one
  • Prisma: Better Auth tables (UserAuthIdentity, UserAuthSession, UserAuthAccount, UserAuthVerification, UserAuthJwks) + migration that also drops the auth.users sync trigger
  • Backend: removed supabase SDK; feature-flag LD context now reads the auth user table; e2e test data seeds bcrypt credential accounts
  • Frontend: new src/lib/auth module (server config w/ admin+jwt+bridge plugins, actions, hooks, middleware); all ~50 useSupabase consumers migrated to useAuth (same surface); login/signup/OAuth/password-reset/email-change flows rewritten; @supabase/* packages removed
  • Infra: compose without the Supabase stack; CI provisions plain pgvector Postgres; env defaults updated (see below); installer + docs updated
  • kysely pinned to 0.28.17 (upstream @better-auth/kysely-adapter imports a constant kysely 0.29 removed from the root export)

Configuration changes:

  • Backend: +JWT_JWKS_URL, SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEY removed, JWT_VERIFY_KEY retained for the migration window
  • Frontend: +BETTER_AUTH_SECRET, +BETTER_AUTH_URL, +DATABASE_URL, +AUTH_DB_SCHEMA, optional AUTH_{GOOGLE,GITHUB,DISCORD}_CLIENT_ID/SECRET, optional SMTP_*, optional SUPABASE_JWT_SECRET (bridge window only); NEXT_PUBLIC_SUPABASE_* removed
  • OAuth provider consoles need redirect URIs updated from GoTrue (/auth/v1/callback) to https://<frontend>/api/auth/callback/{provider}

Cloud rollout order (automated on merge): the deploy workflow's migrate job runs the schema migrations including the bulk GoTrue→Better Auth copy (20260716120000_copy_supabase_users_to_better_auth), and the backend deploy dispatches only after it succeeds. The Vercel frontend build runs in parallel off the same push — if it finishes first, auth 500s briefly until the migrate job lands (self-heals; no action needed). After the frontend flip, run the “AutoGPT Platform - Supabase Auth Sweep” workflow (workflow_dispatch, environment picker) once to copy any users who signed up via GoTrue in between. Keep SUPABASE_JWT_SECRET set (JWT_VERIFY_KEY falls back to it) through the bridge window → after the window, drop the legacy secrets and the GoTrue infra.

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:
    • Fresh plain-Postgres DB: full Prisma migration chain applies (auth shim verified)
    • Signup via Better Auth → UUID user + session cookie; platform User created via backend with same id
    • /api/auth/jwks serves ES256 key; minted JWT carries sub/email/role/user_metadata/aud=authenticated
    • Python backend accepts the ES256 JWT via JWKS (POST /api/auth/user → 200)
    • Legacy GoTrue-style HS256 JWT still accepted by the backend (dual validation)
    • Bridge: expired-but-valid legacy sb-* cookie on a protected page → Better Auth session minted, sb cookies cleared, redirected to original destination
    • bcrypt sign-in 200, wrong password 401; protected pages redirect without session, render with one; /api/proxy mints backend JWT (credits endpoint 200)
    • Backend: 627 util tests + user-data tests green; autogpt_libs auth suite green (new JWKS tests incl. rotation/kid-miss)
    • Frontend: pnpm types/lint clean; 3215+ unit tests green incl. new bridge/middleware/mapping tests

For configuration changes:

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

🤖 Generated with Claude Code

Cloud deploy checklist ☁️

Things that live outside this repo's code and must be handled at rollout (in order):

  1. Waitlist: signup gating was a Postgres trigger on auth.users; new signups insert into platform."user" where no trigger exists. Port the waitlist check (trigger on platform."user" or a Better Auth databaseHooks.user.create.before hook) before deploy, or signups are open. The frontend's not_allowed error handling is preserved and ready.
  2. Infra repo env/manifests: set BETTER_AUTH_SECRET (the compose default is dev-only), frontend DATABASE_URL + AUTH_DB_SCHEMA=platform, backend JWT_JWKS_URL, SMTP credentials (Postmark SMTP works; without SMTP, password reset/verification/email-change flows fail loudly by design); keep JWT_VERIFY_KEY + SUPABASE_JWT_SECRET set for the bridge window; remove GoTrue/Kong workloads after the window.
  3. OAuth consoles: change Google/GitHub/Discord redirect URIs from GoTrue /auth/v1/callback to https://<frontend>/api/auth/callback/{provider}, then smoke-test each provider in staging — including a sign-in by a migrated OAuth user (identity rows are migrated and account linking is enabled, but no live provider flow runs in CI).
  4. Data migration: automated — the bulk copy rides the deploy workflow's migrate job. Post-flip, run the “AutoGPT Platform - Supabase Auth Sweep” workflow once for stragglers (idempotent / re-runnable; frontend/scripts/migrate-supabase-auth.ts under the hood).
  5. Known accepted trade-offs: bridge accepts signature-valid Supabase tokens ≤30 days past expiry (SUPABASE_BRIDGE_MAX_TOKEN_AGE_DAYS); open SPA tabs at cutover 401 until one page reload; migrated temporary bans become permanent; GoTrue 2FA enrollments don't migrate (no 2FA UI exists today).
  6. Post-merge hardening: back Better Auth's rate limiter with Redis for multi-replica (per-instance memory by default); admin role assignment is now role='admin' on platform."user"; delete the inert db/docker/ tree in a cleanup PR.

Rollback ⏮️

Precondition — the rollback window: keep the GoTrue/Kong workloads and JWT_VERIFY_KEY + SUPABASE_JWT_SECRET running until the cutover is confirmed healthy. Dropping the legacy infra/secrets (final step of the rollout order) is the point of no return — don't do it until you're confident.

  1. Roll the frontend back in Vercel — Instant Rollback to the previous deployment of the environment (or revert the merge commit on the branch). The backend needs no revert — dual-validation still accepts GoTrue HS256 tokens, and the old frontend re-issues them. (Backend JWKS fetches fail while rolled back, which is what makes already-bridged ES256 sessions 401 as described below — expected, not a fault.)
  2. Sessions: anyone still holding a valid GoTrue cookie continues uninterrupted; anyone who had already bridged to a Better Auth session 401s once → one reload → re-logs-in via GoTrue (their auth.users credential still exists).
  3. No DB rollback needed — leave the Better Auth tables in place; the old system ignores them.

One-way caveat: users who signed up or changed their password on Better Auth during the cutover window exist only in platform."user"/account, not auth.users, so after rollback they can't log in via GoTrue. Mitigate by picking one: (a) keep the window short and accept the few re-signups, (b) freeze new signups during the window, or (c) reverse-sync new platform."user" rows into auth.users before rolling back.


Note

High Risk
This is a full authentication and deployment-model change (JWT verification, session migration, CI database setup) touching security-critical paths; rollout order and env secrets (JWT_JWKS_URL, bridge window) matter for production access.

Overview
Replaces the Supabase auth stack (Kong, GoTrue, Studio, related env) with plain pgvector Postgres and Better Auth on the frontend. Platform .env.default is trimmed to database credentials; local DB data moves to data/db/data.

autogpt_libs.auth is reworked for Better Auth: JWT_JWKS_URL is required at startup (with cleartext remote http:// blocked unless JWKS_ALLOW_INSECURE_TRANSPORT). Tokens verify via JWKS (ES256, etc.) or legacy HS256 (JWT_VERIFY_KEY / SUPABASE_JWT_SECRET) by algorithm. New requires_frontend_service guards pre-login backend calls with JWKS-signed service tokens (separate audience from user JWTs). Missing role claims fail closed (403 admin, default "user" elsewhere) instead of KeyError/500.

CI and workflows: Docker image caches swap Supabase images for pgvector/pgvector:pg15; backend tests use a pgvector container + init shim instead of supabase start; pytest drops SUPABASE_* env; new autogpt-libs-test job. Full-stack E2E starts db only (no GoTrue), caches/dumps platform schema (Better Auth tables), and fails if rest_server is unhealthy after 180s. Adds manual “Supabase Auth Sweep” workflow running migrate-supabase-auth.ts post-cutover.

Also: SECURITY.md clarifies JWKS transport warnings are operator guidance; .gitignore for supabase/.temp/; removal of supabase_integration_credentials_store/types.py from the diff hunk.

Reviewed by Cursor Bugbot for commit ffc0264. Bugbot is set up for automated code reviews on this repo. Configure here.

ntindle and others added 5 commits June 10, 2026 02:27
…rvice deps

- autogpt_libs.auth: verify asymmetric (ES256/RS256/EdDSA) JWTs against a
  JWKS endpoint (JWT_JWKS_URL) while keeping the legacy HS256 shared-secret
  path active for the migration window, so sessions issued by Supabase
  GoTrue stay valid
- add Better Auth tables (user/session/account/verification/jwks) to the
  Prisma schema + migration; drop the legacy auth.users sync trigger
- feature flags: build LaunchDarkly user context from the auth user table
  instead of the Supabase admin API
- e2e test data: seed Better Auth credential accounts (bcrypt) instead of
  creating users via supabase.auth.admin
- remove supabase python SDK, SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…e frontend

- Better Auth server at /api/auth/* (cookie DB sessions, ES256 JWT plugin
  with JWKS for the Python backend, admin plugin for roles, bcrypt password
  hashing so migrated GoTrue hashes keep verifying)
- supabase-bridge plugin: silently upgrades valid legacy Supabase session
  cookies into Better Auth sessions so logged-in users survive the cutover
- new src/lib/auth module (server config, actions, hooks, middleware) with
  a Supabase-compatible User shape; all ~50 consumers swept from
  useSupabase/useSupabaseStore to useAuth/useAuthStore
- auth flows rewritten: login, signup, OAuth provider + callback, password
  reset (token-based), email change, logout; legacy confirm/code-exchange
  routes removed
- docker compose: kong/gotrue/studio/meta removed; db is now plain
  pgvector/pgvector:pg16 with an init shim for historical migrations that
  referenced auth.users
- one-time data migration script (frontend/scripts/migrate-supabase-auth.ts)
  copying auth.users/auth.identities into the Better Auth tables with UUIDs
  and bcrypt hashes preserved
- @supabase/ssr and @supabase/supabase-js removed

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… Better Auth

- backend CI: replace Supabase CLI with pgvector/pgvector:pg16 container
  (init shim provides the legacy auth schema for historical migrations)
- fullstack CI: start only db (no gotrue), drop auth.users from the e2e
  data cache dump (Better Auth tables live in the platform schema dump)
- agent sandbox workflows: pre-pull pgvector instead of supabase images
- unit tests for the new auth module (bridge cookie parsing, user mapping,
  route-protection middleware)
- docs: getting-started, advanced setup, oauth flow, READMEs, TESTING.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- pin kysely to 0.28.17: @better-auth/kysely-adapter 1.6.x imports
  DEFAULT_MIGRATION_LOCK_TABLE from the kysely root, which 0.29 moved to
  kysely/migration (runtime export removed), crashing every auth route
- the orval mutator chain put src/lib/auth/server/token.ts in the client
  component graph: browser bundles now resolve it to a no-op stub via
  webpack/turbopack aliases (browser calls go through /api/proxy, which
  mints the JWT server-side), and the server layers defer the next/headers
  and Better Auth imports to call time, mirroring the lazy-require pattern
  the Supabase client used here before

Verified e2e locally: fresh-DB migrations, signup, JWKS, ES256 JWT accepted
by the Python backend (platform User created with same UUID), legacy HS256
token dual-validation, supabase-bridge upgrade of an expired legacy session
cookie, bcrypt sign-in, middleware redirects, proxy token minting.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ntindle
ntindle requested review from a team as code owners June 10, 2026 10:14
@ntindle
ntindle removed the request for review from a team June 10, 2026 10:14
@ntindle
ntindle requested review from Bentlybro and Pwuts June 10, 2026 10:14
@github-project-automation github-project-automation Bot moved this to 🆕 Needs initial review in AutoGPT development kanban Jun 10, 2026
@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The PR migrates platform authentication from Supabase to Better Auth, adds JWKS-based JWT verification and service-token authorization, introduces transactional auth-email delivery, replaces the local Supabase stack with PostgreSQL/pgvector, adds user migration paths, and updates frontend consumers, CI, tests, configuration, and documentation.

Changes

Better Auth foundation

Layer / File(s) Summary
JWT, session, and service-token foundation
autogpt_platform/autogpt_libs/..., autogpt_platform/frontend/src/lib/auth/*
Adds Better Auth sessions, mapped user types, JWKS verification, service tokens, signup gating, legacy-session bridging, middleware, and server session helpers.
Authentication entry points and user flows
autogpt_platform/frontend/src/app/**, autogpt_platform/frontend/src/middleware.ts
Migrates login, signup, OAuth, password reset, callbacks, user updates, logout, and middleware to Better Auth APIs and cookies.
Frontend auth consumers and tests
autogpt_platform/frontend/src/components/**, src/providers/**, src/services/**
Replaces Supabase hooks, mocks, and user types with useAuth, Better Auth actions, and local auth types.

Backend and database integration

Layer / File(s) Summary
Transactional email API
autogpt_platform/backend/backend/api/features/auth_email/*, backend/notifications/*
Adds a service-token-protected email endpoint that validates action links and delegates delivery through the notification manager and Postmark sender.
Better Auth persistence and migration
backend/schema.prisma, backend/migrations/*, db/init/*, frontend/scripts/*
Adds Better Auth tables, indexes, legacy cleanup, conflict-safe SQL migration, and batched user migration tooling.
PostgreSQL/pgvector runtime and CI
docker-compose*.yml, .github/workflows/*
Starts PostgreSQL/pgvector locally and in CI, seeds Better Auth users, updates database URLs, and restores platform-only E2E data.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: Possible security concern, Review effort 5/5

Suggested reviewers: bentlybro, pwuts, kcze

Poem

I’m a bunny with keys in a brand-new nest,
JWKS and carrots secure every request.
Postgres hums softly, auth gates glow,
Better Auth blooms as old services depart.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 38.10% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly and concisely summarizes the main change: replacing Supabase Auth with Better Auth.
Description check ✅ Passed The description is detailed and directly matches the auth migration, infra, and rollout changes in the PR.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch better-auth-migration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added documentation Improvements or additions to documentation platform/frontend AutoGPT Platform - Front end platform/backend AutoGPT Platform - Back end labels Jun 10, 2026
Comment thread autogpt_platform/frontend/src/lib/auth/server/token.ts Outdated
Comment thread autogpt_platform/frontend/src/lib/auth/middleware.ts
@codecov

codecov Bot commented Jun 10, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.76529% with 98 lines in your changes missing coverage. Please review.
✅ Project coverage is 76.90%. Comparing base (9d30196) to head (ffc0264).

Additional details and impacted files
@@            Coverage Diff             @@
##              dev   #13330      +/-   ##
==========================================
+ Coverage   76.77%   76.90%   +0.13%     
==========================================
  Files        2750     2761      +11     
  Lines      209139   209516     +377     
  Branches    20059    20078      +19     
==========================================
+ Hits       160559   161131     +572     
+ Misses      44198    43946     -252     
- Partials     4382     4439      +57     
Flag Coverage Δ
platform-backend 83.33% <96.12%> (+0.02%) ⬆️
platform-frontend 49.15% <81.22%> (+0.82%) ⬆️
platform-frontend-e2e 30.88% <50.00%> (-0.25%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
Platform Backend 83.33% <96.12%> (+0.02%) ⬆️
Platform Frontend 52.67% <82.48%> (+0.69%) ⬆️
AutoGPT Libs ∅ <ø> (∅)
Classic AutoGPT 28.43% <ø> (ø)
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment thread autogpt_platform/frontend/src/lib/auth/auth.ts
Comment thread autogpt_platform/frontend/src/lib/auth/email.ts Outdated
- mint backend JWTs via an HTTP call to /api/auth/token instead of
  importing the Better Auth server instance: keeps pg/nodemailer out of
  the client component graph (fixes the prod webpack build) and reads
  cookies via next/headers cookies() so a session created earlier in the
  same server action is visible immediately (cursor: high)
- revoke all sessions on password reset, matching the previous
  signOut({ scope: global }) behavior
- never log one-time auth links in production when SMTP is unconfigured
- regenerate poetry.lock with Poetry 2.2.1 to match CI

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment thread autogpt_platform/frontend/src/lib/auth/email.ts Outdated
Comment thread autogpt_platform/frontend/src/lib/auth/middleware.ts
ntindle and others added 3 commits June 10, 2026 12:11
… helpers, bridge)

73 new unit tests: server actions, auth config closures (bcrypt round-trip,
JWT claim mapping, social provider env wiring), email fallback behavior,
page-protection helpers, hook helpers, getServerUser, and legacy-token
verification (jose-signed fixtures incl. tolerance-window cases). Also
restructures the lazy next/headers require so prettier can't orphan its
eslint suppression.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The legacy Supabase auth.users trigger created a Profile row for every new
user; with the trigger gone, nothing did. Store submissions (and the
/profile page) hard-require a Profile, which broke the marketplace,
publish, and settings e2e suites — and would have broken every new
production signup. get_or_create_user now creates (or backfills) a default
Profile with a generated username, mirroring the old trigger.

Also keys the e2e data cache on backend/data/user.py so the previously
cached profile-less dataset can't be restored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The signup action and onboarding page can both trigger get-or-create for
a brand-new user at once; the loser of the Profile insert race now no-ops
instead of bubbling a 500.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment thread autogpt_platform/backend/backend/data/user.py Outdated
A silent return let the reset-password UI report "Email sent" while
nothing was delivered. Throwing surfaces the misconfiguration as a flow
error instead; it throws for every address equally, so account existence
is not leaked.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-project-automation github-project-automation Bot moved this from 👍🏼 Mergeable to ✅ Done in AutoGPT development kanban Jul 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🧹 Auto-undeploying: PR closed with active deployment. Cleaning up development environment for PR #13330.

@Pwuts

Pwuts commented Jul 30, 2026

Copy link
Copy Markdown
Member

🧹 Preview Environment Cleaned Up

All resources for PR #13330 have been removed:

  • ☸️ Kubernetes namespace deleted
  • 🗃️ Preview branch database deleted

Cleanup completed successfully.

ntindle added a commit that referenced this pull request Jul 30, 2026
Resolve org-batch vs dev conflicts (union both sides):
- v1.py update_graph: keep team_id Query param + adopt dev UpdateGraphResponse
- chat/routes.py SessionSummaryResponse: keep organization_id/team_id + expert_id
- chat/routes_test.py _make_session_info: union org/team + expert_id params
- library/model_test.py _make_library_agent: union org/team + name/description

Auth-path verified against Better Auth: RequestContext/get_request_context
unchanged by migration; orgs routes/regression + library model tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
Resolve tool_schema_test.py _CHAR_BUDGET conflict: dev's OPEN-3188 structured
agent-graph tools (50915) + our tiered-memory tool params stack in the merged
registry (measured 51980 chars) — neither branch's budget fit, so raise to
52500 (~520 headroom). Memory-tier + graphiti tests pass post-merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…emory-hold-buffer-api

Forward-merge inherits dev + tool_schema budget resolution from parent.
orgs/memory_routes_test (hold-buffer governance + auth path) passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
Clean merge. grant_db_test + grants_test pass against Better Auth.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…rant-credential-modes

Forward-merge inherits dev. grant_db + grants + credentials-owner +
auto-credentials tests pass against Better Auth.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…edentials

Clean merge. credentials_store_test (team/org creds read path) passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
Clean merge. scoped_credentials_test (team-scoped credential write) passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…m-spend

Clean merge. spend_test (per-team spend breakdown + MANAGE_BILLING gate) passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
) into feat/org-avatars-v2

Forward-merge inherits dev + spend. Resolved generated openapi.json union:
keep HeldMemory/HeldMemoryListResponse (rollup-aligned) + dev's HireRequest/
HireResult; SessionSummaryResponse gets organization_id/team_id + expert_id.
orgs/routes_test (avatar upload + org auth path) passes against Better Auth.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
Clean merge — frontend chain root.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…ecut/teams-crud

Resolve OrgTeamProvider.tsx: take Better Auth useAuth() (useSupabase removed),
keep our org/team-fetching store logic (setTeams for loadTeams). Union.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…nvites

Clean forward-merge (inherits OrgTeamProvider resolution).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…sfer

Clean forward-merge (inherits OrgTeamProvider resolution).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…ling-toggle

Clean forward-merge (inherits OrgTeamProvider resolution).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…ut/tabs

Clean forward-merge (inherits OrgTeamProvider resolution).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…-dropdown

Clean forward-merge (inherits OrgTeamProvider resolution).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…eat/team-picker-creates

Clean forward-merge (inherits OrgTeamProvider resolution).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
… feat/team-badges-lists

Clean forward-merge (inherits OrgTeamProvider resolution).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
…eat/marketplace-team-splitbutton

Resolve AddToLibraryButton.tsx: keep our SplitButton + X-Team-Id team-target
transport (handleAdd per team); Button/className still used by logged-out and
error renders. Union with dev.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
) into feat/invitation-resend-button

Clean forward-merge (inherits OrgTeamProvider + AddToLibraryButton resolutions).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
ntindle added a commit that referenced this pull request Jul 30, 2026
… into feat/agent-share-picker

Clean forward-merge (inherits OrgTeamProvider + AddToLibraryButton resolutions).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation platform/backend AutoGPT Platform - Back end platform/frontend AutoGPT Platform - Front end size/xl

Projects

Status: ✅ Done
Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants