OpenClaw-env-manager Coverage: 93.61%

Files Functions Classes

coverage.py v7.13.5, created at 2026-03-25 13:36 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src / openenv / __init__.py (no function)   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / __main__.py (no function)   100.00% 1 0 2   100.00% 0 0   100.00%
src / openenv / bots / __init__.py (no function)   100.00% 0 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py BotRecord.display_name   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py BotRecord.role   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py RunningBotRecord.display_name   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py RunningBotRecord.slug   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py bots_root   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py all_bots_compose_path   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _resolve_bot_manifest_path   100.00% 4 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _preferred_lockfile_path   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py discover_bots   100.00% 14 0 0   100.00% 6 0   100.00%
src / openenv / bots / manager.py create_bot   100.00% 11 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py update_bot   100.00% 23 0 0   100.00% 8 0   100.00%
src / openenv / bots / manager.py delete_bot   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py load_bot   100.00% 6 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py discover_running_bots   90.91% 11 1 0   83.33% 6 1   88.24%
src / openenv / bots / manager.py preview_running_bot_logs   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py create_skill_snapshot   93.75% 16 1 0   50.00% 4 2   85.00%
src / openenv / bots / manager.py generate_bot_artifacts   100.00% 19 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py generate_all_bots_stack   100.00% 13 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _materialize_all_bots_runtime   96.15% 26 1 0   83.33% 6 1   93.75%
src / openenv / bots / manager.py _merge_required_shared_env_values   93.75% 16 1 0   64.29% 14 5   80.00%
src / openenv / bots / manager.py _collect_env_placeholders   100.00% 13 0 0   100.00% 10 0   100.00%
src / openenv / bots / manager.py _write_shared_bot_workspace   100.00% 12 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _sync_shared_agent_state_from_main   91.67% 12 1 0   87.50% 8 1   90.00%
src / openenv / bots / manager.py _merge_shared_channel_configs   83.33% 6 1 0   83.33% 6 1   83.33%
src / openenv / bots / manager.py _map_shared_host_path   100.00% 8 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py improve_bot_markdown_documents   100.00% 5 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py improve_bot_markdown_documents.write_document   100.00% 3 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py build_bot_manifest   100.00% 7 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py interactive_menu   100.00% 30 0 0   100.00% 12 0   100.00%
src / openenv / bots / manager.py _interactive_browse_bots   100.00% 21 0 0   100.00% 8 0   100.00%
src / openenv / bots / manager.py _interactive_browse_running_bots   100.00% 16 0 0   100.00% 6 0   100.00%
src / openenv / bots / manager.py _show_bots   100.00% 10 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _show_running_bots   100.00% 7 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _interactive_bot_actions   100.00% 31 0 0   100.00% 8 0   100.00%
src / openenv / bots / manager.py _interactive_running_bot_actions   91.18% 34 3 0   92.86% 14 1   91.67%
src / openenv / bots / manager.py _interactive_add_bot   100.00% 8 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _interactive_edit_bot   100.00% 16 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _interactive_delete_bot   100.00% 17 0 0   100.00% 6 0   100.00%
src / openenv / bots / manager.py _prompt_nonempty   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _prompt_with_default   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _prompt_csv   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _prompt_csv_with_default   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _select_bot   100.00% 4 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _bot_from_selection   100.00% 8 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _running_bot_from_selection   100.00% 8 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _select_language   100.00% 9 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _normalize_language   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _require_language   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _message   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _answers_from_record   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _write_agent_docs   100.00% 9 0 0   100.00% 6 0   100.00%
src / openenv / bots / manager.py _write_agent_doc   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _memory_seed_text   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / bots / manager.py _resolve_openrouter_api_key   100.00% 10 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _ensure_bot_agent_documents_materialized   95.24% 21 1 0   90.00% 10 1   93.55%
src / openenv / bots / manager.py _bot_document_context   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _bot_documents   100.00% 6 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _normalize_markdown_content   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _unique_paths   100.00% 8 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _render_tools_markdown   100.00% 19 0 0   87.50% 8 1   96.30%
src / openenv / bots / manager.py _unique_preserving_order   100.00% 7 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _compose_path_for_bot   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _container_name_for_bot   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / bots / manager.py _load_running_bot   100.00% 9 0 0   100.00% 4 0   100.00%
src / openenv / bots / manager.py _apply_skill_snapshot   100.00% 12 0 0   83.33% 6 1   94.44%
src / openenv / bots / manager.py _hydrate_skill_from_snapshot   100.00% 13 0 0   50.00% 8 4   80.95%
src / openenv / bots / manager.py (no function)   100.00% 153 0 0   100.00% 0 0   100.00%
src / openenv / cli.py build_parser   100.00% 34 0 0   100.00% 0 0   100.00%
src / openenv / cli.py main   93.10% 29 2 0   93.75% 16 1   93.33%
src / openenv / cli.py _handle_init   100.00% 6 0 0   100.00% 2 0   100.00%
src / openenv / cli.py _handle_validate   100.00% 4 0 0   100.00% 0 0   100.00%
src / openenv / cli.py _handle_lock   100.00% 7 0 0   100.00% 0 0   100.00%
src / openenv / cli.py _handle_scan   100.00% 8 0 0   50.00% 2 1   90.00%
src / openenv / cli.py _handle_export_dockerfile   100.00% 9 0 0   100.00% 4 0   100.00%
src / openenv / cli.py _handle_build   100.00% 13 0 0   100.00% 0 0   100.00%
src / openenv / cli.py _handle_export_compose   100.00% 14 0 0   100.00% 0 0   100.00%
src / openenv / cli.py _configure_logging   100.00% 3 0 0   100.00% 0 0   100.00%
src / openenv / cli.py _render_locked_dockerfile   100.00% 3 0 0   100.00% 0 0   100.00%
src / openenv / cli.py _load_and_verify_lockfile   100.00% 7 0 0   100.00% 2 0   100.00%
src / openenv / cli.py _default_compose_path   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / cli.py _resolve_manifest_path_argument   50.00% 6 3 0   25.00% 4 1   40.00%
src / openenv / cli.py _resolve_lock_path_argument   84.62% 13 2 0   50.00% 8 4   71.43%
src / openenv / cli.py _write_compose_bundle   100.00% 15 0 0   75.00% 4 1   94.74%
src / openenv / cli.py _log_manifest_security_advisories   100.00% 2 0 0   100.00% 2 0   100.00%
src / openenv / cli.py _log_runtime_env_advisories   100.00% 2 0 0   100.00% 2 0   100.00%
src / openenv / cli.py (no function)   100.00% 40 0 0   100.00% 0 0   100.00%
src / openenv / core / __init__.py (no function)   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / core / errors.py CommandError.__init__   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / core / errors.py (no function)   100.00% 5 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py _clone_json_value   100.00% 5 0 0   100.00% 4 0   100.00%
src / openenv / core / models.py ProjectConfig.to_dict   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py SecretRef.to_dict   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py AccessConfig.to_dict   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py RuntimeConfig.to_dict   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py AgentConfig.to_dict   100.00% 6 0 0   100.00% 4 0   100.00%
src / openenv / core / models.py SkillConfig.to_dict   100.00% 6 0 0   100.00% 4 0   100.00%
src / openenv / core / models.py SkillConfig.rendered_content   85.71% 7 1 0   75.00% 4 1   81.82%
src / openenv / core / models.py SkillConfig.snapshot   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py SandboxConfig.to_dict   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py OpenClawConfig.config_path   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py OpenClawConfig.agent_dir   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py OpenClawConfig.to_dict   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / core / models.py OpenClawConfig.to_openclaw_json   100.00% 8 0 0   100.00% 4 0   100.00%
src / openenv / core / models.py OpenClawConfig.agent_definition   100.00% 7 0 0   50.00% 4 2   81.82%
src / openenv / core / models.py OpenClawConfig._openclaw_sandbox   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / core / models.py OpenClawConfig._sandbox_mode   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / core / models.py OpenClawConfig._workspace_access   100.00% 3 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py Manifest.to_dict   75.00% 4 1 0   50.00% 2 1   66.67%
src / openenv / core / models.py Manifest.workspace_files   100.00% 15 0 0   100.00% 10 0   100.00%
src / openenv / core / models.py Manifest.source_snapshot   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py Lockfile.to_dict   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / models.py (no function)   100.00% 110 0 0   100.00% 0 0   100.00%
src / openenv / core / security.py assess_manifest_security   93.75% 16 1 0   92.86% 14 1   93.33%
src / openenv / core / security.py assess_runtime_env_security   100.00% 10 0 0   100.00% 6 0   100.00%
src / openenv / core / security.py (no function)   100.00% 7 0 0   100.00% 0 0   100.00%
src / openenv / core / skills.py mandatory_skill_names   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / skills.py catalog_install_dir_name   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / core / skills.py skill_name_for_source   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / core / skills.py build_catalog_skill   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / core / skills.py merge_mandatory_skill_sources   100.00% 7 0 0   100.00% 4 0   100.00%
src / openenv / core / skills.py ensure_mandatory_skills   100.00% 9 0 0   100.00% 4 0   100.00%
src / openenv / core / skills.py catalog_skill_specs   90.91% 11 1 0   83.33% 6 1   88.24%
src / openenv / core / skills.py is_mandatory_skill_reference   0.00% 1 1 0   100.00% 0 0   0.00%
src / openenv / core / skills.py is_mandatory_skill   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / core / skills.py (no function)   100.00% 18 0 0   100.00% 0 0   100.00%
src / openenv / core / utils.py stable_json_dumps   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / utils.py sha256_text   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / core / utils.py slugify_name   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / core / utils.py encode_payload   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / core / utils.py rewrite_openclaw_home_paths   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / core / utils.py (no function)   100.00% 14 0 0   100.00% 0 0   100.00%
src / openenv / docker / __init__.py (no function)   100.00% 0 0 0   100.00% 0 0   100.00%
src / openenv / docker / builder.py default_image_tag   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / builder.py build_image   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / builder.py build_image_with_args   100.00% 12 0 0   100.00% 2 0   100.00%
src / openenv / docker / builder.py (no function)   100.00% 9 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py default_compose_filename   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py default_env_filename   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py all_bots_compose_filename   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py all_bots_env_filename   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py gateway_container_name   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py cli_container_name   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py render_compose   100.00% 20 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py render_all_bots_compose   96.15% 26 1 0   75.00% 4 1   93.33%
src / openenv / docker / compose.py write_compose   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py render_env_file   87.80% 41 5 0   80.00% 20 2   85.25%
src / openenv / docker / compose.py render_all_bots_env_file   100.00% 13 0 0   100.00% 6 0   100.00%
src / openenv / docker / compose.py write_env_file   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py prepare_runtime_env_values   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / docker / compose.py generate_gateway_token   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _gateway_startup_command   100.00% 6 0 0   50.00% 2 1   87.50%
src / openenv / docker / compose.py _catalog_skill_bootstrap_commands   90.91% 22 2 0   83.33% 12 2   88.24%
src / openenv / docker / compose.py _catalog_skill_placeholder_paths   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _should_preserve_existing_catalog_skill_stub   71.43% 7 2 0   100.00% 2 0   77.78%
src / openenv / docker / compose.py _base_service_environment   100.00% 9 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _shared_gateway_environment   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _all_bots_cli_service_name   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _all_bots_cli_container_name   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _effective_runtime_user   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / docker / compose.py _single_bot_runtime_home   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / docker / compose.py _shared_runtime_user   66.67% 3 1 0   50.00% 2 1   60.00%
src / openenv / docker / compose.py _runtime_capability_lines   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / docker / compose.py _render_environment   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _quoted   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _sh_quote   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _clawhub_post_install_move   0.00% 3 3 0   0.00% 2 0   0.00%
src / openenv / docker / compose.py _rm_target_arguments   0.00% 4 4 0   0.00% 2 0   0.00%
src / openenv / docker / compose.py materialize_runtime_mount_tree   95.65% 23 1 0   85.71% 14 2   91.89%
src / openenv / docker / compose.py _host_mount_path_for_container_path   100.00% 13 0 0   100.00% 0 0   100.00%
src / openenv / docker / compose.py _join_posix_relative   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / docker / compose.py (no function)   100.00% 89 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py render_dockerfile   100.00% 26 0 0   75.00% 4 1   96.67%
src / openenv / docker / dockerfile.py render_runtime_payload   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _render_payload   100.00% 6 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _directories_for   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _python_package_argument   66.67% 3 1 0   50.00% 2 1   60.00%
src / openenv / docker / dockerfile.py _system_packages   100.00% 7 0 0   75.00% 4 1   90.91%
src / openenv / docker / dockerfile.py _package_install_lines   100.00% 3 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _apk_system_packages   100.00% 7 0 0   75.00% 4 1   90.91%
src / openenv / docker / dockerfile.py _python_binary_link_lines   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _python_venv_lines   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _optional_browser_install_lines   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _optional_docker_cli_install_lines   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _global_node_requirements   100.00% 8 0 0   75.00% 4 1   91.67%
src / openenv / docker / dockerfile.py _payload_writer_script   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _skill_scan_lines   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / docker / dockerfile.py _state_link_lines   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / docker / dockerfile.py _catalog_skill_install_lines   100.00% 7 0 0   100.00% 2 0   100.00%
src / openenv / docker / dockerfile.py _runtime_permission_lines   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / docker / dockerfile.py _effective_runtime_user   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / docker / dockerfile.py _clawhub_install_command   100.00% 3 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _catalog_skill_install_script   100.00% 13 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py _clawhub_post_install_move   0.00% 3 3 0   0.00% 2 0   0.00%
src / openenv / docker / dockerfile.py _rm_target_arguments   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / docker / dockerfile.py _escape_label   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / dockerfile.py (no function)   100.00% 46 0 0   100.00% 0 0   100.00%
src / openenv / docker / runtime.py list_running_container_names   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / docker / runtime.py fetch_container_logs   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / docker / runtime.py snapshot_installed_skills   100.00% 22 0 0   100.00% 10 0   100.00%
src / openenv / docker / runtime.py _run_command   100.00% 9 0 0   100.00% 0 0   100.00%
src / openenv / docker / runtime.py _parse_frontmatter   92.31% 13 1 0   75.00% 8 2   85.71%
src / openenv / docker / runtime.py (no function)   100.00% 18 0 0   100.00% 0 0   100.00%
src / openenv / envfiles / __init__.py (no function)   100.00% 0 0 0   100.00% 0 0   100.00%
src / openenv / envfiles / project_env.py project_env_path   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / envfiles / project_env.py load_project_env   75.00% 4 1 0   50.00% 2 1   66.67%
src / openenv / envfiles / project_env.py get_project_env_value   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / envfiles / project_env.py write_project_env_value   100.00% 7 0 0   100.00% 2 0   100.00%
src / openenv / envfiles / project_env.py parse_project_env_text   88.24% 17 2 0   80.00% 10 2   85.19%
src / openenv / envfiles / project_env.py upsert_project_env_text   100.00% 18 0 0   100.00% 10 0   100.00%
src / openenv / envfiles / project_env.py (no function)   100.00% 13 0 0   100.00% 0 0   100.00%
src / openenv / envfiles / secret_env.py secret_env_path   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / envfiles / secret_env.py load_secret_values   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / envfiles / secret_env.py load_secret_refs   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / envfiles / secret_env.py render_secret_env   100.00% 8 0 0   100.00% 2 0   100.00%
src / openenv / envfiles / secret_env.py write_secret_env   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / envfiles / secret_env.py parse_secret_env_text   82.35% 17 3 0   70.00% 10 3   77.78%
src / openenv / envfiles / secret_env.py _unique_preserving_order   100.00% 7 0 0   75.00% 4 1   90.91%
src / openenv / envfiles / secret_env.py (no function)   100.00% 14 0 0   100.00% 0 0   100.00%
src / openenv / integrations / __init__.py (no function)   100.00% 0 0 0   100.00% 0 0   100.00%
src / openenv / integrations / openrouter.py improve_markdown_documents_with_openrouter   85.00% 20 3 0   66.67% 12 4   78.12%
src / openenv / integrations / openrouter.py improve_markdown_documents_with_openrouter.tracked_write_document   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / integrations / openrouter.py _improve_markdown_documents_batch   90.48% 21 2 0   80.00% 10 2   87.10%
src / openenv / integrations / openrouter.py _clone_context_payload   83.33% 6 1 0   50.00% 2 1   75.00%
src / openenv / integrations / openrouter.py _document_batches   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / integrations / openrouter.py _context_payload_for_batch   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / integrations / openrouter.py _batch_prompt_suffix   88.89% 9 1 0   75.00% 4 1   84.62%
src / openenv / integrations / openrouter.py _tool_definitions   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / integrations / openrouter.py _openrouter_chat_completion   100.00% 14 0 0   100.00% 0 0   100.00%
src / openenv / integrations / openrouter.py _normalize_assistant_message   100.00% 6 0 0   75.00% 4 1   90.00%
src / openenv / integrations / openrouter.py _assistant_text   91.67% 12 1 0   80.00% 10 2   86.36%
src / openenv / integrations / openrouter.py _decode_tool_arguments   100.00% 7 0 0   100.00% 2 0   100.00%
src / openenv / integrations / openrouter.py _apply_document_updates   100.00% 17 0 0   100.00% 10 0   100.00%
src / openenv / integrations / openrouter.py (no function)   100.00% 24 0 0   100.00% 0 0   100.00%
src / openenv / integrations / scanner.py materialize_skills   100.00% 11 0 0   100.00% 4 0   100.00%
src / openenv / integrations / scanner.py run_skill_scanner   95.65% 23 1 0   83.33% 6 1   93.10%
src / openenv / integrations / scanner.py (no function)   100.00% 10 0 0   100.00% 0 0   100.00%
src / openenv / manifests / __init__.py (no function)   100.00% 0 0 0   100.00% 0 0   100.00%
src / openenv / manifests / loader.py load_manifest   100.00% 16 0 0   100.00% 4 0   100.00%
src / openenv / manifests / loader.py parse_manifest   96.88% 32 1 0   91.67% 12 1   95.45%
src / openenv / manifests / loader.py _parse_secret_refs   100.00% 8 0 0   100.00% 6 0   100.00%
src / openenv / manifests / loader.py _parse_agent_config   100.00% 7 0 0   100.00% 0 0   100.00%
src / openenv / manifests / loader.py _parse_memory_seed   100.00% 7 0 0   100.00% 4 0   100.00%
src / openenv / manifests / loader.py _parse_agent_document   91.67% 12 1 0   87.50% 8 1   90.00%
src / openenv / manifests / loader.py _split_memory_seed   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / manifests / loader.py _looks_like_markdown_ref   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / manifests / loader.py _validate_markdown_ref   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / manifests / loader.py _read_markdown_ref   90.00% 10 1 0   75.00% 4 1   85.71%
src / openenv / manifests / loader.py _parse_skill   100.00% 13 0 0   100.00% 10 0   100.00%
src / openenv / manifests / loader.py _validate_runtime   100.00% 9 0 0   100.00% 10 0   100.00%
src / openenv / manifests / loader.py _validate_openclaw   100.00% 9 0 0   100.00% 6 0   100.00%
src / openenv / manifests / loader.py _validate_skill_names   100.00% 5 0 0   100.00% 4 0   100.00%
src / openenv / manifests / loader.py _json_like_mapping   80.00% 10 2 0   75.00% 8 2   77.78%
src / openenv / manifests / loader.py _json_like_value   85.71% 14 2 0   83.33% 12 2   84.62%
src / openenv / manifests / loader.py _require_table   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / manifests / loader.py _require_string   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / manifests / loader.py _optional_string   100.00% 5 0 0   100.00% 4 0   100.00%
src / openenv / manifests / loader.py _require_bool   100.00% 5 0 0   100.00% 2 0   100.00%
src / openenv / manifests / loader.py _optional_bool   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / manifests / loader.py _string_list   100.00% 5 0 0   100.00% 4 0   100.00%
src / openenv / manifests / loader.py _string_map   100.00% 10 0 0   100.00% 8 0   100.00%
src / openenv / manifests / loader.py (no function)   100.00% 33 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py build_lockfile   100.00% 5 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py resolve_base_image   96.00% 25 1 0   90.00% 10 1   94.29%
src / openenv / manifests / lockfile.py _inspect_base_image   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py _pull_and_inspect_base_image   83.33% 12 2 0   100.00% 0 0   83.33%
src / openenv / manifests / lockfile.py _is_missing_local_image_error   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py _docker_error_detail   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py _attach_digest   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py _resolve_python_requirement   85.71% 7 1 0   75.00% 4 1   81.82%
src / openenv / manifests / lockfile.py _resolve_node_requirement   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / manifests / lockfile.py dump_lockfile   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py write_lockfile   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py load_lockfile   100.00% 8 0 0   100.00% 0 0   100.00%
src / openenv / manifests / lockfile.py parse_lockfile   73.68% 19 5 0   68.75% 16 5   71.43%
src / openenv / manifests / lockfile.py _require_string   100.00% 4 0 0   100.00% 2 0   100.00%
src / openenv / manifests / lockfile.py (no function)   100.00% 27 0 0   100.00% 0 0   100.00%
src / openenv / manifests / writer.py render_manifest   94.59% 74 4 0   90.91% 22 2   93.75%
src / openenv / manifests / writer.py _render_agent_doc   100.00% 3 0 0   100.00% 2 0   100.00%
src / openenv / manifests / writer.py _render_kv   82.35% 17 3 0   78.57% 14 3   80.65%
src / openenv / manifests / writer.py _render_inline_table   100.00% 2 0 0   100.00% 0 0   100.00%
src / openenv / manifests / writer.py _render_table   73.68% 19 5 0   66.67% 12 2   70.97%
src / openenv / manifests / writer.py _render_table_array   0.00% 19 19 0   0.00% 12 0   0.00%
src / openenv / manifests / writer.py _is_table_array   100.00% 1 0 0   100.00% 0 0   100.00%
src / openenv / manifests / writer.py (no function)   100.00% 10 0 0   100.00% 0 0   100.00%
src / openenv / templates / __init__.py (no function)   100.00% 0 0 0   100.00% 0 0   100.00%
src / openenv / templates / sample.py (no function)   100.00% 3 0 0   100.00% 0 0   100.00%
Total     95.93% 2656 108 2   85.91% 802 89   93.61%

No items found using the specified filter.