Extracted the visual briefing build progress into its own component

This commit is contained in:
Thorsten Sommer 2026-08-02 12:45:08 +02:00
parent bb418ab5b1
commit 070cbd01cb
Signed by untrusted user who does not match committer: tsommer
GPG Key ID: 371BBA77A02C0108
9 changed files with 499 additions and 417 deletions

View File

@ -2281,9 +2281,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Stop build -- Stop build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Stop build" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Stop build"
-- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Running"
-- changed -- changed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1177151643"] = "changed" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1177151643"] = "changed"
@ -2314,12 +2311,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Protection level -- Protection level
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1407518380"] = "Protection level" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1407518380"] = "Protection level"
-- Failed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1434043348"] = "Failed"
-- Curate content
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1458812674"] = "Curate content"
-- Import -- Import
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1463683828"] = "Import" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1463683828"] = "Import"
@ -2356,9 +2347,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Refresh status -- Refresh status
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2035829510"] = "Refresh status" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2035829510"] = "Refresh status"
-- Analyze material
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T204596900"] = "Analyze material"
-- Unavailable visual briefing -- Unavailable visual briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2068761945"] = "Unavailable visual briefing" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2068761945"] = "Unavailable visual briefing"
@ -2368,9 +2356,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Documents, spreadsheets, images, audio, and video are considered as source context. -- Documents, spreadsheets, images, audio, and video are considered as source context.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2228157968"] = "Documents, spreadsheets, images, audio, and video are considered as source context." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2228157968"] = "Documents, spreadsheets, images, audio, and video are considered as source context."
-- Compile and save
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2332777012"] = "Compile and save"
-- Target language -- Target language
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T237828418"] = "Target language" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T237828418"] = "Target language"
@ -2431,15 +2416,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Enter a new name for this visual briefing. -- Enter a new name for this visual briefing.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2782842014"] = "Enter a new name for this visual briefing." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2782842014"] = "Enter a new name for this visual briefing."
-- Prepare sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2838352358"] = "Prepare sources"
-- Linked sources -- Linked sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2857875074"] = "Linked sources" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2857875074"] = "Linked sources"
-- Action required
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2870470104"] = "Action required"
-- import -- import
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T288002260"] = "import" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T288002260"] = "import"
@ -2452,9 +2431,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Opened the visual briefing project folder. -- Opened the visual briefing project folder.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2964042492"] = "Opened the visual briefing project folder." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2964042492"] = "Opened the visual briefing project folder."
-- Resume build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3016389190"] = "Resume build"
-- Visual assets -- Visual assets
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3226971402"] = "Visual assets" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3226971402"] = "Visual assets"
@ -2470,9 +2446,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Could not open the visual briefing project folder. -- Could not open the visual briefing project folder.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Could not open the visual briefing project folder." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Could not open the visual briefing project folder."
-- {0} in progress...
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3291403991"] = "{0} in progress..."
-- The visual briefing was imported. -- The visual briefing was imported.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3348040099"] = "The visual briefing was imported." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3348040099"] = "The visual briefing was imported."
@ -2503,15 +2476,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Author (optional) -- Author (optional)
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3529399925"] = "Author (optional)" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3529399925"] = "Author (optional)"
-- Not started
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3531294543"] = "Not started"
-- The visual briefing project folder is not available. -- The visual briefing project folder is not available.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3564616779"] = "The visual briefing project folder is not available." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3564616779"] = "The visual briefing project folder is not available."
-- Plan briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3576809882"] = "Plan briefing"
-- The visual briefing recompilation failed unexpectedly. Copy the technical details for support. -- The visual briefing recompilation failed unexpectedly. Copy the technical details for support.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3614047460"] = "The visual briefing recompilation failed unexpectedly. Copy the technical details for support." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3614047460"] = "The visual briefing recompilation failed unexpectedly. Copy the technical details for support."
@ -2545,9 +2512,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Choose a different export location so the immutable briefing version is not overwritten. -- Choose a different export location so the immutable briefing version is not overwritten.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3955270674"] = "Choose a different export location so the immutable briefing version is not overwritten." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3955270674"] = "Choose a different export location so the immutable briefing version is not overwritten."
-- Completed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3968379570"] = "Completed"
-- Show source references -- Show source references
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3977003073"] = "Show source references" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3977003073"] = "Show source references"
@ -2557,9 +2521,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- unchanged -- unchanged
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4017131198"] = "unchanged" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4017131198"] = "unchanged"
-- Design presentation
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4023219825"] = "Design presentation"
-- Create briefing -- Create briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4028101071"] = "Create briefing" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4028101071"] = "Create briefing"
@ -2575,9 +2536,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- transcript outdated -- transcript outdated
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4158473953"] = "transcript outdated" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4158473953"] = "transcript outdated"
-- Canceled
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4165352378"] = "Canceled"
-- Large visual briefing -- Large visual briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4198749440"] = "Large visual briefing" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4198749440"] = "Large visual briefing"
@ -2605,9 +2563,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- The briefing was recompiled with the current AI Studio version. -- The briefing was recompiled with the current AI Studio version.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T453632597"] = "The briefing was recompiled with the current AI Studio version." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T453632597"] = "The briefing was recompiled with the current AI Studio version."
-- Reused
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T48113973"] = "Reused"
-- The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call. -- The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T494870741"] = "The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T494870741"] = "The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call."
@ -2650,9 +2605,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Please provide a briefing name. -- Please provide a briefing name.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Please provide a briefing name." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Please provide a briefing name."
-- Build progress
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T909046610"] = "Build progress"
-- Briefing settings -- Briefing settings
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T937201158"] = "Briefing settings" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T937201158"] = "Briefing settings"
@ -2665,6 +2617,54 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- The media file changed. Transcribe it again with the configured transcription provider? -- The media file changed. Transcribe it again with the configured transcription provider?
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T998394163"] = "The media file changed. Transcribe it again with the configured transcription provider?" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T998394163"] = "The media file changed. Transcribe it again with the configured transcription provider?"
-- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1160324588"] = "Running"
-- Failed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1434043348"] = "Failed"
-- Curate content
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1458812674"] = "Curate content"
-- Analyze material
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T204596900"] = "Analyze material"
-- Compile and save
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2332777012"] = "Compile and save"
-- Prepare sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2838352358"] = "Prepare sources"
-- Action required
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2870470104"] = "Action required"
-- Resume build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3016389190"] = "Resume build"
-- {0} in progress...
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3291403991"] = "{0} in progress..."
-- Not started
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3531294543"] = "Not started"
-- Plan briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3576809882"] = "Plan briefing"
-- Completed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3968379570"] = "Completed"
-- Design presentation
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T4023219825"] = "Design presentation"
-- Canceled
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T4165352378"] = "Canceled"
-- Reused
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T48113973"] = "Reused"
-- Build progress
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T909046610"] = "Build progress"
-- System -- System
UI_TEXT_CONTENT["AISTUDIO::CHAT::CHATROLEEXTENSIONS::T2402387132"] = "System" UI_TEXT_CONTENT["AISTUDIO::CHAT::CHATROLEEXTENSIONS::T2402387132"] = "System"

