@jeganwrites/claudash 1.0.8 → 1.0.10
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 +21 -0
- package/_version.py +11 -0
- package/bin/claudash.js +1 -1
- package/cli.py +4 -3
- package/package.json +1 -1
- package/server.py +2 -1
package/README.md
CHANGED
|
@@ -10,6 +10,8 @@ Zero pip dependencies. Single SQLite file. Single HTML page.
|
|
|
10
10
|

|
|
11
11
|

|
|
12
12
|
|
|
13
|
+

|
|
14
|
+
|
|
13
15
|
## What you get
|
|
14
16
|
|
|
15
17
|
- **Efficiency Score** — single 0-100 score across 5 dimensions: cache, model right-sizing, window discipline, floundering rate, compaction. Honest, actionable, comparable over time.
|
|
@@ -216,6 +218,25 @@ insights.
|
|
|
216
218
|
| `floundering_detected` | red | Session stuck in retry loops (same tool >=4 times) |
|
|
217
219
|
| `budget_warning` / `budget_exceeded` | amber / red | Daily budget threshold crossed |
|
|
218
220
|
|
|
221
|
+
## Fix Tracker
|
|
222
|
+
|
|
223
|
+
Claudash tracks whether the fixes you make to your workflow actually work.
|
|
224
|
+
|
|
225
|
+
1. **Baseline** — Claudash detects a waste pattern (e.g. floundering in Tidify costs $3,502/month)
|
|
226
|
+
2. **Apply** — You make a change (add max-retry rule to CLAUDE.md, set autoCompactThreshold)
|
|
227
|
+
3. **Measure** — Run `python3 cli.py measure <fix-id>` after 7 days
|
|
228
|
+
4. **Verdict** — Claudash shows before/after: sessions, cost, floundering rate, cache hit
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
# Add a fix
|
|
232
|
+
python3 cli.py fix add "Added max-retry:3 to CLAUDE.md for Tidify"
|
|
233
|
+
|
|
234
|
+
# Measure it after a week
|
|
235
|
+
python3 cli.py measure <fix-id>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
No other Claude Code tracker closes this loop. Most tools tell you what happened. Fix Tracker tells you whether your fix worked.
|
|
239
|
+
|
|
219
240
|
## API endpoints
|
|
220
241
|
|
|
221
242
|
| Method | Path | Auth | Description |
|
package/_version.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Shared version constant — reads from package.json so there's one source of truth."""
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
_PKG_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "package.json")
|
|
6
|
+
|
|
7
|
+
try:
|
|
8
|
+
with open(_PKG_PATH) as _f:
|
|
9
|
+
VERSION = json.load(_f).get("version", "0.0.0")
|
|
10
|
+
except (OSError, ValueError):
|
|
11
|
+
VERSION = "0.0.0"
|
package/bin/claudash.js
CHANGED
|
@@ -5,7 +5,7 @@ const path = require('path');
|
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
const os = require('os');
|
|
7
7
|
|
|
8
|
-
const VERSION = '
|
|
8
|
+
const { version: VERSION } = require('../package.json');
|
|
9
9
|
const REPO = 'https://github.com/pnjegan/claudash';
|
|
10
10
|
const INSTALL_DIR = path.join(os.homedir(), '.claudash');
|
|
11
11
|
|
package/cli.py
CHANGED
|
@@ -10,6 +10,7 @@ from datetime import datetime, timezone, timedelta
|
|
|
10
10
|
|
|
11
11
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
12
12
|
|
|
13
|
+
from _version import VERSION
|
|
13
14
|
from config import VPS_IP, VPS_PORT
|
|
14
15
|
from db import (
|
|
15
16
|
init_db, get_conn, get_insights, get_session_count, get_db_size_mb,
|
|
@@ -18,8 +19,8 @@ from db import (
|
|
|
18
19
|
)
|
|
19
20
|
|
|
20
21
|
|
|
21
|
-
HELP_TEXT = """
|
|
22
|
-
Claudash
|
|
22
|
+
HELP_TEXT = f"""
|
|
23
|
+
Claudash v{VERSION} — personal Claude usage dashboard
|
|
23
24
|
|
|
24
25
|
Commands:
|
|
25
26
|
dashboard Start dashboard server on :8080 (127.0.0.1 only)
|
|
@@ -129,7 +130,7 @@ def _run_dashboard(port=8080, no_browser=False, skip_init=False):
|
|
|
129
130
|
|
|
130
131
|
print(flush=True)
|
|
131
132
|
print(" ╔══════════════════════════════╗", flush=True)
|
|
132
|
-
print(" ║ Claudash
|
|
133
|
+
print(f" ║ Claudash v{VERSION:<17s}║", flush=True)
|
|
133
134
|
print(" ╠══════════════════════════════╣", flush=True)
|
|
134
135
|
print(f" ║ Records : {total:<17,}║", flush=True)
|
|
135
136
|
print(f" ║ Accounts : {n_accts:<17s}║", flush=True)
|
package/package.json
CHANGED
package/server.py
CHANGED
|
@@ -26,6 +26,7 @@ from db import (
|
|
|
26
26
|
)
|
|
27
27
|
|
|
28
28
|
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
29
|
+
from _version import VERSION
|
|
29
30
|
from analyzer import full_analysis, project_metrics, window_intelligence, trend_metrics
|
|
30
31
|
from scanner import scan_all, get_last_scan_time, preview_paths, discover_claude_paths
|
|
31
32
|
from insights import generate_insights
|
|
@@ -246,7 +247,7 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
246
247
|
last_scan_iso = datetime.fromtimestamp(last_scan, tz=timezone.utc).isoformat() if last_scan else None
|
|
247
248
|
self._serve_json({
|
|
248
249
|
"status": "ok",
|
|
249
|
-
"version":
|
|
250
|
+
"version": VERSION,
|
|
250
251
|
"uptime_seconds": int(time.time() - _server_start_time),
|
|
251
252
|
"records": total,
|
|
252
253
|
"last_scan": last_scan_iso,
|