git-fish-log 1.0.5 → 1.0.7

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,6 +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 更新内容
52
+
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
+
51
58
  ---
52
59
 
53
60
  ## 📖 CLI 命令行示例
@@ -91,25 +98,29 @@ fish -m
91
98
  ==================================================
92
99
 
93
100
  📅 本月主要贡献占比 (基于 Commit Message 正则归类):
94
- - 修 bug (fix) :[■■■□□□□□□□□□□□□] 18% (10 次)
95
- - 新功能 (feat) :[■■■■■■■■■□□□□□□] 62% (34 次)
96
- - 杂务与文档 (chore) :[■■■□□□□□□□□□□□□] 18% (10 次)
97
- - 其他提交 (other) :[□□□□□□□□□□□□□□□] 2% (1 次)
101
+ - 修 bug (fix) :[■□□□□□□□□□□□□□□] 5% (4 次)
102
+ - 新功能 (feat) :[■■■■■■■■■■■■□□□] 79% (64 次)
103
+ - 杂务与文档 (chore) :[■■□□□□□□□□□□□□□] 14% (11 次)
104
+ - 其他提交 (other) :[□□□□□□□□□□□□□□□] 2% (2 次)
98
105
 
99
106
  📅 每日摸鱼指数概览:
100
- 6月1日 6月2日 6月3日 6月4日 6月5日 6月6日 6月7日
101
- 36% 40% 90% 38% 90% 90% 90%
107
+ 周一 周二 周三 周四 周五 周六 周日
108
+ 5月1日 5月2日 5月3日
109
+ 90% 90% 90%
110
+
111
+ 5月4日 5月5日 5月6日 5月7日 5月8日 5月9日 5月10日
112
+ 90% 90% 28% 90% 23% 19% 90%
102
113
 
103
- 68 69 610611612613614
104
- 90% 90% 20% 34% 11% 90% 90%
114
+ 511 512 513514515516517
115
+ 61% 39% 23% 90% 90% 90% 90%
105
116
 
106
- 615616617618619620621
107
- 32% 38% 23% 35% 90% 90% 90%
117
+ 518519520521522523524
118
+ 39% 43% 38% 28% 25% 90% 90%
108
119
 
109
- 622623624
110
- 90% 51% 90%
120
+ 525526527 5月28日 5月29日 5月30日 5月31日
121
+ 61% 28% 35% 34% 20% 90% 90%
111
122
 
112
- 🔥 爆肝王: 612日 → 摸鱼指数 11% 🔥 爆肝战神 🧱 勤恳搬砖人
123
+ 🔥 爆肝王: 59日 → 摸鱼指数 19% 🔥 爆肝战神 🧱 勤恳搬砖人
113
124
 
114
125
  --------------------------------------------------
115
126
  🤖 锐评:
@@ -276,10 +287,10 @@ fish -g
276
287
 
277
288
  | 得分项 | 公式 | 设计意图 |
278
289
  |--------|------|----------|
279
- | 提交活跃度 | $\min(100,\ \log_2(N+1) \times 25)$ | 对数防刷 commit |
280
- | 工时跨度 | $\min(100,\ \sqrt{S} \times 25)$ | 平方根防拉长跨度 |
281
- | 代码活跃度 | $\min(100,\ \log_2(L+1) \times 12)$ | 对数防刷行数 |
282
- | 密度得分 | $N \le 1$ 时为 0,否则 $\min(100,\ D \times 50)$ | 单次提交无密度可言 |
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)$ | 单次提交无密度可言,密集提交才明显加分 |
283
294
  | 修仙得分 | $\min(100,\ Night \times 30)$ | 深夜加班证据 |
284
295
 
285
296
  ### 最终指数
package/README.md CHANGED
@@ -32,3 +32,214 @@
32
32
  * `token`: 你的 GitLab 个人/项目访问令牌 (PAT),需有 `read_api` 或 `api` 权限。
33
33
  * `host`: 可选。私有部署的 GitLab 域名(如 `https://gitlab.mycompany.com`),缺省默认使用 `https://gitlab.com`。
34
34
  * `name`: 可选。给该数据源指定的别名(如 `my-company`),缺省时自动使用 host 域名作为别名。若别名已存在则会覆盖更新。
