@cat-factory/app 0.302.1 → 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 +10 -9
|
@@ -141,33 +141,31 @@ function backToApp() {
|
|
|
141
141
|
|
|
142
142
|
<template>
|
|
143
143
|
<div
|
|
144
|
-
class="flex min-h-screen w-screen items-center justify-center bg-
|
|
144
|
+
class="flex min-h-screen w-screen items-center justify-center bg-app-950 p-4 text-app-100"
|
|
145
145
|
data-testid="mcp-authorize"
|
|
146
146
|
>
|
|
147
|
-
<div
|
|
148
|
-
class="w-full max-w-md rounded-xl border border-slate-800 bg-slate-900/80 p-8 backdrop-blur"
|
|
149
|
-
>
|
|
147
|
+
<div class="w-full max-w-md rounded-xl border border-default bg-default/80 p-8 backdrop-blur">
|
|
150
148
|
<template v-if="screen === 'loading'">
|
|
151
|
-
<UIcon name="i-lucide-loader" class="mx-auto h-10 w-10 animate-spin text-
|
|
149
|
+
<UIcon name="i-lucide-loader" class="mx-auto h-10 w-10 animate-spin text-primary" />
|
|
152
150
|
</template>
|
|
153
151
|
|
|
154
152
|
<template v-else-if="screen === 'failed'">
|
|
155
|
-
<UIcon name="i-lucide-alert-triangle" class="mx-auto mb-3 h-10 w-10 text-
|
|
153
|
+
<UIcon name="i-lucide-alert-triangle" class="mx-auto mb-3 h-10 w-10 text-app-error-400" />
|
|
156
154
|
<h1
|
|
157
|
-
class="mb-1 text-center text-lg font-semibold text-
|
|
155
|
+
class="mb-1 text-center text-lg font-semibold text-highlighted"
|
|
158
156
|
data-testid="mcp-authorize-failed"
|
|
159
157
|
>
|
|
160
158
|
{{ t('mcpAuthorize.error.title') }}
|
|
161
159
|
</h1>
|
|
162
|
-
<p class="mb-6 text-center text-sm break-words text-
|
|
160
|
+
<p class="mb-6 text-center text-sm break-words text-muted">{{ detail }}</p>
|
|
163
161
|
<UButton block color="neutral" variant="subtle" @click="backToApp">
|
|
164
162
|
{{ t('mcpAuthorize.back') }}
|
|
165
163
|
</UButton>
|
|
166
164
|
</template>
|
|
167
165
|
|
|
168
166
|
<template v-else>
|
|
169
|
-
<UIcon name="i-lucide-plug-zap" class="mx-auto mb-3 h-10 w-10 text-
|
|
170
|
-
<h1 class="mb-1 text-center text-lg font-semibold text-
|
|
167
|
+
<UIcon name="i-lucide-plug-zap" class="mx-auto mb-3 h-10 w-10 text-primary" />
|
|
168
|
+
<h1 class="mb-1 text-center text-lg font-semibold text-highlighted">
|
|
171
169
|
{{ t('mcpAuthorize.title', { client: clientName }) }}
|
|
172
170
|
</h1>
|
|
173
171
|
<!-- The origin is the one fact here an attacker cannot choose: it was matched against what
|
|
@@ -176,11 +174,11 @@ function backToApp() {
|
|
|
176
174
|
The copy reads "It says it is {client}, and …" in every locale, so BOTH holes have to
|
|
177
175
|
be filled: an unpassed `client` renders a sentence naming nobody, on the one screen
|
|
178
176
|
whose whole subject is who is asking. -->
|
|
179
|
-
<p class="mb-6 text-center text-sm text-
|
|
177
|
+
<p class="mb-6 text-center text-sm text-muted">
|
|
180
178
|
{{ t('mcpAuthorize.subtitle', { client: clientName, origin: redirectOrigin }) }}
|
|
181
179
|
</p>
|
|
182
180
|
|
|
183
|
-
<div v-if="!workspaces.length" class="mb-6 text-center text-sm text-
|
|
181
|
+
<div v-if="!workspaces.length" class="mb-6 text-center text-sm text-app-warning-300">
|
|
184
182
|
{{ t('mcpAuthorize.noWorkspaces') }}
|
|
185
183
|
</div>
|
|
186
184
|
|
|
@@ -213,7 +211,7 @@ function backToApp() {
|
|
|
213
211
|
host rather than acted on: raising the grant stays a thing a person does. -->
|
|
214
212
|
<p
|
|
215
213
|
v-if="requestedScope"
|
|
216
|
-
class="mb-6 text-xs text-
|
|
214
|
+
class="mb-6 text-xs text-app-warning-300"
|
|
217
215
|
data-testid="mcp-authorize-requested-scope"
|
|
218
216
|
>
|
|
219
217
|
{{
|
|
@@ -227,7 +225,7 @@ function backToApp() {
|
|
|
227
225
|
|
|
228
226
|
<p
|
|
229
227
|
v-if="decisionError"
|
|
230
|
-
class="mb-4 text-center text-sm break-words text-
|
|
228
|
+
class="mb-4 text-center text-sm break-words text-app-error-400"
|
|
231
229
|
data-testid="mcp-authorize-decision-error"
|
|
232
230
|
>
|
|
233
231
|
{{ decisionError }}
|
|
@@ -255,7 +253,7 @@ function backToApp() {
|
|
|
255
253
|
</UButton>
|
|
256
254
|
</div>
|
|
257
255
|
|
|
258
|
-
<p class="mt-4 text-center text-xs text-
|
|
256
|
+
<p class="mt-4 text-center text-xs text-dimmed">{{ t('mcpAuthorize.revokeHint') }}</p>
|
|
259
257
|
</template>
|
|
260
258
|
</div>
|
|
261
259
|
</div>
|
|
@@ -62,25 +62,28 @@ function backToApp() {
|
|
|
62
62
|
|
|
63
63
|
<template>
|
|
64
64
|
<div
|
|
65
|
-
class="flex h-screen w-screen items-center justify-center bg-
|
|
65
|
+
class="flex h-screen w-screen items-center justify-center bg-app-950 text-app-100"
|
|
66
66
|
data-testid="mcp-oauth-callback"
|
|
67
67
|
>
|
|
68
68
|
<div
|
|
69
|
-
class="w-full max-w-sm rounded-xl border border-
|
|
69
|
+
class="w-full max-w-sm rounded-xl border border-default bg-default/80 p-8 text-center backdrop-blur"
|
|
70
70
|
>
|
|
71
71
|
<template v-if="state === 'working'">
|
|
72
|
-
<UIcon name="i-lucide-loader" class="mx-auto mb-3 h-10 w-10 animate-spin text-
|
|
73
|
-
<h1 class="mb-1 text-lg font-semibold text-
|
|
72
|
+
<UIcon name="i-lucide-loader" class="mx-auto mb-3 h-10 w-10 animate-spin text-primary" />
|
|
73
|
+
<h1 class="mb-1 text-lg font-semibold text-highlighted">
|
|
74
74
|
{{ t('settings.toolServers.oauth.callback.working') }}
|
|
75
75
|
</h1>
|
|
76
76
|
</template>
|
|
77
77
|
|
|
78
78
|
<template v-else-if="state === 'done'">
|
|
79
|
-
<UIcon name="i-lucide-check-circle" class="mx-auto mb-3 h-10 w-10 text-
|
|
80
|
-
<h1
|
|
79
|
+
<UIcon name="i-lucide-check-circle" class="mx-auto mb-3 h-10 w-10 text-app-success-400" />
|
|
80
|
+
<h1
|
|
81
|
+
class="mb-1 text-lg font-semibold text-highlighted"
|
|
82
|
+
data-testid="mcp-oauth-callback-done"
|
|
83
|
+
>
|
|
81
84
|
{{ t('settings.toolServers.oauth.callback.done', { server: serverId }) }}
|
|
82
85
|
</h1>
|
|
83
|
-
<p class="mb-6 text-sm text-
|
|
86
|
+
<p class="mb-6 text-sm text-muted">
|
|
84
87
|
{{ t('settings.toolServers.oauth.callback.doneHint') }}
|
|
85
88
|
</p>
|
|
86
89
|
<UButton block color="primary" @click="backToApp">
|
|
@@ -89,11 +92,14 @@ function backToApp() {
|
|
|
89
92
|
</template>
|
|
90
93
|
|
|
91
94
|
<template v-else>
|
|
92
|
-
<UIcon name="i-lucide-alert-triangle" class="mx-auto mb-3 h-10 w-10 text-
|
|
93
|
-
<h1
|
|
95
|
+
<UIcon name="i-lucide-alert-triangle" class="mx-auto mb-3 h-10 w-10 text-app-error-400" />
|
|
96
|
+
<h1
|
|
97
|
+
class="mb-1 text-lg font-semibold text-highlighted"
|
|
98
|
+
data-testid="mcp-oauth-callback-failed"
|
|
99
|
+
>
|
|
94
100
|
{{ t('settings.toolServers.oauth.callback.failedTitle') }}
|
|
95
101
|
</h1>
|
|
96
|
-
<p class="mb-6 text-sm break-words text-
|
|
102
|
+
<p class="mb-6 text-sm break-words text-muted">{{ detail }}</p>
|
|
97
103
|
<UButton block color="neutral" variant="subtle" @click="backToApp">
|
|
98
104
|
{{ t('settings.toolServers.oauth.callback.back') }}
|
|
99
105
|
</UButton>
|
|
@@ -83,13 +83,13 @@ function setRule(changeClass: (typeof RULEABLE_CHANGE_CLASSES)[number], rule: Me
|
|
|
83
83
|
<template>
|
|
84
84
|
<div data-testid="merge-class-rules" class="space-y-2">
|
|
85
85
|
<div>
|
|
86
|
-
<span class="block text-[10px] uppercase tracking-wide text-
|
|
86
|
+
<span class="block text-[10px] uppercase tracking-wide text-dimmed">
|
|
87
87
|
{{ t('settings.riskPolicy.classRules.heading') }}
|
|
88
88
|
</span>
|
|
89
|
-
<p class="mt-0.5 text-[11px] leading-snug text-
|
|
89
|
+
<p class="mt-0.5 text-[11px] leading-snug text-dimmed">
|
|
90
90
|
{{ t('settings.riskPolicy.classRules.help') }}
|
|
91
91
|
</p>
|
|
92
|
-
<p v-if="!autoMergeEnabled" class="mt-1 text-[11px] leading-snug text-
|
|
92
|
+
<p v-if="!autoMergeEnabled" class="mt-1 text-[11px] leading-snug text-app-warning-400/90">
|
|
93
93
|
{{ t('settings.riskPolicy.classRules.autoMergeOffWarning') }}
|
|
94
94
|
</p>
|
|
95
95
|
</div>
|
|
@@ -97,10 +97,10 @@ function setRule(changeClass: (typeof RULEABLE_CHANGE_CLASSES)[number], rule: Me
|
|
|
97
97
|
<div
|
|
98
98
|
v-for="row in rows"
|
|
99
99
|
:key="row.changeClass"
|
|
100
|
-
class="flex flex-wrap items-center gap-2 rounded-md border border-
|
|
100
|
+
class="flex flex-wrap items-center gap-2 rounded-md border border-muted/50 bg-default/30 px-2 py-1.5"
|
|
101
101
|
:data-testid="`merge-class-row-${row.changeClass}`"
|
|
102
102
|
>
|
|
103
|
-
<span class="min-w-[7rem] text-xs text-
|
|
103
|
+
<span class="min-w-[7rem] text-xs text-toned">{{ row.label }}</span>
|
|
104
104
|
<USelect
|
|
105
105
|
:model-value="row.rule"
|
|
106
106
|
:items="RULE_OPTIONS"
|
|
@@ -111,10 +111,7 @@ function setRule(changeClass: (typeof RULEABLE_CHANGE_CLASSES)[number], rule: Me
|
|
|
111
111
|
:data-testid="`merge-class-rule-${row.changeClass}`"
|
|
112
112
|
@update:model-value="setRule(row.changeClass, $event as MergeClassRule)"
|
|
113
113
|
/>
|
|
114
|
-
<span
|
|
115
|
-
class="text-[11px] text-slate-500"
|
|
116
|
-
:data-testid="`merge-class-record-${row.changeClass}`"
|
|
117
|
-
>
|
|
114
|
+
<span class="text-[11px] text-dimmed" :data-testid="`merge-class-record-${row.changeClass}`">
|
|
118
115
|
<template v-if="row.merged === 0">
|
|
119
116
|
{{ t('settings.riskPolicy.classRules.noData') }}
|
|
120
117
|
</template>
|
|
@@ -162,10 +162,10 @@ function setSubmissionClass(
|
|
|
162
162
|
<template>
|
|
163
163
|
<div data-testid="merge-role-policy" class="space-y-2">
|
|
164
164
|
<div>
|
|
165
|
-
<span class="block text-[10px] uppercase tracking-wide text-
|
|
165
|
+
<span class="block text-[10px] uppercase tracking-wide text-dimmed">
|
|
166
166
|
{{ t('settings.riskPolicy.roleRules.heading') }}
|
|
167
167
|
</span>
|
|
168
|
-
<p class="mt-0.5 text-[11px] leading-snug text-
|
|
168
|
+
<p class="mt-0.5 text-[11px] leading-snug text-dimmed">
|
|
169
169
|
{{ t('settings.riskPolicy.roleRules.help') }}
|
|
170
170
|
</p>
|
|
171
171
|
<!-- Auto-merge off already sends every pull request to a human, so the per-class narrowing
|
|
@@ -173,7 +173,7 @@ function setSubmissionClass(
|
|
|
173
173
|
MANUAL merge as well, which is the one thing the master switch leaves open. -->
|
|
174
174
|
<p
|
|
175
175
|
v-if="!autoMergeEnabled"
|
|
176
|
-
class="mt-1 text-[11px] leading-snug text-
|
|
176
|
+
class="mt-1 text-[11px] leading-snug text-app-warning-400/90"
|
|
177
177
|
data-testid="merge-role-auto-merge-off"
|
|
178
178
|
>
|
|
179
179
|
{{ t('settings.riskPolicy.roleRules.autoMergeOffWarning') }}
|
|
@@ -183,11 +183,11 @@ function setSubmissionClass(
|
|
|
183
183
|
<div
|
|
184
184
|
v-for="group in roles"
|
|
185
185
|
:key="group.role"
|
|
186
|
-
class="rounded-md border border-
|
|
186
|
+
class="rounded-md border border-muted/50 bg-default/30 px-2 py-1.5"
|
|
187
187
|
:data-testid="`merge-role-group-${group.role}`"
|
|
188
188
|
>
|
|
189
189
|
<div class="flex flex-wrap items-center gap-2">
|
|
190
|
-
<span class="min-w-[5rem] text-xs text-
|
|
190
|
+
<span class="min-w-[5rem] text-xs text-toned">{{ group.label }}</span>
|
|
191
191
|
<USwitch
|
|
192
192
|
:model-value="group.sandboxed"
|
|
193
193
|
size="sm"
|
|
@@ -218,7 +218,7 @@ function setSubmissionClass(
|
|
|
218
218
|
only, and a role can land nothing at all while showing "No class limits". -->
|
|
219
219
|
<span
|
|
220
220
|
v-if="group.submissionScoped"
|
|
221
|
-
class="text-[11px] text-
|
|
221
|
+
class="text-[11px] text-app-warning-400/90"
|
|
222
222
|
:data-testid="`merge-role-submission-badge-${group.role}`"
|
|
223
223
|
>
|
|
224
224
|
{{ t('settings.riskPolicy.roleRules.submissionBadge') }}
|
|
@@ -230,13 +230,13 @@ function setSubmissionClass(
|
|
|
230
230
|
row says which of the three is actually governing. -->
|
|
231
231
|
<p
|
|
232
232
|
v-if="group.sandboxed"
|
|
233
|
-
class="mt-1 text-[11px] leading-snug text-
|
|
233
|
+
class="mt-1 text-[11px] leading-snug text-app-warning-400/90"
|
|
234
234
|
:data-testid="`merge-role-sandbox-note-${group.role}`"
|
|
235
235
|
>
|
|
236
236
|
{{ t('settings.riskPolicy.roleRules.sandboxNote') }}
|
|
237
237
|
</p>
|
|
238
238
|
|
|
239
|
-
<div v-if="group.open" class="mt-2 space-y-2 border-t border-
|
|
239
|
+
<div v-if="group.open" class="mt-2 space-y-2 border-t border-default pt-2">
|
|
240
240
|
<!-- What this role may LAND at all. Above the class rules because it outranks them: a
|
|
241
241
|
class can be auto-mergeable under the rules and still outside this list, and then
|
|
242
242
|
nothing merges, through the review card's own button included. -->
|
|
@@ -249,7 +249,7 @@ function setSubmissionClass(
|
|
|
249
249
|
:data-testid="`merge-role-submission-${group.role}`"
|
|
250
250
|
@update:model-value="setSubmissionScoped(group.role, $event)"
|
|
251
251
|
/>
|
|
252
|
-
<p class="text-[11px] leading-snug text-
|
|
252
|
+
<p class="text-[11px] leading-snug text-dimmed">
|
|
253
253
|
{{ t('settings.riskPolicy.roleRules.submissionHelp') }}
|
|
254
254
|
</p>
|
|
255
255
|
<div v-if="group.submissionScoped" class="flex flex-wrap gap-x-4 gap-y-1">
|
|
@@ -268,18 +268,18 @@ function setSubmissionClass(
|
|
|
268
268
|
does rather than reading as a switch somebody forgot to fill in. -->
|
|
269
269
|
<p
|
|
270
270
|
v-if="group.submissionScoped && !group.submissionRows.some((r) => r.allowed)"
|
|
271
|
-
class="text-[11px] leading-snug text-
|
|
271
|
+
class="text-[11px] leading-snug text-app-warning-400/90"
|
|
272
272
|
:data-testid="`merge-role-submission-none-${group.role}`"
|
|
273
273
|
>
|
|
274
274
|
{{ t('settings.riskPolicy.roleRules.submissionNone') }}
|
|
275
275
|
</p>
|
|
276
276
|
</div>
|
|
277
277
|
|
|
278
|
-
<div class="space-y-1.5 border-t border-
|
|
279
|
-
<p class="text-[11px] leading-snug text-
|
|
278
|
+
<div class="space-y-1.5 border-t border-default/70 pt-2">
|
|
279
|
+
<p class="text-[11px] leading-snug text-dimmed">
|
|
280
280
|
{{ t('settings.riskPolicy.roleRules.classHeading') }}
|
|
281
281
|
</p>
|
|
282
|
-
<p v-if="!anyBaseRule" class="text-[11px] leading-snug text-
|
|
282
|
+
<p v-if="!anyBaseRule" class="text-[11px] leading-snug text-dimmed">
|
|
283
283
|
{{ t('settings.riskPolicy.roleRules.baseHint') }}
|
|
284
284
|
</p>
|
|
285
285
|
<div
|
|
@@ -288,7 +288,7 @@ function setSubmissionClass(
|
|
|
288
288
|
class="flex flex-wrap items-center gap-2"
|
|
289
289
|
:data-testid="`merge-role-row-${group.role}-${row.changeClass}`"
|
|
290
290
|
>
|
|
291
|
-
<span class="min-w-[7rem] text-xs text-
|
|
291
|
+
<span class="min-w-[7rem] text-xs text-muted">{{ row.label }}</span>
|
|
292
292
|
<USelect
|
|
293
293
|
:model-value="row.selected"
|
|
294
294
|
:items="row.items"
|
|
@@ -302,12 +302,12 @@ function setSubmissionClass(
|
|
|
302
302
|
"
|
|
303
303
|
/>
|
|
304
304
|
<!-- Nothing left to narrow: the base rule already routes this class to a human. -->
|
|
305
|
-
<span v-if="row.items.length === 1" class="text-[11px] text-
|
|
305
|
+
<span v-if="row.items.length === 1" class="text-[11px] text-dimmed">
|
|
306
306
|
{{ t('settings.riskPolicy.roleRules.alreadyStrictest') }}
|
|
307
307
|
</span>
|
|
308
308
|
<span
|
|
309
309
|
v-else-if="row.redundant"
|
|
310
|
-
class="text-[11px] text-
|
|
310
|
+
class="text-[11px] text-app-warning-400/90"
|
|
311
311
|
:data-testid="`merge-role-redundant-${group.role}-${row.changeClass}`"
|
|
312
312
|
>
|
|
313
313
|
{{ t('settings.riskPolicy.roleRules.redundant') }}
|
|
@@ -298,21 +298,19 @@ async function save() {
|
|
|
298
298
|
<Transition name="reader-fade">
|
|
299
299
|
<div
|
|
300
300
|
v-if="open"
|
|
301
|
-
class="fixed inset-0 z-50 flex max-h-[100dvh] flex-col bg-
|
|
301
|
+
class="fixed inset-0 z-50 flex max-h-[100dvh] flex-col bg-app-950/96 backdrop-blur-sm"
|
|
302
302
|
role="dialog"
|
|
303
303
|
aria-modal="true"
|
|
304
304
|
>
|
|
305
|
-
<header class="flex items-center gap-3 border-b border-
|
|
306
|
-
<div
|
|
307
|
-
class="
|
|
308
|
-
>
|
|
309
|
-
<UIcon name="i-lucide-cpu" class="h-5 w-5 text-indigo-300" />
|
|
305
|
+
<header class="flex items-center gap-3 border-b border-default px-6 py-4">
|
|
306
|
+
<div class="flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-primary/15">
|
|
307
|
+
<UIcon name="i-lucide-cpu" class="h-5 w-5 text-primary" />
|
|
310
308
|
</div>
|
|
311
309
|
<div class="min-w-0">
|
|
312
|
-
<h1 class="truncate text-base font-semibold text-
|
|
310
|
+
<h1 class="truncate text-base font-semibold text-highlighted">
|
|
313
311
|
{{ t('settings.modelConfiguration.title') }}
|
|
314
312
|
</h1>
|
|
315
|
-
<p class="truncate text-xs text-
|
|
313
|
+
<p class="truncate text-xs text-dimmed">
|
|
316
314
|
{{ t('settings.modelConfiguration.subtitle') }}
|
|
317
315
|
</p>
|
|
318
316
|
</div>
|
|
@@ -352,14 +350,14 @@ async function save() {
|
|
|
352
350
|
<!-- ===== list view ===== -->
|
|
353
351
|
<template v-if="!editor">
|
|
354
352
|
<div class="flex items-center justify-between">
|
|
355
|
-
<p class="text-sm leading-relaxed text-
|
|
353
|
+
<p class="text-sm leading-relaxed text-muted">
|
|
356
354
|
<i18n-t
|
|
357
355
|
keypath="settings.modelConfiguration.list.intro"
|
|
358
356
|
scope="global"
|
|
359
357
|
tag="span"
|
|
360
358
|
>
|
|
361
359
|
<template #baseModel>
|
|
362
|
-
<span class="text-
|
|
360
|
+
<span class="text-toned">{{
|
|
363
361
|
t('settings.modelConfiguration.list.introBaseModel')
|
|
364
362
|
}}</span>
|
|
365
363
|
</template>
|
|
@@ -376,7 +374,7 @@ async function save() {
|
|
|
376
374
|
</UButton>
|
|
377
375
|
</div>
|
|
378
376
|
|
|
379
|
-
<p v-if="models.models.length === 0" class="py-4 text-center text-sm text-
|
|
377
|
+
<p v-if="models.models.length === 0" class="py-4 text-center text-sm text-dimmed">
|
|
380
378
|
{{ t('settings.modelConfiguration.list.loadingCatalog') }}
|
|
381
379
|
</p>
|
|
382
380
|
|
|
@@ -384,10 +382,10 @@ async function save() {
|
|
|
384
382
|
<div
|
|
385
383
|
v-for="p in sortedPresets"
|
|
386
384
|
:key="p.id"
|
|
387
|
-
class="rounded-xl border border-
|
|
385
|
+
class="rounded-xl border border-default bg-default/50 p-4"
|
|
388
386
|
>
|
|
389
387
|
<div class="flex items-center gap-2">
|
|
390
|
-
<span class="truncate text-sm font-semibold text-
|
|
388
|
+
<span class="truncate text-sm font-semibold text-app-100">{{ p.name }}</span>
|
|
391
389
|
<UBadge v-if="p.isDefault" color="primary" variant="subtle" size="xs">
|
|
392
390
|
{{ t('settings.modelConfiguration.list.default') }}
|
|
393
391
|
</UBadge>
|
|
@@ -426,9 +424,9 @@ async function save() {
|
|
|
426
424
|
/>
|
|
427
425
|
</div>
|
|
428
426
|
</div>
|
|
429
|
-
<div class="mt-1.5 text-[11px] text-
|
|
427
|
+
<div class="mt-1.5 text-[11px] text-muted">
|
|
430
428
|
{{ t('settings.modelConfiguration.list.basePrefix') }}
|
|
431
|
-
<span class="text-
|
|
429
|
+
<span class="text-toned">{{ modelLabel(p.baseModelId) }}</span>
|
|
432
430
|
<span v-if="Object.keys(p.overrides).length">
|
|
433
431
|
·
|
|
434
432
|
{{
|
|
@@ -442,15 +440,12 @@ async function save() {
|
|
|
442
440
|
<!-- A custom route order changes which provider the same model runs on, so the
|
|
443
441
|
list says so rather than leaving it visible only inside the editor (which
|
|
444
442
|
basic mode hides). -->
|
|
445
|
-
<span v-if="p.providerPreference?.length" class="text-
|
|
443
|
+
<span v-if="p.providerPreference?.length" class="text-toned">
|
|
446
444
|
· {{ t('settings.modelConfiguration.list.customRouteOrder') }}
|
|
447
445
|
</span>
|
|
448
446
|
</div>
|
|
449
447
|
</div>
|
|
450
|
-
<p
|
|
451
|
-
v-if="sortedPresets.length === 0"
|
|
452
|
-
class="py-6 text-center text-sm text-slate-500"
|
|
453
|
-
>
|
|
448
|
+
<p v-if="sortedPresets.length === 0" class="py-6 text-center text-sm text-dimmed">
|
|
454
449
|
{{ t('settings.modelConfiguration.list.empty') }}
|
|
455
450
|
</p>
|
|
456
451
|
</div>
|
|
@@ -463,10 +458,10 @@ async function save() {
|
|
|
463
458
|
|
|
464
459
|
<!-- ===== editor view ===== -->
|
|
465
460
|
<template v-else>
|
|
466
|
-
<div class="space-y-4 rounded-xl border border-
|
|
461
|
+
<div class="space-y-4 rounded-xl border border-default bg-default/50 p-4">
|
|
467
462
|
<div>
|
|
468
463
|
<label
|
|
469
|
-
class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-
|
|
464
|
+
class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-muted"
|
|
470
465
|
>
|
|
471
466
|
{{ t('settings.modelConfiguration.editor.nameLabel') }}
|
|
472
467
|
</label>
|
|
@@ -480,7 +475,7 @@ async function save() {
|
|
|
480
475
|
|
|
481
476
|
<div>
|
|
482
477
|
<label
|
|
483
|
-
class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-
|
|
478
|
+
class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-muted"
|
|
484
479
|
>
|
|
485
480
|
{{ t('settings.modelConfiguration.editor.baseModelLabel') }}
|
|
486
481
|
</label>
|
|
@@ -500,7 +495,7 @@ async function save() {
|
|
|
500
495
|
</UDropdownMenu>
|
|
501
496
|
</div>
|
|
502
497
|
|
|
503
|
-
<label class="flex items-center gap-2 text-sm text-
|
|
498
|
+
<label class="flex items-center gap-2 text-sm text-toned">
|
|
504
499
|
<UCheckbox v-model="editor.isDefault" />
|
|
505
500
|
{{ t('settings.modelConfiguration.editor.makeDefault') }}
|
|
506
501
|
</label>
|
|
@@ -519,7 +514,7 @@ async function save() {
|
|
|
519
514
|
|
|
520
515
|
<div>
|
|
521
516
|
<div class="mb-1 flex items-start justify-between gap-3">
|
|
522
|
-
<span class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
517
|
+
<span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
523
518
|
{{ t('settings.modelConfiguration.editor.perAgentOverrides') }}
|
|
524
519
|
</span>
|
|
525
520
|
<AgentTierSelect class="w-56 shrink-0" :hidden-count="hiddenByTier" />
|
|
@@ -531,9 +526,7 @@ async function save() {
|
|
|
531
526
|
:placeholder="t('settings.modelConfiguration.editor.filterPlaceholder')"
|
|
532
527
|
class="mb-3 w-full"
|
|
533
528
|
/>
|
|
534
|
-
<div
|
|
535
|
-
class="divide-y divide-slate-800 rounded-xl border border-slate-800 bg-slate-900/50"
|
|
536
|
-
>
|
|
529
|
+
<div class="divide-y divide-default rounded-xl border border-default bg-default/50">
|
|
537
530
|
<div
|
|
538
531
|
v-for="a in filteredKinds"
|
|
539
532
|
:key="a.kind"
|
|
@@ -546,7 +539,7 @@ async function save() {
|
|
|
546
539
|
:title="a.description"
|
|
547
540
|
/>
|
|
548
541
|
<div class="min-w-0 flex-1" :title="a.description">
|
|
549
|
-
<p class="truncate text-sm text-
|
|
542
|
+
<p class="truncate text-sm text-default">{{ a.label }}</p>
|
|
550
543
|
</div>
|
|
551
544
|
<UDropdownMenu
|
|
552
545
|
:items="overrideMenu(a.kind)"
|
|
@@ -565,7 +558,7 @@ async function save() {
|
|
|
565
558
|
</div>
|
|
566
559
|
<p
|
|
567
560
|
v-if="filteredKinds.length === 0"
|
|
568
|
-
class="px-4 py-6 text-center text-sm text-
|
|
561
|
+
class="px-4 py-6 text-center text-sm text-dimmed"
|
|
569
562
|
>
|
|
570
563
|
{{ t('settings.modelConfiguration.editor.noAgentsMatch', { filter }) }}
|
|
571
564
|
</p>
|
|
@@ -59,8 +59,8 @@ const reseedableCount = computed(
|
|
|
59
59
|
<template>
|
|
60
60
|
<UModal v-model:open="open" :title="t('modelPreset.health.title')" :ui="{ content: 'max-w-2xl' }">
|
|
61
61
|
<template #body>
|
|
62
|
-
<div v-if="!hasIssues" class="py-6 text-center text-sm text-
|
|
63
|
-
<UIcon name="i-lucide-check-circle-2" class="mx-auto mb-2 h-8 w-8 text-
|
|
62
|
+
<div v-if="!hasIssues" class="py-6 text-center text-sm text-muted">
|
|
63
|
+
<UIcon name="i-lucide-check-circle-2" class="mx-auto mb-2 h-8 w-8 text-app-success-400" />
|
|
64
64
|
{{ t('modelPreset.health.allValid') }}
|
|
65
65
|
</div>
|
|
66
66
|
|
|
@@ -68,20 +68,20 @@ const reseedableCount = computed(
|
|
|
68
68
|
<!-- New built-in presets the workspace can add. -->
|
|
69
69
|
<section v-if="newPresets.length" class="space-y-2">
|
|
70
70
|
<div class="flex items-center gap-2">
|
|
71
|
-
<UIcon name="i-lucide-sparkles" class="h-4 w-4 text-
|
|
72
|
-
<h3 class="text-sm font-semibold text-
|
|
71
|
+
<UIcon name="i-lucide-sparkles" class="h-4 w-4 text-app-success-400" />
|
|
72
|
+
<h3 class="text-sm font-semibold text-default">
|
|
73
73
|
{{ t('modelPreset.health.newHeading') }}
|
|
74
74
|
</h3>
|
|
75
75
|
</div>
|
|
76
|
-
<p class="text-[11px] text-
|
|
76
|
+
<p class="text-[11px] text-dimmed">{{ t('modelPreset.health.newDescription') }}</p>
|
|
77
77
|
<ul class="space-y-2">
|
|
78
78
|
<li
|
|
79
79
|
v-for="i in newPresets"
|
|
80
80
|
:key="i.id"
|
|
81
|
-
class="flex items-center justify-between gap-3 rounded-lg border border-
|
|
81
|
+
class="flex items-center justify-between gap-3 rounded-lg border border-default bg-default/40 p-3"
|
|
82
82
|
>
|
|
83
83
|
<div class="min-w-0">
|
|
84
|
-
<span class="truncate text-sm font-medium text-
|
|
84
|
+
<span class="truncate text-sm font-medium text-app-100 capitalize">{{
|
|
85
85
|
i.name
|
|
86
86
|
}}</span>
|
|
87
87
|
</div>
|
|
@@ -103,21 +103,23 @@ const reseedableCount = computed(
|
|
|
103
103
|
<!-- Outdated built-ins: a newer catalog version is available. -->
|
|
104
104
|
<section v-if="outdated.length" class="space-y-2">
|
|
105
105
|
<div class="flex items-center gap-2">
|
|
106
|
-
<UIcon name="i-lucide-arrow-up-circle" class="h-4 w-4 text-
|
|
107
|
-
<h3 class="text-sm font-semibold text-
|
|
106
|
+
<UIcon name="i-lucide-arrow-up-circle" class="h-4 w-4 text-app-warning-400" />
|
|
107
|
+
<h3 class="text-sm font-semibold text-default">
|
|
108
108
|
{{ t('modelPreset.health.updatesHeading') }}
|
|
109
109
|
</h3>
|
|
110
110
|
</div>
|
|
111
|
-
<p class="text-[11px] text-
|
|
111
|
+
<p class="text-[11px] text-dimmed">
|
|
112
|
+
{{ t('modelPreset.health.updatesDescription') }}
|
|
113
|
+
</p>
|
|
112
114
|
<ul class="space-y-2">
|
|
113
115
|
<li
|
|
114
116
|
v-for="i in outdated"
|
|
115
117
|
:key="i.id"
|
|
116
|
-
class="flex items-center justify-between gap-3 rounded-lg border border-
|
|
118
|
+
class="flex items-center justify-between gap-3 rounded-lg border border-default bg-default/40 p-3"
|
|
117
119
|
>
|
|
118
120
|
<div class="min-w-0">
|
|
119
|
-
<span class="truncate text-sm font-medium text-
|
|
120
|
-
<p class="text-[11px] text-
|
|
121
|
+
<span class="truncate text-sm font-medium text-app-100">{{ i.name }}</span>
|
|
122
|
+
<p class="text-[11px] text-app-warning-400/80">
|
|
121
123
|
{{
|
|
122
124
|
t('modelPreset.health.versionAvailable', {
|
|
123
125
|
from: i.fromVersion ?? 0,
|
|
@@ -160,7 +160,7 @@ const connectedLabel = computed(() => {
|
|
|
160
160
|
<i18n-t
|
|
161
161
|
keypath="settings.observabilityConnection.intro"
|
|
162
162
|
tag="p"
|
|
163
|
-
class="text-sm text-
|
|
163
|
+
class="text-sm text-muted"
|
|
164
164
|
scope="global"
|
|
165
165
|
>
|
|
166
166
|
<template #gate>
|
|
@@ -168,7 +168,7 @@ const connectedLabel = computed(() => {
|
|
|
168
168
|
</template>
|
|
169
169
|
</i18n-t>
|
|
170
170
|
|
|
171
|
-
<section class="space-y-3 rounded-lg border border-
|
|
171
|
+
<section class="space-y-3 rounded-lg border border-muted p-3">
|
|
172
172
|
<div class="flex items-center justify-between">
|
|
173
173
|
<h3 class="text-sm font-semibold">
|
|
174
174
|
{{ t('settings.observabilityConnection.connection.heading') }}
|
|
@@ -222,7 +222,7 @@ const connectedLabel = computed(() => {
|
|
|
222
222
|
already opened from the same monitors/SLOs. -->
|
|
223
223
|
<section
|
|
224
224
|
v-if="store.incidentAvailable !== false"
|
|
225
|
-
class="space-y-3 rounded-lg border border-
|
|
225
|
+
class="space-y-3 rounded-lg border border-muted p-3"
|
|
226
226
|
>
|
|
227
227
|
<div class="flex items-center justify-between">
|
|
228
228
|
<h3 class="text-sm font-semibold">
|
|
@@ -236,7 +236,7 @@ const connectedLabel = computed(() => {
|
|
|
236
236
|
}}
|
|
237
237
|
</UBadge>
|
|
238
238
|
</div>
|
|
239
|
-
<p class="text-[11px] text-
|
|
239
|
+
<p class="text-[11px] text-muted">
|
|
240
240
|
{{ t('settings.observabilityConnection.incident.description') }}
|
|
241
241
|
</p>
|
|
242
242
|
|