@cat-factory/app 0.302.2 → 0.303.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/app/app.config.ts +19 -10
- package/app/assets/css/main.css +13 -13
- package/app/assets/css/prose.css +22 -22
- package/app/assets/css/tokens.css +298 -0
- package/app/components/assistant/AssistantModal.vue +22 -22
- package/app/components/auth/AuthGate.vue +1 -1
- package/app/components/auth/BackendMisconfiguredScreen.vue +10 -10
- package/app/components/auth/LoginScreen.vue +34 -36
- package/app/components/auth/ResetPasswordScreen.vue +12 -12
- package/app/components/auth/UserMenu.vue +4 -4
- package/app/components/binaryCandidates/BinaryCandidatesWindow.vue +27 -25
- package/app/components/binaryOutput/BinaryOutputReport.vue +15 -15
- package/app/components/binaryOutput/StoredAssetView.vue +5 -5
- package/app/components/board/AddTaskModal.vue +17 -20
- package/app/components/board/AgentFailureCard.vue +11 -11
- package/app/components/board/AgentFailureHistory.vue +2 -2
- package/app/components/board/BoardCanvas.vue +6 -5
- package/app/components/board/CreateInitiativeModal.vue +8 -10
- package/app/components/board/DependencyConnectOverlay.vue +1 -1
- package/app/components/board/FailureHistoryList.vue +7 -7
- package/app/components/board/RecurringPipelineModal.vue +17 -17
- package/app/components/board/ReviewFrictionDialog.vue +6 -6
- package/app/components/board/StepExecutionHistory.vue +13 -13
- package/app/components/board/TaskDependencyEdges.vue +8 -8
- package/app/components/board/nodes/AgentChip.vue +10 -10
- package/app/components/board/nodes/BlockNode.vue +29 -29
- package/app/components/board/nodes/DecisionBadge.vue +2 -2
- package/app/components/board/nodes/EpicNode.vue +14 -10
- package/app/components/board/nodes/FrameSwimlanes.vue +7 -9
- package/app/components/board/nodes/InitiativeCard.vue +8 -8
- package/app/components/board/nodes/LaneGroup.vue +1 -1
- package/app/components/board/nodes/LaneTask.vue +2 -2
- package/app/components/board/nodes/ResizeGrips.vue +4 -4
- package/app/components/board/nodes/TaskCard.vue +18 -18
- package/app/components/board/nodes/TaskLane.vue +5 -5
- package/app/components/board/nodes/TaskPipelineMini.vue +18 -18
- package/app/components/bootstrap/AdoptionReviewModal.vue +29 -26
- package/app/components/bootstrap/BootstrapModal.vue +21 -23
- package/app/components/bootstrap/BootstrapRunSteps.vue +1 -1
- package/app/components/brainstorm/BrainstormWindow.vue +30 -33
- package/app/components/bugFishing/BugFishingWindow.vue +49 -49
- package/app/components/clarity/ClarityReviewWindow.vue +30 -30
- package/app/components/common/AsyncViewError.vue +5 -5
- package/app/components/common/ClarificationItem.vue +8 -13
- package/app/components/common/ConfirmDialog.vue +4 -2
- package/app/components/common/DescriptorFields.vue +1 -1
- package/app/components/common/EmptyState.vue +3 -3
- package/app/components/common/InterviewGateNotice.vue +7 -7
- package/app/components/common/KeyboardShortcutsHelp.vue +1 -1
- package/app/components/common/MarkdownProse.vue +14 -13
- package/app/components/consensus/ConsensusSessionWindow.vue +26 -26
- package/app/components/context/ContextAttachmentFields.vue +17 -17
- package/app/components/docs/DocInterviewWindow.vue +14 -14
- package/app/components/documents/ContextDocumentPicker.vue +17 -17
- package/app/components/documents/DocumentImportModal.vue +7 -7
- package/app/components/documents/DocumentSourceConnectModal.vue +3 -3
- package/app/components/documents/DocumentSyncState.vue +5 -5
- package/app/components/documents/DocumentTemplatesModal.vue +15 -15
- package/app/components/documents/RepoContextDocPicker.vue +5 -5
- package/app/components/documents/SpawnPreviewModal.vue +12 -12
- package/app/components/documents/StartFromDesignModal.vue +11 -11
- package/app/components/documents/TaskContextDocs.vue +5 -5
- package/app/components/environments/EnvSetupStepper.vue +6 -6
- package/app/components/environments/EnvironmentStatusPanel.vue +17 -17
- package/app/components/environments/steps/EnvPickStep.vue +3 -3
- package/app/components/environments/steps/EnvPreflightStep.vue +9 -9
- package/app/components/environments/steps/EnvReviewStep.vue +25 -22
- package/app/components/environments/steps/EnvSaveStep.vue +7 -5
- package/app/components/environments/steps/JourneyStepNav.vue +1 -1
- package/app/components/focus/BlockFocusView.vue +17 -19
- package/app/components/followUp/FollowUpWindow.vue +23 -23
- package/app/components/forkDecision/ForkDecisionWindow.vue +37 -39
- package/app/components/foundational/FoundationalContractSummary.vue +7 -7
- package/app/components/foundational/FoundationalServiceCatalogList.vue +11 -11
- package/app/components/foundational/FoundationalServiceManager.vue +1 -1
- package/app/components/foundational/FoundationalServiceRegistry.vue +13 -13
- package/app/components/foundational/FoundationalServiceSources.vue +13 -13
- package/app/components/foundational/FoundationalSuppressions.vue +7 -7
- package/app/components/foundational/ServiceCatalogConnection.vue +10 -10
- package/app/components/fragments/FragmentLibraryManager.vue +41 -44
- package/app/components/fragments/FragmentSelector.vue +13 -13
- package/app/components/fragments/GitHubDocUrlImport.vue +1 -1
- package/app/components/gates/GateFailingCheckList.vue +5 -5
- package/app/components/gates/GateResultView.vue +50 -47
- package/app/components/github/AddServiceFromRepoModal.vue +14 -14
- package/app/components/github/BranchProtectionPreflight.vue +13 -13
- package/app/components/github/GitHubConnect.vue +7 -7
- package/app/components/github/GitHubOnboarding.vue +7 -7
- package/app/components/github/GitHubPanel.vue +37 -40
- package/app/components/github/RepoTreeBrowser.vue +18 -18
- package/app/components/humanTest/HumanTestWindow.vue +30 -33
- package/app/components/initiative/InitiativePlanNotice.vue +5 -5
- package/app/components/initiative/InitiativePlanReview.vue +27 -29
- package/app/components/initiative/InitiativePlanningWindow.vue +10 -10
- package/app/components/initiative/InitiativeTrackerWindow.vue +71 -65
- package/app/components/inputGate/InputGateNotice.vue +2 -4
- package/app/components/judge/JudgeResultView.vue +30 -32
- package/app/components/kaizen/KaizenPanel.vue +40 -36
- package/app/components/kaizen/KaizenStepStatus.vue +21 -21
- package/app/components/layout/AccountAuditLog.vue +10 -10
- package/app/components/layout/AccountDeploymentSettings.vue +20 -20
- package/app/components/layout/AccountFailureKindRules.vue +13 -13
- package/app/components/layout/AccountFoundationalSettings.vue +1 -1
- package/app/components/layout/AccountFragmentSettings.vue +1 -1
- package/app/components/layout/AccountModelPolicySettings.vue +9 -9
- package/app/components/layout/AccountPlatformAlertSettings.vue +11 -11
- package/app/components/layout/AccountRiskPolicySettings.vue +2 -2
- package/app/components/layout/AccountRunCredentialSettings.vue +5 -5
- package/app/components/layout/AccountSkillSettings.vue +1 -1
- package/app/components/layout/AccountTeamSettings.vue +23 -15
- package/app/components/layout/AiProvidersBanner.vue +11 -8
- package/app/components/layout/AppearanceSwitcher.vue +108 -0
- package/app/components/layout/BoardSwitcher.vue +8 -11
- package/app/components/layout/BoardToolbar.vue +3 -3
- package/app/components/layout/CommandBar.vue +7 -9
- package/app/components/layout/ConnectionStatusBanner.vue +2 -2
- package/app/components/layout/DefaultTestEnvBanner.vue +5 -5
- package/app/components/layout/GitHubPatBanner.vue +5 -5
- package/app/components/layout/GitHubPatPermissionsBanner.vue +16 -10
- package/app/components/layout/InfraSetupBanner.vue +6 -6
- package/app/components/layout/IntegrationsHub.vue +15 -15
- package/app/components/layout/LanguageSwitcher.vue +5 -5
- package/app/components/layout/ModelProvidersHub.vue +13 -16
- package/app/components/layout/NotificationsInbox.vue +10 -10
- package/app/components/layout/PersonalSetupModal.vue +8 -8
- package/app/components/layout/ProviderConfigBanner.vue +4 -4
- package/app/components/layout/RolePrompt.vue +7 -7
- package/app/components/layout/SideBar.vue +6 -4
- package/app/components/layout/SpendWarningBanner.vue +17 -14
- package/app/components/layout/TranslationWarningBanner.vue +4 -4
- package/app/components/layout/UiModeSwitcher.vue +13 -13
- package/app/components/layout/UiRoleSwitcher.vue +8 -8
- package/app/components/layout/WorkspaceMembersSettings.vue +15 -11
- package/app/components/media/ArtifactLightbox.vue +13 -13
- package/app/components/media/ImageCompare.vue +31 -24
- package/app/components/merge/MergeEffortChips.vue +2 -2
- package/app/components/notifications/NotificationSettingsPanel.vue +14 -12
- package/app/components/observability/OutcomeFilterChips.vue +6 -6
- package/app/components/observability/RunFailureSummary.vue +28 -25
- package/app/components/observability/StepMetricsBar.vue +26 -28
- package/app/components/observability/StepModelActivity.vue +2 -2
- package/app/components/observability/ToolCallList.vue +24 -24
- package/app/components/outcome/OutcomeSummaryWindow.vue +47 -47
- package/app/components/palettes/AgentPalette.vue +8 -8
- package/app/components/palettes/AgentTierSelect.vue +1 -1
- package/app/components/palettes/PipelinePurposeSelect.vue +1 -1
- package/app/components/panels/AgentStepDetail.vue +52 -51
- package/app/components/panels/AttemptEntryHeader.vue +4 -6
- package/app/components/panels/DecisionModal.vue +7 -7
- package/app/components/panels/GenericStructuredResultView.vue +7 -7
- package/app/components/panels/InspectorPanel.vue +17 -17
- package/app/components/panels/MergerResultView.vue +19 -19
- package/app/components/panels/ObservabilityPanel.vue +115 -123
- package/app/components/panels/OperatorDashboardPanel.vue +89 -97
- package/app/components/panels/ReportsPanel.vue +69 -66
- package/app/components/panels/ReportsSpendBreakdown.vue +9 -9
- package/app/components/panels/ResultWindowShell.vue +38 -38
- package/app/components/panels/RunDetailLoadState.vue +2 -2
- package/app/components/panels/StepContainerStatus.vue +9 -9
- package/app/components/panels/StepDelegatedStatus.logic.spec.ts +135 -0
- package/app/components/panels/StepDelegatedStatus.logic.ts +160 -0
- package/app/components/panels/StepDelegatedStatus.vue +181 -0
- package/app/components/panels/StepEffortReport.vue +16 -15
- package/app/components/panels/StepFragmentAdherence.vue +14 -10
- package/app/components/panels/StepMetadataCard.vue +74 -45
- package/app/components/panels/StepReproductionReport.vue +25 -21
- package/app/components/panels/StepRunMeta.vue +20 -20
- package/app/components/panels/StepTestReport.logic.spec.ts +8 -3
- package/app/components/panels/StepTestReport.logic.ts +4 -4
- package/app/components/panels/StepTestReport.vue +28 -28
- package/app/components/panels/StepToolServers.vue +14 -11
- package/app/components/panels/StepValidationReport.vue +7 -7
- package/app/components/panels/inspector/ContainerSummary.vue +9 -9
- package/app/components/panels/inspector/DocReferenceRepos.vue +3 -3
- package/app/components/panels/inspector/EnvProbeReport.vue +24 -27
- package/app/components/panels/inspector/EpicChildren.vue +8 -12
- package/app/components/panels/inspector/FrontendBindingsResolved.vue +11 -11
- package/app/components/panels/inspector/FrontendConfig.vue +37 -41
- package/app/components/panels/inspector/InitiativeInspector.vue +3 -3
- package/app/components/panels/inspector/InspectorSection.vue +6 -6
- package/app/components/panels/inspector/RecurringScheduleSettings.vue +16 -19
- package/app/components/panels/inspector/ServiceConnections.vue +2 -2
- package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -2
- package/app/components/panels/inspector/ServiceSelfTests.vue +21 -17
- package/app/components/panels/inspector/ServiceTestConfig.vue +51 -59
- package/app/components/panels/inspector/ServiceTestSecrets.vue +5 -5
- package/app/components/panels/inspector/ServiceTestingContext.vue +3 -3
- package/app/components/panels/inspector/ServiceValidationConfig.vue +2 -2
- package/app/components/panels/inspector/TaskAgentConfig.vue +3 -3
- package/app/components/panels/inspector/TaskAprioriBranches.vue +8 -5
- package/app/components/panels/inspector/TaskDependencies.vue +1 -1
- package/app/components/panels/inspector/TaskEstimateBadge.vue +11 -11
- package/app/components/panels/inspector/TaskExecution.vue +17 -17
- package/app/components/panels/inspector/TaskReviewTarget.vue +2 -2
- package/app/components/panels/inspector/TaskRunSettings.vue +35 -37
- package/app/components/panels/inspector/TaskStructure.vue +3 -3
- package/app/components/pipeline/AgentKindIcon.vue +1 -1
- package/app/components/pipeline/AgentPromptEditor.vue +17 -17
- package/app/components/pipeline/BinaryOutputStepPicker.vue +42 -56
- package/app/components/pipeline/EstimateThresholdFields.vue +4 -4
- package/app/components/pipeline/GateConfigFields.vue +13 -10
- package/app/components/pipeline/IterationCapPrompt.vue +4 -2
- package/app/components/pipeline/PipelineBuilder.vue +47 -55
- package/app/components/pipeline/PipelineHealthModal.vue +27 -29
- package/app/components/pipeline/PipelinePicker.vue +10 -10
- package/app/components/pipeline/PipelinePreview.vue +10 -10
- package/app/components/pipeline/PipelineProgress.vue +64 -67
- package/app/components/prReview/PrReviewPhaseBadge.vue +7 -7
- package/app/components/prReview/PrReviewWindow.vue +75 -77
- package/app/components/providers/AiPresetMismatchDialog.vue +5 -5
- package/app/components/providers/AiProviderOnboardingModal.vue +9 -9
- package/app/components/providers/ApiKeysSection.vue +13 -13
- package/app/components/providers/PersonalCredentialModal.vue +2 -2
- package/app/components/providers/PersonalSubscriptionSection.vue +10 -10
- package/app/components/providers/SignInRequiredNotice.vue +1 -1
- package/app/components/providers/VendorCredentialsModal.vue +10 -10
- package/app/components/provisioning/ProvisioningLogsDrawer.vue +13 -13
- package/app/components/ralph/RalphLoopResultView.vue +28 -30
- package/app/components/recurring/RecurrenceEditor.vue +2 -2
- package/app/components/requirements/RequirementsReviewWindow.vue +51 -58
- package/app/components/riskPolicy/RiskPolicyPicker.vue +12 -15
- package/app/components/riskPolicy/RiskPolicyPreview.vue +14 -14
- package/app/components/sandbox/SandboxPanel.vue +58 -59
- package/app/components/settings/AccountSettingsPanel.vue +1 -1
- package/app/components/settings/ApiTokensPanel.vue +10 -10
- package/app/components/settings/BudgetSettings.vue +18 -22
- package/app/components/settings/CapabilityCredentialsPanel.vue +15 -15
- package/app/components/settings/CloudflareHandlerSection.vue +20 -20
- package/app/components/settings/ComposeEnvironmentSetupSection.vue +13 -13
- package/app/components/settings/ConnectionTestVerdict.vue +3 -3
- package/app/components/settings/ConnectionWarnings.vue +1 -1
- package/app/components/settings/ConsensusGroupsSection.vue +27 -35
- package/app/components/settings/CustomManifestTypeEditor.vue +10 -10
- package/app/components/settings/DefaultProvisionTypeSection.vue +6 -6
- package/app/components/settings/InfraHandlersConfigurator.vue +24 -22
- package/app/components/settings/InfrastructureBackendPicker.vue +6 -6
- package/app/components/settings/InfrastructureWindow.vue +5 -5
- package/app/components/settings/IssueTrackerPanel.vue +29 -23
- package/app/components/settings/KubernetesEngineForm.vue +11 -11
- package/app/components/settings/KubernetesEnvironmentForm.vue +4 -4
- package/app/components/settings/LocalContainerPoolSettings.vue +6 -11
- package/app/components/settings/LocalModelEndpointsPanel.vue +20 -18
- package/app/components/settings/McpAuthorizeScreen.vue +13 -15
- package/app/components/settings/McpOAuthCallbackScreen.vue +16 -10
- package/app/components/settings/MergeClassRulesEditor.vue +6 -9
- package/app/components/settings/MergeRolePolicyEditor.vue +16 -16
- package/app/components/settings/ModelConfigurationPanel.vue +23 -30
- package/app/components/settings/ModelPresetHealthModal.vue +15 -13
- package/app/components/settings/ObservabilityConnectionPanel.vue +4 -4
- package/app/components/settings/OpenRouterCatalogPanel.vue +23 -19
- package/app/components/settings/PackageRegistriesPanel.vue +8 -8
- package/app/components/settings/ProviderConnectionTab.vue +8 -11
- package/app/components/settings/ProviderManifestEditor.vue +9 -9
- package/app/components/settings/ProviderPreferenceEditor.vue +8 -8
- package/app/components/settings/RiskPolicyCreateForm.vue +10 -10
- package/app/components/settings/RiskPolicyEditorRow.vue +14 -14
- package/app/components/settings/RiskPolicyHealthModal.vue +15 -13
- package/app/components/settings/RiskPolicyInheritedRow.vue +1 -1
- package/app/components/settings/RiskPolicyPanel.vue +10 -15
- package/app/components/settings/ServiceFragmentDefaultsPanel.vue +7 -7
- package/app/components/settings/SharedStacksPanel.vue +9 -12
- package/app/components/settings/TaskSourceCard.vue +4 -4
- package/app/components/settings/TaskTypeSuppressionsPanel.vue +6 -6
- package/app/components/settings/ToolServerChecklist.vue +36 -29
- package/app/components/settings/UsageSettings.vue +15 -15
- package/app/components/settings/UserSecretsSection.vue +9 -12
- package/app/components/settings/WorkspaceMetadataSettings.vue +5 -5
- package/app/components/settings/WorkspaceSettingsPanel.vue +47 -47
- package/app/components/skills/ReviewSkillQueue.vue +10 -10
- package/app/components/skills/SkillLibraryManager.vue +23 -20
- package/app/components/slack/SlackPanel.vue +13 -17
- package/app/components/spec/ServiceSpecWindow.vue +45 -42
- package/app/components/tasks/BugHuntModal.vue +24 -27
- package/app/components/tasks/ContextIssuePicker.vue +11 -11
- package/app/components/tasks/TaskContextIssues.vue +3 -3
- package/app/components/tasks/TaskImportModal.vue +7 -7
- package/app/components/tasks/TaskSourceConnectModal.vue +10 -8
- package/app/components/testing/TestReportWindow.vue +99 -82
- package/app/components/theme/ThemeImportModal.vue +115 -0
- package/app/components/tutorial/TutorialCatalogue.vue +9 -9
- package/app/components/tutorial/TutorialNudge.vue +5 -5
- package/app/components/tutorial/TutorialOverlay.vue +12 -12
- package/app/components/tutorial/TutorialPrompt.vue +6 -9
- package/app/components/vcs/GitLabConnect.vue +4 -4
- package/app/components/vcs/VcsConnectSurfaces.vue +2 -2
- package/app/components/visualConfirm/VisualConfirmationWindow.vue +36 -36
- package/app/composables/api/client.ts +6 -1
- package/app/composables/usePipelineErrorToast.ts +17 -0
- package/app/modular/agent-kinds.ts +24 -0
- package/app/pages/index.vue +5 -5
- package/app/plugins/theme.client.ts +125 -0
- package/app/spa-loading-template.html +52 -14
- package/app/stores/agents.ts +1 -1
- package/app/stores/theme.spec.ts +56 -0
- package/app/stores/theme.ts +87 -0
- package/app/types/domain.ts +19 -0
- package/app/types/execution.ts +4 -0
- package/app/utils/agentOutput.ts +1 -1
- package/app/utils/binaryOutput.ts +6 -6
- package/app/utils/bootstrapSteps.ts +14 -14
- package/app/utils/catalog.ts +87 -83
- package/app/utils/colorTint.ts +10 -0
- package/app/utils/failureKinds.ts +1 -0
- package/app/utils/observability.ts +3 -3
- package/app/utils/pipelineRender.ts +13 -17
- package/app/utils/swimlanes.ts +4 -4
- package/app/utils/theme/bootPalette.spec.ts +54 -0
- package/app/utils/theme/bootPalette.ts +108 -0
- package/app/utils/theme/builtins.spec.ts +38 -0
- package/app/utils/theme/builtins.ts +55 -0
- package/app/utils/theme/css.ts +162 -0
- package/app/utils/theme/doc.ts +353 -0
- package/app/utils/theme/link.ts +93 -0
- package/app/utils/theme/presets.ts +509 -0
- package/app/utils/theme/theme.spec.ts +224 -0
- package/i18n/locales/de.json +61 -4
- package/i18n/locales/en.json +70 -4
- package/i18n/locales/es.json +61 -4
- package/i18n/locales/fr.json +61 -4
- package/i18n/locales/he.json +61 -4
- package/i18n/locales/it.json +61 -4
- package/i18n/locales/ja.json +61 -4
- package/i18n/locales/pl.json +61 -4
- package/i18n/locales/tr.json +61 -4
- package/i18n/locales/uk.json +61 -4
- package/nuxt.config.ts +37 -11
- package/package.json +9 -8
|
@@ -391,7 +391,7 @@ async function copyOutput() {
|
|
|
391
391
|
v-if="open && step && agent"
|
|
392
392
|
data-testid="step-detail"
|
|
393
393
|
:data-agent-kind="step?.agentKind"
|
|
394
|
-
class="fixed inset-0 z-50 flex max-h-[100dvh] bg-
|
|
394
|
+
class="fixed inset-0 z-50 flex max-h-[100dvh] bg-app-950/96 backdrop-blur-sm"
|
|
395
395
|
role="dialog"
|
|
396
396
|
aria-modal="true"
|
|
397
397
|
>
|
|
@@ -399,10 +399,10 @@ async function copyOutput() {
|
|
|
399
399
|
<aside
|
|
400
400
|
v-if="outline.hasToc"
|
|
401
401
|
data-testid="step-detail-toc"
|
|
402
|
-
class="hidden w-72 shrink-0 flex-col border-e border-
|
|
402
|
+
class="hidden w-72 shrink-0 flex-col border-e border-default bg-default/60 md:flex"
|
|
403
403
|
>
|
|
404
|
-
<div class="border-b border-
|
|
405
|
-
<div class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
404
|
+
<div class="border-b border-default px-4 py-3">
|
|
405
|
+
<div class="text-[11px] font-semibold uppercase tracking-wide text-dimmed">
|
|
406
406
|
{{ t('panels.stepDetail.contents') }}
|
|
407
407
|
</div>
|
|
408
408
|
</div>
|
|
@@ -411,8 +411,8 @@ async function copyOutput() {
|
|
|
411
411
|
class="block w-full truncate rounded-md px-2 py-1 text-start text-[13px] transition"
|
|
412
412
|
:class="
|
|
413
413
|
activeId === 'step-details'
|
|
414
|
-
? 'bg-
|
|
415
|
-
: 'text-
|
|
414
|
+
? 'bg-primary/15 font-medium text-primary'
|
|
415
|
+
: 'text-muted hover:bg-elevated/60 hover:text-default'
|
|
416
416
|
"
|
|
417
417
|
@click="goTo('step-details')"
|
|
418
418
|
>
|
|
@@ -424,8 +424,8 @@ async function copyOutput() {
|
|
|
424
424
|
class="block w-full truncate rounded-md px-2 py-1 text-start text-[13px] transition"
|
|
425
425
|
:class="
|
|
426
426
|
activeId === s.id
|
|
427
|
-
? 'bg-
|
|
428
|
-
: 'text-
|
|
427
|
+
? 'bg-primary/15 font-medium text-primary'
|
|
428
|
+
: 'text-muted hover:bg-elevated/60 hover:text-default'
|
|
429
429
|
"
|
|
430
430
|
:style="{ paddingLeft: `${(s.depth - outline.minDepth) * 0.85 + 0.5}rem` }"
|
|
431
431
|
:title="s.title"
|
|
@@ -438,16 +438,16 @@ async function copyOutput() {
|
|
|
438
438
|
|
|
439
439
|
<!-- main column -->
|
|
440
440
|
<div class="flex min-w-0 flex-1 flex-col">
|
|
441
|
-
<header class="flex items-center gap-3 border-b border-
|
|
441
|
+
<header class="flex items-center gap-3 border-b border-default px-6 py-4">
|
|
442
442
|
<div
|
|
443
443
|
class="flex h-9 w-9 shrink-0 items-center justify-center rounded-lg"
|
|
444
|
-
:style="{ backgroundColor: agent.color
|
|
444
|
+
:style="{ backgroundColor: tint(agent.color) }"
|
|
445
445
|
>
|
|
446
446
|
<UIcon :name="agent.icon" class="h-5 w-5" :style="{ color: agent.color }" />
|
|
447
447
|
</div>
|
|
448
448
|
<div class="min-w-0">
|
|
449
|
-
<h1 class="truncate text-base font-semibold text-
|
|
450
|
-
<p v-if="block" class="truncate text-xs text-
|
|
449
|
+
<h1 class="truncate text-base font-semibold text-highlighted">{{ agent.label }}</h1>
|
|
450
|
+
<p v-if="block" class="truncate text-xs text-dimmed">{{ block.title }}</p>
|
|
451
451
|
</div>
|
|
452
452
|
<div class="ms-auto flex items-center gap-1.5">
|
|
453
453
|
<UBadge
|
|
@@ -519,7 +519,7 @@ async function copyOutput() {
|
|
|
519
519
|
<section
|
|
520
520
|
id="step-details"
|
|
521
521
|
:ref="(el) => (sectionEls['step-details'] = el as HTMLElement | null)"
|
|
522
|
-
class="scroll-mt-4 rounded-xl border border-
|
|
522
|
+
class="scroll-mt-4 rounded-xl border border-default bg-default/50 p-4"
|
|
523
523
|
>
|
|
524
524
|
<StepMetadataCard
|
|
525
525
|
:step="step"
|
|
@@ -599,11 +599,11 @@ async function copyOutput() {
|
|
|
599
599
|
|
|
600
600
|
<div
|
|
601
601
|
v-if="parkPresentation"
|
|
602
|
-
class="rounded-xl border border-
|
|
602
|
+
class="rounded-xl border border-app-warning-500/30 bg-app-warning-500/5 p-4"
|
|
603
603
|
data-testid="dedicated-park-redirect"
|
|
604
604
|
:data-park="dedicatedPark"
|
|
605
605
|
>
|
|
606
|
-
<p class="text-[13px] leading-relaxed text-
|
|
606
|
+
<p class="text-[13px] leading-relaxed text-app-warning-200/90">
|
|
607
607
|
{{ t(parkPresentation.noticeKey) }}
|
|
608
608
|
</p>
|
|
609
609
|
<UButton
|
|
@@ -640,7 +640,7 @@ async function copyOutput() {
|
|
|
640
640
|
<li
|
|
641
641
|
v-for="(note, i) in runNotes"
|
|
642
642
|
:key="i"
|
|
643
|
-
class="flex items-start gap-1.5 text-[11px] leading-snug text-
|
|
643
|
+
class="flex items-start gap-1.5 text-[11px] leading-snug text-app-warning-300/80"
|
|
644
644
|
>
|
|
645
645
|
<UIcon name="i-lucide-info" class="mt-0.5 h-3.5 w-3.5 shrink-0" />
|
|
646
646
|
<span>{{ note }}</span>
|
|
@@ -755,7 +755,7 @@ async function copyOutput() {
|
|
|
755
755
|
<!-- edit-then-approve: a direct editor over the raw conclusions; the
|
|
756
756
|
edits become the approved proposal that flows to the next step -->
|
|
757
757
|
<section v-if="editing" class="scroll-mt-4">
|
|
758
|
-
<div class="mb-2 flex items-center gap-1.5 text-[11px] text-
|
|
758
|
+
<div class="mb-2 flex items-center gap-1.5 text-[11px] text-app-warning-400">
|
|
759
759
|
<UIcon name="i-lucide-pencil" class="h-3.5 w-3.5" />
|
|
760
760
|
<span class="font-semibold uppercase tracking-wide">{{
|
|
761
761
|
t('panels.stepDetail.editingConclusions')
|
|
@@ -783,16 +783,16 @@ async function copyOutput() {
|
|
|
783
783
|
>
|
|
784
784
|
<button
|
|
785
785
|
v-if="s.depth > 0"
|
|
786
|
-
class="group flex w-full items-center gap-2 rounded-md py-1 text-start transition hover:text-
|
|
786
|
+
class="group flex w-full items-center gap-2 rounded-md py-1 text-start transition hover:text-highlighted"
|
|
787
787
|
@click="toggle(s.id)"
|
|
788
788
|
>
|
|
789
789
|
<UIcon
|
|
790
790
|
name="i-lucide-chevron-right"
|
|
791
|
-
class="h-4 w-4 shrink-0 text-
|
|
791
|
+
class="h-4 w-4 shrink-0 text-dimmed transition-transform group-hover:text-toned"
|
|
792
792
|
:class="collapsed[s.id] ? '' : 'rotate-90'"
|
|
793
793
|
/>
|
|
794
794
|
<span
|
|
795
|
-
class="font-semibold text-
|
|
795
|
+
class="font-semibold text-app-100"
|
|
796
796
|
:class="s.depth <= 1 ? 'text-lg' : s.depth === 2 ? 'text-base' : 'text-sm'"
|
|
797
797
|
v-html="s.titleHtml"
|
|
798
798
|
/>
|
|
@@ -800,7 +800,7 @@ async function copyOutput() {
|
|
|
800
800
|
<!-- eslint-disable-next-line vue/no-v-html -->
|
|
801
801
|
<div
|
|
802
802
|
v-show="!collapsed[s.id]"
|
|
803
|
-
class="reader-prose mt-1 text-[13px] leading-relaxed text-
|
|
803
|
+
class="reader-prose mt-1 text-[13px] leading-relaxed text-toned"
|
|
804
804
|
:class="[
|
|
805
805
|
s.depth > 0 ? 'ps-6' : '',
|
|
806
806
|
genericApprovalPending && !editing ? 'review-mode' : '',
|
|
@@ -813,7 +813,7 @@ async function copyOutput() {
|
|
|
813
813
|
|
|
814
814
|
<p
|
|
815
815
|
v-else
|
|
816
|
-
class="rounded-lg border border-dashed border-
|
|
816
|
+
class="rounded-lg border border-dashed border-default py-6 text-center text-sm text-dimmed"
|
|
817
817
|
>
|
|
818
818
|
{{ t('panels.stepDetail.noProseOutput') }}
|
|
819
819
|
</p>
|
|
@@ -826,24 +826,28 @@ async function copyOutput() {
|
|
|
826
826
|
bottom sheet (still reachable) below lg, so the gate is always actionable. -->
|
|
827
827
|
<aside
|
|
828
828
|
v-if="genericApprovalPending"
|
|
829
|
-
class="absolute inset-x-0 bottom-0 z-10 flex max-h-[70dvh] flex-col rounded-t-2xl border-t border-
|
|
829
|
+
class="absolute inset-x-0 bottom-0 z-10 flex max-h-[70dvh] flex-col rounded-t-2xl border-t border-muted bg-default/95 shadow-2xl backdrop-blur lg:static lg:inset-auto lg:z-auto lg:max-h-none lg:w-96 lg:shrink-0 lg:rounded-none lg:border-s lg:border-t-0 lg:border-default lg:bg-default/60 lg:shadow-none lg:backdrop-blur-none"
|
|
830
830
|
>
|
|
831
|
-
<div class="border-b border-
|
|
832
|
-
<div class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
831
|
+
<div class="border-b border-default px-4 py-3">
|
|
832
|
+
<div class="text-[11px] font-semibold uppercase tracking-wide text-app-warning-400">
|
|
833
833
|
{{
|
|
834
834
|
editing
|
|
835
835
|
? t('panels.stepDetail.approveWithCorrections')
|
|
836
836
|
: t('panels.stepDetail.reviewAndApprove')
|
|
837
837
|
}}
|
|
838
838
|
</div>
|
|
839
|
-
<p class="mt-1 text-[12px] text-
|
|
839
|
+
<p class="mt-1 text-[12px] text-muted">
|
|
840
840
|
{{ editing ? t('panels.stepDetail.editHint') : t('panels.stepDetail.reviewHint') }}
|
|
841
841
|
</p>
|
|
842
842
|
<!-- The gate's configured POLICY, when it has one. Both lines exist because an
|
|
843
843
|
approve on such a gate legitimately may not advance the run: without the tally, a
|
|
844
844
|
correctly-recorded approval is indistinguishable from a call that failed, and
|
|
845
845
|
without the refusal a person would press a button the server answers 403. -->
|
|
846
|
-
<p
|
|
846
|
+
<p
|
|
847
|
+
v-if="gateQuorum"
|
|
848
|
+
class="mt-1 text-[12px] text-app-warning-300/90"
|
|
849
|
+
data-testid="gate-quorum"
|
|
850
|
+
>
|
|
847
851
|
{{
|
|
848
852
|
t('panels.stepDetail.quorumProgress', {
|
|
849
853
|
recorded: gateQuorum.recorded,
|
|
@@ -852,11 +856,7 @@ async function copyOutput() {
|
|
|
852
856
|
}}
|
|
853
857
|
<span v-if="viewerHasApproved">{{ t('panels.stepDetail.quorumYours') }}</span>
|
|
854
858
|
</p>
|
|
855
|
-
<p
|
|
856
|
-
v-if="gateRefusal"
|
|
857
|
-
class="mt-1 text-[12px] text-slate-400"
|
|
858
|
-
data-testid="gate-not-approver"
|
|
859
|
-
>
|
|
859
|
+
<p v-if="gateRefusal" class="mt-1 text-[12px] text-muted" data-testid="gate-not-approver">
|
|
860
860
|
{{ t(GATE_REFUSAL_KEYS[gateRefusal]) }}
|
|
861
861
|
</p>
|
|
862
862
|
</div>
|
|
@@ -864,7 +864,7 @@ async function copyOutput() {
|
|
|
864
864
|
<div class="flex-1 space-y-3 overflow-auto overscroll-contain px-4 py-3">
|
|
865
865
|
<p
|
|
866
866
|
v-if="editing"
|
|
867
|
-
class="rounded-lg border border-
|
|
867
|
+
class="rounded-lg border border-app-warning-500/30 bg-app-warning-500/5 p-3 text-[12px] leading-relaxed text-app-warning-200/90"
|
|
868
868
|
>
|
|
869
869
|
{{ t('panels.stepDetail.editingNotice') }}
|
|
870
870
|
</p>
|
|
@@ -873,13 +873,13 @@ async function copyOutput() {
|
|
|
873
873
|
<div
|
|
874
874
|
v-if="draftTarget"
|
|
875
875
|
data-testid="step-review-composer"
|
|
876
|
-
class="rounded-lg border border-
|
|
876
|
+
class="rounded-lg border border-primary/40 bg-primary/5 p-3"
|
|
877
877
|
>
|
|
878
|
-
<div class="mb-1 text-[10px] uppercase tracking-wide text-
|
|
878
|
+
<div class="mb-1 text-[10px] uppercase tracking-wide text-primary">
|
|
879
879
|
{{ t('panels.stepDetail.commentingOn') }}
|
|
880
880
|
</div>
|
|
881
881
|
<pre
|
|
882
|
-
class="mb-2 max-h-24 overflow-auto whitespace-pre-wrap rounded bg-
|
|
882
|
+
class="mb-2 max-h-24 overflow-auto whitespace-pre-wrap rounded bg-app-950/60 p-2 text-[11px] text-toned"
|
|
883
883
|
>{{ draftTarget.quotedSource }}</pre>
|
|
884
884
|
<UTextarea
|
|
885
885
|
v-model="draftBody"
|
|
@@ -911,14 +911,14 @@ async function copyOutput() {
|
|
|
911
911
|
v-for="(c, idx) in reviewComments"
|
|
912
912
|
:key="idx"
|
|
913
913
|
data-testid="step-review-comment"
|
|
914
|
-
class="rounded-lg border border-
|
|
914
|
+
class="rounded-lg border border-default bg-default/50 p-3"
|
|
915
915
|
>
|
|
916
916
|
<div class="mb-1 flex items-start justify-between gap-2">
|
|
917
|
-
<div class="text-[10px] uppercase tracking-wide text-
|
|
917
|
+
<div class="text-[10px] uppercase tracking-wide text-dimmed">
|
|
918
918
|
{{ t('panels.stepDetail.commentN', { number: idx + 1 }) }}
|
|
919
919
|
</div>
|
|
920
920
|
<button
|
|
921
|
-
class="text-
|
|
921
|
+
class="text-dimmed transition hover:text-app-error-400"
|
|
922
922
|
:title="t('panels.stepDetail.removeComment')"
|
|
923
923
|
@click="removeComment(idx)"
|
|
924
924
|
>
|
|
@@ -926,15 +926,13 @@ async function copyOutput() {
|
|
|
926
926
|
</button>
|
|
927
927
|
</div>
|
|
928
928
|
<pre
|
|
929
|
-
class="mb-1 max-h-20 overflow-auto whitespace-pre-wrap rounded bg-
|
|
929
|
+
class="mb-1 max-h-20 overflow-auto whitespace-pre-wrap rounded bg-app-950/50 p-1.5 text-[10px] text-muted"
|
|
930
930
|
>{{ c.quotedSource }}</pre>
|
|
931
|
-
<p class="text-[12px] text-
|
|
931
|
+
<p class="text-[12px] text-default">{{ c.body }}</p>
|
|
932
932
|
</div>
|
|
933
933
|
|
|
934
934
|
<div>
|
|
935
|
-
<label
|
|
936
|
-
class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-slate-400"
|
|
937
|
-
>
|
|
935
|
+
<label class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
938
936
|
{{ t('panels.stepDetail.overallFeedback') }}
|
|
939
937
|
</label>
|
|
940
938
|
<UTextarea
|
|
@@ -953,7 +951,7 @@ async function copyOutput() {
|
|
|
953
951
|
<!-- edit-then-approve actions -->
|
|
954
952
|
<div
|
|
955
953
|
v-if="editing"
|
|
956
|
-
class="space-y-2 border-t border-
|
|
954
|
+
class="space-y-2 border-t border-default px-4 pt-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]"
|
|
957
955
|
>
|
|
958
956
|
<UButton
|
|
959
957
|
color="primary"
|
|
@@ -979,7 +977,7 @@ async function copyOutput() {
|
|
|
979
977
|
|
|
980
978
|
<div
|
|
981
979
|
v-else
|
|
982
|
-
class="space-y-2 border-t border-
|
|
980
|
+
class="space-y-2 border-t border-default px-4 pt-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]"
|
|
983
981
|
>
|
|
984
982
|
<UButton
|
|
985
983
|
color="primary"
|
|
@@ -1007,20 +1005,23 @@ async function copyOutput() {
|
|
|
1007
1005
|
</UButton>
|
|
1008
1006
|
<p
|
|
1009
1007
|
v-else-if="!proposalEditable"
|
|
1010
|
-
class="text-[10px] text-
|
|
1008
|
+
class="text-[10px] text-dimmed"
|
|
1011
1009
|
data-testid="step-rendered-output-note"
|
|
1012
1010
|
>
|
|
1013
1011
|
{{ t('panels.stepDetail.renderedOutputNote') }}
|
|
1014
1012
|
</p>
|
|
1015
1013
|
<!-- Withheld only until the quorum is one approval away, so it says so rather than
|
|
1016
1014
|
leaving a reviewer to wonder where the affordance went. -->
|
|
1017
|
-
<p v-else class="text-[10px] text-
|
|
1015
|
+
<p v-else class="text-[10px] text-dimmed" data-testid="step-quorum-edit-locked">
|
|
1018
1016
|
{{ t('panels.stepDetail.quorumEditLocked') }}
|
|
1019
1017
|
</p>
|
|
1020
1018
|
|
|
1021
1019
|
<!-- destructive: a two-step inline confirm instead of a native dialog -->
|
|
1022
|
-
<div
|
|
1023
|
-
|
|
1020
|
+
<div
|
|
1021
|
+
v-if="rejectArmed"
|
|
1022
|
+
class="rounded-lg border border-app-error-500/40 bg-app-error-500/5 p-2.5"
|
|
1023
|
+
>
|
|
1024
|
+
<p class="mb-2 text-[11px] text-app-error-200">
|
|
1024
1025
|
{{ t('panels.stepDetail.rejectConfirmPrompt') }}
|
|
1025
1026
|
</p>
|
|
1026
1027
|
<div class="flex gap-2">
|
|
@@ -1072,7 +1073,7 @@ async function copyOutput() {
|
|
|
1072
1073
|
{{ t('panels.stepDetail.reject') }}
|
|
1073
1074
|
</UButton>
|
|
1074
1075
|
</div>
|
|
1075
|
-
<p class="text-[10px] text-
|
|
1076
|
+
<p class="text-[10px] text-dimmed">
|
|
1076
1077
|
{{ t('panels.stepDetail.requestChangesHint') }}
|
|
1077
1078
|
</p>
|
|
1078
1079
|
</div>
|
|
@@ -23,14 +23,12 @@ function formatClock(ms: number | null | undefined, fmt: 'short' | 'long'): stri
|
|
|
23
23
|
<template>
|
|
24
24
|
<div class="flex items-center gap-2">
|
|
25
25
|
<UIcon v-if="icon" :name="icon" class="h-3.5 w-3.5 shrink-0" :class="iconClass" />
|
|
26
|
-
<span class="text-[13px] font-medium text-
|
|
26
|
+
<span class="text-[13px] font-medium text-default">{{ label }}</span>
|
|
27
27
|
<UBadge :color="outcome === 'failed' ? 'error' : 'neutral'" variant="subtle" size="sm">{{
|
|
28
28
|
outcomeLabel
|
|
29
29
|
}}</UBadge>
|
|
30
|
-
<span
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
>{{ formatClock(at, dateFormat ?? 'short') }}</span
|
|
34
|
-
>
|
|
30
|
+
<span v-if="formatClock(at, dateFormat ?? 'short')" class="ms-auto text-[11px] text-dimmed">{{
|
|
31
|
+
formatClock(at, dateFormat ?? 'short')
|
|
32
|
+
}}</span>
|
|
35
33
|
</div>
|
|
36
34
|
</template>
|
|
@@ -55,27 +55,27 @@ async function choose(option: string) {
|
|
|
55
55
|
<UModal v-model:open="open" :title="t('panels.decision.title')">
|
|
56
56
|
<template #body>
|
|
57
57
|
<div v-if="decision && agent" class="space-y-4" data-testid="decision-modal">
|
|
58
|
-
<div class="flex items-center gap-2 text-sm text-
|
|
58
|
+
<div class="flex items-center gap-2 text-sm text-muted">
|
|
59
59
|
<div
|
|
60
60
|
class="flex h-8 w-8 items-center justify-center rounded-lg"
|
|
61
|
-
:style="{ backgroundColor: agent.color
|
|
61
|
+
:style="{ backgroundColor: tint(agent.color) }"
|
|
62
62
|
>
|
|
63
63
|
<UIcon :name="agent.icon" class="h-4 w-4" :style="{ color: agent.color }" />
|
|
64
64
|
</div>
|
|
65
65
|
<div>
|
|
66
66
|
<i18n-t v-if="block" keypath="panels.decision.agentOnBlock" tag="span" scope="global">
|
|
67
67
|
<template #agent>
|
|
68
|
-
<span class="font-medium text-
|
|
68
|
+
<span class="font-medium text-default">{{ agent.label }}</span>
|
|
69
69
|
</template>
|
|
70
70
|
<template #block>
|
|
71
|
-
<span class="font-medium text-
|
|
71
|
+
<span class="font-medium text-default">{{ block.title }}</span>
|
|
72
72
|
</template>
|
|
73
73
|
</i18n-t>
|
|
74
|
-
<span v-else class="font-medium text-
|
|
74
|
+
<span v-else class="font-medium text-default">{{ agent.label }}</span>
|
|
75
75
|
</div>
|
|
76
76
|
</div>
|
|
77
77
|
|
|
78
|
-
<p class="text-base font-medium text-
|
|
78
|
+
<p class="text-base font-medium text-highlighted">{{ decision.question }}</p>
|
|
79
79
|
|
|
80
80
|
<div class="grid gap-2">
|
|
81
81
|
<UButton
|
|
@@ -93,7 +93,7 @@ async function choose(option: string) {
|
|
|
93
93
|
{{ opt }}
|
|
94
94
|
</UButton>
|
|
95
95
|
</div>
|
|
96
|
-
<p class="text-[11px] text-
|
|
96
|
+
<p class="text-[11px] text-dimmed">
|
|
97
97
|
{{ t('panels.decision.visualizationHint') }}
|
|
98
98
|
</p>
|
|
99
99
|
</div>
|
|
@@ -58,7 +58,7 @@ const customJson = computed<string | null>(() => {
|
|
|
58
58
|
<ResultWindowShell
|
|
59
59
|
:open="open"
|
|
60
60
|
:icon="meta?.icon ?? 'i-lucide-braces'"
|
|
61
|
-
icon-class="bg-cyan
|
|
61
|
+
icon-class="bg-app-hue-cyan/15 text-app-hue-cyan"
|
|
62
62
|
:title="headerTitle"
|
|
63
63
|
:subtitle="meta?.description ?? t('panels.structuredResult.fallbackDescription')"
|
|
64
64
|
:step-ref="{ instanceId, stepIndex }"
|
|
@@ -71,28 +71,28 @@ const customJson = computed<string | null>(() => {
|
|
|
71
71
|
<MarkdownProse
|
|
72
72
|
v-if="step?.output"
|
|
73
73
|
:text="step.output"
|
|
74
|
-
class="mb-4 text-[13px] leading-relaxed text-
|
|
74
|
+
class="mb-4 text-[13px] leading-relaxed text-toned"
|
|
75
75
|
/>
|
|
76
76
|
|
|
77
77
|
<template v-if="customJson">
|
|
78
78
|
<div class="mb-2 flex items-center gap-2">
|
|
79
|
-
<h3 class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
79
|
+
<h3 class="text-[11px] font-semibold uppercase tracking-wide text-dimmed">
|
|
80
80
|
{{ t('panels.structuredResult.structuredOutput') }}
|
|
81
81
|
</h3>
|
|
82
82
|
<CopyButton :text="customJson" class="-my-1" />
|
|
83
83
|
</div>
|
|
84
84
|
<pre
|
|
85
|
-
class="overflow-x-auto rounded-lg border border-
|
|
85
|
+
class="overflow-x-auto rounded-lg border border-default bg-app-950/60 p-3 text-[12px] leading-relaxed text-default"
|
|
86
86
|
><code>{{ customJson }}</code></pre>
|
|
87
87
|
</template>
|
|
88
88
|
|
|
89
89
|
<div
|
|
90
90
|
v-else-if="!step?.output"
|
|
91
|
-
class="flex h-full flex-col items-center justify-center gap-2 text-center text-
|
|
91
|
+
class="flex h-full flex-col items-center justify-center gap-2 text-center text-muted"
|
|
92
92
|
>
|
|
93
93
|
<UIcon name="i-lucide-braces" class="h-8 w-8 opacity-40" />
|
|
94
94
|
<p class="text-sm">{{ t('panels.structuredResult.noResult') }}</p>
|
|
95
|
-
<p class="max-w-sm text-[11px] text-
|
|
95
|
+
<p class="max-w-sm text-[11px] text-dimmed">
|
|
96
96
|
{{ t('panels.structuredResult.noResultHint') }}
|
|
97
97
|
</p>
|
|
98
98
|
</div>
|
|
@@ -100,7 +100,7 @@ const customJson = computed<string | null>(() => {
|
|
|
100
100
|
|
|
101
101
|
<!-- Sidebar: shared run metadata + observability rollup -->
|
|
102
102
|
<aside
|
|
103
|
-
class="hidden w-60 shrink-0 flex-col gap-4 border-s border-
|
|
103
|
+
class="hidden w-60 shrink-0 flex-col gap-4 border-s border-default bg-default/50 px-4 py-4 lg:flex"
|
|
104
104
|
>
|
|
105
105
|
<StepRunMeta
|
|
106
106
|
v-if="step"
|
|
@@ -342,7 +342,7 @@ const showOriginalDescription = ref(false)
|
|
|
342
342
|
v-if="block && statusMeta && typeMeta"
|
|
343
343
|
data-testid="inspector-panel"
|
|
344
344
|
:data-inspector-block="block.id"
|
|
345
|
-
class="fixed inset-x-0 bottom-0 z-20 overflow-hidden rounded-t-2xl border border-
|
|
345
|
+
class="fixed inset-x-0 bottom-0 z-20 overflow-hidden rounded-t-2xl border border-muted bg-default/95 shadow-2xl backdrop-blur lg:absolute lg:inset-x-auto lg:bottom-auto lg:end-4 lg:top-16 lg:w-80 lg:rounded-2xl"
|
|
346
346
|
>
|
|
347
347
|
<div class="h-1.5 w-full" :style="{ backgroundColor: statusMeta.color }" />
|
|
348
348
|
<!-- A tall task (execution steps + scenarios + docs) can overflow the
|
|
@@ -358,17 +358,17 @@ const showOriginalDescription = ref(false)
|
|
|
358
358
|
<div class="flex items-center gap-2">
|
|
359
359
|
<div
|
|
360
360
|
class="flex h-9 w-9 items-center justify-center rounded-lg"
|
|
361
|
-
:style="{ backgroundColor: typeMeta.accent
|
|
361
|
+
:style="{ backgroundColor: tint(typeMeta.accent) }"
|
|
362
362
|
>
|
|
363
363
|
<UIcon :name="typeMeta.icon" class="h-5 w-5" :style="{ color: typeMeta.accent }" />
|
|
364
364
|
</div>
|
|
365
365
|
<div>
|
|
366
|
-
<div class="text-sm font-semibold text-
|
|
366
|
+
<div class="text-sm font-semibold text-highlighted">{{ block.title }}</div>
|
|
367
367
|
<div class="mt-0.5 flex items-center gap-1.5">
|
|
368
368
|
<UBadge :color="statusMeta.chip" variant="subtle" size="sm">
|
|
369
369
|
{{ statusLabel }}
|
|
370
370
|
</UBadge>
|
|
371
|
-
<span class="text-[10px] uppercase tracking-wide text-
|
|
371
|
+
<span class="text-[10px] uppercase tracking-wide text-dimmed">{{ level }}</span>
|
|
372
372
|
</div>
|
|
373
373
|
</div>
|
|
374
374
|
</div>
|
|
@@ -401,18 +401,18 @@ const showOriginalDescription = ref(false)
|
|
|
401
401
|
<!-- reworked: the standardized requirements document takes focus; the raw
|
|
402
402
|
description is frozen and tucked behind an expander. -->
|
|
403
403
|
<template v-if="frozenByRework">
|
|
404
|
-
<div class="rounded-lg border border-
|
|
404
|
+
<div class="rounded-lg border border-app-success-900/60 bg-app-success-950/20 p-3">
|
|
405
405
|
<div
|
|
406
|
-
class="mb-1.5 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide text-
|
|
406
|
+
class="mb-1.5 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide text-app-success-400"
|
|
407
407
|
>
|
|
408
408
|
<UIcon name="i-lucide-file-check-2" class="h-3.5 w-3.5" />
|
|
409
409
|
{{ t('panels.inspector.reworkedRequirements') }}
|
|
410
410
|
</div>
|
|
411
|
-
<p class="line-clamp-5 whitespace-pre-line text-[13px] leading-relaxed text-
|
|
411
|
+
<p class="line-clamp-5 whitespace-pre-line text-[13px] leading-relaxed text-toned">
|
|
412
412
|
{{ reqReworkedText }}
|
|
413
413
|
</p>
|
|
414
414
|
<div class="mt-2 flex items-center justify-between gap-2">
|
|
415
|
-
<p class="text-[11px] text-
|
|
415
|
+
<p class="text-[11px] text-dimmed">
|
|
416
416
|
{{ t('panels.inspector.agentStepsUseDocument') }}
|
|
417
417
|
</p>
|
|
418
418
|
<UButton
|
|
@@ -464,23 +464,23 @@ const showOriginalDescription = ref(false)
|
|
|
464
464
|
@change="saveDescription"
|
|
465
465
|
@blur="saveDescription"
|
|
466
466
|
/>
|
|
467
|
-
<p v-if="isTask && !editable" class="flex items-center gap-1 text-[11px] text-
|
|
467
|
+
<p v-if="isTask && !editable" class="flex items-center gap-1 text-[11px] text-dimmed">
|
|
468
468
|
<UIcon name="i-lucide-lock" class="h-3 w-3" />
|
|
469
469
|
{{ t('panels.inspector.taskStartedLocked') }}
|
|
470
470
|
</p>
|
|
471
471
|
|
|
472
472
|
<!-- prior incorporated requirements kept as a base after a review-driven reset -->
|
|
473
|
-
<div v-if="reqHasPriorDoc" class="rounded-lg border border-
|
|
473
|
+
<div v-if="reqHasPriorDoc" class="rounded-lg border border-muted bg-elevated/40 p-3">
|
|
474
474
|
<div
|
|
475
|
-
class="mb-1.5 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide text-
|
|
475
|
+
class="mb-1.5 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide text-muted"
|
|
476
476
|
>
|
|
477
477
|
<UIcon name="i-lucide-history" class="h-3.5 w-3.5" />
|
|
478
478
|
{{ t('panels.inspector.lastIncorporatedRequirements') }}
|
|
479
479
|
</div>
|
|
480
|
-
<p class="line-clamp-5 whitespace-pre-line text-[13px] leading-relaxed text-
|
|
480
|
+
<p class="line-clamp-5 whitespace-pre-line text-[13px] leading-relaxed text-toned">
|
|
481
481
|
{{ reqReworkedText }}
|
|
482
482
|
</p>
|
|
483
|
-
<p class="mt-2 text-[11px] text-
|
|
483
|
+
<p class="mt-2 text-[11px] text-dimmed">
|
|
484
484
|
{{ t('panels.inspector.priorDocHint') }}
|
|
485
485
|
</p>
|
|
486
486
|
</div>
|
|
@@ -493,10 +493,10 @@ const showOriginalDescription = ref(false)
|
|
|
493
493
|
<!-- running bootstrap: show the steps, let the user inspect it, let them stop it -->
|
|
494
494
|
<div
|
|
495
495
|
v-else-if="runningRun"
|
|
496
|
-
class="space-y-2 rounded-lg border border-
|
|
496
|
+
class="space-y-2 rounded-lg border border-app-warning-900/60 bg-app-warning-950/30 px-3 py-2"
|
|
497
497
|
>
|
|
498
498
|
<div class="flex items-center justify-between gap-2">
|
|
499
|
-
<span class="flex items-center gap-1.5 text-xs text-
|
|
499
|
+
<span class="flex items-center gap-1.5 text-xs text-app-warning-300">
|
|
500
500
|
<UIcon name="i-lucide-loader-circle" class="h-3.5 w-3.5 animate-spin" />
|
|
501
501
|
{{ t('panels.inspector.bootstrapping') }}
|
|
502
502
|
</span>
|
|
@@ -586,7 +586,7 @@ const showOriginalDescription = ref(false)
|
|
|
586
586
|
>
|
|
587
587
|
{{ t('panels.inspector.mapService') }}
|
|
588
588
|
</UButton>
|
|
589
|
-
<p v-if="isFrame && !serviceRepo" class="text-[11px] text-
|
|
589
|
+
<p v-if="isFrame && !serviceRepo" class="text-[11px] text-dimmed">
|
|
590
590
|
{{ t('panels.inspector.mapServiceNoRepo') }}
|
|
591
591
|
</p>
|
|
592
592
|
|
|
@@ -613,7 +613,7 @@ const showOriginalDescription = ref(false)
|
|
|
613
613
|
on a disabled button doesn't fire hover events. -->
|
|
614
614
|
<p
|
|
615
615
|
v-if="isTask && runBlockedReason"
|
|
616
|
-
class="flex items-start gap-1.5 text-[11px] text-
|
|
616
|
+
class="flex items-start gap-1.5 text-[11px] text-app-warning-300/90"
|
|
617
617
|
data-testid="run-blocked-reason"
|
|
618
618
|
>
|
|
619
619
|
<UIcon name="i-lucide-lock" class="mt-px h-3 w-3 shrink-0" />
|