butler_deps.dot
Rama main · réplica de lectura del repositorio original.
digraph ButlerDeps {
rankdir=LR;
node [shape=box, style=filled];
graph [fontsize=12, label="Butler Module Dependencies"];
subgraph cluster_Cross_Cutting {
label="Cross-Cutting";
style=filled;
fillcolor="#e0bbff";
nodesep=0.3;
ranksep=0.5;
"configuration.context" [label="context"];
"configuration.context_ops" [label="context_ops"];
"configuration.gateway_ops" [label="gateway_ops"];
"configuration.memory_ops" [label="memory_ops"];
"configuration.provider_presets" [label="provider_presets"];
"configuration.provider_presets_ops" [label="provider_presets_ops"];
"configuration.secrets" [label="secrets"];
"configuration.secrets_crypto" [label="secrets_crypto"];
"configuration.secrets_ops" [label="secrets_ops"];
"configuration.service" [label="service"];
"configuration.settings" [label="settings"];
"configuration.settings_ops" [label="settings_ops"];
"contracts" [label="contracts"];
"contracts.approval_registry" [label="approval_registry"];
"contracts.approval_store_impl" [label="approval_store_impl"];
"contracts.completion_registry" [label="completion_registry"];
"contracts.gateway_registry" [label="gateway_registry"];
"contracts.health_diagnostic_ports" [label="health_diagnostic_ports"];
"contracts.health_diagnostic_registry" [label="health_diagnostic_registry"];
"contracts.inbound_idempotency_registry" [label="inbound_idempotency_registry"];
"contracts.sink_registry" [label="sink_registry"];
"contracts.tool_dispatch_ports" [label="tool_dispatch_ports"];
"contracts.tool_dispatch_registry" [label="tool_dispatch_registry"];
"contracts.tool_registry_registry" [label="tool_registry_registry"];
"contracts.workflow_gate_impl" [label="workflow_gate_impl"];
"contracts.workflow_gate_registry" [label="workflow_gate_registry"];
"project" [label="project"];
"project.archetypes" [label="archetypes"];
"project.lead" [label="lead"];
"project.manager" [label="manager"];
"project.manager_ops" [label="manager_ops"];
"project.maturity" [label="maturity"];
"project.maturity_ops" [label="maturity_ops"];
"project.meta" [label="meta"];
"project.model" [label="model"];
"project.plugins" [label="plugins"];
"project.policy_env" [label="policy_env"];
"project.preflight" [label="preflight"];
"project.preflight_ops" [label="preflight_ops"];
"project.worktree" [label="worktree"];
"project.worktree_ops" [label="worktree_ops"];
"registry" [label="registry"];
"registry.audit" [label="audit"];
"registry.catalog_integrity" [label="catalog_integrity"];
"registry.hub_index_cache" [label="hub_index_cache"];
"registry.hub_manifest" [label="hub_manifest"];
"registry.hub_manifest_ops" [label="hub_manifest_ops"];
"registry.install_pending" [label="install_pending"];
"registry.install_scan" [label="install_scan"];
"registry.install_scan_ops" [label="install_scan_ops"];
"registry.marketplace_compat" [label="marketplace_compat"];
"registry.marketplace_compat_ops" [label="marketplace_compat_ops"];
"registry.mcp_catalog" [label="mcp_catalog"];
"registry.mcp_catalog_ops" [label="mcp_catalog_ops"];
"registry.mcp_catalog_remote" [label="mcp_catalog_remote"];
"registry.mcp_install" [label="mcp_install"];
"registry.mcp_install_ops" [label="mcp_install_ops"];
"registry.mcp_merge" [label="mcp_merge"];
"registry.mcp_merge_ops" [label="mcp_merge_ops"];
"registry.mcp_project_tools" [label="mcp_project_tools"];
"registry.mcp_project_tools_ops" [label="mcp_project_tools_ops"];
"registry.mcp_ssot" [label="mcp_ssot"];
"registry.paths" [label="paths"];
"registry.registry_errors" [label="registry_errors"];
"registry.registry_paths_ops" [label="registry_paths_ops"];
"registry.skill_install" [label="skill_install"];
"registry.skill_lock" [label="skill_lock"];
"registry.skill_service" [label="skill_service"];
"registry.skill_service_ops" [label="skill_service_ops"];
"registry.skill_sources" [label="skill_sources"];
"registry.skill_sources.base" [label="base"];
"registry.skill_sources.bundled" [label="bundled"];
"registry.skill_sources.bundled_ops" [label="bundled_ops"];
"registry.skill_sources.clawhub" [label="clawhub"];
"registry.skill_sources.github" [label="github"];
"registry.skill_sources.lobehub" [label="lobehub"];
"registry.skill_sources.lobehub_ops" [label="lobehub_ops"];
"registry.skill_sources.marketplace" [label="marketplace"];
"registry.skill_sources.marketplace_ops" [label="marketplace_ops"];
"registry.skill_sources.project" [label="project"];
"registry.skill_sources.url" [label="url"];
"registry.skill_sources.url_ops" [label="url_ops"];
"registry.skills_project_sync" [label="skills_project_sync"];
"registry.skills_project_sync_ops" [label="skills_project_sync_ops"];
"registry.skills_ssot" [label="skills_ssot"];
"registry.url_safety" [label="url_safety"];
"runtime" [label="runtime"];
"runtime.approval" [label="approval"];
"runtime.async_delegate" [label="async_delegate"];
"runtime.async_delegate_ops" [label="async_delegate_ops"];
"runtime.audit" [label="audit"];
"runtime.builtin_handlers" [label="builtin_handlers"];
"runtime.cc_bridge" [label="cc_bridge"];
"runtime.cc_bridge_ops" [label="cc_bridge_ops"];
"runtime.consistency_outcome" [label="consistency_outcome"];
"runtime.delegate_async_result" [label="delegate_async_result"];
"runtime.delegate_job" [label="delegate_job"];
"runtime.delegate_job_body" [label="delegate_job_body"];
"runtime.delegate_job_finalize" [label="delegate_job_finalize"];
"runtime.delegate_job_finalize_ops" [label="delegate_job_finalize_ops"];
"runtime.delegate_progress" [label="delegate_progress"];
"runtime.delegate_progress_ops" [label="delegate_progress_ops"];
"runtime.delegate_registry" [label="delegate_registry"];
"runtime.delegate_registry_ops" [label="delegate_registry_ops"];
"runtime.diagnostics" [label="diagnostics"];
"runtime.diagnostics_ops" [label="diagnostics_ops"];
"runtime.failure_tracker" [label="failure_tracker"];
"runtime.failure_tracker_ops" [label="failure_tracker_ops"];
"runtime.loader" [label="loader"];
"runtime.notify" [label="notify"];
"runtime.push_queue" [label="push_queue"];
"runtime.runner" [label="runner"];
"runtime.service" [label="service"];
"runtime.service_ops" [label="service_ops"];
"runtime.summary_enrich" [label="summary_enrich"];
"runtime.task_store" [label="task_store"];
"runtime.workflow_version" [label="workflow_version"];
"tools.registry" [label="registry"];
"utilities.env_parse" [label="env_parse"];
"utilities.logging_config" [label="logging_config"];
"utilities.tenant" [label="tenant"];
}
subgraph cluster_L1_Gateway {
label="L1-Gateway";
style=filled;
fillcolor="#a8d8ea";
nodesep=0.3;
ranksep=0.5;
"cli" [label="cli"];
"cli.architecture_cli" [label="architecture_cli"];
"cli.blackboard_cli" [label="blackboard_cli"];
"cli.chat_cli" [label="chat_cli"];
"cli.cost_cli" [label="cost_cli"];
"cli.doctor" [label="doctor"];
"cli.doctor_sections" [label="doctor_sections"];
"cli.eval_cli" [label="eval_cli"];
"cli.events_cli" [label="events_cli"];
"cli.experiment_cli" [label="experiment_cli"];
"cli.gateway_cli" [label="gateway_cli"];
"cli.mcp_catalog_cli" [label="mcp_catalog_cli"];
"cli.mcp_cli" [label="mcp_cli"];
"cli.memory_cli" [label="memory_cli"];
"cli.memory_cli_ops" [label="memory_cli_ops"];
"cli.onboard_cli" [label="onboard_cli"];
"cli.projects_cli" [label="projects_cli"];
"cli.prompt_eval_cli" [label="prompt_eval_cli"];
"cli.provider_presets_cli" [label="provider_presets_cli"];
"cli.registry_cli" [label="registry_cli"];
"cli.runtime_cli" [label="runtime_cli"];
"cli.secrets_cli" [label="secrets_cli"];
"cli.session_ui" [label="session_ui"];
"cli.sessions_cli" [label="sessions_cli"];
"cli.skills_registry" [label="skills_registry"];
"cli.skills_registry_ops" [label="skills_registry_ops"];
"cli.slash_dispatch" [label="slash_dispatch"];
"cli.slash_dispatch_ops" [label="slash_dispatch_ops"];
"cli.stream" [label="stream"];
"cli.transcript_cli" [label="transcript_cli"];
"cli.workflow_cli" [label="workflow_cli"];
"configuration.gateway" [label="gateway"];
"gateway" [label="gateway"];
"gateway.approval_cards" [label="approval_cards"];
"gateway.bot_loop_guard" [label="bot_loop_guard"];
"gateway.bot_loop_guard_ops" [label="bot_loop_guard_ops"];
"gateway.command_registry" [label="command_registry"];
"gateway.commands" [label="commands"];
"gateway.commands.cc_bridge_commands" [label="cc_bridge_commands"];
"gateway.commands.dev_commands" [label="dev_commands"];
"gateway.commands.dev_handlers" [label="dev_handlers"];
"gateway.commands.dev_handlers_ops" [label="dev_handlers_ops"];
"gateway.commands.dialog_commands" [label="dialog_commands"];
"gateway.commands.dialog_commands_ops" [label="dialog_commands_ops"];
"gateway.commands.experience_commands" [label="experience_commands"];
"gateway.commands.experience_commands_ops" [label="experience_commands_ops"];
"gateway.commands.export_handlers" [label="export_handlers"];
"gateway.commands.help_handlers" [label="help_handlers"];
"gateway.commands.help_handlers_ops" [label="help_handlers_ops"];
"gateway.commands.info_commands" [label="info_commands"];
"gateway.commands.info_commands_ops" [label="info_commands_ops"];
"gateway.commands.lifecycle_commands" [label="lifecycle_commands"];
"gateway.commands.lifecycle_commands_ops" [label="lifecycle_commands_ops"];
"gateway.commands.memory_commands" [label="memory_commands"];
"gateway.commands.memory_handlers" [label="memory_handlers"];
"gateway.commands.memory_handlers_ops" [label="memory_handlers_ops"];
"gateway.commands.outcome_handlers" [label="outcome_handlers"];
"gateway.commands.owner_shortcut_commands" [label="owner_shortcut_commands"];
"gateway.commands.permission_commands" [label="permission_commands"];
"gateway.commands.permission_commands_ops" [label="permission_commands_ops"];
"gateway.commands.project_commands" [label="project_commands"];
"gateway.commands.project_commands_ops" [label="project_commands_ops"];
"gateway.commands.project_handlers" [label="project_handlers"];
"gateway.commands.registry_handlers" [label="registry_handlers"];
"gateway.commands.registry_handlers_ops" [label="registry_handlers_ops"];
"gateway.commands.runtime_commands" [label="runtime_commands"];
"gateway.commands.runtime_handlers" [label="runtime_handlers"];
"gateway.commands.sandbox_commands" [label="sandbox_commands"];
"gateway.commands.sessions_handlers" [label="sessions_handlers"];
"gateway.commands.skill_commands" [label="skill_commands"];
"gateway.completion_notify" [label="completion_notify"];
"gateway.completion_notify_ops" [label="completion_notify_ops"];
"gateway.completion_policy" [label="completion_policy"];
"gateway.completion_telemetry" [label="completion_telemetry"];
"gateway.completion_telemetry_ops" [label="completion_telemetry_ops"];
"gateway.delegate_push_dedup" [label="delegate_push_dedup"];
"gateway.delegate_task_kind" [label="delegate_task_kind"];
"gateway.durable_outbox" [label="durable_outbox"];
"gateway.error_cards" [label="error_cards"];
"gateway.events_sink" [label="events_sink"];
"gateway.events_sink_impl" [label="events_sink_impl"];
"gateway.gate_reply_templates" [label="gate_reply_templates"];
"gateway.gateway_contracts" [label="gateway_contracts"];
"gateway.gateway_transcript" [label="gateway_transcript"];
"gateway.gateway_transcript_ops" [label="gateway_transcript_ops"];
"gateway.handler_commands" [label="handler_commands"];
"gateway.handler_helpers" [label="handler_helpers"];
"gateway.hooks" [label="hooks"];
"gateway.inbound_drain" [label="inbound_drain"];
"gateway.inbound_idempotency" [label="inbound_idempotency"];
"gateway.inbound_idempotency_ops" [label="inbound_idempotency_ops"];
"gateway.inbound_media" [label="inbound_media"];
"gateway.inbound_media_ops" [label="inbound_media_ops"];
"gateway.inbound_pipeline" [label="inbound_pipeline"];
"gateway.inbound_validate" [label="inbound_validate"];
"gateway.inbound_validate_ops" [label="inbound_validate_ops"];
"gateway.item_event_sink" [label="item_event_sink"];
"gateway.item_event_sink_ops" [label="item_event_sink_ops"];
"gateway.item_events" [label="item_events"];
"gateway.item_events_ops" [label="item_events_ops"];
"gateway.locked_phase_registry" [label="locked_phase_registry"];
"gateway.locked_phases" [label="locked_phases"];
"gateway.locked_phases.augment_phase" [label="augment_phase"];
"gateway.locked_phases.error_phase" [label="error_phase"];
"gateway.locked_phases.execute_phase" [label="execute_phase"];
"gateway.locked_phases.finalize_phase" [label="finalize_phase"];
"gateway.locked_phases.format_phase" [label="format_phase"];
"gateway.locked_phases.hooks_phase" [label="hooks_phase"];
"gateway.locked_phases.init_phase" [label="init_phase"];
"gateway.locked_phases.normalizer_phase" [label="normalizer_phase"];
"gateway.locked_phases.state" [label="state"];
"gateway.locked_phases.validation_phase" [label="validation_phase"];
"gateway.locked_phases_ops" [label="locked_phases_ops"];
"gateway.locked_turn_orchestrator" [label="locked_turn_orchestrator"];
"gateway.locked_turn_orchestrator_ops" [label="locked_turn_orchestrator_ops"];
"gateway.media_diagnostic_ops" [label="media_diagnostic_ops"];
"gateway.media_telemetry" [label="media_telemetry"];
"gateway.media_telemetry_ops" [label="media_telemetry_ops"];
"gateway.message_handler" [label="message_handler"];
"gateway.message_handler_ops" [label="message_handler_ops"];
"gateway.message_pipelines" [label="message_pipelines"];
"gateway.message_pipelines_fail_closed" [label="message_pipelines_fail_closed"];
"gateway.message_queue" [label="message_queue"];
"gateway.message_queue_ops" [label="message_queue_ops"];
"gateway.minimax_image_gen" [label="minimax_image_gen"];
"gateway.minimax_tts" [label="minimax_tts"];
"gateway.minimax_vlm" [label="minimax_vlm"];
"gateway.network_route_verify_runner" [label="network_route_verify_runner"];
"gateway.network_route_verify_runner_ops" [label="network_route_verify_runner_ops"];
"gateway.outbound_bridge" [label="outbound_bridge"];
"gateway.outbound_bridge_ops" [label="outbound_bridge_ops"];
"gateway.outbound_delay" [label="outbound_delay"];
"gateway.outbound_files" [label="outbound_files"];
"gateway.outbound_prefs" [label="outbound_prefs"];
"gateway.outbound_prefs_ops" [label="outbound_prefs_ops"];
"gateway.owner_delegate_shortcuts" [label="owner_delegate_shortcuts"];
"gateway.owner_delegate_shortcuts_ops" [label="owner_delegate_shortcuts_ops"];
"gateway.owner_gate" [label="owner_gate"];
"gateway.owner_ingest_shortcuts" [label="owner_ingest_shortcuts"];
"gateway.owner_surface" [label="owner_surface"];
"gateway.owner_surface_ops" [label="owner_surface_ops"];
"gateway.pii_scrub" [label="pii_scrub"];
"gateway.pii_scrub_ops" [label="pii_scrub_ops"];
"gateway.platforms" [label="platforms"];
"gateway.platforms.base" [label="base"];
"gateway.platforms.base_ops" [label="base_ops"];
"gateway.platforms.helpers" [label="helpers"];
"gateway.platforms.http.adapter" [label="adapter"];
"gateway.platforms.wechat" [label="wechat"];
"gateway.platforms.wechat_format" [label="wechat_format"];
"gateway.platforms.wechat_ilink" [label="wechat_ilink"];
"gateway.platforms.wechat_ilink._compat" [label="_compat"];
"gateway.platforms.wechat_ilink._utils_legacy" [label="_utils_legacy"];
"gateway.platforms.wechat_ilink.account" [label="account"];
"gateway.platforms.wechat_ilink.adapter" [label="adapter"];
"gateway.platforms.wechat_ilink.adapter_inbound" [label="adapter_inbound"];
"gateway.platforms.wechat_ilink.adapter_inbound_ops" [label="adapter_inbound_ops"];
"gateway.platforms.wechat_ilink.adapter_lifecycle" [label="adapter_lifecycle"];
"gateway.platforms.wechat_ilink.adapter_lifecycle_ops" [label="adapter_lifecycle_ops"];
"gateway.platforms.wechat_ilink.adapter_media" [label="adapter_media"];
"gateway.platforms.wechat_ilink.adapter_media_ops" [label="adapter_media_ops"];
"gateway.platforms.wechat_ilink.adapter_outbound" [label="adapter_outbound"];
"gateway.platforms.wechat_ilink.adapter_outbound_ops" [label="adapter_outbound_ops"];
"gateway.platforms.wechat_ilink.connect_phases" [label="connect_phases"];
"gateway.platforms.wechat_ilink.connect_phases_ops" [label="connect_phases_ops"];
"gateway.platforms.wechat_ilink.crypto" [label="crypto"];
"gateway.platforms.wechat_ilink.direct" [label="direct"];
"gateway.platforms.wechat_ilink.media" [label="media"];
"gateway.platforms.wechat_ilink.phases" [label="phases"];
"gateway.platforms.wechat_ilink.poll_phases" [label="poll_phases"];
"gateway.platforms.wechat_ilink.qr_login" [label="qr_login"];
"gateway.platforms.wechat_ilink.qr_phases" [label="qr_phases"];
"gateway.platforms.wechat_ilink.send_phases" [label="send_phases"];
"gateway.platforms.wechat_ilink.send_phases_ops" [label="send_phases_ops"];
"gateway.platforms.wechat_ilink.transport" [label="transport"];
"gateway.progressive_stream" [label="progressive_stream"];
"gateway.queue_settings" [label="queue_settings"];
"gateway.reply_admission" [label="reply_admission"];
"gateway.runner" [label="runner"];
"gateway.runner_ops" [label="runner_ops"];
"gateway.session_lifecycle" [label="session_lifecycle"];
"gateway.session_loop_factory" [label="session_loop_factory"];
"gateway.session_registry" [label="session_registry"];
"gateway.session_registry_ops" [label="session_registry_ops"];
"gateway.singleton_lock" [label="singleton_lock"];
"gateway.speech_stt" [label="speech_stt"];
"gateway.speech_stt_ops" [label="speech_stt_ops"];
"gateway.task_milestone" [label="task_milestone"];
"gateway.task_milestone_ops" [label="task_milestone_ops"];
"gateway.turn_post_pipeline" [label="turn_post_pipeline"];
"gateway.turn_post_pipeline_ops" [label="turn_post_pipeline_ops"];
"gateway.vision_fallback" [label="vision_fallback"];
"gateway.wechat_scenario_sim" [label="wechat_scenario_sim"];
"gateway.wechat_scenario_sim.evaluation" [label="evaluation"];
"gateway.wechat_scenario_sim.execution" [label="execution"];
"gateway.wechat_scenario_sim.utils" [label="utils"];
"gateway.wechat_scenario_sim_bridge" [label="wechat_scenario_sim_bridge"];
"gateway.wechat_scenario_sim_ops" [label="wechat_scenario_sim_ops"];
"gateway.wechat_text_export" [label="wechat_text_export"];
}
subgraph cluster_L2_Orchestration {
label="L2-Orchestration";
style=filled;
fillcolor="#aa96da";
nodesep=0.3;
ranksep=0.5;
"delegate" [label="delegate"];
"delegate.category_resolver" [label="category_resolver"];
"delegate.category_resolver_ops" [label="category_resolver_ops"];
"delegate.policy" [label="policy"];
"delegate.policy_ops" [label="policy_ops"];
"delegate.subagent_permissions" [label="subagent_permissions"];
"delegate.subagent_permissions_ops" [label="subagent_permissions_ops"];
"delegate.task_kind" [label="task_kind"];
"orchestrator" [label="orchestrator"];
"orchestrator.loop_factory" [label="loop_factory"];
"orchestrator.loop_factory_ops" [label="loop_factory_ops"];
"orchestrator.memory_bridge" [label="memory_bridge"];
"orchestrator.memory_bridge_ops" [label="memory_bridge_ops"];
"orchestrator.prompt_assembler" [label="prompt_assembler"];
"orchestrator.prompt_assembler_ops" [label="prompt_assembler_ops"];
"orchestrator.skill_bridge" [label="skill_bridge"];
"orchestrator.templates" [label="templates"];
"orchestrator.templates_ops" [label="templates_ops"];
"workflows" [label="workflows"];
"workflows.callbacks" [label="callbacks"];
"workflows.commands" [label="commands"];
"workflows.loader" [label="loader"];
"workflows.pause_state" [label="pause_state"];
"workflows.runner" [label="runner"];
"workflows.runner_ops" [label="runner_ops"];
"workflows.schema" [label="schema"];
"workflows.step_runner" [label="step_runner"];
"workflows.validate" [label="validate"];
"workflows.workflow_run_snapshot" [label="workflow_run_snapshot"];
"workflows.workflow_run_snapshot_ops" [label="workflow_run_snapshot_ops"];
}
subgraph cluster_L3_Core {
label="L3-Core";
style=filled;
fillcolor="#fcbad3";
nodesep=0.3;
ranksep=0.5;
"core.agent_loop" [label="agent_loop"];
"core.agent_loop.loop" [label="loop"];
"core.agent_loop.loop_conversation" [label="loop_conversation"];
"core.agent_loop.loop_helpers" [label="loop_helpers"];
"core.agent_loop.phases" [label="phases"];
"core.agent_loop.phases.compaction_phase" [label="compaction_phase"];
"core.agent_loop.phases.dispatch_phase" [label="dispatch_phase"];
"core.agent_loop.phases.finalize_phase" [label="finalize_phase"];
"core.agent_loop.phases.init_phase" [label="init_phase"];
"core.agent_loop.phases.llm_phase" [label="llm_phase"];
"core.agent_loop.phases.state" [label="state"];
"core.agent_loop.phases.user_text_phase" [label="user_text_phase"];
"core.agent_loop_ops" [label="agent_loop_ops"];
"core.agent_loop_phases" [label="agent_loop_phases"];
"core.agents_md_sections" [label="agents_md_sections"];
"core.agents_md_sections_ops" [label="agents_md_sections_ops"];
"core.auto_continue" [label="auto_continue"];
"core.auto_review" [label="auto_review"];
"core.auto_review_ops" [label="auto_review_ops"];
"core.batch_sequence_guard" [label="batch_sequence_guard"];
"core.batch_sequence_guard_ops" [label="batch_sequence_guard_ops"];
"core.best_effort" [label="best_effort"];
"core.cache_safe_delegate" [label="cache_safe_delegate"];
"core.circular_dependency_detector" [label="circular_dependency_detector"];
"core.compaction_checkpoint" [label="compaction_checkpoint"];
"core.compaction_checkpoint_ops" [label="compaction_checkpoint_ops"];
"core.compaction_context_adapter" [label="compaction_context_adapter"];
"core.compaction_context_adapter_ops" [label="compaction_context_adapter_ops"];
"core.compaction_phase" [label="compaction_phase"];
"core.compaction_prompt" [label="compaction_prompt"];
"core.compaction_status" [label="compaction_status"];
"core.compaction_status_ops" [label="compaction_status_ops"];
"core.compaction_steer_bridge" [label="compaction_steer_bridge"];
"core.compaction_steer_bridge_ops" [label="compaction_steer_bridge_ops"];
"core.compaction_task" [label="compaction_task"];
"core.compaction_task_ops" [label="compaction_task_ops"];
"core.confirm_flags" [label="confirm_flags"];
"core.container" [label="container"];
"core.context_budget" [label="context_budget"];
"core.context_budget_ops" [label="context_budget_ops"];
"core.context_compress_hooks" [label="context_compress_hooks"];
"core.context_compress_pipeline" [label="context_compress_pipeline"];
"core.context_compress_support" [label="context_compress_support"];
"core.context_compressor" [label="context_compressor"];
"core.context_pipeline" [label="context_pipeline"];
"core.context_pipeline_ops" [label="context_pipeline_ops"];
"core.context_transform_registry" [label="context_transform_registry"];
"core.context_transform_registry_ops" [label="context_transform_registry_ops"];
"core.conversation_state" [label="conversation_state"];
"core.correction_intent" [label="correction_intent"];
"core.correction_intent_ops" [label="correction_intent_ops"];
"core.delegate_context" [label="delegate_context"];
"core.delegate_semaphore" [label="delegate_semaphore"];
"core.design_md_sections" [label="design_md_sections"];
"core.design_md_sections_ops" [label="design_md_sections_ops"];
"core.dev_context_adapter" [label="dev_context_adapter"];
"core.dev_context_adapter_ops" [label="dev_context_adapter_ops"];
"core.dev_state_context_adapter" [label="dev_state_context_adapter"];
"core.dev_state_context_adapter_ops" [label="dev_state_context_adapter_ops"];
"core.effects.combinators" [label="combinators"];
"core.effects.race" [label="race"];
"core.effects.result" [label="result"];
"core.effects.tool_failure" [label="tool_failure"];
"core.event_store" [label="event_store"];
"core.event_store_events" [label="event_store_events"];
"core.events.event_bus" [label="event_bus"];
"core.events.event_consumer" [label="event_consumer"];
"core.events.event_handlers" [label="event_handlers"];
"core.events.event_store" [label="event_store"];
"core.events.event_store_protocol" [label="event_store_protocol"];
"core.events.event_types" [label="event_types"];
"core.events.session_events" [label="session_events"];
"core.events_sink" [label="events_sink"];
"core.events_sink_ops" [label="events_sink_ops"];
"core.evidence_extract" [label="evidence_extract"];
"core.exp_cache" [label="exp_cache"];
"core.exp_cache_ops" [label="exp_cache_ops"];
"core.fact_extraction" [label="fact_extraction"];
"core.fact_extraction_ops" [label="fact_extraction_ops"];
"core.finish_tool_truncate" [label="finish_tool_truncate"];
"core.goal_loop" [label="goal_loop"];
"core.goal_loop_ops" [label="goal_loop_ops"];
"core.harness_flags" [label="harness_flags"];
"core.hashline" [label="hashline"];
"core.hook_context_adapter" [label="hook_context_adapter"];
"core.hook_context_adapter_ops" [label="hook_context_adapter_ops"];
"core.hygiene_preflight" [label="hygiene_preflight"];
"core.hygiene_preflight_ops" [label="hygiene_preflight_ops"];
"core.inline_tool_compress" [label="inline_tool_compress"];
"core.input_stage" [label="input_stage"];
"core.instruction_walkup" [label="instruction_walkup"];
"core.instruction_walkup_ops" [label="instruction_walkup_ops"];
"core.intent_keywords" [label="intent_keywords"];
"core.io_guardrail" [label="io_guardrail"];
"core.learning_graph" [label="learning_graph"];
"core.llm_retry" [label="llm_retry"];
"core.llm_retry_errors" [label="llm_retry_errors"];
"core.llm_retry_helpers" [label="llm_retry_helpers"];
"core.llm_retry_invoke" [label="llm_retry_invoke"];
"core.llm_retry_invoke_ops" [label="llm_retry_invoke_ops"];
"core.llm_retry_ops" [label="llm_retry_ops"];
"core.llm_retry_outcomes" [label="llm_retry_outcomes"];
"core.llm_retry_safe" [label="llm_retry_safe"];
"core.llm_retry_success" [label="llm_retry_success"];
"core.loop_budget_nudge" [label="loop_budget_nudge"];
"core.loop_callbacks_merge" [label="loop_callbacks_merge"];
"core.loop_middleware" [label="loop_middleware"];
"core.loop_middleware_ops" [label="loop_middleware_ops"];
"core.loop_plugins" [label="loop_plugins"];
"core.loop_plugins_ops" [label="loop_plugins_ops"];
"core.loop_response" [label="loop_response"];
"core.loop_types" [label="loop_types"];
"core.memory_context_adapter" [label="memory_context_adapter"];
"core.memory_context_adapter_ops" [label="memory_context_adapter_ops"];
"core.memory_manager" [label="memory_manager"];
"core.memory_recap_line" [label="memory_recap_line"];
"core.message_context_adapter" [label="message_context_adapter"];
"core.message_context_adapter_ops" [label="message_context_adapter_ops"];
"core.message_ir" [label="message_ir"];
"core.message_repair" [label="message_repair"];
"core.meta_flags" [label="meta_flags"];
"core.metrics_sink" [label="metrics_sink"];
"core.metrics_sink_ops" [label="metrics_sink_ops"];
"core.mode_classifier" [label="mode_classifier"];
"core.mode_classifier_ops" [label="mode_classifier_ops"];
"core.model_context" [label="model_context"];
"core.model_context_ops" [label="model_context_ops"];
"core.output_grounding" [label="output_grounding"];
"core.output_grounding_ops" [label="output_grounding_ops"];
"core.output_schema_registry" [label="output_schema_registry"];
"core.parallel_tools" [label="parallel_tools"];
"core.parallel_tools_ops" [label="parallel_tools_ops"];
"core.pim_state" [label="pim_state"];
"core.pim_state_ops" [label="pim_state_ops"];
"core.plan_reason_graph" [label="plan_reason_graph"];
"core.post_commit" [label="post_commit"];
"core.post_commit_ops" [label="post_commit_ops"];
"core.post_compact_cleanup" [label="post_compact_cleanup"];
"core.post_compact_cleanup_ops" [label="post_compact_cleanup_ops"];
"core.post_edit_format" [label="post_edit_format"];
"core.preemptive_compact" [label="preemptive_compact"];
"core.preemptive_compact_ops" [label="preemptive_compact_ops"];
"core.preread_context" [label="preread_context"];
"core.preread_context_ops" [label="preread_context_ops"];
"core.prompt_renderer" [label="prompt_renderer"];
"core.prompt_renderer_ops" [label="prompt_renderer_ops"];
"core.reactive_compact" [label="reactive_compact"];
"core.reactive_compact_ops" [label="reactive_compact_ops"];
"core.read_file_partial" [label="read_file_partial"];
"core.read_state" [label="read_state"];
"core.reasoning_trace" [label="reasoning_trace"];
"core.reasoning_trace_ops" [label="reasoning_trace_ops"];
"core.reflection_closure" [label="reflection_closure"];
"core.reflection_closure_ops" [label="reflection_closure_ops"];
"core.reflexion_ephemeral" [label="reflexion_ephemeral"];
"core.reflexion_ephemeral_ops" [label="reflexion_ephemeral_ops"];
"core.reflexion_write" [label="reflexion_write"];
"core.reflexion_write_ops" [label="reflexion_write_ops"];
"core.remote_compact" [label="remote_compact"];
"core.remote_compact_ops" [label="remote_compact_ops"];
"core.research_simplicity" [label="research_simplicity"];
"core.retry_policy" [label="retry_policy"];
"core.review_context_adapter" [label="review_context_adapter"];
"core.review_context_adapter_ops" [label="review_context_adapter_ops"];
"core.rules_engine" [label="rules_engine"];
"core.safety_finish" [label="safety_finish"];
"core.schema_optimizer" [label="schema_optimizer"];
"core.schema_optimizer_ops" [label="schema_optimizer_ops"];
"core.schema_recovery" [label="schema_recovery"];
"core.schema_recovery_ops" [label="schema_recovery_ops"];
"core.session_epoch" [label="session_epoch"];
"core.session_epoch_ops" [label="session_epoch_ops"];
"core.session_hydration" [label="session_hydration"];
"core.session_hydration_ops" [label="session_hydration_ops"];
"core.session_recall_intent" [label="session_recall_intent"];
"core.session_todos" [label="session_todos"];
"core.session_todos_ops" [label="session_todos_ops"];
"core.session_tool_index" [label="session_tool_index"];
"core.session_tool_index_ops" [label="session_tool_index_ops"];
"core.session_transcript" [label="session_transcript"];
"core.session_transcript_ops" [label="session_transcript_ops"];
"core.skill_compact_rescue" [label="skill_compact_rescue"];
"core.skill_tool_bridge" [label="skill_tool_bridge"];
"core.skill_tool_bridge_ops" [label="skill_tool_bridge_ops"];
"core.steer" [label="steer"];
"core.steer_ops" [label="steer_ops"];
"core.streaming_tools" [label="streaming_tools"];
"core.streaming_tools_ops" [label="streaming_tools_ops"];
"core.structured_events" [label="structured_events"];
"core.system_reminder" [label="system_reminder"];
"core.system_reminder_ops" [label="system_reminder_ops"];
"core.task_route_hints" [label="task_route_hints"];
"core.task_route_hints_ops" [label="task_route_hints_ops"];
"core.text_truncate" [label="text_truncate"];
"core.todo_continuation" [label="todo_continuation"];
"core.todo_continuation_ops" [label="todo_continuation_ops"];
"core.tool_batch" [label="tool_batch"];
"core.tool_batch_finalize" [label="tool_batch_finalize"];
"core.tool_batch_finalize_ops" [label="tool_batch_finalize_ops"];
"core.tool_batch_hooks" [label="tool_batch_hooks"];
"core.tool_batch_post_edit" [label="tool_batch_post_edit"];
"core.tool_batch_runner" [label="tool_batch_runner"];
"core.tool_batch_runner_ops" [label="tool_batch_runner_ops"];
"core.tool_call_limits" [label="tool_call_limits"];
"core.tool_call_normalize" [label="tool_call_normalize"];
"core.tool_dispatch" [label="tool_dispatch"];
"core.tool_dispatch_doom" [label="tool_dispatch_doom"];
"core.tool_dispatch_doom_ops" [label="tool_dispatch_doom_ops"];
"core.tool_dispatch_ops" [label="tool_dispatch_ops"];
"core.tool_error_policy" [label="tool_error_policy"];
"core.tool_error_policy_ops" [label="tool_error_policy_ops"];
"core.tool_event_emitter" [label="tool_event_emitter"];
"core.tool_executor" [label="tool_executor"];
"core.tool_failure_bridge" [label="tool_failure_bridge"];
"core.tool_loop_detect" [label="tool_loop_detect"];
"core.tool_narrative" [label="tool_narrative"];
"core.tool_narrative_ops" [label="tool_narrative_ops"];
"core.tool_orchestrator" [label="tool_orchestrator"];
"core.tool_orchestrator_ops" [label="tool_orchestrator_ops"];
"core.tool_output_masking" [label="tool_output_masking"];
"core.tool_output_prune" [label="tool_output_prune"];
"core.tool_pair_repair" [label="tool_pair_repair"];
"core.tool_pair_repair_ops" [label="tool_pair_repair_ops"];
"core.tool_prune_policy" [label="tool_prune_policy"];
"core.tool_recall_bm25" [label="tool_recall_bm25"];
"core.tool_result_cache" [label="tool_result_cache"];
"core.tool_result_storage" [label="tool_result_storage"];
"core.tool_retry" [label="tool_retry"];
"core.tool_retry_ops" [label="tool_retry_ops"];
"core.tool_selector" [label="tool_selector"];
"core.tool_selector_ops" [label="tool_selector_ops"];
"core.transcript_export" [label="transcript_export"];
"core.transcript_export_ops" [label="transcript_export_ops"];
"core.transcript_fork" [label="transcript_fork"];
"core.transcript_fts" [label="transcript_fts"];
"core.transcript_index" [label="transcript_index"];
"core.transcript_revert" [label="transcript_revert"];
"core.transcript_search" [label="transcript_search"];
"core.transcript_search_ops" [label="transcript_search_ops"];
"core.transform_feedback" [label="transform_feedback"];
"core.transform_overrides" [label="transform_overrides"];
"core.turn_compaction" [label="turn_compaction"];
"core.turn_summary_line" [label="turn_summary_line"];
"core.turn_summary_line_ops" [label="turn_summary_line_ops"];
"core.turn_token_budget" [label="turn_token_budget"];
"core.two_phase_confirm" [label="two_phase_confirm"];
"core.two_phase_confirm_ops" [label="two_phase_confirm_ops"];
"core.workflow_flags" [label="workflow_flags"];
}
subgraph cluster_L4_Tools {
label="L4-Tools";
style=filled;
fillcolor="#ffffd2";
nodesep=0.3;
ranksep=0.5;
"dev_engine" [label="dev_engine"];
"dev_engine.b9_delegate_gate" [label="b9_delegate_gate"];
"dev_engine.b9_delegate_gate_ops" [label="b9_delegate_gate_ops"];
"dev_engine.b9_experience_retrieval" [label="b9_experience_retrieval"];
"dev_engine.b9_experience_retrieval_ops" [label="b9_experience_retrieval_ops"];
"dev_engine.b9_live_fixed_tasks" [label="b9_live_fixed_tasks"];
"dev_engine.b9_live_tuning" [label="b9_live_tuning"];
"dev_engine.b9_live_tuning_ops" [label="b9_live_tuning_ops"];
"dev_engine.b9_oracle_curriculum" [label="b9_oracle_curriculum"];
"dev_engine.b9_oracle_fewshot" [label="b9_oracle_fewshot"];
"dev_engine.b9_prod_shaped_tasks" [label="b9_prod_shaped_tasks"];
"dev_engine.b9_task_fixtures" [label="b9_task_fixtures"];
"dev_engine.b9_tiers" [label="b9_tiers"];
"dev_engine.b9_verify_utils" [label="b9_verify_utils"];
"dev_engine.code_search" [label="code_search"];
"dev_engine.code_search_ops" [label="code_search_ops"];
"dev_engine.coding_knowledge" [label="coding_knowledge"];
"dev_engine.coding_knowledge.context" [label="context"];
"dev_engine.coding_knowledge.experience" [label="experience"];
"dev_engine.coding_knowledge.generation" [label="generation"];
"dev_engine.coding_knowledge.theorems" [label="theorems"];
"dev_engine.coding_knowledge.verification" [label="verification"];
"dev_engine.coding_knowledge_benchmark" [label="coding_knowledge_benchmark"];
"dev_engine.coding_knowledge_fixup" [label="coding_knowledge_fixup"];
"dev_engine.coding_knowledge_fixup_ops" [label="coding_knowledge_fixup_ops"];
"dev_engine.coding_knowledge_ops" [label="coding_knowledge_ops"];
"dev_engine.delegate_finalize" [label="delegate_finalize"];
"dev_engine.delegate_finalize_ops" [label="delegate_finalize_ops"];
"dev_engine.delegate_init" [label="delegate_init"];
"dev_engine.delegate_init_ops" [label="delegate_init_ops"];
"dev_engine.delegate_workspace" [label="delegate_workspace"];
"dev_engine.delegate_workspace_ops" [label="delegate_workspace_ops"];
"dev_engine.dev_benchmark" [label="dev_benchmark"];
"dev_engine.dev_context" [label="dev_context"];
"dev_engine.dev_context_ops" [label="dev_context_ops"];
"dev_engine.dev_loop" [label="dev_loop"];
"dev_engine.dev_loop_ops" [label="dev_loop_ops"];
"dev_engine.dev_metrics" [label="dev_metrics"];
"dev_engine.dev_tools" [label="dev_tools"];
"dev_engine.dev_tools_ops" [label="dev_tools_ops"];
"dev_engine.diagnostics" [label="diagnostics"];
"dev_engine.edit_ops" [label="edit_ops"];
"dev_engine.fix_strategy" [label="fix_strategy"];
"dev_engine.gentc_mutation" [label="gentc_mutation"];
"dev_engine.llm_delegate_benchmark" [label="llm_delegate_benchmark"];
"dev_engine.llm_delegate_benchmark_ops" [label="llm_delegate_benchmark_ops"];
"dev_engine.loop_plugin" [label="loop_plugin"];
"dev_engine.loop_plugin_ops" [label="loop_plugin_ops"];
"dev_engine.optimize_advisory" [label="optimize_advisory"];
"dev_engine.prod_delegate_bridge" [label="prod_delegate_bridge"];
"dev_engine.prod_delegate_bridge_ops" [label="prod_delegate_bridge_ops"];
"dev_engine.prod_playbook_seeds" [label="prod_playbook_seeds"];
"dev_engine.review_closure" [label="review_closure"];
"dev_engine.review_closure_ops" [label="review_closure_ops"];
"dev_engine.review_knowledge" [label="review_knowledge"];
"dev_engine.review_static" [label="review_static"];
"dev_engine.swebench_lite" [label="swebench_lite"];
"dev_engine.swebench_lite.queries" [label="queries"];
"dev_engine.theorem_library" [label="theorem_library"];
"dev_engine.verify" [label="verify"];
"dev_engine.verify_ops" [label="verify_ops"];
"mcp" [label="mcp"];
"mcp.approval" [label="approval"];
"mcp.async_runner" [label="async_runner"];
"mcp.async_runner_ops" [label="async_runner_ops"];
"mcp.bridge" [label="bridge"];
"mcp.client_http" [label="client_http"];
"mcp.client_http_ops" [label="client_http_ops"];
"mcp.client_stdio" [label="client_stdio"];
"mcp.client_stdio_ops" [label="client_stdio_ops"];
"mcp.config" [label="config"];
"mcp.config_ops" [label="config_ops"];
"mcp.deferred" [label="deferred"];
"mcp.deferred_ops" [label="deferred_ops"];
"mcp.diagnostics" [label="diagnostics"];
"mcp.extension_grounding" [label="extension_grounding"];
"mcp.extension_manifest" [label="extension_manifest"];
"mcp.extension_manifest_ops" [label="extension_manifest_ops"];
"mcp.extension_verify" [label="extension_verify"];
"mcp.extension_verify_ops" [label="extension_verify_ops"];
"mcp.github_grounding" [label="github_grounding"];
"mcp.github_tool_aliases" [label="github_tool_aliases"];
"mcp.github_tool_aliases_ops" [label="github_tool_aliases_ops"];
"mcp.manager" [label="manager"];
"mcp.manager_ops" [label="manager_ops"];
"mcp.naming" [label="naming"];
"mcp.outbound_grounding_gate" [label="outbound_grounding_gate"];
"mcp.profiles" [label="profiles"];
"mcp.profiles_ops" [label="profiles_ops"];
"mcp.registry_hook" [label="registry_hook"];
"mcp.registry_hook_ops" [label="registry_hook_ops"];
"mcp.server_stdio" [label="server_stdio"];
"mcp.todoist_grounding" [label="todoist_grounding"];
"mcp.todoist_tool_aliases" [label="todoist_tool_aliases"];
"mcp.todoist_tool_aliases_ops" [label="todoist_tool_aliases_ops"];
"mcp.tools_engine" [label="tools_engine"];
"mcp.tools_engine_ops" [label="tools_engine_ops"];
"mcp.tools_manifest" [label="tools_manifest"];
"mcp.tools_manifest_ops" [label="tools_manifest_ops"];
"mcp.turn_scrape_dedup" [label="turn_scrape_dedup"];
"mcp.turn_scrape_dedup_ops" [label="turn_scrape_dedup_ops"];
"skills" [label="skills"];
"skills.experience_pointers" [label="experience_pointers"];
"skills.fusion_wiring" [label="fusion_wiring"];
"skills.fusion_wiring_ops" [label="fusion_wiring_ops"];
"skills.injection_policy" [label="injection_policy"];
"skills.learn" [label="learn"];
"skills.learn_ops" [label="learn_ops"];
"skills.manager" [label="manager"];
"skills.manager.manager" [label="manager"];
"skills.manager_ops" [label="manager_ops"];
"skills.router" [label="router"];
"skills.router_ops" [label="router_ops"];
"skills.seed_bundled" [label="seed_bundled"];
"skills.similarity" [label="similarity"];
"skills.similarity_ops" [label="similarity_ops"];
"skills.write_approval" [label="write_approval"];
"skills.write_approval_ops" [label="write_approval_ops"];
"tools.audit_persist" [label="audit_persist"];
"tools.audit_persist_ops" [label="audit_persist_ops"];
"tools.builtin_impl" [label="builtin_impl"];
"tools.builtin_impl_ops" [label="builtin_impl_ops"];
"tools.builtin_register" [label="builtin_register"];
"tools.builtin_register_ops" [label="builtin_register_ops"];
"tools.butlerignore" [label="butlerignore"];
"tools.butlerignore_ops" [label="butlerignore_ops"];
"tools.config_tools" [label="config_tools"];
"tools.contacts" [label="contacts"];
"tools.conversation_state_tools" [label="conversation_state_tools"];
"tools.data_query" [label="data_query"];
"tools.data_query_ops" [label="data_query_ops"];
"tools.delegate_impl" [label="delegate_impl"];
"tools.delegate_orchestrator" [label="delegate_orchestrator"];
"tools.delegate_phases" [label="delegate_phases"];
"tools.delegate_prepare" [label="delegate_prepare"];
"tools.delegate_prepare_ops" [label="delegate_prepare_ops"];
"tools.delegate_record" [label="delegate_record"];
"tools.delegate_record_ops" [label="delegate_record_ops"];
"tools.delegate_report" [label="delegate_report"];
"tools.delegate_report_ops" [label="delegate_report_ops"];
"tools.delegate_role_guard" [label="delegate_role_guard"];
"tools.delegate_role_guard_ops" [label="delegate_role_guard_ops"];
"tools.delegate_run" [label="delegate_run"];
"tools.delegate_run_ops" [label="delegate_run_ops"];
"tools.delegate_subagent" [label="delegate_subagent"];
"tools.delegate_subagent_ops" [label="delegate_subagent_ops"];
"tools.delegate_summary_budget" [label="delegate_summary_budget"];
"tools.delegate_yield_tools" [label="delegate_yield_tools"];
"tools.delegate_yield_tools_ops" [label="delegate_yield_tools_ops"];
"tools.document_reader" [label="document_reader"];
"tools.download_tools" [label="download_tools"];
"tools.execute_code" [label="execute_code"];
"tools.execute_code_ops" [label="execute_code_ops"];
"tools.expense" [label="expense"];
"tools.experience_selector" [label="experience_selector"];
"tools.file_io" [label="file_io"];
"tools.file_io_ops" [label="file_io_ops"];
"tools.git_tools" [label="git_tools"];
"tools.habits" [label="habits"];
"tools.interrupt" [label="interrupt"];
"tools.knowledge_search" [label="knowledge_search"];
"tools.knowledge_search_ops" [label="knowledge_search_ops"];
"tools.mcp_self_service" [label="mcp_self_service"];
"tools.mcp_self_service_ops" [label="mcp_self_service_ops"];
"tools.memo" [label="memo"];
"tools.memory_tools" [label="memory_tools"];
"tools.memory_tools_ops" [label="memory_tools_ops"];
"tools.multimodal_tools" [label="multimodal_tools"];
"tools.network_route_verify" [label="network_route_verify"];
"tools.network_route_verify_ops" [label="network_route_verify_ops"];
"tools.network_search_policy" [label="network_search_policy"];
"tools.network_search_policy_ops" [label="network_search_policy_ops"];
"tools.orthogonality_lint" [label="orthogonality_lint"];
"tools.orthogonality_lint_ops" [label="orthogonality_lint_ops"];
"tools.path_safety" [label="path_safety"];
"tools.path_safety_ops" [label="path_safety_ops"];
"tools.project_todos" [label="project_todos"];
"tools.project_todos_ops" [label="project_todos_ops"];
"tools.project_tools" [label="project_tools"];
"tools.project_tools_ops" [label="project_tools_ops"];
"tools.registry_gates" [label="registry_gates"];
"tools.registry_invoke_ops" [label="registry_invoke_ops"];
"tools.registry_tools" [label="registry_tools"];
"tools.registry_tools_ops" [label="registry_tools_ops"];
"tools.reminder" [label="reminder"];
"tools.runtime_tools" [label="runtime_tools"];
"tools.runtime_tools_ops" [label="runtime_tools_ops"];
"tools.safe_root" [label="safe_root"];
"tools.session_todos_tools" [label="session_todos_tools"];
"tools.session_todos_tools_ops" [label="session_todos_tools_ops"];
"tools.tenant_store" [label="tenant_store"];
"tools.tenant_store_ops" [label="tenant_store_ops"];
"tools.terminal_approval" [label="terminal_approval"];
"tools.terminal_approval_ops" [label="terminal_approval_ops"];
"tools.terminal_danger" [label="terminal_danger"];
"tools.terminal_danger_ops" [label="terminal_danger_ops"];
"tools.terminal_impl" [label="terminal_impl"];
"tools.terminal_impl_ops" [label="terminal_impl_ops"];
"tools.terminal_pattern_approval" [label="terminal_pattern_approval"];
"tools.terminal_pattern_approval_ops" [label="terminal_pattern_approval_ops"];
"tools.terminal_sandbox" [label="terminal_sandbox"];
"tools.tool_audit" [label="tool_audit"];
"tools.tool_audit_ops" [label="tool_audit_ops"];
"tools.tool_discovery" [label="tool_discovery"];
"tools.tool_implicit_context" [label="tool_implicit_context"];
"tools.tool_implicit_context_ops" [label="tool_implicit_context_ops"];
"tools.tool_schemas" [label="tool_schemas"];
"tools.tool_scope" [label="tool_scope"];
"tools.tool_service" [label="tool_service"];
"tools.tool_taxonomy" [label="tool_taxonomy"];
"tools.tool_validation" [label="tool_validation"];
"tools.toolset_profiles" [label="toolset_profiles"];
"tools.web_fetch" [label="web_fetch"];
"tools.web_fetch_ops" [label="web_fetch_ops"];
"tools.web_search" [label="web_search"];
"tools.web_search_probe" [label="web_search_probe"];
"tools.workflow_tools" [label="workflow_tools"];
}
subgraph cluster_L5_Memory {
label="L5-Memory";
style=filled;
fillcolor="#a8e6cf";
nodesep=0.3;
ranksep=0.5;
"configuration.memory" [label="memory"];
"memory" [label="memory"];
"memory.butler_memory" [label="butler_memory"];
"memory.butler_memory.core" [label="core"];
"memory.butler_memory.experience_store" [label="experience_store"];
"memory.butler_memory.profile_store" [label="profile_store"];
"memory.butler_memory_ops" [label="butler_memory_ops"];
"memory.chunking" [label="chunking"];
"memory.chunking_ops" [label="chunking_ops"];
"memory.coding_recall" [label="coding_recall"];
"memory.conversation_store" [label="conversation_store"];
"memory.corpus_router" [label="corpus_router"];
"memory.corpus_router_ops" [label="corpus_router_ops"];
"memory.corrective_recall" [label="corrective_recall"];
"memory.corrective_recall_ops" [label="corrective_recall_ops"];
"memory.diagnostics" [label="diagnostics"];
"memory.diagnostics_collect" [label="diagnostics_collect"];
"memory.document_ingest" [label="document_ingest"];
"memory.embedding" [label="embedding"];
"memory.embedding_ops" [label="embedding_ops"];
"memory.experience" [label="experience"];
"memory.experience.classifier" [label="classifier"];
"memory.experience.domain_router" [label="domain_router"];
"memory.experience.retriever" [label="retriever"];
"memory.experience.store" [label="store"];
"memory.experience.tree" [label="tree"];
"memory.experience.writer" [label="writer"];
"memory.experience_consolidation" [label="experience_consolidation"];
"memory.experience_consolidation_ops" [label="experience_consolidation_ops"];
"memory.experience_mining" [label="experience_mining"];
"memory.experience_mining_cli" [label="experience_mining_cli"];
"memory.experience_mining_ops" [label="experience_mining_ops"];
"memory.facade" [label="facade"];
"memory.facade_ops" [label="facade_ops"];
"memory.hybrid_retriever" [label="hybrid_retriever"];
"memory.injection_guard" [label="injection_guard"];
"memory.injection_llm_score" [label="injection_llm_score"];
"memory.injection_llm_score_ops" [label="injection_llm_score_ops"];
"memory.knowledge_graph" [label="knowledge_graph"];
"memory.knowledge_warehouse" [label="knowledge_warehouse"];
"memory.knowledge_warehouse.digestion" [label="digestion"];
"memory.knowledge_warehouse.ingestor" [label="ingestor"];
"memory.knowledge_warehouse.rebuild_all" [label="rebuild_all"];
"memory.memory_benchmark" [label="memory_benchmark"];
"memory.memory_benchmark_ops" [label="memory_benchmark_ops"];
"memory.memory_caps" [label="memory_caps"];
"memory.memory_metrics" [label="memory_metrics"];
"memory.memory_scope" [label="memory_scope"];
"memory.metrics_persist" [label="metrics_persist"];
"memory.metrics_persist_ops" [label="metrics_persist_ops"];
"memory.observation_migrate" [label="observation_migrate"];
"memory.observation_recall" [label="observation_recall"];
"memory.observation_store" [label="observation_store"];
"memory.observer_queue" [label="observer_queue"];
"memory.observer_queue_ops" [label="observer_queue_ops"];
"memory.owner_experience_seed" [label="owner_experience_seed"];
"memory.owner_experience_seed_ops" [label="owner_experience_seed_ops"];
"memory.owner_write_pending" [label="owner_write_pending"];
"memory.pending_cli" [label="pending_cli"];
"memory.pending_command_ops" [label="pending_command_ops"];
"memory.pending_handlers" [label="pending_handlers"];
"memory.prefetch_cache" [label="prefetch_cache"];
"memory.prefetch_retrieval_metrics" [label="prefetch_retrieval_metrics"];
"memory.prefetch_retrieval_metrics_ops" [label="prefetch_retrieval_metrics_ops"];
"memory.private_tags" [label="private_tags"];
"memory.project_memory" [label="project_memory"];
"memory.project_memory.classifiers" [label="classifiers"];
"memory.project_memory.facts_store" [label="facts_store"];
"memory.project_memory.project_memory" [label="project_memory"];
"memory.project_memory_ops" [label="project_memory_ops"];
"memory.query_decompose" [label="query_decompose"];
"memory.recall_layers" [label="recall_layers"];
"memory.recall_layers_ops" [label="recall_layers_ops"];
"memory.recall_ops" [label="recall_ops"];
"memory.recall_router" [label="recall_router"];
"memory.reindex" [label="reindex"];
"memory.reindex_ops" [label="reindex_ops"];
"memory.retrieval_ranking" [label="retrieval_ranking"];
"memory.retrieval_ranking_ops" [label="retrieval_ranking_ops"];
"memory.retrieval_telemetry" [label="retrieval_telemetry"];
"memory.retrieval_telemetry_ops" [label="retrieval_telemetry_ops"];
"memory.scope_diagnostics" [label="scope_diagnostics"];
"memory.scope_diagnostics_ops" [label="scope_diagnostics_ops"];
"memory.search_cli" [label="search_cli"];
"memory.search_result" [label="search_result"];
"memory.search_result_ops" [label="search_result_ops"];
"memory.semantic_config" [label="semantic_config"];
"memory.semantic_health" [label="semantic_health"];
"memory.semantic_health_ops" [label="semantic_health_ops"];
"memory.semantic_index" [label="semantic_index"];
"memory.semantic_index_ops" [label="semantic_index_ops"];
"memory.semantic_project" [label="semantic_project"];
"memory.semantic_project_ops" [label="semantic_project_ops"];
"memory.transcript_memory_pipeline" [label="transcript_memory_pipeline"];
"memory.transcript_memory_pipeline_ops" [label="transcript_memory_pipeline_ops"];
"memory.transcript_recall" [label="transcript_recall"];
"memory.unified_recall" [label="unified_recall"];
"memory.unified_recall_config" [label="unified_recall_config"];
"memory.vector_gc" [label="vector_gc"];
"memory.vector_store" [label="vector_store"];
}
subgraph cluster_L6_Transport {
label="L6-Transport";
style=filled;
fillcolor="#ffd3b6";
nodesep=0.3;
ranksep=0.5;
"transport" [label="transport"];
"transport.anthropic_transport" [label="anthropic_transport"];
"transport.auxiliary_client" [label="auxiliary_client"];
"transport.auxiliary_client_ops" [label="auxiliary_client_ops"];
"transport.base" [label="base"];
"transport.cache_control" [label="cache_control"];
"transport.chat_completions" [label="chat_completions"];
"transport.fallback" [label="fallback"];
"transport.fusion_client" [label="fusion_client"];
"transport.fusion_client_ops" [label="fusion_client_ops"];
"transport.interruptible_client" [label="interruptible_client"];
"transport.llm_client" [label="llm_client"];
"transport.llm_client_ops" [label="llm_client_ops"];
"transport.memory_context_scrubber" [label="memory_context_scrubber"];
"transport.provider_health" [label="provider_health"];
"transport.providers" [label="providers"];
"transport.reasoning_replay" [label="reasoning_replay"];
"transport.reasoning_replay_ops" [label="reasoning_replay_ops"];
"transport.stream_probe" [label="stream_probe"];
"transport.stream_probe_ops" [label="stream_probe_ops"];
"transport.streaming_signal" [label="streaming_signal"];
"transport.streaming_signal_ops" [label="streaming_signal_ops"];
"transport.thinking_headers" [label="thinking_headers"];
"transport.thinking_protocol" [label="thinking_protocol"];
"transport.tool_wire" [label="tool_wire"];
"transport.tool_wire_ops" [label="tool_wire_ops"];
"transport.types" [label="types"];
"transport.usage_normalize" [label="usage_normalize"];
}
subgraph cluster_L7_Permissions {
label="L7-Permissions";
style=filled;
fillcolor="#ffaaa5";
nodesep=0.3;
ranksep=0.5;
"human_gate" [label="human_gate"];
"permissions" [label="permissions"];
"permissions.approvals" [label="approvals"];
"permissions.doom_loop" [label="doom_loop"];
"permissions.doom_loop_ops" [label="doom_loop_ops"];
"permissions.human_gate" [label="human_gate"];
"permissions.human_gate_ops" [label="human_gate_ops"];
"permissions.rules" [label="rules"];
"permissions.rules_context" [label="rules_context"];
"permissions.rules_fail_closed" [label="rules_fail_closed"];
"permissions.rules_fail_closed_ops" [label="rules_fail_closed_ops"];
"permissions.tool_boundary_registry" [label="tool_boundary_registry"];
}
subgraph cluster_L8_Resilience {
label="L8-Resilience";
style=filled;
fillcolor="#dcedc1";
nodesep=0.3;
ranksep=0.5;
"resilience.durable_outbox" [label="durable_outbox"];
"resilience.inbound_idempotency" [label="inbound_idempotency"];
"resilience.inbound_idempotency_ops" [label="inbound_idempotency_ops"];
"resilience.message_queue" [label="message_queue"];
"resilience.message_queue_ops" [label="message_queue_ops"];
}
subgraph cluster_L9_Ops {
label="L9-Ops";
style=filled;
fillcolor="#ffdac1";
nodesep=0.3;
ranksep=0.5;
"eval_integration" [label="eval_integration"];
"eval_integration.manager" [label="manager"];
"eval_integration.manager_ops" [label="manager_ops"];
"eval_integration.oss.deepeval_runner" [label="deepeval_runner"];
"eval_integration.oss.prefetch_audit_loader" [label="prefetch_audit_loader"];
"eval_integration.oss.ragas_runner" [label="ragas_runner"];
"eval_integration.report_schema" [label="report_schema"];
"eval_integration.sinks.audit_sink" [label="audit_sink"];
"eval_integration.sinks.deepeval_sink" [label="deepeval_sink"];
"eval_integration.sinks.junit_sink" [label="junit_sink"];
"eval_integration.sinks.langfuse_sink" [label="langfuse_sink"];
"eval_integration.sinks.langfuse_sink_ops" [label="langfuse_sink_ops"];
"eval_integration.sinks.ragas_sink" [label="ragas_sink"];
"eval_integration.suite_registry" [label="suite_registry"];
"eval_integration.suites.agent_weekly_suite" [label="agent_weekly_suite"];
"eval_integration.suites.b9_oracle_suite" [label="b9_oracle_suite"];
"eval_integration.suites.capability_suite" [label="capability_suite"];
"eval_integration.suites.deepeval_suite" [label="deepeval_suite"];
"eval_integration.suites.hermes_gate_suite" [label="hermes_gate_suite"];
"eval_integration.suites.memory_mb_suite" [label="memory_mb_suite"];
"eval_integration.suites.ragas_suite" [label="ragas_suite"];
"eval_integration.suites.regression_suite" [label="regression_suite"];
"eval_integration.suites.tcr_suite" [label="tcr_suite"];
"eval_integration.suites.wechat_corpus_suite" [label="wechat_corpus_suite"];
"eval_integration.suites_ops" [label="suites_ops"];
"ops" [label="ops"];
"ops.approval_diagnostics_ops" [label="approval_diagnostics_ops"];
"ops.assistant_health" [label="assistant_health"];
"ops.assistant_health_ops" [label="assistant_health_ops"];
"ops.b9_failure_analysis" [label="b9_failure_analysis"];
"ops.b9_harness_audit" [label="b9_harness_audit"];
"ops.b9_harness_audit_ops" [label="b9_harness_audit_ops"];
"ops.b9_lessons" [label="b9_lessons"];
"ops.b9_lessons_ops" [label="b9_lessons_ops"];
"ops.b9_prod_weekly" [label="b9_prod_weekly"];
"ops.b9_prod_weekly_ops" [label="b9_prod_weekly_ops"];
"ops.boundary_observability" [label="boundary_observability"];
"ops.boundary_observability_ops" [label="boundary_observability_ops"];
"ops.butler_inbox" [label="butler_inbox"];
"ops.butler_inbox_ops" [label="butler_inbox_ops"];
"ops.compaction_audit" [label="compaction_audit"];
"ops.compaction_audit_ops" [label="compaction_audit_ops"];
"ops.cost_calibration" [label="cost_calibration"];
"ops.cost_calibration_cli" [label="cost_calibration_cli"];
"ops.cost_tracker" [label="cost_tracker"];
"ops.cost_tracker_ops" [label="cost_tracker_ops"];
"ops.degradation_registry" [label="degradation_registry"];
"ops.degradation_registry_ops" [label="degradation_registry_ops"];
"ops.delegate_failure_b9_import" [label="delegate_failure_b9_import"];
"ops.delegate_failure_b9_promote" [label="delegate_failure_b9_promote"];
"ops.delegate_failure_b9_promote_ops" [label="delegate_failure_b9_promote_ops"];
"ops.delegate_failure_capture" [label="delegate_failure_capture"];
"ops.delegate_failure_capture_ops" [label="delegate_failure_capture_ops"];
"ops.delegate_judge" [label="delegate_judge"];
"ops.delegate_judge_ops" [label="delegate_judge_ops"];
"ops.deploy_profile" [label="deploy_profile"];
"ops.dev_eval" [label="dev_eval"];
"ops.dual_playbook_probe" [label="dual_playbook_probe"];
"ops.embedding_diagnostics" [label="embedding_diagnostics"];
"ops.embedding_diagnostics_ops" [label="embedding_diagnostics_ops"];
"ops.embedding_health" [label="embedding_health"];
"ops.env_profiles" [label="env_profiles"];
"ops.eval_actions" [label="eval_actions"];
"ops.eval_actions_ops" [label="eval_actions_ops"];
"ops.eval_bridge" [label="eval_bridge"];
"ops.eval_bridge_ops" [label="eval_bridge_ops"];
"ops.eval_config_overrides" [label="eval_config_overrides"];
"ops.eval_diagnostics" [label="eval_diagnostics"];
"ops.eval_diagnostics_ops" [label="eval_diagnostics_ops"];
"ops.eval_experiment" [label="eval_experiment"];
"ops.eval_experiment_ops" [label="eval_experiment_ops"];
"ops.eval_feedback" [label="eval_feedback"];
"ops.eval_feedback_ops" [label="eval_feedback_ops"];
"ops.eval_regression" [label="eval_regression"];
"ops.eval_regression_ops" [label="eval_regression_ops"];
"ops.eval_scoring" [label="eval_scoring"];
"ops.eval_turn" [label="eval_turn"];
"ops.eval_turn_ops" [label="eval_turn_ops"];
"ops.execution_surface_collect" [label="execution_surface_collect"];
"ops.execution_surface_diagnostics" [label="execution_surface_diagnostics"];
"ops.experience_selection_telemetry" [label="experience_selection_telemetry"];
"ops.experience_selection_telemetry_ops" [label="experience_selection_telemetry_ops"];
"ops.experiment_diagnostics" [label="experiment_diagnostics"];
"ops.experiment_diagnostics_ops" [label="experiment_diagnostics_ops"];
"ops.g1_04_prod_evidence" [label="g1_04_prod_evidence"];
"ops.g1_04_prod_evidence_ops" [label="g1_04_prod_evidence_ops"];
"ops.harness_diagnostics" [label="harness_diagnostics"];
"ops.harness_diagnostics_ops" [label="harness_diagnostics_ops"];
"ops.head_to_head" [label="head_to_head"];
"ops.head_to_head_common" [label="head_to_head_common"];
"ops.head_to_head_common_ops" [label="head_to_head_common_ops"];
"ops.head_to_head_t1" [label="head_to_head_t1"];
"ops.health_report" [label="health_report"];
"ops.health_report_input" [label="health_report_input"];
"ops.health_report_turn" [label="health_report_turn"];
"ops.langfuse_tracer" [label="langfuse_tracer"];
"ops.lingwen1_capture_probe" [label="lingwen1_capture_probe"];
"ops.lingwen1_delegate_drill" [label="lingwen1_delegate_drill"];
"ops.lingwen1_failure_seed" [label="lingwen1_failure_seed"];
"ops.lingwen1_prod_sample" [label="lingwen1_prod_sample"];
"ops.memory_eval" [label="memory_eval"];
"ops.memory_eval_ops" [label="memory_eval_ops"];
"ops.memory_recall_diagnostics_ops" [label="memory_recall_diagnostics_ops"];
"ops.morning_brief_push" [label="morning_brief_push"];
"ops.observation_diagnostics" [label="observation_diagnostics"];
"ops.observation_diagnostics_ops" [label="observation_diagnostics_ops"];
"ops.onboard" [label="onboard"];
"ops.onboard_ops" [label="onboard_ops"];
"ops.openclaw_diagnostics" [label="openclaw_diagnostics"];
"ops.openclaw_diagnostics_ops" [label="openclaw_diagnostics_ops"];
"ops.owner_brief_blocks" [label="owner_brief_blocks"];
"ops.owner_brief_blocks_ops" [label="owner_brief_blocks_ops"];
"ops.owner_feedback" [label="owner_feedback"];
"ops.owner_feedback_ops" [label="owner_feedback_ops"];
"ops.owner_pmf_metrics" [label="owner_pmf_metrics"];
"ops.owner_pmf_metrics_ops" [label="owner_pmf_metrics_ops"];
"ops.owner_quality_surface" [label="owner_quality_surface"];
"ops.owner_quality_surface_ops" [label="owner_quality_surface_ops"];
"ops.owner_trust_surface" [label="owner_trust_surface"];
"ops.owner_trust_surface_ops" [label="owner_trust_surface_ops"];
"ops.prod_experience_effectiveness" [label="prod_experience_effectiveness"];
"ops.production_failure_experience" [label="production_failure_experience"];
"ops.production_failure_experience_ops" [label="production_failure_experience_ops"];
"ops.rag_diagnostics" [label="rag_diagnostics"];
"ops.rag_diagnostics_ops" [label="rag_diagnostics_ops"];
"ops.registry_diagnostics" [label="registry_diagnostics"];
"ops.registry_diagnostics_ops" [label="registry_diagnostics_ops"];
"ops.retry_buckets" [label="retry_buckets"];
"ops.retry_buckets_ops" [label="retry_buckets_ops"];
"ops.runtime_metrics_sink" [label="runtime_metrics_sink"];
"ops.secrets_contract" [label="secrets_contract"];
"ops.secrets_contract_cli" [label="secrets_contract_cli"];
"ops.secrets_contract_ops" [label="secrets_contract_ops"];
"ops.security_audit" [label="security_audit"];
"ops.security_audit_ops" [label="security_audit_ops"];
"ops.snapshot" [label="snapshot"];
"ops.snapshot_ops" [label="snapshot_ops"];
"ops.stack_diagnostics" [label="stack_diagnostics"];
"ops.stack_diagnostics_ops" [label="stack_diagnostics_ops"];
"ops.swebench_entry_gate" [label="swebench_entry_gate"];
"ops.swebench_live_eval" [label="swebench_live_eval"];
"ops.tcr_strict_readiness" [label="tcr_strict_readiness"];
"ops.terminal_sandbox_diagnostics" [label="terminal_sandbox_diagnostics"];
"ops.terminal_sandbox_diagnostics_ops" [label="terminal_sandbox_diagnostics_ops"];
"ops.token_cost_diagnostics" [label="token_cost_diagnostics"];
"ops.tool_routing" [label="tool_routing"];
"ops.tool_routing_ops" [label="tool_routing_ops"];
"ops.transcript_diagnostics" [label="transcript_diagnostics"];
"ops.usage_ledger" [label="usage_ledger"];
"ops.wechat_corpus_eval" [label="wechat_corpus_eval"];
"ops.wechat_corpus_eval_ops" [label="wechat_corpus_eval_ops"];
"ops.wechat_dataset" [label="wechat_dataset"];
}
subgraph cluster_Other {
label="Other";
style=filled;
fillcolor="#cccccc";
nodesep=0.3;
ranksep=0.5;
"agent_profiles" [label="agent_profiles"];
"agent_profiles_ops" [label="agent_profiles_ops"];
"agents_md" [label="agents_md"];
"agents_md_ops" [label="agents_md_ops"];
"blackboard.audit" [label="audit"];
"blackboard.handoff" [label="handoff"];
"blackboard.integrations.claude_session_end" [label="claude_session_end"];
"blackboard.shift_io" [label="shift_io"];
"blackboard.snapshot" [label="snapshot"];
"blackboard.state_io" [label="state_io"];
"blackboard.sync" [label="sync"];
"blackboard.task_io" [label="task_io"];
"blackboard.validator" [label="validator"];
"butler_init_ops" [label="butler_init_ops"];
"config" [label="config"];
"config_ops" [label="config_ops"];
"config_secrets" [label="config_secrets"];
"config_secrets_crypto" [label="config_secrets_crypto"];
"config_secrets_crypto_ops" [label="config_secrets_crypto_ops"];
"config_secrets_ops" [label="config_secrets_ops"];
"config_service" [label="config_service"];
"context_settings" [label="context_settings"];
"context_settings_ops" [label="context_settings_ops"];
"dag_scheduler" [label="dag_scheduler"];
"env_parse" [label="env_parse"];
"execpolicy" [label="execpolicy"];
"execpolicy.engine" [label="engine"];
"execpolicy.engine_ops" [label="engine_ops"];
"execution_context" [label="execution_context"];
"experiments" [label="experiments"];
"experiments.crash_guard" [label="crash_guard"];
"experiments.git_utils" [label="git_utils"];
"experiments.ledger" [label="ledger"];
"experiments.ledger_ops" [label="ledger_ops"];
"experiments.mode" [label="mode"];
"experiments.outcomes" [label="outcomes"];
"extensions.opencode" [label="opencode"];
"extensions.opencode_ops" [label="opencode_ops"];
"gate_reply_templates" [label="gate_reply_templates"];
"gateway_settings" [label="gateway_settings"];
"gateway_settings_ops" [label="gateway_settings_ops"];
"hooks" [label="hooks"];
"hooks.loader" [label="loader"];
"hooks.loader_ops" [label="loader_ops"];
"hooks.runner" [label="runner"];
"hooks.runner_ops" [label="runner_ops"];
"hooks.telemetry" [label="telemetry"];
"hooks.telemetry_ops" [label="telemetry_ops"];
"human_gate_ops" [label="human_gate_ops"];
"logging_config" [label="logging_config"];
"main" [label="main"];
"memory_plugin" [label="memory_plugin"];
"memory_settings" [label="memory_settings"];
"memory_settings_ops" [label="memory_settings_ops"];
"model_resolve" [label="model_resolve"];
"model_resolve_ops" [label="model_resolve_ops"];
"plan.markdown_sync" [label="markdown_sync"];
"plan.markdown_sync_ops" [label="markdown_sync_ops"];
"plan.mode" [label="mode"];
"plan.mode_ops" [label="mode_ops"];
"plan.store" [label="store"];
"prompt_eval" [label="prompt_eval"];
"prompt_eval.corpus_bridge" [label="corpus_bridge"];
"prompt_eval.llm_rubric" [label="llm_rubric"];
"prompt_eval.llm_rubric_ops" [label="llm_rubric_ops"];
"prompt_eval.runner" [label="runner"];
"provider_presets" [label="provider_presets"];
"provider_presets_ops" [label="provider_presets_ops"];
"repo_paths" [label="repo_paths"];
"report" [label="report"];
"report.acceptance_card" [label="acceptance_card"];
"report.format" [label="format"];
"report.format_ops" [label="format_ops"];
"report.generator" [label="generator"];
"report.generator_ops" [label="generator_ops"];
"report.generator_schema" [label="generator_schema"];
"report.store" [label="store"];
"session" [label="session"];
"session.lifecycle" [label="lifecycle"];
"session.lifecycle_manager" [label="lifecycle_manager"];
"session.lifecycle_ops" [label="lifecycle_ops"];
"session.memory_prefetch" [label="memory_prefetch"];
"session.memory_prefetch_ops" [label="memory_prefetch_ops"];
"session.new_session" [label="new_session"];
"session.new_session_ops" [label="new_session_ops"];
"session.post_session" [label="post_session"];
"session.post_session_extract_ops" [label="post_session_extract_ops"];
"session.post_session_guard" [label="post_session_guard"];
"session.post_session_layered" [label="post_session_layered"];
"session.post_session_layered_ops" [label="post_session_layered_ops"];
"session.post_session_ops" [label="post_session_ops"];
"session.session_monitor" [label="session_monitor"];
"session.session_resume" [label="session_resume"];
"task_orchestrator" [label="task_orchestrator"];
"task_orchestrator_ops" [label="task_orchestrator_ops"];
"tenant" [label="tenant"];
"tool_guardrails" [label="tool_guardrails"];
"tool_guardrails_ops" [label="tool_guardrails_ops"];
"workflow_step_runner" [label="workflow_step_runner"];
"workflow_step_runner_ops" [label="workflow_step_runner_ops"];
}
"agent_profiles" -> "butler.agent_profiles_ops" [color="gray60", style="solid"];
"agent_profiles_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"agent_profiles_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"agents_md" -> "butler.agents_md_ops" [color="gray60", style="solid"];
"agents_md_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"blackboard.audit" -> "butler.blackboard.shift_io" [color="gray60", style="solid"];
"blackboard.audit" -> "butler.blackboard.task_io" [color="gray60", style="solid"];
"blackboard.handoff" -> "butler.blackboard" [color="gray60", style="solid"];
"blackboard.handoff" -> "butler.blackboard.shift_io" [color="gray60", style="solid"];
"blackboard.integrations.claude_session_end" -> "butler.blackboard" [color="gray60", style="solid"];
"blackboard.shift_io" -> "butler.blackboard" [color="gray60", style="solid"];
"blackboard.shift_io" -> "butler.blackboard.errors" [color="gray60", style="solid"];
"blackboard.shift_io" -> "butler.blackboard.schema" [color="gray60", style="solid"];
"blackboard.shift_io" -> "butler.blackboard.validator" [color="gray60", style="solid"];
"blackboard.snapshot" -> "butler.blackboard.shift_io" [color="gray60", style="solid"];
"blackboard.snapshot" -> "butler.blackboard.task_io" [color="gray60", style="solid"];
"blackboard.state_io" -> "butler.blackboard" [color="gray60", style="solid"];
"blackboard.sync" -> "butler.blackboard.schema" [color="gray60", style="solid"];
"blackboard.sync" -> "butler.blackboard.task_io" [color="gray60", style="solid"];
"blackboard.task_io" -> "butler.blackboard" [color="gray60", style="solid"];
"blackboard.task_io" -> "butler.blackboard.schema" [color="gray60", style="solid"];
"blackboard.validator" -> "butler.blackboard.errors" [color="gray60", style="solid"];
"blackboard.validator" -> "butler.blackboard.schema" [color="gray60", style="solid"];
"butler_init_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"cli" -> "butler.cli.session_ui" [color="gray60", style="solid"];
"cli.architecture_cli" -> "butler.core.circular_dependency_detector" [color="gray60", style="solid"];
"cli.blackboard_cli" -> "butler.blackboard" [color="gray60", style="solid"];
"cli.blackboard_cli" -> "butler.blackboard.audit" [color="gray60", style="solid"];
"cli.blackboard_cli" -> "butler.blackboard.handoff" [color="gray60", style="solid"];
"cli.blackboard_cli" -> "butler.blackboard.paths" [color="gray60", style="solid"];
"cli.blackboard_cli" -> "butler.blackboard.shift_io" [color="gray60", style="solid"];
"cli.blackboard_cli" -> "butler.blackboard.snapshot" [color="gray60", style="solid"];
"cli.blackboard_cli" -> "butler.blackboard.sync" [color="gray60", style="solid"];
"cli.blackboard_cli" -> "butler.blackboard.validator" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.cli.chat_cli_ops" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.cli.session_ui" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.cli.slash_commands" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.cli.slash_dispatch" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.cli.stream" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.core.loop_types" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.execution_context" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.gateway.hooks" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.hooks.runner" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.orchestrator" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.project.lead" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.session.keys" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.session.lifecycle" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.tools.project_tools" [color="gray60", style="solid"];
"cli.chat_cli" -> "butler.tools.registry" [color="gray60", style="solid"];
"cli.cost_cli" -> "butler.ops.cost_calibration_cli" [color="gray60", style="solid"];
"cli.doctor" -> "butler.cli.doctor_sections" [color="gray60", style="solid"];
"cli.doctor" -> "butler.ops.security_audit" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.configuration.secrets" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.configuration.settings" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.core.best_effort" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.core.transform_overrides" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.gateway.media_diagnostic_ops" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.memory.vector_store" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.model_resolve" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.approval_diagnostics_ops" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.boundary_observability" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.deploy_profile" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.embedding_diagnostics" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.embedding_health" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.execution_surface_diagnostics" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.memory_recall_diagnostics_ops" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.stack_diagnostics" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.terminal_sandbox_diagnostics" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.ops.transcript_diagnostics" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.tools.path_safety" [color="gray60", style="solid"];
"cli.doctor_sections" -> "butler.utilities.tenant" [color="gray60", style="solid"];
"cli.eval_cli" -> "butler.eval_integration.manager" [color="gray60", style="solid"];
"cli.eval_cli" -> "butler.eval_integration.presets" [color="gray60", style="solid"];
"cli.events_cli" -> "butler.core.events.event_consumer" [color="gray60", style="solid"];
"cli.experiment_cli" -> "butler.experiments.git_utils" [color="gray60", style="solid"];
"cli.experiment_cli" -> "butler.experiments.ledger" [color="gray60", style="solid"];
"cli.experiment_cli" -> "butler.experiments.outcomes" [color="gray60", style="solid"];
"cli.experiment_cli" -> "butler.project.manager" [color="gray60", style="solid"];
"cli.gateway_cli" -> "butler.configuration.settings" [color="gray60", style="solid"];
"cli.gateway_cli" -> "butler.gateway.platform_policy" [color="gray60", style="solid"];
"cli.gateway_cli" -> "butler.gateway.platforms.wechat" [color="gray60", style="solid"];
"cli.gateway_cli" -> "butler.gateway.runner" [color="gray60", style="solid"];
"cli.gateway_cli" -> "butler.utilities.repo_paths" [color="gray60", style="solid"];
"cli.mcp_catalog_cli" -> "butler.registry.install_scan" [color="gray60", style="solid"];
"cli.mcp_catalog_cli" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"];
"cli.mcp_catalog_cli" -> "butler.registry.mcp_install" [color="gray60", style="solid"];
"cli.mcp_catalog_cli" -> "butler.registry.mcp_merge" [color="gray60", style="solid"];
"cli.mcp_catalog_cli" -> "butler.registry.mcp_ssot" [color="gray60", style="solid"];
"cli.mcp_cli" -> "butler.cli.mcp_catalog_cli" [color="gray60", style="solid"];
"cli.mcp_cli" -> "butler.mcp.server_stdio" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.cli.memory_cli_ops" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.configuration.settings" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.document_ingest" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.experience_consolidation" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.observation_migrate" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.owner_experience_seed" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.pending_cli" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.reindex" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.scope_diagnostics" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.search_cli" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.memory.vector_gc" [color="gray60", style="solid"];
"cli.memory_cli" -> "butler.ops.observation_diagnostics" [color="gray60", style="solid"];
"cli.memory_cli_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"cli.memory_cli_ops" -> "butler.project.manager" [color="gray60", style="solid"];
"cli.onboard_cli" -> "butler.ops.onboard" [color="gray60", style="solid"];
"cli.projects_cli" -> "butler.configuration.settings" [color="gray60", style="solid"];
"cli.projects_cli" -> "butler.project.archetypes" [color="gray60", style="solid"];
"cli.projects_cli" -> "butler.project.manager" [color="gray60", style="solid"];
"cli.projects_cli" -> "butler.project.preflight" [color="gray60", style="solid"];
"cli.prompt_eval_cli" -> "butler.prompt_eval.corpus_bridge" [color="gray60", style="solid"];
"cli.prompt_eval_cli" -> "butler.prompt_eval.runner" [color="gray60", style="solid"];
"cli.provider_presets_cli" -> "butler.configuration.provider_presets" [color="gray60", style="solid"];
"cli.provider_presets_cli" -> "butler.project" [color="gray60", style="solid"];
"cli.registry_cli" -> "butler.registry.hub_manifest" [color="gray60", style="solid"];
"cli.runtime_cli" -> "butler.runtime.notify" [color="gray60", style="solid"];
"cli.runtime_cli" -> "butler.runtime.push_queue" [color="gray60", style="solid"];
"cli.runtime_cli" -> "butler.runtime.service" [color="gray60", style="solid"];
"cli.secrets_cli" -> "butler.configuration.secrets" [color="gray60", style="solid"];
"cli.session_ui" -> "butler.cli.display" [color="gray60", style="solid"];
"cli.session_ui" -> "butler.cli.spinner" [color="gray60", style="solid"];
"cli.session_ui" -> "butler.cli.stream" [color="gray60", style="solid"];
"cli.session_ui" -> "butler.core.loop_types" [color="gray60", style="solid"];
"cli.session_ui" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"cli.session_ui" -> "butler.report" [color="gray60", style="solid"];
"cli.session_ui" -> "butler.transport.error_classifier" [color="gray60", style="solid"];
"cli.sessions_cli" -> "butler.configuration.settings" [color="gray60", style="solid"];
"cli.sessions_cli" -> "butler.session.post_session_layered" [color="gray60", style="solid"];
"cli.sessions_cli" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.cli.skills_registry_ops" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.configuration.settings" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.registry.skill_service" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.registry.skills_project_sync" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.registry.skills_ssot" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.skills.learn" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.skills.lint" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.skills.manager" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.skills.write_approval" [color="gray60", style="solid"];
"cli.skills_registry" -> "butler.utilities.tenant" [color="gray60", style="solid"];
"cli.skills_registry_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
"cli.skills_registry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"cli.skills_registry_ops" -> "butler.registry.registry_errors" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.cli.slash_dispatch_ops" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.core.steer" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.execution_context" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.gateway.commands.memory_handlers" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.model_resolve" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.orchestrator" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.plan.mode" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.project.lead" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.report" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.report.format" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.runtime.task_store" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.session.keys" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.session.lifecycle" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.session.new_session" [color="gray60", style="solid"];
"cli.slash_dispatch" -> "butler.workflows.commands" [color="gray60", style="solid"];
"cli.slash_dispatch_ops" -> "butler.report" [color="gray60", style="solid"];
"cli.stream" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"cli.stream" -> "butler.transport.content_sanitize" [color="gray60", style="solid"];
"cli.transcript_cli" -> "butler.core.transcript_fts" [color="gray60", style="solid"];
"cli.workflow_cli" -> "butler.project.manager" [color="gray60", style="solid"];
"cli.workflow_cli" -> "butler.workflows.validate" [color="gray60", style="solid"];
"config" -> "butler.configuration.settings" [color="gray60", style="solid"];
"config_ops" -> "butler.configuration.settings_ops" [color="gray60", style="solid"];
"config_secrets" -> "butler.configuration.secrets" [color="gray60", style="solid"];
"config_secrets_crypto" -> "butler.configuration.secrets_crypto" [color="gray60", style="solid"];
"config_secrets_crypto_ops" -> "butler.configuration.secrets_crypto_ops" [color="gray60", style="solid"];
"config_secrets_ops" -> "butler.configuration.secrets_ops" [color="gray60", style="solid"];
"config_service" -> "butler.configuration.service" [color="gray60", style="solid"];
"configuration.context" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"configuration.context" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"configuration.context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"configuration.gateway" -> "butler.configuration.settings" [color="gray60", style="solid"];
"configuration.gateway" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"configuration.gateway" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
"configuration.gateway" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"configuration.gateway_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"configuration.memory" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"configuration.memory" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"configuration.memory_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"configuration.provider_presets" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
"configuration.provider_presets" -> "butler.model_resolve" [color="gray60", style="solid"];
"configuration.provider_presets" -> "butler.project" [color="gray60", style="solid"];
"configuration.provider_presets_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"configuration.secrets" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"configuration.secrets_crypto" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"configuration.secrets_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"configuration.service" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"configuration.settings" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"configuration.settings" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
"configuration.settings" -> "butler.model_resolve" [color="gray60", style="solid"];
"configuration.settings" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"configuration.settings_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"context_settings" -> "butler.configuration.context" [color="gray60", style="solid"];
"context_settings_ops" -> "butler.configuration.context" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.approval_store_impl" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.bridge_access" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.compaction_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.context_transform_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.dev_context_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.dev_state_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.events" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.gateway_registry" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.hook_context_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.memory_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.message_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.owner_gate" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.sink_registry" [color="gray60", style="solid"];
"contracts" -> "butler.contracts.workflow_gate_impl" [color="gray60", style="solid"];
"contracts.approval_registry" -> "butler.contracts.approval_ports" [color="gray60", style="solid"];
"contracts.approval_store_impl" -> "butler.contracts.approval_registry" [color="gray60", style="solid"];
"contracts.approval_store_impl" -> "butler.permissions.approvals" [color="gray60", style="solid"];
"contracts.completion_registry" -> "butler.contracts.completion_ports" [color="gray60", style="solid"];
"contracts.gateway_registry" -> "butler.contracts.bridge_access" [color="gray60", style="solid"];
"contracts.gateway_registry" -> "butler.contracts.owner_gate" [color="gray60", style="solid"];
"contracts.health_diagnostic_ports" -> "butler.contracts.health_report_input" [color="gray60", style="solid"];
"contracts.health_diagnostic_registry" -> "butler.contracts.health_diagnostic_ports" [color="gray60", style="solid"];
"contracts.inbound_idempotency_registry" -> "butler.contracts.inbound_idempotency_ports" [color="gray60", style="solid"];
"contracts.sink_registry" -> "butler.contracts.events" [color="gray60", style="solid"];
"contracts.tool_dispatch_ports" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"contracts.tool_dispatch_registry" -> "butler.contracts.tool_dispatch_ports" [color="gray60", style="solid"];
"contracts.tool_registry_registry" -> "butler.contracts.tool_registry_ports" [color="gray60", style="solid"];
"contracts.workflow_gate_impl" -> "butler.contracts.workflow_gate_registry" [color="gray60", style="solid"];
"contracts.workflow_gate_impl" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
"contracts.workflow_gate_registry" -> "butler.contracts.workflow_gate_impl" [color="gray60", style="solid"];
"contracts.workflow_gate_registry" -> "butler.contracts.workflow_gate_ports" [color="gray60", style="solid"];
"core.agent_loop" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"core.agent_loop" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
"core.agent_loop" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.agent_loop.loop_conversation" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.agent_loop_ops" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.context_pipeline" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.interrupt" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.loop_callbacks_merge" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.loop_plugins" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.core.steer" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.execution_context" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.mcp.turn_scrape_dedup" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.tools.network_search_policy" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.transport.base" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.transport.fallback" [color="gray60", style="solid"];
"core.agent_loop.loop" -> "butler.transport.llm_client" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.core.conversation_state" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.core.delegate_context" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.core.steer" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.core.tool_call_limits" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.core.turn_summarizer" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.memory.experience.retriever" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.memory.experience.writer" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
"core.agent_loop.loop_conversation" -> "butler.tools.conversation_state_tools" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.core.agent_loop_ops" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.core.events.event_store" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.core.interrupt" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.core.llm_retry" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.core.tool_batch" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.execution_context" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.tools.network_search_policy" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.tools.tool_service" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.transport.fallback" [color="gray60", style="solid"];
"core.agent_loop.loop_helpers" -> "butler.transport.types" [color="gray60", style="solid"];
"core.agent_loop.phases" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
"core.agent_loop.phases.compaction_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"core.agent_loop.phases.compaction_phase" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
"core.agent_loop.phases.compaction_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.phases.compaction_phase" -> "butler.core.compaction_steer_bridge" [color="gray60", style="solid"];
"core.agent_loop.phases.compaction_phase" -> "butler.core.compaction_task" [color="gray60", style="solid"];
"core.agent_loop.phases.compaction_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.loop_response" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.loop_stuck" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.output_grounding" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.reasoning_trace" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.core.turn_token_budget" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.mcp.github_grounding" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.mcp.outbound_grounding_gate" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.mcp.todoist_grounding" [color="gray60", style="solid"];
"core.agent_loop.phases.dispatch_phase" -> "butler.transport.types" [color="gray60", style="solid"];
"core.agent_loop.phases.finalize_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"core.agent_loop.phases.finalize_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.phases.finalize_phase" -> "butler.core.hook_context_adapter" [color="gray60", style="solid"];
"core.agent_loop.phases.finalize_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.agent_loop.phases.finalize_phase" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.agent_loop.phases.finalize_phase" -> "butler.hooks.runner" [color="gray60", style="solid"];
"core.agent_loop.phases.finalize_phase" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.agent_loop.phases.init_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"core.agent_loop.phases.init_phase" -> "butler.core.agent_loop.loop_conversation" [color="gray60", style="solid"];
"core.agent_loop.phases.init_phase" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
"core.agent_loop.phases.init_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.phases.init_phase" -> "butler.core.turn_token_budget" [color="gray60", style="solid"];
"core.agent_loop.phases.init_phase" -> "butler.ops.eval_actions" [color="gray60", style="solid"];
"core.agent_loop.phases.init_phase" -> "butler.ops.eval_feedback" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.core.context_budget" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.core.loop_budget_nudge" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.execution_context" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.ops.cost_tracker" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.transport.types" [color="gray60", style="solid"];
"core.agent_loop.phases.llm_phase" -> "butler.transport.usage_normalize" [color="gray60", style="solid"];
"core.agent_loop.phases.state" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.agent_loop.phases.state" -> "butler.execution_context" [color="gray60", style="solid"];
"core.agent_loop.phases.state" -> "butler.transport.reasoning_replay" [color="gray60", style="solid"];
"core.agent_loop.phases.state" -> "butler.transport.types" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.core.harness_flags" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.core.message_sanitize" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.core.skill_tool_bridge" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.core.system_reminder" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.core.tool_selector" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.mcp.deferred" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.agent_loop.phases.user_text_phase" -> "butler.tools.tool_service" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.core.context_transform_registry" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.core.reflexion_ephemeral" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.hooks.runner" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.permissions.doom_loop" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.transport.fallback" [color="gray60", style="solid"];
"core.agent_loop_ops" -> "butler.transport.provider_health" [color="gray60", style="solid"];
"core.agent_loop_phases" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
"core.agents_md_sections" -> "butler.core.agents_md_sections_ops" [color="gray60", style="solid"];
"core.agents_md_sections" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.agents_md_sections" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.agents_md_sections_ops" -> "butler.core.design_md_sections_ops" [color="gray60", style="solid"];
"core.auto_continue" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"];
"core.auto_continue" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.auto_continue" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.auto_review" -> "butler.core.auto_review_ops" [color="gray60", style="solid"];
"core.auto_review" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.auto_review" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.auto_review_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.auto_review_ops" -> "butler.tools.terminal_sandbox" [color="gray60", style="solid"];
"core.auto_review_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
"core.batch_sequence_guard" -> "butler.core.batch_sequence_guard_ops" [color="gray60", style="solid"];
"core.batch_sequence_guard" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.batch_sequence_guard" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.batch_sequence_guard_ops" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
"core.batch_sequence_guard_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.batch_sequence_guard_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
"core.best_effort" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.cache_safe_delegate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.circular_dependency_detector" -> "butler.utilities.repo_paths" [color="gray60", style="solid"];
"core.compaction_checkpoint" -> "butler.core.compaction_checkpoint_ops" [color="gray60", style="solid"];
"core.compaction_checkpoint_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.compaction_checkpoint_ops" -> "butler.core.compaction_context_adapter" [color="gray60", style="solid"];
"core.compaction_checkpoint_ops" -> "butler.core.session_todos" [color="gray60", style="solid"];
"core.compaction_context_adapter" -> "butler.contracts.compaction_ports" [color="gray60", style="solid"];
"core.compaction_context_adapter" -> "butler.core.compaction_context_adapter_ops" [color="gray60", style="solid"];
"core.compaction_context_adapter" -> "butler.core.hook_context_adapter" [color="gray60", style="solid"];
"core.compaction_context_adapter_ops" -> "butler.contracts.compaction_ports" [color="gray60", style="solid"];
"core.compaction_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.compaction_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
"core.compaction_phase" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.compaction_prompt" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.compaction_prompt" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.compaction_status" -> "butler.core.compaction_status_ops" [color="gray60", style="solid"];
"core.compaction_status_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.compaction_status_ops" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"];
"core.compaction_status_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"core.compaction_steer_bridge" -> "butler.core.compaction_steer_bridge_ops" [color="gray60", style="solid"];
"core.compaction_steer_bridge" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.compaction_steer_bridge" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.compaction_steer_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.compaction_steer_bridge_ops" -> "butler.core.events_sink" [color="gray60", style="solid"];
"core.compaction_steer_bridge_ops" -> "butler.core.steer" [color="gray60", style="solid"];
"core.compaction_task" -> "butler.core.compaction_phase" [color="gray60", style="solid"];
"core.compaction_task" -> "butler.core.compaction_task_ops" [color="gray60", style="solid"];
"core.compaction_task" -> "butler.core.context_budget" [color="gray60", style="solid"];
"core.compaction_task" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.compaction_task" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.compaction_task_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.compaction_task_ops" -> "butler.core.compaction_context_adapter" [color="gray60", style="solid"];
"core.compaction_task_ops" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.compaction_task_ops" -> "butler.core.events_sink" [color="gray60", style="solid"];
"core.compaction_task_ops" -> "butler.core.hook_context_adapter" [color="gray60", style="solid"];
"core.compaction_task_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.compaction_task_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.compaction_task_ops" -> "butler.hooks.runner" [color="gray60", style="solid"];
"core.confirm_flags" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.confirm_flags" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.container" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.container" -> "butler.contracts.events" [color="gray60", style="solid"];
"core.container" -> "butler.core.effects.result" [color="gray60", style="solid"];
"core.container" -> "butler.core.event_store" [color="gray60", style="solid"];
"core.container" -> "butler.memory.conversation_store" [color="gray60", style="solid"];
"core.container" -> "butler.memory.experience.store" [color="gray60", style="solid"];
"core.container" -> "butler.memory.hybrid_retriever" [color="gray60", style="solid"];
"core.container" -> "butler.memory.knowledge_graph" [color="gray60", style="solid"];
"core.container" -> "butler.memory.memory_metrics" [color="gray60", style="solid"];
"core.container" -> "butler.project.manager" [color="gray60", style="solid"];
"core.container" -> "butler.session.session_monitor" [color="gray60", style="solid"];
"core.context_budget" -> "butler.configuration.context" [color="gray60", style="solid"];
"core.context_budget" -> "butler.core.context_budget_ops" [color="gray60", style="solid"];
"core.context_budget" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.context_budget_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.context_budget_ops" -> "butler.ops.usage_ledger" [color="gray60", style="solid"];
"core.context_compress_hooks" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.context_compress_hooks" -> "butler.core.compaction_phase" [color="gray60", style="solid"];
"core.context_compress_hooks" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.context_compress_hooks" -> "butler.core.evidence_extract" [color="gray60", style="solid"];
"core.context_compress_hooks" -> "butler.core.fact_extraction" [color="gray60", style="solid"];
"core.context_compress_hooks" -> "butler.core.skill_compact_rescue" [color="gray60", style="solid"];
"core.context_compress_hooks" -> "butler.core.turn_compaction" [color="gray60", style="solid"];
"core.context_compress_pipeline" -> "butler.core.context_compress_hooks" [color="gray60", style="solid"];
"core.context_compress_pipeline" -> "butler.core.context_compress_support" [color="gray60", style="solid"];
"core.context_compress_pipeline" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.context_compress_pipeline" -> "butler.core.turn_compaction" [color="gray60", style="solid"];
"core.context_compress_pipeline" -> "butler.execution_context" [color="gray60", style="solid"];
"core.context_compress_support" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.context_compress_support" -> "butler.core.events_sink" [color="gray60", style="solid"];
"core.context_compress_support" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.context_compress_support" -> "butler.core.turn_compaction" [color="gray60", style="solid"];
"core.context_compress_support" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.core.compaction_cutoff" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.core.compaction_prompt" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.core.context_compress_pipeline" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.core.context_compress_support" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.core.remote_compact" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.core.tool_prune_policy" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.context_compressor" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.compaction_context_adapter" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.context_pipeline_ops" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.hygiene_preflight" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.message_repair" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.message_sanitize" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.pipeline_steps" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.post_compact_cleanup" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.session_todos" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.tool_output_prune" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.tool_pair_repair" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
"core.context_pipeline" -> "butler.execution_context" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.core.compaction_phase" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.core.context_transform_registry" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.core.inline_tool_compress" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.core.message_context_adapter" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.core.preemptive_compact" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.core.tool_output_masking" [color="gray60", style="solid"];
"core.context_pipeline_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.context_transform_registry" -> "butler.agent_profiles" [color="gray60", style="solid"];
"core.context_transform_registry" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.context_transform_registry" -> "butler.contracts.context_transform_ports" [color="gray60", style="solid"];
"core.context_transform_registry" -> "butler.core.context_transform_registry_ops" [color="gray60", style="solid"];
"core.context_transform_registry" -> "butler.core.transform_overrides" [color="gray60", style="solid"];
"core.context_transform_registry" -> "butler.transport.thinking_protocol" [color="gray60", style="solid"];
"core.context_transform_registry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.context_transform_registry_ops" -> "butler.transport.model_context" [color="gray60", style="solid"];
"core.conversation_state" -> "butler.core.turn_context" [color="gray60", style="solid"];
"core.conversation_state" -> "butler.memory.hybrid_retriever" [color="gray60", style="solid"];
"core.conversation_state" -> "butler.memory.knowledge_graph" [color="gray60", style="solid"];
"core.conversation_state" -> "butler.memory.semantic_memory" [color="gray60", style="solid"];
"core.conversation_state" -> "butler.memory.triplets" [color="gray60", style="solid"];
"core.correction_intent" -> "butler.core.correction_intent_ops" [color="gray60", style="solid"];
"core.correction_intent_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.correction_intent_ops" -> "butler.tools.memory_tools" [color="gray60", style="solid"];
"core.delegate_context" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.delegate_semaphore" -> "butler.core.effects.result" [color="gray60", style="solid"];
"core.delegate_semaphore" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.delegate_semaphore" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.design_md_sections" -> "butler.core.design_md_sections_ops" [color="gray60", style="solid"];
"core.design_md_sections" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.design_md_sections" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.design_md_sections_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.design_md_sections_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.dev_context_adapter" -> "butler.contracts.dev_context_ports" [color="gray60", style="solid"];
"core.dev_context_adapter" -> "butler.core.dev_context_adapter_ops" [color="gray60", style="solid"];
"core.dev_context_adapter" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"core.dev_context_adapter_ops" -> "butler.contracts.dev_context_ports" [color="gray60", style="solid"];
"core.dev_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.dev_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
"core.dev_context_adapter_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"core.dev_state_context_adapter" -> "butler.contracts.dev_state_ports" [color="gray60", style="solid"];
"core.dev_state_context_adapter" -> "butler.core.dev_state_context_adapter_ops" [color="gray60", style="solid"];
"core.dev_state_context_adapter_ops" -> "butler.contracts.dev_state_ports" [color="gray60", style="solid"];
"core.dev_state_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.dev_state_context_adapter_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"core.effects.combinators" -> "butler.core.effects.maybe_monad" [color="gray60", style="solid"];
"core.effects.combinators" -> "butler.core.effects.result_monad" [color="gray60", style="solid"];
"core.effects.race" -> "butler.core.effects.result" [color="gray60", style="solid"];
"core.effects.result" -> "butler.core.effects.combinators" [color="gray60", style="solid"];
"core.effects.result" -> "butler.core.effects.maybe_monad" [color="gray60", style="solid"];
"core.effects.result" -> "butler.core.effects.result_monad" [color="gray60", style="solid"];
"core.effects.tool_failure" -> "butler.core.effects.result_monad" [color="gray60", style="solid"];
"core.event_store" -> "butler.contracts.events" [color="gray60", style="solid"];
"core.event_store" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.event_store" -> "butler.core.container" [color="gray60", style="solid"];
"core.event_store_events" -> "butler.core.effects.result" [color="gray60", style="solid"];
"core.events.event_bus" -> "butler.core.effects" [color="gray60", style="solid"];
"core.events.event_bus" -> "butler.core.events.event_types" [color="gray60", style="solid"];
"core.events.event_consumer" -> "butler.core.events.event_store" [color="gray60", style="solid"];
"core.events.event_handlers" -> "butler.core.effects" [color="gray60", style="solid"];
"core.events.event_handlers" -> "butler.core.events.event_bus" [color="gray60", style="solid"];
"core.events.event_handlers" -> "butler.core.events.event_store_protocol" [color="gray60", style="solid"];
"core.events.event_handlers" -> "butler.core.events.event_types" [color="gray60", style="solid"];
"core.events.event_store" -> "butler.core.effects" [color="gray60", style="solid"];
"core.events.event_store" -> "butler.core.events.event_bus" [color="gray60", style="solid"];
"core.events.event_store" -> "butler.core.events.event_handlers" [color="gray60", style="solid"];
"core.events.event_store" -> "butler.core.events.event_store_protocol" [color="gray60", style="solid"];
"core.events.event_store" -> "butler.core.events.event_types" [color="gray60", style="solid"];
"core.events.event_store_protocol" -> "butler.core.effects" [color="gray60", style="solid"];
"core.events.event_store_protocol" -> "butler.core.events.event_types" [color="gray60", style="solid"];
"core.events.event_types" -> "butler.core.effects" [color="gray60", style="solid"];
"core.events.session_events" -> "butler.core.events.event_types" [color="gray60", style="solid"];
"core.events_sink" -> "butler.contracts.events" [color="gray60", style="solid"];
"core.events_sink" -> "butler.contracts.sink_registry" [color="gray60", style="solid"];
"core.events_sink" -> "butler.core.events_sink_ops" [color="gray60", style="solid"];
"core.events_sink_ops" -> "butler.contracts.events" [color="gray60", style="solid"];
"core.events_sink_ops" -> "butler.contracts.sink_registry" [color="gray60", style="solid"];
"core.events_sink_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.evidence_extract" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.exp_cache" -> "butler.core.exp_cache_ops" [color="gray60", style="solid"];
"core.exp_cache" -> "butler.core.meta_flags" [color="gray60", style="solid"];
"core.exp_cache" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.exp_cache_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.exp_cache_ops" -> "butler.core.effects" [color="gray60", style="solid"];
"core.exp_cache_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.exp_cache_ops" -> "butler.io.atomic_write" [color="gray60", style="solid"];
"core.fact_extraction" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.fact_extraction" -> "butler.core.fact_extraction_ops" [color="gray60", style="solid"];
"core.fact_extraction" -> "butler.core.tool_prune_policy" [color="gray60", style="solid"];
"core.fact_extraction" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.fact_extraction" -> "butler.tools.pim_schema" [color="gray60", style="solid"];
"core.fact_extraction_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.fact_extraction_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"];
"core.finish_tool_truncate" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.finish_tool_truncate" -> "butler.transport.types" [color="gray60", style="solid"];
"core.finish_tool_truncate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.goal_loop" -> "butler.core.goal_loop_ops" [color="gray60", style="solid"];
"core.goal_loop" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.goal_loop" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.goal_loop" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.goal_loop_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.goal_loop_ops" -> "butler.core.goal_loop" [color="gray60", style="solid"];
"core.harness_flags" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.hashline" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.hashline" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.hook_context_adapter" -> "butler.contracts.hook_context_ports" [color="gray60", style="solid"];
"core.hook_context_adapter" -> "butler.core.hook_context_adapter_ops" [color="gray60", style="solid"];
"core.hook_context_adapter_ops" -> "butler.contracts.hook_context_ports" [color="gray60", style="solid"];
"core.hook_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.hook_context_adapter_ops" -> "butler.core.compaction_context_adapter" [color="gray60", style="solid"];
"core.hook_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
"core.hygiene_preflight" -> "butler.core.context_budget" [color="gray60", style="solid"];
"core.hygiene_preflight" -> "butler.core.hygiene_preflight_ops" [color="gray60", style="solid"];
"core.hygiene_preflight_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.hygiene_preflight_ops" -> "butler.core.compaction_status" [color="gray60", style="solid"];
"core.hygiene_preflight_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.hygiene_preflight_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.inline_tool_compress" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.input_stage" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.instruction_walkup" -> "butler.configuration.context" [color="gray60", style="solid"];
"core.instruction_walkup" -> "butler.core.instruction_walkup_ops" [color="gray60", style="solid"];
"core.instruction_walkup_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.instruction_walkup_ops" -> "butler.core.rules_engine" [color="gray60", style="solid"];
"core.instruction_walkup_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.intent_keywords" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.io_guardrail" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.learning_graph" -> "butler.skills.layout" [color="gray60", style="solid"];
"core.learning_graph" -> "butler.skills.usage" [color="gray60", style="solid"];
"core.llm_retry" -> "butler.core.llm_retry_helpers" [color="gray60", style="solid"];
"core.llm_retry" -> "butler.core.llm_retry_ops" [color="gray60", style="solid"];
"core.llm_retry" -> "butler.core.llm_retry_outcomes" [color="gray60", style="solid"];
"core.llm_retry" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
"core.llm_retry" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.llm_retry" -> "butler.core.preemptive_compact" [color="gray60", style="solid"];
"core.llm_retry" -> "butler.transport.llm_client" [color="gray60", style="solid"];
"core.llm_retry" -> "butler.transport.types" [color="gray60", style="solid"];
"core.llm_retry_errors" -> "butler.core.llm_retry_helpers" [color="gray60", style="solid"];
"core.llm_retry_errors" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
"core.llm_retry_errors" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.llm_retry_errors" -> "butler.core.retry_policy" [color="gray60", style="solid"];
"core.llm_retry_errors" -> "butler.core.schema_recovery" [color="gray60", style="solid"];
"core.llm_retry_errors" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
"core.llm_retry_errors" -> "butler.transport.error_classifier" [color="gray60", style="solid"];
"core.llm_retry_errors" -> "butler.transport.interruptible_client" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.core.exp_cache" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.core.meta_flags" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.core.preemptive_compact" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.core.reactive_compact" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.core.schema_optimizer" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.mcp.tools_engine" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.transport.llm_client" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.transport.provider_health" [color="gray60", style="solid"];
"core.llm_retry_helpers" -> "butler.transport.types" [color="gray60", style="solid"];
"core.llm_retry_invoke" -> "butler.core.llm_retry_invoke_ops" [color="gray60", style="solid"];
"core.llm_retry_invoke" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.llm_retry_invoke" -> "butler.transport.llm_client" [color="gray60", style="solid"];
"core.llm_retry_invoke" -> "butler.transport.memory_context_scrubber" [color="gray60", style="solid"];
"core.llm_retry_invoke" -> "butler.transport.types" [color="gray60", style="solid"];
"core.llm_retry_invoke_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.llm_retry_invoke_ops" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.llm_retry_invoke_ops" -> "butler.core.structured_events" [color="gray60", style="solid"];
"core.llm_retry_invoke_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.llm_retry_invoke_ops" -> "butler.transport.llm_client" [color="gray60", style="solid"];
"core.llm_retry_invoke_ops" -> "butler.transport.types" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.core.llm_retry_errors" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.core.llm_retry_helpers" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.core.llm_retry_invoke" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.core.llm_retry_outcomes" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.core.llm_retry_success" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.transport.error_classifier" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.transport.llm_client" [color="gray60", style="solid"];
"core.llm_retry_ops" -> "butler.transport.types" [color="gray60", style="solid"];
"core.llm_retry_outcomes" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
"core.llm_retry_outcomes" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.llm_retry_outcomes" -> "butler.transport.llm_client" [color="gray60", style="solid"];
"core.llm_retry_safe" -> "butler.core.llm_retry_safe_ops" [color="gray60", style="solid"];
"core.llm_retry_success" -> "butler.core.llm_retry_helpers" [color="gray60", style="solid"];
"core.llm_retry_success" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
"core.llm_retry_success" -> "butler.core.loop_response" [color="gray60", style="solid"];
"core.llm_retry_success" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.llm_retry_success" -> "butler.core.preemptive_compact" [color="gray60", style="solid"];
"core.llm_retry_success" -> "butler.core.safety_finish" [color="gray60", style="solid"];
"core.llm_retry_success" -> "butler.transport.llm_client" [color="gray60", style="solid"];
"core.llm_retry_success" -> "butler.transport.types" [color="gray60", style="solid"];
"core.loop_budget_nudge" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.loop_callbacks_merge" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.loop_middleware" -> "butler.core.loop_middleware_ops" [color="gray60", style="solid"];
"core.loop_middleware_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.loop_plugins" -> "butler.core.loop_middleware" [color="gray60", style="solid"];
"core.loop_plugins" -> "butler.core.loop_plugins_ops" [color="gray60", style="solid"];
"core.loop_plugins_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.loop_response" -> "butler.core.tool_call_normalize" [color="gray60", style="solid"];
"core.loop_response" -> "butler.transport.content_sanitize" [color="gray60", style="solid"];
"core.loop_response" -> "butler.transport.types" [color="gray60", style="solid"];
"core.loop_types" -> "butler.transport.types" [color="gray60", style="solid"];
"core.memory_context_adapter" -> "butler.contracts.memory_ports" [color="gray60", style="solid"];
"core.memory_context_adapter" -> "butler.core.memory_context_adapter_ops" [color="gray60", style="solid"];
"core.memory_context_adapter_ops" -> "butler.contracts.memory_ports" [color="gray60", style="solid"];
"core.memory_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.memory_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
"core.memory_manager" -> "butler.core.events.event_store" [color="gray60", style="solid"];
"core.memory_recap_line" -> "butler.core.memory_source_surface" [color="gray60", style="solid"];
"core.memory_recap_line" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.memory_recap_line" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.message_context_adapter" -> "butler.contracts.message_ports" [color="gray60", style="solid"];
"core.message_context_adapter" -> "butler.core.message_context_adapter_ops" [color="gray60", style="solid"];
"core.message_context_adapter" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.message_context_adapter_ops" -> "butler.contracts.message_ports" [color="gray60", style="solid"];
"core.message_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.message_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
"core.message_ir" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.message_repair" -> "butler.core.json_repair" [color="gray60", style="solid"];
"core.meta_flags" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.meta_flags" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.metrics_sink" -> "butler.core.metrics_sink_ops" [color="gray60", style="solid"];
"core.metrics_sink_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.metrics_sink_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
"core.mode_classifier" -> "butler.core.mode_classifier_ops" [color="gray60", style="solid"];
"core.mode_classifier" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.mode_classifier_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.mode_classifier_ops" -> "butler.plan.mode" [color="gray60", style="solid"];
"core.mode_classifier_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
"core.model_context" -> "butler.core.model_context_ops" [color="gray60", style="solid"];
"core.model_context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.model_context_ops" -> "butler.model_resolve" [color="gray60", style="solid"];
"core.model_context_ops" -> "butler.project.lead" [color="gray60", style="solid"];
"core.output_grounding" -> "butler.core.output_grounding_ops" [color="gray60", style="solid"];
"core.output_grounding" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.output_grounding_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.output_grounding_ops" -> "butler.memory.prefetch_retrieval_metrics" [color="gray60", style="solid"];
"core.output_schema_registry" -> "butler.report" [color="gray60", style="solid"];
"core.parallel_tools" -> "butler.core.parallel_tools_ops" [color="gray60", style="solid"];
"core.parallel_tools" -> "butler.tools.registry" [color="gray60", style="solid"];
"core.parallel_tools_ops" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
"core.parallel_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.pim_state" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.pim_state" -> "butler.core.pim_state_ops" [color="gray60", style="solid"];
"core.pim_state" -> "butler.utilities.tenant" [color="gray60", style="solid"];
"core.pim_state_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.pim_state_ops" -> "butler.core.pim_state" [color="gray60", style="solid"];
"core.pim_state_ops" -> "butler.io.atomic_write" [color="gray60", style="solid"];
"core.pim_state_ops" -> "butler.tools.contacts" [color="gray60", style="solid"];
"core.pim_state_ops" -> "butler.tools.expense" [color="gray60", style="solid"];
"core.pim_state_ops" -> "butler.tools.habits" [color="gray60", style="solid"];
"core.pim_state_ops" -> "butler.tools.memo" [color="gray60", style="solid"];
"core.pim_state_ops" -> "butler.tools.reminder" [color="gray60", style="solid"];
"core.plan_reason_graph" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.plan_reason_graph" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.post_commit" -> "butler.core.post_commit_ops" [color="gray60", style="solid"];
"core.post_commit_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.post_compact_cleanup" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.post_compact_cleanup" -> "butler.core.post_compact_cleanup_ops" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.core.agents_md_sections" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.core.compaction_phase" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.core.design_md_sections" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.core.fact_extraction" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.core.research_simplicity" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.core.session_todos" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.session.lifecycle" [color="gray60", style="solid"];
"core.post_compact_cleanup_ops" -> "butler.tools.registry" [color="gray60", style="solid"];
"core.post_edit_format" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.preemptive_compact" -> "butler.core.context_budget" [color="gray60", style="solid"];
"core.preemptive_compact" -> "butler.core.preemptive_compact_ops" [color="gray60", style="solid"];
"core.preemptive_compact" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
"core.preemptive_compact" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.preemptive_compact_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.preemptive_compact_ops" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
"core.preread_context" -> "butler.configuration.memory" [color="gray60", style="solid"];
"core.preread_context" -> "butler.core.preread_context_ops" [color="gray60", style="solid"];
"core.preread_context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.preread_context_ops" -> "butler.memory.observer_queue" [color="gray60", style="solid"];
"core.prompt_renderer" -> "butler.core.prompt_renderer_ops" [color="gray60", style="solid"];
"core.prompt_renderer" -> "butler.core.system_reminder" [color="gray60", style="solid"];
"core.prompt_renderer_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.prompt_renderer_ops" -> "butler.core.harness_flags" [color="gray60", style="solid"];
"core.reactive_compact" -> "butler.core.reactive_compact_ops" [color="gray60", style="solid"];
"core.reactive_compact_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.reactive_compact_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.reactive_compact_ops" -> "butler.core.turn_compaction" [color="gray60", style="solid"];
"core.reactive_compact_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.read_file_partial" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.read_state" -> "butler.execution_context" [color="gray60", style="solid"];
"core.read_state" -> "butler.tools.path_safety" [color="gray60", style="solid"];
"core.read_state" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.reasoning_trace" -> "butler.core.reasoning_trace_ops" [color="gray60", style="solid"];
"core.reasoning_trace" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.reasoning_trace" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.reasoning_trace_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.reasoning_trace_ops" -> "butler.core.plan_reason_graph" [color="gray60", style="solid"];
"core.reasoning_trace_ops" -> "butler.core.reflection_closure" [color="gray60", style="solid"];
"core.reasoning_trace_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.reasoning_trace_ops" -> "butler.dev_engine.fix_strategy" [color="gray60", style="solid"];
"core.reasoning_trace_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.reasoning_trace_ops" -> "butler.plan.mode" [color="gray60", style="solid"];
"core.reflection_closure" -> "butler.core.reflection_closure_ops" [color="gray60", style="solid"];
"core.reflection_closure" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.reflection_closure_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.reflection_closure_ops" -> "butler.core.reflexion_write" [color="gray60", style="solid"];
"core.reflection_closure_ops" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.reflexion_ephemeral" -> "butler.core.reflexion_ephemeral_ops" [color="gray60", style="solid"];
"core.reflexion_ephemeral" -> "butler.execution_context" [color="gray60", style="solid"];
"core.reflexion_ephemeral" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.reflexion_ephemeral_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.reflexion_ephemeral_ops" -> "butler.core.reflection_closure" [color="gray60", style="solid"];
"core.reflexion_ephemeral_ops" -> "butler.core.reflexion_write" [color="gray60", style="solid"];
"core.reflexion_write" -> "butler.core.reflexion_write_ops" [color="gray60", style="solid"];
"core.reflexion_write" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.reflexion_write_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.reflexion_write_ops" -> "butler.core.effects" [color="gray60", style="solid"];
"core.reflexion_write_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.remote_compact" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.remote_compact" -> "butler.core.compaction_prompt" [color="gray60", style="solid"];
"core.remote_compact" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.remote_compact" -> "butler.core.remote_compact_ops" [color="gray60", style="solid"];
"core.remote_compact" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.remote_compact" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
"core.remote_compact" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.remote_compact_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.remote_compact_ops" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
"core.research_simplicity" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.retry_policy" -> "butler.transport.retry_utils" [color="gray60", style="solid"];
"core.review_context_adapter" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
"core.review_context_adapter" -> "butler.core.review_context_adapter_ops" [color="gray60", style="solid"];
"core.review_context_adapter_ops" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
"core.review_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.review_context_adapter_ops" -> "butler.core.plan_snapshot" [color="gray60", style="solid"];
"core.review_context_adapter_ops" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
"core.review_context_adapter_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"core.rules_engine" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.safety_finish" -> "butler.transport.types" [color="gray60", style="solid"];
"core.safety_finish" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.schema_optimizer" -> "butler.core.schema_optimizer_ops" [color="gray60", style="solid"];
"core.schema_optimizer" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.schema_optimizer_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.schema_optimizer_ops" -> "butler.transport.schema_sanitizer" [color="gray60", style="solid"];
"core.schema_recovery" -> "butler.core.schema_recovery_ops" [color="gray60", style="solid"];
"core.schema_recovery" -> "butler.transport.schema_sanitizer" [color="gray60", style="solid"];
"core.schema_recovery_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.schema_recovery_ops" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
"core.session_epoch" -> "butler.core.session_epoch_ops" [color="gray60", style="solid"];
"core.session_epoch_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.session_epoch_ops" -> "butler.core.transcript_export" [color="gray60", style="solid"];
"core.session_hydration" -> "butler.core.session_hydration_ops" [color="gray60", style="solid"];
"core.session_hydration" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
"core.session_hydration" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.session_hydration_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.session_hydration_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
"core.session_hydration_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"core.session_hydration_ops" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
"core.session_hydration_ops" -> "butler.project.worktree" [color="gray60", style="solid"];
"core.session_recall_intent" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.session_recall_intent" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
"core.session_recall_intent" -> "butler.execution_context" [color="gray60", style="solid"];
"core.session_todos" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.session_todos" -> "butler.core.session_todos_ops" [color="gray60", style="solid"];
"core.session_todos" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.session_todos_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.session_todos_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.session_todos_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.session_tool_index" -> "butler.core.session_tool_index_ops" [color="gray60", style="solid"];
"core.session_tool_index" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.session_tool_index_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.session_tool_index_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"core.session_transcript" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.session_transcript" -> "butler.core.session_transcript_ops" [color="gray60", style="solid"];
"core.session_transcript" -> "butler.core.transcript_index" [color="gray60", style="solid"];
"core.session_transcript" -> "butler.core.transcript_retention" [color="gray60", style="solid"];
"core.session_transcript" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.session_transcript_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.session_transcript_ops" -> "butler.core.reasoning_trace" [color="gray60", style="solid"];
"core.session_transcript_ops" -> "butler.core.transcript_fts" [color="gray60", style="solid"];
"core.session_transcript_ops" -> "butler.core.transcript_index" [color="gray60", style="solid"];
"core.skill_compact_rescue" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.skill_tool_bridge" -> "butler.core.skill_tool_bridge_ops" [color="gray60", style="solid"];
"core.skill_tool_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.skill_tool_bridge_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.skill_tool_bridge_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.skill_tool_bridge_ops" -> "butler.session.memory_prefetch" [color="gray60", style="solid"];
"core.skill_tool_bridge_ops" -> "butler.skills.experience_pointers" [color="gray60", style="solid"];
"core.skill_tool_bridge_ops" -> "butler.skills.injection_policy" [color="gray60", style="solid"];
"core.steer" -> "butler.core.steer_ops" [color="gray60", style="solid"];
"core.steer_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.steer_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.streaming_tools" -> "butler.core.streaming_tools_ops" [color="gray60", style="solid"];
"core.streaming_tools" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.streaming_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.structured_events" -> "butler.contracts.events" [color="gray60", style="solid"];
"core.structured_events" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
"core.system_reminder" -> "butler.core.harness_flags" [color="gray60", style="solid"];
"core.system_reminder" -> "butler.core.system_reminder_ops" [color="gray60", style="solid"];
"core.system_reminder_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.system_reminder_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.task_route_hints" -> "butler.core.task_route_hints_ops" [color="gray60", style="solid"];
"core.task_route_hints" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.task_route_hints_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.task_route_hints_ops" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"];
"core.text_truncate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.todo_continuation" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"core.todo_continuation" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.todo_continuation" -> "butler.core.session_todos" [color="gray60", style="solid"];
"core.todo_continuation" -> "butler.core.todo_continuation_ops" [color="gray60", style="solid"];
"core.todo_continuation" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.todo_continuation_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.todo_continuation_ops" -> "butler.core.goal_loop" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.contracts.tool_dispatch_registry" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.finish_tool_truncate" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.parallel_tools" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.tool_batch_hooks" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.tool_batch_post_edit" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.tool_batch_runner" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.core.tool_dispatch" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.execution_context" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.transport.reasoning_replay" [color="gray60", style="solid"];
"core.tool_batch" -> "butler.transport.types" [color="gray60", style="solid"];
"core.tool_batch_finalize" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_batch_finalize" -> "butler.core.tool_batch_finalize_ops" [color="gray60", style="solid"];
"core.tool_batch_finalize" -> "butler.tools.registry" [color="gray60", style="solid"];
"core.tool_batch_finalize_ops" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
"core.tool_batch_finalize_ops" -> "butler.tools.registry" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.core.delegate_context" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.core.pim_state" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.core.tool_batch_post_edit" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.execution_context" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.ops.cost_tracker" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.tool_batch_hooks" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.core.reasoning_trace" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.core.tool_batch_state" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.dev_engine.coding_knowledge_fixup" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.dev_engine.fix_strategy" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.dev_engine.verify" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.plan.markdown_sync" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.project.maturity_ops" [color="gray60", style="solid"];
"core.tool_batch_post_edit" -> "butler.tools.safe_root" [color="gray60", style="solid"];
"core.tool_batch_runner" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
"core.tool_batch_runner" -> "butler.core.steer" [color="gray60", style="solid"];
"core.tool_batch_runner" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
"core.tool_batch_runner" -> "butler.core.tool_batch_runner_ops" [color="gray60", style="solid"];
"core.tool_batch_runner" -> "butler.core.tool_executor" [color="gray60", style="solid"];
"core.tool_batch_runner" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
"core.tool_batch_runner" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.tool_batch_runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_call_limits" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.tool_call_normalize" -> "butler.transport.types" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.contracts.tool_dispatch_registry" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.effects" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.event_store" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.event_store_events" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.structured_events" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.tool_batch_post_edit" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.tool_call_limits" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.tool_dispatch_doom" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.tool_dispatch_ops" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.tool_error_policy" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.tool_result_cache" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.tool_retry" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.core.two_phase_confirm" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.execution_context" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.permissions.tool_boundary_registry" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.tool_dispatch" -> "butler.tools.tool_types" [color="gray60", style="solid"];
"core.tool_dispatch_doom" -> "butler.core.tool_dispatch_doom_ops" [color="gray60", style="solid"];
"core.tool_dispatch_doom_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_dispatch_doom_ops" -> "butler.core.reasoning_trace" [color="gray60", style="solid"];
"core.tool_dispatch_doom_ops" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
"core.tool_dispatch_doom_ops" -> "butler.permissions.doom_loop" [color="gray60", style="solid"];
"core.tool_dispatch_doom_ops" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.tool_dispatch_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_dispatch_ops" -> "butler.core.tool_result_classification" [color="gray60", style="solid"];
"core.tool_error_policy" -> "butler.core.tool_error_policy_ops" [color="gray60", style="solid"];
"core.tool_error_policy" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.tool_error_policy_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_error_policy_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"core.tool_event_emitter" -> "butler.core.events" [color="gray60", style="solid"];
"core.tool_executor" -> "butler.core.tool_event_emitter" [color="gray60", style="solid"];
"core.tool_executor" -> "butler.core.tool_middleware" [color="gray60", style="solid"];
"core.tool_executor" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.tool_failure_bridge" -> "butler.core.effects.tool_failure" [color="gray60", style="solid"];
"core.tool_loop_detect" -> "butler.tool_guardrails" [color="gray60", style="solid"];
"core.tool_loop_detect" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.tool_narrative" -> "butler.core.tool_narrative_ops" [color="gray60", style="solid"];
"core.tool_narrative_ops" -> "butler.core.session_tool_index_ops" [color="gray60", style="solid"];
"core.tool_orchestrator" -> "butler.core.approval_cards" [color="gray60", style="solid"];
"core.tool_orchestrator" -> "butler.core.tool_orchestrator_ops" [color="gray60", style="solid"];
"core.tool_orchestrator" -> "butler.permissions" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.core.approval_cards" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.core.confirm_flags" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.hooks.runner" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.mcp.approval" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.permissions.approvals" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.tools.network_search_policy" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.tools.terminal_approval" [color="gray60", style="solid"];
"core.tool_orchestrator_ops" -> "butler.tools.terminal_danger" [color="gray60", style="solid"];
"core.tool_output_masking" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.tool_output_masking" -> "butler.core.tool_prune_policy" [color="gray60", style="solid"];
"core.tool_output_masking" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
"core.tool_output_masking" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.tool_output_masking" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.tool_output_prune" -> "butler.configuration.context" [color="gray60", style="solid"];
"core.tool_output_prune" -> "butler.core.tool_prune_policy" [color="gray60", style="solid"];
"core.tool_pair_repair" -> "butler.core.tool_pair_repair_ops" [color="gray60", style="solid"];
"core.tool_pair_repair" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.tool_pair_repair_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_pair_repair_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.tool_prune_policy" -> "butler.configuration.context" [color="gray60", style="solid"];
"core.tool_prune_policy" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
"core.tool_recall_bm25" -> "butler.core.meta_flags" [color="gray60", style="solid"];
"core.tool_recall_bm25" -> "butler.core.tool_selector" [color="gray60", style="solid"];
"core.tool_result_cache" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.tool_result_storage" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.tool_result_storage" -> "butler.core.text_truncate" [color="gray60", style="solid"];
"core.tool_result_storage" -> "butler.core.tool_result_storage_ops" [color="gray60", style="solid"];
"core.tool_result_storage" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.tool_result_storage" -> "butler.execution_context" [color="gray60", style="solid"];
"core.tool_result_storage" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.tool_retry" -> "butler.core.effects" [color="gray60", style="solid"];
"core.tool_retry" -> "butler.core.tool_retry_ops" [color="gray60", style="solid"];
"core.tool_retry" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.tool_retry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_retry_ops" -> "butler.core.tool_error_policy" [color="gray60", style="solid"];
"core.tool_selector" -> "butler.core.tool_recall_bm25" [color="gray60", style="solid"];
"core.tool_selector" -> "butler.core.tool_selector_ops" [color="gray60", style="solid"];
"core.tool_selector" -> "butler.memory.embedding" [color="gray60", style="solid"];
"core.tool_selector" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.tool_selector_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.tool_selector_ops" -> "butler.core.tool_recall_bm25" [color="gray60", style="solid"];
"core.tool_selector_ops" -> "butler.memory.embedding" [color="gray60", style="solid"];
"core.transcript_export" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.transcript_export" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.transcript_export" -> "butler.core.transcript_export_ops" [color="gray60", style="solid"];
"core.transcript_export" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.transcript_export_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.transcript_export_ops" -> "butler.core.session_transcript_ops" [color="gray60", style="solid"];
"core.transcript_export_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.transcript_export_ops" -> "butler.report" [color="gray60", style="solid"];
"core.transcript_export_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"];
"core.transcript_fork" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.transcript_fork" -> "butler.core.transcript_index" [color="gray60", style="solid"];
"core.transcript_fts" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.transcript_fts" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.transcript_index" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.transcript_revert" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.transcript_revert" -> "butler.core.transcript_index" [color="gray60", style="solid"];
"core.transcript_revert" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.transcript_search" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.transcript_search" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.transcript_search" -> "butler.core.transcript_search_ops" [color="gray60", style="solid"];
"core.transcript_search" -> "butler.execution_context" [color="gray60", style="solid"];
"core.transcript_search" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.transcript_search_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.transcript_search_ops" -> "butler.core.transcript_fts" [color="gray60", style="solid"];
"core.transform_feedback" -> "butler.core.transform_overrides" [color="gray60", style="solid"];
"core.transform_overrides" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.turn_compaction" -> "butler.core.compaction_cutoff" [color="gray60", style="solid"];
"core.turn_compaction" -> "butler.core.context_budget" [color="gray60", style="solid"];
"core.turn_compaction" -> "butler.core.context_compressor" [color="gray60", style="solid"];
"core.turn_compaction" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.turn_compaction" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.turn_summary_line" -> "butler.core.turn_summary_line_ops" [color="gray60", style="solid"];
"core.turn_summary_line" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.turn_summary_line" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.turn_summary_line_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.turn_summary_line_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"core.turn_token_budget" -> "butler.configuration.context" [color="gray60", style="solid"];
"core.turn_token_budget" -> "butler.core.loop_types" [color="gray60", style="solid"];
"core.two_phase_confirm" -> "butler.configuration.settings" [color="gray60", style="solid"];
"core.two_phase_confirm" -> "butler.core.confirm_flags" [color="gray60", style="solid"];
"core.two_phase_confirm" -> "butler.core.two_phase_confirm_ops" [color="gray60", style="solid"];
"core.two_phase_confirm" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"core.two_phase_confirm" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"core.two_phase_confirm_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"core.two_phase_confirm_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"core.two_phase_confirm_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"core.two_phase_confirm_ops" -> "butler.tools.registry" [color="gray60", style="solid"];
"core.two_phase_confirm_ops" -> "butler.tools.terminal_danger" [color="gray60", style="solid"];
"core.workflow_flags" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"dag_scheduler" -> "butler.core.handoff" [color="gray60", style="solid"];
"dag_scheduler" -> "butler.core.workflow_flags" [color="gray60", style="solid"];
"dag_scheduler" -> "butler.dag_scheduler_ops" [color="gray60", style="solid"];
"dag_scheduler" -> "butler.task_orchestrator" [color="gray60", style="solid"];
"delegate" -> "butler.delegate.category_resolver" [color="gray60", style="solid"];
"delegate" -> "butler.delegate.policy" [color="gray60", style="solid"];
"delegate" -> "butler.delegate.subagent_permissions" [color="gray60", style="solid"];
"delegate.category_resolver" -> "butler.delegate.category_resolver_ops" [color="gray60", style="solid"];
"delegate.category_resolver_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"delegate.policy" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"delegate.policy" -> "butler.delegate.policy_ops" [color="gray60", style="solid"];
"delegate.policy" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"delegate.policy_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"delegate.policy_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
"delegate.subagent_permissions" -> "butler.delegate.policy" [color="gray60", style="solid"];
"delegate.subagent_permissions" -> "butler.delegate.subagent_permissions_ops" [color="gray60", style="solid"];
"delegate.subagent_permissions" -> "butler.permissions.rules" [color="gray60", style="solid"];
"delegate.subagent_permissions" -> "butler.tools.pim_schema" [color="gray60", style="solid"];
"delegate.subagent_permissions" -> "butler.tools.project_tools" [color="gray60", style="solid"];
"delegate.subagent_permissions" -> "butler.tools.registry" [color="gray60", style="solid"];
"delegate.subagent_permissions_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"delegate.subagent_permissions_ops" -> "butler.mcp.naming" [color="gray60", style="solid"];
"delegate.task_kind" -> "butler.delegate.owner_ingest_shortcuts" [color="gray60", style="solid"];
"dev_engine" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
"dev_engine" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate" -> "butler.core.dev_state_context_adapter" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate" -> "butler.core.read_state" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate" -> "butler.dev_engine.b9_delegate_gate_ops" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate" -> "butler.dev_engine.b9_oracle_curriculum" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate" -> "butler.dev_engine.b9_verify_utils" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate_ops" -> "butler.delegate.task_kind" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate_ops" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
"dev_engine.b9_delegate_gate_ops" -> "butler.tools.path_safety" [color="gray60", style="solid"];
"dev_engine.b9_experience_retrieval" -> "butler.configuration.settings" [color="gray60", style="solid"];
"dev_engine.b9_experience_retrieval" -> "butler.dev_engine.b9_experience_retrieval_ops" [color="gray60", style="solid"];
"dev_engine.b9_experience_retrieval" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.b9_experience_retrieval_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.b9_experience_retrieval_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
"dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.b9_prod_shaped_tasks" [color="gray60", style="solid"];
"dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.b9_task_fixtures" [color="gray60", style="solid"];
"dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
"dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.b9_verify_utils" [color="gray60", style="solid"];
"dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning" -> "butler.dev_engine.b9_live_tuning_ops" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning" -> "butler.dev_engine.b9_oracle_curriculum" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning" -> "butler.dev_engine.b9_oracle_fewshot" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning" -> "butler.dev_engine.swe_curriculum" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning_ops" -> "butler.dev_engine.b9_oracle_curriculum" [color="gray60", style="solid"];
"dev_engine.b9_live_tuning_ops" -> "butler.ops.b9_lessons" [color="gray60", style="solid"];
"dev_engine.b9_oracle_curriculum" -> "butler.configuration.settings" [color="gray60", style="solid"];
"dev_engine.b9_oracle_curriculum" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
"dev_engine.b9_oracle_fewshot" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.b9_oracle_fewshot" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"dev_engine.b9_prod_shaped_tasks" -> "butler.dev_engine.b9_task_fixtures" [color="gray60", style="solid"];
"dev_engine.b9_prod_shaped_tasks" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
"dev_engine.b9_prod_shaped_tasks" -> "butler.dev_engine.b9_verify_utils" [color="gray60", style="solid"];
"dev_engine.b9_prod_shaped_tasks" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
"dev_engine.b9_task_fixtures" -> "butler.dev_engine.b9_verify_utils" [color="gray60", style="solid"];
"dev_engine.b9_task_fixtures" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
"dev_engine.b9_tiers" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.b9_verify_utils" -> "butler.dev_engine.b9_verify_utils_ops" [color="gray60", style="solid"];
"dev_engine.code_search" -> "butler.dev_engine.code_search_ops" [color="gray60", style="solid"];
"dev_engine.code_search" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.code_search_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.ast_analysis" [color="gray60", style="solid"];
"dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.context" [color="gray60", style="solid"];
"dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
"dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.experience" [color="gray60", style="solid"];
"dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.generation" [color="gray60", style="solid"];
"dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
"dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.verification" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.context" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.context" -> "butler.dev_engine.coding_knowledge.experience" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.context" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge.seed_experiences" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge.verification" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge_ops" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.experience" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.context" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.experience" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.verification" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.theorems" -> "butler.dev_engine.coding_knowledge.ast_analysis" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.theorems" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
"dev_engine.coding_knowledge.verification" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_benchmark" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_fixup" -> "butler.dev_engine.coding_knowledge_fixup_ops" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_fixup_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_fixup_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_fixup_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_fixup_ops" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_fixup_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_fixup_ops" -> "butler.ops.experience_selection_telemetry" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_ops" -> "butler.dev_engine.b9_experience_retrieval" [color="gray60", style="solid"];
"dev_engine.coding_knowledge_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
"dev_engine.delegate_finalize" -> "butler.dev_engine.delegate_finalize_ops" [color="gray60", style="solid"];
"dev_engine.delegate_finalize" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.core.dev_state_context_adapter" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.dev_engine.review_closure" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.ops.experience_selection_telemetry" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.ops.g1_04_prod_evidence" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.ops.prod_experience_effectiveness" [color="gray60", style="solid"];
"dev_engine.delegate_finalize_ops" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
"dev_engine.delegate_init" -> "butler.dev_engine.delegate_init_ops" [color="gray60", style="solid"];
"dev_engine.delegate_init" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.dev_engine.loop_plugin" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.ops.experience_selection_telemetry" [color="gray60", style="solid"];
"dev_engine.delegate_init_ops" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
"dev_engine.delegate_workspace" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"];
"dev_engine.delegate_workspace" -> "butler.dev_engine.delegate_workspace_ops" [color="gray60", style="solid"];
"dev_engine.delegate_workspace" -> "butler.tools.delegate_impl" [color="gray60", style="solid"];
"dev_engine.delegate_workspace" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
"dev_engine.delegate_workspace_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.delegate_workspace_ops" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine.dev_benchmark_ops" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine.dev_metrics" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine.review_static" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine.swebench_lite" [color="gray60", style="solid"];
"dev_engine.dev_benchmark" -> "butler.dev_engine.verify" [color="gray60", style="solid"];
"dev_engine.dev_context" -> "butler.dev_engine.dev_context_ops" [color="gray60", style="solid"];
"dev_engine.dev_context" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.dev_context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.dev_context_ops" -> "butler.dev_engine.b9_oracle_fewshot" [color="gray60", style="solid"];
"dev_engine.dev_context_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.dev_context_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
"dev_engine.dev_loop" -> "butler.core.dev_context_adapter" [color="gray60", style="solid"];
"dev_engine.dev_loop" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
"dev_engine.dev_loop" -> "butler.dev_engine.dev_loop_ops" [color="gray60", style="solid"];
"dev_engine.dev_loop" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.dev_loop" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"dev_engine.dev_loop_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.dev_loop_ops" -> "butler.dev_engine.dev_metrics" [color="gray60", style="solid"];
"dev_engine.dev_loop_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.dev_loop_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"dev_engine.dev_loop_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
"dev_engine.dev_metrics" -> "butler.dev_engine.dev_metrics_ops" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.code_search" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.dev_metrics" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.optimize_advisory" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.review_closure" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.review_static" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.dev_engine.verify" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.tools.path_safety" [color="gray60", style="solid"];
"dev_engine.dev_tools" -> "butler.tools.safe_root" [color="gray60", style="solid"];
"dev_engine.dev_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.dev_tools_ops" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
"dev_engine.dev_tools_ops" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
"dev_engine.dev_tools_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.dev_tools_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"dev_engine.dev_tools_ops" -> "butler.dev_engine.review_closure" [color="gray60", style="solid"];
"dev_engine.dev_tools_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"dev_engine.diagnostics" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.edit_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.edit_ops" -> "butler.io.atomic_write" [color="gray60", style="solid"];
"dev_engine.fix_strategy" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.gentc_mutation" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.gentc_mutation" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.gentc_mutation" -> "butler.dev_engine.gentc_mutation_ops" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.b9_live_fixed_tasks" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.llm_delegate_benchmark_ops" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.swe_curriculum" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.execution_context" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.orchestrator" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.project.model" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark" -> "butler.tools.registry" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.llm_delegate_benchmark_ops" -> "butler.ops.b9_lessons" [color="gray60", style="solid"];
"dev_engine.loop_plugin" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.loop_plugin" -> "butler.dev_engine.loop_plugin_ops" [color="gray60", style="solid"];
"dev_engine.loop_plugin_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.loop_plugin_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
"dev_engine.loop_plugin_ops" -> "butler.dev_engine.dev_context" [color="gray60", style="solid"];
"dev_engine.loop_plugin_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.loop_plugin_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
"dev_engine.loop_plugin_ops" -> "butler.dev_engine.loop_plugin" [color="gray60", style="solid"];
"dev_engine.optimize_advisory" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
"dev_engine.optimize_advisory" -> "butler.dev_engine.review_static" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge" -> "butler.dev_engine.b9_experience_retrieval" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge" -> "butler.dev_engine.prod_delegate_bridge_ops" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge" -> "butler.project.manager" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge_ops" -> "butler.dev_engine.prod_playbook_seeds" [color="gray60", style="solid"];
"dev_engine.prod_delegate_bridge_ops" -> "butler.ops.lingwen1_prod_sample" [color="gray60", style="solid"];
"dev_engine.prod_playbook_seeds" -> "butler.configuration.settings" [color="gray60", style="solid"];
"dev_engine.prod_playbook_seeds" -> "butler.dev_engine.b9_experience_retrieval" [color="gray60", style="solid"];
"dev_engine.prod_playbook_seeds" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"dev_engine.prod_playbook_seeds" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
"dev_engine.review_closure" -> "butler.configuration.settings" [color="gray60", style="solid"];
"dev_engine.review_closure" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
"dev_engine.review_closure" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
"dev_engine.review_closure" -> "butler.dev_engine.review_closure_ops" [color="gray60", style="solid"];
"dev_engine.review_closure" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
"dev_engine.review_closure_ops" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
"dev_engine.review_closure_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.review_closure_ops" -> "butler.core.reflection_closure" [color="gray60", style="solid"];
"dev_engine.review_closure_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.review_closure_ops" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"dev_engine.review_knowledge" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
"dev_engine.review_static" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
"dev_engine.review_static" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
"dev_engine.review_static" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"dev_engine.swebench_lite" -> "butler.dev_engine.swebench_lite" [color="gray60", style="solid"];
"dev_engine.swebench_lite.queries" -> "butler.dev_engine.swebench_lite_ops" [color="gray60", style="solid"];
"dev_engine.theorem_library" -> "butler.dev_engine.coding_elements" [color="gray60", style="solid"];
"dev_engine.verify" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"dev_engine.verify" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.verify" -> "butler.dev_engine.diagnostics" [color="gray60", style="solid"];
"dev_engine.verify" -> "butler.dev_engine.project_dev_env" [color="gray60", style="solid"];
"dev_engine.verify" -> "butler.dev_engine.verify_ops" [color="gray60", style="solid"];
"dev_engine.verify" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"dev_engine.verify_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"dev_engine.verify_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
"dev_engine.verify_ops" -> "butler.dev_engine.diagnostics" [color="gray60", style="solid"];
"dev_engine.verify_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
"dev_engine.verify_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
"dev_engine.verify_ops" -> "butler.project.model" [color="gray60", style="solid"];
"env_parse" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"eval_integration" -> "butler.eval_integration.manager" [color="gray60", style="solid"];
"eval_integration" -> "butler.eval_integration.report_schema" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.manager_ops" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.report_schema" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.sinks.audit_sink" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.sinks.deepeval_sink" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.sinks.junit_sink" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.sinks.langfuse_sink" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.sinks.ragas_sink" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.suite_registry" [color="gray60", style="solid"];
"eval_integration.manager" -> "butler.eval_integration.sync_policy" [color="gray60", style="solid"];
"eval_integration.manager_ops" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.manager_ops" -> "butler.core.transform_feedback" [color="gray60", style="solid"];
"eval_integration.oss.deepeval_runner" -> "butler.eval_integration.oss.deepeval_runner_ops" [color="gray60", style="solid"];
"eval_integration.oss.deepeval_runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"eval_integration.oss.prefetch_audit_loader" -> "butler.configuration.settings" [color="gray60", style="solid"];
"eval_integration.oss.prefetch_audit_loader" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"eval_integration.oss.ragas_runner" -> "butler.eval_integration.oss.prefetch_audit_loader" [color="gray60", style="solid"];
"eval_integration.oss.ragas_runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"eval_integration.report_schema" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.sinks.audit_sink" -> "butler.configuration.settings" [color="gray60", style="solid"];
"eval_integration.sinks.audit_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.sinks.deepeval_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.sinks.junit_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.sinks.langfuse_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.sinks.langfuse_sink" -> "butler.eval_integration.sinks.langfuse_sink_ops" [color="gray60", style="solid"];
"eval_integration.sinks.langfuse_sink_ops" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.sinks.langfuse_sink_ops" -> "butler.ops.eval_bridge" [color="gray60", style="solid"];
"eval_integration.sinks.ragas_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.agent_weekly_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.b9_oracle_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.capability_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.deepeval_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.hermes_gate_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.memory_mb_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.ragas_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.regression_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.tcr_suite" [color="gray60", style="solid"];
"eval_integration.suite_registry" -> "butler.eval_integration.suites.wechat_corpus_suite" [color="gray60", style="solid"];
"eval_integration.suites.agent_weekly_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.agent_weekly_suite" -> "butler.ops.agent_eval_weekly" [color="gray60", style="solid"];
"eval_integration.suites.b9_oracle_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.b9_oracle_suite" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
"eval_integration.suites.b9_oracle_suite" -> "butler.dev_engine.llm_delegate_benchmark" [color="gray60", style="solid"];
"eval_integration.suites.b9_oracle_suite" -> "butler.eval_integration.suites_ops" [color="gray60", style="solid"];
"eval_integration.suites.b9_oracle_suite" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"];
"eval_integration.suites.b9_oracle_suite" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"eval_integration.suites.capability_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.deepeval_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.deepeval_suite" -> "butler.eval_integration.oss.deepeval_runner" [color="gray60", style="solid"];
"eval_integration.suites.hermes_gate_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.hermes_gate_suite" -> "butler.ops.hermes_gate" [color="gray60", style="solid"];
"eval_integration.suites.memory_mb_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.memory_mb_suite" -> "butler.eval_integration.suites_ops" [color="gray60", style="solid"];
"eval_integration.suites.memory_mb_suite" -> "butler.memory.memory_benchmark" [color="gray60", style="solid"];
"eval_integration.suites.memory_mb_suite" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"eval_integration.suites.ragas_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.ragas_suite" -> "butler.eval_integration.oss.ragas_runner" [color="gray60", style="solid"];
"eval_integration.suites.regression_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.regression_suite" -> "butler.ops.eval_regression" [color="gray60", style="solid"];
"eval_integration.suites.tcr_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.tcr_suite" -> "butler.ops" [color="gray60", style="solid"];
"eval_integration.suites.wechat_corpus_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
"eval_integration.suites.wechat_corpus_suite" -> "butler.ops.wechat_corpus_eval" [color="gray60", style="solid"];
"eval_integration.suites_ops" -> "butler.ops.eval_bridge" [color="gray60", style="solid"];
"eval_integration.suites_ops" -> "butler.ops.memory_eval" [color="gray60", style="solid"];
"execpolicy" -> "butler.execpolicy.engine" [color="gray60", style="solid"];
"execpolicy.engine" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"execpolicy.engine" -> "butler.execpolicy.engine_ops" [color="gray60", style="solid"];
"execpolicy.engine" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"execpolicy.engine_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
"execpolicy.engine_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"execution_context" -> "butler.contracts.gateway_registry" [color="gray60", style="solid"];
"execution_context" -> "butler.orchestrator" [color="gray60", style="solid"];
"experiments" -> "butler.experiments.ledger" [color="gray60", style="solid"];
"experiments" -> "butler.experiments.metrics" [color="gray60", style="solid"];
"experiments" -> "butler.experiments.mode" [color="gray60", style="solid"];
"experiments.crash_guard" -> "butler.experiments.ledger" [color="gray60", style="solid"];
"experiments.crash_guard" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"experiments.git_utils" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"experiments.git_utils" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"experiments.ledger" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"experiments.ledger" -> "butler.experiments.git_utils" [color="gray60", style="solid"];
"experiments.ledger" -> "butler.experiments.ledger_ops" [color="gray60", style="solid"];
"experiments.ledger" -> "butler.experiments.metrics" [color="gray60", style="solid"];
"experiments.ledger" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"experiments.ledger_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"experiments.ledger_ops" -> "butler.experiments.crash_guard" [color="gray60", style="solid"];
"experiments.ledger_ops" -> "butler.experiments.outcomes" [color="gray60", style="solid"];
"experiments.ledger_ops" -> "butler.project.manager" [color="gray60", style="solid"];
"experiments.mode" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"experiments.mode" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"experiments.outcomes" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"extensions.opencode" -> "butler.extensions.opencode_ops" [color="gray60", style="solid"];
"extensions.opencode_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gate_reply_templates" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
"gateway" -> "butler.resilience" [color="gray60", style="solid"];
"gateway.approval_cards" -> "butler.core.approval_cards" [color="gray60", style="solid"];
"gateway.bot_loop_guard" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.bot_loop_guard" -> "butler.gateway.bot_loop_guard_ops" [color="gray60", style="solid"];
"gateway.bot_loop_guard" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.bot_loop_guard_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.bot_loop_guard_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"gateway.command_registry" -> "butler.gateway.command_registry_ops" [color="gray60", style="solid"];
"gateway.command_registry" -> "butler.gateway.gateway_transcript" [color="gray60", style="solid"];
"gateway.command_registry" -> "butler.gateway.outbound_prefs" [color="gray60", style="solid"];
"gateway.command_registry" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.command_registry" -> "butler.gateway.session_registry" [color="gray60", style="solid"];
"gateway.command_registry" -> "butler.orchestrator" [color="gray60", style="solid"];
"gateway.commands" -> "butler.gateway.commands" [color="gray60", style="solid"];
"gateway.commands.cc_bridge_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.cc_bridge_commands" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"];
"gateway.commands.dev_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.dev_commands" -> "butler.gateway.commands.dev_handlers" [color="gray60", style="solid"];
"gateway.commands.dev_handlers" -> "butler.dev_engine.project_dev_env" [color="gray60", style="solid"];
"gateway.commands.dev_handlers" -> "butler.gateway.commands.dev_handlers_ops" [color="gray60", style="solid"];
"gateway.commands.dev_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.dev_handlers" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
"gateway.commands.dev_handlers" -> "butler.tools.git_tools" [color="gray60", style="solid"];
"gateway.commands.dev_handlers" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.commands.dev_handlers_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.dev_handlers_ops" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.commands.dev_handlers_ops" -> "butler.project.manager" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.core.goal_loop" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.core.steer" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.gateway.commands.dialog_commands_ops" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.gateway.queue_settings" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.model_resolve" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.orchestrator" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.plan.mode" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.project.lead" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.report" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.session.new_session" [color="gray60", style="solid"];
"gateway.commands.dialog_commands" -> "butler.tools.tool_audit" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.core.goal_loop" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.core.instruction_walkup" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.gateway.completion_telemetry" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.gateway.queue_settings" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.hooks.telemetry" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
"gateway.commands.dialog_commands_ops" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
"gateway.commands.experience_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.experience_commands" -> "butler.gateway.commands.experience_commands_ops" [color="gray60", style="solid"];
"gateway.commands.experience_commands" -> "butler.memory.experience_mining" [color="gray60", style="solid"];
"gateway.commands.experience_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.export_handlers" -> "butler.core.transcript_export" [color="gray60", style="solid"];
"gateway.commands.export_handlers" -> "butler.gateway.outbound_files" [color="gray60", style="solid"];
"gateway.commands.export_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.export_handlers" -> "butler.gateway.wechat_text_export" [color="gray60", style="solid"];
"gateway.commands.help_handlers" -> "butler.gateway.commands.help_handlers_ops" [color="gray60", style="solid"];
"gateway.commands.help_handlers" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
"gateway.commands.help_handlers_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.help_handlers_ops" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.configuration.provider_presets" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.core.compaction_status" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.core.memory_source_surface" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.core.session_todos" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.core.tool_narrative" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.core.transcript_export" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.core.turn_token_budget" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.commands.help_handlers" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.commands.info_commands_ops" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.commands.memory_handlers" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.commands.outcome_handlers" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.commands.sessions_handlers" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.gateway.wechat_text_export" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.ops.butler_inbox" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.ops.cost_calibration" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.ops.health_report" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.ops.owner_feedback" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.ops.owner_quality_surface" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.ops.owner_trust_surface" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.report" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.report.format" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.tools.contacts" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.tools.expense" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.tools.habits" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.tools.memo" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.tools.pim_schema" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.tools.project_todos" [color="gray60", style="solid"];
"gateway.commands.info_commands" -> "butler.tools.tenant_store" [color="gray60", style="solid"];
"gateway.commands.info_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.info_commands_ops" -> "butler.ops.owner_pmf_metrics" [color="gray60", style="solid"];
"gateway.commands.info_commands_ops" -> "butler.tools.reminder" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.configuration.service" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.core.transcript_fork" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.core.transcript_revert" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.gateway.commands.export_handlers" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.gateway.commands.lifecycle_commands_ops" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.gateway.commands.registry_handlers" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.memory.transcript_memory_pipeline" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.ops.security_audit" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.runtime.task_store" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands" -> "butler.workflows.commands" [color="gray60", style="solid"];
"gateway.commands.lifecycle_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.memory_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.memory_commands" -> "butler.gateway.commands.memory_handlers" [color="gray60", style="solid"];
"gateway.commands.memory_commands" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.memory_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.memory_handlers" -> "butler.memory.pending_command_ops" [color="gray60", style="solid"];
"gateway.commands.memory_handlers" -> "butler.memory.pending_handlers" [color="gray60", style="solid"];
"gateway.commands.memory_handlers" -> "butler.orchestrator" [color="gray60", style="solid"];
"gateway.commands.memory_handlers_ops" -> "butler.memory.pending_command_ops" [color="gray60", style="solid"];
"gateway.commands.outcome_handlers" -> "butler.experiments.outcomes" [color="gray60", style="solid"];
"gateway.commands.outcome_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.owner_shortcut_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.owner_shortcut_commands" -> "butler.gateway.owner_delegate_shortcuts" [color="gray60", style="solid"];
"gateway.commands.permission_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.permission_commands" -> "butler.gateway.commands.permission_commands_ops" [color="gray60", style="solid"];
"gateway.commands.permission_commands" -> "butler.permissions.approvals" [color="gray60", style="solid"];
"gateway.commands.permission_commands" -> "butler.tools.terminal_approval" [color="gray60", style="solid"];
"gateway.commands.permission_commands" -> "butler.tools.terminal_pattern_approval" [color="gray60", style="solid"];
"gateway.commands.permission_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.permission_commands_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.gateway.commands.project_commands_ops" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.gateway.commands.project_handlers" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.orchestrator" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.plan.mode" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.project.lead" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.project.maturity" [color="gray60", style="solid"];
"gateway.commands.project_commands" -> "butler.project.meta" [color="gray60", style="solid"];
"gateway.commands.project_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.project_commands_ops" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
"gateway.commands.project_handlers" -> "butler.configuration.settings" [color="gray60", style="solid"];
"gateway.commands.project_handlers" -> "butler.gateway.commands.project_handlers_ops" [color="gray60", style="solid"];
"gateway.commands.project_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.project_handlers" -> "butler.orchestrator" [color="gray60", style="solid"];
"gateway.commands.project_handlers" -> "butler.project.archetypes" [color="gray60", style="solid"];
"gateway.commands.project_handlers" -> "butler.project.preflight" [color="gray60", style="solid"];
"gateway.commands.registry_handlers" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.registry_handlers" -> "butler.gateway.commands.registry_handlers_ops" [color="gray60", style="solid"];
"gateway.commands.registry_handlers" -> "butler.registry.install_pending" [color="gray60", style="solid"];
"gateway.commands.registry_handlers" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"];
"gateway.commands.registry_handlers" -> "butler.registry.mcp_install" [color="gray60", style="solid"];
"gateway.commands.registry_handlers" -> "butler.registry.mcp_merge" [color="gray60", style="solid"];
"gateway.commands.registry_handlers" -> "butler.registry.paths" [color="gray60", style="solid"];
"gateway.commands.registry_handlers" -> "butler.registry.skill_service" [color="gray60", style="solid"];
"gateway.commands.registry_handlers_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
"gateway.commands.registry_handlers_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.commands.registry_handlers_ops" -> "butler.registry.install_pending" [color="gray60", style="solid"];
"gateway.commands.registry_handlers_ops" -> "butler.registry.registry_errors" [color="gray60", style="solid"];
"gateway.commands.runtime_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.runtime_commands" -> "butler.gateway.commands.runtime_handlers" [color="gray60", style="solid"];
"gateway.commands.runtime_commands" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.runtime_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.runtime_handlers" -> "butler.orchestrator" [color="gray60", style="solid"];
"gateway.commands.runtime_handlers" -> "butler.runtime.service" [color="gray60", style="solid"];
"gateway.commands.sandbox_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.sandbox_commands" -> "butler.ops.env_profiles" [color="gray60", style="solid"];
"gateway.commands.sandbox_commands" -> "butler.ops.terminal_sandbox_diagnostics" [color="gray60", style="solid"];
"gateway.commands.sandbox_commands" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"];
"gateway.commands.sandbox_commands" -> "butler.tools.terminal_sandbox" [color="gray60", style="solid"];
"gateway.commands.sessions_handlers" -> "butler.cli.sessions_cli" [color="gray60", style="solid"];
"gateway.commands.sessions_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.sessions_handlers" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.commands.skill_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.commands.skill_commands" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.commands.skill_commands" -> "butler.orchestrator" [color="gray60", style="solid"];
"gateway.commands.skill_commands" -> "butler.orchestrator.skill_bridge" [color="gray60", style="solid"];
"gateway.commands.skill_commands" -> "butler.skills.learn" [color="gray60", style="solid"];
"gateway.commands.skill_commands" -> "butler.skills.write_approval" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.contracts.completion_registry" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.contracts.gateway_registry" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.gateway" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.gateway.completion_notify_ops" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.gateway.completion_policy" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.gateway.completion_telemetry" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.gateway.pii_scrub" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.gateway.wechat_text_export" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.report" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.runtime.notify" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.runtime.push_queue" [color="gray60", style="solid"];
"gateway.completion_notify" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.completion_notify_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.completion_notify_ops" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
"gateway.completion_policy" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.completion_policy" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.completion_telemetry" -> "butler.gateway.completion_telemetry_ops" [color="gray60", style="solid"];
"gateway.completion_telemetry" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"gateway.completion_telemetry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.completion_telemetry_ops" -> "butler.runtime.push_queue" [color="gray60", style="solid"];
"gateway.delegate_push_dedup" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.delegate_push_dedup" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.delegate_push_dedup" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.delegate_push_dedup" -> "butler.runtime.notify" [color="gray60", style="solid"];
"gateway.delegate_push_dedup" -> "butler.runtime.task_store" [color="gray60", style="solid"];
"gateway.delegate_push_dedup" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.delegate_task_kind" -> "butler.delegate.task_kind" [color="gray60", style="solid"];
"gateway.durable_outbox" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
"gateway.error_cards" -> "butler.core.approval_cards" [color="gray60", style="solid"];
"gateway.events_sink" -> "butler.gateway.events_sink_impl" [color="gray60", style="solid"];
"gateway.events_sink_impl" -> "butler.contracts.events" [color="gray60", style="solid"];
"gateway.events_sink_impl" -> "butler.contracts.sink_registry" [color="gray60", style="solid"];
"gateway.events_sink_impl" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"gateway.events_sink_impl" -> "butler.gateway.hooks" [color="gray60", style="solid"];
"gateway.events_sink_impl" -> "butler.gateway.item_events" [color="gray60", style="solid"];
"gateway.events_sink_impl" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
"gateway.gate_reply_templates" -> "butler.gate_reply_templates" [color="gray60", style="solid"];
"gateway.gateway_contracts" -> "butler.contracts.gateway_registry" [color="gray60", style="solid"];
"gateway.gateway_contracts" -> "butler.contracts.inbound_idempotency_registry" [color="gray60", style="solid"];
"gateway.gateway_contracts" -> "butler.gateway.completion_notify" [color="gray60", style="solid"];
"gateway.gateway_contracts" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.gateway_contracts" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.gateway_contracts" -> "butler.resilience.inbound_idempotency" [color="gray60", style="solid"];
"gateway.gateway_transcript" -> "butler.gateway.gateway_transcript_ops" [color="gray60", style="solid"];
"gateway.gateway_transcript_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.gateway_transcript_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"gateway.handler_commands" -> "butler.core.loop_types" [color="gray60", style="solid"];
"gateway.handler_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.handler_commands" -> "butler.gateway.commands" [color="gray60", style="solid"];
"gateway.handler_commands" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.handler_commands" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.handler_commands" -> "butler.ops.health_report" [color="gray60", style="solid"];
"gateway.handler_commands" -> "butler.report.format" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.core.auto_continue" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.core.loop_types" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.runtime.service" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.tools._file_cache" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.tools.registry" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.tools.reminder" [color="gray60", style="solid"];
"gateway.handler_helpers" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.hooks" -> "butler.gateway.hooks_ops" [color="gray60", style="solid"];
"gateway.inbound_drain" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.inbound_drain" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.inbound_drain" -> "butler.gateway.queue_settings" [color="gray60", style="solid"];
"gateway.inbound_drain" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
"gateway.inbound_drain" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.inbound_idempotency" -> "butler.resilience.inbound_idempotency" [color="gray60", style="solid"];
"gateway.inbound_idempotency_ops" -> "butler.resilience.inbound_idempotency_ops" [color="gray60", style="solid"];
"gateway.inbound_media" -> "butler.configuration.gateway" [color="gray60", style="solid"];
"gateway.inbound_media" -> "butler.gateway.inbound_media_ops" [color="gray60", style="solid"];
"gateway.inbound_media" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.inbound_media" -> "butler.tools.document_reader" [color="gray60", style="solid"];
"gateway.inbound_media_ops" -> "butler.gateway.minimax_vlm" [color="gray60", style="solid"];
"gateway.inbound_media_ops" -> "butler.gateway.speech_stt" [color="gray60", style="solid"];
"gateway.inbound_media_ops" -> "butler.tools.document_reader" [color="gray60", style="solid"];
"gateway.inbound_pipeline" -> "butler.gateway" [color="gray60", style="solid"];
"gateway.inbound_pipeline" -> "butler.gateway.inbound_pipeline_ops" [color="gray60", style="solid"];
"gateway.inbound_pipeline" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.inbound_validate" -> "butler.gateway.inbound_validate_ops" [color="gray60", style="solid"];
"gateway.inbound_validate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.inbound_validate_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.inbound_validate_ops" -> "butler.core.message_ir" [color="gray60", style="solid"];
"gateway.item_event_sink" -> "butler.gateway.item_event_sink_ops" [color="gray60", style="solid"];
"gateway.item_event_sink" -> "butler.gateway.outbound_events" [color="gray60", style="solid"];
"gateway.item_event_sink_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.item_events" -> "butler.gateway.item_events_ops" [color="gray60", style="solid"];
"gateway.item_events" -> "butler.gateway.outbound_events" [color="gray60", style="solid"];
"gateway.item_events_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.item_events_ops" -> "butler.gateway.item_event_sink" [color="gray60", style="solid"];
"gateway.locked_phase_registry" -> "butler.gateway.gateway_transcript" [color="gray60", style="solid"];
"gateway.locked_phase_registry" -> "butler.gateway.locked_phases" [color="gray60", style="solid"];
"gateway.locked_phase_registry" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.locked_phases" -> "butler.gateway.locked_phases.__init__" [color="gray60", style="solid"];
"gateway.locked_phases.augment_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases.augment_phase" -> "butler.core.hook_context_adapter" [color="gray60", style="solid"];
"gateway.locked_phases.augment_phase" -> "butler.core.intent_keywords" [color="gray60", style="solid"];
"gateway.locked_phases.augment_phase" -> "butler.core.mode_classifier" [color="gray60", style="solid"];
"gateway.locked_phases.augment_phase" -> "butler.core.session_recall_intent" [color="gray60", style="solid"];
"gateway.locked_phases.augment_phase" -> "butler.core.task_route_hints" [color="gray60", style="solid"];
"gateway.locked_phases.augment_phase" -> "butler.gateway.hooks" [color="gray60", style="solid"];
"gateway.locked_phases.augment_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.locked_phases.error_phase" -> "butler.gateway.locked_phases_ops" [color="gray60", style="solid"];
"gateway.locked_phases.execute_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases.execute_phase" -> "butler.core.goal_loop" [color="gray60", style="solid"];
"gateway.locked_phases.execute_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
"gateway.locked_phases.execute_phase" -> "butler.core.todo_continuation" [color="gray60", style="solid"];
"gateway.locked_phases.execute_phase" -> "butler.execution_context" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.core.auto_continue" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.core.compaction_status" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.core.memory_source_surface" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.core.transform_feedback" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.memory.memory_metrics" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.memory.metrics_persist" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.memory.prefetch_retrieval_metrics" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.ops" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.ops.eval_turn" [color="gray60", style="solid"];
"gateway.locked_phases.finalize_phase" -> "butler.session.lifecycle" [color="gray60", style="solid"];
"gateway.locked_phases.format_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases.format_phase" -> "butler.core.memory_recap_line" [color="gray60", style="solid"];
"gateway.locked_phases.format_phase" -> "butler.core.session_hydration" [color="gray60", style="solid"];
"gateway.locked_phases.format_phase" -> "butler.core.turn_summary_line" [color="gray60", style="solid"];
"gateway.locked_phases.format_phase" -> "butler.gateway.item_event_sink" [color="gray60", style="solid"];
"gateway.locked_phases.format_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.locked_phases.format_phase" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.locked_phases.format_phase" -> "butler.ops" [color="gray60", style="solid"];
"gateway.locked_phases.hooks_phase" -> "butler.hooks.runner" [color="gray60", style="solid"];
"gateway.locked_phases.init_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases.init_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.locked_phases.init_phase" -> "butler.memory.memory_metrics" [color="gray60", style="solid"];
"gateway.locked_phases.init_phase" -> "butler.memory.metrics_persist" [color="gray60", style="solid"];
"gateway.locked_phases.init_phase" -> "butler.plan.mode" [color="gray60", style="solid"];
"gateway.locked_phases.init_phase" -> "butler.project.lead" [color="gray60", style="solid"];
"gateway.locked_phases.normalizer_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases.normalizer_phase" -> "butler.core.correction_intent" [color="gray60", style="solid"];
"gateway.locked_phases.normalizer_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.locked_phases.normalizer_phase" -> "butler.mcp.github_grounding" [color="gray60", style="solid"];
"gateway.locked_phases.state" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"gateway.locked_phases.state" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases.state" -> "butler.core.loop_types" [color="gray60", style="solid"];
"gateway.locked_phases.state" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.core.model_context" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.core.tool_pair_repair" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.core.turn_token_budget" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.gateway.inbound_validate" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.gateway.locked_phases_ops" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.ops" [color="gray60", style="solid"];
"gateway.locked_phases.validation_phase" -> "butler.session.lifecycle" [color="gray60", style="solid"];
"gateway.locked_phases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.locked_phases_ops" -> "butler.gateway.error_cards" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator" -> "butler.execution_context" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator" -> "butler.gateway.locked_phase_registry" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator" -> "butler.gateway.locked_phases" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator" -> "butler.gateway.locked_turn_orchestrator_ops" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator" -> "butler.gateway.owner_delegate_shortcuts" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator" -> "butler.gateway.owner_ingest_shortcuts" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator_ops" -> "butler.gateway.locked_phase_registry" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator_ops" -> "butler.gateway.locked_phases" [color="gray60", style="solid"];
"gateway.locked_turn_orchestrator_ops" -> "butler.gateway.user_errors" [color="gray60", style="solid"];
"gateway.media_diagnostic_ops" -> "butler.configuration.gateway" [color="gray60", style="solid"];
"gateway.media_diagnostic_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.media_diagnostic_ops" -> "butler.gateway.inbound_media" [color="gray60", style="solid"];
"gateway.media_diagnostic_ops" -> "butler.gateway.media_telemetry" [color="gray60", style="solid"];
"gateway.media_telemetry" -> "butler.configuration.settings" [color="gray60", style="solid"];
"gateway.media_telemetry" -> "butler.gateway.media_telemetry_ops" [color="gray60", style="solid"];
"gateway.media_telemetry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.core.loop_types" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.delegate_push_dedup" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.handler_commands" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.inbound_drain" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.inbound_pipeline" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.locked_turn_orchestrator" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.message_handler_ops" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.message_pipelines" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.session_loop_factory" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.session_registry" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.gateway.turn_post_pipeline" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.orchestrator" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.session.keys" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.session.lifecycle" [color="gray60", style="solid"];
"gateway.message_handler" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.message_handler_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.message_handler_ops" -> "butler.runtime.delegate_registry" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.core.message_ir" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.core.session_transcript" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.core.steer" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.core.two_phase_confirm" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.bot_loop_guard" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.hooks" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.message_pipelines_fail_closed" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.queue_settings" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.reply_admission" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.gateway.session_lifecycle" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.mcp.profiles" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.resilience.inbound_idempotency" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.session.keys" [color="gray60", style="solid"];
"gateway.message_pipelines" -> "butler.skills.similarity" [color="gray60", style="solid"];
"gateway.message_pipelines_fail_closed" -> "butler.core.io_guardrail" [color="gray60", style="solid"];
"gateway.message_pipelines_fail_closed" -> "butler.gateway.message_pipelines_fail_closed_ops" [color="gray60", style="solid"];
"gateway.message_pipelines_fail_closed" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
"gateway.message_pipelines_fail_closed" -> "butler.memory.injection_guard" [color="gray60", style="solid"];
"gateway.message_pipelines_fail_closed" -> "butler.memory.injection_llm_score" [color="gray60", style="solid"];
"gateway.message_pipelines_fail_closed" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
"gateway.message_queue" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
"gateway.message_queue_ops" -> "butler.resilience.message_queue_ops" [color="gray60", style="solid"];
"gateway.minimax_image_gen" -> "butler.transport.multimodal.minimax_image_gen" [color="gray60", style="solid"];
"gateway.minimax_tts" -> "butler.transport.multimodal.minimax_tts" [color="gray60", style="solid"];
"gateway.minimax_vlm" -> "butler.configuration.gateway" [color="gray60", style="solid"];
"gateway.minimax_vlm" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
"gateway.minimax_vlm" -> "butler.gateway.media_telemetry" [color="gray60", style="solid"];
"gateway.minimax_vlm" -> "butler.gateway.minimax_vlm_ops" [color="gray60", style="solid"];
"gateway.minimax_vlm" -> "butler.gateway.vision_fallback" [color="gray60", style="solid"];
"gateway.network_route_verify_runner" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.network_route_verify_runner" -> "butler.gateway.network_route_verify_runner_ops" [color="gray60", style="solid"];
"gateway.network_route_verify_runner" -> "butler.tools.network_route_verify" [color="gray60", style="solid"];
"gateway.network_route_verify_runner_ops" -> "butler.gateway.wechat_scenario_sim" [color="gray60", style="solid"];
"gateway.network_route_verify_runner_ops" -> "butler.tools.network_route_verify" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.contracts.completion_ports" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.contracts.completion_registry" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.core.loop_callbacks_merge" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.gateway.completion_policy" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.gateway.item_event_sink" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.gateway.outbound_bridge_ops" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.gateway.outbound_events" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.gateway.pii_scrub" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.gateway.progressive_stream" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.gateway.task_milestone" [color="gray60", style="solid"];
"gateway.outbound_bridge" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.outbound_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.outbound_bridge_ops" -> "butler.gateway.task_milestone" [color="gray60", style="solid"];
"gateway.outbound_delay" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.outbound_files" -> "butler.configuration.settings" [color="gray60", style="solid"];
"gateway.outbound_files" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.outbound_files" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.outbound_prefs" -> "butler.gateway.outbound_prefs_ops" [color="gray60", style="solid"];
"gateway.outbound_prefs_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.outbound_prefs_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"gateway.owner_delegate_shortcuts" -> "butler.gateway.owner_delegate_shortcuts_ops" [color="gray60", style="solid"];
"gateway.owner_delegate_shortcuts_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.owner_delegate_shortcuts_ops" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
"gateway.owner_delegate_shortcuts_ops" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"];
"gateway.owner_gate" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.owner_gate" -> "butler.session.keys" [color="gray60", style="solid"];
"gateway.owner_gate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.owner_ingest_shortcuts" -> "butler.delegate.owner_ingest_shortcuts" [color="gray60", style="solid"];
"gateway.owner_surface" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.owner_surface" -> "butler.gateway.commands.help_handlers" [color="gray60", style="solid"];
"gateway.owner_surface" -> "butler.gateway.owner_surface_ops" [color="gray60", style="solid"];
"gateway.owner_surface" -> "butler.ops.butler_inbox" [color="gray60", style="solid"];
"gateway.owner_surface" -> "butler.project.lead" [color="gray60", style="solid"];
"gateway.owner_surface" -> "butler.project.meta" [color="gray60", style="solid"];
"gateway.owner_surface_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.owner_surface_ops" -> "butler.gateway.completion_telemetry" [color="gray60", style="solid"];
"gateway.owner_surface_ops" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
"gateway.owner_surface_ops" -> "butler.ops.butler_inbox_ops" [color="gray60", style="solid"];
"gateway.owner_surface_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
"gateway.owner_surface_ops" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
"gateway.owner_surface_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"];
"gateway.pii_scrub" -> "butler.gateway.pii_scrub_ops" [color="gray60", style="solid"];
"gateway.pii_scrub" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.pii_scrub_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.pii_scrub_ops" -> "butler.gateway.internal_leak_scrub" [color="gray60", style="solid"];
"gateway.platforms" -> "butler.gateway.platforms.wechat" [color="gray60", style="solid"];
"gateway.platforms.base" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.platforms.base" -> "butler.gateway.platforms.base_ops" [color="gray60", style="solid"];
"gateway.platforms.base" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.platforms.base_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.platforms.base_ops" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.platforms.base_ops" -> "butler.gateway.user_errors" [color="gray60", style="solid"];
"gateway.platforms.helpers" -> "butler.io.atomic_write" [color="gray60", style="solid"];
"gateway.platforms.http.adapter" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.platforms.wechat" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_format" -> "butler.core.text_truncate" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink" -> "butler.gateway.platforms.wechat_ilink.direct" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink" -> "butler.gateway.platforms.wechat_ilink.qr_login" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_format" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_ilink.registry" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_ilink.transport" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._utils_legacy" -> "butler.gateway.platforms.helpers" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._utils_legacy" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._utils_legacy" -> "butler.gateway.platforms.wechat_ilink._utils_legacy_ops" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._utils_legacy" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink._utils_legacy" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.account" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter" -> "butler.configuration.settings" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.outbound_files" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.pii_scrub" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.base" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.wechat_ilink._compat" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink.adapter_inbound_ops" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink.phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_inbound_ops" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_inbound_ops" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_lifecycle" -> "butler.gateway.platforms.wechat_ilink._compat" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_lifecycle" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_lifecycle" -> "butler.gateway.platforms.wechat_ilink.adapter_lifecycle_ops" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_lifecycle" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_lifecycle_ops" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_media" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_media" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_media" -> "butler.gateway.platforms.wechat_ilink.adapter_media_ops" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_media" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_media" -> "butler.registry.url_safety" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_media_ops" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.outbound_prefs" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink.adapter_media" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink.adapter_outbound_ops" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.connect_phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.connect_phases" -> "butler.gateway.platforms.wechat_ilink.connect_phases_ops" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.connect_phases" -> "butler.gateway.platforms.wechat_ilink.registry" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.connect_phases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.connect_phases_ops" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.crypto" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.direct" -> "butler.configuration.settings" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.direct" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.direct" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.direct" -> "butler.gateway.platforms.wechat_ilink._compat" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.media" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.helpers" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink.connect_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink.poll_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink.qr_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink.send_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.poll_phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.qr_login" -> "butler.gateway.platforms.wechat_ilink._compat" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.qr_login" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.qr_phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.qr_phases" -> "butler.gateway.platforms.wechat_ilink.qr_phases_ops" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.send_phases" -> "butler.gateway.outbound_delay" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.send_phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.send_phases" -> "butler.gateway.platforms.wechat_ilink.send_phases_ops" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.send_phases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.send_phases_ops" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.transport" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
"gateway.platforms.wechat_ilink.transport" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
"gateway.progressive_stream" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.progressive_stream" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.queue_settings" -> "butler.configuration.gateway" [color="gray60", style="solid"];
"gateway.queue_settings" -> "butler.configuration.settings" [color="gray60", style="solid"];
"gateway.queue_settings" -> "butler.gateway.queue_settings_ops" [color="gray60", style="solid"];
"gateway.reply_admission" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.runner" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.events_sink" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.gateway_contracts" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.inbound_media" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.platform_policy" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.platforms.wechat" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.runner_ops" [color="gray60", style="solid"];
"gateway.runner" -> "butler.gateway.singleton_lock" [color="gray60", style="solid"];
"gateway.runner" -> "butler.ops.runtime_metrics_sink" [color="gray60", style="solid"];
"gateway.runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.runner" -> "butler.utilities.logging_config" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.mcp.async_runner" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.skills.similarity" [color="gray60", style="solid"];
"gateway.runner_ops" -> "butler.tools.reminder" [color="gray60", style="solid"];
"gateway.session_lifecycle" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.session_lifecycle" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.session_loop_factory" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
"gateway.session_loop_factory" -> "butler.core.session_hydration" [color="gray60", style="solid"];
"gateway.session_loop_factory" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.session_loop_factory" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.session_loop_factory" -> "butler.plan.mode" [color="gray60", style="solid"];
"gateway.session_loop_factory" -> "butler.project.lead" [color="gray60", style="solid"];
"gateway.session_loop_factory" -> "butler.tools.project_tools" [color="gray60", style="solid"];
"gateway.session_loop_factory" -> "butler.tools.registry" [color="gray60", style="solid"];
"gateway.session_registry" -> "butler.gateway.session_registry_ops" [color="gray60", style="solid"];
"gateway.session_registry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.session_registry_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"gateway.singleton_lock" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.speech_stt" -> "butler.configuration.gateway" [color="gray60", style="solid"];
"gateway.speech_stt" -> "butler.gateway.speech_stt_ops" [color="gray60", style="solid"];
"gateway.speech_stt_ops" -> "butler.gateway.media_telemetry" [color="gray60", style="solid"];
"gateway.task_milestone" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.task_milestone" -> "butler.gateway.completion_notify" [color="gray60", style="solid"];
"gateway.task_milestone" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.task_milestone" -> "butler.gateway.task_milestone_ops" [color="gray60", style="solid"];
"gateway.task_milestone" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway.task_milestone_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.task_milestone_ops" -> "butler.gateway.completion_notify" [color="gray60", style="solid"];
"gateway.turn_post_pipeline" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
"gateway.turn_post_pipeline" -> "butler.gateway.inbound_pipeline" [color="gray60", style="solid"];
"gateway.turn_post_pipeline" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.turn_post_pipeline" -> "butler.gateway.message_pipelines" [color="gray60", style="solid"];
"gateway.turn_post_pipeline" -> "butler.gateway.reply_admission" [color="gray60", style="solid"];
"gateway.turn_post_pipeline" -> "butler.gateway.turn_post_pipeline_ops" [color="gray60", style="solid"];
"gateway.turn_post_pipeline_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.turn_post_pipeline_ops" -> "butler.ops.owner_pmf_metrics" [color="gray60", style="solid"];
"gateway.turn_post_pipeline_ops" -> "butler.resilience.inbound_idempotency" [color="gray60", style="solid"];
"gateway.vision_fallback" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.vision_fallback" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
"gateway.vision_fallback" -> "butler.gateway.vision_fallback_ops" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim" -> "butler.gateway.wechat_scenario_sim.__init__" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.evaluation" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.evaluation" -> "butler.gateway.outbound_files" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.evaluation" -> "butler.gateway.wechat_scenario_sim_ops" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.evaluation" -> "butler.report" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.execution" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.execution" -> "butler.gateway.gateway_contracts" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.execution" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.execution" -> "butler.gateway.wechat_scenario_sim_bridge" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.execution" -> "butler.gateway.wechat_scenario_sim_ops" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.execution" -> "butler.project.manager" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.utils" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim.utils" -> "butler.tools.registry" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_bridge" -> "butler.execution_context" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_bridge" -> "butler.gateway.gateway_contracts" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_bridge" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_bridge" -> "butler.gateway.outbound_bridge_ops" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_bridge" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_bridge" -> "butler.runtime.async_delegate" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
"gateway.wechat_scenario_sim_ops" -> "butler.report" [color="gray60", style="solid"];
"gateway.wechat_text_export" -> "butler.configuration.settings" [color="gray60", style="solid"];
"gateway.wechat_text_export" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"gateway.wechat_text_export" -> "butler.gateway.outbound_files" [color="gray60", style="solid"];
"gateway.wechat_text_export" -> "butler.gateway.pii_scrub" [color="gray60", style="solid"];
"gateway.wechat_text_export" -> "butler.report" [color="gray60", style="solid"];
"gateway.wechat_text_export" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"gateway_settings" -> "butler.configuration.gateway" [color="gray60", style="solid"];
"gateway_settings_ops" -> "butler.configuration.gateway_ops" [color="gray60", style="solid"];
"hooks" -> "butler.hooks.loader" [color="gray60", style="solid"];
"hooks" -> "butler.hooks.runner" [color="gray60", style="solid"];
"hooks" -> "butler.hooks.telemetry" [color="gray60", style="solid"];
"hooks.loader" -> "butler.hooks.loader_ops" [color="gray60", style="solid"];
"hooks.loader_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
"hooks.runner" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"hooks.runner" -> "butler.hooks.loader" [color="gray60", style="solid"];
"hooks.runner" -> "butler.hooks.runner_ops" [color="gray60", style="solid"];
"hooks.runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"hooks.runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"hooks.runner_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"hooks.runner_ops" -> "butler.hooks.telemetry" [color="gray60", style="solid"];
"hooks.runner_ops" -> "butler.tools.path_safety" [color="gray60", style="solid"];
"hooks.telemetry" -> "butler.hooks.telemetry_ops" [color="gray60", style="solid"];
"hooks.telemetry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"hooks.telemetry_ops" -> "butler.hooks.loader" [color="gray60", style="solid"];
"hooks.telemetry_ops" -> "butler.hooks.runner" [color="gray60", style="solid"];
"hooks.telemetry_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
"human_gate" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
"human_gate_ops" -> "butler.permissions.human_gate_ops" [color="gray60", style="solid"];
"logging_config" -> "butler.utilities.logging_config" [color="gray60", style="solid"];
"main" -> "butler.cli.architecture_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.blackboard_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.chat_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.cost_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.doctor" [color="gray60", style="solid"];
"main" -> "butler.cli.eval_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.events_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.experiment_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.gate_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.gateway_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.mcp_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.memory_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.onboard_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.projects_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.prompt_eval_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.provider_presets_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.registry_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.runtime_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.secrets_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.sessions_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.skills_registry" [color="gray60", style="solid"];
"main" -> "butler.cli.slash_dispatch" [color="gray60", style="solid"];
"main" -> "butler.cli.transcript_cli" [color="gray60", style="solid"];
"main" -> "butler.cli.workflow_cli" [color="gray60", style="solid"];
"main" -> "butler.core.events.event_consumer" [color="gray60", style="solid"];
"main" -> "butler.orchestrator" [color="gray60", style="solid"];
"main" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"main" -> "butler.utilities.logging_config" [color="gray60", style="solid"];
"main" -> "butler.utilities.repo_paths" [color="gray60", style="solid"];
"mcp" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
"mcp.approval" -> "butler.mcp.classify" [color="gray60", style="solid"];
"mcp.approval" -> "butler.permissions.approvals" [color="gray60", style="solid"];
"mcp.approval" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"mcp.async_runner" -> "butler.mcp.async_runner_ops" [color="gray60", style="solid"];
"mcp.async_runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.async_runner_ops" -> "butler.mcp" [color="gray60", style="solid"];
"mcp.async_runner_ops" -> "butler.mcp.async_runner" [color="gray60", style="solid"];
"mcp.async_runner_ops" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.async_runner_ops" -> "butler.mcp.manager" [color="gray60", style="solid"];
"mcp.bridge" -> "butler.mcp.classify" [color="gray60", style="solid"];
"mcp.bridge" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.bridge" -> "butler.mcp.naming" [color="gray60", style="solid"];
"mcp.bridge" -> "butler.mcp.result_slim" [color="gray60", style="solid"];
"mcp.bridge" -> "butler.mcp.schema_normalize" [color="gray60", style="solid"];
"mcp.bridge" -> "butler.mcp.types" [color="gray60", style="solid"];
"mcp.client_http" -> "butler.core.effects" [color="gray60", style="solid"];
"mcp.client_http" -> "butler.mcp.client_http_ops" [color="gray60", style="solid"];
"mcp.client_http" -> "butler.mcp.client_stdio" [color="gray60", style="solid"];
"mcp.client_http" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.client_http" -> "butler.mcp.types" [color="gray60", style="solid"];
"mcp.client_http_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.client_stdio" -> "butler.mcp.client_stdio_ops" [color="gray60", style="solid"];
"mcp.client_stdio" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.client_stdio" -> "butler.mcp.types" [color="gray60", style="solid"];
"mcp.client_stdio" -> "butler.tools.path_safety" [color="gray60", style="solid"];
"mcp.client_stdio_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.config" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"mcp.config" -> "butler.io.safe_load" [color="gray60", style="solid"];
"mcp.config" -> "butler.mcp.config_ops" [color="gray60", style="solid"];
"mcp.config" -> "butler.mcp.types" [color="gray60", style="solid"];
"mcp.config" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"mcp.config_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
"mcp.config_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.config_ops" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.deferred" -> "butler.core.harness_flags" [color="gray60", style="solid"];
"mcp.deferred" -> "butler.mcp.bridge" [color="gray60", style="solid"];
"mcp.deferred" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.deferred" -> "butler.mcp.deferred_ops" [color="gray60", style="solid"];
"mcp.deferred" -> "butler.mcp.manager" [color="gray60", style="solid"];
"mcp.deferred" -> "butler.mcp.naming" [color="gray60", style="solid"];
"mcp.deferred_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.deferred_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"mcp.diagnostics" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
"mcp.extension_grounding" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"];
"mcp.extension_grounding" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"mcp.extension_manifest" -> "butler.configuration.secrets_crypto" [color="gray60", style="solid"];
"mcp.extension_manifest" -> "butler.mcp.extension_manifest_ops" [color="gray60", style="solid"];
"mcp.extension_manifest_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.extension_verify" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.extension_verify" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"];
"mcp.extension_verify" -> "butler.mcp.extension_verify_ops" [color="gray60", style="solid"];
"mcp.extension_verify_ops" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
"mcp.extension_verify_ops" -> "butler.registry.mcp_catalog_ops" [color="gray60", style="solid"];
"mcp.github_grounding" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"mcp.github_grounding" -> "butler.mcp.extension_grounding" [color="gray60", style="solid"];
"mcp.github_grounding" -> "butler.mcp.github_tool_aliases" [color="gray60", style="solid"];
"mcp.github_grounding" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
"mcp.github_grounding" -> "butler.mcp.result_slim" [color="gray60", style="solid"];
"mcp.github_grounding" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"mcp.github_tool_aliases" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"mcp.github_tool_aliases" -> "butler.mcp.github_tool_aliases_ops" [color="gray60", style="solid"];
"mcp.github_tool_aliases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.github_tool_aliases_ops" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"];
"mcp.manager" -> "butler.mcp.async_runner" [color="gray60", style="solid"];
"mcp.manager" -> "butler.mcp.bridge" [color="gray60", style="solid"];
"mcp.manager" -> "butler.mcp.client_http" [color="gray60", style="solid"];
"mcp.manager" -> "butler.mcp.client_stdio" [color="gray60", style="solid"];
"mcp.manager" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.manager" -> "butler.mcp.manager_ops" [color="gray60", style="solid"];
"mcp.manager" -> "butler.mcp.types" [color="gray60", style="solid"];
"mcp.manager_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.manager_ops" -> "butler.mcp.profiles" [color="gray60", style="solid"];
"mcp.manager_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
"mcp.naming" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"mcp.outbound_grounding_gate" -> "butler.mcp.github_grounding" [color="gray60", style="solid"];
"mcp.outbound_grounding_gate" -> "butler.mcp.todoist_grounding" [color="gray60", style="solid"];
"mcp.profiles" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"mcp.profiles" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.profiles" -> "butler.mcp.profiles_ops" [color="gray60", style="solid"];
"mcp.profiles" -> "butler.mcp.types" [color="gray60", style="solid"];
"mcp.profiles" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"mcp.profiles_ops" -> "butler.registry.mcp_catalog_ops" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.bridge" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.classify" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.github_tool_aliases" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.manager" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.naming" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.registry_hook_ops" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.todoist_tool_aliases" [color="gray60", style="solid"];
"mcp.registry_hook" -> "butler.mcp.turn_scrape_dedup" [color="gray60", style="solid"];
"mcp.registry_hook_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.registry_hook_ops" -> "butler.core.harness_flags" [color="gray60", style="solid"];
"mcp.registry_hook_ops" -> "butler.core.tool_orchestrator" [color="gray60", style="solid"];
"mcp.registry_hook_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"mcp.registry_hook_ops" -> "butler.mcp.config" [color="gray60", style="solid"];
"mcp.registry_hook_ops" -> "butler.mcp.deferred" [color="gray60", style="solid"];
"mcp.registry_hook_ops" -> "butler.mcp.extension_verify" [color="gray60", style="solid"];
"mcp.registry_hook_ops" -> "butler.plan.mode" [color="gray60", style="solid"];
"mcp.server_stdio" -> "butler.tools.registry" [color="gray60", style="solid"];
"mcp.todoist_grounding" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"mcp.todoist_grounding" -> "butler.mcp.extension_grounding" [color="gray60", style="solid"];
"mcp.todoist_grounding" -> "butler.mcp.result_slim" [color="gray60", style="solid"];
"mcp.todoist_grounding" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"mcp.todoist_tool_aliases" -> "butler.mcp.todoist_tool_aliases_ops" [color="gray60", style="solid"];
"mcp.todoist_tool_aliases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.todoist_tool_aliases_ops" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"];
"mcp.tools_engine" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"mcp.tools_engine" -> "butler.mcp.tools_engine_ops" [color="gray60", style="solid"];
"mcp.tools_engine" -> "butler.transport.model_capabilities" [color="gray60", style="solid"];
"mcp.tools_engine" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"mcp.tools_engine_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.tools_engine_ops" -> "butler.mcp.tools_manifest" [color="gray60", style="solid"];
"mcp.tools_manifest" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"mcp.tools_manifest" -> "butler.mcp.naming" [color="gray60", style="solid"];
"mcp.tools_manifest" -> "butler.mcp.tools_manifest_ops" [color="gray60", style="solid"];
"mcp.tools_manifest" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"mcp.tools_manifest_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.tools_manifest_ops" -> "butler.registry.mcp_merge" [color="gray60", style="solid"];
"mcp.turn_scrape_dedup" -> "butler.mcp.turn_scrape_dedup_ops" [color="gray60", style="solid"];
"mcp.turn_scrape_dedup_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"mcp.turn_scrape_dedup_ops" -> "butler.execution_context" [color="gray60", style="solid"];
"memory" -> "butler.memory.butler_memory" [color="gray60", style="solid"];
"memory" -> "butler.memory.facade" [color="gray60", style="solid"];
"memory" -> "butler.memory.project_memory" [color="gray60", style="solid"];
"memory" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
"memory" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
"memory.butler_memory" -> "butler.memory.butler_memory.__init__" [color="gray60", style="solid"];
"memory.butler_memory.core" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"memory.butler_memory.core" -> "butler.memory.butler_memory_ops" [color="gray60", style="solid"];
"memory.butler_memory.core" -> "butler.memory.experience_consolidation" [color="gray60", style="solid"];
"memory.butler_memory.core" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
"memory.butler_memory.core" -> "butler.memory.triplets" [color="gray60", style="solid"];
"memory.butler_memory.core" -> "butler.memory.vector_sync_telemetry" [color="gray60", style="solid"];
"memory.butler_memory.core" -> "butler.utilities.tenant" [color="gray60", style="solid"];
"memory.butler_memory.experience_store" -> "butler.memory.butler_memory_ops" [color="gray60", style="solid"];
"memory.butler_memory.experience_store" -> "butler.memory.retrieval_ranking" [color="gray60", style="solid"];
"memory.butler_memory.profile_store" -> "butler.io.safe_load" [color="gray60", style="solid"];
"memory.butler_memory_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"memory.butler_memory_ops" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
"memory.butler_memory_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
"memory.butler_memory_ops" -> "butler.skills.seed_bundled" [color="gray60", style="solid"];
"memory.chunking" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
"memory.chunking" -> "butler.memory.chunking_ops" [color="gray60", style="solid"];
"memory.chunking" -> "butler.memory.document_ingest" [color="gray60", style="solid"];
"memory.chunking" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"memory.chunking_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"memory.chunking_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
"memory.coding_recall" -> "butler.configuration.settings" [color="gray60", style="solid"];
"memory.coding_recall" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
"memory.coding_recall" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
"memory.coding_recall" -> "butler.memory.recall_ops" [color="gray60", style="solid"];
"memory.conversation_store" -> "butler.core.container" [color="gray60", style="solid"];
"memory.conversation_store" -> "butler.core.conversation_state" [color="gray60", style="solid"];
"memory.corpus_router" -> "butler.memory.corpus_router_ops" [color="gray60", style="solid"];
"memory.corpus_router" -> "butler.tools.memory_tools" [color="gray60", style="solid"];
"memory.corpus_router" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"memory.corpus_router_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"memory.corpus_router_ops" -> "butler.memory.query_decompose" [color="gray60", style="solid"];
"memory.corrective_recall" -> "butler.configuration.memory" [color="gray60", style="solid"];
"memory.corrective_recall" -> "butler.memory.corrective_recall_ops" [color="gray60", style="solid"];
"memory.corrective_recall_ops" -> "butler.tools.memory_tools" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.configuration.memory" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.core.best_effort" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.diagnostics_collect" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.facade_ops" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.metrics_persist" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.prefetch_cache" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.project_memory" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.retrieval_ranking" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.scope_diagnostics" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.semantic_project" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.memory.vector_sync_telemetry" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.ops.embedding_diagnostics" [color="gray60", style="solid"];
"memory.diagnostics" -> "butler.session.lifecycle" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.configuration.settings" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.core.best_effort" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.memory.knowledge_db" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.memory.retrieval_telemetry" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.memory.scope_diagnostics" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.memory.semantic_health" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.ops.embedding_diagnostics" [color="gray60", style="solid"];
"memory.diagnostics_collect" -> "butler.ops.transcript_diagnostics" [color="gray60", style="solid"];
"memory.document_ingest" -> "butler.memory.document_ingest_ops" [color="gray60", style="solid"];
"memory.document_ingest" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
"memory.embedding" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
"memory.embedding" -> "butler.memory.embedding_ops" [color="gray60", style="solid"];
"memory.embedding" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
"memory.embedding_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
"memory.embedding_ops" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
"memory.embedding_ops" -> "butler.memory.embedding" [color="gray60", style="solid"];
"memory.embedding_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
"memory.experience" -> "butler.memory.experience.domain_router" [color="gray60", style="solid"];
"memory.experience" -> "butler.memory.experience.taxonomy" [color="gray60", style="solid"];
"memory.experience" -> "butler.memory.experience.tree" [color="gray60", style="solid"];
"memory.experience.classifier" -> "butler.memory.experience.taxonomy" [color="gray60", style="