View File

@ -245,62 +245,7 @@
@if (this.latestBuild is not null) @if (this.latestBuild is not null)
{ {
string[] buildStepTitles = <VisualBriefingBuildProgress Build="@this.latestBuild" Disabled="@this.IsCurrentBusy" OnResume="@this.ResumeLatestBuildAsync"/>
[
T("Prepare sources"),
T("Analyze material"),
T("Plan briefing"),
T("Curate content"),
T("Design presentation"),
T("Compile and save"),
];
<MudExpansionPanels Class="mb-4 visual-briefing-build-progress" Elevation="0">
<MudExpansionPanel Text="@this.BuildProgressTitle"
Expanded="@(this.latestBuild.Status is not VisualBriefingBuildStatus.COMPLETED)">
<MudStepper ActiveIndex="@this.BuildStepperIndex"
CompletedStepColor="Color.Primary"
CurrentStepColor="Color.Primary"
ErrorStepColor="Color.Error"
NonLinear="@false"
OnPreviewInteraction="@PreventBuildStepperInteractionAsync"
ShowResetButton="@false">
<ChildContent>
@for (var index = 0; index < buildStepTitles.Length; index++)
{
var stepIndex = index;
<MudStep Title="@buildStepTitles[stepIndex]"
Completed="@this.BuildGroupCompleted(stepIndex)"
HasError="@this.BuildGroupStopped(stepIndex)">
<MudStack Spacing="1" Class="mt-2">
<MudText Typo="Typo.body2">@this.BuildGroupSummary(stepIndex)</MudText>
@if (this.BuildGroupRunning(stepIndex))
{
<MudProgressLinear Color="Color.Primary" Indeterminate="true"/>
<MudText Typo="Typo.body2">@string.Format(T("{0} in progress..."), buildStepTitles[stepIndex])</MudText>
}
@if (this.BuildGroupStopped(stepIndex))
{
<MudAlert Severity="Severity.Error" Dense="true">
@this.BuildGroupFailure(stepIndex)
</MudAlert>
@if (this.latestBuild.Status is VisualBriefingBuildStatus.FAILED or VisualBriefingBuildStatus.CANCELED)
{
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.PlayArrow"
Disabled="@this.IsCurrentBusy"
OnClick="@this.ResumeLatestBuildAsync">
@T("Resume build")
</MudButton>
}
}
</MudStack>
</MudStep>
}
</ChildContent>
</MudStepper>
</MudExpansionPanel>
</MudExpansionPanels>
} }
@if (this.reusableContentBuildId is { } reusableBuildId) @if (this.reusableContentBuildId is { } reusableBuildId)

View File

