@cat-factory/app 0.302.2 → 0.303.1
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 +99 -14
- 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 +26 -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 +10 -9
|
@@ -96,9 +96,9 @@ const CHUNK_STATUS_KEY: Record<StepSubtaskItem['status'], string> = {
|
|
|
96
96
|
pending: 'prReview.reviewing.chunkStatus.pending',
|
|
97
97
|
}
|
|
98
98
|
const CHUNK_STATUS_CLASS: Record<StepSubtaskItem['status'], string> = {
|
|
99
|
-
completed: 'bg-
|
|
100
|
-
in_progress: 'bg-
|
|
101
|
-
pending: 'bg-
|
|
99
|
+
completed: 'bg-app-success-500/15 text-app-success-300',
|
|
100
|
+
in_progress: 'bg-primary/15 text-primary',
|
|
101
|
+
pending: 'bg-accented/60 text-muted',
|
|
102
102
|
}
|
|
103
103
|
function chunkStatusLabel(status: StepSubtaskItem['status']): string {
|
|
104
104
|
return t(CHUNK_STATUS_KEY[status])
|
|
@@ -116,11 +116,11 @@ const postedIds = computed(() => new Set(state.value?.postedFindingIds ?? []))
|
|
|
116
116
|
|
|
117
117
|
/** Severity → chip classes (styling, not copy). */
|
|
118
118
|
const SEVERITY_CLASS: Record<PrReviewSeverity, string> = {
|
|
119
|
-
blocker: 'bg-
|
|
120
|
-
high: 'bg-orange
|
|
121
|
-
medium: 'bg-
|
|
122
|
-
low: 'bg-
|
|
123
|
-
nit: 'bg-
|
|
119
|
+
blocker: 'bg-app-error-500/15 text-app-error-300 ring-app-error-500/30',
|
|
120
|
+
high: 'bg-app-hue-orange/15 text-app-hue-orange ring-app-hue-orange/30',
|
|
121
|
+
medium: 'bg-app-warning-500/15 text-app-warning-300 ring-app-warning-500/30',
|
|
122
|
+
low: 'bg-app-info-500/15 text-app-info-300 ring-app-info-500/30',
|
|
123
|
+
nit: 'bg-app-500/15 text-toned ring-app-500/30',
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
/** Findings grouped under their slice (in the review's slice order), plus an "Other" bucket. */
|
|
@@ -283,7 +283,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
283
283
|
<ResultWindowShell
|
|
284
284
|
:open="open"
|
|
285
285
|
icon="i-lucide-clipboard-check"
|
|
286
|
-
icon-class="bg-
|
|
286
|
+
icon-class="bg-primary/15 text-primary"
|
|
287
287
|
:title="block ? t('prReview.titleWithBlock', { title: block.title }) : t('prReview.title')"
|
|
288
288
|
:subtitle="t('prReview.subtitle')"
|
|
289
289
|
width="full"
|
|
@@ -295,7 +295,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
295
295
|
:href="state.prUrl"
|
|
296
296
|
target="_blank"
|
|
297
297
|
rel="noopener"
|
|
298
|
-
class="rounded-md px-2 py-1 text-[11px] text-
|
|
298
|
+
class="rounded-md px-2 py-1 text-[11px] text-primary hover:bg-elevated"
|
|
299
299
|
>
|
|
300
300
|
{{ t('prReview.openPr') }}
|
|
301
301
|
</a>
|
|
@@ -316,29 +316,29 @@ const { requestClose } = useUnsavedGuard({
|
|
|
316
316
|
<div
|
|
317
317
|
v-if="planning"
|
|
318
318
|
data-testid="pr-review-planning"
|
|
319
|
-
class="flex flex-1 flex-col items-center justify-center gap-2 py-10 text-center text-
|
|
319
|
+
class="flex flex-1 flex-col items-center justify-center gap-2 py-10 text-center text-muted"
|
|
320
320
|
>
|
|
321
321
|
<UIcon name="i-lucide-loader-circle" class="h-8 w-8 animate-spin opacity-60" />
|
|
322
|
-
<p class="text-sm text-
|
|
323
|
-
<p class="max-w-sm text-[11px] text-
|
|
322
|
+
<p class="text-sm text-default">{{ t('prReview.reviewing.planning.title') }}</p>
|
|
323
|
+
<p class="max-w-sm text-[11px] text-dimmed">
|
|
324
324
|
{{ t('prReview.reviewing.planning.hint') }}
|
|
325
325
|
</p>
|
|
326
326
|
</div>
|
|
327
327
|
|
|
328
328
|
<!-- REVIEWING: a per-slice plan exists — show every slice with its status + which are active now. -->
|
|
329
329
|
<div v-else data-testid="pr-review-reviewing-chunks" class="py-2">
|
|
330
|
-
<div class="mb-1 flex items-center gap-2 text-sm text-
|
|
330
|
+
<div class="mb-1 flex items-center gap-2 text-sm text-default">
|
|
331
331
|
<UIcon
|
|
332
332
|
name="i-lucide-loader-circle"
|
|
333
|
-
class="h-4 w-4 shrink-0 animate-spin text-
|
|
333
|
+
class="h-4 w-4 shrink-0 animate-spin text-primary"
|
|
334
334
|
/>
|
|
335
335
|
<span>{{ t('prReview.reviewing.reviewingChunks.title') }}</span>
|
|
336
336
|
</div>
|
|
337
|
-
<p class="mb-3 text-[11px] text-
|
|
337
|
+
<p class="mb-3 text-[11px] text-dimmed">
|
|
338
338
|
{{ t('prReview.reviewing.reviewingChunks.hint') }}
|
|
339
339
|
</p>
|
|
340
340
|
|
|
341
|
-
<div class="flex items-center justify-between text-[11px] text-
|
|
341
|
+
<div class="flex items-center justify-between text-[11px] text-muted">
|
|
342
342
|
<span data-testid="pr-review-chunk-count">
|
|
343
343
|
{{
|
|
344
344
|
t('prReview.reviewing.chunks', {
|
|
@@ -347,13 +347,13 @@ const { requestClose } = useUnsavedGuard({
|
|
|
347
347
|
})
|
|
348
348
|
}}
|
|
349
349
|
</span>
|
|
350
|
-
<span v-if="subtasks!.inProgress > 0" class="text-
|
|
350
|
+
<span v-if="subtasks!.inProgress > 0" class="text-primary">
|
|
351
351
|
{{ t('prReview.reviewing.inProgress', { count: subtasks!.inProgress }) }}
|
|
352
352
|
</span>
|
|
353
353
|
</div>
|
|
354
|
-
<div class="mt-1 h-1.5 overflow-hidden rounded-full bg-
|
|
354
|
+
<div class="mt-1 h-1.5 overflow-hidden rounded-full bg-accented/60">
|
|
355
355
|
<div
|
|
356
|
-
class="h-full rounded-full bg-
|
|
356
|
+
class="h-full rounded-full bg-primary transition-all duration-500"
|
|
357
357
|
:style="{ width: `${chunkPercent}%` }"
|
|
358
358
|
/>
|
|
359
359
|
</div>
|
|
@@ -367,13 +367,13 @@ const { requestClose } = useUnsavedGuard({
|
|
|
367
367
|
class="mt-3 rounded-lg border px-2.5 py-2"
|
|
368
368
|
:class="
|
|
369
369
|
activeChunks.length
|
|
370
|
-
? 'border-
|
|
371
|
-
: 'border-
|
|
370
|
+
? 'border-primary/30 bg-primary/5'
|
|
371
|
+
: 'border-default bg-default/40'
|
|
372
372
|
"
|
|
373
373
|
>
|
|
374
374
|
<p
|
|
375
375
|
class="mb-1 text-[10px] font-semibold uppercase tracking-wide"
|
|
376
|
-
:class="activeChunks.length ? 'text-
|
|
376
|
+
:class="activeChunks.length ? 'text-primary' : 'text-dimmed'"
|
|
377
377
|
>
|
|
378
378
|
{{ t('prReview.reviewing.activeHeading') }}
|
|
379
379
|
</p>
|
|
@@ -381,25 +381,23 @@ const { requestClose } = useUnsavedGuard({
|
|
|
381
381
|
<li
|
|
382
382
|
v-for="(label, i) in activeChunks"
|
|
383
383
|
:key="i"
|
|
384
|
-
class="flex items-start gap-1.5 text-[12px] text-
|
|
384
|
+
class="flex items-start gap-1.5 text-[12px] text-app-100"
|
|
385
385
|
>
|
|
386
386
|
<UIcon
|
|
387
387
|
name="i-lucide-loader-circle"
|
|
388
|
-
class="mt-0.5 h-3.5 w-3.5 shrink-0 animate-spin text-
|
|
388
|
+
class="mt-0.5 h-3.5 w-3.5 shrink-0 animate-spin text-primary"
|
|
389
389
|
/>
|
|
390
390
|
<span class="min-w-0">{{ label }}</span>
|
|
391
391
|
</li>
|
|
392
392
|
</ul>
|
|
393
|
-
<p v-else data-testid="pr-review-active-idle" class="text-[12px] text-
|
|
393
|
+
<p v-else data-testid="pr-review-active-idle" class="text-[12px] text-muted">
|
|
394
394
|
{{ t('prReview.reviewing.activeIdle') }}
|
|
395
395
|
</p>
|
|
396
396
|
</div>
|
|
397
397
|
|
|
398
398
|
<!-- Every chunk with its explicit status (Reviewed / Reviewing… / Queued). -->
|
|
399
399
|
<template v-if="subtasks!.items?.length">
|
|
400
|
-
<p
|
|
401
|
-
class="mb-1.5 mt-3 text-[10px] font-semibold uppercase tracking-wide text-slate-400"
|
|
402
|
-
>
|
|
400
|
+
<p class="mb-1.5 mt-3 text-[10px] font-semibold uppercase tracking-wide text-muted">
|
|
403
401
|
{{ t('prReview.reviewing.chunksHeading') }}
|
|
404
402
|
</p>
|
|
405
403
|
<ul class="space-y-1.5" data-testid="pr-review-chunks">
|
|
@@ -410,10 +408,10 @@ const { requestClose } = useUnsavedGuard({
|
|
|
410
408
|
class="flex items-center gap-1.5 text-[12px]"
|
|
411
409
|
:class="
|
|
412
410
|
item.status === 'completed'
|
|
413
|
-
? 'text-
|
|
411
|
+
? 'text-dimmed'
|
|
414
412
|
: item.status === 'in_progress'
|
|
415
|
-
? 'text-
|
|
416
|
-
: 'text-
|
|
413
|
+
? 'text-app-100'
|
|
414
|
+
: 'text-muted'
|
|
417
415
|
"
|
|
418
416
|
>
|
|
419
417
|
<UIcon
|
|
@@ -444,16 +442,16 @@ const { requestClose } = useUnsavedGuard({
|
|
|
444
442
|
here can tell wedged from quiet-but-working (see `canResume`). Re-reviews only the
|
|
445
443
|
slices that never reported; the finished ones are re-aggregated from their captured
|
|
446
444
|
reports. -->
|
|
447
|
-
<div class="mt-4 border-t border-
|
|
445
|
+
<div class="mt-4 border-t border-default pt-3">
|
|
448
446
|
<p
|
|
449
447
|
v-if="prReview.error"
|
|
450
448
|
data-testid="pr-review-resume-error"
|
|
451
|
-
class="mb-2 rounded-md bg-
|
|
449
|
+
class="mb-2 rounded-md bg-app-error-500/10 px-3 py-2 text-[12px] text-app-error-300"
|
|
452
450
|
>
|
|
453
451
|
{{ prReview.error }}
|
|
454
452
|
</p>
|
|
455
453
|
<div class="flex items-start justify-between gap-3">
|
|
456
|
-
<p class="min-w-0 text-[11px] text-
|
|
454
|
+
<p class="min-w-0 text-[11px] text-dimmed">{{ t('prReview.resume.hint') }}</p>
|
|
457
455
|
<UButton
|
|
458
456
|
data-testid="pr-review-resume"
|
|
459
457
|
size="xs"
|
|
@@ -475,13 +473,13 @@ const { requestClose } = useUnsavedGuard({
|
|
|
475
473
|
<div
|
|
476
474
|
v-else-if="working"
|
|
477
475
|
data-testid="pr-review-working"
|
|
478
|
-
class="flex h-full flex-col items-center justify-center gap-2 py-10 text-center text-
|
|
476
|
+
class="flex h-full flex-col items-center justify-center gap-2 py-10 text-center text-muted"
|
|
479
477
|
>
|
|
480
478
|
<UIcon name="i-lucide-loader-circle" class="h-8 w-8 animate-spin opacity-60" />
|
|
481
479
|
<p class="text-sm">
|
|
482
480
|
{{ status === 'fixing' ? t('prReview.fixing.title') : t('prReview.posting.title') }}
|
|
483
481
|
</p>
|
|
484
|
-
<p class="max-w-sm text-[11px] text-
|
|
482
|
+
<p class="max-w-sm text-[11px] text-dimmed">
|
|
485
483
|
{{ status === 'fixing' ? t('prReview.fixing.hint') : t('prReview.posting.hint') }}
|
|
486
484
|
</p>
|
|
487
485
|
</div>
|
|
@@ -489,7 +487,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
489
487
|
<template v-else>
|
|
490
488
|
<p
|
|
491
489
|
v-if="prReview.error"
|
|
492
|
-
class="mb-3 rounded-md bg-
|
|
490
|
+
class="mb-3 rounded-md bg-app-error-500/10 px-3 py-2 text-[12px] text-app-error-300"
|
|
493
491
|
>
|
|
494
492
|
{{ prReview.error }}
|
|
495
493
|
</p>
|
|
@@ -503,8 +501,8 @@ const { requestClose } = useUnsavedGuard({
|
|
|
503
501
|
class="mb-3 rounded-lg border px-3 py-2 text-[12px]"
|
|
504
502
|
:class="
|
|
505
503
|
postReport.failures.length > 0 || postReport.bodyPosted === false
|
|
506
|
-
? 'border-
|
|
507
|
-
: 'border-
|
|
504
|
+
? 'border-app-warning-500/40 bg-app-warning-500/10 text-app-warning-200'
|
|
505
|
+
: 'border-app-success-500/40 bg-app-success-500/10 text-app-success-200'
|
|
508
506
|
"
|
|
509
507
|
>
|
|
510
508
|
<div class="mb-1 flex items-center gap-1.5 font-medium">
|
|
@@ -533,7 +531,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
533
531
|
<p class="mt-1.5 font-medium">{{ t('prReview.postReport.failuresHeading') }}</p>
|
|
534
532
|
<ul class="mt-0.5 space-y-0.5" data-testid="pr-review-post-failures">
|
|
535
533
|
<li v-for="f in postReport.failures" :key="f.findingId" class="flex gap-1.5">
|
|
536
|
-
<code class="shrink-0 text-
|
|
534
|
+
<code class="shrink-0 text-app-warning-100"
|
|
537
535
|
>{{ f.path }}<template v-if="f.line != null">:{{ f.line }}</template></code
|
|
538
536
|
>
|
|
539
537
|
<span class="opacity-90">— {{ f.reason }}</span>
|
|
@@ -549,9 +547,9 @@ const { requestClose } = useUnsavedGuard({
|
|
|
549
547
|
shell's `width` prop) — this window is `full`-width. -->
|
|
550
548
|
<div
|
|
551
549
|
v-if="state?.summary"
|
|
552
|
-
class="mb-3 max-w-3xl rounded-md bg-
|
|
550
|
+
class="mb-3 max-w-3xl rounded-md bg-elevated/50 px-3 py-2 text-[12px] text-toned"
|
|
553
551
|
>
|
|
554
|
-
<span class="mb-1 block text-
|
|
552
|
+
<span class="mb-1 block text-dimmed">{{ t('prReview.summaryLabel') }}</span>
|
|
555
553
|
<MarkdownProse :text="state.summary" />
|
|
556
554
|
</div>
|
|
557
555
|
|
|
@@ -566,7 +564,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
566
564
|
<!-- A clean PR / resolved review with no findings. -->
|
|
567
565
|
<div
|
|
568
566
|
v-if="findings.length === 0"
|
|
569
|
-
class="rounded-xl border border-
|
|
567
|
+
class="rounded-xl border border-default bg-default/60 px-4 py-6 text-center text-[13px] text-toned"
|
|
570
568
|
>
|
|
571
569
|
{{ t('prReview.noFindings') }}
|
|
572
570
|
</div>
|
|
@@ -576,31 +574,31 @@ const { requestClose } = useUnsavedGuard({
|
|
|
576
574
|
<div
|
|
577
575
|
v-if="challenging"
|
|
578
576
|
data-testid="pr-review-challenging"
|
|
579
|
-
class="mb-3 flex items-center gap-2 rounded-md border border-
|
|
577
|
+
class="mb-3 flex items-center gap-2 rounded-md border border-primary/40 bg-primary/10 px-3 py-2 text-[12px] text-primary"
|
|
580
578
|
>
|
|
581
579
|
<UIcon name="i-lucide-loader-circle" class="h-4 w-4 shrink-0 animate-spin" />
|
|
582
580
|
<span>{{ t('prReview.challenge.investigatingBanner') }}</span>
|
|
583
581
|
</div>
|
|
584
582
|
|
|
585
583
|
<!-- Selection toolbar -->
|
|
586
|
-
<div v-if="awaiting" class="mb-2 flex items-center gap-3 text-[11px] text-
|
|
584
|
+
<div v-if="awaiting" class="mb-2 flex items-center gap-3 text-[11px] text-muted">
|
|
587
585
|
<span data-testid="pr-review-selected-count">
|
|
588
586
|
{{ t('prReview.selectedCount', { count: activeSelectedIds.length }) }}
|
|
589
587
|
</span>
|
|
590
|
-
<button class="text-
|
|
588
|
+
<button class="text-primary hover:underline" @click="selectAll">
|
|
591
589
|
{{ t('prReview.selectAll') }}
|
|
592
590
|
</button>
|
|
593
|
-
<button class="text-
|
|
591
|
+
<button class="text-primary hover:underline" @click="clearAll">
|
|
594
592
|
{{ t('prReview.clear') }}
|
|
595
593
|
</button>
|
|
596
594
|
</div>
|
|
597
595
|
|
|
598
596
|
<!-- Findings grouped by slice -->
|
|
599
597
|
<section v-for="g in groups" :key="g.id" class="mb-4">
|
|
600
|
-
<h3 class="mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-
|
|
598
|
+
<h3 class="mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
601
599
|
{{ g.title }}
|
|
602
600
|
</h3>
|
|
603
|
-
<p v-if="g.rationale" class="mb-1.5 max-w-3xl text-[11px] text-
|
|
601
|
+
<p v-if="g.rationale" class="mb-1.5 max-w-3xl text-[11px] text-dimmed">
|
|
604
602
|
{{ g.rationale }}
|
|
605
603
|
</p>
|
|
606
604
|
<article
|
|
@@ -610,8 +608,8 @@ const { requestClose } = useUnsavedGuard({
|
|
|
610
608
|
class="mb-1.5 rounded-xl border px-3 py-2 transition"
|
|
611
609
|
:class="[
|
|
612
610
|
awaiting && selected.has(f.id) && !isRetracted(f)
|
|
613
|
-
? 'border-
|
|
614
|
-
: 'border-
|
|
611
|
+
? 'border-primary/60 bg-primary/5'
|
|
612
|
+
: 'border-default bg-default/60',
|
|
615
613
|
isRetracted(f) ? 'opacity-60' : '',
|
|
616
614
|
]"
|
|
617
615
|
>
|
|
@@ -619,7 +617,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
619
617
|
<input
|
|
620
618
|
v-if="awaiting || challenging"
|
|
621
619
|
type="checkbox"
|
|
622
|
-
class="mt-1 accent-
|
|
620
|
+
class="mt-1 accent-primary"
|
|
623
621
|
data-testid="pr-review-finding-toggle"
|
|
624
622
|
:checked="selected.has(f.id) && !isRetracted(f)"
|
|
625
623
|
:disabled="!awaiting || isRetracted(f)"
|
|
@@ -633,13 +631,13 @@ const { requestClose } = useUnsavedGuard({
|
|
|
633
631
|
>
|
|
634
632
|
{{ t(`prReview.severity.${f.severity}`) }}
|
|
635
633
|
</span>
|
|
636
|
-
<span class="rounded bg-
|
|
634
|
+
<span class="rounded bg-elevated px-1.5 py-0.5 text-[10px] text-toned">
|
|
637
635
|
{{ t(`prReview.category.${f.category}`) }}
|
|
638
636
|
</span>
|
|
639
637
|
<span
|
|
640
638
|
v-if="postedIds.has(f.id)"
|
|
641
639
|
data-testid="pr-review-finding-posted"
|
|
642
|
-
class="rounded bg-
|
|
640
|
+
class="rounded bg-app-success-500/15 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-app-success-300 ring-1 ring-app-success-500/30"
|
|
643
641
|
>
|
|
644
642
|
{{ t('prReview.postReport.postedBadge') }}
|
|
645
643
|
</span>
|
|
@@ -647,47 +645,47 @@ const { requestClose } = useUnsavedGuard({
|
|
|
647
645
|
<span
|
|
648
646
|
v-if="isRetracted(f)"
|
|
649
647
|
data-testid="pr-review-finding-retracted"
|
|
650
|
-
class="rounded bg-
|
|
648
|
+
class="rounded bg-app-error-500/15 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-app-error-300 ring-1 ring-app-error-500/30"
|
|
651
649
|
>
|
|
652
650
|
{{ t('prReview.challenge.retractedBadge') }}
|
|
653
651
|
</span>
|
|
654
652
|
<span
|
|
655
653
|
v-else-if="isAmended(f)"
|
|
656
654
|
data-testid="pr-review-finding-amended"
|
|
657
|
-
class="rounded bg-
|
|
655
|
+
class="rounded bg-app-info-500/15 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-app-info-300 ring-1 ring-app-info-500/30"
|
|
658
656
|
>
|
|
659
657
|
{{ t('prReview.challenge.strengthenedBadge') }}
|
|
660
658
|
</span>
|
|
661
659
|
<span
|
|
662
660
|
v-else-if="isUpheld(f)"
|
|
663
661
|
data-testid="pr-review-finding-upheld"
|
|
664
|
-
class="rounded bg-
|
|
662
|
+
class="rounded bg-app-success-500/15 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-app-success-300 ring-1 ring-app-success-500/30"
|
|
665
663
|
>
|
|
666
664
|
{{ t('prReview.challenge.upheldBadge') }}
|
|
667
665
|
</span>
|
|
668
666
|
<span
|
|
669
667
|
v-else-if="isChallengeFailed(f)"
|
|
670
668
|
data-testid="pr-review-finding-challenge-failed"
|
|
671
|
-
class="rounded bg-
|
|
669
|
+
class="rounded bg-app-warning-500/15 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-app-warning-300 ring-1 ring-app-warning-500/30"
|
|
672
670
|
>
|
|
673
671
|
{{ t('prReview.challenge.failedBadge') }}
|
|
674
672
|
</span>
|
|
675
673
|
<span
|
|
676
674
|
v-else-if="isInvestigating(f)"
|
|
677
675
|
data-testid="pr-review-finding-investigating"
|
|
678
|
-
class="flex items-center gap-1 rounded bg-
|
|
676
|
+
class="flex items-center gap-1 rounded bg-primary/15 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-primary ring-1 ring-primary/30"
|
|
679
677
|
>
|
|
680
678
|
<UIcon name="i-lucide-loader-circle" class="h-3 w-3 animate-spin" />
|
|
681
679
|
{{ t('prReview.challenge.investigatingBadge') }}
|
|
682
680
|
</span>
|
|
683
681
|
<h4
|
|
684
|
-
class="min-w-0 flex-1 text-[13px] font-medium text-
|
|
682
|
+
class="min-w-0 flex-1 text-[13px] font-medium text-app-100"
|
|
685
683
|
:class="isRetracted(f) ? 'line-through' : ''"
|
|
686
684
|
>
|
|
687
685
|
{{ f.title }}
|
|
688
686
|
</h4>
|
|
689
687
|
</div>
|
|
690
|
-
<p class="mt-0.5 text-[11px] text-
|
|
688
|
+
<p class="mt-0.5 text-[11px] text-dimmed">
|
|
691
689
|
{{ f.path
|
|
692
690
|
}}<template v-if="f.line != null">
|
|
693
691
|
· {{ t('prReview.line', { line: f.line }) }}</template
|
|
@@ -703,7 +701,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
703
701
|
<MarkdownProse
|
|
704
702
|
v-if="f.detail"
|
|
705
703
|
:text="f.detail"
|
|
706
|
-
class="mt-1 max-w-3xl text-[12px] text-
|
|
704
|
+
class="mt-1 max-w-3xl text-[12px] text-toned"
|
|
707
705
|
:class="isRetracted(f) ? 'line-through' : ''"
|
|
708
706
|
/>
|
|
709
707
|
<!-- The suggested fix is a VALUE a human copies (a patch line, a command, a
|
|
@@ -713,9 +711,9 @@ const { requestClose } = useUnsavedGuard({
|
|
|
713
711
|
failure summary is left alone. -->
|
|
714
712
|
<p
|
|
715
713
|
v-if="f.suggestedFix"
|
|
716
|
-
class="mt-1 max-w-3xl whitespace-pre-wrap rounded-md bg-
|
|
714
|
+
class="mt-1 max-w-3xl whitespace-pre-wrap rounded-md bg-elevated/50 px-2 py-1 text-[11px] text-toned"
|
|
717
715
|
>
|
|
718
|
-
<span class="text-
|
|
716
|
+
<span class="text-dimmed">{{ t('prReview.suggestedFix') }}</span>
|
|
719
717
|
{{ f.suggestedFix }}
|
|
720
718
|
</p>
|
|
721
719
|
|
|
@@ -727,10 +725,10 @@ const { requestClose } = useUnsavedGuard({
|
|
|
727
725
|
class="mt-1.5 max-w-3xl rounded-md px-2 py-1 text-[11px]"
|
|
728
726
|
:class="
|
|
729
727
|
isRetracted(f)
|
|
730
|
-
? 'bg-
|
|
728
|
+
? 'bg-app-error-500/10 text-app-error-200'
|
|
731
729
|
: isChallengeFailed(f)
|
|
732
|
-
? 'bg-
|
|
733
|
-
: 'bg-
|
|
730
|
+
? 'bg-app-warning-500/10 text-app-warning-200'
|
|
731
|
+
: 'bg-app-info-500/10 text-app-info-200'
|
|
734
732
|
"
|
|
735
733
|
>
|
|
736
734
|
<!-- A label that used to prefix its value inline now heads the block the
|
|
@@ -752,7 +750,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
752
750
|
<button
|
|
753
751
|
v-if="!isRetracted(f)"
|
|
754
752
|
data-testid="pr-review-finding-challenge"
|
|
755
|
-
class="flex items-center gap-1 text-
|
|
753
|
+
class="flex items-center gap-1 text-primary hover:underline disabled:opacity-50"
|
|
756
754
|
:disabled="!canResolve || !access.canExecuteRuns.value"
|
|
757
755
|
@click="openChallenge(f.id)"
|
|
758
756
|
>
|
|
@@ -765,7 +763,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
765
763
|
</button>
|
|
766
764
|
<button
|
|
767
765
|
data-testid="pr-review-finding-dismiss"
|
|
768
|
-
class="flex items-center gap-1 text-
|
|
766
|
+
class="flex items-center gap-1 text-muted hover:text-app-error-300 hover:underline disabled:opacity-50"
|
|
769
767
|
:disabled="!canResolve || !access.canExecuteRuns.value"
|
|
770
768
|
@click="onDismiss(f.id)"
|
|
771
769
|
>
|
|
@@ -778,28 +776,28 @@ const { requestClose } = useUnsavedGuard({
|
|
|
778
776
|
<div
|
|
779
777
|
v-if="challengeForId === f.id"
|
|
780
778
|
data-testid="pr-review-challenge-box"
|
|
781
|
-
class="mt-2 rounded-md border border-
|
|
779
|
+
class="mt-2 rounded-md border border-primary/40 bg-default/80 p-2"
|
|
782
780
|
>
|
|
783
781
|
<textarea
|
|
784
782
|
v-model="challengeText"
|
|
785
783
|
data-testid="pr-review-challenge-input"
|
|
786
784
|
rows="2"
|
|
787
785
|
:placeholder="t('prReview.challenge.placeholder')"
|
|
788
|
-
class="w-full resize-y rounded border border-
|
|
786
|
+
class="w-full resize-y rounded border border-muted bg-app-950/60 px-2 py-1 text-[12px] text-default outline-none focus:border-primary"
|
|
789
787
|
/>
|
|
790
|
-
<p class="mt-1 text-[10px] text-
|
|
788
|
+
<p class="mt-1 text-[10px] text-dimmed">
|
|
791
789
|
{{ t('prReview.challenge.hint') }}
|
|
792
790
|
</p>
|
|
793
791
|
<div class="mt-1.5 flex justify-end gap-2">
|
|
794
792
|
<button
|
|
795
|
-
class="rounded px-2 py-1 text-[11px] text-
|
|
793
|
+
class="rounded px-2 py-1 text-[11px] text-muted hover:text-default"
|
|
796
794
|
@click="cancelChallenge"
|
|
797
795
|
>
|
|
798
796
|
{{ t('common.cancel') }}
|
|
799
797
|
</button>
|
|
800
798
|
<button
|
|
801
799
|
data-testid="pr-review-challenge-submit"
|
|
802
|
-
class="rounded bg-
|
|
800
|
+
class="rounded bg-primary/80 px-2 py-1 text-[11px] font-medium text-inverted hover:bg-primary/90 disabled:opacity-50"
|
|
803
801
|
:disabled="!canResolve"
|
|
804
802
|
@click="submitChallenge(f.id)"
|
|
805
803
|
>
|
|
@@ -821,7 +819,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
821
819
|
<aside
|
|
822
820
|
v-if="step"
|
|
823
821
|
data-testid="pr-review-run-meta"
|
|
824
|
-
class="hidden w-60 shrink-0 flex-col gap-4 overflow-y-auto border-s border-
|
|
822
|
+
class="hidden w-60 shrink-0 flex-col gap-4 overflow-y-auto border-s border-default bg-default/50 px-4 py-4 lg:flex"
|
|
825
823
|
>
|
|
826
824
|
<StepRunMeta
|
|
827
825
|
:step="step"
|
|
@@ -837,7 +835,7 @@ const { requestClose } = useUnsavedGuard({
|
|
|
837
835
|
<!-- Footer -->
|
|
838
836
|
<footer
|
|
839
837
|
v-if="awaiting"
|
|
840
|
-
class="flex items-center justify-end gap-2 border-t border-
|
|
838
|
+
class="flex items-center justify-end gap-2 border-t border-default px-5 py-3"
|
|
841
839
|
>
|
|
842
840
|
<UButton
|
|
843
841
|
color="neutral"
|
|
@@ -45,16 +45,16 @@ function go(action: () => void) {
|
|
|
45
45
|
<i18n-t
|
|
46
46
|
keypath="providers.presetMismatch.intro"
|
|
47
47
|
tag="p"
|
|
48
|
-
class="text-sm text-
|
|
48
|
+
class="text-sm text-toned"
|
|
49
49
|
scope="global"
|
|
50
50
|
>
|
|
51
51
|
<template #name>
|
|
52
|
-
<span class="font-medium text-
|
|
52
|
+
<span class="font-medium text-app-100">{{ presetName }}</span>
|
|
53
53
|
</template>
|
|
54
54
|
</i18n-t>
|
|
55
55
|
|
|
56
|
-
<div class="rounded-lg border border-
|
|
57
|
-
<p class="mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-
|
|
56
|
+
<div class="rounded-lg border border-muted bg-default/50 p-3">
|
|
57
|
+
<p class="mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-dimmed">
|
|
58
58
|
{{ t('providers.presetMismatch.unavailable') }}
|
|
59
59
|
</p>
|
|
60
60
|
<div class="flex flex-wrap gap-1.5">
|
|
@@ -70,7 +70,7 @@ function go(action: () => void) {
|
|
|
70
70
|
</div>
|
|
71
71
|
</div>
|
|
72
72
|
|
|
73
|
-
<p class="text-[13px] text-
|
|
73
|
+
<p class="text-[13px] text-muted">
|
|
74
74
|
{{ t('providers.presetMismatch.advice') }}
|
|
75
75
|
</p>
|
|
76
76
|
|
|
@@ -77,11 +77,11 @@ const routes = computed<Route[]>(() => [
|
|
|
77
77
|
<template #body>
|
|
78
78
|
<div class="space-y-5">
|
|
79
79
|
<div
|
|
80
|
-
class="flex items-start gap-3 rounded-lg border border-
|
|
80
|
+
class="flex items-start gap-3 rounded-lg border border-app-warning-500/40 bg-app-warning-950/40 p-4"
|
|
81
81
|
>
|
|
82
|
-
<UIcon name="i-lucide-cpu" class="mt-0.5 h-6 w-6 shrink-0 text-
|
|
83
|
-
<div class="min-w-0 text-sm text-
|
|
84
|
-
<p class="font-medium text-
|
|
82
|
+
<UIcon name="i-lucide-cpu" class="mt-0.5 h-6 w-6 shrink-0 text-app-warning-400" />
|
|
83
|
+
<div class="min-w-0 text-sm text-app-warning-100/90">
|
|
84
|
+
<p class="font-medium text-app-warning-100">
|
|
85
85
|
{{ t('providers.onboarding.noModelTitle') }}
|
|
86
86
|
</p>
|
|
87
87
|
<p class="mt-1">
|
|
@@ -94,17 +94,17 @@ const routes = computed<Route[]>(() => [
|
|
|
94
94
|
<div
|
|
95
95
|
v-for="r in routes"
|
|
96
96
|
:key="r.title"
|
|
97
|
-
class="flex items-start gap-3 rounded-xl border border-
|
|
97
|
+
class="flex items-start gap-3 rounded-xl border border-muted bg-default/50 p-4"
|
|
98
98
|
>
|
|
99
|
-
<UIcon :name="r.icon" class="mt-0.5 h-5 w-5 shrink-0 text-
|
|
99
|
+
<UIcon :name="r.icon" class="mt-0.5 h-5 w-5 shrink-0 text-primary" />
|
|
100
100
|
<div class="min-w-0 flex-1">
|
|
101
101
|
<div class="flex items-center gap-2">
|
|
102
|
-
<p class="text-sm font-semibold text-
|
|
102
|
+
<p class="text-sm font-semibold text-app-100">{{ r.title }}</p>
|
|
103
103
|
<UBadge v-if="r.badge" color="primary" variant="subtle" size="sm">
|
|
104
104
|
{{ r.badge }}
|
|
105
105
|
</UBadge>
|
|
106
106
|
</div>
|
|
107
|
-
<p class="mt-0.5 text-[13px] leading-relaxed text-
|
|
107
|
+
<p class="mt-0.5 text-[13px] leading-relaxed text-muted">{{ r.body }}</p>
|
|
108
108
|
</div>
|
|
109
109
|
<UButton
|
|
110
110
|
size="sm"
|
|
@@ -118,7 +118,7 @@ const routes = computed<Route[]>(() => [
|
|
|
118
118
|
</div>
|
|
119
119
|
</div>
|
|
120
120
|
|
|
121
|
-
<p class="text-[11px] leading-relaxed text-
|
|
121
|
+
<p class="text-[11px] leading-relaxed text-dimmed">
|
|
122
122
|
{{ t('providers.onboarding.operatorNote') }}
|
|
123
123
|
</p>
|
|
124
124
|
</div>
|