shiva-code 0.8.13 → 0.8.15

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.
@@ -1,3437 +0,0 @@
1
- import {
2
- colors,
3
- log
4
- } from "./chunk-5RLMQDLT.js";
5
- import {
6
- api
7
- } from "./chunk-KB6M24M3.js";
8
- import {
9
- clearAuth,
10
- getConfig,
11
- isAuthenticated,
12
- setAuth
13
- } from "./chunk-OP4HYQZZ.js";
14
- import {
15
- __require
16
- } from "./chunk-3RG5ZIWI.js";
17
-
18
- // src/commands/auth/login.ts
19
- import { Command } from "commander";
20
- import inquirer2 from "inquirer";
21
-
22
- // src/services/auth/auth.ts
23
- import inquirer from "inquirer";
24
- import open from "open";
25
- import http from "http";
26
- import { URL } from "url";
27
-
28
- // src/services/auth/two-factor.ts
29
- import * as crypto from "crypto";
30
- function generateSecret(length = 20) {
31
- const buffer = crypto.randomBytes(length);
32
- return base32Encode(buffer);
33
- }
34
- function base32Encode(buffer) {
35
- const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
36
- let result = "";
37
- let bits = 0;
38
- let value = 0;
39
- for (let i = 0; i < buffer.length; i++) {
40
- value = value << 8 | buffer[i];
41
- bits += 8;
42
- while (bits >= 5) {
43
- result += alphabet[value >>> bits - 5 & 31];
44
- bits -= 5;
45
- }
46
- }
47
- if (bits > 0) {
48
- result += alphabet[value << 5 - bits & 31];
49
- }
50
- return result;
51
- }
52
- function base32Decode(encoded) {
53
- const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
54
- const lookup = /* @__PURE__ */ new Map();
55
- for (let i = 0; i < alphabet.length; i++) {
56
- lookup.set(alphabet[i], i);
57
- }
58
- const bytes = [];
59
- let bits = 0;
60
- let value = 0;
61
- for (const char of encoded.toUpperCase()) {
62
- if (char === "=") continue;
63
- const index = lookup.get(char);
64
- if (index === void 0) continue;
65
- value = value << 5 | index;
66
- bits += 5;
67
- if (bits >= 8) {
68
- bytes.push(value >>> bits - 8 & 255);
69
- bits -= 8;
70
- }
71
- }
72
- return Buffer.from(bytes);
73
- }
74
- function generateTOTP(secret, timeStep = 30) {
75
- const time = Math.floor(Date.now() / 1e3 / timeStep);
76
- const key = base32Decode(secret);
77
- const counter = Buffer.alloc(8);
78
- counter.writeBigUInt64BE(BigInt(time));
79
- const hmac = crypto.createHmac("sha1", key);
80
- hmac.update(counter);
81
- const hash = hmac.digest();
82
- const offset = hash[hash.length - 1] & 15;
83
- const code = ((hash[offset] & 127) << 24 | (hash[offset + 1] & 255) << 16 | (hash[offset + 2] & 255) << 8 | hash[offset + 3] & 255) % 1e6;
84
- return code.toString().padStart(6, "0");
85
- }
86
- function verifyTOTP(secret, code, timeStep = 30) {
87
- for (let i = -1; i <= 1; i++) {
88
- const time = Math.floor(Date.now() / 1e3 / timeStep) + i;
89
- const expectedCode = generateTOTPForTime(secret, time, timeStep);
90
- if (expectedCode === code) {
91
- return true;
92
- }
93
- }
94
- return false;
95
- }
96
- function generateTOTPForTime(secret, time, timeStep) {
97
- const key = base32Decode(secret);
98
- const counter = Buffer.alloc(8);
99
- counter.writeBigUInt64BE(BigInt(time));
100
- const hmac = crypto.createHmac("sha1", key);
101
- hmac.update(counter);
102
- const hash = hmac.digest();
103
- const offset = hash[hash.length - 1] & 15;
104
- const code = ((hash[offset] & 127) << 24 | (hash[offset + 1] & 255) << 16 | (hash[offset + 2] & 255) << 8 | hash[offset + 3] & 255) % 1e6;
105
- return code.toString().padStart(6, "0");
106
- }
107
- function generateOtpAuthUrl(secret, email, issuer = "SHIVA Code") {
108
- const encodedIssuer = encodeURIComponent(issuer);
109
- const encodedEmail = encodeURIComponent(email);
110
- return `otpauth://totp/${encodedIssuer}:${encodedEmail}?secret=${secret}&issuer=${encodedIssuer}&algorithm=SHA1&digits=6&period=30`;
111
- }
112
- function generateBackupCodes(count = 10) {
113
- const codes = [];
114
- for (let i = 0; i < count; i++) {
115
- const buffer = crypto.randomBytes(6);
116
- const code = buffer.toString("hex").toUpperCase();
117
- codes.push(`${code.slice(0, 3)}-${code.slice(3, 6)}-${code.slice(6, 9)}-${code.slice(9, 12)}`);
118
- }
119
- return codes;
120
- }
121
- function generateDeviceFingerprint() {
122
- const os = __require("os");
123
- const components = [
124
- os.hostname(),
125
- os.platform(),
126
- os.arch(),
127
- os.cpus()[0]?.model || "unknown",
128
- os.userInfo().username
129
- ];
130
- const fingerprint = crypto.createHash("sha256").update(components.join("|")).digest("hex").slice(0, 32);
131
- return fingerprint;
132
- }
133
- function getDeviceName() {
134
- const os = __require("os");
135
- const hostname = os.hostname();
136
- const platform = os.platform();
137
- const platformNames = {
138
- darwin: "macOS",
139
- linux: "Linux",
140
- win32: "Windows"
141
- };
142
- return `${hostname} (${platformNames[platform] || platform})`;
143
- }
144
- var TwoFactorService = class {
145
- /**
146
- * Start 2FA setup - generate secret and QR code
147
- */
148
- async startSetup(email) {
149
- try {
150
- const response = await api.setup2FA();
151
- if (!response.setup) {
152
- throw new Error(response.message || "2FA-Setup fehlgeschlagen");
153
- }
154
- return response.setup;
155
- } catch (error) {
156
- const secret = generateSecret();
157
- const otpAuthUrl = generateOtpAuthUrl(secret, email);
158
- const backupCodes = generateBackupCodes();
159
- return {
160
- secret,
161
- qrCodeDataUrl: otpAuthUrl,
162
- // In real implementation, would be a data URL
163
- backupCodes
164
- };
165
- }
166
- }
167
- /**
168
- * Verify TOTP code and complete setup
169
- */
170
- async verifySetup(code) {
171
- try {
172
- const response = await api.verify2FA(code);
173
- return response.success;
174
- } catch (error) {
175
- throw error;
176
- }
177
- }
178
- /**
179
- * Verify TOTP code during login
180
- */
181
- async verifyCode(code) {
182
- try {
183
- const response = await api.verify2FACode(code);
184
- return response.success;
185
- } catch (error) {
186
- throw error;
187
- }
188
- }
189
- /**
190
- * Verify backup code
191
- */
192
- async verifyBackupCode(code) {
193
- try {
194
- const response = await api.verifyBackupCode(code);
195
- return response.success;
196
- } catch (error) {
197
- throw error;
198
- }
199
- }
200
- /**
201
- * Get 2FA status
202
- */
203
- async getStatus() {
204
- try {
205
- const response = await api.get2FAStatus();
206
- return response;
207
- } catch (error) {
208
- return {
209
- enabled: false,
210
- backupCodesRemaining: 0
211
- };
212
- }
213
- }
214
- /**
215
- * Disable 2FA
216
- */
217
- async disable(code) {
218
- try {
219
- const response = await api.disable2FA(code);
220
- return response.success;
221
- } catch (error) {
222
- throw error;
223
- }
224
- }
225
- /**
226
- * Generate new backup codes
227
- */
228
- async regenerateBackupCodes() {
229
- try {
230
- const response = await api.regenerateBackupCodes();
231
- return response.codes;
232
- } catch (error) {
233
- throw error;
234
- }
235
- }
236
- /**
237
- * Verify TOTP code locally (for testing)
238
- */
239
- verifyLocal(secret, code) {
240
- return verifyTOTP(secret, code);
241
- }
242
- /**
243
- * Generate TOTP code locally (for testing)
244
- */
245
- generateLocal(secret) {
246
- return generateTOTP(secret);
247
- }
248
- };
249
- var DeviceTrustService = class {
250
- /**
251
- * Get current device fingerprint
252
- */
253
- getFingerprint() {
254
- return generateDeviceFingerprint();
255
- }
256
- /**
257
- * Get current device name
258
- */
259
- getDeviceName() {
260
- return getDeviceName();
261
- }
262
- /**
263
- * Register current device as trusted
264
- */
265
- async trustDevice(name) {
266
- const fingerprint = this.getFingerprint();
267
- const deviceName = name || this.getDeviceName();
268
- try {
269
- const response = await api.trustDevice({
270
- name: deviceName,
271
- fingerprint
272
- });
273
- return response.device;
274
- } catch (error) {
275
- throw error;
276
- }
277
- }
278
- /**
279
- * Check if current device is trusted
280
- */
281
- async isDeviceTrusted() {
282
- const fingerprint = this.getFingerprint();
283
- try {
284
- const devices = await api.getDevices();
285
- return devices.devices.some((d) => d.fingerprint === fingerprint);
286
- } catch (error) {
287
- return false;
288
- }
289
- }
290
- /**
291
- * List all trusted devices
292
- */
293
- async listDevices() {
294
- try {
295
- const response = await api.getDevices();
296
- const currentFingerprint = this.getFingerprint();
297
- return response.devices.map((d) => ({
298
- ...d,
299
- isCurrent: d.fingerprint === currentFingerprint
300
- }));
301
- } catch (error) {
302
- return [];
303
- }
304
- }
305
- /**
306
- * Revoke a trusted device
307
- */
308
- async revokeDevice(deviceId) {
309
- try {
310
- const response = await api.revokeDevice(deviceId);
311
- return response.success;
312
- } catch (error) {
313
- throw error;
314
- }
315
- }
316
- /**
317
- * Revoke all devices except current
318
- */
319
- async revokeAllDevices() {
320
- try {
321
- const response = await api.revokeAllDevices();
322
- return response.revokedCount;
323
- } catch (error) {
324
- throw error;
325
- }
326
- }
327
- };
328
- var twoFactorService = new TwoFactorService();
329
- var deviceTrustService = new DeviceTrustService();
330
- function displayQRCode(url) {
331
- log.newline();
332
- log.info("Scan diesen QR-Code mit deiner Authenticator App:");
333
- log.newline();
334
- log.dim("(QR-Code-Anzeige erfordert qrcode-terminal Paket)");
335
- log.newline();
336
- log.plain(`URL: ${url}`);
337
- log.newline();
338
- }
339
- function displayBackupCodes(codes) {
340
- log.newline();
341
- console.log(colors.orange.bold("Backup-Codes (speichern!)"));
342
- console.log(colors.dim("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
343
- log.newline();
344
- for (let i = 0; i < codes.length; i++) {
345
- console.log(` ${i + 1}. ${codes[i]}`);
346
- }
347
- log.newline();
348
- log.warn("Diese Codes k\xF6nnen nur einmal verwendet werden!");
349
- log.dim("Speichere sie an einem sicheren Ort.");
350
- log.newline();
351
- }
352
- function displayDevices(devices) {
353
- log.newline();
354
- console.log(colors.orange.bold("Vertrauensw\xFCrdige Ger\xE4te"));
355
- console.log(colors.dim("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
356
- log.newline();
357
- if (devices.length === 0) {
358
- log.dim("Keine Ger\xE4te registriert");
359
- return;
360
- }
361
- for (const device of devices) {
362
- const current = device.isCurrent ? colors.green(" (aktuell)") : "";
363
- console.log(` ${device.name}${current}`);
364
- log.dim(` ID: ${device.id}`);
365
- log.dim(` Zuletzt: ${formatRelativeTime(device.lastUsed)}`);
366
- if (device.expiresAt) {
367
- log.dim(` L\xE4uft ab: ${formatRelativeTime(device.expiresAt)}`);
368
- } else {
369
- log.dim(" L\xE4uft ab: nie");
370
- }
371
- log.newline();
372
- }
373
- }
374
- function formatRelativeTime(dateStr) {
375
- const date = new Date(dateStr);
376
- const now = /* @__PURE__ */ new Date();
377
- const diffMs = now.getTime() - date.getTime();
378
- const diffSec = Math.floor(diffMs / 1e3);
379
- const diffMin = Math.floor(diffSec / 60);
380
- const diffHour = Math.floor(diffMin / 60);
381
- const diffDay = Math.floor(diffHour / 24);
382
- if (diffSec < 60) return "gerade eben";
383
- if (diffMin < 60) return `vor ${diffMin} Minuten`;
384
- if (diffHour < 24) return `vor ${diffHour} Stunden`;
385
- if (diffDay < 30) return `vor ${diffDay} Tagen`;
386
- return date.toLocaleDateString("de-DE");
387
- }
388
-
389
- // src/services/auth/auth.ts
390
- var PORT_RANGE_START = 9876;
391
- var PORT_RANGE_END = 9886;
392
- async function loginWithOtp(email) {
393
- try {
394
- log.info(`Sende Login-Code an ${email}...`);
395
- const otpResponse = await api.requestOtp(email);
396
- if (!otpResponse.success) {
397
- log.error(otpResponse.message || "Fehler beim Senden des Codes");
398
- return false;
399
- }
400
- log.success("Code wurde gesendet!");
401
- log.dim(`Verbleibende Versuche: ${otpResponse.remainingAttempts}`);
402
- log.newline();
403
- const { otp } = await inquirer.prompt([
404
- {
405
- type: "input",
406
- name: "otp",
407
- message: "Code eingeben:",
408
- validate: (input) => {
409
- if (!/^\d{6}$/.test(input)) {
410
- return "Bitte gib den 6-stelligen Code ein";
411
- }
412
- return true;
413
- }
414
- }
415
- ]);
416
- const authResponse = await api.verifyOtp(otpResponse.token, otp);
417
- if (authResponse.requires2FA && authResponse.tempToken) {
418
- log.newline();
419
- log.info("2FA ist aktiviert. Bitte verifiziere dich.");
420
- log.newline();
421
- const result = await handle2FALoginFlow(authResponse.tempToken, authResponse.email || email);
422
- return result;
423
- }
424
- if (!authResponse.success || !authResponse.token || !authResponse.user) {
425
- log.error(authResponse.message || "Ung\xFCltiger Code");
426
- return false;
427
- }
428
- setAuth(authResponse.token, authResponse.user);
429
- log.newline();
430
- log.success(`Angemeldet als ${authResponse.user.email} (${authResponse.user.tier.toUpperCase()})`);
431
- return true;
432
- } catch (error) {
433
- const message = error instanceof Error ? error.message : "Unbekannter Fehler";
434
- log.error(`Login fehlgeschlagen: ${message}`);
435
- return false;
436
- }
437
- }
438
- async function handle2FALoginFlow(tempToken, email) {
439
- const MAX_ATTEMPTS = 3;
440
- for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
441
- const { code } = await inquirer.prompt([{
442
- type: "input",
443
- name: "code",
444
- message: "2FA-Code (6 Ziffern oder Backup-Code):",
445
- validate: (input) => {
446
- if (/^\d{6}$/.test(input) || /^[A-Za-z0-9-]+$/.test(input)) {
447
- return true;
448
- }
449
- return "Bitte gib einen g\xFCltigen Code ein";
450
- }
451
- }]);
452
- const { rememberDevice } = await inquirer.prompt([{
453
- type: "confirm",
454
- name: "rememberDevice",
455
- message: "Diesem Ger\xE4t vertrauen?",
456
- default: true
457
- }]);
458
- try {
459
- const result = await api.validate2FALogin({
460
- tempToken,
461
- code,
462
- rememberDevice
463
- });
464
- if (result.success && result.token && result.user) {
465
- setAuth(result.token, result.user);
466
- if (result.method === "backup" && result.backupCodesRemaining !== void 0) {
467
- log.warn(`Backup-Code verwendet. Noch ${result.backupCodesRemaining} Codes \xFCbrig.`);
468
- }
469
- log.newline();
470
- log.success(`Angemeldet als ${result.user.email} (${result.user.tier.toUpperCase()})`);
471
- return true;
472
- }
473
- if (attempt < MAX_ATTEMPTS) {
474
- log.error(`Ung\xFCltiger Code. Noch ${MAX_ATTEMPTS - attempt} Versuche.`);
475
- }
476
- } catch (error) {
477
- const message = error instanceof Error ? error.message : "Verifizierung fehlgeschlagen";
478
- if (message.includes("expired") || message.includes("abgelaufen")) {
479
- log.error("2FA-Token abgelaufen. Bitte erneut anmelden.");
480
- return false;
481
- }
482
- if (attempt < MAX_ATTEMPTS) {
483
- log.error(`${message}. Noch ${MAX_ATTEMPTS - attempt} Versuche.`);
484
- }
485
- }
486
- }
487
- log.error("2FA-Verifizierung fehlgeschlagen");
488
- return false;
489
- }
490
- async function findAvailablePort() {
491
- for (let port = PORT_RANGE_START; port <= PORT_RANGE_END; port++) {
492
- const isAvailable = await checkPort(port);
493
- if (isAvailable) {
494
- return port;
495
- }
496
- }
497
- throw new Error("Kein freier Port f\xFCr Callback-Server gefunden");
498
- }
499
- function checkPort(port) {
500
- return new Promise((resolve) => {
501
- const server = http.createServer();
502
- server.once("error", () => resolve(false));
503
- server.once("listening", () => {
504
- server.close();
505
- resolve(true);
506
- });
507
- server.listen(port, "127.0.0.1");
508
- });
509
- }
510
- function getCallbackHtml(type, data) {
511
- const baseStyles = `
512
- * { margin: 0; padding: 0; box-sizing: border-box; }
513
- body {
514
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
515
- min-height: 100vh;
516
- display: flex;
517
- align-items: center;
518
- justify-content: center;
519
- background: linear-gradient(135deg, #0a0a0a 0%, #1a1a2e 50%, #16213e 100%);
520
- color: #fff;
521
- }
522
- .container {
523
- text-align: center;
524
- padding: 3rem;
525
- max-width: 420px;
526
- }
527
- .logo {
528
- width: 80px;
529
- height: 80px;
530
- margin: 0 auto 1.5rem;
531
- background: linear-gradient(135deg, #f97316 0%, #ea580c 100%);
532
- border-radius: 20px;
533
- display: flex;
534
- align-items: center;
535
- justify-content: center;
536
- box-shadow: 0 10px 40px rgba(249, 115, 22, 0.3);
537
- }
538
- .logo svg {
539
- width: 48px;
540
- height: 48px;
541
- }
542
- h1 {
543
- font-size: 1.75rem;
544
- font-weight: 700;
545
- margin-bottom: 0.75rem;
546
- }
547
- .subtitle {
548
- color: #9ca3af;
549
- font-size: 1rem;
550
- line-height: 1.5;
551
- }
552
- .email {
553
- color: #f97316;
554
- font-weight: 600;
555
- }
556
- .status-icon {
557
- width: 64px;
558
- height: 64px;
559
- margin: 0 auto 1.5rem;
560
- border-radius: 50%;
561
- display: flex;
562
- align-items: center;
563
- justify-content: center;
564
- }
565
- .status-icon.success {
566
- background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
567
- box-shadow: 0 10px 40px rgba(34, 197, 94, 0.3);
568
- }
569
- .status-icon.error {
570
- background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
571
- box-shadow: 0 10px 40px rgba(239, 68, 68, 0.3);
572
- }
573
- .status-icon svg {
574
- width: 32px;
575
- height: 32px;
576
- }
577
- .spinner {
578
- width: 48px;
579
- height: 48px;
580
- margin: 0 auto 1.5rem;
581
- border: 3px solid rgba(249, 115, 22, 0.2);
582
- border-top-color: #f97316;
583
- border-radius: 50%;
584
- animation: spin 1s linear infinite;
585
- }
586
- @keyframes spin {
587
- to { transform: rotate(360deg); }
588
- }
589
- .hint {
590
- margin-top: 1.5rem;
591
- padding-top: 1.5rem;
592
- border-top: 1px solid rgba(255, 255, 255, 0.1);
593
- color: #6b7280;
594
- font-size: 0.875rem;
595
- }
596
- `;
597
- const shivaLogo = `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>`;
598
- const checkIcon = `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>`;
599
- const xIcon = `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>`;
600
- if (type === "success") {
601
- return `<!DOCTYPE html>
602
- <html lang="de">
603
- <head>
604
- <meta charset="UTF-8">
605
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
606
- <title>SHIVA CLI - Angemeldet</title>
607
- <style>${baseStyles}</style>
608
- </head>
609
- <body>
610
- <div class="container">
611
- <div class="status-icon success">${checkIcon}</div>
612
- <h1>Erfolgreich angemeldet!</h1>
613
- <p class="subtitle">Willkommen zur\xFCck, <span class="email">${data.email}</span></p>
614
- <p class="hint">Du kannst dieses Fenster jetzt schlie\xDFen und zum Terminal zur\xFCckkehren.</p>
615
- </div>
616
- <script>setTimeout(() => window.close(), 3000);</script>
617
- </body>
618
- </html>`;
619
- }
620
- if (type === "error") {
621
- return `<!DOCTYPE html>
622
- <html lang="de">
623
- <head>
624
- <meta charset="UTF-8">
625
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
626
- <title>SHIVA CLI - Fehler</title>
627
- <style>${baseStyles}</style>
628
- </head>
629
- <body>
630
- <div class="container">
631
- <div class="status-icon error">${xIcon}</div>
632
- <h1>Anmeldung fehlgeschlagen</h1>
633
- <p class="subtitle">${data.message || "Ein unbekannter Fehler ist aufgetreten."}</p>
634
- <p class="hint">Du kannst dieses Fenster schlie\xDFen und es erneut versuchen.</p>
635
- </div>
636
- </body>
637
- </html>`;
638
- }
639
- return `<!DOCTYPE html>
640
- <html lang="de">
641
- <head>
642
- <meta charset="UTF-8">
643
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
644
- <title>SHIVA CLI</title>
645
- <style>${baseStyles}</style>
646
- </head>
647
- <body>
648
- <div class="container">
649
- <div class="logo">${shivaLogo}</div>
650
- <div class="spinner"></div>
651
- <h1>SHIVA CLI</h1>
652
- <p class="subtitle">Warte auf Login-Callback...</p>
653
- </div>
654
- </body>
655
- </html>`;
656
- }
657
- function startCallbackServer(port) {
658
- return new Promise((resolve, reject) => {
659
- const server = http.createServer((req, res) => {
660
- const url = new URL(req.url || "/", `http://127.0.0.1:${port}`);
661
- if (url.pathname === "/callback") {
662
- const token = url.searchParams.get("token");
663
- const userId = url.searchParams.get("userId");
664
- const email = url.searchParams.get("email");
665
- const tier = url.searchParams.get("tier");
666
- const error = url.searchParams.get("error");
667
- if (error) {
668
- res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
669
- res.end(getCallbackHtml("error", { message: error }));
670
- server.close();
671
- reject(new Error(error));
672
- return;
673
- }
674
- if (!token || !userId || !email) {
675
- res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
676
- res.end(getCallbackHtml("error", { message: "Token oder Benutzer-Daten fehlen." }));
677
- server.close();
678
- reject(new Error("Ung\xFCltige Callback-Parameter"));
679
- return;
680
- }
681
- res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
682
- res.end(getCallbackHtml("success", { email }));
683
- server.close();
684
- resolve({
685
- token,
686
- user: {
687
- id: parseInt(userId, 10),
688
- email,
689
- tier: tier || "free"
690
- }
691
- });
692
- return;
693
- }
694
- res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
695
- res.end(getCallbackHtml("waiting", {}));
696
- });
697
- const timeout = setTimeout(() => {
698
- server.close();
699
- reject(new Error("Login-Timeout - keine Antwort erhalten"));
700
- }, 12e4);
701
- server.once("close", () => {
702
- clearTimeout(timeout);
703
- });
704
- server.once("error", (err) => {
705
- clearTimeout(timeout);
706
- reject(err);
707
- });
708
- server.listen(port, "127.0.0.1");
709
- });
710
- }
711
- async function loginWithBrowser() {
712
- const config = getConfig();
713
- try {
714
- const port = await findAvailablePort();
715
- const callbackUrl = `http://127.0.0.1:${port}/callback`;
716
- const baseUrl = config.apiEndpoint.replace("/api", "");
717
- const loginUrl = `${baseUrl}/auth/cli-login?callback=${encodeURIComponent(callbackUrl)}`;
718
- const serverPromise = startCallbackServer(port);
719
- log.newline();
720
- log.info("\xD6ffne Browser zur Anmeldung...");
721
- try {
722
- await open(loginUrl);
723
- } catch {
724
- }
725
- log.newline();
726
- log.plain("Bitte \xF6ffne diese URL in deinem Browser um die Anmeldung abzuschlie\xDFen:");
727
- log.newline();
728
- console.log(` ${colors.cyan(loginUrl)}`);
729
- log.newline();
730
- log.dim("Warte auf Anmeldung... (Timeout: 2 Minuten)");
731
- log.newline();
732
- const result = await serverPromise;
733
- setAuth(result.token, result.user);
734
- try {
735
- const tfaStatus = await twoFactorService.getStatus();
736
- if (tfaStatus.enabled) {
737
- log.newline();
738
- log.info("2FA ist aktiviert. Bitte verifiziere dich.");
739
- log.newline();
740
- const isDeviceTrusted = await deviceTrustService.isDeviceTrusted();
741
- if (!isDeviceTrusted) {
742
- const verified = await prompt2FAVerification();
743
- if (!verified) {
744
- clearAuth();
745
- log.error("2FA-Verifizierung fehlgeschlagen");
746
- return false;
747
- }
748
- const { trustDevice } = await inquirer.prompt([{
749
- type: "confirm",
750
- name: "trustDevice",
751
- message: "Diesem Ger\xE4t vertrauen?",
752
- default: true
753
- }]);
754
- if (trustDevice) {
755
- try {
756
- await deviceTrustService.trustDevice();
757
- log.success("Ger\xE4t als vertrauensw\xFCrdig markiert");
758
- } catch {
759
- }
760
- }
761
- } else {
762
- log.dim("Ger\xE4t ist vertrauensw\xFCrdig - 2FA \xFCbersprungen");
763
- }
764
- }
765
- } catch {
766
- }
767
- log.success(`Angemeldet als ${result.user.email} (${result.user.tier.toUpperCase()})`);
768
- return true;
769
- } catch (error) {
770
- const message = error instanceof Error ? error.message : "Unbekannter Fehler";
771
- log.error(`Login fehlgeschlagen: ${message}`);
772
- log.newline();
773
- log.info("Fallback: Manueller Token-Eintrag");
774
- const loginUrl = `${config.apiEndpoint.replace("/api", "")}/auth/cli-login`;
775
- log.dim(`URL: ${loginUrl}`);
776
- log.newline();
777
- const { useManual } = await inquirer.prompt([{
778
- type: "confirm",
779
- name: "useManual",
780
- message: "Token manuell eingeben?",
781
- default: true
782
- }]);
783
- if (!useManual) {
784
- return false;
785
- }
786
- try {
787
- await open(loginUrl);
788
- } catch {
789
- log.dim("Browser konnte nicht ge\xF6ffnet werden");
790
- log.dim(`\xD6ffne manuell: ${loginUrl}`);
791
- }
792
- const { token } = await inquirer.prompt([{
793
- type: "password",
794
- name: "token",
795
- message: "Token:",
796
- mask: "*"
797
- }]);
798
- if (!token) {
799
- log.error("Kein Token eingegeben");
800
- return false;
801
- }
802
- setAuth(token, { id: 0, email: "", tier: "free" });
803
- try {
804
- const response = await api.getCurrentUser();
805
- setAuth(token, response.user);
806
- log.success(`Angemeldet als ${response.user.email}`);
807
- return true;
808
- } catch {
809
- clearAuth();
810
- log.error("Ung\xFCltiger Token");
811
- return false;
812
- }
813
- }
814
- }
815
- function logout() {
816
- clearAuth();
817
- log.success("Abgemeldet");
818
- }
819
- async function prompt2FAVerification() {
820
- const MAX_ATTEMPTS = 3;
821
- for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
822
- const { method } = await inquirer.prompt([{
823
- type: "list",
824
- name: "method",
825
- message: "Verifizierungsmethode:",
826
- choices: [
827
- { name: "Authenticator App Code", value: "totp" },
828
- { name: "Backup Code", value: "backup" },
829
- { name: "Abbrechen", value: "cancel" }
830
- ]
831
- }]);
832
- if (method === "cancel") {
833
- return false;
834
- }
835
- const promptMessage = method === "totp" ? "6-stelliger Code aus deiner Authenticator App:" : "Backup-Code (Format: XXX-XXX-XXX-XXX):";
836
- const { code } = await inquirer.prompt([{
837
- type: "input",
838
- name: "code",
839
- message: promptMessage,
840
- validate: (input) => {
841
- if (method === "totp") {
842
- return /^\d{6}$/.test(input) || "Bitte gib einen 6-stelligen Code ein";
843
- }
844
- return input.length > 0 || "Bitte gib einen Backup-Code ein";
845
- }
846
- }]);
847
- try {
848
- let verified = false;
849
- if (method === "totp") {
850
- verified = await twoFactorService.verifyCode(code);
851
- } else {
852
- verified = await twoFactorService.verifyBackupCode(code);
853
- }
854
- if (verified) {
855
- log.success("2FA-Verifizierung erfolgreich");
856
- return true;
857
- }
858
- } catch (error) {
859
- }
860
- if (attempt < MAX_ATTEMPTS) {
861
- log.error(`Ung\xFCltiger Code. Noch ${MAX_ATTEMPTS - attempt} Versuche.`);
862
- }
863
- }
864
- return false;
865
- }
866
-
867
- // src/i18n/locales/de.json
868
- var de_default = {
869
- common: {
870
- yes: "Ja",
871
- no: "Nein",
872
- cancel: "Abbrechen",
873
- confirm: "Bestatigen",
874
- success: "Erfolgreich!",
875
- failed: "Fehlgeschlagen",
876
- loading: "Laden...",
877
- goodbye: "Auf Wiedersehen!",
878
- cancelled: "Abgebrochen.",
879
- continue: "Fortfahren",
880
- back: "Zuruck",
881
- save: "Speichern",
882
- delete: "Loschen",
883
- edit: "Bearbeiten",
884
- create: "Erstellen",
885
- open: "Offnen",
886
- close: "Schliessen",
887
- search: "Suchen",
888
- filter: "Filtern",
889
- all: "Alle",
890
- none: "Keine",
891
- unknown: "Unbekannt",
892
- enabled: "Aktiviert",
893
- disabled: "Deaktiviert",
894
- total: "Gesamt",
895
- date: "Datum",
896
- time: "Zeit",
897
- name: "Name",
898
- value: "Wert",
899
- type: "Typ",
900
- status: "Status",
901
- description: "Beschreibung",
902
- actions: "Aktionen",
903
- settings: "Einstellungen",
904
- help: "Hilfe",
905
- version: "Version",
906
- forceOption: "Ohne Bestatigung",
907
- pressAnyKey: "Beliebige Taste drucken um fortzufahren..."
908
- },
909
- auth: {
910
- notLoggedIn: "Nicht angemeldet",
911
- loginWith: "Anmelden mit: shiva login",
912
- loginSuccess: "Erfolgreich angemeldet!",
913
- logoutSuccess: "Erfolgreich abgemeldet.",
914
- alreadyLoggedIn: "Bereits angemeldet als {email}",
915
- loginCancelled: "Login abgebrochen.",
916
- otpSent: "Login-Code wurde gesendet.",
917
- otpInvalid: "Ungultiger Code.",
918
- enterEmail: "Email-Adresse:",
919
- enterOtp: "Login-Code eingeben:",
920
- reloginQuestion: "Mochtest du dich neu anmelden?",
921
- invalidEmail: "Bitte gib eine gultige Email-Adresse ein",
922
- twoFactorEnabled: "2FA aktiviert.",
923
- twoFactorDisabled: "2FA deaktiviert.",
924
- invalidToken: "Ungultiger Token."
925
- },
926
- errors: {
927
- unknown: "Ein unbekannter Fehler ist aufgetreten",
928
- network: "Netzwerkfehler. Prufe deine Verbindung.",
929
- notFound: "Nicht gefunden: {item}",
930
- permissionDenied: "Keine Berechtigung",
931
- apiError: "API-Fehler",
932
- fileNotFound: "Datei nicht gefunden: {file}",
933
- invalidFormat: "Ungultiges Format",
934
- alreadyExists: "Existiert bereits: {item}",
935
- notSupported: "Nicht unterstutzt",
936
- timeout: "Zeituberschreitung",
937
- invalidInput: "Ungultige Eingabe",
938
- clipboardFailed: "Zwischenablage-Fehler"
939
- },
940
- commands: {
941
- login: {
942
- description: "Mit shiva.li anmelden",
943
- emailOption: "Email-Adresse fur OTP-Login",
944
- otpOption: "OTP-Login statt Browser verwenden"
945
- },
946
- logout: {
947
- description: "Von shiva.li abmelden"
948
- },
949
- secrets: {
950
- description: "API Keys und Secrets verwalten (Cloud Vault)",
951
- vault: "SHIVA Secrets Vault",
952
- global: "Global:",
953
- projectSpecific: "Projekt-spezifisch:",
954
- noSecrets: "Keine Secrets gespeichert",
955
- addHint: "Secret hinzufugen: shiva secrets add <KEY> <VALUE>",
956
- listDesc: "Alle Secrets anzeigen",
957
- addDesc: "Secret hinzufugen",
958
- removeDesc: "Secret entfernen",
959
- getDesc: "Secret-Wert anzeigen (maskiert)",
960
- envDesc: "Secrets als .env Format ausgeben",
961
- importDesc: ".env Datei in Vault importieren",
962
- exportDesc: "Secrets exportieren",
963
- saved: 'Secret "{key}" gespeichert!',
964
- deleted: 'Secret "{key}" geloscht',
965
- copied: 'Secret "{key}" in Zwischenablage kopiert',
966
- autoCleared: "Wird nach 30 Sekunden automatisch geloscht...",
967
- invalidName: "Ungultiger Secret-Name",
968
- nameFormat: "Format: GROSSBUCHSTABEN_MIT_UNTERSTRICHEN",
969
- valueRequired: "Wert erforderlich",
970
- confirmSave: "Secret speichern?",
971
- confirmDelete: 'Secret "{key}" wirklich loschen?',
972
- loadingSecrets: "Lade Secrets...",
973
- savingSecret: "Speichere Secret...",
974
- deletingSecret: "Losche Secret...",
975
- exportingSecrets: "Exportiere Secrets...",
976
- importingSecrets: "Importiere Secrets...",
977
- fileContainsSensitive: "Diese Datei enthalt sensible Daten!",
978
- addToGitignore: "Zur .gitignore hinzufugen!",
979
- secretsImported: "{count} Secret(s) erfolgreich importiert",
980
- secretsFailed: "{count} Secret(s) fehlgeschlagen",
981
- noValidSecrets: "Keine gultigen Secrets in Datei gefunden",
982
- dryRunInfo: "Dry-run: Keine Anderungen vorgenommen",
983
- showValue: "Wert anzeigen?",
984
- revealWarning: "Secret-Werte werden im Terminal angezeigt!",
985
- revealHint: "Vollstandiger Wert mit --reveal oder -r anzeigen",
986
- secretsToImport: "Secrets zum Import"
987
- },
988
- remember: {
989
- description: "Memory in der Cloud speichern",
990
- saved: "Memory gespeichert!",
991
- category: "Kategorie: {category}"
992
- },
993
- search: {
994
- description: "In Memories suchen",
995
- header: "SHIVA Code - Suche",
996
- noResults: "Keine Ergebnisse gefunden",
997
- enterQuery: "Suchbegriff eingeben:",
998
- searching: "Suche...",
999
- resultsFound: "{count} Ergebnis(se) gefunden"
1000
- },
1001
- forget: {
1002
- description: "Memories loschen (GDPR)",
1003
- header: "SHIVA Code - Forget",
1004
- warning: "WARNUNG: Alle Memories loschen",
1005
- confirmDelete: "Memories wirklich loschen?",
1006
- deleted: "Memories geloscht",
1007
- selectMemories: "Memories zum Loschen auswahlen:"
1008
- },
1009
- sessions: {
1010
- description: "Alle Claude Code Sessions auflisten",
1011
- header: "SHIVA Code - Sessions",
1012
- noSessions: "Keine Sessions gefunden.",
1013
- branch: "Branch",
1014
- messages: "Nachrichten",
1015
- selectSession: "Session auswahlen:"
1016
- },
1017
- resume: {
1018
- description: "Session fortsetzen",
1019
- selectSession: "Session zum Fortsetzen auswahlen:",
1020
- starting: "Starte Session..."
1021
- },
1022
- restore: {
1023
- description: "Crashed Session wiederherstellen",
1024
- selectSession: "Session zum Wiederherstellen auswahlen:",
1025
- restored: "Session wiederhergestellt"
1026
- },
1027
- start: {
1028
- description: "Mehrere Projekte starten",
1029
- selectProjects: "Projekte zum Starten auswahlen:",
1030
- starting: "Starte {count} Projekt(e)...",
1031
- dockerMode: "Docker-Modus",
1032
- sandboxMode: "Sandbox-Modus"
1033
- },
1034
- init: {
1035
- description: "Projekt fur SHIVA Code initialisieren",
1036
- detected: "Erkannt",
1037
- initialized: "Projekt initialisiert!",
1038
- alreadyInitialized: "Projekt bereits initialisiert",
1039
- confirmInit: "Projekt initialisieren?",
1040
- creatingProject: "Erstelle Projekt..."
1041
- },
1042
- sync: {
1043
- description: "Projekt mit Cloud synchronisieren",
1044
- synced: "Synchronisiert",
1045
- batchSync: "SHIVA Code - Batch Sync",
1046
- syncing: "Synchronisiere...",
1047
- noChanges: "Keine Anderungen"
1048
- },
1049
- status: {
1050
- description: "Projekt-Status anzeigen",
1051
- header: "SHIVA Code - Status",
1052
- notInitialized: "Projekt nicht initialisiert. Nutze: shiva init"
1053
- },
1054
- projects: {
1055
- description: "Alle Projekte auflisten",
1056
- header: "SHIVA Code - Projekte",
1057
- noProjects: "Keine Projekte gefunden."
1058
- },
1059
- connect: {
1060
- description: "Projekt mit Cloud verbinden",
1061
- connected: "Projekt verbunden",
1062
- selectProject: "Projekt auswahlen:"
1063
- },
1064
- disconnect: {
1065
- description: "Projekt von Cloud trennen",
1066
- disconnected: "Projekt getrennt"
1067
- },
1068
- config: {
1069
- description: "Einstellungen verwalten",
1070
- header: "SHIVA Konfiguration",
1071
- claudeHeader: "Claude Code Einstellungen",
1072
- syncHeader: "Settings Sync Status",
1073
- featuresHeader: "Feature-Flags",
1074
- getDesc: "Einstellung anzeigen",
1075
- setDesc: "Einstellung setzen",
1076
- listDesc: "Alle Einstellungen anzeigen",
1077
- resetDesc: "Einstellungen zurucksetzen",
1078
- updated: "Einstellung aktualisiert",
1079
- currentValue: "Aktueller Wert: {value}",
1080
- invalidKey: "Ungultige Einstellung: {key}",
1081
- invalidValue: "Ungultiger Wert: {value}",
1082
- languageSet: "Sprache auf {lang} gesetzt",
1083
- invalidLanguage: "Ungultige Sprache. Verfugbar: {valid}"
1084
- },
1085
- issues: {
1086
- description: "GitHub Issues anzeigen",
1087
- header: "GitHub Issues",
1088
- noIssues: "Keine Issues gefunden",
1089
- selectIssue: "Issue auswahlen:",
1090
- creating: "Erstelle Issue..."
1091
- },
1092
- prs: {
1093
- description: "Pull Requests anzeigen",
1094
- header: "Pull Requests",
1095
- noPRs: "Keine Pull Requests gefunden",
1096
- selectPR: "PR auswahlen:"
1097
- },
1098
- github: {
1099
- description: "GitHub Integration",
1100
- header: "GitHub",
1101
- notInstalled: "GitHub CLI (gh) nicht installiert",
1102
- notAuthenticated: "GitHub CLI nicht authentifiziert",
1103
- notGitRepo: "Kein Git Repository",
1104
- notGithubRepo: "Kein GitHub Repository",
1105
- statusDesc: "GitHub Status anzeigen",
1106
- loginDesc: "Bei GitHub anmelden",
1107
- initDesc: "GitHub Repository initialisieren"
1108
- },
1109
- doctor: {
1110
- description: "System-Check",
1111
- header: "SHIVA Code - Doctor",
1112
- checking: "Prufe System...",
1113
- allGood: "Alles in Ordnung!",
1114
- issuesFound: "{count} Problem(e) gefunden"
1115
- },
1116
- stats: {
1117
- description: "Analytics anzeigen",
1118
- header: "SHIVA Code - Statistiken",
1119
- loading: "Lade Statistiken..."
1120
- },
1121
- upgrade: {
1122
- description: "SHIVA aktualisieren",
1123
- checking: "Prufe auf Updates...",
1124
- upToDate: "SHIVA ist aktuell (Version {version})",
1125
- newVersion: "Neue Version verfugbar: {version}",
1126
- upgrading: "Aktualisiere...",
1127
- upgraded: "SHIVA auf Version {version} aktualisiert"
1128
- },
1129
- telemetry: {
1130
- description: "Telemetrie-Einstellungen",
1131
- enabled: "Telemetrie aktiviert",
1132
- disabled: "Telemetrie deaktiviert"
1133
- },
1134
- completions: {
1135
- description: "Shell-Completions installieren",
1136
- installed: "Completions installiert fur {shell}",
1137
- installHint: "Starte deine Shell neu fur die Anderungen"
1138
- },
1139
- docker: {
1140
- description: "Docker-Modus verwalten",
1141
- header: "SHIVA Code - Docker",
1142
- notAvailable: "Docker ist nicht verfugbar",
1143
- starting: "Docker-Container wird gestartet...",
1144
- started: "Docker-Container gestartet",
1145
- stopped: "Docker-Container gestoppt",
1146
- statusDesc: "Docker-Status anzeigen",
1147
- startDesc: "Docker-Container starten",
1148
- stopDesc: "Docker-Container stoppen",
1149
- logsDesc: "Docker-Logs anzeigen"
1150
- },
1151
- sandbox: {
1152
- description: "Sandbox verwalten",
1153
- header: "SHIVA Code - Sandbox",
1154
- created: "Sandbox erstellt",
1155
- applied: "Sandbox-Anderungen ubernommen",
1156
- discarded: "Sandbox verworfen",
1157
- listDesc: "Alle Sandboxes anzeigen",
1158
- createDesc: "Neue Sandbox erstellen",
1159
- applyDesc: "Sandbox-Anderungen ubernehmen",
1160
- discardDesc: "Sandbox verwerfen"
1161
- },
1162
- workflow: {
1163
- description: "Workflows verwalten",
1164
- header: "SHIVA Code - Workflows"
1165
- },
1166
- hook: {
1167
- description: "Hooks verwalten",
1168
- header: "SHIVA Code - Hooks"
1169
- },
1170
- package: {
1171
- description: "Projekt-Gruppen verwalten",
1172
- header: "SHIVA Code - Packages",
1173
- noPackages: "Keine Packages gefunden",
1174
- createDesc: "Neues Package erstellen",
1175
- listDesc: "Alle Packages anzeigen",
1176
- addDesc: "Projekt zu Package hinzufugen",
1177
- removeDesc: "Projekt aus Package entfernen",
1178
- deleteDesc: "Package loschen",
1179
- created: 'Package "{name}" erstellt',
1180
- deleted: 'Package "{name}" geloscht',
1181
- projectAdded: "Projekt zu Package hinzugefugt",
1182
- projectRemoved: "Projekt aus Package entfernt"
1183
- },
1184
- context: {
1185
- description: "Context anzeigen",
1186
- header: "SHIVA Code - Context",
1187
- noContext: "Kein Context gefunden"
1188
- },
1189
- tags: {
1190
- description: "Session-Tags verwalten",
1191
- header: "SHIVA Code - Tags",
1192
- noTags: "Keine Tags gefunden"
1193
- },
1194
- export: {
1195
- description: "Sessions exportieren",
1196
- header: "SHIVA Code - Export",
1197
- exported: "Exportiert nach {file}",
1198
- selectFormat: "Format auswahlen:"
1199
- },
1200
- import: {
1201
- description: "Sessions importieren",
1202
- header: "SHIVA Code - Import",
1203
- imported: "{count} Session(s) importiert",
1204
- selectFile: "Datei auswahlen:"
1205
- },
1206
- user: {
1207
- description: "Benutzer-Informationen",
1208
- header: "SHIVA Code - Benutzer"
1209
- },
1210
- welcome: {
1211
- description: "Willkommen-Nachricht anzeigen"
1212
- },
1213
- validate: {
1214
- description: "Projekt validieren",
1215
- header: "SHIVA Code - Validierung",
1216
- valid: "Projekt ist gultig",
1217
- invalid: "Projekt ist ungultig"
1218
- },
1219
- scan: {
1220
- description: "Package auf Sicherheit prufen",
1221
- header: "SHIVA Code - Security Scan",
1222
- scanning: "Scanne...",
1223
- noIssues: "Keine Sicherheitsprobleme gefunden",
1224
- issuesFound: "{count} Sicherheitsproblem(e) gefunden"
1225
- },
1226
- security: {
1227
- description: "Sicherheitseinstellungen",
1228
- header: "SHIVA Code - Security"
1229
- },
1230
- secureToken: {
1231
- description: "Token sicher speichern"
1232
- },
1233
- project: {
1234
- description: "Projekt-Informationen",
1235
- header: "SHIVA Code - Projekt"
1236
- },
1237
- repair: {
1238
- description: "Projekt reparieren",
1239
- header: "SHIVA Code - Repair",
1240
- repaired: "Projekt repariert"
1241
- },
1242
- help: {
1243
- description: "Hilfe und Dokumentation",
1244
- header: "SHIVA Code - Hilfe",
1245
- topics: "Themen:",
1246
- quickstart: "Schnellstart",
1247
- commands: "Commands Ubersicht",
1248
- memory: "Memory System",
1249
- secrets: "Secrets Verwaltung",
1250
- troubleshooting: "Problemlosung",
1251
- onlineHelp: "Online Hilfe offnen"
1252
- }
1253
- },
1254
- controlStation: {
1255
- title: "SHIVA Control Station",
1256
- selection: "Auswahl:",
1257
- navigate: "navigate",
1258
- sessions: "Sessions",
1259
- sessionsDesc: "Alle anzeigen",
1260
- packages: "Packages",
1261
- packagesDesc: "Verwalten",
1262
- issues: "Issues",
1263
- issuesDesc: "GitHub Issues",
1264
- prs: "PRs",
1265
- prsDesc: "Pull Requests",
1266
- config: "Config",
1267
- configDesc: "Einstellungen",
1268
- help: "Hilfe",
1269
- helpDesc: "Dokumentation",
1270
- quit: "Beenden",
1271
- noSessionsFound: "Keine Sessions gefunden.",
1272
- startClaudeHint: "Starte Claude Code in einem Projekt",
1273
- orCreatePackage: 'Oder: shiva package create "Name"',
1274
- startingSession: "Starte Session in {project}...",
1275
- startingPackage: "Starte Package {name}...",
1276
- unknownCommand: "Unbekannter Befehl: {command}",
1277
- didYouMean: "Meintest du vielleicht:",
1278
- projects: "Projekte",
1279
- claudeNotInstalled: "Claude Code nicht installiert",
1280
- claudeInstallHint: "curl -fsSL https://claude.ai/install.sh | bash"
1281
- },
1282
- help: {
1283
- quickstart: {
1284
- title: "Schnellstart",
1285
- content: [
1286
- "1. shiva login - Anmelden",
1287
- "2. shiva init - Projekt initialisieren",
1288
- "3. shiva - Control Station offnen",
1289
- "4. shiva remember - Memory speichern",
1290
- "5. shiva secrets - Secrets verwalten"
1291
- ]
1292
- },
1293
- commandsOverview: {
1294
- title: "Commands Ubersicht",
1295
- sessionManagement: "Session-Verwaltung",
1296
- githubIntegration: "GitHub Integration",
1297
- memoryContext: "Memory & Context",
1298
- dockerIntegration: "Docker Integration",
1299
- security: "Security",
1300
- projectManagement: "Projekt-Verwaltung",
1301
- system: "System"
1302
- },
1303
- memorySystem: {
1304
- title: "Memory System",
1305
- description: "SHIVA speichert Informationen persistent in der Cloud.",
1306
- categories: {
1307
- identity: "User-Identitat (Name, Rolle)",
1308
- preference: "Praferenzen (Code-Style)",
1309
- convention: "Projekt-Konventionen",
1310
- solution: "Geloste Probleme",
1311
- task: "Aufgaben",
1312
- context: "Projekt-Kontext"
1313
- }
1314
- },
1315
- secretsManagement: {
1316
- title: "Secrets Verwaltung",
1317
- description: "Sichere Speicherung von API Keys und Secrets in der Cloud.",
1318
- features: [
1319
- "Ende-zu-Ende verschlusselt",
1320
- "Automatische Injektion in Sessions",
1321
- "Projekt-spezifische und globale Secrets",
1322
- "Import/Export von .env Dateien"
1323
- ]
1324
- },
1325
- troubleshooting: {
1326
- title: "Problemlosung",
1327
- commonIssues: {
1328
- notLoggedIn: "Nicht angemeldet",
1329
- notLoggedInSolution: "Nutze 'shiva login' zum Anmelden",
1330
- claudeNotFound: "Claude Code nicht gefunden",
1331
- claudeNotFoundSolution: "Installiere Claude Code mit dem offiziellen Installer",
1332
- networkError: "Netzwerkfehler",
1333
- networkErrorSolution: "Prufe deine Internetverbindung",
1334
- permissionDenied: "Keine Berechtigung",
1335
- permissionDeniedSolution: "Prufe Dateiberechtigungen oder starte mit sudo"
1336
- }
1337
- }
1338
- },
1339
- time: {
1340
- justNow: "gerade eben",
1341
- minutesAgo: "vor {count} Minute(n)",
1342
- hoursAgo: "vor {count} Stunde(n)",
1343
- daysAgo: "vor {count} Tag(en)",
1344
- weeksAgo: "vor {count} Woche(n)",
1345
- monthsAgo: "vor {count} Monat(en)"
1346
- },
1347
- onboarding: {
1348
- welcome: "Willkommen bei SHIVA Code!",
1349
- subtitle: "Macht Claude Code persistent",
1350
- selectLanguage: "Sprache wahlen:",
1351
- claudeCode: "Claude Code",
1352
- claudeNotFound: "Claude Code nicht gefunden",
1353
- claudeNotFoundDesc: "SHIVA erweitert Claude Code mit persistentem Speicher. Du brauchst Claude Code um SHIVA nutzen zu konnen.",
1354
- installation: "Installation:",
1355
- moreInfo: "Mehr Infos:",
1356
- continueAnyway: "Trotzdem fortfahren?",
1357
- restartAfterInstall: "Starte nach Installation erneut: shiva",
1358
- found: "Gefunden",
1359
- display: "Darstellung",
1360
- darkMode: "Dark Mode",
1361
- lightMode: "Light Mode",
1362
- recommended: "(empfohlen)",
1363
- themeSaved: "Theme gespeichert",
1364
- account: "Account",
1365
- accountFeatures: "Mit einem Account bekommst du:",
1366
- cloudSync: "Cloud-Sync fur Memories",
1367
- crossDeviceSessions: "Sessions zwischen Geraten",
1368
- secretsVault: "Secrets Vault (verschlusselt)",
1369
- loginNow: "Jetzt anmelden?",
1370
- openBrowser: "Offne Browser...",
1371
- loginLater: "Spater: shiva login",
1372
- integration: "Integration",
1373
- autoIntegration: "SHIVA integriert sich automatisch mit Claude Code:",
1374
- loadMemoriesOnStart: "Memories beim Start laden",
1375
- saveMemoriesOnExit: "Memories beim Beenden speichern",
1376
- enableAutoIntegration: "Auto-Integration aktivieren?",
1377
- hooksInstalled: "Hooks installiert",
1378
- hooksFailed: "Hook-Installation fehlgeschlagen",
1379
- hooksLater: "Spater: shiva hook install",
1380
- setupComplete: "Setup abgeschlossen!",
1381
- nextSteps: "Nachste Schritte:",
1382
- letsGo: "Los geht's:",
1383
- goToProject: "Zu deinem Projekt wechseln",
1384
- initShiva: "SHIVA initialisieren",
1385
- startClaude: "Claude Code starten",
1386
- commands: "Befehle:",
1387
- laterLogin: "Spater anmelden: shiva login"
1388
- },
1389
- account: {
1390
- description: "Account verwalten",
1391
- deleteDesc: "Account und ALLE Daten unwiderruflich loschen (GDPR)",
1392
- infoDesc: "Account-Informationen anzeigen",
1393
- header: "SHIVA Account",
1394
- deleteWarning: "ACCOUNT LOSCHEN - UNWIDERRUFLICH",
1395
- deleteWarning1: "Du bist dabei, deinen SHIVA Account vollstandig zu loschen.",
1396
- willBeDeleted: "Folgende Daten werden UNWIDERRUFLICH geloscht:",
1397
- allProjects: "Alle Projekte",
1398
- allMemories: "Alle Memories",
1399
- allSecrets: "Alle Secrets (API Keys)",
1400
- allSessions: "Alle Session-Daten",
1401
- allSettings: "Alle Einstellungen",
1402
- accountData: "Account-Daten (Email, Profil)",
1403
- cannotBeUndone: "Diese Aktion kann NICHT ruckgangig gemacht werden!",
1404
- confirmDelete1: "Verstanden - ich mochte meinen Account loschen",
1405
- enterEmail: "Zur Bestatigung deine Email eingeben ({email}):",
1406
- emailMismatch: "Email stimmt nicht uberein",
1407
- typeDelete: "Tippe DELETE zum Bestatigen:",
1408
- deleting: "Losche Account...",
1409
- deleted: "Account geloscht",
1410
- deleteFailed: "Loschen fehlgeschlagen",
1411
- deletedInfo: "Alle deine Daten wurden aus unseren Systemen entfernt.",
1412
- goodbye: "Danke, dass du SHIVA genutzt hast. Auf Wiedersehen!",
1413
- memberSince: "Mitglied seit",
1414
- usage: "Nutzung:",
1415
- projects: "Projekte",
1416
- memories: "Memories",
1417
- secrets: "Secrets",
1418
- sessions: "Sessions"
1419
- },
1420
- uninstall: {
1421
- description: "SHIVA vollstandig deinstallieren",
1422
- header: "Deinstallation",
1423
- localOption: "Nur lokale Daten loschen",
1424
- fullOption: "Vollstandige Deinstallation",
1425
- keepAccountOption: "Account-Daten behalten",
1426
- willBeRemoved: "Folgendes wird entfernt:",
1427
- globalConfig: "Globale Konfiguration",
1428
- claudeHooks: "Claude Code Hooks",
1429
- projectShivaDir: "Projekt .shiva/ Verzeichnis",
1430
- accountData: "Account-Daten auf Server",
1431
- npmPackage: "NPM Package",
1432
- nothingToRemove: "Keine lokalen Daten gefunden.",
1433
- runNpmUninstall: "Fuhre diesen Befehl aus um SHIVA zu entfernen:",
1434
- confirmUninstall: "SHIVA wirklich deinstallieren?",
1435
- accountWarning: "Dein Account und alle Cloud-Daten werden geloscht!",
1436
- confirmAccountDelete: "Account-Daten auch loschen?",
1437
- accountKept: "Account-Daten werden behalten.",
1438
- removingHooks: "Entferne Claude Hooks...",
1439
- hooksRemoved: "Claude Hooks entfernt",
1440
- hooksFailed: "Hooks entfernen fehlgeschlagen",
1441
- removingConfig: "Entferne Konfiguration...",
1442
- configRemoved: "Konfiguration entfernt",
1443
- configFailed: "Konfiguration entfernen fehlgeschlagen",
1444
- removingProjectDir: "Entferne .shiva/ Verzeichnis...",
1445
- projectDirRemoved: ".shiva/ Verzeichnis entfernt",
1446
- projectDirFailed: ".shiva/ entfernen fehlgeschlagen",
1447
- deletingAccount: "Losche Account-Daten...",
1448
- accountDeleted: "Account-Daten geloscht",
1449
- accountFailed: "Account loschen fehlgeschlagen",
1450
- complete: "Deinstallation abgeschlossen!",
1451
- partialSuccess: "Einige Schritte sind fehlgeschlagen.",
1452
- finalStep: "Letzter Schritt - fuhre aus:",
1453
- accountStillExists: "Hinweis: Dein Account existiert noch auf dem Server.",
1454
- deleteAccountHint: "Zum Loschen: shiva account delete",
1455
- thanksForUsing: "Danke, dass du SHIVA genutzt hast!"
1456
- },
1457
- projectDelete: {
1458
- deleteDesc: "Projekt und alle Daten loschen",
1459
- deleteIdOption: "Projekt-ID zum Loschen",
1460
- deleteWarning: "WARNUNG: Projekt wird unwiderruflich geloscht!",
1461
- notConnected: "Aktuelles Verzeichnis ist nicht mit einem Projekt verbunden",
1462
- memoriesCount: "Memories",
1463
- sessionsCount: "Sessions",
1464
- confirmDelete: "Projekt wirklich loschen?",
1465
- enterNameToConfirm: 'Zur Bestatigung "{name}" eingeben:',
1466
- deleting: "Losche Projekt...",
1467
- deleted: "Projekt geloscht",
1468
- deleteFailed: "Loschen fehlgeschlagen",
1469
- deletedInfo: "Alle Projektdaten wurden aus der Cloud entfernt."
1470
- }
1471
- };
1472
-
1473
- // src/i18n/locales/en.json
1474
- var en_default = {
1475
- common: {
1476
- yes: "Yes",
1477
- no: "No",
1478
- cancel: "Cancel",
1479
- confirm: "Confirm",
1480
- success: "Success!",
1481
- failed: "Failed",
1482
- loading: "Loading...",
1483
- goodbye: "Goodbye!",
1484
- cancelled: "Cancelled.",
1485
- continue: "Continue",
1486
- back: "Back",
1487
- save: "Save",
1488
- delete: "Delete",
1489
- edit: "Edit",
1490
- create: "Create",
1491
- open: "Open",
1492
- close: "Close",
1493
- search: "Search",
1494
- filter: "Filter",
1495
- all: "All",
1496
- none: "None",
1497
- unknown: "Unknown",
1498
- enabled: "Enabled",
1499
- disabled: "Disabled",
1500
- total: "Total",
1501
- date: "Date",
1502
- time: "Time",
1503
- name: "Name",
1504
- value: "Value",
1505
- type: "Type",
1506
- status: "Status",
1507
- description: "Description",
1508
- actions: "Actions",
1509
- settings: "Settings",
1510
- help: "Help",
1511
- version: "Version",
1512
- forceOption: "Skip confirmations",
1513
- pressAnyKey: "Press any key to continue..."
1514
- },
1515
- auth: {
1516
- notLoggedIn: "Not logged in",
1517
- loginWith: "Login with: shiva login",
1518
- loginSuccess: "Successfully logged in!",
1519
- logoutSuccess: "Successfully logged out.",
1520
- alreadyLoggedIn: "Already logged in as {email}",
1521
- loginCancelled: "Login cancelled.",
1522
- otpSent: "Login code has been sent.",
1523
- otpInvalid: "Invalid code.",
1524
- enterEmail: "Email address:",
1525
- enterOtp: "Enter login code:",
1526
- reloginQuestion: "Do you want to log in again?",
1527
- invalidEmail: "Please enter a valid email address",
1528
- twoFactorEnabled: "2FA enabled.",
1529
- twoFactorDisabled: "2FA disabled.",
1530
- invalidToken: "Invalid token."
1531
- },
1532
- errors: {
1533
- unknown: "An unknown error occurred",
1534
- network: "Network error. Check your connection.",
1535
- notFound: "Not found: {item}",
1536
- permissionDenied: "Permission denied",
1537
- apiError: "API error",
1538
- fileNotFound: "File not found: {file}",
1539
- invalidFormat: "Invalid format",
1540
- alreadyExists: "Already exists: {item}",
1541
- notSupported: "Not supported",
1542
- timeout: "Timeout",
1543
- invalidInput: "Invalid input",
1544
- clipboardFailed: "Clipboard error"
1545
- },
1546
- commands: {
1547
- login: {
1548
- description: "Login to shiva.li",
1549
- emailOption: "Email address for OTP login",
1550
- otpOption: "Use OTP login instead of browser"
1551
- },
1552
- logout: {
1553
- description: "Logout from shiva.li"
1554
- },
1555
- secrets: {
1556
- description: "Manage API keys and secrets (Cloud Vault)",
1557
- vault: "SHIVA Secrets Vault",
1558
- global: "Global:",
1559
- projectSpecific: "Project-specific:",
1560
- noSecrets: "No secrets stored",
1561
- addHint: "Add secret: shiva secrets add <KEY> <VALUE>",
1562
- listDesc: "List all secrets",
1563
- addDesc: "Add a secret",
1564
- removeDesc: "Remove a secret",
1565
- getDesc: "Show secret value (masked)",
1566
- envDesc: "Output secrets in .env format",
1567
- importDesc: "Import .env file into vault",
1568
- exportDesc: "Export secrets",
1569
- saved: 'Secret "{key}" saved!',
1570
- deleted: 'Secret "{key}" deleted',
1571
- copied: 'Secret "{key}" copied to clipboard',
1572
- autoCleared: "Will be automatically cleared after 30 seconds...",
1573
- invalidName: "Invalid secret name",
1574
- nameFormat: "Format: UPPERCASE_WITH_UNDERSCORES",
1575
- valueRequired: "Value required",
1576
- confirmSave: "Save secret?",
1577
- confirmDelete: 'Really delete secret "{key}"?',
1578
- loadingSecrets: "Loading secrets...",
1579
- savingSecret: "Saving secret...",
1580
- deletingSecret: "Deleting secret...",
1581
- exportingSecrets: "Exporting secrets...",
1582
- importingSecrets: "Importing secrets...",
1583
- fileContainsSensitive: "This file contains sensitive data!",
1584
- addToGitignore: "Add to .gitignore!",
1585
- secretsImported: "{count} secret(s) successfully imported",
1586
- secretsFailed: "{count} secret(s) failed",
1587
- noValidSecrets: "No valid secrets found in file",
1588
- dryRunInfo: "Dry-run: No changes made",
1589
- showValue: "Show value?",
1590
- revealWarning: "Secret values will be displayed in terminal!",
1591
- revealHint: "Show full value with --reveal or -r",
1592
- secretsToImport: "Secrets to import"
1593
- },
1594
- remember: {
1595
- description: "Save memory to cloud",
1596
- saved: "Memory saved!",
1597
- category: "Category: {category}"
1598
- },
1599
- search: {
1600
- description: "Search in memories",
1601
- header: "SHIVA Code - Search",
1602
- noResults: "No results found",
1603
- enterQuery: "Enter search term:",
1604
- searching: "Searching...",
1605
- resultsFound: "{count} result(s) found"
1606
- },
1607
- forget: {
1608
- description: "Delete memories (GDPR)",
1609
- header: "SHIVA Code - Forget",
1610
- warning: "WARNING: Delete all memories",
1611
- confirmDelete: "Really delete memories?",
1612
- deleted: "Memories deleted",
1613
- selectMemories: "Select memories to delete:"
1614
- },
1615
- sessions: {
1616
- description: "List all Claude Code sessions",
1617
- header: "SHIVA Code - Sessions",
1618
- noSessions: "No sessions found.",
1619
- branch: "Branch",
1620
- messages: "Messages",
1621
- selectSession: "Select session:"
1622
- },
1623
- resume: {
1624
- description: "Resume session",
1625
- selectSession: "Select session to resume:",
1626
- starting: "Starting session..."
1627
- },
1628
- restore: {
1629
- description: "Restore crashed session",
1630
- selectSession: "Select session to restore:",
1631
- restored: "Session restored"
1632
- },
1633
- start: {
1634
- description: "Start multiple projects",
1635
- selectProjects: "Select projects to start:",
1636
- starting: "Starting {count} project(s)...",
1637
- dockerMode: "Docker mode",
1638
- sandboxMode: "Sandbox mode"
1639
- },
1640
- init: {
1641
- description: "Initialize project for SHIVA Code",
1642
- detected: "Detected",
1643
- initialized: "Project initialized!",
1644
- alreadyInitialized: "Project already initialized",
1645
- confirmInit: "Initialize project?",
1646
- creatingProject: "Creating project..."
1647
- },
1648
- sync: {
1649
- description: "Sync project with cloud",
1650
- synced: "Synced",
1651
- batchSync: "SHIVA Code - Batch Sync",
1652
- syncing: "Syncing...",
1653
- noChanges: "No changes"
1654
- },
1655
- status: {
1656
- description: "Show project status",
1657
- header: "SHIVA Code - Status",
1658
- notInitialized: "Project not initialized. Use: shiva init"
1659
- },
1660
- projects: {
1661
- description: "List all projects",
1662
- header: "SHIVA Code - Projects",
1663
- noProjects: "No projects found."
1664
- },
1665
- connect: {
1666
- description: "Connect project with cloud",
1667
- connected: "Project connected",
1668
- selectProject: "Select project:"
1669
- },
1670
- disconnect: {
1671
- description: "Disconnect project from cloud",
1672
- disconnected: "Project disconnected"
1673
- },
1674
- config: {
1675
- description: "Manage settings",
1676
- header: "SHIVA Configuration",
1677
- claudeHeader: "Claude Code Settings",
1678
- syncHeader: "Settings Sync Status",
1679
- featuresHeader: "Feature Flags",
1680
- getDesc: "Show setting",
1681
- setDesc: "Set setting",
1682
- listDesc: "Show all settings",
1683
- resetDesc: "Reset settings",
1684
- updated: "Setting updated",
1685
- currentValue: "Current value: {value}",
1686
- invalidKey: "Invalid setting: {key}",
1687
- invalidValue: "Invalid value: {value}",
1688
- languageSet: "Language set to {lang}",
1689
- invalidLanguage: "Invalid language. Available: {valid}"
1690
- },
1691
- issues: {
1692
- description: "Show GitHub issues",
1693
- header: "GitHub Issues",
1694
- noIssues: "No issues found",
1695
- selectIssue: "Select issue:",
1696
- creating: "Creating issue..."
1697
- },
1698
- prs: {
1699
- description: "Show pull requests",
1700
- header: "Pull Requests",
1701
- noPRs: "No pull requests found",
1702
- selectPR: "Select PR:"
1703
- },
1704
- github: {
1705
- description: "GitHub integration",
1706
- header: "GitHub",
1707
- notInstalled: "GitHub CLI (gh) not installed",
1708
- notAuthenticated: "GitHub CLI not authenticated",
1709
- notGitRepo: "Not a Git repository",
1710
- notGithubRepo: "Not a GitHub repository",
1711
- statusDesc: "Show GitHub status",
1712
- loginDesc: "Login to GitHub",
1713
- initDesc: "Initialize GitHub repository"
1714
- },
1715
- doctor: {
1716
- description: "System check",
1717
- header: "SHIVA Code - Doctor",
1718
- checking: "Checking system...",
1719
- allGood: "Everything is fine!",
1720
- issuesFound: "{count} issue(s) found"
1721
- },
1722
- stats: {
1723
- description: "Show analytics",
1724
- header: "SHIVA Code - Statistics",
1725
- loading: "Loading statistics..."
1726
- },
1727
- upgrade: {
1728
- description: "Update SHIVA",
1729
- checking: "Checking for updates...",
1730
- upToDate: "SHIVA is up to date (version {version})",
1731
- newVersion: "New version available: {version}",
1732
- upgrading: "Updating...",
1733
- upgraded: "SHIVA updated to version {version}"
1734
- },
1735
- telemetry: {
1736
- description: "Telemetry settings",
1737
- enabled: "Telemetry enabled",
1738
- disabled: "Telemetry disabled"
1739
- },
1740
- completions: {
1741
- description: "Install shell completions",
1742
- installed: "Completions installed for {shell}",
1743
- installHint: "Restart your shell for the changes"
1744
- },
1745
- docker: {
1746
- description: "Manage Docker mode",
1747
- header: "SHIVA Code - Docker",
1748
- notAvailable: "Docker is not available",
1749
- starting: "Starting Docker container...",
1750
- started: "Docker container started",
1751
- stopped: "Docker container stopped",
1752
- statusDesc: "Show Docker status",
1753
- startDesc: "Start Docker container",
1754
- stopDesc: "Stop Docker container",
1755
- logsDesc: "Show Docker logs"
1756
- },
1757
- sandbox: {
1758
- description: "Manage sandbox",
1759
- header: "SHIVA Code - Sandbox",
1760
- created: "Sandbox created",
1761
- applied: "Sandbox changes applied",
1762
- discarded: "Sandbox discarded",
1763
- listDesc: "List all sandboxes",
1764
- createDesc: "Create new sandbox",
1765
- applyDesc: "Apply sandbox changes",
1766
- discardDesc: "Discard sandbox"
1767
- },
1768
- workflow: {
1769
- description: "Manage workflows",
1770
- header: "SHIVA Code - Workflows"
1771
- },
1772
- hook: {
1773
- description: "Manage hooks",
1774
- header: "SHIVA Code - Hooks"
1775
- },
1776
- package: {
1777
- description: "Manage project groups",
1778
- header: "SHIVA Code - Packages",
1779
- noPackages: "No packages found",
1780
- createDesc: "Create new package",
1781
- listDesc: "List all packages",
1782
- addDesc: "Add project to package",
1783
- removeDesc: "Remove project from package",
1784
- deleteDesc: "Delete package",
1785
- created: 'Package "{name}" created',
1786
- deleted: 'Package "{name}" deleted',
1787
- projectAdded: "Project added to package",
1788
- projectRemoved: "Project removed from package"
1789
- },
1790
- context: {
1791
- description: "Show context",
1792
- header: "SHIVA Code - Context",
1793
- noContext: "No context found"
1794
- },
1795
- tags: {
1796
- description: "Manage session tags",
1797
- header: "SHIVA Code - Tags",
1798
- noTags: "No tags found"
1799
- },
1800
- export: {
1801
- description: "Export sessions",
1802
- header: "SHIVA Code - Export",
1803
- exported: "Exported to {file}",
1804
- selectFormat: "Select format:"
1805
- },
1806
- import: {
1807
- description: "Import sessions",
1808
- header: "SHIVA Code - Import",
1809
- imported: "{count} session(s) imported",
1810
- selectFile: "Select file:"
1811
- },
1812
- user: {
1813
- description: "User information",
1814
- header: "SHIVA Code - User"
1815
- },
1816
- welcome: {
1817
- description: "Show welcome message"
1818
- },
1819
- validate: {
1820
- description: "Validate project",
1821
- header: "SHIVA Code - Validation",
1822
- valid: "Project is valid",
1823
- invalid: "Project is invalid"
1824
- },
1825
- scan: {
1826
- description: "Check package for security issues",
1827
- header: "SHIVA Code - Security Scan",
1828
- scanning: "Scanning...",
1829
- noIssues: "No security issues found",
1830
- issuesFound: "{count} security issue(s) found"
1831
- },
1832
- security: {
1833
- description: "Security settings",
1834
- header: "SHIVA Code - Security"
1835
- },
1836
- secureToken: {
1837
- description: "Store token securely"
1838
- },
1839
- project: {
1840
- description: "Project information",
1841
- header: "SHIVA Code - Project"
1842
- },
1843
- repair: {
1844
- description: "Repair project",
1845
- header: "SHIVA Code - Repair",
1846
- repaired: "Project repaired"
1847
- },
1848
- help: {
1849
- description: "Help and documentation",
1850
- header: "SHIVA Code - Help",
1851
- topics: "Topics:",
1852
- quickstart: "Quick Start",
1853
- commands: "Commands Overview",
1854
- memory: "Memory System",
1855
- secrets: "Secrets Management",
1856
- troubleshooting: "Troubleshooting",
1857
- onlineHelp: "Open Online Help"
1858
- }
1859
- },
1860
- controlStation: {
1861
- title: "SHIVA Control Station",
1862
- selection: "Selection:",
1863
- navigate: "navigate",
1864
- sessions: "Sessions",
1865
- sessionsDesc: "Show all",
1866
- packages: "Packages",
1867
- packagesDesc: "Manage",
1868
- issues: "Issues",
1869
- issuesDesc: "GitHub Issues",
1870
- prs: "PRs",
1871
- prsDesc: "Pull Requests",
1872
- config: "Config",
1873
- configDesc: "Settings",
1874
- help: "Help",
1875
- helpDesc: "Documentation",
1876
- quit: "Quit",
1877
- noSessionsFound: "No sessions found.",
1878
- startClaudeHint: "Start Claude Code in a project",
1879
- orCreatePackage: 'Or: shiva package create "Name"',
1880
- startingSession: "Starting session in {project}...",
1881
- startingPackage: "Starting package {name}...",
1882
- unknownCommand: "Unknown command: {command}",
1883
- didYouMean: "Did you mean:",
1884
- projects: "Projects",
1885
- claudeNotInstalled: "Claude Code not installed",
1886
- claudeInstallHint: "curl -fsSL https://claude.ai/install.sh | bash"
1887
- },
1888
- help: {
1889
- quickstart: {
1890
- title: "Quick Start",
1891
- content: [
1892
- "1. shiva login - Login",
1893
- "2. shiva init - Initialize project",
1894
- "3. shiva - Open Control Station",
1895
- "4. shiva remember - Save memory",
1896
- "5. shiva secrets - Manage secrets"
1897
- ]
1898
- },
1899
- commandsOverview: {
1900
- title: "Commands Overview",
1901
- sessionManagement: "Session Management",
1902
- githubIntegration: "GitHub Integration",
1903
- memoryContext: "Memory & Context",
1904
- dockerIntegration: "Docker Integration",
1905
- security: "Security",
1906
- projectManagement: "Project Management",
1907
- system: "System"
1908
- },
1909
- memorySystem: {
1910
- title: "Memory System",
1911
- description: "SHIVA stores information persistently in the cloud.",
1912
- categories: {
1913
- identity: "User identity (name, role)",
1914
- preference: "Preferences (code style)",
1915
- convention: "Project conventions",
1916
- solution: "Solved problems",
1917
- task: "Tasks",
1918
- context: "Project context"
1919
- }
1920
- },
1921
- secretsManagement: {
1922
- title: "Secrets Management",
1923
- description: "Secure storage of API keys and secrets in the cloud.",
1924
- features: [
1925
- "End-to-end encrypted",
1926
- "Automatic injection into sessions",
1927
- "Project-specific and global secrets",
1928
- "Import/export of .env files"
1929
- ]
1930
- },
1931
- troubleshooting: {
1932
- title: "Troubleshooting",
1933
- commonIssues: {
1934
- notLoggedIn: "Not logged in",
1935
- notLoggedInSolution: "Use 'shiva login' to login",
1936
- claudeNotFound: "Claude Code not found",
1937
- claudeNotFoundSolution: "Install Claude Code with the official installer",
1938
- networkError: "Network error",
1939
- networkErrorSolution: "Check your internet connection",
1940
- permissionDenied: "Permission denied",
1941
- permissionDeniedSolution: "Check file permissions or run with sudo"
1942
- }
1943
- }
1944
- },
1945
- time: {
1946
- justNow: "just now",
1947
- minutesAgo: "{count} minute(s) ago",
1948
- hoursAgo: "{count} hour(s) ago",
1949
- daysAgo: "{count} day(s) ago",
1950
- weeksAgo: "{count} week(s) ago",
1951
- monthsAgo: "{count} month(s) ago"
1952
- },
1953
- onboarding: {
1954
- welcome: "Welcome to SHIVA Code!",
1955
- subtitle: "Makes Claude Code persistent",
1956
- selectLanguage: "Select language:",
1957
- claudeCode: "Claude Code",
1958
- claudeNotFound: "Claude Code not found",
1959
- claudeNotFoundDesc: "SHIVA extends Claude Code with persistent storage. You need Claude Code to use SHIVA.",
1960
- installation: "Installation:",
1961
- moreInfo: "More info:",
1962
- continueAnyway: "Continue anyway?",
1963
- restartAfterInstall: "Restart after installation: shiva",
1964
- found: "Found",
1965
- display: "Display",
1966
- darkMode: "Dark Mode",
1967
- lightMode: "Light Mode",
1968
- recommended: "(recommended)",
1969
- themeSaved: "Theme saved",
1970
- account: "Account",
1971
- accountFeatures: "With an account you get:",
1972
- cloudSync: "Cloud sync for memories",
1973
- crossDeviceSessions: "Sessions across devices",
1974
- secretsVault: "Secrets Vault (encrypted)",
1975
- loginNow: "Login now?",
1976
- openBrowser: "Opening browser...",
1977
- loginLater: "Later: shiva login",
1978
- integration: "Integration",
1979
- autoIntegration: "SHIVA automatically integrates with Claude Code:",
1980
- loadMemoriesOnStart: "Load memories on start",
1981
- saveMemoriesOnExit: "Save memories on exit",
1982
- enableAutoIntegration: "Enable auto-integration?",
1983
- hooksInstalled: "Hooks installed",
1984
- hooksFailed: "Hook installation failed",
1985
- hooksLater: "Later: shiva hook install",
1986
- setupComplete: "Setup complete!",
1987
- nextSteps: "Next steps:",
1988
- letsGo: "Let's go:",
1989
- goToProject: "Go to your project",
1990
- initShiva: "Initialize SHIVA",
1991
- startClaude: "Start Claude Code",
1992
- commands: "Commands:",
1993
- laterLogin: "Login later: shiva login"
1994
- },
1995
- account: {
1996
- description: "Manage account",
1997
- deleteDesc: "Delete account and ALL data permanently (GDPR)",
1998
- infoDesc: "Show account information",
1999
- header: "SHIVA Account",
2000
- deleteWarning: "DELETE ACCOUNT - IRREVERSIBLE",
2001
- deleteWarning1: "You are about to permanently delete your SHIVA account.",
2002
- willBeDeleted: "The following data will be PERMANENTLY deleted:",
2003
- allProjects: "All projects",
2004
- allMemories: "All memories",
2005
- allSecrets: "All secrets (API keys)",
2006
- allSessions: "All session data",
2007
- allSettings: "All settings",
2008
- accountData: "Account data (email, profile)",
2009
- cannotBeUndone: "This action CANNOT be undone!",
2010
- confirmDelete1: "I understand - I want to delete my account",
2011
- enterEmail: "Enter your email to confirm ({email}):",
2012
- emailMismatch: "Email does not match",
2013
- typeDelete: "Type DELETE to confirm:",
2014
- deleting: "Deleting account...",
2015
- deleted: "Account deleted",
2016
- deleteFailed: "Deletion failed",
2017
- deletedInfo: "All your data has been removed from our systems.",
2018
- goodbye: "Thank you for using SHIVA. Goodbye!",
2019
- memberSince: "Member since",
2020
- usage: "Usage:",
2021
- projects: "Projects",
2022
- memories: "Memories",
2023
- secrets: "Secrets",
2024
- sessions: "Sessions"
2025
- },
2026
- uninstall: {
2027
- description: "Completely uninstall SHIVA",
2028
- header: "Uninstallation",
2029
- localOption: "Only remove local data",
2030
- fullOption: "Complete uninstallation",
2031
- keepAccountOption: "Keep account data",
2032
- willBeRemoved: "The following will be removed:",
2033
- globalConfig: "Global configuration",
2034
- claudeHooks: "Claude Code hooks",
2035
- projectShivaDir: "Project .shiva/ directory",
2036
- accountData: "Account data on server",
2037
- npmPackage: "NPM package",
2038
- nothingToRemove: "No local data found.",
2039
- runNpmUninstall: "Run this command to remove SHIVA:",
2040
- confirmUninstall: "Really uninstall SHIVA?",
2041
- accountWarning: "Your account and all cloud data will be deleted!",
2042
- confirmAccountDelete: "Also delete account data?",
2043
- accountKept: "Account data will be kept.",
2044
- removingHooks: "Removing Claude hooks...",
2045
- hooksRemoved: "Claude hooks removed",
2046
- hooksFailed: "Failed to remove hooks",
2047
- removingConfig: "Removing configuration...",
2048
- configRemoved: "Configuration removed",
2049
- configFailed: "Failed to remove configuration",
2050
- removingProjectDir: "Removing .shiva/ directory...",
2051
- projectDirRemoved: ".shiva/ directory removed",
2052
- projectDirFailed: "Failed to remove .shiva/",
2053
- deletingAccount: "Deleting account data...",
2054
- accountDeleted: "Account data deleted",
2055
- accountFailed: "Failed to delete account",
2056
- complete: "Uninstallation complete!",
2057
- partialSuccess: "Some steps failed.",
2058
- finalStep: "Final step - run:",
2059
- accountStillExists: "Note: Your account still exists on the server.",
2060
- deleteAccountHint: "To delete: shiva account delete",
2061
- thanksForUsing: "Thanks for using SHIVA!"
2062
- },
2063
- projectDelete: {
2064
- deleteDesc: "Delete project and all data",
2065
- deleteIdOption: "Project ID to delete",
2066
- deleteWarning: "WARNING: Project will be permanently deleted!",
2067
- notConnected: "Current directory is not connected to a project",
2068
- memoriesCount: "Memories",
2069
- sessionsCount: "Sessions",
2070
- confirmDelete: "Really delete project?",
2071
- enterNameToConfirm: 'Enter "{name}" to confirm:',
2072
- deleting: "Deleting project...",
2073
- deleted: "Project deleted",
2074
- deleteFailed: "Deletion failed",
2075
- deletedInfo: "All project data has been removed from the cloud."
2076
- }
2077
- };
2078
-
2079
- // src/i18n/locales/fr.json
2080
- var fr_default = {
2081
- common: {
2082
- yes: "Oui",
2083
- no: "Non",
2084
- cancel: "Annuler",
2085
- confirm: "Confirmer",
2086
- success: "Succes!",
2087
- failed: "Echec",
2088
- loading: "Chargement...",
2089
- goodbye: "Au revoir!",
2090
- cancelled: "Annule.",
2091
- continue: "Continuer",
2092
- back: "Retour",
2093
- save: "Enregistrer",
2094
- delete: "Supprimer",
2095
- edit: "Modifier",
2096
- create: "Creer",
2097
- open: "Ouvrir",
2098
- close: "Fermer",
2099
- search: "Rechercher",
2100
- filter: "Filtrer",
2101
- all: "Tous",
2102
- none: "Aucun",
2103
- unknown: "Inconnu",
2104
- enabled: "Active",
2105
- disabled: "Desactive",
2106
- total: "Total",
2107
- date: "Date",
2108
- time: "Heure",
2109
- name: "Nom",
2110
- value: "Valeur",
2111
- type: "Type",
2112
- status: "Statut",
2113
- description: "Description",
2114
- actions: "Actions",
2115
- settings: "Parametres",
2116
- help: "Aide",
2117
- version: "Version",
2118
- forceOption: "Sans confirmation",
2119
- pressAnyKey: "Appuyez sur une touche pour continuer..."
2120
- },
2121
- auth: {
2122
- notLoggedIn: "Non connecte",
2123
- loginWith: "Se connecter avec: shiva login",
2124
- loginSuccess: "Connexion reussie!",
2125
- logoutSuccess: "Deconnexion reussie.",
2126
- alreadyLoggedIn: "Deja connecte en tant que {email}",
2127
- loginCancelled: "Connexion annulee.",
2128
- otpSent: "Le code de connexion a ete envoye.",
2129
- otpInvalid: "Code invalide.",
2130
- enterEmail: "Adresse email:",
2131
- enterOtp: "Entrez le code de connexion:",
2132
- reloginQuestion: "Voulez-vous vous reconnecter?",
2133
- invalidEmail: "Veuillez entrer une adresse email valide",
2134
- twoFactorEnabled: "2FA active.",
2135
- twoFactorDisabled: "2FA desactive.",
2136
- invalidToken: "Token invalide."
2137
- },
2138
- errors: {
2139
- unknown: "Une erreur inconnue s'est produite",
2140
- network: "Erreur reseau. Verifiez votre connexion.",
2141
- notFound: "Non trouve: {item}",
2142
- permissionDenied: "Permission refusee",
2143
- apiError: "Erreur API",
2144
- fileNotFound: "Fichier non trouve: {file}",
2145
- invalidFormat: "Format invalide",
2146
- alreadyExists: "Existe deja: {item}",
2147
- notSupported: "Non supporte",
2148
- timeout: "Delai depasse",
2149
- invalidInput: "Entree invalide",
2150
- clipboardFailed: "Erreur de presse-papiers"
2151
- },
2152
- commands: {
2153
- login: {
2154
- description: "Se connecter a shiva.li",
2155
- emailOption: "Adresse email pour connexion OTP",
2156
- otpOption: "Utiliser la connexion OTP au lieu du navigateur"
2157
- },
2158
- logout: {
2159
- description: "Se deconnecter de shiva.li"
2160
- },
2161
- secrets: {
2162
- description: "Gerer les cles API et secrets (Cloud Vault)",
2163
- vault: "SHIVA Secrets Vault",
2164
- global: "Global:",
2165
- projectSpecific: "Specifique au projet:",
2166
- noSecrets: "Aucun secret stocke",
2167
- addHint: "Ajouter un secret: shiva secrets add <KEY> <VALUE>",
2168
- listDesc: "Lister tous les secrets",
2169
- addDesc: "Ajouter un secret",
2170
- removeDesc: "Supprimer un secret",
2171
- getDesc: "Afficher la valeur du secret (masquee)",
2172
- envDesc: "Exporter les secrets au format .env",
2173
- importDesc: "Importer un fichier .env dans le vault",
2174
- exportDesc: "Exporter les secrets",
2175
- saved: 'Secret "{key}" enregistre!',
2176
- deleted: 'Secret "{key}" supprime',
2177
- copied: 'Secret "{key}" copie dans le presse-papiers',
2178
- autoCleared: "Sera automatiquement efface apres 30 secondes...",
2179
- invalidName: "Nom de secret invalide",
2180
- nameFormat: "Format: MAJUSCULES_AVEC_UNDERSCORES",
2181
- valueRequired: "Valeur requise",
2182
- confirmSave: "Enregistrer le secret?",
2183
- confirmDelete: 'Vraiment supprimer le secret "{key}"?',
2184
- loadingSecrets: "Chargement des secrets...",
2185
- savingSecret: "Enregistrement du secret...",
2186
- deletingSecret: "Suppression du secret...",
2187
- exportingSecrets: "Exportation des secrets...",
2188
- importingSecrets: "Importation des secrets...",
2189
- fileContainsSensitive: "Ce fichier contient des donnees sensibles!",
2190
- addToGitignore: "Ajouter a .gitignore!",
2191
- secretsImported: "{count} secret(s) importe(s) avec succes",
2192
- secretsFailed: "{count} secret(s) echoue(s)",
2193
- noValidSecrets: "Aucun secret valide trouve dans le fichier",
2194
- dryRunInfo: "Dry-run: Aucun changement effectue",
2195
- showValue: "Afficher la valeur?",
2196
- revealWarning: "Les valeurs des secrets seront affichees dans le terminal!",
2197
- revealHint: "Afficher la valeur complete avec --reveal ou -r",
2198
- secretsToImport: "Secrets a importer"
2199
- },
2200
- remember: {
2201
- description: "Enregistrer une memoire dans le cloud",
2202
- saved: "Memoire enregistree!",
2203
- category: "Categorie: {category}"
2204
- },
2205
- search: {
2206
- description: "Rechercher dans les memoires",
2207
- header: "SHIVA Code - Recherche",
2208
- noResults: "Aucun resultat trouve",
2209
- enterQuery: "Entrez le terme de recherche:",
2210
- searching: "Recherche...",
2211
- resultsFound: "{count} resultat(s) trouve(s)"
2212
- },
2213
- forget: {
2214
- description: "Supprimer les memoires (RGPD)",
2215
- header: "SHIVA Code - Oublier",
2216
- warning: "ATTENTION: Supprimer toutes les memoires",
2217
- confirmDelete: "Vraiment supprimer les memoires?",
2218
- deleted: "Memoires supprimees",
2219
- selectMemories: "Selectionnez les memoires a supprimer:"
2220
- },
2221
- sessions: {
2222
- description: "Lister toutes les sessions Claude Code",
2223
- header: "SHIVA Code - Sessions",
2224
- noSessions: "Aucune session trouvee.",
2225
- branch: "Branche",
2226
- messages: "Messages",
2227
- selectSession: "Selectionnez une session:"
2228
- },
2229
- resume: {
2230
- description: "Reprendre une session",
2231
- selectSession: "Selectionnez une session a reprendre:",
2232
- starting: "Demarrage de la session..."
2233
- },
2234
- restore: {
2235
- description: "Restaurer une session plantee",
2236
- selectSession: "Selectionnez une session a restaurer:",
2237
- restored: "Session restauree"
2238
- },
2239
- start: {
2240
- description: "Demarrer plusieurs projets",
2241
- selectProjects: "Selectionnez les projets a demarrer:",
2242
- starting: "Demarrage de {count} projet(s)...",
2243
- dockerMode: "Mode Docker",
2244
- sandboxMode: "Mode Sandbox"
2245
- },
2246
- init: {
2247
- description: "Initialiser le projet pour SHIVA Code",
2248
- detected: "Detecte",
2249
- initialized: "Projet initialise!",
2250
- alreadyInitialized: "Projet deja initialise",
2251
- confirmInit: "Initialiser le projet?",
2252
- creatingProject: "Creation du projet..."
2253
- },
2254
- sync: {
2255
- description: "Synchroniser le projet avec le cloud",
2256
- synced: "Synchronise",
2257
- batchSync: "SHIVA Code - Sync par lots",
2258
- syncing: "Synchronisation...",
2259
- noChanges: "Aucun changement"
2260
- },
2261
- status: {
2262
- description: "Afficher le statut du projet",
2263
- header: "SHIVA Code - Statut",
2264
- notInitialized: "Projet non initialise. Utilisez: shiva init"
2265
- },
2266
- projects: {
2267
- description: "Lister tous les projets",
2268
- header: "SHIVA Code - Projets",
2269
- noProjects: "Aucun projet trouve."
2270
- },
2271
- connect: {
2272
- description: "Connecter le projet au cloud",
2273
- connected: "Projet connecte",
2274
- selectProject: "Selectionnez un projet:"
2275
- },
2276
- disconnect: {
2277
- description: "Deconnecter le projet du cloud",
2278
- disconnected: "Projet deconnecte"
2279
- },
2280
- config: {
2281
- description: "Gerer les parametres",
2282
- header: "Configuration SHIVA",
2283
- claudeHeader: "Parametres Claude Code",
2284
- syncHeader: "Statut de synchronisation",
2285
- featuresHeader: "Options de fonctionnalites",
2286
- getDesc: "Afficher un parametre",
2287
- setDesc: "Definir un parametre",
2288
- listDesc: "Afficher tous les parametres",
2289
- resetDesc: "Reinitialiser les parametres",
2290
- updated: "Parametre mis a jour",
2291
- currentValue: "Valeur actuelle: {value}",
2292
- invalidKey: "Parametre invalide: {key}",
2293
- invalidValue: "Valeur invalide: {value}",
2294
- languageSet: "Langue definie sur {lang}",
2295
- invalidLanguage: "Langue invalide. Disponibles: {valid}"
2296
- },
2297
- issues: {
2298
- description: "Afficher les issues GitHub",
2299
- header: "GitHub Issues",
2300
- noIssues: "Aucune issue trouvee",
2301
- selectIssue: "Selectionnez une issue:",
2302
- creating: "Creation de l'issue..."
2303
- },
2304
- prs: {
2305
- description: "Afficher les pull requests",
2306
- header: "Pull Requests",
2307
- noPRs: "Aucune pull request trouvee",
2308
- selectPR: "Selectionnez une PR:"
2309
- },
2310
- github: {
2311
- description: "Integration GitHub",
2312
- header: "GitHub",
2313
- notInstalled: "GitHub CLI (gh) non installe",
2314
- notAuthenticated: "GitHub CLI non authentifie",
2315
- notGitRepo: "Pas un depot Git",
2316
- notGithubRepo: "Pas un depot GitHub",
2317
- statusDesc: "Afficher le statut GitHub",
2318
- loginDesc: "Se connecter a GitHub",
2319
- initDesc: "Initialiser le depot GitHub"
2320
- },
2321
- doctor: {
2322
- description: "Verification du systeme",
2323
- header: "SHIVA Code - Doctor",
2324
- checking: "Verification du systeme...",
2325
- allGood: "Tout va bien!",
2326
- issuesFound: "{count} probleme(s) trouve(s)"
2327
- },
2328
- stats: {
2329
- description: "Afficher les analytics",
2330
- header: "SHIVA Code - Statistiques",
2331
- loading: "Chargement des statistiques..."
2332
- },
2333
- upgrade: {
2334
- description: "Mettre a jour SHIVA",
2335
- checking: "Verification des mises a jour...",
2336
- upToDate: "SHIVA est a jour (version {version})",
2337
- newVersion: "Nouvelle version disponible: {version}",
2338
- upgrading: "Mise a jour...",
2339
- upgraded: "SHIVA mis a jour vers la version {version}"
2340
- },
2341
- telemetry: {
2342
- description: "Parametres de telemetrie",
2343
- enabled: "Telemetrie activee",
2344
- disabled: "Telemetrie desactivee"
2345
- },
2346
- completions: {
2347
- description: "Installer les completions shell",
2348
- installed: "Completions installees pour {shell}",
2349
- installHint: "Redemarrez votre shell pour les changements"
2350
- },
2351
- docker: {
2352
- description: "Gerer le mode Docker",
2353
- header: "SHIVA Code - Docker",
2354
- notAvailable: "Docker n'est pas disponible",
2355
- starting: "Demarrage du conteneur Docker...",
2356
- started: "Conteneur Docker demarre",
2357
- stopped: "Conteneur Docker arrete",
2358
- statusDesc: "Afficher le statut Docker",
2359
- startDesc: "Demarrer le conteneur Docker",
2360
- stopDesc: "Arreter le conteneur Docker",
2361
- logsDesc: "Afficher les logs Docker"
2362
- },
2363
- sandbox: {
2364
- description: "Gerer le sandbox",
2365
- header: "SHIVA Code - Sandbox",
2366
- created: "Sandbox cree",
2367
- applied: "Changements du sandbox appliques",
2368
- discarded: "Sandbox rejete",
2369
- listDesc: "Lister tous les sandboxes",
2370
- createDesc: "Creer un nouveau sandbox",
2371
- applyDesc: "Appliquer les changements du sandbox",
2372
- discardDesc: "Rejeter le sandbox"
2373
- },
2374
- workflow: {
2375
- description: "Gerer les workflows",
2376
- header: "SHIVA Code - Workflows"
2377
- },
2378
- hook: {
2379
- description: "Gerer les hooks",
2380
- header: "SHIVA Code - Hooks"
2381
- },
2382
- package: {
2383
- description: "Gerer les groupes de projets",
2384
- header: "SHIVA Code - Packages",
2385
- noPackages: "Aucun package trouve",
2386
- createDesc: "Creer un nouveau package",
2387
- listDesc: "Lister tous les packages",
2388
- addDesc: "Ajouter un projet au package",
2389
- removeDesc: "Supprimer un projet du package",
2390
- deleteDesc: "Supprimer le package",
2391
- created: 'Package "{name}" cree',
2392
- deleted: 'Package "{name}" supprime',
2393
- projectAdded: "Projet ajoute au package",
2394
- projectRemoved: "Projet supprime du package"
2395
- },
2396
- context: {
2397
- description: "Afficher le contexte",
2398
- header: "SHIVA Code - Contexte",
2399
- noContext: "Aucun contexte trouve"
2400
- },
2401
- tags: {
2402
- description: "Gerer les tags de session",
2403
- header: "SHIVA Code - Tags",
2404
- noTags: "Aucun tag trouve"
2405
- },
2406
- export: {
2407
- description: "Exporter les sessions",
2408
- header: "SHIVA Code - Export",
2409
- exported: "Exporte vers {file}",
2410
- selectFormat: "Selectionnez le format:"
2411
- },
2412
- import: {
2413
- description: "Importer des sessions",
2414
- header: "SHIVA Code - Import",
2415
- imported: "{count} session(s) importee(s)",
2416
- selectFile: "Selectionnez un fichier:"
2417
- },
2418
- user: {
2419
- description: "Informations utilisateur",
2420
- header: "SHIVA Code - Utilisateur"
2421
- },
2422
- welcome: {
2423
- description: "Afficher le message de bienvenue"
2424
- },
2425
- validate: {
2426
- description: "Valider le projet",
2427
- header: "SHIVA Code - Validation",
2428
- valid: "Le projet est valide",
2429
- invalid: "Le projet est invalide"
2430
- },
2431
- scan: {
2432
- description: "Verifier la securite du package",
2433
- header: "SHIVA Code - Scan de securite",
2434
- scanning: "Scan...",
2435
- noIssues: "Aucun probleme de securite trouve",
2436
- issuesFound: "{count} probleme(s) de securite trouve(s)"
2437
- },
2438
- security: {
2439
- description: "Parametres de securite",
2440
- header: "SHIVA Code - Securite"
2441
- },
2442
- secureToken: {
2443
- description: "Stocker le token de maniere securisee"
2444
- },
2445
- project: {
2446
- description: "Informations sur le projet",
2447
- header: "SHIVA Code - Projet"
2448
- },
2449
- repair: {
2450
- description: "Reparer le projet",
2451
- header: "SHIVA Code - Reparation",
2452
- repaired: "Projet repare"
2453
- },
2454
- help: {
2455
- description: "Aide et documentation",
2456
- header: "SHIVA Code - Aide",
2457
- topics: "Sujets:",
2458
- quickstart: "Demarrage rapide",
2459
- commands: "Apercu des commandes",
2460
- memory: "Systeme de memoire",
2461
- secrets: "Gestion des secrets",
2462
- troubleshooting: "Depannage",
2463
- onlineHelp: "Ouvrir l'aide en ligne"
2464
- }
2465
- },
2466
- controlStation: {
2467
- title: "SHIVA Control Station",
2468
- selection: "Selection:",
2469
- navigate: "naviguer",
2470
- sessions: "Sessions",
2471
- sessionsDesc: "Tout afficher",
2472
- packages: "Packages",
2473
- packagesDesc: "Gerer",
2474
- issues: "Issues",
2475
- issuesDesc: "GitHub Issues",
2476
- prs: "PRs",
2477
- prsDesc: "Pull Requests",
2478
- config: "Config",
2479
- configDesc: "Parametres",
2480
- help: "Aide",
2481
- helpDesc: "Documentation",
2482
- quit: "Quitter",
2483
- noSessionsFound: "Aucune session trouvee.",
2484
- startClaudeHint: "Demarrez Claude Code dans un projet",
2485
- orCreatePackage: 'Ou: shiva package create "Nom"',
2486
- startingSession: "Demarrage de la session dans {project}...",
2487
- startingPackage: "Demarrage du package {name}...",
2488
- unknownCommand: "Commande inconnue: {command}",
2489
- didYouMean: "Vouliez-vous dire:",
2490
- projects: "Projets",
2491
- claudeNotInstalled: "Claude Code non installe",
2492
- claudeInstallHint: "curl -fsSL https://claude.ai/install.sh | bash"
2493
- },
2494
- help: {
2495
- quickstart: {
2496
- title: "Demarrage rapide",
2497
- content: [
2498
- "1. shiva login - Se connecter",
2499
- "2. shiva init - Initialiser le projet",
2500
- "3. shiva - Ouvrir Control Station",
2501
- "4. shiva remember - Enregistrer une memoire",
2502
- "5. shiva secrets - Gerer les secrets"
2503
- ]
2504
- },
2505
- commandsOverview: {
2506
- title: "Apercu des commandes",
2507
- sessionManagement: "Gestion des sessions",
2508
- githubIntegration: "Integration GitHub",
2509
- memoryContext: "Memoire & Contexte",
2510
- dockerIntegration: "Integration Docker",
2511
- security: "Securite",
2512
- projectManagement: "Gestion de projet",
2513
- system: "Systeme"
2514
- },
2515
- memorySystem: {
2516
- title: "Systeme de memoire",
2517
- description: "SHIVA stocke les informations de maniere persistante dans le cloud.",
2518
- categories: {
2519
- identity: "Identite utilisateur (nom, role)",
2520
- preference: "Preferences (style de code)",
2521
- convention: "Conventions de projet",
2522
- solution: "Problemes resolus",
2523
- task: "Taches",
2524
- context: "Contexte du projet"
2525
- }
2526
- },
2527
- secretsManagement: {
2528
- title: "Gestion des secrets",
2529
- description: "Stockage securise des cles API et secrets dans le cloud.",
2530
- features: [
2531
- "Chiffrement de bout en bout",
2532
- "Injection automatique dans les sessions",
2533
- "Secrets specifiques au projet et globaux",
2534
- "Import/export de fichiers .env"
2535
- ]
2536
- },
2537
- troubleshooting: {
2538
- title: "Depannage",
2539
- commonIssues: {
2540
- notLoggedIn: "Non connecte",
2541
- notLoggedInSolution: "Utilisez 'shiva login' pour vous connecter",
2542
- claudeNotFound: "Claude Code non trouve",
2543
- claudeNotFoundSolution: "Installez Claude Code avec l'installateur officiel",
2544
- networkError: "Erreur reseau",
2545
- networkErrorSolution: "Verifiez votre connexion internet",
2546
- permissionDenied: "Permission refusee",
2547
- permissionDeniedSolution: "Verifiez les permissions de fichiers ou executez avec sudo"
2548
- }
2549
- }
2550
- },
2551
- time: {
2552
- justNow: "a l'instant",
2553
- minutesAgo: "il y a {count} minute(s)",
2554
- hoursAgo: "il y a {count} heure(s)",
2555
- daysAgo: "il y a {count} jour(s)",
2556
- weeksAgo: "il y a {count} semaine(s)",
2557
- monthsAgo: "il y a {count} mois"
2558
- },
2559
- onboarding: {
2560
- welcome: "Bienvenue sur SHIVA Code!",
2561
- subtitle: "Rend Claude Code persistent",
2562
- selectLanguage: "Choisir la langue:",
2563
- claudeCode: "Claude Code",
2564
- claudeNotFound: "Claude Code non trouve",
2565
- claudeNotFoundDesc: "SHIVA etend Claude Code avec un stockage persistant. Vous avez besoin de Claude Code pour utiliser SHIVA.",
2566
- installation: "Installation:",
2567
- moreInfo: "Plus d'infos:",
2568
- continueAnyway: "Continuer quand meme?",
2569
- restartAfterInstall: "Redemarrer apres installation: shiva",
2570
- found: "Trouve",
2571
- display: "Affichage",
2572
- darkMode: "Mode sombre",
2573
- lightMode: "Mode clair",
2574
- recommended: "(recommande)",
2575
- themeSaved: "Theme sauvegarde",
2576
- account: "Compte",
2577
- accountFeatures: "Avec un compte vous obtenez:",
2578
- cloudSync: "Synchronisation cloud pour les memories",
2579
- crossDeviceSessions: "Sessions entre appareils",
2580
- secretsVault: "Coffre-fort secrets (crypte)",
2581
- loginNow: "Se connecter maintenant?",
2582
- openBrowser: "Ouverture du navigateur...",
2583
- loginLater: "Plus tard: shiva login",
2584
- integration: "Integration",
2585
- autoIntegration: "SHIVA s'integre automatiquement avec Claude Code:",
2586
- loadMemoriesOnStart: "Charger les memories au demarrage",
2587
- saveMemoriesOnExit: "Sauvegarder les memories a la fermeture",
2588
- enableAutoIntegration: "Activer l'integration automatique?",
2589
- hooksInstalled: "Hooks installes",
2590
- hooksFailed: "Installation des hooks echouee",
2591
- hooksLater: "Plus tard: shiva hook install",
2592
- setupComplete: "Configuration terminee!",
2593
- nextSteps: "Prochaines etapes:",
2594
- letsGo: "C'est parti:",
2595
- goToProject: "Aller a votre projet",
2596
- initShiva: "Initialiser SHIVA",
2597
- startClaude: "Demarrer Claude Code",
2598
- commands: "Commandes:",
2599
- laterLogin: "Se connecter plus tard: shiva login"
2600
- },
2601
- account: {
2602
- description: "Gerer le compte",
2603
- deleteDesc: "Supprimer le compte et TOUTES les donnees definitivement (RGPD)",
2604
- infoDesc: "Afficher les informations du compte",
2605
- header: "Compte SHIVA",
2606
- deleteWarning: "SUPPRIMER LE COMPTE - IRREVERSIBLE",
2607
- deleteWarning1: "Vous etes sur le point de supprimer definitivement votre compte SHIVA.",
2608
- willBeDeleted: "Les donnees suivantes seront DEFINITIVEMENT supprimees:",
2609
- allProjects: "Tous les projets",
2610
- allMemories: "Toutes les memories",
2611
- allSecrets: "Tous les secrets (cles API)",
2612
- allSessions: "Toutes les donnees de session",
2613
- allSettings: "Tous les parametres",
2614
- accountData: "Donnees du compte (email, profil)",
2615
- cannotBeUndone: "Cette action ne peut PAS etre annulee!",
2616
- confirmDelete1: "Je comprends - je veux supprimer mon compte",
2617
- enterEmail: "Entrez votre email pour confirmer ({email}):",
2618
- emailMismatch: "L'email ne correspond pas",
2619
- typeDelete: "Tapez DELETE pour confirmer:",
2620
- deleting: "Suppression du compte...",
2621
- deleted: "Compte supprime",
2622
- deleteFailed: "Suppression echouee",
2623
- deletedInfo: "Toutes vos donnees ont ete supprimees de nos systemes.",
2624
- goodbye: "Merci d'avoir utilise SHIVA. Au revoir!",
2625
- memberSince: "Membre depuis",
2626
- usage: "Utilisation:",
2627
- projects: "Projets",
2628
- memories: "Memories",
2629
- secrets: "Secrets",
2630
- sessions: "Sessions"
2631
- },
2632
- uninstall: {
2633
- description: "Desinstaller completement SHIVA",
2634
- header: "Desinstallation",
2635
- localOption: "Supprimer uniquement les donnees locales",
2636
- fullOption: "Desinstallation complete",
2637
- keepAccountOption: "Conserver les donnees du compte",
2638
- willBeRemoved: "Les elements suivants seront supprimes:",
2639
- globalConfig: "Configuration globale",
2640
- claudeHooks: "Hooks Claude Code",
2641
- projectShivaDir: "Repertoire .shiva/ du projet",
2642
- accountData: "Donnees du compte sur le serveur",
2643
- npmPackage: "Package NPM",
2644
- nothingToRemove: "Aucune donnee locale trouvee.",
2645
- runNpmUninstall: "Executez cette commande pour supprimer SHIVA:",
2646
- confirmUninstall: "Vraiment desinstaller SHIVA?",
2647
- accountWarning: "Votre compte et toutes les donnees cloud seront supprimes!",
2648
- confirmAccountDelete: "Supprimer aussi les donnees du compte?",
2649
- accountKept: "Les donnees du compte seront conservees.",
2650
- removingHooks: "Suppression des hooks Claude...",
2651
- hooksRemoved: "Hooks Claude supprimes",
2652
- hooksFailed: "Echec de la suppression des hooks",
2653
- removingConfig: "Suppression de la configuration...",
2654
- configRemoved: "Configuration supprimee",
2655
- configFailed: "Echec de la suppression de la configuration",
2656
- removingProjectDir: "Suppression du repertoire .shiva/...",
2657
- projectDirRemoved: "Repertoire .shiva/ supprime",
2658
- projectDirFailed: "Echec de la suppression de .shiva/",
2659
- deletingAccount: "Suppression des donnees du compte...",
2660
- accountDeleted: "Donnees du compte supprimees",
2661
- accountFailed: "Echec de la suppression du compte",
2662
- complete: "Desinstallation terminee!",
2663
- partialSuccess: "Certaines etapes ont echoue.",
2664
- finalStep: "Derniere etape - executez:",
2665
- accountStillExists: "Note: Votre compte existe toujours sur le serveur.",
2666
- deleteAccountHint: "Pour supprimer: shiva account delete",
2667
- thanksForUsing: "Merci d'avoir utilise SHIVA!"
2668
- },
2669
- projectDelete: {
2670
- deleteDesc: "Supprimer le projet et toutes les donnees",
2671
- deleteIdOption: "ID du projet a supprimer",
2672
- deleteWarning: "ATTENTION: Le projet sera definitivement supprime!",
2673
- notConnected: "Le repertoire actuel n'est pas connecte a un projet",
2674
- memoriesCount: "Memories",
2675
- sessionsCount: "Sessions",
2676
- confirmDelete: "Vraiment supprimer le projet?",
2677
- enterNameToConfirm: 'Entrez "{name}" pour confirmer:',
2678
- deleting: "Suppression du projet...",
2679
- deleted: "Projet supprime",
2680
- deleteFailed: "Suppression echouee",
2681
- deletedInfo: "Toutes les donnees du projet ont ete supprimees du cloud."
2682
- }
2683
- };
2684
-
2685
- // src/i18n/locales/es.json
2686
- var es_default = {
2687
- common: {
2688
- yes: "Si",
2689
- no: "No",
2690
- cancel: "Cancelar",
2691
- confirm: "Confirmar",
2692
- success: "Exito!",
2693
- failed: "Fallido",
2694
- loading: "Cargando...",
2695
- goodbye: "Adios!",
2696
- cancelled: "Cancelado.",
2697
- continue: "Continuar",
2698
- back: "Volver",
2699
- save: "Guardar",
2700
- delete: "Eliminar",
2701
- edit: "Editar",
2702
- create: "Crear",
2703
- open: "Abrir",
2704
- close: "Cerrar",
2705
- search: "Buscar",
2706
- filter: "Filtrar",
2707
- all: "Todos",
2708
- none: "Ninguno",
2709
- unknown: "Desconocido",
2710
- enabled: "Habilitado",
2711
- disabled: "Deshabilitado",
2712
- total: "Total",
2713
- date: "Fecha",
2714
- time: "Hora",
2715
- name: "Nombre",
2716
- value: "Valor",
2717
- type: "Tipo",
2718
- status: "Estado",
2719
- description: "Descripcion",
2720
- actions: "Acciones",
2721
- settings: "Configuracion",
2722
- help: "Ayuda",
2723
- version: "Version",
2724
- forceOption: "Sin confirmacion",
2725
- pressAnyKey: "Presiona cualquier tecla para continuar..."
2726
- },
2727
- auth: {
2728
- notLoggedIn: "No conectado",
2729
- loginWith: "Iniciar sesion con: shiva login",
2730
- loginSuccess: "Sesion iniciada con exito!",
2731
- logoutSuccess: "Sesion cerrada con exito.",
2732
- alreadyLoggedIn: "Ya conectado como {email}",
2733
- loginCancelled: "Inicio de sesion cancelado.",
2734
- otpSent: "El codigo de inicio de sesion ha sido enviado.",
2735
- otpInvalid: "Codigo invalido.",
2736
- enterEmail: "Direccion de email:",
2737
- enterOtp: "Introduce el codigo de inicio de sesion:",
2738
- reloginQuestion: "Deseas volver a iniciar sesion?",
2739
- invalidEmail: "Por favor introduce una direccion de email valida",
2740
- twoFactorEnabled: "2FA habilitado.",
2741
- twoFactorDisabled: "2FA deshabilitado.",
2742
- invalidToken: "Token invalido."
2743
- },
2744
- errors: {
2745
- unknown: "Ha ocurrido un error desconocido",
2746
- network: "Error de red. Comprueba tu conexion.",
2747
- notFound: "No encontrado: {item}",
2748
- permissionDenied: "Permiso denegado",
2749
- apiError: "Error de API",
2750
- fileNotFound: "Archivo no encontrado: {file}",
2751
- invalidFormat: "Formato invalido",
2752
- alreadyExists: "Ya existe: {item}",
2753
- notSupported: "No soportado",
2754
- timeout: "Tiempo de espera agotado",
2755
- invalidInput: "Entrada invalida",
2756
- clipboardFailed: "Error del portapapeles"
2757
- },
2758
- commands: {
2759
- login: {
2760
- description: "Iniciar sesion en shiva.li",
2761
- emailOption: "Direccion de email para inicio de sesion OTP",
2762
- otpOption: "Usar inicio de sesion OTP en lugar de navegador"
2763
- },
2764
- logout: {
2765
- description: "Cerrar sesion en shiva.li"
2766
- },
2767
- secrets: {
2768
- description: "Gestionar claves API y secretos (Cloud Vault)",
2769
- vault: "SHIVA Secrets Vault",
2770
- global: "Global:",
2771
- projectSpecific: "Especifico del proyecto:",
2772
- noSecrets: "No hay secretos almacenados",
2773
- addHint: "Agregar secreto: shiva secrets add <KEY> <VALUE>",
2774
- listDesc: "Listar todos los secretos",
2775
- addDesc: "Agregar un secreto",
2776
- removeDesc: "Eliminar un secreto",
2777
- getDesc: "Mostrar valor del secreto (enmascarado)",
2778
- envDesc: "Exportar secretos en formato .env",
2779
- importDesc: "Importar archivo .env al vault",
2780
- exportDesc: "Exportar secretos",
2781
- saved: 'Secreto "{key}" guardado!',
2782
- deleted: 'Secreto "{key}" eliminado',
2783
- copied: 'Secreto "{key}" copiado al portapapeles',
2784
- autoCleared: "Se borrara automaticamente despues de 30 segundos...",
2785
- invalidName: "Nombre de secreto invalido",
2786
- nameFormat: "Formato: MAYUSCULAS_CON_GUIONES_BAJOS",
2787
- valueRequired: "Valor requerido",
2788
- confirmSave: "Guardar secreto?",
2789
- confirmDelete: 'Realmente eliminar el secreto "{key}"?',
2790
- loadingSecrets: "Cargando secretos...",
2791
- savingSecret: "Guardando secreto...",
2792
- deletingSecret: "Eliminando secreto...",
2793
- exportingSecrets: "Exportando secretos...",
2794
- importingSecrets: "Importando secretos...",
2795
- fileContainsSensitive: "Este archivo contiene datos sensibles!",
2796
- addToGitignore: "Agregar a .gitignore!",
2797
- secretsImported: "{count} secreto(s) importado(s) con exito",
2798
- secretsFailed: "{count} secreto(s) fallido(s)",
2799
- noValidSecrets: "No se encontraron secretos validos en el archivo",
2800
- dryRunInfo: "Dry-run: No se realizaron cambios",
2801
- showValue: "Mostrar valor?",
2802
- revealWarning: "Los valores de los secretos se mostraran en la terminal!",
2803
- revealHint: "Mostrar valor completo con --reveal o -r",
2804
- secretsToImport: "Secretos a importar"
2805
- },
2806
- remember: {
2807
- description: "Guardar memoria en la nube",
2808
- saved: "Memoria guardada!",
2809
- category: "Categoria: {category}"
2810
- },
2811
- search: {
2812
- description: "Buscar en memorias",
2813
- header: "SHIVA Code - Busqueda",
2814
- noResults: "No se encontraron resultados",
2815
- enterQuery: "Introduce el termino de busqueda:",
2816
- searching: "Buscando...",
2817
- resultsFound: "{count} resultado(s) encontrado(s)"
2818
- },
2819
- forget: {
2820
- description: "Eliminar memorias (RGPD)",
2821
- header: "SHIVA Code - Olvidar",
2822
- warning: "ADVERTENCIA: Eliminar todas las memorias",
2823
- confirmDelete: "Realmente eliminar las memorias?",
2824
- deleted: "Memorias eliminadas",
2825
- selectMemories: "Selecciona las memorias a eliminar:"
2826
- },
2827
- sessions: {
2828
- description: "Listar todas las sesiones de Claude Code",
2829
- header: "SHIVA Code - Sesiones",
2830
- noSessions: "No se encontraron sesiones.",
2831
- branch: "Rama",
2832
- messages: "Mensajes",
2833
- selectSession: "Selecciona una sesion:"
2834
- },
2835
- resume: {
2836
- description: "Continuar sesion",
2837
- selectSession: "Selecciona una sesion para continuar:",
2838
- starting: "Iniciando sesion..."
2839
- },
2840
- restore: {
2841
- description: "Restaurar sesion fallida",
2842
- selectSession: "Selecciona una sesion para restaurar:",
2843
- restored: "Sesion restaurada"
2844
- },
2845
- start: {
2846
- description: "Iniciar multiples proyectos",
2847
- selectProjects: "Selecciona proyectos para iniciar:",
2848
- starting: "Iniciando {count} proyecto(s)...",
2849
- dockerMode: "Modo Docker",
2850
- sandboxMode: "Modo Sandbox"
2851
- },
2852
- init: {
2853
- description: "Inicializar proyecto para SHIVA Code",
2854
- detected: "Detectado",
2855
- initialized: "Proyecto inicializado!",
2856
- alreadyInitialized: "Proyecto ya inicializado",
2857
- confirmInit: "Inicializar proyecto?",
2858
- creatingProject: "Creando proyecto..."
2859
- },
2860
- sync: {
2861
- description: "Sincronizar proyecto con la nube",
2862
- synced: "Sincronizado",
2863
- batchSync: "SHIVA Code - Sync por lotes",
2864
- syncing: "Sincronizando...",
2865
- noChanges: "Sin cambios"
2866
- },
2867
- status: {
2868
- description: "Mostrar estado del proyecto",
2869
- header: "SHIVA Code - Estado",
2870
- notInitialized: "Proyecto no inicializado. Usa: shiva init"
2871
- },
2872
- projects: {
2873
- description: "Listar todos los proyectos",
2874
- header: "SHIVA Code - Proyectos",
2875
- noProjects: "No se encontraron proyectos."
2876
- },
2877
- connect: {
2878
- description: "Conectar proyecto con la nube",
2879
- connected: "Proyecto conectado",
2880
- selectProject: "Selecciona un proyecto:"
2881
- },
2882
- disconnect: {
2883
- description: "Desconectar proyecto de la nube",
2884
- disconnected: "Proyecto desconectado"
2885
- },
2886
- config: {
2887
- description: "Gestionar configuracion",
2888
- header: "Configuracion SHIVA",
2889
- claudeHeader: "Configuracion Claude Code",
2890
- syncHeader: "Estado de sincronizacion",
2891
- featuresHeader: "Opciones de funciones",
2892
- getDesc: "Mostrar configuracion",
2893
- setDesc: "Establecer configuracion",
2894
- listDesc: "Mostrar toda la configuracion",
2895
- resetDesc: "Restablecer configuracion",
2896
- updated: "Configuracion actualizada",
2897
- currentValue: "Valor actual: {value}",
2898
- invalidKey: "Configuracion invalida: {key}",
2899
- invalidValue: "Valor invalido: {value}",
2900
- languageSet: "Idioma establecido a {lang}",
2901
- invalidLanguage: "Idioma invalido. Disponibles: {valid}"
2902
- },
2903
- issues: {
2904
- description: "Mostrar issues de GitHub",
2905
- header: "GitHub Issues",
2906
- noIssues: "No se encontraron issues",
2907
- selectIssue: "Selecciona un issue:",
2908
- creating: "Creando issue..."
2909
- },
2910
- prs: {
2911
- description: "Mostrar pull requests",
2912
- header: "Pull Requests",
2913
- noPRs: "No se encontraron pull requests",
2914
- selectPR: "Selecciona un PR:"
2915
- },
2916
- github: {
2917
- description: "Integracion con GitHub",
2918
- header: "GitHub",
2919
- notInstalled: "GitHub CLI (gh) no instalado",
2920
- notAuthenticated: "GitHub CLI no autenticado",
2921
- notGitRepo: "No es un repositorio Git",
2922
- notGithubRepo: "No es un repositorio de GitHub",
2923
- statusDesc: "Mostrar estado de GitHub",
2924
- loginDesc: "Iniciar sesion en GitHub",
2925
- initDesc: "Inicializar repositorio de GitHub"
2926
- },
2927
- doctor: {
2928
- description: "Verificacion del sistema",
2929
- header: "SHIVA Code - Doctor",
2930
- checking: "Verificando sistema...",
2931
- allGood: "Todo esta bien!",
2932
- issuesFound: "{count} problema(s) encontrado(s)"
2933
- },
2934
- stats: {
2935
- description: "Mostrar analiticas",
2936
- header: "SHIVA Code - Estadisticas",
2937
- loading: "Cargando estadisticas..."
2938
- },
2939
- upgrade: {
2940
- description: "Actualizar SHIVA",
2941
- checking: "Buscando actualizaciones...",
2942
- upToDate: "SHIVA esta actualizado (version {version})",
2943
- newVersion: "Nueva version disponible: {version}",
2944
- upgrading: "Actualizando...",
2945
- upgraded: "SHIVA actualizado a la version {version}"
2946
- },
2947
- telemetry: {
2948
- description: "Configuracion de telemetria",
2949
- enabled: "Telemetria habilitada",
2950
- disabled: "Telemetria deshabilitada"
2951
- },
2952
- completions: {
2953
- description: "Instalar completions de shell",
2954
- installed: "Completions instalados para {shell}",
2955
- installHint: "Reinicia tu shell para los cambios"
2956
- },
2957
- docker: {
2958
- description: "Gestionar modo Docker",
2959
- header: "SHIVA Code - Docker",
2960
- notAvailable: "Docker no esta disponible",
2961
- starting: "Iniciando contenedor Docker...",
2962
- started: "Contenedor Docker iniciado",
2963
- stopped: "Contenedor Docker detenido",
2964
- statusDesc: "Mostrar estado de Docker",
2965
- startDesc: "Iniciar contenedor Docker",
2966
- stopDesc: "Detener contenedor Docker",
2967
- logsDesc: "Mostrar logs de Docker"
2968
- },
2969
- sandbox: {
2970
- description: "Gestionar sandbox",
2971
- header: "SHIVA Code - Sandbox",
2972
- created: "Sandbox creado",
2973
- applied: "Cambios del sandbox aplicados",
2974
- discarded: "Sandbox descartado",
2975
- listDesc: "Listar todos los sandboxes",
2976
- createDesc: "Crear nuevo sandbox",
2977
- applyDesc: "Aplicar cambios del sandbox",
2978
- discardDesc: "Descartar sandbox"
2979
- },
2980
- workflow: {
2981
- description: "Gestionar workflows",
2982
- header: "SHIVA Code - Workflows"
2983
- },
2984
- hook: {
2985
- description: "Gestionar hooks",
2986
- header: "SHIVA Code - Hooks"
2987
- },
2988
- package: {
2989
- description: "Gestionar grupos de proyectos",
2990
- header: "SHIVA Code - Packages",
2991
- noPackages: "No se encontraron packages",
2992
- createDesc: "Crear nuevo package",
2993
- listDesc: "Listar todos los packages",
2994
- addDesc: "Agregar proyecto al package",
2995
- removeDesc: "Eliminar proyecto del package",
2996
- deleteDesc: "Eliminar package",
2997
- created: 'Package "{name}" creado',
2998
- deleted: 'Package "{name}" eliminado',
2999
- projectAdded: "Proyecto agregado al package",
3000
- projectRemoved: "Proyecto eliminado del package"
3001
- },
3002
- context: {
3003
- description: "Mostrar contexto",
3004
- header: "SHIVA Code - Contexto",
3005
- noContext: "No se encontro contexto"
3006
- },
3007
- tags: {
3008
- description: "Gestionar etiquetas de sesion",
3009
- header: "SHIVA Code - Etiquetas",
3010
- noTags: "No se encontraron etiquetas"
3011
- },
3012
- export: {
3013
- description: "Exportar sesiones",
3014
- header: "SHIVA Code - Exportar",
3015
- exported: "Exportado a {file}",
3016
- selectFormat: "Selecciona formato:"
3017
- },
3018
- import: {
3019
- description: "Importar sesiones",
3020
- header: "SHIVA Code - Importar",
3021
- imported: "{count} sesion(es) importada(s)",
3022
- selectFile: "Selecciona un archivo:"
3023
- },
3024
- user: {
3025
- description: "Informacion del usuario",
3026
- header: "SHIVA Code - Usuario"
3027
- },
3028
- welcome: {
3029
- description: "Mostrar mensaje de bienvenida"
3030
- },
3031
- validate: {
3032
- description: "Validar proyecto",
3033
- header: "SHIVA Code - Validacion",
3034
- valid: "El proyecto es valido",
3035
- invalid: "El proyecto es invalido"
3036
- },
3037
- scan: {
3038
- description: "Verificar seguridad del package",
3039
- header: "SHIVA Code - Escaneo de seguridad",
3040
- scanning: "Escaneando...",
3041
- noIssues: "No se encontraron problemas de seguridad",
3042
- issuesFound: "{count} problema(s) de seguridad encontrado(s)"
3043
- },
3044
- security: {
3045
- description: "Configuracion de seguridad",
3046
- header: "SHIVA Code - Seguridad"
3047
- },
3048
- secureToken: {
3049
- description: "Almacenar token de forma segura"
3050
- },
3051
- project: {
3052
- description: "Informacion del proyecto",
3053
- header: "SHIVA Code - Proyecto"
3054
- },
3055
- repair: {
3056
- description: "Reparar proyecto",
3057
- header: "SHIVA Code - Reparacion",
3058
- repaired: "Proyecto reparado"
3059
- },
3060
- help: {
3061
- description: "Ayuda y documentacion",
3062
- header: "SHIVA Code - Ayuda",
3063
- topics: "Temas:",
3064
- quickstart: "Inicio rapido",
3065
- commands: "Vista general de comandos",
3066
- memory: "Sistema de memoria",
3067
- secrets: "Gestion de secretos",
3068
- troubleshooting: "Solucion de problemas",
3069
- onlineHelp: "Abrir ayuda en linea"
3070
- }
3071
- },
3072
- controlStation: {
3073
- title: "SHIVA Control Station",
3074
- selection: "Seleccion:",
3075
- navigate: "navegar",
3076
- sessions: "Sesiones",
3077
- sessionsDesc: "Mostrar todas",
3078
- packages: "Packages",
3079
- packagesDesc: "Gestionar",
3080
- issues: "Issues",
3081
- issuesDesc: "GitHub Issues",
3082
- prs: "PRs",
3083
- prsDesc: "Pull Requests",
3084
- config: "Config",
3085
- configDesc: "Configuracion",
3086
- help: "Ayuda",
3087
- helpDesc: "Documentacion",
3088
- quit: "Salir",
3089
- noSessionsFound: "No se encontraron sesiones.",
3090
- startClaudeHint: "Inicia Claude Code en un proyecto",
3091
- orCreatePackage: 'O: shiva package create "Nombre"',
3092
- startingSession: "Iniciando sesion en {project}...",
3093
- startingPackage: "Iniciando package {name}...",
3094
- unknownCommand: "Comando desconocido: {command}",
3095
- didYouMean: "Quisiste decir:",
3096
- projects: "Proyectos",
3097
- claudeNotInstalled: "Claude Code no instalado",
3098
- claudeInstallHint: "curl -fsSL https://claude.ai/install.sh | bash"
3099
- },
3100
- help: {
3101
- quickstart: {
3102
- title: "Inicio rapido",
3103
- content: [
3104
- "1. shiva login - Iniciar sesion",
3105
- "2. shiva init - Inicializar proyecto",
3106
- "3. shiva - Abrir Control Station",
3107
- "4. shiva remember - Guardar memoria",
3108
- "5. shiva secrets - Gestionar secretos"
3109
- ]
3110
- },
3111
- commandsOverview: {
3112
- title: "Vista general de comandos",
3113
- sessionManagement: "Gestion de sesiones",
3114
- githubIntegration: "Integracion con GitHub",
3115
- memoryContext: "Memoria y Contexto",
3116
- dockerIntegration: "Integracion con Docker",
3117
- security: "Seguridad",
3118
- projectManagement: "Gestion de proyectos",
3119
- system: "Sistema"
3120
- },
3121
- memorySystem: {
3122
- title: "Sistema de memoria",
3123
- description: "SHIVA almacena informacion de forma persistente en la nube.",
3124
- categories: {
3125
- identity: "Identidad del usuario (nombre, rol)",
3126
- preference: "Preferencias (estilo de codigo)",
3127
- convention: "Convenciones del proyecto",
3128
- solution: "Problemas resueltos",
3129
- task: "Tareas",
3130
- context: "Contexto del proyecto"
3131
- }
3132
- },
3133
- secretsManagement: {
3134
- title: "Gestion de secretos",
3135
- description: "Almacenamiento seguro de claves API y secretos en la nube.",
3136
- features: [
3137
- "Cifrado de extremo a extremo",
3138
- "Inyeccion automatica en sesiones",
3139
- "Secretos especificos del proyecto y globales",
3140
- "Importar/exportar archivos .env"
3141
- ]
3142
- },
3143
- troubleshooting: {
3144
- title: "Solucion de problemas",
3145
- commonIssues: {
3146
- notLoggedIn: "No conectado",
3147
- notLoggedInSolution: "Usa 'shiva login' para conectarte",
3148
- claudeNotFound: "Claude Code no encontrado",
3149
- claudeNotFoundSolution: "Instala Claude Code con el instalador oficial",
3150
- networkError: "Error de red",
3151
- networkErrorSolution: "Comprueba tu conexion a internet",
3152
- permissionDenied: "Permiso denegado",
3153
- permissionDeniedSolution: "Comprueba los permisos de archivos o ejecuta con sudo"
3154
- }
3155
- }
3156
- },
3157
- time: {
3158
- justNow: "ahora mismo",
3159
- minutesAgo: "hace {count} minuto(s)",
3160
- hoursAgo: "hace {count} hora(s)",
3161
- daysAgo: "hace {count} dia(s)",
3162
- weeksAgo: "hace {count} semana(s)",
3163
- monthsAgo: "hace {count} mes(es)"
3164
- },
3165
- onboarding: {
3166
- welcome: "Bienvenido a SHIVA Code!",
3167
- subtitle: "Hace Claude Code persistente",
3168
- selectLanguage: "Seleccionar idioma:",
3169
- claudeCode: "Claude Code",
3170
- claudeNotFound: "Claude Code no encontrado",
3171
- claudeNotFoundDesc: "SHIVA extiende Claude Code con almacenamiento persistente. Necesitas Claude Code para usar SHIVA.",
3172
- installation: "Instalacion:",
3173
- moreInfo: "Mas informacion:",
3174
- continueAnyway: "Continuar de todos modos?",
3175
- restartAfterInstall: "Reiniciar despues de la instalacion: shiva",
3176
- found: "Encontrado",
3177
- display: "Visualizacion",
3178
- darkMode: "Modo oscuro",
3179
- lightMode: "Modo claro",
3180
- recommended: "(recomendado)",
3181
- themeSaved: "Tema guardado",
3182
- account: "Cuenta",
3183
- accountFeatures: "Con una cuenta obtienes:",
3184
- cloudSync: "Sincronizacion en la nube para memories",
3185
- crossDeviceSessions: "Sesiones entre dispositivos",
3186
- secretsVault: "Boveda de secretos (encriptada)",
3187
- loginNow: "Iniciar sesion ahora?",
3188
- openBrowser: "Abriendo navegador...",
3189
- loginLater: "Despues: shiva login",
3190
- integration: "Integracion",
3191
- autoIntegration: "SHIVA se integra automaticamente con Claude Code:",
3192
- loadMemoriesOnStart: "Cargar memories al inicio",
3193
- saveMemoriesOnExit: "Guardar memories al salir",
3194
- enableAutoIntegration: "Activar integracion automatica?",
3195
- hooksInstalled: "Hooks instalados",
3196
- hooksFailed: "Instalacion de hooks fallida",
3197
- hooksLater: "Despues: shiva hook install",
3198
- setupComplete: "Configuracion completa!",
3199
- nextSteps: "Proximos pasos:",
3200
- letsGo: "Vamos:",
3201
- goToProject: "Ir a tu proyecto",
3202
- initShiva: "Inicializar SHIVA",
3203
- startClaude: "Iniciar Claude Code",
3204
- commands: "Comandos:",
3205
- laterLogin: "Iniciar sesion despues: shiva login"
3206
- },
3207
- account: {
3208
- description: "Gestionar cuenta",
3209
- deleteDesc: "Eliminar cuenta y TODOS los datos permanentemente (RGPD)",
3210
- infoDesc: "Mostrar informacion de la cuenta",
3211
- header: "Cuenta SHIVA",
3212
- deleteWarning: "ELIMINAR CUENTA - IRREVERSIBLE",
3213
- deleteWarning1: "Estas a punto de eliminar permanentemente tu cuenta SHIVA.",
3214
- willBeDeleted: "Los siguientes datos seran PERMANENTEMENTE eliminados:",
3215
- allProjects: "Todos los proyectos",
3216
- allMemories: "Todas las memories",
3217
- allSecrets: "Todos los secrets (claves API)",
3218
- allSessions: "Todos los datos de sesion",
3219
- allSettings: "Todas las configuraciones",
3220
- accountData: "Datos de la cuenta (email, perfil)",
3221
- cannotBeUndone: "Esta accion NO puede deshacerse!",
3222
- confirmDelete1: "Entiendo - quiero eliminar mi cuenta",
3223
- enterEmail: "Introduce tu email para confirmar ({email}):",
3224
- emailMismatch: "El email no coincide",
3225
- typeDelete: "Escribe DELETE para confirmar:",
3226
- deleting: "Eliminando cuenta...",
3227
- deleted: "Cuenta eliminada",
3228
- deleteFailed: "Eliminacion fallida",
3229
- deletedInfo: "Todos tus datos han sido eliminados de nuestros sistemas.",
3230
- goodbye: "Gracias por usar SHIVA. Adios!",
3231
- memberSince: "Miembro desde",
3232
- usage: "Uso:",
3233
- projects: "Proyectos",
3234
- memories: "Memories",
3235
- secrets: "Secrets",
3236
- sessions: "Sesiones"
3237
- },
3238
- uninstall: {
3239
- description: "Desinstalar SHIVA completamente",
3240
- header: "Desinstalacion",
3241
- localOption: "Solo eliminar datos locales",
3242
- fullOption: "Desinstalacion completa",
3243
- keepAccountOption: "Mantener datos de la cuenta",
3244
- willBeRemoved: "Se eliminara lo siguiente:",
3245
- globalConfig: "Configuracion global",
3246
- claudeHooks: "Hooks de Claude Code",
3247
- projectShivaDir: "Directorio .shiva/ del proyecto",
3248
- accountData: "Datos de la cuenta en el servidor",
3249
- npmPackage: "Paquete NPM",
3250
- nothingToRemove: "No se encontraron datos locales.",
3251
- runNpmUninstall: "Ejecuta este comando para eliminar SHIVA:",
3252
- confirmUninstall: "Realmente desinstalar SHIVA?",
3253
- accountWarning: "Tu cuenta y todos los datos en la nube seran eliminados!",
3254
- confirmAccountDelete: "Eliminar tambien los datos de la cuenta?",
3255
- accountKept: "Los datos de la cuenta se mantendran.",
3256
- removingHooks: "Eliminando hooks de Claude...",
3257
- hooksRemoved: "Hooks de Claude eliminados",
3258
- hooksFailed: "Error al eliminar hooks",
3259
- removingConfig: "Eliminando configuracion...",
3260
- configRemoved: "Configuracion eliminada",
3261
- configFailed: "Error al eliminar configuracion",
3262
- removingProjectDir: "Eliminando directorio .shiva/...",
3263
- projectDirRemoved: "Directorio .shiva/ eliminado",
3264
- projectDirFailed: "Error al eliminar .shiva/",
3265
- deletingAccount: "Eliminando datos de la cuenta...",
3266
- accountDeleted: "Datos de la cuenta eliminados",
3267
- accountFailed: "Error al eliminar cuenta",
3268
- complete: "Desinstalacion completada!",
3269
- partialSuccess: "Algunos pasos fallaron.",
3270
- finalStep: "Ultimo paso - ejecuta:",
3271
- accountStillExists: "Nota: Tu cuenta aun existe en el servidor.",
3272
- deleteAccountHint: "Para eliminar: shiva account delete",
3273
- thanksForUsing: "Gracias por usar SHIVA!"
3274
- },
3275
- projectDelete: {
3276
- deleteDesc: "Eliminar proyecto y todos los datos",
3277
- deleteIdOption: "ID del proyecto a eliminar",
3278
- deleteWarning: "ADVERTENCIA: El proyecto sera eliminado permanentemente!",
3279
- notConnected: "El directorio actual no esta conectado a un proyecto",
3280
- memoriesCount: "Memories",
3281
- sessionsCount: "Sesiones",
3282
- confirmDelete: "Realmente eliminar proyecto?",
3283
- enterNameToConfirm: 'Introduce "{name}" para confirmar:',
3284
- deleting: "Eliminando proyecto...",
3285
- deleted: "Proyecto eliminado",
3286
- deleteFailed: "Eliminacion fallida",
3287
- deletedInfo: "Todos los datos del proyecto han sido eliminados de la nube."
3288
- }
3289
- };
3290
-
3291
- // src/i18n/types.ts
3292
- var SUPPORTED_LANGUAGES = ["de", "en", "fr", "es"];
3293
- var LANGUAGE_NAMES = {
3294
- de: "Deutsch",
3295
- en: "English",
3296
- fr: "Francais",
3297
- es: "Espanol"
3298
- };
3299
-
3300
- // src/i18n/index.ts
3301
- var translations = {
3302
- de: de_default,
3303
- en: en_default,
3304
- fr: fr_default,
3305
- es: es_default
3306
- };
3307
- var currentLanguage = "de";
3308
- function setLanguage(lang) {
3309
- currentLanguage = lang;
3310
- }
3311
- function getLanguage() {
3312
- return currentLanguage;
3313
- }
3314
- function isValidLanguage(lang) {
3315
- return ["de", "en", "fr", "es"].includes(lang);
3316
- }
3317
- function t(key, params) {
3318
- const keys = key.split(".");
3319
- let value = translations[currentLanguage];
3320
- for (const k of keys) {
3321
- if (value && typeof value === "object" && k in value) {
3322
- value = value[k];
3323
- } else {
3324
- value = void 0;
3325
- break;
3326
- }
3327
- }
3328
- if (typeof value !== "string") {
3329
- value = keys.reduce(
3330
- (obj, k) => obj && typeof obj === "object" && k in obj ? obj[k] : void 0,
3331
- translations.de
3332
- );
3333
- }
3334
- if (typeof value !== "string") {
3335
- return key;
3336
- }
3337
- if (params) {
3338
- for (const [param, val] of Object.entries(params)) {
3339
- value = value.replace(new RegExp(`\\{${param}\\}`, "g"), String(val));
3340
- }
3341
- }
3342
- return value;
3343
- }
3344
- function tArray(key) {
3345
- const keys = key.split(".");
3346
- let value = translations[currentLanguage];
3347
- for (const k of keys) {
3348
- if (value && typeof value === "object" && k in value) {
3349
- value = value[k];
3350
- } else {
3351
- value = void 0;
3352
- break;
3353
- }
3354
- }
3355
- if (!Array.isArray(value)) {
3356
- value = keys.reduce(
3357
- (obj, k) => obj && typeof obj === "object" && k in obj ? obj[k] : void 0,
3358
- translations.de
3359
- );
3360
- }
3361
- return Array.isArray(value) ? value : [];
3362
- }
3363
- function initializeLanguage(storedLang) {
3364
- if (storedLang && isValidLanguage(storedLang)) {
3365
- setLanguage(storedLang);
3366
- return;
3367
- }
3368
- try {
3369
- const systemLocale = Intl.DateTimeFormat().resolvedOptions().locale;
3370
- const langCode = systemLocale.split("-")[0].toLowerCase();
3371
- if (isValidLanguage(langCode)) {
3372
- setLanguage(langCode);
3373
- return;
3374
- }
3375
- } catch {
3376
- }
3377
- setLanguage("de");
3378
- }
3379
-
3380
- // src/commands/auth/login.ts
3381
- var loginCommand = new Command("login").description(t("commands.login.description")).option("-e, --email <email>", t("commands.login.emailOption")).option("--otp", t("commands.login.otpOption")).action(async (options) => {
3382
- if (isAuthenticated()) {
3383
- const config = getConfig();
3384
- log.info(t("auth.alreadyLoggedIn", { email: config.email || "" }));
3385
- const { relogin } = await inquirer2.prompt([
3386
- {
3387
- type: "confirm",
3388
- name: "relogin",
3389
- message: t("auth.reloginQuestion"),
3390
- default: false
3391
- }
3392
- ]);
3393
- if (!relogin) {
3394
- return;
3395
- }
3396
- }
3397
- log.brand();
3398
- if (options.email) {
3399
- await loginWithOtp(options.email);
3400
- return;
3401
- }
3402
- if (options.otp) {
3403
- const { email } = await inquirer2.prompt([
3404
- {
3405
- type: "input",
3406
- name: "email",
3407
- message: t("auth.enterEmail"),
3408
- validate: (input) => {
3409
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(input)) {
3410
- return t("auth.invalidEmail");
3411
- }
3412
- return true;
3413
- }
3414
- }
3415
- ]);
3416
- await loginWithOtp(email);
3417
- return;
3418
- }
3419
- await loginWithBrowser();
3420
- });
3421
-
3422
- export {
3423
- SUPPORTED_LANGUAGES,
3424
- LANGUAGE_NAMES,
3425
- setLanguage,
3426
- getLanguage,
3427
- t,
3428
- tArray,
3429
- initializeLanguage,
3430
- twoFactorService,
3431
- deviceTrustService,
3432
- displayQRCode,
3433
- displayBackupCodes,
3434
- displayDevices,
3435
- logout,
3436
- loginCommand
3437
- };