@ -38,61 +38,6 @@ public partial class VisualBriefingAssistant
this.selectedBriefing?.Sources.Any(source => this.selectedBriefing?.Sources.Any(source =>
source.Status is VisualBriefingSourceStatus.UNREACHABLE or VisualBriefingSourceStatus.TRANSCRIPT_OUTDATED) == true; source.Status is VisualBriefingSourceStatus.UNREACHABLE or VisualBriefingSourceStatus.TRANSCRIPT_OUTDATED) == true;
/// <summary>Gets the active build stepper index.</summary>
private int BuildStepperIndex
{
get
{
if (this.latestBuild is null)
return 0;
var groups = BuildStageGroups();
for (var index = 0; index < groups.Length; index++)
{
var statuses = groups[index].Select(this.StageStatus).ToArray();
if (statuses.Any(status => status is VisualBriefingBuildStageStatus.RUNNING or
VisualBriefingBuildStageStatus.FAILED or VisualBriefingBuildStageStatus.CANCELED))
return index;
if (statuses.Any(status => status is VisualBriefingBuildStageStatus.NOT_STARTED))
return index;
}
return groups.Length - 1;
}
}
/// <summary>
/// Gets the localized collapsed build-progress summary.
/// </summary>
private string BuildProgressTitle
{
get
{
var title = this.latestBuild?.Status switch
{
VisualBriefingBuildStatus.COMPLETED => $"{T("Build progress")} · {T("Completed")}",
VisualBriefingBuildStatus.FAILED => $"{T("Build progress")} · {T("Failed")}",
VisualBriefingBuildStatus.CANCELED => $"{T("Build progress")} · {T("Canceled")}",
VisualBriefingBuildStatus.AWAITING_REBUILD => $"{T("Build progress")} · {T("Action required")}",
_ => $"{T("Build progress")} · {T("Running")}",
};
var duration = this.CalculateBuildDuration(this.latestBuild?.Stages ?? []);
return duration > TimeSpan.Zero ? $"{title} · {FormatBuildDuration(duration)}" : title;
}
}
/// <summary>
/// Keeps the status stepper informational while allowing actions inside the active step.
/// </summary>
private static Task PreventBuildStepperInteractionAsync(StepperInteractionEventArgs args)
{
args.Cancel = true;
return Task.CompletedTask;
}
/// <summary> /// <summary>
/// Defines <c>GenerateAsync</c> for the visual briefing feature. /// Defines <c>GenerateAsync</c> for the visual briefing feature.
/// </summary> /// </summary>
@ -358,34 +303,10 @@ public partial class VisualBriefingAssistant
return; return;
this.latestBuild = this.BuildProgressService.GetLatest(briefingId); this.latestBuild = this.BuildProgressService.GetLatest(briefingId);
this.buildDurationReferenceUtc = DateTimeOffset.UtcNow;
this.StateHasChanged(); this.StateHasChanged();
}); });
} }
/// <summary>
/// Refreshes live build durations at most once per second while a selected stage is running.
/// </summary>
private async Task MonitorBuildDurationAsync(CancellationToken token)
{
using var timer = new PeriodicTimer(TimeSpan.FromSeconds(1));
try
{
while (await timer.WaitForNextTickAsync(token))
await this.InvokeAsync(() =>
{
if (this.latestBuild?.Stages.Any(stage => stage.Status is VisualBriefingBuildStageStatus.RUNNING) != true)
return;
this.buildDurationReferenceUtc = DateTimeOffset.UtcNow;
this.StateHasChanged();
});
}
catch (OperationCanceledException) when (token.IsCancellationRequested)
{
}
}
/// <summary> /// <summary>
/// Resumes the latest failed build with its persisted operation inputs. /// Resumes the latest failed build with its persisted operation inputs.
/// </summary> /// </summary>
@ -418,120 +339,6 @@ public partial class VisualBriefingAssistant
this.StateHasChanged(); this.StateHasChanged();
} }
/// <summary>
/// Gets the six UI groups for the eight durable build stages.
/// </summary>
private static VisualBriefingBuildStage[][] BuildStageGroups() =>
[
[VisualBriefingBuildStage.SOURCE_PREPARATION],
[VisualBriefingBuildStage.EVIDENCE],
[VisualBriefingBuildStage.PLAN],
[VisualBriefingBuildStage.CONTENT],
[VisualBriefingBuildStage.DESIGN],
[VisualBriefingBuildStage.COMPILATION, VisualBriefingBuildStage.ASSEMBLY, VisualBriefingBuildStage.COMMIT],
];
/// <summary>
/// Gets a persistent stage status, defaulting to not started.
/// </summary>
private VisualBriefingBuildStageStatus StageStatus(VisualBriefingBuildStage stage) =>
this.latestBuild?.Stages.FirstOrDefault(item => item.Stage == stage)?.Status ??
VisualBriefingBuildStageStatus.NOT_STARTED;
/// <summary>
/// Gets whether one UI group completed or was reused.
/// </summary>
private bool BuildGroupCompleted(int index) =>
BuildStageGroups()[index].All(stage =>
this.StageStatus(stage) is VisualBriefingBuildStageStatus.COMPLETED or VisualBriefingBuildStageStatus.SKIPPED);
/// <summary>
/// Gets whether one UI group failed.
/// </summary>
private bool BuildGroupFailed(int index) =>
BuildStageGroups()[index].Any(stage => this.StageStatus(stage) is VisualBriefingBuildStageStatus.FAILED);
/// <summary>
/// Gets whether one UI group was canceled.
/// </summary>
private bool BuildGroupCanceled(int index) =>
BuildStageGroups()[index].Any(stage => this.StageStatus(stage) is VisualBriefingBuildStageStatus.CANCELED);
/// <summary>
/// Gets whether one UI group stopped with a failure or cancellation.
/// </summary>
private bool BuildGroupStopped(int index) =>
this.BuildGroupFailed(index) || this.BuildGroupCanceled(index);
/// <summary>
/// Gets whether one UI group is active.
/// </summary>
private bool BuildGroupRunning(int index) =>
BuildStageGroups()[index].Any(stage => this.StageStatus(stage) is VisualBriefingBuildStageStatus.RUNNING);
/// <summary>
/// Formats a safe localized status summary and duration.
/// </summary>
private string BuildGroupSummary(int index)
{
if (this.latestBuild is null)
return T("Not started");
var records = BuildStageGroups()[index]
.Select(stage => this.latestBuild.Stages.FirstOrDefault(item => item.Stage == stage))
.Where(record => record is not null)
.Cast<VisualBriefingBuildStageRecord>()
.ToArray();
var status = this.BuildGroupRunning(index)
? T("Running")
: this.BuildGroupFailed(index)
? T("Failed")
: this.BuildGroupCanceled(index)
? T("Canceled")
: records.Length > 0 && records.All(record => record.Status is VisualBriefingBuildStageStatus.SKIPPED)
? T("Reused")
: this.BuildGroupCompleted(index)
? T("Completed")
: T("Not started");
var duration = this.CalculateBuildDuration(records);
return duration > TimeSpan.Zero ? $"{status} · {FormatBuildDuration(duration)}" : status;
}
/// <summary>
/// Calculates active processing time without counting reused stages or time between resume attempts.
/// </summary>
private TimeSpan CalculateBuildDuration(IEnumerable<VisualBriefingBuildStageRecord> records) => records
.Where(record => record.StartedAtUtc is not null && record.Status is not VisualBriefingBuildStageStatus.SKIPPED)
.Aggregate(TimeSpan.Zero, (total, record) => total + this.CalculateStageDuration(record));
/// <summary>
/// Calculates one stage duration against the shared live timestamp.
/// </summary>
private TimeSpan CalculateStageDuration(VisualBriefingBuildStageRecord record)
{
var finishedAtUtc = record.Status is VisualBriefingBuildStageStatus.RUNNING ? this.buildDurationReferenceUtc : record.FinishedAtUtc;
if (record.StartedAtUtc is null || finishedAtUtc is null)
return TimeSpan.Zero;
var duration = finishedAtUtc.Value - record.StartedAtUtc.Value;
return duration > TimeSpan.Zero ? duration : TimeSpan.Zero;
}
/// <summary>
/// Formats a build duration using the current UI culture.
/// </summary>
private static string FormatBuildDuration(TimeSpan duration) => $"{duration.TotalSeconds:0.0} s";
/// <summary>
/// Gets the safe failure reason for a UI group.
/// </summary>
private string BuildGroupFailure(int index) =>
BuildStageGroups()[index]
.Select(stage => this.latestBuild?.Stages.FirstOrDefault(item => item.Stage == stage)?.Failure)
.FirstOrDefault(failure => failure is not null)?.UserMessage ?? this.latestBuild?.Failure?.UserMessage ?? string.Empty;
/// <summary> /// <summary>
/// Defines <c>CopyTechnicalDetailsAsync</c> for the visual briefing feature. /// Defines <c>CopyTechnicalDetailsAsync</c> for the visual briefing feature.
/// </summary> /// </summary>

View File

@ -91,9 +91,6 @@ public partial class VisualBriefingAssistant : MSGComponentBase
/// <summary>Stops the background source-status monitor.</summary> /// <summary>Stops the background source-status monitor.</summary>
private readonly CancellationTokenSource sourceMonitorCancellation = new(); private readonly CancellationTokenSource sourceMonitorCancellation = new();
/// <summary>Stops the live build-duration monitor.</summary>
private readonly CancellationTokenSource buildDurationMonitorCancellation = new();
/// <summary>Stores available and recoverable projects ordered by most recent modification.</summary> /// <summary>Stores available and recoverable projects ordered by most recent modification.</summary>
private IReadOnlyList<VisualBriefingProjectEntry> projects = []; private IReadOnlyList<VisualBriefingProjectEntry> projects = [];
@ -172,9 +169,6 @@ public partial class VisualBriefingAssistant : MSGComponentBase
/// <summary>Stores the latest persistent or live build shown in the stepper.</summary> /// <summary>Stores the latest persistent or live build shown in the stepper.</summary>
private VisualBriefingBuildRecord? latestBuild; private VisualBriefingBuildRecord? latestBuild;
/// <summary>Stores the shared timestamp used to render consistent live build durations.</summary>
private DateTimeOffset buildDurationReferenceUtc = DateTimeOffset.UtcNow;
/// <summary>Stores incompatible validated content offered for rebuild continuation.</summary> /// <summary>Stores incompatible validated content offered for rebuild continuation.</summary>
private Guid? reusableContentBuildId; private Guid? reusableContentBuildId;
@ -220,7 +214,6 @@ public partial class VisualBriefingAssistant : MSGComponentBase
this.BuildProgressService.Changed += this.BuildProgressChanged; this.BuildProgressService.Changed += this.BuildProgressChanged;
await this.ReloadListAsync(); await this.ReloadListAsync();
_ = this.MonitorSourceStatusAsync(this.sourceMonitorCancellation.Token); _ = this.MonitorSourceStatusAsync(this.sourceMonitorCancellation.Token);
_ = this.MonitorBuildDurationAsync(this.buildDurationMonitorCancellation.Token);
var deferredInstruction = this.MessageBus.CheckDeferredMessages<string>(Event.SEND_TO_VISUAL_BRIEFING_ASSISTANT).FirstOrDefault(); var deferredInstruction = this.MessageBus.CheckDeferredMessages<string>(Event.SEND_TO_VISUAL_BRIEFING_ASSISTANT).FirstOrDefault();
if (!string.IsNullOrWhiteSpace(deferredInstruction)) if (!string.IsNullOrWhiteSpace(deferredInstruction))
@ -243,8 +236,6 @@ public partial class VisualBriefingAssistant : MSGComponentBase
this.isDisposed = true; this.isDisposed = true;
this.sourceMonitorCancellation.Cancel(); this.sourceMonitorCancellation.Cancel();
this.sourceMonitorCancellation.Dispose(); this.sourceMonitorCancellation.Dispose();
this.buildDurationMonitorCancellation.Cancel();
this.buildDurationMonitorCancellation.Dispose();
this.MediaTranscriptionService.StateChanged -= this.MediaStateChanged; this.MediaTranscriptionService.StateChanged -= this.MediaStateChanged;
this.BuildProgressService.Changed -= this.BuildProgressChanged; this.BuildProgressService.Changed -= this.BuildProgressChanged;
base.DisposeResources(); base.DisposeResources();

