LibreChat/packages
Danny Avila 4324a4e776 🛡️ fix: Address Codex round 3 — approval expiry lifecycle completeness
Three P2 findings on 780833d908, all valid:

- H1 status consistency: /chat/status now treats a non-expired
  requires_action job as active (matching /chat/active), so a client
  refreshing while an approval is pending resumes/subscribes instead of
  treating the run as finished and stranding it.
- H2 active expiry: cleanup now finalizes past-expiry requires_action jobs
  (→ aborted) in both stores instead of only filtering them from the active
  list — an expired prompt no longer lingers resident until key TTL. Redis
  routes through transitionStatus (terminal content cleanup); in-memory marks
  terminal + reclaims.
- H3 resumed liveness: in-memory stale-running check uses
  max(lastActivity, lastActiveAt, createdAt), so a just-resumed job isn't
  reaped on a stale per-chunk lastActivity entry before the next chunk.

Test added: in-memory cleanup finalizes + reclaims a past-expiry approval.
tsc + lint clean; policy + type-contract specs pass.
2026-06-16 14:32:06 -04:00
..
api 🛡️ fix: Address Codex round 3 — approval expiry lifecycle completeness 2026-06-16 14:32:06 -04:00
client v0.8.7-rc1 (#13592) 2026-06-15 13:10:30 -04:00
data-provider 🛡️ fix: Address Codex review on the HITL approval lifecycle 2026-06-16 13:49:53 -04:00
data-schemas 🧾 refactor: Disable Context Cost By Default (#13768) 2026-06-15 15:13:30 -04:00