10bc2480db
Replaces lossy summarization compaction with a checkpoint-restart architecture (#124). At 110K cumulative tokens (per V4's 128K retrieval elbow) the engine runs a briefing turn, archives the cycle to JSONL at ~/.deepseek/sessions/<id>/cycles/<n>.jsonl, then resets the in-memory buffer to a fresh context: original system prompt + structured state (plan/todos/working-set/sub-agents) + the model-curated <carry_forward> briefing (~3K token cap, hard-bounded). The compaction summarizer is now off by default. Per-model thresholds in [cycle.per_model] let operators tune deepseek-v4-pro vs -flash separately. Phase guard in should_advance_cycle blocks mid-tool/stream/approval boundaries; engine only invokes at clean turn-completed events. Sub-agents are not awaited — their handles are captured in the structured-state block so the new cycle sees them still running. Adds the recall_archive tool (#127) — BM25 over message text in archived cycles, top-N hits with cycle/index/excerpt. Always-loaded across modes via should_default_defer_tool so the agent doesn't need ToolSearch to discover it. Children inherit it via with_full_agent_surface. UI surfaces: - /cycles, /cycle <n>, /recall <query> slash commands - Sidebar shows cycle counter once a boundary fires - CycleAdvanced engine event carries the full briefing so the UI can populate app.cycle_briefings for /cycle <n> - runtime_threads schema bumped to v2 (cycle.advanced events appear in the durable timeline; load rejects future versions) Tests: 21 cycle_manager + 13 recall_archive + 4 commands::cycle. All 1168 workspace tests pass. Three parity gates pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>