feat(cursor): capture session metrics (duration, turns, model, attrib…#613
feat(cursor): capture session metrics (duration, turns, model, attrib…#613
Conversation
PR SummaryMedium Risk Overview Extends subagent completion handling to accept Written by Cursor Bugbot for commit e0b458d. Configure here. |
There was a problem hiding this comment.
Pull request overview
This PR adds session metrics capture (duration, turn count, context tokens, context window size) from Cursor's lifecycle hooks and passes them through to the checkpoint metadata. It also adds support for hook-provided modified_files on subagent-stop events, improving file change detection for Cursor subagents.
Changes:
- Adds new fields to
agent.Event,session.State, andcheckpoint.SessionMetricsto carry hook-provided session metrics (duration, turns, context usage) through the data pipeline - Updates
persistEventMetadataToStateto persist metrics from events to session state, including self-counting turn logic for agents that don't report turn counts - Updates
ExtractModifiedFilesFromOffsetfor Cursor to return transcript position (instead of always 0), and merges hook-providedmodified_fileswith transcript-extracted files for subagent-end handling
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
cmd/entire/cli/agent/event.go |
Adds ModifiedFiles, DurationMs, TurnCount, ContextTokens, ContextWindowSize fields to Event struct |
cmd/entire/cli/agent/cursor/lifecycle.go |
Parses loop_count, duration_ms, context_tokens, context_window_size, and modified_files from Cursor hook payloads into Event fields |
cmd/entire/cli/agent/cursor/lifecycle_test.go |
Adds test assertions for modified_files on SubagentEnd events |
cmd/entire/cli/agent/cursor/transcript.go |
Updates ExtractModifiedFilesFromOffset to return actual transcript position via GetTranscriptPosition |
cmd/entire/cli/agent/cursor/transcript_test.go |
Adds test for nonexistent file and fixes position assertion for existing test |
cmd/entire/cli/agent/cursor/hooks.go |
Minor whitespace cleanup |
cmd/entire/cli/session/state.go |
Adds SessionDurationMs, SessionTurnCount, ContextTokens, ContextWindowSize fields to session state |
cmd/entire/cli/lifecycle.go |
Extends persistEventMetadataToState with metric persistence, adds event param to markSessionEnded, merges hook-provided ModifiedFiles in subagent-end handling |
cmd/entire/cli/phase_wiring_test.go |
Updates markSessionEnded calls with new nil event parameter |
cmd/entire/cli/checkpoint/checkpoint.go |
Defines SessionMetrics struct and adds it to WriteCommittedOptions and CommittedMetadata |
cmd/entire/cli/checkpoint/committed.go |
Passes SessionMetrics through to committed checkpoint metadata |
cmd/entire/cli/strategy/manual_commit_condensation.go |
Adds buildSessionMetrics helper to construct SessionMetrics from session state |
69cb2e7 to
e0b458d
Compare
|
@cursor review |
e0b458d to
e3d19aa
Compare
…ution) via hooks