v0.19.2 — Hindsight recovery, External spend on /usage, auth-broker hardening, /model carrier doctor
v0.19.2 — Hindsight recovery, External spend on /usage, auth-broker hardening, /model carrier doctor
Closes dual-writer and silent-LLM footguns in Hindsight, puts short-window OpenRouter
cash spend on /usage without giving agents the master key, hardens the auth-broker
and LiteLLM pacer against OAuth-leak / unpaced-router classes, and makes stale
start.sh vs rev5 .session-model drift fail doctor (and log NOT-APPLIED) so
Telegram /model stops looking successful when the carrier is unread.
Hindsight recovery
- Close dual-writer + silent-LLM recovery footguns (#3421) —
stopHindsight
now stops/removes every container mountingswitchroom-hindsight-data(not just
the live name); LiteLLM-mode docker health requires API/healthand TCP to
the LiteLLM base; the stale-claim reaper uses plain UPDATE + SELECT plus a
boot-deferred one-shot (no more abortedRETURNING | grep -c);HINDSIGHT_API_WORKER_ID
is pinned on docker-run and compose paths. Doctor fails multi-mount and network-mode
/ LiteLLM-reachability drift. Live signatures from 2026-07-19 park-and-wait recovery
(canary dual-writer checkpoint corruption, bridge retain deaths, orphaned
processingconsolidations). - Compose LiteLLM parity + reaper/doctor follow-ups (#3422) — compose no longer
stays bridge + plain/healthwhile emitting loopback LLM base URLs; when any
Hindsight LLM base is host-loopback / LiteLLM is explicit, compose mirrors live
fleet (network_mode: host, port pins, LiteLLM-aware health). Reaper counts via
psqlUPDATE N; doctor gates litellm on per-op base URLs (bareANTHROPIC_BASE_URL
only when it looks like LiteLLM). - Doctor surfaces Hindsight boot LLM-verification failure (#3409 / #3408) —
MemoryEngine boot WARNING
(LLM connection verification failed for '<config>') is now a first-class doctor
failure instead of log-only drift. - Retain mission excludes in-flight process narration (#3418) —
DEFAULT_RETAIN_MISSIONexplicitly skips workflow/process narration so new agents
don't fill banks with ephemeral worker-state noise (existing missions stay
operator-owned).
External spend on /usage
- External 24h/7d OpenRouter spend on the
/usagecard (#3420) — after Claude
quota bars, layout B shows short-window External $ burn (24h / 7d + top models)
so cash spend is visible without a separate LiteLLM dig. - External spend via the auth-broker (#3423) — broker owns the LiteLLM master
key, caches sanitizedexternal-spend.json, and exposesget-external-spend
(ACL =list-state). Gateway soft-fails closed (omits the External block) —
no agent needslitellm/master-key. /usagehonesty + info-exposure hardening (#3412 / #3411) — live stamp keys
off any successful probe row (notresults.length); false "Live" on empty-cache
probe failure is gone.
Auth-broker + LiteLLM pacer
- Symlink-safe unified mirror write (H1 + M1) (#3416) — shared
safeMirrorWrite
for consumer and agent credential fanout underCAP_DAC_OVERRIDE. - Reject stale identities + tear down sockets on unbind (H2) (#3414) —
classify-null no longer falls back to a bind-time identity; unbind tears sockets
down. - Pacer gates the
/v1/messagesrouter path (H3) (#3413) — paces
anthropic_messages(not only passthrough) with explicit
PACE_MODEL_GROUPS/ exclude lists sosonnet/fablearen't unpaced on
litellm v1.91.0 router traffic. - I2 OAuth-leak config guard + long-mark corroboration (#3417) — lint +
fleet-health sensor forforward_client_headers_to_llm_apiscoped only to
subscription-Claude groups (claude-*/sonnet/fable;*-openrouter
excluded); keeps the subscription honest against one-line third-party token
leaks. - Config-time LiteLLM model-reference validation (#3410 / #3407) —
switchroom doctorchecks switchroom model refs against the live proxy
model_listso a deleted group can't silently 400 Hindsight for hours.
Model switching + progress cards
- Doctor + logs for rev5
.session-modelcarrier drift (#3424) —
checkStartShSessionModelCarrierfails readablestart.shthat still only reads
legacy.session-model-overridewhile gateway writes rev5.session-modelJSON.
Gateway logs explicit NOT-APPLIED / relaunch outcome. Fix path:switchroom apply
(start.sh rewrite) then restart — applies on this release bounce. - Progress-card durability (#3415) — status-pin clear preserves live claims;
same-key reconcile is serialized; fork cards no longer seed a wrong model from
tool_input.model.
Docs
- Hindsight per-op model-change runbook (#3419) — operator runbook + skill
pointer forhindsight.llm.{retain,reflect,consolidation}swaps; documents the
hostd single-file bind-mount inode pitfall. - Agent-home lifecycle RFC (#3350) — durable/ephemeral split + deterministic
reaper design (follow-up implementation PRs not in this cut).