claude-limitline 1.4.0 → 1.5.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/dist/index.js +74 -7
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -44,6 +44,9 @@ var DEFAULT_CONFIG = {
|
|
|
44
44
|
showWeekProgress: true,
|
|
45
45
|
viewMode: "simple"
|
|
46
46
|
},
|
|
47
|
+
context: {
|
|
48
|
+
enabled: true
|
|
49
|
+
},
|
|
47
50
|
budget: {
|
|
48
51
|
pollInterval: 15,
|
|
49
52
|
warningThreshold: 80
|
|
@@ -535,6 +538,8 @@ var darkTheme = {
|
|
|
535
538
|
// Purple for Opus
|
|
536
539
|
sonnet: { bg: "#1a1a1a", fg: "#89ddff" },
|
|
537
540
|
// Light blue for Sonnet
|
|
541
|
+
context: { bg: "#2a2a2a", fg: "#87ceeb" },
|
|
542
|
+
// Sky blue for context
|
|
538
543
|
warning: { bg: "#d75f00", fg: "#ffffff" },
|
|
539
544
|
critical: { bg: "#af0000", fg: "#ffffff" }
|
|
540
545
|
};
|
|
@@ -548,6 +553,8 @@ var lightTheme = {
|
|
|
548
553
|
// Purple for Opus
|
|
549
554
|
sonnet: { bg: "#0ea5e9", fg: "#ffffff" },
|
|
550
555
|
// Sky blue for Sonnet
|
|
556
|
+
context: { bg: "#6366f1", fg: "#ffffff" },
|
|
557
|
+
// Indigo for context
|
|
551
558
|
warning: { bg: "#f59e0b", fg: "#000000" },
|
|
552
559
|
critical: { bg: "#ef4444", fg: "#ffffff" }
|
|
553
560
|
};
|
|
@@ -561,6 +568,8 @@ var nordTheme = {
|
|
|
561
568
|
// Nord purple for Opus
|
|
562
569
|
sonnet: { bg: "#2e3440", fg: "#88c0d0" },
|
|
563
570
|
// Nord frost for Sonnet
|
|
571
|
+
context: { bg: "#3b4252", fg: "#81a1c1" },
|
|
572
|
+
// Nord frost for context
|
|
564
573
|
warning: { bg: "#d08770", fg: "#2e3440" },
|
|
565
574
|
critical: { bg: "#bf616a", fg: "#eceff4" }
|
|
566
575
|
};
|
|
@@ -574,6 +583,8 @@ var gruvboxTheme = {
|
|
|
574
583
|
// Gruvbox purple for Opus
|
|
575
584
|
sonnet: { bg: "#282828", fg: "#8ec07c" },
|
|
576
585
|
// Gruvbox aqua for Sonnet
|
|
586
|
+
context: { bg: "#3c3836", fg: "#83a598" },
|
|
587
|
+
// Gruvbox blue for context
|
|
577
588
|
warning: { bg: "#d79921", fg: "#282828" },
|
|
578
589
|
critical: { bg: "#cc241d", fg: "#ebdbb2" }
|
|
579
590
|
};
|
|
@@ -587,6 +598,8 @@ var tokyoNightTheme = {
|
|
|
587
598
|
// Tokyo purple for Opus
|
|
588
599
|
sonnet: { bg: "#1a202c", fg: "#7dcfff" },
|
|
589
600
|
// Tokyo cyan for Sonnet
|
|
601
|
+
context: { bg: "#2d3748", fg: "#7aa2f7" },
|
|
602
|
+
// Tokyo blue for context
|
|
590
603
|
warning: { bg: "#e0af68", fg: "#1a1b26" },
|
|
591
604
|
critical: { bg: "#f7768e", fg: "#1a1b26" }
|
|
592
605
|
};
|
|
@@ -600,6 +613,8 @@ var rosePineTheme = {
|
|
|
600
613
|
// Rose Pine iris for Opus
|
|
601
614
|
sonnet: { bg: "#232136", fg: "#31748f" },
|
|
602
615
|
// Rose Pine pine for Sonnet
|
|
616
|
+
context: { bg: "#2a273f", fg: "#9ccfd8" },
|
|
617
|
+
// Rose Pine foam for context
|
|
603
618
|
warning: { bg: "#f6c177", fg: "#191724" },
|
|
604
619
|
critical: { bg: "#eb6f92", fg: "#191724" }
|
|
605
620
|
};
|
|
@@ -639,9 +654,12 @@ var Renderer = class {
|
|
|
639
654
|
sonnet: symbolSet.sonnet_cost,
|
|
640
655
|
bottleneck: symbolSet.bottleneck,
|
|
641
656
|
rightArrow: symbolSet.right,
|
|
657
|
+
leftArrow: symbolSet.left,
|
|
642
658
|
separator: symbolSet.separator,
|
|
643
659
|
branch: symbolSet.branch,
|
|
644
660
|
model: symbolSet.model,
|
|
661
|
+
context: "\u25D0",
|
|
662
|
+
// Half-filled circle for context
|
|
645
663
|
progressFull: symbolSet.progress_full,
|
|
646
664
|
progressEmpty: symbolSet.progress_empty,
|
|
647
665
|
trendUp: "\u2191",
|
|
@@ -704,6 +722,18 @@ var Renderer = class {
|
|
|
704
722
|
output += RESET_CODE;
|
|
705
723
|
return output;
|
|
706
724
|
}
|
|
725
|
+
renderRightPowerline(segments) {
|
|
726
|
+
if (segments.length === 0) return "";
|
|
727
|
+
let output = "";
|
|
728
|
+
for (let i = 0; i < segments.length; i++) {
|
|
729
|
+
const seg = segments[i];
|
|
730
|
+
output += RESET_CODE;
|
|
731
|
+
output += ansi.fg(seg.colors.bg) + this.symbols.leftArrow;
|
|
732
|
+
output += ansi.bg(seg.colors.bg) + ansi.fg(seg.colors.fg) + seg.text;
|
|
733
|
+
}
|
|
734
|
+
output += RESET_CODE;
|
|
735
|
+
return output;
|
|
736
|
+
}
|
|
707
737
|
renderFallback(segments) {
|
|
708
738
|
return segments.map((seg) => ansi.bg(seg.colors.bg) + ansi.fg(seg.colors.fg) + seg.text + RESET_CODE).join(` ${this.symbols.separator} `);
|
|
709
739
|
}
|
|
@@ -857,6 +887,18 @@ var Renderer = class {
|
|
|
857
887
|
return this.renderWeeklySimple(ctx);
|
|
858
888
|
}
|
|
859
889
|
}
|
|
890
|
+
renderContext(ctx) {
|
|
891
|
+
if (!this.config.context?.enabled) {
|
|
892
|
+
return null;
|
|
893
|
+
}
|
|
894
|
+
const percent = ctx.envInfo.contextPercent;
|
|
895
|
+
const icon = this.usePowerline ? this.symbols.context : "CTX";
|
|
896
|
+
const colors = this.getColorsForPercent(percent, this.theme.context);
|
|
897
|
+
return {
|
|
898
|
+
text: ` ${icon} ${percent}% `,
|
|
899
|
+
colors
|
|
900
|
+
};
|
|
901
|
+
}
|
|
860
902
|
getSegment(name, ctx) {
|
|
861
903
|
switch (name) {
|
|
862
904
|
case "directory":
|
|
@@ -869,6 +911,8 @@ var Renderer = class {
|
|
|
869
911
|
return this.renderBlock(ctx);
|
|
870
912
|
case "weekly":
|
|
871
913
|
return this.renderWeekly(ctx);
|
|
914
|
+
case "context":
|
|
915
|
+
return this.renderContext(ctx);
|
|
872
916
|
default:
|
|
873
917
|
return null;
|
|
874
918
|
}
|
|
@@ -882,22 +926,35 @@ var Renderer = class {
|
|
|
882
926
|
trendInfo,
|
|
883
927
|
compact
|
|
884
928
|
};
|
|
885
|
-
const
|
|
929
|
+
const leftSegments = [];
|
|
886
930
|
const order = this.config.segmentOrder ?? ["directory", "git", "model", "block", "weekly"];
|
|
887
931
|
for (const name of order) {
|
|
932
|
+
if (name === "context") continue;
|
|
888
933
|
const segment = this.getSegment(name, ctx);
|
|
889
934
|
if (segment) {
|
|
890
|
-
|
|
935
|
+
leftSegments.push(segment);
|
|
891
936
|
}
|
|
892
937
|
}
|
|
893
|
-
|
|
894
|
-
|
|
938
|
+
const rightSegments = [];
|
|
939
|
+
const contextSegment = this.renderContext(ctx);
|
|
940
|
+
if (contextSegment) {
|
|
941
|
+
rightSegments.push(contextSegment);
|
|
895
942
|
}
|
|
943
|
+
let output = "";
|
|
896
944
|
if (this.usePowerline) {
|
|
897
|
-
|
|
945
|
+
if (leftSegments.length > 0) {
|
|
946
|
+
output += this.renderPowerline(leftSegments);
|
|
947
|
+
}
|
|
948
|
+
if (rightSegments.length > 0) {
|
|
949
|
+
output += this.renderRightPowerline(rightSegments);
|
|
950
|
+
}
|
|
898
951
|
} else {
|
|
899
|
-
|
|
952
|
+
const allSegments = [...leftSegments, ...rightSegments];
|
|
953
|
+
if (allSegments.length > 0) {
|
|
954
|
+
output = this.renderFallback(allSegments);
|
|
955
|
+
}
|
|
900
956
|
}
|
|
957
|
+
return output;
|
|
901
958
|
}
|
|
902
959
|
};
|
|
903
960
|
|
|
@@ -1023,12 +1080,22 @@ function getClaudeModel(hookData) {
|
|
|
1023
1080
|
}
|
|
1024
1081
|
return null;
|
|
1025
1082
|
}
|
|
1083
|
+
function getContextPercent(hookData) {
|
|
1084
|
+
const ctx = hookData?.context_window;
|
|
1085
|
+
if (!ctx?.current_usage || !ctx.context_window_size) {
|
|
1086
|
+
return 0;
|
|
1087
|
+
}
|
|
1088
|
+
const usage = ctx.current_usage;
|
|
1089
|
+
const totalTokens = (usage.input_tokens || 0) + (usage.cache_creation_input_tokens || 0) + (usage.cache_read_input_tokens || 0);
|
|
1090
|
+
return Math.round(totalTokens / ctx.context_window_size * 100);
|
|
1091
|
+
}
|
|
1026
1092
|
function getEnvironmentInfo(hookData) {
|
|
1027
1093
|
return {
|
|
1028
1094
|
directory: getDirectoryName(hookData),
|
|
1029
1095
|
gitBranch: getGitBranch(),
|
|
1030
1096
|
gitDirty: hasGitChanges(),
|
|
1031
|
-
model: getClaudeModel(hookData)
|
|
1097
|
+
model: getClaudeModel(hookData),
|
|
1098
|
+
contextPercent: getContextPercent(hookData)
|
|
1032
1099
|
};
|
|
1033
1100
|
}
|
|
1034
1101
|
|