git-fish-log 1.0.7 → 1.0.9

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.
@@ -48,12 +48,17 @@ npm link
48
48
  * `host`: 可选。私有部署的 GitLab 域名(如 `https://gitlab.mycompany.com`),缺省默认使用 `https://gitlab.com`。
49
49
  * `name`: 可选。给该数据源指定的别名(如 `my-company`),缺省时自动使用 host 域名作为别名。若别名已存在则会覆盖更新。
50
50
 
51
- ## 🆕 v1.0.7 更新内容
51
+ ## 🆕 v1.0.9 更新内容
52
+
53
+ - **月报新增节假日与调休标记**:每日摸鱼指数概览中,法定节假日日期后追加绿色圆点 `•`,法定调休上班日(周末补班)追加红色叹号 `!`,一眼分辨哪天是假日、哪天在还债。内置 2025-2026 年中国法定节假日数据,周末自动识别。
54
+
55
+ ## 🆕 v1.0.8 更新内容
56
+
57
+ - **摸鱼指数算法 v2 重设计**:引入「有效 Commit」概念(单次增删 ≥ 20 行),天然过滤格式化/小修复;代码行数改用 log₁₀ 压缩并降权至 10%,工作时长+时间分布合计占 50% 权重,摸鱼/爆肝判断更贴合直觉。详情见下方「算法说明」章节。
58
+ - **新增代码量指数(🧱 Code Volume Index)**:独立于摸鱼指数,纯基于修改行数 L 采用对数公式 `51.3·log₁₀(L+50)-79.5` 映射到 0~100 分,六档等级从「✏️ 改两行就下班」到「☢️ 这提交能过 CR?」。
59
+ - **锐评系统全面升级**:新增 11 类标签锐评池(摸鱼宗师/爆肝战神/深夜修仙者/勤恳搬砖人/一把梭哈/PPT 架构师/格式化大师/Git 聊天达人/深夜刺客/生产队的驴/摸鱼仙人),根据每日人格标签触发对应幽默吐槽。
60
+ - **周报新增代码行数 & 修仙指数展示**:每日报告同时展示 🧱 代码量、🌙 修仙指数,多维度可视化你的开发日常。
52
61
 
53
- - **摸鱼指数算法校准**:降低 `commitScore`、`lineScore`、`densityScore` 和 `spanScore` 的基础斜率,让轻量提交、小改动、正常工作跨度不再直接把摸鱼指数打到很低。
54
- - **月报日历优化**:`每日摸鱼指数概览` 增加周几表头,并按周一到周日真实日历网格排列。
55
- - **GitLab 全分支统计**:远程 Commit 查询增加 `all=true`,周报、月报、项目排行、时间分布和幽灵提交检测都会统计所有分支。
56
- - **Node 兼容增强**:优先使用 Node 18+ 原生 `fetch`,低版本 Node 自动走内置 `http/https` fallback,避免 `fetch is not defined`。
57
62
 
58
63
  ---
59
64
 
@@ -71,7 +76,7 @@ fish
71
76
 
72
77
  📅 本周提交详情:
73
78
  周一:0 次 | 🐟 摸鱼指数: 90% (终极摸鱼 🎣) 🏷 🐟 今日暂无代码活动
74
- 周二:2 次 | 🐟 摸鱼指数: 51% (正常营业 💻) | 1个项目 (项目名称)
79
+ 周二:2 次 | 🐟 摸鱼指数: 51% (正常营业 💻) | 🧱 代码量: 150行 (大型改动 🧱) | 1个项目 (项目名称)
75
80
  周三:0 次 | 🐟 摸鱼指数: 90% (终极摸鱼 🎣) 🏷 🐟 今日暂无代码活动
76
81
  周四:未到
77
82
  周五:未到
@@ -79,7 +84,7 @@ fish
79
84
  --------------------------------------------------
80
85
  ☕ 最快乐的日子:周一、周三、周四、周五 | 🐟 摸鱼指数:90%
81
86
  --------------------------------------------------
82
- 📊 本周均值:🐟 摸鱼 77%
87
+ 📊 本周均值:🐟 摸鱼指数 77%
83
88
  --------------------------------------------------
84
89
  🤖 锐评:
85
90
  看来本周的项目进入了‘养精蓄锐’阶段——手机太好玩,或者床太暖和。摸鱼技巧已达炉火纯青之境。
@@ -105,22 +110,17 @@ fish -m
105
110
 
106
111
  📅 每日摸鱼指数概览:
107
112
  周一 周二 周三 周四 周五 周六 周日
