Repository navigation
feat: expose the app-content bucket, MCP and OAuth [ENG-1740] - #59
Merged
Merged
Conversation
- currents.appContentStorage.* renders the PERMANENT_STORAGE_* the server, change-streams and writer read for context shares, organization logos and session files. Unset fields take the objectStorage values; the internal endpoint and region only with the endpoint. Without a bucket, sharing and logo editing stay off, so upgrades are unchanged until it is set. - currents.mcp.enabled (default true) and currents.oauth.* render MCP_* and OAUTH_* on the server. OAuth defaults on, and also turns on for existing releases on upgrade, but renders only with domains.https or an appHost of localhost or *.localhost: on any other http host the API refuses to start. A *.localhost appHost gets OAUTH_HTTP_ALLOWED_HOSTS. - OAUTH_JWKS_URL points at the API on localhost: a pod cannot resolve a *.localhost appHost, and may not reach a real one without going out through the ingress, so every access token was rejected. - The RustFS bucket job creates currents-app-content with lifecycle rules for the share prefixes. The docs cover the bucket, its CORS and IAM, and artifact expiry on external storage. - Drop SSO_SAML_SP_CERT_FILE and currents.sso.saml.spCertKey: the API never read them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhM4wHR2xPP8bbrkXGaqUD
|
| Topic | Details | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| App Content Storage | Configure the permanent app-content bucket for server, writer, and changestreams, including storage fallbacks, secret-based credentials, IAM permissions, sample bucket creation, and scoped lifecycle guidance that preserves logos and session files.Modified files (12)
Latest Contributors(2)
| |||||||||
| Remote MCP and OAuth | Expose configurable MCP and OAuth provider settings with safe HTTP-host handling, JWKS configuration, feature toggles, and generated documentation for remote client authentication.Modified files (5)
Latest Contributors(2)
|
With domains.https the API fetches its signing keys from appHost, as cloud does. Over http the appHost is localhost or *.localhost, which a pod resolves to itself or not at all, so the chart points the API at its own port there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhM4wHR2xPP8bbrkXGaqUD
…ain [ENG-1740] The job replaced the app-content bucket's lifecycle configuration on every apply, dropping rules added since. It now writes its rules only to a bucket without any. The quickstart says when to point OAUTH_JWKS_URL at the API itself: a server pod that cannot reach or trust appHost rejects every token. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhM4wHR2xPP8bbrkXGaqUD
…les [ENG-1740] The RustFS bucket job skipped the share rules whenever the app-content bucket had any lifecycle configuration, so a bucket with only other rules never expired its share prefixes. It now rewrites the four share rules, matched by ID, and keeps the bucket's other rules, as the Docker rustfs-init does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhM4wHR2xPP8bbrkXGaqUD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Helm version of currents-dev/docker#31: chart values for the app-content bucket, remote MCP and the OAuth provider, and documentation for artifact retention (ENG-1740).
The chart builds each pod's environment explicitly, so until now none of
PERMANENT_STORAGE_*,MCP_ENABLEDorOAUTH_*reached a pod unless the operator added them throughenv.Changes
currents.appContentStorage.*rendersPERMANENT_STORAGE_*on the server, change-streams and writer pods. The writer needs it because it deletes session files.objectStoragevalue, so one endpoint and one secret serve both buckets.bucketdefaults to empty, so an upgrade changes nothing until it is set.currents.mcp.enableddefaults totrue;currents.mcp.originssetsMCP_ORIGINS.currents.oauth.*turns on the OAuth provider, dynamic client registration and client ID metadata documents.domains.httpsis true, orappHostislocalhostor a*.localhostname. On any other http host the API refuses to start with OAuth on, so the chart leaves it off there.*.localhostappHostalso getsOAUTH_HTTP_ALLOWED_HOSTS. Other http hosts don't get the option: there Better Auth advertises anhttps://issuer the install doesn't serve.OAUTH_JWKS_URLis set to the API's own port, only whendomains.httpsis false (soappHostislocalhostor*.localhost).appHostunless this is set.localhostnor*.localhostto the API, so without it every token is issued and then rejected at/mcp.domains.https, it stays unset and the API fetches fromappHost, as cloud does.samples/rustfs-create-bucket-job.yaml(and its copy indocs/eks/dependencies.md) createscurrents-app-contentbesidecurrents, with lifecycle rules scoped toai-context-share/,share-3d/,share-7d/andtrace-links/(2, 4, 8 and 8 days). Logos and session files share the bucket, so the rules are never bucket-wide.dependencies.mdgets the app-content bucket (create it,s3:DeleteObject, CORSPUTfor logo uploads, scoped lifecycle rules) and artifact expiry. The chart can't reach the operator's bucket, so retention is documentation rather than a value.iam.mdadds the second bucket to the IRSA policy.quickstart.mdgetsappContentStorageand a "Remote MCP and OAuth" section.appContentStorage.bucket.configuration.mdis regenerated.SSO_SAML_SP_CERT_FILEandcurrents.sso.saml.spCertKey. The API reads only the SP key.Upgrade notes
domains.https: trueget OAuth on upgrade. Setcurrents.oauth.enabled: falseto keep it off.currents.appContentStorage.bucketand a bucket created as described independencies.md.spCertKeyis ignored for that key.Testing
helm templateacross value combinations:*.localhostover http,localhost:8080over http, and another http host (OAuth not rendered).appContentStorage: unset, everything inherited, IRSA, its own endpoint and secret,pathStyle: falseoverriding the artifacttrue, and no endpoint anywhere (fails with a message).helm lintwith the CI values passes, andconfiguration.mdmatches helm-docs.A real install on Docker Desktop Kubernetes, following the developer guide in a separate namespace, with
samples/local/chart-config.yamland images built from currentsmain:http://currents-app.localhostis allhttp://./mcpwith the OAuth token listing tools.OAUTH_JWKS_URL,/mcprejected the same token withno token payload.helm templatewithdomains.https: truerenders noOAUTH_JWKS_URL.POST /v1/sessionsupload lands incurrents-app-contentthrough therustfs.localhostpresigned URL.DELETE /v1/sessions/<id>empties the bucket through the writer's internal endpoint.currents.mcp.enabled=falseandcurrents.oauth.enabled=falsegive/mcp503 and no OAuth metadata; re-enabling restores both.Not tested:
Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01UhM4wHR2xPP8bbrkXGaqUD