diff --git a/skyvern-frontend/src/api/types.ts b/skyvern-frontend/src/api/types.ts index c35b4356..9bb79fe3 100644 --- a/skyvern-frontend/src/api/types.ts +++ b/skyvern-frontend/src/api/types.ts @@ -6,6 +6,7 @@ export const ArtifactType = { LLMResponseParsed: "llm_response_parsed", VisibleElementsTree: "visible_elements_tree", VisibleElementsTreeTrimmed: "visible_elements_tree_trimmed", + VisibleElementsTreeInPrompt: "visible_elements_tree_in_prompt", LLMPrompt: "llm_prompt", LLMRequest: "llm_request", HTMLScrape: "html_scrape", diff --git a/skyvern-frontend/src/routes/tasks/detail/HTMLArtifact.tsx b/skyvern-frontend/src/routes/tasks/detail/HTMLArtifact.tsx new file mode 100644 index 00000000..ce7d281d --- /dev/null +++ b/skyvern-frontend/src/routes/tasks/detail/HTMLArtifact.tsx @@ -0,0 +1,66 @@ +import { artifactApiClient } from "@/api/AxiosClient"; +import { ArtifactApiResponse } from "@/api/types"; +import { Skeleton } from "@/components/ui/skeleton"; +import { Textarea } from "@/components/ui/textarea"; +import { useQuery } from "@tanstack/react-query"; +import axios from "axios"; + +// https://stackoverflow.com/a/60338028 +function format(html: string) { + const tab = "\t"; + let result = ""; + let indent = ""; + + html.split(/>\s*\r\n"; + + if (element.match(/^]*[^/]$/) && !element.startsWith("input")) { + indent += tab; + } + }); + + return result.substring(1, result.length - 3); +} + +type Props = { + artifact: ArtifactApiResponse; +}; + +function HTMLArtifact({ artifact }: Props) { + const { data, isFetching, isError, error } = useQuery({ + queryKey: ["artifact", artifact.artifact_id], + queryFn: async () => { + if (artifact.uri.startsWith("file://")) { + return artifactApiClient + .get(`/artifact/text`, { + params: { + path: artifact.uri.slice(7), + }, + }) + .then((response) => response.data); + } + if (artifact.uri.startsWith("s3://") && artifact.signed_url) { + return axios.get(artifact.signed_url).then((response) => response.data); + } + }, + }); + + if (isFetching) { + return ; + } + + return ( +