View File

@ -0,0 +1,48 @@
@inherits MSGComponentBase
<MudExpansionPanels Class="mb-4" Elevation="0">
<MudExpansionPanel Text="@this.BuildProgressTitle" Expanded="@(this.Build?.Status is not VisualBriefingBuildStatus.COMPLETED)">
<MudStepper ActiveIndex="@this.BuildStepperIndex"
CompletedStepColor="Color.Primary"
CurrentStepColor="Color.Primary"
ErrorStepColor="Color.Error"
NonLinear="@false"
OnPreviewInteraction="@PreventBuildStepperInteractionAsync"
ShowResetButton="@false">
<ChildContent>
@for (var index = 0; index < STAGE_GROUPS.Length; index++)
{
var stepIndex = index;
<MudStep Title="@this.StepTitle(stepIndex)" Completed="@this.BuildGroupCompleted(stepIndex)" HasError="@this.BuildGroupStopped(stepIndex)">
<MudStack Spacing="1" Class="mt-2">
<MudText Typo="Typo.body2">@this.BuildGroupSummary(stepIndex)</MudText>
@if (this.BuildGroupRunning(stepIndex))
{
<MudProgressLinear Color="Color.Primary" Indeterminate="true"/>
<MudText Typo="Typo.body2">@string.Format(T("{0} in progress..."), this.StepTitle(stepIndex))</MudText>
}
@if (this.BuildGroupStopped(stepIndex))
{
<MudAlert Severity="Severity.Error" Dense="true">
@this.BuildGroupFailure(stepIndex)
</MudAlert>
@if (this.Build?.Status is VisualBriefingBuildStatus.FAILED or VisualBriefingBuildStatus.CANCELED)
{
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.PlayArrow"
Disabled="@this.Disabled"
OnClick="@this.OnResume">
@T("Resume build")
</MudButton>
}
}
</MudStack>
</MudStep>
}
</ChildContent>
</MudStepper>
</MudExpansionPanel>
</MudExpansionPanels>

View File

