agent: clean up semantics, UX, DX, and procedural code (#17212)

This commit is contained in:
Parth Sareen
2026-07-16 19:06:06 -07:00
committed by GitHub
parent 5865a01e48
commit 61e1b1ba5e
15 changed files with 514 additions and 289 deletions

View File

@@ -57,11 +57,15 @@ func (m chatModel) allowAllToolsEnabled() bool {
if m.approvalState == nil {
return m.defaultAllowAll
}
return m.approvalState.AllowAll()
return m.approvalState.AllGranted()
}
func (m *chatModel) setAllowAllTools(allowAll bool) {
m.ensureApprovalState().SetAllowAll(allowAll)
if allowAll {
m.ensureApprovalState().GrantAll()
} else {
m.ensureApprovalState().Set(false, nil)
}
m.opts.AllowAllTools = allowAll
}
@@ -176,7 +180,7 @@ func (m chatModel) resolveApprovalPrompt(choice chatApprovalChoice) (tea.Model,
}
allowScopes := approvalScopes(prompt.request)
if choice.allowTools {
m.ensureApprovalState().AllowScopes(allowScopes)
m.ensureApprovalState().GrantScopes(allowScopes)
}
for _, call := range prompt.request.Calls {
if idx := m.findToolEntry(call.ToolCallID); idx >= 0 && m.entries[idx].status == "approval" {
@@ -386,7 +390,7 @@ func (c *chatApprovalController) preapproved(request coreagent.ApprovalRequest)
if c == nil {
return coreagent.Approval{}, false
}
if c.state.AllowAll() {
if c.state.AllGranted() {
return coreagent.Approval{Allow: true, AllowAll: true}, true
}
scopes := approvalScopes(request)

View File

@@ -392,7 +392,7 @@ func TestChatApprovalControllerAutoApprovesAfterFullAccessToggle(t *testing.T) {
events := make(chan tea.Msg, 1)
state := testApprovalState(false, nil)
controller := newChatApprovalController(events, state)
state.SetAllowAll(true)
state.GrantAll()
result, err := controller.PromptApproval(context.Background(), testApprovalRequest())
if err != nil {

View File

@@ -75,8 +75,8 @@ func TestChatNewCommandRepaintsFromTop(t *testing.T) {
if m.flowPrintedLines != 0 {
t.Fatalf("flowPrintedLines = %d, want 0", m.flowPrintedLines)
}
if m.approvalState.AllowAll() || m.opts.AllowAllTools || m.approvalState.Allows("edit") || m.permissionNotice != "" {
t.Fatalf("permissions were not reset: allowAll=%v opts=%v editAllowed=%v notice=%q", m.approvalState.AllowAll(), m.opts.AllowAllTools, m.approvalState.Allows("edit"), m.permissionNotice)
if m.approvalState.AllGranted() || m.opts.AllowAllTools || m.approvalState.Allows("edit") || m.permissionNotice != "" {
t.Fatalf("permissions were not reset: allowAll=%v opts=%v editAllowed=%v notice=%q", m.approvalState.AllGranted(), m.opts.AllowAllTools, m.approvalState.Allows("edit"), m.permissionNotice)
}
if msg := cmd(); msg == nil {
t.Fatal("repaint command returned nil")
@@ -92,10 +92,10 @@ func TestChatNewCommandPreservesLaunchFullAccessDefault(t *testing.T) {
updated, _ := m.handleSubmit()
fm := updated.(chatModel)
if !fm.approvalState.AllowAll() || !fm.opts.AllowAllTools {
t.Fatalf("full access default was not restored: allowAll=%v opts=%v", fm.approvalState.AllowAll(), fm.opts.AllowAllTools)
if !fm.approvalState.AllGranted() || !fm.opts.AllowAllTools {
t.Fatalf("full access default was not restored: allowAll=%v opts=%v", fm.approvalState.AllGranted(), fm.opts.AllowAllTools)
}
fm.approvalState.SetAllowAll(false)
fm.approvalState.Set(false, nil)
if fm.approvalState.Allows("edit") {
t.Fatal("edit scope should be cleared")
}