@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
@@ -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"
@@ -658,6 +657,7 @@ async function copyOutput() {
658
657
  provider error, behind a toggle (most useful on a failed-to-start run) -->
659
658
  <div v-if="executionId">
660
659
  <UButton
660
+ color="neutral"
661
661
  :icon="showProvisioning ? 'i-lucide-chevron-up' : 'i-lucide-scroll-text'"
662
662
  variant="ghost"
663
663
  size="xs"
@@ -686,6 +686,7 @@ async function copyOutput() {
686
686
  superseded and the FAILED attempts, scoped to the step being looked at -->
687
687
  <div v-if="hasStepHistory">
688
688
  <UButton
689
+ color="neutral"
689
690
  :icon="showHistory ? 'i-lucide-chevron-up' : 'i-lucide-history'"
690
691
  variant="ghost"
691
692
  size="xs"
@@ -899,7 +900,6 @@ async function copyOutput() {
899
900
  {{ t('common.cancel') }}
900
901
  </UButton>
901
902
  <UButton
902
- color="primary"
903
903
  size="xs"
904
904
  data-testid="step-review-comment-add"
905
905
  :disabled="!draftBody.trim()"
@@ -962,7 +962,6 @@ async function copyOutput() {
962
962
  class="space-y-2 border-t border-default px-4 pt-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]"
963
963
  >
964
964
  <UButton
965
- color="primary"
966
965
  size="sm"
967
966
  icon="i-lucide-check"
968
967
  block
@@ -988,7 +987,6 @@ async function copyOutput() {
988
987
  class="space-y-2 border-t border-default px-4 pt-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]"
989
988
  >
990
989
  <UButton
991
- color="primary"
992
990
  data-testid="step-approve"
993
991
  size="sm"
994
992
  icon="i-lucide-check"
@@ -1001,7 +999,6 @@ async function copyOutput() {
1001
999
  </UButton>
1002
1000
  <UButton
1003
1001
  v-if="proposalEditableNow"
1004
- color="primary"
1005
1002
  variant="soft"
1006
1003
  size="sm"
1007
1004
  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"
@@ -678,7 +678,7 @@ const showOriginalDescription = ref(false)
678
678
  </UButton>
679
679
  <UButton
680
680
  color="error"
681
- variant="ghost"
681
+ variant="soft"
682
682
  size="sm"
683
683
  icon="i-lucide-trash-2"
684
684
  :class="isServiceFrame ? '' : 'ms-auto'"
@@ -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"
@@ -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
 
@@ -101,7 +101,7 @@ async function clear() {
101
101
  <UButton
102
102
  v-if="saved"
103
103
  color="error"
104
- variant="ghost"
104
+ variant="soft"
105
105
  size="xs"
106
106
  icon="i-lucide-trash-2"
107
107
  :loading="busy"
@@ -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>
@@ -152,7 +152,7 @@ async function clearAll() {
152
152
  <UButton
153
153
  v-if="configured.length"
154
154
  color="error"
155
- variant="ghost"
155
+ variant="soft"
156
156
  size="xs"
157
157
  icon="i-lucide-trash-2"
158
158
  :loading="busy"
@@ -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"
@@ -209,7 +209,7 @@ async function clear() {
209
209
  <UButton
210
210
  v-if="configured"
211
211
  color="error"
212
- variant="ghost"
212
+ variant="soft"
213
213
  size="xs"
214
214
  icon="i-lucide-trash-2"
215
215
  :loading="busy"
@@ -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"
@@ -347,7 +347,7 @@ async function mergePr() {
347
347
  <UButton
348
348
  icon="i-lucide-trash-2"
349
349
  color="error"
350
- variant="ghost"
350
+ variant="soft"
351
351
  size="xs"
352
352
  :loading="resetting"
353
353
  :disabled="stopping || !access.canExecuteRuns.value"
@@ -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"
@@ -1347,7 +1340,7 @@ const { toggleArchive, toggleDefault, edit, removePipeline, clone } = usePipelin
1347
1340
  <IconButton
1348
1341
  v-if="!p.builtin"
1349
1342
  icon="i-lucide-trash-2"
1350
- color="neutral"
1343
+ color="error"
1351
1344
  variant="ghost"
1352
1345
  size="xs"
1353
1346
  :label="t('pipeline.builder.delete')"
@@ -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)"
@@ -220,7 +218,7 @@ const reseedableCount = computed(
220
218
  v-else
221
219
  size="xs"
222
220
  color="error"
223
- variant="subtle"
221
+ variant="soft"
224
222
  icon="i-lucide-trash-2"
225
223
  :loading="isBusy(h.pipeline.id)"
226
224
  :disabled="locked"
@@ -261,7 +259,7 @@ const reseedableCount = computed(
261
259
  <UButton
262
260
  size="xs"
263
261
  color="error"
264
- variant="subtle"
262
+ variant="soft"
265
263
  icon="i-lucide-trash-2"
266
264
  :loading="isBusy(r.pipeline.id)"
267
265
  :disabled="locked"
@@ -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"