108
- 5月1日 5月2日 5月3日
109
- 90% 90% 90%
113
+ 6月1日 6月2日 6月3日 6月4日 6月5日 6月6日 6月7日
114
+ 67% 50% 48% 76% 95% 95% 95%
110
115
 
111
- 54555月6日 57 58 59 510
112
- 90% 90% 28% 90% 23% 19% 90%
116
+ 6869610日 6月11 612 613 614
117
+ 78% 78% 38% 47% 38% 95% 95%
113
118
 
114
- 511512513514515日 516日 517日
115
- 61% 39% 23% 90% 90% 90% 90%
119
+ 615616617618619日•620日•621日•
120
+ 57% 77% 42% 64% 95% 95% 95%
116
121
 
117
- 518519520521522523524
118
- 39% 43% 38% 28% 25% 90% 90%
119
-
120
- 5月25日 5月26日 5月27日 5月28日 5月29日 5月30日 5月31日
121
- 61% 28% 35% 34% 20% 90% 90%
122
-
123
- 🔥 爆肝王: 5月9日 → 摸鱼指数 19% 🔥 爆肝战神 🧱 勤恳搬砖人
122
+ 622623624625626627628
123
+ 95% 51% 95% 95% 78% 95% 95%
124
124
 
125
125
  --------------------------------------------------
126
126
  🤖 锐评:
@@ -261,7 +261,38 @@ fish -g
261
261
 
262
262
  ---
263
263
 
264
- ## 🎨 算法说明:摸鱼指数计算公式
264
+ ## 🎨 算法说明:摸鱼指数计算公式(v2 重设计)
265
+
266
+ ### 设计哲学
267
+
268
+ 摸鱼指数(0~100)是反向指标——**越高越摸鱼**。算法的核心假设是:
269
+
270
+ > Commit 次数、持续工作时长、提交分布,比代码行数更能体现"没摸鱼"。
271
+ > 代码行数仅作辅助参考,使用对数压缩并降低权重。
272
+
273
+ ### 指标区间直觉
274
+
275
+ | 摸鱼指数 | 含义 | 典型场景 |
276
+ |----------|------|----------|
277
+ | 95~100 | 几乎没干活 | 0 commit,或仅 1~2 行微调 |
278
+ | 70~85 | 小需求、小修复,整体悠闲 | 1~3 个有效 Commit,1~3 小时 |
279
+ | 40~60 | 正常搬砖 | 4~7 个有效 Commit,4~8 小时 |
280
+ | 20~40 | 爆肝工作 | 8~12 个有效 Commit,8~12 小时 |
281
+ | 0~20 | 通宵上线、人形 CI/CD | 13+ 有效 Commit,12+ 小时 + 深夜 |
282
+
283
+ ### 核心概念:有效 Commit
284
+
285
+ 只有单次修改行数(additions + deletions)**≥ 20 行**的 Commit 才算"有效 Commit"。
286
+ 这可以天然过滤掉:
287
+
288
+ - 格式化 / 缩进调整
289
+ - 单行 typo 修复
290
+ - 配置微调
291
+ - 注释增删
292
+
293
+ 用 \(N_{eff}\) 表示有效 Commit 数量,只有它参与核心计分。
294
+
295
+ ### 五项子指标
265
296
 
266
297
  每天同时计算 **五个维度**的指数:
267
298
 
@@ -269,42 +300,129 @@ fish -g
269
300
  |------|------|
270
301
  | 🐟 摸鱼指数 | 反向指标,越高越摸鱼 |
271
302
  | 🌙 修仙指数 | 深夜 (00:00-05:00) 提交频率 |
272
- | 🧱 搬砖指数 | 代码量 (additions + deletions) + 提交频率 |
303
+ | 🧱 搬砖指数 | 代码量 + 有效提交频率 |
273
304
  | 💥 爆发指数 | 单次提交修改量(一把梭) |
274
305
  | 🏷 人格标签 | 任意指数 ≥ 80 时触发 + 隐藏成就 |
275
306
 
276
307
  ### 输入数据
277
308
 
278
- - $N$ = 当天 Commit 数量
279
- - $S$ = 最早与最晚 Commit 时间跨度(小时)
280
- - $L$ = 总修改行数 (additions + deletions)
281
- - $avgLines = L / \max(N, 1)$ = 平均每次修改行数
282
- - $D = N / (S + 1)$ = Commit 密度
283
- - $Night$ = 深夜 (00:00-05:00) 提交数
284
- - $Weekend$ = 是否为周末
309
+ - \(N\) = 当天 Commit 总数
310
+ - \(N_{eff}\) = 有效 Commit 数(增删 ≥ 20 行)
311
+ - \(S\) = 最早与最晚 Commit 时间跨度(小时)
312
+ - \(L\) = 总修改行数 (additions + deletions)
313
+ - \(H_{active}\) = 有至少 1 Commit 的小时数
314
+ - \(Night\) = 深夜 (00:00-05:00) 提交数
315
+ - \(Weekend\) = 是否为周末
285
316
 
