Skip to content

v0.10.0 — EvenDrive, standardized Control editing, hardened LLM path

Choose a tag to compare

@jozer-rami jozer-rami released this 28 Sep 13:26
· 2548 commits to main since this release
d84385a

A minor release, led by EvenDrive, standardized Control editing, and a hardened LLM request path. 674 non-merge commits since v0.9.0. No breaking changes.

EvenDrive and the Desktop file explorer

The Desktop sidebar gains a GFS file explorer tree, and files open as previews in a workspace tab (single-click opens the preview). The Files view is renamed EvenDrive, with an active-folder breadcrumb menu, a file-list scroll fix, and inherited file permissions with a parent-folder update flow (#697, #658).

Standardized Control editing

Control UI and profile-ui move scalar, relationship, and document edits onto shared edit-dialog primitives: team rename, member contact and add dialogs, agent names, identity documents (with Markdown preview), model configuration, GFS rename, channel credentials, and approval preferences (#775).

Control admin invitations that replace the inviter

A control admin invitation can carry replaceInviter. Accepting it retires the inviting admin in the same transaction, revokes their paired desktop invitation, and preserves team access through the hand-over (#860).

LLM request path

  • Provider families are declared and subscription catalogs reconcile against the vendor, with an opt-in periodic sync (#732).
  • Context is counted in bytes, the request cap rises to 8 MiB, and size refusals are classified (#739, #731).
  • Streams get a 30 min per-attempt cap with a typed idle timeout and SSE keepalive; the queue-wait bound runs on its own timer (#748, #776).
  • Upstream 429/4xx and control-plane outages return distinct codes, and a control-api that is unreachable during a restart surfaces as 503 control_plane_unavailable from the nginx gateways (#821).
  • Codex and Grok contracts rise to 256 tool calls and 1024 messages; the tool-call limit reports as a contract refusal, not an outage (#685, #728). Codex preserves and authorizes image input (#660).

GFS, workflows, and hardening

  • Every GFS rate-limit denial is reported, Desktop budgets are sized, and the agent-plane limit is enforced; Desktop stops spinning on read rate limits (#766, #702). Bounded image reads are preserved as model input (#670).
  • control-api constrains Secret types and annotation keys on write, driven by a per-CRD Secret-reference contract (#252).
  • web-search validates fetch destinations against SSRF and bounds fetch_page resources (#608).
  • WorkflowRecipe and HCC reconcilers read before writing NetworkPolicies, headless Services, and policies, and back off policy-pending requeues (#773, #769, #752, #695).

Upgrade notes

All 9 CRDs change — apply charts/clerum-crds before the app. Each CRD gains a clerum.io/secret-reference-contract annotation; the schemas themselves are unchanged. control-api reads this annotation and fails Secret-reference writes with Missing Secret reference contract if it is absent. Deploy with gcp-prod-deploy-crds (or the equivalent for your cluster) ahead of the workload rollout.

deploy/base changes only in control-plane: codex-llm-proxy and grok-llm-proxy raise memory to 768Mi/1Gi, cap the V8 heap, extend terminationGracePeriodSeconds to drain admitted 30 min streams, and derive MAX_BODY_BYTES instead of setting it. The subscription catalog sync ships disabled (SUBSCRIPTION_CATALOG_SYNC_CRON_ENABLED: "false"). No new services, RBAC, or ServiceAccounts, so no post-deploy RBAC sync is needed.

Images

Release images are promoted, not rebuilt — release-images.yml copies the exact digests already proven on :latest into :v0.10.0, so they are byte-identical to what was tested.

Pull by tag, or pin by digest:

ghcr.io/evenfire-ai/<image>:v0.10.0

The same set is attached to this release as release-images-v0.10.0.json, so a deployment can consume the digests directly rather than scraping this table.

Image Digest
airtable-mcp-server sha256:9f1b6cd4f11aa47229d942973dde9ef463896c3d854efe0a97c92dfb4ce625c0
channel-reader sha256:34c0a9c94b27159552600aea3ee6d309033f320a5ca225311f04ce3fdd8614b7
clerum-workflow-base sha256:99fad490416e116bb442e74b8996f063fcba66485b072e36b262a8a080460b2c
codex-llm-proxy sha256:b9031aa7d11a26bdd66b98e7ee0a2a84e0344ae7163cde6ea1ff5c2c2eee999d
control-api sha256:797d09aa53b983d3161da52dc6fdb04a354b2c96f107491c8e6f77e2a6a8234f
control-ui sha256:8ec21ecba83d1a5aba18e0bc2594cc939c54cf3dfe783aa345a423f8be1a45ee
external-rest-api sha256:076c0def450ea79223f3b172e6f1aaf3e2767eadc31b8f4dbb872b8b8aae0d62
gfs-controller sha256:39ae7c450b756fefb3a63633683ecfe438fe38a8ba5e24da5f6ccea5099731eb
grok-llm-proxy sha256:172e17543b448e135668df37e669d1c76215348e6a487986eb9ed3accd364f20
host-context-controller sha256:2daa06c2b0b2309de624c49222d3118d103afb6dd751c63d88388347bf0d1935
mcp-host sha256:5945443eaa10972443a95ce3ddc7714c3a01717f1dd7dc313d814a8f1de20654
mcp-host-desktop sha256:72fd78c13672d860bc72dc9c10382d1f0cfaef367409a654f747df1783ec83a2
mcp-host-full sha256:9815658bf536d4ce29f68d7668d24d2a187e484eb4d8d1152ff9f5ab1de2a3fc
mcp-host-slim sha256:77b405672c8071f57d798b7bcc8d06736a2072ae34ecbe74781fa34095c2026b
mcp-proxy sha256:092b5c8a2a34c3c8a46954ba489daa7ca740f13d1815d11d65311231e671d6b2
mock-mcp-server sha256:caac410b30133c21d110544996f5cdb7f71462d08411d8df5654da853516e007
mock-stdio-mcp-server sha256:7fc0bca8f6dbfcefe16810602a8596b1f198125eae794ef144f84d2300bccce5
nginx-egress-proxy sha256:4d677d4ce64afb1055b539e0aac5bafad85c2aaa2adc55de555bb07de3d09edd
playwright-server sha256:e1b7568078b53d0522dbdc3c3f16d4457ed1808461b7e92aaa2f751844af6a28
profile-ui sha256:5f94d5ac671aecbc08bf03ac572a155ae9f2a5ff8f95820cc6b6f8d4d1b5c57c
rpc-proxy sha256:ef6fbe71a7b4d73a7adaf08e59acf2c26ae8c6152de54427038c7bd2b1779853
stdio-bridge sha256:f47925d0af73384348074cfe480eb778772f194bde8e40c6b0de04de9c6474fa
web-search-mcp sha256:38f3e3dea9640b7345b7dddc7c56f80b0e27bcc6f118df931742d15e641adace
webhook-gateway sha256:87514e276e58fcbce62e7ead80686001c042c00b11432f5323a51e90a6e947a5
webhook-proxy sha256:c2c5fa27adf81ddab9dade72e3ffa9b961477570f1d373b9ab149feee6e4c693
workflow-approval-request-reader sha256:f041d5946a9e7f8f6860f0053a86b355f5ca62c5d5fc5ac1c735fbec015b2310
workflow-coordinator sha256:93529f683e5794c8e057e29f4dfb5995d635fa8e15b670a405ebc1feca70d161
workflow-recipes sha256:a079416e20b96cfd79c9fad356a6ec94acac5fa218403119caecc2c16de68ea1
workflow-snippet-runner sha256:ea6ea55d06ebb35f1ba498729210867ff7043200221b35c8ef29bb86e880a386
workspace-files-controller sha256:82b0edd2d2085094d835c15a91e7d11a0e68694413ac7d996227824864b95806