fix(agent99): dispatch actionable alerts with receipts
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m27s
CD Pipeline / build-and-deploy (push) Successful in 6m39s
CD Pipeline / post-deploy-checks (push) Successful in 1m55s

This commit is contained in:
ogt
2026-07-11 09:43:48 +08:00
parent f102616f02
commit 34e32f6ed6
16 changed files with 870 additions and 89 deletions

View File

@@ -468,6 +468,7 @@ def test_send_request_payload_normalizer_blocks_direct_host_raw_dump() -> None:
async def test_send_request_mirrors_direct_ai_alert_card_to_agent99(monkeypatch) -> None:
"""direct sendMessage AI cards must reach Agent99 even without wrapper helpers."""
mirrored: list[dict[str, str]] = []
outbound_receipts: list[dict[str, object]] = []
gateway = TelegramGateway()
gateway._initialized = True
@@ -476,15 +477,25 @@ async def test_send_request_mirrors_direct_ai_alert_card_to_agent99(monkeypatch)
return None
def json(self) -> dict:
return {"ok": True, "result": True}
return {"ok": True, "result": {"message_id": 991}}
class FakeHttpClient:
async def post(self, url, json): # type: ignore[no-untyped-def]
return FakeResponse()
async def fake_mirror(text: str, *, source: str = "telegram_gateway") -> str:
async def fake_mirror(
text: str, *, source: str = "telegram_gateway"
) -> dict[str, object]:
mirrored.append({"text": text, "source": source})
return "mirrored"
return {
"schema_version": "telegram_agent99_dispatch_receipt_v1",
"status": "accepted_inbox_triggered",
"accepted": True,
"inbox_triggered": True,
}
async def fake_outbound_message(**kwargs) -> None: # type: ignore[no-untyped-def]
outbound_receipts.append(kwargs)
monkeypatch.setattr(TelegramGateway, "api_url", property(lambda _self: "https://telegram.test/botx"))
monkeypatch.setattr(
@@ -497,6 +508,7 @@ async def test_send_request_mirrors_direct_ai_alert_card_to_agent99(monkeypatch)
"_mirror_ai_automation_alert_card_to_agent99",
fake_mirror,
)
monkeypatch.setattr(gateway, "_mirror_outbound_message", fake_outbound_message)
gateway._http_client = FakeHttpClient()
result = await gateway._send_request(
@@ -513,12 +525,18 @@ async def test_send_request_mirrors_direct_ai_alert_card_to_agent99(monkeypatch)
)
await asyncio.sleep(0)
assert result == {"ok": True, "result": True}
assert result == {"ok": True, "result": {"message_id": 991}}
assert mirrored
assert mirrored[0]["source"] == "send_request"
assert "ai_automation_alert_card_v1" in mirrored[0]["text"]
assert "provider_freshness_signal" in mirrored[0]["text"]
assert "runtime_write_gate=controlled" in mirrored[0]["text"]
assert outbound_receipts
receipt = outbound_receipts[0]["source_envelope_extra"][
"agent99_dispatch_receipt"
]
assert receipt["status"] == "accepted_inbox_triggered"
assert receipt["accepted"] is True
def test_weekly_report_marks_all_zero_as_low_trust_anomaly() -> None: