Files
wehub-resource-sync 4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:45 +08:00

45 lines
2.1 KiB
Python

"""One-shot vendor adapter loader for report delivery.
Each vendor's ``integrations/<vendor>/reporting_adapter.py`` registers a
:class:`platform.reporting.delivery_registry.ReportDeliveryAdapter` (and the
Slack module also registers a
:class:`platform.reporting.slack_reactions.SlackReactionsPort`) at import
time. This bootstrap concentrates those six vendor imports in one place so
:mod:`tools.investigation.reporting.delivery.dispatch` — the actual dispatch
loop — stays vendor-neutral.
Historically the dispatch node itself imported each vendor's ``send_*_report``
symbol, forming a ``tools -> integrations`` edge per vendor (T-4 layering
audit, issue #3352, items 23/28). Moving the wiring into a single bootstrap
file keeps the dispatch body free of vendor logic and makes the transitional
audit surface obvious. Once every ``tools -> integrations`` edge is removed
(when the vendor adapters are triggered by a lower-layer loader — e.g. the
integrations catalog itself), this bootstrap goes away.
"""
from __future__ import annotations
from platform.reporting.delivery_registry import registered_delivery_adapter_names
def ensure_delivery_adapters_registered() -> tuple[str, ...]:
"""Import every vendor adapter module so its side-effect registration runs.
Returns the names of currently registered adapters as a small
diagnostics affordance (empty tuple means the bootstrap silently produced
zero adapters, which should never happen and is worth surfacing in tests).
"""
# These imports are intentional wiring, not dispatch logic. Keeping them
# here means ``dispatch.py`` never touches the vendor packages directly.
import integrations.discord.reporting_adapter # noqa: F401
import integrations.openclaw.reporting_adapter # noqa: F401
import integrations.slack.reporting_adapter # noqa: F401
import integrations.telegram.reporting_adapter # noqa: F401
import integrations.twilio.reporting_adapter # noqa: F401
import integrations.whatsapp.reporting_adapter # noqa: F401
return registered_delivery_adapter_names()
__all__ = ["ensure_delivery_adapters_registered"]