Skip to content

feat(platform): add ChatGPT/Codex subscription transport preview - #13761

Merged
ntindle merged 111 commits into
devfrom
codex/chatgpt-sdk-preview
Aug 12, 2026
Merged

feat(platform): add ChatGPT/Codex subscription transport preview#13761
ntindle merged 111 commits into
devfrom
codex/chatgpt-sdk-preview

Conversation

@ntindle

@ntindle ntindle commented Aug 2, 2026

Copy link
Copy Markdown
Member

Important

Preview release for user-owned ChatGPT/Codex usage. LOCAL deployments allow it for every authenticated user. CLOUD deployments allow it for AutoGPT MAX, BUSINESS, and ENTERPRISE users. There is no Codex feature flag or staff-only allowlist, so deploying this branch to hosted production exposes discovery, sign-in, and execution to every user in those tiers. The connected ChatGPT account's own plan, workspace policy, allowance, and credits still determine what Codex can execute.

Why / What / How

This PR adds a user-funded ChatGPT connection as a distinct Codex subscription transport, without requiring an OpenAI API key.

Supported surface Execution path
AutoPilot chat Existing Claude Agent SDK and bundled Claude Code CLI, with a loopback Anthropic Messages gateway translating text and tool rounds to Codex App Server
AutoPilot graph block The same AutoPilot path when a ChatGPT credential is explicitly selected
Code Generation block Direct Codex App Server invocation when Codex App Server is selected

Existing platform-funded, self-hosted, and OpenAI API-key routes remain available and keep their existing behavior.

The frontend presents Sign in with ChatGPT under the existing OpenAI integration card and uses OpenAI branding. The stored credential and backend auth provider remain codex, while the API-key method remains openai. Keeping those canonical identities separate prevents a ChatGPT subscription credential from being mistaken for an OpenAI API key.

Changes 🏗️

Authentication and credentials

  • Add ChatGPT device-code sign-in, login status and cancellation, authenticated account and rate-limit read endpoints, and disconnect with provider logout where available. This PR does not add a frontend plan/rate-limit dashboard.
  • Store one active user-owned Codex connection per user in the existing encrypted IntegrationCredential payload as OAuth2Credentials(provider="codex", refresh_strategy="provider_runtime").
  • Strictly validate ChatGPT auth bundles and reject direct API creation of Codex or provider-runtime OAuth credentials.
  • Let the Codex runtime own token refresh, then checkpoint rotated auth back into the encrypted credential while holding the existing distributed credential lease.
  • Materialize auth.json only inside an isolated temporary CODEX_HOME. RabbitMQ messages, Redis login state, chat sessions, and Claude CLI environments contain credential IDs or short-lived capabilities, not ChatGPT access, refresh, or ID tokens.
  • Starting another sign-in supersedes the previous AutoGPT attempt through Redis-backed state. Popup close, timeout, unmount, explicit abort, and blocked-popup paths request server cancellation exactly once; successful completion does not. This clears AutoGPT-owned stale state but cannot bypass OpenAI-side device-code throttling or cooldowns.
  • Recheck entitlement before persisting a completed login and recheck authoritative credential ownership, provider, type, and validity at execution boundaries.

Runtime and execution

  • Pin openai-codex==0.144.4 together with its bundled Codex runtime.
  • Add bounded App Server capacity, startup, control, invocation, turn, and tool timeouts; lease heartbeats; refresh checkpointing; redacted errors; and temporary-home cleanup on success, failure, timeout, cancellation, or shutdown.
  • Keep every Codex-backed AutoPilot mode flowing through the existing Claude Agent SDK and bundled Claude Code CLI. A request-scoped gateway bound to 127.0.0.1 translates Claude text and MCP tool rounds to Codex App Server dynamicTools. Claude Code retains the MCP tool loop, permission/security hooks, transcripts and resume, compaction, attachments, and sub-sessions. The CLI receives only a random per-turn capability.
  • Keep the Code Generation block separate from the Claude harness: subscription-backed Code Generation invokes Codex App Server directly and exposes no workspace or tool access.
  • Reuse one process-local Codex runtime actor per user and credential. Overlapping AutoPilot turns reaching the same Copilot executor process use separate Codex threads while sharing the actor and its exclusive credential lease; canceling one borrower does not stop its siblings.

