@cat-factory/app 0.116.4 → 0.116.5

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.
@@ -5,9 +5,10 @@ import en from '../../i18n/locales/en.json'
5
5
 
6
6
  /**
7
7
  * The i18n pilot: the pipeline-error toast resolves user-facing copy from
8
- * `errors.conflict.*` message KEYS by the backend's machine-readable `reason`, and only
9
- * ever shows raw backend prose as a last-resort description. These specs assert the KEYS
10
- * and params a code path resolves (never the English text), so they stay locale-agnostic.
8
+ * `errors.conflict.*` message KEYS by the backend's machine-readable `reason` both the
9
+ * title AND the description (G1) — and only ever shows raw backend prose as a last-resort
10
+ * description (an unmapped reason). These specs assert the KEYS and params a code path
11
+ * resolves (never the English text), so they stay locale-agnostic.
11
12
  */
12
13
 
13
14
  /** Dot-path lookup into the real `en.json`, so `te` mirrors which keys actually ship. */
@@ -21,15 +22,22 @@ function hasKey(path: string): boolean {
21
22
 
22
23
  let add: ReturnType<typeof vi.fn>
23
24
  let t: ReturnType<typeof vi.fn>
24
- let openAiProviderSetup: ReturnType<typeof vi.fn>
25
+ let ui: Record<string, ReturnType<typeof vi.fn>>
25
26
 
26
27
  beforeEach(() => {
27
28
  add = vi.fn()
28
29
  // `t` echoes the key so the toast's title/description IS the resolved key — assert on it.
29
30
  t = vi.fn((key: string) => key)
30
- openAiProviderSetup = vi.fn()
31
+ // The ui-store deep-links a jump action may navigate to (each echoed as a spy).
32
+ ui = {
33
+ openAiProviderSetup: vi.fn(),
34
+ openGitHub: vi.fn(),
35
+ openInfrastructure: vi.fn(),
36
+ openModelConfig: vi.fn(),
37
+ openProviderConnection: vi.fn(),
38
+ }
31
39
  vi.stubGlobal('useToast', () => ({ add }))
32
- vi.stubGlobal('useUiStore', () => ({ openAiProviderSetup }))
40
+ vi.stubGlobal('useUiStore', () => ui)
33
41
  vi.stubGlobal('useI18n', () => ({ t, te: (key: string) => hasKey(key) }))
34
42
  })
35
43
 
@@ -63,21 +71,50 @@ describe('usePipelineErrorToast', () => {
63
71
  expect(t).toHaveBeenCalledWith('errors.conflict.title.dependencies_unmet')
64
72
  })
65
73
 
66
- it('falls back to the caller fallback key when the reason has no dedicated title', () => {
67
- usePipelineErrorToast().present(conflict('totally_unknown_reason'), 'errors.action.retryFailed')
68
- expect(add.mock.calls[0]![0].title).toBe('errors.action.retryFailed')
74
+ it('resolves a mapped reason to its translated description key (G1), not the raw message', () => {
75
+ // A mapped reason now owns translated copy: the backend prose is NOT shown even when present.
76
+ usePipelineErrorToast().present(conflict('dependencies_unmet', {}, 'A depends on B'))
77
+ const arg = add.mock.calls[0]![0]
78
+ expect(arg.title).toBe('errors.conflict.title.dependencies_unmet')
79
+ expect(arg.description).toBe('errors.conflict.description.dependencies_unmet')
69
80
  })
70
81
 
71
- it('shows the raw backend message as the conflict description', () => {
72
- usePipelineErrorToast().present(conflict('dependencies_unmet', {}, 'A depends on B'))
73
- expect(add.mock.calls[0]![0].description).toBe('A depends on B')
82
+ it('falls back to the caller fallback key + raw message for an UNKNOWN reason', () => {
83
+ usePipelineErrorToast().present(
84
+ conflict('totally_unknown_reason', {}, 'raw detail'),
85
+ 'errors.action.retryFailed',
86
+ )
87
+ const arg = add.mock.calls[0]![0]
88
+ expect(arg.title).toBe('errors.action.retryFailed')
89
+ // Unmapped reason ⇒ raw backend prose is the last-resort description.
90
+ expect(arg.description).toBe('raw detail')
91
+ expect(arg.actions).toBeUndefined()
74
92
  })
75
93
 
76
- it('falls back to a translated description when the backend sends no message', () => {
77
- usePipelineErrorToast().present(conflict('dependencies_unmet'))
94
+ it('shows the fallback message for an unknown reason with no backend message', () => {
95
+ usePipelineErrorToast().present(conflict('totally_unknown_reason'))
78
96
  expect(add.mock.calls[0]![0].description).toBe('errors.conflict.fallbackMessage')
79
97
  })
80
98
 
99
+ it('offers a jump action for a reason with a UI remedy (github_not_connected → connect GitHub)', () => {
100
+ usePipelineErrorToast().present(conflict('github_not_connected'))
101
+ const arg = add.mock.calls[0]![0]
102
+ expect(arg.title).toBe('errors.conflict.title.github_not_connected')
103
+ expect(arg.description).toBe('errors.conflict.description.github_not_connected')
104
+ // Actionable toasts stay until dismissed so the one-click remedy is reachable.
105
+ expect(arg.duration).toBe(0)
106
+ expect(arg.actions[0].label).toBe('errors.conflict.action.connectGitHub')
107
+ arg.actions[0].onClick()
108
+ expect(ui.openGitHub).toHaveBeenCalledOnce()
109
+ })
110
+
111
+ it('leaves a reason without a UI remedy as a plain (auto-dismissing) toast', () => {
112
+ usePipelineErrorToast().present(conflict('dependencies_unmet'))
113
+ const arg = add.mock.calls[0]![0]
114
+ expect(arg.duration).toBeUndefined()
115
+ expect(arg.actions).toBeUndefined()
116
+ })
117
+
81
118
  it('interpolates the model list for providers_unconfigured and offers the AI setup jump', () => {
82
119
  usePipelineErrorToast().present(
83
120
  conflict('providers_unconfigured', { models: ['gpt-x', 'claude-y'] }),
@@ -88,7 +125,7 @@ describe('usePipelineErrorToast', () => {
88
125
  models: 'gpt-x, claude-y',
89
126
  })
90
127
  arg.actions[0].onClick()
91
- expect(openAiProviderSetup).toHaveBeenCalledOnce()
128
+ expect(ui.openAiProviderSetup).toHaveBeenCalledOnce()
92
129
  })
93
130
 
94
131
  it('uses the fallback title key + raw message for a non-conflict error', () => {
@@ -5,11 +5,12 @@
5
5
  * instead of dumping the raw message — and, for `providers_unconfigured`, surface the
6
6
  * SAME guidance + "Configure AI" jump as the no-AI-provider startup banner.
7
7
  *
8
- * i18n boundary (see CLAUDE.md / the i18n plan): user-facing titles are resolved from
9
- * `errors.conflict.*` message keys by the machine-readable `reason`. The raw backend
10
- * `message` is shown only as the description fallback and stays untranslated the
11
- * contract is "if a server message must be localizable, the backend emits a code and the
12
- * frontend maps it", not "translate arbitrary server prose on the client".
8
+ * i18n boundary (see CLAUDE.md / the i18n plan): user-facing title AND description are both
9
+ * resolved from `errors.conflict.*` message keys by the machine-readable `reason` (G1). The raw
10
+ * backend `message` is shown only as the last-resort description fallback (an unmapped reason, or a
11
+ * locale missing the key) and stays untranslated — the contract is "if a server message must be
12
+ * localizable, the backend emits a code and the frontend maps it", not "translate arbitrary server
13
+ * prose on the client".
13
14
  */
14
15
 
15
16
  import type { ConflictReason } from '@cat-factory/contracts'
@@ -22,16 +23,38 @@ interface ConflictDetails {
22
23
  [key: string]: unknown
23
24
  }
24
25
 
26
+ /** An optional one-click "jump to the panel that fixes it" affordance on a conflict toast. */
27
+ interface ConflictAction {
28
+ /** i18n message key for the button label (a static literal so tier-1 typed keys see it). */
29
+ labelKey: string
30
+ icon: string
31
+ /** Where the button navigates — a `ui` store deep-link; run with the store passed in. */
32
+ run: (ui: ReturnType<typeof useUiStore>) => void
33
+ }
34
+
35
+ /** Per-reason toast copy: a translated title + description, and optionally a jump action. */
36
+ interface ConflictInfo {
37
+ titleKey: string
38
+ descriptionKey: string
39
+ action?: ConflictAction
40
+ }
41
+
25
42
  /**
26
- * Per-reason toast title KEYS, keyed off the kernel/contracts `ConflictReason`. Being an
27
- * EXHAUSTIVE `Record` over the union is the real drift guard: a new backend conflict reason
28
- * fails THIS typecheck until it is mapped here. (The typed-message-keys feature can't see the
29
- * `t()` lookup because the key is resolved at runtime via this map, not written as a literal —
30
- * so the exhaustiveness of the map, not `t()`, is what makes a missing reason a build error.)
31
- * The reasons with BESPOKE handling below (a "configure X" action + their own key namespace) are
32
- * excluded, since none reaches this generic lookup: `providers_unconfigured`,
33
- * `binary_storage_unconfigured`, and the deployment-environment trio `provision_type_unhandled` /
34
- * `deployer_service_provisioning_incomplete` / `deployer_connection_test_failed`.
43
+ * Per-reason toast copy, keyed off the kernel/contracts `ConflictReason`. Being an EXHAUSTIVE
44
+ * `Record` over the union is the real drift guard: a new backend conflict reason fails THIS
45
+ * typecheck until it is mapped here (title + description). (The typed-message-keys feature can't
46
+ * see the `t()` lookup because the key is resolved at runtime via this map, not written as a
47
+ * literal — so the exhaustiveness of the map, not `t()`, is what makes a missing reason a build
48
+ * error.) The reasons with BESPOKE handling above (a runtime-interpolated body + a "configure X"
49
+ * action + their own key namespace) are excluded, since none reaches this generic lookup:
50
+ * `providers_unconfigured`, `binary_storage_unconfigured`, and the deployment-environment trio
51
+ * `provision_type_unhandled` / `deployer_service_provisioning_incomplete` /
52
+ * `deployer_connection_test_failed`.
53
+ *
54
+ * G1 (error-message coverage): before this, only a title was mapped and the description fell back
55
+ * to the raw, untranslated backend `message`. Every reason now carries a translated `description`
56
+ * (remedy prose), and the ones a UI panel can fix carry a `run` deep-link — the same shape as the
57
+ * bespoke conflicts above, but data-driven instead of one `if` per reason.
35
58
  */
36
59
  type BespokeConflictReason =
37
60
  | 'providers_unconfigured'
@@ -40,25 +63,109 @@ type BespokeConflictReason =
40
63
  | 'deployer_service_provisioning_incomplete'
41
64
  | 'deployer_connection_test_failed'
42
65
 
43
- const CONFLICT_TITLE_KEYS: Record<Exclude<ConflictReason, BespokeConflictReason>, string> = {
44
- dependencies_unmet: 'errors.conflict.title.dependencies_unmet',
45
- task_limit_reached: 'errors.conflict.title.task_limit_reached',
46
- tester_infra_unsupported: 'errors.conflict.title.tester_infra_unsupported',
47
- agent_backend_unconfigured: 'errors.conflict.title.agent_backend_unconfigured',
48
- run_not_retryable: 'errors.conflict.title.run_not_retryable',
49
- no_pr_to_merge: 'errors.conflict.title.no_pr_to_merge',
50
- github_not_connected: 'errors.conflict.title.github_not_connected',
51
- bootstrap_not_retryable: 'errors.conflict.title.bootstrap_not_retryable',
52
- bootstrap_reference_missing: 'errors.conflict.title.bootstrap_reference_missing',
53
- preset_unsatisfiable: 'errors.conflict.title.preset_unsatisfiable',
54
- visual_pipeline_no_frontend: 'errors.conflict.title.visual_pipeline_no_frontend',
55
- model_policy_blocked: 'errors.conflict.title.model_policy_blocked',
56
- model_policy_unsupported: 'errors.conflict.title.model_policy_unsupported',
57
- deployer_required_before_tester: 'errors.conflict.title.deployer_required_before_tester',
58
- env_test_not_a_frame: 'errors.conflict.title.env_test_not_a_frame',
59
- env_test_infraless: 'errors.conflict.title.env_test_infraless',
60
- env_test_not_provisionable: 'errors.conflict.title.env_test_not_provisionable',
61
- env_test_no_vcs: 'errors.conflict.title.env_test_no_vcs',
66
+ const CONFLICT_INFO: Record<Exclude<ConflictReason, BespokeConflictReason>, ConflictInfo> = {
67
+ dependencies_unmet: {
68
+ titleKey: 'errors.conflict.title.dependencies_unmet',
69
+ descriptionKey: 'errors.conflict.description.dependencies_unmet',
70
+ },
71
+ task_limit_reached: {
72
+ titleKey: 'errors.conflict.title.task_limit_reached',
73
+ descriptionKey: 'errors.conflict.description.task_limit_reached',
74
+ },
75
+ tester_infra_unsupported: {
76
+ titleKey: 'errors.conflict.title.tester_infra_unsupported',
77
+ descriptionKey: 'errors.conflict.description.tester_infra_unsupported',
78
+ },
79
+ agent_backend_unconfigured: {
80
+ titleKey: 'errors.conflict.title.agent_backend_unconfigured',
81
+ descriptionKey: 'errors.conflict.description.agent_backend_unconfigured',
82
+ action: {
83
+ labelKey: 'errors.conflict.action.configureRunnerPool',
84
+ icon: 'i-lucide-server',
85
+ run: (ui) => ui.openInfrastructure('runner-pool'),
86
+ },
87
+ },
88
+ run_not_retryable: {
89
+ titleKey: 'errors.conflict.title.run_not_retryable',
90
+ descriptionKey: 'errors.conflict.description.run_not_retryable',
91
+ },
92
+ no_pr_to_merge: {
93
+ titleKey: 'errors.conflict.title.no_pr_to_merge',
94
+ descriptionKey: 'errors.conflict.description.no_pr_to_merge',
95
+ },
96
+ github_not_connected: {
97
+ titleKey: 'errors.conflict.title.github_not_connected',
98
+ descriptionKey: 'errors.conflict.description.github_not_connected',
99
+ action: {
100
+ labelKey: 'errors.conflict.action.connectGitHub',
101
+ icon: 'i-lucide-github',
102
+ run: (ui) => ui.openGitHub(),
103
+ },
104
+ },
105
+ bootstrap_not_retryable: {
106
+ titleKey: 'errors.conflict.title.bootstrap_not_retryable',
107
+ descriptionKey: 'errors.conflict.description.bootstrap_not_retryable',
108
+ },
109
+ bootstrap_reference_missing: {
110
+ titleKey: 'errors.conflict.title.bootstrap_reference_missing',
111
+ descriptionKey: 'errors.conflict.description.bootstrap_reference_missing',
112
+ },
113
+ preset_unsatisfiable: {
114
+ titleKey: 'errors.conflict.title.preset_unsatisfiable',
115
+ descriptionKey: 'errors.conflict.description.preset_unsatisfiable',
116
+ action: {
117
+ labelKey: 'errors.conflict.action.chooseModel',
118
+ icon: 'i-lucide-cpu',
119
+ run: (ui) => ui.openModelConfig(),
120
+ },
121
+ },
122
+ visual_pipeline_no_frontend: {
123
+ titleKey: 'errors.conflict.title.visual_pipeline_no_frontend',
124
+ descriptionKey: 'errors.conflict.description.visual_pipeline_no_frontend',
125
+ },
126
+ model_policy_blocked: {
127
+ titleKey: 'errors.conflict.title.model_policy_blocked',
128
+ descriptionKey: 'errors.conflict.description.model_policy_blocked',
129
+ action: {
130
+ labelKey: 'errors.conflict.action.chooseModel',
131
+ icon: 'i-lucide-cpu',
132
+ run: (ui) => ui.openModelConfig(),
133
+ },
134
+ },
135
+ model_policy_unsupported: {
136
+ titleKey: 'errors.conflict.title.model_policy_unsupported',
137
+ descriptionKey: 'errors.conflict.description.model_policy_unsupported',
138
+ },
139
+ deployer_required_before_tester: {
140
+ titleKey: 'errors.conflict.title.deployer_required_before_tester',
141
+ descriptionKey: 'errors.conflict.description.deployer_required_before_tester',
142
+ },
143
+ env_test_not_a_frame: {
144
+ titleKey: 'errors.conflict.title.env_test_not_a_frame',
145
+ descriptionKey: 'errors.conflict.description.env_test_not_a_frame',
146
+ },
147
+ env_test_infraless: {
148
+ titleKey: 'errors.conflict.title.env_test_infraless',
149
+ descriptionKey: 'errors.conflict.description.env_test_infraless',
150
+ },
151
+ env_test_not_provisionable: {
152
+ titleKey: 'errors.conflict.title.env_test_not_provisionable',
153
+ descriptionKey: 'errors.conflict.description.env_test_not_provisionable',
154
+ action: {
155
+ labelKey: 'errors.conflict.action.configureInfrastructure',
156
+ icon: 'i-lucide-settings',
157
+ run: (ui) => ui.openProviderConnection('environment'),
158
+ },
159
+ },
160
+ env_test_no_vcs: {
161
+ titleKey: 'errors.conflict.title.env_test_no_vcs',
162
+ descriptionKey: 'errors.conflict.description.env_test_no_vcs',
163
+ action: {
164
+ labelKey: 'errors.conflict.action.connectGitHub',
165
+ icon: 'i-lucide-github',
166
+ run: (ui) => ui.openGitHub(),
167
+ },
168
+ },
62
169
  }
63
170
 
64
171
  /**
@@ -234,13 +341,41 @@ export function usePipelineErrorToast() {
234
341
  }
235
342
 
236
343
  if (conflict) {
237
- // Per-reason title key from the exhaustive map; fall back to the caller's title key when
238
- // this reason has no mapped/translated copy (`te` = translation-exists, so a key missing
239
- // in the active locale never leaks as raw text). An unknown reason isn't in the map.
240
- const reasonKey =
241
- CONFLICT_TITLE_KEYS[conflict.reason as Exclude<ConflictReason, BespokeConflictReason>]
344
+ // Per-reason copy from the exhaustive map: a translated title + description, and a jump
345
+ // action for the reasons a UI panel can fix. `te` (translation-exists) guards every lookup,
346
+ // so a key missing from the active locale falls back rather than leaking a raw key: the
347
+ // title falls to the caller's key, the description to the raw backend `message`. An unknown
348
+ // reason (not in the map) gets the same generic title + raw-message fallback.
349
+ const info = conflict.reason
350
+ ? CONFLICT_INFO[conflict.reason as Exclude<ConflictReason, BespokeConflictReason>]
351
+ : undefined
352
+ if (info) {
353
+ toast.add({
354
+ title: te(info.titleKey) ? t(info.titleKey) : t(fallbackTitleKey),
355
+ description: te(info.descriptionKey)
356
+ ? t(info.descriptionKey)
357
+ : (conflict.message ?? t('errors.conflict.fallbackMessage')),
358
+ color: 'warning',
359
+ icon: 'i-lucide-triangle-alert',
360
+ // A reason with a jump action becomes an actionable, sticky toast (like the bespoke
361
+ // conflicts above) so the one-click remedy doesn't auto-dismiss before it's reached.
362
+ ...(info.action
363
+ ? {
364
+ duration: 0,
365
+ actions: [
366
+ {
367
+ label: t(info.action.labelKey),
368
+ icon: info.action.icon,
369
+ onClick: () => info.action?.run(ui),
370
+ },
371
+ ],
372
+ }
373
+ : {}),
374
+ })
375
+ return
376
+ }
242
377
  toast.add({
243
- title: reasonKey && te(reasonKey) ? t(reasonKey) : t(fallbackTitleKey),
378
+ title: t(fallbackTitleKey),
244
379
  description: conflict.message ?? t('errors.conflict.fallbackMessage'),
245
380
  color: 'warning',
246
381
  icon: 'i-lucide-triangle-alert',
@@ -3815,6 +3815,32 @@
3815
3815
  "env_test_not_provisionable": "Umgebungs-Handler nicht konfiguriert",
3816
3816
  "env_test_no_vcs": "Git-Anbieter nicht verbunden"
3817
3817
  },
3818
+ "description": {
3819
+ "dependencies_unmet": "Diese Aufgabe hängt von anderen ab, die noch nicht abgeschlossen sind. Schließe sie ab oder gib sie frei und starte dann erneut.",
3820
+ "task_limit_reached": "Es laufen zu viele Ausführungen gleichzeitig. Warte, bis eine abgeschlossen ist, und starte dann erneut.",
3821
+ "tester_infra_unsupported": "Der Tester-Schritt kann hier nicht laufen: Für diesen Service ist keine Testinfrastruktur konfiguriert, oder die Laufzeitumgebung dieses Deployments kann sie nicht ausführen. Konfiguriere eine Testinfrastruktur oder verwende einen Service, der keine benötigt.",
3822
+ "agent_backend_unconfigured": "Es ist kein Runner-Backend verfügbar, um Container-Agenten auszuführen. Registriere einen selbst gehosteten Runner-Pool oder aktiviere Cloudflare Containers in deinem Deployment.",
3823
+ "run_not_retryable": "Nur eine fehlgeschlagene oder abgeschlossene Ausführung kann wiederholt werden. Diese Ausführung ist noch aktiv oder in einem Zustand, der keine Wiederholung erlaubt.",
3824
+ "no_pr_to_merge": "Diese Ausführung hat noch keinen Pull Request geöffnet, es gibt also nichts zu mergen.",
3825
+ "github_not_connected": "Verbinde diesen Workspace mit GitHub, damit Agenten das Repository klonen, Änderungen pushen und Pull Requests öffnen können.",
3826
+ "bootstrap_not_retryable": "Dieser Bootstrap-Auftrag kann in seinem aktuellen Zustand nicht wiederholt werden (er läuft noch oder wurde bereits erfolgreich abgeschlossen).",
3827
+ "bootstrap_reference_missing": "Das Referenz-Repository, das dieser Bootstrap übernimmt, ist nicht mehr erreichbar. Es wurde gelöscht oder der Zugriff wurde entzogen. Wähle eine andere Referenz oder erstelle von Grund auf neu.",
3828
+ "preset_unsatisfiable": "Das Modell eines Inline-Schritts kann in diesem Deployment nicht inline laufen (ein reines Abo-Modell ohne Inline-Unterstützung). Wähle ein inline-fähiges Modell oder Preset.",
3829
+ "visual_pipeline_no_frontend": "Diese Pipeline enthält visuelle Testschritte, aber das Ziel hat keine Benutzeroberfläche zum Testen (kein Frontend, und nichts verweist auf eines).",
3830
+ "model_policy_blocked": "Die Familie dieses Modells ist durch die Modellrichtlinie deines Kontos blockiert. Wähle ein zulässiges Modell oder eine zulässige Familie.",
3831
+ "model_policy_unsupported": "Modellfamilien-Richtlinien sind eine Funktion nur für gehostete Umgebungen, und dieses Deployment unterstützt ihre Einstellung nicht.",
3832
+ "deployer_required_before_tester": "Dieser Service benötigt eine bereitgestellte Umgebung, bevor ein Tester-, manueller Test- oder Playwright-Schritt laufen kann, aber davor steht kein Deployer. Füge der Pipeline einen Deployer-Schritt hinzu.",
3833
+ "env_test_not_a_frame": "Der Umgebungs-Selbsttest läuft pro Service und kann daher nur für einen Service gestartet werden, nicht für ein Modul oder eine Aufgabe.",
3834
+ "env_test_infraless": "Für diesen Service ist keine Bereitstellung einer kurzlebigen Umgebung konfiguriert, es gibt also nichts, was der Selbsttest prüfen könnte.",
3835
+ "env_test_not_provisionable": "Dieser Service hat einen Bereitstellungstyp, aber es ist noch kein Workspace-Handler dafür verfügbar, sodass die Bereitstellung nicht laufen kann. Konfiguriere einen Umgebungs-Handler.",
3836
+ "env_test_no_vcs": "Der Selbsttest benötigt einen Git-Anbieter, um seinen Wegwerf-Branch zu erstellen und zu löschen, aber dieser Workspace ist mit keinem verbunden."
3837
+ },
3838
+ "action": {
3839
+ "connectGitHub": "GitHub verbinden",
3840
+ "configureRunnerPool": "Runner-Pool konfigurieren",
3841
+ "chooseModel": "Modell auswählen",
3842
+ "configureInfrastructure": "Infrastruktur konfigurieren"
3843
+ },
3818
3844
  "fallbackMessage": "Diese Aktion steht im Konflikt mit dem aktuellen Zustand.",
3819
3845
  "providersUnconfigured": {
3820
3846
  "title": "Kein KI-Anbieter für dieses Modell",
@@ -481,6 +481,32 @@
481
481
  "env_test_not_provisionable": "Environment handler not configured",
482
482
  "env_test_no_vcs": "Git provider not connected"
483
483
  },
484
+ "description": {
485
+ "dependencies_unmet": "This task depends on others that aren't finished yet. Complete or unblock them, then start it again.",
486
+ "task_limit_reached": "Too many runs are active at once. Wait for one to finish, then start this again.",
487
+ "tester_infra_unsupported": "The Tester step can't run here: this service has no test infrastructure configured, or this deployment's runtime can't run it. Configure test infrastructure or use a service that doesn't need it.",
488
+ "agent_backend_unconfigured": "No runner backend is available to run container agents. Register a self-hosted runner pool, or enable Cloudflare Containers in your deployment.",
489
+ "run_not_retryable": "Only a failed or finished run can be retried. This run is still active or in a state that can't be retried.",
490
+ "no_pr_to_merge": "This run hasn't opened a pull request yet, so there is nothing to merge.",
491
+ "github_not_connected": "Connect this workspace to GitHub so agents can clone the repository, push changes, and open pull requests.",
492
+ "bootstrap_not_retryable": "This bootstrap job can't be retried in its current state (it is still running or already finished successfully).",
493
+ "bootstrap_reference_missing": "The reference repository this bootstrap adapts is no longer reachable. It was deleted or its access was revoked. Pick another reference, or scaffold from scratch.",
494
+ "preset_unsatisfiable": "An inline step's model can't run inline on this deployment (a subscription-only model with no inline support). Pick an inline-capable model or preset.",
495
+ "visual_pipeline_no_frontend": "This pipeline has visual test steps, but the target has no user interface to exercise (no frontend, and nothing links to one).",
496
+ "model_policy_blocked": "This model's family is blocked by your account's model policy. Pick an allowed model or family.",
497
+ "model_policy_unsupported": "Model-family policies are a hosted-only control, and this deployment doesn't support setting them.",
498
+ "deployer_required_before_tester": "This service needs an environment provisioned before a Tester, human-test, or Playwright step can run, but no Deployer comes before it. Add a Deployer step to the pipeline.",
499
+ "env_test_not_a_frame": "The environment self-test runs per service, so it can only be started on a service, not on a module or task.",
500
+ "env_test_infraless": "This service has no ephemeral-environment provisioning configured, so there is nothing for the self-test to exercise.",
501
+ "env_test_not_provisionable": "This service has a provision type, but no workspace handler resolves for it yet, so provisioning can't run. Configure an environment handler.",
502
+ "env_test_no_vcs": "The self-test needs a git provider to create and delete its throwaway branch, but this workspace isn't connected to one."
503
+ },
504
+ "action": {
505
+ "connectGitHub": "Connect GitHub",
506
+ "configureRunnerPool": "Configure runner pool",
507
+ "chooseModel": "Choose a model",
508
+ "configureInfrastructure": "Configure infrastructure"
509
+ },
484
510
  "fallbackMessage": "This action conflicts with the current state.",
485
511
  "providersUnconfigured": {
486
512
  "title": "No AI provider for this model",
@@ -442,6 +442,32 @@
442
442
  "env_test_not_provisionable": "Gestor de entorno no configurado",
443
443
  "env_test_no_vcs": "Proveedor de Git no conectado"
444
444
  },
445
+ "description": {
446
+ "dependencies_unmet": "Esta tarea depende de otras que aún no están terminadas. Complétalas o desbloquéalas y vuelve a iniciarla.",
447
+ "task_limit_reached": "Hay demasiadas ejecuciones activas a la vez. Espera a que termine una y vuelve a iniciar esta.",
448
+ "tester_infra_unsupported": "El paso Tester no puede ejecutarse aquí: este servicio no tiene infraestructura de pruebas configurada, o el entorno de ejecución de este despliegue no puede ejecutarla. Configura una infraestructura de pruebas o usa un servicio que no la necesite.",
449
+ "agent_backend_unconfigured": "No hay ningún backend de runner disponible para ejecutar agentes en contenedores. Registra un pool de runners autoalojado o habilita Cloudflare Containers en tu despliegue.",
450
+ "run_not_retryable": "Solo se puede reintentar una ejecución fallida o finalizada. Esta ejecución sigue activa o está en un estado que no admite reintentos.",
451
+ "no_pr_to_merge": "Esta ejecución aún no ha abierto una pull request, así que no hay nada que fusionar.",
452
+ "github_not_connected": "Conecta este espacio de trabajo con GitHub para que los agentes puedan clonar el repositorio, enviar cambios y abrir pull requests.",
453
+ "bootstrap_not_retryable": "Este trabajo de arranque no puede reintentarse en su estado actual (todavía se está ejecutando o ya finalizó correctamente).",
454
+ "bootstrap_reference_missing": "El repositorio de referencia que adapta este arranque ya no es accesible. Se eliminó o se revocó su acceso. Elige otra referencia o crea desde cero.",
455
+ "preset_unsatisfiable": "El modelo de un paso en línea no puede ejecutarse en línea en este despliegue (un modelo solo por suscripción sin soporte en línea). Elige un modelo o preset compatible con la ejecución en línea.",
456
+ "visual_pipeline_no_frontend": "Esta canalización tiene pasos de prueba visual, pero el objetivo no tiene interfaz de usuario que probar (no hay frontend, y nada enlaza a uno).",
457
+ "model_policy_blocked": "La familia de este modelo está bloqueada por la política de modelos de tu cuenta. Elige un modelo o una familia permitidos.",
458
+ "model_policy_unsupported": "Las políticas de familia de modelos son un control solo para entornos alojados, y este despliegue no admite configurarlas.",
459
+ "deployer_required_before_tester": "Este servicio necesita un entorno aprovisionado antes de que pueda ejecutarse un paso de Tester, prueba manual o Playwright, pero no hay ningún Deployer antes. Añade un paso Deployer a la canalización.",
460
+ "env_test_not_a_frame": "La autoprueba de entorno se ejecuta por servicio, así que solo puede iniciarse en un servicio, no en un módulo o una tarea.",
461
+ "env_test_infraless": "Este servicio no tiene configurado el aprovisionamiento de entornos efímeros, así que no hay nada que la autoprueba pueda comprobar.",
462
+ "env_test_not_provisionable": "Este servicio tiene un tipo de aprovisionamiento, pero aún no hay ningún gestor del espacio de trabajo para él, así que el aprovisionamiento no puede ejecutarse. Configura un gestor de entornos.",
463
+ "env_test_no_vcs": "La autoprueba necesita un proveedor de Git para crear y eliminar su rama desechable, pero este espacio de trabajo no está conectado a ninguno."
464
+ },
465
+ "action": {
466
+ "connectGitHub": "Conectar GitHub",
467
+ "configureRunnerPool": "Configurar pool de runners",
468
+ "chooseModel": "Elegir un modelo",
469
+ "configureInfrastructure": "Configurar infraestructura"
470
+ },
445
471
  "fallbackMessage": "Esta acción entra en conflicto con el estado actual.",
446
472
  "providersUnconfigured": {
447
473
  "title": "No hay proveedor de IA para este modelo",
@@ -442,6 +442,32 @@
442
442
  "env_test_not_provisionable": "Gestionnaire d'environnement non configuré",
443
443
  "env_test_no_vcs": "Fournisseur Git non connecté"
444
444
  },
445
+ "description": {
446
+ "dependencies_unmet": "Cette tâche dépend d'autres qui ne sont pas encore terminées. Terminez-les ou débloquez-les, puis relancez-la.",
447
+ "task_limit_reached": "Trop d'exécutions sont actives en même temps. Attendez qu'une se termine, puis relancez celle-ci.",
448
+ "tester_infra_unsupported": "L'étape Tester ne peut pas s'exécuter ici : ce service n'a pas d'infrastructure de test configurée, ou l'environnement d'exécution de ce déploiement ne peut pas l'exécuter. Configurez une infrastructure de test ou utilisez un service qui n'en a pas besoin.",
449
+ "agent_backend_unconfigured": "Aucun backend de runner n'est disponible pour exécuter des agents en conteneur. Enregistrez un pool de runners auto-hébergé ou activez Cloudflare Containers dans votre déploiement.",
450
+ "run_not_retryable": "Seule une exécution en échec ou terminée peut être relancée. Cette exécution est encore active ou dans un état qui n'autorise pas de nouvelle tentative.",
451
+ "no_pr_to_merge": "Cette exécution n'a pas encore ouvert de pull request, il n'y a donc rien à fusionner.",
452
+ "github_not_connected": "Connectez cet espace de travail à GitHub pour que les agents puissent cloner le dépôt, pousser des modifications et ouvrir des pull requests.",
453
+ "bootstrap_not_retryable": "Cette tâche d'amorçage ne peut pas être relancée dans son état actuel (elle est encore en cours ou déjà terminée avec succès).",
454
+ "bootstrap_reference_missing": "Le dépôt de référence que cet amorçage adapte n'est plus accessible. Il a été supprimé ou son accès a été révoqué. Choisissez une autre référence ou partez de zéro.",
455
+ "preset_unsatisfiable": "Le modèle d'une étape en ligne ne peut pas s'exécuter en ligne dans ce déploiement (un modèle par abonnement uniquement, sans prise en charge en ligne). Choisissez un modèle ou un preset compatible avec l'exécution en ligne.",
456
+ "visual_pipeline_no_frontend": "Ce pipeline comporte des étapes de test visuel, mais la cible n'a pas d'interface utilisateur à tester (pas de frontend, et rien n'y renvoie).",
457
+ "model_policy_blocked": "La famille de ce modèle est bloquée par la politique de modèles de votre compte. Choisissez un modèle ou une famille autorisés.",
458
+ "model_policy_unsupported": "Les politiques de famille de modèles sont un contrôle réservé aux environnements hébergés, et ce déploiement ne permet pas de les définir.",
459
+ "deployer_required_before_tester": "Ce service a besoin d'un environnement provisionné avant qu'une étape Tester, de test manuel ou Playwright puisse s'exécuter, mais aucun Deployer ne la précède. Ajoutez une étape Deployer au pipeline.",
460
+ "env_test_not_a_frame": "L'auto-test d'environnement s'exécute par service, il ne peut donc être lancé que sur un service, pas sur un module ou une tâche.",
461
+ "env_test_infraless": "Ce service n'a aucun provisionnement d'environnement éphémère configuré, il n'y a donc rien que l'auto-test puisse exercer.",
462
+ "env_test_not_provisionable": "Ce service a un type de provisionnement, mais aucun gestionnaire de l'espace de travail ne s'y applique encore, le provisionnement ne peut donc pas s'exécuter. Configurez un gestionnaire d'environnement.",
463
+ "env_test_no_vcs": "L'auto-test a besoin d'un fournisseur Git pour créer et supprimer sa branche jetable, mais cet espace de travail n'est connecté à aucun."
464
+ },
465
+ "action": {
466
+ "connectGitHub": "Connecter GitHub",
467
+ "configureRunnerPool": "Configurer le pool de runners",
468
+ "chooseModel": "Choisir un modèle",
469
+ "configureInfrastructure": "Configurer l'infrastructure"
470
+ },
445
471
  "fallbackMessage": "Cette action est en conflit avec l’état actuel.",
446
472
  "providersUnconfigured": {
447
473
  "title": "Aucun fournisseur d’IA pour ce modèle",
@@ -442,6 +442,32 @@
442
442
  "env_test_not_provisionable": "מטפל הסביבה אינו מוגדר",
443
443
  "env_test_no_vcs": "ספק Git אינו מחובר"
444
444
  },
445
+ "description": {
446
+ "dependencies_unmet": "משימה זו תלויה במשימות אחרות שטרם הושלמו. השלם או שחרר אותן, ולאחר מכן הפעל אותה שוב.",
447
+ "task_limit_reached": "יותר מדי הרצות פעילות בו-זמנית. המתן שאחת תסתיים, ולאחר מכן הפעל שוב.",
448
+ "tester_infra_unsupported": "שלב ה-Tester לא יכול לרוץ כאן: לשירות זה לא מוגדרת תשתית בדיקות, או שסביבת ההרצה של פריסה זו אינה יכולה להריץ אותה. הגדר תשתית בדיקות או השתמש בשירות שאינו זקוק לה.",
449
+ "agent_backend_unconfigured": "אין קצה עורפי של runner זמין להרצת סוכני קונטיינרים. רשום מאגר runner באירוח עצמי, או הפעל את Cloudflare Containers בפריסה שלך.",
450
+ "run_not_retryable": "אפשר לנסות שוב רק הרצה שנכשלה או הסתיימה. הרצה זו עדיין פעילה או במצב שאינו מאפשר ניסיון חוזר.",
451
+ "no_pr_to_merge": "הרצה זו עדיין לא פתחה pull request, ולכן אין מה למזג.",
452
+ "github_not_connected": "חבר סביבת עבודה זו ל-GitHub כדי שהסוכנים יוכלו לשכפל את המאגר, לדחוף שינויים ולפתוח pull requests.",
453
+ "bootstrap_not_retryable": "לא ניתן לנסות שוב את משימת האתחול הזו במצבה הנוכחי (היא עדיין רצה או שכבר הסתיימה בהצלחה).",
454
+ "bootstrap_reference_missing": "מאגר הייחוס שאתחול זה מתאים כבר אינו נגיש. הוא נמחק או שהגישה אליו בוטלה. בחר ייחוס אחר או צור מאפס.",
455
+ "preset_unsatisfiable": "המודל של שלב מוטבע אינו יכול לרוץ מוטבע בפריסה זו (מודל למנוי בלבד ללא תמיכה מוטבעת). בחר מודל או הגדרה מראש שתומכים בהרצה מוטבעת.",
456
+ "visual_pipeline_no_frontend": "לצינור זה יש שלבי בדיקה חזותית, אך ליעד אין ממשק משתמש לבדיקה (אין frontend, ושום דבר אינו מקושר אליו).",
457
+ "model_policy_blocked": "משפחת המודל הזה חסומה על ידי מדיניות המודלים של החשבון שלך. בחר מודל או משפחה מותרים.",
458
+ "model_policy_unsupported": "מדיניות משפחות מודלים היא פקד לסביבות מתארחות בלבד, ופריסה זו אינה תומכת בהגדרתה.",
459
+ "deployer_required_before_tester": "שירות זה זקוק לסביבה מוקצית לפני שניתן להריץ שלב Tester, בדיקה ידנית או Playwright, אך אין Deployer לפניו. הוסף שלב Deployer לצינור.",
460
+ "env_test_not_a_frame": "הבדיקה העצמית של הסביבה רצה לכל שירות בנפרד, ולכן ניתן להתחיל אותה רק על שירות, לא על מודול או משימה.",
461
+ "env_test_infraless": "לשירות זה לא מוגדרת הקצאת סביבה זמנית, ולכן אין מה שהבדיקה העצמית תבדוק.",
462
+ "env_test_not_provisionable": "לשירות זה יש סוג הקצאה, אך עדיין אין עבורו מטפל בסביבת העבודה, ולכן ההקצאה אינה יכולה לרוץ. הגדר מטפל סביבה.",
463
+ "env_test_no_vcs": "הבדיקה העצמית זקוקה לספק Git כדי ליצור ולמחוק את הענף החד-פעמי שלה, אך סביבת עבודה זו אינה מחוברת לאף אחד."
464
+ },
465
+ "action": {
466
+ "connectGitHub": "חבר את GitHub",
467
+ "configureRunnerPool": "הגדר מאגר runner",
468
+ "chooseModel": "בחר מודל",
469
+ "configureInfrastructure": "הגדר תשתית"
470
+ },
445
471
  "fallbackMessage": "פעולה זו מתנגשת עם המצב הנוכחי.",
446
472
  "providersUnconfigured": {
447
473
  "title": "אין ספק AI למודל זה",
@@ -3815,6 +3815,32 @@
3815
3815
  "env_test_not_provisionable": "Handler dell'ambiente non configurato",
3816
3816
  "env_test_no_vcs": "Provider Git non connesso"
3817
3817
  },
3818
+ "description": {
3819
+ "dependencies_unmet": "Questa attività dipende da altre non ancora completate. Completale o sbloccale, poi avviala di nuovo.",
3820
+ "task_limit_reached": "Ci sono troppe esecuzioni attive contemporaneamente. Attendi che una finisca, poi riavvia questa.",
3821
+ "tester_infra_unsupported": "Il passaggio Tester non può essere eseguito qui: questo servizio non ha un'infrastruttura di test configurata, oppure il runtime di questo deployment non può eseguirla. Configura un'infrastruttura di test o usa un servizio che non ne ha bisogno.",
3822
+ "agent_backend_unconfigured": "Nessun backend runner disponibile per eseguire gli agenti in container. Registra un pool di runner self-hosted oppure abilita Cloudflare Containers nel tuo deployment.",
3823
+ "run_not_retryable": "Solo un'esecuzione fallita o conclusa può essere ripetuta. Questa esecuzione è ancora attiva o in uno stato che non consente il nuovo tentativo.",
3824
+ "no_pr_to_merge": "Questa esecuzione non ha ancora aperto una pull request, quindi non c'è nulla da unire.",
3825
+ "github_not_connected": "Collega questo workspace a GitHub così gli agenti possono clonare il repository, inviare modifiche e aprire pull request.",
3826
+ "bootstrap_not_retryable": "Questo job di bootstrap non può essere ripetuto nello stato attuale (è ancora in esecuzione o già concluso con successo).",
3827
+ "bootstrap_reference_missing": "Il repository di riferimento adattato da questo bootstrap non è più raggiungibile. È stato eliminato o l'accesso è stato revocato. Scegli un altro riferimento oppure crea da zero.",
3828
+ "preset_unsatisfiable": "Il modello di un passaggio inline non può essere eseguito inline in questo deployment (un modello solo in abbonamento senza supporto inline). Scegli un modello o un preset compatibile con l'esecuzione inline.",
3829
+ "visual_pipeline_no_frontend": "Questa pipeline ha passaggi di test visivo, ma la destinazione non ha un'interfaccia utente da testare (nessun frontend e nulla che ne colleghi uno).",
3830
+ "model_policy_blocked": "La famiglia di questo modello è bloccata dalla policy dei modelli del tuo account. Scegli un modello o una famiglia consentiti.",
3831
+ "model_policy_unsupported": "Le policy sulle famiglie di modelli sono un controllo solo per ambienti ospitati, e questo deployment non ne consente l'impostazione.",
3832
+ "deployer_required_before_tester": "Questo servizio ha bisogno di un ambiente predisposto prima che un passaggio Tester, test manuale o Playwright possa essere eseguito, ma non c'è alcun Deployer prima. Aggiungi un passaggio Deployer alla pipeline.",
3833
+ "env_test_not_a_frame": "L'autotest dell'ambiente viene eseguito per servizio, quindi può essere avviato solo su un servizio, non su un modulo o un'attività.",
3834
+ "env_test_infraless": "Questo servizio non ha alcun provisioning di ambiente effimero configurato, quindi non c'è nulla che l'autotest possa verificare.",
3835
+ "env_test_not_provisionable": "Questo servizio ha un tipo di provisioning, ma non è ancora disponibile alcun handler del workspace, quindi il provisioning non può essere eseguito. Configura un handler dell'ambiente.",
3836
+ "env_test_no_vcs": "L'autotest ha bisogno di un provider Git per creare ed eliminare il suo branch usa e getta, ma questo workspace non è collegato a nessuno."
3837
+ },
3838
+ "action": {
3839
+ "connectGitHub": "Collega GitHub",
3840
+ "configureRunnerPool": "Configura pool di runner",
3841
+ "chooseModel": "Scegli un modello",
3842
+ "configureInfrastructure": "Configura infrastruttura"
3843
+ },
3818
3844
  "fallbackMessage": "Questa azione è in conflitto con lo stato attuale.",
3819
3845
  "providersUnconfigured": {
3820
3846
  "title": "Nessun provider AI per questo modello",
@@ -442,6 +442,32 @@
442
442
  "env_test_not_provisionable": "環境ハンドラーが設定されていません",
443
443
  "env_test_no_vcs": "Git プロバイダーが未接続です"
444
444
  },
445
+ "description": {
446
+ "dependencies_unmet": "このタスクは、まだ完了していない他のタスクに依存しています。それらを完了または解除してから、もう一度開始してください。",
447
+ "task_limit_reached": "同時に実行中の処理が多すぎます。1つが完了するのを待ってから、もう一度開始してください。",
448
+ "tester_infra_unsupported": "Tester ステップをここでは実行できません。このサービスにはテストインフラが設定されていないか、このデプロイのランタイムがそれを実行できません。テストインフラを設定するか、それを必要としないサービスを使用してください。",
449
+ "agent_backend_unconfigured": "コンテナエージェントを実行できるランナーバックエンドがありません。セルフホストのランナープールを登録するか、デプロイで Cloudflare Containers を有効にしてください。",
450
+ "run_not_retryable": "再試行できるのは失敗または完了した実行のみです。この実行はまだ実行中か、再試行できない状態です。",
451
+ "no_pr_to_merge": "この実行はまだプルリクエストを開いていないため、マージするものがありません。",
452
+ "github_not_connected": "エージェントがリポジトリのクローン、変更のプッシュ、プルリクエストのオープンを行えるように、このワークスペースを GitHub に接続してください。",
453
+ "bootstrap_not_retryable": "このブートストラップジョブは現在の状態では再試行できません(まだ実行中か、すでに正常に完了しています)。",
454
+ "bootstrap_reference_missing": "このブートストラップが利用する参照リポジトリにアクセスできなくなりました。削除されたか、アクセス権が取り消されています。別の参照を選択するか、最初から作成してください。",
455
+ "preset_unsatisfiable": "インラインステップのモデルは、このデプロイではインラインで実行できません(インライン非対応のサブスクリプション専用モデル)。インライン対応のモデルまたはプリセットを選択してください。",
456
+ "visual_pipeline_no_frontend": "このパイプラインにはビジュアルテストのステップがありますが、対象に検証するユーザーインターフェイスがありません(フロントエンドがなく、リンクもされていません)。",
457
+ "model_policy_blocked": "このモデルのファミリーは、アカウントのモデルポリシーによってブロックされています。許可されたモデルまたはファミリーを選択してください。",
458
+ "model_policy_unsupported": "モデルファミリーポリシーはホスト環境専用の設定であり、このデプロイでは設定できません。",
459
+ "deployer_required_before_tester": "このサービスは、Tester、手動テスト、または Playwright のステップを実行する前にプロビジョニングされた環境を必要としますが、その前に Deployer がありません。パイプラインに Deployer ステップを追加してください。",
460
+ "env_test_not_a_frame": "環境のセルフテストはサービスごとに実行されるため、モジュールやタスクではなくサービスでのみ開始できます。",
461
+ "env_test_infraless": "このサービスには一時環境のプロビジョニングが設定されていないため、セルフテストで検証するものがありません。",
462
+ "env_test_not_provisionable": "このサービスにはプロビジョニングタイプがありますが、対応するワークスペースハンドラーがまだ解決されないため、プロビジョニングを実行できません。環境ハンドラーを設定してください。",
463
+ "env_test_no_vcs": "セルフテストは使い捨てブランチの作成と削除のために Git プロバイダーを必要としますが、このワークスペースはいずれにも接続されていません。"
464
+ },
465
+ "action": {
466
+ "connectGitHub": "GitHub に接続",
467
+ "configureRunnerPool": "ランナープールを設定",
468
+ "chooseModel": "モデルを選択",
469
+ "configureInfrastructure": "インフラを設定"
470
+ },
445
471
  "fallbackMessage": "この操作は現在の状態と競合します。",
446
472
  "providersUnconfigured": {
447
473
  "title": "このモデルに対応する AI プロバイダーがありません",
@@ -442,6 +442,32 @@
442
442
  "env_test_not_provisionable": "Handler środowiska nie jest skonfigurowany",
443
443
  "env_test_no_vcs": "Dostawca Git nie jest połączony"
444
444
  },
445
+ "description": {
446
+ "dependencies_unmet": "To zadanie zależy od innych, które nie zostały jeszcze ukończone. Ukończ je lub odblokuj, a następnie uruchom je ponownie.",
447
+ "task_limit_reached": "Zbyt wiele uruchomień jest aktywnych jednocześnie. Poczekaj, aż jedno się zakończy, a następnie uruchom to ponownie.",
448
+ "tester_infra_unsupported": "Krok Tester nie może zostać tutaj uruchomiony: ta usługa nie ma skonfigurowanej infrastruktury testowej albo środowisko uruchomieniowe tego wdrożenia nie może jej uruchomić. Skonfiguruj infrastrukturę testową lub użyj usługi, która jej nie wymaga.",
449
+ "agent_backend_unconfigured": "Brak dostępnego zaplecza runnera do uruchamiania agentów w kontenerach. Zarejestruj samodzielnie hostowaną pulę runnerów lub włącz Cloudflare Containers w swoim wdrożeniu.",
450
+ "run_not_retryable": "Ponowić można tylko nieudane lub zakończone uruchomienie. To uruchomienie jest wciąż aktywne albo w stanie, który nie pozwala na ponowienie.",
451
+ "no_pr_to_merge": "To uruchomienie nie otworzyło jeszcze pull requesta, więc nie ma czego scalić.",
452
+ "github_not_connected": "Połącz tę przestrzeń roboczą z GitHubem, aby agenci mogli klonować repozytorium, wysyłać zmiany i otwierać pull requesty.",
453
+ "bootstrap_not_retryable": "Tego zadania inicjującego nie można ponowić w obecnym stanie (wciąż trwa lub już zakończyło się pomyślnie).",
454
+ "bootstrap_reference_missing": "Repozytorium referencyjne, które adaptuje to zadanie inicjujące, nie jest już dostępne. Zostało usunięte lub odebrano do niego dostęp. Wybierz inne repozytorium referencyjne albo utwórz od zera.",
455
+ "preset_unsatisfiable": "Model kroku wbudowanego nie może działać wbudowany w tym wdrożeniu (model wyłącznie subskrypcyjny bez obsługi trybu wbudowanego). Wybierz model lub preset obsługujący tryb wbudowany.",
456
+ "visual_pipeline_no_frontend": "Ten potok ma kroki testów wizualnych, ale cel nie ma interfejsu użytkownika do przetestowania (brak frontendu i nic do niego nie prowadzi).",
457
+ "model_policy_blocked": "Rodzina tego modelu jest zablokowana przez zasady modeli Twojego konta. Wybierz dozwolony model lub rodzinę.",
458
+ "model_policy_unsupported": "Zasady rodzin modeli to funkcja dostępna tylko w środowiskach hostowanych, a to wdrożenie nie umożliwia ich ustawiania.",
459
+ "deployer_required_before_tester": "Ta usługa wymaga przygotowanego środowiska, zanim będzie mógł zostać uruchomiony krok Tester, testu manualnego lub Playwright, ale nie poprzedza go żaden Deployer. Dodaj krok Deployer do potoku.",
460
+ "env_test_not_a_frame": "Autotest środowiska działa dla poszczególnych usług, więc można go uruchomić tylko dla usługi, a nie dla modułu czy zadania.",
461
+ "env_test_infraless": "Ta usługa nie ma skonfigurowanego udostępniania środowisk tymczasowych, więc autotest nie ma czego sprawdzić.",
462
+ "env_test_not_provisionable": "Ta usługa ma typ udostępniania, ale nie ma jeszcze dla niego żadnego mechanizmu obsługi w przestrzeni roboczej, więc udostępnianie nie może zostać uruchomione. Skonfiguruj mechanizm obsługi środowiska.",
463
+ "env_test_no_vcs": "Autotest potrzebuje dostawcy Git, aby utworzyć i usunąć swoją jednorazową gałąź, ale ta przestrzeń robocza nie jest połączona z żadnym."
464
+ },
465
+ "action": {
466
+ "connectGitHub": "Połącz GitHub",
467
+ "configureRunnerPool": "Skonfiguruj pulę runnerów",
468
+ "chooseModel": "Wybierz model",
469
+ "configureInfrastructure": "Skonfiguruj infrastrukturę"
470
+ },
445
471
  "fallbackMessage": "Ta akcja jest sprzeczna z bieżącym stanem.",
446
472
  "providersUnconfigured": {
447
473
  "title": "Brak dostawcy AI dla tego modelu",
@@ -442,6 +442,32 @@
442
442
  "env_test_not_provisionable": "Ortam işleyicisi yapılandırılmamış",
443
443
  "env_test_no_vcs": "Git sağlayıcısı bağlı değil"
444
444
  },
445
+ "description": {
446
+ "dependencies_unmet": "Bu görev henüz tamamlanmamış başka görevlere bağlı. Onları tamamla veya engelini kaldır, ardından yeniden başlat.",
447
+ "task_limit_reached": "Aynı anda çok fazla çalıştırma etkin. Birinin bitmesini bekle, ardından bunu yeniden başlat.",
448
+ "tester_infra_unsupported": "Tester adımı burada çalışamaz: bu hizmet için yapılandırılmış test altyapısı yok ya da bu dağıtımın çalışma zamanı onu çalıştıramıyor. Bir test altyapısı yapılandır veya buna ihtiyaç duymayan bir hizmet kullan.",
449
+ "agent_backend_unconfigured": "Konteyner aracılarını çalıştıracak bir runner arka ucu yok. Kendi barındırdığın bir runner havuzu kaydet veya dağıtımında Cloudflare Containers'ı etkinleştir.",
450
+ "run_not_retryable": "Yalnızca başarısız olan veya tamamlanan bir çalıştırma yeniden denenebilir. Bu çalıştırma hâlâ etkin ya da yeniden denemeye uygun olmayan bir durumda.",
451
+ "no_pr_to_merge": "Bu çalıştırma henüz bir pull request açmadı, bu yüzden birleştirilecek bir şey yok.",
452
+ "github_not_connected": "Aracıların depoyu klonlayabilmesi, değişiklikleri gönderebilmesi ve pull request açabilmesi için bu çalışma alanını GitHub'a bağla.",
453
+ "bootstrap_not_retryable": "Bu bootstrap işi mevcut durumunda yeniden denenemez (hâlâ çalışıyor veya zaten başarıyla tamamlandı).",
454
+ "bootstrap_reference_missing": "Bu bootstrap'in uyarladığı referans deposuna artık erişilemiyor. Silinmiş veya erişimi iptal edilmiş. Başka bir referans seç ya da sıfırdan oluştur.",
455
+ "preset_unsatisfiable": "Bir satır içi adımın modeli bu dağıtımda satır içi çalışamaz (satır içi desteği olmayan yalnızca abonelikle kullanılan bir model). Satır içi çalışmayı destekleyen bir model veya hazır ayar seç.",
456
+ "visual_pipeline_no_frontend": "Bu işlem hattında görsel test adımları var ancak hedefte test edilecek bir kullanıcı arayüzü yok (frontend yok ve hiçbir şey bir frontend'e bağlanmıyor).",
457
+ "model_policy_blocked": "Bu modelin ailesi, hesabının model politikası tarafından engellendi. İzin verilen bir model veya aile seç.",
458
+ "model_policy_unsupported": "Model ailesi politikaları yalnızca barındırılan ortamlara özgü bir denetimdir ve bu dağıtım bunların ayarlanmasını desteklemez.",
459
+ "deployer_required_before_tester": "Bu hizmet, bir Tester, manuel test veya Playwright adımı çalışmadan önce sağlanmış bir ortama ihtiyaç duyar ancak öncesinde bir Deployer yok. İşlem hattına bir Deployer adımı ekle.",
460
+ "env_test_not_a_frame": "Ortam öz testi hizmet başına çalışır, bu yüzden yalnızca bir hizmette başlatılabilir; bir modülde veya görevde değil.",
461
+ "env_test_infraless": "Bu hizmet için yapılandırılmış geçici ortam sağlama yok, bu yüzden öz testin sınayacağı bir şey yok.",
462
+ "env_test_not_provisionable": "Bu hizmetin bir sağlama türü var ancak henüz onun için çözümlenen bir çalışma alanı işleyicisi yok, bu yüzden sağlama çalışamaz. Bir ortam işleyicisi yapılandır.",
463
+ "env_test_no_vcs": "Öz test, tek kullanımlık dalını oluşturup silmek için bir Git sağlayıcısına ihtiyaç duyar ancak bu çalışma alanı hiçbirine bağlı değil."
464
+ },
465
+ "action": {
466
+ "connectGitHub": "GitHub'ı bağla",
467
+ "configureRunnerPool": "Runner havuzunu yapılandır",
468
+ "chooseModel": "Bir model seç",
469
+ "configureInfrastructure": "Altyapıyı yapılandır"
470
+ },
445
471
  "fallbackMessage": "Bu eylem mevcut durumla çelişiyor.",
446
472
  "providersUnconfigured": {
447
473
  "title": "Bu model için AI sağlayıcısı yok",
@@ -442,6 +442,32 @@
442
442
  "env_test_not_provisionable": "Обробник середовища не налаштовано",
443
443
  "env_test_no_vcs": "Провайдер Git не підключено"
444
444
  },
445
+ "description": {
446
+ "dependencies_unmet": "Це завдання залежить від інших, які ще не завершені. Заверши або розблокуй їх, а потім запусти його знову.",
447
+ "task_limit_reached": "Одночасно активно забагато запусків. Зачекай, поки один завершиться, а потім запусти цей знову.",
448
+ "tester_infra_unsupported": "Крок Tester не може виконатися тут: для цієї служби не налаштовано тестову інфраструктуру, або середовище виконання цього розгортання не може її запустити. Налаштуй тестову інфраструктуру або скористайся службою, яка її не потребує.",
449
+ "agent_backend_unconfigured": "Немає доступного бекенду runner для запуску контейнерних агентів. Зареєструй самостійно розміщений пул runner-ів або увімкни Cloudflare Containers у своєму розгортанні.",
450
+ "run_not_retryable": "Повторити можна лише невдалий або завершений запуск. Цей запуск усе ще активний або перебуває в стані, який не дозволяє повтор.",
451
+ "no_pr_to_merge": "Цей запуск ще не відкрив pull request, тож зливати нічого.",
452
+ "github_not_connected": "Під'єднай цей робочий простір до GitHub, щоб агенти могли клонувати репозиторій, надсилати зміни та відкривати pull request-и.",
453
+ "bootstrap_not_retryable": "Це завдання ініціалізації не можна повторити в його поточному стані (воно ще виконується або вже успішно завершилося).",
454
+ "bootstrap_reference_missing": "Еталонний репозиторій, який адаптує ця ініціалізація, більше недоступний. Його видалено або доступ до нього відкликано. Обери інший еталон або створи з нуля.",
455
+ "preset_unsatisfiable": "Модель вбудованого кроку не може виконуватися вбудовано в цьому розгортанні (модель лише за підпискою без підтримки вбудованого режиму). Обери модель або пресет із підтримкою вбудованого режиму.",
456
+ "visual_pipeline_no_frontend": "Цей конвеєр має кроки візуального тестування, але ціль не має інтерфейсу користувача для перевірки (немає фронтенду, і ніщо на нього не посилається).",
457
+ "model_policy_blocked": "Родину цієї моделі заблоковано політикою моделей твого облікового запису. Обери дозволену модель або родину.",
458
+ "model_policy_unsupported": "Політики родин моделей — це елемент керування лише для розміщених середовищ, і це розгортання не підтримує їх налаштування.",
459
+ "deployer_required_before_tester": "Ця служба потребує підготовленого середовища, перш ніж зможе виконатися крок Tester, ручного тесту чи Playwright, але перед ним немає Deployer. Додай до конвеєра крок Deployer.",
460
+ "env_test_not_a_frame": "Самоперевірка середовища виконується для кожної служби, тож її можна запустити лише для служби, а не для модуля чи завдання.",
461
+ "env_test_infraless": "Для цієї служби не налаштовано надання тимчасового середовища, тож самоперевірці нічого перевіряти.",
462
+ "env_test_not_provisionable": "Ця служба має тип надання, але для нього ще немає обробника робочого простору, тож надання не може виконатися. Налаштуй обробник середовища.",
463
+ "env_test_no_vcs": "Самоперевірці потрібен постачальник Git, щоб створити та видалити свою тимчасову гілку, але цей робочий простір не під'єднано до жодного."
464
+ },
465
+ "action": {
466
+ "connectGitHub": "Під'єднати GitHub",
467
+ "configureRunnerPool": "Налаштувати пул runner-ів",
468
+ "chooseModel": "Обрати модель",
469
+ "configureInfrastructure": "Налаштувати інфраструктуру"
470
+ },
445
471
  "fallbackMessage": "Ця дія суперечить поточному стану.",
446
472
  "providersUnconfigured": {
447
473
  "title": "Немає постачальника ШІ для цієї моделі",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.116.4",
3
+ "version": "0.116.5",
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",