@cat-factory/app 0.310.1 → 0.310.3

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.
Files changed (145) hide show
  1. package/README.md +23 -0
  2. package/app/app.config.ts +11 -0
  3. package/app/components/assistant/AssistantModal.vue +0 -1
  4. package/app/components/auth/BackendMisconfiguredScreen.vue +1 -1
  5. package/app/components/auth/LoginScreen.vue +2 -18
  6. package/app/components/auth/ResetPasswordScreen.vue +2 -3
  7. package/app/components/board/AddTaskModal.vue +0 -1
  8. package/app/components/board/BoardCanvas.vue +0 -2
  9. package/app/components/board/CreateInitiativeModal.vue +0 -1
  10. package/app/components/board/RecurringPipelineModal.vue +1 -7
  11. package/app/components/board/ReviewFrictionDialog.vue +1 -7
  12. package/app/components/board/nodes/InitiativeCard.vue +0 -4
  13. package/app/components/board/nodes/TaskCard.vue +1 -8
  14. package/app/components/bootstrap/AdoptionReviewModal.vue +0 -1
  15. package/app/components/bootstrap/BootstrapModal.vue +1 -7
  16. package/app/components/brainstorm/BrainstormWindow.vue +0 -5
  17. package/app/components/bugFishing/BugFishingWindow.vue +0 -2
  18. package/app/components/clarity/ClarityReviewWindow.vue +0 -4
  19. package/app/components/common/AsyncViewError.vue +1 -1
  20. package/app/components/common/ClarificationItem.vue +0 -2
  21. package/app/components/context/ContextAttachmentFields.vue +1 -1
  22. package/app/components/docs/DocInterviewWindow.vue +0 -1
  23. package/app/components/documents/DocumentImportModal.vue +0 -3
  24. package/app/components/documents/DocumentSourceConnectModal.vue +2 -9
  25. package/app/components/documents/DocumentTemplatesModal.vue +1 -7
  26. package/app/components/documents/SpawnPreviewModal.vue +0 -1
  27. package/app/components/documents/StartFromDesignModal.vue +0 -1
  28. package/app/components/environments/steps/EnvPreflightStep.vue +0 -2
  29. package/app/components/environments/steps/EnvReviewStep.vue +1 -4
  30. package/app/components/environments/steps/EnvSaveStep.vue +0 -1
  31. package/app/components/focus/BlockFocusView.vue +0 -2
  32. package/app/components/followUp/FollowUpWindow.vue +0 -2
  33. package/app/components/forkDecision/ForkDecisionWindow.vue +1 -2
  34. package/app/components/foundational/FoundationalServiceCatalogList.vue +2 -0
  35. package/app/components/foundational/FoundationalServiceRegistry.vue +9 -2
  36. package/app/components/foundational/FoundationalServiceSources.vue +2 -0
  37. package/app/components/foundational/FoundationalSuppressions.vue +1 -0
  38. package/app/components/fragments/FragmentLibraryManager.vue +4 -0
  39. package/app/components/fragments/FragmentSelector.vue +0 -1
  40. package/app/components/gates/GateResultView.vue +0 -1
  41. package/app/components/github/AddServiceFromRepoModal.vue +0 -2
  42. package/app/components/github/GitHubConnect.vue +1 -2
  43. package/app/components/github/GitHubPanel.vue +0 -2
  44. package/app/components/github/RepoTreeBrowser.vue +3 -3
  45. package/app/components/guidedReview/GuidedReviewDraftCard.vue +17 -5
  46. package/app/components/guidedReview/GuidedReviewModal.vue +1 -0
  47. package/app/components/guidedReview/GuidedReviewOverview.vue +1 -0
  48. package/app/components/guidedReview/GuidedReviewPicker.vue +0 -1
  49. package/app/components/guidedReview/GuidedReviewThread.vue +0 -2
  50. package/app/components/humanTest/HumanTestWindow.vue +3 -3
  51. package/app/components/initiative/InitiativePlanDecision.vue +0 -1
  52. package/app/components/initiative/InitiativePlanReview.vue +0 -1
  53. package/app/components/initiative/InitiativePlanningWindow.vue +2 -3
  54. package/app/components/initiative/InitiativeTrackerWindow.vue +1 -1
  55. package/app/components/inputGate/InputGateNotice.vue +0 -1
  56. package/app/components/judge/JudgeResultView.vue +1 -1
  57. package/app/components/layout/AccountDeploymentSettings.vue +13 -43
  58. package/app/components/layout/AccountModelPolicySettings.vue +0 -1
  59. package/app/components/layout/AccountPlatformAlertSettings.vue +0 -1
  60. package/app/components/layout/AccountRunCredentialSettings.vue +0 -1
  61. package/app/components/layout/AccountTeamSettings.vue +4 -4
  62. package/app/components/layout/AiProvidersBanner.vue +1 -7
  63. package/app/components/layout/BoardSwitcher.vue +1 -1
  64. package/app/components/layout/DefaultTestEnvBanner.vue +0 -1
  65. package/app/components/layout/GitHubPatBanner.vue +0 -1
  66. package/app/components/layout/GitHubPatPermissionsBanner.vue +0 -1
  67. package/app/components/layout/InfraSetupBanner.vue +0 -1
  68. package/app/components/layout/IntegrationsHub.vue +0 -2
  69. package/app/components/layout/ModelProvidersHub.vue +1 -6
  70. package/app/components/layout/ProviderConfigBanner.vue +0 -1
  71. package/app/components/layout/SideBar.vue +0 -1
  72. package/app/components/layout/SpendWarningBanner.vue +0 -1
  73. package/app/components/layout/WorkspaceMembersSettings.vue +0 -1
  74. package/app/components/notifications/NotificationSettingsPanel.vue +0 -1
  75. package/app/components/outcome/OutcomeSummaryWindow.vue +0 -3
  76. package/app/components/panels/AgentStepDetail.vue +2 -5
  77. package/app/components/panels/DecisionModal.vue +0 -1
  78. package/app/components/panels/InspectorPanel.vue +1 -1
  79. package/app/components/panels/inspector/ContainerSummary.vue +1 -1
  80. package/app/components/panels/inspector/FrontendConfig.vue +0 -4
  81. package/app/components/panels/inspector/InitiativeInspector.vue +1 -6
  82. package/app/components/panels/inspector/RecurringScheduleSettings.vue +1 -3
  83. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -9
  84. package/app/components/panels/inspector/ServiceSelfTests.vue +0 -2
  85. package/app/components/panels/inspector/ServiceTestConfig.vue +1 -4
  86. package/app/components/panels/inspector/ServiceTestSecrets.vue +1 -2
  87. package/app/components/panels/inspector/ServiceTestingContext.vue +0 -1
  88. package/app/components/panels/inspector/ServiceValidationConfig.vue +1 -2
  89. package/app/components/panels/inspector/TaskExecution.vue +1 -5
  90. package/app/components/panels/inspector/TaskReviewTarget.vue +0 -2
  91. package/app/components/panels/inspector/TaskRunSettings.vue +2 -14
  92. package/app/components/panels/inspector/TaskTypeFields.vue +0 -1
  93. package/app/components/pipeline/AgentPromptEditor.vue +0 -2
  94. package/app/components/pipeline/IterationCapPrompt.vue +0 -1
  95. package/app/components/pipeline/PipelineBuilder.vue +2 -11
  96. package/app/components/pipeline/PipelineHealthModal.vue +2 -6
  97. package/app/components/prReview/PrReviewWindow.vue +0 -4
  98. package/app/components/providers/AiPresetMismatchDialog.vue +1 -1
  99. package/app/components/providers/AiProviderOnboardingModal.vue +2 -8
  100. package/app/components/providers/VendorCredentialsModal.vue +1 -7
  101. package/app/components/provisioning/ProvisioningLogsDrawer.vue +1 -0
  102. package/app/components/requirements/RequirementsReviewWindow.vue +0 -7
  103. package/app/components/sandbox/SandboxPanel.vue +1 -3
  104. package/app/components/settings/BudgetSettings.vue +1 -9
  105. package/app/components/settings/ComposeEnvironmentSetupSection.vue +0 -1
  106. package/app/components/settings/ConsensusGroupsSection.vue +0 -1
  107. package/app/components/settings/CustomManifestTypeEditor.vue +1 -1
  108. package/app/components/settings/DefaultProvisionTypeSection.vue +0 -1
  109. package/app/components/settings/InfraHandlersConfigurator.vue +2 -2
  110. package/app/components/settings/IssueTrackerPanel.vue +1 -8
  111. package/app/components/settings/KubernetesEngineForm.vue +1 -7
  112. package/app/components/settings/KubernetesEnvironmentForm.vue +1 -7
  113. package/app/components/settings/LocalContainerPoolSettings.vue +1 -1
  114. package/app/components/settings/LocalModelEndpointsPanel.vue +0 -1
  115. package/app/components/settings/McpAuthorizeScreen.vue +0 -1
  116. package/app/components/settings/McpOAuthCallbackScreen.vue +1 -1
  117. package/app/components/settings/ModelConfigurationPanel.vue +3 -10
  118. package/app/components/settings/ModelPresetHealthModal.vue +0 -3
  119. package/app/components/settings/OpenRouterCatalogPanel.vue +1 -9
  120. package/app/components/settings/ProviderConnectionTab.vue +2 -7
  121. package/app/components/settings/ProviderManifestEditor.vue +0 -1
  122. package/app/components/settings/RiskPolicyCreateForm.vue +0 -1
  123. package/app/components/settings/RiskPolicyEditorRow.vue +1 -2
  124. package/app/components/settings/RiskPolicyHealthModal.vue +0 -3
  125. package/app/components/settings/ServiceFragmentDefaultsPanel.vue +0 -3
  126. package/app/components/settings/ToolServerChecklist.vue +1 -1
  127. package/app/components/settings/UserSecretsSection.vue +1 -7
  128. package/app/components/settings/WorkspaceMetadataSettings.vue +0 -1
  129. package/app/components/settings/WorkspaceSettingsPanel.vue +1 -7
  130. package/app/components/skills/ReviewSkillQueue.vue +0 -1
  131. package/app/components/skills/SkillLibraryManager.vue +2 -0
  132. package/app/components/slack/SlackPanel.vue +1 -5
  133. package/app/components/spec/ServiceSpecWindow.vue +0 -1
  134. package/app/components/tasks/BugHuntModal.vue +0 -3
  135. package/app/components/tasks/TaskImportModal.vue +0 -2
  136. package/app/components/tasks/TaskSourceConnectModal.vue +2 -9
  137. package/app/components/testing/TestReportWindow.vue +2 -0
  138. package/app/components/tutorial/TutorialCatalogue.vue +0 -1
  139. package/app/components/tutorial/TutorialNudge.vue +0 -1
  140. package/app/components/tutorial/TutorialOverlay.vue +0 -2
  141. package/app/components/tutorial/TutorialPrompt.vue +0 -1
  142. package/app/components/vcs/GitLabConnect.vue +0 -1
  143. package/app/components/visualConfirm/VisualConfirmationWindow.vue +1 -1
  144. package/app/pages/index.vue +1 -1
  145. package/package.json +1 -1