35
+
36
+
37
+ ## 🆕 v1.0.7 更新内容
38
+
39
+ - 校准摸鱼指数算法:降低轻量提交、小改动和正常工时跨度对爆肝分的惩罚,避免「只要有提交就很低」。
40
+ - 优化月报每日摸鱼指数概览:按周一到周日真实日历排列,并标注周几。
41
+ - GitLab 远程扫描默认统计所有分支提交,不再只看默认分支。
42
+ - 修复低版本 Node 环境缺少 `fetch` 时 GitLab 连接失败的问题。
43
+
44
+
45
+ ## 📖 CLI 命令行示例
46
+
47
+ ### 1. 基础摸鱼周报(or 月报)
48
+ ```bash
49
+ fish
50
+ ```
51
+ 默认展示**本周**(周一零点至周日 23:59)的所有提交记录以及每日的摸鱼指数统计。
52
+ ```bash
53
+ ==================================================
54
+ 🐟 FISH - 本周 Git 摸鱼周报
55
+ ==================================================
56
+
57
+ 📅 本周提交详情:
58
+ 周一:0 次 | 🐟 摸鱼指数: 90% (终极摸鱼 🎣) 🏷 🐟 今日暂无代码活动
59
+ 周二:2 次 | 🐟 摸鱼指数: 51% (正常营业 💻) | 1个项目 (项目名称)
60
+ 周三:0 次 | 🐟 摸鱼指数: 90% (终极摸鱼 🎣) 🏷 🐟 今日暂无代码活动
61
+ 周四:未到
62
+ 周五:未到
63
+
64
+ --------------------------------------------------
65
+ ☕ 最快乐的日子:周一、周三 | 🐟 摸鱼指数:90%
66
+ --------------------------------------------------
67
+ 📊 本周均值:🐟 摸鱼 77%
68
+ --------------------------------------------------
69
+ 🤖 锐评:
70
+ 看来本周的项目进入了‘养精蓄锐’阶段——手机太好玩,或者床太暖和。摸鱼技巧已达炉火纯青之境。
71
+ ```
72
+
73
+ ### 2. 月度报告与工作分类
74
+ ```bash
75
+ fish --month
76
+ # 或
77
+ fish -m
78
+ ```
79
+ 查看本月的所有 Commit 分类(Bug 修复、新功能、杂务文档、其他)占比图以及大月度 锐评。
80
+ ```bash
81
+ ==================================================
82
+ 🐟 FISH - 本月 Git 摸鱼月报
83
+ ==================================================
84
+
85
+ 📅 本月主要贡献占比 (基于 Commit Message 正则归类):
86
+ - 修 bug (fix) :[■□□□□□□□□□□□□□□] 5% (4 次)
87
+ - 新功能 (feat) :[■■■■■■■■■■■■□□□] 79% (64 次)
88
+ - 杂务与文档 (chore) :[■■□□□□□□□□□□□□□] 14% (11 次)
89
+ - 其他提交 (other) :[□□□□□□□□□□□□□□□] 2% (2 次)
90
+
91
+ 📅 每日摸鱼指数概览:
92
+ 周一 周二 周三 周四 周五 周六 周日
93
+ 5月1日 5月2日 5月3日
94
+ 90% 90% 90%
95
+
96
+ 5月4日 5月5日 5月6日 5月7日 5月8日 5月9日 5月10日
97
+ 90% 90% 28% 90% 23% 19% 90%
98
+
99
+ 5月11日 5月12日 5月13日 5月14日 5月15日 5月16日 5月17日
100
+ 61% 39% 23% 90% 90% 90% 90%
101
+
102
+ 5月18日 5月19日 5月20日 5月21日 5月22日 5月23日 5月24日
103
+ 39% 43% 38% 28% 25% 90% 90%
104
+
105
+ 5月25日 5月26日 5月27日 5月28日 5月29日 5月30日 5月31日
106
+ 61% 28% 35% 34% 20% 90% 90%
107
+
108
+ 🔥 爆肝王: 5月9日 → 摸鱼指数 19% 🔥 爆肝战神 🧱 勤恳搬砖人
109
+
110
+ --------------------------------------------------
111
+ 🤖 锐评:
112
+ 本月 Feat 占比高达 62%。新功能一项接一项,开发火力全开,业务线因你而飞速前进!
113
+ ```
114
+
115
+ ### 3. 横向项目爆肝排行
116
+ ```bash
117
+ fish --project
118
+ # 或
119
+ fish -p
120
+ ```
121
+ 对目前配置监控的多个项目按照 Commit 数量进行降序排行,并配有幽默的地位标识。
122
+ ```bash
123
+ fish -w 1 -p
124
+ ```
125
+ ```bash
126
+ ==================================================
127
+ 🐟 FISH - 项目爆肝排行 (上周)
128
+ ==================================================
129
+
130
+ 📊 对应时段项目爆肝排行 (2026/6/15 ~ 2026/6/21)
131
+ 1. 项目名称: 13 次提交 (主力搬砖地 🧱)
132
+ 2. 项目名称: 3 次提交 (偶尔上去点一下 🐟)
133
+ 3. 项目名称: 2 次提交 (边缘挂机项目 💤)
134
+ 4. 项目名称: 1 次提交 (测完就跑,纯粹路过 🚬)
135
+ ```
136
+
137
+ ### 4. 24 小时黄金提交时间段图表
138
+ ```bash
139
+ fish --time
140
+ # 或
141
+ fish -t
142
+ ```
143
+ 以水平柱状图形象打印 24 小时中你提交代码的波峰和波谷,包含个性化的时段说明。
144
+ ```bash
145
+ fish -w 1 -t
146
+ ```
147
+ ```bash
148
+ ==================================================
149
+ 🐟 FISH - 黄金工作时间段分析 (24小时分布) (上周)
150
+ ==================================================
151
+
152
+ 🕒 对应时段 24 小时 commit 频次分布图:
153
+ 00:00 | [ ] 0 次
154
+ 01:00 | [ ] 0 次
155
+ 02:00 | [ ] 0 次
156
+ 03:00 | [ ] 0 次
157
+ 04:00 | [ ] 0 次
158
+ 05:00 | [ ] 0 次
159
+ 06:00 | [ ] 0 次
160
+ 07:00 | [ ] 0 次
161
+ 08:00 | [ ] 0 次
162
+ 09:00 | [██████ ] 3 次 (上午表演型选手 🚀)
163
+ 10:00 | [██████████████████████████ ] 12 次 (上午表演型选手 🚀)
164
+ 11:00 | [██████████████████████████████] 14 次 (正常人类工作时间 ✅)
165
+ 12:00 | [██ ] 1 次 (干饭是第一生产力 🍚)
166
+ 13:00 | [█████████████ ] 6 次 (干饭是第一生产力 🍚)
167
+ 14:00 | [█████████████ ] 6 次 (午后灵魂出窍者 👻)
168
+ 15:00 | [██████████████████████████████] 14 次 (CPU 重启中 🔄)
169
+ 16:00 | [███████████████████ ] 9 次 (临近下班突然勤奋 🤔)
170
+ 17:00 | [██████████████████████████████] 14 次 (临近下班突然勤奋 🤔)
171
+ 18:00 | [████ ] 2 次 (自愿(被迫)加班人 💪)
172
+ 19:00 | [ ] 0 次
173
+ 20:00 | [ ] 0 次
174
+ 21:00 | [ ] 0 次
175
+ 22:00 | [ ] 0 次
176
+ 23:00 | [ ] 0 次
177
+ ```
178
+
179
+ ### 5. 幽灵提交检测
180
+ ```bash
181
+ fish --ghost
182
+ # 或
183
+ fish -g
184
+ ```
185
+ 检测本周在 00:00 - 05:00 期间生成的 Commit,如有发现,会触发防猝死警告与尖锐吐槽。
186
+ ```bash
187
+ ==================================================
188
+ 🐟 FISH - 幽灵提交检测 (深夜 00:00 ~ 05:00)
189
+ ==================================================
190
+
191
+ 🎉 恭喜!本时间段内未检测到任何深夜幽灵提交。
192
+ 你的发际线十分安全,大福报已被无情拒收,睡眠健康得分:100 分!
193
+ ```
194
+
195
+ ### 6. 报告时间偏移与远程源筛选 (通用选项)
196
+ 在运行任何报告命令时,都可以配合以下选项:
197
+ - **`-w, --weeks-ago <number>`**:查看之前某周/某月的报告(默认 `0` 表示本周/本月,`1` 表示上周/上月,`2` 表示上上周/上上月,以此类推)。
198
+ ```bash
199
+ # 查看上周的摸鱼周报
200
+ fish -w 1
201
+ # 查看两个月前的摸鱼月报
202
+ fish -m 2
203
+ ```
204
+ - **`-s, --source <source>`**:指定要查询的 GitLab 远程数据源,支持填别名或序号(例如 `1`, `2`)。如不填默认查询首个配置。
205
+ ```bash
206
+ # 查询别名为 company-gitlab 的源在上周的数据
207
+ fish -w 1 -s company-gitlab
208
+ ```
209
+
210
+ ---
211
+
212
+ ### 7. 项目与 GitLab 配置管理命令 (`fish config`)
213
+ - **列出当前配置的所有监控项目与 GitLab 源**:
214
+ ```bash
215
+ fish config list
216
+ ```
217
+
218
+ - **【划重点】配置/新增 GitLab 远程扫描源(支持多数据源管理)**:
219
+ ```bash
220
+ fish config gitlab <token> [host] [name]
221
+ ```
222
+ * `token`: 你的 GitLab 个人/项目访问令牌 (PAT),需有 `read_api` 或 `api` 权限。
223
+ * `host`: 可选。私有部署的 GitLab 域名(如 `https://gitlab.mycompany.com`),缺省默认使用 `https://gitlab.com`。
224
+ * `name`: 可选。给该数据源指定的别名(如 `my-company`),缺省时自动使用 host 域名作为别名。若别名已存在则会覆盖更新。
225
+ - **清除 GitLab 远程扫描配置**:
226
+ ```bash
227
+ # 清除指定的某一个 GitLab 配置(支持写序号或别名)
228
+ fish config gitlab-clear <name_or_index>
229
+
230
+ # 清除所有的 GitLab 配置并关闭远程扫描
231
+ fish config gitlab-clear
232
+ ```
233
+
234
+ - **手动添加一个本地 Git 仓库**:
235
+ ```bash
236
+ fish config add <path_to_repo>
237
+ ```
238
+ - **从监控列表中移除一个仓库**:
239
+ ```bash
240
+ fish config remove <path_to_repo>
241
+ ```
242
+ - **自动扫描指定目录下的一级子目录,批量添加 Git 仓库**:
243
+ ```bash
244
+ fish config scan <root_path>
245
+ ```
package/dist/index.js CHANGED
@@ -528,10 +528,10 @@ function calculateDayIndices(commits, isWeekend = false) {
528
528
  const L = totalAdditions + totalDeletions;
529
529
  const avgLines = L / Math.max(N, 1);
530
530
  const D = N / (S + 1);
531
- const commitScore = Math.min(100, Math.log2(N + 1) * 25);
532
- const spanScore = Math.min(100, Math.sqrt(S) * 25);
533
- const lineScore = Math.min(100, Math.log2(L + 1) * 12);
534
- const densityScore = N <= 1 ? 0 : Math.min(100, D * 50);
531
+ const commitScore = Math.min(100, Math.log2(N + 1) * 18);
532
+ const spanScore = Math.min(100, Math.sqrt(S) * 18);
533
+ const lineScore = Math.min(100, Math.log2(L + 1) * 8);
534
+ const densityScore = N <= 1 ? 0 : Math.min(100, D * 35);
535
535
  const nightScore = Math.min(100, nightCount * 30);
536
536
  let hardworking = commitScore * 0.3 + lineScore * 0.3 + densityScore * 0.2 + spanScore * 0.2;
537
537
  if (isWeekend && N > 0) {
@@ -1317,15 +1317,24 @@ async function runMonthlyReport(monthsAgo, source) {
1317
1317
  console.log("\n" + chalk.cyan.bold("\u{1F4C5} \u6BCF\u65E5\u6478\u9C7C\u6307\u6570\u6982\u89C8\uFF1A"));
1318
1318
  const monthLabel = `${targetDate.getMonth() + 1}\u6708`;
1319
1319
  const COL_WIDTH = 8;
1320
+ const weekHeaders = ["\u5468\u4E00", "\u5468\u4E8C", "\u5468\u4E09", "\u5468\u56DB", "\u5468\u4E94", "\u5468\u516D", "\u5468\u65E5"];
1321
+ const firstDay = new Date(targetDate.getFullYear(), targetDate.getMonth(), 1);
1322
+ const firstDayOffset = (firstDay.getDay() + 6) % 7;
1320
1323
  const lines = [];
1321
1324
  let dateRow = "";
1322
1325
  let fishRow = "";
1326
+ lines.push(chalk.gray(weekHeaders.map((d) => visualPad(d, COL_WIDTH)).join("").trimEnd()));
1327
+ for (let i = 0; i < firstDayOffset; i++) {
1328
+ dateRow += visualPad("", COL_WIDTH);
1329
+ fishRow += visualPad("", COL_WIDTH);
1330
+ }
1323
1331
  for (const d of stats.dailyIndices) {
1324
1332
  const dateRaw = `${monthLabel}${d.day}\u65E5`;
1325
1333
  const fishRaw = `${d.fish}%`;
1334
+ const columnIndex = (firstDayOffset + d.day - 1) % 7;
1326
1335
  dateRow += visualPad(dateRaw, COL_WIDTH);
1327
1336
  fishRow += visualPad(fishRaw, COL_WIDTH);
1328
- if (d.day % 7 === 0 || d === stats.dailyIndices[stats.dailyIndices.length - 1]) {
1337
+ if (columnIndex === 6 || d === stats.dailyIndices[stats.dailyIndices.length - 1]) {
1329
1338
  lines.push(chalk.gray(dateRow.trimEnd()));
1330
1339
  fishRow = colorizeFishRow(fishRow);
1331
1340
  lines.push(fishRow);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "git-fish-log",
3
- "version": "1.0.5",
4
- "description": "🐟 Git 摸鱼 & 爆肝分析器 CLI — 给你的提交记录生成摸鱼指数和 AI 锐评",
3
+ "version": "1.0.7",
4
+ "description": "🐟 Git 摸鱼 & 爆肝分析器 CLI — 给你的提交记录生成摸鱼指数和锐评",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "bin": {