You've already forked agentic-coding-workflow
ACP / MCP 完善
This commit is contained in:
@@ -122,6 +122,51 @@ func TestPermission_AutoAllow_WhenAllowlisted(t *testing.T) {
|
||||
require.Equal(t, acp.PermissionAuto, repo.statusOf(repo.onlyReqID()))
|
||||
}
|
||||
|
||||
func TestPermission_AutoAllow_Wildcard(t *testing.T) {
|
||||
repo := newPermFakeRepo()
|
||||
svc := acp.NewPermissionService(repo, nil, time.Minute, nil)
|
||||
sess := handlers.SessionContext{
|
||||
SessionID: uuid.New(),
|
||||
UserID: uuid.New(),
|
||||
ToolAllowlist: []string{"*"},
|
||||
}
|
||||
chosen := svc.Decide(context.Background(), sess, "req-1",
|
||||
[]byte(`{"name":"any.tool"}`), optionsAllowReject())
|
||||
require.Equal(t, "allow_once", chosen)
|
||||
require.Equal(t, acp.PermissionAuto, repo.statusOf(repo.onlyReqID()))
|
||||
}
|
||||
|
||||
func TestPermission_Wildcard_UnknownToolName_Pending(t *testing.T) {
|
||||
// allowlist 含 "*" 但 toolCall 无法识别名称 → 不自动放行,走人工审批。
|
||||
repo := newPermFakeRepo()
|
||||
uid := uuid.New()
|
||||
sid := uuid.New()
|
||||
repo.sessions[sid] = &acp.Session{ID: sid, UserID: uid}
|
||||
svc := acp.NewPermissionService(repo, nil, time.Minute, nil)
|
||||
sess := handlers.SessionContext{SessionID: sid, UserID: uid, ToolAllowlist: []string{"*"}}
|
||||
|
||||
resCh := make(chan string, 1)
|
||||
go func() {
|
||||
resCh <- svc.Decide(context.Background(), sess, "req-1",
|
||||
[]byte(`{"unknownField":1}`), optionsAllowReject())
|
||||
}()
|
||||
|
||||
var reqID uuid.UUID
|
||||
require.Eventually(t, func() bool {
|
||||
reqID = repo.onlyReqID()
|
||||
return reqID != uuid.Nil && repo.statusOf(reqID) == acp.PermissionPending
|
||||
}, time.Second, 5*time.Millisecond)
|
||||
|
||||
require.NoError(t, svc.Resolve(context.Background(), acp.Caller{UserID: uid}, reqID, true, "allow_once"))
|
||||
select {
|
||||
case chosen := <-resCh:
|
||||
require.Equal(t, "allow_once", chosen)
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("Decide 未在批准后返回")
|
||||
}
|
||||
require.Equal(t, acp.PermissionApproved, repo.statusOf(reqID))
|
||||
}
|
||||
|
||||
func TestPermission_Pending_ThenApprove(t *testing.T) {
|
||||
repo := newPermFakeRepo()
|
||||
uid := uuid.New()
|
||||
|
||||
Reference in New Issue
Block a user