@@ -588,7 +588,6 @@ const { requestClose } = useUnsavedGuard({
588
588
  {{ t('prReview.selectedCount', { count: activeSelectedIds.length }) }}
589
589
  </span>
590
590
  <UButton
591
- color="primary"
592
591
  variant="link"
593
592
  class="p-0 text-2xs text-primary hover:underline"
594
593
  @click="selectAll"
@@ -596,7 +595,6 @@ const { requestClose } = useUnsavedGuard({
596
595
  {{ t('prReview.selectAll') }}
597
596
  </UButton>
598
597
  <UButton
599
- color="primary"
600
598
  variant="link"
601
599
  class="p-0 text-2xs text-primary hover:underline"
602
600
  @click="clearAll"
@@ -760,7 +758,6 @@ const { requestClose } = useUnsavedGuard({
760
758
  class="mt-1.5 flex items-center gap-3 text-2xs"
761
759
  >
762
760
  <UButton
763
- color="primary"
764
761
  variant="link"
765
762
  v-if="!isRetracted(f)"
766
763
  data-testid="pr-review-finding-challenge"
@@ -880,7 +877,6 @@ const { requestClose } = useUnsavedGuard({
880
877
  {{ postReport ? t('prReview.postReport.retry') : t('prReview.post') }}
881
878
  </UButton>
882
879
  <UButton
883
- color="primary"
884
880
  :loading="prReview.resolving"
885
881
  :disabled="!canResolve || !hasSelection || !access.canExecuteRuns.value"
886
882
  :title="access.canExecuteRuns.value ? undefined : t('access.noRunExecute')"
@@ -97,7 +97,7 @@ function go(action: () => void) {
97
97
  >
98
98
  {{ t('providers.presetMismatch.configureVendors') }}
99
99
  </UButton>
100
- <UButton color="primary" size="sm" icon="i-lucide-cpu" @click="go(ui.openModelConfig)">
100
+ <UButton size="sm" icon="i-lucide-cpu" @click="go(ui.openModelConfig)">
101
101
  {{ t('providers.presetMismatch.editPresets') }}
102
102
  </UButton>
103
103
  </div>
@@ -100,19 +100,13 @@ const routes = computed<Route[]>(() => [
100
100
  <div class="min-w-0 flex-1">
101
101
  <div class="flex items-center gap-2">
102
102
  <p class="text-sm font-semibold text-app-100">{{ r.title }}</p>
103
- <UBadge v-if="r.badge" color="primary" variant="subtle" size="sm">
103
+ <UBadge v-if="r.badge" variant="subtle" size="sm">
104
104
  {{ r.badge }}
105
105
  </UBadge>
106
106
  </div>
107
107
  <p class="mt-0.5 text-sm leading-relaxed text-muted">{{ r.body }}</p>
108
108
  </div>
109
- <UButton
110
- size="sm"
111
- color="primary"
112
- variant="subtle"
113
- class="shrink-0"
114
- @click="r.onSelect()"
115
- >
109
+ <UButton size="sm" variant="subtle" class="shrink-0" @click="r.onSelect()">
116
110
  {{ r.cta }}
117
111
  </UButton>
118
112
  </div>
@@ -206,13 +206,7 @@ function vendorLabel(v: SubscriptionVendor): string {
206
206
  <p class="min-w-0 flex-1 text-sm text-toned">
207
207
  {{ t('providers.vendorCredentials.personalCallout.text') }}
208
208
  </p>
209
- <UButton
210
- size="xs"
211
- color="primary"
212
- variant="subtle"
213
- class="shrink-0"
214
- @click="activeTab = 'personal'"
215
- >
209
+ <UButton size="xs" variant="subtle" class="shrink-0" @click="activeTab = 'personal'">
216
210
  {{ t('providers.vendorCredentials.personalCallout.cta') }}
217
211
  </UButton>
218
212
  </div>
@@ -120,6 +120,7 @@ function when(epochMs: number): string {
120
120
  {{ t('provisioning.title') }}
121
121
  </SectionLabel>
122
122
  <UButton
123
+ color="neutral"
123
124
  icon="i-lucide-rotate-ccw"
124
125
  variant="ghost"
125
126
  size="xs"
@@ -921,7 +921,6 @@ async function resolveExceeded(choice: 'extra-round' | 'proceed' | 'stop-reset')
921
921
  v-if="autoDefaults.get(item.id)!.groundedInFragment"
922
922
  size="xs"
923
923
  variant="subtle"
924
- color="primary"
925
924
  >
926
925
  {{
927
926
  t('requirements.currentStandard', {
@@ -1027,7 +1026,6 @@ async function resolveExceeded(choice: 'extra-round' | 'proceed' | 'stop-reset')
1027
1026
  </p>
1028
1027
  <div class="mt-2 flex flex-wrap items-center gap-2">
1029
1028
  <UButton
1030
- color="primary"
1031
1029
  variant="soft"
1032
1030
  size="xs"
1033
1031
  icon="i-lucide-check"
@@ -1231,7 +1229,6 @@ async function resolveExceeded(choice: 'extra-round' | 'proceed' | 'stop-reset')
1231
1229
  class="border-t border-default pt-4"
1232
1230
  >
1233
1231
  <UButton
1234
- color="primary"
1235
1232
  variant="soft"
1236
1233
  size="sm"
1237
1234
  block
@@ -1255,7 +1252,6 @@ async function resolveExceeded(choice: 'extra-round' | 'proceed' | 'stop-reset')
1255
1252
  <div v-if="review && status === 'ready'" class="space-y-2 border-t border-default pt-4">
1256
1253
  <UButton
1257
1254
  v-if="canProceed"
1258
- color="primary"
1259
1255
  size="sm"
1260
1256
  block
1261
1257
  icon="i-lucide-arrow-right"
@@ -1270,7 +1266,6 @@ async function resolveExceeded(choice: 'extra-round' | 'proceed' | 'stop-reset')
1270
1266
  </UButton>
1271
1267
  <UButton
1272
1268
  v-else
1273
- color="primary"
1274
1269
  size="sm"
1275
1270
  block
1276
1271
  icon="i-lucide-wand-sparkles"
@@ -1296,7 +1291,6 @@ async function resolveExceeded(choice: 'extra-round' | 'proceed' | 'stop-reset')
1296
1291
  <!-- action: merged (inspect → re-review / redo) -->
1297
1292
  <div v-if="review && merged" class="space-y-2 border-t border-default pt-4">
1298
1293
  <UButton
1299
- color="primary"
1300
1294
  size="sm"
1301
1295
  block
1302
1296
  icon="i-lucide-sparkles"
@@ -1333,7 +1327,6 @@ async function resolveExceeded(choice: 'extra-round' | 'proceed' | 'stop-reset')
1333
1327
  :placeholder="t('requirements.redoPlaceholder')"
1334
1328
  />
1335
1329
  <UButton
1336
- color="primary"
1337
1330
  variant="soft"
1338
1331
  size="xs"
1339
1332
  block
@@ -457,7 +457,6 @@ async function archive(prompt: SandboxPromptVersion) {
457
457
  </span>
458
458
  </span>
459
459
  <UButton
460
- color="primary"
461
460
  icon="i-lucide-play"
462
461
  size="sm"
463
462
  :loading="store.launching"
@@ -630,9 +629,9 @@ async function archive(prompt: SandboxPromptVersion) {
630
629
  Offered on a graded candidate and on an older workspace revision (rolling
631
630
  back), but not on the one already live, where it would be a no-op. -->
632
631
  <IconButton
632
+ color="neutral"
633
633
  v-if="canPromote(p)"
634
634
  icon="i-lucide-rocket"
635
- color="primary"
636
635
  variant="ghost"
637
636
  size="xs"
638
637
  :loading="promoting === p.id"
@@ -674,7 +673,6 @@ async function archive(prompt: SandboxPromptVersion) {
674
673
  {{ t('common.cancel') }}
675
674
  </UButton>
676
675
  <UButton
677
- color="primary"
678
676
  icon="i-lucide-save"
679
677
  size="sm"
680
678
  :loading="savingPrompt"
@@ -167,13 +167,7 @@ function saveUser() {
167
167
  }}
168
168
  </div>
169
169
  <div class="flex justify-end">
170
- <UButton
171
- color="primary"
172
- icon="i-lucide-save"
173
- size="sm"
174
- :loading="savingWorkspace"
175
- @click="saveWorkspace"
176
- >
170
+ <UButton icon="i-lucide-save" size="sm" :loading="savingWorkspace" @click="saveWorkspace">
177
171
  {{ t('settings.workspaceSettings.budget.saveTier') }}
178
172
  </UButton>
179
173
  </div>
@@ -222,7 +216,6 @@ function saveUser() {
222
216
  </p>
223
217
  <div v-if="canEditAccount" class="flex justify-end">
224
218
  <UButton
225
- color="primary"
226
219
  icon="i-lucide-save"
227
220
  size="sm"
228
221
  :loading="savingAccount"
@@ -273,7 +266,6 @@ function saveUser() {
273
266
  </div>
274
267
  <div class="flex justify-end">
275
268
  <UButton
276
- color="primary"
277
269
  icon="i-lucide-save"
278
270
  size="sm"
279
271
  :loading="savingUser"
@@ -90,7 +90,6 @@ function start() {
90
90
  <div class="flex items-center gap-2">
91
91
  <UButton
92
92
  size="xs"
93
- color="primary"
94
93
  variant="soft"
95
94
  icon="i-lucide-wand-sparkles"
96
95
  data-testid="compose-env-setup-start"
@@ -483,7 +483,6 @@ async function remove(group: ConsensusGroup) {
483
483
  {{ t('settings.consensusGroups.editor.cancel') }}
484
484
  </UButton>
485
485
  <UButton
486
- color="primary"
487
486
  size="sm"
488
487
  :loading="busy"
489
488
  :disabled="!editor.name.trim() || gatingIncomplete"
@@ -192,7 +192,7 @@ async function remove(type: CustomManifestType) {
192
192
  <UButton v-if="editing" color="neutral" variant="ghost" size="sm" @click="startAdd">
193
193
  {{ t('common.cancel') }}
194
194
  </UButton>
195
- <UButton color="primary" size="sm" :loading="busy" :disabled="!canSave" @click="save">
195
+ <UButton size="sm" :loading="busy" :disabled="!canSave" @click="save">
196
196
  {{ editing ? t('common.save') : t('settings.infrastructure.customType.add') }}
197
197
  </UButton>
198
198
  </div>
@@ -156,7 +156,6 @@ async function save() {
156
156
  <div class="flex items-center gap-2">
157
157
  <UButton
158
158
  size="xs"
159
- color="primary"
160
159
  icon="i-lucide-check"
161
160
  :loading="saving"
162
161
  :disabled="!canSave"
@@ -527,7 +527,7 @@ function toastRemoved() {
527
527
  class="h-3.5 w-3.5"
528
528
  />
529
529
  {{ t('settings.infrastructure.handler.personalOverride') }}
530
- <UBadge v-if="kubeUserHandler" color="primary" variant="subtle" size="sm">
530
+ <UBadge v-if="kubeUserHandler" variant="subtle" size="sm">
531
531
  {{ t('settings.infrastructure.handler.overrideActive') }}
532
532
  </UBadge>
533
533
  </SectionLabel>
@@ -540,7 +540,7 @@ function toastRemoved() {
540
540
  <UButton
541
541
  icon="i-lucide-trash-2"
542
542
  color="error"
543
- variant="ghost"
543
+ variant="soft"
544
544
  size="xs"
545
545
  :disabled="busy"
546
546
  @click="removeKubeOverride"
@@ -437,14 +437,7 @@ async function checkSetup(source: TaskSourceKind) {
437
437
  </section>
438
438
 
439
439
  <div class="flex justify-end">
440
- <UButton
441
- color="primary"
442
- icon="i-lucide-save"
443
- size="sm"
444
- :loading="saving"
445
- :disabled="!canSave"
446
- @click="save"
447
- >
440
+ <UButton icon="i-lucide-save" size="sm" :loading="saving" :disabled="!canSave" @click="save">
448
441
  {{ t('common.save') }}
449
442
  </UButton>
450
443
  </div>
@@ -604,13 +604,7 @@ async function copyAutoSetupCommand() {
604
604
  <p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-app-error-400">
605
605
  {{ connectBlockedReason }}
606
606
  </p>
607
- <UButton
608
- color="primary"
609
- size="sm"
610
- :loading="busy"
611
- :disabled="!canSave"
612
- @click="emit('save', buildPayload())"
613
- >
607
+ <UButton size="sm" :loading="busy" :disabled="!canSave" @click="emit('save', buildPayload())">
614
608
  {{ connected ? t('common.save') : t('settings.providerConnection.form.connect') }}
615
609
  </UButton>
616
610
  </div>
@@ -458,13 +458,7 @@ function optional(label: string): string {
458
458
  <p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-app-error-400">
459
459
  {{ connectBlockedReason }}
460
460
  </p>
461
- <UButton
462
- color="primary"
463
- size="sm"
464
- :loading="busy"
465
- :disabled="!canSave"
466
- @click="emit('save', buildPayload())"
467
- >
461
+ <UButton size="sm" :loading="busy" :disabled="!canSave" @click="emit('save', buildPayload())">
468
462
  {{
469
463
  connection?.kind === 'kubernetes'
470
464
  ? t('common.save')
@@ -164,7 +164,7 @@ async function save() {
164
164
  </section>
165
165
 
166
166
  <div class="flex justify-end">
167
- <UButton color="primary" icon="i-lucide-save" :loading="saving" @click="save">
167
+ <UButton icon="i-lucide-save" :loading="saving" @click="save">
168
168
  {{ t('common.save') }}
169
169
  </UButton>
170
170
  </div>
@@ -472,7 +472,6 @@ async function remove(p: LocalRunner) {
472
472
 
473
473
  <div class="flex justify-end">
474
474
  <UButton
475
- color="primary"
476
475
  variant="soft"
477
476
  size="sm"
478
477
  icon="i-lucide-save"
@@ -243,7 +243,6 @@ function backToApp() {
243
243
  </UButton>
244
244
  <UButton
245
245
  block
246
- color="primary"
247
246
  :loading="screen === 'submitting'"
248
247
  :disabled="!workspaceId"
249
248
  data-testid="mcp-authorize-approve"
@@ -86,7 +86,7 @@ function backToApp() {
86
86
  <p class="mb-6 text-sm text-muted">
87
87
  {{ t('settings.toolServers.oauth.callback.doneHint') }}
88
88
  </p>
89
- <UButton block color="primary" @click="backToApp">
89
+ <UButton block @click="backToApp">
90
90
  {{ t('settings.toolServers.oauth.callback.back') }}
91
91
  </UButton>
92
92
  </template>
@@ -365,13 +365,7 @@ async function save() {
365
365
  </template>
366
366
  </i18n-t>
367
367
  </p>
368
- <UButton
369
- icon="i-lucide-plus"
370
- color="primary"
371
- size="sm"
372
- class="shrink-0"
373
- @click="startCreate"
374
- >
368
+ <UButton icon="i-lucide-plus" size="sm" class="shrink-0" @click="startCreate">
375
369
  {{ t('settings.modelConfiguration.list.newPreset') }}
376
370
  </UButton>
377
371
  </div>
@@ -388,7 +382,7 @@ async function save() {
388
382
  >
389
383
  <div class="flex items-center gap-2">
390
384
  <span class="truncate text-sm font-semibold text-app-100">{{ p.name }}</span>
391
- <UBadge v-if="p.isDefault" color="primary" variant="subtle" size="xs">
385
+ <UBadge v-if="p.isDefault" variant="subtle" size="xs">
392
386
  {{ t('settings.modelConfiguration.list.default') }}
393
387
  </UBadge>
394
388
  <div class="ms-auto flex items-center gap-1">
@@ -483,7 +477,6 @@ async function save() {
483
477
  >
484
478
  <UButton
485
479
  size="sm"
486
- color="primary"
487
480
  variant="subtle"
488
481
  trailing-icon="i-lucide-chevron-down"
489
482
  class="w-full justify-between"
@@ -576,7 +569,7 @@ async function save() {
576
569
  >
577
570
  {{ t('common.cancel') }}
578
571
  </UButton>
579
- <UButton color="primary" size="sm" :loading="busy" @click="save">
572
+ <UButton size="sm" :loading="busy" @click="save">
580
573
  {{
581
574
  editor.id
582
575
  ? t('settings.modelConfiguration.editor.saveChanges')
@@ -87,7 +87,6 @@ const reseedableCount = computed(
87
87
  </div>
88
88
  <UButton
89
89
  size="xs"
90
- color="primary"
91
90
  variant="subtle"
92
91
  icon="i-lucide-plus"
93
92
  :loading="isBusy(i.id)"
@@ -130,7 +129,6 @@ const reseedableCount = computed(
130
129
  </div>
131
130
  <UButton
132
131
  size="xs"
133
- color="primary"
134
132
  variant="subtle"
135
133
  icon="i-lucide-rotate-ccw"
136
134
  :loading="isBusy(i.id)"
@@ -149,7 +147,6 @@ const reseedableCount = computed(
149
147
  <div class="flex w-full items-center justify-between gap-2">
150
148
  <UButton
151
149
  v-if="reseedableCount > 1"
152
- color="primary"
153
150
  variant="ghost"
154
151
  icon="i-lucide-rotate-ccw"
155
152
  :loading="anyBusy"
@@ -332,7 +332,6 @@ function manageKeys() {
332
332
  </UButton>
333
333
  <UButton
334
334
  v-if="recommendedAvailable.length"
335
- color="primary"
336
335
  variant="soft"
337
336
  size="sm"
338
337
  icon="i-lucide-sparkles"
@@ -397,14 +396,7 @@ function manageKeys() {
397
396
  <span class="text-xs text-dimmed">{{
398
397
  t('settings.openRouterCatalog.enabledCount', { count: selectedCount }, selectedCount)
399
398
  }}</span>
400
- <UButton
401
- color="primary"
402
- variant="soft"
403
- size="sm"
404
- icon="i-lucide-save"
405
- :loading="busy"
406
- @click="save()"
407
- >
399
+ <UButton variant="soft" size="sm" icon="i-lucide-save" :loading="busy" @click="save()">
408
400
  {{ t('common.save') }}
409
401
  </UButton>
410
402
  </div>
@@ -356,6 +356,7 @@ function fieldHelp(key: string): string | undefined {
356
356
  <div class="flex items-start justify-between gap-3">
357
357
  <p class="text-xs text-muted">{{ blurb }}</p>
358
358
  <UButton
359
+ color="neutral"
359
360
  :icon="showLogs ? 'i-lucide-chevron-up' : 'i-lucide-scroll-text'"
360
361
  variant="ghost"
361
362
  size="xs"
@@ -506,13 +507,7 @@ function fieldHelp(key: string): string | undefined {
506
507
  <ConnectionWarnings :warnings="testResult?.warnings" />
507
508
 
508
509
  <div class="flex justify-end">
509
- <UButton
510
- color="primary"
511
- size="sm"
512
- :loading="busy"
513
- :disabled="!canSave"
514
- @click="saveNative()"
515
- >
510
+ <UButton size="sm" :loading="busy" :disabled="!canSave" @click="saveNative()">
516
511
  {{ connection ? t('common.save') : t('settings.providerConnection.form.connect') }}
517
512
  </UButton>
518
513
  </div>
@@ -289,7 +289,6 @@ function onSave() {
289
289
 
290
290
  <div class="flex justify-end">
291
291
  <UButton
292
- color="primary"
293
292
  size="sm"
294
293
  :loading="busy"
295
294
  :disabled="!canSave"
@@ -176,7 +176,6 @@ function submit() {
176
176
  :label="t('settings.riskPolicy.forkDecision.label')"
177
177
  />
178
178
  <UButton
179
- color="primary"
180
179
  size="sm"
181
180
  icon="i-lucide-plus"
182
181
  :loading="busy"
@@ -130,7 +130,7 @@ const deleteBlocked = computed(
130
130
  >
131
131
  {{ t('settings.riskPolicy.makeUnattendedDefaultShort') }}
132
132
  </UButton>
133
- <UBadge v-if="policy.isDefault" color="primary" variant="subtle" size="sm">
133
+ <UBadge v-if="policy.isDefault" variant="subtle" size="sm">
134
134
  {{ t('settings.riskPolicy.default') }}
135
135
  </UBadge>
136
136
  <UButton
@@ -314,7 +314,6 @@ const deleteBlocked = computed(
314
314
  "
315
315
  />
316
316
  <UButton
317
- color="primary"
318
317
  variant="soft"
319
318
  size="xs"
320
319
  icon="i-lucide-save"
@@ -78,7 +78,6 @@ const reseedableCount = computed(
78
78
  </div>
79
79
  <UButton
80
80
  size="xs"
81
- color="primary"
82
81
  variant="subtle"
83
82
  icon="i-lucide-plus"
84
83
  :loading="isBusy(i.id)"
@@ -121,7 +120,6 @@ const reseedableCount = computed(
121
120
  </div>
122
121
  <UButton
123
122
  size="xs"
124
- color="primary"
125
123
  variant="subtle"
126
124
  icon="i-lucide-rotate-ccw"
127
125
  :loading="isBusy(i.id)"
@@ -140,7 +138,6 @@ const reseedableCount = computed(
140
138
  <div class="flex w-full items-center justify-between gap-2">
141
139
  <UButton
142
140
  v-if="reseedableCount > 1"
143
- color="primary"
144
141
  variant="ghost"
145
142
  icon="i-lucide-rotate-ccw"
146
143
  :loading="anyBusy"
@@ -81,7 +81,6 @@ function remove(id: string) {
81
81
  <UBadge
82
82
  v-for="f in selected"
83
83
  :key="f.id"
84
- color="primary"
85
84
  variant="subtle"
86
85
  size="sm"
87
86
  class="cursor-pointer"
@@ -100,7 +99,6 @@ function remove(id: string) {
100
99
  {{ t('settings.serviceFragmentDefaults.footer.question') }}
101
100
  </span>
102
101
  <UButton
103
- color="primary"
104
102
  variant="link"
105
103
  class="p-0 text-2xs font-medium text-primary hover:underline"
106
104
  @click="ui.openFragmentLibrary()"
@@ -108,7 +106,6 @@ function remove(id: string) {
108
106
  {{ t('settings.serviceFragmentDefaults.footer.manageBoard') }}
109
107
  </UButton>
110
108
  <UButton
111
- color="primary"
112
109
  variant="link"
113
110
  class="p-0 text-2xs font-medium text-primary hover:underline"
114
111
  @click="ui.openAccountSettings('fragments')"
@@ -242,7 +242,7 @@ async function runProbe(id: string) {
242
242
  <UButton
243
243
  v-if="server.oauth.connected"
244
244
  size="xs"
245
- variant="ghost"
245
+ variant="soft"
246
246
  color="error"
247
247
  :loading="store.connecting === server.id"
248
248
  :disabled="store.connecting !== null"
@@ -242,13 +242,7 @@ async function remove() {
242
242
  />
243
243
 
244
244
  <div class="flex justify-end">
245
- <UButton
246
- color="primary"
247
- size="sm"
248
- :loading="busy"
249
- :disabled="!buildPayload()"
250
- @click="save()"
251
- >
245
+ <UButton size="sm" :loading="busy" :disabled="!buildPayload()" @click="save()">
252
246
  {{ status ? t('common.save') : t('settings.userSecrets.addToken') }}
253
247
  </UButton>
254
248
  </div>
@@ -133,7 +133,6 @@ function selectItems(field: WorkspaceMetadataFieldDefinition) {
133
133
 
134
134
  <div class="flex justify-end">
135
135
  <UButton
136
- color="primary"
137
136
  size="sm"
138
137
  icon="i-lucide-save"
139
138
  :loading="saving"
@@ -706,13 +706,7 @@ async function save() {
706
706
  </section>
707
707
 
708
708
  <div class="flex justify-end">
709
- <UButton
710
- color="primary"
711
- icon="i-lucide-save"
712
- size="sm"
713
- :loading="saving"
714
- @click="save"
715
- >
709
+ <UButton icon="i-lucide-save" size="sm" :loading="saving" @click="save">
716
710
  {{ t('common.save') }}
717
711
  </UButton>
718
712
  </div>
@@ -139,7 +139,6 @@ function toggle(id: string) {
139
139
  <UBadge
140
140
  v-for="(s, i) in queued"
141
141
  :key="s.id"
142
- color="primary"
143
142
  variant="subtle"
144
143
  size="sm"
145
144
  class="cursor-pointer"
@@ -236,6 +236,7 @@ async function unlinkSource(id: string) {
236
236
  </UBadge>
237
237
  <div class="ms-auto flex gap-1">
238
238
  <IconButton
239
+ color="neutral"
239
240
  icon="i-lucide-search-check"
240
241
  size="xs"
241
242
  variant="ghost"
@@ -244,6 +245,7 @@ async function unlinkSource(id: string) {
244
245
  @click="checkSource(s.id)"
245
246
  />
246
247
  <IconButton
248
+ color="neutral"
247
249
  icon="i-lucide-refresh-cw"
248
250
  size="xs"
249
251
  variant="ghost"