Skip to main content

codex_analytics/
lib.rs

1mod accepted_lines;
2#[cfg(debug_assertions)]
3mod analytics_capture;
4mod client;
5mod events;
6mod facts;
7mod reducer;
8
9use std::time::SystemTime;
10use std::time::UNIX_EPOCH;
11
12pub use accepted_lines::accepted_line_fingerprints_from_unified_diff;
13pub use accepted_lines::fingerprint_hash;
14pub use client::AnalyticsEventsClient;
15pub use events::AppServerRpcTransport;
16pub use events::GuardianApprovalRequestSource;
17pub use events::GuardianReviewAnalyticsResult;
18pub use events::GuardianReviewDecision;
19pub use events::GuardianReviewEventParams;
20pub use events::GuardianReviewFailureReason;
21pub use events::GuardianReviewSessionAnalyticsParams;
22pub use events::GuardianReviewSessionKind;
23pub use events::GuardianReviewTerminalStatus;
24pub use events::GuardianReviewTrackContext;
25pub use events::GuardianReviewedAction;
26pub use facts::AcceptedLineFingerprint;
27pub use facts::AnalyticsJsonRpcError;
28pub use facts::AppInvocation;
29pub use facts::CodexCompactionEvent;
30pub use facts::CodexErrKind;
31pub use facts::CodexGoalEvent;
32pub use facts::CodexTurnSteerEvent;
33pub use facts::CompactionImplementation;
34pub use facts::CompactionPhase;
35pub use facts::CompactionReason;
36pub use facts::CompactionStatus;
37pub use facts::CompactionStrategy;
38pub use facts::CompactionTrigger;
39pub use facts::ExternalAgentConfigImportCompletedInput;
40pub use facts::ExternalAgentConfigImportFailureInput;
41pub use facts::GoalEventKind;
42pub use facts::HookRunFact;
43pub use facts::InputError;
44pub use facts::InvocationType;
45pub use facts::PluginInstallRequestSource;
46pub use facts::PluginInstallRequested;
47pub use facts::PluginInstallRequestedPlugin;
48pub use facts::PluginInstallSource;
49pub use facts::SkillInvocation;
50pub use facts::SubAgentThreadStartedInput;
51pub use facts::ThreadInitializationMode;
52pub use facts::TrackEventsContext;
53pub use facts::TurnCodexErrorFact;
54pub use facts::TurnProfile;
55pub use facts::TurnProfileFact;
56pub use facts::TurnResolvedConfigFact;
57pub use facts::TurnStatus;
58pub use facts::TurnSteerRejectionReason;
59pub use facts::TurnSteerRequestError;
60pub use facts::TurnSteerResult;
61pub use facts::TurnTokenUsageFact;
62pub use facts::build_track_events_context;
63
64#[cfg(test)]
65mod analytics_client_tests;
66
67pub fn now_unix_seconds() -> u64 {
68    SystemTime::now()
69        .duration_since(UNIX_EPOCH)
70        .unwrap_or_default()
71        .as_secs()
72}
73
74pub fn now_unix_millis() -> u64 {
75    u64::try_from(
76        SystemTime::now()
77            .duration_since(UNIX_EPOCH)
78            .unwrap_or_default()
79            .as_millis(),
80    )
81    .unwrap_or(u64::MAX)
82}
83
84pub(crate) fn serialize_enum_as_string<T: serde::Serialize>(value: &T) -> Option<String> {
85    serde_json::to_value(value)
86        .ok()
87        .and_then(|value| value.as_str().map(str::to_string))
88}
89
90pub(crate) fn usize_to_u64(value: usize) -> u64 {
91    u64::try_from(value).unwrap_or(u64::MAX)
92}
93
94pub(crate) fn option_i64_to_u64(value: Option<i64>) -> Option<u64> {
95    value.and_then(|value| u64::try_from(value).ok())
96}