@cat-factory/app 0.154.1 → 0.156.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/README.md +4 -3
- package/app/components/auth/LoginScreen.vue +11 -15
- package/app/components/github/GitHubOnboarding.vue +39 -11
- package/app/components/github/GitHubPanel.vue +58 -19
- package/app/components/panels/ResultWindowShell.vue +74 -3
- package/app/components/panels/StepValidationReport.vue +66 -0
- package/app/components/panels/inspector/ServiceValidationConfig.vue +208 -0
- package/app/components/vcs/GitLabConnect.vue +85 -0
- package/app/composables/api/validationChecks.ts +39 -0
- package/app/composables/api/vcs.ts +33 -0
- package/app/composables/useApi.ts +4 -0
- package/app/modular/panels/inspector.logic.spec.ts +3 -0
- package/app/modular/panels/inspector.logic.ts +5 -0
- package/app/modular/panels/inspector.ts +2 -0
- package/app/stores/github/connection.ts +13 -2
- package/app/stores/github/context.ts +3 -0
- package/app/stores/github/vcsConnect.ts +40 -0
- package/app/stores/github.spec.ts +146 -0
- package/app/stores/github.ts +49 -3
- package/app/stores/validationChecks.ts +111 -0
- package/app/types/domain.ts +1 -0
- package/app/types/validationChecks.ts +17 -0
- package/app/types/vcs.ts +14 -0
- package/app/utils/vcs.ts +31 -0
- package/i18n/locales/de.json +65 -7
- package/i18n/locales/en.json +65 -7
- package/i18n/locales/es.json +65 -7
- package/i18n/locales/fr.json +65 -7
- package/i18n/locales/he.json +65 -7
- package/i18n/locales/it.json +65 -7
- package/i18n/locales/ja.json +65 -7
- package/i18n/locales/pl.json +65 -7
- package/i18n/locales/tr.json +65 -7
- package/i18n/locales/uk.json +65 -7
- package/package.json +2 -2
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { defineStore } from 'pinia'
|
|
2
|
+
import { ref } from 'vue'
|
|
3
|
+
import type { ServiceValidationConfig, ValidationCheck } from '~/types/validationChecks'
|
|
4
|
+
import { VALIDATION_DEFAULT_MAX_ATTEMPTS } from '~/types/validationChecks'
|
|
5
|
+
import { useUpsertList } from '~/composables/useUpsertList'
|
|
6
|
+
import { useWorkspaceStore } from '~/stores/workspace'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The workspace's PRE-PR VALIDATION CHECKS: per service frame, the shell commands the
|
|
10
|
+
* executor-harness runs against the checkout after the coder settles and BEFORE the PR opens.
|
|
11
|
+
* A failing command is fed back into the agent loop; only a green checkout opens a PR.
|
|
12
|
+
*
|
|
13
|
+
* Loaded on demand by the service inspector rather than from the workspace snapshot — it's
|
|
14
|
+
* operator configuration read on one panel, not something every board load needs.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Whether a failed load is a SETTLED "you can't have this" — the facade wired no store (503) or
|
|
18
|
+
* this user lacks `settings.manage` (403) — rather than a transient fault. Only the settled cases
|
|
19
|
+
* latch `available` to false; everything else stays unresolved so a later visit retries.
|
|
20
|
+
*/
|
|
21
|
+
function isSettledUnavailable(error: unknown): boolean {
|
|
22
|
+
const status =
|
|
23
|
+
error && typeof error === 'object' && 'statusCode' in error
|
|
24
|
+
? (error as { statusCode?: number }).statusCode
|
|
25
|
+
: undefined
|
|
26
|
+
return status === 503 || status === 403
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const useValidationChecksStore = defineStore('validationChecks', () => {
|
|
30
|
+
const api = useApi()
|
|
31
|
+
|
|
32
|
+
const {
|
|
33
|
+
items: configs,
|
|
34
|
+
upsert: upsertLocal,
|
|
35
|
+
remove: dropLocal,
|
|
36
|
+
} = useUpsertList<ServiceValidationConfig>({ key: (c) => c.blockId })
|
|
37
|
+
const loading = ref(false)
|
|
38
|
+
/**
|
|
39
|
+
* Mirrors the backend's wiring: `null` until first probed, then true/false. The inspector
|
|
40
|
+
* panel hides itself when false, so a facade that didn't wire the store shows no dead control.
|
|
41
|
+
*/
|
|
42
|
+
const available = ref<boolean | null>(null)
|
|
43
|
+
let inFlight: Promise<void> | null = null
|
|
44
|
+
|
|
45
|
+
/** Force a refresh of every configured service's checks (used after a save/remove). */
|
|
46
|
+
async function load() {
|
|
47
|
+
const ws = useWorkspaceStore()
|
|
48
|
+
loading.value = true
|
|
49
|
+
try {
|
|
50
|
+
configs.value = await api.listServiceValidationConfigs(ws.requireId())
|
|
51
|
+
available.value = true
|
|
52
|
+
} catch (error) {
|
|
53
|
+
// A 503 means the facade wired no store and a 403 means this user may not manage settings:
|
|
54
|
+
// both are STABLE answers, so latch them and hide the entry point rather than showing a
|
|
55
|
+
// dead control. Anything else (a network blip, a 5xx) is TRANSIENT — leaving `available`
|
|
56
|
+
// unresolved so the next `ensureLoaded` retries, instead of hiding the panel for the rest
|
|
57
|
+
// of the session over one dropped request.
|
|
58
|
+
available.value = isSettledUnavailable(error) ? false : null
|
|
59
|
+
} finally {
|
|
60
|
+
loading.value = false
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Load once per session; concurrent callers share the in-flight request. */
|
|
65
|
+
async function ensureLoaded(): Promise<void> {
|
|
66
|
+
if (available.value !== null) return
|
|
67
|
+
inFlight ??= load().finally(() => {
|
|
68
|
+
inFlight = null
|
|
69
|
+
})
|
|
70
|
+
return inFlight
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** The checks configured for a service frame (an empty default when it has none). */
|
|
74
|
+
function forBlock(blockId: string): ServiceValidationConfig {
|
|
75
|
+
return (
|
|
76
|
+
configs.value.find((c) => c.blockId === blockId) ?? {
|
|
77
|
+
blockId,
|
|
78
|
+
checks: [],
|
|
79
|
+
maxAttempts: VALIDATION_DEFAULT_MAX_ATTEMPTS,
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Save a service frame's checks. An EMPTY list clears the config on the backend (the service
|
|
86
|
+
* deletes the row), which restores the exact pre-feature behaviour — so the local list drops
|
|
87
|
+
* the entry rather than keeping an empty one that reads as "configured".
|
|
88
|
+
*/
|
|
89
|
+
async function save(
|
|
90
|
+
blockId: string,
|
|
91
|
+
checks: ValidationCheck[],
|
|
92
|
+
maxAttempts: number,
|
|
93
|
+
): Promise<void> {
|
|
94
|
+
const ws = useWorkspaceStore()
|
|
95
|
+
const saved = await api.setServiceValidationConfig(ws.requireId(), blockId, {
|
|
96
|
+
checks,
|
|
97
|
+
maxAttempts,
|
|
98
|
+
})
|
|
99
|
+
if (saved.checks.length === 0) dropLocal(blockId)
|
|
100
|
+
else upsertLocal(saved)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Remove a service frame's checks entirely. */
|
|
104
|
+
async function remove(blockId: string): Promise<void> {
|
|
105
|
+
const ws = useWorkspaceStore()
|
|
106
|
+
await api.deleteServiceValidationConfig(ws.requireId(), blockId)
|
|
107
|
+
dropLocal(blockId)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return { configs, loading, available, load, ensureLoaded, forBlock, save, remove }
|
|
111
|
+
})
|
package/app/types/domain.ts
CHANGED
|
@@ -171,6 +171,7 @@ export type * from './tasks'
|
|
|
171
171
|
export type * from './bootstrap'
|
|
172
172
|
export type * from './envConfigRepair'
|
|
173
173
|
export type * from './github'
|
|
174
|
+
export type * from './vcs'
|
|
174
175
|
export type * from './accounts'
|
|
175
176
|
export type * from './notifications'
|
|
176
177
|
export type * from './slack'
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Pre-PR validation-check shapes: the per-service-frame commands the executor-harness runs
|
|
2
|
+
// against the checkout before opening a PR, and the report it produces.
|
|
3
|
+
//
|
|
4
|
+
// All wire shapes are sourced from @cat-factory/contracts (single source of truth).
|
|
5
|
+
|
|
6
|
+
export type {
|
|
7
|
+
ValidationCheck,
|
|
8
|
+
ValidationCheckOutcome,
|
|
9
|
+
ValidationReport,
|
|
10
|
+
ServiceValidationConfig,
|
|
11
|
+
UpsertServiceValidationConfigInput,
|
|
12
|
+
} from '@cat-factory/contracts'
|
|
13
|
+
export {
|
|
14
|
+
VALIDATION_DEFAULT_MAX_ATTEMPTS,
|
|
15
|
+
VALIDATION_MAX_ATTEMPTS_CEILING,
|
|
16
|
+
VALIDATION_MAX_CHECKS,
|
|
17
|
+
} from '@cat-factory/contracts'
|
package/app/types/vcs.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Provider-neutral VCS vocabulary. The platform talks to several git providers
|
|
3
|
+
// (GitHub, GitLab, …) through one GitHub-shaped service layer, so the SPA's data
|
|
4
|
+
// stays neutral and only its PRESENTATION switches on the provider.
|
|
5
|
+
//
|
|
6
|
+
// All wire shapes come from @cat-factory/contracts (single source of truth).
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
import type { VcsProviderWire } from '@cat-factory/contracts'
|
|
10
|
+
|
|
11
|
+
export type { VcsConnectMethod, VcsConnectOption, VcsProviderWire } from '@cat-factory/contracts'
|
|
12
|
+
|
|
13
|
+
/** The VCS a connection / repository belongs to — the discriminator presentation keys off. */
|
|
14
|
+
export type VcsProvider = VcsProviderWire
|
package/app/utils/vcs.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { VcsProvider } from '~/types/domain'
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Shared VCS provider presentation. The platform's repo DATA is provider-neutral (one
|
|
5
|
+
// GitHub-shaped store serves GitLab through the backend adapter), so only presentation
|
|
6
|
+
// switches on the provider — and it switches HERE, once, rather than per component.
|
|
7
|
+
//
|
|
8
|
+
// Labels are brand names, kept verbatim in every locale, so they are constants rather than
|
|
9
|
+
// catalog keys (the same convention the login screen and the API-key provider descriptors
|
|
10
|
+
// already use). Anything that is PROSE stays in the i18n catalog, keyed per provider.
|
|
11
|
+
//
|
|
12
|
+
// Each map is an exhaustive `Record<VcsProvider, …>`: adding a provider to the union fails
|
|
13
|
+
// the typecheck here instead of silently rendering a GitHub icon for it.
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
/** Brand name, as rendered in titles and buttons. */
|
|
17
|
+
export const VCS_PROVIDER_LABELS: Record<VcsProvider, string> = {
|
|
18
|
+
github: 'GitHub',
|
|
19
|
+
gitlab: 'GitLab',
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const VCS_PROVIDER_ICONS: Record<VcsProvider, string> = {
|
|
23
|
+
github: 'i-lucide-github',
|
|
24
|
+
gitlab: 'i-lucide-gitlab',
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Where a user creates a personal access token for the provider (the PAT connect flow). */
|
|
28
|
+
export const VCS_PROVIDER_TOKEN_URLS: Record<VcsProvider, string> = {
|
|
29
|
+
github: 'https://github.com/settings/tokens/new',
|
|
30
|
+
gitlab: 'https://gitlab.com/-/user_settings/personal_access_tokens',
|
|
31
|
+
}
|
package/i18n/locales/de.json
CHANGED
|
@@ -1346,6 +1346,25 @@
|
|
|
1346
1346
|
"remove": "{repo} entfernen",
|
|
1347
1347
|
"connectFirst": "Verbinde GitHub, um Referenz-Repositories anzuhängen.",
|
|
1348
1348
|
"hint": "Der Dokument-Writer klont diese schreibgeschützt, um beim Entwerfen vorhandene Lösungen als Referenz wiederzuverwenden. Er ändert sie nie."
|
|
1349
|
+
},
|
|
1350
|
+
"validationChecks": {
|
|
1351
|
+
"title": "Prüfungen vor dem PR",
|
|
1352
|
+
"sectionHint": "Befehle, die nach dem Coder und vor dem Öffnen eines Pull Requests im Checkout laufen. Ein Fehlschlag geht zur Behebung an den Agenten zurück; nur ein fehlerfreier Checkout öffnet einen PR.",
|
|
1353
|
+
"hint": "Jeder Befehl läuft der Reihe nach mit `sh -c` im Checkout dieses Dienstes. Der Agent soll den Code reparieren, nicht die Prüfung abschwächen.",
|
|
1354
|
+
"clear": "Leeren",
|
|
1355
|
+
"configNoun": "Prüfungen",
|
|
1356
|
+
"label": "Name",
|
|
1357
|
+
"labelPlaceholder": "lint",
|
|
1358
|
+
"command": "Befehl",
|
|
1359
|
+
"addCheck": "Prüfung hinzufügen",
|
|
1360
|
+
"removeCheck": "Diese Prüfung entfernen",
|
|
1361
|
+
"empty": "Keine Prüfungen konfiguriert. Läufe für diesen Dienst öffnen einen Pull Request ohne lokale Überprüfung.",
|
|
1362
|
+
"maxAttempts": "Versuche",
|
|
1363
|
+
"maxAttemptsHint": "Korrekturrunden",
|
|
1364
|
+
"save": "Prüfungen speichern",
|
|
1365
|
+
"savedToast": "Prüfungen gespeichert",
|
|
1366
|
+
"saveFailed": "Prüfungen konnten nicht gespeichert werden",
|
|
1367
|
+
"clearFailed": "Prüfungen konnten nicht geleert werden"
|
|
1349
1368
|
}
|
|
1350
1369
|
},
|
|
1351
1370
|
"panels": {
|
|
@@ -1512,6 +1531,16 @@
|
|
|
1512
1531
|
"outOfTen": "{value}/10",
|
|
1513
1532
|
"relatedFindings": "Zugehörige Befunde",
|
|
1514
1533
|
"unnamed": "Standard"
|
|
1534
|
+
},
|
|
1535
|
+
"validation": {
|
|
1536
|
+
"heading": "Prüfungen vor dem PR",
|
|
1537
|
+
"passed": "Bestanden",
|
|
1538
|
+
"failed": "Fehlgeschlagen",
|
|
1539
|
+
"attempts": "Versuch {attempts} von {maxAttempts}",
|
|
1540
|
+
"passedSummary": "Alle {total} Prüfungen wurden in Versuch {attempts} bestanden. Der Pull Request wurde aus einem fehlerfreien Checkout geöffnet.",
|
|
1541
|
+
"failedSummary": "{failed} von {total} Prüfungen schlugen nach {attempts} von {maxAttempts} Versuchen weiterhin fehl, daher wurde kein Pull Request geöffnet.",
|
|
1542
|
+
"exitCode": "Exit-Code {code}",
|
|
1543
|
+
"timedOut": "Zeitüberschreitung"
|
|
1515
1544
|
}
|
|
1516
1545
|
},
|
|
1517
1546
|
"inspector": {
|
|
@@ -2571,8 +2600,7 @@
|
|
|
2571
2600
|
},
|
|
2572
2601
|
"github": {
|
|
2573
2602
|
"onboarding": {
|
|
2574
|
-
"
|
|
2575
|
-
"intro": "cat-factory funktioniert, indem es Pull Requests in Ihren Repositorys öffnet. Installieren Sie die GitHub App auf Ihrem Account oder Ihrer Organisation, um fortzufahren; Sie können ihr jedes Repository oder eine Teilmenge gewähren.",
|
|
2603
|
+
"appIntro": "Installieren Sie die GitHub App auf Ihrem Account oder Ihrer Organisation; Sie können ihr jedes Repository oder eine Teilmenge gewähren.",
|
|
2576
2604
|
"signedInAs": "Angemeldet als {login}",
|
|
2577
2605
|
"signOut": "Abmelden"
|
|
2578
2606
|
},
|
|
@@ -2646,7 +2674,6 @@
|
|
|
2646
2674
|
"closed": "geschlossen"
|
|
2647
2675
|
},
|
|
2648
2676
|
"toast": {
|
|
2649
|
-
"disconnected": "GitHub getrennt",
|
|
2650
2677
|
"resync": "Neusynchronisierung {status}",
|
|
2651
2678
|
"reposUpdated": "Verknüpfte Repositorys aktualisiert",
|
|
2652
2679
|
"branchCreated": "Branch {name} erstellt",
|
|
@@ -2662,10 +2689,6 @@
|
|
|
2662
2689
|
"createBranch": "Branch konnte nicht erstellt werden",
|
|
2663
2690
|
"openPr": "Pull Request konnte nicht geöffnet werden",
|
|
2664
2691
|
"merge": "Mergen nicht möglich"
|
|
2665
|
-
},
|
|
2666
|
-
"confirmDisconnect": {
|
|
2667
|
-
"title": "GitHub trennen?",
|
|
2668
|
-
"body": "Die App verliert den Zugriff auf Ihre Repositorys, bis Sie sie erneut verbinden."
|
|
2669
2692
|
}
|
|
2670
2693
|
},
|
|
2671
2694
|
"addService": {
|
|
@@ -5159,5 +5182,40 @@
|
|
|
5159
5182
|
"sourceUnlinked": "Quelle getrennt",
|
|
5160
5183
|
"unlinkSourceFailed": "Quelle konnte nicht getrennt werden"
|
|
5161
5184
|
}
|
|
5185
|
+
},
|
|
5186
|
+
"vcs": {
|
|
5187
|
+
"panel": {
|
|
5188
|
+
"title": "Quellcodeverwaltung",
|
|
5189
|
+
"patMeta": "Verbunden über ein persönliches Zugriffstoken",
|
|
5190
|
+
"confirmDisconnect": {
|
|
5191
|
+
"title": "{provider} trennen?",
|
|
5192
|
+
"body": "Die App verliert den Zugriff auf Ihre Repositorys, bis Sie sie erneut verbinden."
|
|
5193
|
+
},
|
|
5194
|
+
"toast": {
|
|
5195
|
+
"disconnected": "{provider} getrennt"
|
|
5196
|
+
}
|
|
5197
|
+
},
|
|
5198
|
+
"connect": {
|
|
5199
|
+
"or": "oder",
|
|
5200
|
+
"noneConfigured": "Für dieses Deployment ist keine Quellcodeverbindung konfiguriert. Bitten Sie einen Betreiber, eine GitHub App oder einen GitLab-Zugang einzurichten.",
|
|
5201
|
+
"gitlab": {
|
|
5202
|
+
"intro": "Fügen Sie ein persönliches GitLab-Zugriffstoken ein, um diesen Workspace zu verbinden. cat-factory nutzt es, um Ihre Projekte aufzulisten, Branches zu pushen und Merge Requests zu öffnen.",
|
|
5203
|
+
"tokenLabel": "Persönliches Zugriffstoken",
|
|
5204
|
+
"scope": "Benötigt den Bereich api",
|
|
5205
|
+
"createToken": "Token auf GitLab erstellen",
|
|
5206
|
+
"submit": "GitLab verbinden",
|
|
5207
|
+
"toast": {
|
|
5208
|
+
"connected": "GitLab verbunden"
|
|
5209
|
+
},
|
|
5210
|
+
"errors": {
|
|
5211
|
+
"connect": "GitLab konnte nicht verbunden werden"
|
|
5212
|
+
}
|
|
5213
|
+
}
|
|
5214
|
+
},
|
|
5215
|
+
"onboarding": {
|
|
5216
|
+
"title": "cat-factory mit {provider} verbinden",
|
|
5217
|
+
"titleAny": "cat-factory mit Ihren Repositorys verbinden",
|
|
5218
|
+
"intro": "cat-factory funktioniert, indem es Pull Requests in Ihren Repositorys öffnet. Verbinden Sie Ihren Repository-Anbieter, um fortzufahren."
|
|
5219
|
+
}
|
|
5162
5220
|
}
|
|
5163
5221
|
}
|
package/i18n/locales/en.json
CHANGED
|
@@ -1117,6 +1117,25 @@
|
|
|
1117
1117
|
"remove": "Remove {repo}",
|
|
1118
1118
|
"connectFirst": "Connect GitHub to attach reference repositories.",
|
|
1119
1119
|
"hint": "The document writer clones these read-only to reuse existing solutions as a reference while drafting. It never changes them."
|
|
1120
|
+
},
|
|
1121
|
+
"validationChecks": {
|
|
1122
|
+
"title": "Pre-PR validation",
|
|
1123
|
+
"sectionHint": "Commands run against the checkout after the coder finishes and before a pull request is opened. A failure is handed back to the agent to fix; only a passing checkout opens a PR.",
|
|
1124
|
+
"hint": "Each command runs with `sh -c` in this service's checkout, in order. Fix the code, not the check — the agent is told not to weaken them.",
|
|
1125
|
+
"clear": "Clear",
|
|
1126
|
+
"configNoun": "validation checks",
|
|
1127
|
+
"label": "Name",
|
|
1128
|
+
"labelPlaceholder": "lint",
|
|
1129
|
+
"command": "Command",
|
|
1130
|
+
"addCheck": "Add check",
|
|
1131
|
+
"removeCheck": "Remove this check",
|
|
1132
|
+
"empty": "No checks configured. Runs for this service open a pull request without any local verification.",
|
|
1133
|
+
"maxAttempts": "Attempts",
|
|
1134
|
+
"maxAttemptsHint": "Rounds of fixing",
|
|
1135
|
+
"save": "Save checks",
|
|
1136
|
+
"savedToast": "Validation checks saved",
|
|
1137
|
+
"saveFailed": "Could not save the validation checks",
|
|
1138
|
+
"clearFailed": "Could not clear the validation checks"
|
|
1120
1139
|
}
|
|
1121
1140
|
},
|
|
1122
1141
|
"panels": {
|
|
@@ -1283,6 +1302,16 @@
|
|
|
1283
1302
|
"outOfTen": "{value}/10",
|
|
1284
1303
|
"relatedFindings": "Related findings",
|
|
1285
1304
|
"unnamed": "Standard"
|
|
1305
|
+
},
|
|
1306
|
+
"validation": {
|
|
1307
|
+
"heading": "Pre-PR validation",
|
|
1308
|
+
"passed": "Passed",
|
|
1309
|
+
"failed": "Failed",
|
|
1310
|
+
"attempts": "Attempt {attempts} of {maxAttempts}",
|
|
1311
|
+
"passedSummary": "All {total} checks passed on attempt {attempts}. The pull request was opened from a green checkout.",
|
|
1312
|
+
"failedSummary": "{failed} of {total} checks were still failing after {attempts} of {maxAttempts} attempts, so no pull request was opened.",
|
|
1313
|
+
"exitCode": "exit {code}",
|
|
1314
|
+
"timedOut": "timed out"
|
|
1286
1315
|
}
|
|
1287
1316
|
},
|
|
1288
1317
|
"inspector": {
|
|
@@ -3119,8 +3148,7 @@
|
|
|
3119
3148
|
},
|
|
3120
3149
|
"github": {
|
|
3121
3150
|
"onboarding": {
|
|
3122
|
-
"
|
|
3123
|
-
"intro": "cat-factory works by opening pull requests on your repositories. Install the GitHub App on your account or organization to continue, and you can grant it every repository or pick a subset.",
|
|
3151
|
+
"appIntro": "Install the GitHub App on your account or organization; you can grant it every repository or pick a subset.",
|
|
3124
3152
|
"signedInAs": "Signed in as {login}",
|
|
3125
3153
|
"signOut": "Sign out"
|
|
3126
3154
|
},
|
|
@@ -3194,7 +3222,6 @@
|
|
|
3194
3222
|
"closed": "closed"
|
|
3195
3223
|
},
|
|
3196
3224
|
"toast": {
|
|
3197
|
-
"disconnected": "GitHub disconnected",
|
|
3198
3225
|
"resync": "Resync {status}",
|
|
3199
3226
|
"reposUpdated": "Linked repositories updated",
|
|
3200
3227
|
"branchCreated": "Branch {name} created",
|
|
@@ -3210,10 +3237,6 @@
|
|
|
3210
3237
|
"createBranch": "Could not create branch",
|
|
3211
3238
|
"openPr": "Could not open pull request",
|
|
3212
3239
|
"merge": "Could not merge"
|
|
3213
|
-
},
|
|
3214
|
-
"confirmDisconnect": {
|
|
3215
|
-
"title": "Disconnect GitHub?",
|
|
3216
|
-
"body": "The app will lose access to your repositories until you reconnect."
|
|
3217
3240
|
}
|
|
3218
3241
|
},
|
|
3219
3242
|
"addService": {
|
|
@@ -5288,5 +5311,40 @@
|
|
|
5288
5311
|
"sourceUnlinked": "Source unlinked",
|
|
5289
5312
|
"unlinkSourceFailed": "Could not unlink source"
|
|
5290
5313
|
}
|
|
5314
|
+
},
|
|
5315
|
+
"vcs": {
|
|
5316
|
+
"panel": {
|
|
5317
|
+
"title": "Source control",
|
|
5318
|
+
"patMeta": "Connected with a personal access token",
|
|
5319
|
+
"confirmDisconnect": {
|
|
5320
|
+
"title": "Disconnect {provider}?",
|
|
5321
|
+
"body": "The app will lose access to your repositories until you reconnect."
|
|
5322
|
+
},
|
|
5323
|
+
"toast": {
|
|
5324
|
+
"disconnected": "{provider} disconnected"
|
|
5325
|
+
}
|
|
5326
|
+
},
|
|
5327
|
+
"connect": {
|
|
5328
|
+
"or": "or",
|
|
5329
|
+
"noneConfigured": "No source-control connection is configured for this deployment. Ask an operator to set up a GitHub App or GitLab access.",
|
|
5330
|
+
"gitlab": {
|
|
5331
|
+
"intro": "Paste a GitLab personal access token to connect this workspace. cat-factory uses it to list your projects, push branches and open merge requests.",
|
|
5332
|
+
"tokenLabel": "Personal access token",
|
|
5333
|
+
"scope": "Needs the api scope",
|
|
5334
|
+
"createToken": "Create a token on GitLab",
|
|
5335
|
+
"submit": "Connect GitLab",
|
|
5336
|
+
"toast": {
|
|
5337
|
+
"connected": "GitLab connected"
|
|
5338
|
+
},
|
|
5339
|
+
"errors": {
|
|
5340
|
+
"connect": "Could not connect GitLab"
|
|
5341
|
+
}
|
|
5342
|
+
}
|
|
5343
|
+
},
|
|
5344
|
+
"onboarding": {
|
|
5345
|
+
"title": "Connect cat-factory to {provider}",
|
|
5346
|
+
"titleAny": "Connect cat-factory to your repositories",
|
|
5347
|
+
"intro": "cat-factory works by opening pull requests on your repositories. Connect your repository host to continue."
|
|
5348
|
+
}
|
|
5291
5349
|
}
|
|
5292
5350
|
}
|
package/i18n/locales/es.json
CHANGED
|
@@ -1060,6 +1060,25 @@
|
|
|
1060
1060
|
"remove": "Quitar {repo}",
|
|
1061
1061
|
"connectFirst": "Conecta GitHub para adjuntar repositorios de referencia.",
|
|
1062
1062
|
"hint": "El escritor de documentos los clona en modo de solo lectura para reutilizar soluciones existentes como referencia al redactar. Nunca los modifica."
|
|
1063
|
+
},
|
|
1064
|
+
"validationChecks": {
|
|
1065
|
+
"title": "Validación previa al PR",
|
|
1066
|
+
"sectionHint": "Comandos que se ejecutan sobre la copia de trabajo cuando el programador termina y antes de abrir una solicitud de incorporación. Un fallo vuelve al agente para que lo corrija; solo una copia sin errores abre un PR.",
|
|
1067
|
+
"hint": "Cada comando se ejecuta con `sh -c` en la copia de trabajo de este servicio, en orden. Hay que arreglar el código, no la comprobación: al agente se le indica que no las debilite.",
|
|
1068
|
+
"clear": "Vaciar",
|
|
1069
|
+
"configNoun": "comprobaciones de validación",
|
|
1070
|
+
"label": "Nombre",
|
|
1071
|
+
"labelPlaceholder": "lint",
|
|
1072
|
+
"command": "Comando",
|
|
1073
|
+
"addCheck": "Añadir comprobación",
|
|
1074
|
+
"removeCheck": "Quitar esta comprobación",
|
|
1075
|
+
"empty": "No hay comprobaciones configuradas. Las ejecuciones de este servicio abren una solicitud de incorporación sin verificación local.",
|
|
1076
|
+
"maxAttempts": "Intentos",
|
|
1077
|
+
"maxAttemptsHint": "Rondas de corrección",
|
|
1078
|
+
"save": "Guardar comprobaciones",
|
|
1079
|
+
"savedToast": "Comprobaciones guardadas",
|
|
1080
|
+
"saveFailed": "No se pudieron guardar las comprobaciones",
|
|
1081
|
+
"clearFailed": "No se pudieron vaciar las comprobaciones"
|
|
1063
1082
|
}
|
|
1064
1083
|
},
|
|
1065
1084
|
"panels": {
|
|
@@ -1226,6 +1245,16 @@
|
|
|
1226
1245
|
"outOfTen": "{value}/10",
|
|
1227
1246
|
"relatedFindings": "Hallazgos relacionados",
|
|
1228
1247
|
"unnamed": "Estándar"
|
|
1248
|
+
},
|
|
1249
|
+
"validation": {
|
|
1250
|
+
"heading": "Validación previa al PR",
|
|
1251
|
+
"passed": "Superada",
|
|
1252
|
+
"failed": "Fallida",
|
|
1253
|
+
"attempts": "Intento {attempts} de {maxAttempts}",
|
|
1254
|
+
"passedSummary": "Las {total} comprobaciones se superaron en el intento {attempts}. La solicitud de incorporación se abrió desde una copia sin errores.",
|
|
1255
|
+
"failedSummary": "{failed} de {total} comprobaciones seguían fallando tras {attempts} de {maxAttempts} intentos, así que no se abrió ninguna solicitud de incorporación.",
|
|
1256
|
+
"exitCode": "código de salida {code}",
|
|
1257
|
+
"timedOut": "tiempo agotado"
|
|
1229
1258
|
}
|
|
1230
1259
|
},
|
|
1231
1260
|
"inspector": {
|
|
@@ -3032,8 +3061,7 @@
|
|
|
3032
3061
|
},
|
|
3033
3062
|
"github": {
|
|
3034
3063
|
"onboarding": {
|
|
3035
|
-
"
|
|
3036
|
-
"intro": "cat-factory funciona abriendo solicitudes de incorporación de cambios en tus repositorios. Instala la GitHub App en tu cuenta u organización para continuar, y puedes concederle todos los repositorios o elegir un subconjunto.",
|
|
3064
|
+
"appIntro": "Instala la GitHub App en tu cuenta u organización; puedes concederle todos los repositorios o elegir un subconjunto.",
|
|
3037
3065
|
"signedInAs": "Sesión iniciada como {login}",
|
|
3038
3066
|
"signOut": "Cerrar sesión"
|
|
3039
3067
|
},
|
|
@@ -3107,7 +3135,6 @@
|
|
|
3107
3135
|
"closed": "cerrada"
|
|
3108
3136
|
},
|
|
3109
3137
|
"toast": {
|
|
3110
|
-
"disconnected": "GitHub desconectado",
|
|
3111
3138
|
"resync": "Resincronización {status}",
|
|
3112
3139
|
"reposUpdated": "Repositorios vinculados actualizados",
|
|
3113
3140
|
"branchCreated": "Rama {name} creada",
|
|
@@ -3123,10 +3150,6 @@
|
|
|
3123
3150
|
"createBranch": "No se pudo crear la rama",
|
|
3124
3151
|
"openPr": "No se pudo abrir la solicitud de incorporación de cambios",
|
|
3125
3152
|
"merge": "No se pudo fusionar"
|
|
3126
|
-
},
|
|
3127
|
-
"confirmDisconnect": {
|
|
3128
|
-
"title": "¿Desconectar GitHub?",
|
|
3129
|
-
"body": "La app perderá acceso a tus repositorios hasta que vuelvas a conectar."
|
|
3130
3153
|
}
|
|
3131
3154
|
},
|
|
3132
3155
|
"addService": {
|
|
@@ -5147,5 +5170,40 @@
|
|
|
5147
5170
|
"sourceUnlinked": "Fuente desvinculada",
|
|
5148
5171
|
"unlinkSourceFailed": "No se pudo desvincular la fuente"
|
|
5149
5172
|
}
|
|
5173
|
+
},
|
|
5174
|
+
"vcs": {
|
|
5175
|
+
"panel": {
|
|
5176
|
+
"title": "Control de código fuente",
|
|
5177
|
+
"patMeta": "Conectado con un token de acceso personal",
|
|
5178
|
+
"confirmDisconnect": {
|
|
5179
|
+
"title": "¿Desconectar {provider}?",
|
|
5180
|
+
"body": "La app perderá acceso a tus repositorios hasta que vuelvas a conectar."
|
|
5181
|
+
},
|
|
5182
|
+
"toast": {
|
|
5183
|
+
"disconnected": "{provider} desconectado"
|
|
5184
|
+
}
|
|
5185
|
+
},
|
|
5186
|
+
"connect": {
|
|
5187
|
+
"or": "o",
|
|
5188
|
+
"noneConfigured": "Este despliegue no tiene configurada ninguna conexión de control de código. Pide a un operador que configure una GitHub App o el acceso a GitLab.",
|
|
5189
|
+
"gitlab": {
|
|
5190
|
+
"intro": "Pega un token de acceso personal de GitLab para conectar este espacio de trabajo. cat-factory lo usa para listar tus proyectos, subir ramas y abrir solicitudes de fusión.",
|
|
5191
|
+
"tokenLabel": "Token de acceso personal",
|
|
5192
|
+
"scope": "Necesita el ámbito api",
|
|
5193
|
+
"createToken": "Crear un token en GitLab",
|
|
5194
|
+
"submit": "Conectar GitLab",
|
|
5195
|
+
"toast": {
|
|
5196
|
+
"connected": "GitLab conectado"
|
|
5197
|
+
},
|
|
5198
|
+
"errors": {
|
|
5199
|
+
"connect": "No se pudo conectar GitLab"
|
|
5200
|
+
}
|
|
5201
|
+
}
|
|
5202
|
+
},
|
|
5203
|
+
"onboarding": {
|
|
5204
|
+
"title": "Conecta cat-factory con {provider}",
|
|
5205
|
+
"titleAny": "Conecta cat-factory con tus repositorios",
|
|
5206
|
+
"intro": "cat-factory funciona abriendo solicitudes de incorporación de cambios en tus repositorios. Conecta tu proveedor de repositorios para continuar."
|
|
5207
|
+
}
|
|
5150
5208
|
}
|
|
5151
5209
|
}
|
package/i18n/locales/fr.json
CHANGED
|
@@ -1060,6 +1060,25 @@
|
|
|
1060
1060
|
"remove": "Retirer {repo}",
|
|
1061
1061
|
"connectFirst": "Connectez GitHub pour joindre des dépôts de référence.",
|
|
1062
1062
|
"hint": "Le rédacteur de documents les clone en lecture seule pour réutiliser des solutions existantes comme référence lors de la rédaction. Il ne les modifie jamais."
|
|
1063
|
+
},
|
|
1064
|
+
"validationChecks": {
|
|
1065
|
+
"title": "Validation avant la PR",
|
|
1066
|
+
"sectionHint": "Commandes exécutées sur la copie de travail une fois le développeur terminé et avant l'ouverture d'une demande de tirage. Un échec est renvoyé à l'agent pour correction ; seule une copie sans erreur ouvre une PR.",
|
|
1067
|
+
"hint": "Chaque commande s'exécute avec `sh -c` dans la copie de travail de ce service, dans l'ordre. Il faut corriger le code, pas la vérification : il est demandé à l'agent de ne pas les affaiblir.",
|
|
1068
|
+
"clear": "Vider",
|
|
1069
|
+
"configNoun": "vérifications de validation",
|
|
1070
|
+
"label": "Nom",
|
|
1071
|
+
"labelPlaceholder": "lint",
|
|
1072
|
+
"command": "Commande",
|
|
1073
|
+
"addCheck": "Ajouter une vérification",
|
|
1074
|
+
"removeCheck": "Supprimer cette vérification",
|
|
1075
|
+
"empty": "Aucune vérification configurée. Les exécutions de ce service ouvrent une demande de tirage sans vérification locale.",
|
|
1076
|
+
"maxAttempts": "Tentatives",
|
|
1077
|
+
"maxAttemptsHint": "Cycles de correction",
|
|
1078
|
+
"save": "Enregistrer les vérifications",
|
|
1079
|
+
"savedToast": "Vérifications enregistrées",
|
|
1080
|
+
"saveFailed": "Impossible d'enregistrer les vérifications",
|
|
1081
|
+
"clearFailed": "Impossible de vider les vérifications"
|
|
1063
1082
|
}
|
|
1064
1083
|
},
|
|
1065
1084
|
"panels": {
|
|
@@ -1226,6 +1245,16 @@
|
|
|
1226
1245
|
"outOfTen": "{value}/10",
|
|
1227
1246
|
"relatedFindings": "Constats associés",
|
|
1228
1247
|
"unnamed": "Standard"
|
|
1248
|
+
},
|
|
1249
|
+
"validation": {
|
|
1250
|
+
"heading": "Validation avant la PR",
|
|
1251
|
+
"passed": "Réussie",
|
|
1252
|
+
"failed": "Échouée",
|
|
1253
|
+
"attempts": "Tentative {attempts} sur {maxAttempts}",
|
|
1254
|
+
"passedSummary": "Les {total} vérifications ont réussi à la tentative {attempts}. La demande de tirage a été ouverte depuis une copie sans erreur.",
|
|
1255
|
+
"failedSummary": "{failed} vérifications sur {total} échouaient encore après {attempts} tentatives sur {maxAttempts}, aucune demande de tirage n'a donc été ouverte.",
|
|
1256
|
+
"exitCode": "code de sortie {code}",
|
|
1257
|
+
"timedOut": "délai dépassé"
|
|
1229
1258
|
}
|
|
1230
1259
|
},
|
|
1231
1260
|
"inspector": {
|
|
@@ -3032,8 +3061,7 @@
|
|
|
3032
3061
|
},
|
|
3033
3062
|
"github": {
|
|
3034
3063
|
"onboarding": {
|
|
3035
|
-
"
|
|
3036
|
-
"intro": "cat-factory fonctionne en ouvrant des pull requests sur vos dépôts. Installez la GitHub App sur votre compte ou votre organisation pour continuer, et vous pouvez lui accorder tous les dépôts ou en choisir un sous-ensemble.",
|
|
3064
|
+
"appIntro": "Installez la GitHub App sur votre compte ou votre organisation ; vous pouvez lui accorder tous les dépôts ou en choisir un sous-ensemble.",
|
|
3037
3065
|
"signedInAs": "Connecté en tant que {login}",
|
|
3038
3066
|
"signOut": "Se déconnecter"
|
|
3039
3067
|
},
|
|
@@ -3107,7 +3135,6 @@
|
|
|
3107
3135
|
"closed": "fermé"
|
|
3108
3136
|
},
|
|
3109
3137
|
"toast": {
|
|
3110
|
-
"disconnected": "GitHub déconnecté",
|
|
3111
3138
|
"resync": "Resynchronisation {status}",
|
|
3112
3139
|
"reposUpdated": "Dépôts liés mis à jour",
|
|
3113
3140
|
"branchCreated": "Branche {name} créée",
|
|
@@ -3123,10 +3150,6 @@
|
|
|
3123
3150
|
"createBranch": "Impossible de créer la branche",
|
|
3124
3151
|
"openPr": "Impossible d'ouvrir la pull request",
|
|
3125
3152
|
"merge": "Impossible de fusionner"
|
|
3126
|
-
},
|
|
3127
|
-
"confirmDisconnect": {
|
|
3128
|
-
"title": "Déconnecter GitHub ?",
|
|
3129
|
-
"body": "L'application perdra l'accès à vos dépôts jusqu'à la reconnexion."
|
|
3130
3153
|
}
|
|
3131
3154
|
},
|
|
3132
3155
|
"addService": {
|
|
@@ -5147,5 +5170,40 @@
|
|
|
5147
5170
|
"sourceUnlinked": "Source dissociée",
|
|
5148
5171
|
"unlinkSourceFailed": "Impossible de dissocier la source"
|
|
5149
5172
|
}
|
|
5173
|
+
},
|
|
5174
|
+
"vcs": {
|
|
5175
|
+
"panel": {
|
|
5176
|
+
"title": "Gestion de code source",
|
|
5177
|
+
"patMeta": "Connecté avec un jeton d'accès personnel",
|
|
5178
|
+
"confirmDisconnect": {
|
|
5179
|
+
"title": "Déconnecter {provider} ?",
|
|
5180
|
+
"body": "L'application perdra l'accès à vos dépôts jusqu'à la reconnexion."
|
|
5181
|
+
},
|
|
5182
|
+
"toast": {
|
|
5183
|
+
"disconnected": "{provider} déconnecté"
|
|
5184
|
+
}
|
|
5185
|
+
},
|
|
5186
|
+
"connect": {
|
|
5187
|
+
"or": "ou",
|
|
5188
|
+
"noneConfigured": "Aucune connexion de gestion de code n'est configurée pour ce déploiement. Demandez à un opérateur de configurer une GitHub App ou un accès GitLab.",
|
|
5189
|
+
"gitlab": {
|
|
5190
|
+
"intro": "Collez un jeton d'accès personnel GitLab pour connecter cet espace de travail. cat-factory l'utilise pour lister vos projets, pousser des branches et ouvrir des merge requests.",
|
|
5191
|
+
"tokenLabel": "Jeton d'accès personnel",
|
|
5192
|
+
"scope": "Nécessite la portée api",
|
|
5193
|
+
"createToken": "Créer un jeton sur GitLab",
|
|
5194
|
+
"submit": "Connecter GitLab",
|
|
5195
|
+
"toast": {
|
|
5196
|
+
"connected": "GitLab connecté"
|
|
5197
|
+
},
|
|
5198
|
+
"errors": {
|
|
5199
|
+
"connect": "Impossible de connecter GitLab"
|
|
5200
|
+
}
|
|
5201
|
+
}
|
|
5202
|
+
},
|
|
5203
|
+
"onboarding": {
|
|
5204
|
+
"title": "Connecter cat-factory à {provider}",
|
|
5205
|
+
"titleAny": "Connecter cat-factory à vos dépôts",
|
|
5206
|
+
"intro": "cat-factory fonctionne en ouvrant des pull requests sur vos dépôts. Connectez votre hébergeur de dépôts pour continuer."
|
|
5207
|
+
}
|
|
5150
5208
|
}
|
|
5151
5209
|
}
|