#!/usr/bin/env bash # Mypy strict gate for opt-in modules (--follow-imports=skip keeps it fast). # Usage: bash scripts/butler-mypy-strict-gate.sh set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT" if ! command -v python >/dev/null 2>&1; then echo "python not found" >&2 exit 1 fi python -c "import mypy" 2>/dev/null || { echo "mypy not installed (pip install -e '.[dev]')" >&2 exit 1 } # P2-F expansion: contracts + opt-in strict modules. MODULES=( butler/contracts/__init__.py butler/contracts/bridge_access.py butler/contracts/compaction_ports.py butler/contracts/context_transform_ports.py butler/contracts/dev_context_ports.py butler/contracts/dev_state_ports.py butler/contracts/eval_ports.py butler/contracts/events.py butler/contracts/gateway_registry.py butler/contracts/hook_context_ports.py butler/contracts/memory_ports.py butler/contracts/message_ports.py butler/contracts/owner_gate.py butler/contracts/review_ports.py butler/contracts/sink_registry.py butler/tools/delegate_run_state.py butler/tools/delegate_record.py butler/core/approval_cards.py butler/core/events_sink.py butler/core/schema_recovery.py butler/core/llm_retry_errors.py butler/core/llm_retry_outcomes.py butler/core/tool_batch_finalize.py butler/ops/lazy_import_budget.py butler/ops/degradation_registry.py butler/tools/terminal_approval.py butler/dag_scheduler.py butler/gateway/network_route_verify_runner.py butler/gateway/events_sink_impl.py butler/workflow_step_runner.py butler/gateway/locked_phase_registry.py butler/defaults/model_defaults.py butler/orchestrator/templates.py butler/orchestrator/loop_factory.py butler/orchestrator/memory_bridge.py butler/orchestrator/skill_bridge.py butler/orchestrator/prompt_assembler.py butler/core/__init__.py butler/core/agent_loop/ butler/core/agent_loop_phases.py butler/core/agents_md_sections.py butler/core/auto_continue.py butler/core/auto_review.py butler/core/batch_sequence_guard.py butler/core/best_effort.py butler/core/cache_safe_delegate.py butler/core/compaction_checkpoint.py butler/core/compaction_context_adapter.py butler/core/compaction_cutoff.py butler/core/compaction_phase.py butler/core/compaction_prompt.py butler/core/compaction_status.py butler/core/compaction_steer_bridge.py butler/core/compaction_task.py butler/core/confirm_flags.py butler/core/context_budget.py butler/core/context_compress_hooks.py butler/core/context_compress_pipeline.py butler/core/context_compress_support.py butler/core/context_compressor.py butler/core/context_pipeline.py butler/core/context_transform_registry.py butler/core/correction_intent.py butler/core/delegate_context.py butler/core/delegate_semaphore.py butler/core/design_md_sections.py butler/core/dev_context_adapter.py butler/core/dev_state_context_adapter.py butler/core/evidence_extract.py butler/core/exp_cache.py butler/core/fact_extraction.py butler/core/finish_tool_truncate.py butler/core/goal_loop.py butler/core/handoff.py butler/core/harness_flags.py butler/core/hashline.py butler/core/hook_context_adapter.py butler/core/hygiene_preflight.py butler/core/inline_tool_compress.py butler/core/input_stage.py butler/core/instruction_walkup.py butler/core/intent_keywords.py butler/core/interrupt.py butler/core/io_guardrail.py butler/core/json_repair.py butler/core/llm_retry.py butler/core/llm_retry_helpers.py butler/core/llm_retry_invoke.py butler/core/llm_retry_safe.py butler/core/llm_retry_success.py butler/core/loop_budget_nudge.py butler/core/loop_callbacks_merge.py butler/core/loop_middleware.py butler/core/loop_plugins.py butler/core/loop_response.py butler/core/loop_stuck.py butler/core/loop_types.py butler/core/memory_context_adapter.py butler/core/memory_recap_line.py butler/core/memory_source_surface.py butler/core/message_context_adapter.py butler/core/message_ir.py butler/core/message_repair.py butler/core/message_sanitize.py butler/core/meta_flags.py butler/core/metrics_sink.py butler/core/mode_classifier.py butler/core/model_context.py butler/core/output_grounding.py butler/core/output_schema_registry.py butler/core/parallel_tools.py butler/core/pim_state.py butler/core/pipeline_steps.py butler/core/plan_reason_graph.py butler/core/plan_snapshot.py butler/core/post_commit.py butler/core/post_compact_cleanup.py butler/core/post_edit_format.py butler/core/preemptive_compact.py butler/core/preread_context.py butler/core/prompt_renderer.py butler/core/reactive_compact.py butler/core/read_file_partial.py butler/core/read_state.py butler/core/reasoning_trace.py butler/core/reflection_closure.py butler/core/reflexion_ephemeral.py butler/core/reflexion_write.py butler/core/remote_compact.py butler/core/research_simplicity.py butler/core/retry_policy.py butler/core/review_context_adapter.py butler/core/rules_engine.py butler/core/safety_finish.py butler/core/schema_optimizer.py butler/core/session_epoch.py butler/core/session_hydration.py butler/core/session_recall_intent.py butler/core/session_todos.py butler/core/session_tool_index.py butler/core/session_transcript.py butler/core/skill_compact_rescue.py butler/core/skill_tool_bridge.py butler/core/steer.py butler/core/streaming_tools.py butler/core/structured_events.py butler/core/system_reminder.py butler/core/task_route_hints.py butler/core/text_truncate.py butler/core/todo_continuation.py butler/core/tool_batch.py butler/core/tool_batch_hooks.py butler/core/tool_batch_runner.py butler/core/tool_batch_state.py butler/core/tool_call_limits.py butler/core/tool_call_normalize.py butler/core/tool_dispatch.py butler/core/tool_dispatch_doom.py butler/core/tool_error_policy.py butler/core/tool_loop_detect.py butler/core/tool_narrative.py butler/core/tool_orchestrator.py butler/core/tool_output_masking.py butler/core/tool_output_prune.py butler/core/tool_pair_repair.py butler/core/tool_prune_policy.py butler/core/tool_recall_bm25.py butler/core/tool_result_cache.py butler/core/tool_result_classification.py butler/core/tool_result_storage.py butler/core/tool_retry.py butler/core/tool_selector.py butler/core/transcript_export.py butler/core/transcript_fork.py butler/core/transcript_fts.py butler/core/transcript_index.py butler/core/transcript_retention.py butler/core/transcript_revert.py butler/core/transcript_search.py butler/core/transform_feedback.py butler/core/transform_overrides.py butler/core/turn_compaction.py butler/core/turn_summary_line.py butler/core/turn_token_budget.py butler/core/two_phase_confirm.py butler/core/workflow_flags.py butler/dev_engine/__init__.py butler/dev_engine/b9_delegate_gate.py butler/dev_engine/b9_experience_retrieval.py butler/dev_engine/b9_live_fixed_tasks.py butler/dev_engine/b9_live_tuning.py butler/dev_engine/b9_oracle_curriculum.py butler/dev_engine/b9_oracle_fewshot.py butler/dev_engine/b9_prod_shaped_tasks.py butler/dev_engine/b9_tiers.py butler/dev_engine/b9_types.py butler/dev_engine/b9_verify_utils.py butler/dev_engine/code_search.py butler/dev_engine/coding_knowledge/ butler/dev_engine/coding_knowledge_benchmark.py butler/dev_engine/coding_knowledge_fixup.py butler/dev_engine/delegate_finalize.py butler/dev_engine/delegate_init.py butler/dev_engine/delegate_workspace.py butler/dev_engine/dev_benchmark.py butler/dev_engine/dev_context.py butler/dev_engine/dev_loop.py butler/dev_engine/dev_metrics.py butler/dev_engine/dev_state.py butler/dev_engine/dev_tools.py butler/dev_engine/diagnostics.py butler/dev_engine/fix_strategy.py butler/dev_engine/gentc_mutation.py butler/dev_engine/llm_delegate_benchmark.py butler/dev_engine/loop_plugin.py butler/dev_engine/optimize_advisory.py butler/dev_engine/prod_delegate_bridge.py butler/dev_engine/prod_playbook_seeds.py butler/dev_engine/project_dev_env.py butler/dev_engine/review_closure.py butler/dev_engine/review_knowledge.py butler/dev_engine/review_static.py butler/dev_engine/swe_curriculum.py butler/dev_engine/swebench_lite/ butler/dev_engine/verify.py butler/gateway/__init__.py butler/gateway/approval_cards.py butler/gateway/bot_loop_guard.py butler/gateway/command_registry.py butler/gateway/completion_notify.py butler/gateway/completion_telemetry.py butler/gateway/delegate_push_dedup.py butler/gateway/delegate_task_kind.py butler/gateway/durable_outbox.py butler/gateway/error_cards.py butler/gateway/events_sink.py butler/gateway/ext5_phrases.py butler/gateway/gate_reply_templates.py butler/gateway/gateway_contracts.py butler/gateway/gateway_transcript.py butler/gateway/handler_commands.py butler/gateway/handler_helpers.py butler/gateway/hooks.py butler/gateway/inbound_drain.py butler/gateway/inbound_idempotency.py butler/gateway/inbound_media.py butler/gateway/inbound_pipeline.py butler/gateway/inbound_validate.py butler/gateway/internal_leak_scrub.py butler/gateway/item_event_sink.py butler/gateway/item_events.py butler/gateway/locked_phases.py butler/gateway/locked_turn_orchestrator.py butler/gateway/media_telemetry.py butler/gateway/message_handler.py butler/gateway/message_pipelines.py butler/gateway/message_pipelines_fail_closed.py butler/gateway/message_queue.py butler/gateway/minimax_image_gen.py butler/gateway/minimax_tts.py butler/gateway/minimax_vlm.py butler/gateway/outbound_bridge.py butler/gateway/outbound_delay.py butler/gateway/outbound_events.py butler/gateway/outbound_files.py butler/gateway/outbound_prefs.py butler/gateway/owner_delegate_shortcuts.py butler/gateway/owner_gate.py butler/gateway/owner_ingest_shortcuts.py butler/gateway/owner_surface.py butler/gateway/pii_scrub.py butler/gateway/platform_policy.py butler/gateway/progressive_stream.py butler/gateway/queue_settings.py butler/gateway/reply_admission.py butler/gateway/runner.py butler/gateway/session_lifecycle.py butler/gateway/session_loop_factory.py butler/gateway/session_registry.py butler/gateway/singleton_lock.py butler/gateway/speech_stt.py butler/gateway/task_milestone.py butler/gateway/turn_post_pipeline.py butler/gateway/user_errors.py butler/gateway/vision_fallback.py butler/gateway/wechat_scenario_sim.py butler/gateway/wechat_text_export.py butler/hooks/__init__.py butler/hooks/loader.py butler/hooks/runner.py butler/hooks/telemetry.py butler/mcp/__init__.py butler/mcp/approval.py butler/mcp/async_runner.py butler/mcp/bridge.py butler/mcp/classify.py butler/mcp/client_http.py butler/mcp/client_stdio.py butler/mcp/config.py butler/mcp/deferred.py butler/mcp/diagnostics.py butler/mcp/extension_grounding.py butler/mcp/extension_manifest.py butler/mcp/extension_verify.py butler/mcp/github_grounding.py butler/mcp/github_tool_aliases.py butler/mcp/manager.py butler/mcp/naming.py butler/mcp/outbound_grounding_gate.py butler/mcp/profiles.py butler/mcp/registry_hook.py butler/mcp/result_slim.py butler/mcp/schema_normalize.py butler/mcp/server_stdio.py butler/mcp/todoist_grounding.py butler/mcp/todoist_tool_aliases.py butler/mcp/tools_engine.py butler/mcp/tools_manifest.py butler/mcp/turn_scrape_dedup.py butler/mcp/types.py butler/memory/__init__.py butler/memory/butler_memory.py butler/memory/chunking.py butler/memory/coding_recall.py butler/memory/corpus_router.py butler/memory/corrective_recall.py butler/memory/diagnostics.py butler/memory/diagnostics_collect.py butler/memory/document_ingest.py butler/memory/embedding.py butler/memory/experience_consolidation.py butler/memory/experience_mining.py butler/memory/experience_mining_cli.py butler/memory/facade.py butler/memory/injection_guard.py butler/memory/injection_llm_score.py butler/memory/knowledge_db.py butler/memory/memory_benchmark.py butler/memory/memory_caps.py butler/memory/memory_metrics.py butler/memory/memory_scope.py butler/memory/metrics_persist.py butler/memory/observation_migrate.py butler/memory/observation_recall.py butler/memory/observation_store.py butler/memory/observer_queue.py butler/memory/owner_experience_seed.py butler/memory/owner_write_pending.py butler/memory/pending_cli.py butler/memory/prefetch_cache.py butler/memory/prefetch_retrieval_metrics.py butler/memory/private_tags.py butler/memory/project_memory.py butler/memory/query_decompose.py butler/memory/query_relaxation.py butler/memory/recall_layers.py butler/memory/recall_scopes.py butler/memory/reindex.py butler/memory/retrieval_ranking.py butler/memory/retrieval_telemetry.py butler/memory/scope_diagnostics.py butler/memory/search_cli.py butler/memory/search_result.py butler/memory/semantic_config.py butler/memory/semantic_health.py butler/memory/semantic_index.py butler/memory/semantic_project.py butler/memory/transcript_memory_pipeline.py butler/memory/transcript_recall.py butler/memory/triplets.py butler/memory/unified_recall.py butler/memory/unified_recall_config.py butler/memory/vector_gc.py butler/memory/vector_store.py butler/memory/vector_sync_telemetry.py butler/ops/__init__.py butler/ops/agent_eval_weekly.py butler/ops/assistant_health.py butler/ops/b9_failure_analysis.py butler/ops/b9_harness_audit.py butler/ops/b9_lessons.py butler/ops/b9_prod_promoted_registry.py butler/ops/b9_prod_weekly.py butler/ops/boundary_observability.py butler/ops/butler_inbox.py butler/ops/compaction_audit.py butler/ops/cost_calibration.py butler/ops/cost_calibration_cli.py butler/ops/cost_tracker.py butler/ops/delegate_failure_b9_import.py butler/ops/delegate_failure_b9_promote.py butler/ops/delegate_failure_capture.py butler/ops/delegate_judge.py butler/ops/deploy_profile.py butler/ops/dev_eval.py butler/ops/dual_playbook_probe.py butler/ops/embedding_diagnostics.py butler/ops/embedding_health.py butler/ops/env_profiles.py butler/ops/eval_actions.py butler/ops/eval_bridge.py butler/ops/eval_config_overrides.py butler/ops/eval_diagnostics.py butler/ops/eval_experiment.py butler/ops/eval_feedback.py butler/ops/eval_regression.py butler/ops/eval_scoring.py butler/ops/eval_turn.py butler/ops/execution_surface_collect.py butler/ops/execution_surface_diagnostics.py butler/ops/experience_selection_telemetry.py butler/ops/experiment_diagnostics.py butler/ops/g1_04_prod_evidence.py butler/ops/harness_diagnostics.py butler/ops/head_to_head.py butler/ops/head_to_head_common.py butler/ops/head_to_head_t1.py butler/ops/health_report.py butler/ops/health_report_turn.py butler/ops/hermes_gate.py butler/ops/langfuse_tracer.py butler/ops/lingwen1_capture_probe.py butler/ops/lingwen1_delegate_drill.py butler/ops/lingwen1_failure_seed.py butler/ops/lingwen1_prod_sample.py butler/ops/memory_eval.py butler/ops/morning_brief_push.py butler/ops/observation_diagnostics.py butler/ops/onboard.py butler/ops/openclaw_diagnostics.py butler/ops/owner_brief_blocks.py butler/ops/owner_feedback.py butler/ops/owner_pmf_metrics.py butler/ops/owner_quality_surface.py butler/ops/owner_trust_surface.py butler/ops/prod_experience_effectiveness.py butler/ops/production_failure_experience.py butler/ops/rag_diagnostics.py butler/ops/registry_diagnostics.py butler/ops/retry_buckets.py butler/ops/runtime_metrics.py butler/ops/runtime_metrics_sink.py butler/ops/secrets_contract.py butler/ops/secrets_contract_cli.py butler/ops/security_audit.py butler/ops/snapshot.py butler/ops/stack_diagnostics.py butler/ops/swebench_entry_gate.py butler/ops/swebench_live_eval.py butler/ops/tcr_report.py butler/ops/tcr_strict_readiness.py butler/ops/terminal_sandbox_diagnostics.py butler/ops/token_cost_diagnostics.py butler/ops/tool_routing.py butler/ops/transcript_diagnostics.py butler/ops/usage_ledger.py butler/ops/wechat_corpus_eval.py butler/ops/wechat_dataset.py butler/orchestrator/__init__.py butler/runtime/__init__.py butler/runtime/approval.py butler/runtime/async_delegate.py butler/runtime/audit.py butler/runtime/builtin_handlers.py butler/runtime/cc_bridge.py butler/runtime/consistency_outcome.py butler/runtime/delegate_job.py butler/runtime/delegate_job_types.py butler/runtime/delegate_async_result.py butler/runtime/delegate_job_finalize.py butler/runtime/delegate_progress.py butler/runtime/delegate_registry.py butler/runtime/diagnostics.py butler/runtime/failure_tracker.py butler/runtime/loader.py butler/runtime/notify.py butler/runtime/push_queue.py butler/runtime/runner.py butler/runtime/schedule.py butler/runtime/schema.py butler/runtime/service.py butler/runtime/summary_enrich.py butler/runtime/task_store.py butler/runtime/workflow_version.py butler/session/__init__.py butler/session/auto_title.py butler/session/keys.py butler/session/lifecycle.py butler/session/memory_prefetch.py butler/session/new_session.py butler/session/post_session.py butler/session/post_session_guard.py butler/session/post_session_layered.py butler/skills/__init__.py butler/skills/consolidator.py butler/skills/experience_pointers.py butler/skills/fusion_wiring.py butler/skills/guard.py butler/skills/injection_policy.py butler/skills/layout.py butler/skills/learn.py butler/skills/lint.py butler/skills/manager/ butler/skills/router.py butler/skills/seed_bundled.py butler/skills/similarity.py butler/skills/usage.py butler/skills/write_approval.py butler/tools/__init__.py butler/tools/_file_cache.py butler/tools/audit_persist.py butler/tools/builtin_impl.py butler/tools/builtin_register.py butler/tools/butlerignore.py butler/tools/command_canonicalize.py butler/tools/config_tools.py butler/tools/contacts.py butler/tools/data_query.py butler/tools/delegate_impl.py butler/tools/delegate_phases.py butler/tools/delegate_prepare.py butler/tools/delegate_report.py butler/tools/delegate_role_guard.py butler/tools/delegate_run.py butler/tools/delegate_subagent.py butler/tools/delegate_summary_budget.py butler/tools/delegate_yield_tools.py butler/tools/document_reader.py butler/tools/download_tools.py butler/tools/execute_code.py butler/tools/expense.py butler/tools/file_io.py butler/tools/git_tools.py butler/tools/habits.py butler/tools/interrupt.py butler/tools/knowledge_search.py butler/tools/mcp_self_service.py butler/tools/memo.py butler/tools/memory_tools.py butler/tools/multimodal_tools.py butler/tools/network_route_verify.py butler/tools/network_search_policy.py butler/tools/orthogonality_lint.py butler/tools/path_safety.py butler/tools/pim_schema.py butler/tools/project_todos.py butler/tools/project_tools.py butler/tools/provider_layers.py butler/tools/registry.py butler/tools/registry_gates.py butler/tools/registry_tools.py butler/tools/reminder.py butler/tools/runtime_tools.py butler/tools/safe_root.py butler/tools/session_todos_tools.py butler/tools/tenant_store.py butler/tools/terminal_danger.py butler/tools/terminal_impl.py butler/tools/terminal_pattern_approval.py butler/tools/terminal_sandbox.py butler/tools/tool_arg_normalize.py butler/tools/tool_audit.py butler/tools/tool_doc_templates.py butler/tools/tool_implicit_context.py butler/tools/tool_schemas.py butler/tools/toolset_profiles.py butler/tools/web_fetch.py butler/tools/web_search.py butler/tools/web_search_probe.py butler/tools/workflow_tools.py butler/transport/__init__.py butler/transport/anthropic_transport.py butler/transport/auxiliary_client.py butler/transport/base.py butler/transport/cache_control.py butler/transport/chat_completions.py butler/transport/content_sanitize.py butler/transport/error_classifier.py butler/transport/fallback.py butler/transport/fusion_client.py butler/transport/interruptible_client.py butler/transport/llm_client.py butler/transport/memory_context_scrubber.py butler/transport/model_capabilities.py butler/transport/model_context.py butler/transport/provider_health.py butler/transport/providers.py butler/transport/reasoning_replay.py butler/transport/retry_utils.py butler/transport/schema_sanitizer.py butler/transport/stream_probe.py butler/transport/streaming_signal.py butler/transport/think_scrubber.py butler/transport/thinking_headers.py butler/transport/thinking_protocol.py butler/transport/tool_wire.py butler/transport/types.py butler/transport/usage_normalize.py butler/registry/__init__.py butler/registry/audit.py butler/registry/mcp_catalog_remote.py butler/registry/registry_errors.py butler/registry/skill_lock.py butler/registry/skill_sources/__init__.py butler/registry/skill_sources/base.py butler/registry/skill_sources/zip_safety.py butler/registry/skill_types.py butler/registry/hub_manifest.py butler/registry/mcp_catalog.py butler/registry/skill_sources/bundled.py butler/registry/skill_sources/project.py butler/registry/skill_sources/url.py butler/workflows/__init__.py butler/workflows/artifact_paths.py butler/workflows/callbacks.py butler/workflows/schema.py butler/workflows/until_assert.py butler/workflows/validate.py butler/workflows/variables.py butler/workflows/pause_state.py butler/workflows/runner.py butler/workflows/workflow_run_snapshot.py butler/delegate/__init__.py butler/delegate/category_resolver.py butler/delegate/task_kind.py butler/permissions/__init__.py butler/permissions/rules_fail_closed.py butler/permissions/tool_boundary_registry.py butler/project/__init__.py butler/project/archetypes.py butler/project/lead.py butler/project/plugins.py butler/registry/catalog_integrity.py butler/registry/install_pending.py butler/registry/mcp_project_tools.py butler/registry/mcp_ssot.py butler/registry/skill_install.py butler/registry/skill_normalize.py butler/registry/skill_sources/clawhub.py butler/registry/skill_sources/lobehub.py butler/registry/skill_sources/marketplace.py butler/registry/skills_project_sync.py butler/registry/skills_ssot.py butler/workflows/loader.py butler/permissions/doom_loop.py butler/permissions/rules.py butler/project/manager.py butler/project/meta.py butler/project/preflight.py butler/project/worktree.py butler/registry/hub_index_cache.py butler/registry/install_scan.py butler/registry/skill_service.py butler/registry/skill_sources/github.py butler/delegate/policy.py butler/delegate/subagent_permissions.py butler/permissions/approvals.py butler/registry/mcp_merge.py butler/registry/url_safety.py butler/registry/marketplace_compat.py butler/workflows/commands.py butler/registry/paths.py butler/registry/mcp_install.py butler/permissions/rules_context.py butler/project/model.py butler/__init__.py butler/config_service.py butler/env_parse.py butler/logging_config.py butler/memory_plugin.py butler/tenant.py butler/io/atomic_write.py butler/experiments/__init__.py butler/experiments/ledger.py butler/experiments/metrics.py butler/agent_profiles.py butler/agents_md.py butler/memory_settings.py butler/provider_presets.py butler/experiments/outcomes.py butler/experiments/crash_guard.py butler/experiments/git_utils.py butler/context_settings.py butler/config_secrets.py butler/model_resolve.py butler/tool_guardrails.py butler/main.py butler/experiments/mode.py butler/config.py butler/config_secrets_crypto.py butler/io/safe_load.py butler/human_gate.py butler/execution_context.py butler/task_orchestrator.py butler/gateway_settings.py butler/cli/__init__.py butler/cli/doctor.py butler/cli/spinner.py butler/eval_integration/__init__.py butler/eval_integration/presets.py butler/eval_integration/report_schema.py butler/eval_integration/sinks/__init__.py butler/eval_integration/suite_registry.py butler/eval_integration/suites/__init__.py butler/eval_integration/suites/agent_weekly_suite.py butler/eval_integration/suites/deepeval_suite.py butler/eval_integration/suites/hermes_gate_suite.py butler/eval_integration/suites/ragas_suite.py butler/eval_integration/suites/regression_suite.py butler/eval_integration/suites/wechat_corpus_suite.py butler/eval_integration/sync_policy.py butler/defaults/__init__.py butler/defaults/env_defaults.py butler/defaults/env_domains.py butler/report/__init__.py butler/report/acceptance_card.py butler/cli/eval_cli.py butler/cli/experiment_cli.py butler/cli/onboard_cli.py butler/cli/prompt_eval_cli.py butler/cli/provider_presets_cli.py butler/cli/registry_cli.py butler/cli/secrets_cli.py butler/cli/stream.py butler/cli/transcript_cli.py butler/cli/workflow_cli.py butler/eval_integration/oss/prefetch_audit_loader.py butler/eval_integration/sinks/audit_sink.py butler/eval_integration/sinks/deepeval_sink.py butler/eval_integration/sinks/junit_sink.py butler/eval_integration/sinks/langfuse_sink.py butler/eval_integration/sinks/ragas_sink.py butler/eval_integration/suites/b9_oracle_suite.py butler/eval_integration/suites/capability_suite.py butler/eval_integration/suites/memory_mb_suite.py butler/eval_integration/suites/tcr_suite.py butler/report/store.py butler/cli/slash_dispatch.py butler/cli/memory_cli.py butler/eval_integration/manager.py butler/report/format.py butler/report/generator.py butler/eval_integration/oss/deepeval_runner.py butler/eval_integration/oss/ragas_runner.py butler/execpolicy/__init__.py butler/extensions/__init__.py butler/plan/__init__.py butler/prompt_eval/__init__.py butler/tests_policies/__init__.py butler/transport/multimodal/__init__.py butler/transport/multimodal/minimax_tts.py butler/gateway/commands/__init__.py butler/gateway/platforms/__init__.py butler/gateway/platforms/base.py butler/gateway/platforms/helpers.py butler/gateway/platforms/types.py butler/gateway/platforms/wechat.py butler/gateway/platforms/wechat_format.py butler/gateway/platforms/wechat_ilink/account.py butler/gateway/platforms/wechat_ilink/constants.py butler/gateway/platforms/wechat_ilink/crypto.py butler/gateway/platforms/wechat_ilink/direct.py butler/gateway/platforms/wechat_ilink/media.py butler/gateway/platforms/wechat_ilink/poll_phases.py butler/gateway/platforms/wechat_ilink/qr_phases.py butler/gateway/platforms/wechat_ilink/registry.py butler/gateway/commands/dev_commands.py butler/gateway/commands/outcome_handlers.py butler/gateway/commands/sandbox_commands.py butler/gateway/commands/sessions_handlers.py butler/gateway/platforms/wechat_ilink/__init__.py butler/gateway/platforms/wechat_ilink/adapter_inbound.py butler/gateway/platforms/wechat_ilink/connect_phases.py butler/gateway/platforms/wechat_ilink/qr_login.py butler/gateway/platforms/wechat_ilink_constants.py butler/gateway/platforms/wechat_ilink_direct.py butler/gateway/platforms/wechat_ilink_phases.py butler/gateway/platforms/wechat_ilink_registry.py butler/gateway/platforms/wechat_ilink_utils.py butler/plan/markdown_sync.py butler/plan/store.py butler/prompt_eval/runner.py butler/tests_policies/scan_magicmock_spec.py butler/transport/multimodal/minimax_image_gen.py butler/cli/chat_cli.py butler/cli/cost_cli.py butler/cli/display.py butler/cli/doctor_sections.py butler/cli/gateway_cli.py butler/cli/mcp_catalog_cli.py butler/cli/mcp_cli.py butler/cli/projects_cli.py butler/cli/runtime_cli.py butler/cli/session_ui.py butler/cli/sessions_cli.py butler/cli/skills_registry.py butler/cli/slash_commands.py butler/execpolicy/engine.py butler/extensions/opencode.py butler/gateway/commands/cc_bridge_commands.py butler/gateway/commands/dev_handlers.py butler/gateway/commands/dialog_commands.py butler/gateway/commands/experience_commands.py butler/gateway/commands/export_handlers.py butler/gateway/commands/help_handlers.py butler/gateway/commands/info_commands.py butler/gateway/commands/lifecycle_commands.py butler/gateway/commands/memory_commands.py butler/gateway/commands/memory_handlers.py butler/gateway/commands/owner_shortcut_commands.py butler/gateway/commands/permission_commands.py butler/gateway/commands/project_commands.py butler/gateway/commands/project_handlers.py butler/gateway/commands/registry_handlers.py butler/gateway/commands/runtime_commands.py butler/gateway/commands/runtime_handlers.py butler/gateway/commands/skill_commands.py butler/gateway/platforms/wechat_ilink/_compat.py butler/gateway/platforms/wechat_ilink/_utils_legacy.py butler/gateway/platforms/wechat_ilink/adapter.py butler/gateway/platforms/wechat_ilink/adapter_lifecycle.py butler/gateway/platforms/wechat_ilink/adapter_media.py butler/gateway/platforms/wechat_ilink/adapter_outbound.py butler/gateway/platforms/wechat_ilink/phases.py butler/gateway/platforms/wechat_ilink/send_phases.py butler/gateway/platforms/wechat_ilink/transport.py butler/plan/mode.py butler/prompt_eval/corpus_bridge.py butler/prompt_eval/llm_rubric.py ) # P5 *_ops.py strict (committed list — refresh: python3 scripts/p5_ops_strict_modules.py --refresh) mapfile -t P5_OPS_MODULES < <(python3 scripts/p5_ops_strict_modules.py) MODULES+=("${P5_OPS_MODULES[@]}") echo "== Butler mypy strict gate (${#MODULES[@]} modules) ==" for mod in "${MODULES[@]}"; do echo " -> $mod" python -m mypy "$mod" --follow-imports=skip done echo "Mypy strict gate: OK"