diff --git a/codex-rs/core-skills/src/injection_tests.rs b/codex-rs/core-skills/src/injection_tests.rs index a82e933c6c..db38d04c6a 100644 --- a/codex-rs/core-skills/src/injection_tests.rs +++ b/codex-rs/core-skills/src/injection_tests.rs @@ -16,7 +16,7 @@ fn make_skill(name: &str, path: &str) -> SkillMetadata { interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf(path).abs().clone(), + path_to_skills_md: test_path_buf(path).abs(), source_path: codex_exec_server::EnvironmentPathRef::local(test_path_buf(path).abs()), environment_id: "local".to_string(), scope: codex_protocol::protocol::SkillScope::User, diff --git a/codex-rs/core-skills/src/loader_tests.rs b/codex-rs/core-skills/src/loader_tests.rs index 2dcafef6f6..00bcff9bb4 100644 --- a/codex-rs/core-skills/src/loader_tests.rs +++ b/codex-rs/core-skills/src/loader_tests.rs @@ -446,7 +446,7 @@ async fn loads_skills_from_home_agents_dir_for_user_scope() -> anyhow::Result<() interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -586,7 +586,7 @@ async fn loads_skill_dependencies_metadata_from_yaml() { ], }), policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -644,7 +644,7 @@ interface: }), dependencies: None, policy: None, - path_to_skills_md: normalized(skill_path.as_path()).clone(), + path_to_skills_md: normalized(skill_path.as_path()), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( skill_path.as_path() )), @@ -802,7 +802,7 @@ async fn accepts_icon_paths_under_assets_dir() { }), dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -845,7 +845,7 @@ async fn ignores_invalid_brand_color() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -901,7 +901,7 @@ async fn ignores_default_prompt_over_max_length() { }), dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -945,7 +945,7 @@ async fn drops_interface_when_icons_are_invalid() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -1008,7 +1008,7 @@ interface: }), dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -1059,7 +1059,7 @@ interface: interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -1106,7 +1106,7 @@ async fn loads_skills_via_symlinked_subdir_for_user_scope() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&shared_skill_path).clone(), + path_to_skills_md: normalized(&shared_skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( &shared_skill_path )), @@ -1170,7 +1170,7 @@ async fn does_not_loop_on_symlink_cycle_for_user_scope() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -1208,7 +1208,7 @@ async fn loads_skills_via_symlinked_subdir_for_admin_scope() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&shared_skill_path).clone(), + path_to_skills_md: normalized(&shared_skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( &shared_skill_path )), @@ -1252,7 +1252,7 @@ async fn loads_skills_via_symlinked_subdir_for_repo_scope() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&linked_skill_path).clone(), + path_to_skills_md: normalized(&linked_skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( &linked_skill_path )), @@ -1320,7 +1320,7 @@ async fn respects_max_scan_depth_for_user_scope() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&within_depth_path).clone(), + path_to_skills_md: normalized(&within_depth_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( &within_depth_path )), @@ -1352,7 +1352,7 @@ async fn loads_valid_skill() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -1387,7 +1387,7 @@ async fn falls_back_to_directory_name_when_skill_name_is_missing() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -1435,7 +1435,7 @@ async fn namespaces_plugin_skills_using_plugin_name() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -1469,7 +1469,7 @@ async fn loads_short_description_from_metadata() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::User, @@ -1584,7 +1584,7 @@ async fn loads_skills_from_repo_root() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::Repo, @@ -1622,7 +1622,7 @@ async fn loads_skills_from_agents_dir_without_codex_dir() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::Repo, @@ -1678,7 +1678,7 @@ async fn loads_skills_from_all_codex_dirs_under_project_root() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&nested_skill_path).clone(), + path_to_skills_md: normalized(&nested_skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( &nested_skill_path )), @@ -1693,7 +1693,7 @@ async fn loads_skills_from_all_codex_dirs_under_project_root() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&root_skill_path).clone(), + path_to_skills_md: normalized(&root_skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( &root_skill_path )), @@ -1737,7 +1737,7 @@ async fn loads_skills_from_codex_dir_when_not_git_repo() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::Repo, @@ -1784,7 +1784,7 @@ async fn deduplicates_by_path_preferring_first_root() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::Repo, @@ -1870,7 +1870,7 @@ async fn keeps_duplicate_names_from_repo_and_user() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&repo_skill_path).clone(), + path_to_skills_md: normalized(&repo_skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( &repo_skill_path )), @@ -1885,7 +1885,7 @@ async fn keeps_duplicate_names_from_repo_and_user() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&user_skill_path).clone(), + path_to_skills_md: normalized(&user_skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized( &user_skill_path )), @@ -2039,7 +2039,7 @@ async fn loads_skills_when_cwd_is_file_in_repo() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::Repo, @@ -2100,7 +2100,7 @@ async fn loads_skills_from_system_cache_when_present() { interface: None, dependencies: None, policy: None, - path_to_skills_md: normalized(&skill_path).clone(), + path_to_skills_md: normalized(&skill_path), source_path: codex_exec_server::EnvironmentPathRef::local(normalized(&skill_path)), environment_id: "local".to_string(), scope: SkillScope::System, diff --git a/codex-rs/core-skills/src/render.rs b/codex-rs/core-skills/src/render.rs index 21bcb8f6db..48800ccc08 100644 --- a/codex-rs/core-skills/src/render.rs +++ b/codex-rs/core-skills/src/render.rs @@ -980,9 +980,7 @@ mod tests { interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf(&format!("/tmp/{name}/SKILL.md")) - .abs() - .clone(), + path_to_skills_md: test_path_buf(&format!("/tmp/{name}/SKILL.md")).abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf(&format!("/tmp/{name}/SKILL.md")).abs(), ), @@ -1356,7 +1354,7 @@ mod tests { let root = test_path_buf("/tmp/repo/.agents/skills").abs(); let mut skill = skill_with_path("gh-fix-ci", &root.join("gh-fix-ci/SKILL.md")); skill.environment_id = "devbox".to_string(); - let outcome = outcome_with_roots(vec![skill.clone()], vec![root.clone()]); + let outcome = outcome_with_roots(vec![skill.clone()], vec![root]); let absolute = build_available_skills( &outcome, @@ -1392,7 +1390,10 @@ mod tests { ); assert_eq!( aliased.skill_lines, - vec!["- gh-fix-ci: desc (env: devbox, file: r0/gh-fix-ci/SKILL.md)"] + vec![format!( + "- gh-fix-ci: desc (env: devbox, file: r0{separator}gh-fix-ci{separator}SKILL.md)", + separator = std::path::MAIN_SEPARATOR + )] ); } diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs index bc0089647d..45e98a6a28 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs @@ -7265,7 +7265,7 @@ async fn build_initial_context_trims_skill_metadata_from_context_window_budget() interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/admin-skill/SKILL.md").abs().clone(), + path_to_skills_md: test_path_buf("/tmp/admin-skill/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/admin-skill/SKILL.md").abs(), ), @@ -7280,7 +7280,7 @@ async fn build_initial_context_trims_skill_metadata_from_context_window_budget() interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/repo-skill/SKILL.md").abs().clone(), + path_to_skills_md: test_path_buf("/tmp/repo-skill/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/repo-skill/SKILL.md").abs(), ), @@ -7380,7 +7380,7 @@ fn emit_thread_start_skill_metrics_records_enabled_kept_and_truncated_values() { interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/repo-skill/SKILL.md").abs().clone(), + path_to_skills_md: test_path_buf("/tmp/repo-skill/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/repo-skill/SKILL.md").abs(), ), @@ -7430,7 +7430,7 @@ fn emit_thread_start_skill_metrics_records_description_truncated_chars_without_o interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/alpha-skill/SKILL.md").abs().clone(), + path_to_skills_md: test_path_buf("/tmp/alpha-skill/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/alpha-skill/SKILL.md").abs(), ), @@ -7445,7 +7445,7 @@ fn emit_thread_start_skill_metrics_records_description_truncated_chars_without_o interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/beta-skill/SKILL.md").abs().clone(), + path_to_skills_md: test_path_buf("/tmp/beta-skill/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/beta-skill/SKILL.md").abs(), ), @@ -7498,7 +7498,7 @@ async fn build_initial_context_emits_thread_start_skill_warning_on_repeated_buil interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/admin-skill/SKILL.md").abs().clone(), + path_to_skills_md: test_path_buf("/tmp/admin-skill/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/admin-skill/SKILL.md").abs(), ), @@ -7513,7 +7513,7 @@ async fn build_initial_context_emits_thread_start_skill_warning_on_repeated_buil interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/repo-skill/SKILL.md").abs().clone(), + path_to_skills_md: test_path_buf("/tmp/repo-skill/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/repo-skill/SKILL.md").abs(), ), diff --git a/codex-rs/tui/src/bottom_pane/chat_composer.rs b/codex-rs/tui/src/bottom_pane/chat_composer.rs index 283bf50095..a64f957403 100644 --- a/codex-rs/tui/src/bottom_pane/chat_composer.rs +++ b/codex-rs/tui/src/bottom_pane/chat_composer.rs @@ -6254,7 +6254,7 @@ mod tests { interface: None, dependencies: None, policy: None, - path_to_skills_md: skill_path.clone().clone(), + path_to_skills_md: skill_path.clone(), source_path: codex_exec_server::EnvironmentPathRef::local(skill_path.clone()), environment_id: "local".to_string(), scope: crate::test_support::skill_scope_user(), @@ -6299,7 +6299,7 @@ mod tests { }), dependencies: None, policy: None, - path_to_skills_md: skill_path.clone().clone(), + path_to_skills_md: skill_path.clone(), source_path: codex_exec_server::EnvironmentPathRef::local(skill_path.clone()), environment_id: "local".to_string(), scope: crate::test_support::skill_scope_repo(), @@ -6393,9 +6393,7 @@ mod tests { }), dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/repo/google-calendar/SKILL.md") - .abs() - .clone(), + path_to_skills_md: test_path_buf("/tmp/repo/google-calendar/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/repo/google-calendar/SKILL.md").abs(), ), diff --git a/codex-rs/tui/src/bottom_pane/mod.rs b/codex-rs/tui/src/bottom_pane/mod.rs index 05e8bc192b..f95736afeb 100644 --- a/codex-rs/tui/src/bottom_pane/mod.rs +++ b/codex-rs/tui/src/bottom_pane/mod.rs @@ -2576,7 +2576,7 @@ mod tests { interface: None, dependencies: None, policy: None, - path_to_skills_md: test_path_buf("/tmp/test-skill/SKILL.md").abs().clone(), + path_to_skills_md: test_path_buf("/tmp/test-skill/SKILL.md").abs(), source_path: codex_exec_server::EnvironmentPathRef::local( test_path_buf("/tmp/test-skill/SKILL.md").abs(), ), diff --git a/codex-rs/tui/src/chatwidget/skills.rs b/codex-rs/tui/src/chatwidget/skills.rs index 67dd5cdd6c..5f8bc161cf 100644 --- a/codex-rs/tui/src/chatwidget/skills.rs +++ b/codex-rs/tui/src/chatwidget/skills.rs @@ -241,7 +241,7 @@ fn protocol_skill_to_core(skill: &ProtocolSkillMetadata) -> Option