286
- ### 基础得分(0 ~ 100)
317
+ ### 子分数计算(各项 0 ~ 100)
287
318
 
288
- | 得分项 | 公式 | 设计意图 |
289
- |--------|------|----------|
290
- | 提交活跃度 | $\min(100,\ \log_2(N+1) \times 18)$ | 对数防刷 commit,降低轻量提交惩罚 |
291
- | 工时跨度 | $\min(100,\ \sqrt{S} \times 18)$ | 平方根防拉长跨度,避免正常工时过度爆肝 |
292
- | 代码活跃度 | $\min(100,\ \log_2(L+1) \times 8)$ | 对数防刷行数,避免小改动直接拉低摸鱼指数 |
293
- | 密度得分 | $N \le 1$ 时为 0,否则 $\min(100,\ D \times 35)$ | 单次提交无密度可言,密集提交才明显加分 |
294
- | 修仙得分 | $\min(100,\ Night \times 30)$ | 深夜加班证据 |
319
+ #### I₁ 有效提交分(权重 35%)
295
320
 
296
- ### 最终指数
321
+ \[
322
+ commitScore = \min(100,\ \log_2(N_{eff} + 1) \times 20)
323
+ \]
297
324
 
298
- ```
299
- hardworking = 提交活跃度×0.30 + 代码活跃度×0.30 + 密度得分×0.20 + 工时跨度×0.20
300
- if (isWeekend && N > 0) hardworking += 8
301
- hardworking = min(100, round(hardworking))
302
-
303
- fish = max(1, 100 - hardworking)
304
- nightOwl = min(100, round(修仙得分×0.7 + 工时跨度×0.3))
305
- builder = min(100, round(代码活跃度×0.7 + 提交活跃度×0.3))
306
- burst = min(100, round(log₂(avgLines + 1) × 12))
307
- ```
325
+ 对数衰减防刷 Commit。校准点:
326
+
327
+ | \(N_{eff}\) | 0 | 1 | 2 | 3 | 5 | 7 | 10 | 15 |
328
+ |--------------|---|---|---|---|---|---|----|-----|
329
+ | commitScore | 0 | 20 | 32 | 40 | 52 | 60 | 69 | 80 |
330
+
331
+ #### I₂ 工时跨度分(权重 30%)
332
+
333
+ \[
334
+ spanScore = \min(100,\ \sqrt{S} \times 22)
335
+ \]
336
+
337
+ 平方根防无限拉长跨度。校准点:
338
+
339
+ | \(S\) (h) | 0.5 | 1 | 2 | 4 | 6 | 8 | 10 | 12 |
340
+ |------------|-----|----|----|----|----|----|----|-----|
341
+ | spanScore | 16 | 22 | 31 | 44 | 54 | 62 | 70 | 76 |
342
+
343
+ #### I₃ 时间分布分(权重 20%)
344
+
345
+ \[
346
+ spreadScore = \min(100,\ H_{active} \times 12)
347
+ \]
348
+
349
+ 有 Commit 的小时数越多,说明不是集中突击、而是持续投入。
350
+
351
+ | \(H_{active}\) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8+ |
352
+ |-----------------|---|---|---|---|---|---|---|-----|
353
+ | spreadScore | 12 | 24 | 36 | 48 | 60 | 72 | 84 | 96+ |
354
+
355
+ #### I₄ 代码行数加分(权重 10%)
356
+
357
+ \[
358
+ lineBonus = \min(100,\ \log_{10}(L + 1) \times 25)
359
+ \]
360
+
361
+ log₁₀ 重度压缩 + 10% 低权重,避免 200 行被误判为大量工作。
362
+
363
+ | \(L\) | 10 | 100 | 200 | 500 | 1000 | 2000 | 5000 |
364
+ |--------|-----|------|------|------|-------|-------|-------|
365
+ | lineBonus | 26 | 50 | 58 | 68 | 75 | 83 | 93 |
366
+
367
+ #### I₅ 深夜加成(+5 分)
368
+
369
+ \[
370
+ nightBonus = Night > 0\ ?\ 5 : 0
371
+ \]
372
+
373
+ 有深夜提交直接加 5 分工作分,不参与权重乘法。
374
+
375
+ ### 最终公式
376
+
377
+ \[
378
+ \begin{aligned}
379
+ workScore &= commitScore \times 0.35 \\
380
+ &+ spanScore \times 0.30 \\
381
+ &+ spreadScore \times 0.20 \\
382
+ &+ lineBonus \times 0.10 \\
383
+ &+ nightBonus \\[4pt]
384
+ if\ (isWeekend\ \&\&\ N > 0):\quad workScore &+= 5 \\[4pt]
385
+ hardworking &= \min(100,\ round(workScore)) \\[4pt]
386
+ fish &= \max(1,\ 100 - hardworking)
387
+ \end{aligned}
388
+ \]
389
+
390
+ #### 修仙指数
391
+
392
+ \[
393
+ nightScore = \min(100,\ Night \times 30)
394
+ \]
395
+ \[
396
+ nightOwl = Night = 0\ ?\ 0 : \min(100,\ round(nightScore \times 0.7 + spanScore \times 0.3))
397
+ \]
398
+
399
+ #### 搬砖指数
400
+
401
+ \[
402
+ builder = \min(100,\ round(lineBonus \times 0.6 + commitScore \times 0.4))
403
+ \]
404
+
405
+ #### 爆发指数
406
+
407
+ \[
408
+ avgLines = N_{eff} > 0\ ?\ \frac{effLines}{N_{eff}} : \frac{L}{\max(N,1)}
409
+ \]
410
+ \[
411
+ burst = \min(100,\ round(\log_2(avgLines + 1) \times 12))
412
+ \]
413
+
414
+ ### 典型场景校验
415
+
416
+ | 场景 | N | \(N_{eff}\) | S(h) | \(H_{active}\) | L | fish |
417
+ |------|---|--------------|------|------------------|---|------|
418
+ | 摸鱼一天 | 0 | 0 | 0 | 0 | 0 | **95** |
419
+ | 小修小补 | 1 | 0 | 0.1 | 1 | 15 | **89** |
420
+ | 小需求 | 2 | 1 | 1 | 1 | 150 | **80** |
421
+ | 轻量一天 | 3 | 2 | 3 | 2 | 300 | **69** |
422
+ | 正常搬砖 | 6 | 5 | 6 | 4 | 600 | **49** |
423
+ | 较忙 | 8 | 7 | 8 | 5 | 900 | **39** |
424
+ | 爆肝 | 12 | 10 | 10 | 7 | 1500 | **28** |
425
+ | 通宵上线 | 18 | 15 | 14 | 10 | 3000 | **16** |
308
426
 
