cc-context-stats 1.3.0 → 1.5.1

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 (42) hide show
  1. package/.claude/settings.local.json +36 -1
  2. package/.github/workflows/ci.yml +4 -2
  3. package/.github/workflows/release.yml +3 -1
  4. package/CHANGELOG.md +17 -0
  5. package/README.md +33 -11
  6. package/RELEASE_NOTES.md +10 -0
  7. package/assets/logo/favicon.svg +19 -0
  8. package/assets/logo/logo-black.svg +24 -0
  9. package/assets/logo/logo-full.svg +40 -0
  10. package/assets/logo/logo-icon.svg +27 -0
  11. package/assets/logo/logo-mark.svg +28 -0
  12. package/assets/logo/logo-white.svg +24 -0
  13. package/assets/logo/logo-wordmark.svg +6 -0
  14. package/install.sh +21 -2
  15. package/package.json +7 -3
  16. package/pyproject.toml +6 -4
  17. package/scripts/context-stats.sh +194 -26
  18. package/scripts/statusline-full.sh +65 -2
  19. package/scripts/statusline-git.sh +57 -1
  20. package/scripts/statusline-minimal.sh +57 -1
  21. package/scripts/statusline.js +51 -4
  22. package/scripts/statusline.py +57 -3
  23. package/src/claude_statusline/__init__.py +1 -1
  24. package/src/claude_statusline/cli/context_stats.py +106 -34
  25. package/src/claude_statusline/cli/statusline.py +5 -4
  26. package/src/claude_statusline/core/config.py +7 -0
  27. package/src/claude_statusline/formatters/layout.py +67 -0
  28. package/src/claude_statusline/graphs/renderer.py +44 -24
  29. package/src/claude_statusline/graphs/statistics.py +34 -0
  30. package/src/claude_statusline/ui/__init__.py +1 -0
  31. package/src/claude_statusline/ui/icons.py +93 -0
  32. package/src/claude_statusline/ui/waiting.py +62 -0
  33. package/tests/bash/test_statusline_full.bats +30 -0
  34. package/tests/node/statusline.test.js +44 -3
  35. package/tests/python/test_icons.py +152 -0
  36. package/tests/python/test_layout.py +127 -0
  37. package/tests/python/test_statusline.py +64 -3
  38. package/tests/python/test_waiting.py +127 -0
  39. package/PUBLISHING_GUIDE.md +0 -69
  40. package/npm-publish.sh +0 -33
  41. package/publish.sh +0 -24
  42. package/show_raw_claude_code_api.js +0 -11
@@ -79,7 +79,42 @@
79
79
  "Skill(pre-commit)",
80
80
  "Bash(npm run format:check:*)",
81
81
  "Bash(bash:*)",