Routing and model behavior

  • Add an authenticated /api/chat/transports inventory and validate every requested route against what is currently usable for that user and deployment.
  • Keep AutoGPT Platform as the default on hosted deployments. Connecting ChatGPT adds it as another route.
  • Keep Self-hosted chat as the default when a local chat provider is configured. Connecting ChatGPT adds it as another route.
  • On a keyless self-host with one valid ChatGPT connection, automatically use that sole route and hide the selector. With no usable route, show setup guidance instead of inventing a platform route.
  • Show the route selector only when more than one usable route exists and refetch the inventory after pairing or disconnecting.
  • Keep the selected provider and credential ID immutable for the life of a session, including retries, queued turns, and resume. Entitlement, ownership, and credential validity are still checked at execution time. Downgrade, deletion, revocation, or malformed state makes the session fail visibly; it never reroutes to platform funding, another credential, or another user's account.
  • Prefer these AutoPilot routes when the connected account advertises the corresponding model and effort:
Mode Preferred model Effort
Fast / Balanced GPT-5.6 Luna low
Fast / Advanced GPT-5.6 Terra medium
Thinking / Balanced GPT-5.6 Terra high
Thinking / Advanced GPT-5.6 Sol xhigh

If a preferred model or effort is unavailable, routing uses an allowed account-advertised default or available OpenAI model and a supported/default effort.

For Code Generation, the model dropdown applies only to the OpenAI API transport. The subscription transport lets App Server choose its live account-compatible model while still applying the selected supported reasoning effort.

Entitlement and cost behavior

  • Add the shared require_entitlement(user_id, entitlement) policy shell.
  • In LOCAL mode, allow codex_subscription_transport before any subscription database lookup.
  • In CLOUD mode, read the authenticated user's authoritative AutoGPT User.subscriptionTier through DatabaseManager on every check in this PR and allow MAX, BUSINESS, and ENTERPRISE.
  • Hide Codex from optional discovery when tier state cannot be resolved. Actual connect and execution requests fail with a retryable service-availability error rather than treating an outage as a valid route.
  • Keep pending-login cancellation and credential deletion available even after downgrade so users can clean up.
  • Do not separately resolve organization-seat entitlements in this PR; cloud access is based on the user's authoritative subscriptionTier.
  • Keep entitlement reads deliberately uncached here. Shared caching and tier-mutation invalidation are isolated in follow-up #14004.
  • Record subscription-backed token usage with billing_mode=user_subscription and the execution path. Do not report public OpenAI API USD pricing as AutoGPT provider spend.
  • Skip platform model-paywall and platform-provider USD usage windows for Codex AutoPilot. Subscription-backed Code Generation does not apply the API-token wallet charge. Ordinary graph execution, turn concurrency, queueing, bridge compute, and infrastructure policies still apply, and usage consumes the connected ChatGPT account's allowance or credits.
  • Preserve existing OpenAI API-key billing behavior.

Configuration / rollout

No new secret, Codex rollout flag, or Codex-specific frontend build argument is required.

  • Cloud previews must still set FRONTEND_BASE_URL, build-time NEXT_PUBLIC_FRONTEND_BASE_URL, and runtime BETTER_AUTH_URL to the exact public origin. Otherwise the device-login popup can use the wrong host or lack the preview authentication cookie.
  • Outside the single-container appliance, CODEX_TEMP_ROOT is optional and otherwise falls back to the operating-system temporary directory.
  • Local Compose sets CODEX_TEMP_ROOT=/run/autogpt-codex and mounts a 128 MiB memory-backed temporary filesystem in the REST, graph-executor, and Copilot-executor containers.
  • The single-container appliance fixes CODEX_TEMP_ROOT=/dev/shm/autogpt-codex, creates it as 0700 for the unprivileged backend user, and verifies that REST, graph executor, and Copilot executor inherit it. Docker's /dev/shm keeps auth homes out of the writable layer; the documented quick-start sizes it to 2 GiB.
  • Narrow Git attributes keep the appliance shell scripts LF-normalized in Windows checkouts so a Windows source build uses the same executable bytes as Linux CI.
  • Capacity, process startup/control, checkpoint, invocation, Copilot-turn, tool, and login intervals have bounded defaults and optional CODEX_* overrides.
  • Deployments need outbound HTTPS access to OpenAI. Device-code login does not require an inbound OpenAI callback.

