@@ -5,9 +5,11 @@ import { BlockStack } from "@/components/ui/layout";
55import { Spinner } from "@/components/ui/spinner" ;
66import { Paragraph } from "@/components/ui/typography" ;
77import { useBackend } from "@/providers/BackendProvider" ;
8+ import { useExecutionData } from "@/providers/ExecutionDataProvider" ;
89import { getExecutionArtifacts } from "@/services/executionService" ;
910import { getBackendStatusString } from "@/utils/backend" ;
1011import type { TaskSpec } from "@/utils/componentSpec" ;
12+ import { isOlderThanDays } from "@/utils/date" ;
1113
1214import IOExtras from "./IOExtras" ;
1315import IOInputs from "./IOInputs" ;
@@ -21,6 +23,7 @@ interface IOSectionProps {
2123
2224const IOSection = ( { taskSpec, executionId, readOnly } : IOSectionProps ) => {
2325 const { backendUrl, configured, available } = useBackend ( ) ;
26+ const { metadata } = useExecutionData ( ) ;
2427
2528 const {
2629 data : artifacts ,
@@ -74,8 +77,18 @@ const IOSection = ({ taskSpec, executionId, readOnly }: IOSectionProps) => {
7477 ? [ "inputs" , "outputs" , "other" ]
7578 : [ "outputs" , "inputs" , "other" ] ;
7679
80+ const isOlderThan30Days =
81+ metadata ?. created_at && isOlderThanDays ( metadata . created_at , 30 ) ;
82+
7783 return (
7884 < BlockStack gap = "4" className = "w-full" >
85+ { isOlderThan30Days && (
86+ < InfoBox title = "Artifact Storage" variant = "warning" >
87+ Remote artifacts may be unavailable for runs older than 30 days. To
88+ keep an artifact, download it using the provided link before it
89+ expires.
90+ </ InfoBox >
91+ ) }
7992 { order . map ( ( section ) => {
8093 if ( section === "inputs" ) {
8194 return (
0 commit comments