Files
cburn/internal/model/session.go
teernisse 892f578565 fix: linter compliance and code quality improvements across codebase
Address golangci-lint findings and improve error handling throughout:

Package doc comments:
- Add canonical "// Package X ..." comments to source, model, config,
  pipeline, cli, store, and main packages for godoc compliance.

Security & correctness:
- Fix directory permissions 0o755 -> 0o750 in store/cache.go Open()
  (gosec G301: restrict group write on cache directory)
- Fix config.Save() to check encoder error before closing file, preventing
  silent data loss on encode failure
- Add //nolint:gosec annotations with justifications on intentional
  patterns (constructed file paths, manual bounds checking, config fields)
- Add //nolint:nilerr on intentional error-swallowing in scanner WalkDir
- Add //nolint:revive on stuttering type names (ModelStats, ModelUsage)
  that would break too many call sites to rename

Performance (perfsprint):
- Replace fmt.Sprintf("%d", n) with strconv.FormatInt(n, 10) in format.go
  FormatTokens() and FormatNumber() hot paths
- Clean up redundant fmt.Sprintf patterns in FormatCost and FormatDelta

Code cleanup:
- Convert if-else chain to switch in parser.go skipJSONString() for clarity
- Remove unused indexedResult struct from pipeline/loader.go
- Add deferred cache.Close() in pipeline/bench_test.go to prevent leaks
- Add deferred cache.Close() in cmd/root.go data loading path
- Fix doc comment alignment in scanner.go decodeProjectName
- Remove trailing blank line in cmd/costs.go
- Fix duplicate "/day" suffix in cmd/summary.go cost-per-day formatting
- Rename shadowed variable 'max' -> 'maxVal' in cli/render.go Sparkline
2026-02-20 16:07:26 -05:00

57 lines
1.4 KiB
Go

// Package model defines domain types for cburn metrics and sessions.
package model
import "time"
// APICall represents one deduplicated API request (final state of a message.id).
type APICall struct {
MessageID string
Model string
Timestamp time.Time
InputTokens int64
OutputTokens int64
CacheCreation5mTokens int64
CacheCreation1hTokens int64
CacheReadTokens int64
ServiceTier string
EstimatedCost float64
}
// ModelUsage tracks per-model token usage within a session.
type ModelUsage struct { //nolint:revive // renaming would break many call sites
APICalls int
InputTokens int64
OutputTokens int64
CacheCreation5mTokens int64
CacheCreation1hTokens int64
CacheReadTokens int64
EstimatedCost float64
}
// SessionStats holds aggregated metrics for a single session file.
type SessionStats struct {
SessionID string
Project string
ProjectPath string
FilePath string
IsSubagent bool
ParentSession string
StartTime time.Time
EndTime time.Time
DurationSecs int64
UserMessages int
APICalls int
InputTokens int64
OutputTokens int64
CacheCreation5mTokens int64
CacheCreation1hTokens int64
CacheReadTokens int64
Models map[string]*ModelUsage
EstimatedCost float64
CacheHitRate float64
}