v0.2.4
LatestHarden what shipped; close the gaps.
Security, observability, and performance hardening. No wire changes, so upgrading is a one-line version bump — every change is provider-agnostic and lands with tests.
- Tunable concurrency.
DELTA_MAX_CONCURRENCYsets how many sessions run at once — default 8 (up from 4), clamped 1–256. Sessions stay serial and the queue is tested correct to 128 concurrent runs; the practical ceiling is your provider's rate limit, so keep it low on a subscription key and 25+ on a high-limit API key. Budget roughly 4–15 MB per active run. - Live progress without a stream.
GET /v1/tasks/:id/events?since=<id>returns a cursor-paged JSON page for hosts that can't hold an SSE connection, andmodel.callevents now carrycache_hit_pctso you can watch per-turn prompt-cache warmth live instead of reconstructing it after the fact. - One-step operator-config updates. The new
delta bundle applycommand (also run on every boot) re-seeds the fixed operator files, validating each first and never touching the agent's learnedDELTA.md.
- Faster cold starts on scale-to-zero. A host can now flip
stop→suspendand cut cold start from ~4.7s to ~1.1s. The write-lease reclaims itself across a suspend instead of exiting and stalling on the platform's restart cap. - Per-tenant task access.
GET/DELETE /v1/tasks/:idand…/eventsnow enforce that the caller owns the run — a cross-tenant or unknown id both return404. Ownership comes from the gatewayx-delta-userheader, never a request body. SetDELTA_STRICT_TENANTto require an owner on every run. - Memory-widening can't be self-asserted. The metadata that widens a private memory to a broader audience is stripped from every request body by default, so a caller can't self-authorize it.
DELTA_TRUST_REVIEW_METADATA=1opts a single-tenant daemon back in. - Read-only research subagents. A research child is admitted only read-only tools; anything unmarked defaults to mutating, so it can never write,
remember, or run code mid-run. - Earlier, cheaper compaction. The pre-send size gate now projects off the provider's real last-call input, so a long run compacts before it wastes a frontier call on an over-budget request.
- Deterministic memory recall. An identical query returns the same set every time (ranking no longer drifts on a self-mutating counter).
DELTA_ISOLATE_AGENT_MEMORYkeeps agents on a shared database from reading each other's rows.
- Concurrent self-writes no longer clobber each other. Two runs calling
rememberat once used to overwrite each other'sDELTA.md, silently dropping one lesson. A compare-and-swap now lets both survive. - No more silently dropped lessons. A malformed learning could throw and be lost entirely (latent since 0.1.0); it now degrades to a best-effort learning instead of none.