fix checkpoint token metadata fallbacks · Entire

fix checkpoint token metadata fallbacks

698e9ab·

peyton-alt·3w ago·3 files·+72 added/-3 removed

Sessions

7a1b83ebd234View transcript

Changes

3

136 unmodified lines

return buildCheckpointTokensReport(cpID, summary, metas, metadataWarnings), lookup, nil
}

func readCheckpointTokenSessionMetadata(ctx context.Context, store checkpoint.CommittedListReader, cpID id.CheckpointID, sessionCount int) ([]*checkpoint.CommittedMetadata, int, error) {
    metas := make([]*checkpoint.CommittedMetadata, 0, sessionCount)
    var warnings int
    for i := range sessionCount {
        if ctxErr := ctx.Err(); ctxErr != nil {
            return nil, warnings, ctxErr //nolint:wrapcheck // Propagating context cancellation.
        }
        meta, err := store.ReadSessionMetadata(ctx, cpID, i)
        if err != nil {

Mcmd/entire/cli/checkpoint_tokens.go+4/-1

27 unmodified lines

reviewContextCommitSeparator = "\x1e"
)

type reviewContextSessionMetadataReader interface {
type checkpointSessionMetadataReader interface {
    ReadSessionMetadata(ctx context.Context, checkpointID checkpointid.CheckpointID, sessionIndex int) (*checkpoint.CommittedMetadata, error)
}

276 unmodified lines

cpID checkpointid.CheckpointID,
    sessionIndex int,
) (*checkpoint.CommittedMetadata, error) {
    if r, ok := reader.(reviewContextSessionMetadataReader); ok {
    if r, ok := reader.(checkpointSessionMetadataReader); ok {
        return r.ReadSessionMetadata(ctx, cpID, sessionIndex) //nolint:wrapcheck // Best-effort prompt context.
    }
    content, err := reader.ReadSessionContent(ctx, cpID, sessionIndex)

Mcmd/entire/cli/review_context.go+2/-2

1810 unmodified lines

func TestCheckpointTokensReport_UsesRootSummaryWhenNoSessionMetadataReadable(t *testing.T) {
    t.Parallel()

cpID := id.MustCheckpointID("abc123def456")
    report := buildCheckpointTokensReport(
        cpID,
        &checkpoint.CheckpointSummary{
            CheckpointID: cpID,
            Sessions: []checkpoint.SessionFilePaths{
                {Metadata: "0/metadata.json"},
                {Metadata: "1/metadata.json"},
            },
            TokenUsage: &agent.TokenUsage{
                InputTokens:  1000,
                OutputTokens: 500,
                APICallCount: 7,
            },
        },
        nil,
        2,
    )

if report.Tokens == nil {
        t.Fatalf("expected token data, got nil")
    }
    if report.Tokens.Total != 1500 || report.Tokens.APICalls != 7 {
        t.Fatalf("expected root summary tokens, got %+v", report.Tokens)
    }
}

func TestReadCheckpointTokenSessionMetadataStopsBetweenReadsWhenContextCanceled(t *testing.T) {
    t.Parallel()

ctx, cancel := context.WithCancel(context.Background())
    reader := &cancelingCheckpointMetadataReader{cancel: cancel}

metas, warnings, err := readCheckpointTokenSessionMetadata(ctx, reader, id.MustCheckpointID("abc123abc123"), 2)
    if !errors.Is(err, context.Canceled) {
        t.Fatalf("expected context.Canceled, got metas=%+v warnings=%d err=%v", metas, warnings, err)
    }
    if reader.calls != 1 {
        t.Fatalf("expected one metadata read before cancellation, got %d", reader.calls)
    }
    if metas != nil || warnings != 0 {
        t.Fatalf("expected canceled read to return no partial results, got metas=%+v warnings=%d", metas, warnings)
    }
}

func TestCheckpointTokensCmd_TextOutputWithComparison(t *testing.T) {
    repo, _ := runExplainAutoTestRepo(t)
    ctx := context.Background()