@ -0,0 +1,291 @@
using AIStudio.Components;
using Microsoft.AspNetCore.Components;
namespace AIStudio.Assistants.VisualBriefing;
/// <summary>
/// Renders the staged progress, durations, and failures of one visual briefing build.
/// </summary>
/// <remarks>
/// The component derives everything it shows from <see cref="Build"/> alone. It also owns the timer
/// that keeps the duration of a running stage current, so a build in progress re-renders this panel
/// once per second instead of the entire assistant page.
/// </remarks>
public partial class VisualBriefingBuildProgress : MSGComponentBase
{
/// <summary>
/// Gets or sets the build whose progress is displayed.
/// </summary>
[Parameter, EditorRequired]
public VisualBriefingBuildRecord? Build { get; set; }
/// <summary>
/// Gets or sets whether the resume action is blocked because other work is running.
/// </summary>
[Parameter]
public bool Disabled { get; set; }
/// <summary>
/// Gets or sets the callback raised when the user resumes a failed or canceled build.
/// </summary>
[Parameter]
public EventCallback OnResume { get; set; }
/// <summary>
/// The six UI groups covering the eight durable build stages.
/// </summary>
private static readonly VisualBriefingBuildStage[][] STAGE_GROUPS =
[
[VisualBriefingBuildStage.SOURCE_PREPARATION],
[VisualBriefingBuildStage.EVIDENCE],
[VisualBriefingBuildStage.PLAN],
[VisualBriefingBuildStage.CONTENT],
[VisualBriefingBuildStage.DESIGN],
[VisualBriefingBuildStage.COMPILATION, VisualBriefingBuildStage.ASSEMBLY, VisualBriefingBuildStage.COMMIT],
];
/// <summary>Stops the live build-duration monitor.</summary>
private readonly CancellationTokenSource durationMonitorCancellation = new();
/// <summary>Stores the shared timestamp used to render consistent live build durations.</summary>
private DateTimeOffset durationReferenceUtc = DateTimeOffset.UtcNow;
#region Overrides of ComponentBase
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
_ = this.MonitorBuildDurationAsync(this.durationMonitorCancellation.Token);
}
protected override void OnParametersSet()
{
// The parent re-renders us whenever it received a progress update, so this is the moment the
// durations of running stages must be measured against again.
this.durationReferenceUtc = DateTimeOffset.UtcNow;
}
#endregion
#region Overrides of MSGComponentBase
protected override void DisposeResources()
{
this.durationMonitorCancellation.Cancel();
this.durationMonitorCancellation.Dispose();
base.DisposeResources();
}
#endregion
/// <summary>
/// Refreshes live build durations at most once per second while a stage is running.
/// </summary>
/// <param name="token">The token that stops the monitor.</param>
/// <returns>A task that completes once the monitor was stopped.</returns>
private async Task MonitorBuildDurationAsync(CancellationToken token)
{
using var timer = new PeriodicTimer(TimeSpan.FromSeconds(1));
try
{
while (await timer.WaitForNextTickAsync(token))
await this.InvokeAsync(() =>
{
if (this.Build?.Stages.Any(stage => stage.Status is VisualBriefingBuildStageStatus.RUNNING) != true)
return;
this.durationReferenceUtc = DateTimeOffset.UtcNow;
this.StateHasChanged();
});
}
catch (OperationCanceledException) when (token.IsCancellationRequested)
{
}
}
/// <summary>
/// Gets the localized title of one build step.
/// </summary>
/// <param name="index">The zero-based index of the step.</param>
/// <returns>The localized step title.</returns>
private string StepTitle(int index) => index switch
{
0 => T("Prepare sources"),
1 => T("Analyze material"),
2 => T("Plan briefing"),
3 => T("Curate content"),
4 => T("Design presentation"),
_ => T("Compile and save"),
};
/// <summary>Gets the active build stepper index.</summary>
private int BuildStepperIndex
{
get
{
for (var index = 0; index < STAGE_GROUPS.Length; index++)
{
var statuses = STAGE_GROUPS[index].Select(this.StageStatus).ToArray();
if (statuses.Any(status => status is VisualBriefingBuildStageStatus.RUNNING or VisualBriefingBuildStageStatus.FAILED or VisualBriefingBuildStageStatus.CANCELED))
return index;
if (statuses.Any(status => status is VisualBriefingBuildStageStatus.NOT_STARTED))
return index;
}
return STAGE_GROUPS.Length - 1;
}
}
/// <summary>
/// Gets the localized collapsed build-progress summary.
/// </summary>
private string BuildProgressTitle
{
get
{
if(this.Build is null)
return $"{T("Build progress")} · {T("Running")}";
var title = this.Build.Status switch
{
VisualBriefingBuildStatus.COMPLETED => $"{T("Build progress")} · {T("Completed")}",
VisualBriefingBuildStatus.FAILED => $"{T("Build progress")} · {T("Failed")}",
VisualBriefingBuildStatus.CANCELED => $"{T("Build progress")} · {T("Canceled")}",
VisualBriefingBuildStatus.AWAITING_REBUILD => $"{T("Build progress")} · {T("Action required")}",
_ => $"{T("Build progress")} · {T("Running")}",
};
var duration = this.CalculateBuildDuration(this.Build.Stages);
return duration > TimeSpan.Zero ? $"{title} · {FormatBuildDuration(duration)}" : title;
}
}
/// <summary>
/// Keeps the status stepper informational while allowing actions inside the active step.
/// </summary>
/// <param name="args">The interaction to cancel.</param>
/// <returns>A completed task.</returns>
private static Task PreventBuildStepperInteractionAsync(StepperInteractionEventArgs args)
{
args.Cancel = true;
return Task.CompletedTask;
}
/// <summary>
/// Gets a persistent stage status, defaulting to not started.
/// </summary>
/// <param name="stage">The stage to look up.</param>
/// <returns>The stage status.</returns>
private VisualBriefingBuildStageStatus StageStatus(VisualBriefingBuildStage stage) => this.Build?.Stages.FirstOrDefault(item => item.Stage == stage)?.Status ?? VisualBriefingBuildStageStatus.NOT_STARTED;
/// <summary>
/// Gets whether one UI group completed or was reused.
/// </summary>
/// <param name="index">The zero-based index of the group.</param>
/// <returns><c>true</c> when the group finished.</returns>
private bool BuildGroupCompleted(int index) => STAGE_GROUPS[index].All(stage => this.StageStatus(stage) is VisualBriefingBuildStageStatus.COMPLETED or VisualBriefingBuildStageStatus.SKIPPED);
/// <summary>
/// Gets whether one UI group failed.
/// </summary>
/// <param name="index">The zero-based index of the group.</param>
/// <returns><c>true</c> when the group failed.</returns>
private bool BuildGroupFailed(int index) => STAGE_GROUPS[index].Any(stage => this.StageStatus(stage) is VisualBriefingBuildStageStatus.FAILED);
/// <summary>
/// Gets whether one UI group was canceled.
/// </summary>
/// <param name="index">The zero-based index of the group.</param>
/// <returns><c>true</c> when the group was canceled.</returns>
private bool BuildGroupCanceled(int index) => STAGE_GROUPS[index].Any(stage => this.StageStatus(stage) is VisualBriefingBuildStageStatus.CANCELED);
/// <summary>
/// Gets whether one UI group stopped with a failure or cancellation.
/// </summary>
/// <param name="index">The zero-based index of the group.</param>
/// <returns><c>true</c> when the group stopped.</returns>
private bool BuildGroupStopped(int index) => this.BuildGroupFailed(index) || this.BuildGroupCanceled(index);
/// <summary>
/// Gets whether one UI group is active.
/// </summary>
/// <param name="index">The zero-based index of the group.</param>
/// <returns><c>true</c> when the group is running.</returns>
private bool BuildGroupRunning(int index) => STAGE_GROUPS[index].Any(stage => this.StageStatus(stage) is VisualBriefingBuildStageStatus.RUNNING);
/// <summary>
/// Formats a safe localized status summary and duration.
/// </summary>
/// <param name="index">The zero-based index of the group.</param>
/// <returns>The localized summary.</returns>
private string BuildGroupSummary(int index)
{
if(this.Build is null)
return T("Not started");
var records = STAGE_GROUPS[index]
.Select(stage => this.Build.Stages.FirstOrDefault(item => item.Stage == stage))
.Where(record => record is not null)
.Cast<VisualBriefingBuildStageRecord>()
.ToArray();
var status = this.BuildGroupRunning(index)
? T("Running")
: this.BuildGroupFailed(index)
? T("Failed")
: this.BuildGroupCanceled(index)
? T("Canceled")
: records.Length > 0 && records.All(record => record.Status is VisualBriefingBuildStageStatus.SKIPPED)
? T("Reused")
: this.BuildGroupCompleted(index)
? T("Completed")
: T("Not started");
var duration = this.CalculateBuildDuration(records);
return duration > TimeSpan.Zero ? $"{status} · {FormatBuildDuration(duration)}" : status;
}
/// <summary>
/// Calculates active processing time without counting reused stages or time between resume attempts.
/// </summary>
/// <param name="records">The stage records to aggregate.</param>
/// <returns>The aggregated duration.</returns>
private TimeSpan CalculateBuildDuration(IEnumerable<VisualBriefingBuildStageRecord> records) => records
.Where(record => record.StartedAtUtc is not null && record.Status is not VisualBriefingBuildStageStatus.SKIPPED)
.Aggregate(TimeSpan.Zero, (total, record) => total + this.CalculateStageDuration(record));
/// <summary>
/// Calculates one stage duration against the shared live timestamp.
/// </summary>
/// <param name="record">The stage record to measure.</param>
/// <returns>The stage duration.</returns>
private TimeSpan CalculateStageDuration(VisualBriefingBuildStageRecord record)
{
var finishedAtUtc = record.Status is VisualBriefingBuildStageStatus.RUNNING ? this.durationReferenceUtc : record.FinishedAtUtc;
if (record.StartedAtUtc is null || finishedAtUtc is null)
return TimeSpan.Zero;
var duration = finishedAtUtc.Value - record.StartedAtUtc.Value;
return duration > TimeSpan.Zero ? duration : TimeSpan.Zero;
}
/// <summary>
/// Formats a build duration in seconds using the current culture.
/// </summary>
/// <param name="duration">The duration to format.</param>
/// <returns>The formatted duration.</returns>
private static string FormatBuildDuration(TimeSpan duration) => $"{duration.TotalSeconds:0.0} s";
/// <summary>
/// Gets the safe failure reason for a UI group.
/// </summary>
/// <param name="index">The zero-based index of the group.</param>
/// <returns>The user-facing failure message.</returns>
private string BuildGroupFailure(int index) => this.Build is null ? string.Empty : STAGE_GROUPS[index]
.Select(stage => this.Build.Stages.FirstOrDefault(item => item.Stage == stage)?.Failure)
.FirstOrDefault(failure => failure is not null)?.UserMessage ?? this.Build.Failure?.UserMessage ?? string.Empty;
}