Explicit exclusions and known limitations

This PR does not route the following through a user's ChatGPT connection:

  • Orchestrator or shared LLM blocks;
  • image generation or embeddings;
  • ClaudeCodeBlock / E2B;
  • builder-panel-bound sessions;
  • background or system-owned LLM work.

It also does not add credential pooling, silent fallback to a platform credential, multiple active Codex credentials per user, per-user Kubernetes resources, persistent Codex homes, or persistent volumes.

Operational limits that remain:

  • Device-code authorization must be enabled for the ChatGPT account or workspace. A pending AutoGPT attempt is bounded by CODEX_LOGIN_TIMEOUT_SECONDS, 15 minutes by default.
  • Login actors are process-local. Redis shares status, supersession, and cancellation across REST replicas, but a restart of the owner process interrupts the active sign-in.
  • Runtime actors are process-local. A different Copilot executor process or replica cannot join the current owner and may receive the bounded, retryable codex_credential_busy error. Multi-replica owner routing or a dedicated bridge is not included.
  • Codex App Server and device-login actors currently run inside the ordinary REST, graph-executor, and Copilot-executor containers. A dedicated non-root, least-privilege bridge with memory-only homes, restricted egress, process limits, and credential-owner routing remains follow-up work.
  • Commercial/policy approval for hosted subscription passthrough and the Claude-harness compatibility route is a deployment decision outside this implementation; this PR does not claim that approval.

Validation

At review-fix parent 9cbe549d36dd3197b22871dbb7ae79d85c26c03f against dev@5c980c2f743ae2431e30f5511ce304413782c163, the formatted tree passed the following focused validation:

  • Backend auth/runtime suite: 95 passed, with 3 Windows-specific skips.
  • Backend model routing, compatibility gateway, and SDK environment suite: 74 passed.
  • Backend platform-cost, metrics, and Code Generation suite: 94 passed.
  • Backend billing/cost-leak suite: 19 passed.
  • Authenticated integrations API suite: 25 passed.
  • Isolated Linux executor/gateway suites: 65 passed, including processor cleanup, lease ownership, Codex billing-gate, and compatibility-gateway behavior; some cases overlap the focused Windows suites above.
  • Frontend: 83 tests across five affected files, TypeScript tsc --noEmit, and targeted Prettier checks pass.
  • Backend isort, Black, Ruff, AST/import compilation checks, and Git diff hygiene pass for every changed Python file.

Final head aa4bcb445c450d2da1c0de2a4c1ea03b9c3b70e5 restores the framework-compatible optional AutoPilot credential annotation, regenerates the public provider-discovery OpenAPI contract, safely canonicalizes macOS system temp aliases, and includes the exact generated Code Generation documentation sync emitted by CI. On that final diff, the AutoPilot schema/import assertion passes; the temp-home suite passes 12 tests with 6 expected Windows symlink skips; Ruff, Black, Prettier, Git diff hygiene, and full TypeScript tsc --noEmit pass. The final test-only commit also updates the shutdown mock to patch the manager module's bound transport symbol; that exact regression passes locally. Current-head CI remains the authoritative broad verification below.

