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="solid"]; "memory.experience.domain_router" -> "butler.memory.embedding" [color="gray60", style="solid"]; "memory.experience.domain_router" -> "butler.memory.experience.taxonomy" [color="gray60", style="solid"]; "memory.experience.retriever" -> "butler.memory.experience.store" [color="gray60", style="solid"]; "memory.experience.retriever" -> "butler.memory.knowledge_graph" [color="gray60", style="solid"]; "memory.experience.retriever" -> "butler.memory.semantic_memory" [color="gray60", style="solid"]; "memory.experience.store" -> "butler.core.container" [color="gray60", style="solid"]; "memory.experience.store" -> "butler.memory.experience.taxonomy" [color="gray60", style="solid"]; "memory.experience.tree" -> "butler.memory.experience.domain_router" [color="gray60", style="solid"]; "memory.experience.tree" -> "butler.memory.experience.retriever" [color="gray60", style="solid"]; "memory.experience.tree" -> "butler.memory.experience.store" [color="gray60", style="solid"]; "memory.experience.tree" -> "butler.memory.experience.taxonomy" [color="gray60", style="solid"]; "memory.experience.tree" -> "butler.memory.experience.writer" [color="gray60", style="solid"]; "memory.experience.writer" -> "butler.memory.experience.classifier" [color="gray60", style="solid"]; "memory.experience.writer" -> "butler.memory.experience.store" [color="gray60", style="solid"]; "memory.experience.writer" -> "butler.memory.knowledge_graph" [color="gray60", style="solid"]; "memory.experience.writer" -> "butler.memory.semantic_memory" [color="gray60", style="solid"]; "memory.experience.writer" -> "butler.memory.triplets" [color="gray60", style="solid"]; "memory.experience_consolidation" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.experience_consolidation" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "memory.experience_consolidation" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.experience_consolidation" -> "butler.memory.experience_consolidation_ops" [color="gray60", style="solid"]; "memory.experience_consolidation" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.experience_consolidation" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.experience_consolidation_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.experience_consolidation_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "memory.experience_consolidation_ops" -> "butler.transport.fusion_client" [color="gray60", style="solid"]; "memory.experience_mining" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.experience_mining" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "memory.experience_mining" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"]; "memory.experience_mining" -> "butler.memory.experience_mining_ops" [color="gray60", style="solid"]; "memory.experience_mining" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.experience_mining_cli" -> "butler.memory.experience_mining" [color="gray60", style="solid"]; "memory.experience_mining_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.facade" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.facade" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.facade" -> "butler.execution_context" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.coding_recall" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.facade_ops" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.observation_recall" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.query_decompose" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.recall_layers" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.recall_router" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.semantic_project" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.transcript_recall" [color="gray60", style="solid"]; "memory.facade" -> "butler.memory.unified_recall" [color="gray60", style="solid"]; "memory.facade" -> "butler.project.manager" [color="gray60", style="solid"]; "memory.facade" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "memory.facade" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.memory" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.memory.metrics_persist" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.memory.owner_write_pending" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.memory.private_tags" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.memory.retrieval_telemetry" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.memory.semantic_project" [color="gray60", style="solid"]; "memory.facade_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "memory.hybrid_retriever" -> "butler.core.container" [color="gray60", style="solid"]; "memory.hybrid_retriever" -> "butler.memory.knowledge_graph" [color="gray60", style="solid"]; "memory.hybrid_retriever" -> "butler.memory.semantic_memory" [color="gray60", style="solid"]; "memory.injection_guard" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "memory.injection_guard" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.injection_guard" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.injection_llm_score" -> "butler.memory.injection_llm_score_ops" [color="gray60", style="solid"]; "memory.injection_llm_score" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.injection_llm_score_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"]; "memory.knowledge_graph" -> "butler.core.container" [color="gray60", style="solid"]; "memory.knowledge_warehouse" -> "butler.memory.knowledge_warehouse.digestion" [color="gray60", style="solid"]; "memory.knowledge_warehouse" -> "butler.memory.knowledge_warehouse.ingestor" [color="gray60", style="solid"]; "memory.knowledge_warehouse" -> "butler.memory.knowledge_warehouse.warehouse" [color="gray60", style="solid"]; "memory.knowledge_warehouse.digestion" -> "butler.memory.experience.tree" [color="gray60", style="solid"]; "memory.knowledge_warehouse.digestion" -> "butler.memory.knowledge_graph" [color="gray60", style="solid"]; "memory.knowledge_warehouse.digestion" -> "butler.memory.knowledge_warehouse.warehouse" [color="gray60", style="solid"]; "memory.knowledge_warehouse.digestion" -> "butler.transport.llm" [color="gray60", style="solid"]; "memory.knowledge_warehouse.ingestor" -> "butler.memory.knowledge_warehouse.warehouse" [color="gray60", style="solid"]; "memory.knowledge_warehouse.rebuild_all" -> "butler.memory.experience.tree" [color="gray60", style="solid"]; "memory.knowledge_warehouse.rebuild_all" -> "butler.memory.knowledge_warehouse.digestion" [color="gray60", style="solid"]; "memory.knowledge_warehouse.rebuild_all" -> "butler.memory.knowledge_warehouse.ingestor" [color="gray60", style="solid"]; "memory.knowledge_warehouse.rebuild_all" -> "butler.memory.knowledge_warehouse.seed_data" [color="gray60", style="solid"]; "memory.knowledge_warehouse.rebuild_all" -> "butler.memory.knowledge_warehouse.seed_data_extended" [color="gray60", style="solid"]; "memory.knowledge_warehouse.rebuild_all" -> "butler.memory.knowledge_warehouse.seed_data_massive" [color="gray60", style="solid"]; "memory.knowledge_warehouse.rebuild_all" -> "butler.memory.knowledge_warehouse.warehouse" [color="gray60", style="solid"]; "memory.memory_benchmark" -> "butler.core.fact_extraction" [color="gray60", style="solid"]; "memory.memory_benchmark" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.memory_benchmark" -> "butler.memory.memory_benchmark_ops" [color="gray60", style="solid"]; "memory.memory_benchmark" -> "butler.memory.retrieval_ranking" [color="gray60", style="solid"]; "memory.memory_benchmark_ops" -> "butler.memory.memory_benchmark" [color="gray60", style="solid"]; "memory.memory_caps" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.memory_metrics" -> "butler.core.container" [color="gray60", style="solid"]; "memory.memory_metrics" -> "butler.memory.memory_metrics_ops" [color="gray60", style="solid"]; "memory.memory_scope" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"]; "memory.metrics_persist" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.metrics_persist" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.metrics_persist" -> "butler.memory.metrics_persist_ops" [color="gray60", style="solid"]; "memory.metrics_persist_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.metrics_persist_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"]; "memory.metrics_persist_ops" -> "butler.memory.metrics_persist" [color="gray60", style="solid"]; "memory.observation_migrate" -> "butler.memory.observation_store" [color="gray60", style="solid"]; "memory.observation_recall" -> "butler.memory.observation_store" [color="gray60", style="solid"]; "memory.observation_recall" -> "butler.memory.recall_ops" [color="gray60", style="solid"]; "memory.observation_recall" -> "butler.memory.unified_recall_config" [color="gray60", style="solid"]; "memory.observation_store" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.observer_queue" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.observer_queue" -> "butler.memory.observation_store" [color="gray60", style="solid"]; "memory.observer_queue" -> "butler.memory.observer_queue_ops" [color="gray60", style="solid"]; "memory.observer_queue_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.observer_queue_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "memory.observer_queue_ops" -> "butler.memory.observation_migrate" [color="gray60", style="solid"]; "memory.observer_queue_ops" -> "butler.memory.observer_queue" [color="gray60", style="solid"]; "memory.owner_experience_seed" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.owner_experience_seed" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.owner_experience_seed" -> "butler.memory.owner_experience_seed_ops" [color="gray60", style="solid"]; "memory.owner_experience_seed" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.owner_experience_seed_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.owner_experience_seed_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.owner_write_pending" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.owner_write_pending" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "memory.owner_write_pending" -> "butler.memory.facade" [color="gray60", style="solid"]; "memory.owner_write_pending" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.pending_cli" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.pending_cli" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.pending_cli" -> "butler.memory.pending_handlers" [color="gray60", style="solid"]; "memory.pending_cli" -> "butler.memory.project_memory" [color="gray60", style="solid"]; "memory.pending_cli" -> "butler.project.manager" [color="gray60", style="solid"]; "memory.pending_command_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.pending_command_ops" -> "butler.memory.owner_write_pending" [color="gray60", style="solid"]; "memory.pending_handlers" -> "butler.memory.pending_command_ops" [color="gray60", style="solid"]; "memory.pending_handlers" -> "butler.memory.semantic_project" [color="gray60", style="solid"]; "memory.pending_handlers" -> "butler.memory.vector_sync_telemetry" [color="gray60", style="solid"]; "memory.pending_handlers" -> "butler.orchestrator" [color="gray60", style="solid"]; "memory.prefetch_cache" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "memory.prefetch_cache" -> "butler.memory.prefetch_cache_ops" [color="gray60", style="solid"]; "memory.prefetch_cache" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.prefetch_retrieval_metrics" -> "butler.memory.prefetch_retrieval_metrics_ops" [color="gray60", style="solid"]; "memory.prefetch_retrieval_metrics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.prefetch_retrieval_metrics_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"]; "memory.prefetch_retrieval_metrics_ops" -> "butler.memory.metrics_persist" [color="gray60", style="solid"]; "memory.private_tags" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.project_memory" -> "butler.memory.project_memory.__init__" [color="gray60", style="solid"]; "memory.project_memory.classifiers" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "memory.project_memory.classifiers" -> "butler.memory.project_memory_ops" [color="gray60", style="solid"]; "memory.project_memory.classifiers" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.project_memory.facts_store" -> "butler.io.safe_load" [color="gray60", style="solid"]; "memory.project_memory.facts_store" -> "butler.memory.project_memory_ops" [color="gray60", style="solid"]; "memory.project_memory.project_memory" -> "butler.memory.memory_caps" [color="gray60", style="solid"]; "memory.project_memory_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.project_memory_ops" -> "butler.core.correction_intent" [color="gray60", style="solid"]; "memory.project_memory_ops" -> "butler.memory.knowledge_db" [color="gray60", style="solid"]; "memory.query_decompose" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.recall_layers" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.recall_layers" -> "butler.memory.recall_layers_ops" [color="gray60", style="solid"]; "memory.recall_layers" -> "butler.memory.search_result" [color="gray60", style="solid"]; "memory.recall_layers" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.recall_layers" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "memory.recall_layers_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.recall_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.recall_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "memory.recall_ops" -> "butler.memory.memory_scope" [color="gray60", style="solid"]; "memory.recall_ops" -> "butler.memory.retrieval_telemetry" [color="gray60", style="solid"]; "memory.recall_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.execution_context" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.coding_recall" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.facade_ops" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.observation_recall" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.project_memory" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.query_decompose" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.semantic_project" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.transcript_recall" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.memory.unified_recall" [color="gray60", style="solid"]; "memory.recall_router" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "memory.reindex" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "memory.reindex" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.reindex" -> "butler.memory.project_memory" [color="gray60", style="solid"]; "memory.reindex" -> "butler.memory.reindex_ops" [color="gray60", style="solid"]; "memory.reindex" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.reindex" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.reindex_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.reindex_ops" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.reindex_ops" -> "butler.memory.chunking" [color="gray60", style="solid"]; "memory.reindex_ops" -> "butler.memory.project_memory" [color="gray60", style="solid"]; "memory.reindex_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.reindex_ops" -> "butler.project" [color="gray60", style="solid"]; "memory.retrieval_ranking" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.retrieval_ranking" -> "butler.memory.retrieval_ranking_ops" [color="gray60", style="solid"]; "memory.retrieval_ranking_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.retrieval_ranking_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"]; "memory.retrieval_ranking_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"]; "memory.retrieval_telemetry" -> "butler.memory.retrieval_telemetry_ops" [color="gray60", style="solid"]; "memory.retrieval_telemetry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.retrieval_telemetry_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"]; "memory.scope_diagnostics" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"]; "memory.scope_diagnostics" -> "butler.memory.memory_scope" [color="gray60", style="solid"]; "memory.scope_diagnostics" -> "butler.memory.scope_diagnostics_ops" [color="gray60", style="solid"]; "memory.scope_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.scope_diagnostics_ops" -> "butler.memory.memory_scope" [color="gray60", style="solid"]; "memory.scope_diagnostics_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.execution_context" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.coding_recall" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.observation_recall" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.project_memory" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.recall_scopes" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.retrieval_telemetry" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.search_result" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.semantic_project" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.transcript_recall" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.memory.unified_recall" [color="gray60", style="solid"]; "memory.search_cli" -> "butler.project.manager" [color="gray60", style="solid"]; "memory.search_result" -> "butler.memory.search_result_ops" [color="gray60", style="solid"]; "memory.search_result" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.search_result" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.search_result_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.search_result_ops" -> "butler.memory.chunking" [color="gray60", style="solid"]; "memory.semantic_config" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.semantic_config" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.semantic_config" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "memory.semantic_config" -> "butler.defaults.model_defaults" [color="gray60", style="solid"]; "memory.semantic_config" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.semantic_health" -> "butler.memory.diagnostics" [color="gray60", style="solid"]; "memory.semantic_health" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.semantic_health" -> "butler.memory.semantic_health_ops" [color="gray60", style="solid"]; "memory.semantic_health" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.semantic_health" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "memory.semantic_health_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.semantic_index" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.semantic_index" -> "butler.memory.butler_memory_ops" [color="gray60", style="solid"]; "memory.semantic_index" -> "butler.memory.embedding" [color="gray60", style="solid"]; "memory.semantic_index" -> "butler.memory.query_decompose" [color="gray60", style="solid"]; "memory.semantic_index" -> "butler.memory.query_relaxation" [color="gray60", style="solid"]; "memory.semantic_index" -> "butler.memory.retrieval_ranking" [color="gray60", style="solid"]; "memory.semantic_index" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.semantic_index" -> "butler.memory.semantic_index_ops" [color="gray60", style="solid"]; "memory.semantic_index_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.semantic_index_ops" -> "butler.core.structured_events" [color="gray60", style="solid"]; "memory.semantic_index_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "memory.semantic_index_ops" -> "butler.memory.query_decompose" [color="gray60", style="solid"]; "memory.semantic_index_ops" -> "butler.memory.retrieval_telemetry" [color="gray60", style="solid"]; "memory.semantic_index_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.semantic_index_ops" -> "butler.memory.triplets" [color="gray60", style="solid"]; "memory.semantic_index_ops" -> "butler.memory.vector_sync_telemetry" [color="gray60", style="solid"]; "memory.semantic_project" -> "butler.memory.embedding" [color="gray60", style="solid"]; "memory.semantic_project" -> "butler.memory.project_memory" [color="gray60", style="solid"]; "memory.semantic_project" -> "butler.memory.retrieval_ranking" [color="gray60", style="solid"]; "memory.semantic_project" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.semantic_project" -> "butler.memory.semantic_project_ops" [color="gray60", style="solid"]; "memory.semantic_project" -> "butler.memory.vector_sync_telemetry" [color="gray60", style="solid"]; "memory.semantic_project_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.semantic_project_ops" -> "butler.memory.chunking" [color="gray60", style="solid"]; "memory.semantic_project_ops" -> "butler.memory.project_memory" [color="gray60", style="solid"]; "memory.semantic_project_ops" -> "butler.memory.query_decompose" [color="gray60", style="solid"]; "memory.semantic_project_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.semantic_project_ops" -> "butler.project" [color="gray60", style="solid"]; "memory.transcript_memory_pipeline" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "memory.transcript_memory_pipeline" -> "butler.memory.transcript_memory_pipeline_ops" [color="gray60", style="solid"]; "memory.transcript_memory_pipeline" -> "butler.session.post_session" [color="gray60", style="solid"]; "memory.transcript_memory_pipeline" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"]; "memory.transcript_memory_pipeline" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.transcript_memory_pipeline_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "memory.transcript_memory_pipeline_ops" -> "butler.memory.facade" [color="gray60", style="solid"]; "memory.transcript_recall" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "memory.transcript_recall" -> "butler.core.transcript_fts" [color="gray60", style="solid"]; "memory.transcript_recall" -> "butler.core.transcript_search" [color="gray60", style="solid"]; "memory.transcript_recall" -> "butler.memory.recall_ops" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.memory.coding_recall" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.memory.observation_recall" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.memory.query_decompose" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.memory.recall_ops" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.memory.semantic_project" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.memory.unified_recall_config" [color="gray60", style="solid"]; "memory.unified_recall" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "memory.unified_recall_config" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory.unified_recall_config" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "memory.vector_gc" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "memory.vector_gc" -> "butler.memory.semantic_health" [color="gray60", style="solid"]; "memory.vector_gc" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "memory.vector_gc" -> "butler.memory.vector_gc_ops" [color="gray60", style="solid"]; "memory.vector_store" -> "butler.configuration.settings" [color="gray60", style="solid"]; "memory.vector_store" -> "butler.memory.embedding" [color="gray60", style="solid"]; "memory.vector_store" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "memory.vector_store" -> "butler.memory.vector_store_ops" [color="gray60", style="solid"]; "memory_plugin" -> "butler.memory.facade" [color="gray60", style="solid"]; "memory_settings" -> "butler.configuration.memory" [color="gray60", style="solid"]; "memory_settings_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "model_resolve" -> "butler.configuration.settings" [color="gray60", style="solid"]; "model_resolve" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "model_resolve" -> "butler.model_resolve_ops" [color="gray60", style="solid"]; "model_resolve" -> "butler.project" [color="gray60", style="solid"]; "model_resolve" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"]; "model_resolve_ops" -> "butler.configuration.provider_presets" [color="gray60", style="solid"]; "model_resolve_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "model_resolve_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "model_resolve_ops" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "model_resolve_ops" -> "butler.model_resolve" [color="gray60", style="solid"]; "model_resolve_ops" -> "butler.project" [color="gray60", style="solid"]; "model_resolve_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"]; "ops" -> "butler.ops.health_report" [color="gray60", style="solid"]; "ops" -> "butler.ops.snapshot" [color="gray60", style="solid"]; "ops.approval_diagnostics_ops" -> "butler.contracts.approval_registry" [color="gray60", style="solid"]; "ops.approval_diagnostics_ops" -> "butler.contracts.workflow_gate_registry" [color="gray60", style="solid"]; "ops.assistant_health" -> "butler.ops.assistant_health_ops" [color="gray60", style="solid"]; "ops.assistant_health" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.assistant_health_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.assistant_health_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.assistant_health_ops" -> "butler.ops.assistant_health" [color="gray60", style="solid"]; "ops.assistant_health_ops" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"]; "ops.assistant_health_ops" -> "butler.ops.eval_feedback" [color="gray60", style="solid"]; "ops.b9_failure_analysis" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.b9_failure_analysis" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"]; "ops.b9_harness_audit" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.b9_harness_audit" -> "butler.ops.b9_harness_audit_ops" [color="gray60", style="solid"]; "ops.b9_harness_audit_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.b9_harness_audit_ops" -> "butler.ops.b9_failure_analysis" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.dev_engine.b9_experience_retrieval" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.dev_engine.b9_oracle_curriculum" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.dev_engine.b9_tiers" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.dev_engine.swe_curriculum" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.ops.b9_failure_analysis" [color="gray60", style="solid"]; "ops.b9_lessons" -> "butler.ops.b9_lessons_ops" [color="gray60", style="solid"]; "ops.b9_lessons_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.b9_lessons_ops" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"]; "ops.b9_lessons_ops" -> "butler.ops.b9_lessons" [color="gray60", style="solid"]; "ops.b9_prod_weekly" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.b9_prod_weekly" -> "butler.dev_engine.b9_prod_shaped_tasks" [color="gray60", style="solid"]; "ops.b9_prod_weekly" -> "butler.dev_engine.llm_delegate_benchmark" [color="gray60", style="solid"]; "ops.b9_prod_weekly" -> "butler.ops.b9_harness_audit" [color="gray60", style="solid"]; "ops.b9_prod_weekly" -> "butler.ops.b9_prod_promoted_registry" [color="gray60", style="solid"]; "ops.b9_prod_weekly" -> "butler.ops.b9_prod_weekly_ops" [color="gray60", style="solid"]; "ops.b9_prod_weekly" -> "butler.ops.delegate_failure_b9_import" [color="gray60", style="solid"]; "ops.b9_prod_weekly" -> "butler.ops.delegate_failure_b9_promote" [color="gray60", style="solid"]; "ops.b9_prod_weekly_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.b9_prod_weekly_ops" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"]; "ops.b9_prod_weekly_ops" -> "butler.ops.b9_lessons" [color="gray60", style="solid"]; "ops.b9_prod_weekly_ops" -> "butler.ops.prod_experience_effectiveness" [color="gray60", style="solid"]; "ops.boundary_observability" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.boundary_observability" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.boundary_observability" -> "butler.ops.boundary_observability_ops" [color="gray60", style="solid"]; "ops.boundary_observability" -> "butler.ops.owner_feedback" [color="gray60", style="solid"]; "ops.boundary_observability_ops" -> "butler.core.compaction_prompt" [color="gray60", style="solid"]; "ops.boundary_observability_ops" -> "butler.ops.boundary_observability" [color="gray60", style="solid"]; "ops.boundary_observability_ops" -> "butler.ops.cost_calibration" [color="gray60", style="solid"]; "ops.boundary_observability_ops" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"]; "ops.boundary_observability_ops" -> "butler.runtime" [color="gray60", style="solid"]; "ops.boundary_observability_ops" -> "butler.runtime.notify" [color="gray60", style="solid"]; "ops.boundary_observability_ops" -> "butler.tools" [color="gray60", style="solid"]; "ops.butler_inbox" -> "butler.gateway.owner_surface" [color="gray60", style="solid"]; "ops.butler_inbox" -> "butler.ops.butler_inbox_ops" [color="gray60", style="solid"]; "ops.butler_inbox" -> "butler.ops.owner_brief_blocks" [color="gray60", style="solid"]; "ops.butler_inbox" -> "butler.ops.owner_quality_surface" [color="gray60", style="solid"]; "ops.butler_inbox" -> "butler.ops.owner_trust_surface" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.contracts.workflow_gate_registry" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.core.compaction_status" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.core.session_tool_index" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.memory.experience_mining" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.ops.owner_quality_surface" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.ops.owner_trust_surface" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.resilience.message_queue" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.tools.project_todos" [color="gray60", style="solid"]; "ops.butler_inbox_ops" -> "butler.tools.reminder" [color="gray60", style="solid"]; "ops.compaction_audit" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.compaction_audit" -> "butler.core.session_epoch" [color="gray60", style="solid"]; "ops.compaction_audit" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "ops.compaction_audit" -> "butler.ops.compaction_audit_ops" [color="gray60", style="solid"]; "ops.compaction_audit_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.compaction_audit_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.compaction_audit_ops" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"]; "ops.compaction_audit_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "ops.cost_calibration" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.cost_calibration" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.cost_calibration" -> "butler.ops.cost_tracker" [color="gray60", style="solid"]; "ops.cost_calibration" -> "butler.ops.token_cost_diagnostics" [color="gray60", style="solid"]; "ops.cost_calibration" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.cost_calibration_cli" -> "butler.ops.cost_calibration" [color="gray60", style="solid"]; "ops.cost_tracker" -> "butler.ops.cost_tracker_ops" [color="gray60", style="solid"]; "ops.cost_tracker" -> "butler.ops.token_cost_diagnostics" [color="gray60", style="solid"]; "ops.cost_tracker" -> "butler.tools.pim_schema" [color="gray60", style="solid"]; "ops.cost_tracker_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.cost_tracker_ops" -> "butler.ops.cost_calibration" [color="gray60", style="solid"]; "ops.degradation_registry" -> "butler.defaults.model_defaults" [color="gray60", style="solid"]; "ops.degradation_registry" -> "butler.ops.degradation_registry_ops" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.mcp.config" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.mcp.manager" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.memory.embedding" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.ops.embedding_health" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.ops.health_report" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "ops.degradation_registry_ops" -> "butler.registry.paths" [color="gray60", style="solid"]; "ops.delegate_failure_b9_import" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "ops.delegate_failure_b9_promote" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.delegate_failure_b9_promote" -> "butler.dev_engine.b9_prod_shaped_tasks" [color="gray60", style="solid"]; "ops.delegate_failure_b9_promote" -> "butler.ops.delegate_failure_b9_import" [color="gray60", style="solid"]; "ops.delegate_failure_b9_promote" -> "butler.ops.delegate_failure_b9_promote_ops" [color="gray60", style="solid"]; "ops.delegate_failure_b9_promote" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "ops.delegate_failure_b9_promote_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.delegate_failure_capture" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.delegate_failure_capture" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.delegate_failure_capture" -> "butler.ops.delegate_failure_capture_ops" [color="gray60", style="solid"]; "ops.delegate_failure_capture" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.delegate_failure_capture_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.delegate_failure_capture_ops" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "ops.delegate_failure_capture_ops" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.delegate_failure_capture_ops" -> "butler.ops.g1_04_prod_evidence" [color="gray60", style="solid"]; "ops.delegate_failure_capture_ops" -> "butler.ops.langfuse_tracer" [color="gray60", style="solid"]; "ops.delegate_failure_capture_ops" -> "butler.ops.production_failure_experience" [color="gray60", style="solid"]; "ops.delegate_judge" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.delegate_judge" -> "butler.ops.delegate_judge_ops" [color="gray60", style="solid"]; "ops.delegate_judge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.delegate_judge_ops" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.deploy_profile" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.dev_eval" -> "butler.dev_engine.coding_knowledge_benchmark" [color="gray60", style="solid"]; "ops.dev_eval" -> "butler.dev_engine.dev_benchmark" [color="gray60", style="solid"]; "ops.dev_eval" -> "butler.dev_engine.llm_delegate_benchmark" [color="gray60", style="solid"]; "ops.dev_eval" -> "butler.dev_engine.swebench_lite" [color="gray60", style="solid"]; "ops.dev_eval" -> "butler.ops.dev_eval_ops" [color="gray60", style="solid"]; "ops.dev_eval" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.dev_eval" -> "butler.ops.memory_eval" [color="gray60", style="solid"]; "ops.dev_eval" -> "butler.ops.wechat_dataset" [color="gray60", style="solid"]; "ops.dual_playbook_probe" -> "butler.ops.lingwen1_delegate_drill" [color="gray60", style="solid"]; "ops.dual_playbook_probe" -> "butler.project.lead" [color="gray60", style="solid"]; "ops.dual_playbook_probe" -> "butler.project.manager" [color="gray60", style="solid"]; "ops.dual_playbook_probe" -> "butler.project.meta" [color="gray60", style="solid"]; "ops.embedding_diagnostics" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "ops.embedding_diagnostics" -> "butler.ops.embedding_diagnostics_ops" [color="gray60", style="solid"]; "ops.embedding_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.embedding_diagnostics_ops" -> "butler.memory.embedding" [color="gray60", style="solid"]; "ops.embedding_diagnostics_ops" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "ops.embedding_health" -> "butler.memory.embedding" [color="gray60", style="solid"]; "ops.embedding_health" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "ops.embedding_health" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "ops.env_profiles" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.env_profiles" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.eval_actions" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.eval_actions" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.eval_actions" -> "butler.memory.retrieval_ranking" [color="gray60", style="solid"]; "ops.eval_actions" -> "butler.ops.eval_actions_ops" [color="gray60", style="solid"]; "ops.eval_actions" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"]; "ops.eval_actions" -> "butler.ops.eval_feedback" [color="gray60", style="solid"]; "ops.eval_actions" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.eval_actions_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.eval_actions_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"]; "ops.eval_bridge" -> "butler.ops.eval_bridge_ops" [color="gray60", style="solid"]; "ops.eval_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.eval_bridge_ops" -> "butler.ops.langfuse_tracer" [color="gray60", style="solid"]; "ops.eval_config_overrides" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.eval_config_overrides" -> "butler.ops.eval_experiment" [color="gray60", style="solid"]; "ops.eval_diagnostics" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.eval_diagnostics" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.eval_diagnostics" -> "butler.ops.eval_diagnostics_ops" [color="gray60", style="solid"]; "ops.eval_diagnostics" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.eval_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.eval_diagnostics_ops" -> "butler.ops.assistant_health" [color="gray60", style="solid"]; "ops.eval_experiment" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.eval_experiment" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.eval_experiment" -> "butler.ops.eval_experiment_ops" [color="gray60", style="solid"]; "ops.eval_experiment_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.eval_experiment_ops" -> "butler.dev_engine.llm_delegate_benchmark" [color="gray60", style="solid"]; "ops.eval_experiment_ops" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.eval_experiment_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"]; "ops.eval_experiment_ops" -> "butler.ops.swebench_live_eval" [color="gray60", style="solid"]; "ops.eval_feedback" -> "butler.ops.eval_feedback_ops" [color="gray60", style="solid"]; "ops.eval_feedback_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.eval_feedback_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.eval_feedback_ops" -> "butler.ops.tool_routing" [color="gray60", style="solid"]; "ops.eval_regression" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.eval_regression" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.eval_regression" -> "butler.dev_engine.dev_benchmark" [color="gray60", style="solid"]; "ops.eval_regression" -> "butler.memory.memory_benchmark" [color="gray60", style="solid"]; "ops.eval_regression" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"]; "ops.eval_regression" -> "butler.ops.eval_regression_ops" [color="gray60", style="solid"]; "ops.eval_regression" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.eval_regression_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.eval_regression_ops" -> "butler.dev_engine.llm_delegate_benchmark" [color="gray60", style="solid"]; "ops.eval_regression_ops" -> "butler.ops.dev_eval" [color="gray60", style="solid"]; "ops.eval_regression_ops" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.eval_scoring" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.eval_turn" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.eval_turn" -> "butler.ops.eval_scoring" [color="gray60", style="solid"]; "ops.eval_turn" -> "butler.ops.eval_turn_ops" [color="gray60", style="solid"]; "ops.eval_turn" -> "butler.ops.tool_routing" [color="gray60", style="solid"]; "ops.eval_turn_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.eval_turn_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"]; "ops.eval_turn_ops" -> "butler.ops.eval_scoring" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.core.harness_flags" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.mcp.config" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.mcp.deferred" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.mcp.diagnostics" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.memory.experience_consolidation" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.registry.paths" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.skills.injection_policy" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.skills.similarity" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.tools.orthogonality_lint" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.tools.registry" [color="gray60", style="solid"]; "ops.execution_surface_collect" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "ops.execution_surface_diagnostics" -> "butler.ops.execution_surface_collect" [color="gray60", style="solid"]; "ops.execution_surface_diagnostics" -> "butler.registry.paths" [color="gray60", style="solid"]; "ops.execution_surface_diagnostics" -> "butler.skills.layout" [color="gray60", style="solid"]; "ops.experience_selection_telemetry" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.experience_selection_telemetry" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"]; "ops.experience_selection_telemetry" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"]; "ops.experience_selection_telemetry" -> "butler.memory.memory_scope" [color="gray60", style="solid"]; "ops.experience_selection_telemetry" -> "butler.ops.experience_selection_telemetry_ops" [color="gray60", style="solid"]; "ops.experience_selection_telemetry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.experience_selection_telemetry_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"]; "ops.experience_selection_telemetry_ops" -> "butler.ops.experience_selection_telemetry" [color="gray60", style="solid"]; "ops.experiment_diagnostics" -> "butler.experiments.ledger" [color="gray60", style="solid"]; "ops.experiment_diagnostics" -> "butler.experiments.mode" [color="gray60", style="solid"]; "ops.experiment_diagnostics" -> "butler.ops.experiment_diagnostics_ops" [color="gray60", style="solid"]; "ops.experiment_diagnostics_ops" -> "butler.experiments.crash_guard" [color="gray60", style="solid"]; "ops.experiment_diagnostics_ops" -> "butler.ops.experiment_diagnostics" [color="gray60", style="solid"]; "ops.experiment_diagnostics_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "ops.g1_04_prod_evidence" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.g1_04_prod_evidence" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.g1_04_prod_evidence" -> "butler.ops.g1_04_prod_evidence_ops" [color="gray60", style="solid"]; "ops.g1_04_prod_evidence" -> "butler.ops.prod_experience_effectiveness" [color="gray60", style="solid"]; "ops.g1_04_prod_evidence_ops" -> "butler.ops.eval_actions" [color="gray60", style="solid"]; "ops.harness_diagnostics" -> "butler.ops.harness_diagnostics_ops" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.core.goal_loop" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.core.hashline" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.core.intent_keywords" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.core.rules_engine" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.core.todo_continuation" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.core.tool_pair_repair" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.delegate.category_resolver" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.ops.openclaw_diagnostics" [color="gray60", style="solid"]; "ops.harness_diagnostics_ops" -> "butler.ops.registry_diagnostics" [color="gray60", style="solid"]; "ops.head_to_head" -> "butler.ops.head_to_head_common" [color="gray60", style="solid"]; "ops.head_to_head_common" -> "butler.execution_context" [color="gray60", style="solid"]; "ops.head_to_head_common" -> "butler.ops.head_to_head_common_ops" [color="gray60", style="solid"]; "ops.head_to_head_common" -> "butler.project.manager" [color="gray60", style="solid"]; "ops.head_to_head_common" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "ops.head_to_head_common" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "ops.head_to_head_common" -> "butler.tools.registry" [color="gray60", style="solid"]; "ops.head_to_head_common_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.head_to_head_common_ops" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"]; "ops.head_to_head_common_ops" -> "butler.report" [color="gray60", style="solid"]; "ops.head_to_head_t1" -> "butler.ops.head_to_head" [color="gray60", style="solid"]; "ops.head_to_head_t1" -> "butler.ops.head_to_head_common" [color="gray60", style="solid"]; "ops.health_report" -> "butler.contracts.health_diagnostic_registry" [color="gray60", style="solid"]; "ops.health_report" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.health_report" -> "butler.core.context_budget" [color="gray60", style="solid"]; "ops.health_report" -> "butler.gateway.completion_notify" [color="gray60", style="solid"]; "ops.health_report" -> "butler.gateway.media_diagnostic_ops" [color="gray60", style="solid"]; "ops.health_report" -> "butler.gateway.queue_settings" [color="gray60", style="solid"]; "ops.health_report" -> "butler.hooks.telemetry" [color="gray60", style="solid"]; "ops.health_report" -> "butler.memory.diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.memory.prefetch_cache" [color="gray60", style="solid"]; "ops.health_report" -> "butler.model_resolve" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.boundary_observability" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.cost_calibration" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.degradation_registry" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.execution_surface_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.experiment_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.harness_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.health_report_input" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.health_report_turn" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.observation_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.rag_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.snapshot" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.stack_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.token_cost_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.transcript_diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.ops.usage_ledger" [color="gray60", style="solid"]; "ops.health_report" -> "butler.permissions.approvals" [color="gray60", style="solid"]; "ops.health_report" -> "butler.project.meta" [color="gray60", style="solid"]; "ops.health_report" -> "butler.resilience.message_queue" [color="gray60", style="solid"]; "ops.health_report" -> "butler.runtime.diagnostics" [color="gray60", style="solid"]; "ops.health_report" -> "butler.transport.provider_health" [color="gray60", style="solid"]; "ops.health_report" -> "butler.transport.stream_probe" [color="gray60", style="solid"]; "ops.health_report_input" -> "butler.contracts.health_report_input" [color="gray60", style="solid"]; "ops.health_report_input" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.configuration.context" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.contracts.health_diagnostic_registry" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.core.compaction_status" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.core.context_budget" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.core.pipeline_steps" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.core.schema_optimizer" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.ops.health_report_input" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.ops.retry_buckets" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.project.lead" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"]; "ops.health_report_turn" -> "butler.transport.stream_probe" [color="gray60", style="solid"]; "ops.langfuse_tracer" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.langfuse_tracer" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.langfuse_tracer" -> "butler.core.loop_types" [color="gray60", style="solid"]; "ops.langfuse_tracer" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.lingwen1_capture_probe" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "ops.lingwen1_capture_probe" -> "butler.ops.lingwen1_delegate_drill" [color="gray60", style="solid"]; "ops.lingwen1_delegate_drill" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.lingwen1_delegate_drill" -> "butler.execution_context" [color="gray60", style="solid"]; "ops.lingwen1_delegate_drill" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "ops.lingwen1_delegate_drill" -> "butler.project.manager" [color="gray60", style="solid"]; "ops.lingwen1_delegate_drill" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "ops.lingwen1_delegate_drill" -> "butler.tools.registry" [color="gray60", style="solid"]; "ops.lingwen1_failure_seed" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "ops.lingwen1_prod_sample" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"]; "ops.lingwen1_prod_sample" -> "butler.execution_context" [color="gray60", style="solid"]; "ops.lingwen1_prod_sample" -> "butler.ops.lingwen1_delegate_drill" [color="gray60", style="solid"]; "ops.lingwen1_prod_sample" -> "butler.project.manager" [color="gray60", style="solid"]; "ops.lingwen1_prod_sample" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "ops.lingwen1_prod_sample" -> "butler.tools.registry" [color="gray60", style="solid"]; "ops.memory_eval" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.memory_eval" -> "butler.ops.memory_eval_ops" [color="gray60", style="solid"]; "ops.memory_eval_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.memory_eval_ops" -> "butler.memory.memory_benchmark" [color="gray60", style="solid"]; "ops.memory_eval_ops" -> "butler.ops.memory_eval" [color="gray60", style="solid"]; "ops.memory_recall_diagnostics_ops" -> "butler.memory.observer_queue" [color="gray60", style="solid"]; "ops.memory_recall_diagnostics_ops" -> "butler.memory.unified_recall_config" [color="gray60", style="solid"]; "ops.memory_recall_diagnostics_ops" -> "butler.ops.rag_diagnostics_ops" [color="gray60", style="solid"]; "ops.memory_recall_diagnostics_ops" -> "butler.ops.transcript_diagnostics" [color="gray60", style="solid"]; "ops.morning_brief_push" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.morning_brief_push" -> "butler.gateway.owner_gate" [color="gray60", style="solid"]; "ops.morning_brief_push" -> "butler.ops.butler_inbox" [color="gray60", style="solid"]; "ops.morning_brief_push" -> "butler.orchestrator" [color="gray60", style="solid"]; "ops.morning_brief_push" -> "butler.runtime.notify" [color="gray60", style="solid"]; "ops.morning_brief_push" -> "butler.session.keys" [color="gray60", style="solid"]; "ops.observation_diagnostics" -> "butler.configuration.memory" [color="gray60", style="solid"]; "ops.observation_diagnostics" -> "butler.memory.observation_migrate" [color="gray60", style="solid"]; "ops.observation_diagnostics" -> "butler.memory.observation_store" [color="gray60", style="solid"]; "ops.observation_diagnostics" -> "butler.ops.observation_diagnostics_ops" [color="gray60", style="solid"]; "ops.observation_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.observation_diagnostics_ops" -> "butler.memory.observation_store" [color="gray60", style="solid"]; "ops.onboard" -> "butler.ops.deploy_profile" [color="gray60", style="solid"]; "ops.onboard" -> "butler.ops.onboard_ops" [color="gray60", style="solid"]; "ops.onboard_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.onboard_ops" -> "butler.ops.embedding_diagnostics" [color="gray60", style="solid"]; "ops.openclaw_diagnostics" -> "butler.ops.openclaw_diagnostics_ops" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.configuration.secrets" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.core.preemptive_compact" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.core.tool_loop_detect" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.gateway.bot_loop_guard" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.gateway.reply_admission" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.ops.terminal_sandbox_diagnostics" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.tools.terminal_approval" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.tools.terminal_danger" [color="gray60", style="solid"]; "ops.openclaw_diagnostics_ops" -> "butler.tools.terminal_pattern_approval" [color="gray60", style="solid"]; "ops.owner_brief_blocks" -> "butler.ops.owner_brief_blocks_ops" [color="gray60", style="solid"]; "ops.owner_brief_blocks_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.owner_brief_blocks_ops" -> "butler.runtime.service" [color="gray60", style="solid"]; "ops.owner_feedback" -> "butler.ops.eval_actions" [color="gray60", style="solid"]; "ops.owner_feedback" -> "butler.ops.owner_feedback_ops" [color="gray60", style="solid"]; "ops.owner_feedback_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.owner_feedback_ops" -> "butler.ops.owner_pmf_metrics" [color="gray60", style="solid"]; "ops.owner_pmf_metrics" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.owner_pmf_metrics" -> "butler.ops.owner_pmf_metrics_ops" [color="gray60", style="solid"]; "ops.owner_pmf_metrics" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.owner_pmf_metrics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.owner_pmf_metrics_ops" -> "butler.gateway.owner_delegate_shortcuts" [color="gray60", style="solid"]; "ops.owner_quality_surface" -> "butler.mcp.config" [color="gray60", style="solid"]; "ops.owner_quality_surface" -> "butler.ops.owner_quality_surface_ops" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.dev_engine.b9_tiers" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.mcp.config" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.mcp.diagnostics" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.mcp.manager" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.ops.b9_prod_weekly" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"]; "ops.owner_quality_surface_ops" -> "butler.registry.mcp_merge" [color="gray60", style="solid"]; "ops.owner_trust_surface" -> "butler.ops.owner_trust_surface_ops" [color="gray60", style="solid"]; "ops.owner_trust_surface_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.owner_trust_surface_ops" -> "butler.core.memory_source_surface" [color="gray60", style="solid"]; "ops.owner_trust_surface_ops" -> "butler.ops.boundary_observability" [color="gray60", style="solid"]; "ops.owner_trust_surface_ops" -> "butler.ops.execution_surface_diagnostics" [color="gray60", style="solid"]; "ops.owner_trust_surface_ops" -> "butler.ops.health_report" [color="gray60", style="solid"]; "ops.owner_trust_surface_ops" -> "butler.skills.injection_policy" [color="gray60", style="solid"]; "ops.prod_experience_effectiveness" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.prod_experience_effectiveness" -> "butler.ops.b9_prod_weekly" [color="gray60", style="solid"]; "ops.prod_experience_effectiveness" -> "butler.ops.production_failure_experience" [color="gray60", style="solid"]; "ops.production_failure_experience" -> "butler.dev_engine.b9_experience_retrieval" [color="gray60", style="solid"]; "ops.production_failure_experience" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"]; "ops.production_failure_experience" -> "butler.memory.memory_scope" [color="gray60", style="solid"]; "ops.production_failure_experience" -> "butler.ops.b9_lessons" [color="gray60", style="solid"]; "ops.production_failure_experience" -> "butler.ops.b9_prod_weekly" [color="gray60", style="solid"]; "ops.production_failure_experience" -> "butler.ops.production_failure_experience_ops" [color="gray60", style="solid"]; "ops.production_failure_experience_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.production_failure_experience_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"]; "ops.production_failure_experience_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "ops.rag_diagnostics" -> "butler.ops.rag_diagnostics_ops" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.mcp.profiles" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.memory.corpus_router" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.memory.corrective_recall" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.memory.query_decompose" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.memory.recall_scopes" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.memory.unified_recall_config" [color="gray60", style="solid"]; "ops.rag_diagnostics_ops" -> "butler.tools.web_fetch" [color="gray60", style="solid"]; "ops.registry_diagnostics" -> "butler.ops.registry_diagnostics_ops" [color="gray60", style="solid"]; "ops.registry_diagnostics_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.registry_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.registry_diagnostics_ops" -> "butler.ops.rag_diagnostics_ops" [color="gray60", style="solid"]; "ops.registry_diagnostics_ops" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "ops.registry_diagnostics_ops" -> "butler.registry.mcp_merge" [color="gray60", style="solid"]; "ops.registry_diagnostics_ops" -> "butler.registry.paths" [color="gray60", style="solid"]; "ops.registry_diagnostics_ops" -> "butler.registry.skill_service" [color="gray60", style="solid"]; "ops.registry_diagnostics_ops" -> "butler.registry.skill_sources.marketplace" [color="gray60", style="solid"]; "ops.retry_buckets" -> "butler.ops.retry_buckets_ops" [color="gray60", style="solid"]; "ops.retry_buckets" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "ops.retry_buckets_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "ops.runtime_metrics_sink" -> "butler.core.metrics_sink" [color="gray60", style="solid"]; "ops.runtime_metrics_sink" -> "butler.ops" [color="gray60", style="solid"]; "ops.secrets_contract" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.secrets_contract" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"]; "ops.secrets_contract" -> "butler.ops.secrets_contract_ops" [color="gray60", style="solid"]; "ops.secrets_contract_cli" -> "butler.ops.secrets_contract" [color="gray60", style="solid"]; "ops.secrets_contract_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.security_audit" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.security_audit" -> "butler.ops.security_audit_ops" [color="gray60", style="solid"]; "ops.security_audit_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.security_audit_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.security_audit_ops" -> "butler.mcp.config" [color="gray60", style="solid"]; "ops.security_audit_ops" -> "butler.ops.security_audit" [color="gray60", style="solid"]; "ops.security_audit_ops" -> "butler.ops.terminal_sandbox_diagnostics" [color="gray60", style="solid"]; "ops.snapshot" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.snapshot" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.snapshot" -> "butler.ops.snapshot_ops" [color="gray60", style="solid"]; "ops.snapshot_ops" -> "butler.runtime.failure_tracker" [color="gray60", style="solid"]; "ops.stack_diagnostics" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.stack_diagnostics" -> "butler.ops.stack_diagnostics_ops" [color="gray60", style="solid"]; "ops.stack_diagnostics_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.stack_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.stack_diagnostics_ops" -> "butler.memory.document_ingest" [color="gray60", style="solid"]; "ops.stack_diagnostics_ops" -> "butler.registry.marketplace_compat" [color="gray60", style="solid"]; "ops.stack_diagnostics_ops" -> "butler.registry.paths" [color="gray60", style="solid"]; "ops.stack_diagnostics_ops" -> "butler.registry.skill_lock" [color="gray60", style="solid"]; "ops.swebench_entry_gate" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.swebench_entry_gate" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.swebench_live_eval" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.swebench_live_eval" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"]; "ops.swebench_live_eval" -> "butler.dev_engine.llm_delegate_benchmark" [color="gray60", style="solid"]; "ops.swebench_live_eval" -> "butler.dev_engine.swe_curriculum" [color="gray60", style="solid"]; "ops.swebench_live_eval" -> "butler.dev_engine.swebench_lite" [color="gray60", style="solid"]; "ops.swebench_live_eval" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.swebench_live_eval" -> "butler.ops.swebench_live_eval_ops" [color="gray60", style="solid"]; "ops.swebench_live_eval" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.tcr_strict_readiness" -> "butler.ops.tcr_report" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics" -> "butler.ops.security_audit" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics" -> "butler.ops.terminal_sandbox_diagnostics_ops" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics" -> "butler.tools.terminal_sandbox" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics_ops" -> "butler.ops.env_profiles" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "ops.terminal_sandbox_diagnostics_ops" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "ops.token_cost_diagnostics" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "ops.tool_routing" -> "butler.ops.eval_scoring" [color="gray60", style="solid"]; "ops.tool_routing" -> "butler.ops.tool_routing_ops" [color="gray60", style="solid"]; "ops.tool_routing_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.tool_routing_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"]; "ops.transcript_diagnostics" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.transcript_diagnostics" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "ops.transcript_diagnostics" -> "butler.core.transcript_fts" [color="gray60", style="solid"]; "ops.usage_ledger" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.usage_ledger" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "ops.wechat_corpus_eval" -> "butler.configuration.settings" [color="gray60", style="solid"]; "ops.wechat_corpus_eval" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.wechat_corpus_eval" -> "butler.ops.wechat_corpus_eval_ops" [color="gray60", style="solid"]; "ops.wechat_corpus_eval_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "ops.wechat_corpus_eval_ops" -> "butler.ops.wechat_corpus_eval" [color="gray60", style="solid"]; "ops.wechat_dataset" -> "butler.ops.eval_bridge" [color="gray60", style="solid"]; "ops.wechat_dataset" -> "butler.ops.wechat_dataset_ops" [color="gray60", style="solid"]; "orchestrator" -> "butler.configuration.settings" [color="gray60", style="solid"]; "orchestrator" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"]; "orchestrator" -> "butler.memory" [color="gray60", style="solid"]; "orchestrator" -> "butler.memory.facade" [color="gray60", style="solid"]; "orchestrator" -> "butler.model_resolve" [color="gray60", style="solid"]; "orchestrator" -> "butler.orchestrator" [color="gray60", style="solid"]; "orchestrator" -> "butler.orchestrator.templates" [color="gray60", style="solid"]; "orchestrator" -> "butler.project.manager" [color="gray60", style="solid"]; "orchestrator" -> "butler.skills.router" [color="gray60", style="solid"]; "orchestrator" -> "butler.transport.llm_client" [color="gray60", style="solid"]; "orchestrator" -> "butler.workflows" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.agent_profiles" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.configuration.settings" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.core.loop_types" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.memory" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.model_resolve" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.orchestrator" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.orchestrator.loop_factory_ops" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.orchestrator.templates" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.plan.mode" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.transport.fallback" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.transport.llm_client" [color="gray60", style="solid"]; "orchestrator.loop_factory" -> "butler.transport.model_context" [color="gray60", style="solid"]; "orchestrator.loop_factory_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "orchestrator.loop_factory_ops" -> "butler.orchestrator" [color="gray60", style="solid"]; "orchestrator.loop_factory_ops" -> "butler.plan.mode" [color="gray60", style="solid"]; "orchestrator.loop_factory_ops" -> "butler.project.plugins" [color="gray60", style="solid"]; "orchestrator.memory_bridge" -> "butler.memory" [color="gray60", style="solid"]; "orchestrator.memory_bridge" -> "butler.orchestrator" [color="gray60", style="solid"]; "orchestrator.memory_bridge" -> "butler.orchestrator.memory_bridge_ops" [color="gray60", style="solid"]; "orchestrator.memory_bridge" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "orchestrator.memory_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "orchestrator.memory_bridge_ops" -> "butler.core.design_md_sections" [color="gray60", style="solid"]; "orchestrator.memory_bridge_ops" -> "butler.experiments.outcomes" [color="gray60", style="solid"]; "orchestrator.memory_bridge_ops" -> "butler.memory.facade" [color="gray60", style="solid"]; "orchestrator.memory_bridge_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"]; "orchestrator.memory_bridge_ops" -> "butler.orchestrator" [color="gray60", style="solid"]; "orchestrator.prompt_assembler" -> "butler.agent_profiles" [color="gray60", style="solid"]; "orchestrator.prompt_assembler" -> "butler.core.prompt_renderer" [color="gray60", style="solid"]; "orchestrator.prompt_assembler" -> "butler.model_resolve" [color="gray60", style="solid"]; "orchestrator.prompt_assembler" -> "butler.orchestrator" [color="gray60", style="solid"]; "orchestrator.prompt_assembler" -> "butler.orchestrator.prompt_assembler_ops" [color="gray60", style="solid"]; "orchestrator.prompt_assembler" -> "butler.orchestrator.templates" [color="gray60", style="solid"]; "orchestrator.prompt_assembler" -> "butler.project.meta" [color="gray60", style="solid"]; "orchestrator.prompt_assembler" -> "butler.workflows.loader" [color="gray60", style="solid"]; "orchestrator.prompt_assembler_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "orchestrator.prompt_assembler_ops" -> "butler.core.harness_flags" [color="gray60", style="solid"]; "orchestrator.prompt_assembler_ops" -> "butler.core.system_reminder" [color="gray60", style="solid"]; "orchestrator.skill_bridge" -> "butler.orchestrator" [color="gray60", style="solid"]; "orchestrator.skill_bridge" -> "butler.orchestrator.templates" [color="gray60", style="solid"]; "orchestrator.skill_bridge" -> "butler.skills.injection_policy" [color="gray60", style="solid"]; "orchestrator.skill_bridge" -> "butler.skills.router" [color="gray60", style="solid"]; "orchestrator.skill_bridge" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "orchestrator.templates" -> "butler.configuration.settings" [color="gray60", style="solid"]; "orchestrator.templates" -> "butler.orchestrator.templates_ops" [color="gray60", style="solid"]; "orchestrator.templates" -> "butler.project.manager" [color="gray60", style="solid"]; "orchestrator.templates" -> "butler.skills.fusion_wiring" [color="gray60", style="solid"]; "orchestrator.templates" -> "butler.skills.manager" [color="gray60", style="solid"]; "orchestrator.templates" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "orchestrator.templates_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "orchestrator.templates_ops" -> "butler.skills.injection_policy" [color="gray60", style="solid"]; "permissions" -> "butler.permissions.rules" [color="gray60", style="solid"]; "permissions" -> "butler.permissions.tool_boundary_registry" [color="gray60", style="solid"]; "permissions.approvals" -> "butler.configuration.settings" [color="gray60", style="solid"]; "permissions.approvals" -> "butler.io.safe_load" [color="gray60", style="solid"]; "permissions.approvals" -> "butler.permissions.rules" [color="gray60", style="solid"]; "permissions.approvals" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "permissions.doom_loop" -> "butler.permissions.approvals" [color="gray60", style="solid"]; "permissions.doom_loop" -> "butler.permissions.doom_loop_ops" [color="gray60", style="solid"]; "permissions.doom_loop" -> "butler.tool_guardrails" [color="gray60", style="solid"]; "permissions.doom_loop_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "permissions.doom_loop_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "permissions.human_gate" -> "butler.configuration.settings" [color="gray60", style="solid"]; "permissions.human_gate" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "permissions.human_gate" -> "butler.gate_reply_templates" [color="gray60", style="solid"]; "permissions.human_gate" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "permissions.human_gate" -> "butler.io.safe_load" [color="gray60", style="solid"]; "permissions.human_gate" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "permissions.human_gate_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "permissions.human_gate_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "permissions.human_gate_ops" -> "butler.workflows.runner" [color="gray60", style="solid"]; "permissions.rules" -> "butler.permissions.approvals" [color="gray60", style="solid"]; "permissions.rules" -> "butler.permissions.rules_context" [color="gray60", style="solid"]; "permissions.rules" -> "butler.permissions.rules_fail_closed" [color="gray60", style="solid"]; "permissions.rules" -> "butler.tools.project_tools" [color="gray60", style="solid"]; "permissions.rules_context" -> "butler.core.best_effort" [color="gray60", style="solid"]; "permissions.rules_context" -> "butler.core.tool_result_storage" [color="gray60", style="solid"]; "permissions.rules_context" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "permissions.rules_context" -> "butler.execution_context" [color="gray60", style="solid"]; "permissions.rules_context" -> "butler.hooks.runner" [color="gray60", style="solid"]; "permissions.rules_context" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "permissions.rules_fail_closed" -> "butler.permissions.rules_fail_closed_ops" [color="gray60", style="solid"]; "permissions.rules_fail_closed_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "permissions.rules_fail_closed_ops" -> "butler.experiments.mode" [color="gray60", style="solid"]; "permissions.rules_fail_closed_ops" -> "butler.permissions.rules" [color="gray60", style="solid"]; "permissions.rules_fail_closed_ops" -> "butler.permissions.rules_context" [color="gray60", style="solid"]; "permissions.tool_boundary_registry" -> "butler.permissions.tool_boundary_registry_ops" [color="gray60", style="solid"]; "permissions.tool_boundary_registry" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "plan.markdown_sync" -> "butler.plan.markdown_sync_ops" [color="gray60", style="solid"]; "plan.markdown_sync_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "plan.markdown_sync_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "plan.markdown_sync_ops" -> "butler.plan.markdown_sync" [color="gray60", style="solid"]; "plan.markdown_sync_ops" -> "butler.plan.mode" [color="gray60", style="solid"]; "plan.mode" -> "butler.plan.mode_ops" [color="gray60", style="solid"]; "plan.mode" -> "butler.tool_guardrails" [color="gray60", style="solid"]; "plan.mode_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "plan.mode_ops" -> "butler.core.reasoning_trace" [color="gray60", style="solid"]; "plan.mode_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "plan.mode_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "plan.mode_ops" -> "butler.plan.store" [color="gray60", style="solid"]; "plan.store" -> "butler.configuration.settings" [color="gray60", style="solid"]; "project" -> "butler.project.model" [color="gray60", style="solid"]; "project.archetypes" -> "butler.configuration.settings" [color="gray60", style="solid"]; "project.archetypes" -> "butler.memory.reindex" [color="gray60", style="solid"]; "project.lead" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "project.lead" -> "butler.project.manager" [color="gray60", style="solid"]; "project.lead" -> "butler.project.model" [color="gray60", style="solid"]; "project.manager" -> "butler.configuration.settings" [color="gray60", style="solid"]; "project.manager" -> "butler.core.container" [color="gray60", style="solid"]; "project.manager" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "project.manager" -> "butler.project.archetypes" [color="gray60", style="solid"]; "project.manager" -> "butler.project.manager_ops" [color="gray60", style="solid"]; "project.manager" -> "butler.project.model" [color="gray60", style="solid"]; "project.manager" -> "butler.project.policy_env" [color="gray60", style="solid"]; "project.manager" -> "butler.session.keys" [color="gray60", style="solid"]; "project.manager_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "project.manager_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "project.manager_ops" -> "butler.project.model" [color="gray60", style="solid"]; "project.manager_ops" -> "butler.session.keys" [color="gray60", style="solid"]; "project.maturity" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "project.maturity" -> "butler.project.manager" [color="gray60", style="solid"]; "project.maturity" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "project.maturity_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "project.maturity_ops" -> "butler.project.maturity" [color="gray60", style="solid"]; "project.maturity_ops" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "project.meta" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "project.meta" -> "butler.project.lead" [color="gray60", style="solid"]; "project.meta" -> "butler.project.model" [color="gray60", style="solid"]; "project.meta" -> "butler.project.policy_env" [color="gray60", style="solid"]; "project.model" -> "butler.configuration.settings" [color="gray60", style="solid"]; "project.model" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "project.model" -> "butler.model_resolve" [color="gray60", style="solid"]; "project.model" -> "butler.project.plugins" [color="gray60", style="solid"]; "project.model" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "project.plugins" -> "butler.project.model" [color="gray60", style="solid"]; "project.policy_env" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "project.policy_env" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "project.preflight" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "project.preflight" -> "butler.project.lead" [color="gray60", style="solid"]; "project.preflight" -> "butler.project.manager" [color="gray60", style="solid"]; "project.preflight" -> "butler.project.model" [color="gray60", style="solid"]; "project.preflight" -> "butler.project.preflight_ops" [color="gray60", style="solid"]; "project.preflight_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "project.preflight_ops" -> "butler.ops.execution_surface_diagnostics" [color="gray60", style="solid"]; "project.preflight_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "project.preflight_ops" -> "butler.project.model" [color="gray60", style="solid"]; "project.worktree" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "project.worktree" -> "butler.project.worktree_ops" [color="gray60", style="solid"]; "project.worktree" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "project.worktree_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "prompt_eval" -> "butler.prompt_eval.runner" [color="gray60", style="solid"]; "prompt_eval.corpus_bridge" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"]; "prompt_eval.corpus_bridge" -> "butler.core.loop_types" [color="gray60", style="solid"]; "prompt_eval.corpus_bridge" -> "butler.prompt_eval.corpus_bridge_ops" [color="gray60", style="solid"]; "prompt_eval.corpus_bridge" -> "butler.tools.registry" [color="gray60", style="solid"]; "prompt_eval.corpus_bridge" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "prompt_eval.llm_rubric" -> "butler.prompt_eval.llm_rubric_ops" [color="gray60", style="solid"]; "prompt_eval.llm_rubric" -> "butler.prompt_eval.runner" [color="gray60", style="solid"]; "prompt_eval.llm_rubric" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "prompt_eval.llm_rubric_ops" -> "butler.prompt_eval.runner" [color="gray60", style="solid"]; "prompt_eval.llm_rubric_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"]; "prompt_eval.runner" -> "butler.prompt_eval.llm_rubric" [color="gray60", style="solid"]; "provider_presets" -> "butler.configuration.provider_presets" [color="gray60", style="solid"]; "provider_presets_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "registry" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "registry" -> "butler.registry.skill_service" [color="gray60", style="solid"]; "registry.audit" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.catalog_integrity" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.catalog_integrity" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.catalog_integrity" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "registry.hub_index_cache" -> "butler.configuration.settings" [color="gray60", style="solid"]; "registry.hub_index_cache" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.hub_index_cache" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "registry.hub_manifest" -> "butler.registry.hub_manifest_ops" [color="gray60", style="solid"]; "registry.hub_manifest" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "registry.hub_manifest_ops" -> "butler.registry.catalog_integrity" [color="gray60", style="solid"]; "registry.hub_manifest_ops" -> "butler.registry.install_scan" [color="gray60", style="solid"]; "registry.hub_manifest_ops" -> "butler.registry.mcp_catalog_remote" [color="gray60", style="solid"]; "registry.hub_manifest_ops" -> "butler.registry.mcp_install" [color="gray60", style="solid"]; "registry.install_pending" -> "butler.configuration.settings" [color="gray60", style="solid"]; "registry.install_pending" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "registry.install_pending" -> "butler.io.safe_load" [color="gray60", style="solid"]; "registry.install_pending" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "registry.install_scan" -> "butler.mcp.config" [color="gray60", style="solid"]; "registry.install_scan" -> "butler.mcp.types" [color="gray60", style="solid"]; "registry.install_scan" -> "butler.registry.install_scan_ops" [color="gray60", style="solid"]; "registry.install_scan" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "registry.install_scan" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.install_scan" -> "butler.skills.guard" [color="gray60", style="solid"]; "registry.install_scan" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "registry.install_scan_ops" -> "butler.mcp.config" [color="gray60", style="solid"]; "registry.install_scan_ops" -> "butler.mcp.types" [color="gray60", style="solid"]; "registry.marketplace_compat" -> "butler.registry.marketplace_compat_ops" [color="gray60", style="solid"]; "registry.marketplace_compat" -> "butler.registry.skill_sources.marketplace" [color="gray60", style="solid"]; "registry.marketplace_compat_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "registry.marketplace_compat_ops" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.mcp_catalog" -> "butler.registry.mcp_catalog_ops" [color="gray60", style="solid"]; "registry.mcp_catalog" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.mcp_catalog_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "registry.mcp_catalog_ops" -> "butler.registry.catalog_integrity" [color="gray60", style="solid"]; "registry.mcp_catalog_ops" -> "butler.registry.mcp_catalog_remote" [color="gray60", style="solid"]; "registry.mcp_catalog_remote" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.mcp_catalog_remote" -> "butler.registry.hub_index_cache" [color="gray60", style="solid"]; "registry.mcp_catalog_remote" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "registry.mcp_catalog_remote" -> "butler.registry.mcp_catalog_remote_ops" [color="gray60", style="solid"]; "registry.mcp_catalog_remote" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "registry.mcp_install" -> "butler.mcp.config" [color="gray60", style="solid"]; "registry.mcp_install" -> "butler.registry.audit" [color="gray60", style="solid"]; "registry.mcp_install" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "registry.mcp_install" -> "butler.registry.mcp_install_ops" [color="gray60", style="solid"]; "registry.mcp_install" -> "butler.registry.mcp_merge" [color="gray60", style="solid"]; "registry.mcp_install" -> "butler.registry.mcp_project_tools" [color="gray60", style="solid"]; "registry.mcp_install" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.mcp_install_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.mcp_install_ops" -> "butler.mcp.config" [color="gray60", style="solid"]; "registry.mcp_install_ops" -> "butler.mcp.manager" [color="gray60", style="solid"]; "registry.mcp_install_ops" -> "butler.registry.install_scan" [color="gray60", style="solid"]; "registry.mcp_install_ops" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "registry.mcp_merge" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.mcp_merge" -> "butler.mcp.config" [color="gray60", style="solid"]; "registry.mcp_merge" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "registry.mcp_merge" -> "butler.registry.mcp_merge_ops" [color="gray60", style="solid"]; "registry.mcp_merge" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.mcp_merge_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "registry.mcp_merge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "registry.mcp_merge_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "registry.mcp_merge_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "registry.mcp_project_tools" -> "butler.mcp.naming" [color="gray60", style="solid"]; "registry.mcp_project_tools" -> "butler.project" [color="gray60", style="solid"]; "registry.mcp_project_tools" -> "butler.registry.mcp_project_tools_ops" [color="gray60", style="solid"]; "registry.mcp_project_tools_ops" -> "butler.mcp.config" [color="gray60", style="solid"]; "registry.mcp_project_tools_ops" -> "butler.mcp.manager" [color="gray60", style="solid"]; "registry.mcp_project_tools_ops" -> "butler.project" [color="gray60", style="solid"]; "registry.mcp_ssot" -> "butler.configuration.settings" [color="gray60", style="solid"]; "registry.mcp_ssot" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "registry.mcp_ssot" -> "butler.registry.mcp_install" [color="gray60", style="solid"]; "registry.mcp_ssot" -> "butler.registry.mcp_merge" [color="gray60", style="solid"]; "registry.paths" -> "butler.configuration.settings" [color="gray60", style="solid"]; "registry.paths" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.paths" -> "butler.registry.registry_paths_ops" [color="gray60", style="solid"]; "registry.paths" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "registry.registry_errors" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.registry_paths_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "registry.registry_paths_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "registry.registry_paths_ops" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "registry.skill_install" -> "butler.registry.audit" [color="gray60", style="solid"]; "registry.skill_install" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.skill_install" -> "butler.registry.skill_lock" [color="gray60", style="solid"]; "registry.skill_install" -> "butler.registry.skill_normalize" [color="gray60", style="solid"]; "registry.skill_install" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_install" -> "butler.skills.guard" [color="gray60", style="solid"]; "registry.skill_install" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "registry.skill_lock" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.skill_lock" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_lock" -> "butler.tools._file_cache" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.marketplace_compat" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.registry_errors" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_install" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_lock" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_service_ops" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_sources" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_sources.clawhub" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_sources.lobehub" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_sources.marketplace" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.registry.skills_project_sync" [color="gray60", style="solid"]; "registry.skill_service" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "registry.skill_service_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "registry.skill_service_ops" -> "butler.registry.catalog_integrity" [color="gray60", style="solid"]; "registry.skill_service_ops" -> "butler.registry.install_scan" [color="gray60", style="solid"]; "registry.skill_service_ops" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_service_ops" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_sources" -> "butler.registry.skill_sources.bundled" [color="gray60", style="solid"]; "registry.skill_sources" -> "butler.registry.skill_sources.clawhub" [color="gray60", style="solid"]; "registry.skill_sources" -> "butler.registry.skill_sources.github" [color="gray60", style="solid"]; "registry.skill_sources" -> "butler.registry.skill_sources.lobehub" [color="gray60", style="solid"]; "registry.skill_sources" -> "butler.registry.skill_sources.marketplace" [color="gray60", style="solid"]; "registry.skill_sources" -> "butler.registry.skill_sources.project" [color="gray60", style="solid"]; "registry.skill_sources" -> "butler.registry.skill_sources.url" [color="gray60", style="solid"]; "registry.skill_sources.base" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources.bundled" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.skill_sources.bundled" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_sources.bundled" -> "butler.registry.skill_sources.bundled_ops" [color="gray60", style="solid"]; "registry.skill_sources.bundled" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources.bundled_ops" -> "butler.registry.mcp_catalog_ops" [color="gray60", style="solid"]; "registry.skill_sources.clawhub" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.skill_sources.clawhub" -> "butler.registry.hub_index_cache" [color="gray60", style="solid"]; "registry.skill_sources.clawhub" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_sources.clawhub" -> "butler.registry.skill_sources.clawhub_ops" [color="gray60", style="solid"]; "registry.skill_sources.clawhub" -> "butler.registry.skill_sources.zip_safety" [color="gray60", style="solid"]; "registry.skill_sources.clawhub" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources.clawhub" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "registry.skill_sources.github" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_sources.github" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources.github" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "registry.skill_sources.lobehub" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.skill_sources.lobehub" -> "butler.registry.hub_index_cache" [color="gray60", style="solid"]; "registry.skill_sources.lobehub" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_sources.lobehub" -> "butler.registry.skill_sources.lobehub_ops" [color="gray60", style="solid"]; "registry.skill_sources.lobehub" -> "butler.registry.skill_sources.zip_safety" [color="gray60", style="solid"]; "registry.skill_sources.lobehub" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources.lobehub" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "registry.skill_sources.lobehub_ops" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "registry.skill_sources.marketplace" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.skill_sources.marketplace" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_sources.marketplace" -> "butler.registry.skill_sources.github" [color="gray60", style="solid"]; "registry.skill_sources.marketplace" -> "butler.registry.skill_sources.marketplace_ops" [color="gray60", style="solid"]; "registry.skill_sources.marketplace" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources.marketplace" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "registry.skill_sources.marketplace_ops" -> "butler.registry.mcp_catalog_ops" [color="gray60", style="solid"]; "registry.skill_sources.project" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_sources.project" -> "butler.registry.skill_sources.github" [color="gray60", style="solid"]; "registry.skill_sources.project" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources.url" -> "butler.registry.skill_sources.base" [color="gray60", style="solid"]; "registry.skill_sources.url" -> "butler.registry.skill_sources.url_ops" [color="gray60", style="solid"]; "registry.skill_sources.url" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skill_sources.url" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "registry.skill_sources.url_ops" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "registry.skills_project_sync" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "registry.skills_project_sync" -> "butler.registry.paths" [color="gray60", style="solid"]; "registry.skills_project_sync" -> "butler.registry.skill_lock" [color="gray60", style="solid"]; "registry.skills_project_sync" -> "butler.registry.skill_types" [color="gray60", style="solid"]; "registry.skills_project_sync" -> "butler.registry.skills_project_sync_ops" [color="gray60", style="solid"]; "registry.skills_project_sync" -> "butler.skills.layout" [color="gray60", style="solid"]; "registry.skills_project_sync_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "registry.skills_project_sync_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "registry.skills_project_sync_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "registry.skills_ssot" -> "butler.configuration.settings" [color="gray60", style="solid"]; "registry.skills_ssot" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "registry.skills_ssot" -> "butler.registry.skill_lock" [color="gray60", style="solid"]; "registry.url_safety" -> "butler.registry.url_safety_ops" [color="gray60", style="solid"]; "repo_paths" -> "butler.utilities.repo_paths" [color="gray60", style="solid"]; "report" -> "butler.report.generator" [color="gray60", style="solid"]; "report.acceptance_card" -> "butler.delegate.task_kind" [color="gray60", style="solid"]; "report.acceptance_card" -> "butler.report.report_types" [color="gray60", style="solid"]; "report.format" -> "butler.core.loop_types" [color="gray60", style="solid"]; "report.format" -> "butler.execution_context" [color="gray60", style="solid"]; "report.format" -> "butler.report.format_ops" [color="gray60", style="solid"]; "report.format" -> "butler.report.generator" [color="gray60", style="solid"]; "report.format_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "report.format_ops" -> "butler.core.transcript_export" [color="gray60", style="solid"]; "report.generator" -> "butler.report.acceptance_card" [color="gray60", style="solid"]; "report.generator" -> "butler.report.generator_ops" [color="gray60", style="solid"]; "report.generator" -> "butler.report.generator_schema" [color="gray60", style="solid"]; "report.generator" -> "butler.report.report_types" [color="gray60", style="solid"]; "report.generator_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "report.generator_ops" -> "butler.core.confirm_flags" [color="gray60", style="solid"]; "report.generator_ops" -> "butler.core.meta_flags" [color="gray60", style="solid"]; "report.generator_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "report.generator_ops" -> "butler.report.generator_schema" [color="gray60", style="solid"]; "report.generator_ops" -> "butler.report.store" [color="gray60", style="solid"]; "report.generator_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "report.generator_ops" -> "butler.transport.types" [color="gray60", style="solid"]; "report.generator_schema" -> "butler.report.generator_ops" [color="gray60", style="solid"]; "report.store" -> "butler.configuration.settings" [color="gray60", style="solid"]; "report.store" -> "butler.report.generator" [color="gray60", style="solid"]; "resilience.durable_outbox" -> "butler.configuration.settings" [color="gray60", style="solid"]; "resilience.durable_outbox" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "resilience.durable_outbox" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "resilience.durable_outbox" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "resilience.inbound_idempotency" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "resilience.inbound_idempotency" -> "butler.resilience.inbound_idempotency_ops" [color="gray60", style="solid"]; "resilience.inbound_idempotency" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "resilience.inbound_idempotency_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "resilience.inbound_idempotency_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "resilience.inbound_idempotency_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "resilience.message_queue" -> "butler.configuration.settings" [color="gray60", style="solid"]; "resilience.message_queue" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "resilience.message_queue" -> "butler.gateway.queue_settings" [color="gray60", style="solid"]; "resilience.message_queue" -> "butler.resilience.message_queue_ops" [color="gray60", style="solid"]; "resilience.message_queue" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "resilience.message_queue_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "resilience.message_queue_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "resilience.message_queue_ops" -> "butler.gateway.queue_settings" [color="gray60", style="solid"]; "resilience.message_queue_ops" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "resilience.message_queue_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "runtime" -> "butler.runtime.service" [color="gray60", style="solid"]; "runtime.approval" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.approval" -> "butler.runtime.schema" [color="gray60", style="solid"]; "runtime.async_delegate" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "runtime.async_delegate" -> "butler.runtime.async_delegate_ops" [color="gray60", style="solid"]; "runtime.async_delegate" -> "butler.runtime.delegate_job" [color="gray60", style="solid"]; "runtime.async_delegate" -> "butler.runtime.delegate_job_types" [color="gray60", style="solid"]; "runtime.async_delegate" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "runtime.async_delegate_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.async_delegate_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "runtime.audit" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.audit" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "runtime.audit" -> "butler.io.safe_load" [color="gray60", style="solid"]; "runtime.builtin_handlers" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.builtin_handlers" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "runtime.builtin_handlers" -> "butler.io.safe_load" [color="gray60", style="solid"]; "runtime.builtin_handlers" -> "butler.memory.butler_memory" [color="gray60", style="solid"]; "runtime.builtin_handlers" -> "butler.memory.experience_mining" [color="gray60", style="solid"]; "runtime.builtin_handlers" -> "butler.tools.consistency_summary_ops" [color="gray60", style="solid"]; "runtime.builtin_handlers" -> "butler.tools.project_todos_drift_ops" [color="gray60", style="solid"]; "runtime.cc_bridge" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.cc_bridge" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "runtime.cc_bridge" -> "butler.runtime.cc_bridge_ops" [color="gray60", style="solid"]; "runtime.cc_bridge" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "runtime.cc_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.cc_bridge_ops" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"]; "runtime.cc_bridge_ops" -> "butler.runtime.notify" [color="gray60", style="solid"]; "runtime.consistency_outcome" -> "butler.io.safe_load" [color="gray60", style="solid"]; "runtime.consistency_outcome" -> "butler.runtime.schema" [color="gray60", style="solid"]; "runtime.delegate_async_result" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.execution_context" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.gateway.completion_notify" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.report" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.report.acceptance_card" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.runtime.delegate_async_result" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.runtime.delegate_job_body" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.runtime.delegate_job_finalize" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.runtime.delegate_job_types" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.runtime.delegate_progress" [color="gray60", style="solid"]; "runtime.delegate_job" -> "butler.runtime.notify" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.execution_context" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.report" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.report.acceptance_card" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.runtime.delegate_job" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.runtime.delegate_job_finalize" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.runtime.delegate_registry" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.tools.builtin_impl" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.tools.delegate_phases" [color="gray60", style="solid"]; "runtime.delegate_job_body" -> "butler.tools.registry" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.ops.langfuse_tracer" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.project.manager" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.runtime.delegate_job_finalize_ops" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.tools.delegate_phases" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.tools.git_tools" [color="gray60", style="solid"]; "runtime.delegate_job_finalize" -> "butler.tools.registry" [color="gray60", style="solid"]; "runtime.delegate_job_finalize_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.delegate_progress" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "runtime.delegate_progress" -> "butler.runtime.delegate_job" [color="gray60", style="solid"]; "runtime.delegate_progress" -> "butler.runtime.delegate_progress_ops" [color="gray60", style="solid"]; "runtime.delegate_progress" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "runtime.delegate_progress_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.delegate_progress_ops" -> "butler.gateway.completion_notify" [color="gray60", style="solid"]; "runtime.delegate_progress_ops" -> "butler.runtime.delegate_job" [color="gray60", style="solid"]; "runtime.delegate_progress_ops" -> "butler.runtime.delegate_progress" [color="gray60", style="solid"]; "runtime.delegate_progress_ops" -> "butler.runtime.notify" [color="gray60", style="solid"]; "runtime.delegate_registry" -> "butler.runtime.delegate_registry_ops" [color="gray60", style="solid"]; "runtime.delegate_registry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.diagnostics" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.diagnostics" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "runtime.diagnostics" -> "butler.project.manager" [color="gray60", style="solid"]; "runtime.diagnostics" -> "butler.runtime" [color="gray60", style="solid"]; "runtime.diagnostics" -> "butler.runtime.diagnostics_ops" [color="gray60", style="solid"]; "runtime.diagnostics_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.diagnostics_ops" -> "butler.runtime.failure_tracker" [color="gray60", style="solid"]; "runtime.failure_tracker" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.failure_tracker" -> "butler.runtime.failure_tracker_ops" [color="gray60", style="solid"]; "runtime.failure_tracker" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "runtime.failure_tracker_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.failure_tracker_ops" -> "butler.runtime.notify" [color="gray60", style="solid"]; "runtime.loader" -> "butler.io.safe_load" [color="gray60", style="solid"]; "runtime.loader" -> "butler.runtime.schema" [color="gray60", style="solid"]; "runtime.notify" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.notify" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "runtime.notify" -> "butler.gateway.owner_gate" [color="gray60", style="solid"]; "runtime.notify" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"]; "runtime.notify" -> "butler.io.safe_load" [color="gray60", style="solid"]; "runtime.notify" -> "butler.mcp.async_runner" [color="gray60", style="solid"]; "runtime.notify" -> "butler.runtime.notify_ops" [color="gray60", style="solid"]; "runtime.notify" -> "butler.runtime.push_queue" [color="gray60", style="solid"]; "runtime.notify" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "runtime.push_queue" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.push_queue" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "runtime.push_queue" -> "butler.runtime.notify" [color="gray60", style="solid"]; "runtime.runner" -> "butler.runtime.builtin_handlers" [color="gray60", style="solid"]; "runtime.runner" -> "butler.runtime.consistency_outcome" [color="gray60", style="solid"]; "runtime.runner" -> "butler.runtime.schema" [color="gray60", style="solid"]; "runtime.runner" -> "butler.runtime.summary_enrich" [color="gray60", style="solid"]; "runtime.runner" -> "butler.runtime.workflow_version" [color="gray60", style="solid"]; "runtime.service" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "runtime.service" -> "butler.gateway.wechat_text_export" [color="gray60", style="solid"]; "runtime.service" -> "butler.project.manager" [color="gray60", style="solid"]; "runtime.service" -> "butler.runtime" [color="gray60", style="solid"]; "runtime.service" -> "butler.runtime.schema" [color="gray60", style="solid"]; "runtime.service" -> "butler.runtime.service_ops" [color="gray60", style="solid"]; "runtime.service_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "runtime.service_ops" -> "butler.experiments.ledger" [color="gray60", style="solid"]; "runtime.service_ops" -> "butler.runtime.failure_tracker" [color="gray60", style="solid"]; "runtime.service_ops" -> "butler.runtime.push_queue" [color="gray60", style="solid"]; "runtime.summary_enrich" -> "butler.experiments.metrics" [color="gray60", style="solid"]; "runtime.summary_enrich" -> "butler.runtime.schema" [color="gray60", style="solid"]; "runtime.task_store" -> "butler.configuration.settings" [color="gray60", style="solid"]; "runtime.task_store" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "runtime.task_store" -> "butler.delegate.subagent_permissions" [color="gray60", style="solid"]; "runtime.task_store" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "runtime.task_store" -> "butler.io.safe_load" [color="gray60", style="solid"]; "runtime.task_store" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "runtime.workflow_version" -> "butler.io.safe_load" [color="gray60", style="solid"]; "session" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "session" -> "butler.session.lifecycle_manager" [color="gray60", style="solid"]; "session" -> "butler.session.new_session" [color="gray60", style="solid"]; "session" -> "butler.session.post_session_ops" [color="gray60", style="solid"]; "session" -> "butler.session.session_monitor" [color="gray60", style="solid"]; "session" -> "butler.session.session_resume" [color="gray60", style="solid"]; "session" -> "butler.session.session_store" [color="gray60", style="solid"]; "session.lifecycle" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "session.lifecycle" -> "butler.session" [color="gray60", style="solid"]; "session.lifecycle" -> "butler.session.lifecycle_ops" [color="gray60", style="solid"]; "session.lifecycle_manager" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "session.lifecycle_manager" -> "butler.session.new_session" [color="gray60", style="solid"]; "session.lifecycle_manager" -> "butler.session.post_session_ops" [color="gray60", style="solid"]; "session.lifecycle_manager" -> "butler.session.session_resume" [color="gray60", style="solid"]; "session.lifecycle_manager" -> "butler.session.session_store" [color="gray60", style="solid"]; "session.lifecycle_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "session.lifecycle_ops" -> "butler.core.post_commit" [color="gray60", style="solid"]; "session.lifecycle_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "session.lifecycle_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"]; "session.lifecycle_ops" -> "butler.memory.observer_queue" [color="gray60", style="solid"]; "session.lifecycle_ops" -> "butler.memory.private_tags" [color="gray60", style="solid"]; "session.memory_prefetch" -> "butler.core.memory_context_adapter" [color="gray60", style="solid"]; "session.memory_prefetch" -> "butler.execution_context" [color="gray60", style="solid"]; "session.memory_prefetch" -> "butler.memory.facade_ops" [color="gray60", style="solid"]; "session.memory_prefetch" -> "butler.memory.prefetch_cache" [color="gray60", style="solid"]; "session.memory_prefetch" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "session.memory_prefetch" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "session.memory_prefetch" -> "butler.session.memory_prefetch_ops" [color="gray60", style="solid"]; "session.memory_prefetch" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.core.input_stage" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.core.instruction_walkup" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.core.pim_state" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.core.reflection_closure" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.core.session_recall_intent" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.mcp.github_grounding" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.coding_recall" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.injection_guard" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.metrics_persist" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.prefetch_retrieval_metrics" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.project_memory" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.recall_router" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.retrieval_telemetry" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.semantic_config" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.semantic_project" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.unified_recall" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.memory.unified_recall_config" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.ops.langfuse_tracer" [color="gray60", style="solid"]; "session.memory_prefetch_ops" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "session.new_session" -> "butler.core.best_effort" [color="gray60", style="solid"]; "session.new_session" -> "butler.core.tool_result_cache" [color="gray60", style="solid"]; "session.new_session" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "session.new_session" -> "butler.memory.prefetch_cache" [color="gray60", style="solid"]; "session.new_session" -> "butler.memory.semantic_memory" [color="gray60", style="solid"]; "session.new_session" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "session.new_session" -> "butler.session.new_session_ops" [color="gray60", style="solid"]; "session.new_session" -> "butler.session.post_session_ops" [color="gray60", style="solid"]; "session.new_session" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "session.new_session_ops" -> "butler.contracts.inbound_idempotency_registry" [color="gray60", style="solid"]; "session.new_session_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "session.new_session_ops" -> "butler.core.tool_result_storage" [color="gray60", style="solid"]; "session.new_session_ops" -> "butler.hooks.runner" [color="gray60", style="solid"]; "session.new_session_ops" -> "butler.memory.retrieval_telemetry" [color="gray60", style="solid"]; "session.post_session" -> "butler.memory.private_tags" [color="gray60", style="solid"]; "session.post_session" -> "butler.memory.semantic_project" [color="gray60", style="solid"]; "session.post_session" -> "butler.session.post_session_extract_ops" [color="gray60", style="solid"]; "session.post_session_extract_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "session.post_session_extract_ops" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "session.post_session_extract_ops" -> "butler.session.post_session_layered" [color="gray60", style="solid"]; "session.post_session_guard" -> "butler.session.post_session_guard_ops" [color="gray60", style="solid"]; "session.post_session_layered" -> "butler.session.post_session" [color="gray60", style="solid"]; "session.post_session_layered" -> "butler.session.post_session_layered_ops" [color="gray60", style="solid"]; "session.post_session_layered" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "session.post_session_layered_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.hooks.runner" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.session.new_session" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.session.post_session" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.session.post_session_guard" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"]; "session.post_session_ops" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "session.session_monitor" -> "butler.core.container" [color="gray60", style="solid"]; "session.session_monitor" -> "butler.core.events.event_store" [color="gray60", style="solid"]; "session.session_monitor" -> "butler.session.session_store" [color="gray60", style="solid"]; "session.session_resume" -> "butler.core.conversation_state" [color="gray60", style="solid"]; "session.session_resume" -> "butler.session.session_store" [color="gray60", style="solid"]; "skills" -> "butler.skills.consolidator" [color="gray60", style="solid"]; "skills" -> "butler.skills.manager" [color="gray60", style="solid"]; "skills" -> "butler.skills.router" [color="gray60", style="solid"]; "skills" -> "butler.skills.similarity" [color="gray60", style="solid"]; "skills.experience_pointers" -> "butler.mcp.naming" [color="gray60", style="solid"]; "skills.fusion_wiring" -> "butler.skills.fusion_wiring_ops" [color="gray60", style="solid"]; "skills.fusion_wiring" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "skills.fusion_wiring_ops" -> "butler.transport.fusion_client" [color="gray60", style="solid"]; "skills.injection_policy" -> "butler.core.best_effort" [color="gray60", style="solid"]; "skills.injection_policy" -> "butler.core.session_recall_intent" [color="gray60", style="solid"]; "skills.injection_policy" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "skills.injection_policy" -> "butler.ops.degradation_registry_ops" [color="gray60", style="solid"]; "skills.injection_policy" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "skills.injection_policy" -> "butler.session.memory_prefetch" [color="gray60", style="solid"]; "skills.injection_policy" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "skills.learn" -> "butler.skills.learn_ops" [color="gray60", style="solid"]; "skills.learn_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"]; "skills.manager" -> "butler.skills.manager" [color="gray60", style="solid"]; "skills.manager.manager" -> "butler.skills.consolidator" [color="gray60", style="solid"]; "skills.manager.manager" -> "butler.skills.guard" [color="gray60", style="solid"]; "skills.manager.manager" -> "butler.skills.layout" [color="gray60", style="solid"]; "skills.manager.manager" -> "butler.skills.manager_ops" [color="gray60", style="solid"]; "skills.manager.manager" -> "butler.skills.similarity" [color="gray60", style="solid"]; "skills.manager.manager" -> "butler.skills.usage" [color="gray60", style="solid"]; "skills.manager_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "skills.manager_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"]; "skills.manager_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "skills.manager_ops" -> "butler.skills.guard" [color="gray60", style="solid"]; "skills.manager_ops" -> "butler.skills.write_approval" [color="gray60", style="solid"]; "skills.router" -> "butler.memory.embedding" [color="gray60", style="solid"]; "skills.router" -> "butler.skills.router_ops" [color="gray60", style="solid"]; "skills.router" -> "butler.skills.similarity" [color="gray60", style="solid"]; "skills.router_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "skills.router_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "skills.router_ops" -> "butler.memory.embedding" [color="gray60", style="solid"]; "skills.seed_bundled" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "skills.similarity" -> "butler.skills.similarity_ops" [color="gray60", style="solid"]; "skills.similarity_ops" -> "butler.skills.similarity" [color="gray60", style="solid"]; "skills.write_approval" -> "butler.configuration.settings" [color="gray60", style="solid"]; "skills.write_approval" -> "butler.skills.write_approval_ops" [color="gray60", style="solid"]; "skills.write_approval" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "skills.write_approval_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.configuration.settings" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.core.delegate_context" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.core.meta_flags" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.dag_scheduler" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.delegate.policy" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.execution_context" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.orchestrator" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.report" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.task_orchestrator_ops" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.tools.project_tools" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.tools.registry" [color="gray60", style="solid"]; "task_orchestrator" -> "butler.workflows.step_runner" [color="gray60", style="solid"]; "task_orchestrator_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "task_orchestrator_ops" -> "butler.core.meta_flags" [color="gray60", style="solid"]; "task_orchestrator_ops" -> "butler.core.workflow_flags" [color="gray60", style="solid"]; "task_orchestrator_ops" -> "butler.task_orchestrator" [color="gray60", style="solid"]; "tenant" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "tool_guardrails" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tool_guardrails" -> "butler.tool_guardrails_ops" [color="gray60", style="solid"]; "tool_guardrails" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tool_guardrails_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tool_guardrails_ops" -> "butler.core.tool_loop_detect" [color="gray60", style="solid"]; "tool_guardrails_ops" -> "butler.core.tool_result_classification" [color="gray60", style="solid"]; "tool_guardrails_ops" -> "butler.tool_guardrails" [color="gray60", style="solid"]; "tools.audit_persist" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.audit_persist" -> "butler.tools.audit_persist_ops" [color="gray60", style="solid"]; "tools.audit_persist_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.audit_persist_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.builtin_impl" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.builtin_impl" -> "butler.report" [color="gray60", style="solid"]; "tools.builtin_impl" -> "butler.tools.builtin_impl_ops" [color="gray60", style="solid"]; "tools.builtin_impl" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "tools.builtin_impl" -> "butler.tools.file_io" [color="gray60", style="solid"]; "tools.builtin_impl" -> "butler.tools.terminal_impl" [color="gray60", style="solid"]; "tools.builtin_impl" -> "butler.workflows.runner" [color="gray60", style="solid"]; "tools.builtin_impl_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.builtin_impl_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.core.transcript_search" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.extensions.opencode" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.mcp.deferred" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.builtin_impl" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.builtin_register_ops" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.config_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.contacts" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.conversation_state_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.data_query" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.delegate_yield_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.document_reader" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.download_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.execute_code" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.expense" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.git_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.habits" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.knowledge_search" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.mcp_self_service" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.memo" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.memory_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.multimodal_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.project_todos" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.registry" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.registry_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.reminder" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.runtime_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.safe_root" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.session_todos_tools" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.tool_schemas" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.web_fetch" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.web_search" [color="gray60", style="solid"]; "tools.builtin_register" -> "butler.tools.workflow_tools" [color="gray60", style="solid"]; "tools.builtin_register_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.builtin_register_ops" -> "butler.core.harness_flags" [color="gray60", style="solid"]; "tools.builtin_register_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"]; "tools.builtin_register_ops" -> "butler.tools.builtin_register" [color="gray60", style="solid"]; "tools.butlerignore" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.butlerignore" -> "butler.tools.butlerignore_ops" [color="gray60", style="solid"]; "tools.butlerignore_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.butlerignore_ops" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "tools.config_tools" -> "butler.configuration.service" [color="gray60", style="solid"]; "tools.config_tools" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.config_tools" -> "butler.session.keys" [color="gray60", style="solid"]; "tools.contacts" -> "butler.tools.pim_schema" [color="gray60", style="solid"]; "tools.contacts" -> "butler.tools.tenant_store" [color="gray60", style="solid"]; "tools.conversation_state_tools" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"]; "tools.conversation_state_tools" -> "butler.core.conversation_state" [color="gray60", style="solid"]; "tools.conversation_state_tools" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.conversation_state_tools" -> "butler.memory.semantic_index" [color="gray60", style="solid"]; "tools.data_query" -> "butler.tools.data_query_ops" [color="gray60", style="solid"]; "tools.data_query" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "tools.data_query" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.data_query_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.delegate.policy" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.hooks.runner" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.memory.corrective_recall" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.report" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.tools.delegate_delete_gate" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.tools.delegate_orchestrator" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.tools.delegate_phases" [color="gray60", style="solid"]; "tools.delegate_impl" -> "butler.tools.registry" [color="gray60", style="solid"]; "tools.delegate_orchestrator" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.delegate_orchestrator" -> "butler.orchestrator" [color="gray60", style="solid"]; "tools.delegate_phases" -> "butler.dev_engine.delegate_finalize" [color="gray60", style="solid"]; "tools.delegate_phases" -> "butler.tools.delegate_prepare" [color="gray60", style="solid"]; "tools.delegate_phases" -> "butler.tools.delegate_record" [color="gray60", style="solid"]; "tools.delegate_phases" -> "butler.tools.delegate_report" [color="gray60", style="solid"]; "tools.delegate_phases" -> "butler.tools.delegate_run" [color="gray60", style="solid"]; "tools.delegate_phases" -> "butler.tools.delegate_run_state" [color="gray60", style="solid"]; "tools.delegate_phases" -> "butler.tools.delegate_subagent" [color="gray60", style="solid"]; "tools.delegate_prepare" -> "butler.core.handoff" [color="gray60", style="solid"]; "tools.delegate_prepare" -> "butler.delegate.category_resolver" [color="gray60", style="solid"]; "tools.delegate_prepare" -> "butler.delegate.policy" [color="gray60", style="solid"]; "tools.delegate_prepare" -> "butler.tools.delegate_prepare_ops" [color="gray60", style="solid"]; "tools.delegate_prepare" -> "butler.tools.delegate_role_guard" [color="gray60", style="solid"]; "tools.delegate_prepare" -> "butler.tools.delegate_run_state" [color="gray60", style="solid"]; "tools.delegate_prepare_ops" -> "butler.agent_profiles" [color="gray60", style="solid"]; "tools.delegate_prepare_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_prepare_ops" -> "butler.core.intent_keywords" [color="gray60", style="solid"]; "tools.delegate_prepare_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"]; "tools.delegate_prepare_ops" -> "butler.tools.delegate_run_state" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.core.delegate_semaphore" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.dev_engine.delegate_init" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.dev_engine.delegate_workspace" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.tools.delegate_record_ops" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.tools.delegate_role_guard" [color="gray60", style="solid"]; "tools.delegate_record" -> "butler.tools.delegate_run_state" [color="gray60", style="solid"]; "tools.delegate_record_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_record_ops" -> "butler.hooks.runner" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.dev_engine.delegate_finalize" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.project.manager" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.project.maturity_ops" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.report" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.report.acceptance_card" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.session.lifecycle" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.tools.delegate_report_ops" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.tools.delegate_run_state" [color="gray60", style="solid"]; "tools.delegate_report" -> "butler.tools.delegate_summary_budget" [color="gray60", style="solid"]; "tools.delegate_report_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_report_ops" -> "butler.ops.delegate_failure_capture" [color="gray60", style="solid"]; "tools.delegate_report_ops" -> "butler.ops.delegate_judge" [color="gray60", style="solid"]; "tools.delegate_report_ops" -> "butler.ops.langfuse_tracer" [color="gray60", style="solid"]; "tools.delegate_report_ops" -> "butler.ops.owner_pmf_metrics" [color="gray60", style="solid"]; "tools.delegate_role_guard" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.delegate_role_guard" -> "butler.tools.delegate_phases" [color="gray60", style="solid"]; "tools.delegate_role_guard" -> "butler.tools.delegate_role_guard_ops" [color="gray60", style="solid"]; "tools.delegate_role_guard" -> "butler.tools.network_search_policy" [color="gray60", style="solid"]; "tools.delegate_role_guard" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.delegate_role_guard_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_role_guard_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"]; "tools.delegate_role_guard_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.delegate_role_guard_ops" -> "butler.project.lead" [color="gray60", style="solid"]; "tools.delegate_run" -> "butler.core.delegate_semaphore" [color="gray60", style="solid"]; "tools.delegate_run" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.delegate_run" -> "butler.runtime.async_delegate" [color="gray60", style="solid"]; "tools.delegate_run" -> "butler.runtime.delegate_async_result" [color="gray60", style="solid"]; "tools.delegate_run" -> "butler.runtime.delegate_job_types" [color="gray60", style="solid"]; "tools.delegate_run" -> "butler.runtime.delegate_registry" [color="gray60", style="solid"]; "tools.delegate_run" -> "butler.tools.delegate_run_ops" [color="gray60", style="solid"]; "tools.delegate_run" -> "butler.tools.delegate_run_state" [color="gray60", style="solid"]; "tools.delegate_run_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_run_ops" -> "butler.ops.langfuse_tracer" [color="gray60", style="solid"]; "tools.delegate_run_ops" -> "butler.runtime.delegate_registry" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.core.cache_safe_delegate" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.core.delegate_context" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.delegate.policy" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.delegate.subagent_permissions" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.tools.delegate_impl" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.tools.delegate_run_state" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.tools.delegate_subagent_ops" [color="gray60", style="solid"]; "tools.delegate_subagent" -> "butler.tools.project_tools" [color="gray60", style="solid"]; "tools.delegate_subagent_ops" -> "butler.agent_profiles" [color="gray60", style="solid"]; "tools.delegate_subagent_ops" -> "butler.agents_md" [color="gray60", style="solid"]; "tools.delegate_subagent_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_subagent_ops" -> "butler.delegate.policy" [color="gray60", style="solid"]; "tools.delegate_subagent_ops" -> "butler.tools.delegate_run_state" [color="gray60", style="solid"]; "tools.delegate_summary_budget" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.delegate_summary_budget" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.delegate_yield_tools" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "tools.delegate_yield_tools" -> "butler.tools.delegate_yield_tools_ops" [color="gray60", style="solid"]; "tools.delegate_yield_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.delegate_yield_tools_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.delegate_yield_tools_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"]; "tools.document_reader" -> "butler.tools.document_reader_ops" [color="gray60", style="solid"]; "tools.document_reader" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "tools.download_tools" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.download_tools" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "tools.execute_code" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.execute_code" -> "butler.tools.execute_code_ops" [color="gray60", style="solid"]; "tools.execute_code" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.execute_code_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.execute_code_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.expense" -> "butler.tools.pim_schema" [color="gray60", style="solid"]; "tools.expense" -> "butler.tools.tenant_store" [color="gray60", style="solid"]; "tools.experience_selector" -> "butler.memory.experience.domain_router" [color="gray60", style="solid"]; "tools.experience_selector" -> "butler.memory.experience.store" [color="gray60", style="solid"]; "tools.experience_selector" -> "butler.memory.experience.tree" [color="gray60", style="solid"]; "tools.file_io" -> "butler.core.hashline" [color="gray60", style="solid"]; "tools.file_io" -> "butler.core.read_file_partial" [color="gray60", style="solid"]; "tools.file_io" -> "butler.core.read_state" [color="gray60", style="solid"]; "tools.file_io" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.file_io" -> "butler.project.maturity" [color="gray60", style="solid"]; "tools.file_io" -> "butler.tools.file_io_ops" [color="gray60", style="solid"]; "tools.file_io" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "tools.file_io_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.file_io_ops" -> "butler.core.hashline" [color="gray60", style="solid"]; "tools.file_io_ops" -> "butler.core.instruction_walkup" [color="gray60", style="solid"]; "tools.file_io_ops" -> "butler.core.post_edit_format" [color="gray60", style="solid"]; "tools.file_io_ops" -> "butler.core.read_state" [color="gray60", style="solid"]; "tools.git_tools" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.git_tools" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "tools.git_tools" -> "butler.tools.terminal_approval" [color="gray60", style="solid"]; "tools.habits" -> "butler.tools._file_cache" [color="gray60", style="solid"]; "tools.habits" -> "butler.tools.pim_schema" [color="gray60", style="solid"]; "tools.habits" -> "butler.tools.tenant_store" [color="gray60", style="solid"]; "tools.interrupt" -> "butler.core.interrupt" [color="gray60", style="solid"]; "tools.knowledge_search" -> "butler.memory.search_result" [color="gray60", style="solid"]; "tools.knowledge_search" -> "butler.tools.knowledge_search_ops" [color="gray60", style="solid"]; "tools.knowledge_search" -> "butler.tools.memory_tools" [color="gray60", style="solid"]; "tools.knowledge_search_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.knowledge_search_ops" -> "butler.memory.corpus_router" [color="gray60", style="solid"]; "tools.knowledge_search_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "tools.mcp_self_service" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.mcp_self_service" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "tools.mcp_self_service" -> "butler.registry.mcp_install" [color="gray60", style="solid"]; "tools.mcp_self_service" -> "butler.tools.mcp_self_service_ops" [color="gray60", style="solid"]; "tools.mcp_self_service_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.mcp_self_service_ops" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"]; "tools.mcp_self_service_ops" -> "butler.mcp.extension_verify" [color="gray60", style="solid"]; "tools.mcp_self_service_ops" -> "butler.tools.project_todos" [color="gray60", style="solid"]; "tools.memo" -> "butler.tools.pim_schema" [color="gray60", style="solid"]; "tools.memo" -> "butler.tools.tenant_store" [color="gray60", style="solid"]; "tools.memory_tools" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.memory_tools" -> "butler.memory.facade" [color="gray60", style="solid"]; "tools.memory_tools" -> "butler.memory.memory_benchmark" [color="gray60", style="solid"]; "tools.memory_tools" -> "butler.memory.memory_metrics" [color="gray60", style="solid"]; "tools.memory_tools" -> "butler.tools.memory_tools_ops" [color="gray60", style="solid"]; "tools.memory_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.memory_tools_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.multimodal_tools" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.multimodal_tools" -> "butler.tools.multimodal_tools_ops" [color="gray60", style="solid"]; "tools.multimodal_tools" -> "butler.transport.multimodal.minimax_image_gen" [color="gray60", style="solid"]; "tools.multimodal_tools" -> "butler.transport.multimodal.minimax_tts" [color="gray60", style="solid"]; "tools.multimodal_tools" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.network_route_verify" -> "butler.tools.network_route_verify_ops" [color="gray60", style="solid"]; "tools.network_route_verify" -> "butler.tools.network_search_policy" [color="gray60", style="solid"]; "tools.network_route_verify" -> "butler.tools.web_search_probe" [color="gray60", style="solid"]; "tools.network_route_verify_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.network_search_policy" -> "butler.tools.network_search_policy_ops" [color="gray60", style="solid"]; "tools.network_search_policy" -> "butler.tools.web_search" [color="gray60", style="solid"]; "tools.network_search_policy" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.network_search_policy_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.network_search_policy_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"]; "tools.network_search_policy_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.network_search_policy_ops" -> "butler.mcp.github_grounding" [color="gray60", style="solid"]; "tools.network_search_policy_ops" -> "butler.tools.project_tools" [color="gray60", style="solid"]; "tools.orthogonality_lint" -> "butler.memory.embedding" [color="gray60", style="solid"]; "tools.orthogonality_lint" -> "butler.tools.orthogonality_lint_ops" [color="gray60", style="solid"]; "tools.orthogonality_lint" -> "butler.tools.registry" [color="gray60", style="solid"]; "tools.orthogonality_lint_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.orthogonality_lint_ops" -> "butler.mcp.config" [color="gray60", style="solid"]; "tools.orthogonality_lint_ops" -> "butler.mcp.registry_hook" [color="gray60", style="solid"]; "tools.orthogonality_lint_ops" -> "butler.memory.embedding" [color="gray60", style="solid"]; "tools.orthogonality_lint_ops" -> "butler.tools.registry" [color="gray60", style="solid"]; "tools.path_safety" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.path_safety" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.path_safety" -> "butler.tools.path_safety_ops" [color="gray60", style="solid"]; "tools.path_safety" -> "butler.tools.tool_scope" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.core.tool_result_storage" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.permissions" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.project.worktree" [color="gray60", style="solid"]; "tools.path_safety_ops" -> "butler.tools.butlerignore" [color="gray60", style="solid"]; "tools.project_todos" -> "butler.tools.project_todos_ops" [color="gray60", style="solid"]; "tools.project_todos_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.project_todos_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.project_tools" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.project_tools" -> "butler.project" [color="gray60", style="solid"]; "tools.project_tools" -> "butler.project.manager" [color="gray60", style="solid"]; "tools.project_tools" -> "butler.tools.project_tools_ops" [color="gray60", style="solid"]; "tools.project_tools" -> "butler.tools.registry" [color="gray60", style="solid"]; "tools.project_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.project_tools_ops" -> "butler.core.schema_optimizer" [color="gray60", style="solid"]; "tools.project_tools_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"]; "tools.project_tools_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.project_tools_ops" -> "butler.extensions.opencode" [color="gray60", style="solid"]; "tools.project_tools_ops" -> "butler.mcp.naming" [color="gray60", style="solid"]; "tools.project_tools_ops" -> "butler.permissions" [color="gray60", style="solid"]; "tools.project_tools_ops" -> "butler.project" [color="gray60", style="solid"]; "tools.registry" -> "butler.contracts.tool_registry_registry" [color="gray60", style="solid"]; "tools.registry" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.registry" -> "butler.core.effects" [color="gray60", style="solid"]; "tools.registry" -> "butler.core.session_recall_intent" [color="gray60", style="solid"]; "tools.registry" -> "butler.mcp.registry_hook" [color="gray60", style="solid"]; "tools.registry" -> "butler.plan.mode" [color="gray60", style="solid"]; "tools.registry" -> "butler.tools.builtin_impl" [color="gray60", style="solid"]; "tools.registry" -> "butler.tools.builtin_register" [color="gray60", style="solid"]; "tools.registry" -> "butler.tools.registry_gates" [color="gray60", style="solid"]; "tools.registry" -> "butler.tools.registry_invoke_ops" [color="gray60", style="solid"]; "tools.registry" -> "butler.tools.tool_audit" [color="gray60", style="solid"]; "tools.registry" -> "butler.tools.tool_doc_templates" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.core.preread_context" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.core.session_recall_intent" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.core.tool_error_policy" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.hooks.runner" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.mcp.config" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.mcp.registry_hook" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.permissions" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.tools.network_search_policy" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.tools.registry_invoke_ops" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.tools.tool_arg_normalize" [color="gray60", style="solid"]; "tools.registry_gates" -> "butler.tools.toolset_profiles" [color="gray60", style="solid"]; "tools.registry_invoke_ops" -> "butler.core.effects" [color="gray60", style="solid"]; "tools.registry_invoke_ops" -> "butler.tools.registry_gates" [color="gray60", style="solid"]; "tools.registry_invoke_ops" -> "butler.tools.tool_implicit_context" [color="gray60", style="solid"]; "tools.registry_tools" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.registry_tools" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"]; "tools.registry_tools" -> "butler.registry.skill_service" [color="gray60", style="solid"]; "tools.registry_tools" -> "butler.session.keys" [color="gray60", style="solid"]; "tools.registry_tools" -> "butler.tools.registry_tools_ops" [color="gray60", style="solid"]; "tools.registry_tools_ops" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.registry_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.reminder" -> "butler.tools.pim_schema" [color="gray60", style="solid"]; "tools.reminder" -> "butler.tools.tenant_store" [color="gray60", style="solid"]; "tools.reminder" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "tools.runtime_tools" -> "butler.runtime" [color="gray60", style="solid"]; "tools.runtime_tools" -> "butler.runtime.service" [color="gray60", style="solid"]; "tools.runtime_tools" -> "butler.tools.runtime_tools_ops" [color="gray60", style="solid"]; "tools.runtime_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.runtime_tools_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.runtime_tools_ops" -> "butler.project.manager" [color="gray60", style="solid"]; "tools.safe_root" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "tools.session_todos_tools" -> "butler.core.session_todos" [color="gray60", style="solid"]; "tools.session_todos_tools" -> "butler.tools.session_todos_tools_ops" [color="gray60", style="solid"]; "tools.session_todos_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.session_todos_tools_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.tenant_store" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.tenant_store" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.tenant_store" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "tools.tenant_store" -> "butler.tools._file_cache" [color="gray60", style="solid"]; "tools.tenant_store" -> "butler.tools.tenant_store_ops" [color="gray60", style="solid"]; "tools.tenant_store" -> "butler.utilities.tenant" [color="gray60", style="solid"]; "tools.tenant_store_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.terminal_approval" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.terminal_approval" -> "butler.contracts.approval_registry" [color="gray60", style="solid"]; "tools.terminal_approval" -> "butler.contracts.approval_store_impl" [color="gray60", style="solid"]; "tools.terminal_approval" -> "butler.core.approval_cards" [color="gray60", style="solid"]; "tools.terminal_approval" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.terminal_approval" -> "butler.permissions.approvals" [color="gray60", style="solid"]; "tools.terminal_approval" -> "butler.tools.terminal_approval_ops" [color="gray60", style="solid"]; "tools.terminal_approval_ops" -> "butler.core.auto_review" [color="gray60", style="solid"]; "tools.terminal_approval_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.terminal_approval_ops" -> "butler.tools.command_canonicalize" [color="gray60", style="solid"]; "tools.terminal_danger" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.terminal_danger" -> "butler.execpolicy.engine" [color="gray60", style="solid"]; "tools.terminal_danger" -> "butler.tools.terminal_danger_ops" [color="gray60", style="solid"]; "tools.terminal_danger_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.terminal_danger_ops" -> "butler.execpolicy" [color="gray60", style="solid"]; "tools.terminal_danger_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.terminal_danger_ops" -> "butler.tools.terminal_pattern_approval" [color="gray60", style="solid"]; "tools.terminal_impl" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.terminal_impl" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.terminal_impl" -> "butler.tools.interrupt" [color="gray60", style="solid"]; "tools.terminal_impl" -> "butler.tools.path_safety" [color="gray60", style="solid"]; "tools.terminal_impl" -> "butler.tools.terminal_approval" [color="gray60", style="solid"]; "tools.terminal_impl" -> "butler.tools.terminal_impl_ops" [color="gray60", style="solid"]; "tools.terminal_impl" -> "butler.tools.terminal_sandbox" [color="gray60", style="solid"]; "tools.terminal_impl_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.terminal_impl_ops" -> "butler.core.tool_orchestrator" [color="gray60", style="solid"]; "tools.terminal_impl_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "tools.terminal_pattern_approval" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.terminal_pattern_approval" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.terminal_pattern_approval" -> "butler.permissions.approvals" [color="gray60", style="solid"]; "tools.terminal_pattern_approval" -> "butler.tools.terminal_pattern_approval_ops" [color="gray60", style="solid"]; "tools.terminal_pattern_approval" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.terminal_pattern_approval_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.terminal_sandbox" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.terminal_sandbox" -> "butler.core.approval_cards" [color="gray60", style="solid"]; "tools.terminal_sandbox" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.terminal_sandbox" -> "butler.tools.butlerignore" [color="gray60", style="solid"]; "tools.terminal_sandbox" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.tool_audit" -> "butler.contracts.tool_registry_registry" [color="gray60", style="solid"]; "tools.tool_audit" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "tools.tool_audit" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.tool_audit" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.tool_audit" -> "butler.tools.tool_audit_ops" [color="gray60", style="solid"]; "tools.tool_audit_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.tool_audit_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "tools.tool_audit_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.tool_audit_ops" -> "butler.hooks.runner" [color="gray60", style="solid"]; "tools.tool_audit_ops" -> "butler.memory.observer_queue" [color="gray60", style="solid"]; "tools.tool_discovery" -> "butler.memory.embedding" [color="gray60", style="solid"]; "tools.tool_discovery" -> "butler.tools.registry" [color="gray60", style="solid"]; "tools.tool_discovery" -> "butler.tools.tool_taxonomy" [color="gray60", style="solid"]; "tools.tool_implicit_context" -> "butler.tools.tool_implicit_context_ops" [color="gray60", style="solid"]; "tools.tool_implicit_context" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.tool_implicit_context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "tools.tool_implicit_context_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.tool_schemas" -> "butler.tools.file_io" [color="gray60", style="solid"]; "tools.tool_schemas" -> "butler.tools.terminal_impl" [color="gray60", style="solid"]; "tools.tool_scope" -> "butler.configuration.settings" [color="gray60", style="solid"]; "tools.tool_scope" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.tool_scope" -> "butler.project.policy_env" [color="gray60", style="solid"]; "tools.tool_scope" -> "butler.tools.path_safety_ops" [color="gray60", style="solid"]; "tools.tool_service" -> "butler.tools.experience_selector" [color="gray60", style="solid"]; "tools.tool_service" -> "butler.tools.registry" [color="gray60", style="solid"]; "tools.tool_service" -> "butler.tools.tool_call_optimizer" [color="gray60", style="solid"]; "tools.tool_service" -> "butler.tools.tool_discovery" [color="gray60", style="solid"]; "tools.tool_service" -> "butler.tools.tool_metrics" [color="gray60", style="solid"]; "tools.tool_service" -> "butler.tools.tool_taxonomy" [color="gray60", style="solid"]; "tools.tool_taxonomy" -> "butler.memory.experience.domain_router" [color="gray60", style="solid"]; "tools.tool_taxonomy" -> "butler.tools.registry" [color="gray60", style="solid"]; "tools.tool_validation" -> "butler.core.effects" [color="gray60", style="solid"]; "tools.tool_validation" -> "butler.tools.file_io" [color="gray60", style="solid"]; "tools.tool_validation" -> "butler.tools.terminal_impl" [color="gray60", style="solid"]; "tools.toolset_profiles" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.web_fetch" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "tools.web_fetch" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "tools.web_fetch" -> "butler.tools.web_fetch_ops" [color="gray60", style="solid"]; "tools.web_fetch" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.web_fetch_ops" -> "butler.registry.url_safety" [color="gray60", style="solid"]; "tools.web_search" -> "butler.tools.web_search_ops" [color="gray60", style="solid"]; "tools.web_search" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "tools.web_search_probe" -> "butler.tools.web_search" [color="gray60", style="solid"]; "tools.workflow_tools" -> "butler.execution_context" [color="gray60", style="solid"]; "tools.workflow_tools" -> "butler.workflows.loader" [color="gray60", style="solid"]; "transport" -> "butler.transport.types" [color="gray60", style="solid"]; "transport.anthropic_transport" -> "butler.transport" [color="gray60", style="solid"]; "transport.anthropic_transport" -> "butler.transport.base" [color="gray60", style="solid"]; "transport.anthropic_transport" -> "butler.transport.cache_control" [color="gray60", style="solid"]; "transport.anthropic_transport" -> "butler.transport.schema_sanitizer" [color="gray60", style="solid"]; "transport.anthropic_transport" -> "butler.transport.types" [color="gray60", style="solid"]; "transport.auxiliary_client" -> "butler.configuration.settings" [color="gray60", style="solid"]; "transport.auxiliary_client" -> "butler.defaults.model_defaults" [color="gray60", style="solid"]; "transport.auxiliary_client" -> "butler.model_resolve" [color="gray60", style="solid"]; "transport.auxiliary_client" -> "butler.transport.auxiliary_client_ops" [color="gray60", style="solid"]; "transport.auxiliary_client" -> "butler.transport.llm_client" [color="gray60", style="solid"]; "transport.auxiliary_client_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "transport.auxiliary_client_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "transport.auxiliary_client_ops" -> "butler.ops.cost_tracker" [color="gray60", style="solid"]; "transport.base" -> "butler.transport.types" [color="gray60", style="solid"]; "transport.cache_control" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "transport.cache_control" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "transport.chat_completions" -> "butler.transport" [color="gray60", style="solid"]; "transport.chat_completions" -> "butler.transport.base" [color="gray60", style="solid"]; "transport.chat_completions" -> "butler.transport.reasoning_replay" [color="gray60", style="solid"]; "transport.chat_completions" -> "butler.transport.schema_sanitizer" [color="gray60", style="solid"]; "transport.chat_completions" -> "butler.transport.types" [color="gray60", style="solid"]; "transport.fallback" -> "butler.configuration.settings" [color="gray60", style="solid"]; "transport.fallback" -> "butler.transport.llm_client" [color="gray60", style="solid"]; "transport.fusion_client" -> "butler.configuration.settings" [color="gray60", style="solid"]; "transport.fusion_client" -> "butler.defaults.model_defaults" [color="gray60", style="solid"]; "transport.fusion_client" -> "butler.model_resolve" [color="gray60", style="solid"]; "transport.fusion_client" -> "butler.transport.fusion_client_ops" [color="gray60", style="solid"]; "transport.fusion_client" -> "butler.transport.llm_client" [color="gray60", style="solid"]; "transport.fusion_client_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "transport.fusion_client_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "transport.fusion_client_ops" -> "butler.ops.cost_tracker" [color="gray60", style="solid"]; "transport.fusion_client_ops" -> "butler.skills.consolidator" [color="gray60", style="solid"]; "transport.interruptible_client" -> "butler.transport.interruptible_client_ops" [color="gray60", style="solid"]; "transport.llm_client" -> "butler.transport" [color="gray60", style="solid"]; "transport.llm_client" -> "butler.transport.anthropic_transport" [color="gray60", style="solid"]; "transport.llm_client" -> "butler.transport.interruptible_client" [color="gray60", style="solid"]; "transport.llm_client" -> "butler.transport.llm_client_ops" [color="gray60", style="solid"]; "transport.llm_client" -> "butler.transport.providers" [color="gray60", style="solid"]; "transport.llm_client" -> "butler.transport.streaming_signal" [color="gray60", style="solid"]; "transport.llm_client" -> "butler.transport.think_scrubber" [color="gray60", style="solid"]; "transport.llm_client" -> "butler.transport.types" [color="gray60", style="solid"]; "transport.llm_client_ops" -> "butler.transport.thinking_headers" [color="gray60", style="solid"]; "transport.llm_client_ops" -> "butler.transport.tool_wire" [color="gray60", style="solid"]; "transport.memory_context_scrubber" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "transport.provider_health" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "transport.provider_health" -> "butler.transport.fallback" [color="gray60", style="solid"]; "transport.provider_health" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "transport.providers" -> "butler.defaults.model_defaults" [color="gray60", style="solid"]; "transport.reasoning_replay" -> "butler.transport.reasoning_replay_ops" [color="gray60", style="solid"]; "transport.reasoning_replay_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "transport.stream_probe" -> "butler.core.metrics_sink" [color="gray60", style="solid"]; "transport.stream_probe" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "transport.stream_probe" -> "butler.transport.stream_probe_ops" [color="gray60", style="solid"]; "transport.stream_probe" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "transport.stream_probe_ops" -> "butler.transport.llm_client" [color="gray60", style="solid"]; "transport.streaming_signal" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "transport.streaming_signal" -> "butler.transport.streaming_signal_ops" [color="gray60", style="solid"]; "transport.streaming_signal" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "transport.streaming_signal_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "transport.thinking_headers" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "transport.thinking_headers" -> "butler.transport.model_capabilities" [color="gray60", style="solid"]; "transport.thinking_headers" -> "butler.transport.thinking_protocol" [color="gray60", style="solid"]; "transport.thinking_protocol" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "transport.thinking_protocol" -> "butler.transport.model_capabilities" [color="gray60", style="solid"]; "transport.thinking_protocol" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "transport.tool_wire" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "transport.tool_wire" -> "butler.transport" [color="gray60", style="solid"]; "transport.tool_wire" -> "butler.transport.model_capabilities" [color="gray60", style="solid"]; "transport.tool_wire" -> "butler.transport.tool_wire_ops" [color="gray60", style="solid"]; "transport.tool_wire" -> "butler.transport.types" [color="gray60", style="solid"]; "transport.tool_wire" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "transport.tool_wire_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "transport.types" -> "butler.transport.content_sanitize" [color="gray60", style="solid"]; "transport.usage_normalize" -> "butler.transport.types" [color="gray60", style="solid"]; "utilities.env_parse" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "utilities.logging_config" -> "butler.defaults.env_defaults" [color="gray60", style="solid"]; "utilities.tenant" -> "butler.configuration.settings" [color="gray60", style="solid"]; "utilities.tenant" -> "butler.project" [color="gray60", style="solid"]; "utilities.tenant" -> "butler.tools.reminder" [color="gray60", style="solid"]; "workflow_step_runner" -> "butler.workflows.step_runner" [color="gray60", style="solid"]; "workflow_step_runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "workflow_step_runner_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "workflow_step_runner_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"]; "workflow_step_runner_ops" -> "butler.task_orchestrator" [color="gray60", style="solid"]; "workflow_step_runner_ops" -> "butler.workflows.until_assert" [color="gray60", style="solid"]; "workflows" -> "butler.workflows.loader" [color="gray60", style="solid"]; "workflows" -> "butler.workflows.runner" [color="gray60", style="solid"]; "workflows" -> "butler.workflows.schema" [color="gray60", style="solid"]; "workflows.callbacks" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"]; "workflows.callbacks" -> "butler.report" [color="gray60", style="solid"]; "workflows.callbacks" -> "butler.workflows.callbacks_ops" [color="gray60", style="solid"]; "workflows.commands" -> "butler.workflows.loader" [color="gray60", style="solid"]; "workflows.commands" -> "butler.workflows.runner" [color="gray60", style="solid"]; "workflows.loader" -> "butler.project" [color="gray60", style="solid"]; "workflows.loader" -> "butler.workflows.schema" [color="gray60", style="solid"]; "workflows.pause_state" -> "butler.configuration.settings" [color="gray60", style="solid"]; "workflows.runner" -> "butler.contracts.workflow_gate_registry" [color="gray60", style="solid"]; "workflows.runner" -> "butler.core.plan_snapshot" [color="gray60", style="solid"]; "workflows.runner" -> "butler.execution_context" [color="gray60", style="solid"]; "workflows.runner" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"]; "workflows.runner" -> "butler.model_resolve" [color="gray60", style="solid"]; "workflows.runner" -> "butler.orchestrator" [color="gray60", style="solid"]; "workflows.runner" -> "butler.report" [color="gray60", style="solid"]; "workflows.runner" -> "butler.task_orchestrator" [color="gray60", style="solid"]; "workflows.runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "workflows.runner" -> "butler.workflows" [color="gray60", style="solid"]; "workflows.runner" -> "butler.workflows.loader" [color="gray60", style="solid"]; "workflows.runner" -> "butler.workflows.schema" [color="gray60", style="solid"]; "workflows.runner" -> "butler.workflows.variables" [color="gray60", style="solid"]; "workflows.runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"]; "workflows.runner_ops" -> "butler.core.meta_flags" [color="gray60", style="solid"]; "workflows.runner_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"]; "workflows.runner_ops" -> "butler.execution_context" [color="gray60", style="solid"]; "workflows.runner_ops" -> "butler.experiments.outcomes" [color="gray60", style="solid"]; "workflows.runner_ops" -> "butler.workflows.callbacks" [color="gray60", style="solid"]; "workflows.runner_ops" -> "butler.workflows.pause_state" [color="gray60", style="solid"]; "workflows.runner_ops" -> "butler.workflows.workflow_run_snapshot" [color="gray60", style="solid"]; "workflows.schema" -> "butler.configuration.settings" [color="gray60", style="solid"]; "workflows.schema" -> "butler.model_resolve" [color="gray60", style="solid"]; "workflows.schema" -> "butler.workflows.variables" [color="gray60", style="solid"]; "workflows.step_runner" -> "butler.core.workflow_flags" [color="gray60", style="solid"]; "workflows.step_runner" -> "butler.task_orchestrator" [color="gray60", style="solid"]; "workflows.step_runner" -> "butler.task_orchestrator_ops" [color="gray60", style="solid"]; "workflows.step_runner" -> "butler.workflow_step_runner_ops" [color="gray60", style="solid"]; "workflows.validate" -> "butler.workflows.loader" [color="gray60", style="solid"]; "workflows.validate" -> "butler.workflows.schema" [color="gray60", style="solid"]; "workflows.validate" -> "butler.workflows.validate_ops" [color="gray60", style="solid"]; "workflows.workflow_run_snapshot" -> "butler.io.atomic_write" [color="gray60", style="solid"]; "workflows.workflow_run_snapshot" -> "butler.utilities.env_parse" [color="gray60", style="solid"]; "workflows.workflow_run_snapshot" -> "butler.workflows.workflow_run_snapshot_ops" [color="gray60", style="solid"]; "workflows.workflow_run_snapshot_ops" -> "butler.core.meta_flags" [color="gray60", style="solid"]; }