ccjk 12.0.0 → 12.0.2
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/chunks/agent-teams.mjs +17 -18
- package/dist/chunks/agent.mjs +105 -102
- package/dist/chunks/agents.mjs +87 -77
- package/dist/chunks/api-cli.mjs +41 -27
- package/dist/chunks/api-providers.mjs +2 -4
- package/dist/chunks/api.mjs +22 -11
- package/dist/chunks/auto-bootstrap.mjs +3 -5
- package/dist/chunks/auto-init.mjs +3 -4
- package/dist/chunks/auto-updater.mjs +103 -91
- package/dist/chunks/banner.mjs +41 -42
- package/dist/chunks/boost.mjs +30 -31
- package/dist/chunks/ccjk-agents.mjs +6 -9
- package/dist/chunks/ccjk-all.mjs +703 -85
- package/dist/chunks/ccjk-config.mjs +6 -6
- package/dist/chunks/ccjk-hooks.mjs +20 -9
- package/dist/chunks/ccjk-mcp.mjs +64 -52
- package/dist/chunks/ccjk-setup.mjs +35 -25
- package/dist/chunks/ccjk-skills.mjs +51 -41
- package/dist/chunks/ccr.mjs +42 -32
- package/dist/chunks/ccu.mjs +16 -12
- package/dist/chunks/check-updates.mjs +30 -19
- package/dist/chunks/claude-code-config-manager.mjs +25 -10
- package/dist/chunks/claude-code-incremental-manager.mjs +65 -51
- package/dist/chunks/claude-config.mjs +2 -2
- package/dist/chunks/claude-wrapper.mjs +9 -6
- package/dist/chunks/cleanup-migration.mjs +1 -1
- package/dist/chunks/cli-hook.mjs +10 -3
- package/dist/chunks/cloud-sync.mjs +1 -1
- package/dist/chunks/codex-config-switch.mjs +58 -45
- package/dist/chunks/codex-provider-manager.mjs +29 -16
- package/dist/chunks/codex-uninstaller.mjs +5 -6
- package/dist/chunks/codex.mjs +89 -89
- package/dist/chunks/commands.mjs +28 -29
- package/dist/chunks/commands2.mjs +4 -3
- package/dist/chunks/commit.mjs +42 -23
- package/dist/chunks/completion.mjs +46 -47
- package/dist/chunks/config-consolidator.mjs +12 -13
- package/dist/chunks/config-switch.mjs +66 -53
- package/dist/chunks/config.mjs +10 -10
- package/dist/chunks/config2.mjs +53 -42
- package/dist/chunks/config3.mjs +107 -93
- package/dist/chunks/constants.mjs +2 -4
- package/dist/chunks/context-loader.mjs +5 -4
- package/dist/chunks/context.mjs +77 -76
- package/dist/chunks/convoy-manager.mjs +4 -4
- package/dist/chunks/dashboard.mjs +28 -29
- package/dist/chunks/doctor.mjs +68 -54
- package/dist/chunks/evolution.mjs +37 -38
- package/dist/chunks/features.mjs +103 -92
- package/dist/chunks/fs-operations.mjs +1 -1
- package/dist/chunks/health-alerts.mjs +1 -1
- package/dist/chunks/health-check.mjs +1 -1
- package/dist/chunks/help.mjs +117 -116
- package/dist/chunks/hook-installer.mjs +3 -2
- package/dist/chunks/index.mjs +20 -6
- package/dist/chunks/index10.mjs +1171 -0
- package/dist/chunks/index11.mjs +1008 -0
- package/dist/chunks/index12.mjs +193 -0
- package/dist/chunks/index13.mjs +218 -0
- package/dist/chunks/index14.mjs +663 -0
- package/dist/chunks/index2.mjs +19 -10
- package/dist/chunks/index3.mjs +19079 -164
- package/dist/chunks/index4.mjs +8 -1171
- package/dist/chunks/index5.mjs +7479 -884
- package/dist/chunks/index6.mjs +160 -184
- package/dist/chunks/index7.mjs +3573 -653
- package/dist/chunks/index8.mjs +19 -0
- package/dist/chunks/index9.mjs +616 -0
- package/dist/chunks/init.mjs +173 -173
- package/dist/chunks/installer.mjs +92 -82
- package/dist/chunks/installer2.mjs +3 -2
- package/dist/chunks/interview.mjs +118 -107
- package/dist/chunks/json-config.mjs +3 -2
- package/dist/chunks/linux.mjs +3863 -0
- package/dist/chunks/macos.mjs +69 -0
- package/dist/chunks/main.mjs +635 -0
- package/dist/chunks/marketplace.mjs +69 -66
- package/dist/chunks/mcp-cli.mjs +61 -48
- package/dist/chunks/mcp.mjs +140 -127
- package/dist/chunks/menu.mjs +85 -85
- package/dist/chunks/metrics-display.mjs +41 -40
- package/dist/chunks/migrator.mjs +4 -5
- package/dist/chunks/monitor.mjs +95 -95
- package/dist/chunks/notification.mjs +151 -141
- package/dist/chunks/onboarding.mjs +26 -15
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/paradigm.mjs +24 -23
- package/dist/chunks/permission-manager.mjs +10 -11
- package/dist/chunks/permissions.mjs +72 -57
- package/dist/chunks/persistence-manager.mjs +97 -84
- package/dist/chunks/persistence.mjs +1 -1
- package/dist/chunks/platform.mjs +29 -29
- package/dist/chunks/plugin.mjs +104 -105
- package/dist/chunks/prompts.mjs +36 -25
- package/dist/chunks/providers.mjs +68 -69
- package/dist/chunks/quick-actions.mjs +71 -72
- package/dist/chunks/quick-provider.mjs +56 -40
- package/dist/chunks/quick-setup.mjs +71 -60
- package/dist/chunks/remote.mjs +21 -12
- package/dist/chunks/session.mjs +116 -103
- package/dist/chunks/sessions.mjs +29 -28
- package/dist/chunks/silent-updater.mjs +8 -10
- package/dist/chunks/simple-config.mjs +13 -10
- package/dist/chunks/skill.mjs +8560 -103
- package/dist/chunks/skills-sync.mjs +5212 -79
- package/dist/chunks/skills.mjs +105 -94
- package/dist/chunks/slash-commands.mjs +36 -37
- package/dist/chunks/smart-defaults.mjs +7 -3
- package/dist/chunks/smart-guide.mjs +1 -1
- package/dist/chunks/startup.mjs +2 -4
- package/dist/chunks/stats.mjs +41 -42
- package/dist/chunks/status.mjs +49 -50
- package/dist/chunks/team.mjs +24 -12
- package/dist/chunks/thinking.mjs +74 -63
- package/dist/chunks/trace.mjs +20 -19
- package/dist/chunks/uninstall.mjs +69 -56
- package/dist/chunks/update.mjs +39 -28
- package/dist/chunks/upgrade-manager.mjs +24 -18
- package/dist/chunks/version-checker.mjs +45 -41
- package/dist/chunks/vim.mjs +81 -69
- package/dist/chunks/windows.mjs +14 -0
- package/dist/chunks/workflows.mjs +15 -15
- package/dist/chunks/wsl.mjs +129 -0
- package/dist/chunks/zero-config.mjs +45 -34
- package/dist/cli.mjs +20 -20
- package/dist/index.mjs +41 -31
- package/dist/shared/ccjk.BAGoDD49.mjs +36 -0
- package/dist/shared/ccjk.BBtCGd_g.mjs +899 -0
- package/dist/shared/{ccjk.CGcy7cNM.mjs → ccjk.BDKUdmLk.mjs} +1 -1
- package/dist/shared/{ccjk.DtMBiwVG.mjs → ccjk.BFxsJM0k.mjs} +1 -1
- package/dist/shared/{ccjk.j4uut26D.mjs → ccjk.BIxuVL3_.mjs} +5 -5
- package/dist/shared/ccjk.BRZ9ww8S.mjs +142 -0
- package/dist/shared/{ccjk.CN0edl87.mjs → ccjk.BSYWk9ML.mjs} +1 -1
- package/dist/shared/{ccjk.Dk1HDseQ.mjs → ccjk.BnpWvs9V.mjs} +75 -75
- package/dist/shared/ccjk.BoApaI4j.mjs +28 -0
- package/dist/shared/{ccjk.DKojSRzw.mjs → ccjk.BrPUmTqm.mjs} +1 -1
- package/dist/shared/{ccjk.C10pepYx.mjs → ccjk.BxSmJ8B7.mjs} +1 -1
- package/dist/shared/ccjk.Bx_rmYfN.mjs +69 -0
- package/dist/shared/ccjk.COweQ1RR.mjs +5 -0
- package/dist/shared/{ccjk.BN90X6oc.mjs → ccjk.CePkJq2S.mjs} +17 -17
- package/dist/shared/{ccjk.Bvoex4TZ.mjs → ccjk.CfKKcvWy.mjs} +1 -1
- package/dist/shared/ccjk.Cjgrln_h.mjs +297 -0
- package/dist/shared/ccjk.CxpGa6MC.mjs +2724 -0
- package/dist/shared/{ccjk.DfwJOEok.mjs → ccjk.D5MFQT7w.mjs} +1 -1
- package/dist/shared/{ccjk.cChAaGgT.mjs → ccjk.DG_o24cZ.mjs} +6 -6
- package/dist/shared/{ccjk.bhFAMRyc.mjs → ccjk.DLLw-h4Y.mjs} +32 -32
- package/dist/shared/ccjk.DOwtZMk8.mjs +4019 -0
- package/dist/shared/{ccjk.BsXQugfY.mjs → ccjk.DTdjs-qK.mjs} +13 -13
- package/dist/shared/{ccjk.Bdhyg3X-.mjs → ccjk.DsYaCCx4.mjs} +1 -1
- package/dist/shared/ccjk.KfSWcGlE.mjs +38 -0
- package/dist/shared/ccjk.RyizuzOI.mjs +21 -0
- package/dist/shared/{ccjk.h7_W-wTs.mjs → ccjk.SPoXMvZD.mjs} +1 -1
- package/dist/shared/ccjk.T_cX87dY.mjs +15 -0
- package/dist/shared/{ccjk.CrB6OYHv.mjs → ccjk._dESH4Rk.mjs} +2 -2
- package/dist/shared/ccjk.bQ7Dh1g4.mjs +249 -0
- package/dist/shared/{ccjk.CBhIZiPz.mjs → ccjk.hoqrwWdN.mjs} +1 -1
- package/dist/shared/{ccjk.BNwRnWYx.mjs → ccjk.s7OCVzdd.mjs} +1230 -33
- package/dist/shared/{ccjk.BOIUTf5z.mjs → ccjk.waa2ikKJ.mjs} +8 -9
- package/package.json +31 -30
- package/dist/shared/ccjk.DHbrGcgg.mjs +0 -13
- package/dist/shared/ccjk.DntgA8fQ.mjs +0 -42
package/dist/chunks/session.mjs
CHANGED
|
@@ -3,9 +3,22 @@ import { mkdir, writeFile, readFile, readdir, rm, stat } from 'node:fs/promises'
|
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { join as join$1 } from 'node:path';
|
|
5
5
|
import process__default from 'node:process';
|
|
6
|
-
import
|
|
7
|
-
import inquirer from '
|
|
8
|
-
import { join } from '
|
|
6
|
+
import a from './index2.mjs';
|
|
7
|
+
import { i as inquirer } from './index3.mjs';
|
|
8
|
+
import { j as join } from '../shared/ccjk.bQ7Dh1g4.mjs';
|
|
9
|
+
import '../shared/ccjk.BAGoDD49.mjs';
|
|
10
|
+
import 'node:readline';
|
|
11
|
+
import 'stream';
|
|
12
|
+
import 'node:tty';
|
|
13
|
+
import 'node:async_hooks';
|
|
14
|
+
import '../shared/ccjk.Cjgrln_h.mjs';
|
|
15
|
+
import 'node:util';
|
|
16
|
+
import 'tty';
|
|
17
|
+
import 'fs';
|
|
18
|
+
import 'child_process';
|
|
19
|
+
import 'node:crypto';
|
|
20
|
+
import 'buffer';
|
|
21
|
+
import 'string_decoder';
|
|
9
22
|
|
|
10
23
|
class SessionManager {
|
|
11
24
|
sessionsDir;
|
|
@@ -318,12 +331,12 @@ async function saveSession() {
|
|
|
318
331
|
}
|
|
319
332
|
const sessionFile = join$1(SESSIONS_DIR, `${sessionId}.json`);
|
|
320
333
|
await writeFile(sessionFile, JSON.stringify(metadata, null, 2));
|
|
321
|
-
console.log(
|
|
334
|
+
console.log(a.green(`\u2714 Session saved: ${sessionId}`));
|
|
322
335
|
if (description) {
|
|
323
|
-
console.log(
|
|
336
|
+
console.log(a.gray(` ${description}`));
|
|
324
337
|
}
|
|
325
338
|
} catch (error) {
|
|
326
|
-
console.error(
|
|
339
|
+
console.error(a.red("Failed to save session:"), error);
|
|
327
340
|
}
|
|
328
341
|
}
|
|
329
342
|
async function listSessions() {
|
|
@@ -331,52 +344,52 @@ async function listSessions() {
|
|
|
331
344
|
const sessionManager = getSessionManager();
|
|
332
345
|
const sessions = await sessionManager.listSessions();
|
|
333
346
|
if (sessions.length === 0) {
|
|
334
|
-
console.log(
|
|
335
|
-
console.log(
|
|
336
|
-
Create a new session with: ${
|
|
347
|
+
console.log(a.yellow("No sessions found"));
|
|
348
|
+
console.log(a.gray(`
|
|
349
|
+
Create a new session with: ${a.green("ccjk session create")}`));
|
|
337
350
|
return;
|
|
338
351
|
}
|
|
339
|
-
console.log(
|
|
352
|
+
console.log(a.green.bold("\n\u{1F4CB} Saved Sessions:\n"));
|
|
340
353
|
const sortedSessions = [...sessions].sort((a, b) => {
|
|
341
354
|
const aTime = a.lastUsedAt?.getTime() || a.createdAt.getTime();
|
|
342
355
|
const bTime = b.lastUsedAt?.getTime() || b.createdAt.getTime();
|
|
343
356
|
return bTime - aTime;
|
|
344
357
|
});
|
|
345
358
|
for (const session of sortedSessions) {
|
|
346
|
-
const nameDisplay = session.name ?
|
|
347
|
-
const idDisplay =
|
|
359
|
+
const nameDisplay = session.name ? a.green(session.name) : a.gray("(unnamed)");
|
|
360
|
+
const idDisplay = a.gray(`[${session.id.substring(0, 8)}]`);
|
|
348
361
|
console.log(` ${nameDisplay} ${idDisplay}`);
|
|
349
362
|
if (session.provider) {
|
|
350
|
-
console.log(
|
|
363
|
+
console.log(a.gray(` Provider: ${session.provider}`));
|
|
351
364
|
}
|
|
352
365
|
const createdDate = session.createdAt.toLocaleString();
|
|
353
|
-
console.log(
|
|
366
|
+
console.log(a.gray(` Created: ${createdDate}`));
|
|
354
367
|
if (session.lastUsedAt) {
|
|
355
368
|
const accessedDate = session.lastUsedAt.toLocaleString();
|
|
356
|
-
console.log(
|
|
369
|
+
console.log(a.gray(` Last accessed: ${accessedDate}`));
|
|
357
370
|
}
|
|
358
371
|
if (session.history.length > 0) {
|
|
359
|
-
console.log(
|
|
372
|
+
console.log(a.gray(` History: ${session.history.length} entries`));
|
|
360
373
|
}
|
|
361
374
|
console.log("");
|
|
362
375
|
}
|
|
363
|
-
console.log(
|
|
364
|
-
console.log(
|
|
365
|
-
Use ${
|
|
376
|
+
console.log(a.gray(`Total: ${sessions.length} session(s)`));
|
|
377
|
+
console.log(a.gray(`
|
|
378
|
+
Use ${a.green("ccjk --resume <name|id>")} to resume a session`));
|
|
366
379
|
} catch (error) {
|
|
367
|
-
console.error(
|
|
380
|
+
console.error(a.red("Failed to list sessions:"), error);
|
|
368
381
|
}
|
|
369
382
|
}
|
|
370
383
|
async function restoreSession(sessionId) {
|
|
371
384
|
try {
|
|
372
385
|
if (!existsSync(SESSIONS_DIR)) {
|
|
373
|
-
console.log(
|
|
386
|
+
console.log(a.yellow("No sessions found"));
|
|
374
387
|
return;
|
|
375
388
|
}
|
|
376
389
|
const files = await readdir(SESSIONS_DIR);
|
|
377
390
|
const sessions = files.filter((f) => f.endsWith(".json"));
|
|
378
391
|
if (sessions.length === 0) {
|
|
379
|
-
console.log(
|
|
392
|
+
console.log(a.yellow("No sessions found"));
|
|
380
393
|
return;
|
|
381
394
|
}
|
|
382
395
|
if (!sessionId) {
|
|
@@ -401,29 +414,29 @@ async function restoreSession(sessionId) {
|
|
|
401
414
|
}
|
|
402
415
|
const sessionFile = join$1(SESSIONS_DIR, `${sessionId}.json`);
|
|
403
416
|
if (!existsSync(sessionFile)) {
|
|
404
|
-
console.log(
|
|
417
|
+
console.log(a.red(`Session not found: ${sessionId}`));
|
|
405
418
|
return;
|
|
406
419
|
}
|
|
407
420
|
const content = await readFile(sessionFile, "utf-8");
|
|
408
421
|
const metadata = JSON.parse(content);
|
|
409
|
-
console.log(
|
|
422
|
+
console.log(a.green(`\u2714 Session restored: ${metadata.id}`));
|
|
410
423
|
if (metadata.description) {
|
|
411
|
-
console.log(
|
|
424
|
+
console.log(a.gray(` ${metadata.description}`));
|
|
412
425
|
}
|
|
413
426
|
} catch (error) {
|
|
414
|
-
console.error(
|
|
427
|
+
console.error(a.red("Failed to restore session:"), error);
|
|
415
428
|
}
|
|
416
429
|
}
|
|
417
430
|
async function exportSession(sessionId) {
|
|
418
431
|
try {
|
|
419
432
|
if (!existsSync(SESSIONS_DIR)) {
|
|
420
|
-
console.log(
|
|
433
|
+
console.log(a.yellow("No sessions found"));
|
|
421
434
|
return;
|
|
422
435
|
}
|
|
423
436
|
const files = await readdir(SESSIONS_DIR);
|
|
424
437
|
const sessions = files.filter((f) => f.endsWith(".json"));
|
|
425
438
|
if (sessions.length === 0) {
|
|
426
|
-
console.log(
|
|
439
|
+
console.log(a.yellow("No sessions found"));
|
|
427
440
|
return;
|
|
428
441
|
}
|
|
429
442
|
if (!sessionId) {
|
|
@@ -448,7 +461,7 @@ async function exportSession(sessionId) {
|
|
|
448
461
|
}
|
|
449
462
|
const sessionFile = join$1(SESSIONS_DIR, `${sessionId}.json`);
|
|
450
463
|
if (!existsSync(sessionFile)) {
|
|
451
|
-
console.log(
|
|
464
|
+
console.log(a.red(`Session not found: ${sessionId}`));
|
|
452
465
|
return;
|
|
453
466
|
}
|
|
454
467
|
const content = await readFile(sessionFile, "utf-8");
|
|
@@ -464,9 +477,9 @@ Session data would be exported here.
|
|
|
464
477
|
`;
|
|
465
478
|
const outputFile = join$1(process__default.cwd(), `${sessionId}.md`);
|
|
466
479
|
await writeFile(outputFile, markdown);
|
|
467
|
-
console.log(
|
|
480
|
+
console.log(a.green(`\u2714 Session exported: ${outputFile}`));
|
|
468
481
|
} catch (error) {
|
|
469
|
-
console.error(
|
|
482
|
+
console.error(a.red("Failed to export session:"), error);
|
|
470
483
|
}
|
|
471
484
|
}
|
|
472
485
|
function formatBytes(bytes) {
|
|
@@ -553,14 +566,14 @@ async function analyzeCleanupTargets() {
|
|
|
553
566
|
}
|
|
554
567
|
async function cleanupSession(options = {}) {
|
|
555
568
|
try {
|
|
556
|
-
console.log(
|
|
557
|
-
console.log(
|
|
569
|
+
console.log(a.green.bold("\n\u{1F9F9} Session & Cache Cleanup\n"));
|
|
570
|
+
console.log(a.gray("Analyzing cleanup targets..."));
|
|
558
571
|
const targets = await analyzeCleanupTargets();
|
|
559
572
|
if (targets.length === 0) {
|
|
560
|
-
console.log(
|
|
573
|
+
console.log(a.green("\u2714 No cleanup needed - everything is clean!"));
|
|
561
574
|
return;
|
|
562
575
|
}
|
|
563
|
-
console.log(
|
|
576
|
+
console.log(a.white.bold("\nCleanup Targets:\n"));
|
|
564
577
|
let totalSize = 0;
|
|
565
578
|
let totalFiles = 0;
|
|
566
579
|
for (const target of targets) {
|
|
@@ -568,13 +581,13 @@ async function cleanupSession(options = {}) {
|
|
|
568
581
|
totalFiles += target.fileCount;
|
|
569
582
|
const sizeStr = formatBytes(target.size).padStart(10);
|
|
570
583
|
const filesStr = `${target.fileCount} files`.padStart(12);
|
|
571
|
-
console.log(` ${
|
|
572
|
-
console.log(` ${
|
|
573
|
-
console.log(` ${
|
|
584
|
+
console.log(` ${a.yellow(sizeStr)} ${a.gray(filesStr)} ${a.white(target.name)}`);
|
|
585
|
+
console.log(` ${a.gray(` ${target.description}`)}`);
|
|
586
|
+
console.log(` ${a.gray(` ${target.path}`)}`);
|
|
574
587
|
console.log("");
|
|
575
588
|
}
|
|
576
|
-
console.log(
|
|
577
|
-
console.log(` ${
|
|
589
|
+
console.log(a.white.bold("\u2500".repeat(50)));
|
|
590
|
+
console.log(` ${a.green(formatBytes(totalSize).padStart(10))} ${a.gray(`${totalFiles} files`.padStart(12))} ${a.white.bold("Total")}`);
|
|
578
591
|
console.log("");
|
|
579
592
|
if (!options.force) {
|
|
580
593
|
const { confirm } = await inquirer.prompt({
|
|
@@ -584,7 +597,7 @@ async function cleanupSession(options = {}) {
|
|
|
584
597
|
default: false
|
|
585
598
|
});
|
|
586
599
|
if (!confirm) {
|
|
587
|
-
console.log(
|
|
600
|
+
console.log(a.yellow("Cleanup cancelled"));
|
|
588
601
|
return;
|
|
589
602
|
}
|
|
590
603
|
}
|
|
@@ -603,10 +616,10 @@ async function cleanupSession(options = {}) {
|
|
|
603
616
|
selectedTargets = targets.filter((t) => selected.includes(t.path));
|
|
604
617
|
}
|
|
605
618
|
if (selectedTargets.length === 0) {
|
|
606
|
-
console.log(
|
|
619
|
+
console.log(a.yellow("No targets selected"));
|
|
607
620
|
return;
|
|
608
621
|
}
|
|
609
|
-
console.log(
|
|
622
|
+
console.log(a.gray("\nCleaning up..."));
|
|
610
623
|
let cleanedSize = 0;
|
|
611
624
|
let cleanedFiles = 0;
|
|
612
625
|
for (const target of selectedTargets) {
|
|
@@ -614,60 +627,60 @@ async function cleanupSession(options = {}) {
|
|
|
614
627
|
await rm(target.path, { recursive: true, force: true });
|
|
615
628
|
cleanedSize += target.size;
|
|
616
629
|
cleanedFiles += target.fileCount;
|
|
617
|
-
console.log(
|
|
630
|
+
console.log(a.green(` \u2714 ${target.name}`));
|
|
618
631
|
} catch (error) {
|
|
619
|
-
console.log(
|
|
632
|
+
console.log(a.red(` \u2716 ${target.name}: ${error}`));
|
|
620
633
|
}
|
|
621
634
|
}
|
|
622
635
|
console.log("");
|
|
623
|
-
console.log(
|
|
624
|
-
console.log(
|
|
636
|
+
console.log(a.green.bold(`\u2714 Cleanup complete!`));
|
|
637
|
+
console.log(a.gray(` Freed ${formatBytes(cleanedSize)} (${cleanedFiles} files)`));
|
|
625
638
|
} catch (error) {
|
|
626
|
-
console.error(
|
|
639
|
+
console.error(a.red("Failed to cleanup:"), error);
|
|
627
640
|
}
|
|
628
641
|
}
|
|
629
642
|
async function sessionStatus() {
|
|
630
643
|
try {
|
|
631
|
-
console.log(
|
|
644
|
+
console.log(a.green.bold("\n\u{1F4CA} Session & Cache Status\n"));
|
|
632
645
|
const targets = await analyzeCleanupTargets();
|
|
633
646
|
if (targets.length === 0) {
|
|
634
|
-
console.log(
|
|
647
|
+
console.log(a.green("\u2714 All clean - no cached data found"));
|
|
635
648
|
return;
|
|
636
649
|
}
|
|
637
650
|
let totalSize = 0;
|
|
638
651
|
let totalFiles = 0;
|
|
639
|
-
console.log(
|
|
640
|
-
console.log(
|
|
652
|
+
console.log(a.white.bold("Directory Size Files"));
|
|
653
|
+
console.log(a.gray("\u2500".repeat(50)));
|
|
641
654
|
for (const target of targets) {
|
|
642
655
|
totalSize += target.size;
|
|
643
656
|
totalFiles += target.fileCount;
|
|
644
657
|
const name = target.name.padEnd(24);
|
|
645
658
|
const size = formatBytes(target.size).padStart(10);
|
|
646
659
|
const files = String(target.fileCount).padStart(8);
|
|
647
|
-
console.log(`${
|
|
660
|
+
console.log(`${a.white(name)} ${a.yellow(size)} ${a.gray(files)}`);
|
|
648
661
|
}
|
|
649
|
-
console.log(
|
|
650
|
-
console.log(`${
|
|
662
|
+
console.log(a.gray("\u2500".repeat(50)));
|
|
663
|
+
console.log(`${a.white.bold("Total".padEnd(24))} ${a.green.bold(formatBytes(totalSize).padStart(10))} ${a.gray(String(totalFiles).padStart(8))}`);
|
|
651
664
|
console.log("");
|
|
652
|
-
console.log(
|
|
665
|
+
console.log(a.gray(`Run ${a.green("ccjk session cleanup")} to free up space`));
|
|
653
666
|
const sessionManager = getSessionManager();
|
|
654
667
|
const stats = await sessionManager.getStatistics();
|
|
655
668
|
if (stats.totalSessions > 0) {
|
|
656
|
-
console.log(
|
|
657
|
-
console.log(
|
|
658
|
-
console.log(
|
|
669
|
+
console.log(a.green.bold("\n\u{1F4DD} Session Statistics\n"));
|
|
670
|
+
console.log(a.white(`Total Sessions: ${a.yellow(String(stats.totalSessions))}`));
|
|
671
|
+
console.log(a.white(`Total History Entries: ${a.yellow(String(stats.totalHistoryEntries))}`));
|
|
659
672
|
if (stats.oldestSession) {
|
|
660
|
-
console.log(
|
|
673
|
+
console.log(a.white(`Oldest Session: ${a.gray(stats.oldestSession.toLocaleString())}`));
|
|
661
674
|
}
|
|
662
675
|
if (stats.newestSession) {
|
|
663
|
-
console.log(
|
|
676
|
+
console.log(a.white(`Newest Session: ${a.gray(stats.newestSession.toLocaleString())}`));
|
|
664
677
|
}
|
|
665
678
|
if (stats.mostRecentlyUsed) {
|
|
666
|
-
console.log(
|
|
679
|
+
console.log(a.white(`Most Recently Used: ${a.gray(stats.mostRecentlyUsed.toLocaleString())}`));
|
|
667
680
|
}
|
|
668
681
|
}
|
|
669
682
|
} catch (error) {
|
|
670
|
-
console.error(
|
|
683
|
+
console.error(a.red("Failed to get status:"), error);
|
|
671
684
|
}
|
|
672
685
|
}
|
|
673
686
|
async function createSessionCommand(options) {
|
|
@@ -711,26 +724,26 @@ async function createSessionCommand(options) {
|
|
|
711
724
|
const session = await sessionManager.createSession(name, provider, apiKey, {
|
|
712
725
|
codeType: options.codeType
|
|
713
726
|
});
|
|
714
|
-
console.log(
|
|
727
|
+
console.log(a.green(`
|
|
715
728
|
\u2714 Session created successfully!`));
|
|
716
|
-
console.log(
|
|
729
|
+
console.log(a.white(` ID: ${a.green(session.id)}`));
|
|
717
730
|
if (session.name) {
|
|
718
|
-
console.log(
|
|
731
|
+
console.log(a.white(` Name: ${a.green(session.name)}`));
|
|
719
732
|
}
|
|
720
733
|
if (session.provider) {
|
|
721
|
-
console.log(
|
|
734
|
+
console.log(a.white(` Provider: ${a.green(session.provider)}`));
|
|
722
735
|
}
|
|
723
|
-
console.log(
|
|
724
|
-
Use ${
|
|
736
|
+
console.log(a.gray(`
|
|
737
|
+
Use ${a.green(`ccjk --resume ${session.name || session.id}`)} to resume this session`));
|
|
725
738
|
} catch (error) {
|
|
726
|
-
console.error(
|
|
739
|
+
console.error(a.red("Failed to create session:"), error);
|
|
727
740
|
}
|
|
728
741
|
}
|
|
729
742
|
async function renameSessionCommand(sessionId, options) {
|
|
730
743
|
try {
|
|
731
744
|
const sessionManager = getSessionManager();
|
|
732
745
|
if (!sessionId) {
|
|
733
|
-
console.log(
|
|
746
|
+
console.log(a.red("Please provide a session ID or name"));
|
|
734
747
|
return;
|
|
735
748
|
}
|
|
736
749
|
let newName = options.name;
|
|
@@ -745,34 +758,34 @@ async function renameSessionCommand(sessionId, options) {
|
|
|
745
758
|
}
|
|
746
759
|
const success = await sessionManager.renameSession(sessionId, newName);
|
|
747
760
|
if (success) {
|
|
748
|
-
console.log(
|
|
761
|
+
console.log(a.green(`\u2714 Session renamed to: ${a.green(newName)}`));
|
|
749
762
|
} else {
|
|
750
|
-
console.log(
|
|
763
|
+
console.log(a.red(`Session not found: ${sessionId}`));
|
|
751
764
|
}
|
|
752
765
|
} catch (error) {
|
|
753
|
-
console.error(
|
|
766
|
+
console.error(a.red("Failed to rename session:"), error);
|
|
754
767
|
}
|
|
755
768
|
}
|
|
756
769
|
async function deleteSessionCommand(sessionId, options) {
|
|
757
770
|
try {
|
|
758
771
|
const sessionManager = getSessionManager();
|
|
759
772
|
if (!sessionId) {
|
|
760
|
-
console.log(
|
|
773
|
+
console.log(a.red("Please provide a session ID or name"));
|
|
761
774
|
return;
|
|
762
775
|
}
|
|
763
776
|
const session = await sessionManager.loadSession(sessionId);
|
|
764
777
|
if (!session) {
|
|
765
|
-
console.log(
|
|
778
|
+
console.log(a.red(`Session not found: ${sessionId}`));
|
|
766
779
|
return;
|
|
767
780
|
}
|
|
768
781
|
if (!options.force) {
|
|
769
|
-
console.log(
|
|
770
|
-
console.log(
|
|
782
|
+
console.log(a.yellow("\n\u26A0\uFE0F You are about to delete:"));
|
|
783
|
+
console.log(a.white(` ID: ${a.green(session.id)}`));
|
|
771
784
|
if (session.name) {
|
|
772
|
-
console.log(
|
|
785
|
+
console.log(a.white(` Name: ${a.green(session.name)}`));
|
|
773
786
|
}
|
|
774
|
-
console.log(
|
|
775
|
-
console.log(
|
|
787
|
+
console.log(a.white(` Created: ${a.gray(session.createdAt.toLocaleString())}`));
|
|
788
|
+
console.log(a.white(` History entries: ${a.gray(String(session.history.length))}`));
|
|
776
789
|
const { confirm } = await inquirer.prompt({
|
|
777
790
|
type: "confirm",
|
|
778
791
|
name: "confirm",
|
|
@@ -780,18 +793,18 @@ async function deleteSessionCommand(sessionId, options) {
|
|
|
780
793
|
default: false
|
|
781
794
|
});
|
|
782
795
|
if (!confirm) {
|
|
783
|
-
console.log(
|
|
796
|
+
console.log(a.yellow("Deletion cancelled"));
|
|
784
797
|
return;
|
|
785
798
|
}
|
|
786
799
|
}
|
|
787
800
|
const success = await sessionManager.deleteSession(sessionId);
|
|
788
801
|
if (success) {
|
|
789
|
-
console.log(
|
|
802
|
+
console.log(a.green(`\u2714 Session deleted: ${sessionId}`));
|
|
790
803
|
} else {
|
|
791
|
-
console.log(
|
|
804
|
+
console.log(a.red(`Failed to delete session: ${sessionId}`));
|
|
792
805
|
}
|
|
793
806
|
} catch (error) {
|
|
794
|
-
console.error(
|
|
807
|
+
console.error(a.red("Failed to delete session:"), error);
|
|
795
808
|
}
|
|
796
809
|
}
|
|
797
810
|
async function handleSessionCommand(args) {
|
|
@@ -824,7 +837,7 @@ async function handleSessionCommand(args) {
|
|
|
824
837
|
break;
|
|
825
838
|
case "rename":
|
|
826
839
|
if (!sessionId) {
|
|
827
|
-
console.log(
|
|
840
|
+
console.log(a.red("Please provide a session ID to rename"));
|
|
828
841
|
return;
|
|
829
842
|
}
|
|
830
843
|
await renameSessionCommand(sessionId, {});
|
|
@@ -832,32 +845,32 @@ async function handleSessionCommand(args) {
|
|
|
832
845
|
case "delete":
|
|
833
846
|
case "rm":
|
|
834
847
|
if (!sessionId) {
|
|
835
|
-
console.log(
|
|
848
|
+
console.log(a.red("Please provide a session ID to delete"));
|
|
836
849
|
return;
|
|
837
850
|
}
|
|
838
851
|
await deleteSessionCommand(sessionId, {});
|
|
839
852
|
break;
|
|
840
853
|
default:
|
|
841
854
|
console.log();
|
|
842
|
-
console.log(
|
|
855
|
+
console.log(a.cyan.bold("\u{1F4E6} Session Management Commands"));
|
|
843
856
|
console.log();
|
|
844
|
-
console.log(
|
|
857
|
+
console.log(a.white("Usage: ccjk session <action> [id]"));
|
|
845
858
|
console.log();
|
|
846
|
-
console.log(
|
|
847
|
-
console.log(`${
|
|
848
|
-
console.log(`${
|
|
849
|
-
console.log(`${
|
|
850
|
-
console.log(`${
|
|
851
|
-
console.log(`${
|
|
852
|
-
console.log(`${
|
|
853
|
-
console.log(`${
|
|
854
|
-
console.log(`${
|
|
855
|
-
console.log(`${
|
|
859
|
+
console.log(a.white("Actions:"));
|
|
860
|
+
console.log(`${a.gray(" save ")}Save current session`);
|
|
861
|
+
console.log(`${a.gray(" list ")}List all sessions`);
|
|
862
|
+
console.log(`${a.gray(" restore ")}Restore a session`);
|
|
863
|
+
console.log(`${a.gray(" export ")}Export a session`);
|
|
864
|
+
console.log(`${a.gray(" cleanup ")}Clean up old sessions`);
|
|
865
|
+
console.log(`${a.gray(" status ")}Show session status`);
|
|
866
|
+
console.log(`${a.gray(" create ")}Create a new session`);
|
|
867
|
+
console.log(`${a.gray(" rename ")}Rename a session`);
|
|
868
|
+
console.log(`${a.gray(" delete ")}Delete a session`);
|
|
856
869
|
console.log();
|
|
857
|
-
console.log(
|
|
858
|
-
console.log(
|
|
859
|
-
console.log(
|
|
860
|
-
console.log(
|
|
870
|
+
console.log(a.white("Examples:"));
|
|
871
|
+
console.log(a.gray(" ccjk session save"));
|
|
872
|
+
console.log(a.gray(" ccjk session list"));
|
|
873
|
+
console.log(a.gray(" ccjk session restore abc123"));
|
|
861
874
|
break;
|
|
862
875
|
}
|
|
863
876
|
}
|
package/dist/chunks/sessions.mjs
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { t as taskPersistence } from '../shared/ccjk.
|
|
1
|
+
import a from './index2.mjs';
|
|
2
|
+
import { t as taskPersistence } from '../shared/ccjk.BFxsJM0k.mjs';
|
|
3
|
+
import '../shared/ccjk.BAGoDD49.mjs';
|
|
3
4
|
import 'better-sqlite3';
|
|
4
5
|
import 'node:fs';
|
|
5
|
-
import '
|
|
6
|
+
import '../shared/ccjk.bQ7Dh1g4.mjs';
|
|
6
7
|
|
|
7
8
|
async function sessionsCommand(options = {}) {
|
|
8
9
|
if (options.list) {
|
|
9
10
|
const sessions = taskPersistence.listSessions(20);
|
|
10
11
|
if (sessions.length === 0) {
|
|
11
|
-
console.log(
|
|
12
|
+
console.log(a.yellow("\n\u26A0\uFE0F No sessions found\n"));
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
14
|
-
console.log(
|
|
15
|
+
console.log(a.cyan.bold("\n\u{1F4CB} Brain Sessions\n"));
|
|
15
16
|
for (const session of sessions) {
|
|
16
17
|
const date = new Date(session.createdAt).toLocaleString();
|
|
17
|
-
console.log(
|
|
18
|
-
console.log(
|
|
18
|
+
console.log(a.white(` ${session.id}`));
|
|
19
|
+
console.log(a.gray(` Created: ${date}`));
|
|
19
20
|
if (session.metadata.rootTask) {
|
|
20
|
-
console.log(
|
|
21
|
+
console.log(a.gray(` Task: ${session.metadata.rootTask}`));
|
|
21
22
|
}
|
|
22
23
|
console.log();
|
|
23
24
|
}
|
|
@@ -26,15 +27,15 @@ async function sessionsCommand(options = {}) {
|
|
|
26
27
|
if (options.show) {
|
|
27
28
|
const context = taskPersistence.restoreContext(options.show);
|
|
28
29
|
if (!context) {
|
|
29
|
-
console.log(
|
|
30
|
+
console.log(a.red(`
|
|
30
31
|
\u274C Session not found: ${options.show}
|
|
31
32
|
`));
|
|
32
33
|
return;
|
|
33
34
|
}
|
|
34
|
-
console.log(
|
|
35
|
+
console.log(a.cyan.bold(`
|
|
35
36
|
\u{1F4CA} Session: ${context.sessionId}
|
|
36
37
|
`));
|
|
37
|
-
console.log(
|
|
38
|
+
console.log(a.white(`Tasks: ${context.tasks.length}`));
|
|
38
39
|
console.log();
|
|
39
40
|
for (const task of context.tasks) {
|
|
40
41
|
const statusIcon = {
|
|
@@ -44,14 +45,14 @@ async function sessionsCommand(options = {}) {
|
|
|
44
45
|
failed: "\u274C"
|
|
45
46
|
}[task.status];
|
|
46
47
|
console.log(` ${statusIcon} ${task.name}`);
|
|
47
|
-
console.log(
|
|
48
|
-
console.log(
|
|
48
|
+
console.log(a.gray(` Status: ${task.status}`));
|
|
49
|
+
console.log(a.gray(` Priority: ${task.priority}`));
|
|
49
50
|
if (task.dependencies.length > 0) {
|
|
50
|
-
console.log(
|
|
51
|
+
console.log(a.gray(` Depends on: ${task.dependencies.join(", ")}`));
|
|
51
52
|
}
|
|
52
53
|
if (task.error) {
|
|
53
54
|
const error = JSON.parse(task.error);
|
|
54
|
-
console.log(
|
|
55
|
+
console.log(a.red(` Error: ${error.message}`));
|
|
55
56
|
}
|
|
56
57
|
console.log();
|
|
57
58
|
}
|
|
@@ -60,45 +61,45 @@ async function sessionsCommand(options = {}) {
|
|
|
60
61
|
if (options.restore) {
|
|
61
62
|
const context = taskPersistence.restoreContext(options.restore);
|
|
62
63
|
if (!context) {
|
|
63
|
-
console.log(
|
|
64
|
+
console.log(a.red(`
|
|
64
65
|
\u274C Session not found: ${options.restore}
|
|
65
66
|
`));
|
|
66
67
|
return;
|
|
67
68
|
}
|
|
68
|
-
console.log(
|
|
69
|
+
console.log(a.cyan.bold(`
|
|
69
70
|
\u{1F504} Restoring session: ${context.sessionId}
|
|
70
71
|
`));
|
|
71
72
|
const incompleteTasks = context.tasks.filter(
|
|
72
73
|
(t) => t.status === "pending" || t.status === "running"
|
|
73
74
|
);
|
|
74
75
|
if (incompleteTasks.length === 0) {
|
|
75
|
-
console.log(
|
|
76
|
+
console.log(a.green("\u2705 All tasks completed, nothing to restore\n"));
|
|
76
77
|
return;
|
|
77
78
|
}
|
|
78
|
-
console.log(
|
|
79
|
+
console.log(a.yellow(`Found ${incompleteTasks.length} incomplete tasks:
|
|
79
80
|
`));
|
|
80
81
|
for (const task of incompleteTasks) {
|
|
81
82
|
console.log(` \u23F3 ${task.name}`);
|
|
82
83
|
}
|
|
83
84
|
console.log();
|
|
84
|
-
console.log(
|
|
85
|
-
console.log(
|
|
85
|
+
console.log(a.gray("\u{1F4A1} To resume execution, use:"));
|
|
86
|
+
console.log(a.cyan(` ccjk brain execute --session ${context.sessionId}`));
|
|
86
87
|
console.log();
|
|
87
88
|
return;
|
|
88
89
|
}
|
|
89
90
|
if (options.cleanup) {
|
|
90
91
|
const deleted = taskPersistence.cleanup(7);
|
|
91
|
-
console.log(
|
|
92
|
+
console.log(a.green(`
|
|
92
93
|
\u2705 Cleaned up ${deleted} old records (kept last 7 days)
|
|
93
94
|
`));
|
|
94
95
|
return;
|
|
95
96
|
}
|
|
96
|
-
console.log(
|
|
97
|
-
console.log(
|
|
98
|
-
console.log(
|
|
99
|
-
console.log(
|
|
100
|
-
console.log(
|
|
101
|
-
console.log(
|
|
97
|
+
console.log(a.cyan.bold("\n\u{1F4CB} Brain Sessions Management\n"));
|
|
98
|
+
console.log(a.white("Usage:"));
|
|
99
|
+
console.log(a.gray(" ccjk sessions --list # List all sessions"));
|
|
100
|
+
console.log(a.gray(" ccjk sessions --show <id> # Show session details"));
|
|
101
|
+
console.log(a.gray(" ccjk sessions --restore <id> # Restore incomplete session"));
|
|
102
|
+
console.log(a.gray(" ccjk sessions --cleanup # Clean up old sessions"));
|
|
102
103
|
console.log();
|
|
103
104
|
}
|
|
104
105
|
|
|
@@ -2,12 +2,10 @@ import { existsSync, readFileSync, writeFileSync, appendFileSync, unlinkSync, mk
|
|
|
2
2
|
import { platform } from 'node:os';
|
|
3
3
|
import process__default from 'node:process';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import { join, dirname } from 'pathe';
|
|
6
5
|
import { CCJK_CONFIG_DIR } from './constants.mjs';
|
|
7
6
|
import { getCloudState, updateCloudState } from './auto-bootstrap.mjs';
|
|
8
|
-
import '
|
|
9
|
-
import '
|
|
10
|
-
import 'i18next-fs-backend';
|
|
7
|
+
import { j as join, d as dirname } from '../shared/ccjk.bQ7Dh1g4.mjs';
|
|
8
|
+
import './index5.mjs';
|
|
11
9
|
import 'node:crypto';
|
|
12
10
|
|
|
13
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -52,7 +50,7 @@ async function checkCcjkVersion() {
|
|
|
52
50
|
}
|
|
53
51
|
async function checkClaudeCodeVersion() {
|
|
54
52
|
try {
|
|
55
|
-
const { exec } = await import('
|
|
53
|
+
const { exec } = await import('./main.mjs');
|
|
56
54
|
const result = await exec("claude", ["--version"], { timeout: 5e3 });
|
|
57
55
|
if (result.exitCode !== 0) {
|
|
58
56
|
return {
|
|
@@ -88,7 +86,7 @@ async function checkClaudeCodeVersion() {
|
|
|
88
86
|
}
|
|
89
87
|
async function checkCcrVersion() {
|
|
90
88
|
try {
|
|
91
|
-
const { exec } = await import('
|
|
89
|
+
const { exec } = await import('./main.mjs');
|
|
92
90
|
const result = await exec("ccr", ["--version"], { timeout: 5e3 });
|
|
93
91
|
if (result.exitCode !== 0) {
|
|
94
92
|
return {
|
|
@@ -151,7 +149,7 @@ async function fetchLatestNpmVersion(packageName) {
|
|
|
151
149
|
}
|
|
152
150
|
async function detectClaudeCodeInstallMethod() {
|
|
153
151
|
try {
|
|
154
|
-
const { exec } = await import('
|
|
152
|
+
const { exec } = await import('./main.mjs');
|
|
155
153
|
if (platform() === "darwin") {
|
|
156
154
|
const brewResult = await exec("brew", ["list", "--cask", "claude-code"], { timeout: 5e3 });
|
|
157
155
|
if (brewResult.exitCode === 0) {
|
|
@@ -264,7 +262,7 @@ async function upgradeTool(info) {
|
|
|
264
262
|
}
|
|
265
263
|
}
|
|
266
264
|
async function upgradeCcjk(info, startTime) {
|
|
267
|
-
const { exec } = await import('
|
|
265
|
+
const { exec } = await import('./main.mjs');
|
|
268
266
|
const result = await exec("npm", ["update", "-g", "ccjk"], {
|
|
269
267
|
timeout: UPGRADE_TIMEOUT
|
|
270
268
|
});
|
|
@@ -279,7 +277,7 @@ async function upgradeCcjk(info, startTime) {
|
|
|
279
277
|
};
|
|
280
278
|
}
|
|
281
279
|
async function upgradeClaudeCode(info, startTime) {
|
|
282
|
-
const { exec } = await import('
|
|
280
|
+
const { exec } = await import('./main.mjs');
|
|
283
281
|
let result;
|
|
284
282
|
switch (info.installMethod) {
|
|
285
283
|
case "homebrew":
|
|
@@ -310,7 +308,7 @@ async function upgradeClaudeCode(info, startTime) {
|
|
|
310
308
|
};
|
|
311
309
|
}
|
|
312
310
|
async function upgradeCcr(info, startTime) {
|
|
313
|
-
const { exec } = await import('
|
|
311
|
+
const { exec } = await import('./main.mjs');
|
|
314
312
|
const result = await exec("npm", ["update", "-g", "@musistudio/claude-code-router"], {
|
|
315
313
|
timeout: UPGRADE_TIMEOUT
|
|
316
314
|
});
|