@cat-factory/app 0.310.0 → 0.310.2

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 (133) hide show
  1. package/README.md +17 -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 +1 -8
  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/fragments/FragmentSelector.vue +0 -1
  35. package/app/components/gates/GateResultView.vue +0 -1
  36. package/app/components/github/AddServiceFromRepoModal.vue +0 -2
  37. package/app/components/github/GitHubConnect.vue +1 -2
  38. package/app/components/github/GitHubPanel.vue +0 -2
  39. package/app/components/github/RepoTreeBrowser.vue +0 -3
  40. package/app/components/guidedReview/GuidedReviewDraftCard.vue +1 -1
  41. package/app/components/guidedReview/GuidedReviewPicker.vue +0 -1
  42. package/app/components/guidedReview/GuidedReviewThread.vue +0 -2
  43. package/app/components/humanTest/HumanTestWindow.vue +0 -1
  44. package/app/components/initiative/InitiativePlanDecision.vue +0 -1
  45. package/app/components/initiative/InitiativePlanReview.vue +0 -1
  46. package/app/components/initiative/InitiativePlanningWindow.vue +1 -2
  47. package/app/components/initiative/InitiativeTrackerWindow.vue +1 -1
  48. package/app/components/inputGate/InputGateNotice.vue +0 -1
  49. package/app/components/judge/JudgeResultView.vue +0 -1
  50. package/app/components/layout/AccountDeploymentSettings.vue +5 -35
  51. package/app/components/layout/AccountModelPolicySettings.vue +0 -1
  52. package/app/components/layout/AccountPlatformAlertSettings.vue +0 -1
  53. package/app/components/layout/AccountRunCredentialSettings.vue +0 -1
  54. package/app/components/layout/AccountTeamSettings.vue +3 -3
  55. package/app/components/layout/AiProvidersBanner.vue +1 -7
  56. package/app/components/layout/BoardSwitcher.vue +1 -1
  57. package/app/components/layout/DefaultTestEnvBanner.vue +0 -1
  58. package/app/components/layout/GitHubPatBanner.vue +0 -1
  59. package/app/components/layout/GitHubPatPermissionsBanner.vue +0 -1
  60. package/app/components/layout/InfraSetupBanner.vue +0 -1
  61. package/app/components/layout/IntegrationsHub.vue +0 -2
  62. package/app/components/layout/ModelProvidersHub.vue +1 -6
  63. package/app/components/layout/ProviderConfigBanner.vue +0 -1
  64. package/app/components/layout/SideBar.vue +0 -1
  65. package/app/components/layout/SpendWarningBanner.vue +0 -1
  66. package/app/components/layout/WorkspaceMembersSettings.vue +0 -1
  67. package/app/components/notifications/NotificationSettingsPanel.vue +0 -1
  68. package/app/components/outcome/OutcomeSummaryWindow.vue +0 -3
  69. package/app/components/panels/AgentStepDetail.vue +0 -5
  70. package/app/components/panels/DecisionModal.vue +0 -1
  71. package/app/components/panels/inspector/ContainerSummary.vue +1 -1
  72. package/app/components/panels/inspector/FrontendConfig.vue +0 -4
  73. package/app/components/panels/inspector/InitiativeInspector.vue +1 -6
  74. package/app/components/panels/inspector/RecurringScheduleSettings.vue +1 -3
  75. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +1 -8
  76. package/app/components/panels/inspector/ServiceSelfTests.vue +0 -2
  77. package/app/components/panels/inspector/ServiceTestConfig.vue +1 -4
  78. package/app/components/panels/inspector/ServiceTestSecrets.vue +0 -1
  79. package/app/components/panels/inspector/ServiceTestingContext.vue +0 -1
  80. package/app/components/panels/inspector/ServiceValidationConfig.vue +0 -1
  81. package/app/components/panels/inspector/TaskExecution.vue +0 -4
  82. package/app/components/panels/inspector/TaskReviewTarget.vue +0 -2
  83. package/app/components/panels/inspector/TaskRunSettings.vue +2 -14
  84. package/app/components/panels/inspector/TaskTypeFields.vue +0 -1
  85. package/app/components/pipeline/AgentPromptEditor.vue +0 -2
  86. package/app/components/pipeline/IterationCapPrompt.vue +0 -1
  87. package/app/components/pipeline/PipelineBuilder.vue +1 -10
  88. package/app/components/pipeline/PipelineHealthModal.vue +0 -4
  89. package/app/components/prReview/PrReviewWindow.vue +0 -4
  90. package/app/components/providers/AiPresetMismatchDialog.vue +1 -1
  91. package/app/components/providers/AiProviderOnboardingModal.vue +2 -8
  92. package/app/components/providers/VendorCredentialsModal.vue +1 -7
  93. package/app/components/requirements/RequirementsReviewWindow.vue +0 -7
  94. package/app/components/sandbox/SandboxPanel.vue +0 -3
  95. package/app/components/settings/BudgetSettings.vue +1 -9
  96. package/app/components/settings/ComposeEnvironmentSetupSection.vue +0 -1
  97. package/app/components/settings/ConsensusGroupsSection.vue +0 -1
  98. package/app/components/settings/CustomManifestTypeEditor.vue +1 -1
  99. package/app/components/settings/DefaultProvisionTypeSection.vue +0 -1
  100. package/app/components/settings/InfraHandlersConfigurator.vue +1 -1
  101. package/app/components/settings/IssueTrackerPanel.vue +1 -8
  102. package/app/components/settings/KubernetesEngineForm.vue +1 -7
  103. package/app/components/settings/KubernetesEnvironmentForm.vue +1 -7
  104. package/app/components/settings/LocalContainerPoolSettings.vue +1 -1
  105. package/app/components/settings/LocalModelEndpointsPanel.vue +0 -1
  106. package/app/components/settings/McpAuthorizeScreen.vue +0 -1
  107. package/app/components/settings/McpOAuthCallbackScreen.vue +1 -1
  108. package/app/components/settings/ModelConfigurationPanel.vue +3 -10
  109. package/app/components/settings/ModelPresetHealthModal.vue +0 -3
  110. package/app/components/settings/OpenRouterCatalogPanel.vue +1 -9
  111. package/app/components/settings/ProviderConnectionTab.vue +1 -7
  112. package/app/components/settings/ProviderManifestEditor.vue +0 -1
  113. package/app/components/settings/RiskPolicyCreateForm.vue +0 -1
  114. package/app/components/settings/RiskPolicyEditorRow.vue +1 -2
  115. package/app/components/settings/RiskPolicyHealthModal.vue +0 -3
  116. package/app/components/settings/ServiceFragmentDefaultsPanel.vue +0 -3
  117. package/app/components/settings/UserSecretsSection.vue +1 -7
  118. package/app/components/settings/WorkspaceMetadataSettings.vue +0 -1
  119. package/app/components/settings/WorkspaceSettingsPanel.vue +1 -7
  120. package/app/components/skills/ReviewSkillQueue.vue +0 -1
  121. package/app/components/slack/SlackPanel.vue +0 -4
  122. package/app/components/spec/ServiceSpecWindow.vue +0 -1
  123. package/app/components/tasks/BugHuntModal.vue +0 -3
  124. package/app/components/tasks/TaskImportModal.vue +0 -2
  125. package/app/components/tasks/TaskSourceConnectModal.vue +1 -8
  126. package/app/components/tutorial/TutorialCatalogue.vue +0 -1
  127. package/app/components/tutorial/TutorialNudge.vue +0 -1
  128. package/app/components/tutorial/TutorialOverlay.vue +0 -2
  129. package/app/components/tutorial/TutorialPrompt.vue +0 -1
  130. package/app/components/vcs/GitLabConnect.vue +0 -1
  131. package/app/components/visualConfirm/VisualConfirmationWindow.vue +0 -1
  132. package/app/pages/index.vue +1 -1
  133. package/package.json +2 -2
