mirror of
https://github.com/openai/codex.git
synced 2026-11-13 14:46:14 +00:00
Move external agent migration into its crate (#33456)
## What changed - Move migration detection, import orchestration, models, and reporting from `codex-app-server` into `codex-external-agent-migration`. - Keep app-server protocol conversion in a dedicated boundary module. - Organize source-specific configuration, sessions, hooks, plugins, commands, subagents, and memory handling behind shared migration adapters. - Relocate and split the migration tests alongside the extracted service. GitOrigin-RevId: 3378ec2064806a28136d6ac98664ca1d75414a4e
This commit is contained in:
1 parent
2edad72de3
commit
e7efc5b04b
57 files changed
+7713
-7471
No files matched your search
@@ -0,0 +1,139 @@
|
||||
use crate::sessions::ExternalAgentSessionMigration;
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ExternalAgentConfigDetectOptions {
|
||||
pub include_home: bool,
|
||||
pub include_memory: bool,
|
||||
pub cwds: Option<Vec<PathBuf>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum ExternalAgentConfigMigrationItemType {
|
||||
Config,
|
||||
Skills,
|
||||
AgentsMd,
|
||||
Plugins,
|
||||
McpServerConfig,
|
||||
Subagents,
|
||||
Hooks,
|
||||
Commands,
|
||||
Memory,
|
||||
Sessions,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct PluginsMigration {
|
||||
pub marketplace_name: String,
|
||||
pub plugin_names: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct NamedMigration {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, PartialEq, Eq)]
|
||||
pub struct MigrationDetails {
|
||||
pub plugins: Vec<PluginsMigration>,
|
||||
pub skills: Vec<NamedMigration>,
|
||||
pub sessions: Vec<ExternalAgentSessionMigration>,
|
||||
pub mcp_servers: Vec<NamedMigration>,
|
||||
pub hooks: Vec<NamedMigration>,
|
||||
pub subagents: Vec<NamedMigration>,
|
||||
pub commands: Vec<NamedMigration>,
|
||||
pub memory: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct PendingPluginImport {
|
||||
pub cwd: Option<PathBuf>,
|
||||
pub description: String,
|
||||
pub details: MigrationDetails,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, PartialEq, Eq)]
|
||||
pub struct PluginImportOutcome {
|
||||
pub succeeded_marketplaces: Vec<String>,
|
||||
pub succeeded_plugin_ids: Vec<String>,
|
||||
pub failed_marketplaces: Vec<String>,
|
||||
pub failed_plugin_ids: Vec<String>,
|
||||
pub raw_errors: Vec<ExternalAgentConfigImportRawError>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, PartialEq, Eq)]
|
||||
pub struct ExternalAgentConfigImportOutcome {
|
||||
pub pending_plugin_imports: Vec<PendingPluginImport>,
|
||||
pub item_results: Vec<ExternalAgentConfigImportItemResult>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ExternalAgentConfigImportItemResult {
|
||||
pub item_type: ExternalAgentConfigMigrationItemType,
|
||||
pub description: String,
|
||||
pub cwd: Option<PathBuf>,
|
||||
pub success_count: u32,
|
||||
pub error_count: u32,
|
||||
pub successes: Vec<ExternalAgentConfigImportSuccess>,
|
||||
pub raw_errors: Vec<ExternalAgentConfigImportRawError>,
|
||||
}
|
||||
|
||||
impl ExternalAgentConfigImportItemResult {
|
||||
pub fn new(
|
||||
item_type: ExternalAgentConfigMigrationItemType,
|
||||
description: String,
|
||||
cwd: Option<PathBuf>,
|
||||
) -> Self {
|
||||
Self {
|
||||
item_type,
|
||||
description,
|
||||
cwd,
|
||||
success_count: 0,
|
||||
error_count: 0,
|
||||
successes: Vec::new(),
|
||||
raw_errors: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn record_error(&mut self, raw_error: ExternalAgentConfigImportRawError) {
|
||||
self.error_count = self.error_count.saturating_add(1);
|
||||
self.raw_errors.push(raw_error);
|
||||
}
|
||||
|
||||
pub fn record_success(&mut self, source: Option<String>, target: Option<String>) {
|
||||
self.success_count = self.success_count.saturating_add(1);
|
||||
self.successes.push(ExternalAgentConfigImportSuccess {
|
||||
item_type: self.item_type,
|
||||
cwd: self.cwd.clone(),
|
||||
source,
|
||||
target,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ExternalAgentConfigImportSuccess {
|
||||
pub item_type: ExternalAgentConfigMigrationItemType,
|
||||
pub cwd: Option<PathBuf>,
|
||||
pub source: Option<String>,
|
||||
pub target: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ExternalAgentConfigImportRawError {
|
||||
pub item_type: ExternalAgentConfigMigrationItemType,
|
||||
pub error_type: Option<String>,
|
||||
pub sub_error_type: Option<String>,
|
||||
pub failure_stage: String,
|
||||
pub message: String,
|
||||
pub cwd: Option<PathBuf>,
|
||||
pub source: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ExternalAgentConfigMigrationItem {
|
||||
pub item_type: ExternalAgentConfigMigrationItemType,
|
||||
pub description: String,
|
||||
pub cwd: Option<PathBuf>,
|
||||
pub details: Option<MigrationDetails>,
|
||||
}
|
||||
Reference in new issue
Block a user