diff --git a/codex-rs/app-server/src/external_agent_migration/processor.rs b/codex-rs/app-server/src/external_agent_migration/processor.rs
index 9638a3ac35..8ad8a44bd3 100644
--- a/codex-rs/app-server/src/external_agent_migration/processor.rs
+++ b/codex-rs/app-server/src/external_agent_migration/processor.rs
@@ -270,6 +270,7 @@ impl ExternalAgentConfigRequestProcessor {
record_import_error(
&mut item_result,
"plugin_import",
+ /*sub_error_type*/ None,
error.to_string(),
/*source*/ None,
);
@@ -400,6 +401,7 @@ impl ExternalAgentConfigRequestProcessor {
record_import_error(
&mut item_result,
"session_missing",
+ Some("session_not_detected"),
format!(
"external agent session was not detected for import: {}",
session.path.display()
@@ -412,6 +414,7 @@ impl ExternalAgentConfigRequestProcessor {
record_import_error(
&mut item_result,
"session_source_path",
+ Some("failed_to_resolve_session_source_path"),
err.to_string(),
Some(session.path.display().to_string()),
);
diff --git a/codex-rs/app-server/src/external_agent_migration/session_importer.rs b/codex-rs/app-server/src/external_agent_migration/session_importer.rs
index 59602cb05b..885db8fff2 100644
--- a/codex-rs/app-server/src/external_agent_migration/session_importer.rs
+++ b/codex-rs/app-server/src/external_agent_migration/session_importer.rs
@@ -85,6 +85,7 @@ impl ExternalAgentSessionImporter {
record_import_error(
&mut item_result,
"session_permit",
+ Some("failed_to_acquire_import_permit"),
"external agent session import permit could not be acquired",
/*source*/ None,
);
@@ -114,11 +115,18 @@ impl ExternalAgentSessionImporter {
}
Ok(None) => {}
Err(failure) => {
+ let SessionImportFailure {
+ source_path,
+ message,
+ stage,
+ sub_error_type,
+ } = failure;
record_import_error(
&mut item_result,
- failure.stage,
- failure.message.clone(),
- Some(failure.source_path.display().to_string()),
+ stage,
+ Some(sub_error_type),
+ message,
+ Some(source_path.display().to_string()),
);
}
}
@@ -141,6 +149,7 @@ impl ExternalAgentSessionImporter {
record_import_error(
&mut item_result,
"session_connector_detection_task",
+ Some("session_connector_detection_task_failed"),
err.to_string(),
/*source*/ None,
);
@@ -163,6 +172,7 @@ impl ExternalAgentSessionImporter {
record_import_error(
&mut item_result,
"session_ledger_update",
+ Some("failed_to_update_session_ledger"),
err.to_string(),
/*source*/ None,
);
@@ -179,10 +189,11 @@ impl ExternalAgentSessionImporter {
let Some(pending_import) = self
.prepare_session_import(session, metadata_mode)
.await
- .map_err(|message| SessionImportFailure {
+ .map_err(|failure| SessionImportFailure {
source_path: source_path.clone(),
- message,
+ message: failure.message,
stage: "session_prepare",
+ sub_error_type: failure.sub_error_type,
})?
else {
return Ok(None);
@@ -200,10 +211,11 @@ impl ExternalAgentSessionImporter {
let imported_thread_id =
self.persist_session(pending_import.session)
.await
- .map_err(|message| SessionImportFailure {
+ .map_err(|failure| SessionImportFailure {
source_path: pending_import.source_path.clone(),
- message,
+ message: failure.message,
stage: "session_persist",
+ sub_error_type: failure.sub_error_type,
})?;
Ok(Some(CompletedSessionImport {
import: CompletedExternalAgentSessionImport {
@@ -220,20 +232,30 @@ impl ExternalAgentSessionImporter {
&self,
session: ExternalAgentSessionMigration,
metadata_mode: SessionMetadataMode,
- ) -> Result