Remove code generation deletion confirmation prompt (#4635)

Co-authored-by: Suchintan Singh <suchintan@skyvern.com>
This commit is contained in:
Suchintan
2026-02-05 00:09:57 -05:00
committed by GitHub
parent 0cbe5ee1e0
commit 54c795bf1b
5 changed files with 3 additions and 138 deletions

View File

@@ -356,8 +356,6 @@ function Workspace({
await saveWorkflow.mutateAsync();
workflowChangesStore.setSaidOkToCodeCacheDeletion(false);
queryClient.invalidateQueries({
queryKey: ["cache-key-values", workflowPermanentId, cacheKey],
});
@@ -1113,40 +1111,6 @@ function Workspace({
</DialogContent>
</Dialog>
{/* confirm code cache deletion dialog */}
<Dialog
open={workflowChangesStore.showConfirmCodeCacheDeletion}
onOpenChange={(open) => {
!open && workflowChangesStore.setShowConfirmCodeCacheDeletion(false);
!open && workflowChangesStore.setSaidOkToCodeCacheDeletion(false);
}}
>
<DialogContent>
<DialogHeader>
<DialogTitle>Are you sure?</DialogTitle>
<DialogDescription>
Saving will delete cached code, and Skyvern will re-generate it in
the next run. Proceed?
</DialogDescription>
</DialogHeader>
<DialogFooter>
<DialogClose asChild>
<Button variant="secondary">Cancel</Button>
</DialogClose>
<Button
variant="default"
onClick={async () => {
workflowChangesStore.setSaidOkToCodeCacheDeletion(true);
await handleOnSave();
workflowChangesStore.setShowConfirmCodeCacheDeletion(false);
}}
>
Yes
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
{/* cache key value delete dialog */}
<Dialog
open={openConfirmCacheKeyValueDeleteDialogue}

View File

@@ -29,14 +29,10 @@ type WorkflowHasChangesStore = {
getSaveData: () => SaveData | null;
hasChanges: boolean;
saveIsPending: boolean;
saidOkToCodeCacheDeletion: boolean;
showConfirmCodeCacheDeletion: boolean;
isInternalUpdate: boolean;
setGetSaveData: (getSaveData: () => SaveData) => void;
setHasChanges: (hasChanges: boolean) => void;
setSaveIsPending: (isPending: boolean) => void;
setSaidOkToCodeCacheDeletion: (saidOkToCodeCacheDeletion: boolean) => void;
setShowConfirmCodeCacheDeletion: (show: boolean) => void;
setIsInternalUpdate: (isInternalUpdate: boolean) => void;
};
@@ -48,8 +44,6 @@ const useWorkflowHasChangesStore = create<WorkflowHasChangesStore>((set) => {
return {
hasChanges: false,
saveIsPending: false,
saidOkToCodeCacheDeletion: false,
showConfirmCodeCacheDeletion: false,
isInternalUpdate: false,
getSaveData: () => null,
setGetSaveData: (getSaveData: () => SaveData) => {
@@ -61,12 +55,6 @@ const useWorkflowHasChangesStore = create<WorkflowHasChangesStore>((set) => {
setSaveIsPending: (isPending: boolean) => {
set({ saveIsPending: isPending });
},
setSaidOkToCodeCacheDeletion: (saidOkToCodeCacheDeletion: boolean) => {
set({ saidOkToCodeCacheDeletion });
},
setShowConfirmCodeCacheDeletion: (show: boolean) => {
set({ showConfirmCodeCacheDeletion: show });
},
setIsInternalUpdate: (isInternalUpdate: boolean) => {
set({ isInternalUpdate });
},
@@ -76,13 +64,8 @@ const useWorkflowHasChangesStore = create<WorkflowHasChangesStore>((set) => {
const useWorkflowSave = (opts?: WorkflowSaveOpts) => {
const credentialGetter = useCredentialGetter();
const queryClient = useQueryClient();
const {
getSaveData,
saidOkToCodeCacheDeletion,
setHasChanges,
setSaveIsPending,
setShowConfirmCodeCacheDeletion,
} = useWorkflowHasChangesStore();
const { getSaveData, setHasChanges, setSaveIsPending } =
useWorkflowHasChangesStore();
const saveWorkflowMutation = useMutation({
mutationFn: async () => {
@@ -166,11 +149,6 @@ const useWorkflowSave = (opts?: WorkflowSaveOpts) => {
headers: {
"Content-Type": "text/plain",
},
params: {
delete_code_cache_is_ok: saidOkToCodeCacheDeletion
? "true"
: "false",
},
},
);
},
@@ -204,14 +182,6 @@ const useWorkflowSave = (opts?: WorkflowSaveOpts) => {
onError: (error: AxiosError) => {
const detail = (error.response?.data as { detail?: string })?.detail;
if (
detail &&
detail.startsWith("No confirmation for code cache deletion")
) {
setShowConfirmCodeCacheDeletion(true);
return;
}
toast({
title: "Error",
description: detail ? detail : error.message,

View File

@@ -837,11 +837,6 @@ class BrowserProfileNotFound(SkyvernHTTPException):
super().__init__(message, status_code=status.HTTP_404_NOT_FOUND)
class CannotUpdateWorkflowDueToCodeCache(SkyvernException):
def __init__(self, workflow_permanent_id: str) -> None:
super().__init__(f"No confirmation for code cache deletion on {workflow_permanent_id}.")
class APIKeyNotFound(SkyvernHTTPException):
def __init__(self, organization_id: str) -> None:
super().__init__(f"No valid API key token found for organization {organization_id}")

View File

@@ -25,7 +25,6 @@ from skyvern import analytics
from skyvern._version import __version__
from skyvern.config import settings
from skyvern.exceptions import (
CannotUpdateWorkflowDueToCodeCache,
MissingBrowserAddressError,
SkyvernHTTPException,
)
@@ -911,7 +910,6 @@ async def update_workflow_legacy(
..., description="The ID of the workflow to update. Workflow ID starts with `wpid_`.", examples=["wpid_123"]
),
current_org: Organization = Depends(org_auth_service.get_current_org),
delete_code_cache_is_ok: bool = Query(False),
) -> Workflow:
analytics.capture("skyvern-oss-agent-workflow-update")
# validate the workflow
@@ -927,13 +925,7 @@ async def update_workflow_legacy(
organization=current_org,
request=workflow_create_request,
workflow_permanent_id=workflow_id,
delete_code_cache_is_ok=delete_code_cache_is_ok,
)
except CannotUpdateWorkflowDueToCodeCache as e:
raise HTTPException(
status_code=422,
detail=str(e),
) from e
except WorkflowDefinitionValidationException as e:
raise e
except (SkyvernHTTPException, ValidationError) as e:

View File

@@ -35,7 +35,6 @@ from skyvern.exceptions import (
BlockNotFound,
BrowserProfileNotFound,
BrowserSessionNotFound,
CannotUpdateWorkflowDueToCodeCache,
FailedToSendWebhook,
InvalidCredentialId,
MissingValueForParameter,
@@ -1958,7 +1957,6 @@ class WorkflowService:
workflow_definition: WorkflowDefinition,
organization_id: str,
delete_script: bool = True,
delete_code_cache_is_ok: bool = False,
) -> None:
if workflow_definition:
workflow_definition.validate()
@@ -2034,27 +2032,6 @@ class WorkflowService:
)
return
if published_groups and not delete_code_cache_is_ok:
LOG.info(
"Workflow definition changed, asking user if clearing published cached blocks is ok",
workflow_id=workflow.workflow_id,
workflow_permanent_id=previous_valid_workflow.workflow_permanent_id,
organization_id=organization_id,
previous_version=previous_valid_workflow.version,
new_version=workflow.version,
invalidate_reason=plan.reason,
invalidate_label=plan.label,
invalidate_index_prev=plan.previous_index,
invalidate_index_new=plan.new_index,
block_labels_to_disable=plan.block_labels_to_disable,
to_clear_published_cnt=len(published_groups),
to_clear_non_published_cnt=len(cached_groups),
)
raise CannotUpdateWorkflowDueToCodeCache(
workflow_permanent_id=previous_valid_workflow.workflow_permanent_id,
)
try:
groups_to_clear = [*cached_groups, *published_groups]
await self._clear_cached_block_groups(
@@ -2096,38 +2073,7 @@ class WorkflowService:
)
return
to_delete_published = [script for script in candidates if script.status == ScriptStatus.published]
to_delete = [script for script in candidates if script.status != ScriptStatus.published]
if len(to_delete_published) > 0:
if not delete_code_cache_is_ok:
LOG.info(
"Workflow definition changed, asking user if deleting published code is ok",
workflow_id=workflow.workflow_id,
workflow_permanent_id=previous_valid_workflow.workflow_permanent_id,
organization_id=organization_id,
previous_version=previous_valid_workflow.version,
new_version=workflow.version,
to_delete_non_published_cnt=len(to_delete),
to_delete_published_cnt=len(to_delete_published),
)
raise CannotUpdateWorkflowDueToCodeCache(
workflow_permanent_id=previous_valid_workflow.workflow_permanent_id,
)
else:
LOG.info(
"Workflow definition changed, user answered yes to deleting published code",
workflow_id=workflow.workflow_id,
workflow_permanent_id=previous_valid_workflow.workflow_permanent_id,
organization_id=organization_id,
previous_version=previous_valid_workflow.version,
new_version=workflow.version,
to_delete_non_published_cnt=len(to_delete),
to_delete_published_cnt=len(to_delete_published),
)
to_delete.extend(to_delete_published)
to_delete = candidates
if len(to_delete) > 0:
try:
@@ -3148,7 +3094,6 @@ class WorkflowService:
request: WorkflowCreateYAMLRequest,
workflow_permanent_id: str | None = None,
delete_script: bool = True,
delete_code_cache_is_ok: bool = True,
) -> Workflow:
organization_id = organization.organization_id
LOG.info(
@@ -3242,7 +3187,6 @@ class WorkflowService:
workflow_definition=workflow_definition,
organization_id=organization_id,
delete_script=delete_script,
delete_code_cache_is_ok=delete_code_cache_is_ok,
)
return updated_workflow