View File

@ -8,12 +8,12 @@ public sealed class VisualBriefingBuildRecord
/// <summary> /// <summary>
/// Gets or sets the build-record schema version. /// Gets or sets the build-record schema version.
/// </summary> /// </summary>
public int BuildVersion { get; set; } = VisualBriefingVersions.BUILD; public int BuildVersion { get; init; } = VisualBriefingVersions.BUILD;
/// <summary> /// <summary>
/// Gets or sets the build identifier. /// Gets or sets the build identifier.
/// </summary> /// </summary>
public Guid BuildId { get; set; } public Guid BuildId { get; init; }
/// <summary> /// <summary>
/// Gets or sets the operation identifier shown in diagnostics and logs. /// Gets or sets the operation identifier shown in diagnostics and logs.
@ -23,17 +23,17 @@ public sealed class VisualBriefingBuildRecord
/// <summary> /// <summary>
/// Gets or sets the owning briefing identifier. /// Gets or sets the owning briefing identifier.
/// </summary> /// </summary>
public Guid BriefingId { get; set; } public Guid BriefingId { get; init; }
/// <summary> /// <summary>
/// Gets or sets the requested edit mode. /// Gets or sets the requested edit mode.
/// </summary> /// </summary>
public VisualBriefingEditMode Mode { get; set; } public VisualBriefingEditMode Mode { get; init; }
/// <summary> /// <summary>
/// Gets or sets the parent revision identifier. /// Gets or sets the parent revision identifier.
/// </summary> /// </summary>
public Guid? ParentRevisionId { get; set; } public Guid? ParentRevisionId { get; init; }
/// <summary> /// <summary>
/// Gets or sets the local revision instruction used for recovery. /// Gets or sets the local revision instruction used for recovery.
@ -48,7 +48,7 @@ public sealed class VisualBriefingBuildRecord
/// <summary> /// <summary>
/// Gets or sets durable stage progress. /// Gets or sets durable stage progress.
/// </summary> /// </summary>
public List<VisualBriefingBuildStageRecord> Stages { get; set; } = []; public List<VisualBriefingBuildStageRecord> Stages { get; init; } = [];
/// <summary> /// <summary>
/// Gets or sets the content artifact identifier. /// Gets or sets the content artifact identifier.
@ -83,47 +83,47 @@ public sealed class VisualBriefingBuildRecord
/// <summary> /// <summary>
/// Gets or sets the complete safe input fingerprint. /// Gets or sets the complete safe input fingerprint.
/// </summary> /// </summary>
public string InputFingerprint { get; set; } = string.Empty; public string InputFingerprint { get; init; } = string.Empty;
/// <summary> /// <summary>
/// Gets or sets the source and transcript fingerprint. /// Gets or sets the source and transcript fingerprint.
/// </summary> /// </summary>
public string SourceFingerprint { get; set; } = string.Empty; public string SourceFingerprint { get; init; } = string.Empty;
/// <summary> /// <summary>
/// Gets or sets the content prompt contract version. /// Gets or sets the content prompt contract version.
/// </summary> /// </summary>
public int ContentContractVersion { get; set; } = VisualBriefingVersions.CONTENT_CONTRACT; public int ContentContractVersion { get; init; } = VisualBriefingVersions.CONTENT_CONTRACT;
/// <summary> /// <summary>
/// Gets or sets the evidence prompt contract version. /// Gets or sets the evidence prompt contract version.
/// </summary> /// </summary>
public int EvidenceContractVersion { get; set; } = VisualBriefingVersions.EVIDENCE_CONTRACT; public int EvidenceContractVersion { get; init; } = VisualBriefingVersions.EVIDENCE_CONTRACT;
/// <summary> /// <summary>
/// Gets or sets the plan prompt contract version. /// Gets or sets the plan prompt contract version.
/// </summary> /// </summary>
public int PlanContractVersion { get; set; } = VisualBriefingVersions.PLAN_CONTRACT; public int PlanContractVersion { get; init; } = VisualBriefingVersions.PLAN_CONTRACT;
/// <summary> /// <summary>
/// Gets or sets the design prompt contract version. /// Gets or sets the design prompt contract version.
/// </summary> /// </summary>
public int DesignContractVersion { get; set; } = VisualBriefingVersions.DESIGN_CONTRACT; public int DesignContractVersion { get; init; } = VisualBriefingVersions.DESIGN_CONTRACT;
/// <summary> /// <summary>
/// Gets or sets the selected provider family. /// Gets or sets the selected provider family.
/// </summary> /// </summary>
public string ProviderFamily { get; set; } = string.Empty; public string ProviderFamily { get; init; } = string.Empty;
/// <summary> /// <summary>
/// Gets or sets the selected model name. /// Gets or sets the selected model name.
/// </summary> /// </summary>
public string Model { get; set; } = string.Empty; public string Model { get; init; } = string.Empty;
/// <summary> /// <summary>
/// Gets or sets the build creation time. /// Gets or sets the build creation time.
/// </summary> /// </summary>
public DateTimeOffset CreatedAtUtc { get; set; } public DateTimeOffset CreatedAtUtc { get; init; }
/// <summary> /// <summary>
/// Gets or sets the most recent build update time. /// Gets or sets the most recent build update time.

View File

