@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
@@ -243,7 +243,6 @@ function backToApp() {
243
243
  </UButton>
244
244
  <UButton
245
245
  block
246
- color="primary"
247
246
  :loading="screen === 'submitting'"
248
247
  :disabled="!workspaceId"
249
248
  data-testid="mcp-authorize-approve"
@@ -86,7 +86,7 @@ function backToApp() {
86
86
  <p class="mb-6 text-sm text-muted">
87
87
  {{ t('settings.toolServers.oauth.callback.doneHint') }}
88
88
  </p>
89
- <UButton block color="primary" @click="backToApp">
89
+ <UButton block @click="backToApp">
90
90
  {{ t('settings.toolServers.oauth.callback.back') }}
91
91
  </UButton>
92
92
  </template>
@@ -365,13 +365,7 @@ async function save() {
365
365
  </template>
366
366
  </i18n-t>
367
367
  </p>
368
- <UButton
369
- icon="i-lucide-plus"
370
- color="primary"
371
- size="sm"
372
- class="shrink-0"
373
- @click="startCreate"
374
- >
368
+ <UButton icon="i-lucide-plus" size="sm" class="shrink-0" @click="startCreate">
375
369
  {{ t('settings.modelConfiguration.list.newPreset') }}
376
370
  </UButton>
377
371
  </div>
@@ -388,7 +382,7 @@ async function save() {
388
382
  >
389
383
  <div class="flex items-center gap-2">
390
384
  <span class="truncate text-sm font-semibold text-app-100">{{ p.name }}</span>
391
- <UBadge v-if="p.isDefault" color="primary" variant="subtle" size="xs">
385
+ <UBadge v-if="p.isDefault" variant="subtle" size="xs">
392
386
  {{ t('settings.modelConfiguration.list.default') }}
393
387
  </UBadge>
394
388
  <div class="ms-auto flex items-center gap-1">
@@ -483,7 +477,6 @@ async function save() {
483
477
  >
484
478
  <UButton
485
479
  size="sm"
486
- color="primary"
487
480
  variant="subtle"
488
481
  trailing-icon="i-lucide-chevron-down"
489
482
  class="w-full justify-between"
@@ -576,7 +569,7 @@ async function save() {
576
569
  >
577
570
  {{ t('common.cancel') }}
578
571
  </UButton>
579
- <UButton color="primary" size="sm" :loading="busy" @click="save">
572
+ <UButton size="sm" :loading="busy" @click="save">
580
573
  {{
581
574
  editor.id
582
575
  ? t('settings.modelConfiguration.editor.saveChanges')
@@ -87,7 +87,6 @@ const reseedableCount = computed(
87
87
  </div>
88
88
  <UButton
89
89
  size="xs"
90
- color="primary"
91
90
  variant="subtle"
92
91
  icon="i-lucide-plus"
93
92
  :loading="isBusy(i.id)"
@@ -130,7 +129,6 @@ const reseedableCount = computed(
130
129
  </div>
131
130
  <UButton
132
131
  size="xs"
133
- color="primary"
134
132
  variant="subtle"
135
133
  icon="i-lucide-rotate-ccw"
136
134
  :loading="isBusy(i.id)"
@@ -149,7 +147,6 @@ const reseedableCount = computed(
149
147
  <div class="flex w-full items-center justify-between gap-2">
150
148
  <UButton
151
149
  v-if="reseedableCount > 1"
152
- color="primary"
153
150
  variant="ghost"
154
151
  icon="i-lucide-rotate-ccw"
155
152
  :loading="anyBusy"
@@ -332,7 +332,6 @@ function manageKeys() {
332
332
  </UButton>
333
333
  <UButton
334
334
  v-if="recommendedAvailable.length"
335
- color="primary"
336
335
  variant="soft"
337
336
  size="sm"
338
337
  icon="i-lucide-sparkles"
@@ -397,14 +396,7 @@ function manageKeys() {
397
396
  <span class="text-xs text-dimmed">{{
398
397
  t('settings.openRouterCatalog.enabledCount', { count: selectedCount }, selectedCount)
399
398
  }}</span>
400
- <UButton
401
- color="primary"
402
- variant="soft"
403
- size="sm"
404
- icon="i-lucide-save"
405
- :loading="busy"
406
- @click="save()"
407
- >
399
+ <UButton variant="soft" size="sm" icon="i-lucide-save" :loading="busy" @click="save()">
408
400
  {{ t('common.save') }}
409
401
  </UButton>
410
402
  </div>
@@ -506,13 +506,7 @@ function fieldHelp(key: string): string | undefined {
506
506
  <ConnectionWarnings :warnings="testResult?.warnings" />
507
507
 
508
508
  <div class="flex justify-end">
509
- <UButton
510
- color="primary"
511
- size="sm"
512
- :loading="busy"
513
- :disabled="!canSave"
514
- @click="saveNative()"
515
- >
509
+ <UButton size="sm" :loading="busy" :disabled="!canSave" @click="saveNative()">
516
510
  {{ connection ? t('common.save') : t('settings.providerConnection.form.connect') }}
517
511
  </UButton>
518
512
  </div>
@@ -289,7 +289,6 @@ function onSave() {
289
289
 
290
290
  <div class="flex justify-end">
291
291
  <UButton
292
- color="primary"
293
292
  size="sm"
294
293
  :loading="busy"
295
294
  :disabled="!canSave"
@@ -176,7 +176,6 @@ function submit() {
176
176
  :label="t('settings.riskPolicy.forkDecision.label')"
177
177
  />
178
178
  <UButton
179
- color="primary"
180
179
  size="sm"
181
180
  icon="i-lucide-plus"
182
181
  :loading="busy"
@@ -130,7 +130,7 @@ const deleteBlocked = computed(
130
130
  >
131
131
  {{ t('settings.riskPolicy.makeUnattendedDefaultShort') }}
132
132
  </UButton>
133
- <UBadge v-if="policy.isDefault" color="primary" variant="subtle" size="sm">
133
+ <UBadge v-if="policy.isDefault" variant="subtle" size="sm">
134
134
  {{ t('settings.riskPolicy.default') }}
135
135
  </UBadge>
136
136
  <UButton
@@ -314,7 +314,6 @@ const deleteBlocked = computed(
314
314
  "
315
315
  />
316
316
  <UButton
317
- color="primary"
318
317
  variant="soft"
319
318
  size="xs"
320
319
  icon="i-lucide-save"
@@ -78,7 +78,6 @@ const reseedableCount = computed(
78
78
  </div>
79
79
  <UButton
80
80
  size="xs"
81
- color="primary"
82
81
  variant="subtle"
83
82
  icon="i-lucide-plus"
84
83
  :loading="isBusy(i.id)"
@@ -121,7 +120,6 @@ const reseedableCount = computed(
121
120
  </div>
122
121
  <UButton
123
122
  size="xs"
124
- color="primary"
125
123
  variant="subtle"
126
124
  icon="i-lucide-rotate-ccw"
127
125
  :loading="isBusy(i.id)"
@@ -140,7 +138,6 @@ const reseedableCount = computed(
140
138
  <div class="flex w-full items-center justify-between gap-2">
141
139
  <UButton
142
140
  v-if="reseedableCount > 1"
143
- color="primary"
144
141
  variant="ghost"
145
142
  icon="i-lucide-rotate-ccw"
146
143
  :loading="anyBusy"
@@ -81,7 +81,6 @@ function remove(id: string) {
81
81
  <UBadge
82
82
  v-for="f in selected"
83
83
  :key="f.id"
84
- color="primary"
85
84
  variant="subtle"
86
85
  size="sm"
87
86
  class="cursor-pointer"
@@ -100,7 +99,6 @@ function remove(id: string) {
100
99
  {{ t('settings.serviceFragmentDefaults.footer.question') }}
101
100
  </span>
102
101
  <UButton
103
- color="primary"
104
102
  variant="link"
105
103
  class="p-0 text-2xs font-medium text-primary hover:underline"
106
104
  @click="ui.openFragmentLibrary()"
@@ -108,7 +106,6 @@ function remove(id: string) {
108
106
  {{ t('settings.serviceFragmentDefaults.footer.manageBoard') }}
109
107
  </UButton>
110
108
  <UButton
111
- color="primary"
112
109
  variant="link"
113
110
  class="p-0 text-2xs font-medium text-primary hover:underline"
114
111
  @click="ui.openAccountSettings('fragments')"
@@ -242,13 +242,7 @@ async function remove() {
242
242
  />
243
243
 
244
244
  <div class="flex justify-end">
245
- <UButton
246
- color="primary"
247
- size="sm"
248
- :loading="busy"
249
- :disabled="!buildPayload()"
250
- @click="save()"
251
- >
245
+ <UButton size="sm" :loading="busy" :disabled="!buildPayload()" @click="save()">
252
246
  {{ status ? t('common.save') : t('settings.userSecrets.addToken') }}
253
247
  </UButton>
254
248
  </div>
@@ -133,7 +133,6 @@ function selectItems(field: WorkspaceMetadataFieldDefinition) {
133
133
 
134
134
  <div class="flex justify-end">
135
135
  <UButton
136
- color="primary"
137
136
  size="sm"
138
137
  icon="i-lucide-save"
139
138
  :loading="saving"
@@ -706,13 +706,7 @@ async function save() {
706
706
  </section>
707
707
 
708
708
  <div class="flex justify-end">
709
- <UButton
710
- color="primary"
711
- icon="i-lucide-save"
712
- size="sm"
713
- :loading="saving"
714
- @click="save"
715
- >
709
+ <UButton icon="i-lucide-save" size="sm" :loading="saving" @click="save">
716
710
  {{ t('common.save') }}
717
711
  </UButton>
718
712
  </div>
@@ -139,7 +139,6 @@ function toggle(id: string) {
139
139
  <UBadge
140
140
  v-for="(s, i) in queued"
141
141
  :key="s.id"
142
- color="primary"
143
142
  variant="subtle"
144
143
  size="sm"
145
144
  class="cursor-pointer"
@@ -219,7 +219,6 @@ async function saveMapping() {
219
219
  <div v-if="!slack.connected" class="space-y-3 rounded-lg border border-muted p-3">
220
220
  <UButton
221
221
  v-if="slack.oauthEnabled"
222
- color="primary"
223
222
  icon="i-lucide-slack"
224
223
  :loading="connectingOAuth"
225
224
  @click="connectViaOAuth"
@@ -233,7 +232,6 @@ async function saveMapping() {
233
232
  <div class="flex gap-2">
234
233
  <SecretInput v-model="tokenInput" size="sm" class="flex-1" placeholder="xoxb-…" />
235
234
  <UButton
236
- color="primary"
237
235
  variant="soft"
238
236
  size="sm"
239
237
  :loading="slack.connecting"
@@ -302,7 +300,6 @@ async function saveMapping() {
302
300
 
303
301
  <div class="flex justify-end">
304
302
  <UButton
305
- color="primary"
306
303
  variant="soft"
307
304
  size="xs"
308
305
  icon="i-lucide-save"
@@ -365,7 +362,6 @@ async function saveMapping() {
365
362
  {{ t('slack.members.add') }}
366
363
  </UButton>
367
364
  <UButton
368
- color="primary"
369
365
  variant="soft"
370
366
  size="xs"
371
367
  icon="i-lucide-save"
@@ -428,7 +428,6 @@ function kindLabel(item: RequirementItem): string {
428
428
  >
429
429
  {{ t('spec.state.noneMatchFilter') }}
430
430
  <UButton
431
- color="primary"
432
431
  variant="link"
433
432
  size="xs"
434
433
  class="p-0"
@@ -345,7 +345,6 @@ const STATUS_KEYS: Record<BugHuntAnalysisStatus, string> = {
345
345
  <UButton
346
346
  v-for="choice in addableSources"
347
347
  :key="choice.source"
348
- color="primary"
349
348
  variant="soft"
350
349
  :icon="choice.icon"
351
350
  @click="addSource(choice.source)"
@@ -479,7 +478,6 @@ const STATUS_KEYS: Record<BugHuntAnalysisStatus, string> = {
479
478
 
480
479
  <div class="flex items-center gap-2">
481
480
  <UButton
482
- color="primary"
483
481
  icon="i-lucide-radar"
484
482
  :loading="hunt.hunting"
485
483
  :disabled="!canHunt"
@@ -565,7 +563,6 @@ const STATUS_KEYS: Record<BugHuntAnalysisStatus, string> = {
565
563
  {{ t('bugHunt.recommended') }}
566
564
  </UBadge>
567
565
  <UButton
568
- color="primary"
569
566
  variant="soft"
570
567
  icon="i-lucide-play"
571
568
  size="xs"
@@ -133,7 +133,6 @@ async function doSpawnEpic() {
133
133
  <UButton
134
134
  v-for="choice in addableSources"
135
135
  :key="choice.source"
136
- color="primary"
137
136
  variant="soft"
138
137
  :icon="choice.icon"
139
138
  @click="ui.openTaskConnect(choice.source)"
@@ -197,7 +196,6 @@ async function doSpawnEpic() {
197
196
  />
198
197
  </UFormField>
199
198
  <UButton
200
- color="primary"
201
199
  variant="soft"
202
200
  icon="i-lucide-layers"
203
201
  :loading="importing"
@@ -140,13 +140,7 @@ async function toggleEnabled(enabled: boolean) {
140
140
  <div v-else-if="!connected" class="space-y-3">
141
141
  <!-- OAuth source (Linear): the redirect button, with the manual key form below. -->
142
142
  <template v-if="oauth">
143
- <UButton
144
- block
145
- color="primary"
146
- icon="i-lucide-plug"
147
- :loading="oauthStarting"
148
- @click="startOAuth"
149
- >
143
+ <UButton block icon="i-lucide-plug" :loading="oauthStarting" @click="startOAuth">
150
144
  {{ t('tasks.connect.oauthButton', { label: descriptor.label }) }}
151
145
  </UButton>
152
146
  <p class="text-center text-2xs text-dimmed">
@@ -208,7 +202,6 @@ async function toggleEnabled(enabled: boolean) {
208
202
  <div v-else />
209
203
  <UButton
210
204
  v-if="!credentialless"
211
- color="primary"
212
205
  icon="i-lucide-plug"
213
206
  :loading="saving"
214
207
  :disabled="!canSubmit"
@@ -118,7 +118,6 @@ const statusColor = (row: TutorialCatalogueRow) =>
118
118
  </div>
119
119
  <UButton
120
120
  size="sm"
121
- color="primary"
122
121
  :variant="row.state === 'completed' ? 'soft' : 'solid'"
123
122
  :disabled="!row.startable"
124
123
  :data-testid="`tutorial-catalogue-start-${row.tour.id}`"
@@ -95,7 +95,6 @@ function take(tourId: string) {
95
95
  <div class="mt-2 flex justify-end">
96
96
  <UButton
97
97
  size="xs"
98
- color="primary"
99
98
  variant="soft"
100
99
  data-testid="tutorial-nudge-start"
101
100
  @click="take(offered.id)"
@@ -636,7 +636,6 @@ onUnmounted(() => {
636
636
  <p class="mt-0.5 text-xs text-muted">{{ t(nextTour.descriptionKey) }}</p>
637
637
  <UButton
638
638
  size="xs"
639
- color="primary"
640
639
  variant="soft"
641
640
  class="mt-2"
642
641
  data-testid="tutorial-next-tour-start"
@@ -671,7 +670,6 @@ onUnmounted(() => {
671
670
  <UButton
672
671
  v-if="step.advanceOn !== 'target-click' || isLast"
673
672
  size="xs"
674
- color="primary"
675
673
  data-testid="tutorial-next"
676
674
  @click="advance('nav-control')"
677
675
  >
@@ -65,7 +65,6 @@ const undecided = computed(() => tutorial.decision === null)
65
65
  </div>
66
66
  <UButton
67
67
  size="sm"
68
- color="primary"
69
68
  :variant="actionFor(tour.id) === 'restart' ? 'soft' : 'solid'"
70
69
  :data-testid="`tutorial-start-${tour.id}`"
71
70
  @click="launch(tour.id)"
@@ -78,7 +78,6 @@ async function connect() {
78
78
  </p>
79
79
 
80
80
  <UButton
81
- color="primary"
82
81
  icon="i-lucide-gitlab"
83
82
  :loading="connecting"
84
83
  :disabled="!pat.trim()"
@@ -490,7 +490,6 @@ watch(pendingUpload, async (file) => {
490
490
  {{ t('visualConfirm.recapture') }}
491
491
  </UButton>
492
492
  <UButton
493
- color="primary"
494
493
  icon="i-lucide-circle-check"
495
494
  :loading="busy"
496
495
  :disabled="!canApprove || !access.canExecuteRuns.value"
@@ -560,7 +560,7 @@ watch(
560
560
  <UIcon name="i-lucide-plug-zap" class="mx-auto mb-3 h-10 w-10 text-app-warning-400" />
561
561
  <h1 class="mb-1 text-lg font-semibold">{{ $t('app.backendUnreachable') }}</h1>
562
562
  <p class="mb-4 text-sm text-muted">{{ workspace.error }}</p>
563
- <UButton color="primary" icon="i-lucide-rotate-ccw" @click="workspace.init()">
563
+ <UButton icon="i-lucide-rotate-ccw" @click="workspace.init()">
564
564
  {{ $t('common.retry') }}
565
565
  </UButton>
566
566
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.310.1",
3
+ "version": "0.310.2",
4
4
  "description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
5
5
  "repository": {
6
6
  "type": "git",