Compare commits

...

1 Commits

Author SHA1 Message Date
Javier Soto
e29c6aef80 fix: make analytics report Desktop App usage correctly 2026-02-10 12:47:22 -08:00
8 changed files with 64 additions and 3 deletions

View File

@@ -8558,6 +8558,7 @@
"cli",
"vscode",
"exec",
"desktop_app",
"mcp",
"unknown"
],

View File

@@ -88,6 +88,7 @@
"cli",
"vscode",
"exec",
"desktop_app",
"mcp",
"unknown"
],

View File

@@ -88,6 +88,7 @@
"cli",
"vscode",
"exec",
"desktop_app",
"mcp",
"unknown"
],

View File

@@ -3,4 +3,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { SubAgentSource } from "./SubAgentSource";
export type SessionSource = "cli" | "vscode" | "exec" | "mcp" | { "subagent": SubAgentSource } | "unknown";
export type SessionSource = "cli" | "vscode" | "exec" | "desktop_app" | "mcp" | { "subagent": SubAgentSource } | "unknown";

View File

@@ -782,6 +782,7 @@ impl From<CoreSessionSource> for SessionSource {
CoreSessionSource::Cli => SessionSource::Cli,
CoreSessionSource::VSCode => SessionSource::VsCode,
CoreSessionSource::Exec => SessionSource::Exec,
CoreSessionSource::DesktopApp => SessionSource::AppServer,
CoreSessionSource::Mcp => SessionSource::AppServer,
CoreSessionSource::SubAgent(sub) => SessionSource::SubAgent(sub),
CoreSessionSource::Unknown => SessionSource::Unknown,

View File

@@ -55,7 +55,7 @@ pub(crate) fn source_kind_matches(source: &CoreSessionSource, filter: &[ThreadSo
ThreadSourceKind::Cli => matches!(source, CoreSessionSource::Cli),
ThreadSourceKind::VsCode => matches!(source, CoreSessionSource::VSCode),
ThreadSourceKind::Exec => matches!(source, CoreSessionSource::Exec),
ThreadSourceKind::AppServer => matches!(source, CoreSessionSource::Mcp),
ThreadSourceKind::AppServer => matches!(source, CoreSessionSource::DesktopApp),
ThreadSourceKind::SubAgent => matches!(source, CoreSessionSource::SubAgent(_)),
ThreadSourceKind::SubAgentReview => {
matches!(
@@ -152,4 +152,16 @@ mod tests {
&[ThreadSourceKind::SubAgentReview]
));
}
#[test]
fn source_kind_matches_app_server_for_desktop_app_only() {
assert!(!source_kind_matches(
&CoreSessionSource::Mcp,
&[ThreadSourceKind::AppServer]
));
assert!(source_kind_matches(
&CoreSessionSource::DesktopApp,
&[ThreadSourceKind::AppServer]
));
}
}

View File

@@ -41,6 +41,7 @@ use codex_core::config_loader::LoaderOverrides;
use codex_core::default_client::SetOriginatorError;
use codex_core::default_client::USER_AGENT_SUFFIX;
use codex_core::default_client::get_codex_user_agent;
use codex_core::default_client::originator;
use codex_core::default_client::set_default_client_residency_requirement;
use codex_core::default_client::set_default_originator;
use codex_feedback::CodexFeedback;
@@ -153,10 +154,11 @@ impl MessageProcessor {
auth_manager.set_external_auth_refresher(Arc::new(ExternalAuthRefreshBridge {
outgoing: outgoing.clone(),
}));
let session_source = session_source_for_originator(originator().value.as_str());
let thread_manager = Arc::new(ThreadManager::new(
config.codex_home.clone(),
auth_manager.clone(),
SessionSource::VSCode,
session_source,
));
let cloud_requirements = Arc::new(RwLock::new(cloud_requirements));
let codex_message_processor = CodexMessageProcessor::new(CodexMessageProcessorArgs {
@@ -435,3 +437,42 @@ impl MessageProcessor {
}
}
}
fn session_source_for_originator(originator_name: &str) -> SessionSource {
match originator_name {
"codex_vscode" => SessionSource::VSCode,
name if name.starts_with("Codex ") => SessionSource::DesktopApp,
_ => SessionSource::VSCode,
}
}
#[cfg(test)]
mod tests {
use super::session_source_for_originator;
use codex_protocol::protocol::SessionSource;
use pretty_assertions::assert_eq;
#[test]
fn maps_vscode_originator_to_vscode_source() {
assert_eq!(
session_source_for_originator("codex_vscode"),
SessionSource::VSCode
);
}
#[test]
fn maps_codex_desktop_originator_to_app_server_source() {
assert_eq!(
session_source_for_originator("Codex Desktop"),
SessionSource::DesktopApp
);
}
#[test]
fn defaults_unknown_originator_to_vscode_source() {
assert_eq!(
session_source_for_originator("some_other_originator"),
SessionSource::VSCode
);
}
}

View File

@@ -1587,6 +1587,9 @@ pub enum SessionSource {
#[default]
VSCode,
Exec,
#[serde(rename = "desktop_app")]
#[ts(rename = "desktop_app")]
DesktopApp,
Mcp,
SubAgent(SubAgentSource),
#[serde(other)]
@@ -1612,6 +1615,7 @@ impl fmt::Display for SessionSource {
SessionSource::Cli => f.write_str("cli"),
SessionSource::VSCode => f.write_str("vscode"),
SessionSource::Exec => f.write_str("exec"),
SessionSource::DesktopApp => f.write_str("desktop_app"),
SessionSource::Mcp => f.write_str("mcp"),
SessionSource::SubAgent(sub_source) => write!(f, "subagent_{sub_source}"),
SessionSource::Unknown => f.write_str("unknown"),