@cat-factory/app 0.302.2 → 0.303.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/app/app.config.ts +19 -10
- package/app/assets/css/main.css +13 -13
- package/app/assets/css/prose.css +22 -22
- package/app/assets/css/tokens.css +298 -0
- package/app/components/assistant/AssistantModal.vue +22 -22
- package/app/components/auth/AuthGate.vue +1 -1
- package/app/components/auth/BackendMisconfiguredScreen.vue +10 -10
- package/app/components/auth/LoginScreen.vue +34 -36
- package/app/components/auth/ResetPasswordScreen.vue +12 -12
- package/app/components/auth/UserMenu.vue +4 -4
- package/app/components/binaryCandidates/BinaryCandidatesWindow.vue +27 -25
- package/app/components/binaryOutput/BinaryOutputReport.vue +15 -15
- package/app/components/binaryOutput/StoredAssetView.vue +5 -5
- package/app/components/board/AddTaskModal.vue +17 -20
- package/app/components/board/AgentFailureCard.vue +11 -11
- package/app/components/board/AgentFailureHistory.vue +2 -2
- package/app/components/board/BoardCanvas.vue +6 -5
- package/app/components/board/CreateInitiativeModal.vue +8 -10
- package/app/components/board/DependencyConnectOverlay.vue +1 -1
- package/app/components/board/FailureHistoryList.vue +7 -7
- package/app/components/board/RecurringPipelineModal.vue +17 -17
- package/app/components/board/ReviewFrictionDialog.vue +6 -6
- package/app/components/board/StepExecutionHistory.vue +13 -13
- package/app/components/board/TaskDependencyEdges.vue +8 -8
- package/app/components/board/nodes/AgentChip.vue +10 -10
- package/app/components/board/nodes/BlockNode.vue +29 -29
- package/app/components/board/nodes/DecisionBadge.vue +2 -2
- package/app/components/board/nodes/EpicNode.vue +14 -10
- package/app/components/board/nodes/FrameSwimlanes.vue +7 -9
- package/app/components/board/nodes/InitiativeCard.vue +8 -8
- package/app/components/board/nodes/LaneGroup.vue +1 -1
- package/app/components/board/nodes/LaneTask.vue +2 -2
- package/app/components/board/nodes/ResizeGrips.vue +4 -4
- package/app/components/board/nodes/TaskCard.vue +18 -18
- package/app/components/board/nodes/TaskLane.vue +5 -5
- package/app/components/board/nodes/TaskPipelineMini.vue +18 -18
- package/app/components/bootstrap/AdoptionReviewModal.vue +29 -26
- package/app/components/bootstrap/BootstrapModal.vue +21 -23
- package/app/components/bootstrap/BootstrapRunSteps.vue +1 -1
- package/app/components/brainstorm/BrainstormWindow.vue +30 -33
- package/app/components/bugFishing/BugFishingWindow.vue +49 -49
- package/app/components/clarity/ClarityReviewWindow.vue +30 -30
- package/app/components/common/AsyncViewError.vue +5 -5
- package/app/components/common/ClarificationItem.vue +8 -13
- package/app/components/common/ConfirmDialog.vue +4 -2
- package/app/components/common/DescriptorFields.vue +1 -1
- package/app/components/common/EmptyState.vue +3 -3
- package/app/components/common/InterviewGateNotice.vue +7 -7
- package/app/components/common/KeyboardShortcutsHelp.vue +1 -1
- package/app/components/common/MarkdownProse.vue +14 -13
- package/app/components/consensus/ConsensusSessionWindow.vue +26 -26
- package/app/components/context/ContextAttachmentFields.vue +17 -17
- package/app/components/docs/DocInterviewWindow.vue +14 -14
- package/app/components/documents/ContextDocumentPicker.vue +17 -17
- package/app/components/documents/DocumentImportModal.vue +7 -7
- package/app/components/documents/DocumentSourceConnectModal.vue +3 -3
- package/app/components/documents/DocumentSyncState.vue +5 -5
- package/app/components/documents/DocumentTemplatesModal.vue +15 -15
- package/app/components/documents/RepoContextDocPicker.vue +5 -5
- package/app/components/documents/SpawnPreviewModal.vue +12 -12
- package/app/components/documents/StartFromDesignModal.vue +11 -11
- package/app/components/documents/TaskContextDocs.vue +5 -5
- package/app/components/environments/EnvSetupStepper.vue +6 -6
- package/app/components/environments/EnvironmentStatusPanel.vue +17 -17
- package/app/components/environments/steps/EnvPickStep.vue +3 -3
- package/app/components/environments/steps/EnvPreflightStep.vue +9 -9
- package/app/components/environments/steps/EnvReviewStep.vue +25 -22
- package/app/components/environments/steps/EnvSaveStep.vue +7 -5
- package/app/components/environments/steps/JourneyStepNav.vue +1 -1
- package/app/components/focus/BlockFocusView.vue +17 -19
- package/app/components/followUp/FollowUpWindow.vue +23 -23
- package/app/components/forkDecision/ForkDecisionWindow.vue +37 -39
- package/app/components/foundational/FoundationalContractSummary.vue +7 -7
- package/app/components/foundational/FoundationalServiceCatalogList.vue +11 -11
- package/app/components/foundational/FoundationalServiceManager.vue +1 -1
- package/app/components/foundational/FoundationalServiceRegistry.vue +13 -13
- package/app/components/foundational/FoundationalServiceSources.vue +13 -13
- package/app/components/foundational/FoundationalSuppressions.vue +7 -7
- package/app/components/foundational/ServiceCatalogConnection.vue +10 -10
- package/app/components/fragments/FragmentLibraryManager.vue +41 -44
- package/app/components/fragments/FragmentSelector.vue +13 -13
- package/app/components/fragments/GitHubDocUrlImport.vue +1 -1
- package/app/components/gates/GateFailingCheckList.vue +5 -5
- package/app/components/gates/GateResultView.vue +50 -47
- package/app/components/github/AddServiceFromRepoModal.vue +14 -14
- package/app/components/github/BranchProtectionPreflight.vue +13 -13
- package/app/components/github/GitHubConnect.vue +7 -7
- package/app/components/github/GitHubOnboarding.vue +7 -7
- package/app/components/github/GitHubPanel.vue +37 -40
- package/app/components/github/RepoTreeBrowser.vue +18 -18
- package/app/components/humanTest/HumanTestWindow.vue +30 -33
- package/app/components/initiative/InitiativePlanNotice.vue +5 -5
- package/app/components/initiative/InitiativePlanReview.vue +27 -29
- package/app/components/initiative/InitiativePlanningWindow.vue +10 -10
- package/app/components/initiative/InitiativeTrackerWindow.vue +71 -65
- package/app/components/inputGate/InputGateNotice.vue +2 -4
- package/app/components/judge/JudgeResultView.vue +30 -32
- package/app/components/kaizen/KaizenPanel.vue +40 -36
- package/app/components/kaizen/KaizenStepStatus.vue +21 -21
- package/app/components/layout/AccountAuditLog.vue +10 -10
- package/app/components/layout/AccountDeploymentSettings.vue +20 -20
- package/app/components/layout/AccountFailureKindRules.vue +13 -13
- package/app/components/layout/AccountFoundationalSettings.vue +1 -1
- package/app/components/layout/AccountFragmentSettings.vue +1 -1
- package/app/components/layout/AccountModelPolicySettings.vue +9 -9
- package/app/components/layout/AccountPlatformAlertSettings.vue +11 -11
- package/app/components/layout/AccountRiskPolicySettings.vue +2 -2
- package/app/components/layout/AccountRunCredentialSettings.vue +5 -5
- package/app/components/layout/AccountSkillSettings.vue +1 -1
- package/app/components/layout/AccountTeamSettings.vue +23 -15
- package/app/components/layout/AiProvidersBanner.vue +11 -8
- package/app/components/layout/AppearanceSwitcher.vue +108 -0
- package/app/components/layout/BoardSwitcher.vue +8 -11
- package/app/components/layout/BoardToolbar.vue +3 -3
- package/app/components/layout/CommandBar.vue +7 -9
- package/app/components/layout/ConnectionStatusBanner.vue +2 -2
- package/app/components/layout/DefaultTestEnvBanner.vue +5 -5
- package/app/components/layout/GitHubPatBanner.vue +5 -5
- package/app/components/layout/GitHubPatPermissionsBanner.vue +16 -10
- package/app/components/layout/InfraSetupBanner.vue +6 -6
- package/app/components/layout/IntegrationsHub.vue +15 -15
- package/app/components/layout/LanguageSwitcher.vue +5 -5
- package/app/components/layout/ModelProvidersHub.vue +13 -16
- package/app/components/layout/NotificationsInbox.vue +10 -10
- package/app/components/layout/PersonalSetupModal.vue +8 -8
- package/app/components/layout/ProviderConfigBanner.vue +4 -4
- package/app/components/layout/RolePrompt.vue +7 -7
- package/app/components/layout/SideBar.vue +6 -4
- package/app/components/layout/SpendWarningBanner.vue +17 -14
- package/app/components/layout/TranslationWarningBanner.vue +4 -4
- package/app/components/layout/UiModeSwitcher.vue +13 -13
- package/app/components/layout/UiRoleSwitcher.vue +8 -8
- package/app/components/layout/WorkspaceMembersSettings.vue +15 -11
- package/app/components/media/ArtifactLightbox.vue +13 -13
- package/app/components/media/ImageCompare.vue +31 -24
- package/app/components/merge/MergeEffortChips.vue +2 -2
- package/app/components/notifications/NotificationSettingsPanel.vue +14 -12
- package/app/components/observability/OutcomeFilterChips.vue +6 -6
- package/app/components/observability/RunFailureSummary.vue +28 -25
- package/app/components/observability/StepMetricsBar.vue +26 -28
- package/app/components/observability/StepModelActivity.vue +2 -2
- package/app/components/observability/ToolCallList.vue +24 -24
- package/app/components/outcome/OutcomeSummaryWindow.vue +47 -47
- package/app/components/palettes/AgentPalette.vue +8 -8
- package/app/components/palettes/AgentTierSelect.vue +1 -1
- package/app/components/palettes/PipelinePurposeSelect.vue +1 -1
- package/app/components/panels/AgentStepDetail.vue +52 -51
- package/app/components/panels/AttemptEntryHeader.vue +4 -6
- package/app/components/panels/DecisionModal.vue +7 -7
- package/app/components/panels/GenericStructuredResultView.vue +7 -7
- package/app/components/panels/InspectorPanel.vue +17 -17
- package/app/components/panels/MergerResultView.vue +19 -19
- package/app/components/panels/ObservabilityPanel.vue +115 -123
- package/app/components/panels/OperatorDashboardPanel.vue +89 -97
- package/app/components/panels/ReportsPanel.vue +69 -66
- package/app/components/panels/ReportsSpendBreakdown.vue +9 -9
- package/app/components/panels/ResultWindowShell.vue +38 -38
- package/app/components/panels/RunDetailLoadState.vue +2 -2
- package/app/components/panels/StepContainerStatus.vue +9 -9
- package/app/components/panels/StepDelegatedStatus.logic.spec.ts +135 -0
- package/app/components/panels/StepDelegatedStatus.logic.ts +160 -0
- package/app/components/panels/StepDelegatedStatus.vue +181 -0
- package/app/components/panels/StepEffortReport.vue +16 -15
- package/app/components/panels/StepFragmentAdherence.vue +14 -10
- package/app/components/panels/StepMetadataCard.vue +74 -45
- package/app/components/panels/StepReproductionReport.vue +25 -21
- package/app/components/panels/StepRunMeta.vue +20 -20
- package/app/components/panels/StepTestReport.logic.spec.ts +8 -3
- package/app/components/panels/StepTestReport.logic.ts +4 -4
- package/app/components/panels/StepTestReport.vue +28 -28
- package/app/components/panels/StepToolServers.vue +14 -11
- package/app/components/panels/StepValidationReport.vue +7 -7
- package/app/components/panels/inspector/ContainerSummary.vue +9 -9
- package/app/components/panels/inspector/DocReferenceRepos.vue +3 -3
- package/app/components/panels/inspector/EnvProbeReport.vue +24 -27
- package/app/components/panels/inspector/EpicChildren.vue +8 -12
- package/app/components/panels/inspector/FrontendBindingsResolved.vue +11 -11
- package/app/components/panels/inspector/FrontendConfig.vue +37 -41
- package/app/components/panels/inspector/InitiativeInspector.vue +3 -3
- package/app/components/panels/inspector/InspectorSection.vue +6 -6
- package/app/components/panels/inspector/RecurringScheduleSettings.vue +16 -19
- package/app/components/panels/inspector/ServiceConnections.vue +2 -2
- package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -2
- package/app/components/panels/inspector/ServiceSelfTests.vue +21 -17
- package/app/components/panels/inspector/ServiceTestConfig.vue +51 -59
- package/app/components/panels/inspector/ServiceTestSecrets.vue +5 -5
- package/app/components/panels/inspector/ServiceTestingContext.vue +3 -3
- package/app/components/panels/inspector/ServiceValidationConfig.vue +2 -2
- package/app/components/panels/inspector/TaskAgentConfig.vue +3 -3
- package/app/components/panels/inspector/TaskAprioriBranches.vue +8 -5
- package/app/components/panels/inspector/TaskDependencies.vue +1 -1
- package/app/components/panels/inspector/TaskEstimateBadge.vue +11 -11
- package/app/components/panels/inspector/TaskExecution.vue +17 -17
- package/app/components/panels/inspector/TaskReviewTarget.vue +2 -2
- package/app/components/panels/inspector/TaskRunSettings.vue +35 -37
- package/app/components/panels/inspector/TaskStructure.vue +3 -3
- package/app/components/pipeline/AgentKindIcon.vue +1 -1
- package/app/components/pipeline/AgentPromptEditor.vue +17 -17
- package/app/components/pipeline/BinaryOutputStepPicker.vue +42 -56
- package/app/components/pipeline/EstimateThresholdFields.vue +4 -4
- package/app/components/pipeline/GateConfigFields.vue +13 -10
- package/app/components/pipeline/IterationCapPrompt.vue +4 -2
- package/app/components/pipeline/PipelineBuilder.vue +47 -55
- package/app/components/pipeline/PipelineHealthModal.vue +27 -29
- package/app/components/pipeline/PipelinePicker.vue +10 -10
- package/app/components/pipeline/PipelinePreview.vue +10 -10
- package/app/components/pipeline/PipelineProgress.vue +64 -67
- package/app/components/prReview/PrReviewPhaseBadge.vue +7 -7
- package/app/components/prReview/PrReviewWindow.vue +75 -77
- package/app/components/providers/AiPresetMismatchDialog.vue +5 -5
- package/app/components/providers/AiProviderOnboardingModal.vue +9 -9
- package/app/components/providers/ApiKeysSection.vue +13 -13
- package/app/components/providers/PersonalCredentialModal.vue +2 -2
- package/app/components/providers/PersonalSubscriptionSection.vue +10 -10
- package/app/components/providers/SignInRequiredNotice.vue +1 -1
- package/app/components/providers/VendorCredentialsModal.vue +10 -10
- package/app/components/provisioning/ProvisioningLogsDrawer.vue +13 -13
- package/app/components/ralph/RalphLoopResultView.vue +28 -30
- package/app/components/recurring/RecurrenceEditor.vue +2 -2
- package/app/components/requirements/RequirementsReviewWindow.vue +51 -58
- package/app/components/riskPolicy/RiskPolicyPicker.vue +12 -15
- package/app/components/riskPolicy/RiskPolicyPreview.vue +14 -14
- package/app/components/sandbox/SandboxPanel.vue +58 -59
- package/app/components/settings/AccountSettingsPanel.vue +1 -1
- package/app/components/settings/ApiTokensPanel.vue +10 -10
- package/app/components/settings/BudgetSettings.vue +18 -22
- package/app/components/settings/CapabilityCredentialsPanel.vue +15 -15
- package/app/components/settings/CloudflareHandlerSection.vue +20 -20
- package/app/components/settings/ComposeEnvironmentSetupSection.vue +13 -13
- package/app/components/settings/ConnectionTestVerdict.vue +3 -3
- package/app/components/settings/ConnectionWarnings.vue +1 -1
- package/app/components/settings/ConsensusGroupsSection.vue +27 -35
- package/app/components/settings/CustomManifestTypeEditor.vue +10 -10
- package/app/components/settings/DefaultProvisionTypeSection.vue +6 -6
- package/app/components/settings/InfraHandlersConfigurator.vue +24 -22
- package/app/components/settings/InfrastructureBackendPicker.vue +6 -6
- package/app/components/settings/InfrastructureWindow.vue +5 -5
- package/app/components/settings/IssueTrackerPanel.vue +29 -23
- package/app/components/settings/KubernetesEngineForm.vue +11 -11
- package/app/components/settings/KubernetesEnvironmentForm.vue +4 -4
- package/app/components/settings/LocalContainerPoolSettings.vue +6 -11
- package/app/components/settings/LocalModelEndpointsPanel.vue +20 -18
- package/app/components/settings/McpAuthorizeScreen.vue +13 -15
- package/app/components/settings/McpOAuthCallbackScreen.vue +16 -10
- package/app/components/settings/MergeClassRulesEditor.vue +6 -9
- package/app/components/settings/MergeRolePolicyEditor.vue +16 -16
- package/app/components/settings/ModelConfigurationPanel.vue +23 -30
- package/app/components/settings/ModelPresetHealthModal.vue +15 -13
- package/app/components/settings/ObservabilityConnectionPanel.vue +4 -4
- package/app/components/settings/OpenRouterCatalogPanel.vue +23 -19
- package/app/components/settings/PackageRegistriesPanel.vue +8 -8
- package/app/components/settings/ProviderConnectionTab.vue +8 -11
- package/app/components/settings/ProviderManifestEditor.vue +9 -9
- package/app/components/settings/ProviderPreferenceEditor.vue +8 -8
- package/app/components/settings/RiskPolicyCreateForm.vue +10 -10
- package/app/components/settings/RiskPolicyEditorRow.vue +14 -14
- package/app/components/settings/RiskPolicyHealthModal.vue +15 -13
- package/app/components/settings/RiskPolicyInheritedRow.vue +1 -1
- package/app/components/settings/RiskPolicyPanel.vue +10 -15
- package/app/components/settings/ServiceFragmentDefaultsPanel.vue +7 -7
- package/app/components/settings/SharedStacksPanel.vue +9 -12
- package/app/components/settings/TaskSourceCard.vue +4 -4
- package/app/components/settings/TaskTypeSuppressionsPanel.vue +6 -6
- package/app/components/settings/ToolServerChecklist.vue +36 -29
- package/app/components/settings/UsageSettings.vue +15 -15
- package/app/components/settings/UserSecretsSection.vue +9 -12
- package/app/components/settings/WorkspaceMetadataSettings.vue +5 -5
- package/app/components/settings/WorkspaceSettingsPanel.vue +47 -47
- package/app/components/skills/ReviewSkillQueue.vue +10 -10
- package/app/components/skills/SkillLibraryManager.vue +23 -20
- package/app/components/slack/SlackPanel.vue +13 -17
- package/app/components/spec/ServiceSpecWindow.vue +45 -42
- package/app/components/tasks/BugHuntModal.vue +24 -27
- package/app/components/tasks/ContextIssuePicker.vue +11 -11
- package/app/components/tasks/TaskContextIssues.vue +3 -3
- package/app/components/tasks/TaskImportModal.vue +7 -7
- package/app/components/tasks/TaskSourceConnectModal.vue +10 -8
- package/app/components/testing/TestReportWindow.vue +99 -82
- package/app/components/theme/ThemeImportModal.vue +115 -0
- package/app/components/tutorial/TutorialCatalogue.vue +9 -9
- package/app/components/tutorial/TutorialNudge.vue +5 -5
- package/app/components/tutorial/TutorialOverlay.vue +12 -12
- package/app/components/tutorial/TutorialPrompt.vue +6 -9
- package/app/components/vcs/GitLabConnect.vue +4 -4
- package/app/components/vcs/VcsConnectSurfaces.vue +2 -2
- package/app/components/visualConfirm/VisualConfirmationWindow.vue +36 -36
- package/app/composables/api/client.ts +6 -1
- package/app/composables/usePipelineErrorToast.ts +17 -0
- package/app/modular/agent-kinds.ts +24 -0
- package/app/pages/index.vue +5 -5
- package/app/plugins/theme.client.ts +125 -0
- package/app/spa-loading-template.html +52 -14
- package/app/stores/agents.ts +1 -1
- package/app/stores/theme.spec.ts +56 -0
- package/app/stores/theme.ts +87 -0
- package/app/types/domain.ts +19 -0
- package/app/types/execution.ts +4 -0
- package/app/utils/agentOutput.ts +1 -1
- package/app/utils/binaryOutput.ts +6 -6
- package/app/utils/bootstrapSteps.ts +14 -14
- package/app/utils/catalog.ts +87 -83
- package/app/utils/colorTint.ts +10 -0
- package/app/utils/failureKinds.ts +1 -0
- package/app/utils/observability.ts +3 -3
- package/app/utils/pipelineRender.ts +13 -17
- package/app/utils/swimlanes.ts +4 -4
- package/app/utils/theme/bootPalette.spec.ts +54 -0
- package/app/utils/theme/bootPalette.ts +108 -0
- package/app/utils/theme/builtins.spec.ts +38 -0
- package/app/utils/theme/builtins.ts +55 -0
- package/app/utils/theme/css.ts +162 -0
- package/app/utils/theme/doc.ts +353 -0
- package/app/utils/theme/link.ts +93 -0
- package/app/utils/theme/presets.ts +509 -0
- package/app/utils/theme/theme.spec.ts +224 -0
- package/i18n/locales/de.json +61 -4
- package/i18n/locales/en.json +70 -4
- package/i18n/locales/es.json +61 -4
- package/i18n/locales/fr.json +61 -4
- package/i18n/locales/he.json +61 -4
- package/i18n/locales/it.json +61 -4
- package/i18n/locales/ja.json +61 -4
- package/i18n/locales/pl.json +61 -4
- package/i18n/locales/tr.json +61 -4
- package/i18n/locales/uk.json +61 -4
- package/nuxt.config.ts +37 -11
- package/package.json +9 -8
|
@@ -418,15 +418,15 @@ function toastRemoved() {
|
|
|
418
418
|
=== true). While it's still being probed (null) show a loading line instead of flashing
|
|
419
419
|
the full form, and render nothing when the integration is off (false). -->
|
|
420
420
|
<div v-if="infra.available === true" class="space-y-5">
|
|
421
|
-
<p class="text-xs text-
|
|
421
|
+
<p class="text-xs text-muted">{{ t('settings.infrastructure.handler.intro') }}</p>
|
|
422
422
|
|
|
423
423
|
<!-- kubernetes -->
|
|
424
424
|
<section
|
|
425
425
|
ref="kubeSection"
|
|
426
|
-
class="space-y-2 rounded-lg border border-
|
|
426
|
+
class="space-y-2 rounded-lg border border-muted bg-default/40 p-3"
|
|
427
427
|
data-testid="infra-kubernetes-section"
|
|
428
428
|
>
|
|
429
|
-
<h3 class="text-sm font-semibold text-
|
|
429
|
+
<h3 class="text-sm font-semibold text-default">
|
|
430
430
|
{{ t('inspector.testConfig.provisionTypes.kubernetes') }}
|
|
431
431
|
</h3>
|
|
432
432
|
<!-- Established-connection card: a prominent checkbox signals a connection is stored, and
|
|
@@ -434,7 +434,7 @@ function toastRemoved() {
|
|
|
434
434
|
re-opening the form. Absent ⇒ the "not connected yet" hint. -->
|
|
435
435
|
<div
|
|
436
436
|
v-if="kubeHandler"
|
|
437
|
-
class="space-y-2 rounded-md border border-
|
|
437
|
+
class="space-y-2 rounded-md border border-app-success-500/30 bg-app-success-500/5 p-2.5"
|
|
438
438
|
>
|
|
439
439
|
<div class="flex items-start justify-between gap-2">
|
|
440
440
|
<UCheckbox
|
|
@@ -442,7 +442,7 @@ function toastRemoved() {
|
|
|
442
442
|
disabled
|
|
443
443
|
size="lg"
|
|
444
444
|
:label="t('settings.infrastructure.handler.connectionEstablished')"
|
|
445
|
-
:ui="{ label: 'text-[13px] font-semibold text-
|
|
445
|
+
:ui="{ label: 'text-[13px] font-semibold text-app-success-300' }"
|
|
446
446
|
/>
|
|
447
447
|
<UButton
|
|
448
448
|
icon="i-lucide-trash-2"
|
|
@@ -454,9 +454,9 @@ function toastRemoved() {
|
|
|
454
454
|
@click="removeKube"
|
|
455
455
|
/>
|
|
456
456
|
</div>
|
|
457
|
-
<p class="pl-7 text-[11px] text-
|
|
457
|
+
<p class="pl-7 text-[11px] text-toned">
|
|
458
458
|
{{ t('settings.infrastructure.handler.activeEngine') }}
|
|
459
|
-
<span class="text-
|
|
459
|
+
<span class="text-default">{{ kubeHandlerEngineLabel }}</span>
|
|
460
460
|
</p>
|
|
461
461
|
<div class="space-y-1.5 pl-7">
|
|
462
462
|
<UButton
|
|
@@ -472,13 +472,13 @@ function toastRemoved() {
|
|
|
472
472
|
<ConnectionTestVerdict :result="kubeSavedTestResult" />
|
|
473
473
|
</div>
|
|
474
474
|
</div>
|
|
475
|
-
<p v-else class="flex items-center gap-1.5 text-[12px] text-
|
|
475
|
+
<p v-else class="flex items-center gap-1.5 text-[12px] text-dimmed">
|
|
476
476
|
<UIcon name="i-lucide-circle-dashed" class="h-3.5 w-3.5" />
|
|
477
477
|
{{ t('settings.infrastructure.handler.notConnected') }}
|
|
478
478
|
</p>
|
|
479
479
|
|
|
480
480
|
<div class="space-y-1">
|
|
481
|
-
<span class="text-[11px] text-
|
|
481
|
+
<span class="text-[11px] text-muted">{{
|
|
482
482
|
t('settings.infrastructure.handler.engineLabel')
|
|
483
483
|
}}</span>
|
|
484
484
|
<div class="flex flex-wrap gap-1">
|
|
@@ -512,10 +512,10 @@ function toastRemoved() {
|
|
|
512
512
|
/>
|
|
513
513
|
|
|
514
514
|
<!-- Local mode: a personal override for THIS machine, layered over the workspace handler. -->
|
|
515
|
-
<div v-if="userOverridesOn" class="border-t border-
|
|
515
|
+
<div v-if="userOverridesOn" class="border-t border-default pt-2">
|
|
516
516
|
<button
|
|
517
517
|
type="button"
|
|
518
|
-
class="flex w-full items-center gap-1.5 text-start text-[11px] font-semibold uppercase tracking-wide text-
|
|
518
|
+
class="flex w-full items-center gap-1.5 text-start text-[11px] font-semibold uppercase tracking-wide text-dimmed hover:text-toned"
|
|
519
519
|
@click="showKubeOverride = !showKubeOverride"
|
|
520
520
|
>
|
|
521
521
|
<UIcon
|
|
@@ -528,7 +528,7 @@ function toastRemoved() {
|
|
|
528
528
|
</UBadge>
|
|
529
529
|
</button>
|
|
530
530
|
<div v-if="showKubeOverride" class="mt-2 space-y-2">
|
|
531
|
-
<p class="text-[11px] text-
|
|
531
|
+
<p class="text-[11px] text-dimmed">
|
|
532
532
|
{{ t('settings.infrastructure.handler.personalOverrideHint') }}
|
|
533
533
|
</p>
|
|
534
534
|
<p v-if="kubeUserHandler" class="flex justify-end">
|
|
@@ -558,11 +558,13 @@ function toastRemoved() {
|
|
|
558
558
|
</section>
|
|
559
559
|
|
|
560
560
|
<!-- docker-compose: handled by the runtime's local Docker capability, no connection. -->
|
|
561
|
-
<section class="space-y-1 rounded-lg border border-
|
|
562
|
-
<h3 class="text-sm font-semibold text-
|
|
561
|
+
<section class="space-y-1 rounded-lg border border-muted bg-default/40 p-3">
|
|
562
|
+
<h3 class="text-sm font-semibold text-default">
|
|
563
563
|
{{ t('inspector.testConfig.provisionTypes.docker-compose') }}
|
|
564
564
|
</h3>
|
|
565
|
-
<p class="text-[12px] text-
|
|
565
|
+
<p class="text-[12px] text-muted">
|
|
566
|
+
{{ t('settings.infrastructure.dockerComposeInfo') }}
|
|
567
|
+
</p>
|
|
566
568
|
</section>
|
|
567
569
|
|
|
568
570
|
<!-- cloudflare: a self-contained section (see the component's own note on why it is not
|
|
@@ -570,15 +572,15 @@ function toastRemoved() {
|
|
|
570
572
|
<CloudflareHandlerSection />
|
|
571
573
|
|
|
572
574
|
<!-- custom: the catalog editor + a remote-custom HTTP handler per custom type. -->
|
|
573
|
-
<section class="space-y-3 rounded-lg border border-
|
|
574
|
-
<h3 class="text-sm font-semibold text-
|
|
575
|
+
<section class="space-y-3 rounded-lg border border-muted bg-default/40 p-3">
|
|
576
|
+
<h3 class="text-sm font-semibold text-default">
|
|
575
577
|
{{ t('inspector.testConfig.provisionTypes.custom') }}
|
|
576
578
|
</h3>
|
|
577
579
|
|
|
578
580
|
<CustomManifestTypeEditor />
|
|
579
581
|
|
|
580
|
-
<div v-if="infra.customTypes.length" class="space-y-2 border-t border-
|
|
581
|
-
<p class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
582
|
+
<div v-if="infra.customTypes.length" class="space-y-2 border-t border-default pt-3">
|
|
583
|
+
<p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
582
584
|
{{ t('settings.infrastructure.handler.customHandlerTitle') }}
|
|
583
585
|
</p>
|
|
584
586
|
<UFormField :label="t('settings.infrastructure.handler.customTypeLabel')">
|
|
@@ -595,9 +597,9 @@ function toastRemoved() {
|
|
|
595
597
|
</UFormField>
|
|
596
598
|
<p
|
|
597
599
|
v-if="customHandler"
|
|
598
|
-
class="flex items-center justify-between gap-2 text-[12px] text-
|
|
600
|
+
class="flex items-center justify-between gap-2 text-[12px] text-toned"
|
|
599
601
|
>
|
|
600
|
-
<span class="text-
|
|
602
|
+
<span class="text-app-success-400">{{
|
|
601
603
|
t('settings.infrastructure.handler.customConnected')
|
|
602
604
|
}}</span>
|
|
603
605
|
<UButton
|
|
@@ -625,7 +627,7 @@ function toastRemoved() {
|
|
|
625
627
|
</div>
|
|
626
628
|
</section>
|
|
627
629
|
</div>
|
|
628
|
-
<p v-else-if="infra.available === null" class="text-xs text-
|
|
630
|
+
<p v-else-if="infra.available === null" class="text-xs text-dimmed">
|
|
629
631
|
{{ t('settings.infrastructure.handler.loading') }}
|
|
630
632
|
</p>
|
|
631
633
|
</template>
|
|
@@ -267,11 +267,11 @@ const labelKey = computed(() =>
|
|
|
267
267
|
</script>
|
|
268
268
|
|
|
269
269
|
<template>
|
|
270
|
-
<section v-if="cap" class="space-y-2 rounded-lg border border-
|
|
271
|
-
<h3 class="text-sm font-semibold text-
|
|
270
|
+
<section v-if="cap" class="space-y-2 rounded-lg border border-muted bg-default/40 p-3">
|
|
271
|
+
<h3 class="text-sm font-semibold text-default">{{ t(labelKey) }}</h3>
|
|
272
272
|
|
|
273
273
|
<!-- Off-local: the active backend is deployment/registration-driven; state it plainly. -->
|
|
274
|
-
<p v-if="!writable" class="text-sm text-
|
|
274
|
+
<p v-if="!writable" class="text-sm text-toned" :data-testid="`${axis}-backend-active`">
|
|
275
275
|
{{ t('settings.infrastructure.active', { backend: activeLabel }) }}
|
|
276
276
|
</p>
|
|
277
277
|
|
|
@@ -287,13 +287,13 @@ const labelKey = computed(() =>
|
|
|
287
287
|
@change="select(item.id)"
|
|
288
288
|
/>
|
|
289
289
|
<span class="min-w-0">
|
|
290
|
-
<span class="text-sm text-
|
|
291
|
-
<span v-if="item.desc" class="block text-[11px] text-
|
|
290
|
+
<span class="text-sm text-default">{{ item.label }}</span>
|
|
291
|
+
<span v-if="item.desc" class="block text-[11px] text-muted">{{ item.desc }}</span>
|
|
292
292
|
</span>
|
|
293
293
|
</label>
|
|
294
294
|
</div>
|
|
295
295
|
|
|
296
|
-
<p v-if="showRegisterHint" class="text-[11px] text-
|
|
296
|
+
<p v-if="showRegisterHint" class="text-[11px] text-app-warning-300/80">
|
|
297
297
|
{{ t('settings.infrastructure.registerHint') }}
|
|
298
298
|
</p>
|
|
299
299
|
|
|
@@ -174,8 +174,8 @@ watch([tabs, () => store.loaded], () => {
|
|
|
174
174
|
<InfrastructureBackendPicker axis="execution" />
|
|
175
175
|
<!-- Local mode: the warm-pool + checkout reuse ARE the host agent-container
|
|
176
176
|
runtime, so they live here rather than in a separate menu. -->
|
|
177
|
-
<section v-if="isLocal" class="border-t border-
|
|
178
|
-
<h3 class="mb-3 text-sm font-semibold text-
|
|
177
|
+
<section v-if="isLocal" class="border-t border-default pt-4">
|
|
178
|
+
<h3 class="mb-3 text-sm font-semibold text-default">
|
|
179
179
|
{{ t('settings.localMode.title') }}
|
|
180
180
|
</h3>
|
|
181
181
|
<LocalContainerPoolSettings />
|
|
@@ -191,13 +191,13 @@ watch([tabs, () => store.loaded], () => {
|
|
|
191
191
|
<!-- The Tester's environment is driven by each SERVICE's declared provision type
|
|
192
192
|
(the "what/where"); the workspace configures HOW each type is handled here —
|
|
193
193
|
the engine + connection per provision type, plus the custom-type catalog. -->
|
|
194
|
-
<div class="border-t border-
|
|
194
|
+
<div class="border-t border-default pt-4">
|
|
195
195
|
<InfraHandlersConfigurator />
|
|
196
196
|
</div>
|
|
197
197
|
<!-- The guided per-SERVICE Compose flow (formerly the standalone "Environment
|
|
198
198
|
setup" sidebar entry). Last, because it fills in one service's recipe on
|
|
199
199
|
top of the workspace-wide choices above. -->
|
|
200
|
-
<div class="border-t border-
|
|
200
|
+
<div class="border-t border-default pt-4">
|
|
201
201
|
<ComposeEnvironmentSetupSection />
|
|
202
202
|
</div>
|
|
203
203
|
</div>
|
|
@@ -213,7 +213,7 @@ watch([tabs, () => store.loaded], () => {
|
|
|
213
213
|
</template>
|
|
214
214
|
</UTabs>
|
|
215
215
|
|
|
216
|
-
<p v-else class="px-1 py-6 text-center text-sm text-
|
|
216
|
+
<p v-else class="px-1 py-6 text-center text-sm text-dimmed">
|
|
217
217
|
{{ t('settings.providerConnection.noneAvailable') }}
|
|
218
218
|
</p>
|
|
219
219
|
</div>
|
|
@@ -201,13 +201,13 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
201
201
|
<!-- 1. Filing tracker ----------------------------------------------------->
|
|
202
202
|
<section class="space-y-3">
|
|
203
203
|
<div>
|
|
204
|
-
<h3 class="text-sm font-semibold text-
|
|
204
|
+
<h3 class="text-sm font-semibold text-default">
|
|
205
205
|
{{ t('settings.issueTracker.filing.heading') }}
|
|
206
206
|
</h3>
|
|
207
|
-
<p class="mt-1 text-[11px] text-
|
|
207
|
+
<p class="mt-1 text-[11px] text-muted">
|
|
208
208
|
<i18n-t keypath="settings.issueTracker.filing.description" tag="span" scope="global">
|
|
209
209
|
<template #none>
|
|
210
|
-
<span class="text-
|
|
210
|
+
<span class="text-toned">{{ t('settings.issueTracker.filing.none') }}</span>
|
|
211
211
|
</template>
|
|
212
212
|
</i18n-t>
|
|
213
213
|
</p>
|
|
@@ -269,7 +269,10 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
269
269
|
</div>
|
|
270
270
|
|
|
271
271
|
<!-- Inline readiness hints for the picked tracker. -->
|
|
272
|
-
<p
|
|
272
|
+
<p
|
|
273
|
+
v-if="trackerKind === 'github' && !githubAvailable"
|
|
274
|
+
class="text-[11px] text-app-warning-400"
|
|
275
|
+
>
|
|
273
276
|
<i18n-t keypath="settings.issueTracker.filing.githubHint" tag="span" scope="global">
|
|
274
277
|
<template #link>
|
|
275
278
|
<button class="underline" @click="ui.openGitHub()">
|
|
@@ -278,7 +281,10 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
278
281
|
</template>
|
|
279
282
|
</i18n-t>
|
|
280
283
|
</p>
|
|
281
|
-
<p
|
|
284
|
+
<p
|
|
285
|
+
v-else-if="trackerKind === 'jira' && !jiraConnected"
|
|
286
|
+
class="text-[11px] text-app-warning-400"
|
|
287
|
+
>
|
|
282
288
|
<i18n-t keypath="settings.issueTracker.filing.jiraHint" tag="span" scope="global">
|
|
283
289
|
<template #link>
|
|
284
290
|
<button class="underline" @click="ui.openTaskConnect('jira')">
|
|
@@ -289,7 +295,7 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
289
295
|
</p>
|
|
290
296
|
<p
|
|
291
297
|
v-else-if="trackerKind === 'linear' && !linearConnected"
|
|
292
|
-
class="text-[11px] text-
|
|
298
|
+
class="text-[11px] text-app-warning-400"
|
|
293
299
|
>
|
|
294
300
|
<i18n-t keypath="settings.issueTracker.filing.linearHint" tag="span" scope="global">
|
|
295
301
|
<template #link>
|
|
@@ -307,7 +313,7 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
307
313
|
>
|
|
308
314
|
<UInput v-model="jiraProjectKey" placeholder="ENG" size="sm" class="w-full" />
|
|
309
315
|
<template #help>
|
|
310
|
-
<span class="text-[11px] text-
|
|
316
|
+
<span class="text-[11px] text-dimmed">
|
|
311
317
|
{{ t('settings.issueTracker.filing.jiraProjectKeyHelp') }}
|
|
312
318
|
</span>
|
|
313
319
|
</template>
|
|
@@ -334,7 +340,7 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
334
340
|
/>
|
|
335
341
|
<UInput v-else v-model="linearTeamId" placeholder="team_…" size="sm" class="w-full" />
|
|
336
342
|
<template #help>
|
|
337
|
-
<span class="text-[11px] text-
|
|
343
|
+
<span class="text-[11px] text-dimmed">
|
|
338
344
|
{{ t('settings.issueTracker.filing.linearTeamIdHelp') }}
|
|
339
345
|
</span>
|
|
340
346
|
</template>
|
|
@@ -344,10 +350,10 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
344
350
|
<!-- 2. Linking sources ---------------------------------------------------->
|
|
345
351
|
<section class="space-y-3">
|
|
346
352
|
<div>
|
|
347
|
-
<h3 class="text-sm font-semibold text-
|
|
353
|
+
<h3 class="text-sm font-semibold text-default">
|
|
348
354
|
{{ t('settings.issueTracker.linking.heading') }}
|
|
349
355
|
</h3>
|
|
350
|
-
<p class="mt-1 text-[11px] text-
|
|
356
|
+
<p class="mt-1 text-[11px] text-muted">
|
|
351
357
|
{{ t('settings.issueTracker.linking.description') }}
|
|
352
358
|
</p>
|
|
353
359
|
</div>
|
|
@@ -364,7 +370,7 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
364
370
|
@remedy="openRemedy(source)"
|
|
365
371
|
/>
|
|
366
372
|
|
|
367
|
-
<p v-if="tasks.sources.length === 0" class="text-[11px] text-
|
|
373
|
+
<p v-if="tasks.sources.length === 0" class="text-[11px] text-dimmed">
|
|
368
374
|
{{ t('settings.issueTracker.linking.none') }}
|
|
369
375
|
</p>
|
|
370
376
|
</section>
|
|
@@ -372,49 +378,49 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
372
378
|
<!-- 3. Writeback ---------------------------------------------------------->
|
|
373
379
|
<section class="space-y-3">
|
|
374
380
|
<div>
|
|
375
|
-
<h3 class="text-sm font-semibold text-
|
|
381
|
+
<h3 class="text-sm font-semibold text-default">
|
|
376
382
|
{{ t('settings.issueTracker.writeback.heading') }}
|
|
377
383
|
</h3>
|
|
378
|
-
<p class="mt-1 text-[11px] text-
|
|
384
|
+
<p class="mt-1 text-[11px] text-muted">
|
|
379
385
|
<i18n-t keypath="settings.issueTracker.writeback.description" tag="span" scope="global">
|
|
380
386
|
<template #done>
|
|
381
|
-
<span class="text-
|
|
387
|
+
<span class="text-toned">{{ t('settings.issueTracker.writeback.done') }}</span>
|
|
382
388
|
</template>
|
|
383
389
|
</i18n-t>
|
|
384
390
|
</p>
|
|
385
391
|
</div>
|
|
386
392
|
|
|
387
|
-
<label class="flex items-start gap-3 rounded-lg border border-
|
|
393
|
+
<label class="flex items-start gap-3 rounded-lg border border-muted bg-elevated/40 p-3">
|
|
388
394
|
<USwitch v-model="commentOnPrOpen" />
|
|
389
395
|
<span class="text-sm">
|
|
390
|
-
<span class="block text-
|
|
396
|
+
<span class="block text-default">
|
|
391
397
|
{{ t('settings.issueTracker.writeback.commentOnOpen.label') }}
|
|
392
398
|
</span>
|
|
393
|
-
<span class="block text-xs text-
|
|
399
|
+
<span class="block text-xs text-dimmed">
|
|
394
400
|
{{ t('settings.issueTracker.writeback.commentOnOpen.help') }}
|
|
395
401
|
</span>
|
|
396
402
|
</span>
|
|
397
403
|
</label>
|
|
398
404
|
|
|
399
|
-
<label class="flex items-start gap-3 rounded-lg border border-
|
|
405
|
+
<label class="flex items-start gap-3 rounded-lg border border-muted bg-elevated/40 p-3">
|
|
400
406
|
<USwitch v-model="resolveOnMerge" />
|
|
401
407
|
<span class="text-sm">
|
|
402
|
-
<span class="block text-
|
|
408
|
+
<span class="block text-default">
|
|
403
409
|
{{ t('settings.issueTracker.writeback.resolveOnMerge.label') }}
|
|
404
410
|
</span>
|
|
405
|
-
<span class="block text-xs text-
|
|
411
|
+
<span class="block text-xs text-dimmed">
|
|
406
412
|
{{ t('settings.issueTracker.writeback.resolveOnMerge.help') }}
|
|
407
413
|
</span>
|
|
408
414
|
</span>
|
|
409
415
|
</label>
|
|
410
416
|
|
|
411
|
-
<label class="flex items-start gap-3 rounded-lg border border-
|
|
417
|
+
<label class="flex items-start gap-3 rounded-lg border border-muted bg-elevated/40 p-3">
|
|
412
418
|
<USwitch v-model="questionsOnPark" />
|
|
413
419
|
<span class="text-sm">
|
|
414
|
-
<span class="block text-
|
|
420
|
+
<span class="block text-default">
|
|
415
421
|
{{ t('settings.issueTracker.writeback.questionsOnPark.label') }}
|
|
416
422
|
</span>
|
|
417
|
-
<span class="block text-xs text-
|
|
423
|
+
<span class="block text-xs text-dimmed">
|
|
418
424
|
{{ t('settings.issueTracker.writeback.questionsOnPark.help') }}
|
|
419
425
|
</span>
|
|
420
426
|
</span>
|
|
@@ -368,8 +368,8 @@ async function copyAutoSetupCommand() {
|
|
|
368
368
|
</script>
|
|
369
369
|
|
|
370
370
|
<template>
|
|
371
|
-
<div class="rounded-lg border border-dashed border-
|
|
372
|
-
<p class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
371
|
+
<div class="rounded-lg border border-dashed border-muted p-3 space-y-3">
|
|
372
|
+
<p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
373
373
|
{{
|
|
374
374
|
connected
|
|
375
375
|
? t('settings.providerConnection.form.updateConfiguration')
|
|
@@ -379,7 +379,7 @@ async function copyAutoSetupCommand() {
|
|
|
379
379
|
|
|
380
380
|
<p
|
|
381
381
|
v-if="engine === 'local-k3s'"
|
|
382
|
-
class="rounded-md border border-
|
|
382
|
+
class="rounded-md border border-app-info-500/30 bg-app-info-500/10 p-2 text-[11px] text-app-info-200"
|
|
383
383
|
>
|
|
384
384
|
{{ t('settings.infrastructure.kubernetesEngine.localK3sHint') }}
|
|
385
385
|
</p>
|
|
@@ -389,18 +389,18 @@ async function copyAutoSetupCommand() {
|
|
|
389
389
|
(the token is pasted, never in the link). -->
|
|
390
390
|
<div
|
|
391
391
|
v-if="engine === 'local-k3s'"
|
|
392
|
-
class="rounded-md border border-
|
|
392
|
+
class="rounded-md border border-muted bg-default/40 p-2 space-y-1.5"
|
|
393
393
|
>
|
|
394
|
-
<p class="flex items-center gap-1.5 text-[11px] font-semibold text-
|
|
395
|
-
<UIcon name="i-lucide-wand-2" class="h-3.5 w-3.5 text-
|
|
394
|
+
<p class="flex items-center gap-1.5 text-[11px] font-semibold text-toned">
|
|
395
|
+
<UIcon name="i-lucide-wand-2" class="h-3.5 w-3.5 text-muted" />
|
|
396
396
|
{{ t('settings.infrastructure.kubernetesEngine.autoSetup.title') }}
|
|
397
397
|
</p>
|
|
398
|
-
<p class="text-[11px] text-
|
|
398
|
+
<p class="text-[11px] text-muted">
|
|
399
399
|
{{ t('settings.infrastructure.kubernetesEngine.autoSetup.description') }}
|
|
400
400
|
</p>
|
|
401
401
|
<div class="flex items-center gap-1.5">
|
|
402
402
|
<code
|
|
403
|
-
class="flex-1 rounded bg-
|
|
403
|
+
class="flex-1 rounded bg-app-950 px-2 py-1 font-mono text-[11px] text-default select-all"
|
|
404
404
|
>
|
|
405
405
|
{{ AUTO_SETUP_COMMAND }}
|
|
406
406
|
</code>
|
|
@@ -438,7 +438,7 @@ async function copyAutoSetupCommand() {
|
|
|
438
438
|
"
|
|
439
439
|
>
|
|
440
440
|
<template v-if="tokenStored" #hint>
|
|
441
|
-
<span class="inline-flex items-center gap-1 text-[11px] text-
|
|
441
|
+
<span class="inline-flex items-center gap-1 text-[11px] text-app-success-400">
|
|
442
442
|
<UIcon name="i-lucide-check-circle-2" class="h-3.5 w-3.5" />
|
|
443
443
|
{{ t('settings.infrastructure.kubernetesEngine.tokenSaved') }}
|
|
444
444
|
</span>
|
|
@@ -458,7 +458,7 @@ async function copyAutoSetupCommand() {
|
|
|
458
458
|
<p
|
|
459
459
|
v-if="tokenProblem"
|
|
460
460
|
class="mt-1 text-[11px]"
|
|
461
|
-
:class="tokenBlocking ? 'text-
|
|
461
|
+
:class="tokenBlocking ? 'text-app-error-400' : 'text-app-warning-400'"
|
|
462
462
|
data-testid="service-account-token-problem"
|
|
463
463
|
>
|
|
464
464
|
{{ tokenProblem }}
|
|
@@ -600,7 +600,7 @@ async function copyAutoSetupCommand() {
|
|
|
600
600
|
</div>
|
|
601
601
|
|
|
602
602
|
<div class="flex items-center justify-end gap-3">
|
|
603
|
-
<p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-
|
|
603
|
+
<p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-app-error-400">
|
|
604
604
|
{{ connectBlockedReason }}
|
|
605
605
|
</p>
|
|
606
606
|
<UButton
|
|
@@ -263,8 +263,8 @@ function optional(label: string): string {
|
|
|
263
263
|
</script>
|
|
264
264
|
|
|
265
265
|
<template>
|
|
266
|
-
<div class="rounded-lg border border-dashed border-
|
|
267
|
-
<p class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
266
|
+
<div class="rounded-lg border border-dashed border-muted p-3 space-y-3">
|
|
267
|
+
<p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
268
268
|
{{
|
|
269
269
|
connection?.kind === 'kubernetes'
|
|
270
270
|
? t('settings.providerConnection.form.updateConfiguration')
|
|
@@ -296,7 +296,7 @@ function optional(label: string): string {
|
|
|
296
296
|
<p
|
|
297
297
|
v-if="tokenProblem"
|
|
298
298
|
class="mt-1 text-[11px]"
|
|
299
|
-
:class="tokenBlocking ? 'text-
|
|
299
|
+
:class="tokenBlocking ? 'text-app-error-400' : 'text-app-warning-400'"
|
|
300
300
|
data-testid="service-account-token-problem"
|
|
301
301
|
>
|
|
302
302
|
{{ tokenProblem }}
|
|
@@ -454,7 +454,7 @@ function optional(label: string): string {
|
|
|
454
454
|
<ConnectionWarnings :warnings="testResult?.warnings" />
|
|
455
455
|
|
|
456
456
|
<div class="flex items-center justify-end gap-3">
|
|
457
|
-
<p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-
|
|
457
|
+
<p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-app-error-400">
|
|
458
458
|
{{ connectBlockedReason }}
|
|
459
459
|
</p>
|
|
460
460
|
<UButton
|
|
@@ -75,12 +75,7 @@ async function save() {
|
|
|
75
75
|
|
|
76
76
|
<template>
|
|
77
77
|
<div class="space-y-6" data-testid="local-container-pool-settings">
|
|
78
|
-
<i18n-t
|
|
79
|
-
keypath="settings.localMode.intro"
|
|
80
|
-
tag="p"
|
|
81
|
-
class="text-xs text-slate-400"
|
|
82
|
-
scope="global"
|
|
83
|
-
>
|
|
78
|
+
<i18n-t keypath="settings.localMode.intro" tag="p" class="text-xs text-muted" scope="global">
|
|
84
79
|
<template #poolVars>
|
|
85
80
|
<code>LOCAL_POOL_*</code>
|
|
86
81
|
</template>
|
|
@@ -92,13 +87,13 @@ async function save() {
|
|
|
92
87
|
<!-- Warm container pool -->
|
|
93
88
|
<section class="space-y-3">
|
|
94
89
|
<div>
|
|
95
|
-
<h4 class="text-sm font-semibold text-
|
|
90
|
+
<h4 class="text-sm font-semibold text-default">
|
|
96
91
|
{{ t('settings.localMode.pool.heading') }}
|
|
97
92
|
</h4>
|
|
98
93
|
<i18n-t
|
|
99
94
|
keypath="settings.localMode.pool.description"
|
|
100
95
|
tag="p"
|
|
101
|
-
class="text-[11px] text-
|
|
96
|
+
class="text-[11px] text-muted"
|
|
102
97
|
scope="global"
|
|
103
98
|
>
|
|
104
99
|
<template #appleContainer>
|
|
@@ -141,12 +136,12 @@ async function save() {
|
|
|
141
136
|
</section>
|
|
142
137
|
|
|
143
138
|
<!-- Checkout reuse -->
|
|
144
|
-
<section class="space-y-3 border-t border-
|
|
139
|
+
<section class="space-y-3 border-t border-default pt-6">
|
|
145
140
|
<div>
|
|
146
|
-
<h4 class="text-sm font-semibold text-
|
|
141
|
+
<h4 class="text-sm font-semibold text-default">
|
|
147
142
|
{{ t('settings.localMode.checkout.heading') }}
|
|
148
143
|
</h4>
|
|
149
|
-
<p class="text-[11px] text-
|
|
144
|
+
<p class="text-[11px] text-muted">
|
|
150
145
|
{{ t('settings.localMode.checkout.description') }}
|
|
151
146
|
</p>
|
|
152
147
|
</div>
|
|
@@ -279,13 +279,13 @@ async function remove(p: LocalRunner) {
|
|
|
279
279
|
</template>
|
|
280
280
|
<template #body>
|
|
281
281
|
<div class="space-y-4">
|
|
282
|
-
<p class="text-xs text-
|
|
282
|
+
<p class="text-xs text-muted">
|
|
283
283
|
<i18n-t keypath="settings.localModelEndpoints.intro" tag="span" scope="global">
|
|
284
284
|
<template #ownMachine>
|
|
285
285
|
<strong>{{ t('settings.localModelEndpoints.introOwnMachine') }}</strong>
|
|
286
286
|
</template>
|
|
287
287
|
<template #justForYou>
|
|
288
|
-
<span class="text-
|
|
288
|
+
<span class="text-toned">{{
|
|
289
289
|
t('settings.localModelEndpoints.introJustForYou')
|
|
290
290
|
}}</span>
|
|
291
291
|
</template>
|
|
@@ -296,12 +296,12 @@ async function remove(p: LocalRunner) {
|
|
|
296
296
|
<div
|
|
297
297
|
v-for="e in store.endpoints"
|
|
298
298
|
:key="e.provider"
|
|
299
|
-
class="flex items-center justify-between rounded-md border border-
|
|
299
|
+
class="flex items-center justify-between rounded-md border border-muted bg-default/50 px-3 py-2 text-sm"
|
|
300
300
|
>
|
|
301
301
|
<div>
|
|
302
|
-
<span class="font-medium text-
|
|
303
|
-
<span class="ms-2 text-xs text-
|
|
304
|
-
<div class="text-[11px] text-
|
|
302
|
+
<span class="font-medium text-default">{{ e.label }}</span>
|
|
303
|
+
<span class="ms-2 text-xs text-dimmed">{{ LOCAL_RUNNER_LABELS[e.provider] }}</span>
|
|
304
|
+
<div class="text-[11px] text-dimmed">
|
|
305
305
|
{{ e.baseUrl }} ·
|
|
306
306
|
{{
|
|
307
307
|
t(
|
|
@@ -316,14 +316,16 @@ async function remove(p: LocalRunner) {
|
|
|
316
316
|
</div>
|
|
317
317
|
<!-- A row whose URL the deployment no longer permits: its models are withheld
|
|
318
318
|
from the picker, so this is the only place that can say why. -->
|
|
319
|
-
<div v-if="e.urlBlockedReason" class="mt-1 text-[11px] text-
|
|
319
|
+
<div v-if="e.urlBlockedReason" class="mt-1 text-[11px] text-app-warning-400">
|
|
320
320
|
{{ t('settings.localModelEndpoints.blocked') }}
|
|
321
|
-
<span class="block text-
|
|
321
|
+
<span class="block text-app-warning-300/70">{{
|
|
322
|
+
urlReasonText(e.urlBlockedReason)
|
|
323
|
+
}}</span>
|
|
322
324
|
</div>
|
|
323
325
|
<!-- Part of the stored model list could not be read and was discarded. Without this
|
|
324
326
|
the shortened list reads exactly like a runner nothing was ever enabled on, and
|
|
325
327
|
only one of those is fixed by re-ticking. -->
|
|
326
|
-
<div v-if="e.unreadableModels" class="mt-1 text-[11px] text-
|
|
328
|
+
<div v-if="e.unreadableModels" class="mt-1 text-[11px] text-app-warning-400">
|
|
327
329
|
{{ t('settings.localModelEndpoints.modelsDiscarded') }}
|
|
328
330
|
</div>
|
|
329
331
|
</div>
|
|
@@ -349,8 +351,8 @@ async function remove(p: LocalRunner) {
|
|
|
349
351
|
</div>
|
|
350
352
|
|
|
351
353
|
<!-- add / edit form -->
|
|
352
|
-
<div class="rounded-lg border border-dashed border-
|
|
353
|
-
<p class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
354
|
+
<div class="rounded-lg border border-dashed border-muted p-3 space-y-3">
|
|
355
|
+
<p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
354
356
|
{{
|
|
355
357
|
existing
|
|
356
358
|
? t('settings.localModelEndpoints.editRunner')
|
|
@@ -411,13 +413,13 @@ async function remove(p: LocalRunner) {
|
|
|
411
413
|
>
|
|
412
414
|
{{ t('settings.localModelEndpoints.testConnection') }}
|
|
413
415
|
</UButton>
|
|
414
|
-
<span v-if="testError" class="text-xs text-
|
|
416
|
+
<span v-if="testError" class="text-xs text-app-error-400">
|
|
415
417
|
{{ testError }}
|
|
416
|
-
<span v-if="testErrorDetail" class="block text-[11px] text-
|
|
418
|
+
<span v-if="testErrorDetail" class="block text-[11px] text-app-error-300/70">{{
|
|
417
419
|
testErrorDetail
|
|
418
420
|
}}</span>
|
|
419
421
|
</span>
|
|
420
|
-
<span v-else-if="tested && discovered.length" class="text-xs text-
|
|
422
|
+
<span v-else-if="tested && discovered.length" class="text-xs text-app-success-400">
|
|
421
423
|
{{
|
|
422
424
|
t(
|
|
423
425
|
'settings.localModelEndpoints.reachable',
|
|
@@ -426,22 +428,22 @@ async function remove(p: LocalRunner) {
|
|
|
426
428
|
)
|
|
427
429
|
}}
|
|
428
430
|
</span>
|
|
429
|
-
<span v-else-if="tested" class="text-xs text-
|
|
431
|
+
<span v-else-if="tested" class="text-xs text-dimmed">{{
|
|
430
432
|
t('settings.localModelEndpoints.noModels')
|
|
431
433
|
}}</span>
|
|
432
434
|
</div>
|
|
433
435
|
|
|
434
436
|
<!-- discovered models multi-select, each with its declared image support -->
|
|
435
437
|
<div v-if="discovered.length" class="space-y-1.5">
|
|
436
|
-
<span class="block text-[10px] uppercase tracking-wide text-
|
|
438
|
+
<span class="block text-[10px] uppercase tracking-wide text-dimmed">
|
|
437
439
|
{{ t('settings.localModelEndpoints.enableModels') }}
|
|
438
440
|
</span>
|
|
439
|
-
<p class="text-[11px] text-
|
|
441
|
+
<p class="text-[11px] text-dimmed">
|
|
440
442
|
{{ t('settings.localModelEndpoints.imageInputHint') }}
|
|
441
443
|
</p>
|
|
442
444
|
<div class="space-y-1.5">
|
|
443
445
|
<div v-for="m in discovered" :key="m" class="flex items-center gap-2">
|
|
444
|
-
<label class="flex min-w-0 flex-1 items-center gap-2 text-sm text-
|
|
446
|
+
<label class="flex min-w-0 flex-1 items-center gap-2 text-sm text-toned">
|
|
445
447
|
<UCheckbox
|
|
446
448
|
:model-value="selected.includes(m)"
|
|
447
449
|
@update:model-value="
|