fix(api): 補修復候選人工草案包
This commit is contained in:
@@ -270,6 +270,9 @@ def _format_manual_handoff_package_lines(
|
||||
alert_category: str = "",
|
||||
suggested_action: str | None = None,
|
||||
verdict: str | None = None,
|
||||
repair_candidate_blocker_summary: str = "",
|
||||
repair_candidate_next_step: str = "",
|
||||
repair_candidate_required_fields: list[str] | None = None,
|
||||
compact: bool = False,
|
||||
) -> list[str]:
|
||||
"""Build a safe manual handoff package for no-action / degraded alerts.
|
||||
@@ -287,6 +290,11 @@ def _format_manual_handoff_package_lines(
|
||||
|
||||
evidence_hint = _manual_evidence_hint(resource_name, alert_category)
|
||||
incident_ref = incident_id or "--"
|
||||
required_fields = [
|
||||
str(field)
|
||||
for field in (repair_candidate_required_fields or [])
|
||||
if str(field).strip()
|
||||
]
|
||||
lines = [
|
||||
"",
|
||||
"🧰 <b>人工處置包</b>",
|
||||
@@ -296,6 +304,25 @@ def _format_manual_handoff_package_lines(
|
||||
"├ 3. 在 AwoooP 建立修復候選:命令、風險、rollback、verifier、owner",
|
||||
"└ 4. 修復後回寫:execution result、verifier、KM / PlayBook trust",
|
||||
]
|
||||
insert_at = 3
|
||||
if repair_candidate_blocker_summary:
|
||||
lines.insert(
|
||||
insert_at,
|
||||
f"├ 阻擋:{html.escape(str(repair_candidate_blocker_summary)[:260])}",
|
||||
)
|
||||
insert_at += 1
|
||||
if repair_candidate_next_step:
|
||||
lines.insert(
|
||||
insert_at,
|
||||
f"├ 下一步:{html.escape(str(repair_candidate_next_step)[:360])}",
|
||||
)
|
||||
insert_at += 1
|
||||
if required_fields:
|
||||
field_text = ", ".join(required_fields[:7])
|
||||
lines.insert(
|
||||
insert_at,
|
||||
f"├ PlayBook 草案欄位:<code>{html.escape(field_text)}</code>",
|
||||
)
|
||||
if not compact:
|
||||
lines.append("按鈕:<b>處置包</b> 看完整證據,<b>重診</b> 重新收集,<b>Runs</b> 追蹤狀態")
|
||||
return lines
|
||||
@@ -1938,6 +1965,9 @@ class TelegramMessage:
|
||||
automation_state: str = "" # diagnosis_collected_manual_required / diagnosis_failed_manual_required
|
||||
automation_quality: dict | None = None # truth-chain automation_quality 摘要
|
||||
remediation_summary: dict | None = None # ADR-100 read-only dry-run history 摘要
|
||||
repair_candidate_blocker_summary: str = "" # 修復候選阻擋原因摘要
|
||||
repair_candidate_next_step: str = "" # 修復候選阻擋後的下一步
|
||||
repair_candidate_required_fields: list[str] | None = None # PlayBook 草案必填欄位
|
||||
|
||||
# ==========================================================================
|
||||
# Phase 22: Nemotron 協作欄位 (ADR-044)
|
||||
@@ -2117,6 +2147,9 @@ class TelegramMessage:
|
||||
alert_category=self.alert_category,
|
||||
suggested_action=self.suggested_action,
|
||||
verdict=verdict,
|
||||
repair_candidate_blocker_summary=self.repair_candidate_blocker_summary,
|
||||
repair_candidate_next_step=self.repair_candidate_next_step,
|
||||
repair_candidate_required_fields=self.repair_candidate_required_fields,
|
||||
)
|
||||
if not lines:
|
||||
return ""
|
||||
@@ -4126,6 +4159,10 @@ class TelegramGateway:
|
||||
# 2026-04-16 ogt + Claude Sonnet 4.6: 修復鏈路顯示 (ADR-076)
|
||||
playbook_name: str = "",
|
||||
automation_state: str = "",
|
||||
# 2026-06-11 Codex: no-action 修復候選阻擋時的人工處置包欄位。
|
||||
repair_candidate_blocker_summary: str = "",
|
||||
repair_candidate_next_step: str = "",
|
||||
repair_candidate_required_fields: list[str] | None = None,
|
||||
) -> dict:
|
||||
"""
|
||||
推送待簽核卡片到 Telegram (v7.0 含 SignOz 整合)
|
||||
@@ -4232,6 +4269,9 @@ class TelegramGateway:
|
||||
automation_state=automation_state,
|
||||
automation_quality=automation_quality,
|
||||
remediation_summary=remediation_summary,
|
||||
repair_candidate_blocker_summary=repair_candidate_blocker_summary,
|
||||
repair_candidate_next_step=repair_candidate_next_step,
|
||||
repair_candidate_required_fields=repair_candidate_required_fields,
|
||||
)
|
||||
|
||||
# 格式化訊息 — Phase 22: 如果 Nemotron 啟用,使用雙軌格式
|
||||
|
||||
Reference in New Issue
Block a user