@cat-factory/app 0.92.2 → 0.94.0
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.
- package/app/components/auth/LoginScreen.vue +5 -1
- package/app/components/board/AddTaskModal.vue +25 -5
- package/app/components/board/CreateInitiativeModal.vue +9 -1
- package/app/components/board/RecurringPipelineModal.vue +20 -4
- package/app/components/bootstrap/BootstrapModal.vue +9 -1
- package/app/components/brainstorm/BrainstormWindow.vue +5 -1
- package/app/components/clarity/ClarityReviewWindow.vue +5 -1
- package/app/components/docs/DocInterviewWindow.vue +209 -0
- package/app/components/documents/DocumentTemplatesModal.vue +5 -1
- package/app/components/fragments/FragmentLibraryManager.vue +10 -2
- package/app/components/github/GitHubPanel.vue +25 -4
- package/app/components/layout/BoardSwitcher.vue +10 -1
- package/app/components/layout/BoardToolbar.vue +15 -3
- package/app/components/layout/GitHubPatBanner.vue +5 -1
- package/app/components/layout/ProviderConfigBanner.vue +5 -1
- package/app/components/panels/AgentStepDetail.vue +5 -1
- package/app/components/panels/InspectorPanel.vue +5 -1
- package/app/components/panels/StepRestartControl.vue +10 -2
- package/app/components/panels/StepResultViewHost.vue +4 -0
- package/app/components/panels/inspector/FrontendConfig.vue +10 -1
- package/app/components/panels/inspector/RecurringScheduleSettings.vue +11 -3
- package/app/components/pipeline/PipelineBuilder.vue +15 -2
- package/app/components/pipeline/PipelineProgress.vue +10 -2
- package/app/components/providers/AiPresetMismatchDialog.vue +10 -1
- package/app/components/providers/PersonalCredentialModal.vue +18 -2
- package/app/components/requirements/RequirementsReviewWindow.vue +5 -1
- package/app/components/sandbox/SandboxPanel.vue +10 -1
- package/app/components/settings/InfraHandlersConfigurator.vue +5 -1
- package/app/components/settings/InfrastructureWindow.vue +18 -2
- package/app/components/settings/IssueTrackerPanel.vue +20 -4
- package/app/components/settings/LocalModelEndpointsPanel.vue +5 -1
- package/app/components/settings/ModelConfigurationPanel.vue +20 -3
- package/app/components/settings/ProviderConnectionTab.vue +5 -1
- package/app/components/settings/SharedStacksPanel.vue +363 -0
- package/app/components/spec/ServiceSpecWindow.vue +15 -3
- package/app/components/testing/TestReportWindow.vue +10 -2
- package/app/composables/api/docInterview.ts +36 -0
- package/app/composables/api/sharedStacks.ts +42 -0
- package/app/composables/useApi.ts +4 -0
- package/app/composables/useWorkspaceStream.ts +5 -0
- package/app/stores/docInterview.ts +89 -0
- package/app/stores/sharedStacks.ts +65 -0
- package/app/stores/workspace.ts +3 -0
- package/app/types/doc-interview.ts +9 -0
- package/app/types/domain.ts +1 -0
- package/app/types/sharedStacks.ts +8 -0
- package/i18n/locales/en.json +62 -0
- package/i18n/locales/es.json +62 -0
- package/i18n/locales/fr.json +62 -0
- package/i18n/locales/he.json +62 -0
- package/i18n/locales/ja.json +62 -0
- package/i18n/locales/pl.json +62 -0
- package/i18n/locales/tr.json +62 -0
- package/i18n/locales/uk.json +62 -0
- package/package.json +5 -5
|
@@ -279,7 +279,16 @@ onUnmounted(() => preview.stopPolling(props.block.id))
|
|
|
279
279
|
>
|
|
280
280
|
{{ t('inspector.frontendConfig.detect.apply') }}
|
|
281
281
|
</UButton>
|
|
282
|
-
<UButton
|
|
282
|
+
<UButton
|
|
283
|
+
size="xs"
|
|
284
|
+
variant="ghost"
|
|
285
|
+
color="neutral"
|
|
286
|
+
@click="
|
|
287
|
+
() => {
|
|
288
|
+
detectResult = null
|
|
289
|
+
}
|
|
290
|
+
"
|
|
291
|
+
>
|
|
283
292
|
{{ t('inspector.frontendConfig.detect.dismiss') }}
|
|
284
293
|
</UButton>
|
|
285
294
|
</div>
|
|
@@ -213,9 +213,17 @@ function fmtTime(ms: number) {
|
|
|
213
213
|
<template v-else-if="draft">
|
|
214
214
|
<RecurringRecurrenceEditor v-model="draft" />
|
|
215
215
|
<div class="flex justify-end gap-1.5 pt-1">
|
|
216
|
-
<UButton
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
<UButton
|
|
217
|
+
size="xs"
|
|
218
|
+
variant="ghost"
|
|
219
|
+
color="neutral"
|
|
220
|
+
@click="
|
|
221
|
+
() => {
|
|
222
|
+
editing = false
|
|
223
|
+
}
|
|
224
|
+
"
|
|
225
|
+
>{{ t('common.cancel') }}</UButton
|
|
226
|
+
>
|
|
219
227
|
<UButton size="xs" color="primary" :loading="busy" @click="saveEdit">{{
|
|
220
228
|
t('common.save')
|
|
221
229
|
}}</UButton>
|
|
@@ -762,7 +762,11 @@ async function clone(p: Pipeline) {
|
|
|
762
762
|
:color="showArchived ? 'primary' : 'neutral'"
|
|
763
763
|
variant="ghost"
|
|
764
764
|
size="xs"
|
|
765
|
-
@click="
|
|
765
|
+
@click="
|
|
766
|
+
() => {
|
|
767
|
+
showArchived = !showArchived
|
|
768
|
+
}
|
|
769
|
+
"
|
|
766
770
|
>
|
|
767
771
|
{{
|
|
768
772
|
showArchived
|
|
@@ -987,7 +991,16 @@ async function clone(p: Pipeline) {
|
|
|
987
991
|
|
|
988
992
|
<template #footer>
|
|
989
993
|
<div class="flex w-full items-center justify-end gap-2">
|
|
990
|
-
<UButton
|
|
994
|
+
<UButton
|
|
995
|
+
color="neutral"
|
|
996
|
+
variant="ghost"
|
|
997
|
+
size="sm"
|
|
998
|
+
@click="
|
|
999
|
+
() => {
|
|
1000
|
+
addAgentOpen = false
|
|
1001
|
+
}
|
|
1002
|
+
"
|
|
1003
|
+
>
|
|
991
1004
|
{{ t('common.cancel') }}
|
|
992
1005
|
</UButton>
|
|
993
1006
|
<UButton
|
|
@@ -324,7 +324,11 @@ const ITEM_ICON: Record<string, string> = {
|
|
|
324
324
|
size="xs"
|
|
325
325
|
class="shrink-0 opacity-0 transition-opacity group-hover:opacity-100"
|
|
326
326
|
:title="t('pipeline.progress.restartTooltip')"
|
|
327
|
-
@click.stop="
|
|
327
|
+
@click.stop="
|
|
328
|
+
() => {
|
|
329
|
+
restartArmed = i
|
|
330
|
+
}
|
|
331
|
+
"
|
|
328
332
|
/>
|
|
329
333
|
<template v-else>
|
|
330
334
|
<UButton
|
|
@@ -344,7 +348,11 @@ const ITEM_ICON: Record<string, string> = {
|
|
|
344
348
|
size="xs"
|
|
345
349
|
class="shrink-0"
|
|
346
350
|
:disabled="restarting === i"
|
|
347
|
-
@click.stop="
|
|
351
|
+
@click.stop="
|
|
352
|
+
() => {
|
|
353
|
+
restartArmed = null
|
|
354
|
+
}
|
|
355
|
+
"
|
|
348
356
|
>
|
|
349
357
|
{{ t('common.cancel') }}
|
|
350
358
|
</UButton>
|
|
@@ -75,7 +75,16 @@ function go(action: () => void) {
|
|
|
75
75
|
</p>
|
|
76
76
|
|
|
77
77
|
<div class="flex flex-wrap justify-end gap-2">
|
|
78
|
-
<UButton
|
|
78
|
+
<UButton
|
|
79
|
+
color="neutral"
|
|
80
|
+
variant="ghost"
|
|
81
|
+
size="sm"
|
|
82
|
+
@click="
|
|
83
|
+
() => {
|
|
84
|
+
open = false
|
|
85
|
+
}
|
|
86
|
+
"
|
|
87
|
+
>
|
|
79
88
|
{{ t('providers.presetMismatch.later') }}
|
|
80
89
|
</UButton>
|
|
81
90
|
<UButton
|
|
@@ -97,7 +97,15 @@ function goConnect() {
|
|
|
97
97
|
{{ t('providers.personalCredential.connectBody', { vendor: vendorLabel }) }}
|
|
98
98
|
</p>
|
|
99
99
|
<div class="flex justify-end gap-2">
|
|
100
|
-
<UButton
|
|
100
|
+
<UButton
|
|
101
|
+
color="neutral"
|
|
102
|
+
variant="ghost"
|
|
103
|
+
@click="
|
|
104
|
+
() => {
|
|
105
|
+
open = false
|
|
106
|
+
}
|
|
107
|
+
"
|
|
108
|
+
>
|
|
101
109
|
{{ t('providers.personalCredential.cancel') }}
|
|
102
110
|
</UButton>
|
|
103
111
|
<UButton icon="i-lucide-shield-check" @click="goConnect()">
|
|
@@ -120,7 +128,15 @@ function goConnect() {
|
|
|
120
128
|
/>
|
|
121
129
|
</UFormField>
|
|
122
130
|
<div class="flex justify-end gap-2">
|
|
123
|
-
<UButton
|
|
131
|
+
<UButton
|
|
132
|
+
color="neutral"
|
|
133
|
+
variant="ghost"
|
|
134
|
+
@click="
|
|
135
|
+
() => {
|
|
136
|
+
open = false
|
|
137
|
+
}
|
|
138
|
+
"
|
|
139
|
+
>
|
|
124
140
|
{{ t('providers.personalCredential.cancel') }}
|
|
125
141
|
</UButton>
|
|
126
142
|
<UButton :loading="busy" :disabled="password.length < 6" @click="submit()">
|
|
@@ -979,7 +979,11 @@ async function resolveExceeded(choice: 'extra-round' | 'proceed' | 'stop-reset')
|
|
|
979
979
|
size="sm"
|
|
980
980
|
block
|
|
981
981
|
icon="i-lucide-pencil"
|
|
982
|
-
@click="
|
|
982
|
+
@click="
|
|
983
|
+
() => {
|
|
984
|
+
showRedo = !showRedo
|
|
985
|
+
}
|
|
986
|
+
"
|
|
983
987
|
>
|
|
984
988
|
{{ t('requirements.actions.redoIncorporation') }}
|
|
985
989
|
</UButton>
|
|
@@ -561,7 +561,16 @@ async function archive(prompt: SandboxPromptVersion) {
|
|
|
561
561
|
</p>
|
|
562
562
|
<UTextarea v-model="editText" :rows="16" class="w-full font-mono text-xs" autoresize />
|
|
563
563
|
<div class="flex justify-end gap-2">
|
|
564
|
-
<UButton
|
|
564
|
+
<UButton
|
|
565
|
+
color="neutral"
|
|
566
|
+
variant="ghost"
|
|
567
|
+
size="sm"
|
|
568
|
+
@click="
|
|
569
|
+
() => {
|
|
570
|
+
editing = null
|
|
571
|
+
}
|
|
572
|
+
"
|
|
573
|
+
>
|
|
565
574
|
{{ t('common.cancel') }}
|
|
566
575
|
</UButton>
|
|
567
576
|
<UButton
|
|
@@ -443,7 +443,11 @@ function notifyError(e: unknown) {
|
|
|
443
443
|
:color="selectedKubeEngine === e ? 'primary' : 'neutral'"
|
|
444
444
|
:variant="selectedKubeEngine === e ? 'soft' : 'ghost'"
|
|
445
445
|
size="xs"
|
|
446
|
-
@click="
|
|
446
|
+
@click="
|
|
447
|
+
() => {
|
|
448
|
+
selectedKubeEngine = e
|
|
449
|
+
}
|
|
450
|
+
"
|
|
447
451
|
>
|
|
448
452
|
{{ t(KUBE_ENGINE_KEYS[e]) }}
|
|
449
453
|
</UButton>
|
|
@@ -14,6 +14,10 @@ import type { ProviderConnectionKind } from '~/types/providerConnections'
|
|
|
14
14
|
import InfrastructureBackendPicker from '~/components/settings/InfrastructureBackendPicker.vue'
|
|
15
15
|
import InfraHandlersConfigurator from '~/components/settings/InfraHandlersConfigurator.vue'
|
|
16
16
|
import LocalContainerPoolSettings from '~/components/settings/LocalContainerPoolSettings.vue'
|
|
17
|
+
import SharedStacksPanel from '~/components/settings/SharedStacksPanel.vue'
|
|
18
|
+
|
|
19
|
+
// The shared-stacks tab uses its own slot key beyond the provider-connection kinds.
|
|
20
|
+
type InfraTabValue = ProviderConnectionKind | 'shared-stacks'
|
|
17
21
|
|
|
18
22
|
const { t } = useI18n()
|
|
19
23
|
const ui = useUiStore()
|
|
@@ -37,7 +41,7 @@ const agentsAvailable = computed(() => (auth.infrastructure?.execution.available
|
|
|
37
41
|
const envsAvailable = computed(() => (auth.infrastructure?.testEnv.available.length ?? 0) > 0)
|
|
38
42
|
|
|
39
43
|
const tabs = computed(() => {
|
|
40
|
-
const out: { value:
|
|
44
|
+
const out: { value: InfraTabValue; label: string; icon: string; slot: string }[] = []
|
|
41
45
|
if (agentsAvailable.value)
|
|
42
46
|
out.push({
|
|
43
47
|
value: 'runner-pool',
|
|
@@ -52,10 +56,19 @@ const tabs = computed(() => {
|
|
|
52
56
|
icon: 'i-lucide-cloud',
|
|
53
57
|
slot: 'environment',
|
|
54
58
|
})
|
|
59
|
+
// Shared stacks are long-lived compose infra a Tester environment attaches to, so they live
|
|
60
|
+
// alongside the test-environment config (shown wherever an environment backend is available).
|
|
61
|
+
if (envsAvailable.value)
|
|
62
|
+
out.push({
|
|
63
|
+
value: 'shared-stacks',
|
|
64
|
+
label: t('settings.sharedStacks.tab'),
|
|
65
|
+
icon: 'i-lucide-layers',
|
|
66
|
+
slot: 'shared-stacks',
|
|
67
|
+
})
|
|
55
68
|
return out
|
|
56
69
|
})
|
|
57
70
|
|
|
58
|
-
const activeTab = ref<
|
|
71
|
+
const activeTab = ref<InfraTabValue>(ui.infrastructureTab)
|
|
59
72
|
|
|
60
73
|
// Honour the deep-linked tab each time the window opens, falling back to the first available
|
|
61
74
|
// tab if the requested one is off.
|
|
@@ -124,6 +137,9 @@ watch([tabs, () => store.loaded], () => {
|
|
|
124
137
|
<InfraHandlersConfigurator />
|
|
125
138
|
</div>
|
|
126
139
|
</template>
|
|
140
|
+
<template #shared-stacks>
|
|
141
|
+
<SharedStacksPanel />
|
|
142
|
+
</template>
|
|
127
143
|
</UTabs>
|
|
128
144
|
|
|
129
145
|
<p v-else class="px-1 py-6 text-center text-sm text-slate-500">
|
|
@@ -234,7 +234,11 @@ const STATUS_UI: Record<
|
|
|
234
234
|
size="sm"
|
|
235
235
|
:color="trackerKind === null ? 'primary' : 'neutral'"
|
|
236
236
|
:variant="trackerKind === null ? 'solid' : 'subtle'"
|
|
237
|
-
@click="
|
|
237
|
+
@click="
|
|
238
|
+
() => {
|
|
239
|
+
trackerKind = null
|
|
240
|
+
}
|
|
241
|
+
"
|
|
238
242
|
>
|
|
239
243
|
{{ t('settings.issueTracker.filing.none') }}
|
|
240
244
|
</UButton>
|
|
@@ -243,7 +247,11 @@ const STATUS_UI: Record<
|
|
|
243
247
|
size="sm"
|
|
244
248
|
:color="trackerKind === 'github' ? 'primary' : 'neutral'"
|
|
245
249
|
:variant="trackerKind === 'github' ? 'solid' : 'subtle'"
|
|
246
|
-
@click="
|
|
250
|
+
@click="
|
|
251
|
+
() => {
|
|
252
|
+
trackerKind = 'github'
|
|
253
|
+
}
|
|
254
|
+
"
|
|
247
255
|
>
|
|
248
256
|
{{ t('settings.issueTracker.vendor.github') }}
|
|
249
257
|
</UButton>
|
|
@@ -252,7 +260,11 @@ const STATUS_UI: Record<
|
|
|
252
260
|
size="sm"
|
|
253
261
|
:color="trackerKind === 'jira' ? 'primary' : 'neutral'"
|
|
254
262
|
:variant="trackerKind === 'jira' ? 'solid' : 'subtle'"
|
|
255
|
-
@click="
|
|
263
|
+
@click="
|
|
264
|
+
() => {
|
|
265
|
+
trackerKind = 'jira'
|
|
266
|
+
}
|
|
267
|
+
"
|
|
256
268
|
>
|
|
257
269
|
Jira
|
|
258
270
|
</UButton>
|
|
@@ -261,7 +273,11 @@ const STATUS_UI: Record<
|
|
|
261
273
|
size="sm"
|
|
262
274
|
:color="trackerKind === 'linear' ? 'primary' : 'neutral'"
|
|
263
275
|
:variant="trackerKind === 'linear' ? 'solid' : 'subtle'"
|
|
264
|
-
@click="
|
|
276
|
+
@click="
|
|
277
|
+
() => {
|
|
278
|
+
trackerKind = 'linear'
|
|
279
|
+
}
|
|
280
|
+
"
|
|
265
281
|
>
|
|
266
282
|
Linear
|
|
267
283
|
</UButton>
|
|
@@ -225,7 +225,11 @@ async function remove(p: LocalRunner) {
|
|
|
225
225
|
size="xs"
|
|
226
226
|
:disabled="busy"
|
|
227
227
|
:title="t('settings.localModelEndpoints.edit')"
|
|
228
|
-
@click="
|
|
228
|
+
@click="
|
|
229
|
+
() => {
|
|
230
|
+
provider = e.provider
|
|
231
|
+
}
|
|
232
|
+
"
|
|
229
233
|
/>
|
|
230
234
|
<UButton
|
|
231
235
|
icon="i-lucide-trash-2"
|
|
@@ -281,7 +281,11 @@ function fail(title: string, e: unknown) {
|
|
|
281
281
|
variant="ghost"
|
|
282
282
|
size="sm"
|
|
283
283
|
class="ms-auto"
|
|
284
|
-
@click="
|
|
284
|
+
@click="
|
|
285
|
+
() => {
|
|
286
|
+
editor = null
|
|
287
|
+
}
|
|
288
|
+
"
|
|
285
289
|
>
|
|
286
290
|
{{ t('settings.modelConfiguration.back') }}
|
|
287
291
|
</UButton>
|
|
@@ -292,7 +296,11 @@ function fail(title: string, e: unknown) {
|
|
|
292
296
|
size="sm"
|
|
293
297
|
:class="editor ? '' : 'ms-auto'"
|
|
294
298
|
:title="t('settings.modelConfiguration.closeEsc')"
|
|
295
|
-
@click="
|
|
299
|
+
@click="
|
|
300
|
+
() => {
|
|
301
|
+
open = false
|
|
302
|
+
}
|
|
303
|
+
"
|
|
296
304
|
/>
|
|
297
305
|
</header>
|
|
298
306
|
|
|
@@ -499,7 +507,16 @@ function fail(title: string, e: unknown) {
|
|
|
499
507
|
</div>
|
|
500
508
|
|
|
501
509
|
<div class="flex items-center justify-end gap-2">
|
|
502
|
-
<UButton
|
|
510
|
+
<UButton
|
|
511
|
+
color="neutral"
|
|
512
|
+
variant="ghost"
|
|
513
|
+
size="sm"
|
|
514
|
+
@click="
|
|
515
|
+
() => {
|
|
516
|
+
editor = null
|
|
517
|
+
}
|
|
518
|
+
"
|
|
519
|
+
>
|
|
503
520
|
{{ t('common.cancel') }}
|
|
504
521
|
</UButton>
|
|
505
522
|
<UButton color="primary" size="sm" :loading="busy" @click="save">
|