Skip to content

feat(backend): agent-graph grants — share with teams (SECRT-2448, v1) - #13599

Open
ntindle wants to merge 4 commits into
feat/team-field-alignmentfrom
feat/agent-grants
Open

feat(backend): agent-graph grants — share with teams (SECRT-2448, v1)#13599
ntindle wants to merge 4 commits into
feat/team-field-alignmentfrom
feat/agent-grants

Conversation

@ntindle

@ntindle ntindle commented Jul 17, 2026

Copy link
Copy Markdown
Member

Why

SECRT-2448: teams exist, but there is no way to share an agent across team lines — the tenancy model is a single teamId FK, so a graph belongs to exactly one team and everyone else is locked out. Decision (2026-07-17): grants sit on top of roles, teams-only in v1, on a schema that is polymorphic from day one so USER/PERSONA principals arrive as an enum value + code path, not a table migration.

What

  • Schema: AgentGraphGrant — composite FK to AgentGraph(id, version) (share = reference pinned to a version, never a copy; followLatest opts into tracking the active version), polymorphic principalType/principalId (TEAM enforced; USER reserved), capability (VIEW/EXECUTE, EXECUTE ⊇ VIEW), credentialMode (CONSUMER/OWNER, room for RESTRICTED), org-scoped, unique per (graph, principal) so re-sharing updates the pin. Revoke = hard delete.
  • Enforcement (backend/data/grants.py):
    • get_graph gains a grant fallback after store-listing and library: pinned grants open exactly the pinned version, followLatest opens the active version.
    • validate_graph_execution_permissions accepts an EXECUTE grant covering the exact version (followLatest additionally requires the version be active); a grant also satisfies the library requirement since granted agents aren't library entries.
    • Non-TEAM principal rows raise GrantPrincipalNotSupportedError loudly — a row like that can only exist by bypassing the API, and silent skipping would hide both the bypass and an unenforced principal type.
  • API (/api/orgs/{org_id}, gated by the previously-unused OrgAction.SHARE_RESOURCES): create/upsert grant on a graph, list a graph's grants, revoke (204), and GET /grants/received for agents shared with my teams. Sharer must be the graph's owner or an org admin; team and graph must both live in the caller's org.

How

Enforcement is two additive seams in graph.py — a fallback in the get_graph chain and one extra disjunct in the execution check — so no existing access path changes behavior. CRUD mirrors team_db/team_routes conventions (RequestContext + Security deps, path/ctx re-verification, NotFoundError→404 / ValueError→400).

Testing

  • backend/data/grants_test.py (9): membership resolution, ACTIVE-only, VIEW/EXECUTE implication, version-pin coverage, and the loud non-TEAM throw.
  • backend/api/features/orgs/grant_db_test.py (13): USER principal rejected at create, org-scoping of team/graph, owner/admin share+revoke authz, default-pin-to-active-version, explicit pin, received-grants scoping.
  • All 22 pass; pyright clean on every touched file.

