vibestreak 0.3.2 → 0.3.3
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/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/src/views.mjs +9 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Any version runs with `npx vibestreak@<version>`; `npx vibestreak@latest autosync on`
|
|
4
4
|
moves the background sync to the newest one.
|
|
5
5
|
|
|
6
|
+
## 0.3.3 (2026-10-25)
|
|
7
|
+
|
|
8
|
+
- `vibestreak board all` shows consistency as the share of days active since
|
|
9
|
+
each person's first (over at least 90 days), as the website does, with a
|
|
10
|
+
line saying how it's counted.
|
|
11
|
+
|
|
6
12
|
## 0.3.2 (2026-10-25)
|
|
7
13
|
|
|
8
14
|
- Linking says up front that your profile is public (and how to hide it), and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibestreak",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "Your AI coding streak: a heatmap of the days you coded with Claude Code, Codex, Cursor, Copilot, Gemini and OpenCode, and the commits you shipped with them. Sends daily totals only.",
|
|
5
5
|
"keywords": ["claude-code", "codex", "cursor", "copilot", "gemini", "opencode", "ai-coding", "heatmap", "streak", "leaderboard", "cli"],
|
|
6
6
|
"homepage": "https://vibestreak.kingsbridge-consultancy.com/cli",
|
package/src/views.mjs
CHANGED
|
@@ -76,11 +76,12 @@ export async function boardView({ server, words, values, you, columns }) {
|
|
|
76
76
|
if (you) params.set('you', you)
|
|
77
77
|
const b = await getJson(server, `/api/v1/board?${params}`)
|
|
78
78
|
const period = b.range ? `${b.range.from} → ${b.range.to}` : { today: 'today', all: 'all time' }[b.period] ?? `last ${b.period}`
|
|
79
|
-
|
|
79
|
+
const rated = b.rows.some(r => r.rate != null)
|
|
80
|
+
console.log(`${p.bold('Leaderboard')} ${p.dim(`· ${rated ? 'share of days active' : METRIC_LABEL[b.metric]} · ${period}${b.tool ? ` · ${TOOL_NAMES[b.tool]}` : ''} · ${plural(b.total, 'developer')}`)}`)
|
|
80
81
|
if (!b.rows.length) return console.log(p.dim('Nobody here yet for these days.'))
|
|
81
82
|
const wide = columns >= 96
|
|
82
83
|
const handleWidth = Math.min(22, Math.max(8, ...b.rows.map(r => r.handle.length + 1)))
|
|
83
|
-
const header = [pad('#', 4), pad('developer', handleWidth + 1), wide ? pad('last 4 weeks', 29) : '', pad('active', 7, true), pad('streak', 8, true), pad('shipped', 9, true), pad('tokens', 8, true)].join(' ')
|
|
84
|
+
const header = [pad('#', 4), pad('developer', handleWidth + 1), wide ? pad('last 4 weeks', 29) : '', pad(rated ? 'active%' : 'active', 7, true), pad('streak', 8, true), pad('shipped', 9, true), pad('tokens', 8, true)].join(' ')
|
|
84
85
|
console.log(p.dim(header))
|
|
85
86
|
const line = r => {
|
|
86
87
|
const me = you && r.handle.toLowerCase() === you.toLowerCase()
|
|
@@ -89,7 +90,8 @@ export async function boardView({ server, words, values, you, columns }) {
|
|
|
89
90
|
pad(String(r.rank), 4),
|
|
90
91
|
me ? p.bold(name) : name,
|
|
91
92
|
wide ? pad(recent(p, r.strip), 29) : '',
|
|
92
|
-
|
|
93
|
+
// All-time consistency ranks the share of days active, which the server sends as `rate`.
|
|
94
|
+
pad(r.rate == null ? fmt(r.activeDays) : `${Math.round(r.rate * 100)}%`, 7, true),
|
|
93
95
|
pad(`${fmt(r.streak)}d`, 8, true),
|
|
94
96
|
pad(p.ship(fmt(r.aiCommits)), 9, true),
|
|
95
97
|
pad(compact(r.tokens), 8, true),
|
|
@@ -97,6 +99,10 @@ export async function boardView({ server, words, values, you, columns }) {
|
|
|
97
99
|
}
|
|
98
100
|
for (const r of b.rows) console.log(line(r))
|
|
99
101
|
if (b.you && b.you.rank > b.rows.length) console.log(`${p.dim(' …')}\n${line(b.you)}`)
|
|
102
|
+
if (rated) {
|
|
103
|
+
const mine = b.you ?? b.rows.find(r => you && r.handle.toLowerCase() === you.toLowerCase())
|
|
104
|
+
console.log(p.dim(`\nAll time ranks the share of days each person was active since their first, counted over at least 90 days${mine ? ` (yours: ${fmt(mine.activeDays)} of ${fmt(mine.days)})` : ''}.`))
|
|
105
|
+
}
|
|
100
106
|
console.log(p.dim(`\nMore: vibestreak board [today|7d|30d|90d|all] [consistency|shipped|streak|tokens] [tool] · ${new URL('/', server)}`))
|
|
101
107
|
}
|
|
102
108
|
|