Commit Graph

3 Commits

  • [codex] Speed up external agent session imports (#26637)
    ## Why
    
    Importing large external-agent session histories currently starts a full
    live Codex thread for every imported session. This initializes unrelated
    runtime systems and repeats expensive transcript, metadata, hashing, and
    ledger work.
    
    On a 50-session, 238 MiB fixture, the existing path took roughly 70
    seconds to complete the import and 77 seconds end to end.
    
    ## What changed
    
    - Persist imported sessions directly through `ThreadStore` instead of
    starting full live threads.
    - Process imports through a bounded five-session pipeline.
    - Parse, extract, and hash each source file in one pass.
    - Move blocking source preparation onto the blocking thread pool.
    - Reuse prepared content hashes and update the import ledger once per
    batch.
    - Avoid metadata readback for newly written rollouts.
    - Preserve imported conversation history and visible thread metadata.
    - Keep the implementation out of `codex-core` and avoid changes to the
    public `ThreadStore` trait.
    
    ## Performance
    
    For the same 50-session, 238 MiB fixture:
    
    | Path | Import completion | End to end |
    | --- | ---: | ---: |
    | Existing import | 69.61s | 76.62s |
    | This change | 5.95s | 6.58s |
    
    All 50 sessions imported successfully with no warnings or contention
    signals.
    
    ## Validation
    
    - `just test -p codex-external-agent-sessions`
    - `just test -p codex-app-server external_agent_config_import`
    - Verified imports do not initialize unrelated required MCP servers.
    - Verified previously imported source versions are skipped and changed
    sources can be imported again.
    - Verified imported rollouts remain readable through thread listing and
    history APIs.
  • Bound external agent session detection work (#26291)
    ## Why
    
    External agent migration detection parsed and hashed every JSONL session
    file. For users with many large conversations, launching migration could
    consume substantial CPU and disk resources.
    
    Detection only needs the most recent sessions for the migration UI, so
    full-content work should be bounded.
    
    ## What
    
    - Use file modification metadata to select the 50 most recent eligible
    sessions before parsing JSONL content.
    - Skip unchanged imported sessions using metadata stored in the import
    ledger.
    - Preserve content hashing when metadata indicates a session may have
    changed.
    - Stream SHA-256 calculation through a 64 KiB buffer instead of loading
    an entire session into memory.
    - Continue detecting older sessions in subsequent batches after newer
    sessions are imported.
    
    ## Validation
    
    - `RUST_MIN_STACK=8388608 cargo nextest run --no-fail-fast -p
    codex-external-agent-sessions`
      - 20 tests passed.
    - Benchmarked release builds against 250 valid JSONL sessions totaling
    501 MiB:
      - Median detection time decreased from 1,138.8 ms to 47.0 ms.
      - CPU instructions decreased by 95.8%.
      - Both versions returned the expected 50 sessions.
    
    The benchmark used warm filesystem caches and measured the reduction in
    parsing, hashing, and CPU work.
  • External agent session support (#19895)
    ## Summary
    
    This extends external agent detection/import beyond config artifacts so
    Codex can detect recent sessions files from the external agent home and
    import them into Codex rollout history.
    
    ## What changed
    
    - Added a focused `external_agent_sessions` module for:
      - session discovery
      - source-record parsing
      - rollout construction
      - import ledger tracking
    - Wired session detection/import into the app-server external agent
    config API.
    - Added compaction handling so large imported sessions can be resumed
    safely before the first follow-up turn.
    
    ## Testing
    
    Added coverage for:
    - recent-session detection
    - custom-title handling
    - recency filtering
    - dedupe and re-detect-after-source-change behavior
    - visible imported turn construction
    - backward-compatible import payload deserialization
    - end-to-end RPC import flow
    - rejection of undetected session paths
    - repeat-import behavior
    - large-session compaction before first follow-up
    
    Ran:
    - `cargo test -p codex-app-server external_agent_config_import_ --test
    all`