github / github/copilot-sdk

Why is the `OnPermissionRequest` event triggered twice for the same `PermissionRequestKindWrite` request?

未关闭
#2,060 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
question
主要语言
Java
星标
10.5k
派生
1.5k
平均合并
1 天 14 小时
30 天内合并 PR
129

描述

Except for the requestID, the `request` and `invocation` in both calls are identical.
```
permissionHandler := func(request copilot.PermissionRequest, invocation copilot.PermissionInvocation) (copilotrpc.PermissionDecision, error) {
requiresWriteConfirm := requiresWriteApproval(request)
requestID := uuid.NewString()
if request.Kind() == copilotrpc.PermissionRequestKindWrite {
fmt.Printf("[Permission Check] invocation: %s, Kind: %v, Request: %+v\n", invocation.SessionID, request.Kind(), request)
}
h.pushBridgeEvent(session.userID, session.sessionID, "permission.request", gin.H{
"request_id": requestID,
"kind": string(request.Kind()),
"request": request,
"copilot_session_id": fmt.Sprintf("%v", invocation.SessionID),
"requires_write_confirm": requiresWriteConfirm,
"session_id": strconv.FormatInt(session.sessionID, 10),
})

if !requiresWriteConfirm {
decision := copilotrpc.PermissionDecisionApproveOnce{}
h.pushBridgeEvent(session.userID, session.sessionID, "permission.decision", gin.H{
"request_id": requestID,
"kind": string(request.Kind()),
"approved": true,
})
return decision, nil
}

....
}
```

Image

Image

贡献指南

打开贡献指南

调研方向

首先,使用所示的 permissionHandler 重现重复的回调,并记录 PermissionRequestKindWrite 的 request.Kind()、request、invocation.SessionID 和 requestID。跟踪 OnPermissionRequest 事件的分发位置并比较两次调用,然后验证一个逻辑写入请求会产生一个回调,同时保留现有的权限决策流程。

由索引模型根据 Issue 内容生成。

评估

技术栈
go
领域
api, backend-api-design
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
需要澄清
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。