309
427
  ### 人格标签
310
428
 
@@ -320,13 +438,25 @@ burst = min(100, round(log₂(avgLines + 1) × 12))
320
438
 
321
439
  | 条件 | 成就 |
322
440
  |------|------|
323
- | 提交活跃度70代码活跃度15 | 🏷 PPT 架构师 |
441
+ | N8\(N_{eff}\)1 且 L ≤ 50 | 🏷 PPT 架构师 |
324
442
  | N ≥ 10 且 L ≤ 30 | 🏷 格式化大师 |
325
- | N ≥ 15 且 avgLines ≤ 2 | 🏷 Git 聊天达人 |
443
+ | N ≥ 15 且 L/N ≤ 2 | 🏷 Git 聊天达人 |
326
444
  | 修仙 ≥ 80 且 N ≤ 3 | 🏷 深夜刺客 |
327
445
  | 爆肝 ≥ 90 且 修仙 ≥ 70 且 周末 | 🏷 生产队的驴 |
328
446
  | 摸鱼 ≥ 95 且 N ≤ 1 | 🏷 摸鱼仙人 |
329
447
 
330
448
  ### 特殊情况
331
449
 
332
- - **0 Commit**:摸鱼 = 90(不判 100,可能开会/调研/排查问题),其余为 0,标签 = "🐟 今日暂无代码活动"
450
+ - **0 Commit**:摸鱼 = 95(不判 100,可能开会/调研/排查问题),其余为 0,标签 = "🐟 今日暂无代码活动"
451
+ - **纯刷 Commit(大量 <20 行的提交)**:\(N_{eff}\) = 0 → commitScore = 0,工作分主要来自 span/spread,摸鱼指数保持在 80+
452
+ - **单次大提交(如 500 行 1 次 Commit)**:commitScore = 20,spreadScore ≤ 12,工作分 ≈ 17,摸鱼 ≈ 83 — 一把梭不算持续工作
453
+
454
+ ### v2 vs v1 改进要点
455
+
456
+ | 问题 | v1 行为 | v2 改进 |
457
+ |------|---------|---------|
458
+ | 150 行小需求 | fish ≈ 55,被判"正常营业" | fish ≈ 80,合理识别为悠闲 |
459
+ | 刷 Commit(多次小提交) | 每次提交都计分,轻松拉低 fish | 仅 ≥20 行有效提交才计分 |
460
+ | 行数权重过高 | lineScore 权重 30%,200 行已显著加分 | log₁₀ 压缩 + 权重 10%,大幅抑制 |
461
+ | 缺少分布维度 | 密度分仅看 Commit/时间比 | 新增 spreadScore,奖励跨小时持续工作 |
462
+ | 0 commit 基线 | fish = 90 | fish = 95,工作日自然摸鱼基线 |
package/README.md CHANGED
@@ -33,13 +33,16 @@
33
33
  * `host`: 可选。私有部署的 GitLab 域名(如 `https://gitlab.mycompany.com`),缺省默认使用 `https://gitlab.com`。
