shiva-code 0.7.6 → 0.7.8

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.
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-Z6NXFC4Q.js";
5
5
  import {
6
6
  api
7
- } from "./chunk-J5IS642F.js";
7
+ } from "./chunk-KB6M24M3.js";
8
8
  import {
9
9
  clearAuth,
10
10
  getConfig,
@@ -414,44 +414,18 @@ async function loginWithOtp(email) {
414
414
  }
415
415
  ]);
416
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
+ }
417
424
  if (!authResponse.success || !authResponse.token || !authResponse.user) {
418
425
  log.error(authResponse.message || "Ung\xFCltiger Code");
419
426
  return false;
420
427
  }
421
428
  setAuth(authResponse.token, authResponse.user);
422
- try {
423
- const tfaStatus = await twoFactorService.getStatus();
424
- if (tfaStatus.enabled) {
425
- log.newline();
426
- log.info("2FA ist aktiviert. Bitte verifiziere dich.");
427
- log.newline();
428
- const isDeviceTrusted = await deviceTrustService.isDeviceTrusted();
429
- if (!isDeviceTrusted) {
430
- const verified = await prompt2FAVerification();
431
- if (!verified) {
432
- clearAuth();
433
- log.error("2FA-Verifizierung fehlgeschlagen");
434
- return false;
435
- }
436
- const { trustDevice } = await inquirer.prompt([{
437
- type: "confirm",
438
- name: "trustDevice",
439
- message: "Diesem Ger\xE4t vertrauen? (Kein 2FA bei zuk\xFCnftigen Logins)",
440
- default: true
441
- }]);
442
- if (trustDevice) {
443
- try {
444
- await deviceTrustService.trustDevice();
445
- log.success("Ger\xE4t als vertrauensw\xFCrdig markiert");
446
- } catch {
447
- }
448
- }
449
- } else {
450
- log.dim("Ger\xE4t ist vertrauensw\xFCrdig - 2FA \xFCbersprungen");
451
- }
452
- }
453
- } catch {
454
- }
455
429
  log.newline();
456
430
  log.success(`Angemeldet als ${authResponse.user.email} (${authResponse.user.tier.toUpperCase()})`);
457
431
  return true;
@@ -461,6 +435,58 @@ async function loginWithOtp(email) {
461
435
  return false;
462
436
  }
463
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
+ }
464
490
  async function findAvailablePort() {
465
491
  for (let port = PORT_RANGE_START; port <= PORT_RANGE_END; port++) {
466
492
  const isAvailable = await checkPort(port);
@@ -71,6 +71,16 @@ var ApiClient = class {
71
71
  body: JSON.stringify({ token, otp })
72
72
  });
73
73
  }
74
+ /**
75
+ * Validate 2FA code during login
76
+ * Used when initial login returns requires2FA: true
77
+ */
78
+ async validate2FALogin(data) {
79
+ return this.request("/auth/2fa/login-validate", {
80
+ method: "POST",
81
+ body: JSON.stringify(data)
82
+ });
83
+ }
74
84
  async getCurrentUser() {
75
85
  return this.request("/auth/me");
76
86
  }
@@ -1659,7 +1659,7 @@ hookCommand.command("scan-command").description("Scanne Bash-Befehle auf Package
1659
1659
  }
1660
1660
  });
1661
1661
  hookCommand.command("push").description("Hooks in Cloud sichern").action(async () => {
1662
- const { api } = await import("./client-RPSJP4Z5.js");
1662
+ const { api } = await import("./client-H3JXPT5B.js");
1663
1663
  const { isAuthenticated } = await import("./config-FGMZONWV.js");
1664
1664
  if (!isAuthenticated()) {
1665
1665
  log.error("Nicht angemeldet");
@@ -1679,7 +1679,7 @@ hookCommand.command("push").description("Hooks in Cloud sichern").action(async (
1679
1679
  }
1680
1680
  });
1681
1681
  hookCommand.command("pull").description("Hooks aus Cloud laden").option("-f, --force", "Lokale Hooks \xFCberschreiben").action(async (options) => {
1682
- const { api } = await import("./client-RPSJP4Z5.js");
1682
+ const { api } = await import("./client-H3JXPT5B.js");
1683
1683
  const { isAuthenticated } = await import("./config-FGMZONWV.js");
1684
1684
  if (!isAuthenticated()) {
1685
1685
  log.error("Nicht angemeldet");
@@ -1711,7 +1711,7 @@ hookCommand.command("pull").description("Hooks aus Cloud laden").option("-f, --f
1711
1711
  }
1712
1712
  });
1713
1713
  hookCommand.command("sync").description("Hooks mit Cloud synchronisieren").action(async () => {
1714
- const { api } = await import("./client-RPSJP4Z5.js");
1714
+ const { api } = await import("./client-H3JXPT5B.js");
1715
1715
  const { isAuthenticated } = await import("./config-FGMZONWV.js");
1716
1716
  if (!isAuthenticated()) {
1717
1717
  log.error("Nicht angemeldet");
@@ -1738,7 +1738,7 @@ hookCommand.command("sync").description("Hooks mit Cloud synchronisieren").actio
1738
1738
  }
1739
1739
  });
1740
1740
  hookCommand.command("cloud-list").description("Cloud-Hooks auflisten").option("--event <type>", "Nach Event-Typ filtern").option("--json", "JSON Output").action(async (options) => {
1741
- const { api } = await import("./client-RPSJP4Z5.js");
1741
+ const { api } = await import("./client-H3JXPT5B.js");
1742
1742
  const { isAuthenticated } = await import("./config-FGMZONWV.js");
1743
1743
  const { colors } = await import("./logger-E7SC5KUO.js");
1744
1744
  if (!isAuthenticated()) {
@@ -1787,7 +1787,7 @@ hookCommand.command("cloud-list").description("Cloud-Hooks auflisten").option("-
1787
1787
  }
1788
1788
  });
1789
1789
  hookCommand.command("cloud-create").description("Neuen Cloud-Hook erstellen").requiredOption("--event <event>", "Event-Typ (PreToolUse, PostToolUse, etc.)").requiredOption("--command <cmd>", "Auszuf\xFChrender Befehl").option("--matcher <pattern>", "Tool-Matcher Pattern").option("--type <type>", "Hook-Typ (command, script)", "command").option("--timeout <ms>", "Timeout in Millisekunden").action(async (options) => {
1790
- const { api } = await import("./client-RPSJP4Z5.js");
1790
+ const { api } = await import("./client-H3JXPT5B.js");
1791
1791
  const { isAuthenticated } = await import("./config-FGMZONWV.js");
1792
1792
  if (!isAuthenticated()) {
1793
1793
  log.error("Nicht angemeldet");
@@ -1815,7 +1815,7 @@ hookCommand.command("cloud-create").description("Neuen Cloud-Hook erstellen").re
1815
1815
  }
1816
1816
  });
1817
1817
  hookCommand.command("cloud-test").description("Cloud-Hook testen").argument("<hook-id>", "Hook ID").action(async (hookId) => {
1818
- const { api } = await import("./client-RPSJP4Z5.js");
1818
+ const { api } = await import("./client-H3JXPT5B.js");
1819
1819
  const { isAuthenticated } = await import("./config-FGMZONWV.js");
1820
1820
  const { colors } = await import("./logger-E7SC5KUO.js");
1821
1821
  if (!isAuthenticated()) {
@@ -1850,7 +1850,7 @@ hookCommand.command("cloud-test").description("Cloud-Hook testen").argument("<ho
1850
1850
  }
1851
1851
  });
1852
1852
  hookCommand.command("cloud-delete").description("Cloud-Hook l\xF6schen").argument("<hook-id>", "Hook ID").option("-y, --yes", "Ohne Best\xE4tigung").action(async (hookId, options) => {
1853
- const { api } = await import("./client-RPSJP4Z5.js");
1853
+ const { api } = await import("./client-H3JXPT5B.js");
1854
1854
  const { isAuthenticated } = await import("./config-FGMZONWV.js");
1855
1855
  if (!isAuthenticated()) {
1856
1856
  log.error("Nicht angemeldet");
@@ -1885,7 +1885,7 @@ hookCommand.command("cloud-delete").description("Cloud-Hook l\xF6schen").argumen
1885
1885
  }
1886
1886
  });
1887
1887
  hookCommand.command("cloud-toggle").description("Cloud-Hook aktivieren/deaktivieren").argument("<hook-id>", "Hook ID").option("--enable", "Hook aktivieren").option("--disable", "Hook deaktivieren").action(async (hookId, options) => {
1888
- const { api } = await import("./client-RPSJP4Z5.js");
1888
+ const { api } = await import("./client-H3JXPT5B.js");
1889
1889
  const { isAuthenticated } = await import("./config-FGMZONWV.js");
1890
1890
  if (!isAuthenticated()) {
1891
1891
  log.error("Nicht angemeldet");
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  api
3
- } from "./chunk-J5IS642F.js";
3
+ } from "./chunk-KB6M24M3.js";
4
4
  import "./chunk-OP4HYQZZ.js";
5
5
  import "./chunk-3RG5ZIWI.js";
6
6
  export {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hookCommand
3
- } from "./chunk-RQ75X32M.js";
3
+ } from "./chunk-NM3RPOAT.js";
4
4
  import "./chunk-Z6NXFC4Q.js";
5
5
  import "./chunk-IVFCZLBX.js";
6
6
  import "./chunk-PMA6MGQW.js";
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  hookCommand,
4
4
  packageScanner
5
- } from "./chunk-RQ75X32M.js";
5
+ } from "./chunk-NM3RPOAT.js";
6
6
  import {
7
7
  copyToClipboard,
8
8
  getClipboardInstallInstructions,
@@ -26,7 +26,7 @@ import {
26
26
  loginCommand,
27
27
  logout,
28
28
  twoFactorService
29
- } from "./chunk-KW3LP3K3.js";
29
+ } from "./chunk-3BM2KHD4.js";
30
30
  import {
31
31
  colors,
32
32
  log
@@ -34,7 +34,7 @@ import {
34
34
  import {
35
35
  api,
36
36
  enableDebug
37
- } from "./chunk-J5IS642F.js";
37
+ } from "./chunk-KB6M24M3.js";
38
38
  import {
39
39
  CONFIG_PATH,
40
40
  clearAuth,
@@ -264,7 +264,7 @@ async function promptLogin() {
264
264
  log.newline();
265
265
  log.info("\xD6ffne Browser f\xFCr Anmeldung...");
266
266
  log.newline();
267
- const { loginCommand: loginCommand2 } = await import("./login-Y6EJABSP.js");
267
+ const { loginCommand: loginCommand2 } = await import("./login-DE2U23GS.js");
268
268
  await loginCommand2.parseAsync(["login"], { from: "user" });
269
269
  return isAuthenticated();
270
270
  }
@@ -336,7 +336,7 @@ async function promptHooks() {
336
336
  if (installHooks) {
337
337
  log.newline();
338
338
  log.info("Installiere Hooks...");
339
- const { hookCommand: hookCommand2 } = await import("./hook-GIK5RFRC.js");
339
+ const { hookCommand: hookCommand2 } = await import("./hook-YNVEHNHZ.js");
340
340
  await hookCommand2.parseAsync(["hook", "install", "--all"], { from: "user" });
341
341
  onboardingStore.set("hooksInstalled", true);
342
342
  return true;
@@ -1490,7 +1490,7 @@ var syncCommand = new Command4("sync").description("Projekt mit Cloud synchronis
1490
1490
  const quiet = options.quiet;
1491
1491
  if (!isAuthenticated()) {
1492
1492
  if (!quiet) log.errorWithSuggestion(Errors.NOT_AUTHENTICATED());
1493
- process.exit(1);
1493
+ process.exit(quiet ? 0 : 1);
1494
1494
  return;
1495
1495
  }
1496
1496
  if (options.all) {
@@ -1500,7 +1500,7 @@ var syncCommand = new Command4("sync").description("Projekt mit Cloud synchronis
1500
1500
  const projectDir = resolve4(options.dir);
1501
1501
  if (!existsSync5(projectDir)) {
1502
1502
  if (!quiet) log.error(`Verzeichnis nicht gefunden: ${projectDir}`);
1503
- process.exit(1);
1503
+ process.exit(quiet ? 0 : 1);
1504
1504
  return;
1505
1505
  }
1506
1506
  const spinner = quiet ? null : ora2("Synchronisiere...").start();
@@ -1509,7 +1509,7 @@ var syncCommand = new Command4("sync").description("Projekt mit Cloud synchronis
1509
1509
  scanned = await scanProject(projectDir);
1510
1510
  } catch (error) {
1511
1511
  spinner?.fail("Fehler beim Scannen");
1512
- process.exit(1);
1512
+ process.exit(quiet ? 0 : 1);
1513
1513
  return;
1514
1514
  }
1515
1515
  let project = await api.findProjectByPath(scanned.path);
@@ -1531,7 +1531,7 @@ var syncCommand = new Command4("sync").description("Projekt mit Cloud synchronis
1531
1531
  } catch (error) {
1532
1532
  spinner?.fail("Fehler beim Erstellen");
1533
1533
  if (!quiet) log.error(error instanceof Error ? error.message : "Unbekannter Fehler");
1534
- process.exit(1);
1534
+ process.exit(quiet ? 0 : 1);
1535
1535
  return;
1536
1536
  }
1537
1537
  }
@@ -1556,7 +1556,7 @@ var syncCommand = new Command4("sync").description("Projekt mit Cloud synchronis
1556
1556
  } catch (error) {
1557
1557
  spinner?.fail("Fehler beim Hochladen");
1558
1558
  if (!quiet) log.error(error instanceof Error ? error.message : "Unbekannter Fehler");
1559
- process.exit(1);
1559
+ process.exit(quiet ? 0 : 1);
1560
1560
  return;
1561
1561
  }
1562
1562
  }
@@ -1570,7 +1570,7 @@ var syncCommand = new Command4("sync").description("Projekt mit Cloud synchronis
1570
1570
  } catch (error) {
1571
1571
  spinner?.fail("Fehler beim Aktualisieren");
1572
1572
  if (!quiet) log.error(error instanceof Error ? error.message : "Unbekannter Fehler");
1573
- process.exit(1);
1573
+ process.exit(quiet ? 0 : 1);
1574
1574
  return;
1575
1575
  }
1576
1576
  }
@@ -6555,7 +6555,7 @@ async function checkProjectExists(path15) {
6555
6555
  }
6556
6556
  }
6557
6557
  sessionsCommand.command("push").description("Sessions in Cloud sichern").option("-p, --project <pfad>", "Nur Sessions eines Projekts").action(async (options) => {
6558
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6558
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6559
6559
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6560
6560
  const { getProjectConfig: getProjectConfig2 } = await import("./config-D6M6LI6U.js");
6561
6561
  if (!isAuthenticated2()) {
@@ -6615,7 +6615,7 @@ sessionsCommand.command("push").description("Sessions in Cloud sichern").option(
6615
6615
  }
6616
6616
  });
6617
6617
  sessionsCommand.command("pull").description("Sessions aus Cloud laden").option("--json", "JSON Output").action(async (options) => {
6618
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6618
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6619
6619
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6620
6620
  if (!isAuthenticated2()) {
6621
6621
  log.error("Nicht angemeldet");
@@ -6662,7 +6662,7 @@ sessionsCommand.command("pull").description("Sessions aus Cloud laden").option("
6662
6662
  }
6663
6663
  });
6664
6664
  sessionsCommand.command("sync").description("Sessions mit Cloud synchronisieren").option("-p, --project <pfad>", "Nur Sessions eines Projekts").action(async (options) => {
6665
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6665
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6666
6666
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6667
6667
  const { getProjectConfig: getProjectConfig2 } = await import("./config-D6M6LI6U.js");
6668
6668
  if (!isAuthenticated2()) {
@@ -6715,7 +6715,7 @@ sessionsCommand.command("sync").description("Sessions mit Cloud synchronisieren"
6715
6715
  log.dim("Sessions werden automatisch mit lokalen Claude Sessions verkn\xFCpft");
6716
6716
  });
6717
6717
  sessionsCommand.command("delete <sessionId>").description("Session aus Cloud l\xF6schen").action(async (sessionId) => {
6718
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6718
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6719
6719
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6720
6720
  if (!isAuthenticated2()) {
6721
6721
  log.error("Nicht angemeldet");
@@ -6734,7 +6734,7 @@ sessionsCommand.command("delete <sessionId>").description("Session aus Cloud l\x
6734
6734
  }
6735
6735
  });
6736
6736
  sessionsCommand.command("active").description("Aktive Cloud-Sessions anzeigen").option("--json", "JSON Output").action(async (options) => {
6737
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6737
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6738
6738
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6739
6739
  if (!isAuthenticated2()) {
6740
6740
  log.error("Nicht angemeldet");
@@ -6771,7 +6771,7 @@ sessionsCommand.command("active").description("Aktive Cloud-Sessions anzeigen").
6771
6771
  }
6772
6772
  });
6773
6773
  sessionsCommand.command("stats").description("Cloud-Session-Statistiken anzeigen").option("--json", "JSON Output").action(async (options) => {
6774
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6774
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6775
6775
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6776
6776
  if (!isAuthenticated2()) {
6777
6777
  log.error("Nicht angemeldet");
@@ -6803,7 +6803,7 @@ sessionsCommand.command("stats").description("Cloud-Session-Statistiken anzeigen
6803
6803
  }
6804
6804
  });
6805
6805
  sessionsCommand.command("resume <sessionId>").description("Cloud-Session fortsetzen").action(async (sessionId) => {
6806
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6806
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6807
6807
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6808
6808
  if (!isAuthenticated2()) {
6809
6809
  log.error("Nicht angemeldet");
@@ -6827,7 +6827,7 @@ sessionsCommand.command("resume <sessionId>").description("Cloud-Session fortset
6827
6827
  }
6828
6828
  });
6829
6829
  sessionsCommand.command("export <sessionId>").description("Cloud-Session exportieren").option("-o, --output <file>", "Ausgabedatei").action(async (sessionId, options) => {
6830
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6830
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6831
6831
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6832
6832
  const { writeFileSync: writeFileSync11 } = await import("fs");
6833
6833
  if (!isAuthenticated2()) {
@@ -6851,7 +6851,7 @@ sessionsCommand.command("export <sessionId>").description("Cloud-Session exporti
6851
6851
  }
6852
6852
  });
6853
6853
  sessionsCommand.command("update <sessionId>").description("Cloud-Session aktualisieren").option("--summary <text>", "Session-Zusammenfassung").option("--branch <name>", "Git Branch").action(async (sessionId, options) => {
6854
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
6854
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
6855
6855
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
6856
6856
  if (!isAuthenticated2()) {
6857
6857
  log.error("Nicht angemeldet");
@@ -10427,7 +10427,7 @@ async function resolveSessionId(input) {
10427
10427
  return null;
10428
10428
  }
10429
10429
  tagsCommand.command("cloud").description("Memory-Tags aus Cloud laden").option("--json", "JSON Output").action(async (options) => {
10430
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
10430
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
10431
10431
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
10432
10432
  if (!isAuthenticated2()) {
10433
10433
  log.error("Nicht angemeldet");
@@ -12339,7 +12339,7 @@ function formatNumber(n) {
12339
12339
  return String(n);
12340
12340
  }
12341
12341
  statsCommand.command("sessions").description("Session Analytics (Pro Feature)").option("--json", "JSON Output").action(async (options) => {
12342
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
12342
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
12343
12343
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
12344
12344
  if (!isAuthenticated2()) {
12345
12345
  log.error("Nicht angemeldet");
@@ -12391,7 +12391,7 @@ statsCommand.command("sessions").description("Session Analytics (Pro Feature)").
12391
12391
  }
12392
12392
  });
12393
12393
  statsCommand.command("tokens").description("Token Usage Analytics (Pro Feature)").option("--json", "JSON Output").action(async (options) => {
12394
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
12394
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
12395
12395
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
12396
12396
  if (!isAuthenticated2()) {
12397
12397
  log.error("Nicht angemeldet");
@@ -12439,7 +12439,7 @@ statsCommand.command("tokens").description("Token Usage Analytics (Pro Feature)"
12439
12439
  }
12440
12440
  });
12441
12441
  statsCommand.command("tools").description("Tool Usage Analytics (Pro Feature)").option("--json", "JSON Output").action(async (options) => {
12442
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
12442
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
12443
12443
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
12444
12444
  if (!isAuthenticated2()) {
12445
12445
  log.error("Nicht angemeldet");
@@ -12483,7 +12483,7 @@ statsCommand.command("tools").description("Tool Usage Analytics (Pro Feature)").
12483
12483
  }
12484
12484
  });
12485
12485
  statsCommand.command("export").description("Analytics-Daten exportieren (Pro Feature)").option("--start <date>", "Start-Datum (YYYY-MM-DD)").option("--end <date>", "End-Datum (YYYY-MM-DD)").option("--format <format>", "Format: json, csv", "json").option("-o, --output <file>", "Ausgabedatei").action(async (options) => {
12486
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
12486
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
12487
12487
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
12488
12488
  const { writeFileSync: writeFileSync11 } = await import("fs");
12489
12489
  if (!isAuthenticated2()) {
@@ -12518,7 +12518,7 @@ statsCommand.command("export").description("Analytics-Daten exportieren (Pro Fea
12518
12518
  }
12519
12519
  });
12520
12520
  statsCommand.command("track").description("Analytics Event tracken").argument("<type>", "Event-Typ").argument("[data]", "Event-Daten als JSON").action(async (type2, data) => {
12521
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
12521
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
12522
12522
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
12523
12523
  if (!isAuthenticated2()) {
12524
12524
  log.error("Nicht angemeldet");
@@ -13719,7 +13719,7 @@ packageCommand.command("start <name>").description("Alle Projekte eines Packages
13719
13719
  }
13720
13720
  });
13721
13721
  packageCommand.command("push").description("Packages in Cloud sichern").option("-n, --name <name>", "Nur ein bestimmtes Package").action(async (options) => {
13722
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
13722
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
13723
13723
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
13724
13724
  if (!isAuthenticated2()) {
13725
13725
  log.error("Nicht angemeldet");
@@ -13765,7 +13765,7 @@ packageCommand.command("push").description("Packages in Cloud sichern").option("
13765
13765
  }
13766
13766
  });
13767
13767
  packageCommand.command("pull").description("Packages aus Cloud laden").option("-f, --force", "Lokale Packages \xFCberschreiben").option("--json", "JSON Output").action(async (options) => {
13768
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
13768
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
13769
13769
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
13770
13770
  if (!isAuthenticated2()) {
13771
13771
  log.error("Nicht angemeldet");
@@ -13827,7 +13827,7 @@ packageCommand.command("pull").description("Packages aus Cloud laden").option("-
13827
13827
  }
13828
13828
  });
13829
13829
  packageCommand.command("sync").description("Packages mit Cloud synchronisieren").action(async () => {
13830
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
13830
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
13831
13831
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
13832
13832
  if (!isAuthenticated2()) {
13833
13833
  log.error("Nicht angemeldet");
@@ -13880,7 +13880,7 @@ packageCommand.command("sync").description("Packages mit Cloud synchronisieren")
13880
13880
  log.tree.item(`${localPackages.length + pulledCount} Packages total`);
13881
13881
  });
13882
13882
  packageCommand.command("cloud-delete <name>").description("Package aus Cloud l\xF6schen").action(async (name) => {
13883
- const { api: api2 } = await import("./client-RPSJP4Z5.js");
13883
+ const { api: api2 } = await import("./client-H3JXPT5B.js");
13884
13884
  const { isAuthenticated: isAuthenticated2 } = await import("./config-FGMZONWV.js");
13885
13885
  if (!isAuthenticated2()) {
13886
13886
  log.error("Nicht angemeldet");
@@ -14291,7 +14291,7 @@ sandboxCommand.command("delete <id>").description("Sandbox l\xF6schen").option("
14291
14291
 
14292
14292
  // src/index.ts
14293
14293
  var program = new Command39();
14294
- program.name("shiva").description("SHIVA Code - Control Station for Claude Code").version("0.7.6").option("--debug", "Debug-Modus aktivieren").hook("preAction", (thisCommand) => {
14294
+ program.name("shiva").description("SHIVA Code - Control Station for Claude Code").version("0.7.7").option("--debug", "Debug-Modus aktivieren").hook("preAction", (thisCommand) => {
14295
14295
  const opts = thisCommand.opts();
14296
14296
  if (opts.debug) {
14297
14297
  enableDebug();
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  loginCommand
3
- } from "./chunk-KW3LP3K3.js";
3
+ } from "./chunk-3BM2KHD4.js";
4
4
  import "./chunk-Z6NXFC4Q.js";
5
- import "./chunk-J5IS642F.js";
5
+ import "./chunk-KB6M24M3.js";
6
6
  import "./chunk-OP4HYQZZ.js";
7
7
  import "./chunk-3RG5ZIWI.js";
8
8
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shiva-code",
3
- "version": "0.7.6",
3
+ "version": "0.7.8",
4
4
  "description": "Makes Claude Code Persistent - Cross-Project Memory CLI",
5
5
  "author": "SHIVA AI",
6
6
  "license": "MIT",