diff --git a/.github/workflows/debt-ratchet.yml b/.github/workflows/debt-ratchet.yml index d8dbf4493a..ac29daaf46 100644 --- a/.github/workflows/debt-ratchet.yml +++ b/.github/workflows/debt-ratchet.yml @@ -71,7 +71,7 @@ jobs: - name: Stack clients import only names Core has; the outgoing wire matches the base env: BASE: ${{ github.event.merge_group.base_sha || github.event.pull_request.base.sha }} - run: python tools/module_layers.py --check --base "$BASE" + run: python tools/module_layers.py --check --base "$BASE" --report "$GITHUB_STEP_SUMMARY" native-scripts: name: native-scripts diff --git a/docs/layout/MODULE_LAYERS.md b/docs/layout/MODULE_LAYERS.md deleted file mode 100644 index 54be1f49c6..0000000000 --- a/docs/layout/MODULE_LAYERS.md +++ /dev/null @@ -1,1869 +0,0 @@ -# Module layers - -Generated by `python tools/module_layers.py > docs/layout/MODULE_LAYERS.md`; do not edit by hand. - -Layers in order: `wire`, `registry`, `coordination`, `context`, `turns`, `runtime`, `ui_model`, `cli`, `commander`. Each layer imports only the layers before it; `ui_model`, `cli` and `commander` sit on top, and nothing outside a top layer imports it. The layer table in `tools/module_layers.py` declares the claiming prefixes; a module no prefix claims takes the highest layer it imports. - -380 top-level units (8 of them subpackages); 1315 violating imports; 4 deletion candidates. - -## wire (34) - -- `bus_activity_index` -- `bus_display_index` -- `bus_publication` -- `bus_route_counts` -- `bus_source_page` -- `bus_tables` -- `class_fact` -- `code_lines` -- `core_stamp` -- `delivery_failure` -- `delivery_policy` -- `delivery_presentation` -- `json_schema` -- `lifecycle` -- `lifecycle_capability` -- `mentions` -- `message_bus` -- `message_page` -- `message_reference` -- `mro_dispatch` -- `pinned_audit` -- `private_nk_entrypoint` -- `private_path` -- `private_registry_guard` -- `private_runtime_schema` -- `private_send_claim` -- `private_send_rules` -- `private_send_stage` -- `private_sidecar` -- `problem_number` -- `projection_source` -- `sealed` -- `transcript_merge` -- `wire_models` - -## registry (45) - -- `channel_coding_tools` -- `channel_input_batch` -- `channel_management` -- `channel_targets` -- `command` -- `context_reading` -- `declared_family` -- `declared_verb` -- `display_references` -- `field_codec` -- `image_input` -- `image_inputs` -- `jsonl_stream` -- `owner_connection` -- `owner_cutover` -- `owner_fence` -- `owner_launch` -- `owner_lifecycle` -- `owner_protocol` -- `owner_requests` -- `owner_restart` -- `participant_identity` -- `peer_relevance` -- `recorded_bus` -- `recorded_time` -- `registration_change` -- `registration_inheritance` -- `registry_document` -- `registry_provenance` -- `registry_store` -- `reported_turn` -- `repository_name` -- `reservation_rules` -- `revision_views` -- `text_digest` -- `thread_configuration` -- `thread_creation` -- `thread_execution` -- `thread_identity` -- `thread_management` -- `thread_model` -- `thread_owned_state` -- `thread_presentation` -- `thread_status` -- `thread_text` - -## coordination (32) - -- `attempt_recovery` -- `attempt_start` -- `attempt_states` -- `attempt_store` -- `coordination_cohort` -- `coordination_contracts` -- `coordination_database` -- `coordination_errors` -- `coordination_response` -- `coordination_results` -- `coordination_schema` -- `coordination_session` -- `coordination_snapshot` -- `coordination_tables` -- `goal_actions` -- `goal_attempt_identity` -- `goal_attempt_phase` -- `goal_attempts` -- `goal_failure_observation` -- `goal_generation` -- `goal_history` -- `goal_management` -- `goal_mentions` -- `goal_presentation` -- `goal_scheduler` -- `goal_states` -- `goal_turn_permit` -- `goal_waits` -- `participant_store` -- `reason_codes` -- `wake_candidate_index` -- `wake_policy` - -## context (8) - -- `context_segments` -- `working_memory_annotations` -- `working_memory_disclosure` -- `working_memory_labels` -- `working_memory_policy` -- `working_memory_questions` -- `working_memory_requests` -- `working_memory_worker` - -## turns (46) - -- `annotation_disclosure` -- `input_attempt` -- `input_disposition` -- `input_drain` -- `input_effects` -- `input_key` -- `input_origin` -- `selected_actions` -- `selected_claim` -- `selected_participant` -- `selected_request` -- `selected_result` -- `selected_session` -- `selected_source_batch` -- `selected_tool_broker` -- `selected_triage` -- `selected_turn` -- `selected_write_authority` -- `selected_write_plan` -- `send_outcome` -- `session_config_options` -- `session_effects` -- `session_file` -- `session_lifecycle` -- `session_load` -- `session_revision` -- `turn_context` -- `turn_digests` -- `turn_effects` -- `turn_failure` -- `turn_goal_account` -- `turn_goal_permission` -- `turn_input_source` -- `turn_inputs` -- `turn_item` -- `turn_lease` -- `turn_origin` -- `turn_outcome` -- `turn_output` -- `turn_phase` -- `turn_progress` -- `turn_runner` -- `turn_stats` -- `turn_terminal` -- `turn_usage` -- `turn_watchdog` - -## runtime (53) - -- `acp_extension` -- `acp_failure` -- `acp_request_consumer` -- `agent_activity` -- `agent_backend` -- `agent_event_updates` -- `agent_events` -- `agent_runtime` -- `cli_bridges` -- `controller` -- `native_arguments` -- `native_attestation` -- `native_build_inputs` -- `native_child` -- `native_claim_epoch` -- `native_entries` -- `native_failures` -- `native_file_artifact` -- `native_fork` -- `native_input_owner` -- `native_input_record` -- `native_package` -- `native_pi` -- `native_prompt_binding` -- `native_prompt_send` -- `native_runtime_input` -- `native_session_files` -- `native_session_prepare` -- `native_session_reopen` -- `native_settings` -- `native_startup` -- `native_tool_call` -- `native_tool_transport` -- `native_tools` -- `native_transcript` -- `native_turn_context` -- `pending_requests` -- `pi_commands` -- `pi_counts` -- `pi_durable_backend` -- `pi_events` -- `pi_helper` -- `pi_native_backend` -- `pi_payloads` -- `pi_rpc` -- `pi_vocabulary` -- `runtime` -- `runtime_children` -- `runtime_info` -- `runtime_processes` -- `runtime_requests` -- `runtime_updates` -- `skills` - -## ui_model (1) - -- `ui_model` - -## cli (14) - -- `cli` -- `cli_commands` -- `cli_native_package` -- `cli_options` -- `cli_protocol` -- `cli_result` -- `tool_caller` -- `tool_calls` -- `tool_declaration` -- `tool_denial` -- `tool_request` -- `tool_result` -- `tool_results` -- `tools` - -## commander (147) - -- `acp` -- `active_route` -- `activity` -- `activity_clocks` -- `assignment_states` -- `assignment_store` -- `audience_manifest` -- `backend` -- `behaviour_patterns` -- `build_identity` -- `bus` -- `catalog_document` -- `catalog_store` -- `change_report` -- `channels` -- `check_root` -- `child_process` -- `cohort_foreground` -- `cohort_schema` -- `collaboration_ledger` -- `commander` -- `commander_frame_file` -- `commander_heartbeat` -- `commander_hud` -- `commander_pings` -- `commander_service` -- `comms` -- `config_options` -- `connector` -- `connector_caller` -- `connector_store` -- `context_store` -- `coordinated_runtime` -- `coordinator` -- `coordinator_vocabulary` -- `cursor_owner` -- `cursor_publication` -- `diagnostics` -- `display_order` -- `drain_failures` -- `durable_turn` -- `envelope_claim_transitions` -- `errors` -- `execution_states` -- `execution_store` -- `exporting` -- `extension_ui` -- `external_transcript` -- `following_inputs` -- `fresh_private_session` -- `goals` -- `harness_install` -- `head_review` -- `heartbeat_frame` -- `held_orders` -- `historical_native_inputs` -- `historical_views` -- `history_result` -- `history_views` -- `host_services` -- `importing` -- `install_choices` -- `installer` -- `launch_root` -- `launch_runtime` -- `locked_store` -- `login` -- `maintenance_barrier` -- `manual_compaction_bridge` -- `messages` -- `messaging` -- `nk_foreground` -- `notification_assignment` -- `notification_progress` -- `obligation_states` -- `optional_awareness_projection` -- `order_runs` -- `order_story` -- `order_tools` -- `order_work` -- `ordinary_turn_rules` -- `owned_send` -- `owned_turn` -- `package_stamp` -- `page_traversal` -- `phase_evidence` -- `phase_tasks` -- `plan_phases` -- `presentation` -- `producer_stamp` -- `progress_claims` -- `prompt_state` -- `proven_source_coverage` -- `publisher` -- `queued_input` -- `read_basis` -- `read_ledger` -- `recovery_reader` -- `recovery_states` -- `registration` -- `relationships` -- `repo` -- `request_progress` -- `response_acknowledgement` -- `response_conversation` -- `response_policy` -- `restart_queue` -- `restart_refusals` -- `restart_scope` -- `retained_context` -- `retained_task_facts` -- `root_runtime` -- `route_selection` -- `routing` -- `schedule_rules` -- `schema_report` -- `send_result` -- `sent_message` -- `service_passes` -- `service_sender` -- `shared_ledger` -- `slop` -- `source_proof_requirement` -- `standing_rules` -- `started_input` -- `storage_room` -- `storage_rules` -- `store_files` -- `task_sources` -- `threads` -- `todos` -- `tracked_turn` -- `transcript_events` -- `transcript_routes` -- `transcript_sources` -- `transcript_updates` -- `transcripts` -- `triage_native_sources` -- `typed_table` -- `unit_instructions` -- `unstarted_runtime` -- `view_unread` -- `wake` -- `watched` -- `work_branches` -- `work_dispatch` -- `worker` - -## Violating imports - -| File:line | Imports | Layer | Into layer | -|---|---|---|---| -| `src/agent_comms/acp_extension.py:23` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/acp_extension.py:26` | `agent_comms.external_transcript` | runtime | commander | -| `src/agent_comms/acp_extension.py:48` | `agent_comms.routing` | runtime | commander | -| `src/agent_comms/acp_extension.py:50` | `agent_comms.tool_result` | runtime | cli | -| `src/agent_comms/acp_extension.py:51` | `agent_comms.transcripts` | runtime | commander | -| `src/agent_comms/agent_activity.py:14` | `agent_comms.notification_progress` | runtime | commander | -| `src/agent_comms/agent_activity.py:20` | `agent_comms.notification_progress` | runtime | commander | -| `src/agent_comms/agent_activity.py:21` | `agent_comms.presentation` | runtime | commander | -| `src/agent_comms/agent_activity.py:22` | `agent_comms.registration` | runtime | commander | -| `src/agent_comms/agent_activity.py:24` | `agent_comms.activity` | runtime | commander | -| `src/agent_comms/agent_activity.py:33` | `agent_comms.audience_manifest` | runtime | commander | -| `src/agent_comms/agent_activity.py:34` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/agent_activity.py:36` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/agent_activity.py:38` | `agent_comms.routing` | runtime | commander | -| `src/agent_comms/agent_activity.py:41` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/agent_activity.py:195` | `agent_comms.diagnostics` | runtime | commander | -| `src/agent_comms/agent_backend.py:32` | `agent_comms.tool_result` | runtime | cli | -| `src/agent_comms/agent_backend.py:38` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/agent_backend.py:42` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/agent_backend.py:43` | `agent_comms.transcript_sources` | runtime | commander | -| `src/agent_comms/agent_event_updates.py:29` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/agent_event_updates.py:32` | `agent_comms.tool_declaration` | runtime | cli | -| `src/agent_comms/agent_event_updates.py:40` | `agent_comms.tool_results` | runtime | cli | -| `src/agent_comms/agent_event_updates.py:41` | `agent_comms.transcript_updates` | runtime | commander | -| `src/agent_comms/agent_event_updates.py:45` | `agent_comms.routing` | runtime | commander | -| `src/agent_comms/agent_events.py:23` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/agent_events.py:38` | `agent_comms.tool_declaration` | runtime | cli | -| `src/agent_comms/agent_events.py:39` | `agent_comms.tool_results` | runtime | cli | -| `src/agent_comms/agent_events.py:46` | `agent_comms.comms` | runtime | commander | -| `src/agent_comms/agent_events.py:53` | `agent_comms.started_input` | runtime | commander | -| `src/agent_comms/agent_events.py:54` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/agent_events.py:368` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/agent_runtime.py:19` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/agent_runtime.py:20` | `agent_comms.messages` | runtime | commander | -| `src/agent_comms/attempt_recovery.py:6` | `agent_comms.native_session_files` | coordination | runtime | -| `src/agent_comms/attempt_recovery.py:7` | `agent_comms.child_process` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:8` | `agent_comms.native_failures` | coordination | runtime | -| `src/agent_comms/attempt_recovery.py:39` | `agent_comms.coordinator` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:40` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:41` | `agent_comms.native_runtime_input` | coordination | runtime | -| `src/agent_comms/attempt_recovery.py:42` | `agent_comms.recovery_states` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:45` | `agent_comms.native_input_record` | coordination | runtime | -| `src/agent_comms/attempt_recovery.py:48` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:50` | `agent_comms.input_disposition` | coordination | turns | -| `src/agent_comms/attempt_recovery.py:51` | `agent_comms.locked_store` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:52` | `agent_comms.registration` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:53` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:75` | `agent_comms.comms` | coordination | commander | -| `src/agent_comms/attempt_recovery.py:450` | `agent_comms.native_entries` | coordination | runtime | -| `src/agent_comms/attempt_recovery.py:451` | `agent_comms.native_pi` | coordination | runtime | -| `src/agent_comms/attempt_recovery.py:452` | `agent_comms.native_prompt_binding` | coordination | runtime | -| `src/agent_comms/attempt_recovery.py:453` | `agent_comms.pi_vocabulary` | coordination | runtime | -| `src/agent_comms/attempt_start.py:21` | `agent_comms.execution_states` | coordination | commander | -| `src/agent_comms/attempt_states.py:19` | `agent_comms.coordinator_vocabulary` | coordination | commander | -| `src/agent_comms/attempt_states.py:291` | `agent_comms.execution_states` | coordination | commander | -| `src/agent_comms/attempt_states.py:292` | `agent_comms.obligation_states` | coordination | commander | -| `src/agent_comms/attempt_states.py:305` | `agent_comms.execution_states` | coordination | commander | -| `src/agent_comms/attempt_states.py:306` | `agent_comms.obligation_states` | coordination | commander | -| `src/agent_comms/attempt_states.py:318` | `agent_comms.execution_states` | coordination | commander | -| `src/agent_comms/attempt_states.py:319` | `agent_comms.obligation_states` | coordination | commander | -| `src/agent_comms/attempt_store.py:8` | `agent_comms.assignment_states` | coordination | commander | -| `src/agent_comms/attempt_store.py:23` | `agent_comms.turn_failure` | coordination | turns | -| `src/agent_comms/attempt_store.py:24` | `agent_comms.recovery_reader` | coordination | commander | -| `src/agent_comms/backend.py:65` | `agent_comms.tool_denial` | commander | cli | -| `src/agent_comms/bus_activity_index.py:10` | `agent_comms.activity_clocks` | wire | commander | -| `src/agent_comms/bus_activity_index.py:11` | `agent_comms.messages` | wire | commander | -| `src/agent_comms/bus_activity_index.py:12` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/bus_display_index.py:4` | `agent_comms.activity_clocks` | wire | commander | -| `src/agent_comms/bus_display_index.py:9` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/bus_publication.py:13` | `agent_comms.audience_manifest` | wire | commander | -| `src/agent_comms/bus_publication.py:14` | `agent_comms.messages` | wire | commander | -| `src/agent_comms/bus_publication.py:15` | `agent_comms.errors` | wire | commander | -| `src/agent_comms/bus_publication.py:20` | `agent_comms.response_acknowledgement` | wire | commander | -| `src/agent_comms/bus_publication.py:23` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/bus_publication.py:25` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/bus_publication.py:26` | `agent_comms.read_basis` | wire | commander | -| `src/agent_comms/bus_publication.py:27` | `agent_comms.wake_policy` | wire | coordination | -| `src/agent_comms/bus_publication.py:30` | `agent_comms.bus` | wire | commander | -| `src/agent_comms/bus_publication.py:32` | `agent_comms.goal_management` | wire | coordination | -| `src/agent_comms/bus_publication.py:33` | `agent_comms.registry_document` | wire | registry | -| `src/agent_comms/bus_publication.py:34` | `agent_comms.threads` | wire | commander | -| `src/agent_comms/bus_route_counts.py:10` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/bus_route_counts.py:11` | `agent_comms.messages` | wire | commander | -| `src/agent_comms/bus_route_counts.py:13` | `agent_comms.read_basis` | wire | commander | -| `src/agent_comms/bus_route_counts.py:14` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/bus_route_counts.py:17` | `agent_comms.bus` | wire | commander | -| `src/agent_comms/bus_route_counts.py:19` | `agent_comms.page_traversal` | wire | commander | -| `src/agent_comms/bus_source_page.py:8` | `agent_comms.coordination_errors` | wire | coordination | -| `src/agent_comms/bus_source_page.py:9` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/bus_tables.py:9` | `agent_comms.messages` | wire | commander | -| `src/agent_comms/bus_tables.py:10` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/bus_tables.py:12` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/bus_tables.py:22` | `agent_comms.read_basis` | wire | commander | -| `src/agent_comms/channel_coding_tools.py:16` | `agent_comms.coordinator` | registry | commander | -| `src/agent_comms/channel_coding_tools.py:18` | `agent_comms.comms` | registry | commander | -| `src/agent_comms/channel_coding_tools.py:19` | `agent_comms.coordination_database` | registry | coordination | -| `src/agent_comms/channel_coding_tools.py:20` | `agent_comms.envelope_claim_transitions` | registry | commander | -| `src/agent_comms/channel_coding_tools.py:27` | `agent_comms.native_arguments` | registry | runtime | -| `src/agent_comms/channel_coding_tools.py:28` | `agent_comms.native_tool_call` | registry | runtime | -| `src/agent_comms/channel_coding_tools.py:29` | `agent_comms.native_tool_transport` | registry | runtime | -| `src/agent_comms/channel_coding_tools.py:30` | `agent_comms.native_tools` | registry | runtime | -| `src/agent_comms/channel_coding_tools.py:31` | `agent_comms.pi_payloads` | registry | runtime | -| `src/agent_comms/channel_coding_tools.py:32` | `agent_comms.selected_claim` | registry | turns | -| `src/agent_comms/channel_coding_tools.py:36` | `agent_comms.selected_tool_broker` | registry | turns | -| `src/agent_comms/channel_coding_tools.py:40` | `agent_comms.storage_room` | registry | commander | -| `src/agent_comms/channel_coding_tools.py:41` | `agent_comms.storage_rules` | registry | commander | -| `src/agent_comms/channel_coding_tools.py:42` | `agent_comms.tool_denial` | registry | cli | -| `src/agent_comms/channel_coding_tools.py:43` | `agent_comms.turn_goal_permission` | registry | turns | -| `src/agent_comms/channel_coding_tools.py:46` | `agent_comms.backend` | registry | commander | -| `src/agent_comms/channel_coding_tools.py:47` | `agent_comms.coordination_tables.assignments` | registry | coordination | -| `src/agent_comms/channel_coding_tools.py:48` | `agent_comms.pi_payloads` | registry | runtime | -| `src/agent_comms/channel_coding_tools.py:116` | `agent_comms.native_runtime_input` | registry | runtime | -| `src/agent_comms/channel_input_batch.py:9` | `agent_comms.input_key` | registry | turns | -| `src/agent_comms/channel_input_batch.py:12` | `agent_comms.input_attempt` | registry | turns | -| `src/agent_comms/channel_input_batch.py:15` | `agent_comms.input_disposition` | registry | turns | -| `src/agent_comms/channel_input_batch.py:16` | `agent_comms.messages` | registry | commander | -| `src/agent_comms/channel_input_batch.py:17` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/channel_input_batch.py:50` | `agent_comms.input_disposition` | registry | turns | -| `src/agent_comms/channel_management.py:15` | `agent_comms.channels` | registry | commander | -| `src/agent_comms/channel_management.py:16` | `agent_comms.cli_result` | registry | cli | -| `src/agent_comms/channel_management.py:18` | `agent_comms.display_order` | registry | commander | -| `src/agent_comms/channel_management.py:20` | `agent_comms.messages` | registry | commander | -| `src/agent_comms/channel_management.py:21` | `agent_comms.registration` | registry | commander | -| `src/agent_comms/channel_management.py:24` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/channel_targets.py:10` | `agent_comms.activity_clocks` | registry | commander | -| `src/agent_comms/channel_targets.py:12` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/channel_targets.py:14` | `agent_comms.history_result` | registry | commander | -| `src/agent_comms/channel_targets.py:16` | `agent_comms.response_policy` | registry | commander | -| `src/agent_comms/channel_targets.py:17` | `agent_comms.wake_policy` | registry | coordination | -| `src/agent_comms/channel_targets.py:20` | `agent_comms.audience_manifest` | registry | commander | -| `src/agent_comms/channel_targets.py:21` | `agent_comms.catalog_document` | registry | commander | -| `src/agent_comms/channel_targets.py:22` | `agent_comms.channels` | registry | commander | -| `src/agent_comms/channel_targets.py:23` | `agent_comms.cli_commands` | registry | cli | -| `src/agent_comms/channel_targets.py:24` | `agent_comms.cli_result` | registry | cli | -| `src/agent_comms/channel_targets.py:25` | `agent_comms.comms` | registry | commander | -| `src/agent_comms/channel_targets.py:26` | `agent_comms.goal_management` | registry | coordination | -| `src/agent_comms/channel_targets.py:27` | `agent_comms.historical_views` | registry | commander | -| `src/agent_comms/channel_targets.py:28` | `agent_comms.history_views` | registry | commander | -| `src/agent_comms/channel_targets.py:29` | `agent_comms.messages` | registry | commander | -| `src/agent_comms/channel_targets.py:30` | `agent_comms.read_basis` | registry | commander | -| `src/agent_comms/channel_targets.py:40` | `agent_comms.response_policy` | registry | commander | -| `src/agent_comms/channel_targets.py:43` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/channel_targets.py:44` | `agent_comms.wake_policy` | registry | coordination | -| `src/agent_comms/channel_targets.py:102` | `agent_comms.channels` | registry | commander | -| `src/agent_comms/channel_targets.py:491` | `agent_comms.channels` | registry | commander | -| `src/agent_comms/channel_targets.py:553` | `agent_comms.presentation` | registry | commander | -| `src/agent_comms/channel_targets.py:594` | `agent_comms.channels` | registry | commander | -| `src/agent_comms/channels.py:15` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/channels.py:23` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/check_root.py:18` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/cli.py:17` | `agent_comms.active_route` | cli | commander | -| `src/agent_comms/cli.py:20` | `agent_comms.launch_root` | cli | commander | -| `src/agent_comms/cli_bridges/claude.py:12` | `agent_comms.bus` | runtime | commander | -| `src/agent_comms/cli_bridges/claude.py:16` | `agent_comms.watched` | runtime | commander | -| `src/agent_comms/cli_bridges/claude_protocol.py:19` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/claude_protocol.py:43` | `agent_comms.tool_calls` | runtime | cli | -| `src/agent_comms/cli_bridges/claude_protocol.py:44` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/cli_bridges/codex.py:17` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/cli_bridges/codex.py:18` | `agent_comms.messages` | runtime | commander | -| `src/agent_comms/cli_bridges/codex.py:19` | `agent_comms.send_result` | runtime | commander | -| `src/agent_comms/cli_bridges/codex.py:20` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/codex_protocol.py:18` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/codex_protocol.py:20` | `agent_comms.external_transcript` | runtime | commander | -| `src/agent_comms/cli_bridges/codex_protocol.py:41` | `agent_comms.tool_calls` | runtime | cli | -| `src/agent_comms/cli_bridges/codex_protocol.py:42` | `agent_comms.tool_declaration` | runtime | cli | -| `src/agent_comms/cli_bridges/codex_protocol.py:43` | `agent_comms.tool_results` | runtime | cli | -| `src/agent_comms/cli_bridges/codex_protocol.py:44` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/cli_bridges/codex_rollout.py:24` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/codex_rollout.py:32` | `agent_comms.tool_declaration` | runtime | cli | -| `src/agent_comms/cli_bridges/codex_rollout.py:33` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/cli_bridges/history.py:25` | `agent_comms.harness_install` | runtime | commander | -| `src/agent_comms/cli_bridges/monitor.py:19` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/cli_bridges/monitor.py:20` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/monitor.py:23` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/cli_bridges/monitor.py:24` | `agent_comms.messages` | runtime | commander | -| `src/agent_comms/cli_bridges/opencode.py:15` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/cli_bridges/opencode.py:16` | `agent_comms.comms` | runtime | commander | -| `src/agent_comms/cli_bridges/opencode.py:17` | `agent_comms.messages` | runtime | commander | -| `src/agent_comms/cli_bridges/opencode.py:18` | `agent_comms.send_result` | runtime | commander | -| `src/agent_comms/cli_bridges/opencode.py:19` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/opencode_parts.py:10` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/opencode_parts.py:23` | `agent_comms.tool_calls` | runtime | cli | -| `src/agent_comms/cli_bridges/opencode_parts.py:24` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/cli_bridges/opencode_protocol.py:11` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/opencode_store.py:15` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/cli_bridges/opencode_store.py:17` | `agent_comms.typed_table` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:28` | `agent_comms.messages` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:30` | `agent_comms.bus` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:32` | `agent_comms.change_report` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:33` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:40` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/cli_bridges/shared.py:51` | `agent_comms.comms` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:52` | `agent_comms.config_options` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:62` | `agent_comms.installer.refusals` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:63` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:71` | `agent_comms.read_basis` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:73` | `agent_comms.send_result` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:77` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:78` | `agent_comms.typed_table` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:89` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/cli_bridges/shared.py:634` | `agent_comms.registration` | runtime | commander | -| `src/agent_comms/cli_commands.py:31` | `agent_comms.errors` | cli | commander | -| `src/agent_comms/cli_commands.py:32` | `agent_comms.installer.interpreter_operation` | cli | commander | -| `src/agent_comms/cli_commands.py:33` | `agent_comms.installer.owner_starts` | cli | commander | -| `src/agent_comms/cli_commands.py:34` | `agent_comms.launch_root` | cli | commander | -| `src/agent_comms/cli_commands.py:38` | `agent_comms.active_route` | cli | commander | -| `src/agent_comms/cli_commands.py:45` | `agent_comms.activity` | cli | commander | -| `src/agent_comms/cli_commands.py:46` | `agent_comms.bus` | cli | commander | -| `src/agent_comms/cli_commands.py:47` | `agent_comms.catalog_document` | cli | commander | -| `src/agent_comms/cli_commands.py:58` | `agent_comms.channels` | cli | commander | -| `src/agent_comms/cli_commands.py:59` | `agent_comms.check_root` | cli | commander | -| `src/agent_comms/cli_commands.py:60` | `agent_comms.child_process` | cli | commander | -| `src/agent_comms/cli_commands.py:75` | `agent_comms.commander.config` | cli | commander | -| `src/agent_comms/cli_commands.py:81` | `agent_comms.comms` | cli | commander | -| `src/agent_comms/cli_commands.py:82` | `agent_comms.config_options` | cli | commander | -| `src/agent_comms/cli_commands.py:87` | `agent_comms.context_store` | cli | commander | -| `src/agent_comms/cli_commands.py:91` | `agent_comms.exporting` | cli | commander | -| `src/agent_comms/cli_commands.py:122` | `agent_comms.harness_install` | cli | commander | -| `src/agent_comms/cli_commands.py:123` | `agent_comms.installer.probes.harnesses` | cli | commander | -| `src/agent_comms/cli_commands.py:124` | `agent_comms.history_result` | cli | commander | -| `src/agent_comms/cli_commands.py:125` | `agent_comms.history_views` | cli | commander | -| `src/agent_comms/cli_commands.py:126` | `agent_comms.importing` | cli | commander | -| `src/agent_comms/cli_commands.py:129` | `agent_comms.install_choices` | cli | commander | -| `src/agent_comms/cli_commands.py:130` | `agent_comms.launch_runtime` | cli | commander | -| `src/agent_comms/cli_commands.py:131` | `agent_comms.maintenance_barrier` | cli | commander | -| `src/agent_comms/cli_commands.py:134` | `agent_comms.messages` | cli | commander | -| `src/agent_comms/cli_commands.py:141` | `agent_comms.page_traversal` | cli | commander | -| `src/agent_comms/cli_commands.py:143` | `agent_comms.presentation` | cli | commander | -| `src/agent_comms/cli_commands.py:144` | `agent_comms.read_basis` | cli | commander | -| `src/agent_comms/cli_commands.py:153` | `agent_comms.repo` | cli | commander | -| `src/agent_comms/cli_commands.py:155` | `agent_comms.storage_rules` | cli | commander | -| `src/agent_comms/cli_commands.py:159` | `agent_comms.restart_queue` | cli | commander | -| `src/agent_comms/cli_commands.py:160` | `agent_comms.restart_scope` | cli | commander | -| `src/agent_comms/cli_commands.py:162` | `agent_comms.schema_report` | cli | commander | -| `src/agent_comms/cli_commands.py:163` | `agent_comms.send_result` | cli | commander | -| `src/agent_comms/cli_commands.py:164` | `agent_comms.shared_ledger` | cli | commander | -| `src/agent_comms/cli_commands.py:187` | `agent_comms.threads` | cli | commander | -| `src/agent_comms/cli_commands.py:188` | `agent_comms.todos` | cli | commander | -| `src/agent_comms/cli_commands.py:200` | `agent_comms.typed_table` | cli | commander | -| `src/agent_comms/cli_commands.py:1367` | `agent_comms.coordinator` | cli | commander | -| `src/agent_comms/cli_commands.py:1427` | `agent_comms.task_sources` | cli | commander | -| `src/agent_comms/cli_commands.py:1445` | `agent_comms.task_sources` | cli | commander | -| `src/agent_comms/cli_commands.py:1824` | `agent_comms.installer.launch` | cli | commander | -| `src/agent_comms/cli_native_package.py:25` | `agent_comms.storage_rules` | cli | commander | -| `src/agent_comms/cli_native_package.py:26` | `agent_comms.unit_instructions` | cli | commander | -| `src/agent_comms/cli_protocol.py:30` | `agent_comms.external_transcript` | cli | commander | -| `src/agent_comms/cli_protocol.py:32` | `agent_comms.maintenance_barrier` | cli | commander | -| `src/agent_comms/cli_protocol.py:33` | `agent_comms.messages` | cli | commander | -| `src/agent_comms/cli_protocol.py:35` | `agent_comms.repo` | cli | commander | -| `src/agent_comms/cli_protocol.py:40` | `agent_comms.child_process` | cli | commander | -| `src/agent_comms/commander/judge.py:61` | `agent_comms.tool_caller` | commander | cli | -| `src/agent_comms/commander/judge.py:62` | `agent_comms.tool_declaration` | commander | cli | -| `src/agent_comms/commander/order.py:100` | `agent_comms.tool_caller` | commander | cli | -| `src/agent_comms/commander/standing.py:15` | `agent_comms.cli_commands` | commander | cli | -| `src/agent_comms/commander/standing.py:50` | `agent_comms.ui_model.unit_state` | commander | ui_model | -| `src/agent_comms/commander/tool_watch.py:8` | `agent_comms.tool_declaration` | commander | cli | -| `src/agent_comms/commander/vibe_check.py:46` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/commander/vibe_check.py:47` | `agent_comms.ui_model.unit_state` | commander | ui_model | -| `src/agent_comms/commander_heartbeat.py:17` | `agent_comms.ui_model.unit_state` | commander | ui_model | -| `src/agent_comms/commander_hud.py:20` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/commander_hud.py:22` | `agent_comms.ui_model.unit_state` | commander | ui_model | -| `src/agent_comms/commander_pings.py:24` | `agent_comms.ui_model.unit_state` | commander | ui_model | -| `src/agent_comms/connector.py:48` | `agent_comms.cli_protocol` | commander | cli | -| `src/agent_comms/connector.py:74` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/connector.py:76` | `agent_comms.tools` | commander | cli | -| `src/agent_comms/connector.py:78` | `agent_comms.tool_request` | commander | cli | -| `src/agent_comms/connector_caller.py:16` | `agent_comms.tool_caller` | commander | cli | -| `src/agent_comms/connector_caller.py:17` | `agent_comms.tool_request` | commander | cli | -| `src/agent_comms/context_segments/awareness.py:7` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/doctrine.py:7` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/optional_awareness.py:22` | `agent_comms.cohort_schema` | context | commander | -| `src/agent_comms/context_segments/optional_awareness.py:29` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/partner_activity.py:14` | `agent_comms.goals` | context | commander | -| `src/agent_comms/context_segments/partner_activity.py:16` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/relationships.py:8` | `agent_comms.relationships` | context | commander | -| `src/agent_comms/context_segments/relationships.py:9` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/response.py:4` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/retained.py:5` | `agent_comms.exporting` | context | commander | -| `src/agent_comms/context_segments/retained.py:6` | `agent_comms.retained_task_facts` | context | commander | -| `src/agent_comms/context_segments/retained.py:7` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/retained.py:43` | `agent_comms.retained_context` | context | commander | -| `src/agent_comms/context_segments/selected.py:4` | `agent_comms.selected_participant` | context | turns | -| `src/agent_comms/context_segments/selected.py:5` | `agent_comms.selected_triage` | context | turns | -| `src/agent_comms/context_segments/selected.py:6` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/wake.py:16` | `agent_comms.presentation` | context | commander | -| `src/agent_comms/context_segments/wake.py:19` | `agent_comms.threads` | context | commander | -| `src/agent_comms/context_segments/wake.py:20` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/context_segments/wake_values.py:14` | `agent_comms.threads` | context | commander | -| `src/agent_comms/coordination_cohort.py:16` | `agent_comms.assignment_states` | coordination | commander | -| `src/agent_comms/coordination_cohort.py:20` | `agent_comms.cohort_schema` | coordination | commander | -| `src/agent_comms/coordination_cohort.py:37` | `agent_comms.coordinator` | coordination | commander | -| `src/agent_comms/coordination_database.py:17` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_database.py:24` | `agent_comms.child_process` | coordination | commander | -| `src/agent_comms/coordination_database.py:26` | `agent_comms.locked_store` | coordination | commander | -| `src/agent_comms/coordination_response.py:24` | `agent_comms.cohort_schema` | coordination | commander | -| `src/agent_comms/coordination_response.py:39` | `agent_comms.response_acknowledgement` | coordination | commander | -| `src/agent_comms/coordination_response.py:40` | `agent_comms.coordinator` | coordination | commander | -| `src/agent_comms/coordination_response.py:42` | `agent_comms.messages` | coordination | commander | -| `src/agent_comms/coordination_response.py:43` | `agent_comms.native_input_owner` | coordination | runtime | -| `src/agent_comms/coordination_response.py:44` | `agent_comms.obligation_states` | coordination | commander | -| `src/agent_comms/coordination_response.py:49` | `agent_comms.publisher` | coordination | commander | -| `src/agent_comms/coordination_response.py:51` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_response.py:61` | `agent_comms.locked_store` | coordination | commander | -| `src/agent_comms/coordination_response.py:290` | `agent_comms.comms` | coordination | commander | -| `src/agent_comms/coordination_response.py:382` | `agent_comms.input_disposition` | coordination | turns | -| `src/agent_comms/coordination_response.py:383` | `agent_comms.response_conversation` | coordination | commander | -| `src/agent_comms/coordination_response.py:555` | `agent_comms.response_conversation` | coordination | commander | -| `src/agent_comms/coordination_schema.py:10` | `agent_comms.coordinator_vocabulary` | coordination | commander | -| `src/agent_comms/coordination_schema.py:11` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_session.py:17` | `agent_comms.locked_store` | coordination | commander | -| `src/agent_comms/coordination_session.py:18` | `agent_comms.store_files` | coordination | commander | -| `src/agent_comms/coordination_session.py:84` | `agent_comms.diagnostics` | coordination | commander | -| `src/agent_comms/coordination_session.py:92` | `agent_comms.store_files` | coordination | commander | -| `src/agent_comms/coordination_session.py:115` | `agent_comms.publisher` | coordination | commander | -| `src/agent_comms/coordination_session.py:115` | `agent_comms.registration` | coordination | commander | -| `src/agent_comms/coordination_snapshot.py:314` | `agent_comms.execution_states` | coordination | commander | -| `src/agent_comms/coordination_tables/annotations.py:9` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_tables/annotations.py:17` | `agent_comms.working_memory_labels` | coordination | context | -| `src/agent_comms/coordination_tables/annotations.py:18` | `agent_comms.working_memory_questions` | coordination | context | -| `src/agent_comms/coordination_tables/annotations.py:19` | `agent_comms.working_memory_requests` | coordination | context | -| `src/agent_comms/coordination_tables/assignments.py:8` | `agent_comms.assignment_states` | coordination | commander | -| `src/agent_comms/coordination_tables/assignments.py:19` | `agent_comms.envelope_claim_transitions` | coordination | commander | -| `src/agent_comms/coordination_tables/assignments.py:22` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_tables/assignments.py:66` | `agent_comms.audience_manifest` | coordination | commander | -| `src/agent_comms/coordination_tables/assignments.py:71` | `agent_comms.audience_manifest` | coordination | commander | -| `src/agent_comms/coordination_tables/attempts.py:23` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_tables/executions.py:24` | `agent_comms.execution_states` | coordination | commander | -| `src/agent_comms/coordination_tables/executions.py:36` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_tables/executions.py:62` | `agent_comms.selected_source_batch` | coordination | turns | -| `src/agent_comms/coordination_tables/participants.py:12` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_tables/publications.py:17` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/coordination_tables/publications.py:20` | `agent_comms.messages` | coordination | commander | -| `src/agent_comms/coordination_tables/publications.py:21` | `agent_comms.response_acknowledgement` | coordination | commander | -| `src/agent_comms/coordination_tables/publications.py:22` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_tables/publications.py:33` | `agent_comms.bus` | coordination | commander | -| `src/agent_comms/coordination_tables/recovery.py:17` | `agent_comms.recovery_states` | coordination | commander | -| `src/agent_comms/coordination_tables/recovery.py:18` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_tables/refusals.py:14` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/coordination_tables/refusals.py:15` | `agent_comms.maintenance_barrier` | coordination | commander | -| `src/agent_comms/coordination_tables/refusals.py:16` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/coordination_tables/refusals.py:18` | `agent_comms.locked_store` | coordination | commander | -| `src/agent_comms/coordination_tables/refusals.py:21` | `agent_comms.coordinator` | coordination | commander | -| `src/agent_comms/coordination_tables/responses.py:17` | `agent_comms.obligation_states` | coordination | commander | -| `src/agent_comms/coordination_tables/responses.py:19` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/delivery_failure.py:3` | `agent_comms.acp_extension` | wire | runtime | -| `src/agent_comms/delivery_failure.py:4` | `agent_comms.errors` | wire | commander | -| `src/agent_comms/delivery_policy.py:5` | `agent_comms.audience_manifest` | wire | commander | -| `src/agent_comms/delivery_policy.py:6` | `agent_comms.declared_family` | wire | registry | -| `src/agent_comms/delivery_policy.py:7` | `agent_comms.wake` | wire | commander | -| `src/agent_comms/delivery_policy.py:8` | `agent_comms.wake_policy` | wire | coordination | -| `src/agent_comms/exporting.py:17` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/external_transcript.py:27` | `agent_comms.tool_declaration` | commander | cli | -| `src/agent_comms/external_transcript.py:248` | `agent_comms.tool_declaration` | commander | cli | -| `src/agent_comms/goal_actions.py:14` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_actions.py:25` | `agent_comms.input_key` | coordination | turns | -| `src/agent_comms/goal_actions.py:26` | `agent_comms.input_disposition` | coordination | turns | -| `src/agent_comms/goal_actions.py:27` | `agent_comms.todos` | coordination | commander | -| `src/agent_comms/goal_actions.py:31` | `agent_comms.change_report` | coordination | commander | -| `src/agent_comms/goal_actions.py:32` | `agent_comms.child_process` | coordination | commander | -| `src/agent_comms/goal_actions.py:35` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_actions.py:50` | `agent_comms.progress_claims` | coordination | commander | -| `src/agent_comms/goal_actions.py:54` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_actions.py:149` | `agent_comms.runtime_requests` | coordination | runtime | -| `src/agent_comms/goal_actions.py:505` | `agent_comms.runtime_requests` | coordination | runtime | -| `src/agent_comms/goal_actions.py:570` | `agent_comms.standing_rules` | coordination | commander | -| `src/agent_comms/goal_actions.py:702` | `agent_comms.runtime_requests` | coordination | runtime | -| `src/agent_comms/goal_attempt_phase.py:10` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_attempts.py:14` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_attempts.py:33` | `agent_comms.child_process` | coordination | commander | -| `src/agent_comms/goal_attempts.py:63` | `agent_comms.locked_store` | coordination | commander | -| `src/agent_comms/goal_attempts.py:64` | `agent_comms.maintenance_barrier` | coordination | commander | -| `src/agent_comms/goal_attempts.py:65` | `agent_comms.pi_counts` | coordination | runtime | -| `src/agent_comms/goal_attempts.py:66` | `agent_comms.pi_payloads` | coordination | runtime | -| `src/agent_comms/goal_attempts.py:67` | `agent_comms.store_files` | coordination | commander | -| `src/agent_comms/goal_attempts.py:68` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/goal_attempts.py:79` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_attempts.py:80` | `agent_comms.turn_context` | coordination | turns | -| `src/agent_comms/goal_failure_observation.py:15` | `agent_comms.turn_failure` | coordination | turns | -| `src/agent_comms/goal_failure_observation.py:25` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/goal_failure_observation.py:30` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_failure_observation.py:31` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_failure_observation.py:32` | `agent_comms.turn_lease` | coordination | turns | -| `src/agent_comms/goal_generation.py:11` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_generation.py:31` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_generation.py:32` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_history.py:23` | `agent_comms.child_process` | coordination | commander | -| `src/agent_comms/goal_history.py:26` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_history.py:27` | `agent_comms.locked_store` | coordination | commander | -| `src/agent_comms/goal_history.py:29` | `agent_comms.store_files` | coordination | commander | -| `src/agent_comms/goal_history.py:31` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/goal_management.py:5` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_management.py:15` | `agent_comms.agent_activity` | coordination | runtime | -| `src/agent_comms/goal_management.py:17` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_management.py:27` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_management.py:37` | `agent_comms.native_input_owner` | coordination | runtime | -| `src/agent_comms/goal_management.py:39` | `agent_comms.registration` | coordination | commander | -| `src/agent_comms/goal_management.py:40` | `agent_comms.store_files` | coordination | commander | -| `src/agent_comms/goal_management.py:43` | `agent_comms.agent_events` | coordination | runtime | -| `src/agent_comms/goal_management.py:45` | `agent_comms.messages` | coordination | commander | -| `src/agent_comms/goal_management.py:46` | `agent_comms.native_input_owner` | coordination | runtime | -| `src/agent_comms/goal_management.py:57` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_management.py:58` | `agent_comms.input_attempt` | coordination | turns | -| `src/agent_comms/goal_management.py:64` | `agent_comms.input_disposition` | coordination | turns | -| `src/agent_comms/goal_management.py:66` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_management.py:67` | `agent_comms.todos` | coordination | commander | -| `src/agent_comms/goal_management.py:68` | `agent_comms.turn_lease` | coordination | turns | -| `src/agent_comms/goal_management.py:382` | `agent_comms.agent_events` | coordination | runtime | -| `src/agent_comms/goal_mentions.py:13` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_mentions.py:25` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_presentation.py:14` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_presentation.py:20` | `agent_comms.agent_activity` | coordination | runtime | -| `src/agent_comms/goal_presentation.py:27` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_presentation.py:28` | `agent_comms.turn_lease` | coordination | turns | -| `src/agent_comms/goal_scheduler.py:9` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:17` | `agent_comms.agent_event_updates` | coordination | runtime | -| `src/agent_comms/goal_scheduler.py:18` | `agent_comms.child_process` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:19` | `agent_comms.coordinator` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:20` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:31` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:33` | `agent_comms.routing` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:34` | `agent_comms.schedule_rules` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:38` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:39` | `agent_comms.comms` | coordination | commander | -| `src/agent_comms/goal_scheduler.py:40` | `agent_comms.input_drain` | coordination | turns | -| `src/agent_comms/goal_scheduler.py:41` | `agent_comms.session_lifecycle` | coordination | turns | -| `src/agent_comms/goal_scheduler.py:42` | `agent_comms.turn_effects` | coordination | turns | -| `src/agent_comms/goal_states.py:16` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_states.py:33` | `agent_comms.turn_context` | coordination | turns | -| `src/agent_comms/goal_turn_permit.py:9` | `agent_comms.ordinary_turn_rules` | coordination | commander | -| `src/agent_comms/goal_turn_permit.py:16` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_turn_permit.py:17` | `agent_comms.pi_payloads` | coordination | runtime | -| `src/agent_comms/goal_turn_permit.py:18` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goal_turn_permit.py:19` | `agent_comms.turn_context` | coordination | turns | -| `src/agent_comms/goal_turn_permit.py:20` | `agent_comms.turn_goal_account` | coordination | turns | -| `src/agent_comms/goal_turn_permit.py:21` | `agent_comms.turn_terminal` | coordination | turns | -| `src/agent_comms/goal_waits.py:12` | `agent_comms.bus` | coordination | commander | -| `src/agent_comms/goal_waits.py:15` | `agent_comms.errors` | coordination | commander | -| `src/agent_comms/goal_waits.py:18` | `agent_comms.goals` | coordination | commander | -| `src/agent_comms/goal_waits.py:19` | `agent_comms.input_key` | coordination | turns | -| `src/agent_comms/goal_waits.py:20` | `agent_comms.input_attempt` | coordination | turns | -| `src/agent_comms/goal_waits.py:21` | `agent_comms.locked_store` | coordination | commander | -| `src/agent_comms/goal_waits.py:22` | `agent_comms.store_files` | coordination | commander | -| `src/agent_comms/goal_waits.py:25` | `agent_comms.turn_lease` | coordination | turns | -| `src/agent_comms/goal_waits.py:26` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/goal_waits.py:29` | `agent_comms.agent_activity` | coordination | runtime | -| `src/agent_comms/goal_waits.py:32` | `agent_comms.threads` | coordination | commander | -| `src/agent_comms/goals.py:41` | `agent_comms.ui_model.goal` | commander | ui_model | -| `src/agent_comms/history_result.py:7` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/history_result.py:9` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/history_views.py:15` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/host_services/connector.py:28` | `agent_comms.tools` | commander | cli | -| `src/agent_comms/importing.py:16` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/input_attempt.py:10` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/input_disposition.py:15` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/input_disposition.py:32` | `agent_comms.locked_store` | turns | commander | -| `src/agent_comms/input_disposition.py:34` | `agent_comms.messages` | turns | commander | -| `src/agent_comms/input_disposition.py:36` | `agent_comms.tool_result` | turns | cli | -| `src/agent_comms/input_disposition.py:37` | `agent_comms.typed_table` | turns | commander | -| `src/agent_comms/input_disposition.py:42` | `agent_comms.bus` | turns | commander | -| `src/agent_comms/input_disposition.py:46` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/input_drain.py:16` | `agent_comms.acp_extension` | turns | runtime | -| `src/agent_comms/input_drain.py:25` | `agent_comms.activity` | turns | commander | -| `src/agent_comms/input_drain.py:26` | `agent_comms.agent_backend` | turns | runtime | -| `src/agent_comms/input_drain.py:27` | `agent_comms.bus` | turns | commander | -| `src/agent_comms/input_drain.py:28` | `agent_comms.child_process` | turns | commander | -| `src/agent_comms/input_drain.py:29` | `agent_comms.cohort_schema` | turns | commander | -| `src/agent_comms/input_drain.py:30` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/input_drain.py:31` | `agent_comms.controller` | turns | runtime | -| `src/agent_comms/input_drain.py:34` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/input_drain.py:35` | `agent_comms.cursor_owner` | turns | commander | -| `src/agent_comms/input_drain.py:36` | `agent_comms.drain_failures` | turns | commander | -| `src/agent_comms/input_drain.py:42` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/input_drain.py:53` | `agent_comms.maintenance_barrier` | turns | commander | -| `src/agent_comms/input_drain.py:54` | `agent_comms.native_input_owner` | turns | runtime | -| `src/agent_comms/input_drain.py:55` | `agent_comms.proven_source_coverage` | turns | commander | -| `src/agent_comms/input_drain.py:56` | `agent_comms.queued_input` | turns | commander | -| `src/agent_comms/input_drain.py:59` | `agent_comms.routing` | turns | commander | -| `src/agent_comms/input_drain.py:60` | `agent_comms.runtime` | turns | runtime | -| `src/agent_comms/input_drain.py:61` | `agent_comms.schedule_rules` | turns | commander | -| `src/agent_comms/input_drain.py:64` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/input_drain.py:67` | `agent_comms.watched` | turns | commander | -| `src/agent_comms/input_drain.py:70` | `agent_comms.following_inputs` | turns | commander | -| `src/agent_comms/input_effects.py:11` | `agent_comms.cursor_publication` | turns | commander | -| `src/agent_comms/input_key.py:16` | `agent_comms.acp_extension` | turns | runtime | -| `src/agent_comms/input_origin.py:12` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/input_origin.py:14` | `agent_comms.goals` | turns | commander | -| `src/agent_comms/input_origin.py:21` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/input_origin.py:24` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/input_origin.py:55` | `agent_comms.retained_task_facts` | turns | commander | -| `src/agent_comms/input_origin.py:148` | `agent_comms.store_files` | turns | commander | -| `src/agent_comms/input_origin.py:162` | `agent_comms.retained_task_facts` | turns | commander | -| `src/agent_comms/installer/launch.py:27` | `agent_comms.cli_commands` | commander | cli | -| `src/agent_comms/installer/probes/harnesses.py:10` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/installer/upgrade.py:48` | `agent_comms.cli_commands` | commander | cli | -| `src/agent_comms/installer/upgrade.py:59` | `agent_comms.cli_protocol` | commander | cli | -| `src/agent_comms/installer/upgrade.py:60` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/message_bus.py:5` | `agent_comms.activity_clocks` | wire | commander | -| `src/agent_comms/message_bus.py:22` | `agent_comms.bus` | wire | commander | -| `src/agent_comms/message_bus.py:23` | `agent_comms.channel_targets` | wire | registry | -| `src/agent_comms/message_bus.py:24` | `agent_comms.channels` | wire | commander | -| `src/agent_comms/message_bus.py:25` | `agent_comms.coordination_database` | wire | coordination | -| `src/agent_comms/message_bus.py:26` | `agent_comms.coordinator` | wire | commander | -| `src/agent_comms/message_bus.py:27` | `agent_comms.historical_views` | wire | commander | -| `src/agent_comms/message_bus.py:28` | `agent_comms.maintenance_barrier` | wire | commander | -| `src/agent_comms/message_bus.py:36` | `agent_comms.messages` | wire | commander | -| `src/agent_comms/message_bus.py:37` | `agent_comms.page_traversal` | wire | commander | -| `src/agent_comms/message_bus.py:38` | `agent_comms.publisher` | wire | commander | -| `src/agent_comms/message_bus.py:39` | `agent_comms.read_basis` | wire | commander | -| `src/agent_comms/message_bus.py:47` | `agent_comms.routing` | wire | commander | -| `src/agent_comms/message_bus.py:48` | `agent_comms.store_files` | wire | commander | -| `src/agent_comms/message_bus.py:51` | `agent_comms.assignment_states` | wire | commander | -| `src/agent_comms/message_bus.py:52` | `agent_comms.comms` | wire | commander | -| `src/agent_comms/message_bus.py:53` | `agent_comms.registration` | wire | commander | -| `src/agent_comms/message_bus.py:54` | `agent_comms.registry_document` | wire | registry | -| `src/agent_comms/message_bus.py:55` | `agent_comms.relationships` | wire | commander | -| `src/agent_comms/message_bus.py:56` | `agent_comms.threads` | wire | commander | -| `src/agent_comms/message_bus.py:86` | `agent_comms.catalog_store` | wire | commander | -| `src/agent_comms/message_bus.py:87` | `agent_comms.read_ledger` | wire | commander | -| `src/agent_comms/message_bus.py:166` | `agent_comms.watched` | wire | commander | -| `src/agent_comms/message_bus.py:259` | `agent_comms.context_segments.awareness` | wire | context | -| `src/agent_comms/message_bus.py:260` | `agent_comms.peer_relevance` | wire | registry | -| `src/agent_comms/message_page.py:10` | `agent_comms.messages` | wire | commander | -| `src/agent_comms/message_page.py:11` | `agent_comms.page_traversal` | wire | commander | -| `src/agent_comms/message_page.py:12` | `agent_comms.read_basis` | wire | commander | -| `src/agent_comms/message_page.py:15` | `agent_comms.bus` | wire | commander | -| `src/agent_comms/message_reference.py:11` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/message_reference.py:12` | `agent_comms.page_traversal` | wire | commander | -| `src/agent_comms/message_reference.py:15` | `agent_comms.read_basis` | wire | commander | -| `src/agent_comms/message_reference.py:16` | `agent_comms.read_ledger` | wire | commander | -| `src/agent_comms/message_reference.py:17` | `agent_comms.registry_document` | wire | registry | -| `src/agent_comms/messages.py:60` | `agent_comms.ui_model.message_category` | commander | ui_model | -| `src/agent_comms/native_arguments.py:18` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/native_attestation.py:22` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/native_child.py:13` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/native_child.py:15` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/native_child.py:28` | `agent_comms.diagnostics` | runtime | commander | -| `src/agent_comms/native_child.py:34` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/native_claim_epoch.py:17` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/native_entries.py:17` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/native_entries.py:34` | `agent_comms.importing` | runtime | commander | -| `src/agent_comms/native_entries.py:39` | `agent_comms.routing` | runtime | commander | -| `src/agent_comms/native_entries.py:40` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/native_entries.py:41` | `agent_comms.transcript_routes` | runtime | commander | -| `src/agent_comms/native_failures.py:10` | `agent_comms.send_result` | runtime | commander | -| `src/agent_comms/native_fork.py:14` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/native_fork.py:15` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/native_input_owner.py:14` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/native_input_owner.py:17` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/native_input_owner.py:18` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/native_input_owner.py:26` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/native_input_owner.py:30` | `agent_comms.goals` | runtime | commander | -| `src/agent_comms/native_input_owner.py:31` | `agent_comms.registration` | runtime | commander | -| `src/agent_comms/native_input_record.py:27` | `agent_comms.typed_table` | runtime | commander | -| `src/agent_comms/native_input_record.py:34` | `agent_comms.assignment_states` | runtime | commander | -| `src/agent_comms/native_input_record.py:36` | `agent_comms.cursor_owner` | runtime | commander | -| `src/agent_comms/native_input_record.py:37` | `agent_comms.historical_native_inputs` | runtime | commander | -| `src/agent_comms/native_input_record.py:41` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/native_input_record.py:182` | `agent_comms.transcript_routes` | runtime | commander | -| `src/agent_comms/native_input_record.py:257` | `agent_comms.triage_native_sources` | runtime | commander | -| `src/agent_comms/native_input_record.py:265` | `agent_comms.triage_native_sources` | runtime | commander | -| `src/agent_comms/native_input_record.py:362` | `agent_comms.historical_native_inputs` | runtime | commander | -| `src/agent_comms/native_package.py:26` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/native_package.py:32` | `agent_comms.store_files` | runtime | commander | -| `src/agent_comms/native_pi.py:24` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/native_pi.py:33` | `agent_comms.launch_root` | runtime | commander | -| `src/agent_comms/native_pi.py:34` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/native_pi.py:35` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/native_pi.py:49` | `agent_comms.typed_table` | runtime | commander | -| `src/agent_comms/native_pi.py:144` | `agent_comms.active_route` | runtime | commander | -| `src/agent_comms/native_pi.py:463` | `agent_comms.active_route` | runtime | commander | -| `src/agent_comms/native_prompt_binding.py:20` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/native_prompt_binding.py:22` | `agent_comms.cohort_schema` | runtime | commander | -| `src/agent_comms/native_prompt_binding.py:24` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/native_prompt_binding.py:33` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/native_prompt_binding.py:34` | `agent_comms.typed_table` | runtime | commander | -| `src/agent_comms/native_prompt_send.py:21` | `agent_comms.diagnostics` | runtime | commander | -| `src/agent_comms/native_prompt_send.py:23` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/native_prompt_send.py:26` | `agent_comms.tracked_turn` | runtime | commander | -| `src/agent_comms/native_runtime_input.py:25` | `agent_comms.tool_denial` | runtime | cli | -| `src/agent_comms/native_runtime_input.py:46` | `agent_comms.typed_table` | runtime | commander | -| `src/agent_comms/native_runtime_input.py:224` | `agent_comms.transcripts` | runtime | commander | -| `src/agent_comms/native_session_files.py:16` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/native_session_files.py:17` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/native_session_files.py:22` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/native_session_files.py:24` | `agent_comms.typed_table` | runtime | commander | -| `src/agent_comms/native_session_prepare.py:14` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/native_session_prepare.py:18` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/native_session_prepare.py:20` | `agent_comms.prompt_state` | runtime | commander | -| `src/agent_comms/native_settings.py:6` | `agent_comms.cli_options` | runtime | cli | -| `src/agent_comms/native_startup.py:10` | `agent_comms.diagnostics` | runtime | commander | -| `src/agent_comms/native_tool_call.py:21` | `agent_comms.storage_rules` | runtime | commander | -| `src/agent_comms/native_tool_call.py:22` | `agent_comms.tool_denial` | runtime | cli | -| `src/agent_comms/native_tool_call.py:26` | `agent_comms.envelope_claim_transitions` | runtime | commander | -| `src/agent_comms/native_tool_call.py:27` | `agent_comms.storage_room` | runtime | commander | -| `src/agent_comms/native_tool_call.py:28` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/native_tool_call.py:29` | `agent_comms.storage_rules` | runtime | commander | -| `src/agent_comms/native_tool_call.py:188` | `agent_comms.storage_room` | runtime | commander | -| `src/agent_comms/native_tool_call.py:192` | `agent_comms.storage_room` | runtime | commander | -| `src/agent_comms/native_tool_transport.py:19` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/native_tool_transport.py:21` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/native_tool_transport.py:32` | `agent_comms.tool_denial` | runtime | cli | -| `src/agent_comms/native_tool_transport.py:35` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/native_tools.py:11` | `agent_comms.envelope_claim_transitions` | runtime | commander | -| `src/agent_comms/native_tools.py:15` | `agent_comms.storage_rules` | runtime | commander | -| `src/agent_comms/native_tools.py:16` | `agent_comms.tool_declaration` | runtime | cli | -| `src/agent_comms/native_tools.py:26` | `agent_comms.tool_denial` | runtime | cli | -| `src/agent_comms/native_transcript.py:16` | `agent_comms.read_ledger` | runtime | commander | -| `src/agent_comms/native_transcript.py:34` | `agent_comms.transcript_sources` | runtime | commander | -| `src/agent_comms/native_transcript.py:382` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/native_turn_context.py:11` | `agent_comms.tool_result` | runtime | cli | -| `src/agent_comms/native_turn_context.py:26` | `agent_comms.context_store` | runtime | commander | -| `src/agent_comms/native_turn_context.py:49` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/order_story.py:11` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/order_tools.py:52` | `agent_comms.tool_caller` | commander | cli | -| `src/agent_comms/order_tools.py:53` | `agent_comms.tool_request` | commander | cli | -| `src/agent_comms/order_tools.py:61` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/order_tools.py:71` | `agent_comms.ui_model.unit_state` | commander | ui_model | -| `src/agent_comms/order_work.py:8` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/owned_send.py:125` | `agent_comms.tool_denial` | commander | cli | -| `src/agent_comms/owner_connection.py:12` | `agent_comms.coordinator` | registry | commander | -| `src/agent_comms/owner_connection.py:13` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/owner_connection.py:20` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/owner_cutover.py:10` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/owner_cutover.py:11` | `agent_comms.launch_runtime` | registry | commander | -| `src/agent_comms/owner_cutover.py:14` | `agent_comms.maintenance_barrier` | registry | commander | -| `src/agent_comms/owner_cutover.py:18` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/owner_cutover.py:50` | `agent_comms.restart_refusals` | registry | commander | -| `src/agent_comms/owner_fence.py:9` | `agent_comms.coordination_contracts` | registry | coordination | -| `src/agent_comms/owner_launch.py:8` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/owner_launch.py:9` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/owner_launch.py:10` | `agent_comms.launch_runtime` | registry | commander | -| `src/agent_comms/owner_launch.py:11` | `agent_comms.native_arguments` | registry | runtime | -| `src/agent_comms/owner_lifecycle.py:16` | `agent_comms.active_route` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:17` | `agent_comms.attempt_recovery` | registry | coordination | -| `src/agent_comms/owner_lifecycle.py:18` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:27` | `agent_comms.cli_result` | registry | cli | -| `src/agent_comms/owner_lifecycle.py:28` | `agent_comms.commander_service` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:29` | `agent_comms.diagnostics` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:30` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:31` | `agent_comms.launch_root` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:32` | `agent_comms.input_key` | registry | turns | -| `src/agent_comms/owner_lifecycle.py:34` | `agent_comms.input_disposition` | registry | turns | -| `src/agent_comms/owner_lifecycle.py:35` | `agent_comms.launch_runtime` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:36` | `agent_comms.maintenance_barrier` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:38` | `agent_comms.native_arguments` | registry | runtime | -| `src/agent_comms/owner_lifecycle.py:46` | `agent_comms.registration` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:48` | `agent_comms.restart_refusals` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:52` | `agent_comms.restart_scope` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:56` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:57` | `agent_comms.tool_result` | registry | cli | -| `src/agent_comms/owner_lifecycle.py:58` | `agent_comms.typed_table` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:61` | `agent_comms.goal_management` | registry | coordination | -| `src/agent_comms/owner_lifecycle.py:62` | `agent_comms.messaging` | registry | commander | -| `src/agent_comms/owner_lifecycle.py:295` | `agent_comms.restart_refusals` | registry | commander | -| `src/agent_comms/owner_protocol.py:21` | `agent_comms.package_stamp` | registry | commander | -| `src/agent_comms/owner_protocol.py:24` | `agent_comms.runtime` | registry | runtime | -| `src/agent_comms/owner_requests.py:13` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/owner_requests.py:24` | `agent_comms.messages` | registry | commander | -| `src/agent_comms/owner_requests.py:25` | `agent_comms.registration` | registry | commander | -| `src/agent_comms/owner_requests.py:27` | `agent_comms.todos` | registry | commander | -| `src/agent_comms/owner_requests.py:28` | `agent_comms.bus` | registry | commander | -| `src/agent_comms/owner_restart.py:14` | `agent_comms.coordination_errors` | registry | coordination | -| `src/agent_comms/owner_restart.py:15` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/owner_restart.py:16` | `agent_comms.launch_runtime` | registry | commander | -| `src/agent_comms/owner_restart.py:17` | `agent_comms.native_arguments` | registry | runtime | -| `src/agent_comms/owner_restart.py:26` | `agent_comms.restart_refusals` | registry | commander | -| `src/agent_comms/owner_restart.py:27` | `agent_comms.restart_scope` | registry | commander | -| `src/agent_comms/owner_restart.py:34` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/owner_restart.py:238` | `agent_comms.attempt_recovery` | registry | coordination | -| `src/agent_comms/pi_commands.py:52` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/pi_commands.py:262` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/pi_counts.py:24` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/pi_durable_backend.py:24` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/pi_durable_backend.py:25` | `agent_comms.external_transcript` | runtime | commander | -| `src/agent_comms/pi_durable_backend.py:39` | `agent_comms.transcript_sources` | runtime | commander | -| `src/agent_comms/pi_events.py:43` | `agent_comms.request_progress` | runtime | commander | -| `src/agent_comms/pi_events.py:44` | `agent_comms.tool_declaration` | runtime | cli | -| `src/agent_comms/pi_events.py:47` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/pi_helper.py:11` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/pi_helper.py:14` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/pi_native_backend.py:37` | `agent_comms.fresh_private_session` | runtime | commander | -| `src/agent_comms/pi_native_backend.py:47` | `agent_comms.comms` | runtime | commander | -| `src/agent_comms/pi_native_backend.py:48` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/pi_native_backend.py:52` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/pi_native_backend.py:226` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/pi_native_backend.py:259` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/pi_native_backend.py:289` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/pi_native_backend.py:317` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/pi_payloads.py:50` | `agent_comms.goals` | runtime | commander | -| `src/agent_comms/pi_payloads.py:63` | `agent_comms.send_result` | runtime | commander | -| `src/agent_comms/pi_payloads.py:65` | `agent_comms.tool_declaration` | runtime | cli | -| `src/agent_comms/pi_payloads.py:66` | `agent_comms.tool_results` | runtime | cli | -| `src/agent_comms/pi_payloads.py:67` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:72` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/pi_payloads.py:484` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:489` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:507` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:528` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:544` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:905` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:930` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:973` | `agent_comms.tool_declaration` | runtime | cli | -| `src/agent_comms/pi_payloads.py:974` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/pi_payloads.py:1274` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/pi_vocabulary.py:22` | `agent_comms.backend` | runtime | commander | -| `src/agent_comms/plan_phases.py:19` | `agent_comms.tool_calls` | commander | cli | -| `src/agent_comms/presentation.py:20` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/presentation.py:86` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/presentation.py:87` | `agent_comms.ui_model.unread` | commander | ui_model | -| `src/agent_comms/presentation.py:107` | `agent_comms.ui_model.observation` | commander | ui_model | -| `src/agent_comms/private_nk_entrypoint.py:10` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/private_nk_entrypoint.py:18` | `agent_comms.coordination_errors` | wire | coordination | -| `src/agent_comms/private_nk_entrypoint.py:20` | `agent_comms.native_arguments` | wire | runtime | -| `src/agent_comms/private_nk_entrypoint.py:21` | `agent_comms.native_package` | wire | runtime | -| `src/agent_comms/private_nk_entrypoint.py:26` | `agent_comms.native_session_files` | wire | runtime | -| `src/agent_comms/private_nk_entrypoint.py:27` | `agent_comms.store_files` | wire | commander | -| `src/agent_comms/private_nk_entrypoint.py:30` | `agent_comms.active_route` | wire | commander | -| `src/agent_comms/private_nk_entrypoint.py:31` | `agent_comms.launch_runtime` | wire | commander | -| `src/agent_comms/private_nk_entrypoint.py:32` | `agent_comms.threads` | wire | commander | -| `src/agent_comms/private_nk_entrypoint.py:72` | `agent_comms.locked_store` | wire | commander | -| `src/agent_comms/private_nk_entrypoint.py:73` | `agent_comms.registration` | wire | commander | -| `src/agent_comms/private_nk_entrypoint.py:148` | `agent_comms.bus` | wire | commander | -| `src/agent_comms/private_nk_entrypoint.py:149` | `agent_comms.locked_store` | wire | commander | -| `src/agent_comms/private_nk_entrypoint.py:150` | `agent_comms.registry_store` | wire | registry | -| `src/agent_comms/private_path.py:18` | `agent_comms.child_process` | wire | commander | -| `src/agent_comms/private_path.py:19` | `agent_comms.declared_family` | wire | registry | -| `src/agent_comms/private_path.py:20` | `agent_comms.errors` | wire | commander | -| `src/agent_comms/private_path.py:21` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/private_registry_guard.py:29` | `agent_comms.child_process` | wire | commander | -| `src/agent_comms/private_registry_guard.py:30` | `agent_comms.store_files` | wire | commander | -| `src/agent_comms/private_registry_guard.py:31` | `agent_comms.coordination_database` | wire | coordination | -| `src/agent_comms/private_registry_guard.py:32` | `agent_comms.cohort_schema` | wire | commander | -| `src/agent_comms/private_registry_guard.py:33` | `agent_comms.coordination_tables.participants` | wire | coordination | -| `src/agent_comms/private_registry_guard.py:34` | `agent_comms.coordinator` | wire | commander | -| `src/agent_comms/private_registry_guard.py:35` | `agent_comms.errors` | wire | commander | -| `src/agent_comms/private_registry_guard.py:36` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/private_registry_guard.py:37` | `agent_comms.locked_store` | wire | commander | -| `src/agent_comms/private_registry_guard.py:38` | `agent_comms.native_runtime_input` | wire | runtime | -| `src/agent_comms/private_registry_guard.py:43` | `agent_comms.acp_extension` | wire | runtime | -| `src/agent_comms/private_registry_guard.py:45` | `agent_comms.cursor_publication` | wire | commander | -| `src/agent_comms/private_registry_guard.py:46` | `agent_comms.notification_assignment` | wire | commander | -| `src/agent_comms/private_registry_guard.py:48` | `agent_comms.registry_document` | wire | registry | -| `src/agent_comms/private_registry_guard.py:49` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/private_registry_guard.py:122` | `agent_comms.registry_store` | wire | registry | -| `src/agent_comms/private_registry_guard.py:123` | `agent_comms.store_files` | wire | commander | -| `src/agent_comms/private_registry_guard.py:188` | `agent_comms.coordination_schema` | wire | coordination | -| `src/agent_comms/private_registry_guard.py:202` | `agent_comms.notification_assignment` | wire | commander | -| `src/agent_comms/private_registry_guard.py:209` | `agent_comms.acp_extension` | wire | runtime | -| `src/agent_comms/private_registry_guard.py:261` | `agent_comms.coordination_response` | wire | coordination | -| `src/agent_comms/private_registry_guard.py:283` | `agent_comms.coordination_errors` | wire | coordination | -| `src/agent_comms/private_registry_guard.py:317` | `agent_comms.acp_extension` | wire | runtime | -| `src/agent_comms/private_registry_guard.py:318` | `agent_comms.native_input_owner` | wire | runtime | -| `src/agent_comms/private_registry_guard.py:319` | `agent_comms.thread_identity` | wire | registry | -| `src/agent_comms/private_runtime_schema.py:7` | `agent_comms.coordination_errors` | wire | coordination | -| `src/agent_comms/private_runtime_schema.py:8` | `agent_comms.coordination_schema` | wire | coordination | -| `src/agent_comms/private_runtime_schema.py:9` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/private_runtime_schema.py:18` | `agent_comms.coordinator` | wire | commander | -| `src/agent_comms/private_runtime_schema.py:28` | `agent_comms.cohort_schema` | wire | commander | -| `src/agent_comms/private_runtime_schema.py:28` | `agent_comms.coordination_response` | wire | coordination | -| `src/agent_comms/private_runtime_schema.py:28` | `agent_comms.native_runtime_input` | wire | runtime | -| `src/agent_comms/private_runtime_schema.py:28` | `agent_comms.triage_native_sources` | wire | commander | -| `src/agent_comms/private_runtime_schema.py:45` | `agent_comms.cohort_schema` | wire | commander | -| `src/agent_comms/private_send_claim.py:18` | `agent_comms.native_runtime_input` | wire | runtime | -| `src/agent_comms/private_send_claim.py:19` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/private_send_claim.py:20` | `agent_comms.coordination_errors` | wire | coordination | -| `src/agent_comms/private_send_claim.py:21` | `agent_comms.coordinator` | wire | commander | -| `src/agent_comms/private_send_claim.py:22` | `agent_comms.diagnostics` | wire | commander | -| `src/agent_comms/private_send_claim.py:26` | `agent_comms.following_inputs` | wire | commander | -| `src/agent_comms/private_send_claim.py:27` | `agent_comms.maintenance_barrier` | wire | commander | -| `src/agent_comms/private_send_claim.py:29` | `agent_comms.native_arguments` | wire | runtime | -| `src/agent_comms/private_send_claim.py:30` | `agent_comms.native_input_owner` | wire | runtime | -| `src/agent_comms/private_send_claim.py:31` | `agent_comms.native_entries` | wire | runtime | -| `src/agent_comms/private_send_claim.py:32` | `agent_comms.native_pi` | wire | runtime | -| `src/agent_comms/private_send_claim.py:33` | `agent_comms.native_prompt_binding` | wire | runtime | -| `src/agent_comms/private_send_claim.py:34` | `agent_comms.native_prompt_send` | wire | runtime | -| `src/agent_comms/private_send_claim.py:35` | `agent_comms.native_session_reopen` | wire | runtime | -| `src/agent_comms/private_send_claim.py:36` | `agent_comms.native_startup` | wire | runtime | -| `src/agent_comms/private_send_claim.py:37` | `agent_comms.native_tool_call` | wire | runtime | -| `src/agent_comms/private_send_claim.py:38` | `agent_comms.text_digest` | wire | registry | -| `src/agent_comms/private_send_claim.py:39` | `agent_comms.tracked_turn` | wire | commander | -| `src/agent_comms/private_send_claim.py:45` | `agent_comms.turn_context` | wire | turns | -| `src/agent_comms/private_send_claim.py:46` | `agent_comms.turn_input_source` | wire | turns | -| `src/agent_comms/private_send_claim.py:49` | `agent_comms.coordinated_runtime` | wire | commander | -| `src/agent_comms/private_send_claim.py:50` | `agent_comms.selected_participant` | wire | turns | -| `src/agent_comms/private_send_claim.py:51` | `agent_comms.selected_session` | wire | turns | -| `src/agent_comms/private_send_rules.py:8` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/private_send_rules.py:10` | `agent_comms.child_process` | wire | commander | -| `src/agent_comms/private_send_rules.py:11` | `agent_comms.coordination_tables.assignments` | wire | coordination | -| `src/agent_comms/private_send_rules.py:12` | `agent_comms.coordination_tables.participants` | wire | coordination | -| `src/agent_comms/private_send_rules.py:13` | `agent_comms.reservation_rules` | wire | registry | -| `src/agent_comms/private_send_rules.py:14` | `agent_comms.text_digest` | wire | registry | -| `src/agent_comms/private_send_rules.py:15` | `agent_comms.threads` | wire | commander | -| `src/agent_comms/private_send_rules.py:16` | `agent_comms.turn_goal_permission` | wire | turns | -| `src/agent_comms/private_send_rules.py:19` | `agent_comms.native_input_record` | wire | runtime | -| `src/agent_comms/private_send_rules.py:20` | `agent_comms.native_prompt_binding` | wire | runtime | -| `src/agent_comms/private_send_rules.py:21` | `agent_comms.native_runtime_input` | wire | runtime | -| `src/agent_comms/private_send_stage.py:7` | `agent_comms.native_session_files` | wire | runtime | -| `src/agent_comms/private_send_stage.py:8` | `agent_comms.native_session_reopen` | wire | runtime | -| `src/agent_comms/private_send_stage.py:17` | `agent_comms.assignment_states` | wire | commander | -| `src/agent_comms/private_send_stage.py:18` | `agent_comms.native_runtime_input` | wire | runtime | -| `src/agent_comms/private_send_stage.py:19` | `agent_comms.coordination_errors` | wire | coordination | -| `src/agent_comms/private_send_stage.py:20` | `agent_comms.coordination_tables.assignments` | wire | coordination | -| `src/agent_comms/private_send_stage.py:21` | `agent_comms.coordinator` | wire | commander | -| `src/agent_comms/private_send_stage.py:22` | `agent_comms.durable_turn` | wire | commander | -| `src/agent_comms/private_send_stage.py:23` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/private_send_stage.py:30` | `agent_comms.native_input_owner` | wire | runtime | -| `src/agent_comms/private_send_stage.py:31` | `agent_comms.native_input_record` | wire | runtime | -| `src/agent_comms/private_send_stage.py:32` | `agent_comms.native_pi` | wire | runtime | -| `src/agent_comms/private_send_stage.py:33` | `agent_comms.native_entries` | wire | runtime | -| `src/agent_comms/private_send_stage.py:34` | `agent_comms.native_prompt_binding` | wire | runtime | -| `src/agent_comms/private_send_stage.py:39` | `agent_comms.native_runtime_input` | wire | runtime | -| `src/agent_comms/private_send_stage.py:41` | `agent_comms.reservation_rules` | wire | registry | -| `src/agent_comms/private_send_stage.py:42` | `agent_comms.selected_triage` | wire | turns | -| `src/agent_comms/private_send_stage.py:43` | `agent_comms.text_digest` | wire | registry | -| `src/agent_comms/private_send_stage.py:44` | `agent_comms.turn_failure` | wire | turns | -| `src/agent_comms/private_send_stage.py:45` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/private_sidecar.py:29` | `agent_comms.locked_store` | wire | commander | -| `src/agent_comms/private_sidecar.py:30` | `agent_comms.coordination_errors` | wire | coordination | -| `src/agent_comms/private_sidecar.py:32` | `agent_comms.field_codec` | wire | registry | -| `src/agent_comms/private_sidecar.py:35` | `agent_comms.agent_backend` | wire | runtime | -| `src/agent_comms/private_sidecar.py:38` | `agent_comms.store_files` | wire | commander | -| `src/agent_comms/private_sidecar.py:39` | `agent_comms.typed_table` | wire | commander | -| `src/agent_comms/registration_change.py:16` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/registration_change.py:17` | `agent_comms.coordination_session` | registry | coordination | -| `src/agent_comms/registration_change.py:18` | `agent_comms.goals` | registry | commander | -| `src/agent_comms/registration_change.py:19` | `agent_comms.participant_store` | registry | coordination | -| `src/agent_comms/registration_change.py:22` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/registry_document.py:17` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/registry_document.py:19` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/registry_document.py:35` | `agent_comms.repo` | registry | commander | -| `src/agent_comms/registry_document.py:44` | `agent_comms.restart_refusals` | registry | commander | -| `src/agent_comms/registry_document.py:67` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/registry_document.py:68` | `agent_comms.turn_lease` | registry | turns | -| `src/agent_comms/registry_document.py:74` | `agent_comms.activity` | registry | commander | -| `src/agent_comms/registry_document.py:75` | `agent_comms.agent_activity` | registry | runtime | -| `src/agent_comms/registry_document.py:76` | `agent_comms.audience_manifest` | registry | commander | -| `src/agent_comms/registry_provenance.py:17` | `agent_comms.agent_activity` | registry | runtime | -| `src/agent_comms/registry_provenance.py:18` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/registry_provenance.py:19` | `agent_comms.messages` | registry | commander | -| `src/agent_comms/registry_provenance.py:20` | `agent_comms.routing` | registry | commander | -| `src/agent_comms/registry_provenance.py:22` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/registry_provenance.py:25` | `agent_comms.audience_manifest` | registry | commander | -| `src/agent_comms/registry_provenance.py:26` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/registry_store.py:17` | `agent_comms.coordination_database` | registry | coordination | -| `src/agent_comms/registry_store.py:18` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/registry_store.py:20` | `agent_comms.locked_store` | registry | commander | -| `src/agent_comms/registry_store.py:21` | `agent_comms.maintenance_barrier` | registry | commander | -| `src/agent_comms/registry_store.py:22` | `agent_comms.native_input_owner` | registry | runtime | -| `src/agent_comms/registry_store.py:32` | `agent_comms.routing` | registry | commander | -| `src/agent_comms/registry_store.py:33` | `agent_comms.session_file` | registry | turns | -| `src/agent_comms/registry_store.py:34` | `agent_comms.store_files` | registry | commander | -| `src/agent_comms/registry_store.py:36` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/registry_store.py:37` | `agent_comms.turn_lease` | registry | turns | -| `src/agent_comms/restart_queue.py:23` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/restart_queue.py:44` | `agent_comms.tool_result` | commander | cli | -| `src/agent_comms/runtime.py:10` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/runtime.py:52` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/runtime.py:58` | `agent_comms.acp` | runtime | commander | -| `src/agent_comms/runtime_children.py:14` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/runtime_children.py:25` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/runtime_children.py:26` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/runtime_children.py:27` | `agent_comms.maintenance_barrier` | runtime | commander | -| `src/agent_comms/runtime_children.py:28` | `agent_comms.store_files` | runtime | commander | -| `src/agent_comms/runtime_info.py:12` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/runtime_info.py:14` | `agent_comms.locked_store` | runtime | commander | -| `src/agent_comms/runtime_info.py:15` | `agent_comms.maintenance_barrier` | runtime | commander | -| `src/agent_comms/runtime_info.py:17` | `agent_comms.store_files` | runtime | commander | -| `src/agent_comms/runtime_info.py:23` | `agent_comms.threads` | runtime | commander | -| `src/agent_comms/runtime_processes.py:10` | `agent_comms.child_process` | runtime | commander | -| `src/agent_comms/runtime_processes.py:12` | `agent_comms.launch_runtime` | runtime | commander | -| `src/agent_comms/runtime_requests.py:24` | `agent_comms.context_store` | runtime | commander | -| `src/agent_comms/runtime_requests.py:26` | `agent_comms.coordinator` | runtime | commander | -| `src/agent_comms/runtime_requests.py:28` | `agent_comms.errors` | runtime | commander | -| `src/agent_comms/runtime_requests.py:32` | `agent_comms.goals` | runtime | commander | -| `src/agent_comms/runtime_requests.py:37` | `agent_comms.tool_result` | runtime | cli | -| `src/agent_comms/runtime_requests.py:326` | `agent_comms.manual_compaction_bridge` | runtime | commander | -| `src/agent_comms/runtime_requests.py:564` | `agent_comms.cli_commands` | runtime | cli | -| `src/agent_comms/runtime_updates.py:15` | `agent_comms.activity` | runtime | commander | -| `src/agent_comms/runtime_updates.py:17` | `agent_comms.cli_protocol` | runtime | cli | -| `src/agent_comms/runtime_updates.py:18` | `agent_comms.external_transcript` | runtime | commander | -| `src/agent_comms/runtime_updates.py:20` | `agent_comms.transcript_events` | runtime | commander | -| `src/agent_comms/runtime_updates.py:33` | `agent_comms.importing` | runtime | commander | -| `src/agent_comms/runtime_updates.py:34` | `agent_comms.comms` | runtime | commander | -| `src/agent_comms/runtime_updates.py:35` | `agent_comms.messaging` | runtime | commander | -| `src/agent_comms/schema_report.py:9` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/selected_actions.py:11` | `agent_comms.envelope_claim_transitions` | turns | commander | -| `src/agent_comms/selected_actions.py:13` | `agent_comms.native_tool_call` | turns | runtime | -| `src/agent_comms/selected_actions.py:14` | `agent_comms.native_tool_transport` | turns | runtime | -| `src/agent_comms/selected_actions.py:22` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/selected_claim.py:16` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/selected_claim.py:18` | `agent_comms.cohort_schema` | turns | commander | -| `src/agent_comms/selected_claim.py:19` | `agent_comms.bus` | turns | commander | -| `src/agent_comms/selected_claim.py:21` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/selected_claim.py:26` | `agent_comms.envelope_claim_transitions` | turns | commander | -| `src/agent_comms/selected_claim.py:32` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/selected_claim.py:33` | `agent_comms.native_input_owner` | turns | runtime | -| `src/agent_comms/selected_claim.py:36` | `agent_comms.store_files` | turns | commander | -| `src/agent_comms/selected_claim.py:37` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/selected_participant.py:11` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/selected_participant.py:13` | `agent_comms.cohort_schema` | turns | commander | -| `src/agent_comms/selected_participant.py:14` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/selected_participant.py:15` | `agent_comms.native_runtime_input` | turns | runtime | -| `src/agent_comms/selected_participant.py:16` | `agent_comms.context_store` | turns | commander | -| `src/agent_comms/selected_participant.py:23` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/selected_participant.py:24` | `agent_comms.cursor_publication` | turns | commander | -| `src/agent_comms/selected_participant.py:25` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/selected_participant.py:30` | `agent_comms.native_arguments` | turns | runtime | -| `src/agent_comms/selected_participant.py:31` | `agent_comms.native_attestation` | turns | runtime | -| `src/agent_comms/selected_participant.py:32` | `agent_comms.native_input_owner` | turns | runtime | -| `src/agent_comms/selected_participant.py:33` | `agent_comms.notification_assignment` | turns | commander | -| `src/agent_comms/selected_participant.py:35` | `agent_comms.pi_events` | turns | runtime | -| `src/agent_comms/selected_participant.py:36` | `agent_comms.presentation` | turns | commander | -| `src/agent_comms/selected_participant.py:37` | `agent_comms.store_files` | turns | commander | -| `src/agent_comms/selected_participant.py:38` | `agent_comms.publisher` | turns | commander | -| `src/agent_comms/selected_participant.py:40` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/selected_request.py:11` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/selected_request.py:12` | `agent_comms.drain_failures` | turns | commander | -| `src/agent_comms/selected_request.py:13` | `agent_comms.native_pi` | turns | runtime | -| `src/agent_comms/selected_request.py:14` | `agent_comms.native_failures` | turns | runtime | -| `src/agent_comms/selected_result.py:10` | `agent_comms.assignment_states` | turns | commander | -| `src/agent_comms/selected_result.py:12` | `agent_comms.diagnostics` | turns | commander | -| `src/agent_comms/selected_result.py:14` | `agent_comms.messages` | turns | commander | -| `src/agent_comms/selected_result.py:15` | `agent_comms.send_result` | turns | commander | -| `src/agent_comms/selected_session.py:11` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/selected_session.py:12` | `agent_comms.native_arguments` | turns | runtime | -| `src/agent_comms/selected_session.py:13` | `agent_comms.native_session_files` | turns | runtime | -| `src/agent_comms/selected_session.py:14` | `agent_comms.fresh_private_session` | turns | commander | -| `src/agent_comms/selected_session.py:16` | `agent_comms.native_session_reopen` | turns | runtime | -| `src/agent_comms/selected_session.py:17` | `agent_comms.native_pi` | turns | runtime | -| `src/agent_comms/selected_session.py:18` | `agent_comms.native_failures` | turns | runtime | -| `src/agent_comms/selected_session.py:21` | `agent_comms.launch_runtime` | turns | commander | -| `src/agent_comms/selected_session.py:22` | `agent_comms.pi_vocabulary` | turns | runtime | -| `src/agent_comms/selected_session.py:47` | `agent_comms.native_attestation` | turns | runtime | -| `src/agent_comms/selected_session.py:146` | `agent_comms.native_attestation` | turns | runtime | -| `src/agent_comms/selected_session.py:151` | `agent_comms.native_attestation` | turns | runtime | -| `src/agent_comms/selected_source_batch.py:11` | `agent_comms.messages` | turns | commander | -| `src/agent_comms/selected_source_batch.py:12` | `agent_comms.native_failures` | turns | runtime | -| `src/agent_comms/selected_source_batch.py:16` | `agent_comms.assignment_store` | turns | commander | -| `src/agent_comms/selected_tool_broker.py:20` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/selected_tool_broker.py:24` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/selected_tool_broker.py:25` | `agent_comms.envelope_claim_transitions` | turns | commander | -| `src/agent_comms/selected_tool_broker.py:27` | `agent_comms.native_input_record` | turns | runtime | -| `src/agent_comms/selected_tool_broker.py:28` | `agent_comms.native_runtime_input` | turns | runtime | -| `src/agent_comms/selected_tool_broker.py:29` | `agent_comms.native_tool_call` | turns | runtime | -| `src/agent_comms/selected_tool_broker.py:35` | `agent_comms.native_tool_transport` | turns | runtime | -| `src/agent_comms/selected_tool_broker.py:43` | `agent_comms.tool_denial` | turns | cli | -| `src/agent_comms/selected_triage.py:11` | `agent_comms.assignment_states` | turns | commander | -| `src/agent_comms/selected_triage.py:13` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/selected_triage.py:23` | `agent_comms.typed_table` | turns | commander | -| `src/agent_comms/selected_triage.py:28` | `agent_comms.assignment_states` | turns | commander | -| `src/agent_comms/selected_triage.py:29` | `agent_comms.coordinated_runtime` | turns | commander | -| `src/agent_comms/selected_triage.py:30` | `agent_comms.historical_native_inputs` | turns | commander | -| `src/agent_comms/selected_triage.py:31` | `agent_comms.native_input_record` | turns | runtime | -| `src/agent_comms/selected_triage.py:32` | `agent_comms.native_pi` | turns | runtime | -| `src/agent_comms/selected_triage.py:33` | `agent_comms.native_runtime_input` | turns | runtime | -| `src/agent_comms/selected_triage.py:240` | `agent_comms.historical_native_inputs` | turns | commander | -| `src/agent_comms/selected_turn.py:10` | `agent_comms.assignment_states` | turns | commander | -| `src/agent_comms/selected_turn.py:13` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/selected_turn.py:17` | `agent_comms.durable_turn` | turns | commander | -| `src/agent_comms/selected_turn.py:18` | `agent_comms.envelope_claim_transitions` | turns | commander | -| `src/agent_comms/selected_turn.py:19` | `agent_comms.optional_awareness_projection` | turns | commander | -| `src/agent_comms/selected_turn.py:20` | `agent_comms.native_failures` | turns | runtime | -| `src/agent_comms/selected_write_authority.py:14` | `agent_comms.acp` | turns | commander | -| `src/agent_comms/selected_write_authority.py:17` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/selected_write_plan.py:20` | `agent_comms.locked_store` | turns | commander | -| `src/agent_comms/selected_write_plan.py:21` | `agent_comms.store_files` | turns | commander | -| `src/agent_comms/selected_write_plan.py:24` | `agent_comms.acp_extension` | turns | runtime | -| `src/agent_comms/selected_write_plan.py:25` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/selected_write_plan.py:27` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/selected_write_plan.py:30` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/selected_write_plan.py:32` | `agent_comms.child_process` | turns | commander | -| `src/agent_comms/selected_write_plan.py:35` | `agent_comms.envelope_claim_transitions` | turns | commander | -| `src/agent_comms/selected_write_plan.py:228` | `agent_comms.acp_extension` | turns | runtime | -| `src/agent_comms/session_config_options.py:17` | `agent_comms.agent_backend` | turns | runtime | -| `src/agent_comms/session_config_options.py:18` | `agent_comms.bus` | turns | commander | -| `src/agent_comms/session_config_options.py:19` | `agent_comms.child_process` | turns | commander | -| `src/agent_comms/session_config_options.py:20` | `agent_comms.config_options` | turns | commander | -| `src/agent_comms/session_config_options.py:22` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/session_config_options.py:24` | `agent_comms.launch_runtime` | turns | commander | -| `src/agent_comms/session_config_options.py:25` | `agent_comms.native_failures` | turns | runtime | -| `src/agent_comms/session_config_options.py:26` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/session_config_options.py:27` | `agent_comms.watched` | turns | commander | -| `src/agent_comms/session_config_options.py:31` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/session_config_options.py:32` | `agent_comms.controller` | turns | runtime | -| `src/agent_comms/session_config_options.py:33` | `agent_comms.native_arguments` | turns | runtime | -| `src/agent_comms/session_config_options.py:34` | `agent_comms.pi_commands` | turns | runtime | -| `src/agent_comms/session_config_options.py:35` | `agent_comms.runtime` | turns | runtime | -| `src/agent_comms/session_config_options.py:38` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/session_effects.py:8` | `agent_comms.runtime` | turns | runtime | -| `src/agent_comms/session_effects.py:9` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/session_effects.py:12` | `agent_comms.cursor_publication` | turns | commander | -| `src/agent_comms/session_file.py:10` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/session_file.py:12` | `agent_comms.unstarted_runtime` | turns | commander | -| `src/agent_comms/session_file.py:15` | `agent_comms.agent_backend` | turns | runtime | -| `src/agent_comms/session_lifecycle.py:30` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/session_lifecycle.py:31` | `agent_comms.acp_extension` | turns | runtime | -| `src/agent_comms/session_lifecycle.py:36` | `agent_comms.child_process` | turns | commander | -| `src/agent_comms/session_lifecycle.py:37` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/session_lifecycle.py:39` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/session_lifecycle.py:40` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/session_lifecycle.py:42` | `agent_comms.native_arguments` | turns | runtime | -| `src/agent_comms/session_lifecycle.py:45` | `agent_comms.runtime` | turns | runtime | -| `src/agent_comms/session_lifecycle.py:46` | `agent_comms.runtime_requests` | turns | runtime | -| `src/agent_comms/session_lifecycle.py:53` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/session_lifecycle.py:54` | `agent_comms.transcript_updates` | turns | commander | -| `src/agent_comms/session_lifecycle.py:58` | `agent_comms.acp` | turns | commander | -| `src/agent_comms/session_load.py:4` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/session_load.py:9` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/session_load.py:12` | `agent_comms.native_arguments` | turns | runtime | -| `src/agent_comms/session_load.py:16` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/session_revision.py:9` | `agent_comms.native_session_files` | turns | runtime | -| `src/agent_comms/shared_ledger.py:9` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/standing_rules.py:43` | `agent_comms.ui_model.unit_state` | commander | ui_model | -| `src/agent_comms/storage_rules.py:40` | `agent_comms.tool_denial` | commander | cli | -| `src/agent_comms/storage_rules.py:51` | `agent_comms.ui_model.unit_state` | commander | ui_model | -| `src/agent_comms/thread_configuration.py:8` | `agent_comms.acp_extension` | registry | runtime | -| `src/agent_comms/thread_configuration.py:9` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/thread_configuration.py:10` | `agent_comms.registration` | registry | commander | -| `src/agent_comms/thread_configuration.py:12` | `agent_comms.agent_activity` | registry | runtime | -| `src/agent_comms/thread_creation.py:10` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/thread_execution.py:9` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/thread_execution.py:11` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/thread_execution.py:17` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/thread_execution.py:120` | `agent_comms.agent_activity` | registry | runtime | -| `src/agent_comms/thread_execution.py:185` | `agent_comms.agent_activity` | registry | runtime | -| `src/agent_comms/thread_identity.py:20` | `agent_comms.cli_options` | registry | cli | -| `src/agent_comms/thread_identity.py:27` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/thread_identity.py:37` | `agent_comms.response_policy` | registry | commander | -| `src/agent_comms/thread_identity.py:38` | `agent_comms.wake_policy` | registry | coordination | -| `src/agent_comms/thread_identity.py:41` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/thread_identity.py:42` | `agent_comms.messages` | registry | commander | -| `src/agent_comms/thread_identity.py:43` | `agent_comms.read_ledger` | registry | commander | -| `src/agent_comms/thread_identity.py:45` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/thread_identity.py:46` | `agent_comms.todos` | registry | commander | -| `src/agent_comms/thread_management.py:17` | `agent_comms.coordination_errors` | registry | coordination | -| `src/agent_comms/thread_management.py:19` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/thread_management.py:20` | `agent_comms.cli_result` | registry | cli | -| `src/agent_comms/thread_management.py:21` | `agent_comms.native_entries` | registry | runtime | -| `src/agent_comms/thread_management.py:22` | `agent_comms.registration` | registry | commander | -| `src/agent_comms/thread_management.py:27` | `agent_comms.cli_bridges.history` | registry | runtime | -| `src/agent_comms/thread_management.py:28` | `agent_comms.tool_caller` | registry | cli | -| `src/agent_comms/thread_management.py:29` | `agent_comms.agent_activity` | registry | runtime | -| `src/agent_comms/thread_management.py:30` | `agent_comms.agent_backend` | registry | runtime | -| `src/agent_comms/thread_management.py:31` | `agent_comms.catalog_store` | registry | commander | -| `src/agent_comms/thread_management.py:32` | `agent_comms.collaboration_ledger` | registry | commander | -| `src/agent_comms/thread_management.py:33` | `agent_comms.config_options` | registry | commander | -| `src/agent_comms/thread_management.py:34` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/thread_management.py:36` | `agent_comms.importing` | registry | commander | -| `src/agent_comms/thread_management.py:37` | `agent_comms.launch_runtime` | registry | commander | -| `src/agent_comms/thread_management.py:39` | `agent_comms.native_arguments` | registry | runtime | -| `src/agent_comms/thread_management.py:40` | `agent_comms.native_settings` | registry | runtime | -| `src/agent_comms/thread_management.py:42` | `agent_comms.pi_vocabulary` | registry | runtime | -| `src/agent_comms/thread_management.py:44` | `agent_comms.session_file` | registry | turns | -| `src/agent_comms/thread_management.py:45` | `agent_comms.store_files` | registry | commander | -| `src/agent_comms/thread_management.py:50` | `agent_comms.tool_result` | registry | cli | -| `src/agent_comms/thread_management.py:51` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/thread_management.py:485` | `agent_comms.goal_waits` | registry | coordination | -| `src/agent_comms/thread_management.py:486` | `agent_comms.relationships` | registry | commander | -| `src/agent_comms/thread_management.py:487` | `agent_comms.view_unread` | registry | commander | -| `src/agent_comms/thread_model.py:10` | `agent_comms.native_arguments` | registry | runtime | -| `src/agent_comms/thread_model.py:11` | `agent_comms.native_failures` | registry | runtime | -| `src/agent_comms/thread_model.py:15` | `agent_comms.native_arguments` | registry | runtime | -| `src/agent_comms/thread_model.py:16` | `agent_comms.pi_commands` | registry | runtime | -| `src/agent_comms/thread_owned_state.py:9` | `agent_comms.store_files` | registry | commander | -| `src/agent_comms/thread_owned_state.py:10` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/thread_owned_state.py:13` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/thread_presentation.py:9` | `agent_comms.coordination_errors` | registry | coordination | -| `src/agent_comms/thread_presentation.py:10` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/thread_presentation.py:14` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/thread_presentation.py:18` | `agent_comms.presentation` | registry | commander | -| `src/agent_comms/thread_presentation.py:19` | `agent_comms.transcripts` | registry | commander | -| `src/agent_comms/thread_presentation.py:21` | `agent_comms.transcripts` | registry | commander | -| `src/agent_comms/thread_presentation.py:146` | `agent_comms.agent_activity` | registry | runtime | -| `src/agent_comms/thread_presentation.py:170` | `agent_comms.agent_activity` | registry | runtime | -| `src/agent_comms/thread_presentation.py:254` | `agent_comms.notification_assignment` | registry | commander | -| `src/agent_comms/thread_presentation.py:255` | `agent_comms.presentation` | registry | commander | -| `src/agent_comms/thread_status.py:11` | `agent_comms.child_process` | registry | commander | -| `src/agent_comms/thread_status.py:13` | `agent_comms.errors` | registry | commander | -| `src/agent_comms/thread_status.py:25` | `agent_comms.activity` | registry | commander | -| `src/agent_comms/thread_status.py:27` | `agent_comms.registration` | registry | commander | -| `src/agent_comms/thread_status.py:30` | `agent_comms.threads` | registry | commander | -| `src/agent_comms/thread_status.py:31` | `agent_comms.tool_caller` | registry | cli | -| `src/agent_comms/thread_status.py:32` | `agent_comms.turn_lease` | registry | turns | -| `src/agent_comms/thread_status.py:130` | `agent_comms.turn_lease` | registry | turns | -| `src/agent_comms/thread_status.py:218` | `agent_comms.turn_lease` | registry | turns | -| `src/agent_comms/threads.py:15` | `agent_comms.cli_result` | commander | cli | -| `src/agent_comms/todos.py:79` | `agent_comms.tool_denial` | commander | cli | -| `src/agent_comms/tool_caller.py:10` | `agent_comms.errors` | cli | commander | -| `src/agent_comms/tool_caller.py:12` | `agent_comms.launch_root` | cli | commander | -| `src/agent_comms/tool_caller.py:13` | `agent_comms.launch_runtime` | cli | commander | -| `src/agent_comms/tool_caller.py:14` | `agent_comms.presentation` | cli | commander | -| `src/agent_comms/tool_caller.py:19` | `agent_comms.comms` | cli | commander | -| `src/agent_comms/tool_caller.py:20` | `agent_comms.registration` | cli | commander | -| `src/agent_comms/tool_caller.py:21` | `agent_comms.head_review` | cli | commander | -| `src/agent_comms/tool_caller.py:22` | `agent_comms.todos` | cli | commander | -| `src/agent_comms/tool_caller.py:23` | `agent_comms.threads` | cli | commander | -| `src/agent_comms/tool_calls.py:24` | `agent_comms.transcript_events` | cli | commander | -| `src/agent_comms/tool_request.py:13` | `agent_comms.comms` | cli | commander | -| `src/agent_comms/tool_request.py:15` | `agent_comms.errors` | cli | commander | -| `src/agent_comms/tool_results.py:15` | `agent_comms.transcript_events` | cli | commander | -| `src/agent_comms/tool_results.py:96` | `agent_comms.transcript_events` | cli | commander | -| `src/agent_comms/tools.py:8` | `agent_comms.order_tools` | cli | commander | -| `src/agent_comms/tools.py:25` | `agent_comms.change_report` | cli | commander | -| `src/agent_comms/tools.py:28` | `agent_comms.channels` | cli | commander | -| `src/agent_comms/tools.py:47` | `agent_comms.display_order` | cli | commander | -| `src/agent_comms/tools.py:48` | `agent_comms.errors` | cli | commander | -| `src/agent_comms/tools.py:66` | `agent_comms.goals` | cli | commander | -| `src/agent_comms/tools.py:67` | `agent_comms.history_result` | cli | commander | -| `src/agent_comms/tools.py:71` | `agent_comms.messages` | cli | commander | -| `src/agent_comms/tools.py:74` | `agent_comms.page_traversal` | cli | commander | -| `src/agent_comms/tools.py:77` | `agent_comms.presentation` | cli | commander | -| `src/agent_comms/tools.py:78` | `agent_comms.progress_claims` | cli | commander | -| `src/agent_comms/tools.py:79` | `agent_comms.read_basis` | cli | commander | -| `src/agent_comms/tools.py:80` | `agent_comms.relationships` | cli | commander | -| `src/agent_comms/tools.py:86` | `agent_comms.restart_queue` | cli | commander | -| `src/agent_comms/tools.py:89` | `agent_comms.restart_queue` | cli | commander | -| `src/agent_comms/tools.py:92` | `agent_comms.restart_queue` | cli | commander | -| `src/agent_comms/tools.py:95` | `agent_comms.restart_queue` | cli | commander | -| `src/agent_comms/tools.py:98` | `agent_comms.send_result` | cli | commander | -| `src/agent_comms/tools.py:99` | `agent_comms.task_sources` | cli | commander | -| `src/agent_comms/tools.py:111` | `agent_comms.progress_claims` | cli | commander | -| `src/agent_comms/tools.py:112` | `agent_comms.relationships` | cli | commander | -| `src/agent_comms/tools.py:116` | `agent_comms.threads` | cli | commander | -| `src/agent_comms/tools.py:119` | `agent_comms.work_branches` | cli | commander | -| `src/agent_comms/tools.py:122` | `agent_comms.comms` | cli | commander | -| `src/agent_comms/tracked_turn.py:46` | `agent_comms.tool_denial` | commander | cli | -| `src/agent_comms/transcript_events.py:14` | `agent_comms.tool_declaration` | commander | cli | -| `src/agent_comms/transcript_events.py:21` | `agent_comms.tool_results` | commander | cli | -| `src/agent_comms/transcript_events.py:24` | `agent_comms.ui_model.message_category` | commander | ui_model | -| `src/agent_comms/transcript_updates.py:21` | `agent_comms.ui_model.observation` | commander | ui_model | -| `src/agent_comms/turn_context.py:19` | `agent_comms.cli_result` | turns | cli | -| `src/agent_comms/turn_context.py:31` | `agent_comms.goals` | turns | commander | -| `src/agent_comms/turn_context.py:33` | `agent_comms.native_session_reopen` | turns | runtime | -| `src/agent_comms/turn_context.py:36` | `agent_comms.tool_result` | turns | cli | -| `src/agent_comms/turn_context.py:39` | `agent_comms.context_store` | turns | commander | -| `src/agent_comms/turn_context.py:41` | `agent_comms.presentation` | turns | commander | -| `src/agent_comms/turn_context.py:42` | `agent_comms.relationships` | turns | commander | -| `src/agent_comms/turn_context.py:43` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/turn_context.py:81` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/turn_context.py:117` | `agent_comms.cli_bridges.codex_rollout` | turns | runtime | -| `src/agent_comms/turn_context.py:939` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_context.py:944` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_context.py:964` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_digests.py:13` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/turn_digests.py:14` | `agent_comms.external_transcript` | turns | commander | -| `src/agent_comms/turn_digests.py:15` | `agent_comms.held_orders` | turns | commander | -| `src/agent_comms/turn_digests.py:16` | `agent_comms.order_work` | turns | commander | -| `src/agent_comms/turn_digests.py:19` | `agent_comms.tool_declaration` | turns | cli | -| `src/agent_comms/turn_digests.py:20` | `agent_comms.tool_result` | turns | cli | -| `src/agent_comms/turn_digests.py:21` | `agent_comms.bus` | turns | commander | -| `src/agent_comms/turn_digests.py:22` | `agent_comms.context_store` | turns | commander | -| `src/agent_comms/turn_digests.py:23` | `agent_comms.transcript_events` | turns | commander | -| `src/agent_comms/turn_digests.py:26` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/turn_digests.py:27` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/turn_digests.py:28` | `agent_comms.transcript_sources` | turns | commander | -| `src/agent_comms/turn_digests.py:29` | `agent_comms.todos` | turns | commander | -| `src/agent_comms/turn_digests.py:198` | `agent_comms.todos` | turns | commander | -| `src/agent_comms/turn_effects.py:11` | `agent_comms.runtime` | turns | runtime | -| `src/agent_comms/turn_failure.py:12` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/turn_failure.py:13` | `agent_comms.native_arguments` | turns | runtime | -| `src/agent_comms/turn_failure.py:16` | `agent_comms.backend` | turns | commander | -| `src/agent_comms/turn_failure.py:48` | `agent_comms.native_failures` | turns | runtime | -| `src/agent_comms/turn_failure.py:130` | `agent_comms.native_pi` | turns | runtime | -| `src/agent_comms/turn_goal_account.py:11` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/turn_goal_account.py:25` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_goal_account.py:27` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/turn_goal_account.py:28` | `agent_comms.goals` | turns | commander | -| `src/agent_comms/turn_goal_account.py:29` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_goal_account.py:30` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/turn_goal_permission.py:10` | `agent_comms.ordinary_turn_rules` | turns | commander | -| `src/agent_comms/turn_goal_permission.py:12` | `agent_comms.tool_denial` | turns | cli | -| `src/agent_comms/turn_goal_permission.py:16` | `agent_comms.goals` | turns | commander | -| `src/agent_comms/turn_input_source.py:14` | `agent_comms.acp_extension` | turns | runtime | -| `src/agent_comms/turn_input_source.py:15` | `agent_comms.agent_backend` | turns | runtime | -| `src/agent_comms/turn_input_source.py:20` | `agent_comms.messages` | turns | commander | -| `src/agent_comms/turn_input_source.py:21` | `agent_comms.ordinary_turn_rules` | turns | commander | -| `src/agent_comms/turn_input_source.py:28` | `agent_comms.routing` | turns | commander | -| `src/agent_comms/turn_input_source.py:30` | `agent_comms.started_input` | turns | commander | -| `src/agent_comms/turn_input_source.py:33` | `agent_comms.acp_extension` | turns | runtime | -| `src/agent_comms/turn_input_source.py:34` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/turn_input_source.py:35` | `agent_comms.controller` | turns | runtime | -| `src/agent_comms/turn_input_source.py:37` | `agent_comms.goals` | turns | commander | -| `src/agent_comms/turn_input_source.py:40` | `agent_comms.owned_send` | turns | commander | -| `src/agent_comms/turn_input_source.py:41` | `agent_comms.runtime` | turns | runtime | -| `src/agent_comms/turn_input_source.py:43` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/turn_inputs.py:13` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_inputs.py:15` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_inputs.py:16` | `agent_comms.pi_commands` | turns | runtime | -| `src/agent_comms/turn_inputs.py:17` | `agent_comms.agent_backend` | turns | runtime | -| `src/agent_comms/turn_inputs.py:19` | `agent_comms.locked_store` | turns | commander | -| `src/agent_comms/turn_inputs.py:20` | `agent_comms.maintenance_barrier` | turns | commander | -| `src/agent_comms/turn_inputs.py:22` | `agent_comms.native_failures` | turns | runtime | -| `src/agent_comms/turn_inputs.py:23` | `agent_comms.prompt_state` | turns | commander | -| `src/agent_comms/turn_inputs.py:26` | `agent_comms.backend` | turns | commander | -| `src/agent_comms/turn_inputs.py:27` | `agent_comms.pi_events` | turns | runtime | -| `src/agent_comms/turn_lease.py:12` | `agent_comms.activity` | turns | commander | -| `src/agent_comms/turn_lease.py:14` | `agent_comms.child_process` | turns | commander | -| `src/agent_comms/turn_lease.py:16` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/turn_lease.py:29` | `agent_comms.locked_store` | turns | commander | -| `src/agent_comms/turn_lease.py:31` | `agent_comms.read_basis` | turns | commander | -| `src/agent_comms/turn_lease.py:33` | `agent_comms.routing` | turns | commander | -| `src/agent_comms/turn_lease.py:34` | `agent_comms.store_files` | turns | commander | -| `src/agent_comms/turn_lease.py:46` | `agent_comms.messaging` | turns | commander | -| `src/agent_comms/turn_lease.py:48` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/turn_origin.py:11` | `agent_comms.messages` | turns | commander | -| `src/agent_comms/turn_origin.py:12` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/turn_output.py:9` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_output.py:11` | `agent_comms.acp_failure` | turns | runtime | -| `src/agent_comms/turn_output.py:17` | `agent_comms.native_arguments` | turns | runtime | -| `src/agent_comms/turn_output.py:20` | `agent_comms.backend` | turns | commander | -| `src/agent_comms/turn_output.py:21` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_phase.py:9` | `agent_comms.activity` | turns | commander | -| `src/agent_comms/turn_phase.py:10` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_phase.py:12` | `agent_comms.agent_activity` | turns | runtime | -| `src/agent_comms/turn_progress.py:16` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_progress.py:17` | `agent_comms.acp_extension` | turns | runtime | -| `src/agent_comms/turn_progress.py:18` | `agent_comms.acp_failure` | turns | runtime | -| `src/agent_comms/turn_progress.py:19` | `agent_comms.agent_event_updates` | turns | runtime | -| `src/agent_comms/turn_progress.py:20` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/turn_progress.py:21` | `agent_comms.context_store` | turns | commander | -| `src/agent_comms/turn_progress.py:22` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/turn_progress.py:23` | `agent_comms.diagnostics` | turns | commander | -| `src/agent_comms/turn_progress.py:24` | `agent_comms.messages` | turns | commander | -| `src/agent_comms/turn_progress.py:26` | `agent_comms.send_result` | turns | commander | -| `src/agent_comms/turn_progress.py:28` | `agent_comms.transcript_updates` | turns | commander | -| `src/agent_comms/turn_progress.py:33` | `agent_comms.owned_turn` | turns | commander | -| `src/agent_comms/turn_runner.py:19` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_runner.py:20` | `agent_comms.agent_backend` | turns | runtime | -| `src/agent_comms/turn_runner.py:21` | `agent_comms.agent_event_updates` | turns | runtime | -| `src/agent_comms/turn_runner.py:23` | `agent_comms.channels` | turns | commander | -| `src/agent_comms/turn_runner.py:24` | `agent_comms.controller` | turns | runtime | -| `src/agent_comms/turn_runner.py:25` | `agent_comms.coordinator` | turns | commander | -| `src/agent_comms/turn_runner.py:27` | `agent_comms.errors` | turns | commander | -| `src/agent_comms/turn_runner.py:28` | `agent_comms.following_inputs` | turns | commander | -| `src/agent_comms/turn_runner.py:37` | `agent_comms.messages` | turns | commander | -| `src/agent_comms/turn_runner.py:39` | `agent_comms.native_arguments` | turns | runtime | -| `src/agent_comms/turn_runner.py:40` | `agent_comms.native_input_owner` | turns | runtime | -| `src/agent_comms/turn_runner.py:41` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_runner.py:42` | `agent_comms.queued_input` | turns | commander | -| `src/agent_comms/turn_runner.py:43` | `agent_comms.routing` | turns | commander | -| `src/agent_comms/turn_runner.py:44` | `agent_comms.runtime` | turns | runtime | -| `src/agent_comms/turn_runner.py:48` | `agent_comms.threads` | turns | commander | -| `src/agent_comms/turn_runner.py:49` | `agent_comms.transcript_updates` | turns | commander | -| `src/agent_comms/turn_runner.py:58` | `agent_comms.pi_events` | turns | runtime | -| `src/agent_comms/turn_runner.py:59` | `agent_comms.comms` | turns | commander | -| `src/agent_comms/turn_runner.py:60` | `agent_comms.coordinated_runtime` | turns | commander | -| `src/agent_comms/turn_runner.py:169` | `agent_comms.pi_commands` | turns | runtime | -| `src/agent_comms/turn_runner.py:174` | `agent_comms.pi_commands` | turns | runtime | -| `src/agent_comms/turn_runner.py:285` | `agent_comms.pi_events` | turns | runtime | -| `src/agent_comms/turn_runner.py:449` | `agent_comms.owned_turn` | turns | commander | -| `src/agent_comms/turn_stats.py:11` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_stats.py:13` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_stats.py:14` | `agent_comms.pi_commands` | turns | runtime | -| `src/agent_comms/turn_stats.py:18` | `agent_comms.backend` | turns | commander | -| `src/agent_comms/turn_stats.py:19` | `agent_comms.pi_events` | turns | runtime | -| `src/agent_comms/turn_terminal.py:13` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_terminal.py:15` | `agent_comms.maintenance_barrier` | turns | commander | -| `src/agent_comms/turn_usage.py:7` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_usage.py:8` | `agent_comms.pi_counts` | turns | runtime | -| `src/agent_comms/turn_usage.py:9` | `agent_comms.pi_payloads` | turns | runtime | -| `src/agent_comms/turn_watchdog.py:11` | `agent_comms.agent_events` | turns | runtime | -| `src/agent_comms/turn_watchdog.py:16` | `agent_comms.native_startup` | turns | runtime | -| `src/agent_comms/turn_watchdog.py:19` | `agent_comms.backend` | turns | commander | -| `src/agent_comms/turn_watchdog.py:20` | `agent_comms.native_startup` | turns | runtime | -| `src/agent_comms/turn_watchdog.py:21` | `agent_comms.pi_events` | turns | runtime | -| `src/agent_comms/ui_model/goal.py:11` | `agent_comms.goals` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:36` | `agent_comms.active_route` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:37` | `agent_comms.activity` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:38` | `agent_comms.commander_hud` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:46` | `agent_comms.errors` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:48` | `agent_comms.presentation` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:66` | `agent_comms.view_unread` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:73` | `agent_comms.comms` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:74` | `agent_comms.history_views` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:76` | `agent_comms.presentation` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:80` | `agent_comms.transcripts` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:584` | `agent_comms.historical_views` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:1277` | `agent_comms.watched` | ui_model | commander | -| `src/agent_comms/ui_model/observation.py:1358` | `agent_comms.comms` | ui_model | commander | -| `src/agent_comms/ui_model/sidebar.py:14` | `agent_comms.read_ledger` | ui_model | commander | -| `src/agent_comms/ui_model/sidebar.py:17` | `agent_comms.display_order` | ui_model | commander | -| `src/agent_comms/ui_model/sidebar.py:18` | `agent_comms.presentation` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:21` | `agent_comms.messages` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:23` | `agent_comms.repo` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:24` | `agent_comms.standing_rules` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:27` | `agent_comms.todos` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:35` | `agent_comms.transcript_events` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:37` | `agent_comms.work_branches` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:40` | `agent_comms.comms` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:41` | `agent_comms.heartbeat_frame` | ui_model | commander | -| `src/agent_comms/ui_model/unit_state.py:42` | `agent_comms.threads` | ui_model | commander | -| `src/agent_comms/ui_model/unread.py:10` | `agent_comms.presentation` | ui_model | commander | -| `src/agent_comms/view_unread.py:35` | `agent_comms.ui_model.unread` | commander | ui_model | -| `src/agent_comms/wake_candidate_index.py:9` | `agent_comms.bus` | coordination | commander | -| `src/agent_comms/wake_policy.py:13` | `agent_comms.coordinator_vocabulary` | coordination | commander | -| `src/agent_comms/wake_policy.py:16` | `agent_comms.source_proof_requirement` | coordination | commander | -| `src/agent_comms/wake_policy.py:22` | `agent_comms.typed_table` | coordination | commander | -| `src/agent_comms/wake_policy.py:182` | `agent_comms.turn_context` | coordination | turns | -| `src/agent_comms/wake_policy.py:200` | `agent_comms.assignment_states` | coordination | commander | -| `src/agent_comms/wake_policy.py:228` | `agent_comms.assignment_states` | coordination | commander | -| `src/agent_comms/wake_policy.py:240` | `agent_comms.assignment_states` | coordination | commander | -| `src/agent_comms/wire_models.py:11` | `agent_comms.declared_family` | wire | registry | -| `src/agent_comms/working_memory_annotations.py:8` | `agent_comms.errors` | context | commander | -| `src/agent_comms/working_memory_disclosure.py:9` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/working_memory_labels.py:10` | `agent_comms.cli_result` | context | cli | -| `src/agent_comms/working_memory_labels.py:14` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/working_memory_labels.py:275` | `agent_comms.coordinator` | context | commander | -| `src/agent_comms/working_memory_policy.py:10` | `agent_comms.errors` | context | commander | -| `src/agent_comms/working_memory_policy.py:13` | `agent_comms.retained_task_facts` | context | commander | -| `src/agent_comms/working_memory_policy.py:14` | `agent_comms.task_sources` | context | commander | -| `src/agent_comms/working_memory_questions.py:7` | `agent_comms.annotation_disclosure` | context | turns | -| `src/agent_comms/working_memory_requests.py:10` | `agent_comms.turn_context` | context | turns | -| `src/agent_comms/working_memory_worker.py:11` | `agent_comms.acp_extension` | context | runtime | -| `src/agent_comms/working_memory_worker.py:13` | `agent_comms.coordinator` | context | commander | -| `src/agent_comms/working_memory_worker.py:15` | `agent_comms.annotation_disclosure` | context | turns | - -## Stack client imports - -Units the git sources in `stack/pyproject.toml` import directly, read at each branch head. Deleting one breaks that client; `--check` refuses it. - -| Unit | Imported by | -|---|---| -| `acp` | batrachian-toad | -| `acp_extension` | batrachian-toad | -| `acp_failure` | batrachian-toad | -| `active_route` | batrachian-toad | -| `activity` | batrachian-toad | -| `agent_event_updates` | batrachian-toad | -| `agent_events` | batrachian-toad | -| `audience_manifest` | batrachian-toad | -| `bus` | batrachian-toad | -| `catalog_document` | batrachian-toad | -| `channel_targets` | batrachian-toad | -| `channels` | batrachian-toad | -| `child_process` | batrachian-toad | -| `cli_bridges` | batrachian-toad | -| `cli_commands` | batrachian-toad | -| `cli_protocol` | batrachian-toad | -| `cli_result` | batrachian-toad | -| `command` | batrachian-toad | -| `commander` | batrachian-toad | -| `commander_hud` | batrachian-toad | -| `comms` | batrachian-toad, textual | -| `config_options` | batrachian-toad | -| `context_reading` | batrachian-toad | -| `context_store` | batrachian-toad | -| `controller` | batrachian-toad | -| `coordination_errors` | batrachian-toad | -| `coordinator` | batrachian-toad | -| `declared_family` | batrachian-toad | -| `delivery_failure` | batrachian-toad | -| `display_order` | batrachian-toad | -| `display_references` | batrachian-toad | -| `errors` | batrachian-toad | -| `exporting` | batrachian-toad | -| `external_transcript` | batrachian-toad | -| `field_codec` | batrachian-toad | -| `fresh_private_session` | batrachian-toad | -| `goal_actions` | batrachian-toad | -| `goal_history` | batrachian-toad | -| `goal_mentions` | batrachian-toad | -| `goal_presentation` | batrachian-toad | -| `goal_states` | batrachian-toad | -| `goals` | batrachian-toad | -| `harness_install` | batrachian-toad | -| `historical_views` | batrachian-toad | -| `history_views` | batrachian-toad | -| `image_input` | batrachian-toad | -| `image_inputs` | batrachian-toad | -| `importing` | batrachian-toad | -| `input_attempt` | batrachian-toad | -| `input_disposition` | batrachian-toad | -| `input_origin` | batrachian-toad | -| `installer` | batrachian-toad | -| `launch_root` | batrachian-toad | -| `launch_runtime` | batrachian-toad | -| `lifecycle` | batrachian-toad | -| `locked_store` | batrachian-toad | -| `login` | batrachian-toad | -| `mentions` | batrachian-toad | -| `message_page` | batrachian-toad | -| `message_reference` | batrachian-toad | -| `messages` | batrachian-toad | -| `mro_dispatch` | batrachian-toad | -| `native_arguments` | batrachian-toad | -| `native_entries` | batrachian-toad | -| `native_input_record` | batrachian-toad | -| `native_package` | batrachian-toad | -| `native_pi` | batrachian-toad | -| `native_runtime_input` | batrachian-toad | -| `native_session_files` | batrachian-toad | -| `native_session_reopen` | batrachian-toad | -| `native_turn_context` | batrachian-toad | -| `notification_progress` | batrachian-toad | -| `owner_protocol` | batrachian-toad | -| `page_traversal` | batrachian-toad | -| `pi_payloads` | batrachian-toad | -| `pi_vocabulary` | batrachian-toad | -| `presentation` | batrachian-toad | -| `read_basis` | batrachian-toad | -| `recorded_bus` | batrachian-toad | -| `registration` | batrachian-toad | -| `registry_document` | batrachian-toad | -| `registry_store` | batrachian-toad | -| `relationships` | batrachian-toad | -| `reported_turn` | batrachian-toad | -| `restart_refusals` | batrachian-toad | -| `retained_task_facts` | batrachian-toad | -| `revision_views` | batrachian-toad | -| `root_runtime` | batrachian-toad | -| `route_selection` | batrachian-toad | -| `routing` | batrachian-toad | -| `runtime` | batrachian-toad | -| `runtime_requests` | batrachian-toad | -| `selected_triage` | batrachian-toad | -| `sent_message` | batrachian-toad | -| `session_file` | batrachian-toad | -| `session_load` | batrachian-toad | -| `session_revision` | batrachian-toad | -| `thread_creation` | batrachian-toad | -| `thread_execution` | batrachian-toad | -| `thread_identity` | batrachian-toad | -| `thread_model` | batrachian-toad | -| `thread_presentation` | batrachian-toad | -| `thread_status` | batrachian-toad | -| `thread_text` | batrachian-toad | -| `threads` | batrachian-toad, textual | -| `tool_caller` | batrachian-toad | -| `tool_results` | batrachian-toad | -| `tools` | batrachian-toad | -| `transcript_events` | batrachian-toad | -| `transcript_sources` | batrachian-toad | -| `transcripts` | batrachian-toad | -| `turn_context` | batrachian-toad | -| `turn_lease` | batrachian-toad | -| `turn_phase` | batrachian-toad | -| `typed_table` | batrachian-toad | -| `ui_model` | batrachian-toad | -| `working_memory_annotations` | batrachian-toad | -| `working_memory_labels` | batrachian-toad | -| `working_memory_questions` | batrachian-toad | - -## Deletion candidates - -No console script in `pyproject.toml` and no stack client reaches these through static imports or literal `import_module` calls. Prove each unused with an import hook before deleting it. - -- `behaviour_patterns` -- `cli_native_package` -- `producer_stamp` -- `skills` diff --git a/tests/test_module_layers_clients.py b/tests/test_module_layers_clients.py index 3c1b3528ce..d957724661 100644 --- a/tests/test_module_layers_clients.py +++ b/tests/test_module_layers_clients.py @@ -12,11 +12,17 @@ def write(path: Path, text: str = "") -> None: def test_client_imports_root_reachability_and_name_missing_modules(tmp_path): core = tmp_path / "core" - write(core / "pyproject.toml", '[project.scripts]\nac = "agent_comms.cli:main"\n') + write( + core / "pyproject.toml", + '[project.scripts]\nac = "agent_comms.cli:main"\nguard = "agent_comms_hooks.guard:main"\n', + ) write(core / "src/agent_comms/__init__.py") write(core / "src/agent_comms/cli.py") write(core / "src/agent_comms/ingress.py") write(core / "src/agent_comms/orphan.py") + write(core / "src/agent_comms/rules.py") + write(core / "src/agent_comms_hooks/guard.py", "from agent_comms_hooks import shared\n") + write(core / "src/agent_comms_hooks/shared.py", "from agent_comms.rules import Rule\n") client = tmp_path / "toad" write( client / "src/toad/session.py", @@ -63,7 +69,7 @@ def test_client_names_must_be_defined_by_their_module(tmp_path): def wire_base(tmp_path: Path, wire: OutgoingWire) -> Path: """A base tree holding only the modules the outgoing wire names, copied from this tree.""" base = tmp_path / "base" - write(base / "pyproject.toml") + write(base / "pyproject.toml", '[project.scripts]\nac = "agent_comms.cli:main"\n') write(base / "src/agent_comms/__init__.py") for entry in wire.imports: write(base / "src" / entry.path, (wire.checkout / entry.path).read_text()) diff --git a/tests/test_module_layers_loads.py b/tests/test_module_layers_loads.py index 3d85fb2058..245ac40d3c 100644 --- a/tests/test_module_layers_loads.py +++ b/tests/test_module_layers_loads.py @@ -33,6 +33,7 @@ def test_only_imports_that_run_while_the_module_loads_load_their_target(tmp_path path = tmp_path / "src" / "agent_comms" / name path.parent.mkdir(parents=True, exist_ok=True) path.write_text(source) + (tmp_path / "pyproject.toml").write_text('[project.scripts]\nac = "agent_comms.user:main"\n') package = Package(tmp_path) loads = { edge.target: edge.loads for edge in package.imports if edge.source == "agent_comms.user" diff --git a/tools/module_layers.py b/tools/module_layers.py index e007bca667..c543420285 100644 --- a/tools/module_layers.py +++ b/tools/module_layers.py @@ -1,23 +1,24 @@ """The layer each agent_comms module belongs to, derived from its name and its imports. -The layer table in this module names each layer's module prefixes; a module no -prefix claims takes the highest layer among the modules it -imports, so it adds no violation of its own. Every import that still runs downward -in the order, or into a top layer from outside it, is a violation. +Each layer is a class built on the layers it may import, and names its module +prefixes; a module no prefix claims takes the highest layer among the modules it +imports, so it adds no violation of its own. Every import into a layer the +importing layer is not built on is a violation. The stack (stack/pyproject.toml) declares the client packages installed with Core from git sources: Toad and Textual import agent_comms modules. Each client is read at its branch head, so its imports root the reachability like a console script does. Modules neither reaches are listed as deletion candidates, and a client import naming a module -Core no longer has fails --check, the step the merge queue runs. +Core no longer has fails --check, the step the merge queue runs. That step writes this +report to its job summary, so the report always describes the tree it was run on. The outgoing wire is a client too, of the Core an install upgrades from: the installed runtime answers every RuntimeProbe but a TargetProbe with its own installer, so --base REV reads Core at REV and --check fails when it lacks one of those probes or declares its fields differently. - python tools/module_layers.py > docs/layout/MODULE_LAYERS.md - python tools/module_layers.py --check [--base REV] + python tools/module_layers.py + python tools/module_layers.py --check [--base REV] [--report FILE] """ from __future__ import annotations @@ -41,36 +42,73 @@ from typing_names import TypingImports, TypingReference +from agent_comms.declared_family import DeclaredFamily + ROOT = Path(__file__).resolve().parent.parent PACKAGE = "agent_comms" -@dataclass(frozen=True) -class Layer: - """A package of the target structure and the module name prefixes it owns.""" +class Layer(DeclaredFamily): + """A package of the target structure. Its bases are the layers it may import, and + its prefixes the module names it owns besides its own name.""" + + prefixes: typing.ClassVar[frozenset[str]] = frozenset() + + @classmethod + def claim(cls, unit: str) -> int: + """How much of the unit's name this layer claims; the longest claim owns it.""" + head = unit.split(".")[1] + claims = [len(prefix) for prefix in cls.prefixes if head.startswith(prefix)] + if head == cls.declared_name: + claims.append(len(head)) + return max(claims, default=0) + + @classmethod + def may_import(cls, target: type[Layer]) -> bool: + return issubclass(cls, target) + + @classmethod + def on_top(cls) -> bool: + """Nothing is built on a top layer, so nothing outside it may import it.""" + return not any( + member is not cls and member.may_import(cls) for member in Layer.members_with(Layer) + ) + + +class Wire(Layer): + prefixes = frozenset({"bus_", "wire_", "message_", "delivery_", "private_"}) + + +class Registry(Wire): + prefixes = frozenset({"registry_", "registration_", "owner_", "thread_", "channel_"}) + + +class Coordination(Registry): + prefixes = frozenset({"goal_", "attempt_", "coordination_", "wake_"}) + + +class Context(Coordination): + prefixes = frozenset({"working_", "context_segments", "instructions"}) + + +class Turns(Context): + prefixes = frozenset({"turn_", "input_", "session_", "selected_"}) + + +class Runtime(Turns): + prefixes = frozenset({"native_", "pi_", "acp_", "agent_", "runtime_", "_pi_helpers", "cli_bridges"}) - name: str - prefixes: tuple[str, ...] - top: bool = False - def claims(self, module: str) -> bool: - head = module.split(".")[1] - return head == self.name or any(head.startswith(prefix) for prefix in self.prefixes) +class UiModel(Runtime): + pass -LAYERS = ( - Layer("wire", ("bus_", "wire_", "message_", "delivery_", "private_")), - Layer("registry", ("registry_", "registration_", "owner_", "thread_", "channel_")), - Layer("coordination", ("goal_", "attempt_", "coordination_", "wake_")), - Layer("context", ("working_", "context_segments", "instructions")), - Layer("turns", ("turn_", "input_", "session_", "selected_")), - Layer( - "runtime", ("native_", "pi_", "acp_", "agent_", "runtime_", "_pi_helpers", "cli_bridges") - ), - Layer("ui_model", (), top=True), - Layer("cli", ("cli_", "tool_", "tools"), top=True), - Layer("commander", (), top=True), -) +class Cli(Runtime): + prefixes = frozenset({"cli_", "tool_", "tools"}) + + +class Commander(Runtime): + pass @dataclass(frozen=True) @@ -413,15 +451,29 @@ def __init__(self, root: Path, clients: tuple[StackClient, ...] = ()) -> None: self.root = self.src / PACKAGE / "__init__.py" # read for reachability, never a unit self.clients = clients + def dotted(self, path: Path) -> str: + return ".".join(path.relative_to(self.src).with_suffix("").parts).removesuffix( + ".__init__" + ) + @cached_property def files(self) -> dict[str, Path]: return { - ".".join(path.relative_to(self.src).with_suffix("").parts).removesuffix( - ".__init__" - ): path + self.dotted(path): path for path in sorted(set((self.src / PACKAGE).rglob("*.py")) - {self.root}) } + @cached_property + def script_packages(self) -> dict[str, Path]: + """The modules of every other package a console script starts in, read for + reachability and never units: their imports of agent_comms run like a script's.""" + roots = {script.partition(".")[0] for script in self.entry_points} - {PACKAGE} + return { + self.dotted(path): path + for root in sorted(roots) + for path in sorted((self.src / root).rglob("*.py")) + } + @cached_property def top_level(self) -> tuple[str, ...]: """Each top-level module and subpackage: the units the layer map assigns.""" @@ -437,15 +489,15 @@ def unit(self, module: str) -> str: return ".".join(module.split(".")[:2]) def resolve(self, name: str) -> str | None: - """The module an import names, or None when it is outside agent_comms.""" - while name and name not in self.files: + """The module an import names, or None when this tree does not provide it.""" + while name and name not in self.modules: name = name.rpartition(".")[0] return name or None @cached_property def modules(self) -> dict[str, Path]: - """Every importable module, the package root included.""" - return {PACKAGE: self.root, **self.files} + """Every importable module: the units, the package root and the script packages.""" + return {PACKAGE: self.root, **self.script_packages, **self.files} def contains(self, module: str) -> bool: """Whether an absolute module name lies inside this package, present or not.""" @@ -459,42 +511,46 @@ def imports(self) -> tuple[Import, ...]: return tuple(sorted(set(found), key=lambda edge: (edge.source, edge.line, edge.target))) @cached_property - def layers(self) -> dict[str, Layer]: - """Each unit's layer: its claiming prefix, else the highest layer it imports.""" - claimed = { - unit: next(layer for layer in LAYERS if layer.claims(unit)) - for unit in self.top_level - if any(layer.claims(unit) for layer in LAYERS) - } - rank = {unit: LAYERS.index(layer) for unit, layer in claimed.items()} - rank |= {unit: 0 for unit in self.top_level if unit not in claimed} + def layers(self) -> dict[str, type[Layer]]: + """Each unit's layer: its longest claim, else the highest layer it imports. + + Highest is by declaration: on the chain that is the inheritance order, and between + top layers, which import nothing of each other, the later declared one.""" + members = Layer.members_with(Layer) + position = {layer: index for index, layer in enumerate(members)} + claimed: dict[str, type[Layer]] = {} + for unit in self.top_level: + layer = max(members, key=lambda layer: layer.claim(unit)) + if layer.claim(unit): + claimed[unit] = layer + layers = {unit: claimed.get(unit, Wire) for unit in self.top_level} changed = True while changed: changed = False for edge in self.unit_imports: source, target = self.unit(edge.source), self.unit(edge.target) - if source not in claimed and source != target and rank[target] > rank[source]: - rank[source], changed = rank[target], True - return {unit: LAYERS[rank[unit]] for unit in self.top_level} + higher = position[layers[target]] > position[layers[source]] + if source not in claimed and higher: + layers[source], changed = layers[target], True + return layers @cached_property def unit_imports(self) -> tuple[Import, ...]: - """Imports between units; the package root is read for reachability only.""" - return tuple(edge for edge in self.imports if edge.source in self.files) + """Imports between units; the other modules are read for reachability only.""" + return tuple( + edge for edge in self.imports if edge.source in self.files and edge.target in self.files + ) @cached_property def violations(self) -> tuple[Import, ...]: - """Imports into a later layer, or into a top layer from outside it.""" - order = {layer: index for index, layer in enumerate(LAYERS)} - found = [] - for edge in self.unit_imports: - source, target = ( - self.layers[self.unit(edge.source)], - self.layers[self.unit(edge.target)], + """Imports into a layer the importing layer is not built on.""" + return tuple( + edge + for edge in self.unit_imports + if not self.layers[self.unit(edge.source)].may_import( + self.layers[self.unit(edge.target)] ) - if source is not target and (target.top or order[target] > order[source]): - found.append(edge) - return tuple(found) + ) @cached_property def entry_points(self) -> tuple[str, ...]: @@ -580,27 +636,35 @@ def load_graph(self) -> ImportGraph: """The imports that run while modules load: a cycle through them deadlocks an import.""" return ImportGraph(edge for edge in self.imports if edge.loads) + @staticmethod + def joined(words: Iterable[str]) -> str: + """Words as an English list: ``a``, ``a and b``, ``a, b and c``.""" + *rest, last = words + return f"{', '.join(rest)} and {last}" if rest else last + def markdown(self) -> str: lines = [ "# Module layers", "", - "Generated by `python tools/module_layers.py > docs/layout/MODULE_LAYERS.md`;" - " do not edit by hand.", + "Generated by `python tools/module_layers.py` for the tree it ran on.", "", - "Layers in order: " + ", ".join(f"`{layer.name}`" for layer in LAYERS) + ". " - "Each layer imports only the layers before it; " - "`ui_model`, `cli` and `commander` sit on top, " - "and nothing outside a top layer imports it. The layer table in " - "`tools/module_layers.py` declares the claiming prefixes; a module no prefix " + "Layers in order: " + + ", ".join(f"`{layer.declared_name}`" for layer in Layer.members_with(Layer)) + + ". Each layer imports only the layers before it; " + + self.joined( + f"`{layer.declared_name}`" for layer in Layer.members_with(Layer) if layer.on_top() + ) + + " sit on top, and nothing outside a top layer imports it. The layer classes in " + "`tools/module_layers.py` declare the claiming prefixes; a module no prefix " "claims takes the highest layer it imports.", "", f"{len(self.top_level)} top-level units ({len(self.subpackages)} of them subpackages); " f"{len(self.violations)} violating imports; {len(self.unreached)} deletion candidates.", "", ] - for layer in LAYERS: + for layer in Layer.members_with(Layer): units = [unit for unit in self.top_level if self.layers[unit] is layer] - lines += [f"## {layer.name} ({len(units)})", ""] + lines += [f"## {layer.declared_name} ({len(units)})", ""] lines += [f"- `{unit.removeprefix(PACKAGE + '.')}`" for unit in units] lines.append("") lines += [ @@ -616,7 +680,8 @@ def markdown(self) -> str: self.layers[self.unit(edge.target)], ) lines.append( - f"| `{path}:{edge.line}` | `{edge.target}` | {source.name} | {target.name} |" + f"| `{path}:{edge.line}` | `{edge.target}` " + f"| {source.declared_name} | {target.declared_name} |" ) lines += [ "", @@ -685,12 +750,17 @@ def main() -> int: metavar="REV", help="with --check, also fail when Core at REV lacks an outgoing probe or its fields", ) + parser.add_argument( + "--report", type=Path, help="with --check, also write the layer report to this file" + ) arguments = parser.parse_args() with tempfile.TemporaryDirectory() as clones: package = Package(ROOT, StackClient.fetched(ROOT / "stack", Path(clones))) if not arguments.check: sys.stdout.write(package.markdown()) return 0 + if arguments.report: + arguments.report.write_text(package.markdown()) lacking = report(package) if arguments.base: base = base_tree(arguments.base, Path(clones) / "base")