mirror of
https://github.com/Skyvern-AI/skyvern.git
synced 2026-04-28 03:30:10 +00:00
[NO-TICKET] Bump + test deps (#5443)
Co-authored-by: Shuchang Zheng <wintonzheng0325@gmail.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
cdfc20159d
commit
893177fce6
35 changed files with 71 additions and 65 deletions
9
skyvern-frontend/package-lock.json
generated
9
skyvern-frontend/package-lock.json
generated
|
|
@ -85,7 +85,7 @@
|
|||
"eslint-plugin-react-refresh": "^0.4.5",
|
||||
"lint-staged": "^15.5.2",
|
||||
"postcss": "^8.4.37",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier": "^3.8.1",
|
||||
"prettier-plugin-tailwindcss": "^0.6.5",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"typescript": "^5.5.3",
|
||||
|
|
@ -7640,10 +7640,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
|
||||
"integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
|
||||
"version": "3.8.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
|
||||
"integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"prettier": "bin/prettier.cjs"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@
|
|||
"eslint-plugin-react-refresh": "^0.4.5",
|
||||
"lint-staged": "^15.5.2",
|
||||
"postcss": "^8.4.37",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier": "^3.8.1",
|
||||
"prettier-plugin-tailwindcss": "^0.6.5",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"typescript": "^5.5.3",
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ function BrowserStream({
|
|||
useEffect(() => {
|
||||
settingsStore.setIsUsingABrowser(isReady);
|
||||
settingsStore.setBrowserSessionId(
|
||||
isReady ? browserSessionId ?? null : null,
|
||||
isReady ? (browserSessionId ?? null) : null,
|
||||
);
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [isReady, browserSessionId]);
|
||||
|
|
|
|||
|
|
@ -566,7 +566,7 @@ function FloatingWindow({
|
|||
onStart={() => setIsDragging(true)}
|
||||
onDrag={(_, data) => onDrag(data)}
|
||||
onStop={() => setIsDragging(false)}
|
||||
bounds={bounded ?? true ? "parent" : undefined}
|
||||
bounds={(bounded ?? true) ? "parent" : undefined}
|
||||
disabled={isResizing}
|
||||
>
|
||||
<Resizable
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ function ModelSelector({
|
|||
const labels = Object.keys(reverseMap);
|
||||
|
||||
const chosen = value
|
||||
? models[value.model_name] ?? constants.SkyvernOptimized
|
||||
? (models[value.model_name] ?? constants.SkyvernOptimized)
|
||||
: constants.SkyvernOptimized;
|
||||
const choices = [constants.SkyvernOptimized, ...labels];
|
||||
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@ function TriggerTypeFilterDropdown({ values, onChange }: Props) {
|
|||
values.length === 0
|
||||
? "All Runs"
|
||||
: values.length === 1
|
||||
? triggerTypeDropdownItems.find((i) => i.value === values[0])?.label ??
|
||||
"All Runs"
|
||||
? (triggerTypeDropdownItems.find((i) => i.value === values[0])?.label ??
|
||||
"All Runs")
|
||||
: `${values.length} types`;
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ import { cn } from "@/util/utils";
|
|||
import { badgeVariants } from "./badge-variants";
|
||||
|
||||
export interface BadgeProps
|
||||
extends React.HTMLAttributes<HTMLDivElement>,
|
||||
extends
|
||||
React.HTMLAttributes<HTMLDivElement>,
|
||||
VariantProps<typeof badgeVariants> {}
|
||||
|
||||
function Badge({ className, variant, ...props }: BadgeProps) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ import { cn } from "@/util/utils";
|
|||
import { buttonVariants } from "./button-variants";
|
||||
|
||||
export interface ButtonProps
|
||||
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
||||
extends
|
||||
React.ButtonHTMLAttributes<HTMLButtonElement>,
|
||||
VariantProps<typeof buttonVariants> {
|
||||
asChild?: boolean;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,7 @@ import * as React from "react";
|
|||
|
||||
import { cn } from "@/util/utils";
|
||||
|
||||
export interface InputProps
|
||||
extends React.InputHTMLAttributes<HTMLInputElement> {}
|
||||
export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {}
|
||||
|
||||
const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
||||
({ className, type, ...props }, ref) => {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,8 @@ const multiSelectVariants = cva("m-1", {
|
|||
* Props for MultiSelect component
|
||||
*/
|
||||
interface MultiSelectProps
|
||||
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
||||
extends
|
||||
React.ButtonHTMLAttributes<HTMLButtonElement>,
|
||||
VariantProps<typeof multiSelectVariants> {
|
||||
/**
|
||||
* An array of option objects to be displayed in the multi-select component.
|
||||
|
|
|
|||
|
|
@ -2,8 +2,7 @@ import * as React from "react";
|
|||
|
||||
import { cn } from "@/util/utils";
|
||||
|
||||
export interface TextareaProps
|
||||
extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
|
||||
export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
|
||||
|
||||
const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
|
||||
({ className, ...props }, ref) => {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,6 @@ export function useLocalStorageFormDefault(
|
|||
return useMemo(() => {
|
||||
if (typeof window === "undefined") return fallback ?? null;
|
||||
const value = localStorage.getItem(storageKey);
|
||||
return value !== null ? value : fallback ?? null;
|
||||
return value !== null ? value : (fallback ?? null);
|
||||
}, [storageKey, fallback]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ function RunHistory() {
|
|||
<span>{run.title ?? ""}</span>
|
||||
</div>
|
||||
) : (
|
||||
run.title ?? ""
|
||||
(run.title ?? "")
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ function TaskParameters() {
|
|||
value={
|
||||
typeof task.request.navigation_payload === "object"
|
||||
? JSON.stringify(task.request.navigation_payload, null, 2)
|
||||
: task.request.navigation_payload ?? ""
|
||||
: (task.request.navigation_payload ?? "")
|
||||
}
|
||||
readOnly
|
||||
minHeight="96px"
|
||||
|
|
@ -110,7 +110,7 @@ function TaskParameters() {
|
|||
null,
|
||||
2,
|
||||
)
|
||||
: task.request.extracted_information_schema ?? ""
|
||||
: (task.request.extracted_information_schema ?? "")
|
||||
}
|
||||
readOnly
|
||||
minHeight="96px"
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ function WorkflowPage() {
|
|||
<span>{workflowRun.workflow_run_id ?? ""}</span>
|
||||
</div>
|
||||
) : (
|
||||
workflowRun.workflow_run_id ?? ""
|
||||
(workflowRun.workflow_run_id ?? "")
|
||||
);
|
||||
|
||||
const isExpanded = expandedRows.has(
|
||||
|
|
|
|||
|
|
@ -602,7 +602,7 @@ function Workflows() {
|
|||
key: param.key,
|
||||
value:
|
||||
param.parameter_type === "workflow"
|
||||
? param.default_value ?? ""
|
||||
? (param.default_value ?? "")
|
||||
: "",
|
||||
description: param.description ?? null,
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ function BlockOutputs({
|
|||
const [overrideHasError, setOverrideHasError] = useState(false);
|
||||
const useOverride = useBlockOutputStore((state) =>
|
||||
workflowPermanentId
|
||||
? state.useOverrides[workflowPermanentId]?.[blockLabel] ?? false
|
||||
? (state.useOverrides[workflowPermanentId]?.[blockLabel] ?? false)
|
||||
: false,
|
||||
);
|
||||
|
||||
|
|
@ -158,7 +158,7 @@ function BlockOutputs({
|
|||
fullHeight
|
||||
onChange={(value) => {
|
||||
try {
|
||||
JSON.parse(value), setOverrideHasError(false);
|
||||
(JSON.parse(value), setOverrideHasError(false));
|
||||
} catch {
|
||||
setOverrideHasError(true);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ export function WorkflowCopilotChat({
|
|||
ai_fallback: saveData.settings.aiFallback ?? true,
|
||||
code_version:
|
||||
saveData.settings.runWith === "code"
|
||||
? saveData.settings.codeVersion ?? 2
|
||||
? (saveData.settings.codeVersion ?? 2)
|
||||
: undefined,
|
||||
workflow_definition: {
|
||||
version: saveData.workflowDefinitionVersion,
|
||||
|
|
|
|||
|
|
@ -1981,7 +1981,7 @@ function Workspace({
|
|||
adaptive_caching: false,
|
||||
code_version:
|
||||
saveData.settings.runWith === "code"
|
||||
? saveData.settings.codeVersion ?? 2
|
||||
? (saveData.settings.codeVersion ?? 2)
|
||||
: null,
|
||||
run_sequentially: saveData.settings.runSequentially,
|
||||
sequential_key: saveData.settings.sequentialKey,
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ function ConditionalNodeComponent({ id, data }: NodeProps<ConditionalNode>) {
|
|||
// If the deleted branch was active, switch to the first branch
|
||||
const newActiveBranchId =
|
||||
data.activeBranchId === branchId
|
||||
? updatedBranches[0]?.id ?? null
|
||||
? (updatedBranches[0]?.id ?? null)
|
||||
: data.activeBranchId;
|
||||
|
||||
update({
|
||||
|
|
@ -789,7 +789,7 @@ function ConditionalNodeComponent({ id, data }: NodeProps<ConditionalNode>) {
|
|||
value={
|
||||
activeBranch.is_default
|
||||
? "Executed when no other condition matches"
|
||||
: activeBranch.criteria?.expression ?? ""
|
||||
: (activeBranch.criteria?.expression ?? "")
|
||||
}
|
||||
disabled={!data.editable || activeBranch.is_default}
|
||||
onChange={(value) => {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ export function createBranchCondition(
|
|||
return {
|
||||
id: overrides.id ?? nanoid(),
|
||||
criteria:
|
||||
overrides.is_default ?? false
|
||||
(overrides.is_default ?? false)
|
||||
? null
|
||||
: overrides.criteria
|
||||
? {
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ function LoginBlockCredentialSelector({
|
|||
totpIdentifier:
|
||||
credential.credential_type === "password" &&
|
||||
"totp_identifier" in credential.credential
|
||||
? credential.credential.totp_identifier ?? null
|
||||
? (credential.credential.totp_identifier ?? null)
|
||||
: null,
|
||||
}));
|
||||
|
||||
|
|
@ -171,7 +171,9 @@ function LoginBlockCredentialSelector({
|
|||
<>
|
||||
<Select
|
||||
key={value ?? "no-credential"}
|
||||
value={isCredentialMissing ? undefined : selectedCredentialId ?? value}
|
||||
value={
|
||||
isCredentialMissing ? undefined : (selectedCredentialId ?? value)
|
||||
}
|
||||
onValueChange={(newValue) => {
|
||||
if (newValue === "new") {
|
||||
setIsOpen(true);
|
||||
|
|
|
|||
|
|
@ -405,7 +405,7 @@ function StartNode({ id, data, parentId }: NodeProps<StartNode>) {
|
|||
data.extraHttpHeaders &&
|
||||
typeof data.extraHttpHeaders === "object"
|
||||
? JSON.stringify(data.extraHttpHeaders)
|
||||
: data.extraHttpHeaders ?? null
|
||||
: (data.extraHttpHeaders ?? null)
|
||||
}
|
||||
onChange={(val) => {
|
||||
const v =
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ function WorkflowParameterEditPanel({
|
|||
);
|
||||
|
||||
const [urlParameterKey, setUrlParameterKey] = useState(
|
||||
isBitwardenCredential ? initialValues?.urlParameterKey ?? "" : "",
|
||||
isBitwardenCredential ? (initialValues?.urlParameterKey ?? "") : "",
|
||||
);
|
||||
const [description, setDescription] = useState(
|
||||
initialValues?.description ?? "",
|
||||
|
|
@ -248,7 +248,7 @@ function WorkflowParameterEditPanel({
|
|||
isBitwardenCredential ||
|
||||
initialValues?.parameterType === "secret" ||
|
||||
initialValues?.parameterType === "creditCardData"
|
||||
? initialValues?.collectionId ?? ""
|
||||
? (initialValues?.collectionId ?? "")
|
||||
: "",
|
||||
);
|
||||
const [parameterType, setParameterType] = useState<ParameterTypeSelection>(
|
||||
|
|
@ -309,7 +309,7 @@ function WorkflowParameterEditPanel({
|
|||
);
|
||||
|
||||
const [bitwardenLoginCredentialItemId, setBitwardenLoginCredentialItemId] =
|
||||
useState(isBitwardenCredential ? initialValues?.itemId ?? "" : "");
|
||||
useState(isBitwardenCredential ? (initialValues?.itemId ?? "") : "");
|
||||
|
||||
const [azureVaultName, setAzureVaultName] = useState(
|
||||
isAzureVaultCredential ? initialValues.vaultName : "",
|
||||
|
|
@ -321,7 +321,7 @@ function WorkflowParameterEditPanel({
|
|||
isAzureVaultCredential ? initialValues.passwordKey : "",
|
||||
);
|
||||
const [azureTotpSecretKey, setAzureTotpKey] = useState(
|
||||
isAzureVaultCredential ? initialValues.totpSecretKey ?? "" : "",
|
||||
isAzureVaultCredential ? (initialValues.totpSecretKey ?? "") : "",
|
||||
);
|
||||
|
||||
// Handle credential data type change - reset source to first available
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ const constructCacheKeyValue = (opts: {
|
|||
}
|
||||
|
||||
const workflowParameters = workflowRun
|
||||
? workflowRun?.parameters ?? {}
|
||||
? (workflowRun?.parameters ?? {})
|
||||
: getInitialParameters(workflow)
|
||||
.filter((p) => p.parameterType === "workflow")
|
||||
.reduce(
|
||||
|
|
|
|||
|
|
@ -385,7 +385,7 @@ function layout(
|
|||
...childNodes.map((child) =>
|
||||
child.type === "loop"
|
||||
? getLoopNodeWidth(child, nodes)
|
||||
: child.measured?.width ?? 0,
|
||||
: (child.measured?.width ?? 0),
|
||||
),
|
||||
);
|
||||
const conditionalNodeWidth = getLoopNodeWidth(node, nodes);
|
||||
|
|
@ -682,9 +682,9 @@ function convertToNode(
|
|||
includeActionHistoryInVerification:
|
||||
block.include_action_history_in_verification ?? false,
|
||||
// When engine is SkyvernV2, use navigation_goal as the prompt
|
||||
prompt: isV2Engine ? block.navigation_goal ?? "" : "",
|
||||
prompt: isV2Engine ? (block.navigation_goal ?? "") : "",
|
||||
maxSteps: isV2Engine
|
||||
? block.max_steps_per_run ?? MAX_STEPS_DEFAULT
|
||||
? (block.max_steps_per_run ?? MAX_STEPS_DEFAULT)
|
||||
: MAX_STEPS_DEFAULT,
|
||||
},
|
||||
};
|
||||
|
|
@ -833,7 +833,7 @@ function convertToNode(
|
|||
const loopVariableReference =
|
||||
block.loop_variable_reference !== null
|
||||
? block.loop_variable_reference
|
||||
: block.loop_over?.key ?? "";
|
||||
: (block.loop_over?.key ?? "");
|
||||
return {
|
||||
...identifiers,
|
||||
...common,
|
||||
|
|
@ -1813,9 +1813,9 @@ function getElements(
|
|||
const branchHidden =
|
||||
Boolean(
|
||||
conditionalNodeId &&
|
||||
conditionalBranchId &&
|
||||
activeBranchId &&
|
||||
conditionalBranchId !== activeBranchId,
|
||||
conditionalBranchId &&
|
||||
activeBranchId &&
|
||||
conditionalBranchId !== activeBranchId,
|
||||
) ?? false;
|
||||
|
||||
const nodeHidden =
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ function useBrowserSessionRateLimit(
|
|||
): RateLimitState {
|
||||
const storeAttempts = useRateLimitStore((state) =>
|
||||
workflowPermanentId
|
||||
? state.attemptsByWorkflow[workflowPermanentId] ?? null
|
||||
? (state.attemptsByWorkflow[workflowPermanentId] ?? null)
|
||||
: null,
|
||||
);
|
||||
const setAttempts = useRateLimitStore((state) => state.setAttempts);
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ function ActionCard({ action, onClick, active, index, cardClassName }: Props) {
|
|||
<div className="text-xs text-slate-400">
|
||||
Input:{" "}
|
||||
{action.action_type === "input_text"
|
||||
? action.text ?? action.response
|
||||
? (action.text ?? action.response)
|
||||
: action.response}
|
||||
</div>
|
||||
</>
|
||||
|
|
|
|||
|
|
@ -57,8 +57,8 @@ export function RunParametersDialog({
|
|||
).map(([key, value]) => {
|
||||
const def = defByKey.get(key);
|
||||
const description =
|
||||
def && "description" in def ? def.description ?? undefined : undefined;
|
||||
const type = def ? def.parameter_type ?? undefined : undefined;
|
||||
def && "description" in def ? (def.description ?? undefined) : undefined;
|
||||
const type = def ? (def.parameter_type ?? undefined) : undefined;
|
||||
const displayValue =
|
||||
value === null || value === undefined
|
||||
? ""
|
||||
|
|
|
|||
|
|
@ -68,16 +68,16 @@ function WorkflowPostRunParameters() {
|
|||
const isTaskV2 = Boolean(workflowRun?.task_v2);
|
||||
|
||||
const webhookCallbackUrl = isTaskV2
|
||||
? workflowRun?.task_v2?.webhook_callback_url ?? null
|
||||
: workflowRun?.webhook_callback_url ?? null;
|
||||
? (workflowRun?.task_v2?.webhook_callback_url ?? null)
|
||||
: (workflowRun?.webhook_callback_url ?? null);
|
||||
|
||||
const proxyLocation = isTaskV2
|
||||
? workflowRun?.task_v2?.proxy_location ?? null
|
||||
: workflowRun?.proxy_location ?? null;
|
||||
? (workflowRun?.task_v2?.proxy_location ?? null)
|
||||
: (workflowRun?.proxy_location ?? null);
|
||||
|
||||
const extraHttpHeaders = isTaskV2
|
||||
? workflowRun?.task_v2?.extra_http_headers ?? null
|
||||
: workflowRun?.extra_http_headers ?? null;
|
||||
? (workflowRun?.task_v2?.extra_http_headers ?? null)
|
||||
: (workflowRun?.extra_http_headers ?? null);
|
||||
|
||||
if (workflowRunIsLoading || workflowRunTimelineIsLoading) {
|
||||
return <div>Loading workflow parameters...</div>;
|
||||
|
|
@ -209,7 +209,7 @@ function WorkflowPostRunParameters() {
|
|||
waitSec={
|
||||
activeBlock.wait_sec ??
|
||||
(isBlockOfType(definitionBlock, WorkflowBlockTypes.Wait)
|
||||
? definitionBlock.wait_sec ?? null
|
||||
? (definitionBlock.wait_sec ?? null)
|
||||
: null)
|
||||
}
|
||||
/>
|
||||
|
|
@ -409,7 +409,7 @@ function WorkflowPostRunParameters() {
|
|||
<Input value={workflowRun.browser_session_id} readOnly />
|
||||
</div>
|
||||
) : null}
|
||||
{workflowRun.run_with ?? workflow?.run_with ? (
|
||||
{(workflowRun.run_with ?? workflow?.run_with) ? (
|
||||
<div className="flex gap-16">
|
||||
<div className="w-80">
|
||||
<h1 className="text-lg">Run With</h1>
|
||||
|
|
|
|||
|
|
@ -294,10 +294,10 @@ function WorkflowRunCode(props?: Props) {
|
|||
// "Used" = the version that existed before this run created new ones,
|
||||
// OR the currentVersion if the run didn't generate anything (just used cache)
|
||||
const usedVersion = didGenerate
|
||||
? versions.find(
|
||||
? (versions.find(
|
||||
(v) =>
|
||||
v.version < earliestGeneratedVersion! && v.run_id !== workflowRunId,
|
||||
)?.version ?? null
|
||||
)?.version ?? null)
|
||||
: currentVersion;
|
||||
|
||||
// Edit button shown when not in edit mode and there's a script to edit
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ function WorkflowRunOutput() {
|
|||
value={
|
||||
activeBlock.status === "canceled"
|
||||
? "This block was cancelled"
|
||||
: activeBlock.failure_reason ?? ""
|
||||
: (activeBlock.failure_reason ?? "")
|
||||
}
|
||||
readOnly
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -666,7 +666,9 @@ function WorkflowRunTimelineBlockItem({
|
|||
<div className="space-y-2">
|
||||
{loopIterationGroups.map((group, groupIndex) => {
|
||||
const loopValueFromIterable =
|
||||
group.index !== null ? loopValues[group.index] ?? null : null;
|
||||
group.index !== null
|
||||
? (loopValues[group.index] ?? null)
|
||||
: null;
|
||||
const iterationNumber =
|
||||
group.index !== null ? group.index + 1 : groupIndex + 1;
|
||||
const currentValuePreview = truncateValue(
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ function WorkflowRunTimelineItemInfoSection({ activeItem }: Props) {
|
|||
value={
|
||||
item.status === "canceled"
|
||||
? "This block was cancelled"
|
||||
: item.failure_reason ?? ""
|
||||
: (item.failure_reason ?? "")
|
||||
}
|
||||
readOnly
|
||||
/>
|
||||
|
|
@ -232,7 +232,7 @@ function WorkflowRunTimelineItemInfoSection({ activeItem }: Props) {
|
|||
value={
|
||||
item.status === "canceled"
|
||||
? "This block was cancelled"
|
||||
: item.failure_reason ?? ""
|
||||
: (item.failure_reason ?? "")
|
||||
}
|
||||
readOnly
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ const useWorkflowSave = (opts?: WorkflowSaveOpts) => {
|
|||
ai_fallback: saveData.settings.aiFallback ?? true,
|
||||
code_version:
|
||||
saveData.settings.runWith === "code"
|
||||
? saveData.settings.codeVersion ?? 2
|
||||
? (saveData.settings.codeVersion ?? 2)
|
||||
: undefined,
|
||||
workflow_definition: {
|
||||
version: saveData.workflowDefinitionVersion,
|
||||
|
|
@ -255,7 +255,7 @@ const useWorkflowSave = (opts?: WorkflowSaveOpts) => {
|
|||
const loc = err.loc
|
||||
?.filter((part) => part !== "body" && part !== "__root__")
|
||||
.join(" -> ");
|
||||
return loc ? `${loc}: ${err.msg}` : err.msg ?? "Unknown error";
|
||||
return loc ? `${loc}: ${err.msg}` : (err.msg ?? "Unknown error");
|
||||
})
|
||||
.join("; ");
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue