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.
- package/dist/index.js +117 -54
- 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
|
|
207
|
-
|
|
208
|
-
|
|
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
|
-
|
|
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
|
|
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("
|
|
217
|
-
console.log(
|
|
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.
|
|
221
|
-
console.log(" " + chalk.
|
|
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)
|
|
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("
|
|
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("
|
|
307
|
-
console.log(" " + colors.
|
|
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("
|
|
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("
|
|
324
|
-
console.log(" " + colors.
|
|
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
|
-
|
|
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
|
|
336
|
-
console.log("
|
|
337
|
-
console.log(colors.
|
|
338
|
-
console.log("
|
|
339
|
-
console.log(
|
|
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
|
|
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
|
-
|
|
348
|
-
console.log(
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
13124
|
-
const
|
|
13125
|
-
const
|
|
13126
|
-
|
|
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") + "
|
|
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") + "
|
|
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\
|
|
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
|
-
|
|
13165
|
-
|
|
13166
|
-
|
|
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
|
-
|
|
13177
|
-
|
|
13178
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
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"));
|