ccjk 10.1.0 → 10.3.0
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/README.md +28 -0
- package/dist/chunks/agent-teams.mjs +1 -1
- package/dist/chunks/agent.mjs +1 -1
- package/dist/chunks/api-providers.mjs +1 -1
- package/dist/chunks/api.mjs +3 -3
- package/dist/chunks/auto-bootstrap.mjs +1 -1
- package/dist/chunks/auto-updater.mjs +1 -1
- package/dist/{shared/ccjk.Br91zBIG.mjs → chunks/banner.mjs} +52 -3
- package/dist/chunks/boost.mjs +2 -2
- package/dist/chunks/ccjk-agents.mjs +1 -1
- package/dist/chunks/ccjk-all.mjs +1 -1
- package/dist/chunks/ccjk-config.mjs +1 -1
- package/dist/chunks/ccjk-hooks.mjs +1 -1
- package/dist/chunks/ccjk-mcp.mjs +2 -2
- package/dist/chunks/ccjk-setup.mjs +1 -1
- package/dist/chunks/ccjk-skills.mjs +1 -1
- package/dist/chunks/ccr.mjs +11 -10
- package/dist/chunks/ccu.mjs +1 -1
- package/dist/chunks/check-updates.mjs +4 -3
- package/dist/chunks/claude-code-config-manager.mjs +8 -7
- package/dist/chunks/claude-code-incremental-manager.mjs +3 -2
- package/dist/chunks/claude-config.mjs +3 -3
- package/dist/chunks/claude-wrapper.mjs +2 -2
- package/dist/chunks/codex-config-switch.mjs +3 -2
- package/dist/chunks/codex-provider-manager.mjs +3 -2
- package/dist/chunks/codex-uninstaller.mjs +2 -2
- package/dist/chunks/codex.mjs +5 -5
- package/dist/chunks/commands.mjs +88 -391
- package/dist/chunks/commands2.mjs +391 -88
- package/dist/chunks/completion.mjs +1 -1
- package/dist/chunks/config-consolidator.mjs +2 -2
- package/dist/chunks/config-switch.mjs +4 -3
- package/dist/chunks/config.mjs +6 -98
- package/dist/chunks/config2.mjs +411 -400
- package/dist/chunks/config3.mjs +401 -410
- package/dist/chunks/constants.mjs +1 -1
- package/dist/chunks/context.mjs +283 -1
- package/dist/chunks/dashboard.mjs +365 -0
- package/dist/chunks/doctor.mjs +4 -4
- package/dist/chunks/features.mjs +12 -11
- package/dist/chunks/fs-operations.mjs +1 -1
- package/dist/chunks/health-alerts.mjs +304 -0
- package/dist/chunks/health-check.mjs +532 -0
- package/dist/chunks/index.mjs +10 -177
- package/dist/chunks/index2.mjs +168 -1162
- package/dist/chunks/index3.mjs +1076 -910
- package/dist/chunks/index4.mjs +947 -137
- package/dist/chunks/index5.mjs +167 -635
- package/dist/chunks/index6.mjs +663 -0
- package/dist/chunks/init.mjs +19 -19
- package/dist/chunks/installer.mjs +649 -147
- package/dist/chunks/installer2.mjs +147 -649
- package/dist/chunks/interview.mjs +2 -2
- package/dist/chunks/marketplace.mjs +1 -1
- package/dist/chunks/mcp.mjs +5 -4
- package/dist/chunks/menu.mjs +22 -9
- package/dist/chunks/metrics-display.mjs +152 -0
- package/dist/chunks/migrator.mjs +1 -1
- package/dist/chunks/monitor.mjs +2 -2
- package/dist/chunks/notification.mjs +1 -1
- package/dist/chunks/onboarding.mjs +2 -2
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/permission-manager.mjs +2 -2
- package/dist/chunks/permissions.mjs +1 -1
- package/dist/chunks/persistence-manager.mjs +781 -0
- package/dist/chunks/persistence.mjs +667 -0
- package/dist/chunks/platform.mjs +1 -1
- package/dist/chunks/plugin.mjs +1 -1
- package/dist/chunks/prompts.mjs +1 -1
- package/dist/chunks/providers.mjs +1 -1
- package/dist/chunks/quick-actions.mjs +321 -0
- package/dist/chunks/quick-provider.mjs +2 -0
- package/dist/chunks/quick-setup.mjs +9 -8
- package/dist/chunks/silent-updater.mjs +1 -1
- package/dist/chunks/simple-config.mjs +3 -8
- package/dist/chunks/skill.mjs +1 -1
- package/dist/chunks/skills-sync.mjs +1 -1
- package/dist/chunks/skills.mjs +1 -1
- package/dist/chunks/slash-commands.mjs +208 -0
- package/dist/chunks/smart-defaults.mjs +1 -1
- package/dist/chunks/startup.mjs +1 -1
- package/dist/chunks/stats.mjs +1 -1
- package/dist/chunks/status.mjs +31 -2
- package/dist/chunks/team.mjs +1 -1
- package/dist/chunks/thinking.mjs +2 -2
- package/dist/chunks/uninstall.mjs +5 -5
- package/dist/chunks/update.mjs +8 -7
- package/dist/chunks/upgrade-manager.mjs +2 -2
- package/dist/chunks/version-checker.mjs +3 -3
- package/dist/chunks/vim.mjs +1 -1
- package/dist/chunks/zero-config.mjs +359 -0
- package/dist/cli.mjs +212 -21
- package/dist/i18n/locales/en/cli.json +14 -1
- package/dist/i18n/locales/en/common.json +27 -0
- package/dist/i18n/locales/en/configuration.json +33 -0
- package/dist/i18n/locales/en/context.json +54 -1
- package/dist/i18n/locales/en/dashboard.json +78 -0
- package/dist/i18n/locales/en/persistence.json +127 -0
- package/dist/i18n/locales/en/quick-actions.json +78 -0
- package/dist/i18n/locales/zh-CN/cli.json +14 -1
- package/dist/i18n/locales/zh-CN/common.json +27 -0
- package/dist/i18n/locales/zh-CN/configuration.json +33 -0
- package/dist/i18n/locales/zh-CN/context.json +54 -1
- package/dist/i18n/locales/zh-CN/dashboard.json +78 -0
- package/dist/i18n/locales/zh-CN/persistence.json +127 -0
- package/dist/i18n/locales/zh-CN/quick-actions.json +78 -0
- package/dist/index.mjs +3 -2
- package/dist/shared/{ccjk.DE91nClQ.mjs → ccjk.BKoi8-Hy.mjs} +1 -1
- package/dist/shared/ccjk.BiCrMV5O.mjs +94 -0
- package/dist/shared/{ccjk.Dpw86UX0.mjs → ccjk.CxtuJxaS.mjs} +1 -1
- package/dist/shared/{ccjk.ClzTOz9n.mjs → ccjk.DB2UYcq0.mjs} +5 -5
- package/dist/shared/{ccjk.CmsW23FN.mjs → ccjk.DVBW2wxp.mjs} +4 -3
- package/dist/shared/{ccjk.Bndhan7G.mjs → ccjk.DfwJOEok.mjs} +1 -1
- package/dist/shared/{ccjk.DvIrK0wz.mjs → ccjk.DrMygfCF.mjs} +1 -1
- package/package.json +19 -19
|
@@ -4,8 +4,8 @@ import { resolve, dirname, join } from 'node:path';
|
|
|
4
4
|
import process__default from 'node:process';
|
|
5
5
|
import ansis from 'ansis';
|
|
6
6
|
import inquirer from 'inquirer';
|
|
7
|
-
import { i18n } from './
|
|
8
|
-
import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.
|
|
7
|
+
import { i18n } from './index2.mjs';
|
|
8
|
+
import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.DrMygfCF.mjs';
|
|
9
9
|
import { randomUUID } from 'node:crypto';
|
|
10
10
|
import 'node:url';
|
|
11
11
|
import 'i18next';
|
package/dist/chunks/mcp.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import ansis from 'ansis';
|
|
2
|
-
import { i18n } from './
|
|
2
|
+
import { i18n } from './index2.mjs';
|
|
3
3
|
import 'node:child_process';
|
|
4
4
|
import 'node:process';
|
|
5
5
|
import { M as MCP_SERVICE_TIERS, i as isCoreService, g as getServicesByTier, c as checkMcpPerformance, f as formatPerformanceWarning, a as calculateResourceUsage, b as getOptimizationSuggestions, d as getMcpTierConfig } from './mcp-performance.mjs';
|
|
6
6
|
import { r as readMcpConfig, b as backupMcpConfig, w as writeMcpConfig } from './claude-config.mjs';
|
|
7
7
|
import inquirer from 'inquirer';
|
|
8
8
|
import { M as MCP_SERVICE_CONFIGS } from './codex.mjs';
|
|
9
|
-
import { d as displayInstalledMcpServices,
|
|
9
|
+
import { d as displayInstalledMcpServices, a as isMcpServiceInstalled, b as installMcpService, u as uninstallMcpService } from '../shared/ccjk.DB2UYcq0.mjs';
|
|
10
10
|
import { existsSync, unlinkSync, statSync, mkdirSync, readFileSync } from 'node:fs';
|
|
11
11
|
import { homedir } from 'node:os';
|
|
12
12
|
import { join } from 'pathe';
|
|
@@ -17,6 +17,8 @@ import 'i18next-fs-backend';
|
|
|
17
17
|
import './constants.mjs';
|
|
18
18
|
import './json-config.mjs';
|
|
19
19
|
import 'dayjs';
|
|
20
|
+
import 'node:crypto';
|
|
21
|
+
import 'node:fs/promises';
|
|
20
22
|
import './platform.mjs';
|
|
21
23
|
import 'tinyexec';
|
|
22
24
|
import 'ora';
|
|
@@ -24,13 +26,12 @@ import 'semver';
|
|
|
24
26
|
import 'smol-toml';
|
|
25
27
|
import './ccjk-config.mjs';
|
|
26
28
|
import './config.mjs';
|
|
29
|
+
import '../shared/ccjk.BiCrMV5O.mjs';
|
|
27
30
|
import '../shared/ccjk.BFQ7yr5S.mjs';
|
|
28
31
|
import './prompts.mjs';
|
|
29
32
|
import './package.mjs';
|
|
30
33
|
import '../shared/ccjk.DHbrGcgg.mjs';
|
|
31
34
|
import 'inquirer-toggle';
|
|
32
|
-
import 'node:crypto';
|
|
33
|
-
import 'node:fs/promises';
|
|
34
35
|
|
|
35
36
|
function getReleasableServices(configuredServices, tier) {
|
|
36
37
|
return configuredServices.filter((serviceId) => {
|
package/dist/chunks/menu.mjs
CHANGED
|
@@ -5,17 +5,17 @@ import inquirer from 'inquirer';
|
|
|
5
5
|
import { join } from 'pathe';
|
|
6
6
|
import { M as MCP_SERVICE_CONFIGS } from './codex.mjs';
|
|
7
7
|
import { CODE_TOOL_BANNERS, CLAUDE_DIR, isCodeToolType, DEFAULT_CODE_TOOL_TYPE } from './constants.mjs';
|
|
8
|
-
import { ensureI18nInitialized, i18n } from './
|
|
9
|
-
import {
|
|
8
|
+
import { ensureI18nInitialized, i18n } from './index2.mjs';
|
|
9
|
+
import { displayBannerWithInfo } from './banner.mjs';
|
|
10
10
|
import { updateZcfConfig, readZcfConfig } from './ccjk-config.mjs';
|
|
11
11
|
import { r as readMcpConfig } from './claude-config.mjs';
|
|
12
|
-
import { r as resolveCodeType } from '../shared/ccjk.
|
|
13
|
-
import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.
|
|
12
|
+
import { r as resolveCodeType } from '../shared/ccjk.CxtuJxaS.mjs';
|
|
13
|
+
import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.DrMygfCF.mjs';
|
|
14
14
|
import { changeScriptLanguageFeature, configureMcpFeature, configureEnvPermissionFeature, configureAiMemoryFeature, configureDefaultModelFeature, configureApiFeature } from './features.mjs';
|
|
15
15
|
import { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
|
|
16
16
|
import { homedir } from 'node:os';
|
|
17
|
-
import { runCcrStop, runCcrStart, runCcrRestart, runCcrStatus, runCcrUi } from './
|
|
18
|
-
import { readCcrConfig, configureCcrFeature } from './
|
|
17
|
+
import { runCcrStop, runCcrStart, runCcrRestart, runCcrStatus, runCcrUi } from './commands.mjs';
|
|
18
|
+
import { readCcrConfig, configureCcrFeature } from './config2.mjs';
|
|
19
19
|
import { a as isCcrInstalled, b as installCcr, i as init } from './init.mjs';
|
|
20
20
|
import { ccjkAgents } from './ccjk-agents.mjs';
|
|
21
21
|
import { ccjkSkills } from './ccjk-skills.mjs';
|
|
@@ -363,11 +363,13 @@ async function showSimplifiedMenu() {
|
|
|
363
363
|
console.log(` ${ansis.green("5.")} ${isZh ? "\u914D\u7F6E\u9ED8\u8BA4\u6A21\u578B" : "Configure Default Model"} ${ansis.dim(isZh ? "- \u8BBE\u7F6E\u9ED8\u8BA4\u6A21\u578B\uFF08opus/sonnet/sonnet 1m/\u81EA\u5B9A\u4E49\uFF09" : "- Set default model (opus/sonnet/sonnet 1m/custom)")}`);
|
|
364
364
|
console.log(` ${ansis.green("6.")} ${isZh ? "\u914D\u7F6E Claude \u5168\u5C40\u8BB0\u5FC6" : "Configure Claude Memory"} ${ansis.dim(isZh ? "- \u914D\u7F6E AI \u8F93\u51FA\u8BED\u8A00\u548C\u8F93\u51FA\u98CE\u683C" : "- Configure AI output language and style")}`);
|
|
365
365
|
console.log(` ${ansis.green("7.")} ${isZh ? "\u5BFC\u5165\u63A8\u8350\u73AF\u5883\u53D8\u91CF\u548C\u6743\u9650\u914D\u7F6E" : "Import Recommended Env & Permissions"} ${ansis.dim(isZh ? "- \u5BFC\u5165\u9690\u79C1\u4FDD\u62A4\u73AF\u5883\u53D8\u91CF\u548C\u7CFB\u7EDF\u6743\u9650\u914D\u7F6E" : "- Import privacy env vars and system permissions")}`);
|
|
366
|
+
console.log(` ${ansis.green("8.")} ${isZh ? "\u96F6\u914D\u7F6E\u6743\u9650\u9884\u8BBE" : "Zero-Config Permission Presets"} ${ansis.dim(isZh ? "- \u4E00\u952E\u5E94\u7528\u6743\u9650\u9884\u8BBE\uFF08\u6700\u5927/\u5F00\u53D1\u8005/\u5B89\u5168\uFF09" : "- One-click permission presets (max/dev/safe)")}`);
|
|
366
367
|
console.log("");
|
|
367
368
|
console.log(ansis.dim(` --------- ${isZh ? "\u5176\u4ED6\u5DE5\u5177" : "Other Tools"} ----------`));
|
|
368
369
|
console.log(` ${ansis.green("K.")} ${isZh ? "Skills \u7BA1\u7406" : "Skills Manager"} ${ansis.dim(isZh ? "- \u5B89\u88C5/\u66F4\u65B0/\u5220\u9664\u5DE5\u4F5C\u6D41\u6280\u80FD" : "- Install/update/remove workflow skills")}`);
|
|
369
370
|
console.log(` ${ansis.green("M.")} ${isZh ? "MCP \u7BA1\u7406" : "MCP Manager"} ${ansis.dim(isZh ? "- \u914D\u7F6E Model Context Protocol \u670D\u52A1" : "- Configure MCP services")}`);
|
|
370
371
|
console.log(` ${ansis.green("A.")} ${isZh ? "Agents \u7BA1\u7406" : "Agents Manager"} ${ansis.dim(isZh ? "- \u521B\u5EFA/\u7BA1\u7406 AI \u667A\u80FD\u4F53" : "- Create/manage AI agents")}`);
|
|
372
|
+
console.log(` ${ansis.green("P.")} ${isZh ? "\u6301\u4E45\u5316\u7BA1\u7406" : "Persistence Manager"} ${ansis.dim(isZh ? "- \u7BA1\u7406\u4E0A\u4E0B\u6587\u5B58\u50A8\u548C\u5C42\u7EA7" : "- Manage context storage and tiers")}`);
|
|
371
373
|
console.log(` ${ansis.green("R.")} ${isZh ? "CCR" : "CCR"} ${ansis.dim(isZh ? "- \u914D\u7F6E Claude Code Router \u4EE5\u4F7F\u7528\u591A\u4E2A AI \u6A21\u578B" : "- Configure Claude Code Router for multiple AI models")}`);
|
|
372
374
|
console.log("");
|
|
373
375
|
console.log(ansis.dim(` ------------ CCJK ------------`));
|
|
@@ -386,7 +388,7 @@ async function showSimplifiedMenu() {
|
|
|
386
388
|
message: isZh ? "\u8BF7\u8F93\u5165\u9009\u9879:" : "Enter option:",
|
|
387
389
|
validate: (value) => {
|
|
388
390
|
const normalized2 = normalizeMenuInput(value);
|
|
389
|
-
const valid = ["0", "1", "2", "3", "4", "5", "6", "7", "k", "m", "a", "r", "b", "s", "-", "+", "d", "h", "q"];
|
|
391
|
+
const valid = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "k", "m", "a", "p", "r", "b", "s", "-", "+", "d", "h", "q"];
|
|
390
392
|
return valid.includes(normalized2) || (isZh ? "\u8BF7\u8F93\u5165\u6709\u6548\u9009\u9879" : "Please enter a valid option");
|
|
391
393
|
}
|
|
392
394
|
});
|
|
@@ -425,6 +427,11 @@ async function showSimplifiedMenu() {
|
|
|
425
427
|
await configureEnvPermissionFeature();
|
|
426
428
|
break;
|
|
427
429
|
}
|
|
430
|
+
case "8": {
|
|
431
|
+
const { zeroConfig } = await import('./zero-config.mjs');
|
|
432
|
+
await zeroConfig();
|
|
433
|
+
break;
|
|
434
|
+
}
|
|
428
435
|
// --------- 其他工具 ----------
|
|
429
436
|
case "k": {
|
|
430
437
|
await ccjkSkills({});
|
|
@@ -438,14 +445,20 @@ async function showSimplifiedMenu() {
|
|
|
438
445
|
await ccjkAgents({});
|
|
439
446
|
break;
|
|
440
447
|
}
|
|
448
|
+
case "p": {
|
|
449
|
+
const { persistenceManager } = await import('./persistence-manager.mjs');
|
|
450
|
+
await persistenceManager();
|
|
451
|
+
printSeparator();
|
|
452
|
+
return void 0;
|
|
453
|
+
}
|
|
441
454
|
case "r": {
|
|
442
455
|
await runCcrMenuFeature();
|
|
443
456
|
printSeparator();
|
|
444
457
|
return void 0;
|
|
445
458
|
}
|
|
446
459
|
case "b": {
|
|
447
|
-
const {
|
|
448
|
-
await
|
|
460
|
+
const { dashboardCommand } = await import('./dashboard.mjs');
|
|
461
|
+
await dashboardCommand();
|
|
449
462
|
await inquirer.prompt({ type: "input", name: "_", message: isZh ? "\u6309\u56DE\u8F66\u8FD4\u56DE\u83DC\u5355..." : "Press Enter to return..." });
|
|
450
463
|
return void 0;
|
|
451
464
|
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import ansis from 'ansis';
|
|
2
|
+
|
|
3
|
+
function formatTokenCount(tokens) {
|
|
4
|
+
if (tokens >= 1e6) {
|
|
5
|
+
return `${(tokens / 1e6).toFixed(1)}M`;
|
|
6
|
+
}
|
|
7
|
+
if (tokens >= 1e3) {
|
|
8
|
+
return `${(tokens / 1e3).toFixed(1)}K`;
|
|
9
|
+
}
|
|
10
|
+
return tokens.toString();
|
|
11
|
+
}
|
|
12
|
+
function formatCost(cost) {
|
|
13
|
+
if (cost >= 1) {
|
|
14
|
+
return `$${cost.toFixed(2)}`;
|
|
15
|
+
}
|
|
16
|
+
if (cost >= 0.01) {
|
|
17
|
+
return `$${cost.toFixed(3)}`;
|
|
18
|
+
}
|
|
19
|
+
return `$${cost.toFixed(4)}`;
|
|
20
|
+
}
|
|
21
|
+
function formatRatio(ratio) {
|
|
22
|
+
return `${Math.round(ratio * 100)}%`;
|
|
23
|
+
}
|
|
24
|
+
function formatTime(ms) {
|
|
25
|
+
if (ms >= 1e3) {
|
|
26
|
+
return `${(ms / 1e3).toFixed(2)}s`;
|
|
27
|
+
}
|
|
28
|
+
return `${Math.round(ms)}ms`;
|
|
29
|
+
}
|
|
30
|
+
function displayCompressionResult(originalTokens, compressedTokens, compressionRatio, timeTakenMs) {
|
|
31
|
+
const reductionPercent = Math.round(compressionRatio * 100);
|
|
32
|
+
const originalFormatted = formatTokenCount(originalTokens);
|
|
33
|
+
const compressedFormatted = formatTokenCount(compressedTokens);
|
|
34
|
+
console.log(
|
|
35
|
+
ansis.green("\u2705") + " Compressed " + ansis.cyan(originalFormatted) + " tokens \u2192 " + ansis.cyan(compressedFormatted) + " " + ansis.yellow(`(${reductionPercent}% reduction)`) + " " + ansis.gray(`[${formatTime(timeTakenMs)}]`)
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
function displayCompressionStats(stats) {
|
|
39
|
+
console.log();
|
|
40
|
+
console.log(ansis.cyan.bold("\u{1F4CA} Compression Statistics"));
|
|
41
|
+
console.log(ansis.gray("\u2500".repeat(60)));
|
|
42
|
+
console.log();
|
|
43
|
+
console.log(ansis.white.bold("Overall:"));
|
|
44
|
+
console.log(` ${ansis.gray("Total Compressions:")} ${ansis.white(stats.totalCompressions.toLocaleString())}`);
|
|
45
|
+
console.log(` ${ansis.gray("Tokens Saved:")} ${ansis.green(formatTokenCount(stats.totalTokensSaved))}`);
|
|
46
|
+
console.log(` ${ansis.gray("Avg Compression:")} ${ansis.yellow(formatRatio(stats.averageCompressionRatio))}`);
|
|
47
|
+
console.log(` ${ansis.gray("Avg Time:")} ${ansis.cyan(formatTime(stats.averageTimeTakenMs))}`);
|
|
48
|
+
console.log(` ${ansis.gray("Cost Savings:")} ${ansis.green.bold(formatCost(stats.estimatedCostSavings))}`);
|
|
49
|
+
if (stats.sessionStats && stats.sessionStats.compressions > 0) {
|
|
50
|
+
console.log();
|
|
51
|
+
console.log(ansis.white.bold("Session (24h):"));
|
|
52
|
+
console.log(` ${ansis.gray("Compressions:")} ${ansis.white(stats.sessionStats.compressions.toLocaleString())}`);
|
|
53
|
+
console.log(` ${ansis.gray("Tokens Saved:")} ${ansis.green(formatTokenCount(stats.sessionStats.tokensSaved))}`);
|
|
54
|
+
console.log(` ${ansis.gray("Cost Savings:")} ${ansis.green(formatCost(stats.sessionStats.costSavings))}`);
|
|
55
|
+
}
|
|
56
|
+
if (stats.weeklyStats && stats.weeklyStats.compressions > 0) {
|
|
57
|
+
console.log();
|
|
58
|
+
console.log(ansis.white.bold("Weekly (7d):"));
|
|
59
|
+
console.log(` ${ansis.gray("Compressions:")} ${ansis.white(stats.weeklyStats.compressions.toLocaleString())}`);
|
|
60
|
+
console.log(` ${ansis.gray("Tokens Saved:")} ${ansis.green(formatTokenCount(stats.weeklyStats.tokensSaved))}`);
|
|
61
|
+
console.log(` ${ansis.gray("Cost Savings:")} ${ansis.green(formatCost(stats.weeklyStats.costSavings))}`);
|
|
62
|
+
}
|
|
63
|
+
if (stats.monthlyStats && stats.monthlyStats.compressions > 0) {
|
|
64
|
+
console.log();
|
|
65
|
+
console.log(ansis.white.bold("Monthly (30d):"));
|
|
66
|
+
console.log(` ${ansis.gray("Compressions:")} ${ansis.white(stats.monthlyStats.compressions.toLocaleString())}`);
|
|
67
|
+
console.log(` ${ansis.gray("Tokens Saved:")} ${ansis.green(formatTokenCount(stats.monthlyStats.tokensSaved))}`);
|
|
68
|
+
console.log(` ${ansis.gray("Cost Savings:")} ${ansis.green(formatCost(stats.monthlyStats.costSavings))}`);
|
|
69
|
+
}
|
|
70
|
+
console.log();
|
|
71
|
+
console.log(ansis.gray("\u2500".repeat(60)));
|
|
72
|
+
console.log(ansis.gray("\u{1F4A1} Cost based on $0.015 per 1K tokens (Claude Opus pricing)"));
|
|
73
|
+
console.log();
|
|
74
|
+
}
|
|
75
|
+
function displayCompactCompressionStats(stats) {
|
|
76
|
+
const lines = [];
|
|
77
|
+
lines.push(ansis.cyan.bold("Compression Metrics"));
|
|
78
|
+
lines.push(` ${ansis.gray("Total Saved:")} ${ansis.green(formatTokenCount(stats.totalTokensSaved))} tokens`);
|
|
79
|
+
lines.push(` ${ansis.gray("Avg Reduction:")} ${ansis.yellow(formatRatio(stats.averageCompressionRatio))}`);
|
|
80
|
+
lines.push(` ${ansis.gray("Cost Savings:")} ${ansis.green.bold(formatCost(stats.estimatedCostSavings))}`);
|
|
81
|
+
if (stats.sessionStats && stats.sessionStats.compressions > 0) {
|
|
82
|
+
lines.push(` ${ansis.gray("Session (24h):")} ${ansis.white(stats.sessionStats.compressions)} compressions, ${ansis.green(formatCost(stats.sessionStats.costSavings))} saved`);
|
|
83
|
+
}
|
|
84
|
+
return lines;
|
|
85
|
+
}
|
|
86
|
+
function createCompressionBar(ratio, width = 20) {
|
|
87
|
+
const filled = Math.round(ratio * width);
|
|
88
|
+
const empty = width - filled;
|
|
89
|
+
let bar = "";
|
|
90
|
+
if (ratio >= 0.7) {
|
|
91
|
+
bar = ansis.green("\u2588".repeat(filled));
|
|
92
|
+
} else if (ratio >= 0.4) {
|
|
93
|
+
bar = ansis.yellow("\u2588".repeat(filled));
|
|
94
|
+
} else {
|
|
95
|
+
bar = ansis.red("\u2588".repeat(filled));
|
|
96
|
+
}
|
|
97
|
+
bar += ansis.gray("\u2591".repeat(empty));
|
|
98
|
+
return bar;
|
|
99
|
+
}
|
|
100
|
+
function displayCompressionTable(metrics, limit = 10) {
|
|
101
|
+
if (metrics.length === 0) {
|
|
102
|
+
console.log(ansis.gray("No compression metrics available"));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log();
|
|
106
|
+
console.log(ansis.cyan.bold("Recent Compressions"));
|
|
107
|
+
console.log(ansis.gray("\u2500".repeat(80)));
|
|
108
|
+
console.log(
|
|
109
|
+
ansis.white.bold("Original".padEnd(12)) + ansis.white.bold("Compressed".padEnd(12)) + ansis.white.bold("Ratio".padEnd(10)) + ansis.white.bold("Time".padEnd(10)) + ansis.white.bold("Strategy".padEnd(15)) + ansis.white.bold("Algorithm")
|
|
110
|
+
);
|
|
111
|
+
console.log(ansis.gray("\u2500".repeat(80)));
|
|
112
|
+
const displayMetrics = metrics.slice(0, limit);
|
|
113
|
+
for (const metric of displayMetrics) {
|
|
114
|
+
const original = formatTokenCount(metric.originalTokens).padEnd(12);
|
|
115
|
+
const compressed = formatTokenCount(metric.compressedTokens).padEnd(12);
|
|
116
|
+
const ratio = formatRatio(metric.compressionRatio).padEnd(10);
|
|
117
|
+
const time = formatTime(metric.timeTakenMs).padEnd(10);
|
|
118
|
+
const strategy = metric.strategy.padEnd(15);
|
|
119
|
+
const algorithm = metric.algorithm;
|
|
120
|
+
console.log(
|
|
121
|
+
ansis.cyan(original) + ansis.green(compressed) + ansis.yellow(ratio) + ansis.gray(time) + ansis.white(strategy) + ansis.gray(algorithm)
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
console.log(ansis.gray("\u2500".repeat(80)));
|
|
125
|
+
console.log();
|
|
126
|
+
}
|
|
127
|
+
function formatBytes(bytes) {
|
|
128
|
+
if (bytes >= 1073741824) {
|
|
129
|
+
return `${(bytes / 1073741824).toFixed(2)} GB`;
|
|
130
|
+
}
|
|
131
|
+
if (bytes >= 1048576) {
|
|
132
|
+
return `${(bytes / 1048576).toFixed(2)} MB`;
|
|
133
|
+
}
|
|
134
|
+
if (bytes >= 1024) {
|
|
135
|
+
return `${(bytes / 1024).toFixed(2)} KB`;
|
|
136
|
+
}
|
|
137
|
+
return `${bytes} bytes`;
|
|
138
|
+
}
|
|
139
|
+
const MetricsDisplay = {
|
|
140
|
+
displayCompressionResult,
|
|
141
|
+
displayCompressionStats,
|
|
142
|
+
displayCompactCompressionStats,
|
|
143
|
+
displayCompressionTable,
|
|
144
|
+
createCompressionBar,
|
|
145
|
+
formatTokenCount,
|
|
146
|
+
formatCost,
|
|
147
|
+
formatRatio,
|
|
148
|
+
formatTime,
|
|
149
|
+
formatBytes
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export { MetricsDisplay, createCompressionBar, displayCompactCompressionStats, displayCompressionResult, displayCompressionStats, displayCompressionTable };
|
package/dist/chunks/migrator.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { exists } from './fs-operations.mjs';
|
|
|
3
3
|
import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
|
|
4
4
|
import 'node:os';
|
|
5
5
|
import 'pathe';
|
|
6
|
-
import './
|
|
6
|
+
import './index2.mjs';
|
|
7
7
|
import 'node:fs';
|
|
8
8
|
import 'node:process';
|
|
9
9
|
import 'node:url';
|
package/dist/chunks/monitor.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ansis from 'ansis';
|
|
2
|
-
import { i18n } from './
|
|
3
|
-
import {
|
|
2
|
+
import { i18n } from './index2.mjs';
|
|
3
|
+
import { displayBannerWithInfo } from './banner.mjs';
|
|
4
4
|
import process__default from 'node:process';
|
|
5
5
|
import { nanoid } from 'nanoid';
|
|
6
6
|
import 'node:fs';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ansis from 'ansis';
|
|
2
2
|
import inquirer from 'inquirer';
|
|
3
|
-
import { i18n } from './
|
|
3
|
+
import { i18n } from './index2.mjs';
|
|
4
4
|
import * as nodeFs from 'node:fs';
|
|
5
5
|
import nodeFs__default, { existsSync, readFileSync, mkdirSync, unlinkSync } from 'node:fs';
|
|
6
6
|
import * as os from 'node:os';
|
|
@@ -7,10 +7,10 @@ import ora from 'ora';
|
|
|
7
7
|
import { join, basename } from 'pathe';
|
|
8
8
|
import { CCJK_CONFIG_DIR } from './constants.mjs';
|
|
9
9
|
import { d as detectProject, g as getProjectSummary, a as generateSuggestions } from '../shared/ccjk.CBhIZiPz.mjs';
|
|
10
|
-
import {
|
|
10
|
+
import { boxify, COLORS as theme, STATUS } from './banner.mjs';
|
|
11
11
|
import { writeFileAtomic } from './fs-operations.mjs';
|
|
12
12
|
import 'node:os';
|
|
13
|
-
import './
|
|
13
|
+
import './index2.mjs';
|
|
14
14
|
import 'node:url';
|
|
15
15
|
import 'i18next';
|
|
16
16
|
import 'i18next-fs-backend';
|
package/dist/chunks/package.mjs
CHANGED
|
@@ -2,9 +2,9 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
2
2
|
import ansis from 'ansis';
|
|
3
3
|
import { join } from 'pathe';
|
|
4
4
|
import { SETTINGS_FILE, CCJK_CONFIG_DIR } from './constants.mjs';
|
|
5
|
-
import {
|
|
5
|
+
import { STATUS } from './banner.mjs';
|
|
6
6
|
import 'node:os';
|
|
7
|
-
import './
|
|
7
|
+
import './index2.mjs';
|
|
8
8
|
import 'node:process';
|
|
9
9
|
import 'node:url';
|
|
10
10
|
import 'i18next';
|
|
@@ -2,7 +2,7 @@ import process__default from 'node:process';
|
|
|
2
2
|
import ansis from 'ansis';
|
|
3
3
|
import inquirer from 'inquirer';
|
|
4
4
|
import 'tinyexec';
|
|
5
|
-
import { i18n } from './
|
|
5
|
+
import { i18n } from './index2.mjs';
|
|
6
6
|
import { g as getPermissionManager } from '../shared/ccjk.h7_W-wTs.mjs';
|
|
7
7
|
import 'node:fs';
|
|
8
8
|
import 'node:url';
|