@@ -246,7 +246,6 @@ function hasRecordedAnswer(item: FollowUpItem): boolean {
246
246
  <div class="flex flex-wrap items-center gap-2">
247
247
  <UButton
248
248
  size="xs"
249
- color="primary"
250
249
  :loading="followUps.isActing(item.id)"
251
250
  :disabled="!(drafts[item.id] ?? '').trim() || !access.canExecuteRuns.value"
252
251
  :title="access.canExecuteRuns.value ? undefined : t('access.noRunExecute')"
@@ -287,7 +286,6 @@ function hasRecordedAnswer(item: FollowUpItem): boolean {
287
286
  <div v-else class="flex flex-wrap items-center gap-2">
288
287
  <UButton
289
288
  size="xs"
290
- color="primary"
291
289
  icon="i-lucide-ticket"
292
290
  :loading="followUps.isActing(item.id)"
293
291
  :disabled="!access.canExecuteRuns.value"
@@ -238,7 +238,7 @@ const { requestClose } = useUnsavedGuard({
238
238
  <template #label="{ item }">
239
239
  <span class="flex items-center gap-2">
240
240
  <span class="min-w-0 flex-1 text-sm font-medium text-app-100">{{ item.label }}</span>
241
- <UBadge v-if="item.fork?.recommended" color="primary" variant="subtle" size="sm">
241
+ <UBadge v-if="item.fork?.recommended" variant="subtle" size="sm">
242
242
  {{ t('forkDecision.recommended') }}
243
243
  </UBadge>
244
244
  </span>
@@ -382,7 +382,6 @@ const { requestClose } = useUnsavedGuard({
382
382
  </UButton>
383
383
  <UButton
384
384
  data-testid="fork-option-choose"
385
- color="primary"
386
385
  size="sm"
387
386
  icon="i-lucide-check"
388
387
  :loading="forkDecision.choosing"
@@ -169,7 +169,6 @@ function manageAccount() {
169
169
  <UBadge
170
170
  v-for="f in selectedFragments"
171
171
  :key="f.id"
172
- color="primary"
173
172
  variant="subtle"
174
173
  size="sm"
175
174
  class="cursor-pointer"
@@ -303,7 +303,6 @@ const conflictVerdict = computed(() => {
303
303
  <div class="mt-2 flex justify-end">
304
304
  <UButton
305
305
  size="sm"
306
- color="primary"
307
306
  icon="i-lucide-wrench"
308
307
  :loading="fixBusy"
309
308
  :disabled="
@@ -597,7 +597,6 @@ function done() {
597
597
 
598
598
  <div class="flex justify-end">
599
599
  <UButton
600
- color="primary"
601
600
  icon="i-lucide-plus"
602
601
  size="sm"
603
602
  :loading="adding"
@@ -675,7 +674,6 @@ function done() {
675
674
  </UButton>
676
675
  <UButton
677
676
  v-if="!isMonorepo && !configuredBlock"
678
- color="primary"
679
677
  icon="i-lucide-plus"
680
678
  :loading="adding"
681
679
  :disabled="!canAdd"
@@ -151,7 +151,6 @@ async function connectManually() {
151
151
  <UButton
152
152
  v-else
153
153
  size="xs"
154
- color="primary"
155
154
  variant="subtle"
156
155
  icon="i-lucide-plug"
157
156
  :loading="connectingId === inst.installationId"
@@ -164,7 +163,7 @@ async function connectManually() {
164
163
  </section>
165
164
 
166
165
  <USeparator :label="t('github.connect.or')" />
167
- <UButton color="primary" icon="i-lucide-github" :loading="installing" @click="install">
166
+ <UButton icon="i-lucide-github" :loading="installing" @click="install">
168
167
  {{ t('github.connect.installApp') }}
169
168
  </UButton>
170
169
 
@@ -453,7 +453,6 @@ async function merge(pr: GitHubPullRequest) {
453
453
  {{ t('common.cancel') }}
454
454
  </UButton>
455
455
  <UButton
456
- color="primary"
457
456
  size="sm"
458
457
  icon="i-lucide-save"
459
458
  :loading="github.savingRepos"
@@ -625,7 +624,6 @@ async function merge(pr: GitHubPullRequest) {
625
624
  </div>
626
625
  <div class="flex justify-end">
627
626
  <UButton
628
- color="primary"
629
627
  icon="i-lucide-git-pull-request"
630
628
  :loading="openingPr"
631
629
  :disabled="!canOpenPr"
@@ -207,7 +207,6 @@ watch(
207
207
  class="flex items-center justify-between gap-2 px-3 py-1.5"
208
208
  >
209
209
  <UButton
210
- color="primary"
211
210
  variant="ghost"
212
211
  class="flex items-center gap-2 truncate p-0 text-sm text-default hover:bg-transparent hover:text-primary"
213
212
  @click="browseTo(entry.path)"
@@ -258,7 +257,6 @@ watch(
258
257
  @update:model-value="toggleAllFiles"
259
258
  />
260
259
  <UButton
261
- color="primary"
262
260
  variant="ghost"
263
261
  class="p-0 text-xs text-muted hover:bg-transparent hover:text-primary"
264
262
  @click="toggleAllFiles"
@@ -285,7 +283,6 @@ watch(
285
283
  @update:model-value="pick(entry.path)"
286
284
  />
287
285
  <UButton
288
- color="primary"
289
286
  variant="ghost"
290
287
  class="flex items-center gap-2 truncate p-0 text-sm hover:bg-transparent hover:text-primary"
291
288
  :class="isPicked(entry.path) ? 'text-primary' : 'text-toned'"
@@ -111,7 +111,7 @@ async function discard(): Promise<void> {
111
111
  ]"
112
112
  :aria-label="t('guidedReview.drafts.sideLabel')"
113
113
  />
114
- <UButton size="sm" color="primary" :loading="saving" @click="save">
114
+ <UButton size="sm" :loading="saving" @click="save">
115
115
  {{ t('guidedReview.drafts.save') }}
116
116
  </UButton>
117
117
  <UButton size="sm" variant="ghost" :disabled="saving" @click="editing = false">
@@ -80,7 +80,6 @@ function submit(number = prNumber.value): void {
80
80
  />
81
81
  </UFormField>
82
82
  <UButton
83
- color="primary"
84
83
  icon="i-lucide-scan-search"
85
84
  :loading="opening"
86
85
  :disabled="!repo || !prNumber"
@@ -196,7 +196,6 @@ async function draftComments(): Promise<void> {
196
196
  />
197
197
  <div class="flex flex-wrap items-center gap-2">
198
198
  <UButton
199
- color="primary"
200
199
  icon="i-lucide-upload"
201
200
  :loading="posting"
202
201
  :disabled="!toPost.length"
@@ -242,7 +241,6 @@ async function draftComments(): Promise<void> {
242
241
  data-testid="guided-review-deep"
243
242
  />
244
243
  <UButton
245
- color="primary"
246
244
  icon="i-lucide-send"
247
245
  :loading="sending"
248
246
  :disabled="!canSend"
@@ -353,7 +353,6 @@ const canDestroy = computed(
353
353
  :failure-at="instance?.failure?.occurredAt"
354
354
  />
355
355
  <UButton
356
- color="primary"
357
356
  icon="i-lucide-circle-check"
358
357
  :loading="busy"
359
358
  :disabled="busy || !awaitingHuman || !access.canExecuteRuns.value"
@@ -114,7 +114,6 @@ const disabledTitle = computed(() => (props.canExecute ? undefined : t('access.n
114
114
  />
115
115
  <div class="mt-2 flex flex-wrap items-center gap-2">
116
116
  <UButton
117
- color="primary"
118
117
  size="xs"
119
118
  icon="i-lucide-check"
120
119
  data-testid="initiative-plan-approve"
@@ -346,7 +346,6 @@ async function copyPlan() {
346
346
  {{ t('common.cancel') }}
347
347
  </UButton>
348
348
  <UButton
349
- color="primary"
350
349
  size="xs"
351
350
  data-testid="initiative-plan-comment-add"
352
351
  :disabled="!draftBody.trim()"
@@ -204,7 +204,7 @@ async function onDiscard() {
204
204
  @close="close"
205
205
  >
206
206
  <template v-if="initiative" #header-extras>
207
- <UBadge color="primary" variant="subtle" size="sm">
207
+ <UBadge variant="subtle" size="sm">
208
208
  {{ t(INITIATIVE_STATUS_LABEL_KEYS[initiative.status]) }}
209
209
  </UBadge>
210
210
  </template>
@@ -383,7 +383,6 @@ async function onDiscard() {
383
383
  {{ t('initiative.planning.proceed') }}
384
384
  </UButton>
385
385
  <UButton
386
- color="primary"
387
386
  size="sm"
388
387
  :loading="resuming"
389
388
  :disabled="unanswered > 0 || resetting"
@@ -329,7 +329,7 @@ const { requestClose } = useUnsavedGuard({
329
329
  {{ t('initiative.card.progress', { done: progress.settled, total: progress.total }) }}
330
330
  </span>
331
331
  </div>
332
- <UBadge v-if="initiative" color="primary" variant="subtle" size="sm">
332
+ <UBadge v-if="initiative" variant="subtle" size="sm">
333
333
  {{ t(INITIATIVE_STATUS_LABEL_KEYS[initiative.status]) }}
334
334
  </UBadge>
335
335
  </template>
@@ -170,7 +170,6 @@ async function resolve(choice: 'recheck' | 'proceed') {
170
170
 
171
171
  <div v-if="blocking" class="mt-3 flex flex-wrap items-center gap-2">
172
172
  <UButton
173
- color="primary"
174
173
  size="xs"
175
174
  icon="i-lucide-refresh-cw"
176
175
  :loading="inputGate.resolving"
@@ -293,7 +293,6 @@ async function act(choice: 'proceed' | 'bounce' | 'stop') {
293
293
  </UButton>
294
294
  <UButton
295
295
  size="sm"
296
- color="primary"
297
296
  icon="i-lucide-circle-check"
298
297
  :loading="busy"
299
298
  :disabled="!canAct"
@@ -479,13 +479,7 @@ async function clearWeb() {
479
479
  />
480
480
  </div>
481
481
  <div class="flex gap-2">
482
- <UButton
483
- color="primary"
484
- size="xs"
485
- icon="i-lucide-save"
486
- :loading="savingSlack"
487
- @click="saveSlack"
488
- >
482
+ <UButton size="xs" icon="i-lucide-save" :loading="savingSlack" @click="saveSlack">
489
483
  {{ t('common.save') }}
490
484
  </UButton>
491
485
  <UButton
@@ -540,13 +534,7 @@ async function clearWeb() {
540
534
  />
541
535
  </div>
542
536
  <div class="flex gap-2">
543
- <UButton
544
- color="primary"
545
- size="xs"
546
- icon="i-lucide-save"
547
- :loading="savingLinear"
548
- @click="saveLinear"
549
- >
537
+ <UButton size="xs" icon="i-lucide-save" :loading="savingLinear" @click="saveLinear">
550
538
  {{ t('common.save') }}
551
539
  </UButton>
552
540
  <UButton
@@ -601,13 +589,7 @@ async function clearWeb() {
601
589
  />
602
590
  </div>
603
591
  <div class="flex gap-2">
604
- <UButton
605
- color="primary"
606
- size="xs"
607
- icon="i-lucide-save"
608
- :loading="savingFigma"
609
- @click="saveFigma"
610
- >
592
+ <UButton size="xs" icon="i-lucide-save" :loading="savingFigma" @click="saveFigma">
611
593
  {{ t('common.save') }}
612
594
  </UButton>
613
595
  <UButton
@@ -658,13 +640,7 @@ async function clearWeb() {
658
640
  />
659
641
  </div>
660
642
  <div class="flex gap-2">
661
- <UButton
662
- color="primary"
663
- size="xs"
664
- icon="i-lucide-save"
665
- :loading="savingWeb"
666
- @click="saveWeb"
667
- >
643
+ <UButton size="xs" icon="i-lucide-save" :loading="savingWeb" @click="saveWeb">
668
644
  {{ t('common.save') }}
669
645
  </UButton>
670
646
  <UButton
@@ -795,13 +771,7 @@ async function clearWeb() {
795
771
  </template>
796
772
 
797
773
  <div class="flex gap-2">
798
- <UButton
799
- color="primary"
800
- size="xs"
801
- icon="i-lucide-save"
802
- :loading="savingStorage"
803
- @click="saveStorage"
804
- >
774
+ <UButton size="xs" icon="i-lucide-save" :loading="savingStorage" @click="saveStorage">
805
775
  {{ t('common.save') }}
806
776
  </UButton>
807
777
  </div>
@@ -232,7 +232,6 @@ async function save() {
232
232
 
233
233
  <div class="flex gap-2">
234
234
  <UButton
235
- color="primary"
236
235
  size="xs"
237
236
  icon="i-lucide-save"
238
237
  :loading="saving"
@@ -342,7 +342,6 @@ const hasOverrides = computed(
342
342
 
343
343
  <div class="flex gap-2">
344
344
  <UButton
345
- color="primary"
346
345
  size="xs"
347
346
  icon="i-lucide-save"
348
347
  :loading="saving"
@@ -80,7 +80,6 @@ async function save() {
80
80
 
81
81
  <div class="flex justify-end">
82
82
  <UButton
83
- color="primary"
84
83
  size="xs"
85
84
  icon="i-lucide-save"
86
85
  :loading="saving"
@@ -214,7 +214,7 @@ async function disconnectEmail() {
214
214
  :placeholder="t('layout.accountTeam.org.namePlaceholder')"
215
215
  class="flex-1"
216
216
  />
217
- <UButton type="submit" color="primary" :loading="busy" icon="i-lucide-plus">
217
+ <UButton type="submit" :loading="busy" icon="i-lucide-plus">
218
218
  {{ t('layout.accountTeam.org.create') }}
219
219
  </UButton>
220
220
  </UForm>
@@ -280,7 +280,7 @@ async function disconnectEmail() {
280
280
  class="flex-1"
281
281
  />
282
282
  <USelect v-model="inviteRoles" multiple :items="ROLE_ITEMS" class="w-44" />
283
- <UButton type="submit" color="primary" :loading="busy" icon="i-lucide-send">
283
+ <UButton type="submit" :loading="busy" icon="i-lucide-send">
284
284
  {{ t('layout.accountTeam.invite.submit') }}
285
285
  </UButton>
286
286
  </UForm>
@@ -345,7 +345,7 @@ async function disconnectEmail() {
345
345
  :placeholder="t('layout.accountTeam.email.apiKeyPlaceholder')"
346
346
  class="w-full"
347
347
  />
348
- <UButton type="submit" color="primary" :loading="busy">
348
+ <UButton type="submit" :loading="busy">
349
349
  {{ t('layout.accountTeam.email.connect') }}
350
350
  </UButton>
351
351
  </UForm>
@@ -47,12 +47,7 @@ const show = computed(() => showSetup.value || showPreset.value)
47
47
  {{ t('layout.aiProvidersBanner.setup.body') }}
48
48
  </p>
49
49
  <div class="mt-4">
50
- <UButton
51
- color="warning"
52
- variant="solid"
53
- icon="i-lucide-settings"
54
- @click="ui.openAiProviderSetup()"
55
- >
50
+ <UButton color="warning" icon="i-lucide-settings" @click="ui.openAiProviderSetup()">
56
51
  {{ t('layout.aiProvidersBanner.setup.action') }}
57
52
  </UButton>
58
53
  </div>
@@ -92,7 +87,6 @@ const show = computed(() => showSetup.value || showPreset.value)
92
87
  <UButton
93
88
  size="sm"
94
89
  color="warning"
95
- variant="solid"
96
90
  icon="i-lucide-cpu"
97
91
  @click="ui.openAiPresetMismatch()"
98
92
  >
@@ -339,7 +339,7 @@ async function submitPrompt() {
339
339
  >
340
340
  {{ t('common.cancel') }}
341
341
  </UButton>
342
- <UButton type="submit" color="primary" :loading="busy">
342
+ <UButton type="submit" :loading="busy">
343
343
  {{ prompt ? promptMeta[prompt].cta : '' }}
344
344
  </UButton>
345
345
  </div>
@@ -82,7 +82,6 @@ function openConfig(event: MouseEvent) {
82
82
  :to="configUrl"
83
83
  size="sm"
84
84
  color="info"
85
- variant="solid"
86
85
  icon="i-lucide-settings"
87
86
  data-testid="default-test-env-configure"
88
87
  @click="openConfig"
@@ -53,7 +53,6 @@ const show = computed(() => !!setupUrl.value && !dismissed.value)
53
53
  target="_blank"
54
54
  rel="noopener noreferrer"
55
55
  color="warning"
56
- variant="solid"
57
56
  icon="i-lucide-external-link"
58
57
  trailing
59
58
  >
@@ -174,7 +174,6 @@ const fineGrainedPermissions = GITHUB_PAT_FINE_GRAINED_PERMISSIONS.join(', ')
174
174
  target="_blank"
175
175
  rel="noopener noreferrer"
176
176
  color="error"
177
- variant="solid"
178
177
  icon="i-lucide-external-link"
179
178
  trailing
180
179
  >
@@ -265,7 +265,6 @@ function dismissMenu(card: AreaCard): DropdownMenuItem[][] {
265
265
  <div class="mt-4">
266
266
  <UButton
267
267
  :color="card.kind === 'outage' ? 'error' : 'warning'"
268
- variant="solid"
269
268
  icon="i-lucide-settings"
270
269
  :data-testid="`infra-setup-configure-${card.area}`"
271
270
  @click="AREA_META[card.area].onConfigure()"
@@ -400,7 +400,6 @@ const filteredGroups = computed<IntegrationGroup[]>(() => {
400
400
  v-for="item in recommendedActions"
401
401
  :key="`rec:${item.key}`"
402
402
  size="xs"
403
- color="primary"
404
403
  variant="soft"
405
404
  :icon="item.icon"
406
405
  @click="item.onClick()"
@@ -450,7 +449,6 @@ const filteredGroups = computed<IntegrationGroup[]>(() => {
450
449
  }}</span>
451
450
  <UBadge
452
451
  v-if="!anyConnected && item.recommended && !item.connected"
453
- color="primary"
454
452
  variant="subtle"
455
453
  size="sm"
456
454
  >
@@ -225,12 +225,7 @@ const filteredGroups = computed<ProviderGroup[]>(() => {
225
225
  <span v-else class="text-2xs text-dimmed">{{
226
226
  t('layout.modelProvidersHub.status.notConnected')
227
227
  }}</span>
228
- <UBadge
229
- v-if="!anyConnected && item.recommended"
230
- color="primary"
231
- variant="subtle"
232
- size="sm"
233
- >
228
+ <UBadge v-if="!anyConnected && item.recommended" variant="subtle" size="sm">
234
229
  {{ t('layout.modelProvidersHub.status.recommended') }}
235
230
  </UBadge>
236
231
  </div>
@@ -77,7 +77,6 @@ const show = computed(() => pending.value.length > 0 && !dismissed.value)
77
77
  v-for="k in pending"
78
78
  :key="k"
79
79
  color="warning"
80
- variant="solid"
81
80
  icon="i-lucide-settings"
82
81
  @click="ui.openProviderConnection(k)"
83
82
  >
@@ -258,7 +258,6 @@ watch(
258
258
  v-for="item in section.items"
259
259
  :key="item.id"
260
260
  :block="!railed"
261
- color="primary"
262
261
  variant="soft"
263
262
  size="sm"
264
263
  :icon="item.icon"
@@ -80,7 +80,6 @@ async function resume() {
80
80
  <div class="mt-4 flex items-center gap-3">
81
81
  <UButton
82
82
  color="error"
83
- variant="solid"
84
83
  icon="i-lucide-play"
85
84
  :loading="resuming"
86
85
  :disabled="!access.canExecuteRuns.value"
@@ -234,7 +234,6 @@ function memberLabel(userId: string, name?: string | null, email?: string | null
234
234
  <USelect v-model="addRole" :items="ROLE_ITEMS" value-key="value" class="w-32" />
235
235
  <UButton
236
236
  type="submit"
237
- color="primary"
238
237
  icon="i-lucide-user-plus"
239
238
  :loading="busy"
240
239
  :disabled="!addUserId"
@@ -230,7 +230,6 @@ function resetToDefaults() {
230
230
  {{ t('notificationSettings.action.reset') }}
231
231
  </UButton>
232
232
  <UButton
233
- color="primary"
234
233
  variant="soft"
235
234
  size="xs"
236
235
  icon="i-lucide-save"
@@ -427,7 +427,6 @@ function openTestReport() {
427
427
  <UBadge
428
428
  :color="DISPOSITION_COLOR[disposition]"
429
429
  variant="subtle"
430
- size="md"
431
430
  data-testid="outcome-disposition"
432
431
  :data-disposition="disposition"
433
432
  >
@@ -535,7 +534,6 @@ function openTestReport() {
535
534
  <UBadge
536
535
  v-if="outcome.requirements.regressions > 0"
537
536
  color="error"
538
- variant="solid"
539
537
  size="sm"
540
538
  icon="i-lucide-triangle-alert"
541
539
  data-testid="outcome-regressions"
@@ -780,7 +778,6 @@ function openTestReport() {
780
778
  target="_blank"
781
779
  rel="noopener"
782
780
  external
783
- color="primary"
784
781
  variant="soft"
785
782
  size="xs"
786
783
  class="mt-1.5"
@@ -614,7 +614,6 @@ async function copyOutput() {
614
614
  </p>
615
615
  <UButton
616
616
  class="mt-3"
617
- color="primary"
618
617
  size="sm"
619
618
  :icon="parkPresentation.icon"
620
619
  data-testid="dedicated-park-open"
@@ -899,7 +898,6 @@ async function copyOutput() {
899
898
  {{ t('common.cancel') }}
900
899
  </UButton>
901
900
  <UButton
902
- color="primary"
903
901
  size="xs"
904
902
  data-testid="step-review-comment-add"
905
903
  :disabled="!draftBody.trim()"
@@ -962,7 +960,6 @@ async function copyOutput() {
962
960
  class="space-y-2 border-t border-default px-4 pt-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]"
963
961
  >
964
962
  <UButton
965
- color="primary"
966
963
  size="sm"
967
964
  icon="i-lucide-check"
968
965
  block
@@ -988,7 +985,6 @@ async function copyOutput() {
988
985
  class="space-y-2 border-t border-default px-4 pt-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]"
989
986
  >
990
987
  <UButton
991
- color="primary"
992
988
  data-testid="step-approve"
993
989
  size="sm"
994
990
  icon="i-lucide-check"
@@ -1001,7 +997,6 @@ async function copyOutput() {
1001
997
  </UButton>
1002
998
  <UButton
1003
999
  v-if="proposalEditableNow"
1004
- color="primary"
1005
1000
  variant="soft"
1006
1001
  size="sm"
1007
1002
  icon="i-lucide-pencil"
@@ -81,7 +81,6 @@ async function choose(option: string) {
81
81
  <UButton
82
82
  v-for="opt in decision.options"
83
83
  :key="opt"
84
- color="primary"
85
84
  variant="soft"
86
85
  block
87
86
  data-testid="decision-option"
@@ -60,7 +60,7 @@ function addTask() {
60
60
  >
61
61
  <template #actions>
62
62
  <ReviewDebtBadge />
63
- <UButton size="xs" variant="soft" color="primary" icon="i-lucide-plus" @click="addTask">
63
+ <UButton size="xs" variant="soft" icon="i-lucide-plus" @click="addTask">
64
64
  {{ t('inspector.container.addTask') }}
65
65
  </UButton>
66
66
  </template>
@@ -238,7 +238,6 @@ onUnmounted(() => preview.stopPolling(props.block.id))
238
238
  <UButton
239
239
  size="xs"
240
240
  variant="soft"
241
- color="primary"
242
241
  icon="i-lucide-wand-sparkles"
243
242
  :loading="detecting"
244
243
  data-testid="frontend-detect-button"
@@ -285,7 +284,6 @@ onUnmounted(() => preview.stopPolling(props.block.id))
285
284
  <UButton
286
285
  size="xs"
287
286
  variant="soft"
288
- color="primary"
289
287
  icon="i-lucide-check"
290
288
  data-testid="frontend-detect-apply"
291
289
  @click="applyDetection"
@@ -627,7 +625,6 @@ onUnmounted(() => preview.stopPolling(props.block.id))
627
625
  rel="noopener"
628
626
  size="xs"
629
627
  variant="soft"
630
- color="primary"
631
628
  trailing-icon="i-lucide-external-link"
632
629
  data-testid="preview-url"
633
630
  >
@@ -640,7 +637,6 @@ onUnmounted(() => preview.stopPolling(props.block.id))
640
637
  v-if="previewStatus === 'stopped' || previewStatus === 'failed'"
641
638
  size="xs"
642
639
  variant="soft"
643
- color="primary"
644
640
  icon="i-lucide-play"
645
641
  :loading="previewBusy"
646
642
  data-testid="preview-start"