The prior head 9eb8283db22d6ddf624f6c891c5b1579cdd07516 also completed a real-account, keyless local single-container smoke: four Claude Agent SDK turns used the Codex subscription route successfully, persisted 40 chat messages, recorded subscription token usage, and recorded zero platform model cost. The review-fix head changes authentication cleanup, model-routing structure, compatibility edge cases, cost reporting, and selector cleanup, so exact-head external-account smoke remains explicitly unchecked below.

  • Focused backend tests cover auth-bundle validation, temporary-home isolation, refresh/checkpointing, login supersession and cancellation, entitlement enforcement, authoritative credential identity, transport inventory, immutable session routing, process-local runtime sharing, queue/executor behavior, costs, Code Generation, and AutoPilot.
  • The bundled Claude Agent SDK/CLI conformance suite covers streaming text, tool call/result, cancellation, and resume against the compatibility gateway.
  • Frontend tests cover OpenAI/ChatGPT presentation, credential selection, popup cancellation, transport inventory, selector defaults and visibility, setup guidance, and session creation.
  • Current-head backend, frontend, full-stack, dual-architecture single-container, CodeQL, Classic, overlap, documentation, and PR-status automation passed on aa4bcb445c450d2da1c0de2a4c1ea03b9c3b70e5.
  • Fresh deployed-preview device-code sign-in at the current head with a real ChatGPT account.
  • Fresh deployed-preview Code Generation and AutoPilot smoke at the current head with a real ChatGPT account.

The unchecked real-account checks are intentionally not represented as automated coverage; they consume an external account's allowance and should be completed on the exact deployment selected for release.

Checklist 📋

For code changes:

  • Changes and explicit exclusions are listed above.
  • Test and rollout evidence is documented above.
  • Local focused backend, frontend, conformance, formatting, and diff checks finish successfully.
  • Credential access is user-scoped and execution revalidates authoritative credential identity.

For configuration changes:

  • Existing environment defaults remain compatible; no new required secret or rollout flag was added.
  • Compose supplies memory-backed temporary storage for local execution.
  • Required cloud-preview origin settings and optional Codex runtime settings are documented above.

Note

High Risk
Touches authentication, credential storage/refresh, chat session routing, and billing/paywall behavior for a new user-funded LLM path. A routing or entitlement bug could leak paid platform usage or expose ChatGPT credentials incorrectly.

Overview
Adds a user-funded ChatGPT/Codex subscription transport so AutoPilot chat, the AutoPilot graph block, and Code Generation can run on a connected ChatGPT plan instead of platform-funded or OpenAI API-key routes.

Auth & credentials. Introduces ChatGPT device-code sign-in under the existing OpenAI integration card, stores one codex OAuth credential with runtime-owned refresh/checkpointing, and blocks direct API creation of Codex credentials. Discovery, connect, and execution are entitlement-gated (LOCAL for all users; CLOUD for Max/Business/Enterprise).

Routing & billing. Adds /api/chat/transports and persists an immutable llm_auth_provider / llm_credential_id on each session. Codex AutoPilot skips the platform paywall and USD usage windows; subscription usage is recorded as user_subscription rather than platform spend. Builder-bound sessions stay platform-only.

Runtime. Pins the Codex App Server runtime, isolates auth homes under CODEX_TEMP_ROOT, and reuses a process-local runtime actor under an exclusive credential lease. AutoPilot still goes through the Claude Agent SDK via a loopback compatibility gateway; Code Generation can invoke App Server directly when that transport is selected.

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

ntindle and others added 30 commits July 20, 2026 13:34
Part 1 of 5 of the LLM catalog-as-code stack (successor to the DB-registry
stack #13605-#13613, closed in favor of this design: the catalog file is
the source of truth; the DB holds only per-install runtime state).