@ -2283,9 +2283,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Stop build -- Stop build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Erstellung stoppen" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Erstellung stoppen"
-- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Wird ausgeführt"
-- changed -- changed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1177151643"] = "geändert" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1177151643"] = "geändert"
@ -2316,12 +2313,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Protection level -- Protection level
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1407518380"] = "Schutzstufe" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1407518380"] = "Schutzstufe"
-- Failed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1434043348"] = "fehlgeschlagen"
-- Curate content
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1458812674"] = "Inhalte kuratieren"
-- Import -- Import
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1463683828"] = "Importieren" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1463683828"] = "Importieren"
@ -2358,9 +2349,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Refresh status -- Refresh status
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2035829510"] = "Status aktualisieren" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2035829510"] = "Status aktualisieren"
-- Analyze material
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T204596900"] = "Material analysieren"
-- Unavailable visual briefing -- Unavailable visual briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2068761945"] = "Nicht verfügbares visuelles Briefing" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2068761945"] = "Nicht verfügbares visuelles Briefing"
@ -2370,9 +2358,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Documents, spreadsheets, images, audio, and video are considered as source context. -- Documents, spreadsheets, images, audio, and video are considered as source context.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2228157968"] = "Dokumente, Tabellenkalkulationen, Bilder, Audio- und Videodateien werden als Ausgangsmaterial berücksichtigt." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2228157968"] = "Dokumente, Tabellenkalkulationen, Bilder, Audio- und Videodateien werden als Ausgangsmaterial berücksichtigt."
-- Compile and save
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2332777012"] = "Kompilieren und speichern"
-- Target language -- Target language
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T237828418"] = "Zielsprache" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T237828418"] = "Zielsprache"
@ -2433,15 +2418,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Enter a new name for this visual briefing. -- Enter a new name for this visual briefing.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2782842014"] = "Geben Sie einen neuen Namen für dieses visuelle Briefing ein." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2782842014"] = "Geben Sie einen neuen Namen für dieses visuelle Briefing ein."
-- Prepare sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2838352358"] = "Ausgangsmaterial vorbereiten"
-- Linked sources -- Linked sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2857875074"] = "Verknüpfte Quellen" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2857875074"] = "Verknüpfte Quellen"
-- Action required
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2870470104"] = "Handlung erforderlich"
-- import -- import
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T288002260"] = "Importieren" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T288002260"] = "Importieren"
@ -2454,9 +2433,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Opened the visual briefing project folder. -- Opened the visual briefing project folder.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2964042492"] = "Projektordner für das visuelle Briefing öffnen." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2964042492"] = "Projektordner für das visuelle Briefing öffnen."
-- Resume build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3016389190"] = "Erstellung fortsetzen"
-- Visual assets -- Visual assets
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3226971402"] = "Visuelle Elemente" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3226971402"] = "Visuelle Elemente"
@ -2472,9 +2448,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Could not open the visual briefing project folder. -- Could not open the visual briefing project folder.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Der Projektordner für das visuelle Briefing konnte nicht geöffnet werden." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Der Projektordner für das visuelle Briefing konnte nicht geöffnet werden."
-- {0} in progress...
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3291403991"] = "{0} wird verarbeitet ..."
-- The visual briefing was imported. -- The visual briefing was imported.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3348040099"] = "Das visuelle Briefing wurde importiert." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3348040099"] = "Das visuelle Briefing wurde importiert."
@ -2505,15 +2478,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Author (optional) -- Author (optional)
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3529399925"] = "Autor/in (optional)" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3529399925"] = "Autor/in (optional)"
-- Not started
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3531294543"] = "Nicht gestartet"
-- The visual briefing project folder is not available. -- The visual briefing project folder is not available.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3564616779"] = "Der Projektordner für das visuelle Briefing ist nicht verfügbar." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3564616779"] = "Der Projektordner für das visuelle Briefing ist nicht verfügbar."
-- Plan briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3576809882"] = "Briefing planen"
-- The visual briefing recompilation failed unexpectedly. Copy the technical details for support. -- The visual briefing recompilation failed unexpectedly. Copy the technical details for support.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3614047460"] = "Die erneute Erstellung des visuellen Briefings ist unerwartet fehlgeschlagen. Kopieren Sie die technischen Details für den Support." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3614047460"] = "Die erneute Erstellung des visuellen Briefings ist unerwartet fehlgeschlagen. Kopieren Sie die technischen Details für den Support."
@ -2547,9 +2514,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Choose a different export location so the immutable briefing version is not overwritten. -- Choose a different export location so the immutable briefing version is not overwritten.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3955270674"] = "Wähle einen anderen Ort für den Export, damit die unveränderliche Briefing-Version nicht überschrieben wird." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3955270674"] = "Wähle einen anderen Ort für den Export, damit die unveränderliche Briefing-Version nicht überschrieben wird."
-- Completed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3968379570"] = "Abgeschlossen"
-- Show source references -- Show source references
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3977003073"] = "Quellverweise anzeigen" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3977003073"] = "Quellverweise anzeigen"
@ -2559,9 +2523,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- unchanged -- unchanged
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4017131198"] = "unverändert" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4017131198"] = "unverändert"
-- Design presentation
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4023219825"] = "Präsentation gestalten"
-- Create briefing -- Create briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4028101071"] = "Briefing erstellen" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4028101071"] = "Briefing erstellen"
@ -2577,9 +2538,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- transcript outdated -- transcript outdated
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4158473953"] = "Transkript veraltet" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4158473953"] = "Transkript veraltet"
-- Canceled
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4165352378"] = "Abgebrochen"
-- Large visual briefing -- Large visual briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4198749440"] = "Umfassendes visuelles Briefing" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4198749440"] = "Umfassendes visuelles Briefing"
@ -2607,9 +2565,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- The briefing was recompiled with the current AI Studio version. -- The briefing was recompiled with the current AI Studio version.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T453632597"] = "Das Briefing wurde mit der aktuellen AI Studio-Version neu kompiliert." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T453632597"] = "Das Briefing wurde mit der aktuellen AI Studio-Version neu kompiliert."
-- Reused
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T48113973"] = "Wiederverwendet"
-- The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call. -- The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T494870741"] = "Die aktualisierten Inhalte passen nicht mehr in die aktuelle Präsentation. Sie können ohne weiteren Aufruf des KI-Modells mit einer Neuerstellung fortfahren." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T494870741"] = "Die aktualisierten Inhalte passen nicht mehr in die aktuelle Präsentation. Sie können ohne weiteren Aufruf des KI-Modells mit einer Neuerstellung fortfahren."
@ -2652,9 +2607,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Please provide a briefing name. -- Please provide a briefing name.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Bitte geben Sie einen Namen für das Briefing ein." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Bitte geben Sie einen Namen für das Briefing ein."
-- Build progress
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T909046610"] = "Erstellungsfortschritt"
-- Briefing settings -- Briefing settings
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T937201158"] = "Briefing-Einstellungen" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T937201158"] = "Briefing-Einstellungen"
@ -2667,6 +2619,54 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- The media file changed. Transcribe it again with the configured transcription provider? -- The media file changed. Transcribe it again with the configured transcription provider?
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T998394163"] = "Die Mediendatei wurde geändert. Mit dem konfigurierten Transkriptionsanbieter erneut transkribieren?" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T998394163"] = "Die Mediendatei wurde geändert. Mit dem konfigurierten Transkriptionsanbieter erneut transkribieren?"
-- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1160324588"] = "Wird ausgeführt"
-- Failed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1434043348"] = "Fehlgeschlagen"
-- Curate content
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1458812674"] = "Inhalte kuratieren"
-- Analyze material
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T204596900"] = "Material analysieren"
-- Compile and save
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2332777012"] = "Kompilieren und speichern"
-- Prepare sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2838352358"] = "Quellen vorbereiten"
-- Action required
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2870470104"] = "Aktion erforderlich"
-- Resume build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3016389190"] = "Erstellung fortsetzen"
-- {0} in progress...
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3291403991"] = "{0} wird bearbeitet …"
-- Not started
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3531294543"] = "Nicht gestartet"
-- Plan briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3576809882"] = "Briefing planen"
-- Completed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3968379570"] = "Abgeschlossen"
-- Design presentation
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T4023219825"] = "Präsentation gestalten"
-- Canceled
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T4165352378"] = "Abgebrochen"
-- Reused
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T48113973"] = "Wiederverwendet"
-- Build progress
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T909046610"] = "Erstellungsfortschritt"
-- System -- System
UI_TEXT_CONTENT["AISTUDIO::CHAT::CHATROLEEXTENSIONS::T2402387132"] = "System" UI_TEXT_CONTENT["AISTUDIO::CHAT::CHATROLEEXTENSIONS::T2402387132"] = "System"

