feat: 拦截规则 allow/deny 命中也进审批记录(三种 action 全可观测)
此前只有 ask 命中会写 intercept_pending(审批记录);deny 直接拦下、allow 直接放行, 历史里查不到。现让三种 action 命中都留痕,便于观测: - db: CreateDecidedIntercept —— 一条 insert 直接以最终状态(allowed/denied)落库并盖 decided_at(复用 intercept_pending 现有合法状态,无需 schema 迁移)。 - intercept: Interceptor.Log —— 非阻塞、best-effort 记录一次规则命中(DB 出错不影响 工具调用结果)。 - guard: deny 分支记 denied、显式 allow 规则命中记 allowed;无规则命中的放行不记, 避免全量刷屏。 前端零改动:审批记录/历史页(interceptHistory=全状态、interceptTask=全状态)本就渲染 allowed/denied/pending;pending 过滤仅用于审批按钮区。
This commit is contained in:
1 parent
05eb7d2174
commit
6348ec9d21
3 files changed
+40
No files matched your search
@@ -93,8 +93,12 @@ func (g *Guard) applyIntercept(ctx context.Context, ev hook.Event) hook.Result {
|
||||
}
|
||||
switch dec.Action {
|
||||
case "deny":
|
||||
// 观测:deny 命中不阻塞审批,直接记一条 denied(历史/任务拦截页可见)。
|
||||
g.interceptor.Log(ctx, intercept.ConvIDFromContext(ctx), dec, ev.ToolName, ev.Input, "denied")
|
||||
return g.block(ev.ToolName, dec.Message, "")
|
||||
case "allow":
|
||||
// 观测:显式 allow 规则命中记一条 allowed(无规则命中的放行不记,避免全量刷屏)。
|
||||
g.interceptor.Log(ctx, intercept.ConvIDFromContext(ctx), dec, ev.ToolName, ev.Input, "allowed")
|
||||
return hook.Result{}
|
||||
case "ask":
|
||||
// If the worker context is already cancelled (task stopped / killed), block
|
||||
|
||||
Reference in new issue
Block a user