- ChatMessage.model + ChatMessage.routingSource (nullable): which LLM
  served each assistant turn and which routing layer picked it
  ("ld"|"db"|"env") — the join key product-intelligence needs to segment
  quality judgments by model (see product-intelligence#47)
- LlmModelMigration: retirement records (which AgentNodes were rewritten
  when a model was retired, revertable). Slugs are plain strings
  validated against the catalog at write time — no catalog tables exist.
  Partial unique index prevents concurrent active migrations per source;
  customCreditCost from the original design dropped (billing lives in
  the catalog file as of Phase B3)

Migration verified via prisma migrate reset over the full local chain.

Co-authored-by: Bentlybro <Github@bentlybro.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Part 2 of 5 of the catalog-as-code stack. backend/data/llm_registry/
catalog.py IS the model database: 85 models / 8 providers / 17 creators /
4 copilot routing cells, generated from the current MODEL_METADATA,
MODEL_COST, TOKEN_COST, and ChatConfig defaults so file == reality on
day one. Updates happen by PR (catalog-only diffs may ride hotfix->
master for CD-speed changes); git history is the audit log.

- catalog_model.py: validated schema — per-model costs (flat credits +
  per-1M token rates), visibility (GA/EMPLOYEES/ADMINS/HIDDEN),
  min_subscription_tier, fallback slugs, routing (surface->mode->tier)
- registry.py: load_catalog() builds the in-process read cache at
  startup; same read interface the copilot resolver (part 3), public
  endpoint (part 4), and Phase B consumers use. No Redis, no pub/sub,
  no DB — the file only changes at deploy, so coherence is free
- forever-guard tests: parse, unique slugs, referential integrity
  (providers/creators/fallbacks/routing cells), cost bounds
- cost-drift tripwires: catalog costs must equal MODEL_COST/TOKEN_COST
  in both directions until Phase B3 flips the reader and deletes the
  dicts — centralizing costs now cannot silently diverge
- lifespan: fail-soft load; empty catalog degrades to pre-catalog
  behavior

Co-authored-by: Bentlybro <Github@bentlybro.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Part 3 of 5 of the catalog-as-code stack. Copilot model resolution
becomes: LD slug flag (per-user cohorts) -> catalog routing cell
(PR-authored, deploy-propagated) -> ChatConfig env default, with the
catalog as the serve-time gate for the first two layers:

- unknown-to-catalog or disabled (kill switch) slugs are refused loudly
  (log + Sentry + route_warnings record) and fall through; HIDDEN
  visibility serves when explicitly routed (pre-launch testing state);
  an EMPTY catalog gates nothing — all 27 pre-existing router tests
  pass unchanged
- ChatMessage stamping: every persisted assistant message carries the
  served model + routing layer (ld|db|env) via the R1 columns — the
  product-intelligence join key (product-intelligence#47)
- two integration bugs found and fixed at resolve time:
  1) LD/env use OpenRouter spellings (anthropic/claude-opus-4.6) while
     the catalog registers dashed canonical slugs — the gate now
     resolves exact -> vendor-stripped -> dots-to-dashes, otherwise
     every legitimate LD Claude override would have been refused
  2) bare claude-* cell slugs are vendor-prefixed at resolve time so
     one cell value works on both OpenRouter and direct-Anthropic
     transports

Co-authored-by: Bentlybro <Github@bentlybro.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Part 4 of 5 of the catalog-as-code stack. GET /api/llm/catalog serves
the catalog's public facts from the in-process cache:

- unauthenticated by design; GA-visibility models only; costs and
  routing cells explicitly excluded from the payload (cloud-internal
  config, not catalog facts) — covered by a dedicated test
- zero DB reads; CDN-cacheable (Cache-Control public/max-age=300/
  swr=3600 on 200s, exact-path CACHEABLE_PATHS entry, explicit
  no-store on 429s)
- per-IP fixed-window rate limit, fail-open (protects read capacity,
  not money), with the backend's first X-Forwarded-For handling

Feeds the Phase B registry-driven model picker; self-hosted installs
may read it, though they primarily get the catalog on upgrade.

Co-authored-by: Bentlybro <Github@bentlybro.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The dev-era router tests assume an empty registry; registry_test.py
restores the real catalog into module globals. An autouse snapshot/
clear/restore fixture makes suite order irrelevant (14 tests failed
registry-first before this).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Part 5 of 5 of the catalog-as-code stack. Retiring a model is two
operations: flip enabled:False in a catalog PR (stops serving), and
migrate existing graph nodes off it — this CLI does the second,
salvaging the battle-tested v2 data layer:

  python -m backend.data.llm_registry.retire --usage <slug>
  python -m backend.data.llm_registry.retire <slug> --replacement <slug> [--yes]
  python -m backend.data.llm_registry.retire --revert <migration-id>
  python -m backend.data.llm_registry.retire --list

