docs/session-keepalive-design.md
Date: 2026-01-04
Feature: Proactive session management for all providers
Inspiration: Quotio's "Auto-Warmup" feature
Current State:
Pain Points:
Recommendation: "Session Keepalive" - already used in codebase, technically accurate
SessionKeepaliveManager (New)@MainActor
public final class SessionKeepaliveManager {
// Unified scheduler for all providers
private var scheduledTasks: [Provider: Task<Void, Never>] = [:]
// Per-provider configuration
private var configs: [Provider: KeepaliveConfig] = [:]
// Start keepalive for a provider
func start(provider: Provider, config: KeepaliveConfig)
// Stop keepalive for a provider
func stop(provider: Provider)
// Force immediate refresh
func forceRefresh(provider: Provider) async
}
KeepaliveConfig (New)public struct KeepaliveConfig {
enum Mode {
case interval(TimeInterval) // Every X seconds
case daily(hour: Int, minute: Int) // Daily at specific time
case beforeExpiry(buffer: TimeInterval) // X seconds before expiry
}
let mode: Mode
let enabled: Bool
let minRefreshInterval: TimeInterval // Rate limiting
}
AugmentSessionKeepalive (standalone actor)SessionKeepaliveManagerbeforeExpiry(buffer: 300) - refresh 5min before cookie expiryinterval(1800) - refresh every 30 minutes/status command via CLI to keep session aliveinterval(3600) - refresh every hourSessionKeepaliveManager actorKeepaliveConfig modelAugmentSessionKeepalive to use new managerSettings → Providers → Augment
┌─────────────────────────────────────────┐
│ Session Keepalive │
├─────────────────────────────────────────┤
│ ☑ Keep session alive automatically │
│ │
│ Mode: ⦿ Before Expiry │
│ ○ Every 30 minutes │
│ ○ Daily at 9:00 AM │
│ │
│ Last refresh: 2 minutes ago │
│ Next refresh: in 3 minutes │
│ │
│ [Refresh Now] │
└─────────────────────────────────────────┘
| Aspect | Quotio Warmup | CodexBar Keepalive |
|---|---|---|
| Purpose | Trigger 1-token API calls to reset quota counters | Refresh auth sessions to prevent expiration |
| Target | Antigravity only (quota reset) | All providers (session management) |
| Action | Make minimal API request (costs 1 token) | Refresh auth tokens/cookies (free) |
| Benefit | Faster quota resets during peak hours | Uninterrupted access, no auth failures |
| Cost | Consumes tokens | No cost (just auth refresh) |
Why different?
.utility prioritySessionKeepaliveManagerShould keepalive be enabled by default?
What's the default refresh interval?
Should we show keepalive status in menu bar?