| src / library_skills / __init__.py |
(no function) |
|
0 |
0 |
0 |
|
100% |
| src / library_skills / __main__.py |
(no function) |
|
2 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_get_rich_toolkit |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_get_project_context |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_scan_context |
|
17 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_print_warnings |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_display_path |
|
7 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_target_prompt_name |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_target_short_name |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_print_context |
|
18 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_print_skills_table |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_top_level_skills |
|
14 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_scan_json_payload |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_workspace_root |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_print_action_header |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_select_skills_interactive |
|
2 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_select_targets_interactive |
|
6 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_select_install_targets |
|
3 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_select_tool_skill_interactive |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_find_collisions |
|
2 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_deduplicate_skills |
|
9 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_filter_installable_skills |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_installed_statuses |
|
27 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_print_status_table |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_print_tool_skill_status_table |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_print_installed_skills_table |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_select_installed_skills_interactive |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_sync_target_dirs |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_repairable_statuses |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_removable_statuses |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_select_statuses_interactive |
|
7 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_repair_selected |
|
8 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_remove_selected |
|
7 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_install_selected |
|
14 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_sync_tool_skill |
|
17 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_tool_skill_is_missing |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
_sync |
|
68 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
callback |
|
2 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
scan |
|
13 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
list_cmd |
|
14 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
install |
|
17 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
remove |
|
17 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
main |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / cli.py |
(no function) |
|
83 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
get_python_top_level_deps |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
get_python_top_level_deps_from_files |
|
14 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
_extract_python_top_level_deps |
|
16 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
get_node_top_level_deps |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
get_node_top_level_deps_from_files |
|
13 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
_read_package_json |
|
7 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
_extract_node_top_level_deps |
|
6 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
get_top_level_deps |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
get_workspace_top_level_deps |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
get_node_workspace_top_level_deps |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
_extract_deps_from_specs |
|
6 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
_extract_deps_from_dependency_group |
|
15 |
0 |
0 |
|
100% |
| src / library_skills / deps.py |
(no function) |
|
20 |
0 |
2 |
|
100% |
| src / library_skills / installer.py |
get_target_dirs |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
get_all_target_dirs |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
get_default_install_target_dirs |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
get_existing_target_dirs |
|
3 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
install_skill |
|
18 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
_get_symlink_target |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
uninstall_skill |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
get_tool_skill_template |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
get_tool_skill_version |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
inspect_tool_skill |
|
18 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
install_tool_skill |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
_target_for_path |
|
3 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
_is_managed_tool_skill_marker |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
list_installed_skills |
|
14 |
0 |
0 |
|
100% |
| src / library_skills / installer.py |
(no function) |
|
44 |
0 |
0 |
|
100% |
| src / library_skills / python_env.py |
find_project_root |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / python_env.py |
find_venv |
|
30 |
0 |
0 |
|
100% |
| src / library_skills / python_env.py |
get_site_packages_dir |
|
11 |
0 |
0 |
|
100% |
| src / library_skills / python_env.py |
find_node_modules |
|
6 |
0 |
0 |
|
100% |
| src / library_skills / python_env.py |
_is_relative_to |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / python_env.py |
_venv_from_dot_venv |
|
8 |
0 |
0 |
|
100% |
| src / library_skills / python_env.py |
_read_venv_redirect_file |
|
14 |
0 |
0 |
|
100% |
| src / library_skills / python_env.py |
(no function) |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
scan_python_distributions |
|
20 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
scan_node_packages |
|
21 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_iter_node_package_roots |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_read_node_package_info |
|
12 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_read_distribution_info |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_scan_distribution_records |
|
24 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_is_skill_file_record |
|
7 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_scan_editable_direct_url |
|
20 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_read_editable_source_root |
|
20 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_is_relative_to |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_load_skill |
|
9 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_parse_skill_frontmatter |
|
24 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_validate_skill_metadata |
|
11 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
_normalize_package_name |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / scanner.py |
(no function) |
|
42 |
0 |
0 |
|
100% |
| src / library_skills / tool_skill / __init__.py |
(no function) |
|
0 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
_console |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
get_toolkit |
|
3 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_line |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_title |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_warning |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_hint |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_message |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_action_header |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_warnings |
|
2 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
context_table |
|
6 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
skills_table |
|
8 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
status_table |
|
9 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
tool_skill_status_table |
|
7 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_table |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_result |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_skipped |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
_badge |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
_styled_status |
|
4 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
print_summary |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / ui.py |
(no function) |
|
27 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
find_uv_workspace |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
find_node_workspace |
|
11 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
workspace_dependency_files |
|
3 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
node_workspace_dependency_files |
|
3 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_read_pyproject |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_read_package_json |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_has_uv_workspace |
|
9 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_find_workspace_members |
|
21 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_get_node_workspace_globs |
|
9 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_find_node_workspace_members |
|
13 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_get_workspace_table |
|
10 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_is_excluded |
|
1 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_find_current_member |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
_is_relative_to |
|
5 |
0 |
0 |
|
100% |
| src / library_skills / workspace.py |
(no function) |
|
31 |
0 |
2 |
|
100% |
| tests / test_cli.py |
FakeToolkit.__init__ |
|
1 |
0 |
0 |
|
100% |
| tests / test_cli.py |
FakeToolkit.ask |
|
1 |
0 |
0 |
|
100% |
| tests / test_cli.py |
write_project |
|
7 |
0 |
0 |
|
100% |
| tests / test_cli.py |
write_workspace |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
write_node_workspace |
|
10 |
0 |
0 |
|
100% |
| tests / test_cli.py |
add_node_workspace_files |
|
6 |
0 |
0 |
|
100% |
| tests / test_cli.py |
write_distribution_skill |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
write_node_package_skill |
|
2 |
0 |
0 |
|
100% |
| tests / test_cli.py |
write_node_package_skill_at |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
write_distribution |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
make_cli_skill |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_scan_filters_to_top_level_dependencies_by_default |
|
16 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_workspace_member_scan_uses_workspace_venv_and_member_deps |
|
31 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_combined_uv_and_node_workspace_member_scan_uses_both_member_deps |
|
17 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_workspace_root_scan_uses_root_and_all_member_deps |
|
15 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_combined_uv_and_node_workspace_root_scan_uses_all_deps |
|
15 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_workspace_non_member_subdir_uses_root_and_all_member_deps |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_workspace_scan_prints_workspace_context |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_node_workspace_scan_prints_workspace_context |
|
11 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_node_workspace_member_scan_uses_member_deps_and_root_node_modules |
|
15 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_node_workspace_root_scan_uses_root_and_all_member_deps |
|
14 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_node_workspace_non_member_subdir_uses_root_and_all_member_deps |
|
11 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_node_workspace_member_local_node_modules_is_not_ignored |
|
10 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_scan_includes_python_and_node_package_skills |
|
27 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_install_skill_can_explicitly_select_transitive_dependency |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_yes_repairs_broken_managed_symlink_without_installing_new_skills |
|
13 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_yes_removes_orphaned_and_unrecoverable_broken_symlinks |
|
19 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_yes_repairs_existing_claude_target_without_claude_flag |
|
13 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_check_reports_fixable_drift_without_modifying_files |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_check_ignores_tool_skill_drift_unless_requested |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_check_tool_skill_reports_missing_default_and_claude_targets |
|
7 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_tool_skill_installs_and_updates_copied_skill |
|
13 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_no_tool_skill_skips_management |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_explicit_tool_skill_fails_on_hand_authored_directory |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_default_sync_with_no_changes_reports_no_changes_needed |
|
6 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_default_sync_prompts_for_missing_tool_skill_without_new_skills |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_list_json_reports_discovered_and_installed_skills |
|
13 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_list_installed_prints_no_skills_when_target_is_empty |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_list_installed_prints_installed_statuses |
|
13 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_install_all_copy_mode_installs_to_agents_and_claude |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_install_interactive_can_choose_claude_only |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_install_interactive_can_choose_both_targets |
|
13 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_install_with_no_selected_targets_cancels |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_default_sync_with_no_selected_targets_cancels |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_install_without_selection_and_yes_prints_no_skills_selected |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_remove_named_symlink |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_list_installed_includes_existing_claude_target_without_flag |
|
13 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_remove_includes_existing_claude_target_without_flag |
|
13 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_list_installed_and_remove_do_not_create_missing_target_dirs |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_remove_with_yes_and_no_names_does_not_prompt |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_check_exits_non_zero_for_colliding_skill_names |
|
7 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_scan_without_target_environment_prints_warning |
|
11 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_default_check_without_environment_reports_no_discovered_skills |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_list_without_installed_option_prints_discovered_skills |
|
7 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_install_interactive_selection_installs_selected_skill |
|
10 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_default_command_interactive_selection_installs_selected_skill |
|
14 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_default_command_copy_installs_selected_skill_as_directory |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_default_command_deduplicates_new_skills_across_targets |
|
14 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_default_command_deduplicates_new_skills_across_targets.select_skills |
|
2 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_remove_interactive_selection_removes_selected_skill |
|
12 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_remove_prints_not_found_when_uninstall_returns_false |
|
11 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_installed_statuses_classifies_name_mismatch_outdated_and_orphaned |
|
19 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_filter_installable_skills_skips_collisions |
|
4 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_select_helpers_use_rich_toolkit |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_reconcile_helpers_cover_selection_skip_and_not_found |
|
20 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_reconcile_helpers_cover_selection_skip_and_not_found.FakeMenu.__init__ |
|
5 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_reconcile_helpers_cover_selection_skip_and_not_found.FakeMenu.ask |
|
2 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_select_targets_interactive_preselects_defaults |
|
7 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_select_targets_interactive_preselects_defaults.FakeMenu.__init__ |
|
3 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_select_targets_interactive_preselects_defaults.FakeMenu.ask |
|
2 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_select_tool_skill_interactive_uses_checked_menu |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_select_tool_skill_interactive_uses_checked_menu.FakeMenu.__init__ |
|
4 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_select_tool_skill_interactive_uses_checked_menu.FakeMenu.ask |
|
2 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_get_rich_toolkit_returns_toolkit_instance |
|
1 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_ui_badge_fallback_status_and_summary |
|
7 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_install_selected_continues_after_install_error |
|
4 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_display_path_prefers_project_relative_paths |
|
8 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_target_prompt_labels_are_user_facing |
|
9 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_main_module_invokes_cli_main |
|
7 |
0 |
0 |
|
100% |
| tests / test_cli.py |
test_main_invokes_typer_app |
|
4 |
0 |
0 |
|
100% |
| tests / test_cli.py |
(no function) |
|
86 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_python_top_level_deps_normalizes_required_and_optional_deps |
|
3 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_python_top_level_deps_includes_dependency_groups |
|
2 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_python_top_level_deps_returns_none_without_pyproject |
|
3 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_python_top_level_deps_returns_none_for_invalid_toml |
|
2 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_python_top_level_deps_returns_empty_set_for_invalid_project_table |
|
2 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_python_top_level_deps_ignores_non_string_dependencies |
|
2 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_node_top_level_deps_normalizes_dependency_fields |
|
2 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_node_top_level_deps_handles_missing_invalid_and_non_object |
|
7 |
0 |
0 |
|
100% |
| tests / test_deps.py |
test_get_top_level_deps_combines_python_and_node_metadata |
|
3 |
0 |
0 |
|
100% |
| tests / test_deps.py |
(no function) |
|
10 |
0 |
0 |
|
100% |
| tests / test_installer.py |
make_skill |
|
5 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_get_target_dirs_always_includes_agents_and_optionally_claude |
|
8 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_default_install_target_dirs_follow_project_state |
|
11 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_existing_target_dirs_only_include_concrete_skills_dirs |
|
6 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_skill_creates_symlink_and_list_installed_skills_reports_it |
|
11 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_skill_copy_mode_copies_directory |
|
6 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_skill_symlink_failure_raises_install_error |
|
6 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_skill_symlink_failure_raises_install_error.fail_symlink |
|
1 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_skill_refuses_to_overwrite_non_symlink_directory |
|
5 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_skill_refuses_to_overwrite_non_symlink_file |
|
6 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_skill_replaces_existing_symlink |
|
10 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_get_symlink_target_falls_back_to_absolute_on_relpath_error |
|
7 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_get_symlink_target_falls_back_to_absolute_on_relpath_error.raise_value_error |
|
1 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_get_symlink_target_preserves_native_relative_targets |
|
4 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_list_installed_skills_handles_missing_target_and_directories |
|
12 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_list_installed_skills_reports_dangling_symlink |
|
10 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_uninstall_skill_only_removes_symlinks |
|
9 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_uninstall_skill_removes_dangling_symlink |
|
6 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_tool_skill_copies_template_and_marker |
|
8 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_tool_skill_updates_managed_stale_copy |
|
6 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_tool_skill_version_falls_back_when_distribution_is_missing |
|
3 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_tool_skill_version_falls_back_when_distribution_is_missing.missing_version |
|
1 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_inspect_tool_skill_reports_file_blocker |
|
5 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_inspect_tool_skill_classifies_claude_target |
|
3 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_inspect_tool_skill_reports_stale_when_managed_skill_md_is_missing |
|
6 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_inspect_tool_skill_reports_stale_when_managed_skill_md_is_invalid_utf8 |
|
7 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_tool_skill_refuses_hand_authored_directory |
|
9 |
0 |
0 |
|
100% |
| tests / test_installer.py |
test_install_tool_skill_refuses_invalid_marker |
|
9 |
0 |
0 |
|
100% |
| tests / test_installer.py |
(no function) |
|
30 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_bump_version |
|
1 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_update_version_file |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_update_version_file_requires_newer_version |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_update_json_version_file |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_update_package_lock_file |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_update_release_notes |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_update_release_notes_rejects_existing_version |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_get_release_notes_body_with_dated_heading |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_get_release_notes_body_with_plain_heading |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_get_release_notes_body_allows_non_version_h2_content |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_get_release_notes_body_requires_version_section |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_get_release_notes_body_requires_non_empty_section |
|
3 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_cli_updates_configured_files |
|
15 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_cli_accepts_env_vars |
|
22 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_cli_prints_current_version |
|
5 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
test_cli_prints_release_notes |
|
7 |
0 |
0 |
|
100% |
| tests / test_prepare_release.py |
(no function) |
|
39 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
make_venv |
|
3 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
clear_python_env_vars |
|
3 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_project_root_uses_nearest_python_project_marker |
|
9 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_project_root_uses_node_project_markers |
|
8 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_prefers_uv_project_environment |
|
9 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_resolves_uv_project_environment_from_workspace_root |
|
10 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_returns_none_for_workspace_without_root_environment |
|
8 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_supports_pep_832_redirect_file |
|
8 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_supports_absolute_pep_832_redirect_file |
|
6 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_ignores_invalid_pep_832_redirect_file |
|
10 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_ignores_invalid_pep_832_entries |
|
13 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_ignores_invalid_pep_832_entries.read_text |
|
1 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_ignores_virtual_env_outside_project |
|
6 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_uses_virtual_env_inside_project |
|
8 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_venv_uses_conda_prefix_when_no_project_env |
|
7 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_get_site_packages_dir_supports_windows_lib_and_lib64 |
|
8 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_get_site_packages_dir_returns_none_without_site_packages |
|
3 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
test_find_node_modules_uses_nearest_ancestor |
|
7 |
0 |
0 |
|
100% |
| tests / test_python_env.py |
(no function) |
|
19 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
write_skill |
|
5 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
write_dist_info |
|
6 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
write_node_package |
|
4 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_discovers_record_based_skills |
|
14 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_parses_folded_skill_description |
|
9 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_node_packages_discovers_package_skills |
|
12 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_node_packages_deduplicates_resolved_skill_dirs |
|
7 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_node_packages_warns_for_missing_or_invalid_metadata |
|
19 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_node_packages_warns_for_invalid_skill_metadata |
|
7 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_warns_for_invalid_skill_metadata |
|
8 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_uses_editable_direct_url_fallback |
|
9 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_does_not_claim_nested_site_packages_skills |
|
10 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_warns_when_site_packages_is_missing |
|
3 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_warns_for_invalid_distribution_metadata |
|
6 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_skips_dist_info_files |
|
6 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_warns_for_metadata_without_name |
|
8 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_ignores_empty_non_skill_and_duplicate_records |
|
8 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_warns_for_invalid_skill_files |
|
8 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_python_distributions_warns_when_skill_file_is_not_utf8 |
|
8 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_read_editable_source_root_rejects_invalid_direct_url_payloads |
|
4 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_is_relative_to_returns_false_for_unrelated_paths |
|
1 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_editable_direct_url_skips_symlinked_skills_outside_source_root |
|
12 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_editable_direct_url_skips_seen_skill_dirs |
|
8 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
test_scan_editable_direct_url_reports_invalid_skill_warning |
|
10 |
0 |
0 |
|
100% |
| tests / test_scanner.py |
(no function) |
|
31 |
0 |
0 |
|
100% |
| tests / test_workspace.py |
test_find_uv_workspace_handles_invalid_and_missing_workspace_tables |
|
12 |
0 |
0 |
|
100% |
| tests / test_workspace.py |
test_find_uv_workspace_filters_members_and_selects_nearest_member |
|
20 |
0 |
0 |
|
100% |
| tests / test_workspace.py |
test_find_node_workspace_filters_members_and_selects_nearest_member |
|
21 |
0 |
0 |
|
100% |
| tests / test_workspace.py |
test_find_node_workspace_supports_npm_object_form |
|
9 |
0 |
0 |
|
100% |
| tests / test_workspace.py |
test_find_node_workspace_handles_invalid_and_non_object_package_json |
|
9 |
0 |
0 |
|
100% |
| tests / test_workspace.py |
(no function) |
|
7 |
0 |
0 |
|
100% |