- SELECT...FOR UPDATE + JSONB_SET rewrite of AgentNode.constantInput
  inside a transaction, schema-prefix-safe; both migrate and revert use
  the provider-stripped node value (the v2 revert-matching fix)
- replacement validated against the catalog (must exist and be enabled)
- every retire records a revertable LlmModelMigration row; concurrent
  active migrations per source rejected by the partial unique index
- dry-run by default (usage summary, exit 1); --yes executes and
  reminds the operator about the catalog PR

Co-authored-by: Bentlybro <Github@bentlybro.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New runbook (docs/platform/contributing/managing-llm-models.md):
catalog field reference incl. enabled-vs-visibility semantics, the two
update lanes (dev train vs catalog-only hotfix->master), copilot
resolution precedence, the HIDDEN rollout recipe, retirement CLI, and
the public catalog endpoint. Updates the stale enum/MODEL_COST
procedure in ollama.md (with an honest Phase-B note), the CHAT_*_MODEL
framing in .env.default and copilot-local-llm.md, branching docs for
the catalog hotfix lane, backend AGENTS common tasks, the rate-card
docstring scope, and the API guide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Catalog cells hold cloud slugs, and the local transport passes slugs
through verbatim with no ValueError — a cell would override the
operator's CHAT_*_MODEL config and 404 against Ollama/vLLM at request
time with no fallback. Local deployments now resolve LD -> env only,
exactly the pre-catalog behavior. Found during the docs pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ruction

Pre-review-gate findings B2(part)/S1:
- routing cells now carry the vendor-prefixed DOT-form slugs
  (anthropic/claude-sonnet-4.6) — the spelling OpenRouter actually
  serves; bare dashed canonical slugs 404 there. New spelling-convention
  guard test; the reference guard is now slug-tolerant like the router
- catalog construction moved out of import time (get_catalog build-once
  accessor): a bad literal now degrades fail-soft in load_catalog
  callers instead of ImportError-crashing every process — the bad-
  catalog vector IS the fast-edit lane, so this matters

Co-authored-by: Bentlybro <Github@bentlybro.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…batim

Pre-review-gate findings B1/B2(part):
- B1: copilot turns run in CoPilotExecutor, not the rest API process —
  without loading the catalog there, routing cells, serve-time gating,
  and HIDDEN-serves-when-routed were silent no-ops in production.
  Fail-soft loader at executor startup + regression tests. Audited all
  resolve_model/stream callers: rest_api and the copilot executor are
  the only host processes (the scheduler only enqueues)
- B2: the resolver's vendor-prefix hack is gone — cells now carry
  transport-ready spellings (see the catalog spelling-convention guard)
  and are returned verbatim; OpenRouter sends them as-is, the direct-
  Anthropic normalizer strips/dedots them (tested against the real
  catalog cells on both transports)

Co-authored-by: Bentlybro <Github@bentlybro.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pre-review-gate S3 + nits: min_subscription_tier now round-trips through
the public catalog payload (the Phase B picker needs tier gating and it
is not sensitive); fallback_model_slug values referencing models excluded
from the payload (non-GA) are nulled so consumers never see dangling
refs; dead header line removed. OpenAPI regenerated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…pped prettier)

Content was semantically intact (246 paths both sides) — the prior
commit's single-line export just never ran through prettier because the
Node version check failed offline.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… modes

Pre-review-gate B3+S4: AgentNode.constantInput stores FULL enum values
(mixed bare and provider-prefixed — graph.migrate_llm_models compares
against LlmModel.value verbatim), so node-value mapping is identity with
catalog slugs. The carried v2 helper stripped provider prefixes, which
silently no-opped retirement of prefixed models (kimi-*) and wrote
out-of-enum values when retiring ONTO one. Regression test seeds a
moonshotai/kimi-k2.5 node and round-trips retire+revert. CLI action
modes are now mutually exclusive instead of silently ignoring the
positional.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…istry