Checklist

  • data/*.py user-ID checks: resolve_graph_grant filters by the caller's ACTIVE TeamMember rows; CRUD validates org scope + owner/admin; routes re-verify ctx.org_id against the path.
  • Tests added for all new behavior

🤖 Generated with Claude Code

https://claude.ai/code/session_01Jm3mCG9okfdGtAXtFaDF9A


Note

High Risk
Changes authorization for graph read and execute paths; incorrect grant resolution or version/org checks could expose or block agents across teams.

Overview
Adds team-scoped agent graph sharing via a new AgentGraphGrant model (version pin or followLatest, VIEW/EXECUTE, credential mode stored for later use). Org members with SHARE_RESOURCES can upsert/list/revoke grants on a graph and list grants received through their active team memberships.

Enforcement is wired into existing graph access: get_graph can load a graph when the user has a VIEW grant (org-aligned, pinned or active version); execution validation treats a matching EXECUTE grant like library access. Grant resolution is teams-only in v1—non-TEAM principal rows error loudly rather than being ignored.

New org routes live under /api/orgs/{org_id}; share/revoke require graph owner or org admin. Unit/regression tests mock the grants Prisma client so prior graph tests keep the no-grant baseline.

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

@ntindle
ntindle requested a review from a team as a code owner July 17, 2026 20:45
@ntindle
ntindle requested review from Bentlybro and Pwuts and removed request for a team July 17, 2026 20:45
@github-project-automation github-project-automation Bot moved this to 🆕 Needs initial review in AutoGPT development kanban Jul 17, 2026
@ntindle

ntindle commented Jul 17, 2026

Copy link
Copy Markdown
Member Author

/batch

@github-actions github-actions Bot added platform/backend AutoGPT Platform - Back end size/xl labels Jul 17, 2026
@coderabbitai

coderabbitai Bot commented Jul 17, 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: 2f074fe1-2124-4b47-a3a3-199cb3859759

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 team-scoped Agent Graph grants with Prisma persistence, organization APIs for creating, listing, receiving, and revoking grants, and authorization support for viewing and executing pinned or latest graph versions.

Changes

Team graph grant access

Layer / File(s) Summary
Grant schema and persistence
autogpt_platform/backend/schema.prisma, autogpt_platform/backend/migrations/.../migration.sql, autogpt_platform/backend/backend/api/features/orgs/grant_model.py
Adds grant enums, the AgentGraphGrant model, relations, constraints, indexes, migration, and Pydantic request/response models.
Grant management API
autogpt_platform/backend/backend/api/features/orgs/grant_db.py, autogpt_platform/backend/backend/api/features/orgs/grant_routes.py, autogpt_platform/backend/backend/api/rest_api.py, autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
Adds validated grant CRUD operations, organization endpoints, router registration, and database tests.
Grant resolution and graph authorization
autogpt_platform/backend/backend/data/grants.py, autogpt_platform/backend/backend/data/graph.py, autogpt_platform/backend/backend/data/grants_test.py, autogpt_platform/backend/backend/api/features/orgs/regression_test.py, autogpt_platform/backend/backend/data/graph_test.py
Resolves active TEAM grants by capability and version, applies VIEW and EXECUTE grants to graph access, and adds no-grant test isolation.

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

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant GrantRoutes
  participant GrantDB
  participant Prisma
  participant GraphAuthorization
  Client->>GrantRoutes: create team grant
  GrantRoutes->>GrantDB: validate and upsert grant
  GrantDB->>Prisma: persist AgentGraphGrant
  Prisma-->>GrantDB: grant record
  GrantDB-->>GrantRoutes: GrantResponse
  Client->>GraphAuthorization: access graph
  GraphAuthorization->>GrantDB: resolve team grant
  GrantDB->>Prisma: query grants and active memberships
  Prisma-->>GrantDB: matching grant
  GrantDB-->>GraphAuthorization: VIEW or EXECUTE grant
  GraphAuthorization-->>Client: graph or authorization result
Loading

Suggested reviewers: pwuts, bentlybro

Poem

I’m a rabbit who shares graphs with care,
Team grants hop through Prisma’s lair.
Pinned or latest, view or run,
Access checks now know everyone.
Squeak—secure sharing is done!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly and concisely identifies the main change: adding backend agent-graph grants for sharing with teams.
Description check ✅ Passed The description directly explains the team-sharing grant feature, authorization behavior, API changes, schema changes, enforcement, and tests.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/agent-grants

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.

@autogpt-batch-bot autogpt-batch-bot Bot added the batch PR is queued in the batch-deploy rollup (batch-bot source of truth) label Jul 17, 2026
@autogpt-batch-bot autogpt-batch-bot Bot mentioned this pull request Jul 17, 2026
11 tasks
@autogpt-batch-bot

Copy link
Copy Markdown

🤖 Added #13599 to the batch. Current batch (5): #13541, #13540, #13532, #13530, #13599. Ejected: #13574.

Deploying the combined preview (#13537); /batch-merge lands them together.

Comment thread autogpt_platform/backend/backend/data/grants.py

@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: 4

🧹 Nitpick comments (2)
autogpt_platform/backend/backend/api/features/orgs/grant_model.py (1)

8-17: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Model grant options as constrained values.

These free-form strings make OpenAPI advertise arbitrary values and defer invalid requests to database-layer validation. Use Literal or API enums, with principal_type restricted to "TEAM" for v1.

Proposed change
+from typing import Literal
+
 class CreateGrantRequest(BaseModel):
-    principal_type: str = "TEAM"
+    principal_type: Literal["TEAM"] = "TEAM"
     principal_id: str = Field(..., min_length=1)
     graph_version: int | None = None
-    capability: str = "EXECUTE"
-    credential_mode: str = "CONSUMER"
+    capability: Literal["VIEW", "EXECUTE"] = "EXECUTE"
+    credential_mode: Literal["CONSUMER", "OWNER"] = "CONSUMER"
🤖 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/grant_model.py` around
lines 8 - 17, Update CreateGrantRequest to model principal_type, capability, and
credential_mode as constrained Literal values or API enums instead of free-form
strings. Restrict principal_type to "TEAM" for v1, capability to "VIEW" or
"EXECUTE", and credential_mode to "CONSUMER" or "OWNER", while preserving their
current defaults and graph_version behavior.
autogpt_platform/backend/backend/api/features/orgs/grant_db.py (1)

15-103: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Split grant validation, graph resolution, and persistence.

upsert_grant substantially exceeds the repository’s ~40-line limit. Extract option validation and the team/graph authorization lookup into named helpers.

As per coding guidelines, “Keep functions under ~40 lines; extract named helpers when a function grows longer.”

🤖 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/grant_db.py` around lines
15 - 103, Refactor upsert_grant to stay under the repository’s ~40-line function
limit by extracting option validation and team/graph authorization lookup into
named helpers. Move the principal_type, capability, and credential_mode checks
into one helper, and move the team lookup, graph resolution, and owner/admin
authorization into another helper that returns the resolved graph. Keep
upsert_grant focused on orchestration and grant persistence while preserving all
existing errors and behavior.

Source: Coding guidelines

🤖 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/backend/backend/api/features/orgs/grant_db.py`:
- Around line 42-46: Update the credential-mode validation in the grant creation
flow around GrantCredentialMode to reject OWNER, allowing only the currently
supported consumer mode until execution uses credentialMode. Preserve the
existing unknown-mode ValueError behavior and ensure OWNER is not persisted as
an accepted option.
- Around line 157-165: Update the authorization check in the grant-revocation
flow to load and validate the graph version pinned by the grant, rather than the
latest version returned by `prisma.agentgraph.find_first`. Compare that
version’s userId with revoked_by_user_id while preserving the org-admin bypass
and existing denial behavior.

In `@autogpt_platform/backend/backend/api/features/orgs/grant_routes.py`:
- Around line 47-50: Update the exception handling in grant sharing at
autogpt_platform/backend/backend/api/features/orgs/grant_routes.py lines 47-50
so owner/admin authorization failures map to HTTP 403 while ValueError cases for
invalid grant options remain HTTP 400. Apply the same authorization-specific
mapping to the grant revocation handler at
autogpt_platform/backend/backend/api/features/orgs/grant_routes.py lines 96-99.

In `@autogpt_platform/backend/backend/data/graph.py`:
- Around line 1332-1341: Constrain grant resolution and execution to the grant’s
organization. In autogpt_platform/backend/backend/data/graph.py:1332-1341,
update grant_where in the graph lookup to include grant.organizationId; in
autogpt_platform/backend/backend/data/graph.py:1672-1677, update the execution
validation to require graph.organizationId equals exec_grant.organizationId
before granting execution.

---

Nitpick comments:
In `@autogpt_platform/backend/backend/api/features/orgs/grant_db.py`:
- Around line 15-103: Refactor upsert_grant to stay under the repository’s
~40-line function limit by extracting option validation and team/graph
authorization lookup into named helpers. Move the principal_type, capability,
and credential_mode checks into one helper, and move the team lookup, graph
resolution, and owner/admin authorization into another helper that returns the
resolved graph. Keep upsert_grant focused on orchestration and grant persistence
while preserving all existing errors and behavior.

In `@autogpt_platform/backend/backend/api/features/orgs/grant_model.py`:
- Around line 8-17: Update CreateGrantRequest to model principal_type,
capability, and credential_mode as constrained Literal values or API enums
instead of free-form strings. Restrict principal_type to "TEAM" for v1,
capability to "VIEW" or "EXECUTE", and credential_mode to "CONSUMER" or "OWNER",
while preserving their current defaults and graph_version behavior.
🪄 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: e6dee616-2043-4658-a524-a97e8564bccc

📥 Commits

Reviewing files that changed from the base of the PR and between cfbef8e and 42b9825.

📒 Files selected for processing (10)
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql
  • autogpt_platform/backend/schema.prisma
📜 Review details
⏰ Context from checks skipped due to timeout. (15)
  • GitHub Check: check API types
  • GitHub Check: Cursor Bugbot
  • GitHub Check: types
  • GitHub Check: lint
  • GitHub Check: test (3.13)
  • GitHub Check: type-check (3.11)
  • GitHub Check: end-to-end tests
  • GitHub Check: type-check (3.12)
  • GitHub Check: test (3.12)
  • GitHub Check: type-check (3.13)
  • GitHub Check: test (3.11)
  • GitHub Check: lint
  • GitHub Check: Analyze (python)
  • GitHub Check: Check PR Status
  • GitHub Check: Analyze (typescript)
🧰 Additional context used
📓 Path-based instructions (8)
autogpt_platform/backend/**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

autogpt_platform/backend/**/*.py: Use Python 3.11 (required; managed by Poetry via pyproject.toml) for backend development
Always run 'poetry run format' (Black + isort) before linting in backend development
Always run 'poetry run lint' (ruff) after formatting in backend development