View File

@ -2283,9 +2283,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Stop build -- Stop build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Stop build" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Stop build"
-- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Running"
-- changed -- changed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1177151643"] = "changed" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1177151643"] = "changed"
@ -2316,12 +2313,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Protection level -- Protection level
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1407518380"] = "Protection level" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1407518380"] = "Protection level"
-- Failed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1434043348"] = "Failed"
-- Curate content
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1458812674"] = "Curate content"
-- Import -- Import
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1463683828"] = "Import" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1463683828"] = "Import"
@ -2358,9 +2349,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Refresh status -- Refresh status
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2035829510"] = "Refresh status" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2035829510"] = "Refresh status"
-- Analyze material
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T204596900"] = "Analyze material"
-- Unavailable visual briefing -- Unavailable visual briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2068761945"] = "Unavailable visual briefing" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2068761945"] = "Unavailable visual briefing"
@ -2370,9 +2358,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Documents, spreadsheets, images, audio, and video are considered as source context. -- Documents, spreadsheets, images, audio, and video are considered as source context.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2228157968"] = "Documents, spreadsheets, images, audio, and video are considered as source context." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2228157968"] = "Documents, spreadsheets, images, audio, and video are considered as source context."
-- Compile and save
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2332777012"] = "Compile and save"
-- Target language -- Target language
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T237828418"] = "Target language" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T237828418"] = "Target language"
@ -2433,15 +2418,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Enter a new name for this visual briefing. -- Enter a new name for this visual briefing.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2782842014"] = "Enter a new name for this visual briefing." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2782842014"] = "Enter a new name for this visual briefing."
-- Prepare sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2838352358"] = "Prepare sources"
-- Linked sources -- Linked sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2857875074"] = "Linked sources" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2857875074"] = "Linked sources"
-- Action required
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2870470104"] = "Action required"
-- import -- import
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T288002260"] = "import" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T288002260"] = "import"
@ -2454,9 +2433,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Opened the visual briefing project folder. -- Opened the visual briefing project folder.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2964042492"] = "Opened the visual briefing project folder." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T2964042492"] = "Opened the visual briefing project folder."
-- Resume build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3016389190"] = "Resume build"
-- Visual assets -- Visual assets
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3226971402"] = "Visual assets" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3226971402"] = "Visual assets"
@ -2472,9 +2448,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Could not open the visual briefing project folder. -- Could not open the visual briefing project folder.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Could not open the visual briefing project folder." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Could not open the visual briefing project folder."
-- {0} in progress...
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3291403991"] = "{0} in progress..."
-- The visual briefing was imported. -- The visual briefing was imported.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3348040099"] = "The visual briefing was imported." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3348040099"] = "The visual briefing was imported."
@ -2505,15 +2478,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Author (optional) -- Author (optional)
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3529399925"] = "Author (optional)" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3529399925"] = "Author (optional)"
-- Not started
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3531294543"] = "Not started"
-- The visual briefing project folder is not available. -- The visual briefing project folder is not available.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3564616779"] = "The visual briefing project folder is not available." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3564616779"] = "The visual briefing project folder is not available."
-- Plan briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3576809882"] = "Plan briefing"
-- The visual briefing recompilation failed unexpectedly. Copy the technical details for support. -- The visual briefing recompilation failed unexpectedly. Copy the technical details for support.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3614047460"] = "The visual briefing recompilation failed unexpectedly. Copy the technical details for support." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3614047460"] = "The visual briefing recompilation failed unexpectedly. Copy the technical details for support."
@ -2547,9 +2514,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Choose a different export location so the immutable briefing version is not overwritten. -- Choose a different export location so the immutable briefing version is not overwritten.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3955270674"] = "Choose a different export location so the immutable briefing version is not overwritten." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3955270674"] = "Choose a different export location so the immutable briefing version is not overwritten."
-- Completed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3968379570"] = "Completed"
-- Show source references -- Show source references
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3977003073"] = "Show source references" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3977003073"] = "Show source references"
@ -2559,9 +2523,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- unchanged -- unchanged
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4017131198"] = "unchanged" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4017131198"] = "unchanged"
-- Design presentation
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4023219825"] = "Design presentation"
-- Create briefing -- Create briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4028101071"] = "Create briefing" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4028101071"] = "Create briefing"
@ -2577,9 +2538,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- transcript outdated -- transcript outdated
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4158473953"] = "transcript outdated" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4158473953"] = "transcript outdated"
-- Canceled
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4165352378"] = "Canceled"
-- Large visual briefing -- Large visual briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4198749440"] = "Large visual briefing" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4198749440"] = "Large visual briefing"
@ -2607,9 +2565,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- The briefing was recompiled with the current AI Studio version. -- The briefing was recompiled with the current AI Studio version.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T453632597"] = "The briefing was recompiled with the current AI Studio version." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T453632597"] = "The briefing was recompiled with the current AI Studio version."
-- Reused
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T48113973"] = "Reused"
-- The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call. -- The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T494870741"] = "The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T494870741"] = "The updated content no longer fits the current presentation. You can continue as a rebuild without another content model call."
@ -2652,9 +2607,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Please provide a briefing name. -- Please provide a briefing name.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Please provide a briefing name." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Please provide a briefing name."
-- Build progress
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T909046610"] = "Build progress"
-- Briefing settings -- Briefing settings
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T937201158"] = "Briefing settings" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T937201158"] = "Briefing settings"
@ -2667,6 +2619,54 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- The media file changed. Transcribe it again with the configured transcription provider? -- The media file changed. Transcribe it again with the configured transcription provider?
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T998394163"] = "The media file changed. Transcribe it again with the configured transcription provider?" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T998394163"] = "The media file changed. Transcribe it again with the configured transcription provider?"
-- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1160324588"] = "Running"
-- Failed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1434043348"] = "Failed"
-- Curate content
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T1458812674"] = "Curate content"
-- Analyze material
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T204596900"] = "Analyze material"
-- Compile and save
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2332777012"] = "Compile and save"
-- Prepare sources
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2838352358"] = "Prepare sources"
-- Action required
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T2870470104"] = "Action required"
-- Resume build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3016389190"] = "Resume build"
-- {0} in progress...
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3291403991"] = "{0} in progress..."
-- Not started
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3531294543"] = "Not started"
-- Plan briefing
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3576809882"] = "Plan briefing"
-- Completed
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T3968379570"] = "Completed"
-- Design presentation
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T4023219825"] = "Design presentation"
-- Canceled
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T4165352378"] = "Canceled"
-- Reused
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T48113973"] = "Reused"
-- Build progress
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGBUILDPROGRESS::T909046610"] = "Build progress"
-- System -- System
UI_TEXT_CONTENT["AISTUDIO::CHAT::CHATROLEEXTENSIONS::T2402387132"] = "System" UI_TEXT_CONTENT["AISTUDIO::CHAT::CHATROLEEXTENSIONS::T2402387132"] = "System"