@pipelab/shared 1.0.0-beta.13 → 1.0.0-beta.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipelab/shared",
3
- "version": "1.0.0-beta.13",
3
+ "version": "1.0.0-beta.14",
4
4
  "private": false,
5
5
  "description": "Shared logic and types for the Pipelab ecosystem",
6
6
  "license": "FSL-1.1-MIT",
@@ -37,15 +37,15 @@
37
37
  "tslog": "4.9.3",
38
38
  "type-fest": "4.26.1",
39
39
  "valibot": "0.42.1",
40
- "@pipelab/constants": "1.0.0-beta.15",
41
- "@pipelab/migration": "1.0.0-beta.13"
40
+ "@pipelab/constants": "1.0.0-beta.16",
41
+ "@pipelab/migration": "1.0.0-beta.14"
42
42
  },
43
43
  "devDependencies": {
44
44
  "esbuild-plugin-wasm": "1.1.0",
45
45
  "tsdown": "0.21.2",
46
46
  "typescript": "5.9.3",
47
47
  "vitest": "3.1.4",
48
- "@pipelab/tsconfig": "1.0.0-beta.13"
48
+ "@pipelab/tsconfig": "1.0.0-beta.14"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "tsdown",
package/src/apis.ts CHANGED
@@ -4,13 +4,7 @@ import type { Tagged } from "type-fest";
4
4
  import { PresetResult, Steps } from "./model";
5
5
  import { AppConfig } from "./config.schema";
6
6
  import { Agent } from "./websocket.types";
7
- import {
8
- BuildHistoryEntry,
9
- BuildHistoryQuery,
10
- BuildHistoryResponse,
11
- BuildHistoryConfig,
12
- RetentionPolicy,
13
- } from "./build-history";
7
+ import { BuildHistoryEntry, BuildHistoryQuery, BuildHistoryResponse } from "./build-history";
14
8
 
15
9
  type Event<TYPE extends string, DATA> =
16
10
  | { type: TYPE; data: DATA }
@@ -130,10 +124,6 @@ export type IpcDefinition = {
130
124
  newestEntry?: number;
131
125
  }>,
132
126
  ];
133
- "build-history:configure": [
134
- { config: Partial<BuildHistoryConfig> },
135
- EndEvent<{ result: "ok" | "ko" }>,
136
- ];
137
127
  "agents:get": [void, EndEvent<{ agents: Agent[] }>];