autogpt_platform/backend/**/*.py: Use poetry run ... command for executing Python package dependencies
Use top-level imports only — avoid local/inner imports except for lazy imports of heavy optional dependencies like openpyxl
Use absolute imports with from backend.module import ... for cross-package imports; single-dot relative imports are acceptable for sibling modules within the same package; avoid double-dot relative imports
Do not use duck typing — avoid hasattr/getattr/isinstance for type dispatch; use typed interfaces/unions/protocols instead
Use Pydantic models over dataclass/namedtuple/dict for structured data
Do not use linter suppressors — no # type: ignore, # noqa, # pyright: ignore; fix the type/code instead
Prefer list comprehensions over manual loop-and-append patterns
Use early return with guard clauses first to avoid deep nesting
Use %s for deferred interpolation in debug log statements for efficiency; use f-strings elsewhere for readability (e.g., logger.debug("Processing %s items", count) vs logger.info(f"Processing {count} items"))
Sanitize error paths by using os.path.basename() in error messages to avoid leaking directory structure
Be aware of TOCTOU (Time-Of-Check-Time-Of-Use) issues — avoid check-then-act patterns for file access and credit charging
Use transaction=True for Redis pipelines to ensure atomicity on multi-step operations
Use max(0, value) guards for computed values that should never be negative
Keep files under ~300 lines; if a file grows beyond this, split by responsibility (extract helpers, models, or a sub-module into a new file)
Keep functions under ~40 lines; extract named helpers when a function grows longer
...

Files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
autogpt_platform/{backend,autogpt_libs}/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

Format Python code with poetry run format

Files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
autogpt_platform/backend/**/api/**/*.py

📄 CodeRabbit inference engine (autogpt_platform/backend/AGENTS.md)

autogpt_platform/backend/**/api/**/*.py: Use Security() instead of Depends() for authentication dependencies to get proper OpenAPI security specification
Follow SSE (Server-Sent Events) protocol: use data: lines for frontend-parsed events (must match Zod schema) and : comment lines for heartbeats/status

Files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
autogpt_platform/backend/backend/data/**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

All data access in backend requires user ID checks; verify this for any 'data/*.py' changes

Files:

  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/data/graph.py
autogpt_platform/**/data/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

For changes touching data/*.py, validate user ID checks or explain why not needed

Files:

  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/data/graph.py
autogpt_platform/backend/**/*_test.py

📄 CodeRabbit inference engine (autogpt_platform/backend/AGENTS.md)

autogpt_platform/backend/**/*_test.py: Use pytest with snapshot testing for API responses
Colocate test files with source files using *_test.py naming convention
Mock at boundaries — mock where the symbol is used, not where it's defined; after refactoring, update mock targets to match new module paths
Use AsyncMock from unittest.mock for async functions in tests
When writing tests, use Test-Driven Development (TDD): write failing tests marked with @pytest.mark.xfail before implementation, then remove the marker once the implementation is complete
When creating snapshots in tests, use poetry run pytest path/to/test.py --snapshot-update; always review snapshot changes with git diff before committing

Files:

  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
