Tags: METR/inspect-eagle
Tags
Fix AuthConfig decoding to match Hawk API response (#9) The /auth/config endpoint returns token_endpoint and authorization_endpoint as full URLs, but AuthConfig expected token_path and authorize_path. JSONDecoder threw keyNotFound, surfacing the cryptic "The data couldn't be read because it is missing." on the sign-in screen. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fetch OIDC config from Hawk API instead of hardcoding values (#8) Replace hardcoded issuer, client_id, audience, scopes, and URL paths with dynamic values fetched from GET /auth/config. The config is cached in HawkAPI to avoid redundant fetches during token refresh. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
PLT-661: Add Kandji deployment to CI pipeline (#7) * Add Kandji deployment to CI pipeline Automatically push signed Eagle.dmg to Kandji custom app on main builds using kpkg. Requires KANDJI_API_URL and KANDJI_TOKEN repo secrets. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Temporarily allow Kandji deploy on PRs for testing Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Fix kpkg download and use vars for KANDJI_API_URL Use gh cli instead of unauthenticated curl (avoids GitHub API rate limits in CI). Reference KANDJI_API_URL as a repo variable, not secret. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Fix Rust dep caching: commit Cargo.lock, set GH_TOKEN for kpkg Cargo.lock was missing from the repo, so the cache key was always empty and deps were re-downloaded every build. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Remove kpkg cache step Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Enable auto-creation of Kandji custom app Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Fix kpkg config key names to match upstream schema auto_create_new_app -> auto_create_app dynamic_lookup_fallback -> dynamic_lookup Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Stamp version into Info.plist at build time for Kandji enforcement kpkg reads CFBundleShortVersionString from the DMG to set MINIMUM_ENFORCED_VERSION in the audit script. Without a real version, enforcement always passes and updates are never pushed. Also deduplicates version computation into a shared step. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Include version in DMG filename Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Restrict Kandji deploy to non-PR builds Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
HTTP range requests for lazy eval open, stream cancellation - Add range_zip module: fetch zip central directory and individual entries via HTTP Range headers instead of downloading entire file - Lazy open (openRemoteFileLazy): only fetches ~64KB for metadata, not the full multi-GB eval file - Stream cancellation: cancel previous sample stream when switching samples or navigating back - Handle "downloading" phase in poll loop for range request progress - Falls back to full download if range requests fail Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pipeline decompression with event scanning, render events during stre… …aming Decompresses zip entry in 4MB chunks while simultaneously scanning for JSON event boundaries. Events appear in the transcript with full content as they're discovered, rather than showing spinners until loading completes. - Add shared buffer to SampleStream for mid-stream event reads - Add eagle_get_event_from_stream FFI for reading events during streaming - TranscriptEventView tries stream buffer first, falls back to finalized sample - Merge decompressing/indexing phases into single "streaming" phase - Make extract_event_detail and extract_string_field_from_bytes public Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix streaming indexer: inline boundary finding with event extraction The previous approach found ALL event boundaries first (scanning 5GB), then extracted summaries in batches. Events couldn't appear until the full scan completed. Now boundary scanning and summary extraction are interleaved: as each event object boundary is found, its summary is extracted immediately and pushed to Swift in batches of 500. Events start appearing within seconds of the indexing phase starting. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Streaming sample loading, markdown tables, toolbar fixes - Streaming decompression: events appear incrementally as the sample decompresses and indexes, with progress bar showing "Decompressing 45%" instead of blocking for minutes on large (5GB) samples - New FFI: eagle_open_sample_stream/poll/finish for incremental loading - Rust stream module: background thread decompresses in 4MB chunks with progress, then indexes events in batches of 500, pushing to Swift - Markdown tables: pipe-delimited tables now render as formatted grids - Hide sandbox events (no useful info to display) - Fix toolbar: split epoch/position into separate toolbar items with padding - Hide "Eagle" title when no file is open Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PreviousNext