Decouples "many users" + "many server replicas" from "many machines" so the platform is tenant-isolated and horizontally safe on the current single node. - Per-signup workspaces (cm-auth): a new hosted-identity sign-in provisions and owns its own workspace instead of joining the first. Config-gated by auth.per_signup_workspace (default off); concurrent first-logins serialized by a per-subject advisory lock so no duplicate workspaces. - Terminal tickets in Postgres (migration 0016, hashed, single-use): any replica can redeem a ticket minted by another. Drops the in-process ticket map. - Container registry in Postgres (migration 0017, agent_containers): Terminal and Sandbox managers resolve an agent's container through a shared registry, so a 2nd replica reuses it instead of spawning a duplicate. node_id recorded as 'local' (Phase 2 hook). Boot reconcile removes only true orphans, so terminals now survive a redeploy (tmux sessions resume). - Per-workspace quotas (cm-api/quota.rs): plan-tier caps on agents + live containers, enforced at agent create + terminal spin-up (reconnects allowed), returned as HTTP 402. New GET /api/quota surfaces usage vs limits. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
37 lines
979 B
TOML
37 lines
979 B
TOML
[package]
|
|
name = "cm-auth"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
publish.workspace = true
|
|
|
|
[dependencies]
|
|
argon2 = "0.5"
|
|
base64 = "0.22"
|
|
jsonwebtoken = "9"
|
|
rand_core = { version = "0.6", features = ["getrandom"] }
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
|
|
serde = { workspace = true }
|
|
tokio = { workspace = true }
|
|
sha2 = "0.10"
|
|
sqlx = { workspace = true }
|
|
uuid = { workspace = true }
|
|
cm-db = { path = "../cm-db" }
|
|
cm-domain = { path = "../cm-domain" }
|
|
thiserror = { workspace = true }
|
|
time = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
uuid = { workspace = true }
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
|
|
axum = "0.8"
|
|
rsa = { version = "0.9", features = ["pem"] }
|
|
serde_json = { workspace = true }
|
|
sqlx = { workspace = true }
|
|
cm-testkit = { path = "../cm-testkit" }
|
|
tokio = { workspace = true }
|
|
|
|
[lints]
|
|
workspace = true
|