Skip to content

Commit 7d5710d

Browse files
authored
Merge pull request #35 from Cai-Tang-www/fork-pr-387-1776830001
fix(tools): allow remembered low-risk external write retry
2 parents 1eb6315 + 5268bc9 commit 7d5710d

2 files changed

Lines changed: 16 additions & 14 deletions

File tree

internal/tools/manager.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -331,21 +331,23 @@ func (m *DefaultManager) Execute(ctx context.Context, input ToolCallInput) (Tool
331331
return result, permissionErrorFromDecision(decision)
332332
}
333333

334-
plan, err := m.sandbox.Check(ctx, action)
335-
if err != nil {
336-
if decision, decisionMatched := resolveSandboxOutsideWriteDecision(input, action, err, m.sessionDecisions); decisionMatched {
337-
if decision.Decision != security.DecisionAllow {
338-
result := blockedToolResult(input, decision)
339-
return result, permissionErrorFromDecision(decision)
334+
plan, err := m.sandbox.Check(ctx, action)
335+
if err != nil {
336+
if decision, decisionMatched := resolveSandboxOutsideWriteDecision(input, action, err, m.sessionDecisions); decisionMatched {
337+
if decision.Decision != security.DecisionAllow {
338+
result := blockedToolResult(input, decision)
339+
return result, permissionErrorFromDecision(decision)
340+
}
341+
m.auditCapabilityDecision(action, string(security.DecisionAllow), decision.Reason)
342+
return m.executor.Execute(ctx, input)
343+
} else {
344+
result := NewErrorResult(input.Name, "workspace sandbox rejected action", sandboxErrorDetails(action, err), actionMetadata(action))
345+
result.ToolCallID = input.ID
346+
return result, err
340347
}
341-
} else {
342-
result := NewErrorResult(input.Name, "workspace sandbox rejected action", sandboxErrorDetails(action, err), actionMetadata(action))
343-
result.ToolCallID = input.ID
344-
return result, err
348+
} else if plan != nil {
349+
input.WorkspacePlan = plan
345350
}
346-
} else if plan != nil {
347-
input.WorkspacePlan = plan
348-
}
349351
m.auditCapabilityDecision(action, string(security.DecisionAllow), "")
350352

351353
return m.executor.Execute(ctx, input)

internal/tools/manager_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ func TestDefaultManagerSandboxOutsideWriteSessionMemory(t *testing.T) {
453453

454454
_, err = manager.Execute(context.Background(), input)
455455
if err != nil {
456-
t.Fatalf("expected remembered allow retry to pass, got %v", err)
456+
t.Fatalf("expected remembered allow retry to execute, got %v", err)
457457
}
458458
if writeTool.callCount != 1 {
459459
t.Fatalf("expected write tool to execute after remembered allow, got %d", writeTool.callCount)

0 commit comments

Comments
 (0)