* Release 0.10.45: provider-native compaction
Compaction now uses each provider's native mechanism where it is verified,
with fast-agent still owning policy (when to compact, what to keep, archiving).
- OpenAI provider-native checkpoints (on by default) for GPT models on
responses, codexresponses and Copilot: a request ending in a
compaction_trigger item replaces the compacted region with an opaque,
encrypted checkpoint. Opt out per model with ?compaction=client or per
route with native_compaction: false; compaction.strategy: client still
forces fast-agent's summary everywhere.
- Copilot Claude models use Anthropic server-side threshold compaction
in-request; harness auto-compaction stands aside for them.
- New model-string option compaction=native|client, validated per route.
- Astra effort is re-sent as a configuration_update after a checkpoint, on
every route that replays checkpoints (including Copilot).
- Checkpoints record their producing route: Copilot checkpoints are only
readable on Copilot and fail clearly elsewhere.
- Process-poll folding keeps messages that carry an in-band checkpoint.
- ATIF records the compaction strategy, embeds the compaction call and
counts provider checkpoints; validate_atif accounts for embedded calls.
- Anthropic usage folds compaction iterations into billed totals and
takes context size from the last sampling iteration.
- Codex Responses defaults Astra, GPT-6.1 Sol and Luna to high effort and
serves GPT-6.1 Sol with a 500k window; Responses requests now send the
model's default effort (as /model already displayed).
- Display: COMPACTING progress for the native call and streamed compaction
events; provider checkpoints show their encrypted size and archive.
- Live smoke script scripts/openai_native_compaction_smoke.py and
sanitized Codex compaction trace fixtures.
* Refresh CPD baseline for the compaction model-string field
ModelConfig and ModelQueryOverrides intentionally mirror each other's typed
fields (existing approved finding); adding compaction to both grows the same
duplication from 122 to 129 tokens.
* fix: preserve failed-run ATIF exports after compaction
* feat: show effective compaction mode in model status
* fix: extend stream idle defaults for high reasoning
* chore: keep concurrent compaction threshold work separate
* test: give ACP /model LLM stubs the compaction surface
The /model Compaction line reads compaction support and the effective
trigger; the integration stubs predated it (Integration (acp) failure).
* feat: xAI native compaction and per-model compaction triggers
xAI provider-native compaction (on by default for xai.*):
- Grok compacts through POST /responses/compact (xAI rejects
compaction_trigger items) and replays the returned compaction item via the
shared OpenAI-format replay channel; no instructions are sent, since later
requests carry the system prompt.
- Checkpoints are route-bound both ways: xAI reads only xAI checkpoints and
OpenAI routes reject xAI's, with a clear switch-back/restore message.
- xAI's compaction usage reports reasoning outside output_tokens (observed
live); it is folded back in so usage validation and accounting hold.
- xai.native_compaction setting; ?compaction=native accepted for xai.
- Compaction calls are captured under FAST_AGENT_LLM_TRACE.
- xAI's compaction drops tool outputs by design; documented.
Per-model compaction triggers:
- New model-string option compact_at=<tokens|fraction> (190k, 1m, 0.7, 70%)
for any provider. Precedence: compact_at, compaction.threshold, the
model's default, then 0.85.
- ModelParameters/overlay metadata compaction_trigger_tokens; Grok 4.7
defaults to 190,000 tokens to stay below its 200k long-context rate.
- compaction.threshold now defaults to unset; the setup template leaves it
commented so model defaults apply.
- Triggers are compared in tokens (auto-compaction, post-compaction budget,
in-request provider trigger); /model and /compact preview show both forms.
Tests use a local /responses/compact HTTP simulator over a sanitized live
capture; the native compaction smoke script gains --route xai.
* Refresh CPD baseline for the compact_at model-string field
* update docs