SubscriptionTierName Literal alias shared by CatalogModel, RegistryModel,
and the public payload build — clears the pyright error the S3 fix
introduced (str | None flowing into the Literal-typed field).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pre-review-gate S2: local deployments SKIP catalog routing cells (the
docs said the opposite); stamping claim scoped to the baseline path;
routing example uses the transport-ready dot-form cell spellings;
example slugs match the real catalog.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Populated default cells (seeded from ChatConfig CODE defaults) would
have silently shadowed the CHAT_*_MODEL env config of any deployment
whose env differs from code defaults — including prod — the moment this
deployed, and would flip models during LD outages (fall-through lands
on the cell, not the env value). Cells now start empty: env stays
authoritative for a (mode, tier) until an operator claims that cell in
a catalog PR. Reference/spelling guards still govern any cells added.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Cells are OUR cloud's deployment config traveling in the shipped
catalog file — not defaults for everyone. Self-hosted installs
(behave_as != CLOUD) now skip the cell layer even on cloud transports:
a cell set for prod must not override an operator's CHAT_*_MODEL on
their next upgrade, and they have no LD to escape through. Local
transports were already skipped. Both resolve LD -> env, the
pre-catalog behavior.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added cla: signed CLA signed by all contributors and removed cla: signed CLA signed by all contributors cla: pending CLA not yet signed by all contributors labels Aug 12, 2026
@ntindle

ntindle commented Aug 12, 2026

Copy link
Copy Markdown
Member Author

/reapprove

github-actions[bot]
github-actions Bot previously approved these changes Aug 12, 2026

@github-actions github-actions 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.

Re-approved at the request of @ntindle (#13761 (comment))

@github-actions github-actions Bot added cla: pending CLA not yet signed by all contributors and removed cla: signed CLA signed by all contributors labels Aug 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🔄 Auto-redeploying: new commits pushed to a PR with an active deployment. Refreshing development environment for PR #13761.

@github-actions github-actions Bot added cla: signed CLA signed by all contributors and removed cla: pending CLA not yet signed by all contributors labels Aug 12, 2026
@ntindle

ntindle commented Aug 12, 2026

Copy link
Copy Markdown
Member Author

/reapprove

github-actions[bot]
github-actions Bot previously approved these changes Aug 12, 2026

@github-actions github-actions 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.

Re-approved at the request of @ntindle (#13761 (comment))

@github-actions

Copy link
Copy Markdown
Contributor

🔄 Auto-redeploying: new commits pushed to a PR with an active deployment. Refreshing development environment for PR #13761.

@ntindle

ntindle commented Aug 12, 2026

Copy link
Copy Markdown
Member Author

/reapprove

github-actions[bot]
github-actions Bot previously approved these changes Aug 12, 2026

@github-actions github-actions 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.

Re-approved at the request of @ntindle (#13761 (comment))

Comment thread autogpt_platform/backend/backend/copilot/tools/helpers.py
…est against loop-closed flake

Same retry-once pattern as conftest's _create_user_with_loop_retry — the
batch's added test files shift ordering enough that this session-loop test
becomes the first DB call after a function-loop teardown.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🔄 Auto-redeploying: new commits pushed to a PR with an active deployment. Refreshing development environment for PR #13761.

@ntindle

ntindle commented Aug 12, 2026

Copy link
Copy Markdown
Member Author

/reapprove

@github-actions github-actions 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.

Re-approved at the request of @ntindle (#13761 (comment))

Comment thread autogpt_platform/backend/backend/copilot/sdk/service.py
Comment thread autogpt_platform/backend/backend/copilot/sdk/service.py
@github-actions

Copy link
Copy Markdown
Contributor

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

@Pwuts

Pwuts commented Aug 12, 2026

Copy link
Copy Markdown
Member

🧹 Preview Environment Cleaned Up

All resources for PR #13761 have been removed:

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

Cleanup completed successfully.

@sentry

sentry Bot commented Aug 13, 2026

Copy link
Copy Markdown

Issues attributed to commits in this pull request

This pull request was merged and Sentry observed the following issues:

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

Labels

cla: pending CLA not yet signed by all contributors cla: signed CLA signed by all contributors documentation Improvements or additions to documentation platform/backend AutoGPT Platform - Back end platform/blocks platform/frontend AutoGPT Platform - Front end size/xl

Projects

Status: ✅ Done
Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants