shiva-code 0.7.16 → 0.7.18

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.
Files changed (2) hide show
  1. package/dist/index.js +117 -54
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -190,6 +190,21 @@ function completeOnboarding() {
190
190
  function setTheme(theme) {
191
191
  onboardingStore.set("theme", theme);
192
192
  }
193
+ function stripAnsi(str) {
194
+ return str.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "");
195
+ }
196
+ function drawBox(title, width = 45) {
197
+ const innerWidth = width - 2;
198
+ const visibleLen = stripAnsi(title).length;
199
+ const paddingLeft = Math.floor((innerWidth - visibleLen) / 2);
200
+ const paddingRight = innerWidth - visibleLen - paddingLeft;
201
+ console.log(colors.orange(" \u256D" + "\u2500".repeat(innerWidth) + "\u256E"));
202
+ console.log(colors.orange(" \u2502") + " ".repeat(paddingLeft) + title + " ".repeat(paddingRight) + colors.orange("\u2502"));
203
+ console.log(colors.orange(" \u2570" + "\u2500".repeat(innerWidth) + "\u256F"));
204
+ }
205
+ function drawDivider(width = 45) {
206
+ console.log(colors.dim(" " + "\u2500".repeat(width - 2)));
207
+ }
193
208
  function showBanner() {
194
209
  console.log("");
195
210
  console.log(colors.orange(" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 "));
@@ -203,42 +218,53 @@ function showBanner() {
203
218
  console.log("");
204
219
  }
205
220
  function showStep(current, total, title) {
206
- const progress = colors.dim(`[${current}/${total}]`);
207
- console.log(`
208
- ${progress} ${colors.bold(title)}
209
- `);
221
+ const filled = "\u25CF".repeat(current);
222
+ const empty = "\u25CB".repeat(total - current);
223
+ const progressBar = colors.orange(filled) + colors.dim(empty);
224
+ console.log("");
225
+ console.log(` ${progressBar} ${colors.dim(`Schritt ${current} von ${total}`)}`);
226
+ console.log(` ${colors.bold(title)}`);
227
+ console.log("");
210
228
  }
211
229
  function showClaudeInstallInstructions() {
212
- console.log(colors.yellow(" \u26A0 Claude Code nicht gefunden\n"));
230
+ drawBox(colors.yellow("\u26A0") + " Claude Code nicht gefunden");
231
+ console.log("");
213
232
  console.log(" SHIVA erweitert Claude Code mit persistentem Speicher.");
214
- console.log(" Du brauchst Claude Code um SHIVA nutzen zu k\xF6nnen.\n");
233
+ console.log(" Du brauchst Claude Code um SHIVA nutzen zu k\xF6nnen.");
234
+ console.log("");
215
235
  console.log(colors.bold(" Installation:"));
216
- console.log(colors.cyan(" curl -fsSL https://claude.ai/install.sh | bash\n"));
217
- console.log(colors.dim(" Mehr Infos: https://claude.ai/code\n"));
236
+ console.log(" " + colors.cyan("curl -fsSL https://claude.ai/install.sh | bash"));
237
+ console.log("");
238
+ console.log(colors.dim(" Mehr Infos: https://claude.ai/code"));
239
+ console.log("");
218
240
  }
219
241
  async function selectTheme() {
220
- console.log(" " + chalk.bgWhite.black(" Dark ") + " F\xFCr dunkle Terminals");
221
- console.log(" " + chalk.bgBlack.white(" Light ") + " F\xFCr helle Terminals\n");
242
+ console.log(" " + chalk.bgHex("#1a1a2e").white(" \u25A0 Dark ") + " " + colors.dim("F\xFCr dunkle Terminals"));
243
+ console.log(" " + chalk.bgHex("#f5f5f5").black(" \u25A1 Light ") + " " + colors.dim("F\xFCr helle Terminals"));
244
+ console.log("");
222
245
  const { theme } = await inquirer.prompt([
223
246
  {
224
247
  type: "list",
225
248
  name: "theme",
226
- message: "Theme:",
249
+ message: "W\xE4hle dein Theme:",
227
250
  choices: [
228
- { name: "Dark Mode (empfohlen)", value: "dark" },
229
- { name: "Light Mode", value: "light" }
251
+ { name: colors.orange("\u25CF") + " Dark Mode " + colors.dim("(empfohlen)"), value: "dark" },
252
+ { name: colors.dim("\u25CB") + " Light Mode", value: "light" }
230
253
  ],
231
254
  default: "dark"
232
255
  }
233
256
  ]);
234
257
  setTheme(theme);
258
+ console.log(" " + colors.green("\u2713") + " Theme gespeichert");
235
259
  return theme;
236
260
  }
237
261
  async function promptLogin() {
238
262
  console.log(" Mit einem Account bekommst du:");
263
+ console.log("");
239
264
  console.log(" " + colors.green("\u2713") + " Cloud-Sync f\xFCr Memories");
240
265
  console.log(" " + colors.green("\u2713") + " Sessions zwischen Ger\xE4ten");
241
- console.log(" " + colors.green("\u2713") + " Secrets Vault (verschl\xFCsselt)\n");
266
+ console.log(" " + colors.green("\u2713") + " Secrets Vault " + colors.dim("(verschl\xFCsselt)"));
267
+ console.log("");
242
268
  const { wantLogin } = await inquirer.prompt([
243
269
  {
244
270
  type: "confirm",
@@ -248,11 +274,14 @@ async function promptLogin() {
248
274
  }
249
275
  ]);
250
276
  if (wantLogin) {
251
- console.log("\n " + colors.cyan("\u2192") + " \xD6ffne Browser...\n");
277
+ console.log("");
278
+ console.log(" " + colors.cyan("\u2192") + " \xD6ffne Browser...");
279
+ console.log("");
252
280
  const { loginCommand: loginCommand2 } = await import("./login-DBN2L25M.js");
253
281
  await loginCommand2.parseAsync([], { from: "user" });
254
282
  return isAuthenticated();
255
283
  }
284
+ console.log(" " + colors.dim("Sp\xE4ter: shiva login"));
256
285
  return false;
257
286
  }
258
287
  async function installHooksSilently() {
@@ -303,8 +332,10 @@ async function installHooksSilently() {
303
332
  }
304
333
  async function promptHooks() {
305
334
  console.log(" SHIVA integriert sich automatisch mit Claude Code:");
306
- console.log(" " + colors.green("\u2713") + " Memories beim Start laden");
307
- console.log(" " + colors.green("\u2713") + " Memories beim Beenden speichern\n");
335
+ console.log("");
336
+ console.log(" " + colors.orange("\u2192") + " Memories beim Start laden");
337
+ console.log(" " + colors.orange("\u2190") + " Memories beim Beenden speichern");
338
+ console.log("");
308
339
  const { installHooks } = await inquirer.prompt([
309
340
  {
310
341
  type: "confirm",
@@ -316,36 +347,44 @@ async function promptHooks() {
316
347
  if (installHooks) {
317
348
  const success = await installHooksSilently();
318
349
  if (success) {
319
- console.log("\n " + colors.green("\u2713") + " Hooks installiert\n");
350
+ console.log("");
351
+ console.log(" " + colors.green("\u2713") + " Hooks installiert");
320
352
  onboardingStore.set("hooksInstalled", true);
321
353
  return true;
322
354
  } else {
323
- console.log("\n " + colors.yellow("\u26A0") + " Hook-Installation fehlgeschlagen");
324
- console.log(" " + colors.dim("Sp\xE4ter: shiva hook install\n"));
355
+ console.log("");
356
+ console.log(" " + colors.yellow("\u26A0") + " Hook-Installation fehlgeschlagen");
357
+ console.log(" " + colors.dim("Sp\xE4ter: shiva hook install"));
325
358
  }
359
+ } else {
360
+ console.log(" " + colors.dim("Sp\xE4ter: shiva hook install"));
326
361
  }
327
362
  return false;
328
363
  }
329
364
  function showQuickStart(loggedIn, claudeInstalled) {
330
- console.log(colors.orange(" \u256D\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E"));
331
- console.log(colors.orange(" \u2502") + colors.green.bold(" \u2713 Setup abgeschlossen!") + " " + colors.orange("\u2502"));
332
- console.log(colors.orange(" \u2570\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F"));
365
+ drawBox(colors.green("\u2713") + colors.bold(" Setup abgeschlossen!"));
333
366
  console.log("");
334
367
  if (!claudeInstalled) {
335
- console.log(colors.bold(" N\xE4chste Schritte:\n"));
336
- console.log(" 1. Installiere Claude Code:");
337
- console.log(colors.cyan(" curl -fsSL https://claude.ai/install.sh | bash\n"));
338
- console.log(" 2. Initialisiere SHIVA in deinem Projekt:");
339
- console.log(colors.cyan(" cd dein-projekt && shiva init\n"));
368
+ console.log(colors.bold(" N\xE4chste Schritte:"));
369
+ console.log("");
370
+ console.log(" " + colors.orange("1.") + " Installiere Claude Code:");
371
+ console.log(" " + colors.cyan("curl -fsSL https://claude.ai/install.sh | bash"));
372
+ console.log("");
373
+ console.log(" " + colors.orange("2.") + " Initialisiere SHIVA in deinem Projekt:");
374
+ console.log(" " + colors.cyan("cd dein-projekt && shiva init"));
375
+ console.log("");
340
376
  } else {
341
- console.log(colors.bold(" Los geht's:\n"));
377
+ console.log(colors.bold(" Los geht's:"));
378
+ console.log("");
342
379
  console.log(" " + colors.cyan("cd dein-projekt") + " " + colors.dim("Zu deinem Projekt wechseln"));
343
380
  console.log(" " + colors.cyan("shiva init") + " " + colors.dim("SHIVA initialisieren"));
344
381
  console.log(" " + colors.cyan("claude") + " " + colors.dim("Claude Code starten"));
345
382
  console.log("");
346
383
  }
347
- 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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n"));
348
- console.log(colors.bold(" Befehle:\n"));
384
+ drawDivider();
385
+ console.log("");
386
+ console.log(colors.bold(" Befehle:"));
387
+ console.log("");
349
388
  const commands = [
350
389
  ["shiva init", "Projekt initialisieren"],
351
390
  ['shiva remember "..."', "Memory speichern"],
@@ -357,11 +396,14 @@ function showQuickStart(loggedIn, claudeInstalled) {
357
396
  console.log(` ${colors.cyan(cmd.padEnd(22))}${colors.dim(desc)}`);
358
397
  }
359
398
  console.log("");
399
+ drawDivider();
400
+ console.log("");
360
401
  if (!loggedIn) {
361
402
  console.log(colors.dim(" Sp\xE4ter anmelden: shiva login"));
362
403
  }
363
404
  console.log(colors.dim(" Hilfe: shiva --help"));
364
- console.log(colors.dim(" Docs: https://shiva.li/docs\n"));
405
+ console.log(colors.dim(" Docs: https://shiva.li/docs"));
406
+ console.log("");
365
407
  }
366
408
  async function runOnboarding() {
367
409
  console.clear();
@@ -12845,7 +12887,7 @@ function detectInstallationType() {
12845
12887
  }
12846
12888
  return "npm";
12847
12889
  }
12848
- var CLI_VERSION = "0.7.16";
12890
+ var CLI_VERSION = "0.7.17";
12849
12891
  function getCurrentVersion() {
12850
12892
  try {
12851
12893
  const output = execSync3(`npm list -g ${PACKAGE_NAME} --depth=0 --json 2>/dev/null`, {
@@ -13101,11 +13143,18 @@ async function runPackageManagerUpgrade(pm) {
13101
13143
  });
13102
13144
  });
13103
13145
  }
13146
+ function drawUpgradeBox(title, width = 40) {
13147
+ const innerWidth = width - 2;
13148
+ const visibleLen = title.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "").length;
13149
+ const paddingLeft = Math.floor((innerWidth - visibleLen) / 2);
13150
+ const paddingRight = innerWidth - visibleLen - paddingLeft;
13151
+ console.log(colors.orange(" \u256D" + "\u2500".repeat(innerWidth) + "\u256E"));
13152
+ console.log(colors.orange(" \u2502") + " ".repeat(paddingLeft) + title + " ".repeat(paddingRight) + colors.orange("\u2502"));
13153
+ console.log(colors.orange(" \u2570" + "\u2500".repeat(innerWidth) + "\u256F"));
13154
+ }
13104
13155
  var upgradeCommand = new Command29("upgrade").description("SHIVA CLI aktualisieren").option("-c, --check", "Nur auf Updates pr\xFCfen, nicht installieren").option("-f, --force", "Update erzwingen, auch wenn aktuell").option("--npm", "npm verwenden (f\xFCr npm-Installationen)").option("--yarn", "yarn verwenden").option("--pnpm", "pnpm verwenden").option("--native", "Native Binary Update erzwingen").action(async (options) => {
13105
13156
  log.newline();
13106
- console.log(colors.orange.bold("\u256D\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E"));
13107
- console.log(colors.orange.bold("\u2502") + " \u{1F680} " + colors.orange.bold("SHIVA") + " " + colors.cyan("Upgrade") + " " + colors.orange.bold("\u2502"));
13108
- console.log(colors.orange.bold("\u2570\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F"));
13157
+ drawUpgradeBox("\u{1F680} " + colors.bold("SHIVA") + " " + colors.cyan("Upgrade"), 36);
13109
13158
  log.newline();
13110
13159
  let installType = detectInstallationType();
13111
13160
  if (options.native) installType = "native";
@@ -13120,18 +13169,24 @@ var upgradeCommand = new Command29("upgrade").description("SHIVA CLI aktualisier
13120
13169
  process.stdout.write("\x1B[1A\x1B[2K");
13121
13170
  console.log(colors.orange(" \u25CF") + " Version-Check abgeschlossen");
13122
13171
  log.newline();
13123
- const currentDisplay = colors.dim("v") + colors.bold(versionInfo.current);
13124
- const latestDisplay = colors.dim("v") + colors.green.bold(versionInfo.latest);
13125
- const arrow = versionInfo.isOutdated ? colors.orange(" \u2500\u2500\u25B6 ") : colors.green(" \u2550\u2550\u2550 ");
13126
- console.log(colors.orange(" \u250C\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"));
13172
+ const BOX_WIDTH = 34;
13173
+ const current = `v${versionInfo.current}`;
13174
+ const latest = `v${versionInfo.latest}`;
13175
+ const arrow = versionInfo.isOutdated ? " \u2192 " : " = ";
13176
+ const versionLine = current + arrow + latest;
13177
+ const statusText = versionInfo.isOutdated ? "UPDATE VERF\xDCGBAR" : "AKTUELL \u2713";
13178
+ const vPadLeft = Math.floor((BOX_WIDTH - 2 - versionLine.length) / 2);
13179
+ const vPadRight = BOX_WIDTH - 2 - versionLine.length - vPadLeft;
13180
+ const sPadLeft = Math.floor((BOX_WIDTH - 2 - statusText.length) / 2);
13181
+ const sPadRight = BOX_WIDTH - 2 - statusText.length - sPadLeft;
13182
+ console.log(colors.orange(" \u250C" + "\u2500".repeat(BOX_WIDTH - 2) + "\u2510"));
13183
+ console.log(colors.orange(" \u2502") + " ".repeat(vPadLeft) + colors.bold(current) + colors.dim(arrow) + colors.green.bold(latest) + " ".repeat(vPadRight) + colors.orange("\u2502"));
13127
13184
  if (versionInfo.isOutdated) {
13128
- console.log(colors.orange(" \u2502") + " " + currentDisplay + arrow + latestDisplay + " " + colors.orange("\u2502"));
13129
- console.log(colors.orange(" \u2502") + " " + colors.yellow.bold("UPDATE VERF\xDCGBAR") + " " + colors.orange("\u2502"));
13185
+ console.log(colors.orange(" \u2502") + " ".repeat(sPadLeft) + colors.yellow.bold(statusText) + " ".repeat(sPadRight) + colors.orange("\u2502"));
13130
13186
  } else {
13131
- console.log(colors.orange(" \u2502") + " " + currentDisplay + arrow + latestDisplay + " " + colors.orange("\u2502"));
13132
- console.log(colors.orange(" \u2502") + " " + colors.green.bold("AKTUELL \u2713") + " " + colors.orange("\u2502"));
13187
+ console.log(colors.orange(" \u2502") + " ".repeat(sPadLeft) + colors.green.bold(statusText) + " ".repeat(sPadRight) + colors.orange("\u2502"));
13133
13188
  }
13134
- console.log(colors.orange(" \u2514\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"));
13189
+ console.log(colors.orange(" \u2514" + "\u2500".repeat(BOX_WIDTH - 2) + "\u2518"));
13135
13190
  log.newline();
13136
13191
  const sourceIcon = versionInfo.source === "npm" ? "\u{1F4E6}" : "\u{1F419}";
13137
13192
  console.log(colors.dim(` ${sourceIcon} Quelle: ${versionInfo.source}`));
@@ -13161,9 +13216,13 @@ var upgradeCommand = new Command29("upgrade").description("SHIVA CLI aktualisier
13161
13216
  }
13162
13217
  log.newline();
13163
13218
  if (success) {
13164
- console.log(colors.green(" \u256D\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E"));
13165
- console.log(colors.green(" \u2502") + " \u2713 " + colors.green.bold("Upgrade erfolgreich!") + " " + colors.green("\u2502"));
13166
- console.log(colors.green(" \u2570\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F"));
13219
+ const successMsg = "\u2713 Upgrade erfolgreich!";
13220
+ const sWidth = 32;
13221
+ const sPad = Math.floor((sWidth - 2 - successMsg.length) / 2);
13222
+ const sPadR = sWidth - 2 - successMsg.length - sPad;
13223
+ console.log(colors.green(" \u256D" + "\u2500".repeat(sWidth - 2) + "\u256E"));
13224
+ console.log(colors.green(" \u2502") + " ".repeat(sPad) + colors.green.bold(successMsg) + " ".repeat(sPadR) + colors.green("\u2502"));
13225
+ console.log(colors.green(" \u2570" + "\u2500".repeat(sWidth - 2) + "\u256F"));
13167
13226
  log.newline();
13168
13227
  if (installType !== "native" || os6.platform() !== "win32") {
13169
13228
  const newVersion = getCurrentVersion();
@@ -13173,9 +13232,13 @@ var upgradeCommand = new Command29("upgrade").description("SHIVA CLI aktualisier
13173
13232
  }
13174
13233
  }
13175
13234
  } else {
13176
- console.log(colors.red(" \u256D\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E"));
13177
- console.log(colors.red(" \u2502") + " \u2717 " + colors.red.bold("Upgrade fehlgeschlagen") + " " + colors.red("\u2502"));
13178
- console.log(colors.red(" \u2570\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F"));
13235
+ const errorMsg = "\u2717 Upgrade fehlgeschlagen";
13236
+ const eWidth = 32;
13237
+ const ePad = Math.floor((eWidth - 2 - errorMsg.length) / 2);
13238
+ const ePadR = eWidth - 2 - errorMsg.length - ePad;
13239
+ console.log(colors.red(" \u256D" + "\u2500".repeat(eWidth - 2) + "\u256E"));
13240
+ console.log(colors.red(" \u2502") + " ".repeat(ePad) + colors.red.bold(errorMsg) + " ".repeat(ePadR) + colors.red("\u2502"));
13241
+ console.log(colors.red(" \u2570" + "\u2500".repeat(eWidth - 2) + "\u256F"));
13179
13242
  log.newline();
13180
13243
  if (installType === "native") {
13181
13244
  console.log(colors.dim(" Alternativen:"));
@@ -16602,7 +16665,7 @@ sandboxCommand.command("delete <id>").description("Sandbox l\xF6schen").option("
16602
16665
 
16603
16666
  // src/index.ts
16604
16667
  var program = new Command41();
16605
- program.name("shiva").description("SHIVA Code - Control Station for Claude Code").version("0.7.16").option("--debug", "Debug-Modus aktivieren").hook("preAction", (thisCommand) => {
16668
+ program.name("shiva").description("SHIVA Code - Control Station for Claude Code").version("0.7.17").option("--debug", "Debug-Modus aktivieren").hook("preAction", (thisCommand) => {
16606
16669
  const opts = thisCommand.opts();
16607
16670
  if (opts.debug) {
16608
16671
  enableDebug();
@@ -16741,7 +16804,7 @@ async function interactiveMenu(choices, shortcuts) {
16741
16804
  process.stdin.on("keypress", handler);
16742
16805
  });
16743
16806
  }
16744
- function drawBox(title, width = 50) {
16807
+ function drawBox2(title, width = 50) {
16745
16808
  const innerWidth = width - 2;
16746
16809
  const titleLen = title.length;
16747
16810
  const paddingLeft = Math.floor((innerWidth - titleLen) / 2);
@@ -16753,7 +16816,7 @@ function drawBox(title, width = 50) {
16753
16816
  async function showDashboard() {
16754
16817
  console.clear();
16755
16818
  log.newline();
16756
- drawBox("SHIVA Control Station", 44);
16819
+ drawBox2("SHIVA Control Station", 44);
16757
16820
  log.newline();
16758
16821
  if (!isClaudeInstalled()) {
16759
16822
  console.log(colors.yellow(" \u26A0 Claude Code nicht installiert"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shiva-code",
3
- "version": "0.7.16",
3
+ "version": "0.7.18",
4
4
  "description": "Makes Claude Code Persistent - Cross-Project Memory CLI",
5
5
  "author": "SHIVA AI",
6
6
  "license": "MIT",