From 90bef80aa516746cb14a16412aef779dfe7162b2 Mon Sep 17 00:00:00 2001 From: rcourtman Date: Fri, 27 Mar 2026 08:43:18 +0000 Subject: [PATCH] test(ai): keep recovery storage visible through prompt filtering --- internal/ai/chat/service_tooling_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/internal/ai/chat/service_tooling_test.go b/internal/ai/chat/service_tooling_test.go index f971717ff..4c385347f 100644 --- a/internal/ai/chat/service_tooling_test.go +++ b/internal/ai/chat/service_tooling_test.go @@ -147,6 +147,26 @@ func TestFilterToolsForPrompt_BroadInfraKeepsStorage(t *testing.T) { } } +func TestFilterToolsForPrompt_RecoveryOnlyKeepsStorage(t *testing.T) { + exec := tools.NewPulseToolExecutor(tools.ExecutorConfig{ + RecoveryPointsProvider: &fakeRecoveryPointsProvider{points: []recovery.RecoveryPoint{{ + ID: "pve-snapshot:before-upgrade", + Provider: recovery.ProviderProxmoxPVE, + Kind: recovery.KindSnapshot, + Mode: recovery.ModeLocal, + Outcome: recovery.OutcomeSuccess, + }}}, + ControlLevel: tools.ControlLevelControlled, + }) + + svc := &Service{executor: exec} + toolsList := svc.filterToolsForPrompt(context.Background(), "list recovery snapshots for guest 100", false, false) + set := toolNameSet(toolsList) + if !set["pulse_storage"] { + t.Fatalf("expected storage tool to be kept when recovery points are the only storage source") + } +} + func TestFilterToolsForPrompt_AutonomousNonPatrol(t *testing.T) { exec := tools.NewPulseToolExecutor(tools.ExecutorConfig{ StateProvider: fakeStateProvider{},