feat: add operational timeline workspace

This commit is contained in:
2026-08-19 16:42:41 +08:00
parent d2f2895c36
commit 45f1ebee7e
19 changed files with 1127 additions and 105 deletions
@@ -12,6 +12,8 @@ import type {
type WorkbenchMainFrameProps = {
mapContent: ReactNode;
mapOverlay?: ReactNode;
timelineContent: ReactNode;
timelineMode: "compact" | "expanded" | "summary";
activeArtifact: AnalysisArtifact | null;
pendingArtifact: AnalysisArtifact | null;
surfaceMode: WorkbenchSurfaceMode;
@@ -26,6 +28,8 @@ type WorkbenchMainFrameProps = {
export function WorkbenchMainFrame({
mapContent,
mapOverlay,
timelineContent,
timelineMode,
activeArtifact,
pendingArtifact,
surfaceMode,
@@ -41,8 +45,9 @@ export function WorkbenchMainFrame({
return (
<div
className="workbench-main-frame pointer-events-none absolute inset-x-0 bottom-0 top-14 lg:left-[var(--workbench-agent-current-width)]"
className="workbench-main-frame pointer-events-none absolute inset-x-0 bottom-0 top-14 min-h-0 lg:left-[var(--workbench-agent-current-width)]"
data-testid="workbench-main-frame"
data-timeline-mode={timelineMode}
>
<div
id="main-workspace"
@@ -94,16 +99,27 @@ export function WorkbenchMainFrame({
/>
</section>
) : null}
{pendingArtifact ? (
<ArtifactPeekBar
artifact={pendingArtifact}
surfaceMode={surfaceMode}
onOpen={onOpenPendingArtifact}
onDestroy={onDestroyPendingArtifact}
/>
) : null}
</div>
{pendingArtifact ? (
<ArtifactPeekBar
artifact={pendingArtifact}
surfaceMode={surfaceMode}
onOpen={onOpenPendingArtifact}
onDestroy={onDestroyPendingArtifact}
/>
) : null}
<div
className={cn(
"pointer-events-auto absolute bottom-3 left-3 right-3 z-40 mx-auto min-h-0 w-[calc(100%-1.5rem)]",
timelineMode === "expanded" && "max-w-[1180px]",
timelineMode === "compact" && "max-w-[980px]",
timelineMode === "summary" && "max-w-[760px]"
)}
>
{timelineContent}
</div>
</div>
);
}