@naarang/glancebar 1.0.3 → 1.0.4

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 (3) hide show
  1. package/README.md +9 -0
  2. package/package.json +1 -1
  3. package/src/cli.ts +103 -0
package/README.md CHANGED
@@ -8,6 +8,7 @@ A customizable statusline for [Claude Code](https://claude.com/product/claude-co
8
8
  ## Features
9
9
 
10
10
  - **Session info** - Project name, git branch, model, cost, lines changed, and context usage
11
+ - **System stats** - CPU and memory usage (optional)
11
12
  - **Calendar events** - Upcoming events from multiple Google accounts
12
13
  - **Meeting warnings** - Red alert when a meeting is 5 minutes away
13
14
  - **Health reminders** - Water, stretch, and eye break reminders
@@ -144,6 +145,10 @@ glancebar config --water-reminder true
144
145
  glancebar config --stretch-reminder true
145
146
  glancebar config --eye-reminder true
146
147
 
148
+ # Enable/disable system stats
149
+ glancebar config --cpu-usage true
150
+ glancebar config --memory-usage true
151
+
147
152
  # Reset to defaults
148
153
  glancebar config --reset
149
154
  ```
@@ -165,6 +170,8 @@ glancebar | main* | Opus | $0.12 | +156 -23 | 9.7k/200k (5%) | In 15m: Team Stan
165
170
  | Cost | Green | `$0.01`, `$0.1234` |
166
171
  | Lines changed | Green/Red | `+156 -23` |
167
172
  | Context usage | Green/Yellow/Red | `9.7k/200k (5%)` |
173
+ | CPU usage | Green/Yellow/Red | `CPU 12%` |
174
+ | Memory usage | Green/Yellow/Red | `Mem 8.2/16.0GB` |
168
175
 
169
176
  Context usage color changes based on percentage:
170
177
  - **Green**: < 50%
@@ -212,6 +219,8 @@ All configuration is stored in `~/.glancebar/`:
212
219
  | `waterReminderEnabled` | true | Enable random water break reminders |
213
220
  | `stretchReminderEnabled` | true | Enable random stretch/posture reminders |
214
221
  | `eyeReminderEnabled` | true | Enable random eye break reminders (20-20-20 rule) |
222
+ | `showCpuUsage` | false | Show CPU usage percentage |
223
+ | `showMemoryUsage` | false | Show memory usage |
215
224
 
216
225
  ## Building from Source
217
226
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naarang/glancebar",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "A customizable statusline for Claude Code - display calendar events, tasks, and more at a glance",
5
5
  "author": "Vishal Dubey",
6
6
  "license": "MIT",
package/src/cli.ts CHANGED
@@ -18,6 +18,8 @@ interface Config {
18
18
  waterReminderEnabled: boolean;
19
19
  stretchReminderEnabled: boolean;
20
20
  eyeReminderEnabled: boolean;
21
+ showCpuUsage: boolean;
22
+ showMemoryUsage: boolean;
21
23
  }
22
24
 
23
25
  const COLORS: Record<string, string> = {
@@ -51,6 +53,8 @@ const DEFAULT_CONFIG: Config = {
51
53
  waterReminderEnabled: true,
52
54
  stretchReminderEnabled: true,
53
55
  eyeReminderEnabled: true,
56
+ showCpuUsage: false,
57
+ showMemoryUsage: false,
54
58
  };
55
59
 
56
60
  const WATER_REMINDERS = [
@@ -448,6 +452,61 @@ function getMeetingWarning(event: CalendarEvent | null): string | null {
448
452
  return null;
449
453
  }
450
454
 
455
+ // ============================================================================
456
+ // System Stats
457
+ // ============================================================================
458
+
459
+ function getCpuUsage(): string | null {
460
+ try {
461
+ const os = require("os");
462
+ const cpus = os.cpus();
463
+
464
+ let totalIdle = 0;
465
+ let totalTick = 0;
466
+
467
+ for (const cpu of cpus) {
468
+ for (const type in cpu.times) {
469
+ totalTick += cpu.times[type as keyof typeof cpu.times];
470
+ }
471
+ totalIdle += cpu.times.idle;
472
+ }
473
+
474
+ const usage = Math.round(100 - (totalIdle / totalTick) * 100);
475
+
476
+ // Color based on usage
477
+ let color = COLORS.green;
478
+ if (usage >= 80) color = COLORS.red;
479
+ else if (usage >= 50) color = COLORS.yellow;
480
+
481
+ return `${color}CPU ${usage}%${COLORS.reset}`;
482
+ } catch {
483
+ return null;
484
+ }
485
+ }
486
+
487
+ function getMemoryUsage(): string | null {
488
+ try {
489
+ const os = require("os");
490
+ const totalMem = os.totalmem();
491
+ const freeMem = os.freemem();
492
+ const usedMem = totalMem - freeMem;
493
+ const usagePercent = Math.round((usedMem / totalMem) * 100);
494
+
495
+ // Format used memory
496
+ const usedGB = (usedMem / (1024 * 1024 * 1024)).toFixed(1);
497
+ const totalGB = (totalMem / (1024 * 1024 * 1024)).toFixed(1);
498
+
499
+ // Color based on usage
500
+ let color = COLORS.green;
501
+ if (usagePercent >= 80) color = COLORS.red;
502
+ else if (usagePercent >= 50) color = COLORS.yellow;
503
+
504
+ return `${color}Mem ${usedGB}/${totalGB}GB${COLORS.reset}`;
505
+ } catch {
506
+ return null;
507
+ }
508
+ }
509
+
451
510
  function formatTime(date: Date): string {
452
511
  const hours = date.getHours();
453
512
  const minutes = date.getMinutes();
@@ -480,6 +539,8 @@ Usage:
480
539
  glancebar config --water-reminder <true|false> Enable/disable water reminders (default: true)
481
540
  glancebar config --stretch-reminder <true|false> Enable/disable stretch reminders (default: true)
482
541
  glancebar config --eye-reminder <true|false> Enable/disable eye break reminders (default: true)
542
+ glancebar config --cpu-usage <true|false> Show CPU usage (default: false)
543
+ glancebar config --memory-usage <true|false> Show memory usage (default: false)
483
544
  glancebar config --reset Reset to default configuration
484
545
  glancebar setup Show setup instructions
485
546
 
@@ -749,6 +810,34 @@ function handleConfig(args: string[]) {
749
810
  return;
750
811
  }
751
812
 
813
+ // Handle --cpu-usage
814
+ const cpuUsageIndex = args.indexOf("--cpu-usage");
815
+ if (cpuUsageIndex !== -1) {
816
+ const value = args[cpuUsageIndex + 1]?.toLowerCase();
817
+ if (value !== "true" && value !== "false") {
818
+ console.error("Error: --cpu-usage must be 'true' or 'false'");
819
+ process.exit(1);
820
+ }
821
+ config.showCpuUsage = value === "true";
822
+ saveConfig(config);
823
+ console.log(`CPU usage display ${value === "true" ? "enabled" : "disabled"}`);
824
+ return;
825
+ }
826
+
827
+ // Handle --memory-usage
828
+ const memoryUsageIndex = args.indexOf("--memory-usage");
829
+ if (memoryUsageIndex !== -1) {
830
+ const value = args[memoryUsageIndex + 1]?.toLowerCase();
831
+ if (value !== "true" && value !== "false") {
832
+ console.error("Error: --memory-usage must be 'true' or 'false'");
833
+ process.exit(1);
834
+ }
835
+ config.showMemoryUsage = value === "true";
836
+ saveConfig(config);
837
+ console.log(`Memory usage display ${value === "true" ? "enabled" : "disabled"}`);
838
+ return;
839
+ }
840
+
752
841
  // Show current config
753
842
  console.log(`
754
843
  Glancebar Configuration
@@ -766,6 +855,10 @@ Reminders:
766
855
  Water reminder: ${config.waterReminderEnabled ? "enabled" : "disabled"}
767
856
  Stretch reminder: ${config.stretchReminderEnabled ? "enabled" : "disabled"}
768
857
  Eye break reminder: ${config.eyeReminderEnabled ? "enabled" : "disabled"}
858
+
859
+ System Stats:
860
+ CPU usage: ${config.showCpuUsage ? "enabled" : "disabled"}
861
+ Memory usage: ${config.showMemoryUsage ? "enabled" : "disabled"}
769
862
  `);
770
863
  }
771
864
 
@@ -949,6 +1042,16 @@ async function outputStatusline() {
949
1042
  }
950
1043
  }
951
1044
 
1045
+ // Add system stats if enabled
1046
+ if (config.showCpuUsage) {
1047
+ const cpu = getCpuUsage();
1048
+ if (cpu) parts.push(cpu);
1049
+ }
1050
+ if (config.showMemoryUsage) {
1051
+ const mem = getMemoryUsage();
1052
+ if (mem) parts.push(mem);
1053
+ }
1054
+
952
1055
  // Check for health reminder (water, stretch, eye break)
953
1056
  const reminder = getRandomReminder(config);
954
1057
  if (reminder) {