82
- "Bash(git tag:*)"
82
+ "Bash(git tag:*)",
83
+ "Bash(git pull:*)",
84
+ "Bash(git rebase:*)",
85
+ "Bash(git stash:*)",
86
+ "Bash(npm whoami:*)",
87
+ "Bash(git filter-branch:*)",
88
+ "Bash(gh issue view:*)",
89
+ "Bash(head:*)",
90
+ "Bash(/Users/montimage/buildspace/luongnv89/cc-context-stats/.venv/bin/python -m pytest:*)",
91
+ "Bash(/Users/montimage/buildspace/luongnv89/cc-context-stats/.venv/bin/python3 -m pytest:*)",
92
+ "Bash(/Users/montimage/buildspace/luongnv89/cc-context-stats/.venv/bin/python3.14 -m pytest:*)",
93
+ "Bash(/Users/montimage/buildspace/luongnv89/cc-context-stats/venv/bin/python3 -m pytest:*)",
94
+ "Bash(/Users/montimage/buildspace/luongnv89/cc-context-stats/venv/bin/pip install:*)",
95
+ "Bash(.test_venv/bin/pip install:*)",
96
+ "Bash(.test_venv/bin/python3.14 -m pytest:*)",
97
+ "Bash(.venv/bin/pip install:*)",
98
+ "Bash(.venv/bin/python3.14 -m pytest:*)",
99
+ "Bash(.venv/bin/context-stats:*)",
100
+ "Bash(npx jest:*)",
101
+ "Bash(gh workflow:*)",
102
+ "Bash(git -C /Users/montimage/buildspace/luongnv89/cc-context-stats status)",
103
+ "Bash(git -C /Users/montimage/buildspace/luongnv89/cc-context-stats diff)",
104
+ "Bash(git -C /Users/montimage/buildspace/luongnv89/cc-context-stats log --oneline -5)",
105
+ "Bash(git -C /Users/montimage/buildspace/luongnv89/cc-context-stats add tests/python/test_statusline.py)",
106
+ "Bash(git -C /Users/montimage/buildspace/luongnv89/cc-context-stats commit -m \"$\\(cat <<''EOF''\nfix: resolve Windows CI failures caused by Unicode encoding in Python tests\n\nSet PYTHONUTF8=1 for subprocess calls and use explicit utf-8 encoding\nfor read_text\\(\\) to handle Unicode characters \\(emojis/icons\\) on Windows\nwhere the default cp1252 encoding cannot decode them.\nEOF\n\\)\")",
107
+ "Bash(git -C /Users/montimage/buildspace/luongnv89/cc-context-stats push)",
108
+ "Bash(COLUMNS=200 cat tests/fixtures/json/valid_full.json | scripts/statusline-full.sh 2>&1)",
109
+ "Bash(export COLUMNS=200 && cat tests/fixtures/json/valid_full.json | scripts/statusline-full.sh 2>&1)",
110
+ "Bash(gh release:*)",
111
+ "Read(//Users/montimage/.claude/**)",
112
+ "Bash(git checkout:*)",
113
+ "Bash(npm publish:*)",
114
+ "Bash(npm view:*)",
115
+ "WebSearch",
116
+ "Bash(COLUMNS=120 python3 -c \"import shutil; print\\(shutil.get_terminal_size\\(\\).columns\\)\")",
117
+ "Bash(COLUMNS=80 python3 -c \"import shutil; print\\(shutil.get_terminal_size\\(\\).columns\\)\")"
83
118
  ]
84
119
  }
85
120
  }
@@ -110,10 +110,12 @@ jobs:
110
110
  cache-dependency-path: 'requirements-dev.txt'
111
111
 
112
112
  - name: Install dependencies
113
- run: pip install -r requirements-dev.txt
113
+ run: |
114
+ pip install -r requirements-dev.txt
115
+ pip install -e .
114
116
 
115
117
  - name: Run pytest with coverage
116
- run: pytest tests/python/ -v --cov=scripts --cov-report=xml --cov-report=term
118
+ run: pytest tests/python/ -v --cov=scripts --cov=src --cov-report=xml --cov-report=term
117
119
 
118
120
  - name: Upload coverage to Codecov
119
121
  if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11'
@@ -69,7 +69,9 @@ jobs:
69
69
  run: sudo apt-get update && sudo apt-get install -y jq bats
70
70
 
71
71
  - name: Install Python dependencies
72
- run: pip install -r requirements-dev.txt
72
+ run: |
73
+ pip install -r requirements-dev.txt
74
+ pip install -e .
73
75
 
74
76
  - name: Install Node.js dependencies
75
77
  run: npm ci
package/CHANGELOG.md CHANGED
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ - **NPM Package** - `cc-context-stats` now available on npm for JavaScript/Node.js environments
13
+ - Install via `npm install -g cc-context-stats` or `yarn global add cc-context-stats`
14
+ - Provides same functionality as Python package for Node.js users
15
+ - **Enhanced Documentation** - Updated README with npm installation instructions and badges
16
+
17
+ ### Changed
18
+
19
+ - **Package Metadata** - Synchronized package descriptions across npm and PyPI for consistency
20
+ - **Keywords** - Aligned keywords across npm and Python packages for better discoverability
21
+ - **Installation Section** - Moved shell script installation to the top of README as the recommended method
22
+ - **Install Script Documentation** - Enhanced `install.sh` with comprehensive header documentation including:
23
+ - Features overview (real-time monitoring, live dashboard, zone detection)
24
+ - Requirements (curl, jq)
25
+ - Installation destinations and file descriptions
26
+
10
27
  ## [1.2.0] - 2025-01-08
