File size: 1,953 Bytes
a070805 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | import { QueryClient } from "@tanstack/react-query";
import type { ActionEvent } from "#/types/agent-server/core/events/action-event";
import { useModelStore } from "#/stores/model-store";
import { stripWorkspacePrefix } from "./path-utils";
/**
* Cache invalidation utilities for TanStack Query
*/
/**
* Handle cache invalidation for ActionEvent
* Invalidates relevant query caches based on the action type
*
* @param event - The ActionEvent to process
* @param conversationId - The conversation ID for cache keys
* @param queryClient - The TanStack Query client instance
*/
export const handleActionEventCacheInvalidation = (
event: ActionEvent,
conversationId: string,
queryClient: QueryClient,
) => {
const { action } = event;
// Invalidate file_changes cache for file-related actions
if (
action.kind === "StrReplaceEditorAction" ||
action.kind === "FileEditorAction" ||
action.kind === "ExecuteBashAction"
) {
queryClient.invalidateQueries(
{
queryKey: ["file_changes", conversationId],
},
{ cancelRefetch: false },
);
}
// Invalidate specific file diff cache for file modifications
if (
(action.kind === "StrReplaceEditorAction" ||
action.kind === "FileEditorAction") &&
action.path
) {
const strippedPath = stripWorkspacePrefix(action.path);
queryClient.invalidateQueries({
queryKey: ["file_diff", conversationId, strippedPath],
});
}
// When the agent autonomously swaps the LLM via SwitchLLMTool, refresh the
// conversation so SwitchProfileButton / ChatInputModel pick up the new
// `llm_model`, and drop any previously-set optimistic profile name (it
// would now misrepresent the agent's choice).
if (event.tool_name === "SwitchLLMTool") {
queryClient.invalidateQueries({
queryKey: ["user", "conversation", conversationId],
});
useModelStore.getState().clearActiveProfile(conversationId);
}
};
|