@cat-factory/app 0.310.1 → 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 +1 -1
@@ -49,7 +49,7 @@ function control(action: 'pause' | 'resume' | 'cancel') {
49
49
  <template>
50
50
  <div class="space-y-3" data-testid="initiative-inspector">
51
51
  <div class="flex items-center gap-2">
52
- <UBadge color="primary" variant="subtle" size="sm">
52
+ <UBadge variant="subtle" size="sm">
53
53
  {{ t(INITIATIVE_STATUS_LABEL_KEYS[status]) }}
54
54
  </UBadge>
55
55
  <span v-if="progress" class="text-2xs text-muted">
@@ -70,7 +70,6 @@ function control(action: 'pause' | 'resume' | 'cancel') {
70
70
  data-testid="initiative-review"
71
71
  :data-attention="attention.kind"
72
72
  color="warning"
73
- variant="solid"
74
73
  size="sm"
75
74
  :icon="INITIATIVE_ATTENTION_ICONS[attention.kind]"
76
75
  @click="attention.open()"
@@ -80,8 +79,6 @@ function control(action: 'pause' | 'resume' | 'cancel') {
80
79
  <UButton
81
80
  v-else-if="awaitingAnswers"
82
81
  data-testid="initiative-answer-planning"
83
- color="primary"
84
- variant="solid"
85
82
  size="sm"
86
83
  icon="i-lucide-messages-square"
87
84
  @click="openPlanning"
@@ -104,7 +101,6 @@ function control(action: 'pause' | 'resume' | 'cancel') {
104
101
  </UButton>
105
102
  <UButton
106
103
  data-testid="initiative-run-planning"
107
- color="primary"
108
104
  variant="soft"
109
105
  size="sm"
110
106
  icon="i-lucide-play"
@@ -143,7 +139,6 @@ function control(action: 'pause' | 'resume' | 'cancel') {
143
139
  <UButton
144
140
  v-if="isPaused"
145
141
  data-testid="initiative-resume"
146
- color="primary"
147
142
  variant="soft"
148
143
  size="sm"
149
144
  icon="i-lucide-play"
@@ -206,9 +206,7 @@ function fmtTime(ms: number) {
206
206
  "
207
207
  >{{ t('common.cancel') }}</UButton
208
208
  >
209
- <UButton size="xs" color="primary" :loading="busy" @click="saveEdit">{{
210
- t('common.save')
211
- }}</UButton>
209
+ <UButton size="xs" :loading="busy" @click="saveEdit">{{ t('common.save') }}</UButton>
212
210
  </div>
213
211
  </template>
214
212
 
@@ -145,14 +145,7 @@ async function clear() {
145
145
  <UInput v-model="draft.envTag" placeholder="prod" size="sm" class="w-full" />
146
146
  </UFormField>
147
147
  <div class="flex justify-end">
148
- <UButton
149
- color="primary"
150
- variant="soft"
151
- size="xs"
152
- icon="i-lucide-save"
153
- :loading="busy"
154
- @click="save"
155
- >
148
+ <UButton variant="soft" size="xs" icon="i-lucide-save" :loading="busy" @click="save">
156
149
  {{ t('inspector.releaseHealth.saveMonitoring') }}
157
150
  </UButton>
158
151
  </div>
@@ -204,7 +204,6 @@ async function stop(mode: EnvironmentTestMode) {
204
204
  v-if="!isRunning('provision')"
205
205
  icon="i-lucide-flask-conical"
206
206
  size="xs"
207
- color="primary"
208
207
  variant="soft"
209
208
  data-testid="env-test-start"
210
209
  :loading="starting.provision"
@@ -291,7 +290,6 @@ async function stop(mode: EnvironmentTestMode) {
291
290
  v-if="!isRunning('agent-probe')"
292
291
  icon="i-lucide-bot"
293
292
  size="xs"
294
- color="primary"
295
293
  variant="soft"
296
294
  data-testid="env-probe-start"
297
295
  :loading="starting['agent-probe']"
@@ -467,7 +467,6 @@ function setSize(value: InstanceSize) {
467
467
  <UButton
468
468
  size="xs"
469
469
  variant="soft"
470
- color="primary"
471
470
  icon="i-lucide-flask-conical"
472
471
  data-testid="env-setup-nudge-open"
473
472
  @click="ui.openEnvironmentSetup(props.block.id)"
@@ -484,7 +483,6 @@ function setSize(value: InstanceSize) {
484
483
  <UButton
485
484
  size="xs"
486
485
  variant="soft"
487
- color="primary"
488
486
  icon="i-lucide-wand-sparkles"
489
487
  :loading="detecting"
490
488
  @click="detectFromRepo"
@@ -811,7 +809,6 @@ function setSize(value: InstanceSize) {
811
809
  <UButton
812
810
  size="xs"
813
811
  variant="soft"
814
- color="primary"
815
812
  icon="i-lucide-file-cog"
816
813
  :loading="generating"
817
814
  :disabled="!customManifestPath && !selectedCustomType?.defaultManifestPath"
@@ -877,7 +874,7 @@ function setSize(value: InstanceSize) {
877
874
  </template>
878
875
  <template v-else>{{ t('inspector.testConfig.noFileSelected') }}</template>
879
876
  </p>
880
- <UButton size="xs" color="primary" :disabled="!pickedPath" @click="applyPicked">
877
+ <UButton size="xs" :disabled="!pickedPath" @click="applyPicked">
881
878
  {{ t('inspector.testConfig.useThisFile') }}
882
879
  </UButton>
883
880
  </div>
@@ -250,7 +250,6 @@ async function clearAll() {
250
250
  {{ t('inspector.testSecrets.addRow') }}
251
251
  </UButton>
252
252
  <UButton
253
- color="primary"
254
253
  variant="soft"
255
254
  size="xs"
256
255
  icon="i-lucide-save"
@@ -124,7 +124,6 @@ function revert() {
124
124
  {{ t('inspector.testingContext.revert') }}
125
125
  </UButton>
126
126
  <UButton
127
- color="primary"
128
127
  variant="soft"
129
128
  size="xs"
130
129
  icon="i-lucide-save"
@@ -319,7 +319,6 @@ async function clear() {
319
319
  {{ t('inspector.validationChecks.addCheck') }}
320
320
  </UButton>
321
321
  <UButton
322
- color="primary"
323
322
  variant="soft"
324
323
  size="xs"
325
324
  icon="i-lucide-save"
@@ -496,7 +496,6 @@ async function mergePr() {
496
496
  branch each is how the candidate park shipped with no button at all. -->
497
497
  <UButton
498
498
  v-else-if="s.approval && s.approval.status === 'pending' && redirectPark(s)"
499
- color="primary"
500
499
  variant="soft"
501
500
  size="xs"
502
501
  :icon="REDIRECT_PARK_PRESENTATION[redirectPark(s)!].icon"
@@ -514,7 +513,6 @@ async function mergePr() {
514
513
  s.approval.status === 'pending' &&
515
514
  s.prReview?.status === 'awaiting_selection'
516
515
  "
517
- color="primary"
518
516
  variant="soft"
519
517
  size="xs"
520
518
  icon="i-lucide-clipboard-check"
@@ -630,7 +628,6 @@ async function mergePr() {
630
628
  merged task whose run instance is long gone. -->
631
629
  <UButton
632
630
  v-if="outcomeReadable"
633
- color="primary"
634
631
  variant="soft"
635
632
  size="sm"
636
633
  icon="i-lucide-clipboard-check"
@@ -690,7 +687,6 @@ async function mergePr() {
690
687
  <UButton
691
688
  class="mt-2"
692
689
  color="success"
693
- variant="solid"
694
690
  size="sm"
695
691
  icon="i-lucide-git-merge"
696
692
  block
@@ -133,7 +133,6 @@ function revert() {
133
133
  </p>
134
134
  <UButton
135
135
  v-if="guidedTarget"
136
- color="primary"
137
136
  variant="soft"
138
137
  size="sm"
139
138
  icon="i-lucide-scan-search"
@@ -151,7 +150,6 @@ function revert() {
151
150
  <div v-if="dirty" class="mt-2 flex items-center gap-2">
152
151
  <UButton
153
152
  size="xs"
154
- color="primary"
155
153
  variant="soft"
156
154
  :loading="saving"
157
155
  data-testid="inspector-review-skills-save"
@@ -305,13 +305,7 @@ const technicalLabel = computed(() => {
305
305
  </PipelinePicker>
306
306
  </div>
307
307
  <div v-if="selectedPipeline" class="flex items-center gap-1">
308
- <UBadge
309
- color="primary"
310
- variant="subtle"
311
- size="sm"
312
- class="cursor-pointer"
313
- @click="setPipeline('')"
314
- >
308
+ <UBadge variant="subtle" size="sm" class="cursor-pointer" @click="setPipeline('')">
315
309
  {{ selectedPipeline.name }}<UIcon name="i-lucide-x" class="ms-0.5 h-3 w-3" />
316
310
  </UBadge>
317
311
  </div>
@@ -615,13 +609,7 @@ const technicalLabel = computed(() => {
615
609
  </UDropdownMenu>
616
610
  </div>
617
611
  <div v-if="responsibleLabel" class="flex items-center gap-1">
618
- <UBadge
619
- color="primary"
620
- variant="subtle"
621
- size="sm"
622
- class="cursor-pointer"
623
- @click="setResponsible('')"
624
- >
612
+ <UBadge variant="subtle" size="sm" class="cursor-pointer" @click="setResponsible('')">
625
613
  {{ responsibleLabel }}<UIcon name="i-lucide-x" class="ms-0.5 h-3 w-3" />
626
614
  </UBadge>
627
615
  </div>
@@ -92,7 +92,6 @@ function revert() {
92
92
  <div v-if="dirty" class="mt-2 flex items-center gap-2">
93
93
  <UButton
94
94
  size="xs"
95
- color="primary"
96
95
  variant="soft"
97
96
  :loading="saving"
98
97
  :disabled="problems.length > 0"
@@ -242,7 +242,6 @@ function revisionLabel(revision: AgentPromptRevision): string {
242
242
 
243
243
  <div class="flex flex-wrap items-center gap-2">
244
244
  <UButton
245
- color="primary"
246
245
  size="sm"
247
246
  icon="i-lucide-save"
248
247
  :loading="prompts.saving"
@@ -308,7 +307,6 @@ function revisionLabel(revision: AgentPromptRevision): string {
308
307
  >
309
308
  <UBadge
310
309
  v-if="revision.revision === detail.revisions[0]?.revision"
311
- color="primary"
312
310
  variant="subtle"
313
311
  size="sm"
314
312
  >
@@ -41,7 +41,6 @@ const emit = defineEmits<{ resolve: [choice: IterationCapChoice] }>()
41
41
  <p class="mt-1 text-xs text-app-warning-200/80">{{ detail }}</p>
42
42
  <div class="mt-3 flex flex-wrap gap-2">
43
43
  <UButton
44
- color="primary"
45
44
  variant="soft"
46
45
  size="xs"
47
46
  icon="i-lucide-rotate-cw"
@@ -428,13 +428,7 @@ const { toggleArchive, toggleDefault, edit, removePipeline, clone } = usePipelin
428
428
  <SectionLabel as="h3">
429
429
  {{ t('pipeline.builder.agentPalette') }}
430
430
  </SectionLabel>
431
- <UButton
432
- color="primary"
433
- variant="soft"
434
- size="xs"
435
- icon="i-lucide-plus"
436
- @click="openAddAgent"
437
- >
431
+ <UButton variant="soft" size="xs" icon="i-lucide-plus" @click="openAddAgent">
438
432
  {{ t('pipeline.builder.addAgent') }}
439
433
  </UButton>
440
434
  </div>
@@ -1243,7 +1237,6 @@ const { toggleArchive, toggleDefault, edit, removePipeline, clone } = usePipelin
1243
1237
  concealed-setting failure. -->
1244
1238
  <UBadge
1245
1239
  v-if="p.isDefault"
1246
- color="primary"
1247
1240
  variant="subtle"
1248
1241
  size="xs"
1249
1242
  class="shrink-0"
@@ -1396,7 +1389,6 @@ const { toggleArchive, toggleDefault, edit, removePipeline, clone } = usePipelin
1396
1389
  {{ pipelines.editingId ? t('pipeline.builder.cancelEdit') : t('pipeline.builder.clear') }}
1397
1390
  </UButton>
1398
1391
  <UButton
1399
- color="primary"
1400
1392
  icon="i-lucide-save"
1401
1393
  size="sm"
1402
1394
  :disabled="pipelines.draft.length === 0 || stepsDisallowedByPurpose.length > 0"
@@ -1465,7 +1457,6 @@ const { toggleArchive, toggleDefault, edit, removePipeline, clone } = usePipelin
1465
1457
  {{ t('common.cancel') }}
1466
1458
  </UButton>
1467
1459
  <UButton
1468
- color="primary"
1469
1460
  icon="i-lucide-plus"
1470
1461
  size="sm"
1471
1462
  :disabled="!newAgentName.trim()"
@@ -151,7 +151,6 @@ const reseedableCount = computed(
151
151
  </div>
152
152
  <UButton
153
153
  size="xs"
154
- color="primary"
155
154
  variant="subtle"
156
155
  icon="i-lucide-plus"
157
156
  :loading="isBusy(p.id)"
@@ -207,7 +206,6 @@ const reseedableCount = computed(
207
206
  <UButton
208
207
  v-if="h.pipeline.builtin"
209
208
  size="xs"
210
- color="primary"
211
209
  variant="subtle"
212
210
  icon="i-lucide-rotate-ccw"
213
211
  :loading="isBusy(h.pipeline.id)"
@@ -296,7 +294,6 @@ const reseedableCount = computed(
296
294
  </div>
297
295
  <UButton
298
296
  size="xs"
299
- color="primary"
300
297
  variant="subtle"
301
298
  icon="i-lucide-rotate-ccw"
302
299
  :loading="isBusy(h.pipeline.id)"
@@ -315,7 +312,6 @@ const reseedableCount = computed(
315
312
  <div class="flex w-full items-center justify-between gap-2">
316
313
  <UButton
317
314
  v-if="reseedableCount > 1"
318
- color="primary"
319
315
  variant="ghost"
320
316
  icon="i-lucide-rotate-ccw"
321
317
  :loading="anyBusy"
@@ -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>
@@ -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"
@@ -632,7 +631,6 @@ async function archive(prompt: SandboxPromptVersion) {
632
631
  <IconButton
633
632
  v-if="canPromote(p)"
634
633
  icon="i-lucide-rocket"
635
- color="primary"
636
634
  variant="ghost"
637
635
  size="xs"
638
636
  :loading="promoting === p.id"
@@ -674,7 +672,6 @@ async function archive(prompt: SandboxPromptVersion) {
674
672
  {{ t('common.cancel') }}
675
673
  </UButton>
676
674
  <UButton
677
- color="primary"
678
675
  icon="i-lucide-save"
679
676
  size="sm"
680
677
  :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>
@@ -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"