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
cmd/entire/cli
Mcheckpoint_tokens.go+4/-1
Mreview_context.go+2/-2
Msessions_test.go+66
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()