[chore] Clean up big-agents platform Part I - #4968
Conversation
…tract) - git mv services/agent → services/runner (engine subdir sandbox_agent kept) - compose/Helm/Railway service identity sandbox-agent → runner - env: AGENTA_AGENT_RUNNER_* → AGENTA_RUNNER_*, AGENTA_AGENT_API_URL → AGENTA_RUNNER_API_URL - env: AGENTA_AGENT_MCP_SERVERS_ENABLED → AGENTA_AGENT_MCPS_ENABLED, _HOST_ALLOWLIST → _MCPS_HOST_ALLOWLIST - CI: run-services-node-unit-tests → run-runner-tests + real runner-integration/runner-acceptance jobs - add tests/integration + tests/acceptance layers + vitest projects config Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- env AGENTA_MOUNTS_STORAGE_* → AGENTA_STORE_* (AGENTA_MOUNTS_TUNNEL_API kept, mounts-side) - move adapter core/mounts/storage.py → core/store/storage.py (MountStorage → ObjectStore) - MountsConfig depends on new StoreConfig; key prefix mounts/<project_id>/<mount_id>/ - STS scope policy follows the prefixed key; no dual-read fallback (break clean) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- gh compose (oss+ee): AGENTA_STORE_* passthrough + FUSE caps on runner (no bundled seaweed) - Railway: SeaweedFS service + volume, private-domain endpoint (no ngrok) - env examples + Helm example values store block Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- architecture/networking/configuration: runner :8765, local/daytona matrix, worker-records - new upgrades/runner-and-store page; correct guides 07/08/09 to final names - store: seaweedfs.enabled toggle, AGENTA_STORE_* block, per-tier matrix Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rm-integration # Conflicts: # hosting/docker-compose/ee/docker-compose.gh.yml # hosting/docker-compose/oss/docker-compose.gh.yml # hosting/railway/oss/scripts/configure.sh
…tform-integration # Conflicts: # docs/docs/self-host/02-configuration.mdx # docs/docs/self-host/guides/07-deploy-the-agent-runner.mdx # docs/docs/self-host/guides/08-custom-agent-runner-images.mdx # docs/docs/self-host/infrastructure/01-architecture.mdx
Our renames (AGENTA_RUNNER_*, AGENTA_STORE_*, AGENTA_AGENT_MCPS_*) were never deployed and have no fallback — listing them as deprecated-but-working is wrong. Pre-existing deprecation rows (deployed vars with real fallback) are untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Audit W2 gap: the public chart shipped every other worker (evaluations/events/
tracing/triggers/webhooks) but not worker-records. Mirror worker-triggers;
add agenta.workerRecords.{enabled,replicas} helpers (default on / 1 replica).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
- add worker-interactions Deployment + helpers (chart now ships all 7 workers) - finish mounts.* -> store.* rename: helpers (agenta.store.enabled), .Values.store, commonEnv AGENTA_STORE_* emit, gate refs in runner/seaweedfs templates - values.schema.json: add store.enabled + 3 missing worker keys + full store block - values.yaml + oss/ee example values: document store block + new workers - image agenta-agent-runner -> agenta-runner in _helpers Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- add Railway wrappers + deploy-script wiring for worker-interactions/records/triggers - image agenta-agent-runner -> agenta-runner (Dockerfile, scripts, CI, package.json) - deploy-from-images runner wrapper: ENV AGENTA_RUNNER_PORT (was PORT) - stale services/agent path refs -> services/runner in docker/ comments+README+AGENTS Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ecks, env examples - runner FUSE caps (SYS_ADMIN /dev/fuse apparmor) in oss/ee gh.local + oss gh.ssl - services AGENTA_STORE_* passthrough in the same 3 variants - worker-evaluations healthcheck across all 7 variants; ee traefik UI port - AGENTA_STORE_SIGNING_KEY dev default; runner/ngrok vars in env examples - image agenta-agent-runner -> agenta-runner in gh image defaults Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…h fixes - list all 7 workers + cron in architecture/networking; k8s guide + toggles - services port :80 -> :8080; postgres 16/18 -> 17 - store.* Helm keys; services/agent -> services/runner; agenta-runner image - replace dead rolling-update service names; fix config-reference links - scope bundled-SeaweedFS claim to dev compose (gh self-host uses external S3) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ddleware var - values.schema.json: add agentRunner block (enabled/externalUrl/enableMcp/provider/logLevel/daytona) - 02-configuration: add AGENTA_SERVICES_MIDDLEWARE_AUTH_ENABLED to the services table Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…s mount leak) Local durable cwd was mkdtemp'd fresh every turn, so each turn re-mounted the same session store prefix onto a new path; the failed busy-unmount then leaked the old mount, which later went stale and served ENOTCONN to file ops on the cwd (breaking tool relay). - defaultLocalCwd keys off request.sessionId: one stable mountpoint per session, so the existing checkMounted guard short-circuits later turns (no re-mount, no leak). - unmountStorage uses lazy unmount (fusermount -uz) so a still-busy mount detaches and reaps instead of failing 'Device or resource busy' and lingering. - Daytona cwd unchanged: the remote sandbox (and its in-VM mount) is destroyed per run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ler key The Railway bundled store ran the bare seaweedfs image with the default entrypoint — no advanced IAM engine — so AssumeRoleWithWebIdentity (the only STS path SeaweedFS authorizes) had nowhere to land and mounts could not sign. This mirrors the compose/Helm fix onto Railway: - New seaweedfs wrapper (hosting/railway/oss/seaweedfs/) bakes an entrypoint that generates s3.json + iam.json (OIDC provider -> the API's JWKS) and runs `weed server -volume.max=64 -s3.iam.config=...`. Image pinned to 4.37. - deploy-from-images.sh renders + deploys the wrapper before the API. - configure.sh wires AGENTA_STORE_JWT_ISSUER (api private URL, /api prefixed for SCRIPT_NAME) + a generated AGENTA_STORE_JWT_PRIVATE_KEY into the API, and the store-config env into the seaweedfs service. Also removes the dead WEED_JWT_FILER_SIGNING_KEY from both dev compose files: the advanced IAM engine reads sts.signingKey from iam.json, not the filer key. Railway path is syntax + JSON validated but deploy-untested (no Railway env here). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…s-platform-integration
What lands on
|
The runner rename moved the golden fixture to services/runner/tests/fixtures/sessions/redis_contract.json, but this API contract test still resolved the old services/agent path, so all 16 cases errored with FileNotFoundError in CI (run-api-unit-tests). Update the path and the two docstring references. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Context
This is Part I of the platform cleanup for
big-agents: the breaking renames and the non-dev wiring that bring the merged agent-runner and durable mounts up across every deployment surface. It also fixes a root-cause defect that made durable mounts fail to sign credentials on any real S3-compatible store.The store signed scoped runner credentials with S3 STS
GetFederationToken. SeaweedFS (the bundled dev store) does not modelGetFederationToken: it returns actionless tokens that the data plane then denies, so a git clone into a durable working directory dropped its FUSE channel and surfaced asENOTCONN. The wiring also predated a second problem. Nothing about the object store was mounts-specific, yet its env namespace, adapter location, and key layout all read as "mounts' private storage."Changes
STS now uses
AssumeRoleWithWebIdentity, the only path SeaweedFS authorizes. The API acts as its own OIDC issuer. It holds an RSA private key, mints a short-lived RS256 web-identity token, and serves the matching public JWKS at/.well-known/jwks.json. SeaweedFS fetches that JWKS to verify the token on each sign. A bucket-wide role grants the store; a per-request inline session policy narrows each credential to one mount prefix, so effective permission is role intersect session. The API fails closed: it refuses to sign when it cannot build a prefix-scoped policy. The signing key is shared across API replicas (env var in prod, a documented local-dev fallback otherwise) so the store's cached JWKS never desyncs.Before: one
GetFederationTokencall, no roles, denied on SeaweedFS.After:
AssumeRoleWithWebIdentityagainst the API's JWKS, scoped toagenta-store/mounts/<project_id>/<mount_id>/*.geesefs now runs in the foreground as a runner-tracked child (
-f). The detached daemon was reparented to init and died under write-heavy load, which was the proximate cause of theENOTCONN. The mount path also force-unmounts a stale node before remount and verifies the mount is alive with a real I/O probe.Store generalization (W6).
AGENTA_MOUNTS_STORAGE_*becomesAGENTA_STORE_*. The adapter and STS signing move fromcore/mounts/to a sharedcore/store/, andMountStoragebecomesObjectStore. Keys gain amounts/top-level prefix so a second store consumer can coexist. No backward-compat shim: nothing was deployed, so every old name is deleted in the same change.Runner rename (W5).
services/agentbecomesservices/runnerand thesandbox-agentservice becomesrunneracross compose, Helm, and Railway. Runner-infra env vars lose theAGENTinfix (AGENTA_AGENT_RUNNER_*toAGENTA_RUNNER_*); agent-behaviour vars keepAGENTA_AGENT_*. The MCP flag aligns with the renamed template field (MCP_SERVERStoMCPS). The CI job becomesrun-runner-tests.Non-dev wiring (W4) across every surface. Dev compose bundles SeaweedFS configured for the OIDC IAM engine (pinned image,
-volume.max=64, generatediam.json). gh/prod compose and the private platform repo use external S3 (STS native, no bundled store). Helm gets the full OIDC statefulset, JWT issuer and shared key injected into API pods only when the bundled store is enabled, schema entries, and example values. Railway gets a SeaweedFS wrapper image that generatesiam.jsonand the JWT wiring it needs.Docs (W7). The self-host store reference documents the web-identity mechanism, the complete
AGENTA_STORE_*table, and the shared-key-across-replicas requirement. Architecture and networking pages cover the runner sidecar on:8765and the bundle-or-external store toggle.Tests / notes
tsctypecheck clean. APIruff formatandruff checkclean.jwtIssuerandjwtPrivateKeyvalues pass schema validation..gitleaks.tomlby path and by value, not by exempting whole files.