autogpt_platform/backend/backend/api/features/**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Update routes in '/backend/backend/api/features/' and add/update Pydantic models in the same directory for API development

Files:

  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
autogpt_platform/backend/schema.prisma

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Run database migrations with 'poetry run prisma migrate dev' and 'poetry run prisma generate' after schema changes in backend

Files:

  • autogpt_platform/backend/schema.prisma
🧠 Learnings (15)
📚 Learning: 2026-02-26T17:02:22.448Z
Learnt from: Pwuts
Repo: Significant-Gravitas/AutoGPT PR: 12211
File: .pre-commit-config.yaml:160-179
Timestamp: 2026-02-26T17:02:22.448Z
Learning: Keep the pre-commit hook pattern broad for autogpt_platform/backend to ensure OpenAPI schema changes are captured. Do not narrow to backend/api/ alone, since the generated schema depends on Pydantic models across multiple directories (backend/data/, backend/blocks/, backend/copilot/, backend/integrations/, backend/util/). Narrowing could miss schema changes and cause frontend type desynchronization.

Applied to files:

  • autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql
  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/schema.prisma
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-05-09T10:56:21.839Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 13069
File: autogpt_platform/backend/migrations/20260509120000_add_chat_message_queue_status/migration.sql:1-13
Timestamp: 2026-05-09T10:56:21.839Z
Learning: In autogpt_platform/backend migrations (PostgreSQL), assume the `platform` schema is created/bootstrapped by the surrounding deployment infrastructure before Prisma migrations run. Therefore, individual migration SQL files should NOT include `CREATE SCHEMA IF NOT EXISTS "platform"` (or similar schema-creation statements); the schema should already exist, and adding it in each migration can cause unnecessary/incorrect expectations. Flag this as a review issue if present in migration `.sql` files.

Applied to files:

  • autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql
📚 Learning: 2026-06-15T09:07:09.084Z
Learnt from: Abhi1992002
Repo: Significant-Gravitas/AutoGPT PR: 13359
File: autogpt_platform/backend/migrations/20260615120000_add_user_workspace_folders/migration.sql:21-22
Timestamp: 2026-06-15T09:07:09.084Z
Learning: When reviewing Prisma-managed schema changes/migrations in this repository, do not recommend adding partial/expression unique indexes (e.g., `CREATE UNIQUE INDEX ... WHERE "parentId" IS NULL`) because Prisma cannot represent them in `schema.prisma`; adding them via raw SQL will create schema drift and repeated changes on future `prisma migrate dev` runs. For root-folder name uniqueness, the intended approach is the existing application-layer guard (`_root_name_taken` checks in `create_folder`/`update_folder` in `autogpt_platform/backend/backend/data/workspace_folder.py`) rather than a DB partial/index-based constraint. Prefer Prisma-supported uniqueness constraints, and if a uniqueness rule requires conditional logic, implement it at the application layer.

Applied to files:

  • autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql
📚 Learning: 2026-03-05T15:42:08.207Z
Learnt from: ntindle
Repo: Significant-Gravitas/AutoGPT PR: 12297
File: .claude/skills/backend-check/SKILL.md:14-16
Timestamp: 2026-03-05T15:42:08.207Z
Learning: In Python files under autogpt_platform/backend (recursively), rely on poetry run format to perform formatting (Black + isort) and linting (ruff). Do not run poetry run lint as a separate step after poetry run format, since format already includes linting checks.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-03-16T16:35:40.236Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 12440
File: autogpt_platform/backend/backend/api/features/workflow_import.py:54-63
Timestamp: 2026-03-16T16:35:40.236Z
Learning: Avoid using the word 'competitor' in public-facing identifiers and text. Use neutral naming for API paths, model names, function names, and UI text. Examples: rename 'CompetitorFormat' to 'SourcePlatform', 'convert_competitor_workflow' to 'convert_workflow', '/competitor-workflow' to '/workflow'. Apply this guideline to files under autogpt_platform/backend and autogpt_platform/frontend.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-03-31T15:37:38.626Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 12623
File: autogpt_platform/backend/backend/copilot/tools/agent_generator/fixer.py:37-47
Timestamp: 2026-03-31T15:37:38.626Z
Learning: When validating/constructing Anthropic API model IDs in Significant-Gravitas/AutoGPT, allow the hyphen-separated Claude Opus 4.6 model ID `claude-opus-4-6` (it corresponds to `LlmModel.CLAUDE_4_6_OPUS` in `autogpt_platform/backend/backend/blocks/llm.py`). Do NOT require the dot-separated form in Anthropic contexts. Only OpenRouter routing variants should use the dot separator (e.g., `anthropic/claude-opus-4.6`); `claude-opus-4-6` should be treated as correct when passed to Anthropic, and flagged only if it’s used in the OpenRouter path where the dot form is expected.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-04-15T02:43:36.890Z
Learnt from: ntindle
Repo: Significant-Gravitas/AutoGPT PR: 12780
File: autogpt_platform/backend/backend/copilot/tools/workspace_files.py:0-0
Timestamp: 2026-04-15T02:43:36.890Z
Learning: When reviewing Python exception handlers, do not flag `isinstance(e, X)` checks as dead/unreachable if the caught exception `X` is a subclass of the exception type being handled. For example, if `X` (e.g., `VirusScanError`) inherits from `ValueError` (directly or via an intermediate class) and it can be raised within an `except ValueError:` block, then `isinstance(e, X)` inside that handler is reachable and should not be treated as dead code.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-05-23T05:29:43.085Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 13200
File: autogpt_platform/backend/backend/executor/scheduler.py:590-593
Timestamp: 2026-05-23T05:29:43.085Z
Learning: When reviewing Python code that uses Pydantic discriminated/tagged unions (e.g., `Annotated[Union[...], Field(discriminator="kind")]`), recognize that using `isinstance(x, SomeVariantInfo)` to narrow the union is an intentional and correct runtime guard and should also enable static type narrowing in tools like Pyright. Do not recommend replacing such `isinstance`-based narrowing with `cast(...)` when the check already proves the variant at runtime.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-04-22T11:46:04.431Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 12881
File: autogpt_platform/backend/backend/copilot/config.py:0-0
Timestamp: 2026-04-22T11:46:04.431Z
Learning: Do not flag the Claude Sonnet 4.6 model ID as incorrect when it uses the project’s established hyphenated convention: `anthropic/claude-sonnet-4-6`. This hyphen form is the intentional, production convention and should be treated as valid (including in files like llm.py, blocks tests, reasoning.py, `_is_anthropic_model` tests, and config defaults). Note that OpenRouter also accepts the dot variant `anthropic/claude-sonnet-4.6`, so either form may be tolerated, but `anthropic/claude-sonnet-4-6` should be considered the standard to match project usage.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-04-22T11:46:12.892Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 12881
File: autogpt_platform/backend/backend/copilot/baseline/service.py:322-332
Timestamp: 2026-04-22T11:46:12.892Z
Learning: In this codebase (Significant-Gravitas/AutoGPT), OpenRouter-routed Anthropic model IDs should use the hyphen-separated convention (e.g., `anthropic/claude-sonnet-4-6`, `anthropic/claude-opus-4-6`). Although OpenRouter may accept both hyphen and dot variants, treat the hyphen-separated form as the intended, correct codebase-wide convention and do not flag it as an error. Only flag the dot-separated variant (e.g., `anthropic/claude-sonnet-4.6`) as incorrect when reviewing/validating model ID strings for OpenRouter-routed Anthropic models.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-05-07T18:48:14.242Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 13040
File: autogpt_platform/backend/backend/blocks/llm.py:0-0
Timestamp: 2026-05-07T18:48:14.242Z
Learning: In this repository, isort may split imports from the same module into separate blocks when some imports are aliased (e.g., `from module import X as Y`) and others are not. Preserve the two-block layout when it results from isort (such as keeping `from openai.types.chat import ChatCompletion as OpenAIChatCompletion` separate from non-aliased imports from `openai.types.chat`). Do not treat that split as a style issue during review; merging them into a single block can fail CI with `Imports are incorrectly sorted and/or formatted`.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-05-26T14:24:34.866Z
Learnt from: Abhi1992002
Repo: Significant-Gravitas/AutoGPT PR: 13217
File: autogpt_platform/backend/backend/api/features/search/service.py:137-137
Timestamp: 2026-05-26T14:24:34.866Z
Learning: In the Significant-Gravitas/AutoGPT backend, treat `user_id` (an opaque UUID used only for correlation/tracing) as non-PII. Do not flag direct logging of `user_id` in `logger.warning`/`logger.info` statements as a PII exposure issue, as the established convention is to log `user_id` for tracing while reserving PII for fields like email or display name.

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-06-11T19:39:10.493Z
Learnt from: ntindle
Repo: Significant-Gravitas/AutoGPT PR: 13337
File: autogpt_platform/backend/backend/copilot/graphiti/reranker.py:0-0
Timestamp: 2026-06-11T19:39:10.493Z
Learning: In the Significant-Gravitas/AutoGPT Python backend, when calling the OpenAI Python client `chat.completions.create`, construct the `messages` payload using the concrete typed-dict variants from `openai.types.chat` (e.g., `ChatCompletionSystemMessageParam`, `ChatCompletionUserMessageParam`, etc.) rather than trying to instantiate `ChatCompletionMessageParam` directly. `ChatCompletionMessageParam` is a `Union` alias and is not constructible, so `ChatCompletionMessageParam(role=..., content=...)` should fail type checking. Build each message element with the appropriate concrete typed dict and then annotate the resulting list as `list[ChatCompletionMessageParam]` (e.g., `messages: list[ChatCompletionMessageParam] = [ChatCompletionSystemMessageParam(...), ...]`).

Applied to files:

  • autogpt_platform/backend/backend/api/rest_api.py
  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_model.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db.py
  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
  • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py
📚 Learning: 2026-04-21T04:35:34.710Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 12865
File: autogpt_platform/backend/backend/data/credit.py:1584-1584
Timestamp: 2026-04-21T04:35:34.710Z
Learning: When reviewing this codebase, don’t flag snake_case attribute names (e.g., `subscription_tier`, `stripe_customer_id`, `top_up_config`) on the app-layer Pydantic `User` model as “wrong” field names. These are correct for the app-layer model and are expected to be mapped from the Prisma-layer camelCase fields (e.g., `subscriptionTier`, `stripeCustomerId`) inside methods like `User.from_db()`. Only Prisma-returned/raw objects would use camelCase, but functions like `get_user_by_id(user_id: str)` are expected to return the Pydantic app-layer model.

Applied to files:

  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/data/graph.py
📚 Learning: 2026-05-07T15:32:39.703Z
Learnt from: majdyz
Repo: Significant-Gravitas/AutoGPT PR: 13033
File: autogpt_platform/backend/backend/data/generate_data.py:111-117
Timestamp: 2026-05-07T15:32:39.703Z
Learning: When reviewing the Python data-generation layer, do not treat missing `user_id`/user filtering in calls to graph-metadata resolvers as a security issue if the `graph_id` inputs are already guaranteed to be user-scoped by earlier upstream SQL (e.g., `WHERE "userId" = ...`). In particular, `_resolve_agent_name(graph_id)` in `generate_data.py` correctly calls `get_graph_metadata(graph_id=graph_id)` without a `user_id` parameter by design, because name resolution must also work for user-executed shared/marketplace agents that the user may not own.

Applied to files:

  • autogpt_platform/backend/backend/data/grants_test.py
  • autogpt_platform/backend/backend/data/grants.py
  • autogpt_platform/backend/backend/data/graph.py
🔇 Additional comments (10)
autogpt_platform/backend/schema.prisma (1)

464-464: LGTM!

Also applies to: 1087-1105, 1785-1785, 1942-1977

autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql (1)

1-45: LGTM!

autogpt_platform/backend/backend/api/features/orgs/grant_model.py (1)

20-77: LGTM!

autogpt_platform/backend/backend/api/features/orgs/grant_db.py (1)

106-139: LGTM!

autogpt_platform/backend/backend/api/features/orgs/grant_routes.py (1)

53-68: LGTM!

Also applies to: 102-113

autogpt_platform/backend/backend/api/rest_api.py (1)

38-38: LGTM!

Also applies to: 471-475

autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py (1)

1-197: LGTM!

autogpt_platform/backend/backend/data/grants.py (1)

1-82: LGTM!

autogpt_platform/backend/backend/data/graph.py (1)

8-8: LGTM!

Also applies to: 31-31

autogpt_platform/backend/backend/data/grants_test.py (1)

1-146: LGTM!

Comment thread autogpt_platform/backend/backend/api/features/orgs/grant_db.py
Comment thread autogpt_platform/backend/backend/api/features/orgs/grant_db.py Outdated
Comment thread autogpt_platform/backend/backend/api/features/orgs/grant_routes.py
Comment thread autogpt_platform/backend/backend/data/graph.py Outdated
@codecov

codecov Bot commented Jul 17, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.73995% with 42 lines in your changes missing coverage. Please review.
✅ Project coverage is 80.48%. Comparing base (e3381a1) to head (a6c2445).

Additional details and impacted files
@@                      Coverage Diff                      @@
##           feat/team-field-alignment   #13599      +/-   ##
=============================================================
+ Coverage                      80.46%   80.48%   +0.01%     
=============================================================
  Files                           3327     3333       +6     
  Lines                         254787   255154     +367     
  Branches                       23535    23560      +25     
=============================================================
+ Hits                          205014   205352     +338     
- Misses                         44484    44508      +24     
- Partials                        5289     5294       +5     
Flag Coverage Δ
platform-backend 85.72% <88.73%> (+0.01%) ⬆️
platform-frontend-e2e 28.39% <ø> (-0.04%) ⬇️

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

Components Coverage Δ
Platform Backend 85.72% <88.73%> (+0.01%) ⬆️
Platform Frontend 60.27% <ø> (-0.01%) ⬇️
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.

@github-actions

github-actions Bot commented Aug 4, 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

Copy link
Copy Markdown
Contributor

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

@github-actions github-actions Bot added documentation Improvements or additions to documentation platform/frontend AutoGPT Platform - Front end labels Aug 26, 2026
@ntindle
ntindle changed the base branch from dev to feat/team-field-alignment August 26, 2026 00:32
@github-actions

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, ~30 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 (1 conflict, ~4 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, ~12 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)
    • 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_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 (5 conflicts, ~75 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, ~12 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/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/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_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 (5 conflicts, ~75 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, ~12 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/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/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/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(backend/api): External API v2 #12206 (Pwuts · updated 18h ago)

🟡 Medium Risk — Some Line Overlap

These PRs have some overlapping changes:

  • feat(backend): resend org invitation — fresh token + extended TTL #13603 (ntindle · updated just now)

    • autogpt_platform/backend/backend/copilot/sdk/service.py: L5379-5396, L6255-6268
    • autogpt_platform/backend/backend/api/features/store/routes_test.py: L582-588, L607-616
    • autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py: L352-364
    • 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/v1_test.py: L8-17, L20-42, L814-824, L1050-1554, L1598-1600, L2097-2181
    • autogpt_platform/backend/backend/api/features/library/routes_test.py: L97-104, L139-149, L311-313, L316-396
    • autogpt_platform/backend/backend/copilot/baseline/service.py: L1587-1594
    • autogpt_platform/backend/backend/conftest.py: L49-68
    • autogpt_platform/backend/backend/api/features/library/model.py: L42-49, L61-70, L227-239, L402-407, L409-416
    • autogpt_platform/backend/snapshots/sub_success: L28-35
    • autogpt_platform/backend/backend/api/features/library/model_test.py: L13-20, L30-39, L105-145
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py: L26-32, L490-551
    • autogpt_platform/backend/backend/copilot/prompting.py: L682-704
    • autogpt_platform/backend/backend/api/features/chat/routes.py: L425-432, L544-553
    • 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/graphiti_search.py: L12-25, L62-83, L94-212, L217-230, L232-257
    • autogpt_platform/backend/backend/data/graph.py: L5-11, L28-34, L1419-1449, L1738-1757, L1767-1804
    • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py: L1-199
    • autogpt_platform/backend/backend/api/features/store/model_test.py: L1-58
    • autogpt_platform/backend/backend/api/features/store/model.py: L217-228, L245-257, L277-282, L284-290
    • 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/data/grants.py: L1-85
    • 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/store/media.py: L61-77, L167-173, L176-185
    • autogpt_platform/backend/backend/api/features/orgs/grant_model.py: L1-77
    • autogpt_platform/backend/backend/data/grants_test.py: L1-148
    • autogpt_platform/backend/backend/api/features/orgs/memory_db.py: L1-230
    • autogpt_platform/backend/backend/copilot/graphiti/client_test.py: L11-18, L107-158, L232-240, L278-286
    • autogpt_platform/backend/backend/copilot/graphiti/tiers.py: L1-428
    • autogpt_platform/backend/backend/copilot/graphiti/client.py: L51-106
    • 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/db_test.py: L425-433, L2249-2328
    • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py: L1-117
    • 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/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store_test.py: L28-52, L420-422, L439-693
    • 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/graphiti/context.py: L11-44, L48-55, L57-164, L192-225, L227-233
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py: L2358-2365, L2372-2381, L2431-2469
    • autogpt_platform/backend/backend/copilot/tools/tool_schema_test.py: L112-121, L165-179, L243-261, L273-284
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • autogpt_platform/backend/backend/api/features/orgs/model.py: L18-27, L30-64, L70-77, L84-92, L117-122, L151-167
    • autogpt_platform/backend/schema.prisma: L623-629, L1404-1430, L2084-2089, L2105-2111, L2241-2246, L2263-2305
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes.py: L1-78
    • autogpt_platform/backend/backend/api/model.py: L43-71
    • autogpt_platform/backend/backend/copilot/graphiti/tiers_test.py: L1-428
    • autogpt_platform/backend/backend/api/features/search/content_handlers_integration_test.py: L22-44, L46-53
    • autogpt_platform/backend/backend/copilot/sdk/responsiveness_test.py: L97-109, L118-136, L227-233, L239-253
    • autogpt_platform/backend/backend/util/test.py: L3-9, L234-263
    • autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql: L1-45
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3232-3953
    • 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/orgs/grant_db.py: L1-170
    • autogpt_platform/backend/backend/api/features/library/routes/folders.py: L129-137, L140-159
    • 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/api/features/orgs/memory_routes_test.py: L1-430
    • autogpt_platform/backend/backend/api/features/library/routes/agents.py: L215-239
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • 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
    • docs/platform/org-feature-map.md: L24-31
    • autogpt_platform/backend/backend/api/features/orgs/memory_model.py: L1-34
    • autogpt_platform/backend/snapshots/lib_agts_search: L40-47, L92-101
    • 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/api/features/orgs/db.py: L4-10, L24-50, L341-346, L362-382
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py: L1-155
    • 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/orgs/spend_test.py: L1-183
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py: L1-7, L17-43, L543-545, L558-631
  • 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/sdk/service.py: L5379-5396, L6255-6268
    • 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/baseline/service.py: L1587-1594
    • 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/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/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/api/features/orgs/team_db.py: L38-108, L115-154, L198-204, L207-213, L230-243
    • 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/graphiti/tiers.py: L1-428
    • autogpt_platform/backend/backend/copilot/graphiti/client.py: L51-106
    • 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_store_test.py: L28-52, L420-422, L439-693
    • 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/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • 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/graphiti/context.py: L11-44, L48-55, L57-164, L192-225, L227-233
    • 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/model.py: L117-122
    • autogpt_platform/backend/backend/copilot/graphiti/tiers_test.py: L1-428
    • autogpt_platform/backend/backend/copilot/sdk/responsiveness_test.py: L97-109, L118-136, L227-233, L239-253
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3232-3953
    • autogpt_platform/backend/backend/api/features/orgs/regression_test.py: L3377-3417
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • 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
    • docs/platform/org-feature-map.md: L24-31
    • 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/api/features/v1_credits_authz_test.py: L1-155
    • autogpt_platform/backend/backend/api/features/orgs/spend_test.py: L1-183
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py: L1-7, L17-43, L543-545, L558-631
  • feat(backend): org avatar upload (stacked on per-team spend) #13663 (ntindle · updated just now)

    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • autogpt_platform/backend/backend/api/features/orgs/model.py: L117-122
    • 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/store/media.py: L61-77, L167-173, L176-185
    • docs/platform/org-feature-map.md: L24-31
    • 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/v1_credits_authz_test.py: L1-155
    • autogpt_platform/backend/backend/api/features/orgs/spend_test.py: L1-183
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3232-3953
    • autogpt_platform/backend/backend/api/features/orgs/regression_test.py: L3377-3417
    • autogpt_platform/backend/backend/api/features/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • 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.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
  • feat(platform): org management UI — create org, settings, members, invitations #13496 (ntindle · updated just now)

    • autogpt_platform/backend/backend/copilot/sdk/service.py: L5379-5396, L6255-6268
    • autogpt_platform/backend/backend/api/features/store/routes_test.py: L582-588, L607-616
    • autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py: L352-364
    • 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/v1_test.py: L8-17, L20-42, L814-824, L1050-1554, L1598-1600, L2097-2181
    • autogpt_platform/backend/backend/api/features/library/routes_test.py: L97-104, L139-149, L311-313, L316-396
    • autogpt_platform/backend/backend/copilot/baseline/service.py: L1587-1594
    • autogpt_platform/backend/backend/conftest.py: L49-68
    • autogpt_platform/backend/backend/api/features/library/model.py: L42-49, L61-70, L227-239, L402-407, L409-416
    • autogpt_platform/backend/snapshots/sub_success: L28-35
    • autogpt_platform/backend/backend/api/features/library/model_test.py: L13-20, L30-39, L105-145
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py: L26-32, L490-551
    • autogpt_platform/backend/backend/copilot/prompting.py: L682-704
    • autogpt_platform/backend/backend/api/features/chat/routes.py: L425-432, L544-553
    • 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/graphiti_search.py: L12-25, L62-83, L94-212, L217-230, L232-257
    • autogpt_platform/backend/backend/data/graph.py: L5-11, L28-34, L1419-1449, L1738-1757, L1767-1804
    • autogpt_platform/backend/backend/api/features/orgs/grant_db_test.py: L1-199
    • autogpt_platform/backend/backend/api/features/store/model_test.py: L1-58
    • autogpt_platform/backend/backend/api/features/store/model.py: L217-228, L245-257, L277-282, L284-290
    • 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/data/grants.py: L1-85
    • 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/store/media.py: L61-77, L167-173, L176-185
    • autogpt_platform/backend/backend/api/features/orgs/grant_model.py: L1-77
    • autogpt_platform/backend/backend/data/grants_test.py: L1-148
    • autogpt_platform/backend/backend/api/features/orgs/memory_db.py: L1-230
    • autogpt_platform/backend/backend/copilot/graphiti/client_test.py: L11-18, L107-158, L232-240, L278-286
    • autogpt_platform/backend/backend/copilot/graphiti/tiers.py: L1-428
    • autogpt_platform/backend/backend/copilot/graphiti/client.py: L51-106
    • 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/db_test.py: L425-433, L2249-2328
    • autogpt_platform/backend/backend/api/features/orgs/grant_routes.py: L1-117
    • 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/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store_test.py: L28-52, L420-422, L439-693
    • 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/graphiti/context.py: L11-44, L48-55, L57-164, L192-225, L227-233
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py: L2358-2365, L2372-2381, L2431-2469
    • autogpt_platform/backend/backend/copilot/tools/tool_schema_test.py: L112-121, L165-179, L243-261, L273-284
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • autogpt_platform/backend/backend/api/features/orgs/model.py: L18-27, L30-64, L70-77, L84-92, L117-122, L151-167
    • autogpt_platform/backend/schema.prisma: L623-629, L1404-1430, L2084-2089, L2105-2111, L2241-2246, L2263-2305
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes.py: L1-78
    • autogpt_platform/backend/backend/api/model.py: L43-71
    • autogpt_platform/backend/backend/copilot/graphiti/tiers_test.py: L1-428
    • autogpt_platform/backend/backend/api/features/search/content_handlers_integration_test.py: L22-44, L46-53
    • autogpt_platform/backend/backend/copilot/sdk/responsiveness_test.py: L97-109, L118-136, L227-233, L239-253
    • autogpt_platform/backend/backend/util/test.py: L3-9, L234-263
    • autogpt_platform/backend/migrations/20260717151612_agent_graph_grants/migration.sql: L1-45
    • 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/regression_test.py: L202-212, L215-226, L1061-1077, L1215-1220, L1224-1232, L3377-3429
    • autogpt_platform/backend/backend/api/features/orgs/grant_db.py: L1-170
    • autogpt_platform/backend/backend/api/features/library/routes/folders.py: L129-137, L140-159
    • 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/api/features/orgs/memory_routes_test.py: L1-430
    • autogpt_platform/backend/backend/api/features/library/routes/agents.py: L215-239
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • 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/api/features/orgs/memory_model.py: L1-34
    • autogpt_platform/backend/snapshots/lib_agts_search: L40-47, L92-101
    • 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/api/features/orgs/db.py: L4-10, L24-50, L341-346, L362-382
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py: L1-155
    • 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/orgs/spend_test.py: L1-183
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py: L1-7, L17-43, L543-545, L558-631
  • 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/sdk/service.py: L5379-5396, L6255-6268
    • autogpt_platform/backend/backend/api/features/store/routes_test.py: L582-588, L607-616
    • autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py: L352-364
    • 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/v1_test.py: L8-17, L20-42, L814-824, L1050-1554, L1598-1600, L2097-2181
    • autogpt_platform/backend/backend/api/features/library/routes_test.py: L97-104, L139-149, L311-313, L316-396
    • autogpt_platform/backend/backend/copilot/baseline/service.py: L1587-1594
    • autogpt_platform/backend/backend/conftest.py: L49-68
    • autogpt_platform/backend/backend/api/features/library/model.py: L42-49, L61-70, L227-239, L402-407, L409-416
    • autogpt_platform/backend/snapshots/sub_success: L28-35
    • autogpt_platform/backend/backend/api/features/library/model_test.py: L13-20, L30-39, L105-145
    • autogpt_platform/backend/backend/copilot/graphiti/ingest_test.py: L26-32, L490-551
    • autogpt_platform/backend/backend/copilot/prompting.py: L682-704
    • autogpt_platform/backend/backend/api/features/chat/routes.py: L425-432, L544-553
    • 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/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, 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/store/model_test.py: L1-58
    • autogpt_platform/backend/backend/api/features/store/model.py: L217-228, L245-257, L277-282, L284-290
    • 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/store/media.py: L61-77, L167-173, L176-185
    • autogpt_platform/backend/backend/api/features/orgs/memory_db.py: L1-230
    • autogpt_platform/backend/backend/copilot/graphiti/client_test.py: L11-18, L107-158, L232-240, L278-286
    • autogpt_platform/backend/backend/copilot/graphiti/tiers.py: L1-428
    • autogpt_platform/backend/backend/copilot/graphiti/client.py: L51-106
    • 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/db_test.py: L425-433, L2249-2328
    • autogpt_platform/backend/backend/copilot/tools/graphiti_store_test.py: L28-52, L420-422, L439-693
    • 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/orgs/team_model.py: L26-54
    • autogpt_platform/backend/backend/data/org_credit.py: L11-17, L260-329
    • 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/graphiti/context.py: L11-44, L48-55, L57-164, L192-225, L227-233
    • autogpt_platform/backend/backend/api/features/chat/routes_test.py: L2358-2365, L2372-2381, L2431-2469
    • 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/model.py: L18-27, L30-64, L70-77, L84-92, L117-122, L151-167
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes.py: L1-78
    • autogpt_platform/backend/backend/api/model.py: L43-71
    • autogpt_platform/backend/backend/copilot/graphiti/tiers_test.py: L1-428
    • autogpt_platform/backend/backend/api/features/search/content_handlers_integration_test.py: L22-44, L46-53
    • autogpt_platform/backend/backend/copilot/sdk/responsiveness_test.py: L97-109, L118-136, L227-233, L239-253
    • autogpt_platform/backend/backend/util/test.py: L3-9, L234-263
    • autogpt_platform/backend/backend/api/features/orgs/routes_test.py: L823-972, L1159-1164, L1303-1426, L2970-2972, L3232-3953
    • autogpt_platform/backend/backend/api/features/orgs/regression_test.py: L1061-1071, L1215-1220, L1224-1226, L3377-3423
    • autogpt_platform/backend/backend/api/features/library/routes/folders.py: L129-137, L140-159
    • autogpt_platform/backend/backend/api/rest_api.py: L43-49, L516-527
    • autogpt_platform/backend/backend/api/features/orgs/memory_routes_test.py: L1-430
    • autogpt_platform/backend/backend/api/features/library/routes/agents.py: L215-239
    • autogpt_platform/backend/backend/api/features/store/media_test.py: L64-90
    • 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
    • docs/platform/org-feature-map.md: L24-31
    • autogpt_platform/backend/backend/api/features/orgs/memory_model.py: L1-34
    • autogpt_platform/backend/snapshots/lib_agts_search: L40-47, L92-101
    • 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/api/features/orgs/db.py: L4-10, L24-50, L341-346, L362-382
    • autogpt_platform/backend/backend/api/features/v1_credits_authz_test.py: L1-155
    • 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/orgs/spend_test.py: L1-183
    • autogpt_platform/backend/backend/copilot/tools/graphiti_forget_test.py: L1-7, L17-43, L543-545, L558-631

🟢 Low Risk — File Overlap Only

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

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


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

ntindle and others added 4 commits August 26, 2026 21:44
Grant table with a polymorphic principal (TEAM enforced, USER reserved,
room for PERSONA), version-pinned by default with opt-in followLatest,
per-grant capability (VIEW/EXECUTE) and credential mode. Enforcement:
grant fallback in get_graph and an EXECUTE-grant path in
validate_graph_execution_permissions; non-TEAM principals raise loudly
rather than silently half-supporting an unshipped principal type.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm3mCG9okfdGtAXtFaDF9A
…ts, 403 authz

- resolve_graph_grant + list_received_grants now exclude archived workspaces,
  matching upsert_grant's create-time rule and list_teams visibility
- grant resolution/execution in graph.py constrained to the grant's
  organizationId so a followLatest grant can't follow a graph moved to
  another org
- owner/admin authorization failures raise NotAuthorizedError (mapped to
  403) instead of a plain ValueError (400)

Co-Authored-By: Claude Opus <noreply@anthropic.com>
…s tests

Dev's new get_graph/validate tests mock the AgentGraph/StoreListingVersion/
LibraryAgent prisma clients but not backend.data.grants.prisma, so the team-grant
fallback in get_graph (and the exec-grant check in validate_graph_execution_permissions)
hit the real, unconnected client and raised RuntimeError.

- graph_test.py: add a file-wide autouse fixture patching backend.data.grants.prisma
  with agentgraphgrant.find_many -> [] so resolve_graph_grant returns None (no-grant
  path is explicit). No assertions weakened.
- orgs/regression_test.py: patch backend.data.grants.prisma inline in the one
  non-owner get_graph test (test_regression_get_graph_wrong_org_returns_none),
  matching the file's per-test patch style.

Co-Authored-By: Claude Opus <noreply@anthropic.com>
…d/add collision with the memory-governance mount in the batch rollup

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ntindle
ntindle force-pushed the feat/agent-grants branch from 85441e3 to a6c2445 Compare August 27, 2026 04:38
@github-actions github-actions Bot removed documentation Improvements or additions to documentation platform/frontend AutoGPT Platform - Front end labels Aug 27, 2026

agentGraphId String
agentGraphVersion Int
AgentGraph AgentGraph @relation(fields: [agentGraphId, agentGraphVersion], references: [id, version], onDelete: Restrict)

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: Deleting a graph that has been granted to a team causes an unhandled database exception due to an onDelete: Restrict constraint.
Severity: HIGH

Suggested Fix

Wrap the AgentGraph.prisma().delete_many() call within a try...except block to catch the database constraint violation and return a user-friendly error message. Alternatively, consider changing the schema to use onDelete: Cascade or explicitly deleting associated AgentGraphGrant records before deleting the AgentGraph.

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/backend/schema.prisma#L2362

Potential issue: The `delete_graph` function attempts to delete an `AgentGraph` from the
database. However, the Prisma schema includes an `onDelete: Restrict` constraint on the
`AgentGraphGrant` model, which is related to `AgentGraph`. If a user attempts to delete
a graph that has been shared with a team (and thus has an associated `AgentGraphGrant`),
the database will raise a foreign key constraint violation. This violation is not
handled in the `delete_graph` function or the corresponding API route, causing an
unhandled exception and a 500 server error to be returned to the user.

Also affects:

  • autogpt_platform/backend/backend/data/graph.py
  • autogpt_platform/backend/backend/api/v1.py

@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 2 potential issues.

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 a6c2445. Configure here.

for row in eligible:
if row.principalId == membership.teamId:
return row
return None

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Arbitrary grant chosen among several

Medium Severity

resolve_graph_grant returns a single grant from an arbitrary matching TeamMember row. When the same graph is shared with two of the caller's teams under different pins or followLatest settings, get_graph and execution authz only honor that one grant, so a version the other grant covers can be denied.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a6c2445. Configure here.


agentGraphId String
agentGraphVersion Int
AgentGraph AgentGraph @relation(fields: [agentGraphId, agentGraphVersion], references: [id, version], onDelete: Restrict)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shared graphs cannot be deleted

Medium Severity

AgentGraphGrant references AgentGraph with onDelete: Restrict, and nothing clears grants when a graph is removed. Deleting a shared graph (or the pinned version a followLatest grant still points at) fails with a foreign-key error instead of revoking the shares.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a6c2445. 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 batch PR is queued in the batch-deploy rollup (batch-bot source of truth) cla: signed CLA signed by all contributors platform/backend AutoGPT Platform - Back end size/xl

Projects

Status: 🆕 Needs initial review
Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant