fix(agent99): deliver visual lifecycle cards

This commit is contained in:
ogt
2026-07-15 17:31:18 +08:00
parent b9ee3c5cbb
commit d471b3cfe8
9 changed files with 553 additions and 19 deletions

View File

@@ -50,10 +50,23 @@
"safe_next_action": "retain incident, suppress duplicate WOL, verify power/network and exact host identity before recovery close"
},
"source_change": {
"source_verified_at": "2026-07-15T17:30:53+08:00",
"gitea_main_deployed": false,
"feature_branch_only": true,
"windows_ast_error_count": 0,
"focused_tests_passed": 82,
"host_recovery_focused_tests_passed": 83,
"telegram_and_durable_outbox_tests_passed": 140,
"telegram_visual_delivery": {
"status": "source_verified_not_deployed",
"primary_method": "sendPhoto",
"duplicate_message_created": false,
"send_once_identity_preserved": true,
"max_png_bytes": 1048576,
"fixed_dimensions": "1200x760",
"sha256_required": true,
"legacy_text_reuse_false_green_blocked": true,
"raw_visual_stored": false
},
"github_used": false
},
"secret_value_read": false,

View File

@@ -2745,3 +2745,28 @@ Bonjour `.80` 位址均失聯。Agent99 已自動 Detect 並執行 allowlisted W
機器可讀 incident evidence
`docs/operations/agent99-host112-host111-recovery-readback-2026-07-15.snapshot.json`
### 16.8 2026-07-15 Agent99 Telegram 視覺事件卡 durable delivery
Windows99 原本已能產生 1200x760 PNG但 canonical lifecycle ingress 只送
`sendMessage`,因此 evidence 會正確顯示 `visualSent=false`。修正後Agent99 對已啟用
視覺卡的 lifecycle 使用同一 send-once identity 送出單一 `sendPhoto` 主訊息與短 caption
不得再先送長文字、再補一張圖片造成雙倍噪音。
視覺傳輸合約:
- 只接受 `agent99_system_drawing_v1` 產生的 PNG固定 `1200x760`、上限 `1 MiB`,並驗證
PNG header、IHDR dimensions 與 SHA-256。不得接收檔案路徑、raw screenshot path、任意
media URL、Bot token、raw log 或 secret。
- PNG 只在記憶體中經 Agent99 lifecycle ingress 轉成 Telegram multipartAWOOOI outbox、
LOG、KM 與 API receipt 只保存 hash、media type、delivery state 與 provider message ID
`raw_visual_stored=false`
- `sendPhoto` 必須沿用相同 `delivery_id / incident_id / state_key / run_id`、canonical route、
reservation、destination binding、provider ack 與 incident reply markup圖片不是第二條旁路。
- caption 必須是繁體中文優先、行動裝置可掃讀,且在 escape 前逐欄 bounded禁止直接從
4096 字文字卡粗暴截斷,避免切斷 HTML entity/tag。
- `visual_sent=true` 只在 provider image delivery 與 destination verifier 都通過時成立。
舊版文字訊息即使同 identity 回 `sent_reused`,若 outbox 沒有 visual delivery evidence
仍必須回 `visual_sent=false`,不得假綠。
- 圖片渲染或傳輸失敗時文字 lifecycle 仍可送達,但 terminal 只能是 partial/degraded
`visualError``visual_delivery_status` 必須留在 evidence待同一 incident 後續修復。