diff --git a/backend/windmill-worker/src/ai_executor.rs b/backend/windmill-worker/src/ai_executor.rs index 0d3524beee..cb11a7d83a 100644 --- a/backend/windmill-worker/src/ai_executor.rs +++ b/backend/windmill-worker/src/ai_executor.rs @@ -1535,9 +1535,13 @@ pub async fn run_agent( step_id: Option<&'a str>, result: MaxIterPartialResult<'a>, } + // Through the same wrapper the success envelope uses: `agent_action` + // is `skip_serializing` on `OpenAIMessage`, so serializing these raw + // would drop every tool name and job id and leave the partial run + // unreadable — which is the one thing worth having on this path. #[derive(serde::Serialize)] struct MaxIterPartialResult<'a> { - messages: &'a [OpenAIMessage], + messages: Vec>, } return Err(Error::ExecutionRawError( serde_json::value::to_raw_value(&MaxIterError { @@ -1547,7 +1551,15 @@ pub async fn run_agent( ), name: "ExecutionErr", step_id: effective_flow_step_id, - result: MaxIterPartialResult { messages: &messages }, + result: MaxIterPartialResult { + messages: messages + .iter() + .map(|m| Message { + message: m, + agent_action: m.agent_action.as_ref(), + }) + .collect(), + }, })?, )); } diff --git a/frontend/src/lib/components/AgentTrace.svelte b/frontend/src/lib/components/AgentTrace.svelte index 4724f2b056..538f425824 100644 --- a/frontend/src/lib/components/AgentTrace.svelte +++ b/frontend/src/lib/components/AgentTrace.svelte @@ -82,17 +82,14 @@ {/if} {:else if entry.kind === 'search'} + toggle(index, entry)} - > - {#if entry.sources} - - {:else} - - {/if} - + expanded={false} + toggleable={false} + onToggle={() => {}} + /> {:else} {@const job = jobOf(entry.jobId)} { + const messages = parseAgentErrorMessages(result) + if (!messages) return undefined + const entries = buildAgentTrace(messages) + return entries.length > 0 ? messages : undefined + }) // Build the image/PDF source URL for an S3 object. When `appPath` is set // (deployed app view) the read is authorized on-behalf of the app author via @@ -1016,14 +1025,14 @@ {/if} {@render children?.()} - {#if agentErrorMessages} + {#if agentErrorTrace}
Trace - +
{/if} {#if !isTest && language === 'bun'} diff --git a/frontend/src/lib/components/FlowLogViewer.svelte b/frontend/src/lib/components/FlowLogViewer.svelte index befe327c90..2f466041d7 100644 --- a/frontend/src/lib/components/FlowLogViewer.svelte +++ b/frontend/src/lib/components/FlowLogViewer.svelte @@ -125,18 +125,16 @@ function getStepProgress(job: RootJobData | undefined, totalSteps: number): string { if (!job || totalSteps === 0) return '' - const stepWord = 'step' - // If flow is completed, show total steps if (job.type === 'CompletedJob') { - return ` (${totalSteps} ${stepWord}${totalSteps === 1 ? '' : 's'})` + return ` (${totalSteps} step${totalSteps === 1 ? '' : 's'})` } // If flow is running, use flow_status.step if available (like JobStatus.svelte) if (job.type === 'QueuedJob') { if (job.flow_status?.step !== undefined) { const currentStep = (job.flow_status.step ?? 0) + 1 - return ` (${stepWord} ${currentStep} of ${totalSteps})` + return ` (step ${currentStep} of ${totalSteps})` } return '' diff --git a/frontend/src/lib/components/FlowLogViewerWrapper.svelte b/frontend/src/lib/components/FlowLogViewerWrapper.svelte index 3a1c3add1f..12abe9bfb2 100644 --- a/frontend/src/lib/components/FlowLogViewerWrapper.svelte +++ b/frontend/src/lib/components/FlowLogViewerWrapper.svelte @@ -28,7 +28,7 @@ localDurationStatuses, workspaceId, render, - onSelectedIteration, + onSelectedIteration }: Props = $props() // State for tracking expanded rows - using Record to allow explicit control diff --git a/frontend/src/lib/components/ResourceDescriptionField.svelte b/frontend/src/lib/components/ResourceDescriptionField.svelte new file mode 100644 index 0000000000..524548fa9d --- /dev/null +++ b/frontend/src/lib/components/ResourceDescriptionField.svelte @@ -0,0 +1,58 @@ + + + +
+

{label} + + {#if canWrite} +

+ {#if canWrite && editing} +
+
GH Markdown
+ +
+ {:else if description == undefined || description == ''} +
No description provided
+ {:else} + + {/if} +
diff --git a/frontend/src/lib/components/ResourceForm.svelte b/frontend/src/lib/components/ResourceForm.svelte index 08da468f8a..98e8dc9810 100644 --- a/frontend/src/lib/components/ResourceForm.svelte +++ b/frontend/src/lib/components/ResourceForm.svelte @@ -1,4 +1,5 @@