34
34
  * `name`: 可选。给该数据源指定的别名(如 `my-company`),缺省时自动使用 host 域名作为别名。若别名已存在则会覆盖更新。
35
35
 
36
+ ## 🆕 v1.0.9 更新内容
36
37
 
37
- ## 🆕 v1.0.7 更新内容
38
+ - **月报新增节假日与调休标记**:每日摸鱼指数概览中,法定节假日日期后追加绿色圆点 `•`,法定调休上班日(周末补班)追加红色叹号 `!`,一眼分辨哪天是假日、哪天在还债。内置 2025-2026 年中国法定节假日数据,周末自动识别。
38
39
 
39
- - 校准摸鱼指数算法:降低轻量提交、小改动和正常工时跨度对爆肝分的惩罚,避免「只要有提交就很低」。
40
- - 优化月报每日摸鱼指数概览:按周一到周日真实日历排列,并标注周几。
41
- - GitLab 远程扫描默认统计所有分支提交,不再只看默认分支。
42
- - 修复低版本 Node 环境缺少 `fetch` GitLab 连接失败的问题。
40
+ ## 🆕 v1.0.8 更新内容
41
+
42
+ - **摸鱼指数算法 v2 重设计**:引入「有效 Commit」概念(单次增删 ≥ 20 行),天然过滤格式化/小修复;代码行数改用 log₁₀ 压缩并降权至 10%,工作时长+时间分布合计占 50% 权重,摸鱼/爆肝判断更贴合直觉。
43
+ - **新增代码量指数(🧱 Code Volume Index)**:独立于摸鱼指数,纯基于修改行数 L 采用对数公式 `51.3·log₁₀(L+50)-79.5` 映射到 0~100 分,六档等级从「✏️ 改两行就下班」到「☢️ 这提交能过 CR?」。
44
+ - **锐评系统全面升级**:新增 11 类标签锐评池(摸鱼宗师/爆肝战神/深夜修仙者/勤恳搬砖人/一把梭哈/PPT 架构师/格式化大师/Git 聊天达人/深夜刺客/生产队的驴/摸鱼仙人),根据每日人格标签触发对应幽默吐槽。
45
+ - **周报新增代码行数 & 修仙指数展示**:每日报告同时展示 🧱 代码量、🌙 修仙指数,多维度可视化你的开发日常。
43
46
 
44
47
 
45
48
  ## 📖 CLI 命令行示例
@@ -56,7 +59,7 @@ fish
56
59
 
57
60
  📅 本周提交详情:
58
61
  周一:0 次 | 🐟 摸鱼指数: 90% (终极摸鱼 🎣) 🏷 🐟 今日暂无代码活动
59
- 周二:2 次 | 🐟 摸鱼指数: 51% (正常营业 💻) | 1个项目 (项目名称)
62
+ 周二:2 次 | 🐟 摸鱼指数: 51% (正常营业 💻) | 🧱 代码量: 150行 (大型改动 🧱) | 1个项目 (项目名称)
60
63
  周三:0 次 | 🐟 摸鱼指数: 90% (终极摸鱼 🎣) 🏷 🐟 今日暂无代码活动
61
64
  周四:未到
62
65
  周五:未到
@@ -64,7 +67,7 @@ fish
64
67
  --------------------------------------------------
65
68
  ☕ 最快乐的日子:周一、周三 | 🐟 摸鱼指数:90%
66
69
  --------------------------------------------------
67
- 📊 本周均值:🐟 摸鱼 77%
70
+ 📊 本周均值:🐟 摸鱼指数 77%
68
71
  --------------------------------------------------
69
72
  🤖 锐评:
70
73
  看来本周的项目进入了‘养精蓄锐’阶段——手机太好玩,或者床太暖和。摸鱼技巧已达炉火纯青之境。