11
28
 
12
29
  ### Added
package/README.md CHANGED
@@ -1,9 +1,18 @@
1
- # Claude Code Context Stats
1
+ <div align="center">
2
+ <img src="assets/logo/logo-full.svg" alt="cc-context-stats" width="320"/>
3
+
4
+ <h3>Know your zone. Ship with confidence.</h3>
5
+
6
+ <p>Real-time context monitoring for Claude Code — so you always know when you're sharp and when to wrap up.</p>
2
7
 
3
8
  [![PyPI version](https://badge.fury.io/py/cc-context-stats.svg)](https://pypi.org/project/cc-context-stats/)
4
- [![Downloads](https://img.shields.io/pypi/dm/cc-context-stats)](https://pypi.org/project/cc-context-stats/)
9
+ [![npm version](https://badge.fury.io/js/cc-context-stats.svg)](https://www.npmjs.com/package/cc-context-stats)
10
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/cc-context-stats)](https://pypi.org/project/cc-context-stats/)
11
+ [![npm Downloads](https://img.shields.io/npm/dm/cc-context-stats)](https://www.npmjs.com/package/cc-context-stats)
5
12
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
13
 
14
+ </div>
15
+
7
16
  **Never run out of context unexpectedly** - monitor your session context in real-time.
8
17
 
9
18
  ![Context Stats](images/context-status-dumbzone.png)
@@ -27,6 +36,28 @@ When working with Claude Code on complex tasks, you can easily burn through your
27
36
 
28
37
  ## Installation
29
38
 
39
+ ### Shell Script
40
+
41
+ For the quickest setup:
42
+
43
+ ```bash
44
+ curl -fsSL https://raw.githubusercontent.com/luongnv89/cc-context-stats/main/install.sh | bash
45
+ ```
46
+
47
+ ### NPM
48
+
49
+ ```bash
50
+ npm install -g cc-context-stats
51
+ ```
52
+
53
+ Or with yarn:
54
+
55
+ ```bash
56
+ yarn global add cc-context-stats
57
+ ```
58
+
59
+ ### Python
60
+
30
61
  ```bash
31
62
  pip install cc-context-stats
32
63
  ```
@@ -137,14 +168,6 @@ show_session=true # Show session ID
137
168
  autocompact=true # Show autocompact buffer indicator
138
169
  ```
139
170
 
140
- ## Shell Script Installation
141
-
142
- For users who prefer shell scripts:
143
-
144
- ```bash
145
- curl -fsSL https://raw.githubusercontent.com/luongnv89/cc-context-stats/main/install.sh | bash
146
- ```
147
-
148
171
  ## How It Works
149
172
 
150
173
  Context Stats hooks into Claude Code's state files to track token usage across your sessions. Data is stored locally in `~/.claude/statusline/` and never sent anywhere.
@@ -171,7 +194,6 @@ The `claude-statusline` command still works. The main change is `token-graph` is
171
194
  ## Related
172
195
 
173
196
  - [Claude Code Documentation](https://docs.anthropic.com/en/docs/claude-code)
174
- - [Dex Horthy on Context Windows](https://twitter.com/daborhty) - The "dumb zone" concept
175
197
  - [Blog: Building this project](https://medium.com/@luongnv89/closing-the-gap-between-mvp-and-production-with-feature-dev-an-official-plugin-from-anthropic-444e2f00a0ad)
176
198
 
177
199
  ## License
@@ -0,0 +1,10 @@
1
+ ## v1.5.1 — 2026-03-11
2
+
3
+ ### Bug Fixes
4
+ - **Fix session ID disappearing from statusline** — Claude Code runs statusline scripts as piped subprocesses with no real TTY, causing terminal width detection to always return 80 columns. This made `fit_to_width()` drop lower-priority parts like session ID even when the real terminal had plenty of space. Now uses 200 columns as default when no TTY is detected; Claude Code's own UI handles overflow.
5
+ - **Fix CI failures** — Resolve ESLint, Python 3.9 compatibility, and release workflow issues
6
+
7
+ ### Other Changes
8
+ - Update logo SVG assets
9
+
10
+ **Full Changelog**: https://github.com/luongnv89/cc-context-stats/compare/v1.5.0...v1.5.1
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
2
+ <defs>
3
+ <linearGradient id="fav-grad" x1="0%" y1="0%" x2="100%" y2="0%">
4
+ <stop offset="0%" stop-color="#22C55E"/>
5
+ <stop offset="50%" stop-color="#E9AB34"/>
6
+ <stop offset="100%" stop-color="#EF4444"/>
7
+ </linearGradient>
8
+ </defs>
9
+
10
+ <!-- Background -->
11
+ <rect width="16" height="16" rx="3" fill="#1A1A1A"/>
12
+
13
+ <!-- Simplified wave for 16x16 -->
14
+ <path d="M 2 12 C 4 12, 5 10, 7 8 C 9 6, 10 4, 12 3 C 13 2, 14 3, 14 2.5"
15
+ stroke="url(#fav-grad)" stroke-width="1.5" fill="none" stroke-linecap="round"/>
16
+
17
+ <!-- Dot -->
18
+ <circle cx="12" cy="3" r="1.5" fill="#E9AB34"/>
19
+ </svg>
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 72" width="360" height="72">
2
+ <!-- Black version for light backgrounds — no background rectangle -->
3
+
4
+ <!-- Mark: Context wave -->
5
+ <g transform="translate(8, 4)">
6
+ <path d="M 10 48 C 16 48, 18 42, 22 40 C 26 38, 28 36, 32 32 C 36 28, 38 22, 42 18 C 46 14, 50 16, 54 14"
7
+ stroke="#1A1A1A" stroke-width="3.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
8
+ <path d="M 10 52 C 16 52, 18 46, 22 44 C 26 42, 28 40, 32 36 C 36 32, 38 26, 42 22 C 46 18, 50 20, 54 18"
9
+ stroke="#1A1A1A" stroke-width="1.5" fill="none" stroke-linecap="round" opacity="0.25"/>
10
+ <circle cx="42" cy="18" r="3.5" fill="#1A1A1A"/>
11
+ <circle cx="42" cy="18" r="6" fill="#1A1A1A" opacity="0.12"/>
12
+ <line x1="10" y1="54" x2="54" y2="54" stroke="#1A1A1A" stroke-width="1" stroke-linecap="round" opacity="0.3"/>
13
+ </g>
14
+
15
+ <!-- Divider -->
16
+ <line x1="76" y1="16" x2="76" y2="56" stroke="#1A1A1A" stroke-width="1" opacity="0.2"/>
17
+
18
+ <!-- Wordmark -->
19
+ <text x="90" y="35" font-family="'SF Mono', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="22" font-weight="700" fill="#1A1A1A" letter-spacing="-0.3">cc-context</text>
20
+ <text x="90" y="55" font-family="'SF Mono', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="15" font-weight="500" fill="#1A1A1A" letter-spacing="3" opacity="0.6">stats</text>
21
+
22
+ <!-- Right accent bar -->
23
+ <rect x="348" y="20" width="2" height="32" rx="1" fill="#1A1A1A" opacity="0.35"/>
24
+ </svg>
@@ -0,0 +1,40 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 72" width="360" height="72">
2
+ <defs>
3
+ <linearGradient id="full-wave-grad" x1="0%" y1="0%" x2="100%" y2="0%">
4
+ <stop offset="0%" stop-color="#22C55E"/>
5
+ <stop offset="50%" stop-color="#E9AB34"/>
6
+ <stop offset="100%" stop-color="#EF4444"/>
7
+ </linearGradient>
8
+ </defs>
9
+
10
+ <!-- Background pill -->
11
+ <rect width="360" height="72" rx="14" fill="#1A1A1A"/>
12
+
13
+ <!-- Mark: Context wave in left area -->
14
+ <g transform="translate(8, 4)">
15
+ <!-- Context wave -->
16
+ <path d="M 10 48 C 16 48, 18 42, 22 40 C 26 38, 28 36, 32 32 C 36 28, 38 22, 42 18 C 46 14, 50 16, 54 14"
17
+ stroke="url(#full-wave-grad)" stroke-width="3.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
18
+
19
+ <!-- Echo line -->
20
+ <path d="M 10 52 C 16 52, 18 46, 22 44 C 26 42, 28 40, 32 36 C 36 32, 38 26, 42 22 C 46 18, 50 20, 54 18"
21
+ stroke="url(#full-wave-grad)" stroke-width="1.5" fill="none" stroke-linecap="round" opacity="0.3"/>
22
+
23
+ <!-- Cursor dot -->
24
+ <circle cx="42" cy="18" r="3.5" fill="#E9AB34"/>
25
+ <circle cx="42" cy="18" r="6" fill="#E9AB34" opacity="0.15"/>
26
+
27
+ <!-- Baseline -->
28
+ <line x1="10" y1="54" x2="54" y2="54" stroke="#8B7D6B" stroke-width="1" stroke-linecap="round" opacity="0.4"/>
29
+ </g>
30
+
31
+ <!-- Divider -->
32
+ <line x1="76" y1="16" x2="76" y2="56" stroke="#8B7D6B" stroke-width="1" opacity="0.25"/>
33
+
34
+ <!-- Wordmark -->
35
+ <text x="90" y="35" font-family="'SF Mono', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="22" font-weight="700" fill="#FFFFFF" letter-spacing="-0.3">cc-context</text>
36
+ <text x="90" y="55" font-family="'SF Mono', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="15" font-weight="500" fill="#E9AB34" letter-spacing="3">stats</text>
37
+
38
+ <!-- Right accent bar -->
39
+ <rect x="348" y="20" width="2" height="32" rx="1" fill="#E9AB34" opacity="0.5"/>
40
+ </svg>
@@ -0,0 +1,27 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
2
+ <defs>
3
+ <linearGradient id="icon-wave-grad" x1="0%" y1="0%" x2="100%" y2="0%">
4
+ <stop offset="0%" stop-color="#22C55E"/>
5
+ <stop offset="50%" stop-color="#E9AB34"/>
6
+ <stop offset="100%" stop-color="#EF4444"/>
7
+ </linearGradient>
8
+ </defs>
9
+
10
+ <!-- Background -->
11
+ <rect width="512" height="512" rx="96" fill="#1A1A1A"/>
12
+
13
+ <!-- Context wave (scaled up) -->
14
+ <path d="M 96 376 C 144 376, 160 328, 192 312 C 224 296, 240 280, 272 248 C 304 216, 320 168, 352 136 C 384 104, 400 120, 432 104"
15
+ stroke="url(#icon-wave-grad)" stroke-width="24" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
16
+
17
+ <!-- Echo line -->
18
+ <path d="M 96 408 C 144 408, 160 360, 192 344 C 224 328, 240 312, 272 280 C 304 248, 320 200, 352 168 C 384 136, 400 152, 432 136"
19
+ stroke="url(#icon-wave-grad)" stroke-width="10" fill="none" stroke-linecap="round" opacity="0.25"/>
20
+
21
+ <!-- Cursor dot -->
22
+ <circle cx="352" cy="136" r="28" fill="#E9AB34"/>
23
+ <circle cx="352" cy="136" r="48" fill="#E9AB34" opacity="0.12"/>
24
+
25
+ <!-- Baseline -->
26
+ <line x1="96" y1="424" x2="432" y2="424" stroke="#8B7D6B" stroke-width="6" stroke-linecap="round" opacity="0.35"/>
27
+ </svg>
@@ -0,0 +1,28 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
2
+ <defs>
3
+ <linearGradient id="wave-grad" x1="0%" y1="0%" x2="100%" y2="0%">
4
+ <stop offset="0%" stop-color="#22C55E"/>
5
+ <stop offset="50%" stop-color="#E9AB34"/>
6
+ <stop offset="100%" stop-color="#EF4444"/>
7
+ </linearGradient>
8
+ </defs>
9
+
10
+ <!-- Background -->
11
+ <rect width="64" height="64" rx="14" fill="#1A1A1A"/>
12
+
13
+ <!-- Context wave: a flowing curve rising from left (low usage) to right (high usage) -->
14
+ <!-- This represents the context growth graph - the core concept of the tool -->
15
+ <path d="M 10 48 C 16 48, 18 42, 22 40 C 26 38, 28 36, 32 32 C 36 28, 38 22, 42 18 C 46 14, 50 16, 54 14"
16
+ stroke="url(#wave-grad)" stroke-width="3.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
17
+
18
+ <!-- Secondary pulse line (echo effect for depth) -->
19
+ <path d="M 10 52 C 16 52, 18 46, 22 44 C 26 42, 28 40, 32 36 C 36 32, 38 26, 42 22 C 46 18, 50 20, 54 18"
20
+ stroke="url(#wave-grad)" stroke-width="1.5" fill="none" stroke-linecap="round" opacity="0.3"/>
21
+
22
+ <!-- Cursor dot at the "current position" on the wave -->
23
+ <circle cx="42" cy="18" r="3.5" fill="#E9AB34"/>
24
+ <circle cx="42" cy="18" r="6" fill="#E9AB34" opacity="0.15"/>
25
+
26
+ <!-- Baseline -->
27
+ <line x1="10" y1="54" x2="54" y2="54" stroke="#8B7D6B" stroke-width="1" stroke-linecap="round" opacity="0.4"/>
28
+ </svg>
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 72" width="360" height="72">
2
+ <!-- White version for dark backgrounds — no background rectangle -->
3
+
4
+ <!-- Mark: Context wave -->
5
+ <g transform="translate(8, 4)">
6
+ <path d="M 10 48 C 16 48, 18 42, 22 40 C 26 38, 28 36, 32 32 C 36 28, 38 22, 42 18 C 46 14, 50 16, 54 14"
7
+ stroke="#FFFFFF" stroke-width="3.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
8
+ <path d="M 10 52 C 16 52, 18 46, 22 44 C 26 42, 28 40, 32 36 C 36 32, 38 26, 42 22 C 46 18, 50 20, 54 18"
9
+ stroke="#FFFFFF" stroke-width="1.5" fill="none" stroke-linecap="round" opacity="0.25"/>
10
+ <circle cx="42" cy="18" r="3.5" fill="#FFFFFF"/>
11
+ <circle cx="42" cy="18" r="6" fill="#FFFFFF" opacity="0.12"/>
12
+ <line x1="10" y1="54" x2="54" y2="54" stroke="#FFFFFF" stroke-width="1" stroke-linecap="round" opacity="0.3"/>
13
+ </g>
14
+
15
+ <!-- Divider -->
16
+ <line x1="76" y1="16" x2="76" y2="56" stroke="#FFFFFF" stroke-width="1" opacity="0.2"/>
17
+
18
+ <!-- Wordmark -->
19
+ <text x="90" y="35" font-family="'SF Mono', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="22" font-weight="700" fill="#FFFFFF" letter-spacing="-0.3">cc-context</text>
20
+ <text x="90" y="55" font-family="'SF Mono', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="15" font-weight="500" fill="#FFFFFF" letter-spacing="3" opacity="0.7">stats</text>
21
+
22
+ <!-- Right accent bar -->
23
+ <rect x="348" y="20" width="2" height="32" rx="1" fill="#FFFFFF" opacity="0.4"/>
24
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 260 52" width="260" height="52">
2
+ <!-- Wordmark only — transparent background -->
3
+ <!-- "cc-context" bold, "stats" in golden amber below -->
4
+ <text x="0" y="30" font-family="'SF Mono', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="24" font-weight="700" fill="#1A1A1A" letter-spacing="-0.3">cc-context</text>
5
+ <text x="0" y="48" font-family="'SF Mono', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="15" font-weight="500" fill="#E9AB34" letter-spacing="3">stats</text>
6
+ </svg>
package/install.sh CHANGED
@@ -1,12 +1,28 @@
1
1
  #!/bin/bash
2
2
  #
3
- # Claude Code Status Line Installer
4
- # Installs and configures a status line for Claude Code
3
+ # Claude Code Context Stats Installer
4
+ # Installs and configures context monitoring for Claude Code
5
+ #
6
+ # Features:
7
+ # - Real-time context usage monitoring (status line integration)
8
+ # - Live dashboard with context-stats CLI tool
9
+ # - Automatic detection of Smart Zone, Dumb Zone, and Wrap Up Zone
10
+ # - Local data storage in ~/.claude/statusline/
5
11
  #
6
12
  # Usage:
7
13
  # Local: ./install.sh
8
14
  # Remote: curl -fsSL https://raw.githubusercontent.com/luongnv89/cc-context-stats/main/install.sh | bash
9
15
  #
16
+ # Requirements:
17
+ # - curl (for remote installation)
18
+ # - jq (for JSON configuration, optional but recommended)
19
+ #
20
+ # What gets installed:
21
+ # - ~/.claude/statusline.sh - Status line command
22
+ # - ~/.local/bin/context-stats - CLI tool for live context monitoring
23
+ # - ~/.claude/statusline.conf - Configuration file
24
+ # - ~/.claude/settings.json - Claude Code settings updated
25
+ #
10
26
 
11
27
  set -e
12
28
 
@@ -208,6 +224,9 @@ show_delta=true
208
224
 
209
225
  # Show session_id in status line
210
226
  show_session=true
227
+
228
+ # Disable rotating text animations
229
+ reduced_motion=false
211
230
  EOF
212
231
  echo -e "${GREEN}✓${RESET} Created config file: $CONFIG_FILE"
213
232
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cc-context-stats",
3
- "version": "1.3.0",
4
- "description": "Custom status line scripts for Claude Code",
3
+ "version": "1.5.1",
4
+ "description": "Monitor your Claude Code session context in real-time - track token usage and never run out of context",
5
5
  "main": "scripts/statusline.js",
6
6
  "scripts": {
7
7
  "test": "jest",
@@ -15,9 +15,13 @@
15
15
  "keywords": [
16
16
  "claude",
17
17
  "claude-code",
18
+ "context",
19
+ "tokens",
20
+ "monitoring",
18
21
  "statusline",
19
22
  "terminal",
20
- "cli"
23
+ "cli",
24
+ "dashboard"
21
25
  ],
22
26
  "author": "luongnv89",
23
27
  "license": "MIT",
package/pyproject.toml CHANGED
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cc-context-stats"
7
- version = "1.3.0"
8
- description = "Never run out of context unexpectedly - monitor your session context in real-time"
7
+ version = "1.5.1"
8
+ description = "Monitor your Claude Code session context in real-time - track token usage and never run out of context"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
11
11
  requires-python = ">=3.9"
@@ -15,11 +15,13 @@ authors = [
15
15
  keywords = [
16
16
  "claude",
17
17
  "claude-code",
18
+ "context",
18
19
  "tokens",
19
- "context-window",
20
20
  "monitoring",
21
- "visualization",
21
+ "statusline",
22
+ "terminal",
22
23
  "cli",
24
+ "dashboard",
23
25
  ]
24
26
  classifiers = [
25
27
  "Development Status :: 4 - Beta",