git-fish-log 1.0.7 → 1.0.8

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