| name | host_restart_service |
| description | 重启允许列表内的 systemd service(mutating,触发 reviewer 二审) |
| when_to_use | 用户**明确**要求重启某个允许列表内的服务时使用。
**本工具是 mutating,会触发 reviewer 二审(agents/reviewer.md),等待 approve 后才执行**。
调用前 reviewer 会去查 SOP / 设备状态 / 并行操作,任一不满足即 reject — 你(coordinator)
收到 reject 时**直接告知用户原因,不要重试**。
不要主动建议重启 — 让用户先要求。常见的"我猜重启就好了"是诊断不深入的信号,
应该先用 query_logql / query_promql / get_edge_summary 把根因摸清楚再让用户决定。
允许列表(白名单):nginx / redis / prometheus / loki / tempo / grafana / mysql / ongrid
其他 service 直接拒绝(也不走 reviewer)。
|
| metadata | {"os":["linux"],"requires":{"bins":["systemctl"]},"ongrid":{"scope":"edge","edge_runtime":"subprocess","edge_capabilities":[{"process.exec":["systemctl"]}],"activation":{"mode":"keyword","keywords":["重启","重起","restart","systemctl"]},"min_ongrid_version":">=0.7.30"}} |
[能力: host_restart_service]
本工具重启目标设备上的 systemd 服务。属于 mutating class,调用前自动经过 reviewer 二审:
调用规则
host_restart_service(device_id=<num>, service="nginx", reason="...")
device_id 必填:与 @-mention chip 和 Prom device_id label 一致
service 必填:systemd 短名(不带 .service 后缀)
reason 强烈建议填:写入审计行,事后复盘看得到为什么重启的
白名单
调用前自动检查 service ∈ 下列之一:
nginx / redis / prometheus / loki / tempo / grafana / mysql / ongrid
其他 service 直接拒绝(不走 reviewer,省一次 LLM 调用)。
二审流程(HLD-003 SOP)
你 (coordinator) 发出 host_restart_service tool_call
↓
ReviewGate 装饰器拦截
↓ class="write"|"destructive"
↓ spawn reviewer worker (agents/reviewer.md)
↓ 等 reviewer 输出 "Decision: approve" 或 "Decision: reject"
↓
approve → 真正调用边端 systemctl restart
reject → 返回 reject 理由给你,**不要重试,转告用户**
reviewer 自己会用 get_edge_summary / query_logql / get_incident_detail 看 SOP /
并行操作 / 上次 mutating 时间 / 关联告警再决议;你不需要重复这些查询。
不要做的事
- 不要在用户没明说"重启 X"时调用 — 主动建议重启是反模式
- 不要 reject 后立刻重试 — reviewer 已经给了理由,转告用户让他决定
- 不要试图绕过白名单 — 边端会再校验一次,绕不过
- 不要传
reason="" — 审计行会一片空白,post-mortem 会骂
一期实现 (PR-7)
- 边端 handler 是 mock(
Mocked: true),不会真跑 systemctl restart
- 真实 shell-out 留 follow-up;本期目标是把 reviewer 二审端到端跑通