138
128
  "graph:execute": [
139
129
  {
@@ -161,7 +151,10 @@ export type IpcDefinition = {
161
151
  EndEvent<{ data: any | null; error: any | null }>,
162
152
  ];
163
153
  "agent:version:get": [void, EndEvent<{ version: string }>];
164
- "startup:progress": [void, { type: "progress"; data: { message: string } } | { type: "ready" } | { type: "done" }];
154
+ "startup:progress": [
155
+ void,
156
+ { type: "progress"; data: { message: string } } | { type: "ready" } | { type: "done" },
157
+ ];
165
158
  "plugin:loaded": [void, { plugin: RendererPluginDefinition }];
166
159
  "plugin:search": [
167
160
  { query: string },
@@ -34,6 +34,7 @@ export interface BuildHistoryEntry {
34
34
  pipelineId: string;
35
35
  projectName: string;
36
36
  projectPath: string;
37
+ cachePath?: string;
37
38
  status: "running" | "completed" | "failed" | "cancelled";
38
39
  startTime: number;
39
40
  endTime?: number;
@@ -78,11 +79,6 @@ export interface IBuildHistoryStorage {
78
79
  newestEntry?: number;
79
80
  numberOfPipelines: number;
80
81
  userDataPath: string;
81
- retentionPolicy: {
82
- enabled: boolean;
83
- maxEntries: number;
84
- maxAge: number;
85
- };
86
82
  disk: {
87
83
  total: number;
88
84
  free: number;
@@ -92,24 +88,6 @@ export interface IBuildHistoryStorage {
92
88
  }>;
93
89
  }
94
90
 
95
- // Retention policy configuration
96
- export interface RetentionPolicy {
97
- enabled: boolean;
98
- maxEntries: number;
99
- maxAge: number; // in milliseconds
100
- maxSize: number; // in bytes
101
- keepFailedBuilds: boolean;
102
- keepSuccessfulBuilds: boolean;
103
- }
104
-
105
- // Storage configuration
106
- export interface BuildHistoryConfig {
107
- storagePath: string;
108
- indexFileName: string;
109
- entryFilePrefix: string;
110
- retentionPolicy: RetentionPolicy;
111
- }
112
-
113
91
  // Authorization and subscription types
114
92
  export interface SubscriptionBenefit {
115
93
  id: string;
@@ -16,12 +16,11 @@ import {
16
16
  AppConfigV5,
17
17
  AppConfigV6,
18
18
  AppConfigV7,
19
- AppConfigV8,
20
19
  ConnectionsConfig,
21
20
  ConnectionsConfigV1,
22
21
  } from "../config.schema";
23
22
 
24
- const DEFAULT_PLUGINS: AppConfigV8["plugins"] = [
23
+ const DEFAULT_PLUGINS: AppConfig["plugins"] = [
25
24
  {
26
25
  name: "@pipelab/plugin-construct",
27
26
  enabled: true,
@@ -39,7 +38,7 @@ const DEFAULT_PLUGINS: AppConfigV8["plugins"] = [
39
38
  { name: "@pipelab/plugin-minify", enabled: true, description: "Asset minification" },
40
39
  { name: "@pipelab/plugin-netlify", enabled: true, description: "Netlify deployment" },
41
40
  ];
42
- import { FileRepoV1, FileRepoV2, FileRepo } from "./projects-types";
41
+ import { FileRepoV1, FileRepoV2, FileRepoV3, FileRepo } from "./projects-types";
43
42
  import {
44
43
  SavedFileV1,
45
44
  SavedFileV2,
@@ -73,7 +72,7 @@ const settingsMigratorInternal = createMigrator<AppConfigV1, AppConfig>();
73
72
  export const defaultAppSettings = settingsMigratorInternal.createDefault({
74
73
  locale: "en-US",
75
74
  theme: "light",
76
- version: "8.0.0",
75
+ version: "7.0.0",
77
76
  autosave: true,
78
77
  agents: [],
79
78
  tours: {
@@ -86,13 +85,6 @@ export const defaultAppSettings = settingsMigratorInternal.createDefault({
86
85
  completed: false,
87
86
  },
88
87
  },
89
- buildHistory: {
90
- retentionPolicy: {
91
- enabled: false,
92
- maxEntries: 50,
93
- maxAge: 30,
94
- },
95
- },
96
88
  plugins: DEFAULT_PLUGINS,
97
89
  isInternalMigrationBannerClosed: false,
98
90
  });
@@ -143,27 +135,20 @@ export const appSettingsMigrator = settingsMigratorInternal.createMigrations({
143
135
  autosave: true,
144
136
  }),
145
137
  }),
146
- createMigration<AppConfigV6, AppConfigV8>({
138
+ createMigration<AppConfigV6, AppConfigV7>({
147
139
  version: "6.0.0" as SemVer,
148
140
  up: (state) => {
149
141
  const { cacheFolder: _, clearTemporaryFoldersOnPipelineEnd: __, ...rest } = state;
150
142
  return {
151
143
  ...rest,
152
144
  agents: [],
153
- buildHistory: {
154
- retentionPolicy: {
155
- enabled: false,
156
- maxEntries: 50,
157
- maxAge: 30,
158
- },
159
- },
160
145
  plugins: DEFAULT_PLUGINS,
161
146
  isInternalMigrationBannerClosed: false,
162
147
  };
163
148
  },
164
149
  }),
165
- createMigration<AppConfigV8, never>({
166
- version: "8.0.0" as SemVer,
150
+ createMigration<AppConfigV7, never>({
151
+ version: "7.0.0" as SemVer,
167
152
  up: finalVersion,
168
153
  }),
169
154
  ],
@@ -193,7 +178,7 @@ export const connectionsMigrator = connectionsMigratorInternal.createMigrations(
193
178
  const fileRepoMigratorInternal = createMigrator<FileRepoV1, FileRepo>();
194
179
 
195
180
  export const defaultFileRepo = fileRepoMigratorInternal.createDefault({
196
- version: "2.0.0",
181
+ version: "3.0.0",
197
182
  projects: [
198
183
  {
199
184
  id: "main",
@@ -232,8 +217,16 @@ export const fileRepoMigrations = fileRepoMigratorInternal.createMigrations({
232
217
  };
233
218
  },
234
219
  }),
235
- createMigration<FileRepoV2, never>({
220
+ createMigration<FileRepoV2, FileRepoV3>({
236
221
  version: "2.0.0",
222
+ up: (state) => {
223
+ return {
224
+ ...state,
225
+ };
226
+ },
227
+ }),
228
+ createMigration<FileRepoV3, never>({
229
+ version: "3.0.0",
237
230
  up: finalVersion,
238
231
  }),
239
232
  ],
@@ -424,7 +417,7 @@ export const normalizePipelineConfig = (state: any): boolean => {
424
417
 
425
418
  // Normalise plugin IDs in block and trigger origins (pluginId field only;
426
419
  // version strings don't need normalisation)
427
- if (state.type === "default" && state.canvas) {
420
+ if (state.canvas) {
428
421
  if (Array.isArray(state.canvas.blocks)) {
429
422
  for (const block of state.canvas.blocks) {
430
423
  if (normalizeBlockPluginId(block)) changed = true;
@@ -18,8 +18,15 @@ export const FileRepoValidatorV2 = object({
18
18
  pipelines: optional(array(SaveLocationValidator), []),
19
19
  });
20
20
 
21
+ export const FileRepoValidatorV3 = object({
22
+ version: literal("3.0.0"),
23
+ projects: array(FileRepoProjectValidatorV2),
24
+ pipelines: optional(array(SaveLocationValidator), []),
25
+ });
26
+
21
27
  export type FileRepoV1 = InferInput<typeof FileRepoValidatorV1>;
22
28
  export type FileRepoV2 = InferInput<typeof FileRepoValidatorV2>;
29
+ export type FileRepoV3 = InferInput<typeof FileRepoValidatorV3>;
23
30
 
24
- export const FileRepoValidator = FileRepoValidatorV2;
31
+ export const FileRepoValidator = FileRepoValidatorV3;
25
32
  export type FileRepo = InferInput<typeof FileRepoValidator>;
@@ -1,25 +1 @@
1
- import { SaveLocationValidator } from "../save-location";
2
- import { object, string, optional, record, InferInput, literal, array } from "valibot";
3
-
4
- export const FileRepoValidatorV1 = object({
5
- version: literal("1.0.0"),
6
- data: optional(record(string(), SaveLocationValidator), {}),
7
- });
8
-
9
- export const FileRepoProjectValidatorV2 = object({
10
- id: string(),
11
- name: string(),
12
- description: string(),
13
- });
14
-
15
- export const FileRepoValidatorV2 = object({
16
- version: literal("2.0.0"),
17
- projects: array(FileRepoProjectValidatorV2),
18
- pipelines: optional(array(SaveLocationValidator), []),
19
- });
20
-
21
- export type FileRepoV1 = InferInput<typeof FileRepoValidatorV1>;
22
- export type FileRepoV2 = InferInput<typeof FileRepoValidatorV2>;
23
-
24
- export const FileRepoValidator = FileRepoValidatorV2;
25
- export type FileRepo = InferInput<typeof FileRepoValidator>;
1
+ export * from "./projects-definition";
@@ -7,7 +7,6 @@ import type {
7
7
  AppConfigV5,
8
8
  AppConfigV6,
9
9
  AppConfigV7,
10
- AppConfigV8,
11
10
  } from "../config.schema";
12
11
 
13
12
  export type {
@@ -19,5 +18,4 @@ export type {
19
18
  AppConfigV5,
20
19
  AppConfigV6,
21
20
  AppConfigV7,
22
- AppConfigV8,
23
21
  };
@@ -128,51 +128,6 @@ export const AppSettingsValidatorV7 = object({
128
128
  url: string(),
129
129
  }),
130
130
  ),
131
- buildHistory: object({
132
- retentionPolicy: object({
133
- enabled: boolean(),
134
- maxEntries: number(), // Maximum number of entries per pipeline
135
- maxAge: number(), // Maximum age of entries in days
136
- }),
137
- }),
138
- });
139
-
140
- export const AppSettingsValidatorV8 = object({
141
- theme: union([literal("light"), literal("dark")]),
142
- version: literal("8.0.0"),
143
- locale: union([
144
- literal("en-US"),
145
- literal("fr-FR"),
146
- literal("pt-BR"),
147
- literal("zh-CN"),
148
- literal("es-ES"),
149
- literal("de-DE"),
150
- ]),
151
- tours: object({
152
- dashboard: object({
153
- step: number(),
154
- completed: boolean(),
155
- }),
156
- editor: object({
157
- step: number(),
158
- completed: boolean(),
159
- }),
160
- }),
161
- autosave: boolean(),
162
- agents: array(
163
- object({
164
- id: string(),
165
- name: string(),
166
- url: string(),
167
- }),
168
- ),
169
- buildHistory: object({
170
- retentionPolicy: object({
171
- enabled: boolean(),
172
- maxEntries: number(), // Maximum number of entries per pipeline
173
- maxAge: number(), // Maximum age of entries in days
174
- }),
175
- }),
176
131
  // Metadata list of plugins the user has enabled (official + community).
177
132
  // No binaries are stored here — versions are resolved JIT at node-add time.
178
133
  plugins: array(
@@ -210,7 +165,6 @@ export type AppConfigV4 = InferInput<typeof AppSettingsValidatorV4>;
210
165
  export type AppConfigV5 = InferInput<typeof AppSettingsValidatorV5>;
211
166
  export type AppConfigV6 = InferInput<typeof AppSettingsValidatorV6>;
212
167
  export type AppConfigV7 = InferInput<typeof AppSettingsValidatorV7>;
213
- export type AppConfigV8 = InferInput<typeof AppSettingsValidatorV8>;
214
168
 
215
- export type AppConfig = AppConfigV8;
216
- export const AppSettingsValidator = AppSettingsValidatorV8;
169
+ export type AppConfig = AppConfigV7;
170
+ export const AppSettingsValidator = AppSettingsValidatorV7;
@@ -1,7 +1,9 @@
1
1
  {
2
2
  "settings": {
3
- "darkTheme": "Dark theme",
4
- "language": "Language",
3
+ "darkTheme": "Dunkles Design",
4
+ "autosave": "Automatisch speichern",
5
+ "autosaveDescription": "Änderungen an Ihren Pipelines automatisch in Echtzeit speichern.",
6
+ "language": "Sprache",
5
7
  "languageOptions": {
6
8
  "en-US": "English",
7
9
  "fr-FR": "French",
@@ -11,37 +13,44 @@
11
13
  "de-DE": "German"
12
14
  },
13
15
  "tabs": {
14
- "general": "General",
15
- "storage": "Storage",
16
- "integrations": "Integrations",
17
- "advanced": "Advanced",
18
- "billing": "Billing",
19
- "plugins": "Plugins",
20
- "core-plugins": "Core-Plugins",
21
- "community-plugins": "Community-Plugins",
16
+ "general": "Allgemein",
17
+ "storage": "Speicher",
18
+ "integrations": "Integrationen",
19
+ "advanced": "Erweitert",
20
+ "billing": "Abrechnung",
21
+ "plugins": "Erweiterungen",
22
+ "core-plugins": "Kern-Erweiterungen",
23
+ "community-plugins": "Community-Erweiterungen",
22
24
  "versions": "Versionen"
23
25
  },
24
- "clearTempFolders": "Automatically clean up temporary files",
25
- "clearTempFoldersDescription": "Wenn aktiviert, werden alle temporären Dateien, die während der Pipeline-Ausführung erstellt wurden, automatisch gelöscht, nachdem die Pipeline abgeschlossen ist. Dies hilft, Speicherplatz auf der Festplatte zu sparen, aber möglicherweise müssen Sie selbst Artefakte kopieren, um sie zu bewahren.",
26
- "pipeline-cache-folder": "Pipeline Cache Folder:",
27
- "enter-or-browse-for-a-folder": "Enter or browse for a folder",
28
- "browse": "Browse",
29
- "manage-where-the-app-stores-temporary-and-cache-files": "Manage where the app stores temporary and cache files.",
30
- "clear-cache": "Clear cache",
31
- "reset-to-default": "Reset to default",
32
- "manage-subscription": "Manage Subscription",
33
- "renewal-date": "Renewal Date",
34
- "start-date": "Start Date:",
35
- "cache-cleared-successfully": "Cache cleared successfully",
36
- "failed-to-clear-cache-error-message": "Failed to clear cache: {0}",
37
- "failed-to-reset-cache-folder-error-message": "Failed to reset cache folder: {0}",
38
- "select-cache-folder": "Select Cache Folder"
26
+ "pipeline-cache-folder": "Pipeline-Cache-Ordner:",
27
+ "enter-or-browse-for-a-folder": "Ordner eingeben oder auswählen",
28
+ "browse": "Durchsuchen",
29
+ "manage-where-the-app-stores-temporary-and-cache-files": "Konfigurieren Sie lokale Ordner für temporäre Dateien und Anwendungs-Cache.",
30
+ "clear-cache": "Cache leeren",
31
+ "reset-to-default": "Auf Standard zurücksetzen",
32
+ "manage-subscription": "Abonnement verwalten",
33
+ "renewal-date": "Verlängerungsdatum",
34
+ "start-date": "Startdatum:",
35
+ "cache-cleared-successfully": "Cache erfolgreich geleert",
36
+ "failed-to-clear-cache-error-message": "Cache konnte nicht geleert werden: {0}",
37
+ "failed-to-reset-cache-folder-error-message": "Cache-Ordner konnte nicht zurückgesetzt werden: {0}",
38
+ "select-cache-folder": "Cache-Ordner auswählen",
39
+ "restart-dashboard-tour": "Dashboard-Anleitung zurücksetzen",
40
+ "restart-editor-tour": "Editor-Anleitung zurücksetzen",
41
+ "tour-reset-success": "Anleitungen wurden zurückgesetzt. Sie werden bei Ihrem nächsten Besuch wieder angezeigt.",
42
+ "storage-pipelab": "Pipelab",
43
+ "storage-other": "Andere Apps",
44
+ "storage-free": "Freier Speicher",
45
+ "disk-usage": "Festplattennutzung",
46
+ "free": "Frei",
47
+ "other": "Sonstige"
39
48
  },
40
49
  "headers": {
41
50
  "dashboard": "Dashboard",
42
- "scenarios": "Scenarios",
51
+ "pipelines": "Pipelines",
43
52
  "editor": "Editor",
44
- "billing": "Billing",
53
+ "billing": "@:settings.tabs.billing",
45
54
  "team": "Team"
46
55
  },
47
56
  "base": {
@@ -53,38 +62,106 @@
53
62
  "delete": "Löschen",
54
63
  "logs": "Protokolle",
55
64
  "ok": "OK",
56
- "add": "Hinzufügen"
65
+ "add": "Hinzufügen",
66
+ "search": "Suchen...",
67
+ "success": "Erfolg",
68
+ "error": "Fehler"
57
69
  },
58
70
  "editor": {
59
- "invalid-file-content": "Invalid file content",
60
- "welcome-back": "Welcome back!",
61
- "please-log-in-to-run-a-scenario": "Please log in to run a scenario",
62
- "execution-done": "Execution done",
63
- "your-project-has-been-executed-successfully": "Your project has been executed successfully",
64
- "execution-failed": "Execution failed",
65
- "project-has-encountered-an-error": "Project has encountered an error:",
66
- "project-saved": "Project saved",
67
- "your-project-has-be-saved-successfully": "Your project has be saved successfully"
71
+ "invalid-file-content": "Ungültiger Dateiinhalt",
72
+ "welcome-back": "Willkommen zurück!",
73
+ "please-log-in-to-run-a-pipeline": "Bitte melden Sie sich an, um diese Pipeline auszuführen.",
74
+ "execution-done": "Ausführung erfolgreich abgeschlossen",
75
+ "your-project-has-been-executed-successfully": "Ihre Pipeline wurde erfolgreich ausgeführt.",
76
+ "execution-failed": "Ausführung fehlgeschlagen",
77
+ "project-has-encountered-an-error": "Die Pipeline hat einen Fehler festgestellt:",
78
+ "project-saved": "Pipeline gespeichert",
79
+ "your-project-has-be-saved-successfully": "Ihre Pipeline wurde erfolgreich gespeichert.",
80
+ "view-history": "Verlauf",
81
+ "add-plugin": "Erweiterung hinzufügen",
82
+ "display-advanced-nodes": "Erweiterte Blöcke anzeigen",
83
+ "project-settings": "Pipeline-Einstellungen",
84
+ "jit-loading-title": "Erweiterungen werden vorbereitet",
85
+ "jit-loading-subtitle": "Bitte warten Sie, während Pipelab die für diese Pipeline erforderlichen Erweiterungen herunterlädt und konfigures.",
86
+ "jit-loading-status": "Herunterladen und Einrichten von Erweiterungspaketen...",
87
+ "validation-failed": "Validierung fehlgeschlagen",
88
+ "validation-plugin-disabled-or-missing": "Der Block \"{nodeName}\" erfordert die Erweiterung \"{pluginId}\", die derzeit nicht installiert oder aktiviert ist.",
89
+ "validation-missing-param": "Bitte konfigurieren Sie das erforderliche Feld \"{paramName}\" im Block \"{nodeName}\"."
68
90
  },
69
91
  "home": {
70
- "invalid-preset": "Invalid preset",
71
- "store-project-on-the-cloud": "Store project on the cloud",
92
+ "invalid-preset": "Ungültige Vorlage",
93
+ "store-project-on-the-cloud": "Projekt in der Cloud speichern",
72
94
  "cloud": "Cloud",
73
- "store-project-locally": "Store project locally",
74
- "local": "Local",
75
- "invalid-number-of-paths-selected": "Invalid number of paths selected",
76
- "pipelab-project": "Pipelab Project",
77
- "choose-a-new-path": "Choose a new path",
78
- "invalid-file-type": "Invalid file type",
79
- "create-project": "Create project",
80
- "duplicate-project": "Duplicate project",
81
- "project-name": "Project Name",
82
- "new-project": "New Project",
83
- "open": "Open",
84
- "your-projects": "Your projects",
85
- "no-projects-yet": "No projects yet"
95
+ "store-project-locally": "Projekt lokal speichern",
96
+ "local": "Lokal",
97
+ "invalid-number-of-paths-selected": "Ungültige Anzahl ausgewählter Pfade",
98
+ "pipelab-project": "Pipelab-Projekt",
99
+ "choose-a-new-path": "Wählen Sie einen neuen Pfad",
100
+ "invalid-file-type": "Ungültiger Dateityp",
101
+ "create-project": "Projekt erstellen",
102
+ "create-pipeline": "Pipeline erstellen",
103
+ "duplicate-project": "Projekt duplizieren",
104
+ "duplicate-pipeline": "Pipeline duplizieren",
105
+ "project-name": "Projektname",
106
+ "new-project": "Neues Projekt",
107
+ "new-pipeline": "Neue Pipeline",
108
+ "open": "Öffnen",
109
+ "import": "Importieren",
110
+ "pipeline-name": "Pipelinename",
111
+ "your-projects": "Ihre Projekte",
112
+ "no-projects-yet": "Noch keine Projekte",
113
+ "no-pipelines-yet": "Noch keine Pipelines",
114
+ "delete-project": "Projekt löschen",
115
+ "confirm-delete-project": "Sind Sie sicher, dass Sie dieses Projekt löschen möchten? Dies kann nicht rückgängig gemacht werden.",
116
+ "cannot-delete-project": "Projekt kann nicht gelöscht werden",
117
+ "project-not-empty": "Dieses Projekt enthält Pipelines. Bitte löschen Sie diese zuerst.",
118
+ "transfer": "Übertragen",
119
+ "transfer-successful": "Übertragung erfolgreich",
120
+ "pipeline-transferred": "Pipeline erfolgreich übertragen",
121
+ "select-project": "Projekt auswählen",
122
+ "build-history": "Ausführungsverlauf",
123
+ "duplicate": "Duplizieren",
124
+ "rename-project": "Projekt umbenennen",
125
+ "new-project-name": "Neuer Projektname",
126
+ "premium-feature": "Dies ist eine Premium-Funktion",
127
+ "migrate-warning": "Dieses Dateiformat wird bald nicht mehr unterstützt. Bitte migrieren Sie es in den neuen lokalen Arbeitsbereich.",
128
+ "simple-pipeline": "Einfache Pipeline",
129
+ "advanced-pipeline": "Erweiterte Pipeline",
130
+ "new-simple-project": "Neues einfaches Projekt",
131
+ "new-advanced-project": "Neues erweitertes Projekt",
132
+ "store-project-internally": "Projekt lokal speichern",
133
+ "internal": "Intern",
134
+ "confirm-migration-message": "Sind Sie sicher, dass Sie diese Pipeline in den lokalen Arbeitsbereich verschieben möchten? Pipelab wird diese Pipeline intern verwalten.",
135
+ "migrate-pipeline": "Pipeline migrieren",
136
+ "migration-success": "Pipeline erfolgreich migriert",
137
+ "migrate-to-internal": "In Arbeitsbereich verschieben",
138
+ "only-internal-supported-notice": "Pipelab verwaltet jetzt alle Pipelines im Arbeitsbereich der Anwendung. Externe Dateien sind veraltet, können aber weiterhin importiert werden.",
139
+ "import-pipeline": "Pipeline importieren",
140
+ "import-success": "Pipeline erfolgreich importiert",
141
+ "failed-to-read-file": "Ausgewählte Datei konnte nicht gelesen werden"
86
142
  },
87
- "scenarios": {
88
- "scenarios": "Scenarios"
143
+ "pipelines": {
144
+ "title": "@:headers.pipelines"
145
+ },
146
+ "tour": {
147
+ "start-tour": "Anleitung starten",
148
+ "projects-list-title": "Projekt-Navigator",
149
+ "projects-list-description": "Diese Seitenleiste zeigt Ihre Projekte. Durch Auswahl eines Projekts werden dessen Pipelines im Hauptbereich angezeigt.",
150
+ "add-project-title": "Neues Projekt erstellen",
151
+ "add-project-description": "Projekte organisieren Ihre Pipelines nach Thema oder Kunde. Klicken Sie hier, um ein neues Projekt zu starten.",
152
+ "new-pipeline-title": "Pipeline erstellen",
153
+ "new-pipeline-description": "Bereit zur Automatisierung? Erstellen Sie eine neue Pipeline, um Aktionen und Logik hinzuzufügen.",
154
+ "project-actions-title": "Projektverwaltung",
155
+ "project-actions-description": "Verwenden Sie diese Schaltflächen, um das derzeit ausgewählte Projekt umzubenennen oder zu löschen.",
156
+ "editor-canvas-title": "Der visuelle Editor",
157
+ "editor-canvas-description": "Dies ist Ihr Arbeitsbereich. Ziehen Sie Aktionsblöcke hierher, um Ihren Automatisierungsfluss zu erstellen.",
158
+ "editor-save-title": "Fortschritt speichern",
159
+ "editor-save-description": "Schützen Sie Ihre Änderungen. Wir empfehlen, Ihre Pipeline häufig zu speichern.",
160
+ "editor-run-title": "Pipeline testen",
161
+ "editor-run-description": "Klicken Sie auf Ausführen, um Ihre Pipeline zu testen. Pipelab führt jeden Block in Echtzeit aus.",
162
+ "editor-logs-title": "Ausführungsprotokolle",
163
+ "editor-logs-description": "Das Protokollfenster zeigt die Ausführungsschritte in Echtzeit, um Sie bei der Überwachung und Fehlersuche zu unterstützen.",
164
+ "editor-close-title": "Editor schließen",
165
+ "editor-close-description": "Fertig für heute? Kehren Sie zum Dashboard zurück, um andere Projekte und Pipelines zu verwalten."
89
166
  }
90
167
  }