codedash-app 1.3.0 → 1.3.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.
- package/README.md +6 -13
- package/package.json +1 -1
- package/src/frontend/app.js +16 -12
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Browser dashboard for Claude Code & Codex sessions. View, search, resume, and manage all your AI coding sessions.
|
|
4
4
|
|
|
5
|
+
[Russian / Русский](docs/README_RU.md) | [Chinese / 中文](docs/README_ZH.md)
|
|
6
|
+
|
|
5
7
|
https://github.com/user-attachments/assets/15c45659-365b-49f8-86a3-9005fa155ca6
|
|
6
8
|
|
|
7
9
|
  
|
|
@@ -45,27 +47,18 @@ npx codedash-app stats # show statistics
|
|
|
45
47
|
- Related git commits shown per session
|
|
46
48
|
- Auto-update notifications
|
|
47
49
|
|
|
48
|
-
**Themes
|
|
49
|
-
- Dark (default), Light, System
|
|
50
|
+
**Themes**: Dark (default), Light, System
|
|
50
51
|
|
|
51
|
-
**Keyboard Shortcuts
|
|
52
|
-
- `/` focus search, `j/k` navigate, `Enter` open
|
|
53
|
-
- `x` star, `d` delete, `s` select mode, `g` toggle groups
|
|
54
|
-
- `r` refresh, `Escape` close panels
|
|
52
|
+
**Keyboard Shortcuts**: `/` search, `j/k` navigate, `Enter` open, `x` star, `d` delete, `s` select, `g` group, `r` refresh, `Esc` close
|
|
55
53
|
|
|
56
54
|
## How It Works
|
|
57
55
|
|
|
58
|
-
Reads session data from `~/.claude/` and `~/.codex
|
|
59
|
-
- `history.jsonl` — session index
|
|
60
|
-
- `projects/*/<session-id>.jsonl` — conversation data
|
|
61
|
-
- `sessions/` — Codex session files
|
|
62
|
-
|
|
63
|
-
Zero dependencies. Everything runs on `localhost`.
|
|
56
|
+
Reads session data from `~/.claude/` and `~/.codex/`. Zero dependencies. Everything runs on `localhost`.
|
|
64
57
|
|
|
65
58
|
## Requirements
|
|
66
59
|
|
|
67
60
|
- Node.js >= 16
|
|
68
|
-
- Claude Code or Codex CLI
|
|
61
|
+
- Claude Code or Codex CLI
|
|
69
62
|
- macOS / Linux / Windows
|
|
70
63
|
|
|
71
64
|
## License
|
package/package.json
CHANGED
package/src/frontend/app.js
CHANGED
|
@@ -602,10 +602,16 @@ function renderProjects(container, sessions) {
|
|
|
602
602
|
|
|
603
603
|
// ── Activity Heatmap ───────────────────────────────────────────
|
|
604
604
|
|
|
605
|
+
function localISO(date) {
|
|
606
|
+
var y = date.getFullYear();
|
|
607
|
+
var m = String(date.getMonth() + 1).padStart(2, '0');
|
|
608
|
+
var d = String(date.getDate()).padStart(2, '0');
|
|
609
|
+
return y + '-' + m + '-' + d;
|
|
610
|
+
}
|
|
611
|
+
|
|
605
612
|
function renderHeatmap(container) {
|
|
606
613
|
var now = new Date();
|
|
607
|
-
var oneYearAgo = new Date(now);
|
|
608
|
-
oneYearAgo.setFullYear(oneYearAgo.getFullYear() - 1);
|
|
614
|
+
var oneYearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate());
|
|
609
615
|
|
|
610
616
|
// Count sessions per day
|
|
611
617
|
var counts = {};
|
|
@@ -615,17 +621,16 @@ function renderHeatmap(container) {
|
|
|
615
621
|
counts[d] = (counts[d] || 0) + 1;
|
|
616
622
|
});
|
|
617
623
|
|
|
618
|
-
// Build day array
|
|
624
|
+
// Build day array — start from Sunday before oneYearAgo, end on Saturday after today
|
|
619
625
|
var days = [];
|
|
620
626
|
var d = new Date(oneYearAgo);
|
|
621
|
-
|
|
622
|
-
d.setDate(d.getDate() - d.getDay());
|
|
627
|
+
d.setDate(d.getDate() - d.getDay()); // align to Sunday
|
|
623
628
|
|
|
624
629
|
var endDate = new Date(now);
|
|
625
|
-
endDate.setDate(endDate.getDate() + (6 - endDate.getDay())); //
|
|
630
|
+
endDate.setDate(endDate.getDate() + (6 - endDate.getDay())); // align to Saturday
|
|
626
631
|
|
|
627
632
|
while (d <= endDate) {
|
|
628
|
-
var iso = d
|
|
633
|
+
var iso = localISO(d);
|
|
629
634
|
var count = counts[iso] || 0;
|
|
630
635
|
var level = 0;
|
|
631
636
|
if (count >= 6) level = 4;
|
|
@@ -633,8 +638,7 @@ function renderHeatmap(container) {
|
|
|
633
638
|
else if (count >= 2) level = 2;
|
|
634
639
|
else if (count >= 1) level = 1;
|
|
635
640
|
days.push({ date: iso, count: count, level: level, day: d.getDay() });
|
|
636
|
-
d = new Date(d);
|
|
637
|
-
d.setDate(d.getDate() + 1);
|
|
641
|
+
d = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1);
|
|
638
642
|
}
|
|
639
643
|
|
|
640
644
|
// Build weeks (columns)
|
|
@@ -682,10 +686,10 @@ function renderHeatmap(container) {
|
|
|
682
686
|
var streak = 0;
|
|
683
687
|
var checkDate = new Date(now);
|
|
684
688
|
while (true) {
|
|
685
|
-
var
|
|
686
|
-
if (counts[
|
|
689
|
+
var ciso = localISO(checkDate);
|
|
690
|
+
if (counts[ciso] && counts[ciso] > 0) {
|
|
687
691
|
streak++;
|
|
688
|
-
checkDate.
|
|
692
|
+
checkDate = new Date(checkDate.getFullYear(), checkDate.getMonth(), checkDate.getDate() - 1);
|
|
689
693
|
} else {
|
|
690
694
|
break;
|
|
691
695
|
}
|