Skip to content

feat(platform): org management UI — create org, settings, members, invitations - #13496

Open
ntindle wants to merge 11 commits into
feat/invitation-resendfrom
feat/org-workspace-pr2
Open

feat(platform): org management UI — create org, settings, members, invitations#13496
ntindle wants to merge 11 commits into
feat/invitation-resendfrom
feat/org-workspace-pr2

Conversation

@ntindle

@ntindle ntindle commented Jul 7, 2026

Copy link
Copy Markdown
Member

Note

Previously stacked on #12670 (feat/org-workspace-pr1), which has merged — dev is now merged in and the diff shows only this PR's own work.

Why

PR1 shipped org/team tenancy end-to-end in the backend, but the frontend can only switch between orgs a user already has — there is no way to create an org, manage its members, or accept an invitation. Worse, two plumbing gaps made the switcher cosmetic: no X-Org-Id header was ever sent (every request fell back to the personal org), and the pending-invitations endpoint omitted the accept token, so an invitee could not act on an invitation at all.

What

The org management UI, plus the plumbing it exposed as missing:

  • Header injection: getOrgContextHeaders() feeds X-Org-Id/X-Team-Id from the org/team store into the orval mutator; the Next proxy forwards both. Backend validates membership server-side — this is scoping, not trust.
  • Invitee tokens: GET /invitations/pending now returns UserInvitationResponse with the accept/decline token (safe — the list is filtered to the caller's own email) plus the inviting org's name/slug.
  • Create organization: dialog (design-system Dialog + Form + zod, slug auto-derived) wired into both switchers; creates, adds to the store, switches into the new org.
  • /settings/organization (new nav entry; /settings/* already protected):
    • You've been invited banner — Accept (joins + switches into the org) / Decline
    • Profile — name/slug/description (admin-gated)
    • Members — list, admin/member role select, remove with confirmation (owner + self protected)
    • Invitations — invite by email with admin toggle; pending list with revoke (admin-only)
    • Danger zone — delete org (owner-only, confirmed, falls back to personal org)
  • Switcher menus gain Manage organization (replacing the dead /org/teams link) and Create organization.

How

  • Followed the settings-page conventions (page + usePage hook + components/ sections, each with its own hook) and the api-keys dialog/form pattern; design-system components only, Phosphor -Icon imports.
  • All data access via generated orval hooks (orgs, invitations tags) — no BackendAPI usage.
  • Store stays the single source of org context: create/delete/accept flows update useOrgTeamStore and resetQueries(), same as the switcher.
  • Personal orgs render profile + a solo note (no members/invitations/danger zone); role/permission gating mirrors backend rules (owner undeletable, self unremovable).

Test plan

  • pnpm format && pnpm lint && pnpm types clean
  • pnpm test:unit: 3725 passed — 7 new page-level integration tests (owner/member/personal-org gating, invite, accept-and-switch, remove member, profile update), create-org submit flow, updated switcher suites
  • Backend pyright clean (UserInvitationResponse)
  • Live multi-member walkthrough on the PR1 preview once this deploys stacked

Deferred (future slices)

Teams CRUD UI, org avatars upload, transfers UI, org-level Stripe, aliases admin.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Jm3mCG9okfdGtAXtFaDF9A


Note

Medium Risk
Changes org tenancy headers on all API calls and expands invitation tokens in API responses; org delete/member/role flows touch access control though backend still enforces permissions.

Overview
Adds organization management in the product and fixes tenancy/invitation plumbing the UI depends on.

Backend: GET /invitations/pending now returns UserInvitationResponse (accept/decline token, org id/name/slug) instead of admin-style InvitationResponse, with Org included in the query.

Frontend plumbing: Client requests send X-Org-Id / X-Team-Id from the active org/team store (mutator + API proxy). OrgTeamProvider normalizes snake_case org list payloads into the store.

New /settings/organization (sidebar entry): invitee banner (accept/decline), profile edit, members (roles/remove), admin invitations, owner danger zone (delete). Create organization dialog on switchers; SHOW_ORG_SETTINGS feature flag defaults off. Account menu org list drops team switching; navbar switcher links to org settings and can still switch teams when present.

Accepting an invite updates the org store (including fallback when list refresh fails) before switching context. Broad integration/unit test coverage for the page and switchers.

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

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review (1)
  • dev

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: de60bbaa-32b9-45b7-80de-6dfa10a52a3e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

Adds organization settings with profile, member, invitation, deletion, and personal-organization views. Adds organization creation controls, org/team request headers, invitee-facing invitation responses, navigation wiring, and integration tests.

Changes

Organization Settings and Invitations

Layer / File(s) Summary
Invitation response contract
autogpt_platform/backend/backend/api/features/orgs/..., autogpt_platform/frontend/src/app/api/openapi.json
Adds UserInvitationResponse, includes organization data in pending invitations, updates the OpenAPI schema, and expands backend assertions.
Organization settings page
autogpt_platform/frontend/src/app/(platform)/settings/organization/..., autogpt_platform/frontend/src/app/(platform)/settings/components/SettingsSidebar/helpers.ts
Adds organization loading, error handling, conditional sections, and sidebar navigation.
Profile, invitation, and member administration
autogpt_platform/frontend/src/app/(platform)/settings/organization/components/*
Adds validated profile editing, invitation creation and revocation, member role updates, member removal, organization deletion, and current-user invitation actions.
Org/team request context
autogpt_platform/frontend/src/services/org-team/headers.ts, autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts, autogpt_platform/frontend/src/app/api/proxy/[...path]/route.ts
Builds and forwards active organization and team headers.
Organization creation and navigation
autogpt_platform/frontend/src/components/contextual/CreateOrgDialog/*, autogpt_platform/frontend/src/components/layout/Navbar/components/{OrgTeamSwitcher,AccountMenu}/...
Adds validated organization creation controls, organization management navigation, and removes team UI from the account organization list.
Integration validation
autogpt_platform/frontend/src/app/(platform)/settings/organization/__tests__/page.test.tsx
Covers organization visibility, personal organizations, invitations, acceptance, member removal, and profile updates.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant OrgTeamSwitcher
  participant CreateOrgDialog
  participant usePostV2CreateOrganization
  participant useOrgTeamStore
  User->>OrgTeamSwitcher: Select Create organization
  OrgTeamSwitcher->>CreateOrgDialog: Open dialog
  User->>CreateOrgDialog: Submit organization details
  CreateOrgDialog->>usePostV2CreateOrganization: Create organization
  usePostV2CreateOrganization-->>CreateOrgDialog: Return organization
  CreateOrgDialog->>useOrgTeamStore: Add organization and set active org
Loading

Suggested reviewers: 0ubbe, pwuts

Poem

I’m a bunny with settings to share,
New orgs and invites hop through the air.
Profiles and members line up in a row,
Accept or decline with a click and a glow.
Headers carry each team’s little trail—
Organization magic is ready to prevail!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.85% 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 summarizes the main changes: organization creation and organization management UI, including settings, members, and invitations.
Description check ✅ Passed The description directly explains the organization management UI, tenancy plumbing, invitation changes, authorization behavior, and test coverage.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Fix failing CI checks
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/org-workspace-pr2

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 platform/frontend AutoGPT Platform - Front end platform/backend AutoGPT Platform - Back end labels Jul 7, 2026
@codecov

codecov Bot commented Jul 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 80.55%. Comparing base (4f851e1) to head (af9942f).

Additional details and impacted files
@@                   Coverage Diff                   @@
##           feat/invitation-resend   #13496   +/-   ##
=======================================================
  Coverage                   80.55%   80.55%           
=======================================================
  Files                        3335     3335           
  Lines                      256343   256346    +3     
  Branches                    23643    23642    -1     
=======================================================
+ Hits                       206489   206504   +15     
+ Misses                      44544    44535    -9     
+ Partials                     5310     5307    -3     
Flag Coverage Δ
platform-backend 85.78% <100.00%> (+<0.01%) ⬆️

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

Components Coverage Δ
Platform Backend 85.78% <100.00%> (+<0.01%) ⬆️
Platform Frontend 60.31% <ø> (-0.02%) ⬇️
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.

@ntindle
ntindle marked this pull request as ready for review July 9, 2026 02:04
@ntindle
ntindle requested a review from a team as a code owner July 9, 2026 02:04
@ntindle
ntindle requested review from 0ubbe and Pwuts and removed request for a team July 9, 2026 02:04
Base automatically changed from feat/org-workspace-pr1 to dev July 9, 2026 02:04
@github-actions github-actions Bot added the conflicts Automatically applied to PRs with merge conflicts label Jul 9, 2026
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions github-actions Bot removed the conflicts Automatically applied to PRs with merge conflicts label Jul 9, 2026
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Conflicts have been resolved! 🎉 A maintainer will review the pull request shortly.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

🔍 PR Overlap Detection

This check compares your PR against all other open PRs targeting the same branch to detect potential merge conflicts early.

🔴 Merge Conflicts Detected

The following PRs have been tested and will have merge conflicts if merged after this PR. Consider coordinating with the authors.

  • fix(backend): gate org credits routes behind MANAGE_BILLING #13527 (ntindle · updated 13d ago)

    • autogpt_platform/backend/.env.default (1 conflict, ~15 lines)
    • autogpt_platform/backend/backend/api/features/chat/routes.py (10 conflicts, ~102 lines)
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py (7 conflicts, ~356 lines)
    • autogpt_platform/backend/backend/api/features/integrations/router.py (3 conflicts, ~35 lines)
    • autogpt_platform/backend/backend/api/features/integrations/webhook_ingress_test.py (1 conflict, ~142 lines)
    • autogpt_platform/backend/backend/api/features/library/_add_to_library.py (6 conflicts, ~100 lines)
    • autogpt_platform/backend/backend/api/features/library/_add_to_library_test.py (2 conflicts, ~82 lines)
    • autogpt_platform/backend/backend/api/features/library/db.py (5 conflicts, ~85 lines)
    • autogpt_platform/backend/backend/api/features/library/model_test.py (2 conflicts, ~10 lines)
    • autogpt_platform/backend/backend/api/features/library/routes/presets.py (1 conflict, ~29 lines)
    • autogpt_platform/backend/backend/api/features/library/triggers.py (4 conflicts, ~33 lines)
    • autogpt_platform/backend/backend/api/features/platform_linking/registry.py (2 conflicts, ~24 lines)
    • autogpt_platform/backend/backend/api/features/platform_linking/registry_test.py (2 conflicts, ~38 lines)
    • autogpt_platform/backend/backend/api/features/platform_linking/routes.py (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/api/features/platform_linking/routes_test.py (1 conflict, ~220 lines)
    • autogpt_platform/backend/backend/api/features/v1.py (12 conflicts, ~90 lines)
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py (9 conflicts, ~415 lines)
    • autogpt_platform/backend/backend/api/features/v1_test.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/api/rest_api.py (3 conflicts, ~13 lines)
    • autogpt_platform/backend/backend/blocks/autopilot.py (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/blocks/codex.py (2 conflicts, ~14 lines)
    • autogpt_platform/backend/backend/blocks/cost_leak_fixes_test.py (1 conflict, ~6 lines)
    • autogpt_platform/backend/backend/copilot/anthropic_rates.json (2 conflicts, ~12 lines)
    • autogpt_platform/backend/backend/copilot/baseline/service.py (3 conflicts, ~20 lines)
    • autogpt_platform/backend/backend/copilot/bot/README.md (2 conflicts, ~10 lines)
    • autogpt_platform/backend/backend/copilot/db.py (2 conflicts, ~34 lines)
    • autogpt_platform/backend/backend/copilot/db_test.py (2 conflicts, ~194 lines)
    • autogpt_platform/backend/backend/copilot/dream/apply.py (7 conflicts, ~45 lines)
    • autogpt_platform/backend/backend/copilot/dream/apply_test.py (2 conflicts, ~32 lines)
    • autogpt_platform/backend/backend/copilot/dream/batch_callbacks.py (2 conflicts, ~17 lines)
    • autogpt_platform/backend/backend/copilot/dream/orchestrator.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/copilot/executor/processor.py (4 conflicts, ~182 lines)
    • autogpt_platform/backend/backend/copilot/executor/utils.py (5 conflicts, ~25 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/context.py (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/context_test.py (2 conflicts, ~176 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/falkordb_driver.py (2 conflicts, ~47 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/ingest.py (6 conflicts, ~93 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py (3 conflicts, ~148 lines)
    • autogpt_platform/backend/backend/copilot/model.py (7 conflicts, ~48 lines)
    • autogpt_platform/backend/backend/copilot/model_router.py (1 conflict, ~138 lines)
    • autogpt_platform/backend/backend/copilot/model_test.py (1 conflict, ~160 lines)
    • autogpt_platform/backend/backend/copilot/response_model.py (1 conflict, ~7 lines)
    • autogpt_platform/backend/backend/copilot/sdk/env_test.py (1 conflict, ~74 lines)
    • autogpt_platform/backend/backend/copilot/sdk/service.py (8 conflicts, ~113 lines)
    • autogpt_platform/backend/backend/copilot/sdk/service_helpers_test.py (2 conflicts, ~766 lines)
    • autogpt_platform/backend/backend/copilot/service.py (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/copilot/stream_registry.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/copilot/stream_registry_test.py (1 conflict, ~63 lines)
    • autogpt_platform/backend/backend/copilot/tools/chat_platform.py (9 conflicts, ~70 lines)
    • autogpt_platform/backend/backend/copilot/tools/run_agent.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/copilot/tools/run_agent_test.py (3 conflicts, ~17 lines)
    • autogpt_platform/backend/backend/copilot/tools/schedule_followup.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/copilot/tools/sub_session_test.py (2 conflicts, ~13 lines)
    • autogpt_platform/backend/backend/copilot/tools/tool_schema_test.py (1 conflict, ~23 lines)
    • autogpt_platform/backend/backend/data/block_cost_config.py (2 conflicts, ~23 lines)
    • autogpt_platform/backend/backend/data/db_manager.py (5 conflicts, ~21 lines)
    • autogpt_platform/backend/backend/data/execution.py (6 conflicts, ~42 lines)
    • autogpt_platform/backend/backend/data/graph_test.py (1 conflict, ~380 lines)
    • autogpt_platform/backend/backend/data/onboarding.py (1 conflict, ~18 lines)
    • autogpt_platform/backend/backend/executor/scheduler.py (15 conflicts, ~132 lines)
    • autogpt_platform/backend/backend/executor/scheduler_unit_test.py (2 conflicts, ~370 lines)
    • autogpt_platform/backend/backend/executor/utils.py (3 conflicts, ~47 lines)
    • autogpt_platform/backend/backend/executor/utils_test.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/platform_linking/chat_test.py (1 conflict, ~66 lines)
    • autogpt_platform/backend/backend/util/feature_flag_test.py (1 conflict, ~88 lines)
    • autogpt_platform/backend/backend/util/metrics.py (1 conflict, ~62 lines)
    • autogpt_platform/backend/backend/util/metrics_test.py (2 conflicts, ~110 lines)
    • autogpt_platform/backend/backend/util/settings.py (1 conflict, ~20 lines)
    • autogpt_platform/backend/poetry.lock (1 conflict, ~5 lines)
    • autogpt_platform/backend/schema.prisma (5 conflicts, ~125 lines)
    • autogpt_platform/frontend/package.json (1 conflict, ~7 lines)
    • autogpt_platform/frontend/pnpm-lock.yaml (9 conflicts, ~54 lines)
    • autogpt_platform/frontend/src/app/(no-navbar)/link/[token]/__tests__/page.test.tsx (1 conflict, ~95 lines)
    • autogpt_platform/frontend/src/app/(no-navbar)/link/[token]/components/ReadyView.tsx (3 conflicts, ~27 lines)
    • autogpt_platform/frontend/src/app/(no-navbar)/link/[token]/components/SuccessView.tsx (1 conflict, ~8 lines)
    • autogpt_platform/frontend/src/app/(no-navbar)/onboarding/__tests__/page.test.tsx (3 conflicts, ~41 lines)
    • autogpt_platform/frontend/src/app/(platform)/PlatformChrome/PlatformChrome.tsx (3 conflicts, ~21 lines)
    • autogpt_platform/frontend/src/app/(platform)/PlatformChrome/usePlatformChrome.ts (2 conflicts, ~15 lines)
    • autogpt_platform/frontend/src/app/(platform)/admin/bots/components/helpers.ts (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/admin/layout.tsx (1 conflict, ~111 lines)
    • autogpt_platform/frontend/src/app/(platform)/auth/callback/route.ts (1 conflict, ~14 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/CopilotChatHost.tsx (2 conflicts, ~9 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/CopilotPage.tsx (4 conflicts, ~16 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/__tests__/autopilot-errors.test.tsx (1 conflict, ~9 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactCard/ArtifactCard.tsx (3 conflicts, ~15 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactPanel/components/ArtifactPanelHeader.tsx (2 conflicts, ~16 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatContainer/ChatContainer.tsx (5 conflicts, ~181 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatInput/__tests__/ChatInput.test.tsx (2 conflicts, ~10 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/ChatMessagesContainer.tsx (6 conflicts, ~474 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/CollapsedToolGroup.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/StepsCollapse.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/TaskListNotice.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/__tests__/StepsCollapse.test.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatSidebar/ChatSidebar.tsx (2 conflicts, ~77 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/ContextPanel.tsx (3 conflicts, ~47 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/ContextPanelToggle.tsx (2 conflicts, ~15 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/FilesTab/FilesTab.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/FilesTab/components/FileRow.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/ProgressTab/ProgressTab.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/EmptySession/EmptySession.tsx (4 conflicts, ~32 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/PanelResizeHandle.tsx (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/UsageLimits/UsagePopover/UsagePopover.tsx (2 conflicts, ~10 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/copilotStreamTransport.ts (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/store.ts (2 conflicts, ~18 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/useChatSession.ts (2 conflicts, ~16 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/useCopilotPage.ts (4 conflicts, ~34 lines)
    • autogpt_platform/frontend/src/app/(platform)/library/page.tsx (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/marketplace/components/FeaturedSection/FeaturedSection.tsx (2 conflicts, ~16 lines)
    • autogpt_platform/frontend/src/app/(platform)/profile/(user)/layout.tsx (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/reset-password/actions.ts (1 conflict, ~7 lines)
    • autogpt_platform/frontend/src/app/(platform)/settings/account/__tests__/main.test.tsx (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/settings/bots/__tests__/main.test.tsx (1 conflict, ~75 lines)
    • autogpt_platform/frontend/src/app/(platform)/settings/bots/components/BotCard/BotCard.tsx (3 conflicts, ~25 lines)
    • autogpt_platform/frontend/src/app/(platform)/settings/bots/components/BotCard/BotCardServerList.tsx (2 conflicts, ~12 lines)
    • autogpt_platform/frontend/src/app/(platform)/settings/bots/components/BotsList/useBotsList.ts (2 conflicts, ~22 lines)
    • autogpt_platform/frontend/src/app/(platform)/settings/components/SettingsSidebar/helpers.ts (3 conflicts, ~13 lines)
    • autogpt_platform/frontend/src/app/(public)/tour/chat/components/TourMessageList/TourMessageList.tsx (1 conflict, ~13 lines)
    • autogpt_platform/frontend/src/app/(public)/tour/chat/components/TourSidebar/components/TourSidebarHeader.tsx (1 conflict, ~20 lines)
    • autogpt_platform/frontend/src/app/api/openapi.json (22 conflicts, ~840 lines)
    • autogpt_platform/frontend/src/app/api/proxy/[...path]/__tests__/route.helpers.test.ts (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/components/contextual/CredentialsInput/__tests__/CredentialsInput.test.tsx (1 conflict, ~405 lines)
    • autogpt_platform/frontend/src/components/contextual/CredentialsInput/helpers.ts (1 conflict, ~6 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/AppSidebar.tsx (3 conflicts, ~59 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/__tests__/AppSidebar.test.tsx (1 conflict, ~10 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/components/AppSidebarHeader/AppSidebarHeader.tsx (2 conflicts, ~103 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/components/RecentChats/RecentChats.tsx (5 conflicts, ~62 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/components/RecentChats/components/RecentChatItem/RecentChatItem.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/components/SidebarSearch/SidebarSearch.tsx (2 conflicts, ~47 lines)
    • autogpt_platform/frontend/src/components/organisms/PendingReviewsList/PendingReviewsList.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/lib/__tests__/utils.test.ts (2 conflicts, ~61 lines)
    • autogpt_platform/frontend/src/lib/autogpt-server-api/types.ts (1 conflict, ~6 lines)
    • autogpt_platform/frontend/src/lib/constants.ts (1 conflict, ~6 lines)
    • autogpt_platform/frontend/src/lib/direct-upload.ts (1 conflict, ~7 lines)
    • autogpt_platform/frontend/src/mocks/mock-handlers.ts (2 conflicts, ~8 lines)
    • autogpt_platform/frontend/src/providers/agent-credentials/credentials-provider.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/services/environment/index.ts (1 conflict, ~8 lines)
    • autogpt_platform/frontend/src/services/feature-flags/__tests__/flag-defaults.test.ts (1 conflict, ~39 lines)
    • autogpt_platform/frontend/src/services/feature-flags/use-get-flag.ts (3 conflicts, ~25 lines)
    • docs/integrations/block-integrations/llm.md (8 conflicts, ~47 lines)
    • docs/integrations/block-integrations/misc.md (1 conflict, ~5 lines)
    • docs/platform/SUMMARY.md (1 conflict, ~17 lines)
  • fix(backend): harden Copilot session tenancy #13650 (ntindle · updated 10d ago)

    • .secrets.baseline (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/api/features/chat/routes.py (8 conflicts, ~127 lines)
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py (4 conflicts, ~39 lines)
    • autogpt_platform/backend/backend/api/features/experts/experts_db.py (14 conflicts, ~623 lines)
    • autogpt_platform/backend/backend/api/features/experts/experts_db_test.py (7 conflicts, ~630 lines)
    • autogpt_platform/backend/backend/api/features/experts/models.py (5 conflicts, ~221 lines)
    • autogpt_platform/backend/backend/api/features/experts/routes.py (1 conflict, ~20 lines)
    • autogpt_platform/backend/backend/api/features/experts/routes_test.py (1 conflict, ~102 lines)
    • autogpt_platform/backend/backend/api/features/experts/seed.py (2 conflicts, ~27 lines)
    • autogpt_platform/backend/backend/api/features/library/_add_to_library.py (2 conflicts, ~73 lines)
    • autogpt_platform/backend/backend/api/features/library/db.py (2 conflicts, ~51 lines)
    • autogpt_platform/backend/backend/api/features/library/triggers.py (1 conflict, ~7 lines)
    • autogpt_platform/backend/backend/api/features/orgs/db.py (2 conflicts, ~58 lines)
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py (1 conflict, ~722 lines)
    • autogpt_platform/backend/backend/api/features/search/content_handlers_integration_test.py (2 conflicts, ~29 lines)
    • autogpt_platform/backend/backend/api/features/v1.py (2 conflicts, ~17 lines)
    • autogpt_platform/backend/backend/api/rest_api.py (2 conflicts, ~20 lines)
    • autogpt_platform/backend/backend/blocks/autopilot.py (8 conflicts, ~112 lines)
    • autogpt_platform/backend/backend/copilot/baseline/service.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/copilot/db.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/copilot/db_test.py (1 conflict, ~105 lines)
    • autogpt_platform/backend/backend/copilot/dream/apply.py (7 conflicts, ~45 lines)
    • autogpt_platform/backend/backend/copilot/dream/apply_test.py (2 conflicts, ~32 lines)
    • autogpt_platform/backend/backend/copilot/dream/batch_callbacks.py (2 conflicts, ~17 lines)
    • autogpt_platform/backend/backend/copilot/dream/orchestrator.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/copilot/executor/processor.py (2 conflicts, ~60 lines)
    • autogpt_platform/backend/backend/copilot/executor/processor_test.py (4 conflicts, ~325 lines)
    • autogpt_platform/backend/backend/copilot/expert_context.py (2 conflicts, ~36 lines)
    • autogpt_platform/backend/backend/copilot/expert_context_test.py (4 conflicts, ~128 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/context.py (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/context_test.py (2 conflicts, ~176 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/ingest.py (5 conflicts, ~83 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py (1 conflict, ~14 lines)
    • autogpt_platform/backend/backend/copilot/model.py (2 conflicts, ~15 lines)
    • autogpt_platform/backend/backend/copilot/sdk/service.py (3 conflicts, ~55 lines)
    • autogpt_platform/backend/backend/copilot/sdk/service_helpers_test.py (2 conflicts, ~766 lines)
    • autogpt_platform/backend/backend/copilot/sdk/session_waiter.py (1 conflict, ~9 lines)
    • autogpt_platform/backend/backend/copilot/tools/_test_data.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py (1 conflict, ~16 lines)
    • autogpt_platform/backend/backend/copilot/tools/helpers_test.py (1 conflict, ~9 lines)
    • autogpt_platform/backend/backend/copilot/tools/run_sub_session.py (2 conflicts, ~43 lines)
    • autogpt_platform/backend/backend/copilot/tools/schedule_followup.py (2 conflicts, ~28 lines)
    • autogpt_platform/backend/backend/copilot/tools/schedule_followup_test.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/copilot/tools/sub_session_test.py (3 conflicts, ~14 lines)
    • autogpt_platform/backend/backend/copilot/turn_queue.py (5 conflicts, ~25 lines)
    • autogpt_platform/backend/backend/copilot/turn_queue_test.py (2 conflicts, ~36 lines)
    • autogpt_platform/backend/backend/data/db_manager.py (5 conflicts, ~52 lines)
    • autogpt_platform/backend/backend/data/execution.py (2 conflicts, ~17 lines)
    • autogpt_platform/backend/backend/data/execution_cost_summary.py (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/data/graph.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/data/org_credit.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/executor/manager.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/executor/scheduler.py (6 conflicts, ~185 lines)
    • autogpt_platform/backend/backend/executor/scheduler_unit_test.py (12 conflicts, ~512 lines)
    • autogpt_platform/backend/backend/executor/utils.py (7 conflicts, ~132 lines)
    • autogpt_platform/backend/backend/executor/utils_test.py (1 conflict, ~54 lines)
    • autogpt_platform/backend/backend/util/exceptions.py (1 conflict, ~9 lines)
    • autogpt_platform/backend/backend/util/metrics.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/util/metrics_test.py (2 conflicts, ~47 lines)
    • autogpt_platform/backend/poetry.lock (1 conflict, ~5 lines)
    • autogpt_platform/backend/schema.prisma (2 conflicts, ~28 lines)
    • autogpt_platform/backend/snapshots/expert_templates_list (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactCard/ArtifactCard.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactPanel/components/ArtifactPanelHeader.tsx (2 conflicts, ~16 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/ChatMessagesContainer.tsx (5 conflicts, ~329 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/CollapsedToolGroup.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/ExpertAvatar/ExpertAvatar.tsx (1 conflict, ~30 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/StepsCollapse.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/TaskListNotice.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/__tests__/StepsCollapse.test.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/ContextPanel.tsx (3 conflicts, ~47 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/ContextPanelToggle.tsx (2 conflicts, ~15 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/FilesTab/FilesTab.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/FilesTab/components/FileRow.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/ProgressTab/ProgressTab.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/EmptySession/EmptySession.tsx (1 conflict, ~13 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/copilotStreamTransport.ts (1 conflict, ~13 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/store.ts (1 conflict, ~8 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/useChatSession.ts (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/useExpertMap.ts (1 conflict, ~35 lines)
    • autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/NewAgentLibraryView.tsx (1 conflict, ~31 lines)
    • autogpt_platform/frontend/src/app/(platform)/profile/(user)/layout.tsx (1 conflict, ~7 lines)
    • autogpt_platform/frontend/src/app/(platform)/settings/components/SettingsSidebar/helpers.ts (3 conflicts, ~13 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/__tests__/main.test.tsx (5 conflicts, ~1037 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/components/EmptyTeamState.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/components/ExpertTeamCard/ExpertTeamCard.tsx (4 conflicts, ~42 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/page.tsx (6 conflicts, ~63 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/useTeamPage.ts (5 conflicts, ~121 lines)
    • autogpt_platform/frontend/src/app/(public)/tour/chat/components/TourSidebar/components/TourSidebarHeader.tsx (1 conflict, ~20 lines)
    • autogpt_platform/frontend/src/app/api/openapi.json (4 conflicts, ~66 lines)
    • autogpt_platform/frontend/src/components/contextual/CredentialsInput/helpers.ts (2 conflicts, ~10 lines)
    • autogpt_platform/frontend/src/components/contextual/CredentialsInput/useCredentialsInput.ts (2 conflicts, ~32 lines)
    • autogpt_platform/frontend/src/components/contextual/IntegrationsPanel/components/ConnectServiceDialog/components/DetailView/MethodPanel.tsx (1 conflict, ~12 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/AppSidebar.tsx (2 conflicts, ~27 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/components/AppSidebarHeader/AppSidebarHeader.tsx (2 conflicts, ~34 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/components/SidebarSearch/SidebarSearch.tsx (2 conflicts, ~47 lines)
    • autogpt_platform/frontend/src/components/layout/Navbar/components/AccountMenu/components/AccountMenuOrgList.tsx (2 conflicts, ~122 lines)
    • autogpt_platform/frontend/src/components/layout/Navbar/components/OrgTeamSwitcher/OrgTeamSwitcher.tsx (3 conflicts, ~203 lines)
    • autogpt_platform/frontend/src/components/renderers/InputRenderer/base/standard/widgets/SelectInput/SelectWidget.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/hooks/useCredentials.ts (3 conflicts, ~54 lines)
    • autogpt_platform/frontend/src/lib/oauth-popup.ts (1 conflict, ~52 lines)
    • autogpt_platform/frontend/src/services/feature-flags/__tests__/flag-defaults.test.ts (1 conflict, ~39 lines)
    • autogpt_platform/frontend/src/services/feature-flags/use-get-flag.ts (3 conflicts, ~20 lines)
    • docs/platform/SUMMARY.md (1 conflict, ~17 lines)
  • fix(backend/copilot): refresh warm context on follow-up turns #13673 (kcze · updated 8d ago)

    • .secrets.baseline (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/api/features/chat/routes.py (6 conflicts, ~86 lines)
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py (3 conflicts, ~35 lines)
    • autogpt_platform/backend/backend/api/features/experts/experts_db.py (14 conflicts, ~623 lines)
    • autogpt_platform/backend/backend/api/features/experts/experts_db_test.py (7 conflicts, ~630 lines)
    • autogpt_platform/backend/backend/api/features/experts/models.py (5 conflicts, ~221 lines)
    • autogpt_platform/backend/backend/api/features/experts/routes.py (1 conflict, ~20 lines)
    • autogpt_platform/backend/backend/api/features/experts/routes_test.py (1 conflict, ~102 lines)
    • autogpt_platform/backend/backend/api/features/experts/seed.py (2 conflicts, ~27 lines)
    • autogpt_platform/backend/backend/api/features/library/_add_to_library.py (2 conflicts, ~73 lines)
    • autogpt_platform/backend/backend/api/features/library/db.py (2 conflicts, ~51 lines)
    • autogpt_platform/backend/backend/api/features/library/triggers.py (1 conflict, ~7 lines)
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py (1 conflict, ~722 lines)
    • autogpt_platform/backend/backend/api/features/search/content_handlers_integration_test.py (2 conflicts, ~29 lines)
    • autogpt_platform/backend/backend/api/features/v1.py (2 conflicts, ~17 lines)
    • autogpt_platform/backend/backend/api/rest_api.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/blocks/autopilot.py (6 conflicts, ~101 lines)
    • autogpt_platform/backend/backend/copilot/baseline/service.py (2 conflicts, ~13 lines)
    • autogpt_platform/backend/backend/copilot/baseline/service_unit_test.py (1 conflict, ~240 lines)
    • autogpt_platform/backend/backend/copilot/db.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/copilot/db_test.py (1 conflict, ~105 lines)
    • autogpt_platform/backend/backend/copilot/dream/apply.py (7 conflicts, ~45 lines)
    • autogpt_platform/backend/backend/copilot/dream/apply_test.py (2 conflicts, ~32 lines)
    • autogpt_platform/backend/backend/copilot/dream/batch_callbacks.py (2 conflicts, ~17 lines)
    • autogpt_platform/backend/backend/copilot/dream/orchestrator.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/copilot/executor/processor.py (1 conflict, ~13 lines)
    • autogpt_platform/backend/backend/copilot/executor/processor_test.py (3 conflicts, ~20 lines)
    • autogpt_platform/backend/backend/copilot/expert_context.py (2 conflicts, ~36 lines)
    • autogpt_platform/backend/backend/copilot/expert_context_test.py (4 conflicts, ~128 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/context.py (9 conflicts, ~301 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/context_test.py (4 conflicts, ~387 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/ingest.py (5 conflicts, ~83 lines)
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py (1 conflict, ~14 lines)
    • autogpt_platform/backend/backend/copilot/model.py (3 conflicts, ~26 lines)
    • autogpt_platform/backend/backend/copilot/sdk/service.py (2 conflicts, ~12 lines)
    • autogpt_platform/backend/backend/copilot/tools/_test_data.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py (1 conflict, ~16 lines)
    • autogpt_platform/backend/backend/copilot/tools/helpers_test.py (1 conflict, ~9 lines)
    • autogpt_platform/backend/backend/copilot/tools/run_sub_session.py (2 conflicts, ~43 lines)
    • autogpt_platform/backend/backend/copilot/tools/sub_session_test.py (3 conflicts, ~14 lines)
    • autogpt_platform/backend/backend/copilot/turn_queue.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/copilot/turn_queue_test.py (1 conflict, ~31 lines)
    • autogpt_platform/backend/backend/data/db_manager.py (2 conflicts, ~32 lines)
    • autogpt_platform/backend/backend/data/execution.py (2 conflicts, ~17 lines)
    • autogpt_platform/backend/backend/data/execution_cost_summary.py (1 conflict, ~5 lines)
    • autogpt_platform/backend/backend/data/org_credit.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/executor/manager.py (1 conflict, ~8 lines)
    • autogpt_platform/backend/backend/executor/scheduler.py (4 conflicts, ~41 lines)
    • autogpt_platform/backend/backend/executor/scheduler_unit_test.py (3 conflicts, ~138 lines)
    • autogpt_platform/backend/backend/executor/utils.py (7 conflicts, ~132 lines)
    • autogpt_platform/backend/backend/executor/utils_test.py (1 conflict, ~54 lines)
    • autogpt_platform/backend/backend/util/exceptions.py (1 conflict, ~9 lines)
    • autogpt_platform/backend/backend/util/metrics.py (1 conflict, ~4 lines)
    • autogpt_platform/backend/backend/util/metrics_test.py (2 conflicts, ~47 lines)
    • autogpt_platform/backend/poetry.lock (1 conflict, ~5 lines)
    • autogpt_platform/backend/schema.prisma (2 conflicts, ~28 lines)
    • autogpt_platform/backend/snapshots/expert_templates_list (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactCard/ArtifactCard.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactPanel/components/ArtifactPanelHeader.tsx (2 conflicts, ~16 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/ChatMessagesContainer.tsx (5 conflicts, ~329 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/CollapsedToolGroup.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/ExpertAvatar/ExpertAvatar.tsx (1 conflict, ~30 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/StepsCollapse.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/TaskListNotice.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatMessagesContainer/components/__tests__/StepsCollapse.test.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/ContextPanel.tsx (3 conflicts, ~47 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/ContextPanelToggle.tsx (2 conflicts, ~15 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/FilesTab/FilesTab.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/FilesTab/components/FileRow.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/ContextPanel/components/ProgressTab/ProgressTab.tsx (deleted here, modified there)
    • autogpt_platform/frontend/src/app/(platform)/copilot/components/EmptySession/EmptySession.tsx (1 conflict, ~13 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/copilotStreamTransport.ts (1 conflict, ~13 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/store.ts (1 conflict, ~8 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/useChatSession.ts (1 conflict, ~4 lines)
    • autogpt_platform/frontend/src/app/(platform)/copilot/useExpertMap.ts (1 conflict, ~35 lines)
    • autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/NewAgentLibraryView.tsx (1 conflict, ~31 lines)
    • autogpt_platform/frontend/src/app/(platform)/profile/(user)/layout.tsx (1 conflict, ~7 lines)
    • autogpt_platform/frontend/src/app/(platform)/settings/components/SettingsSidebar/helpers.ts (3 conflicts, ~13 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/__tests__/main.test.tsx (5 conflicts, ~1037 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/components/EmptyTeamState.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/components/ExpertTeamCard/ExpertTeamCard.tsx (4 conflicts, ~42 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/page.tsx (6 conflicts, ~63 lines)
    • autogpt_platform/frontend/src/app/(platform)/team/useTeamPage.ts (5 conflicts, ~121 lines)
    • autogpt_platform/frontend/src/app/(public)/tour/chat/components/TourSidebar/components/TourSidebarHeader.tsx (1 conflict, ~20 lines)
    • autogpt_platform/frontend/src/app/api/openapi.json (4 conflicts, ~66 lines)
    • autogpt_platform/frontend/src/components/contextual/CredentialsInput/helpers.ts (2 conflicts, ~10 lines)
    • autogpt_platform/frontend/src/components/contextual/CredentialsInput/useCredentialsInput.ts (2 conflicts, ~32 lines)
    • autogpt_platform/frontend/src/components/contextual/IntegrationsPanel/components/ConnectServiceDialog/components/DetailView/MethodPanel.tsx (1 conflict, ~12 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/AppSidebar.tsx (2 conflicts, ~27 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/components/AppSidebarHeader/AppSidebarHeader.tsx (2 conflicts, ~34 lines)
    • autogpt_platform/frontend/src/components/layout/AppSidebar/components/SidebarSearch/SidebarSearch.tsx (2 conflicts, ~47 lines)
    • autogpt_platform/frontend/src/components/layout/Navbar/components/AccountMenu/components/AccountMenuOrgList.tsx (2 conflicts, ~122 lines)
    • autogpt_platform/frontend/src/components/layout/Navbar/components/OrgTeamSwitcher/OrgTeamSwitcher.tsx (3 conflicts, ~203 lines)
    • autogpt_platform/frontend/src/components/renderers/InputRenderer/base/standard/widgets/SelectInput/SelectWidget.tsx (1 conflict, ~5 lines)
    • autogpt_platform/frontend/src/hooks/useCredentials.ts (3 conflicts, ~54 lines)
    • autogpt_platform/frontend/src/lib/oauth-popup.ts (1 conflict, ~52 lines)
    • autogpt_platform/frontend/src/services/feature-flags/__tests__/flag-defaults.test.ts (1 conflict, ~39 lines)
    • autogpt_platform/frontend/src/services/feature-flags/use-get-flag.ts (3 conflicts, ~20 lines)
  • feat(frontend): naming moment for existing users #14044 (Abhi1992002 · updated 10d ago)

    • 📁 autogpt_platform/
      • backend/backend/api/features/experts/experts_db.py (15 conflicts, ~281 lines)
      • backend/backend/api/features/experts/experts_db_test.py (29 conflicts, ~674 lines)
      • backend/backend/api/features/experts/models.py (2 conflicts, ~29 lines)
      • backend/backend/api/features/experts/routes.py (8 conflicts, ~121 lines)
      • backend/backend/api/features/experts/routes_test.py (18 conflicts, ~355 lines)
      • backend/backend/api/features/library/_add_to_library.py (6 conflicts, ~59 lines)
      • backend/backend/api/features/library/db.py (6 conflicts, ~95 lines)
      • backend/backend/api/features/library/db_test.py (1 conflict, ~5 lines)
      • backend/backend/data/db_manager_test.py (1 conflict, ~10 lines)
      • backend/snapshots/expert_raise_default (3 conflicts, ~14 lines)
      • frontend/src/app/(platform)/marketplace/__tests__/experts-section.test.tsx (1 conflict, ~172 lines)
      • frontend/src/app/(platform)/marketplace/components/ExpertsSection/ExpertsSection.tsx (2 conflicts, ~10 lines)
      • frontend/src/app/(platform)/raise/__tests__/main.test.tsx (19 conflicts, ~802 lines)
      • frontend/src/app/(platform)/raise/components/AssistantBubble/AssistantBubble.tsx (1 conflict, ~5 lines)
      • frontend/src/app/(platform)/raise/components/NameStep/NameStep.tsx (3 conflicts, ~122 lines)
      • frontend/src/app/(platform)/raise/components/RaiseFlow/RaiseFlow.tsx (2 conflicts, ~306 lines)
      • frontend/src/app/(platform)/raise/components/SoulPreviewPanel/SoulPreviewPanel.tsx (1 conflict, ~167 lines)
      • frontend/src/app/(platform)/raise/helpers.test.ts (4 conflicts, ~254 lines)
      • frontend/src/app/(platform)/raise/helpers.ts (8 conflicts, ~365 lines)
      • frontend/src/app/(platform)/raise/page.tsx (1 conflict, ~23 lines)
      • frontend/src/app/(platform)/raise/useRaisePage.ts (6 conflicts, ~266 lines)
      • frontend/src/app/api/openapi.json (7 conflicts, ~256 lines)
      • frontend/src/components/organisms/VoicePicker/VoicePicker.tsx (6 conflicts, ~54 lines)
      • frontend/src/components/organisms/VoicePicker/__tests__/VoicePicker.test.tsx (1 conflict, ~11 lines)
      • frontend/src/components/organisms/VoicePicker/components/CustomVoiceOption.tsx (5 conflicts, ~38 lines)
      • frontend/src/components/organisms/VoicePicker/components/SampleCard.tsx (6 conflicts, ~35 lines)
      • frontend/src/components/organisms/VoicePicker/styles.ts (2 conflicts, ~33 lines)
  • feat(backend): add workspace file move/copy and workspace folder tools #13700 (Abhi1992002 · updated 10d ago)

    • autogpt_platform/backend/backend/copilot/tools/__init__.py (1 conflict, ~20 lines)
    • autogpt_platform/backend/backend/copilot/tools/models.py (1 conflict, ~28 lines)
    • autogpt_platform/backend/backend/copilot/tools/tool_schema_test.py (1 conflict, ~32 lines)
    • docs/integrations/block-integrations/misc.md (1 conflict, ~5 lines)
  • feat(platform): replace the email system with the Briefing/Alert/Verdict/Ops design #14003 (Torantulino · updated 32m ago)

    • 📁 autogpt_platform/backend/backend/data/
      • db_manager.py (1 conflict, ~8 lines)
  • feat(backend/api): External API v2 #12206 (Pwuts · updated 18h ago)

🟡 Medium Risk — Some Line Overlap

These PRs have some overlapping changes:

  • feat(backend): tiered memory v1 — personal/team/org graphs, provenance-labeled recall, governed shared writes #13642 (ntindle · updated just now)

    • autogpt_platform/backend/backend/copilot/graphiti/tiers_test.py: L1-428
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store.py: L3-9, L14-27, L52-57, L60-82, L164-169, L189-196, L227-243, L254-341, L361-368, L371-388
    • autogpt_platform/backend/backend/copilot/tools/graphiti_search.py: L12-25, L62-83, L94-212, L217-230, L232-257
    • autogpt_platform/backend/backend/api/features/v1.py: L9-23, L667-688, L691-700, L708-714, L720-730, L739-748, L758-767, L793-799, L814-823, L1555-1561, L1569-1575, L1579-1588, L1594-1605, L1608-1614, L1624-1633, L1641-1650
    • autogpt_platform/backend/backend/copilot/sdk/responsiveness_test.py: L97-109, L118-136, L227-233, L239-253
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • autogpt_platform/backend/backend/api/features/orgs/team_db.py: L38-108, L115-154, L198-204, L207-213, L230-243
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store_test.py: L28-52, L420-422, L439-693
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3239-3953
    • autogpt_platform/backend/backend/copilot/graphiti/context.py: L11-44, L48-55, L57-164, L192-225, L227-233
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py: L1-7, L17-43, L543-545, L558-631
    • autogpt_platform/backend/backend/api/features/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/api/features/orgs/model.py: L117-122
    • autogpt_platform/backend/backend/api/features/orgs/team_routes.py: L1-16, L23-80, L82-100, L111-124, L130-141, L143-156, L167-173, L175-201, L212-227, L236-256, L259-272, L287-295, L304-315
    • autogpt_platform/backend/backend/copilot/prompting.py: L682-704
    • autogpt_platform/backend/backend/api/features/orgs/routes.py: L1-7, L10-33, L108-113, L116-174, L239-244, L301-335
    • autogpt_platform/backend/backend/copilot/graphiti/client.py: L51-106
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py: L26-32, L490-551
    • autogpt_platform/backend/backend/copilot/graphiti/tiers.py: L1-428
    • autogpt_platform/backend/backend/api/features/orgs/regression_test.py: L3377-3417
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py: L1-155
    • autogpt_platform/backend/backend/copilot/sdk/service.py: L5379-5396, L6255-6268
    • autogpt_platform/backend/backend/api/features/store/media.py: L61-77, L167-173, L176-185
    • autogpt_platform/backend/backend/copilot/graphiti/client_test.py: L11-18, L107-158, L232-240, L278-286
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget.py: L51-67, L89-94, L100-114, L117-129, L138-149, L213-218, L228-233, L240-254, L264-270, L279-290
    • autogpt_platform/backend/backend/copilot/graphiti/ingest.py: L34-42, L245-253, L293-301, L328-335, L340-346, L410-416, L443-450, L457-532, L535-541, L557-598, L612-618
    • autogpt_platform/backend/backend/copilot/tools/tool_schema_test.py: L112-121, L165-179, L243-261, L273-284
    • autogpt_platform/backend/backend/copilot/tools/graphiti_search_test.py: L1-21, L33-56, L61-67, L82-90, L93-101, L115-117, L126-298
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • autogpt_platform/backend/backend/copilot/graphiti/context_test.py: L25-37, L40-57, L83-97, L99-160, L164-213, L218-224, L226-250, L252-260, L263-269, L273-279, L323-329, L342-348, L468-639
    • autogpt_platform/backend/backend/copilot/baseline/service.py: L1587-1594
    • autogpt_platform/backend/backend/api/features/orgs/spend_test.py: L1-183
  • feat(backend): org avatar upload (stacked on per-team spend) #13663 (ntindle · updated just now)

    • autogpt_platform/backend/backend/api/features/orgs/team_db.py: L38-108, L115-154, L198-204, L207-213, L230-243
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3239-3953
    • autogpt_platform/backend/backend/api/features/orgs/routes.py: L1-7, L10-33, L108-113, L116-174, L239-244, L301-335
    • autogpt_platform/backend/backend/api/features/orgs/regression_test.py: L3377-3417
    • autogpt_platform/backend/backend/api/features/store/media.py: L61-77, L167-173, L176-185
    • autogpt_platform/backend/backend/api/features/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/api/features/v1.py: L9-23, L667-688, L691-700, L708-714, L720-730, L739-748, L758-767, L793-799, L814-823, L1555-1561, L1569-1575, L1579-1588, L1594-1605, L1608-1614, L1624-1633, L1641-1650
    • autogpt_platform/backend/backend/api/features/orgs/model.py: L117-122
    • autogpt_platform/backend/backend/api/features/orgs/team_routes.py: L1-16, L23-80, L82-100, L111-124, L130-141, L143-156, L167-173, L175-201, L212-227, L236-256, L259-272, L287-295, L304-315
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py: L1-155
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • autogpt_platform/backend/backend/api/features/orgs/spend_test.py: L1-183
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
  • feat(backend): resend org invitation — fresh token + extended TTL #13603 (ntindle · updated 1m ago)

    • autogpt_platform/backend/backend/executor/manager_auto_credentials_test.py: L5-12, L56-64, L469-647
    • autogpt_platform/backend/backend/data/execution.py: L126-141, L209-214, L219-225, L364-369, L375-381
    • autogpt_platform/backend/backend/api/features/v1_test.py: L8-17, L20-42, L814-824, L1050-1554, L1598-1600, L2097-2181
    • autogpt_platform/backend/backend/api/features/orgs/invitation_resend_test.py: L1-346
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3239-3953
    • autogpt_platform/backend/backend/api/features/orgs/memory_model.py: L1-34
    • autogpt_platform/backend/backend/copilot/graphiti/context.py: L11-44, L48-55, L57-164, L192-225, L227-233
    • autogpt_platform/backend/backend/executor/manager_credential_lease_test.py: L156-415, L598-626, L638-655, L659-665
    • autogpt_platform/backend/backend/executor/auto_credentials.py: L5-18, L30-80, L85-117, L122-142
    • autogpt_platform/backend/backend/api/features/store/model.py: L217-228, L245-257, L277-282, L284-290
    • autogpt_platform/backend/backend/api/features/orgs/grant_db.py: L1-227
    • autogpt_platform/backend/backend/api/features/library/db_test.py: L425-433, L2249-2328
    • autogpt_platform/backend/backend/util/test.py: L3-9, L234-263
    • autogpt_platform/backend/backend/conftest.py: L49-68
    • autogpt_platform/backend/backend/data/grants_test.py: L1-565
    • autogpt_platform/backend/snapshots/sub_success: L28-35
    • autogpt_platform/backend/backend/api/rest_api.py: L42-50, L516-531, L533-543
    • autogpt_platform/backend/backend/api/features/store/media.py: L61-77, L167-173, L176-185
    • autogpt_platform/backend/backend/api/features/library/routes_test.py: L97-104, L139-149, L311-313, L316-396
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py: L2358-2365, L2372-2381, L2431-2469
    • autogpt_platform/backend/backend/api/features/library/routes/folders.py: L129-137, L140-159
    • autogpt_platform/backend/backend/copilot/tools/graphiti_search.py: L12-25, L62-83, L94-212, L217-230, L232-257
    • autogpt_platform/backend/backend/api/model.py: L43-71
    • autogpt_platform/backend/backend/api/features/v1.py: L9-23, L667-688, L691-700, L708-714, L720-730, L739-748, L758-767, L793-799, L814-823, L1555-1561, L1569-1575, L1579-1588, L1594-1605, L1608-1614, L1624-1633, L1641-1650, L1728-1733, L1739-1744, L1753-1762, L1764-1834, L1836-1845, L1879-1901, L1907-1934, L1944-1962, L2412-2417, L2437-2442, L2469-2475, L2540-2554, L2574-2594, L2621-2627, L2803-2814, L2955-2983
    • autogpt_platform/backend/backend/api/features/library/db.py: L769-789, L815-820, L822-843, L921-931, L944-966, L1250-1258, L1285-1291, L1521-1526, L1531-1536, L1554-1562, L1566-1573, L1594-1603, L2384-2395, L2425-2437, L2554-2560, L2562-2567, L2588-2594, L2596-2605, L2607-2615, L2636-2646, L2651-2658
    • autogpt_platform/backend/backend/api/features/store/routes_test.py: L582-588, L607-616
    • autogpt_platform/backend/schema.prisma: L623-629, L1404-1430, L2084-2089, L2105-2111, L2241-2246, L2263-2305
    • autogpt_platform/backend/backend/api/features/orgs/db.py: L4-10, L24-50, L341-346, L362-382
    • autogpt_platform/backend/backend/api/features/orgs/model.py: L18-27, L30-64, L70-77, L84-92, L117-122, L151-167
    • autogpt_platform/backend/backend/data/db_manager.py: L96-105, L370-381, L604-617, L722-727, L730-737
    • autogpt_platform/backend/snapshots/invitation_resend_response: L1-7
    • autogpt_platform/backend/backend/api/features/orgs/memory_db.py: L1-230
    • autogpt_platform/backend/backend/copilot/graphiti/client.py: L51-106
    • autogpt_platform/backend/backend/api/features/orgs/invitation_routes.py: L3-17, L29-34, L37-57, L94-108, L122-142, L162-163, L165-168, L170-258
    • autogpt_platform/backend/backend/copilot/graphiti/tiers.py: L1-428
    • autogpt_platform/backend/backend/copilot/sdk/service.py: L5379-5396, L6255-6268
    • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py: L1-117
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget.py: L51-67, L89-94, L100-114, L117-129, L138-149, L213-218, L228-233, L240-254, L264-270, L279-290
    • autogpt_platform/backend/backend/copilot/tools/graphiti_search_test.py: L1-21, L33-56, L61-67, L82-90, L93-101, L115-117, L126-298
    • autogpt_platform/backend/backend/copilot/graphiti/tiers_test.py: L1-428
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store.py: L3-9, L14-27, L52-57, L60-82, L164-169, L189-196, L227-243, L254-341, L361-368, L371-388
    • autogpt_platform/backend/backend/api/features/library/model.py: L42-49, L61-70, L227-239, L402-407, L409-416
    • autogpt_platform/backend/backend/data/execution_stats_test.py: L6-17, L24-35, L99-101, L105-119
    • autogpt_platform/backend/backend/copilot/sdk/responsiveness_test.py: L97-109, L118-136, L227-233, L239-253
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes.py: L1-78
    • autogpt_platform/backend/backend/executor/utils.py: L5-20, L44-51, L399-409, L413-424, L444-472, L479-492, L494-507, L510-552, L567-602, L633-648, L659-665, L677-682, L696-701, L717-731, L736-762, L773-812, L847-862, L872-884, L891-897, L915-921, L929-938, L947-952, L998-1004, L1011-1021, L1054-1069, L1078-1084, L1193-1198, L1275-1280, L1287-1292, L1324-1361, L1391-1396, L1407-1412, L1433-1488, L1520-1538, L1544-1563, L1573-1579, L1609-1626, L1637-1645, L1666-1673, L1686-1694, L1696-1747
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py: L1-7, L17-43, L543-545, L558-631
    • autogpt_platform/backend/backend/api/features/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/api/features/orgs/team_routes.py: L1-16, L23-80, L82-100, L111-124, L130-141, L143-156, L167-173, L175-201, L212-227, L236-256, L259-272, L287-295, L304-315
    • autogpt_platform/backend/backend/copilot/prompting.py: L682-704
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py: L26-32, L490-551
    • autogpt_platform/backend/backend/api/features/orgs/regression_test.py: L202-212, L215-226, L1061-1077, L1215-1220, L1224-1232, L3377-3429
    • autogpt_platform/backend/backend/api/features/chat/routes.py: L425-432, L544-553
    • autogpt_platform/backend/backend/executor/utils_credentials_owner_test.py: L1-363
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py: L1-155
    • autogpt_platform/backend/backend/data/graph.py: L5-11, L28-34, L1419-1453, L1738-1757, L1767-1807
    • autogpt_platform/backend/backend/api/features/search/content_handlers_integration_test.py: L22-44, L46-53
    • autogpt_platform/backend/snapshots/lib_agts_search: L40-47, L92-101
    • autogpt_platform/backend/backend/data/grants.py: L1-239
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes_test.py: L1-430
    • autogpt_platform/backend/backend/copilot/tools/tool_schema_test.py: L112-121, L165-179, L243-261, L273-284
    • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py: L1-299
    • autogpt_platform/backend/backend/copilot/graphiti/context_test.py: L25-37, L40-57, L83-97, L99-160, L164-213, L218-224, L226-250, L252-260, L263-269, L273-279, L323-329, L342-348, L468-639
    • autogpt_platform/backend/backend/executor/utils_test.py: L11-17, L411-421, L493-592, L654-662, L890-895, L928-933, L935-940, L956-963, L987-996, L1029-1035, L1037-1043, L1059-1073, L1250-1255, L1360-1366, L1961-1966, L2008-2016, L2020-2025, L2072-2081, L2090-2100, L2102-2107, L2113-2119, L2123-2133, L2137-2151, L2215-2227, L2229-2235, L2241-2261, L2288-2452, L2706-2708, L3007-3060
    • autogpt_platform/backend/backend/api/features/library/routes/agents.py: L215-239
    • autogpt_platform/backend/backend/api/features/orgs/team_db.py: L38-108, L115-154, L198-204, L207-213, L230-243
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store_test.py: L28-52, L420-422, L439-693
    • autogpt_platform/backend/backend/api/features/library/model_test.py: L13-20, L30-39, L105-145
    • autogpt_platform/backend/backend/api/features/orgs/grant_model.py: L1-77
    • autogpt_platform/backend/backend/data/db_manager_test.py: L20-29
    • autogpt_platform/backend/backend/api/features/orgs/routes.py: L1-7, L10-33, L104-175, L239-244, L301-336
    • autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql: L1-45
    • autogpt_platform/backend/backend/api/features/store/model_test.py: L1-58
    • autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py: L352-364
    • autogpt_platform/backend/backend/data/graph_test.py: L60-81, L1194-1199, L1210-1262, L1483-1488, L1546-1598
    • autogpt_platform/backend/backend/copilot/graphiti/client_test.py: L11-18, L107-158, L232-240, L278-286
    • autogpt_platform/backend/backend/executor/manager.py: L102-108, L212-263, L302-314, L352-365, L370-376, L380-392, L398-454, L464-485, L489-509, L515-549, L562-569, L577-584
    • autogpt_platform/backend/backend/copilot/graphiti/ingest.py: L34-42, L245-253, L293-301, L328-335, L340-346, L410-416, L443-450, L457-532, L535-541, L557-598, L612-618
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • autogpt_platform/backend/backend/copilot/baseline/service.py: L1587-1594
    • autogpt_platform/backend/backend/api/features/orgs/spend_test.py: L1-183
  • feat(backend): agent-graph grants — share with teams (SECRT-2448, v1) #13599 (ntindle · updated 1m ago)

    • autogpt_platform/backend/backend/copilot/graphiti/tiers_test.py: L1-428
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store.py: L3-9, L14-27, L52-57, L60-82, L164-169, L189-196, L227-243, L254-341, L361-368, L371-388
    • autogpt_platform/backend/backend/copilot/tools/graphiti_search.py: L12-25, L62-83, L94-212, L217-230, L232-257
    • autogpt_platform/backend/backend/api/model.py: L43-71
    • autogpt_platform/backend/backend/api/features/library/model.py: L42-49, L61-70, L227-239, L402-407, L409-416
    • autogpt_platform/backend/backend/api/features/v1.py: L9-23, L667-688, L691-700, L708-714, L720-730, L739-748, L758-767, L793-799, L814-823, L1555-1561, L1569-1575, L1579-1588, L1594-1605, L1608-1614, L1624-1633, L1641-1650, L1728-1733, L1739-1744, L1753-1762, L1764-1834, L1836-1845, L1879-1901, L1907-1934, L1944-1962, L2412-2417, L2437-2442, L2469-2475, L2540-2554, L2574-2594, L2621-2627, L2803-2814, L2955-2983
    • autogpt_platform/backend/backend/api/features/library/db.py: L769-789, L815-820, L822-843, L921-931, L944-966, L1250-1258, L1285-1291, L1521-1526, L1531-1536, L1554-1562, L1566-1573, L1594-1603, L2384-2395, L2425-2437, L2554-2560, L2562-2567, L2588-2594, L2596-2605, L2607-2615, L2636-2646, L2651-2658
    • autogpt_platform/backend/backend/copilot/sdk/responsiveness_test.py: L97-109, L118-136, L227-233, L239-253
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes.py: L1-78
    • autogpt_platform/backend/backend/api/features/v1_test.py: L8-17, L20-42, L814-824, L1050-1554, L1598-1600, L2097-2181
    • autogpt_platform/backend/backend/api/features/library/routes/agents.py: L215-239
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • autogpt_platform/backend/backend/api/features/orgs/team_db.py: L38-108, L115-154, L198-204, L207-213, L230-243
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store_test.py: L28-52, L420-422, L439-693
    • autogpt_platform/backend/backend/api/features/store/routes_test.py: L582-588, L607-616
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3239-3953
    • autogpt_platform/backend/backend/api/features/orgs/memory_model.py: L1-34
    • autogpt_platform/backend/schema.prisma: L623-629, L1404-1430, L2084-2089, L2105-2111, L2241-2246, L2263-2305
    • autogpt_platform/backend/backend/copilot/graphiti/context.py: L11-44, L48-55, L57-164, L192-225, L227-233
    • autogpt_platform/backend/backend/api/features/library/model_test.py: L13-20, L30-39, L105-145
    • autogpt_platform/backend/backend/api/features/orgs/db.py: L4-10, L24-50, L341-346, L362-382
    • autogpt_platform/backend/backend/api/features/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/api/features/orgs/grant_model.py: L1-77
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py: L1-7, L17-43, L543-545, L558-631
    • autogpt_platform/backend/backend/api/features/orgs/model.py: L18-27, L30-64, L70-77, L84-92, L117-122, L151-167
    • autogpt_platform/backend/backend/api/features/orgs/team_routes.py: L1-16, L23-80, L82-100, L111-124, L130-141, L143-156, L167-173, L175-201, L212-227, L236-256, L259-272, L287-295, L304-315
    • autogpt_platform/backend/backend/copilot/prompting.py: L682-704
    • autogpt_platform/backend/backend/api/features/orgs/grant_db.py: L1-170
    • autogpt_platform/backend/backend/api/features/orgs/routes.py: L1-7, L10-33, L104-175, L239-244, L301-336
    • autogpt_platform/backend/backend/api/features/store/model.py: L217-228, L245-257, L277-282, L284-290
    • autogpt_platform/backend/backend/api/features/orgs/memory_db.py: L1-230
    • autogpt_platform/backend/backend/api/features/library/db_test.py: L425-433, L2249-2328
    • autogpt_platform/backend/backend/util/test.py: L3-9, L234-263
    • autogpt_platform/backend/backend/conftest.py: L49-68
    • autogpt_platform/backend/backend/copilot/graphiti/client.py: L51-106
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py: L26-32, L490-551
    • autogpt_platform/backend/backend/copilot/graphiti/tiers.py: L1-428
    • autogpt_platform/backend/backend/api/features/orgs/regression_test.py: L202-212, L215-226, L1061-1077, L1215-1220, L1224-1232, L3377-3429
    • autogpt_platform/backend/backend/data/grants_test.py: L1-148
    • autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql: L1-45
    • autogpt_platform/backend/snapshots/sub_success: L28-35
    • autogpt_platform/backend/backend/api/features/store/model_test.py: L1-58
    • autogpt_platform/backend/backend/api/features/chat/routes.py: L425-432, L544-553
    • autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py: L352-364
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py: L1-155
    • autogpt_platform/backend/backend/api/rest_api.py: L42-50, L516-531, L533-543
    • autogpt_platform/backend/backend/data/graph_test.py: L60-81
    • autogpt_platform/backend/backend/copilot/sdk/service.py: L5379-5396, L6255-6268
    • autogpt_platform/backend/backend/api/features/search/content_handlers_integration_test.py: L22-44, L46-53
    • autogpt_platform/backend/backend/api/features/store/media.py: L61-77, L167-173, L176-185
    • autogpt_platform/backend/backend/copilot/graphiti/client_test.py: L11-18, L107-158, L232-240, L278-286
    • autogpt_platform/backend/backend/data/grants.py: L1-85
    • autogpt_platform/backend/backend/api/features/library/routes_test.py: L97-104, L139-149, L311-313, L316-396
    • autogpt_platform/backend/backend/data/graph.py: L5-11, L28-34, L1419-1449, L1738-1757, L1767-1804
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py: L2358-2365, L2372-2381, L2431-2469
    • autogpt_platform/backend/backend/api/features/library/routes/folders.py: L129-137, L140-159
    • autogpt_platform/backend/snapshots/lib_agts_search: L40-47, L92-101
    • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py: L1-117
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes_test.py: L1-430
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget.py: L51-67, L89-94, L100-114, L117-129, L138-149, L213-218, L228-233, L240-254, L264-270, L279-290
    • autogpt_platform/backend/backend/copilot/graphiti/ingest.py: L34-42, L245-253, L293-301, L328-335, L340-346, L410-416, L443-450, L457-532, L535-541, L557-598, L612-618
    • autogpt_platform/backend/backend/copilot/tools/tool_schema_test.py: L112-121, L165-179, L243-261, L273-284
    • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py: L1-199
    • autogpt_platform/backend/backend/copilot/tools/graphiti_search_test.py: L1-21, L33-56, L61-67, L82-90, L93-101, L115-117, L126-298
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • autogpt_platform/backend/backend/copilot/graphiti/context_test.py: L25-37, L40-57, L83-97, L99-160, L164-213, L218-224, L226-250, L252-260, L263-269, L273-279, L323-329, L342-348, L468-639
    • autogpt_platform/backend/backend/copilot/baseline/service.py: L1587-1594
    • autogpt_platform/backend/backend/api/features/orgs/spend_test.py: L1-183
  • feat(backend): honor team context on api-key/fork/folder creates + team_id on list responses #13640 (ntindle · updated 1m ago)

    • autogpt_platform/backend/backend/copilot/graphiti/tiers_test.py: L1-428
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store.py: L3-9, L14-27, L52-57, L60-82, L164-169, L189-196, L227-243, L254-341, L361-368, L371-388
    • autogpt_platform/backend/backend/copilot/tools/graphiti_search.py: L12-25, L62-83, L94-212, L217-230, L232-257
    • autogpt_platform/backend/backend/api/model.py: L43-71
    • autogpt_platform/backend/backend/api/features/library/model.py: L42-49, L61-70, L227-239, L402-407, L409-416
    • autogpt_platform/backend/backend/api/features/v1.py: L9-23, L667-688, L691-700, L708-714, L720-730, L739-748, L758-767, L793-799, L814-823, L1555-1561, L1569-1575, L1579-1588, L1594-1605, L1608-1614, L1624-1633, L1641-1650, L1728-1733, L1739-1744, L1753-1762, L1764-1834, L1836-1845, L1879-1901, L1907-1934, L1944-1962, L2412-2417, L2437-2442, L2469-2475, L2540-2554, L2574-2594, L2621-2627, L2803-2814, L2955-2983
    • autogpt_platform/backend/backend/api/features/library/db.py: L769-789, L815-820, L822-843, L921-931, L944-966, L1250-1258, L1285-1291, L1521-1526, L1531-1536, L1554-1562, L1566-1573, L1594-1603, L2384-2395, L2425-2437, L2554-2560, L2562-2567, L2588-2594, L2596-2605, L2607-2615, L2636-2646, L2651-2658
    • autogpt_platform/backend/backend/copilot/sdk/responsiveness_test.py: L97-109, L118-136, L227-233, L239-253
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes.py: L1-78
    • autogpt_platform/backend/backend/api/features/v1_test.py: L8-17, L20-42, L814-824, L1050-1554, L1598-1600, L2097-2181
    • autogpt_platform/backend/backend/api/features/library/routes/agents.py: L215-239
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • autogpt_platform/backend/backend/api/features/orgs/team_db.py: L38-108, L115-154, L198-204, L207-213, L230-243
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store_test.py: L28-52, L420-422, L439-693
    • autogpt_platform/backend/backend/api/features/store/routes_test.py: L582-588, L607-616
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3239-3953
    • autogpt_platform/backend/backend/api/features/orgs/memory_model.py: L1-34
    • autogpt_platform/backend/backend/copilot/graphiti/context.py: L11-44, L48-55, L57-164, L192-225, L227-233
    • autogpt_platform/backend/backend/api/features/library/model_test.py: L13-20, L30-39, L105-145
    • autogpt_platform/backend/backend/api/features/orgs/db.py: L4-10, L24-50, L341-346, L362-382
    • autogpt_platform/backend/backend/api/features/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py: L1-7, L17-43, L543-545, L558-631
    • autogpt_platform/backend/backend/api/features/orgs/model.py: L18-27, L30-64, L70-77, L84-92, L117-122, L151-167
    • autogpt_platform/backend/backend/api/features/orgs/team_routes.py: L1-16, L23-80, L82-100, L111-124, L130-141, L143-156, L167-173, L175-201, L212-227, L236-256, L259-272, L287-295, L304-315
    • autogpt_platform/backend/backend/copilot/prompting.py: L682-704
    • autogpt_platform/backend/backend/api/features/store/model.py: L217-228, L245-257, L277-282, L284-290
    • autogpt_platform/backend/backend/api/features/orgs/routes.py: L1-7, L10-33, L104-175, L239-244, L301-336
    • autogpt_platform/backend/backend/api/features/orgs/memory_db.py: L1-230
    • autogpt_platform/backend/backend/api/features/library/db_test.py: L425-433, L2249-2328
    • autogpt_platform/backend/backend/util/test.py: L3-9, L234-263
    • autogpt_platform/backend/backend/conftest.py: L49-68
    • autogpt_platform/backend/backend/copilot/graphiti/client.py: L51-106
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py: L26-32, L490-551
    • autogpt_platform/backend/backend/copilot/graphiti/tiers.py: L1-428
    • autogpt_platform/backend/backend/api/features/orgs/regression_test.py: L1061-1071, L1215-1220, L1224-1226, L3377-3423
    • autogpt_platform/backend/snapshots/sub_success: L28-35
    • autogpt_platform/backend/backend/api/features/store/model_test.py: L1-58
    • autogpt_platform/backend/backend/api/features/chat/routes.py: L425-432, L544-553
    • autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py: L352-364
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py: L1-155
    • autogpt_platform/backend/backend/api/rest_api.py: L43-49, L516-527
    • autogpt_platform/backend/backend/copilot/sdk/service.py: L5379-5396, L6255-6268
    • autogpt_platform/backend/backend/api/features/search/content_handlers_integration_test.py: L22-44, L46-53
    • autogpt_platform/backend/backend/api/features/store/media.py: L61-77, L167-173, L176-185
    • autogpt_platform/backend/backend/copilot/graphiti/client_test.py: L11-18, L107-158, L232-240, L278-286
    • autogpt_platform/backend/snapshots/lib_agts_search: L40-47, L92-101
    • autogpt_platform/backend/backend/api/features/library/routes_test.py: L97-104, L139-149, L311-313, L316-396
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py: L2358-2365, L2372-2381, L2431-2469
    • autogpt_platform/backend/backend/api/features/library/routes/folders.py: L129-137, L140-159
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes_test.py: L1-430
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget.py: L51-67, L89-94, L100-114, L117-129, L138-149, L213-218, L228-233, L240-254, L264-270, L279-290
    • autogpt_platform/backend/backend/copilot/graphiti/ingest.py: L34-42, L245-253, L293-301, L328-335, L340-346, L410-416, L443-450, L457-532, L535-541, L557-598, L612-618
    • autogpt_platform/backend/backend/copilot/tools/tool_schema_test.py: L112-121, L165-179, L243-261, L273-284
    • autogpt_platform/backend/backend/copilot/tools/graphiti_search_test.py: L1-21, L33-56, L61-67, L82-90, L93-101, L115-117, L126-298
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • autogpt_platform/backend/backend/copilot/graphiti/context_test.py: L25-37, L40-57, L83-97, L99-160, L164-213, L218-224, L226-250, L252-260, L263-269, L273-279, L323-329, L342-348, L468-639
    • autogpt_platform/backend/backend/copilot/baseline/service.py: L1587-1594
    • autogpt_platform/backend/backend/api/features/orgs/spend_test.py: L1-183

🟢 Low Risk — File Overlap Only

These PRs touch the same files but different sections (click to expand)

Summary: 7 conflict(s), 5 medium risk, 7 low risk (out of 19 PRs with file overlap)


Auto-generated on push. Ignores: openapi.json, lock files.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (5)
autogpt_platform/backend/backend/api/features/orgs/model.py (1)

187-188: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a type annotation for the inv parameter in from_db.

The inv parameter lacks a type hint, which is a type-safety gap. The Prisma model type (e.g., prisma.models.OrgInvitation) should be used so static analysis can verify attribute access.

♻️ Proposed type annotation
-    def from_db(inv) -> "UserInvitationResponse":
+    def from_db(inv: prisma.models.OrgInvitation) -> "UserInvitationResponse":
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@autogpt_platform/backend/backend/api/features/orgs/model.py` around lines 187
- 188, The `UserInvitationResponse.from_db` static method currently accepts an
untyped `inv` parameter, creating a type-safety gap. Add a concrete Prisma model
type annotation for `inv` in `from_db` (for example, the `OrgInvitation` model
from `prisma.models`) so static analysis can validate the attribute access used
inside the method. Keep the change aligned with the existing
`UserInvitationResponse` implementation and related invitation model fields.

Source: Coding guidelines

autogpt_platform/frontend/src/app/(platform)/settings/organization/components/MyInvitationsSection/MyInvitationsSection.tsx (1)

41-55: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Shared loading state across all invitation rows.

isAccepting and isDeclining are global mutation flags from the hook — when a user clicks Accept on one invitation, all Accept buttons across every row show loading simultaneously (and likewise for Decline). Consider tracking the specific invitation being acted on to scope the loading indicator to the correct row.

♻️ Proposed approach: track active invitation ID
 export function useMyInvitationsSection() {
   const { setActiveOrg } = useOrgTeamStore();
+  const [acceptingId, setAcceptingId] = useState<string | null>(null);
+  const [decliningId, setDecliningId] = useState<string | null>(null);

   // ...

   async function handleAccept(invitation: UserInvitationResponse) {
+    setAcceptingId(invitation.id);
     await acceptInvitation({ token: invitation.token });
+    setAcceptingId(null);
     // ...
   }

   async function handleDecline(invitation: UserInvitationResponse) {
+    setDecliningId(invitation.id);
     await declineInvitation({ token: invitation.token });
+    setDecliningId(null);
     // ...
   }

   return {
     invitations: invitationsQuery.data ?? [],
-    isAccepting,
-    isDeclining,
+    acceptingId,
+    decliningId,
     handleAccept,
     handleDecline,
   };
 }

Then in the component:

-            <Button
-              size="small"
-              loading={isAccepting}
-              onClick={() => handleAccept(invitation)}
-            >
+            <Button
+              size="small"
+              loading={acceptingId === invitation.id}
+              onClick={() => handleAccept(invitation)}
+            >
               Accept
             </Button>
             <Button
               variant="secondary"
               size="small"
-              loading={isDeclining}
+              loading={decliningId === invitation.id}
               onClick={() => handleDecline(invitation)}
             >
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/components/MyInvitationsSection/MyInvitationsSection.tsx
around lines 41 - 55, The Accept/Decline buttons in MyInvitationsSection are
using shared mutation flags, so loading state appears on every row instead of
just the clicked invitation. Update the invitation action flow in
MyInvitationsSection and its handlers (handleAccept, handleDecline) to track the
active invitation ID locally, and derive each Button’s loading prop from whether
that row matches the current active invitation. Reset the active ID when the
mutation finishes or fails so only the targeted row shows loading.
autogpt_platform/frontend/src/app/(platform)/settings/organization/__tests__/page.test.tsx (1)

1-268: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a test for the organization deletion flow.

The danger zone section performs an irreversible deletion, updates the org store, switches the active org, and resets queries — none of which are covered by the existing tests. Would you like me to generate a test that verifies the delete confirmation dialog, successful deletion, and active org switching?

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/__tests__/page.test.tsx
around lines 1 - 268, The OrganizationSettingsPage test suite is missing
coverage for the danger-zone deletion flow, including confirmation, store
updates, active org switching, and query resets. Add a test alongside the
existing OrganizationSettingsPage cases that renders the delete UI, opens the
confirmation dialog from the org-danger-zone section, confirms deletion, and
asserts the deletion handler is called while useOrgTeamStore updates the active
org and resets state as expected.

Source: Learnings

autogpt_platform/frontend/src/app/(platform)/settings/organization/components/DangerZoneSection/DangerZoneSection.tsx (2)

20-110: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract logic to useDangerZoneSection.ts for consistency with other sections.

OrgProfileSection, MembersSection, and InvitationsSection each have a dedicated use<Component>.ts hook, but DangerZoneSection keeps state, mutation setup, and the handler inline. Extracting these to useDangerZoneSection.ts follows the ComponentName.tsx + useComponentName.ts pattern and keeps the render function under the ~50-line guideline.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/components/DangerZoneSection/DangerZoneSection.tsx
around lines 20 - 110, DangerZoneSection currently keeps its local state,
mutation setup, and delete handler inline instead of following the same
component/hook split used by OrgProfileSection, MembersSection, and
InvitationsSection. Extract the logic from DangerZoneSection into a new
useDangerZoneSection hook, moving the org deletion mutation, confirmation state,
and handleDeleteConfirmed behavior there, then have DangerZoneSection consume
the hook so the component stays focused on rendering and matches the existing
Component + useComponent pattern.

Source: Coding guidelines


49-49: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Avoid resetting all queries — target org-related queries only.

resetQueries() with no arguments resets every cached query in the app, causing unnecessary refetches and loading flicker in unrelated features. Invalidate or remove only organization-scoped queries instead.

♻️ Proposed fix
-    getQueryClient().resetQueries();
+    const queryClient = getQueryClient();
+    queryClient.removeQueries({ queryKey: ["orgs", org.id] });
+    queryClient.invalidateQueries({ queryKey: ["orgs"] });

Verify the exact query-key structure used by the generated hooks and adjust the key accordingly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/components/DangerZoneSection/DangerZoneSection.tsx
at line 49, The DangerZoneSection cleanup currently calls
getQueryClient().resetQueries() with no key, which resets the entire app cache.
Update the organization deletion flow in DangerZoneSection to target only
org-scoped queries by using the exact query-key structure from the generated
hooks, and invalidate or remove only those organization-related entries instead
of resetting everything.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/components/DangerZoneSection/DangerZoneSection.tsx:
- Around line 41-52: Wrap the delete flow in
DangerZoneSection.handleDeleteConfirmed with try/catch so failures from
deleteOrg({ orgId: org.id }) do not become unhandled promise rejections. Keep
the existing success path (updating orgs, setting active org, resetting queries,
showing the success toast, closing the modal) inside the try block, and handle
the error in the catch path with appropriate failure handling.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/components/InvitationsSection/InvitationsSection.tsx:
- Around line 109-116: The revoke action currently uses a single shared loading
flag, so every Revoke button in InvitationsSection shows loading when one
invitation is being revoked. Update the hook in useInvitationsSection.ts to
track the specific invitation ID being revoked instead of a global boolean, and
expose that state for the UI. Then update InvitationsSection and the Button
rendering to compare each invitation’s id against the revoking ID so only the
matching row shows loading while handleRevoke(invitation) is in progress.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/components/OrgProfileSection/useOrgProfileSection.ts:
- Around line 81-87: The `handleSubmit` update in `useOrgProfileSection` is
mapping over a stale `orgs` snapshot captured from the store, which can
overwrite newer org changes. Update the `setOrgs` call to use the latest store
state at write time, preferably via a functional updater if `setOrgs` supports
it, or by reading the current org list from the store immediately before
applying the `orgs.map` merge. Keep the merge logic keyed on `updated.id` so
only the matching org gets `name` and `slug` refreshed.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/useOrganizationSettingsPage.ts:
- Around line 37-40: The organization settings state only treats orgQuery
failures as errors, so update useOrganizationSettingsPage to include
membersQuery.isError in the returned error state and surface the
membersQuery.error when appropriate. Then adjust the ErrorCard retry handling in
page.tsx so the retry action calls both refetchOrg and refetchMembers, using the
existing useOrganizationSettingsPage and page-level refetch helpers to locate
the change.

In
`@autogpt_platform/frontend/src/components/contextual/CreateOrgDialog/schema.ts`:
- Around line 27-33: The slugify helper in CreateOrgDialog/schema.ts can return
a value ending with a dash after truncation, which then fails the org slug
validation regex. Update slugify so the final result is re-trimmed after the
slice operation, ensuring any trailing dashes introduced by truncation are
removed before validation.

---

Nitpick comments:
In `@autogpt_platform/backend/backend/api/features/orgs/model.py`:
- Around line 187-188: The `UserInvitationResponse.from_db` static method
currently accepts an untyped `inv` parameter, creating a type-safety gap. Add a
concrete Prisma model type annotation for `inv` in `from_db` (for example, the
`OrgInvitation` model from `prisma.models`) so static analysis can validate the
attribute access used inside the method. Keep the change aligned with the
existing `UserInvitationResponse` implementation and related invitation model
fields.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/__tests__/page.test.tsx:
- Around line 1-268: The OrganizationSettingsPage test suite is missing coverage
for the danger-zone deletion flow, including confirmation, store updates, active
org switching, and query resets. Add a test alongside the existing
OrganizationSettingsPage cases that renders the delete UI, opens the
confirmation dialog from the org-danger-zone section, confirms deletion, and
asserts the deletion handler is called while useOrgTeamStore updates the active
org and resets state as expected.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/components/DangerZoneSection/DangerZoneSection.tsx:
- Around line 20-110: DangerZoneSection currently keeps its local state,
mutation setup, and delete handler inline instead of following the same
component/hook split used by OrgProfileSection, MembersSection, and
InvitationsSection. Extract the logic from DangerZoneSection into a new
useDangerZoneSection hook, moving the org deletion mutation, confirmation state,
and handleDeleteConfirmed behavior there, then have DangerZoneSection consume
the hook so the component stays focused on rendering and matches the existing
Component + useComponent pattern.
- Line 49: The DangerZoneSection cleanup currently calls
getQueryClient().resetQueries() with no key, which resets the entire app cache.
Update the organization deletion flow in DangerZoneSection to target only
org-scoped queries by using the exact query-key structure from the generated
hooks, and invalidate or remove only those organization-related entries instead
of resetting everything.

In
`@autogpt_platform/frontend/src/app/`(platform)/settings/organization/components/MyInvitationsSection/MyInvitationsSection.tsx:
- Around line 41-55: The Accept/Decline buttons in MyInvitationsSection are
using shared mutation flags, so loading state appears on every row instead of
just the clicked invitation. Update the invitation action flow in
MyInvitationsSection and its handlers (handleAccept, handleDecline) to track the
active invitation ID locally, and derive each Button’s loading prop from whether
that row matches the current active invitation. Reset the active ID when the
mutation finishes or fails so only the targeted row shows loading.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d32ef363-ece9-490d-9a7b-1b4807239cec

📥 Commits

Reviewing files that changed from the base of the PR and between 0a9f185 and 84e8d9e.

📒 Files selected for processing (26)
  • autogpt_platform/backend/backend/api/features/orgs/invitation_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/model.py
  • autogpt_platform/frontend/src/app/(platform)/settings/components/SettingsSidebar/helpers.ts
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/__tests__/page.test.tsx
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/DangerZoneSection/DangerZoneSection.tsx
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/InvitationsSection/InvitationsSection.tsx
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/InvitationsSection/useInvitationsSection.ts
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/MembersSection/MembersSection.tsx
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/MembersSection/useMembersSection.ts
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/MyInvitationsSection/MyInvitationsSection.tsx
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/MyInvitationsSection/useMyInvitationsSection.ts
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/OrgProfileSection/OrgProfileSection.tsx
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/components/OrgProfileSection/useOrgProfileSection.ts
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/page.tsx
  • autogpt_platform/frontend/src/app/(platform)/settings/organization/useOrganizationSettingsPage.ts
  • autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts
  • autogpt_platform/frontend/src/app/api/openapi.json
  • autogpt_platform/frontend/src/app/api/proxy/[...path]/route.ts
  • autogpt_platform/frontend/src/components/contextual/CreateOrgDialog/CreateOrgDialog.tsx
  • autogpt_platform/frontend/src/components/contextual/CreateOrgDialog/schema.ts
  • autogpt_platform/frontend/src/components/contextual/CreateOrgDialog/useCreateOrgDialog.ts
  • autogpt_platform/frontend/src/components/layout/AppSidebar/components/SidebarOrgSwitcher/SidebarOrgSwitcher.tsx
  • autogpt_platform/frontend/src/components/layout/AppSidebar/components/SidebarOrgSwitcher/__tests__/SidebarOrgSwitcher.test.tsx
  • autogpt_platform/frontend/src/components/layout/Navbar/components/OrgTeamSwitcher/OrgTeamSwitcher.tsx
  • autogpt_platform/frontend/src/components/layout/Navbar/components/OrgTeamSwitcher/__tests__/OrgTeamSwitcher.test.tsx
  • autogpt_platform/frontend/src/services/org-team/headers.ts

@ntindle

ntindle commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

!deploy

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Deploying PR #13496 to development environment...

@0ubbe

0ubbe commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Preview environment is live (all services healthy)

  • Deployed: fd6ca09bdce9c771da26814c98c32cf9ec5db1d7 at 2026-07-30 23:58 UTC
  • Database: isolated Supabase branch pr-13496 (state persists across redeploys unless migration drift forces a reset)
  • URLs: posted in the team Discord

Push more commits, then comment !deploy to update · !undeploy or close the PR to tear down.

@ntindle

ntindle commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

!deploy

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Deploying PR #13496 to development environment...

Bentlybro
Bentlybro previously approved these changes Aug 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

@github-actions github-actions Bot added the conflicts Automatically applied to PRs with merge conflicts label Aug 20, 2026
@ntindle
ntindle force-pushed the feat/org-workspace-pr2 branch from 66e8a9d to d41a246 Compare August 21, 2026 01:00
@github-actions

Copy link
Copy Markdown
Contributor

Conflicts have been resolved! 🎉 A maintainer will review the pull request shortly.

@github-actions github-actions Bot removed the conflicts Automatically applied to PRs with merge conflicts label Aug 21, 2026
Comment on lines +36 to +40
{
label: "Organization",
href: "/settings/organization",
Icon: BuildingIcon,
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: The "Organization" settings nav item and page are unconditionally visible, bypassing the SHOW_ORG_SETTINGS feature flag because the flag is not checked in the sidebar or on the page itself.
Severity: MEDIUM

Suggested Fix

Add flag: Flag.SHOW_ORG_SETTINGS to the "Organization" item in settingsNavItems in helpers.ts. Then, update the filter logic in useSettingsSidebar.ts to correctly check for all feature flags, not just GRAPHITI_MEMORY. Finally, add a feature flag guard to the organization settings page (page.tsx) to prevent direct access.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location:
autogpt_platform/frontend/src/app/(platform)/settings/components/SettingsSidebar/helpers.ts#L36-L40

Potential issue: The "Organization" navigation item in `settingsNavItems` is defined
without the `flag: Flag.SHOW_ORG_SETTINGS` property. Furthermore, the filter in
`useSettingsSidebar` only gates items based on `Flag.GRAPHITI_MEMORY`, not other flags.
Consequently, the "Organization" item always appears in the settings sidebar. The
corresponding page at `/settings/organization` also lacks a feature flag guard, making
it unconditionally accessible. This exposes an incomplete UI to all users, contrary to
the stated goal of keeping it behind the `SHOW_ORG_SETTINGS` flag.

Also affects:

  • autogpt_platform/frontend/src/app/(platform)/settings/organization/page.tsx:1

@ntindle
ntindle force-pushed the feat/org-workspace-pr2 branch from d41a246 to f8fb77d Compare August 26, 2026 00:31
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Aug 26, 2026
@ntindle
ntindle changed the base branch from dev to feat/invitation-resend August 26, 2026 00:33
ntindle and others added 11 commits August 26, 2026 21:45
…s, invitations

Stacked on feat/org-workspace-pr1 (backend tenancy). Builds the org
management surface so orgs can be created and administered from the app:

Plumbing (gaps the UI needs):
- X-Org-Id/X-Team-Id header injection: the switcher previously only reset
  queries — every request still resolved to the personal-org fallback.
  getOrgContextHeaders() feeds the orval mutator from the org/team store,
  and the Next proxy forwards both headers (backend validates membership).
- GET /invitations/pending returns UserInvitationResponse with the accept/
  decline token (safe: filtered to the caller's own email) and the
  inviting org's name/slug — without these an invitee cannot act on an
  invitation from the UI.

UI:
- CreateOrgDialog (design-system Dialog + Form + zod, slug auto-derived
  from name) wired into BOTH switchers; on success the store gains the
  org and switches to it.
- /settings/organization page (nav entry + already-protected route):
  - MyInvitationsSection: pending invitations banner with Accept (switches
    into the org) / Decline.
  - OrgProfileSection: name/slug/description editing (admin-gated).
  - MembersSection: member list, role select (admin/member), remove with
    confirmation; owner and self protected.
  - InvitationsSection: invite-by-email with admin toggle, pending list
    with revoke (admin-only).
  - DangerZoneSection: delete org (owner-only, confirm dialog, switches
    back to personal org).
- Switcher menus gain "Manage organization" (replaces the dead /org/teams
  link) and "Create organization".

Tests: 7-page integration suite (owner/member/personal-org gating, invite,
accept-and-switch, remove-member, profile update) + create-org submit flow
+ updated switcher suites. Full unit run: 3725 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm3mCG9okfdGtAXtFaDF9A
The destructured defaults inferred never[] for the invitation/member
arrays (the CI typecheck runs after regenerating the client, and this
file was written after the local gate had already run), and prettier
wanted the file reformatted.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm3mCG9okfdGtAXtFaDF9A
…Response

The mock invitation never set orgId/Org.name/Org.slug, which the new
invitee-facing response model reads; assertions still checked the removed
email field.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm3mCG9okfdGtAXtFaDF9A
…s are not context switches)

Dev added AccountMenuOrgList consuming the old useOrgTeamSwitcher shape
({orgs, teams, activeOrg, activeTeam, switchOrg, switchTeam}). This stack
slims the hook to {orgs, activeOrg, switchOrg, isLoaded} because
teams-as-context-switches is a retired product model — teams are managed
via the org-settings teams tab, not switched into from the account menu.

- Consume only {orgs, activeOrg, switchOrg, isLoaded}; render null until loaded.
- Delete the teams section (teams list, switchTeam, Manage teams link).
- Wire the Create organization button to CreateOrgDialog (open-state + dialog),
  matching OrgTeamSwitcher, replacing dev's TODO stub. Keep the data-testid.
- Rewrite tests for the orgs-only shape + dialog-open + no-teams assertions.

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

Better Auth (#13330) removed @/lib/supabase/hooks/useSupabase; swap to useAuth
(same { user } shape). Unblocks types on the org branches post-dev-merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBwmh7CkHiF8vKLBf2GWTU
…g org store

GET /api/orgs returns snake_case fields (is_personal, avatar_url,
member_count) but the org-team zustand store and all its consumers
expect camelCase. OrgTeamProvider fed the raw response straight into
setOrgs, leaving isPersonal/avatarUrl/memberCount undefined: the
"Personal" badge never rendered in the org switcher, avatars were
blank, and DangerZoneSection's personal-org fallback after deleting
an org silently fell through to an arbitrary org.

Bug confirmed live via E2E validation against the running platform.

- Extract a shared normalizeOrg() mapper (services/org-team/normalize.ts)
- Use it in both OrgTeamProvider.loadOrgs and CreateOrgDialog so the
  two store-population paths cannot drift
- Update OrgTeamProvider tests to mock the real snake_case wire shape
  (the camelCase mocks were masking the bug) and assert normalized
  store state

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…verride

The LaunchDarkly key does not exist yet, so the "LD never answers" path is
the only path in production today. Pin it: SHOW_ORG_SETTINGS must resolve
false when LD is silent, and NEXT_PUBLIC_FORCE_FLAG_SHOW_ORG_SETTINGS must
still force it on for local dev / Playwright.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… key

The LaunchDarkly flag was created with the literal key
`SHOW_ORG_SETTINGS` and cannot be renamed. The client initialises
`LDProvider` with `useCamelCaseFlagKeys: false`, so `useFlags()` is keyed
by the raw LD key and `useGetFlag` / `useFlagStatus` look it up by the
enum *value* — which was `show-org-settings` and therefore never
resolved. The flag would have stayed pinned to its `false` default in
every environment, including once LD targeting was switched on.

Point the enum value at the real key and comment why it deviates from
the repo's kebab-case convention, so it does not get "fixed" back.

Nothing downstream of the value changes:
- `defaultFlags` is keyed by the enum member, so the fail-closed `false`
  entry is unaffected.
- `readEnvOverride` is an explicit switch returning literal
  `process.env.NEXT_PUBLIC_FORCE_FLAG_*` reads (required so Next inlines
  them into the client bundle), so the override var name is fixed by the
  `case` arm, not derived at runtime. The documented convention (value,
  `-` → `_`, upper-cased) maps the new value to itself, so
  `NEXT_PUBLIC_FORCE_FLAG_SHOW_ORG_SETTINGS=true` keeps working for local
  dev and Playwright.
- `ARRAY_TYPED_FLAGS` does not contain this flag, and no other enum
  member collides with the new value.

Pin the key in the flag-default tests alongside the existing
fail-closed and force-on cases, and add an explicit force-off case.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Third-party review bots flagged a batch of real defects in the org
management UI. Fixes, all scoped to the flag-gated org settings surface:

- MyInvitations: accepting an invitation set the active org before it
  existed in the store. OrgTeamProvider only reloads the org list on auth
  changes, so activeOrg resolved to null across the switcher until a page
  reload. The joined org is now pulled from GET /api/orgs (falling back to
  an entry built from the invitation) before switching.
- Per-row loading state for revoke / accept / decline — a single shared
  isPending flag put every row's button into a spinner.
- useOrganizationSettingsPage: surface membersQuery errors instead of
  silently rendering an empty member list; page retry refetches both.
- slugify: re-trim after truncating so a slice landing on a separator
  can't emit a trailing dash that fails slug validation.
- Wrap mutateAsync calls in try/catch so a failed request doesn't escape
  the event handler as an unhandled rejection (the onError toast already
  reports it).
- Read the org list from the store at write time instead of a render-time
  snapshot when updating it after create/rename/delete.
- Expose the active org via aria-pressed — the checkmark alone is
  invisible to screen readers.

Tests: joined org lands in the store (both the happy path and the org
list refresh failing), members query error surfaces, revoke spinner stays
on its own row, slugify truncation, aria-pressed.
getOrgsAfterJoin only fell back to the invitation-derived entry when the
org list request threw. A 200 that hasn't caught up with the membership
yet would replace the store with a list missing the joined org, putting
activeOrgID back out of sync with orgs. The check is now unconditional:
whatever the refresh returns, the joined org is present.
@ntindle
ntindle force-pushed the feat/org-workspace-pr2 branch from f8fb77d to af9942f Compare August 27, 2026 04:38
@github-actions github-actions Bot removed the documentation Improvements or additions to documentation label Aug 27, 2026
Comment on lines +69 to +72
} catch {
// onError already surfaced the failure toast; swallow the rejection so
// it doesn't escape the click handler unhandled.
} finally {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: In handleAccept, a failure in getOrgsAfterJoin after a successful invitation acceptance is silently caught, leaving the UI in an inconsistent state without showing the new organization.
Severity: MEDIUM

Suggested Fix

Move the logic for updating the UI state (setOrgs, setActiveOrg, getQueryClient().resetQueries()) and showing the success toast into the onSuccess callback of the usePostV2AcceptInvitation mutation. This ensures that UI updates and success notifications only occur after the entire acceptance and data refresh process completes successfully.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location:
autogpt_platform/frontend/src/app/(platform)/settings/organization/components/MyInvitationsSection/useMyInvitationsSection.ts#L69-L72

Potential issue: In the `handleAccept` function, a single `try...catch` block wraps both
the `acceptInvitation` API call and subsequent UI state updates. If the
`acceptInvitation` call succeeds but a subsequent operation like `getOrgsAfterJoin`
fails due to an error during data processing (e.g., calling `.map` on an unexpected
`null` response), the error is silently caught. This leads to a success toast being
shown to the user, but the UI state is not updated to reflect the newly joined
organization, leaving the application in an inconsistent state.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit af9942f. Configure here.

order={"createdAt": "desc"},
)
return [InvitationResponse.from_db(inv) for inv in invitations]
return [UserInvitationResponse.from_db(inv) for inv in invitations]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pending invites use exact email

Medium Severity

GET /invitations/pending looks up invitations with an exact email match, while accept and decline already compare emails case-insensitively. The new invite form also sends the typed address unchanged, and invite email delivery is still a TODO, so a mixed-case invite never appears in You've been invited and cannot be accepted from the UI.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit af9942f. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

batch:orgs batch-bot batch membership cla: signed CLA signed by all contributors platform/backend AutoGPT Platform - Back end platform/frontend AutoGPT Platform - Front end size/xl

Projects

Status: 👍🏼 Mergeable
Status: No status

Development

Successfully merging this pull request may close these issues.

4 participants