From 7864d589a4c9d6630ea610fb5d136a272c39efcd Mon Sep 17 00:00:00 2001 From: "soroush.asadi" Date: Mon, 15 Jun 2026 23:12:16 +0330 Subject: [PATCH 1/4] Glassmorphism + gradient theme migration (app-wide) Central restyle keyed on shadcn data-slots so all 13 pages inherit it without edits: a soft gradient field on the body, frosted-glass surfaces (translucent --card/--popover + backdrop-blur + hairline borders) on cards, popovers, selects, sheets, and form fields, gradient primary buttons with glass secondary/outline, and a gradient + blurred sidebar. The content area is transparent so the gradient shows behind the glass. Inline-styled gradient cards (Team view) are unaffected. Co-Authored-By: Claude Opus 4.8 --- client/src/components/AppShell.tsx | 7 ++- client/src/index.css | 83 +++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 10 deletions(-) diff --git a/client/src/components/AppShell.tsx b/client/src/components/AppShell.tsx index 38668a8..5f85497 100644 --- a/client/src/components/AppShell.tsx +++ b/client/src/components/AppShell.tsx @@ -27,8 +27,11 @@ export function AppShell({ children }: { children: ReactNode }) { const logout = useAuth((s) => s.logout) return ( -
-
+ {/* Run log — how the agent got here. */} - {showTrace && ( -
{formatTrace(item.trace)}
- )} + {showLog && }
- - + +
) } -function formatTrace(trace: string | null): string { - if (!trace) return 'No trace captured.' - try { - return JSON.stringify(JSON.parse(trace), null, 2) - } catch { - return trace - } +function RunLog({ item, run }: { item: ReviewItem; run: RunDetail | null }) { + // The assembly trace is on the review item; the run adds latency, tool-call outcomes, and raw output. + const trace = parseJson(run?.trace ?? item.trace) + const result = parseJson(run?.resultJson) + const [showRaw, setShowRaw] = useState(false) + const [showPrompt, setShowPrompt] = useState(false) + const toolCalls = result?.toolCalls ?? [] + + return ( +
+
+ + {trace?.agent ?? 'agent'} · {trace?.autonomy ?? '—'} + + {run?.latencyMs != null && ( + + {(run.latencyMs / 1000).toFixed(1)}s + + )} + {trace?.product?.identity && · product identity included} + {typeof trace?.memories === 'number' && · {trace.memories} memory hit{trace.memories === 1 ? '' : 's'}} +
+ + + {trace?.tools?.length ? : null} + {trace?.docs?.length ? : null} + +
+ Tools called + + {toolCalls.length === 0 ? ( + none + ) : ( + + {toolCalls.map((t, i) => ( + + {t.tool} + {t.server ? ` · ${t.server}` : ''} + + {t.ok ? 'ok' : 'failed'} + + + ))} + + )} + +
+ + {run?.error && } + + {run?.output && ( +
+ + {showRaw &&
{run.output}
} +
+ )} + + {run?.prompt && ( +
+ + {showPrompt &&
{run.prompt}
} +
+ )} + + {!run && !trace && Loading run…} +
+ ) +} + +function LogRow({ label, value }: { label: string; value: string }) { + return ( +
+ {label} + {value} +
+ ) } diff --git a/src/Modules/TeamUp.Modules.Assembler/Endpoints/AssemblerDtos.cs b/src/Modules/TeamUp.Modules.Assembler/Endpoints/AssemblerDtos.cs index 9a8148e..c9f8a3a 100644 --- a/src/Modules/TeamUp.Modules.Assembler/Endpoints/AssemblerDtos.cs +++ b/src/Modules/TeamUp.Modules.Assembler/Endpoints/AssemblerDtos.cs @@ -12,7 +12,12 @@ internal sealed record RunResponse( string? ActionRisk, string? Prompt, string? Output, - string? Error); + string? Error, + string? Trace, + string? ResultJson, + long? LatencyMs, + DateTimeOffset CreatedAtUtc, + DateTimeOffset? CompletedAtUtc); internal sealed record AgentActivityResponse( Guid AgentId, diff --git a/src/Modules/TeamUp.Modules.Assembler/Endpoints/AssemblerEndpoints.cs b/src/Modules/TeamUp.Modules.Assembler/Endpoints/AssemblerEndpoints.cs index f2eec8a..9e26f74 100644 --- a/src/Modules/TeamUp.Modules.Assembler/Endpoints/AssemblerEndpoints.cs +++ b/src/Modules/TeamUp.Modules.Assembler/Endpoints/AssemblerEndpoints.cs @@ -85,5 +85,6 @@ internal static class AssemblerEndpoints private static RunResponse ToResponse(AgentRun run) => new( run.Id, run.SeatId, run.WorkItemId, run.AgentId, run.Status.ToString(), - run.ActionType, run.ActionRisk, run.Prompt, run.Output, run.Error); + run.ActionType, run.ActionRisk, run.Prompt, run.Output, run.Error, + run.Trace, run.ResultJson, run.LatencyMs, run.CreatedAtUtc, run.CompletedAtUtc); }