git-fish-log 1.0.8 → 1.0.10
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-/345/225/260/345/227/246/347/211/210.md +24 -13
- package/README.md +15 -2
- package/dist/index.js +332 -272
- package/package.json +1 -1
|
@@ -48,6 +48,18 @@ npm link
|
|
|
48
48
|
* `host`: 可选。私有部署的 GitLab 域名(如 `https://gitlab.mycompany.com`),缺省默认使用 `https://gitlab.com`。
|
|
49
49
|
* `name`: 可选。给该数据源指定的别名(如 `my-company`),缺省时自动使用 host 域名作为别名。若别名已存在则会覆盖更新。
|
|
50
50
|
|
|
51
|
+
## 🆕 v1.0.10 更新内容
|
|
52
|
+
|
|
53
|
+
- **月报新增爆肝王 & 摸鱼王排行榜**:与周报一致的计算法则,从当月数据中找出摸鱼指数最低(最努力)和最高(最会摸鱼)的日子,多日并列时一起显示。统计时自动排除周末与法定节假日(调休上班日不算休息日),但如果休息日有提交记录则视为加班纳入统计。
|
|
54
|
+
- **月报新增摸鱼指数均值(除休息日)**:基于排除无提交休息日后的数据重新计算月均摸鱼指数,更准确反映实际工作日的摸鱼水平。同时月报锐评的阈值判断也同步改为基于此调整后均值,避免被周末/节假日的 95 分拉高。
|
|
55
|
+
- **周报「最努力的日子」排除周末**:周末的提交记录统一归类到「最痛苦的日子」,不再同时出现在「最努力」中,逻辑更合理。
|
|
56
|
+
- **周报项目名称始终显示**:去掉了 `-P` 条件限制,每日提交详情中的项目名称默认直接展示。
|
|
57
|
+
- **修复月报 `isWeekend` 参数**:`analyzeMonthly` 原来写死 `false`,导致周末的摸鱼指数计算缺少 +5 工作分加成,现已根据实际日期正确计算。
|
|
58
|
+
|
|
59
|
+
## 🆕 v1.0.9 更新内容
|
|
60
|
+
|
|
61
|
+
- **月报新增节假日与调休标记**:每日摸鱼指数概览中,法定节假日日期后追加绿色圆点 `•`,法定调休上班日(周末补班)追加红色叹号 `!`,一眼分辨哪天是假日、哪天在还债。内置 2025-2026 年中国法定节假日数据,周末自动识别。
|
|
62
|
+
|
|
51
63
|
## 🆕 v1.0.8 更新内容
|
|
52
64
|
|
|
53
65
|
- **摸鱼指数算法 v2 重设计**:引入「有效 Commit」概念(单次增删 ≥ 20 行),天然过滤格式化/小修复;代码行数改用 log₁₀ 压缩并降权至 10%,工作时长+时间分布合计占 50% 权重,摸鱼/爆肝判断更贴合直觉。详情见下方「算法说明」章节。
|
|
@@ -106,23 +118,22 @@ fish -m
|
|
|
106
118
|
|
|
107
119
|
📅 每日摸鱼指数概览:
|
|
108
120
|
周一 周二 周三 周四 周五 周六 周日
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
6月1日 6月2日 6月3日 6月4日 6月5日 6月6日 6月7日
|
|
122
|
+
67% 50% 48% 76% 95% 95% 95%
|
|
111
123
|
|
|
112
|
-
|
|
113
|
-
|
|
124
|
+
6月8日 6月9日 6月10日 6月11日 6月12日 6月13日 6月14日
|
|
125
|
+
78% 78% 38% 47% 38% 95% 95%
|
|
114
126
|
|
|
115
|
-
|
|
116
|
-
|
|
127
|
+
6月15日 6月16日 6月17日 6月18日 6月19日•6月20日•6月21日•
|
|
128
|
+
57% 77% 42% 64% 95% 95% 95%
|
|
117
129
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
5月25日 5月26日 5月27日 5月28日 5月29日 5月30日 5月31日
|
|
122
|
-
61% 28% 35% 34% 20% 90% 90%
|
|
123
|
-
|
|
124
|
-
🔥 爆肝王: 5月9日 → 摸鱼指数 19% 🔥 爆肝战神 🧱 勤恳搬砖人
|
|
130
|
+
6月22日 6月23日 6月24日 6月25日 6月26日 6月27日 6月28日
|
|
131
|
+
95% 51% 95% 95% 78% 95% 95%
|
|
125
132
|
|
|
133
|
+
🏆 爆肝王:6月11日 | 🐟 摸鱼指数:38%
|
|
134
|
+
☕ 摸鱼王:6月26日 | 🐟 摸鱼指数:78%
|
|
135
|
+
--------------------------------------------------
|
|
136
|
+
📊 本月均值:🐟 摸鱼指数 60%
|
|
126
137
|
--------------------------------------------------
|
|
127
138
|
🤖 锐评:
|
|
128
139
|
本月 Feat 占比高达 62%。新功能一项接一项,开发火力全开,业务线因你而飞速前进!
|
package/README.md
CHANGED
|
@@ -33,6 +33,17 @@
|
|
|
33
33
|
* `host`: 可选。私有部署的 GitLab 域名(如 `https://gitlab.mycompany.com`),缺省默认使用 `https://gitlab.com`。
|
|
34
34
|
* `name`: 可选。给该数据源指定的别名(如 `my-company`),缺省时自动使用 host 域名作为别名。若别名已存在则会覆盖更新。
|
|
35
35
|
|
|
36
|
+
## 🆕 v1.0.10 更新内容
|
|
37
|
+
|
|
38
|
+
- **月报新增爆肝王 & 摸鱼王排行榜**:与周报一致的计算法则,从当月数据中找出摸鱼指数最低(最努力)和最高(最会摸鱼)的日子,多日并列时一起显示。统计时自动排除周末与法定节假日(调休上班日不算休息日),但如果休息日有提交记录则视为加班纳入统计。
|
|
39
|
+
- **月报新增摸鱼指数均值(除休息日)**:基于排除无提交休息日后的数据重新计算月均摸鱼指数,更准确反映实际工作日的摸鱼水平。同时月报锐评的阈值判断也同步改为基于此调整后均值,避免被周末/节假日的 95 分拉高。
|
|
40
|
+
- **周报「最努力的日子」排除周末**:周末的提交记录统一归类到「最痛苦的日子」,不再同时出现在「最努力」中,逻辑更合理。
|
|
41
|
+
- **周报项目名称始终显示**:去掉了 `-P` 条件限制,每日提交详情中的项目名称默认直接展示。
|
|
42
|
+
- **修复月报 `isWeekend` 参数**:`analyzeMonthly` 原来写死 `false`,导致周末的摸鱼指数计算缺少 +5 工作分加成,现已根据实际日期正确计算。
|
|
43
|
+
|
|
44
|
+
## 🆕 v1.0.9 更新内容
|
|
45
|
+
|
|
46
|
+
- **月报新增节假日与调休标记**:每日摸鱼指数概览中,法定节假日日期后追加绿色圆点 `•`,法定调休上班日(周末补班)追加红色叹号 `!`,一眼分辨哪天是假日、哪天在还债。内置 2025-2026 年中国法定节假日数据,周末自动识别。
|
|
36
47
|
|
|
37
48
|
## 🆕 v1.0.8 更新内容
|
|
38
49
|
|
|
@@ -105,8 +116,10 @@ fish -m
|
|
|
105
116
|
5月25日 5月26日 5月27日 5月28日 5月29日 5月30日 5月31日
|
|
106
117
|
61% 28% 35% 34% 20% 90% 90%
|
|
107
118
|
|
|
108
|
-
|
|
109
|
-
|
|
119
|
+
🏆 爆肝王:5月9日 | 🐟 摸鱼指数:19%
|
|
120
|
+
☕ 摸鱼王:5月26日 | 🐟 摸鱼指数:28%
|
|
121
|
+
--------------------------------------------------
|
|
122
|
+
📊 本月均值:🐟 摸鱼指数 49%
|
|
110
123
|
--------------------------------------------------
|
|
111
124
|
🤖 锐评:
|
|
112
125
|
本月 Feat 占比高达 62%。新功能一项接一项,开发火力全开,业务线因你而飞速前进!
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
-
import
|
|
5
|
+
import chalk from "chalk";
|
|
6
6
|
import fs2 from "fs";
|
|
7
7
|
import path3 from "path";
|
|
8
8
|
|
|
@@ -791,7 +791,9 @@ async function analyzeMonthly(projectPaths, now = /* @__PURE__ */ new Date(), so
|
|
|
791
791
|
for (let d = 1; d <= maxDay; d++) {
|
|
792
792
|
const dateStr = `${since.getFullYear()}-${since.getMonth() + 1}-${d}`;
|
|
793
793
|
const dayCommits = commitsByDateStr[dateStr] || [];
|
|
794
|
-
const
|
|
794
|
+
const dayDate = new Date(since.getFullYear(), since.getMonth(), d);
|
|
795
|
+
const isWeekend = dayDate.getDay() === 0 || dayDate.getDay() === 6;
|
|
796
|
+
const indices = calculateDayIndices(dayCommits, isWeekend);
|
|
795
797
|
totalFish += indices.fish;
|
|
796
798
|
totalHardworking += indices.hardworking;
|
|
797
799
|
totalNightOwl += indices.nightOwl;
|
|
@@ -848,88 +850,59 @@ async function getGhostCommits(projectPaths, since, until, source) {
|
|
|
848
850
|
}
|
|
849
851
|
|
|
850
852
|
// src/critic.ts
|
|
851
|
-
import chalk from "chalk";
|
|
852
853
|
var SLACK_HIGH_CRITIQUES = [
|
|
853
|
-
"\u672C\u5468\u6478\u9C7C\u6307\u6570\u62C9\u6EE1\
|
|
854
|
-
"
|
|
855
|
-
"\
|
|
856
|
-
"\
|
|
857
|
-
"\
|
|
858
|
-
"\
|
|
859
|
-
"Git\u9875\u9762\u4E00\u7247\u6E05\u51C0\uFF0C\u6CA1\u6709\
|
|
854
|
+
"\u672C\u5468\u6478\u9C7C\u6307\u6570\u62C9\u6EE1\uFF0C\u677E\u5F1B\u611F\u76F4\u63A5\u6EA2\u51FA\u5C4F\u5E55\u3002\u52B3\u9038\u7ED3\u5408\u8FD9\u5757\uFF0C\u4F60\u7B97\u662F\u73A9\u660E\u767D\u4E86\u3002",
|
|
855
|
+
"Commit \u5217\u8868\u6E05\u723D\u5F97\u50CF\u521A\u683C\u5F0F\u5316\u8FC7\u7684\u786C\u76D8\u3002",
|
|
856
|
+
"\u672C\u5468\u9879\u76EE\u8FDB\u5165\u4E86'\u517B\u7CBE\u84C4\u9510'\u7F13\u51B2\u9636\u6BB5\uFF0C\u6478\u9C7C\u6280\u5DE7\u5DF2\u81FB\u5316\u5883\u3002",
|
|
857
|
+
"\u63D0\u4EA4\u9891\u7387\u5E73\u7F13\u5982\u5FC3\u7535\u56FE\uFF0C\u7A33\u5B9A\uFF0C\u5C31\u662F\u6709\u70B9\u592A\u5E73\u4E86\u3002",
|
|
858
|
+
"\u63D0\u4EA4\u6B21\u6570\u4E24\u53EA\u624B\u6570\u5F97\u8FC7\u6765\u3002'\u4E0D\u5199\u4EE3\u7801\u5C31\u6CA1\u6709bug'\uFF01\u903B\u8F91\u81EA\u6D3D\uFF0C\u65E0\u6CD5\u53CD\u9A73\u3002",
|
|
859
|
+
"\u5C11\u91CF\u63D0\u4EA4\u641E\u5B9A\u5168\u90E8\u4EFB\u52A1\uFF0C\u9AD8\u6548\u6536\u5DE5\u540E\u5B89\u5FC3\u653E\u7A7A\u3002\u61C2\u4F11\u606F\u7684\u4EBA\uFF0C\u624D\u61C2\u957F\u4E45\u3002",
|
|
860
|
+
"Git\u9875\u9762\u4E00\u7247\u6E05\u51C0\uFF0C\u6CA1\u6709\u8FED\u4EE3\u75D5\u8FF9\uFF0C\u4E0D\u7528\u8FFD\u8D76\u8FDB\u5EA6\u7684\u4E00\u5468\uFF0C\u8212\u670D\u5F97\u8BA9\u4EBA\u5AC9\u5992\u3002"
|
|
860
861
|
];
|
|
861
862
|
var SLACK_LOW_CRITIQUES = [
|
|
862
|
-
"\
|
|
863
|
-
"\
|
|
864
|
-
"\
|
|
865
|
-
"\
|
|
866
|
-
"\
|
|
867
|
-
"\
|
|
868
|
-
"\u6574\u5468\u5168\u7A0B\u9AD8\u8D1F\u8377\u8F93\u51FA\uFF0C\u63D0\u4EA4\u8BB0\u5F55\u65AD\u5C42\u9886\u5148\u5168\u961F\uFF0C\u4E3A\u9879\u76EE\u63A8\u8FDB\u7ACB\u4E0B\u5927\u529F\u3002\u5DE5\u4F5C\u518D\u91CD\u8981\u4E5F\u8981\u517C\u987E\u4F5C\u606F\uFF0C\u9002\u5EA6\u653E\u677E\u624D\u80FD\u4FDD\u6301\u957F\u4E45\u7A33\u5B9A\u7684\u5F00\u53D1\u72B6\u6001\u3002"
|
|
863
|
+
"\u8FD9\u5468\u4EE3\u7801\u5E93\u7684\u534A\u58C1\u6C5F\u5C71\u662F\u4F60\u6253\u4E0B\u6765\u7684\u3002\u5FD9\u5B8C\u8BB0\u5F97\u7ED9\u81EA\u5DF1\u70B9\u676F\u51B0\u5976\u8336\uFF0C\u4F60\u503C\u5F97\u3002",
|
|
864
|
+
"\u6709\u6548\u5DE5\u65F6\u62C9\u6EE1\uFF0C\u4ECE\u65E9\u8FED\u4EE3\u5230\u665A\u3002\u4EE3\u7801\u80FD\u56DE\u6EDA\uFF0C\u8EAB\u4F53\u4E0D\u80FD\u2014\u2014\u62BD\u7A7A\u6B47\u6B47\u3002",
|
|
865
|
+
"\u9AD8\u5F3A\u5EA6\u642C\u7816\u4E0D\u505C\u6B47\uFF0C\u4E0D\u6B62\u5728\u8D76 deadline\uFF0C\u8FD8\u5728\u9ED8\u9ED8\u586B\u56E2\u961F\u7684\u5386\u53F2\u5751\u3002\u8F9B\u82E6\u4E86\u3002",
|
|
866
|
+
"\u63D0\u4EA4\u6570\u91CF\u591A\u5230\u5FC3\u75BC\u3002\u9879\u76EE\u662F\u6301\u4E45\u6218\uFF0C\u8EAB\u4F53\u624D\u662F\u672C\u91D1\uFF0C\u7559\u70B9\u4F59\u91CF\u3002",
|
|
867
|
+
"\u5168\u5929\u5728\u7EBF\u6301\u7EED\u8F93\u51FA\uFF0C\u5927\u5C0F\u9700\u6C42\u4E00\u624B\u5305\u63FD\uFF0C\u56E2\u961F\u8FDB\u5EA6\u6709\u4F60\u515C\u5E95\u3002\u8BB0\u5F97\u591A\u559D\u6C34\uFF0C\u591A\u8D70\u52A8\u3002",
|
|
868
|
+
"\u6574\u5468\u9AD8\u8D1F\u8377\u8F93\u51FA\uFF01\u5DE5\u4F5C\u518D\u91CD\u8981\uFF0C\u4E5F\u522B\u628A\u8EAB\u4F53\u5F53\u4E00\u6B21\u6027\u8017\u6750\u3002"
|
|
869
869
|
];
|
|
870
870
|
var GHOST_CRITIQUES = [
|
|
871
|
-
"\u3010\u5E7D\u7075\u63D0\u4EA4\u9884\u8B66\u3011\u51CC\u6668\
|
|
872
|
-
"\u534A\u591C\
|
|
873
|
-
"\u96F6\u70B9\u8FC7\u540E\u5927\u91CF\u63D0\u4EA4\
|
|
874
|
-
"\
|
|
875
|
-
"\
|
|
876
|
-
"\
|
|
877
|
-
"\u522B\u4EBA\
|
|
878
|
-
];
|
|
879
|
-
var CATEGORY_FIX_CRITIQUES = [
|
|
880
|
-
"\u4F60\u5DF2\u7136\u6210\u4E3A\u56E2\u961F\u4E13\u5C5E\u2018\u804C\u4E1A\u6551\u706B\u961F\u957F\u2019\uFF0C\u6574\u65E5\u6CE1\u5728\u4EE3\u7801\u5E93\u91CC\u8003\u53E4\u6EAF\u6E90\u3001\u7EBF\u4E0A\u7D27\u6025\u6551\u706B\uFF0C\u7CFB\u7EDF\u5E73\u7A33\u8FD0\u884C\u7684\u7A33\u5B9A\u9632\u7EBF\uFF0C\u5168\u7A0B\u5168\u9760\u4F60\u6B7B\u6B7B\u5B88\u4F4F\u3002",
|
|
881
|
-
"\u672C\u6708\u6838\u5FC3\u5DE5\u4F5C\u96C6\u4E2D\u4FEE\u590DBug\uFF0C\u4FEE\u590D\u7C7B\u63D0\u4EA4\u5360\u6BD4\u9AD8\u8FBE %PERCENT%%\u3002\u4E00\u70B9\u70B9\u6E05\u7406\u9648\u5E74\u6280\u672F\u503A\uFF0C\u626B\u6E05\u7CFB\u7EDF\u9690\u85CF\u9690\u60A3\uFF0C\u540C\u65F6\u4E3A\u540E\u7EED\u5F00\u53D1\u540C\u4E8B\u94FA\u5E73\u987A\u7545\u9053\u8DEF\u3002",
|
|
882
|
-
"\u6BCF\u65E5\u5FAA\u73AF\u5F00\u542Ffix\u4FEE\u590D\u6A21\u5F0F\uFF0C\u672C\u6708\u7CFB\u7EDF\u7A33\u5B9A\u5EA6\u5168\u9760\u4F60\u5728\u7EBF\u503C\u5B88\u515C\u5E95\uFF0C\u9ED8\u9ED8\u5904\u7406\u5404\u7C7B\u7A81\u53D1\u5F02\u5E38\uFF0C\u662F\u85CF\u5728\u4EE3\u7801\u80CC\u540E\u65E0\u4EBA\u7559\u610F\u7684\u5E55\u540E\u82F1\u96C4\u3002",
|
|
883
|
-
"\u5F53\u4E4B\u65E0\u6127\u4EE3\u7801\u5E93\u6E05\u9053\u592B\u3001\u7EC8\u6781Bug\u7EC8\u7ED3\u8005\u3002\u6BCF\u4FEE\u590D\u4E00\u5904\u5F02\u5E38\u6F0F\u6D1E\uFF0C\u7CFB\u7EDF\u8FD0\u884C\u9690\u60A3\u5C31\u5C11\u4E00\u5206\uFF0C\u6574\u4E2A\u9879\u76EE\u7684\u8FD0\u884C\u5B89\u5168\u611F\u76F4\u63A5\u62C9\u6EE1\u3002",
|
|
884
|
-
"\u5927\u534A\u7CBE\u529B\u90FD\u6295\u5165\u6545\u969C\u4FEE\u590D\u4E0E\u95EE\u9898\u515C\u5E95\uFF0C\u4E3B\u52A8\u627F\u63A5\u5404\u7C7B\u68D8\u624B\u7EBF\u4E0A\u95EE\u9898\uFF0C\u5E2E\u56E2\u961F\u89C4\u907F\u5927\u91CF\u7EBF\u4E0A\u98CE\u9669\uFF0C\u7E41\u7410\u67AF\u71E5\u7684\u4FEE\u590D\u5DE5\u4F5C\u5168\u9760\u4F60\u625B\u4E0B\u3002",
|
|
885
|
-
"\u4E13\u6CE8\u515C\u5E95\u7EF4\u7A33\u4E00\u6574\u6708\uFF0C\u6BD4\u8D77\u65B0\u589E\u529F\u80FD\u66F4\u5728\u610F\u7CFB\u7EDF\u7A33\u5B9A\uFF0C\u65E0\u6570\u7EC6\u788E\u5C0Fbug\u88AB\u9010\u4E00\u6E05\u96F6\uFF0C\u6709\u4F60\u5728\uFF0C\u5927\u5BB6\u8FED\u4EE3\u65B0\u9700\u6C42\u65F6\u90FD\u683C\u5916\u5B89\u5FC3\u3002",
|
|
886
|
-
"\u957F\u671F\u6DF1\u8015\u95EE\u9898\u4FEE\u590D\u8D5B\u9053\uFF0C\u8010\u5FC3\u8FFD\u6EAF\u6BCF\u4E00\u5904\u62A5\u9519\u6839\u6E90\uFF0C\u4E0D\u6577\u884D\u4E0D\u7CCA\u5F04\uFF0C\u7528\u4E00\u6B21\u6B21fix\u7B51\u7262\u9879\u76EE\u5E95\u5C42\u7A33\u5B9A\u6027\uFF0C\u4F4E\u8C03\u5374\u4E0D\u53EF\u6216\u7F3A\u3002"
|
|
887
|
-
];
|
|
888
|
-
var CATEGORY_FEAT_CRITIQUES = [
|
|
889
|
-
"\u672C\u6708\u65B0\u589E\u529F\u80FDFeat\u63D0\u4EA4\u5360\u6BD4\u9AD8\u8FBE %PERCENT%%\uFF0C\u5168\u65B0\u9700\u6C42\u4E00\u9879\u63A5\u4E00\u9879\u843D\u5730\uFF0C\u5F00\u53D1\u706B\u529B\u5168\u7A0B\u62C9\u6EE1\uFF0C\u6574\u6761\u4E1A\u52A1\u7EBF\u90FD\u56E0\u4E3A\u4F60\u7684\u8F93\u51FA\u98DE\u901F\u5411\u524D\u63A8\u8FDB\uFF01",
|
|
890
|
-
"\u6807\u51C6\u65B0\u529F\u80FD\u72C2\u9B54\u672C\u4EBA\uFF01\u4E0D\u505C\u627F\u63A5\u843D\u5730\u5404\u7C7B\u5168\u65B0\u9700\u6C42\u4E0E\u4E1A\u52A1\u6A21\u5757\uFF0C\u4EE3\u7801\u8F93\u51FA\u91CF\u76F4\u63A5\u62C9\u6EE1\uFF0C\u95F2\u6687\u4E4B\u4F59\u4E5F\u53EF\u4EE5\u56DE\u5934\u7B80\u5355\u6253\u78E8\u7EC6\u8282\u4F18\u5316\u4F53\u9A8C\u3002\u8F9B\u82E6\u4F60\u6301\u7EED\u9AD8\u5F3A\u5EA6\u5F00\u53D1\uFF01",
|
|
891
|
-
"\u75AF\u72C2\u6301\u7EED\u8F93\u51FAfeature\u65B0\u529F\u80FD\uFF0C\u9879\u76EE\u4EE3\u7801\u5E93\u7684\u4E1A\u52A1\u8FB9\u754C\u88AB\u4F60\u4E00\u6B21\u6B21\u5411\u5916\u62D3\u5BBD\uFF0C\u6562\u4E8E\u5F00\u62D3\u65B0\u4E1A\u52A1\u573A\u666F\uFF0C\u59A5\u59A5\u56E2\u961F\u91CC\u7684\u529F\u80FD\u5F00\u62D3\u5148\u950B\u3002",
|
|
892
|
-
"\u6574\u6708\u4E3B\u653B\u65B0\u6A21\u5757\u3001\u65B0\u6D41\u7A0B\u5F00\u53D1\uFF0C\u6E90\u6E90\u4E0D\u65AD\u4EA4\u4ED8\u53EF\u7528\u65B0\u80FD\u529B\uFF0C\u4E1A\u52A1\u62D3\u5C55\u5168\u9760\u4F60\u652F\u6491\uFF0C\u5F00\u62D3\u521B\u65B0\u80FD\u529B\u62C9\u6EE1\uFF0C\u5FD9\u5B8C\u53EF\u4EE5\u9002\u5F53\u653E\u7F13\u8282\u594F\u4F11\u6574\u4E00\u4E0B\u3002",
|
|
893
|
-
"\u51E0\u4E4E\u5927\u534A\u63D0\u4EA4\u90FD\u7528\u4E8E\u642D\u5EFA\u5168\u65B0\u4E1A\u52A1\u529F\u80FD\uFF0C\u4E3B\u52A8\u5543\u4E0B\u590D\u6742\u65B0\u9700\u6C42\uFF0C\u4E0D\u65AD\u4E30\u5BCC\u4EA7\u54C1\u80FD\u529B\uFF0C\u56E2\u961F\u4E1A\u52A1\u7248\u56FE\u7684\u6269\u5F20\u79BB\u4E0D\u5F00\u4F60\u7684\u5168\u529B\u8F93\u51FA\u3002",
|
|
894
|
-
"\u4EE5\u642D\u5EFA\u65B0\u529F\u80FD\u4E3A\u6838\u5FC3\u5F00\u53D1\u4E3B\u7EBF\uFF0C\u4ECE0\u52301\u642D\u5EFA\u5404\u7C7B\u4E1A\u52A1\u6A21\u5757\uFF0C\u843D\u5730\u6548\u7387\u51FA\u4F17\uFF0C\u6E90\u6E90\u4E0D\u65AD\u4E3A\u4EA7\u54C1\u6CE8\u5165\u65B0\u80FD\u529B\uFF0C\u5F00\u62D3\u578B\u5F00\u53D1\u9009\u624B\u8BA4\u8BC1\u3002",
|
|
895
|
-
"\u4E13\u6CE8\u521B\u65B0\u4E1A\u52A1\u8FED\u4EE3\uFF0C\u5404\u7C7B\u65B0\u9700\u6C42\u5FEB\u901F\u843D\u5730\u4E0A\u7EBF\uFF0C\u6301\u7EED\u7ED9\u4EA7\u54C1\u53E0\u52A0\u65B0\u7279\u6027\uFF0C\u63A8\u8FDB\u4E1A\u52A1\u589E\u957F\u529F\u4E0D\u53EF\u6CA1\uFF0C\u957F\u671F\u9AD8\u5F3A\u5EA6\u5F00\u53D1\u8BB0\u5F97\u52B3\u9038\u7ED3\u5408\u3002"
|
|
896
|
-
];
|
|
897
|
-
var CATEGORY_CHORE_CRITIQUES = [
|
|
898
|
-
"\u65E5\u5E38\u7EF4\u62A4Chore\u3001\u6587\u6863Docs\u7C7B\u63D0\u4EA4\u5360\u6BD4 %PERCENT%%\u3002\u5B8C\u6574\u6210\u719F\u7684\u9879\u76EE\u4E0D\u6B62\u4F9D\u9760\u4E1A\u52A1\u4EE3\u7801\uFF0C\u66F4\u9700\u8981\u6709\u4EBA\u6C89\u6DC0\u6E05\u6670\u6587\u6863\u89C4\u8303\uFF0C\u524D\u4EBA\u7EC6\u81F4\u8015\u8018\uFF0C\u540E\u4EBA\u5F00\u53D1\u624D\u80FD\u5C11\u8D70\u5F2F\u8DEF\u3002",
|
|
899
|
-
"\u6BCF\u65E5\u57CB\u5934\u4FEE\u6539\u914D\u7F6E\u6587\u4EF6\u3001\u5B8C\u5584\u6CE8\u91CA\u6587\u6863\u3001\u7EDF\u4E00\u4EE3\u7801\u683C\u5F0F\u5316\uFF0C\u4F60\u582A\u79F0\u4EE3\u7801\u5E93\u4E13\u5C5E\u56ED\u4E01\u3002\u8FD9\u7C7B\u5DE5\u4F5C\u770B\u4F3C\u4E0D\u8D77\u773C\uFF0C\u5374\u80FD\u6301\u7EED\u7EF4\u62A4\u9879\u76EE\u5065\u5EB7\u5EA6\u4E0E\u4EE3\u7801\u53EF\u8BFB\u6027\u3002",
|
|
900
|
-
"Chore\u4E0E\u6587\u6863\u7C7B\u63D0\u4EA4\u5360\u6BD4\u5341\u5206\u7A81\u51FA\uFF0C\u9879\u76EE\u80FD\u591F\u957F\u671F\u7A33\u5B9A\u8FED\u4EE3\u8FD0\u884C\uFF0C\u79BB\u4E0D\u5F00\u8FD9\u4E9B\u4F4E\u8C03\u7410\u788E\u3001\u5374\u8D77\u5230\u5173\u952E\u652F\u6491\u4F5C\u7528\u7684\u65E5\u5E38\u7EF4\u62A4\u5DE5\u4F5C\u3002",
|
|
901
|
-
"\u4E3B\u52A8\u5305\u63FD\u9879\u76EE\u6742\u9879\u7EF4\u62A4\u5DE5\u4F5C\uFF1A\u66F4\u65B0\u90E8\u7F72\u914D\u7F6E\u3001\u8865\u5168\u63A5\u53E3\u6587\u6863\u3001\u7EDF\u4E00\u4EE3\u7801\u683C\u5F0F\uFF0C\u9ED8\u9ED8\u4F18\u5316\u56E2\u961F\u534F\u4F5C\u73AF\u5883\uFF0C\u51CF\u5C11\u6240\u6709\u4EBA\u540E\u7EED\u5F00\u53D1\u6C9F\u901A\u6210\u672C\u3002",
|
|
902
|
-
"\u4E0D\u8FFD\u9010\u4EAE\u773C\u65B0\u529F\u80FD\u5F00\u53D1\uFF0C\u6DF1\u8015\u9879\u76EE\u57FA\u7840\u7EF4\u62A4\u5DE5\u4F5C\uFF0C\u89C4\u6574\u76EE\u5F55\u3001\u8865\u5145\u8BF4\u660E\u3001\u7EDF\u4E00\u89C4\u8303\uFF0C\u4E00\u70B9\u70B9\u964D\u4F4E\u9879\u76EE\u7EF4\u62A4\u6210\u672C\uFF0C\u662F\u56E2\u961F\u9690\u6027\u57FA\u77F3\u3002",
|
|
903
|
-
"\u628A\u4F18\u5316\u5DE5\u7A0B\u73AF\u5883\u3001\u5B8C\u5584\u9879\u76EE\u6587\u6863\u5F53\u6210\u65E5\u5E38\uFF0C\u6301\u7EED\u89C4\u6574\u4EE3\u7801\u5E93\u98CE\u8C8C\uFF0C\u7410\u788E\u91CD\u590D\u7684\u7EF4\u62A4\u5DE5\u4F5C\u8010\u5FC3\u5B8C\u6210\uFF0C\u5927\u5E45\u63D0\u5347\u6574\u4E2A\u56E2\u961F\u7684\u534F\u4F5C\u6548\u7387\u3002",
|
|
904
|
-
"\u4E13\u6CE8\u9879\u76EE\u57FA\u5EFA\u7EF4\u62A4\u8D5B\u9053\uFF0C\u5404\u7C7B\u914D\u7F6E\u3001\u6587\u6863\u3001\u683C\u5F0F\u5316\u8C03\u6574\u4E00\u624B\u5305\u529E\uFF0C\u9ED8\u9ED8\u4F18\u5316\u5F00\u53D1\u73AF\u5883\uFF0C\u770B\u4F3C\u5E73\u6DE1\u7684\u63D0\u4EA4\uFF0C\u5B9E\u5219\u957F\u671F\u9020\u798F\u5168\u4F53\u5F00\u53D1\u4EBA\u5458\u3002"
|
|
871
|
+
"\u3010\u5E7D\u7075\u63D0\u4EA4\u9884\u8B66\u3011\u51CC\u6668\u7684 Commit \u6CDB\u7740\u6E05\u51B7\u7684\u5149\u3002\u9002\u5EA6\u71AC\u591C\u53EF\u4EE5\uFF0C\u4F46\u7761\u89C9\u4E5F\u662F\u6838\u5FC3\u6280\u80FD\u3002",
|
|
872
|
+
"\u534A\u591C\u8FD8\u5728 push\uFF0C\u662F\u8DDF\u540C\u4E8B\u5BF9\u7EBF\uFF0C\u8FD8\u662F\u5355\u7EAF\u4EAB\u53D7\u51CC\u6668\u65E0\u4EBA\u6253\u6270\u7684\u7075\u611F\u7206\u53D1\uFF1F",
|
|
873
|
+
"\u96F6\u70B9\u8FC7\u540E\u5927\u91CF\u63D0\u4EA4\u88AB\u6355\u83B7\uFF01\u71AC\u591C\u7A33\u4F4F\u8FDB\u5EA6\u7684\u6837\u5B50\u5F88\u62FC\uFF0C\u4F46\u8EAB\u4F53\u4E5F\u9700\u8981\u5145\u7535\u3002",
|
|
874
|
+
"\u8FD8\u5728\u901A\u5BB5\u786C\u809D\uFF1FCI \u673A\u5668\u4EBA\u90FD\u60F3\u4E0B\u73ED\u4E86\uFF0C\u5199\u5B8C\u8D76\u7D27\u5B58\u76D8\u4F11\u606F\u3002",
|
|
875
|
+
"\u51CC\u6668\u4E13\u5C5E\u5F00\u53D1\u8005\uFF0C\u767D\u5929\u88AB\u7410\u4E8B\u7F20\u8EAB\uFF0C\u53EA\u80FD\u6DF1\u591C\u5543\u786C\u9AA8\u5934\u3002\u957F\u671F\u71AC\u591C\u4F24\u7684\u662F\u4F60\u81EA\u5DF1\u3002",
|
|
876
|
+
"\u6DF1\u591C\u72EC\u5B88\u5DE5\u4F4D\uFF0C\u6BCF\u6761\u51CC\u6668\u63D0\u4EA4\u90FD\u662F\u5361\u70B9\u7684\u4EE3\u4EF7\u3002\u4E13\u6CE8\u503C\u5F97\u80AF\u5B9A\uFF0C\u4F46\u522B\u5929\u5929\u4FEE\u4ED9\u3002",
|
|
877
|
+
"\u522B\u4EBA\u5DF2\u5165\u68A6\u4E61\uFF0C\u4F60\u7684 Git \u8FD8\u5728\u66F4\u65B0\u3002\u6DF1\u591C\u9002\u5408\u653B\u575A\uFF0C\u8BB0\u5F97\u8BBE\u4E2A\u95F9\u949F\uFF0C\u5230\u70B9\u4E0B\u7EBF\u3002"
|
|
905
878
|
];
|
|
906
879
|
var GENERAL_CRITIQUES = [
|
|
907
|
-
"\
|
|
908
|
-
"\
|
|
909
|
-
"
|
|
910
|
-
"\
|
|
911
|
-
"\
|
|
912
|
-
"\
|
|
913
|
-
"Git\u5386\u53F2\u8282\u594F\
|
|
880
|
+
"\u6574\u5468\u63D0\u4EA4\u66F2\u7EBF\u5E73\u7F13\u89C4\u5F8B\uFF0C\u6CE2\u52A8\u96C6\u4E2D\u5728\u6668\u4F1A\u524D\u3001\u4E0B\u73ED\u524D\u3002\u62FF\u634F\u4E86\u81EA\u5DF1\u7684\u8282\u594F\uFF0C\u677E\u5F1B\u53C8\u9AD8\u6548\u3002",
|
|
881
|
+
"\u63D0\u4EA4\u65F6\u95F4\u7279\u5F81\u9C9C\u660E\uFF1A\u4E0A\u5348\u9759\u5982\u5904\u5B50\u6C89\u6DC0\u601D\u8DEF\uFF0C\u4E0B\u5348\u52A8\u5982\u8131\u5154\u96C6\u4E2D\u8F93\u51FA\u3002\u7CBE\u51C6\u9501\u5B9A\u9AD8\u6548\u65F6\u6BB5\u3002",
|
|
882
|
+
"Git Log \u50CF\u9876\u7EA7\u8C03\u5EA6\u5927\u5E08\u7684\u4F5C\u54C1\uFF0C\u4E0D\u75BE\u4E0D\u5F90\u3001\u5F20\u5F1B\u6709\u5EA6\u3002\u5076\u5C14\u843D\u5B50\uFF0C\u5374\u6070\u5230\u597D\u5904\u5B8C\u6210\u5168\u90E8\u3002",
|
|
883
|
+
"\u63D0\u4EA4\u6570\u636E\u5747\u8861\u7A33\u5B9A\uFF0C\u6BCF\u65E5\u5747\u5300\u8F93\u51FA\uFF0C\u4E0D\u7206\u809D\u4E0D\u7A7A\u767D\u3002\u7A33\u624E\u7A33\u6253\uFF0C\u662F\u56E2\u961F\u6700\u5B89\u5FC3\u7684\u5B9A\u6D77\u795E\u9488\u3002",
|
|
884
|
+
"\u8282\u594F\u5F20\u5F1B\u6709\u5EA6\uFF0C\u4E0D\u731B\u51B2\u4E0D\u62D6\u5EF6\u3002\u6BCF\u65E5\u7A33\u5B9A\u4EA7\u51FA\u5C11\u91CF\u6709\u6548\u63D0\u4EA4\uFF0C\u7EC6\u6C34\u957F\u6D41\u5B8C\u6210\u89C4\u5212\u3002",
|
|
885
|
+
"\u5F00\u53D1\u65F6\u95F4\u89C4\u5F8B\uFF0C\u61C2\u5F97\u62C6\u5206\u5DE5\u4F5C\u91CF\u5747\u5300\u5206\u644A\u3002\u62D2\u7EDD\u7A81\u51FB\uFF0C\u5E73\u7F13\u8F93\u51FA\uFF0C\u6709\u6548\u964D\u4F4E\u81EA\u8EAB\u538B\u529B\u3002",
|
|
886
|
+
"Git \u5386\u53F2\u8282\u594F\u8212\u670D\uFF0C\u65E0\u6781\u7AEF\u6CE2\u52A8\u3002\u957F\u671F\u5747\u8861\u5F00\u53D1\uFF0C\u4FDD\u8BC1\u63A8\u8FDB\uFF0C\u4E5F\u4E0D\u9677\u5165\u6301\u7EED\u5185\u8017\u3002"
|
|
914
887
|
];
|
|
915
888
|
var TAG_FISH_MASTER_CRITIQUES = [
|
|
916
|
-
"\u6478\u9C7C\u5B97\u5E08\u79F0\u53F7\u5DF2\u89E3\u9501\uFF01\u628A\u52B3\u9038\u7ED3\u5408\u53D1\u6325\u5230\u4E86\u6781\u81F4\uFF0C\
|
|
917
|
-
"\u6478\u9C7C\u5B97\u5E08\uFF0C\u6CD5\u529B\u65E0\u8FB9\uFF01\u80FD\u628A\u6BCF\u65E5\u751F\u4EA7\u529B\u7CBE\u786E\u63A7\u5236\u5728\u521A\u521A\u597D\u7684\
|
|
918
|
-
"\u606D\u559C\u83B7\u5F97\u300E\u6478\u9C7C\u5B97\u5E08\u300F\u6210\u5C31\uFF01Git \u7684\
|
|
889
|
+
"\u6478\u9C7C\u5B97\u5E08\u79F0\u53F7\u5DF2\u89E3\u9501\uFF01\u628A\u52B3\u9038\u7ED3\u5408\u53D1\u6325\u5230\u4E86\u6781\u81F4\uFF0C\u9AD8\u6548\u5B8C\u6210\u672C\u804C\u5DE5\u4F5C\u4E4B\u4F59\uFF0C\u5468\u672B\u51FA\u884C\u3001\u4E0B\u5348\u8336\u6E05\u5355\u65E9\u5DF2\u89C4\u5212\u5B8C\u6BD5\uFF0C\u677E\u5F1B\u611F\u76F4\u63A5\u62C9\u6EE1\u3002",
|
|
890
|
+
"\u6478\u9C7C\u5B97\u5E08\uFF0C\u6CD5\u529B\u65E0\u8FB9\uFF01\u80FD\u628A\u6BCF\u65E5\u751F\u4EA7\u529B\u7CBE\u786E\u63A7\u5236\u5728\u521A\u521A\u597D\u7684\u5E73\u8861\u70B9\uFF0C\u4E0D\u591A\u4E0D\u5C11\u521A\u597D\u8FBE\u6807\uFF0C\u8FD9\u4EFD\u6536\u653E\u81EA\u5982\u7684\u804C\u573A\u5E73\u8861\u672F\uFF0C\u662F\u8BA9\u4EBA\u7FA1\u6155\u7684\u9876\u7EA7\u804C\u573A\u8D85\u80FD\u529B\u3002",
|
|
891
|
+
"\u606D\u559C\u83B7\u5F97\u300E\u6478\u9C7C\u5B97\u5E08\u300F\u6210\u5C31\uFF01Git \u7684\u7559\u767D\u662F\u4F60\u7684\u4E13\u5C5E\u901A\u884C\u8BC1\uFF0C\u5DE5\u4F5C\u8282\u594F\u62FF\u634F\u5F97\u6070\u5230\u597D\u5904\uFF0C\u8BE5\u4EA7\u51FA\u65F6\u4E0D\u6389\u94FE\u5B50\uFF0C\u8BE5\u653E\u677E\u65F6\u7EDD\u4E0D\u5185\u8017\uFF0C\u5B8C\u7F8E\u8282\u594F\u638C\u63A7\u8005\u975E\u4F60\u83AB\u5C5E\u3002",
|
|
919
892
|
"\u9876\u7EA7\u6478\u9C7C\u5B97\u5E08\u767B\u573A\uFF01\u4E0A\u73ED\u72B6\u6001\u677E\u5F1B\u6709\u5EA6\uFF0C\u4EFB\u52A1\u6309\u65F6\u843D\u5730\u7EDD\u4E0D\u62D6\u6C93\uFF0C\u5176\u4F59\u65F6\u95F4\u5B89\u5FC3\u653E\u7A7A\u5145\u7535\uFF0C\u61C2\u5F97\u9002\u65F6\u653E\u677E\u624D\u80FD\u957F\u4E45\u4FDD\u6301\u9AD8\u6548\uFF0C\u667A\u6167\u6253\u5DE5\u4EBA\u6A21\u677F\u6709\u4E86\u3002",
|
|
920
|
-
"\u522B\u4EBA\
|
|
893
|
+
"\u522B\u4EBA\u5306\u5FD9\u57CB\u5934\u731B\u6572\uFF0C\u4F60\u4ECE\u5BB9\u7A33\u6B65\u5B8C\u6210\u672C\u804C\uFF0C\u6478\u9C7C\u5B97\u5E08\u7684\u7CBE\u9AD3\u4E0D\u662F\u6446\u70C2\uFF0C\u800C\u662F\u9AD8\u6548\u5B8C\u5DE5\u540E\u5B89\u5FC3\u4EAB\u53D7\u95F2\u6687\uFF0C\u5E73\u8861\u5DE5\u4F5C\u4E0E\u751F\u6D3B\u8FD9\u5757\u88AB\u4F60\u73A9\u660E\u767D\u4E86\u3002"
|
|
921
894
|
];
|
|
922
895
|
var TAG_VOLUME_KING_CRITIQUES = [
|
|
923
|
-
"\u7206\u809D\u6218\u795E\uFF0C\u6050\u6016\u5982\u65AF\uFF01\u4F60\u7684 Git \u65F6\u95F4\u7EBF\u5BC6\u5BC6\u9EBB\u9EBB\
|
|
896
|
+
"\u7206\u809D\u6218\u795E\uFF0C\u6050\u6016\u5982\u65AF\uFF01\u4F60\u7684 Git \u65F6\u95F4\u7EBF\u5BC6\u5BC6\u9EBB\u9EBB\uFF0C\u63D0\u4EA4\u5BC6\u5EA6\u60CA\u4EBA\uFF0C\u5168\u5929\u4E0D\u95F4\u65AD\u6301\u7EED\u8F93\u51FA\uFF0C\u5EFA\u8BAE\u7ED9\u952E\u76D8\u653E\u4E2A\u5047\uFF0C\u957F\u671F\u9AD8\u5F3A\u5EA6\u8F93\u51FA\u771F\u7684\u8F9B\u82E6\u4E86\uFF01",
|
|
924
897
|
"\u7206\u809D\u6218\u795E\u5C31\u4F4D\uFF01\u5355\u4EBA\u4EA7\u51FA\u76F4\u63A5\u9876\u8D77\u534A\u652F\u5C0F\u961F\u7684\u5DE5\u4F5C\u91CF\uFF0C\u5BC6\u5BC6\u9EBB\u9EBB\u7684\u63D0\u4EA4\u8BB0\u5F55\u8089\u773C\u53EF\u89C1\uFF0C\u98DE\u901F\u6572\u51FB\u7684\u952E\u76D8\u90FD\u5FEB\u6572\u51FA\u6B8B\u5F71\uFF0C\u656C\u4E1A\u7A0B\u5EA6\u76F4\u63A5\u62C9\u6EE1\u3002",
|
|
925
|
-
"\u522B\u4EBA\u4E0B\u73ED\u4F11\u606F\u8FFD\u5267\uFF0C\u4F60\u5728\u6301\u7EED commit\uFF1B\u522B\u4EBA\u6DF1\u591C\u5B89\u7A33\u7761\u89C9\uFF0C\u4F60\u8FD8\u5728\u8FDC\u7A0B push \u8FED\u4EE3\u3002\
|
|
898
|
+
"\u522B\u4EBA\u4E0B\u73ED\u4F11\u606F\u8FFD\u5267\uFF0C\u4F60\u5728\u6301\u7EED commit\uFF1B\u522B\u4EBA\u6DF1\u591C\u5B89\u7A33\u7761\u89C9\uFF0C\u4F60\u8FD8\u5728\u8FDC\u7A0B push \u8FED\u4EE3\u3002\u7206\u809D\u6218\u795E\u5F53\u4E4B\u65E0\u6127\uFF01\u4F46\u7A0B\u5E8F\u7A33\u5B9A\u8FD0\u884C\u7684\u540C\u65F6\uFF0C\u4F60\u4E5F\u8981\u597D\u597D\u5403\u996D\u4F11\u606F\u3002",
|
|
926
899
|
"\u5168\u65F6\u6BB5\u5728\u7EBF\u7206\u809D\u9009\u624B\u4E0A\u7EBF\uFF0C\u4ECE\u65E9\u5230\u665A\u6301\u7EED\u66F4\u65B0\u8FED\u4EE3\uFF0C\u6BCF\u4E00\u6761\u63D0\u4EA4\u8BB0\u5F55\u90FD\u662F\u9ED8\u9ED8\u4ED8\u51FA\u7684\u8BC1\u660E\uFF0C\u56E2\u961F\u79BB\u4E0D\u5F00\u4F60\u7684\u5F3A\u529B\u8F93\u51FA\uFF0C\u8BB0\u5F97\u62BD\u7A7A\u7AD9\u8D77\u6765\u6D3B\u52A8\u8EAB\u4F53\u3001\u591A\u559D\u6E29\u6C34\u3002",
|
|
927
900
|
"\u63D0\u4EA4\u91CF\u65AD\u5C42\u9886\u5148\u5168\u573A\u7684\u7206\u809D\u5927\u4F6C\uFF0C\u5927\u5C0F\u9700\u6C42\u7EDF\u7EDF\u5305\u63FD\u843D\u5730\uFF0C\u4E3A\u9879\u76EE\u63A8\u8FDB\u7ACB\u4E0B\u6C57\u9A6C\u529F\u52B3\uFF0C\u9AD8\u5F3A\u5EA6\u8F93\u51FA\u56FA\u7136\u503C\u5F97\u79F0\u8D5E\uFF0C\u5343\u4E07\u4E0D\u8981\u957F\u671F\u900F\u652F\u81EA\u5DF1\u7684\u8EAB\u4F53\u54E6\u3002"
|
|
928
901
|
];
|
|
929
902
|
var TAG_NIGHT_OWL_CRITIQUES = [
|
|
930
|
-
"\u6DF1\u591C\u4FEE\u4ED9\u8005\uFF0C\u6CD5\u529B\u65E0\u8FB9\uFF01\u51CC\u6668\u5B89\u9759\u65F6\u6BB5\u6572\u51FA\u7684\u4EE3\u7801\u81EA\u5E26\
|
|
931
|
-
"\
|
|
932
|
-
"\u4FEE\u4ED9\u5927\u80FD\
|
|
903
|
+
"\u6DF1\u591C\u4FEE\u4ED9\u8005\uFF0C\u6CD5\u529B\u65E0\u8FB9\uFF01\u51CC\u6668\u5B89\u9759\u65F6\u6BB5\u6572\u51FA\u7684\u4EE3\u7801\u81EA\u5E26\u4E13\u6CE8\u52A0\u6210\uFF0C\u65E0\u4EBA\u6253\u6270\u7684\u6DF1\u591C\u7075\u611F\u7206\u53D1\uFF0C\u8FDE\u601D\u8DEF\u8FD0\u8F6C\u7684\u901F\u5EA6\u90FD\u4EFF\u4F5B\u53D8\u5FEB\u4E86\u4E0D\u5C11\u3002",
|
|
904
|
+
"\u6DF1\u591C\u4FEE\u4ED9\u8005\u7684\u4E13\u5C5E\u9EC4\u91D1\u5DE5\u4F5C\u65F6\u6BB5\u9501\u5B9A 00:00 ~ 05:00\u3002\u767D\u5929\u5DE5\u4F4D\u6C89\u6DC0\u68B3\u7406\u9700\u6C42\u79EF\u6512\u7075\u611F\uFF0C\u6DF1\u591C\u72EC\u5904\u65F6\u96C6\u4E2D\u8F93\u51FA\u843D\u5730\uFF0C\u663C\u591C\u53CC\u65F6\u6BB5\u6A21\u5F0F\u65E0\u7F1D\u81EA\u7531\u5207\u6362\u3002",
|
|
905
|
+
"\u4FEE\u4ED9\u5927\u80FD\u8BA4\u8BC1\uFF01\u4E00\u6761\u6761\u51CC\u6668Git\u8BB0\u5F55\u9ED8\u9ED8\u89C1\u8BC1\u4F60\u7684\u575A\u6301\u4E0E\u4E13\u6CE8\uFF0C\u6DF1\u591C\u5B89\u9759\u73AF\u5883\u66F4\u5BB9\u6613\u7406\u6E05\u590D\u6742\u903B\u8F91\u3002\u4E0D\u8FC7\u9002\u5EA6\u4FEE\u4ED9\u5373\u53EF\uFF0C\u8BB0\u5F97\u9884\u7559\u5145\u8DB3\u7761\u7720\u65F6\u95F4\u6062\u590D\u7CBE\u529B\u3002",
|
|
933
906
|
"\u504F\u7231\u6DF1\u591C\u72EC\u5904\u7F16\u7801\u7684\u4FEE\u4ED9\u9009\u624B\uFF0C\u4E07\u7C41\u4FF1\u5BC2\u7684\u65F6\u5019\u601D\u8DEF\u683C\u5916\u6E05\u6670\uFF0C\u5F88\u591A\u68D8\u624B\u96BE\u9898\u90FD\u5728\u51CC\u6668\u88AB\u4F60\u9010\u4E2A\u653B\u514B\uFF0C\u9AD8\u6548\u591C\u95F4\u9009\u624B\u8BA4\u8BC1\uFF0C\u522B\u957F\u671F\u71AC\u5230\u5929\u5149\u624D\u4F11\u606F\u3002",
|
|
934
907
|
"\u767D\u65E5\u5904\u7406\u6C9F\u901A\u7410\u4E8B\uFF0C\u6DF1\u591C\u6C89\u6D78\u5F0F\u4E13\u6CE8\u7F16\u7801\uFF0C\u6DF1\u591C\u4FEE\u4ED9\u6A21\u5F0F\u9002\u914D\u5EA6\u6EE1\u5206\uFF0C\u9760\u7740\u6DF1\u591C\u5B89\u9759\u73AF\u5883\u653B\u514B\u5927\u91CF\u96BE\u70B9\uFF0C\u8BB0\u5F97\u5B9A\u65F6\u653E\u4E0B\u7535\u8111\uFF0C\u4FDD\u8BC1\u5145\u8DB3\u7761\u7720\u517B\u62A4\u8EAB\u4F53\u3002"
|
|
935
908
|
];
|
|
@@ -941,86 +914,57 @@ var TAG_BUILDER_CRITIQUES = [
|
|
|
941
914
|
"\u65E5\u590D\u4E00\u65E5\u7A33\u5B9A\u8F93\u51FA\u7684\u57FA\u5EFA\u9009\u624B\uFF0C\u5927\u5C0F\u7410\u788E\u4E1A\u52A1\u9700\u6C42\u5168\u90E8\u59A5\u5584\u627F\u63A5\uFF0C\u505A\u4E8B\u7EC6\u81F4\u9760\u8C31\u4E0D\u51FA\u7EB0\u6F0F\uFF0C\u56E2\u961F\u57FA\u77F3\u822C\u7684\u5B58\u5728\uFF0C\u4F60\u7684\u8E0F\u5B9E\u4ED8\u51FA\u6240\u6709\u4EBA\u90FD\u770B\u5728\u773C\u91CC\u3002"
|
|
942
915
|
];
|
|
943
916
|
var TAG_BURST_CODER_CRITIQUES = [
|
|
944
|
-
"\u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458\u767B\u573A\uFF01\u5355\u6B21\u8D85\u5927\u7BC7\u5E45Git Diff\u76F4\u63A5\u62C9\u6EE1\uFF0C\u8D1F\u8D23review\u7684\u540C\u4E8B\
|
|
945
|
-
"\u4E00\u628A\u68AD\u54C8\u786C\u6838\u73A9\u5BB6\uFF01\u6574\u5957\u9700\u6C42\u903B\u8F91\u5168\u90E8\u6574\u5408\u8FDB\u5355\u6B21commit\u4E00\u6B21\u6027\u4EA4\u4ED8\uFF0C\u5B8C\u6574\u65B9\u6848\u65E9\u5728\u8111\u6D77\u4E2D\u6784\u601D\u6210\u578B\uFF0C\u76F4\u63A5\u4E00\u6CE2\u4E1D\
|
|
917
|
+
"\u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458\u767B\u573A\uFF01\u5355\u6B21\u8D85\u5927\u7BC7\u5E45Git Diff\u76F4\u63A5\u62C9\u6EE1\uFF0C\u8D1F\u8D23review\u7684\u540C\u4E8B\u53EF\u4EE5\u6CE1\u4E0A\u4E00\u676F\u70ED\u8336\uFF0C\u51C6\u5907\u9759\u5FC3\u7814\u8BFB\u4F60\u4E00\u6B21\u6027\u843D\u5730\u7684\u5B8C\u6574\u903B\u8F91\u3002",
|
|
918
|
+
"\u4E00\u628A\u68AD\u54C8\u786C\u6838\u73A9\u5BB6\uFF01\u6574\u5957\u9700\u6C42\u903B\u8F91\u5168\u90E8\u6574\u5408\u8FDB\u5355\u6B21commit\u4E00\u6B21\u6027\u4EA4\u4ED8\uFF0C\u5B8C\u6574\u65B9\u6848\u65E9\u5728\u8111\u6D77\u4E2D\u6784\u601D\u6210\u578B\uFF0C\u76F4\u63A5\u4E00\u6CE2\u4E1D\u6ED1\u63A8\u8FDB\u5B8C\u6574\u843D\u5730\uFF0C\u6548\u7387\u60CA\u4EBA\u3002",
|
|
946
919
|
"\u4E00\u628A\u68AD\u54C8\u4EE3\u7801\u827A\u672F\u5BB6\uFF01\u4F60\u7684\u6BCF\u4E00\u6B21\u63D0\u4EA4\u90FD\u50CF\u4E00\u7BC7\u5185\u5BB9\u5B8C\u6574\u903B\u8F91\u95ED\u73AF\u7684\u4E2D\u7BC7\u6280\u672F\u6587\u7A3F\uFF0C\u5E73\u65F6\u5C11\u6709\u96F6\u6563\u5C0F\u6539\u52A8\uFF0C\u4E00\u65E6\u51FA\u624B\u4FBF\u662F\u5B8C\u6574\u529F\u80FD\u5927\u66F4\u65B0\uFF0C\u4E0D\u9E23\u5219\u5DF2\u4E00\u9E23\u60CA\u4EBA\u3002",
|
|
947
|
-
"\u4E60\u60EF\u6574\u4F53\u6784\u601D\u5B8C\u6574\u518D\u7EDF\u4E00\u63D0\u4EA4\u7684\u68AD\u54C8\u5927\u4F6C\uFF0C\u7701\u53BB\u9891\u7E41\u788E\u7247\u5316\u63D0\u4EA4\uFF0C\u6574\u5957\u529F\u80FD\u4E00\u6B21\u6027\u843D\u5730\uFF0C\u903B\u8F91\u8FDE\u8D2F\u5B8C\u6574\uFF0C\
|
|
920
|
+
"\u4E60\u60EF\u6574\u4F53\u6784\u601D\u5B8C\u6574\u518D\u7EDF\u4E00\u63D0\u4EA4\u7684\u68AD\u54C8\u5927\u4F6C\uFF0C\u7701\u53BB\u9891\u7E41\u788E\u7247\u5316\u63D0\u4EA4\uFF0C\u6574\u5957\u529F\u80FD\u4E00\u6B21\u6027\u843D\u5730\uFF0C\u903B\u8F91\u8FDE\u8D2F\u5B8C\u6574\uFF0C\u8BC4\u5BA1\u9636\u6BB5\u9700\u8981\u591A\u82B1\u4E00\u70B9\u65F6\u95F4\u7814\u8BFB\uFF0C\u4F46\u903B\u8F91\u8FDE\u8D2F\u5B8C\u6574\u503C\u5F97\u6295\u5165\u3002",
|
|
948
921
|
"\u4E00\u6B21\u6027\u641E\u5B9A\u6574\u5957\u4E1A\u52A1\u6A21\u5757\u7684\u68AD\u54C8\u5927\u795E\uFF0C\u64C5\u957F\u5168\u76D8\u68B3\u7406\u9700\u6C42\u540E\u96C6\u4E2D\u8F93\u51FA\uFF0C\u7701\u53BB\u53CD\u590D\u62C6\u5206\u63D0\u4EA4\u7684\u7E41\u7410\uFF0C\u5927\u5C40\u89C2\u62C9\u6EE1\uFF0C\u582A\u79F0\u5B8C\u6574\u9700\u6C42\u4E00\u6B21\u6027\u4EA4\u4ED8\u6807\u6746\u3002"
|
|
949
922
|
];
|
|
950
923
|
var TAG_PPT_ARCHITECT_CRITIQUES = [
|
|
951
|
-
"\u67B6\u6784\u5E08\u98CE\u8303\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u63D0\u4EA4\u6B21\u6570\u9891\u7E41\u4F46\u5355\u8F6E\u6539\u52A8\u7CBE\u7B80\u514B\u5236\uFF0C\u4F60\u7684Git\u5386\u53F2\u8BB0\u5F55\u50CF\
|
|
952
|
-
"\u606D\u559C\u83B7\u5F97\u300E\u4F18\u96C5\u67B6\u6784\u5E08\u300F\u79F0\u53F7\uFF01\u6BCF\u4E00\u6761commit\u90FD\u5E26\u7740\u6E05\u6670\u89C4\u6574\u7684\u91CD\u6784\u601D\u8DEF\uFF0C\
|
|
953
|
-
"\u4E13\u6CE8\u67B6\u6784\u4F18\u5316\u7684\u4F18\u96C5\u5927\u4F6C\uFF0C\u4E0D\u5806\u780C\u5197\u4F59\u4E1A\u52A1\u4EE3\u7801\uFF0C\u4E13\u6CE8\u8C03\u6574\u9879\u76EE\u5206\u5C42\u3001\u89C4\u8303\u8C03\u7528\u903B\u8F91\uFF0C\u6BCF\u6B21\u5C0F\u63D0\u4EA4\u90FD\u5728\u6F5C\u79FB\u9ED8\u5316\u4F18\u5316\u9879\u76EE\u5E95\u5C42\u7ED3\u6784\uFF0C\
|
|
954
|
-
"\u4EE3\u7801\u4E16\u754C\u7684\u89C4\u5212\u8BBE\u8BA1\u5E08\uFF0C\u9891\u7E41\u5FAE\u8C03\u9879\u76EE\u7ED3\u6784\u4E0E\u5206\u5C42\u903B\u8F91\uFF0C\u6BD4\u8D77\
|
|
955
|
-
"\u4EE5\u91CD\u6784\u4F18\u5316\u4E3A\u6838\u5FC3\u5DE5\u4F5C\u7684\u67B6\u6784\u80FD\u624B\uFF0C\u8F7B\u91CF\u9AD8\u9891\u63D0\u4EA4\u6301\u7EED\u6253\u78E8\u9879\u76EE\u9AA8\u67B6\uFF0C\u9ED8\u9ED8\u89C4\u907F\u540E\u7EED\u8FED\u4EE3\u9690\u60A3\uFF0C\u773C\u5149\u653E\u5F97\u957F\u8FDC\uFF0C\u662F\u56E2\u961F\
|
|
924
|
+
"\u67B6\u6784\u5E08\u98CE\u8303\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u63D0\u4EA4\u6B21\u6570\u9891\u7E41\u4F46\u5355\u8F6E\u6539\u52A8\u7CBE\u7B80\u514B\u5236\uFF0C\u4F60\u7684Git\u5386\u53F2\u8BB0\u5F55\u50CF\u7CBE\u5FC3\u7F16\u6392\u7684\u6280\u672F\u827A\u672F\u54C1\uFF0C\u91CD\u5FC3\u653E\u5728\u68B3\u7406\u9879\u76EE\u903B\u8F91\u3001\u4F18\u5316\u6574\u4F53\u67B6\u6784\u3002",
|
|
925
|
+
"\u606D\u559C\u83B7\u5F97\u300E\u4F18\u96C5\u67B6\u6784\u5E08\u300F\u79F0\u53F7\uFF01\u6BCF\u4E00\u6761commit\u90FD\u5E26\u7740\u6E05\u6670\u89C4\u6574\u7684\u91CD\u6784\u601D\u8DEF\uFF0C\u5728\u65E0\u5F62\u4E4B\u4E2D\u68B3\u7406\u4F18\u5316\u9879\u76EE\u7ED3\u6784\uFF0Cdiff\u6539\u52A8\u8F7B\u76C8\u7CBE\u7B80\uFF0C\u5374\u5BF9\u6574\u4F53\u67B6\u6784\u8D77\u5230\u81F3\u5173\u91CD\u8981\u7684\u4F18\u5316\u4F5C\u7528\u3002",
|
|
926
|
+
"\u4E13\u6CE8\u67B6\u6784\u4F18\u5316\u7684\u4F18\u96C5\u5927\u4F6C\uFF0C\u4E0D\u5806\u780C\u5197\u4F59\u4E1A\u52A1\u4EE3\u7801\uFF0C\u4E13\u6CE8\u8C03\u6574\u9879\u76EE\u5206\u5C42\u3001\u89C4\u8303\u8C03\u7528\u903B\u8F91\uFF0C\u6BCF\u6B21\u5C0F\u63D0\u4EA4\u90FD\u5728\u6F5C\u79FB\u9ED8\u5316\u4F18\u5316\u9879\u76EE\u5E95\u5C42\u7ED3\u6784\uFF0C\u773C\u5149\u957F\u8FDC\u3002",
|
|
927
|
+
"\u4EE3\u7801\u4E16\u754C\u7684\u89C4\u5212\u8BBE\u8BA1\u5E08\uFF0C\u9891\u7E41\u5FAE\u8C03\u9879\u76EE\u7ED3\u6784\u4E0E\u5206\u5C42\u903B\u8F91\uFF0C\u6BD4\u8D77\u589E\u91CF\u529F\u80FD\u66F4\u770B\u91CD\u9879\u76EE\u957F\u671F\u53EF\u7EF4\u62A4\u6027\uFF0C\u7EC6\u788E\u63D0\u4EA4\u80CC\u540E\u90FD\u662F\u5BF9\u67B6\u6784\u957F\u8FDC\u53D1\u5C55\u7684\u6DF1\u5EA6\u8003\u91CF\u3002",
|
|
928
|
+
"\u4EE5\u91CD\u6784\u4F18\u5316\u4E3A\u6838\u5FC3\u5DE5\u4F5C\u7684\u67B6\u6784\u80FD\u624B\uFF0C\u8F7B\u91CF\u9AD8\u9891\u63D0\u4EA4\u6301\u7EED\u6253\u78E8\u9879\u76EE\u9AA8\u67B6\uFF0C\u9ED8\u9ED8\u89C4\u907F\u540E\u7EED\u8FED\u4EE3\u9690\u60A3\uFF0C\u773C\u5149\u653E\u5F97\u957F\u8FDC\uFF0C\u662F\u56E2\u961F\u6280\u672F\u89C4\u5212\u7684\u91CD\u8981\u63A8\u624B\u3002"
|
|
956
929
|
];
|
|
957
930
|
var TAG_FORMAT_MASTER_CRITIQUES = [
|
|
958
|
-
"\u683C\u5F0F\u5316\u5927\u5E08\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u7D2F\u8BA1\u63D0\u4EA4\
|
|
959
|
-
"\u683C\u5F0F\u5316\u5927\u5E08\u5B9E\u9524\uFF01\
|
|
960
|
-
"\u6267\u7740\u4E8E\u4EE3\u7801\u6574\u6D01\u5EA6\u7684\u89C4\u8303\u5B88\u62A4\u8005\uFF0C\u4E0D\u653E\u8FC7\u4EFB\u4F55\u4E00\u5904\u7F29\u8FDB\u3001\u7A7A\u683C\u3001\u6CE8\u91CA\u7455\u75B5\uFF0C\u53CD\u590D\u63D0\u4EA4\u5FAE\u8C03\u7EDF\u4E00\u9879\u76EE\u7F16\u7801\u98CE\u683C\uFF0C\u8BA9\
|
|
931
|
+
"\u683C\u5F0F\u5316\u5927\u5E08\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u7D2F\u8BA1\u63D0\u4EA4\u591A\u6B21\uFF0C\u4EE3\u7801\u6539\u52A8\u884C\u6570\u5BE5\u5BE5\u2014\u2014\u4F60\u5BF9\u4EE3\u7801\u89C4\u8303\u4E0E\u6574\u6D01\u5EA6\u6709\u7740\u6781\u81F4\u8FFD\u6C42\uFF0C\u7EC6\u5FAE\u8C03\u6574\u76F4\u63A5\u8BA9\u6574\u4E2A\u9879\u76EE\u4EE3\u7801\u5E93\u7115\u7136\u4E00\u65B0\u3002",
|
|
932
|
+
"\u683C\u5F0F\u5316\u5927\u5E08\u5B9E\u9524\uFF01\u591A\u6B21\u63D0\u4EA4\u5168\u90E8\u805A\u7126\u8C03\u6574\u7A7A\u683C\u3001\u8865\u5145\u6CE8\u91CA\u3001\u7EDF\u4E00\u7F29\u8FDB\u89C4\u8303\uFF0C\u4E0D\u6C42\u65B0\u589E\u5927\u91CF\u529F\u80FD\u4EE3\u7801\uFF0C\u4E00\u5FC3\u62C9\u9AD8\u4EE3\u7801\u5E93\u6574\u4F53\u989C\u503C\uFF0C\u5927\u5E45\u63D0\u5347\u540E\u7EED\u9605\u8BFB\u53EF\u8BFB\u6027\uFF01",
|
|
933
|
+
"\u6267\u7740\u4E8E\u4EE3\u7801\u6574\u6D01\u5EA6\u7684\u89C4\u8303\u5B88\u62A4\u8005\uFF0C\u4E0D\u653E\u8FC7\u4EFB\u4F55\u4E00\u5904\u7F29\u8FDB\u3001\u7A7A\u683C\u3001\u6CE8\u91CA\u7455\u75B5\uFF0C\u53CD\u590D\u63D0\u4EA4\u5FAE\u8C03\u7EDF\u4E00\u9879\u76EE\u7F16\u7801\u98CE\u683C\uFF0C\u8BA9\u540C\u4E8B\u63A5\u624B\u4EE3\u7801\u65F6\u90FD\u80FD\u770B\u5F97\u6E05\u6670\u987A\u7545\u3002",
|
|
961
934
|
"\u4EE3\u7801\u989C\u503C\u7BA1\u7406\u5458\u4E0A\u7EBF\uFF0C\u6BD4\u8D77\u65B0\u589E\u4E1A\u52A1\u529F\u80FD\uFF0C\u66F4\u5728\u610F\u6574\u4F53\u4EE3\u7801\u98CE\u683C\u7EDF\u4E00\u89C4\u6574\uFF0C\u7EC6\u788E\u7684\u89C4\u8303\u5316\u8C03\u6574\u65E5\u79EF\u6708\u7D2F\uFF0C\u5927\u5E45\u964D\u4F4E\u56E2\u961F\u540E\u7EED\u534F\u4F5C\u9605\u8BFB\u6210\u672C\u3002",
|
|
962
935
|
"\u6781\u81F4\u7EC6\u8282\u63A7\u683C\u5F0F\u5316\u5927\u4F6C\uFF0C\u6BCF\u4E00\u5904\u6392\u7248\u3001\u6CE8\u91CA\u3001\u7B26\u53F7\u90FD\u4E25\u683C\u9075\u5FAA\u7EDF\u4E00\u6807\u51C6\uFF0C\u4E00\u6B21\u6B21\u7EC6\u5FAE\u63D0\u4EA4\u6253\u78E8\u9879\u76EE\u4EE3\u7801\u98CE\u8C8C\uFF0C\u5B8C\u7F8E\u6CBB\u6108\u6240\u6709\u4EBA\u7684\u4EE3\u7801\u5F3A\u8FEB\u75C7\u3002"
|
|
963
936
|
];
|
|
964
937
|
var TAG_GIT_CHATTER_CRITIQUES = [
|
|
965
|
-
"Git \u8BB0\u5F55\u8FBE\u4EBA\u9690\u85CF\u6210\u5C31\uFF01\
|
|
966
|
-
"Git \u8BB0\u5F55\u8FBE\u4EBA\u8BA4\u8BC1\uFF01\u628A\u6BCF\u4E00\u5C0F\u6B65\u6539\u52A8\u90FD\u62C6\u5206\u4E3A\u72EC\u7ACBcommit\uFF0C\u7EC6\u7C92\u5EA6\u62C6\u5206\u5982\u540C\u5B9E\u65F6\u7F16\u5199\u5F00\u53D1\u65E5\u5FD7\uFF0C\u8C03\u8BD5\u3001\u56DE\u6EDA\u3001\u5B9A\u4F4D\u95EE\u9898\u65F6\u4E00\u76EE\u4E86\u7136\uFF0C\u4EE3\u7801\u8FFD\u8E2A\u96BE\u5EA6\
|
|
938
|
+
"Git \u8BB0\u5F55\u8FBE\u4EBA\u9690\u85CF\u6210\u5C31\uFF01\u591A\u6B21\u62C6\u5206\u63D0\u4EA4\uFF0C\u5E73\u5747\u5355\u6B21\u6539\u52A8\u7CBE\u7B80\u81F3\u6781\u2014\u2014\u4F60\u50CF\u662F\u5728\u7528Git\u7248\u672C\u5E93\u5B9E\u65F6\u8BB0\u5F55\u7F16\u7801\u601D\u8DEF\uFF0C\u6781\u81F4\u7EC6\u9897\u7C92\u5EA6\u62C6\u5206\uFF0C\u540E\u7EED\u7248\u672C\u56DE\u6EDA\u8C03\u8BD5\u6BEB\u65E0\u538B\u529B\uFF01",
|
|
939
|
+
"Git \u8BB0\u5F55\u8FBE\u4EBA\u8BA4\u8BC1\uFF01\u628A\u6BCF\u4E00\u5C0F\u6B65\u6539\u52A8\u90FD\u62C6\u5206\u4E3A\u72EC\u7ACBcommit\uFF0C\u7EC6\u7C92\u5EA6\u62C6\u5206\u5982\u540C\u5B9E\u65F6\u7F16\u5199\u5F00\u53D1\u65E5\u5FD7\uFF0C\u8C03\u8BD5\u3001\u56DE\u6EDA\u3001\u5B9A\u4F4D\u95EE\u9898\u65F6\u4E00\u76EE\u4E86\u7136\uFF0C\u4EE3\u7801\u8FFD\u8E2A\u96BE\u5EA6\u5927\u5E45\u964D\u4F4E\u3002",
|
|
967
940
|
"\u6781\u81F4\u7EC6\u5206\u63D0\u4EA4\u4E60\u60EF\u7684\u7EC6\u81F4\u9009\u624B\uFF0C\u4EFB\u4F55\u5FAE\u5C0F\u6539\u52A8\u5355\u72EC\u8BB0\u5F55\uFF0C\u4E0D\u6015\u63D0\u4EA4\u6570\u91CF\u591A\uFF0C\u53EA\u6C42\u6BCF\u4E00\u6B65\u6539\u52A8\u6E05\u6670\u53EF\u8FFD\u6EAF\uFF0C\u6392\u67E5\u7EBF\u4E0Abug\u65F6\u8FD9\u4EFD\u7EC6\u81F4\u80FD\u7701\u4E0B\u5927\u91CF\u6392\u67E5\u65F6\u95F4\u3002",
|
|
968
941
|
"\u5F00\u53D1\u8FC7\u7A0B\u53EF\u89C6\u5316\u5927\u5E08\uFF0C\u5C06\u65B0\u589E\u3001\u4FEE\u6539\u3001\u4FEE\u590D\u5168\u90E8\u62C6\u5206\u4E3A\u72EC\u7ACB\u8BB0\u5F55\uFF0CGit\u5386\u53F2\u6E05\u6670\u8BB0\u5F55\u6BCF\u4E00\u6B65\u5F00\u53D1\u601D\u8DEF\uFF0C\u534F\u4F5C\u8C03\u8BD5\u65F6\u80FD\u5FEB\u901F\u770B\u61C2\u4EE3\u7801\u8FED\u4EE3\u5168\u8FC7\u7A0B\uFF0C\u534F\u4F5C\u4F53\u9A8C\u62C9\u6EE1\u3002",
|
|
969
942
|
"\u504F\u7231\u5C0F\u6B65\u5FEB\u8DD1\u5F0F\u7F16\u7801\u7684\u7EC6\u5FC3\u5F00\u53D1\u8005\uFF0C\u4E00\u70B9\u6539\u52A8\u4E00\u6B21\u63D0\u4EA4\uFF0C\u62D2\u7EDD\u5927\u6BB5\u6DF7\u5408\u4FEE\u6539\uFF0C\u7248\u672C\u5386\u53F2\u5E72\u51C0\u901A\u900F\uFF0C\u662F\u56E2\u961F\u91CC\u65B9\u4FBF\u534F\u540C\u6392\u9519\u7684\u4F18\u8D28\u5F00\u53D1\u6A21\u677F\u3002"
|
|
970
943
|
];
|
|
971
944
|
var TAG_NIGHT_ASSASSIN_CRITIQUES = [
|
|
972
|
-
"\u6DF1\u591C\u523A\u5BA2\u9690\u85CF\u6210\u5C31\uFF01\u4FEE\u4ED9\u71AC\u591C\u6307\u6570\u76F4\u63A5\u7206\u8868\uFF0C\u4F46\u6BCF\u6B21\u63D0\u4EA4\u5185\u5BB9\
|
|
973
|
-
"\u6DF1\u591C\u523A\u5BA2\u767B\u573A\uFF01\
|
|
945
|
+
"\u6DF1\u591C\u523A\u5BA2\u9690\u85CF\u6210\u5C31\uFF01\u4FEE\u4ED9\u71AC\u591C\u6307\u6570\u76F4\u63A5\u7206\u8868\uFF0C\u4F46\u6BCF\u6B21\u63D0\u4EA4\u5185\u5BB9\u7CBE\u70BC\u9AD8\u6548\u2014\u2014\u4E13\u6311\u591C\u6DF1\u4EBA\u9759\u7684\u6DF1\u591C\u4E0A\u7EBF\uFF0C\u6084\u65E0\u58F0\u606F\u641E\u5B9A\u6838\u5FC3\u963B\u585Ebug\uFF0C\u4E8B\u6210\u4E4B\u540E\u6DF1\u85CF\u529F\u4E0E\u540D\u3002",
|
|
946
|
+
"\u6DF1\u591C\u523A\u5BA2\u767B\u573A\uFF01\u5C11\u91CF\u9AD8\u8D28\u91CF\u63D0\u4EA4\u5168\u90E8\u8BDE\u751F\u4E8E\u51CC\u6668\u65F6\u6BB5\uFF0C\u767D\u5929\u4F4E\u8C03\u6C89\u6DC0\u4E0D\u5F20\u626C\uFF0C\u6DF1\u591C\u51FA\u624B\u7CBE\u51C6\u89E3\u51B3\u5173\u952E\u96BE\u9898\uFF0C\u663C\u591C\u53CD\u5DEE\u62C9\u6EE1\uFF0C\u53CC\u9762\u6781\u5BA2\u4EBA\u751F\u76F8\u5F53\u7CBE\u5F69\u3002",
|
|
974
947
|
"\u4E13\u5C5E\u6DF1\u591C\u4E0A\u7EBF\u7684bug\u6740\u624B\uFF0C\u907F\u5F00\u767D\u5929\u5608\u6742\u6C9F\u901A\u65F6\u6BB5\uFF0C\u51CC\u6668\u5B89\u9759\u73AF\u5883\u7CBE\u51C6\u5B9A\u4F4D\u6838\u5FC3\u6545\u969C\uFF0C\u5C11\u91CF\u7CBE\u70BC\u6539\u52A8\u76F4\u63A5\u6839\u6CBB\u7591\u96BE\u95EE\u9898\uFF0C\u4F4E\u8C03\u89E3\u51B3\u56E2\u961F\u68D8\u624B\u5361\u70B9\u3002",
|
|
975
|
-
"\u767D\u5929\u4F4E\u8C03\u5904\u7406\u65E5\u5E38\u7410\u4E8B\uFF0C\u6DF1\u591C\u5316\u8EAB\u4EE3\u7801\u523A\u5BA2\u7CBE\u51C6\u653B\u575A\u963B\u585E\u9879\u76EE\u7684\u6838\u5FC3\u96BE\u9898\uFF0C\
|
|
976
|
-
"\u64C5\u957F\u5229\u7528\u51CC\u6668\u5B89\u9759\u7A97\u53E3\u89E3\u51B3\u987D\u56FA\u7EBF\u4E0A\u95EE\u9898\uFF0C\
|
|
948
|
+
"\u767D\u5929\u4F4E\u8C03\u5904\u7406\u65E5\u5E38\u7410\u4E8B\uFF0C\u6DF1\u591C\u5316\u8EAB\u4EE3\u7801\u523A\u5BA2\u7CBE\u51C6\u653B\u575A\u963B\u585E\u9879\u76EE\u7684\u6838\u5FC3\u96BE\u9898\uFF0C\u6CA1\u6709\u65E0\u6548\u63D0\u4EA4\uFF0C\u4E00\u62DB\u4E00\u5F0F\u76F4\u51FB\u95EE\u9898\u6839\u6E90\uFF0C\u9AD8\u6548\u53C8\u4F4E\u8C03\u3002",
|
|
949
|
+
"\u64C5\u957F\u5229\u7528\u51CC\u6668\u5B89\u9759\u7A97\u53E3\u89E3\u51B3\u987D\u56FA\u7EBF\u4E0A\u95EE\u9898\uFF0C\u6CA1\u6709\u65E0\u6548\u63D0\u4EA4\uFF0C\u6BCF\u4E00\u6B21\u6DF1\u591C\u66F4\u65B0\u90FD\u76F4\u51FB\u6838\u5FC3\u75DB\u70B9\uFF0C\u9ED8\u9ED8\u626B\u6E05\u9879\u76EE\u8FED\u4EE3\u8DEF\u4E0A\u7684\u5404\u7C7B\u969C\u788D\u3002"
|
|
977
950
|
];
|
|
978
951
|
var TAG_DONKEY_CRITIQUES = [
|
|
979
|
-
"\u5168\u80FD\u6218\u795E\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u5468\u672B\u6301\u7EED\u7206\u809D\u8FED\u4EE3 + \u65E5\u5E38\u6DF1\u591C\u4FEE\u4ED9\u653B\u575A\
|
|
952
|
+
"\u5168\u80FD\u6218\u795E\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u5468\u672B\u6301\u7EED\u7206\u809D\u8FED\u4EE3 + \u65E5\u5E38\u6DF1\u591C\u4FEE\u4ED9\u653B\u575A\u53CC\u6A21\u5F0F\u53E0\u52A0\u3002Git\u8BB0\u5F55\u4E86\u4F60\u6BCF\u4E00\u4EFD\u8F9B\u82E6\u4ED8\u51FA\uFF0C\u4F46\u4E5F\u8BB0\u5F97\u522B\u957F\u671F\u900F\u652F\uFF0C\u7559\u51FA\u65F6\u95F4\u597D\u597D\u7167\u987E\u81EA\u5DF1\u3002",
|
|
980
953
|
"\u5468\u672B\u4F11\u606F\u65F6\u6BB5\u3001\u4E07\u7C41\u4FF1\u5BC2\u7684\u6DF1\u591C\u90FD\u7559\u4E0B\u4E86\u4F60\u7684\u4EE3\u7801\u63D0\u4EA4\u8DB3\u8FF9\uFF0C\u8D23\u4EFB\u5FC3\u4E0E\u5403\u82E6\u8010\u52B3\u5C5E\u6027\u76F4\u63A5\u62C9\u6EE1\u3002\u5168\u529B\u4E3A\u9879\u76EE\u51B2\u950B\u7684\u540C\u65F6\uFF0C\u52A1\u5FC5\u7559\u51FA\u7A7A\u95F2\u65F6\u95F4\u597D\u597D\u751F\u6D3B\u653E\u677E\u3002",
|
|
981
|
-
"\u5168\u5E74\u65E0\u4F11\u5F0F\u5168\u80FD\
|
|
982
|
-
"\u517C\u987E\u6DF1\u591C\u653B\u575A\u4E0E\u5468\u672B\u8865\u8FED\u4EE3\u7684\u5168\u80FD\u515C\u5E95\u9009\u624B\uFF0C\
|
|
954
|
+
"\u5168\u5E74\u65E0\u4F11\u5F0F\u5168\u80FD\u9009\u624B\uFF0C\u5DE5\u4F5C\u65E5\u71AC\u591C\u653B\u575A\u3001\u5468\u672B\u4E3B\u52A8\u8865\u5168\u8FED\u4EE3\uFF0C\u9879\u76EE\u4EFB\u4F55\u65F6\u6BB5\u7F3A\u4EBA\u515C\u5E95\u603B\u6709\u4F60\uFF0C\u4ED8\u51FA\u503C\u5F97\u6240\u6709\u4EBA\u8BA4\u53EF\uFF0C\u5207\u8BB0\u52B3\u9038\u7ED3\u5408\u4E0D\u8981\u8FC7\u5EA6\u52B3\u7D2F\u3002",
|
|
955
|
+
"\u517C\u987E\u6DF1\u591C\u653B\u575A\u4E0E\u5468\u672B\u8865\u8FED\u4EE3\u7684\u5168\u80FD\u515C\u5E95\u9009\u624B\uFF0C\u9879\u76EE\u6709\u7D27\u6025\u9700\u6C42\u65F6\u603B\u80FD\u4E0A\u7EBF\u5904\u7406\uFF0C\u627F\u62C5\u5927\u91CF\u989D\u5916\u5DE5\u4F5C\u91CF\uFF0C\u5728\u62FC\u547D\u63A8\u8FDB\u8FDB\u5EA6\u7684\u540C\u65F6\u8BB0\u5F97\u591A\u4F11\u606F\u8C03\u517B\u8EAB\u5FC3\u3002",
|
|
983
956
|
"\u5168\u5929\u5019\u5F85\u547D\u7684\u9879\u76EE\u5B88\u62A4\u8005\uFF0C\u4E0D\u5206\u5DE5\u4F5C\u65E5\u4F11\u606F\u65E5\u3001\u4E0D\u5206\u767D\u663C\u6DF1\u591C\uFF0C\u968F\u65F6\u4E0A\u7EBF\u89E3\u51B3\u8FED\u4EE3\u5361\u70B9\uFF0C\u9AD8\u5F3A\u5EA6\u4ED8\u51FA\u503C\u5F97\u70B9\u8D5E\uFF0C\u4E00\u5B9A\u8981\u7ED9\u81EA\u5DF1\u7559\u51FA\u653E\u677E\u4F11\u606F\u7684\u4E13\u5C5E\u65F6\u95F4\u3002"
|
|
984
957
|
];
|
|
985
958
|
var TAG_FISH_IMMORTAL_CRITIQUES = [
|
|
986
|
-
"\u6478\u9C7C\u4ED9\u4EBA\u9690\u85CF\u6210\u5C31\uFF01\u6478\u9C7C\u677E\u5F1B\u6307\u6570\
|
|
987
|
-
"\u6478\u9C7C\u4ED9\u4EBA\uFF0C\u5883\u754C\
|
|
959
|
+
"\u6478\u9C7C\u4ED9\u4EBA\u9690\u85CF\u6210\u5C31\uFF01\u6478\u9C7C\u677E\u5F1B\u6307\u6570\u62C9\u6EE1\uFF0C\u5355\u65E5\u63D0\u4EA40-1\u6B21\u5373\u53EF\u5B8C\u6210\u5168\u90E8\u672C\u804C\u5DE5\u4F5C\u2014\u2014\u65E9\u5DF2\u8D85\u8D8A\u666E\u901A\u6D45\u5C42\u6478\u9C7C\uFF0C\u62B5\u8FBE\u4EE5\u7B80\u9A6D\u7E41\u3001\u65E0\u62DB\u80DC\u6709\u62DB\u7684\u804C\u573A\u81F3\u9AD8\u5883\u754C\u3002",
|
|
960
|
+
"\u6478\u9C7C\u4ED9\u4EBA\uFF0C\u5883\u754C\u5DF2\u7136\u4E0D\u540C\u51E1\u54CD\uFF01\u6BCF\u65E5\u4EC5\u9700\u5BE5\u5BE5\u4E00\u6B21\u8F7B\u91CF\u63D0\u4EA4\uFF0C\u6DE1\u5B9A\u677E\u5F1B\u7387\u6781\u9AD8\uFF0C\u7528\u6700\u5C11\u7684\u63D0\u4EA4\u7A33\u7A33\u7EF4\u6301\u4E1A\u52A1\u6B63\u5E38\u8FD0\u8F6C\uFF0C\u59A5\u59A5\u4E16\u5916\u804C\u573A\u9AD8\u4EBA\u3002",
|
|
988
961
|
"\u53C2\u900F\u804C\u573A\u5E73\u8861\u4E4B\u9053\u7684\u6478\u9C7C\u4ED9\u4EBA\uFF0C\u8D85\u9AD8\u6548\u7387\u5FEB\u901F\u5B8C\u6210\u5F53\u65E5\u5168\u90E8\u4EFB\u52A1\uFF0C\u5269\u4F59\u65F6\u95F4\u5B89\u5FC3\u653E\u7A7A\u5145\u7535\uFF0C\u4E0D\u7528\u5185\u5377\u6D88\u8017\u81EA\u5DF1\uFF0C\u9AD8\u6548\u5B8C\u6210\u672C\u804C\u5C31\u662F\u6700\u9AD8\u7EA7\u7684\u6478\u9C7C\u667A\u6167\u3002",
|
|
989
962
|
"\u6781\u7B80\u5DE5\u4F5C\u6D41\u4ED9\u4EBA\uFF0C\u5C11\u91CF\u64CD\u4F5C\u5C31\u80FD\u7A33\u59A5\u4EA4\u4ED8\u5168\u90E8\u5DE5\u4F5C\u5185\u5BB9\uFF0C\u4ECE\u4E0D\u76F2\u76EE\u6D88\u8017\u65F6\u95F4\u5185\u5377\uFF0C\u61C2\u5F97\u9AD8\u6548\u5B8C\u5DE5\u3001\u9002\u5EA6\u653E\u677E\uFF0C\u628A\u5DE5\u4F5C\u751F\u6D3B\u5E73\u8861\u62FF\u634F\u5230\u6781\u81F4\u3002",
|
|
990
|
-
"\u522B\u4EBA\u82B1\u8D39\u4E00\u6574\u5929\
|
|
963
|
+
"\u522B\u4EBA\u82B1\u8D39\u4E00\u6574\u5929\u5FD9\u788C\u5728\u5DE5\u4F4D\uFF0C\u4F60\u77ED\u65F6\u9AD8\u6548\u5B8C\u6210\u5168\u90E8\u9700\u6C42\uFF0C\u5176\u4F59\u65F6\u95F4\u4ECE\u5BB9\u81EA\u5728\u4F11\u6574\uFF0C\u6478\u9C7C\u4ED9\u4EBA\u7684\u6838\u5FC3\u4ECE\u6765\u4E0D\u662F\u6446\u70C2\uFF0C\u662F\u8D85\u9AD8\u5DE5\u4F5C\u6548\u7387\u5E26\u6765\u7684\u677E\u5F1B\u81EA\u7531\u3002"
|
|
991
964
|
];
|
|
992
|
-
var TAG_COLOR_MAP = {
|
|
993
|
-
"\u6478\u9C7C\u5B97\u5E08": chalk.green,
|
|
994
|
-
"\u7206\u809D\u6218\u795E": chalk.red.bold,
|
|
995
|
-
"\u6DF1\u591C\u4FEE\u4ED9\u8005": chalk.red,
|
|
996
|
-
"\u52E4\u6073\u642C\u7816\u4EBA": chalk.yellow,
|
|
997
|
-
"\u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458": chalk.magenta,
|
|
998
|
-
"PPT \u67B6\u6784\u5E08": chalk.blue,
|
|
999
|
-
"\u683C\u5F0F\u5316\u5927\u5E08": chalk.cyan,
|
|
1000
|
-
"Git \u804A\u5929\u8FBE\u4EBA": chalk.greenBright,
|
|
1001
|
-
"\u6DF1\u591C\u523A\u5BA2": chalk.redBright,
|
|
1002
|
-
"\u751F\u4EA7\u961F\u7684\u9A74": chalk.yellowBright,
|
|
1003
|
-
"\u6478\u9C7C\u4ED9\u4EBA": chalk.green.bold
|
|
1004
|
-
};
|
|
1005
|
-
function colorizeCriticTags(text) {
|
|
1006
|
-
const sortedKeys = Object.keys(TAG_COLOR_MAP).sort((a, b) => b.length - a.length);
|
|
1007
|
-
let result = text;
|
|
1008
|
-
for (const key of sortedKeys) {
|
|
1009
|
-
const colorFn = TAG_COLOR_MAP[key];
|
|
1010
|
-
const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1011
|
-
const regex = new RegExp(`\u300E?${escaped}\u300F?`, "g");
|
|
1012
|
-
result = result.replace(regex, (match) => {
|
|
1013
|
-
if (match.startsWith("\u300E") && match.endsWith("\u300F")) {
|
|
1014
|
-
return "\u300E" + colorFn(key) + "\u300F";
|
|
1015
|
-
}
|
|
1016
|
-
return colorFn(match);
|
|
1017
|
-
});
|
|
1018
|
-
}
|
|
1019
|
-
return result;
|
|
1020
|
-
}
|
|
1021
965
|
function getRandomItem(arr) {
|
|
1022
966
|
const idx = Math.floor(Math.random() * arr.length);
|
|
1023
|
-
return
|
|
967
|
+
return arr[idx];
|
|
1024
968
|
}
|
|
1025
969
|
function getAICritic(weeklyStats) {
|
|
1026
970
|
const parts = [];
|
|
@@ -1044,30 +988,17 @@ function getAICritic(weeklyStats) {
|
|
|
1044
988
|
}
|
|
1045
989
|
return parts.join("\n\n");
|
|
1046
990
|
}
|
|
1047
|
-
function getAICriticForMonth(monthlyStats) {
|
|
991
|
+
function getAICriticForMonth(monthlyStats, adjustedFish) {
|
|
1048
992
|
const parts = [];
|
|
1049
993
|
if (monthlyStats.ghostCommitsCount > 3) {
|
|
1050
994
|
parts.push(getRandomItem(GHOST_CRITIQUES));
|
|
1051
995
|
}
|
|
1052
|
-
const
|
|
1053
|
-
const total = fix + feat + chore + other;
|
|
1054
|
-
if (total > 0) {
|
|
1055
|
-
const fixPct = Math.round(fix / total * 100);
|
|
1056
|
-
const featPct = Math.round(feat / total * 100);
|
|
1057
|
-
const chorePct = Math.round(chore / total * 100);
|
|
1058
|
-
if (fixPct >= 50) {
|
|
1059
|
-
parts.push(getRandomItem(CATEGORY_FIX_CRITIQUES).replace("%PERCENT%%", `${fixPct}%`));
|
|
1060
|
-
} else if (featPct >= 50) {
|
|
1061
|
-
parts.push(getRandomItem(CATEGORY_FEAT_CRITIQUES).replace("%PERCENT%%", `${featPct}%`));
|
|
1062
|
-
} else if (chorePct >= 40) {
|
|
1063
|
-
parts.push(getRandomItem(CATEGORY_CHORE_CRITIQUES).replace("%PERCENT%%", `${chorePct}%`));
|
|
1064
|
-
}
|
|
1065
|
-
}
|
|
996
|
+
const fish = adjustedFish ?? monthlyStats.averageFish;
|
|
1066
997
|
if (monthlyStats.totalCommits === 0) {
|
|
1067
998
|
parts.push("\u672C\u6708\u63D0\u4EA4\u6B21\u6570\u4E3A 0\uFF01\u4F60\u6210\u529F\u5730\u5728\u516C\u53F8\u84B8\u53D1\u4E86\u4E00\u4E2A\u6708\uFF0C\u62FF\u5230\u4E86\u5168\u989D\u5DE5\u8D44\u3002\u5EFA\u8BAE\u4F60\u4E0B\u4E2A\u6708\u7EE7\u7EED\u4FDD\u6301\u4F4E\u8C03\uFF0C\u4E0D\u8981\u8BA9 HR \u6CE8\u610F\u5230\u4F60\u3002");
|
|
1068
|
-
} else if (
|
|
999
|
+
} else if (fish >= 70) {
|
|
1069
1000
|
parts.push(getRandomItem(SLACK_HIGH_CRITIQUES));
|
|
1070
|
-
} else if (
|
|
1001
|
+
} else if (fish <= 35) {
|
|
1071
1002
|
parts.push(getRandomItem(SLACK_LOW_CRITIQUES));
|
|
1072
1003
|
}
|
|
1073
1004
|
if (parts.length === 0) {
|
|
@@ -1113,6 +1044,104 @@ function getTagCriticsFromDays(days) {
|
|
|
1113
1044
|
return critics;
|
|
1114
1045
|
}
|
|
1115
1046
|
|
|
1047
|
+
// src/holiday.ts
|
|
1048
|
+
var holiday_in_law = {
|
|
1049
|
+
"2025-01-01": { "type": "holiday", "name": "\u5143\u65E6" },
|
|
1050
|
+
"2025-01-26": { "type": "workday", "name": "\u6625\u8282\u8C03\u4F11\u73ED" },
|
|
1051
|
+
"2025-01-28": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1052
|
+
"2025-01-29": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1053
|
+
"2025-01-30": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1054
|
+
"2025-01-31": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1055
|
+
"2025-02-01": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1056
|
+
"2025-02-02": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1057
|
+
"2025-02-03": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1058
|
+
"2025-02-04": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1059
|
+
"2025-02-08": { "type": "workday", "name": "\u6625\u8282\u8C03\u4F11\u73ED" },
|
|
1060
|
+
"2025-04-04": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1061
|
+
"2025-04-05": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1062
|
+
"2025-04-06": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1063
|
+
"2025-04-27": { "type": "workday", "name": "\u52B3\u52A8\u8282\u8C03\u4F11\u73ED" },
|
|
1064
|
+
"2025-05-01": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1065
|
+
"2025-05-02": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1066
|
+
"2025-05-03": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1067
|
+
"2025-05-04": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1068
|
+
"2025-05-05": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1069
|
+
"2025-05-31": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1070
|
+
"2025-06-01": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1071
|
+
"2025-06-02": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1072
|
+
"2025-09-28": { "type": "workday", "name": "\u56FD\u5E86\u8282\u8C03\u4F11\u73ED" },
|
|
1073
|
+
"2025-10-01": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1074
|
+
"2025-10-02": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1075
|
+
"2025-10-03": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1076
|
+
"2025-10-04": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1077
|
+
"2025-10-05": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1078
|
+
"2025-10-06": { "type": "holiday", "name": "\u4E2D\u79CB\u8282" },
|
|
1079
|
+
"2025-10-07": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1080
|
+
"2025-10-08": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1081
|
+
"2025-10-11": { "type": "workday", "name": "\u56FD\u5E86\u8282\u8C03\u4F11\u73ED" },
|
|
1082
|
+
"2026-01-01": { "type": "holiday", "name": "\u5143\u65E6" },
|
|
1083
|
+
"2026-01-02": { "type": "holiday", "name": "\u5143\u65E6" },
|
|
1084
|
+
"2026-01-03": { "type": "holiday", "name": "\u5143\u65E6" },
|
|
1085
|
+
"2026-01-04": { "type": "workday", "name": "\u5143\u65E6\u8C03\u4F11\u73ED" },
|
|
1086
|
+
"2026-02-14": { "type": "workday", "name": "\u6625\u8282\u8C03\u4F11\u73ED" },
|
|
1087
|
+
"2026-02-15": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1088
|
+
"2026-02-16": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1089
|
+
"2026-02-17": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1090
|
+
"2026-02-18": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1091
|
+
"2026-02-19": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1092
|
+
"2026-02-20": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1093
|
+
"2026-02-21": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1094
|
+
"2026-02-22": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1095
|
+
"2026-02-23": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1096
|
+
"2026-02-28": { "type": "workday", "name": "\u6625\u8282\u8C03\u4F11\u73ED" },
|
|
1097
|
+
"2026-04-04": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1098
|
+
"2026-04-05": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1099
|
+
"2026-04-06": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1100
|
+
"2026-05-01": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1101
|
+
"2026-05-02": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1102
|
+
"2026-05-03": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1103
|
+
"2026-05-04": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1104
|
+
"2026-05-05": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1105
|
+
"2026-05-09": { "type": "workday", "name": "\u52B3\u52A8\u8282\u8C03\u4F11\u73ED" },
|
|
1106
|
+
"2026-06-19": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1107
|
+
"2026-06-20": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1108
|
+
"2026-06-21": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1109
|
+
"2026-09-20": { "type": "workday", "name": "\u56FD\u5E86\u8282\u8C03\u4F11\u73ED" },
|
|
1110
|
+
"2026-09-25": { "type": "holiday", "name": "\u4E2D\u79CB\u8282" },
|
|
1111
|
+
"2026-09-26": { "type": "holiday", "name": "\u4E2D\u79CB\u8282" },
|
|
1112
|
+
"2026-09-27": { "type": "holiday", "name": "\u4E2D\u79CB\u8282" },
|
|
1113
|
+
"2026-10-01": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1114
|
+
"2026-10-02": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1115
|
+
"2026-10-03": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1116
|
+
"2026-10-04": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1117
|
+
"2026-10-05": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1118
|
+
"2026-10-06": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1119
|
+
"2026-10-07": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1120
|
+
"2026-10-10": { "type": "workday", "name": "\u56FD\u5E86\u8282\u8C03\u4F11\u73ED" }
|
|
1121
|
+
};
|
|
1122
|
+
function formatDateKey(date) {
|
|
1123
|
+
const y = date.getFullYear();
|
|
1124
|
+
const m = String(date.getMonth() + 1).padStart(2, "0");
|
|
1125
|
+
const d = String(date.getDate()).padStart(2, "0");
|
|
1126
|
+
return `${y}-${m}-${d}`;
|
|
1127
|
+
}
|
|
1128
|
+
function isHoliday(date) {
|
|
1129
|
+
const key = formatDateKey(date);
|
|
1130
|
+
return holiday_in_law[key]?.type === "holiday";
|
|
1131
|
+
}
|
|
1132
|
+
function isCompensatoryWorkday(date) {
|
|
1133
|
+
const key = formatDateKey(date);
|
|
1134
|
+
return holiday_in_law[key]?.type === "workday";
|
|
1135
|
+
}
|
|
1136
|
+
function isRestDay(date) {
|
|
1137
|
+
if (isHoliday(date)) return true;
|
|
1138
|
+
const dayOfWeek = date.getDay();
|
|
1139
|
+
if (dayOfWeek === 0 || dayOfWeek === 6) {
|
|
1140
|
+
return !isCompensatoryWorkday(date);
|
|
1141
|
+
}
|
|
1142
|
+
return false;
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1116
1145
|
// src/index.ts
|
|
1117
1146
|
var program = new Command();
|
|
1118
1147
|
function getCliVersion() {
|
|
@@ -1130,7 +1159,7 @@ function showLoading(message) {
|
|
|
1130
1159
|
let frameIdx = 0;
|
|
1131
1160
|
process.stdout.write("\x1B[?25l");
|
|
1132
1161
|
const timer = setInterval(() => {
|
|
1133
|
-
process.stdout.write(`\r${
|
|
1162
|
+
process.stdout.write(`\r${chalk.cyan(SPINNER_FRAMES[frameIdx])} ${chalk.yellow(message)} `);
|
|
1134
1163
|
frameIdx = (frameIdx + 1) % SPINNER_FRAMES.length;
|
|
1135
1164
|
}, 150);
|
|
1136
1165
|
return {
|
|
@@ -1145,57 +1174,57 @@ function showLoading(message) {
|
|
|
1145
1174
|
};
|
|
1146
1175
|
}
|
|
1147
1176
|
function printBanner(title) {
|
|
1148
|
-
console.log(
|
|
1149
|
-
console.log(
|
|
1150
|
-
console.log(
|
|
1177
|
+
console.log(chalk.cyan.bold("\n" + "=".repeat(50)));
|
|
1178
|
+
console.log(chalk.blue.bold(` \u{1F41F} FISH - ${title}`));
|
|
1179
|
+
console.log(chalk.cyan.bold("=".repeat(50) + "\n"));
|
|
1151
1180
|
}
|
|
1152
1181
|
function formatSlackIndex(fish) {
|
|
1153
1182
|
if (fish >= 90) {
|
|
1154
|
-
return
|
|
1183
|
+
return chalk.green(`${fish}% (\u7EC8\u6781\u6478\u9C7C \u{1F3A3})`);
|
|
1155
1184
|
} else if (fish >= 70) {
|
|
1156
|
-
return
|
|
1185
|
+
return chalk.green(`${fish}% (\u5408\u7406\u5212\u6C34 \u2615)`);
|
|
1157
1186
|
} else if (fish >= 40) {
|
|
1158
|
-
return
|
|
1187
|
+
return chalk.yellow(`${fish}% (\u6B63\u5E38\u8425\u4E1A \u{1F4BB})`);
|
|
1159
1188
|
} else {
|
|
1160
|
-
return
|
|
1189
|
+
return chalk.red(`${fish}% (\u706B\u529B\u5168\u5F00 \u{1F525})`);
|
|
1161
1190
|
}
|
|
1162
1191
|
}
|
|
1163
1192
|
function formatNightOwlIndex(nightOwl) {
|
|
1164
1193
|
if (nightOwl >= 60) {
|
|
1165
|
-
return
|
|
1194
|
+
return chalk.red.bold(`${nightOwl}% (\u4FEE\u4ED9\u5927\u4F6C \u{1F9D9})`);
|
|
1166
1195
|
} else if (nightOwl >= 30) {
|
|
1167
|
-
return
|
|
1196
|
+
return chalk.red(`${nightOwl}% (\u591C\u732B\u51FA\u6CA1 \u{1F989})`);
|
|
1168
1197
|
} else if (nightOwl >= 10) {
|
|
1169
|
-
return
|
|
1198
|
+
return chalk.yellow(`${nightOwl}% (\u5076\u5C14\u71AC\u591C \u{1F319})`);
|
|
1170
1199
|
} else {
|
|
1171
1200
|
return "";
|
|
1172
1201
|
}
|
|
1173
1202
|
}
|
|
1174
1203
|
function formatOvertimeIndex(fish) {
|
|
1175
1204
|
if (fish >= 80) {
|
|
1176
|
-
return
|
|
1205
|
+
return chalk.green(`${fish}% (\u5468\u672B\u6478\u9C7C \u{1F3A3})`);
|
|
1177
1206
|
} else if (fish >= 50) {
|
|
1178
|
-
return
|
|
1207
|
+
return chalk.yellow(`${fish}% (\u8F7B\u5FAE\u52A0\u73ED \u{1F319})`);
|
|
1179
1208
|
} else if (fish >= 20) {
|
|
1180
|
-
return
|
|
1209
|
+
return chalk.red(`${fish}% (\u5468\u672B\u7206\u809D \u{1F525})`);
|
|
1181
1210
|
} else {
|
|
1182
|
-
return
|
|
1211
|
+
return chalk.red.bold(`${fish}% (\u7EC8\u6781\u7206\u809D \u2620\uFE0F)`);
|
|
1183
1212
|
}
|
|
1184
1213
|
}
|
|
1185
1214
|
function formatCodeVolume(totalLines) {
|
|
1186
1215
|
if (totalLines <= 0) return "";
|
|
1187
1216
|
if (totalLines >= 1e3) {
|
|
1188
|
-
return
|
|
1217
|
+
return chalk.red.bold(`${totalLines}\u884C (\u4EE3\u7801\u6838\u7206 \u2622\uFE0F)`);
|
|
1189
1218
|
} else if (totalLines >= 500) {
|
|
1190
|
-
return
|
|
1219
|
+
return chalk.magenta(`${totalLines}\u884C (\u642C\u7816\u72C2\u9B54 \u{1F69A})`);
|
|
1191
1220
|
} else if (totalLines >= 200) {
|
|
1192
|
-
return
|
|
1221
|
+
return chalk.yellow(`${totalLines}\u884C (\u5927\u578B\u6539\u52A8 \u{1F9F1})`);
|
|
1193
1222
|
} else if (totalLines >= 80) {
|
|
1194
|
-
return
|
|
1223
|
+
return chalk.cyan(`${totalLines}\u884C (\u6B63\u5E38\u8425\u4E1A \u{1F4E6})`);
|
|
1195
1224
|
} else if (totalLines >= 20) {
|
|
1196
|
-
return
|
|
1225
|
+
return chalk.green(`${totalLines}\u884C (\u7F1D\u7F1D\u8865\u8865 \u{1F527})`);
|
|
1197
1226
|
} else {
|
|
1198
|
-
return
|
|
1227
|
+
return chalk.gray(`${totalLines}\u884C (\u5C0F\u4FEE\u5C0F\u8865 \u270F\uFE0F)`);
|
|
1199
1228
|
}
|
|
1200
1229
|
}
|
|
1201
1230
|
function getPersonalityTag(day) {
|
|
@@ -1203,18 +1232,18 @@ function getPersonalityTag(day) {
|
|
|
1203
1232
|
}
|
|
1204
1233
|
function colorizeTags(tagStr) {
|
|
1205
1234
|
const colorMap = {
|
|
1206
|
-
"\u{1F41F} \u6478\u9C7C\u5B97\u5E08":
|
|
1207
|
-
"\u{1F525} \u7206\u809D\u6218\u795E":
|
|
1208
|
-
"\u{1F319} \u6DF1\u591C\u4FEE\u4ED9\u8005":
|
|
1209
|
-
"\u{1F9F1} \u52E4\u6073\u642C\u7816\u4EBA":
|
|
1210
|
-
"\u{1F4A5} \u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458":
|
|
1211
|
-
"\u{1F3F7}\uFE0F PPT \u67B6\u6784\u5E08":
|
|
1212
|
-
"\u{1F3F7}\uFE0F \u683C\u5F0F\u5316\u5927\u5E08":
|
|
1213
|
-
"\u{1F4AC} Git \u804A\u5929\u8FBE\u4EBA":
|
|
1214
|
-
"\u{1F319} \u6DF1\u591C\u523A\u5BA2":
|
|
1215
|
-
"\u{1F434} \u751F\u4EA7\u961F\u7684\u9A74":
|
|
1216
|
-
"\u{1F41F} \u6478\u9C7C\u4ED9\u4EBA":
|
|
1217
|
-
"\u{1F41F} \u4ECA\u65E5\u6682\u65E0\u4EE3\u7801\u6D3B\u52A8":
|
|
1235
|
+
"\u{1F41F} \u6478\u9C7C\u5B97\u5E08": chalk.green,
|
|
1236
|
+
"\u{1F525} \u7206\u809D\u6218\u795E": chalk.red.bold,
|
|
1237
|
+
"\u{1F319} \u6DF1\u591C\u4FEE\u4ED9\u8005": chalk.red,
|
|
1238
|
+
"\u{1F9F1} \u52E4\u6073\u642C\u7816\u4EBA": chalk.yellow,
|
|
1239
|
+
"\u{1F4A5} \u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458": chalk.magenta,
|
|
1240
|
+
"\u{1F3F7}\uFE0F PPT \u67B6\u6784\u5E08": chalk.blue,
|
|
1241
|
+
"\u{1F3F7}\uFE0F \u683C\u5F0F\u5316\u5927\u5E08": chalk.cyan,
|
|
1242
|
+
"\u{1F4AC} Git \u804A\u5929\u8FBE\u4EBA": chalk.greenBright,
|
|
1243
|
+
"\u{1F319} \u6DF1\u591C\u523A\u5BA2": chalk.redBright,
|
|
1244
|
+
"\u{1F434} \u751F\u4EA7\u961F\u7684\u9A74": chalk.yellowBright,
|
|
1245
|
+
"\u{1F41F} \u6478\u9C7C\u4ED9\u4EBA": chalk.green.bold,
|
|
1246
|
+
"\u{1F41F} \u4ECA\u65E5\u6682\u65E0\u4EE3\u7801\u6D3B\u52A8": chalk.green
|
|
1218
1247
|
};
|
|
1219
1248
|
const sortedKeys = Object.keys(colorMap).sort((a, b) => b.length - a.length);
|
|
1220
1249
|
let result = tagStr;
|
|
@@ -1252,11 +1281,11 @@ function colorizeFishRow(row) {
|
|
|
1252
1281
|
if (isNaN(val)) {
|
|
1253
1282
|
result += chunk;
|
|
1254
1283
|
} else if (val >= 80) {
|
|
1255
|
-
result +=
|
|
1284
|
+
result += chalk.green(chunk);
|
|
1256
1285
|
} else if (val >= 40) {
|
|
1257
|
-
result +=
|
|
1286
|
+
result += chalk.yellow(chunk);
|
|
1258
1287
|
} else {
|
|
1259
|
-
result +=
|
|
1288
|
+
result += chalk.red(chunk);
|
|
1260
1289
|
}
|
|
1261
1290
|
}
|
|
1262
1291
|
return result;
|
|
@@ -1277,61 +1306,61 @@ function randomPick(arr) {
|
|
|
1277
1306
|
return arr[Math.floor(Math.random() * arr.length)];
|
|
1278
1307
|
}
|
|
1279
1308
|
var COMMENT_POOLS = {
|
|
1280
|
-
"0-2": { color:
|
|
1309
|
+
"0-2": { color: chalk.red, tags: [
|
|
1281
1310
|
"\u670D\u52A1\u5668\u548C\u4F60\uFF0C\u603B\u5F97\u6709\u4E00\u4E2A\u7761\u89C9 \u{1F635}\u200D\u{1F4AB}",
|
|
1282
1311
|
"\u591C\u732B\u4FEE\u4ED9 \u{1F9D9}",
|
|
1283
1312
|
"\u8FD9\u63D0\u4EA4\u4E0D\u50CF\u5DE5\u4F5C\uFF0C\u50CF\u62A5\u590D\u4EE3\u7801 \u{1F608}",
|
|
1284
1313
|
"\u6DF1\u591C\u4FEE\u4ED9\u578B\u7A0B\u5E8F\u5458 \u{1F319}"
|
|
1285
1314
|
] },
|
|
1286
|
-
"3-5": { color:
|
|
1315
|
+
"3-5": { color: chalk.redBright, tags: [
|
|
1287
1316
|
"\u960E\u738B\uFF1A\u600E\u4E48\u53C8\u662F\u4F60\uFF1F\u{1F47B}",
|
|
1288
1317
|
"\u751F\u7269\u949F\u5DF2\u9635\u4EA1 \u2620\uFE0F",
|
|
1289
1318
|
"\u54E5\uFF0C\u4F60\u662F\u4F4F\u516C\u53F8\u4E86\u5417 \u{1F3E2}",
|
|
1290
1319
|
"\u9E21\u9E23\u5373\u8D77\u578B\u725B\u9A6C \u{1F414}"
|
|
1291
1320
|
] },
|
|
1292
|
-
"6-8": { color:
|
|
1321
|
+
"6-8": { color: chalk.gray, tags: [
|
|
1293
1322
|
"\u9E21\u90FD\u6CA1\u8D77\uFF0C\u4F60\u5148\u4E0A\u73ED\u4E86 \u{1F414}",
|
|
1294
1323
|
"\u5929\u9009\u725B\u9A6C\u5DF2\u4E0A\u7EBF \u{1F402}",
|
|
1295
1324
|
"\u7206\u809D\u542F\u52A8\u6210\u529F \u{1F680}",
|
|
1296
1325
|
"\u65E9\u8D77\u7684 commit \u6709 bug \u5403 \u{1F41B}"
|
|
1297
1326
|
] },
|
|
1298
|
-
"9-11": { color:
|
|
1327
|
+
"9-11": { color: chalk.yellow, tags: [
|
|
1299
1328
|
"\u5047\u88C5\u5F88\u5FD9\uFF0C\u5176\u5B9E\u5728\u7B49\u5348\u996D \u{1F371}",
|
|
1300
1329
|
"\u6668\u95F4coding \u2615",
|
|
1301
1330
|
"\u6B63\u5E38\u4EBA\u7C7B\u5DE5\u4F5C\u65F6\u95F4 \u2705",
|
|
1302
1331
|
"\u4E0A\u5348\u8868\u6F14\u578B\u9009\u624B \u{1F680}"
|
|
1303
1332
|
] },
|
|
1304
|
-
"12-13": { color:
|
|
1333
|
+
"12-13": { color: chalk.green, tags: [
|
|
1305
1334
|
"\u5DE5\u4F4D\u5403\u996D\uFF0C\u7075\u9B42\u7EED\u547D \u{1F50B}",
|
|
1306
1335
|
"\u5E72\u996D\u662F\u7B2C\u4E00\u751F\u4EA7\u529B \u{1F35A}",
|
|
1307
1336
|
"\u4E00\u8FB9\u5403\u996D\u4E00\u8FB9 commit \u{1F35C}",
|
|
1308
1337
|
"\u5E72\u996D\u7EED\u547D\u578B\u5DE5\u7A0B\u5E08 \u{1F371}"
|
|
1309
1338
|
] },
|
|
1310
|
-
"14-15": { color:
|
|
1339
|
+
"14-15": { color: chalk.cyan, tags: [
|
|
1311
1340
|
"\u5348\u7761\u672A\u9192\uFF0C\u4EBA\u5DF2\u5F00\u5DE5 \u{1F62A}",
|
|
1312
1341
|
"CPU \u91CD\u542F\u4E2D \u{1F504}",
|
|
1313
1342
|
// '午觉没睡成,拿代码出气 💢',
|
|
1314
1343
|
"\u5348\u540E\u7075\u9B42\u51FA\u7A8D\u8005 \u{1F47B}"
|
|
1315
1344
|
] },
|
|
1316
|
-
"16-17": { color:
|
|
1345
|
+
"16-17": { color: chalk.cyanBright, tags: [
|
|
1317
1346
|
"\u5F00\u59CB\u601D\u8003\u4ECA\u665A\u5403\u4EC0\u4E48 \u{1F373}",
|
|
1318
1347
|
"\u7075\u9B42\u5DF2\u4E0B\u73ED \u{1F47B}",
|
|
1319
1348
|
"\u4E34\u8FD1\u4E0B\u73ED\u7A81\u7136\u52E4\u594B \u{1F914}",
|
|
1320
1349
|
"\u7B49\u4E0B\u73ED\u89C2\u5BDF\u5458 \u{1F375}"
|
|
1321
1350
|
] },
|
|
1322
|
-
"18-20": { color:
|
|
1351
|
+
"18-20": { color: chalk.magenta, tags: [
|
|
1323
1352
|
"\u52A0\u73ED\u662F\u4E0D\u53EF\u80FD\u4E3B\u52A8\u52A0\u73ED\u7684 \u{1F4BC}",
|
|
1324
1353
|
"\u5DE5\u4F4D\u5C01\u5370\u89E3\u9664 \u{1F513}",
|
|
1325
1354
|
"\u767D\u5929\u5728\u5F00\u4F1A\uFF0C\u665A\u4E0A\u771F\u5E72\u6D3B \u{1F4BB}",
|
|
1326
1355
|
"\u81EA\u613F\uFF08\u88AB\u8FEB\uFF09\u52A0\u73ED\u4EBA \u{1F4AA}"
|
|
1327
1356
|
] },
|
|
1328
|
-
"21-22": { color:
|
|
1357
|
+
"21-22": { color: chalk.magentaBright, tags: [
|
|
1329
1358
|
"\u8001\u677F\u4E0B\u73ED\u4E86\uFF0C\u4F60\u8FD8\u6CA1\u4E0B\u7EBF \u{1F62D}",
|
|
1330
1359
|
"\u52A0\u73ED\u4ED9\u4EBA\u6E21\u52AB\u4E2D \u26A1",
|
|
1331
1360
|
"\u4ECA\u65E5\u6700\u540E\u4E00\u4E2A commit\uFF08\u9A97\u81EA\u5DF1\uFF09\u{1F921}",
|
|
1332
1361
|
"\u5927\u798F\u62A5\u65F6\u95F4 \u{1F525}"
|
|
1333
1362
|
] },
|
|
1334
|
-
"23": { color:
|
|
1363
|
+
"23": { color: chalk.red, tags: [
|
|
1335
1364
|
"\u4EE3\u7801\u548C\u5934\u53D1\u4E00\u8D77\u6389\u5149\u4E2D \u{1F9D1}\u200D\u{1F9B2}",
|
|
1336
1365
|
"\u4ECA\u65E5 KPI\uFF1A\u6D3B\u7740\u5C31\u884C \u{1F60C}",
|
|
1337
1366
|
"\u7761\u5427\uFF0CGit \u4E0D\u4F1A\u8DD1 \u{1F6CC}",
|
|
@@ -1368,11 +1397,11 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1368
1397
|
const config = readConfig();
|
|
1369
1398
|
const hasGitLab = config.gitlabToken || config.gitlabs && config.gitlabs.length > 0;
|
|
1370
1399
|
if (!hasGit && config.projects.length === 0 && !hasGitLab) {
|
|
1371
|
-
console.log(
|
|
1372
|
-
console.log(
|
|
1373
|
-
console.log(` ${
|
|
1374
|
-
console.log(` ${
|
|
1375
|
-
console.log(` ${
|
|
1400
|
+
console.log(chalk.yellow(`\u26A0 \u63D0\u793A: \u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u4E0D\u662F\u4E00\u4E2A Git \u4ED3\u5E93\u3002`));
|
|
1401
|
+
console.log(chalk.gray(`\u4F60\u53EF\u4EE5\u901A\u8FC7\u4EE5\u4E0B\u547D\u4EE4\u914D\u7F6E\u9879\u76EE\u6216 GitLab\uFF1A`));
|
|
1402
|
+
console.log(` ${chalk.cyan("fish config add <path>")} - \u624B\u52A8\u6DFB\u52A0\u672C\u5730\u4ED3\u5E93`);
|
|
1403
|
+
console.log(` ${chalk.cyan("fish config scan <dir>")} - \u81EA\u52A8\u626B\u63CF\u76EE\u5F55\u4E0B\u6240\u6709\u4ED3\u5E93`);
|
|
1404
|
+
console.log(` ${chalk.cyan("fish config gitlab <token> [host] [name]")} - \u914D\u7F6E GitLab \u4EE4\u724C\u4EE5\u8FDC\u7A0B\u540C\u6B65\u6240\u6709\u9879\u76EE
|
|
1376
1405
|
`);
|
|
1377
1406
|
}
|
|
1378
1407
|
}
|
|
@@ -1385,7 +1414,7 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1385
1414
|
const loading = showLoading("\u6B63\u5728\u6478\u904D\u6240\u6709\u4ED3\u5E93...");
|
|
1386
1415
|
const stats = await analyzeWeekly(projects, targetDate, source);
|
|
1387
1416
|
loading.stop();
|
|
1388
|
-
console.log(
|
|
1417
|
+
console.log(chalk.cyan.bold("\u{1F4C5} \u672C\u5468\u63D0\u4EA4\u8BE6\u60C5\uFF1A"));
|
|
1389
1418
|
stats.days.forEach((day, idx) => {
|
|
1390
1419
|
const isWeekend = idx >= 5;
|
|
1391
1420
|
const isFuture = idx > currentDayOfWeek;
|
|
@@ -1393,10 +1422,10 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1393
1422
|
return;
|
|
1394
1423
|
}
|
|
1395
1424
|
if (isFuture && day.commitsCount === 0) {
|
|
1396
|
-
console.log(` ${day.dayName}\uFF1A${
|
|
1425
|
+
console.log(` ${day.dayName}\uFF1A${chalk.gray("\u672A\u5230")}`);
|
|
1397
1426
|
} else {
|
|
1398
|
-
const projStr = day.projects.length > 0 ? ` | ${day.projects.length}\u4E2A\u9879\u76EE
|
|
1399
|
-
const commitStr = day.commitsCount > 0 ?
|
|
1427
|
+
const projStr = day.projects.length > 0 ? ` | ${day.projects.length}\u4E2A\u9879\u76EE (${day.projects.join(", ")})` : "";
|
|
1428
|
+
const commitStr = day.commitsCount > 0 ? chalk.white.bold(`${day.commitsCount} \u6B21`) : "0 \u6B21";
|
|
1400
1429
|
const indices = [];
|
|
1401
1430
|
if (isWeekend) {
|
|
1402
1431
|
indices.push(`\u{1F4BC} \u52A0\u73ED\u6307\u6570: ${formatOvertimeIndex(day.fish)}`);
|
|
@@ -1417,19 +1446,17 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1417
1446
|
console.log(` ${day.dayName}\uFF1A${commitStr}${extraIndices}${projStr}${branchStr}${tagStr}`);
|
|
1418
1447
|
}
|
|
1419
1448
|
});
|
|
1420
|
-
console.log("\n" +
|
|
1449
|
+
console.log("\n" + chalk.gray("-".repeat(50)));
|
|
1421
1450
|
if (stats.totalCommits > 0) {
|
|
1422
1451
|
const activeDays = stats.days.filter((_, idx) => idx <= currentDayOfWeek);
|
|
1423
|
-
const workingDays = activeDays.filter((d) => d.commitsCount > 0);
|
|
1452
|
+
const workingDays = activeDays.filter((d) => d.commitsCount > 0 && d.dayName !== "\u5468\u516D" && d.dayName !== "\u5468\u65E5");
|
|
1424
1453
|
if (workingDays.length > 0) {
|
|
1425
1454
|
const minFish = Math.min(...workingDays.map((d) => d.fish));
|
|
1426
1455
|
const mostProductiveDays = workingDays.filter((d) => d.fish === minFish);
|
|
1427
1456
|
if (minFish <= 40 && mostProductiveDays.length > 0) {
|
|
1428
1457
|
const names = mostProductiveDays.map((d) => d.dayName).join("\u3001");
|
|
1429
1458
|
const sample = mostProductiveDays[0];
|
|
1430
|
-
|
|
1431
|
-
const label = isWeekend ? "\u{1F4BC} \u52A0\u73ED\u6307\u6570" : "\u{1F41F} \u6478\u9C7C\u6307\u6570";
|
|
1432
|
-
console.log(`\u{1F3C6} ${chalk2.red.bold("\u6700\u52AA\u529B\u7684\u65E5\u5B50")}\uFF1A${names} | ${label}\uFF1A${sample.fish}%`);
|
|
1459
|
+
console.log(`\u{1F3C6} ${chalk.red.bold("\u6700\u52AA\u529B\u7684\u65E5\u5B50")}\uFF1A${names} | \u{1F41F} \u6478\u9C7C\u6307\u6570\uFF1A${sample.fish}%`);
|
|
1433
1460
|
}
|
|
1434
1461
|
}
|
|
1435
1462
|
const weekdayDays = activeDays.filter((d) => d.dayName !== "\u5468\u516D" && d.dayName !== "\u5468\u65E5");
|
|
@@ -1443,7 +1470,7 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1443
1470
|
if (maxFish >= 70 && filteredHappyDays.length > 0) {
|
|
1444
1471
|
const names = filteredHappyDays.map((d) => d.dayName).join("\u3001");
|
|
1445
1472
|
const sample = filteredHappyDays[0];
|
|
1446
|
-
console.log(`\u2615 ${
|
|
1473
|
+
console.log(`\u2615 ${chalk.green.bold("\u6700\u5FEB\u4E50\u7684\u65E5\u5B50")}\uFF1A${names} | \u{1F41F} \u6478\u9C7C\u6307\u6570\uFF1A${sample.fish}%`);
|
|
1447
1474
|
}
|
|
1448
1475
|
}
|
|
1449
1476
|
const weekendDays = activeDays.filter((d) => d.commitsCount > 0 && (d.dayName === "\u5468\u516D" || d.dayName === "\u5468\u65E5"));
|
|
@@ -1452,16 +1479,16 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1452
1479
|
const painfulDays = weekendDays.filter((d) => d.fish === minFish);
|
|
1453
1480
|
const names = painfulDays.map((d) => d.dayName).join("\u3001");
|
|
1454
1481
|
const sample = painfulDays[0];
|
|
1455
|
-
console.log(`\u{1F62D} ${
|
|
1482
|
+
console.log(`\u{1F62D} ${chalk.magenta.bold("\u6700\u75DB\u82E6\u7684\u65E5\u5B50")}\uFF1A${names} | \u{1F4BC} \u52A0\u73ED\u6307\u6570\uFF1A${sample.fish}%`);
|
|
1456
1483
|
}
|
|
1457
|
-
console.log(
|
|
1484
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1458
1485
|
const avgNightStr = stats.averageNightOwl > 0 ? ` | \u{1F319} \u4FEE\u4ED9: ${stats.averageNightOwl}%` : "";
|
|
1459
|
-
console.log(
|
|
1460
|
-
console.log(
|
|
1461
|
-
console.log(`\u{1F916} ${
|
|
1462
|
-
console.log(
|
|
1486
|
+
console.log(chalk.cyan.bold(`\u{1F4CA} \u672C\u5468\u5747\u503C\uFF1A\u{1F41F} \u6478\u9C7C\u6307\u6570 ${stats.averageFish}%${avgNightStr}`));
|
|
1487
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1488
|
+
console.log(`\u{1F916} ${chalk.magenta.bold("\u9510\u8BC4")}\uFF1A`);
|
|
1489
|
+
console.log(chalk.white(getAICritic(stats)));
|
|
1463
1490
|
} else {
|
|
1464
|
-
console.log(
|
|
1491
|
+
console.log(chalk.yellow("\u{1F4A1} \u672C\u65F6\u95F4\u6BB5\u5185\u4F60\u8FD8\u6CA1\u63D0\u4EA4\u8FC7\u4EFB\u4F55\u4EE3\u7801\uFF01\u5B8C\u7F8E\u7684\u85AA\u6C34\u5C0F\u5077\u3002\u6216\u8005\u68C0\u67E5\u4F60\u7684\u914D\u7F6E\u5427\uFF01"));
|
|
1465
1492
|
}
|
|
1466
1493
|
console.log("");
|
|
1467
1494
|
}
|
|
@@ -1481,26 +1508,26 @@ async function runMonthlyReport(monthsAgo, source) {
|
|
|
1481
1508
|
const stats = await analyzeMonthly(projects, targetDate, source);
|
|
1482
1509
|
loading.stop();
|
|
1483
1510
|
if (stats.totalCommits === 0) {
|
|
1484
|
-
console.log(
|
|
1511
|
+
console.log(chalk.yellow("\u{1F4A1} \u672C\u6708\u5728\u6B64\u4ED3\u5E93\u6682\u672A\u53D1\u73B0\u4EFB\u4F55 Git \u63D0\u4EA4\u6570\u636E\u3002\n"));
|
|
1485
1512
|
return;
|
|
1486
1513
|
}
|
|
1487
1514
|
const { fix, feat, chore, other } = stats.categories;
|
|
1488
1515
|
const total = fix + feat + chore + other;
|
|
1489
|
-
console.log(
|
|
1516
|
+
console.log(chalk.cyan.bold("\u{1F4C5} \u672C\u6708\u4E3B\u8981\u8D21\u732E\u5360\u6BD4 (\u57FA\u4E8E Commit Message \u6B63\u5219\u5F52\u7C7B)\uFF1A"));
|
|
1490
1517
|
function drawRow(label, count, colorFn) {
|
|
1491
1518
|
const percentage = total > 0 ? Math.round(count / total * 100) : 0;
|
|
1492
1519
|
const barWidth = 15;
|
|
1493
1520
|
const filled = Math.round(percentage / 100 * barWidth);
|
|
1494
1521
|
const empty = barWidth - filled;
|
|
1495
|
-
const barStr = colorFn("\u25A0".repeat(filled)) +
|
|
1496
|
-
console.log(` - ${label}\uFF1A[${barStr}] ${
|
|
1522
|
+
const barStr = colorFn("\u25A0".repeat(filled)) + chalk.gray("\u25A1".repeat(empty));
|
|
1523
|
+
console.log(` - ${label}\uFF1A[${barStr}] ${chalk.bold(percentage + "%")} (${count} \u6B21)`);
|
|
1497
1524
|
}
|
|
1498
|
-
drawRow("\u4FEE bug (fix) ", fix,
|
|
1499
|
-
drawRow("\u65B0\u529F\u80FD (feat) ", feat,
|
|
1500
|
-
drawRow("\u6742\u52A1\u4E0E\u6587\u6863 (chore) ", chore,
|
|
1501
|
-
drawRow("\u5176\u4ED6\u63D0\u4EA4 (other) ", other,
|
|
1525
|
+
drawRow("\u4FEE bug (fix) ", fix, chalk.red);
|
|
1526
|
+
drawRow("\u65B0\u529F\u80FD (feat) ", feat, chalk.green);
|
|
1527
|
+
drawRow("\u6742\u52A1\u4E0E\u6587\u6863 (chore) ", chore, chalk.yellow);
|
|
1528
|
+
drawRow("\u5176\u4ED6\u63D0\u4EA4 (other) ", other, chalk.gray);
|
|
1502
1529
|
if (stats.dailyIndices && stats.dailyIndices.length > 0) {
|
|
1503
|
-
console.log("\n" +
|
|
1530
|
+
console.log("\n" + chalk.cyan.bold("\u{1F4C5} \u6BCF\u65E5\u6478\u9C7C\u6307\u6570\u6982\u89C8\uFF1A"));
|
|
1504
1531
|
const monthLabel = `${targetDate.getMonth() + 1}\u6708`;
|
|
1505
1532
|
const COL_WIDTH = 8;
|
|
1506
1533
|
const weekHeaders = ["\u5468\u4E00", "\u5468\u4E8C", "\u5468\u4E09", "\u5468\u56DB", "\u5468\u4E94", "\u5468\u516D", "\u5468\u65E5"];
|
|
@@ -1509,7 +1536,7 @@ async function runMonthlyReport(monthsAgo, source) {
|
|
|
1509
1536
|
const lines = [];
|
|
1510
1537
|
let dateRow = "";
|
|
1511
1538
|
let fishRow = "";
|
|
1512
|
-
lines.push(
|
|
1539
|
+
lines.push(chalk.gray(weekHeaders.map((d) => visualPad(d, COL_WIDTH)).join("").trimEnd()));
|
|
1513
1540
|
for (let i = 0; i < firstDayOffset; i++) {
|
|
1514
1541
|
dateRow += visualPad("", COL_WIDTH);
|
|
1515
1542
|
fishRow += visualPad("", COL_WIDTH);
|
|
@@ -1518,10 +1545,23 @@ async function runMonthlyReport(monthsAgo, source) {
|
|
|
1518
1545
|
const dateRaw = `${monthLabel}${d.day}\u65E5`;
|
|
1519
1546
|
const fishRaw = `${d.fish}%`;
|
|
1520
1547
|
const columnIndex = (firstDayOffset + d.day - 1) % 7;
|
|
1521
|
-
|
|
1548
|
+
const dateObj = new Date(targetDate.getFullYear(), targetDate.getMonth(), d.day);
|
|
1549
|
+
let suffix = "";
|
|
1550
|
+
let suffixPlain = "";
|
|
1551
|
+
if (isHoliday(dateObj)) {
|
|
1552
|
+
suffix = chalk.green("\u2022");
|
|
1553
|
+
suffixPlain = "\u2022";
|
|
1554
|
+
} else if (isCompensatoryWorkday(dateObj)) {
|
|
1555
|
+
suffix = chalk.red("!");
|
|
1556
|
+
suffixPlain = "!";
|
|
1557
|
+
}
|
|
1558
|
+
const plainText = dateRaw + suffixPlain;
|
|
1559
|
+
const vw = visualWidth(plainText);
|
|
1560
|
+
const padding = vw < COL_WIDTH ? " ".repeat(COL_WIDTH - vw) : "";
|
|
1561
|
+
dateRow += dateRaw + suffix + padding;
|
|
1522
1562
|
fishRow += visualPad(fishRaw, COL_WIDTH);
|
|
1523
1563
|
if (columnIndex === 6 || d === stats.dailyIndices[stats.dailyIndices.length - 1]) {
|
|
1524
|
-
lines.push(
|
|
1564
|
+
lines.push(chalk.gray(dateRow.trimEnd()));
|
|
1525
1565
|
fishRow = colorizeFishRow(fishRow);
|
|
1526
1566
|
lines.push(fishRow);
|
|
1527
1567
|
lines.push("");
|
|
@@ -1533,23 +1573,43 @@ async function runMonthlyReport(monthsAgo, source) {
|
|
|
1533
1573
|
for (const l of lines) {
|
|
1534
1574
|
console.log(` ${l}`);
|
|
1535
1575
|
}
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1576
|
+
}
|
|
1577
|
+
let adjustedAvgFish;
|
|
1578
|
+
if (stats.dailyIndices && stats.dailyIndices.length > 0) {
|
|
1579
|
+
const activeDailyIndices = stats.dailyIndices.filter((d) => {
|
|
1580
|
+
const dateObj = new Date(targetDate.getFullYear(), targetDate.getMonth(), d.day);
|
|
1581
|
+
if (isRestDay(dateObj) && d.commitsCount === 0) return false;
|
|
1582
|
+
return true;
|
|
1583
|
+
});
|
|
1584
|
+
if (activeDailyIndices.length > 0) {
|
|
1585
|
+
const minFish = Math.min(...activeDailyIndices.map((d) => d.fish));
|
|
1586
|
+
const mostProductive = activeDailyIndices.filter((d) => d.fish === minFish);
|
|
1587
|
+
if (minFish <= 40 && mostProductive.length > 0) {
|
|
1588
|
+
const names = mostProductive.map((d) => `${d.day}\u65E5`).join("\u3001");
|
|
1589
|
+
const monthLabel = `${targetDate.getMonth() + 1}\u6708`;
|
|
1590
|
+
console.log(`
|
|
1591
|
+
\u{1F3C6} ${chalk.red.bold("\u7206\u809D\u738B")}\uFF1A${monthLabel}${names} | \u{1F41F} \u6478\u9C7C\u6307\u6570\uFF1A${minFish}%`);
|
|
1543
1592
|
}
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1593
|
+
const maxFish = Math.max(...activeDailyIndices.map((d) => d.fish));
|
|
1594
|
+
const mostSlacky = activeDailyIndices.filter((d) => d.fish === maxFish);
|
|
1595
|
+
const filteredSlacky = mostSlacky.filter(
|
|
1596
|
+
(d) => d.fish !== minFish || activeDailyIndices.length === 0
|
|
1597
|
+
);
|
|
1598
|
+
if (maxFish >= 70 && filteredSlacky.length > 0) {
|
|
1599
|
+
const names = filteredSlacky.map((d) => `${d.day}\u65E5`).join("\u3001");
|
|
1600
|
+
const monthLabel = `${targetDate.getMonth() + 1}\u6708`;
|
|
1601
|
+
console.log(`\u2615 ${chalk.green.bold("\u6478\u9C7C\u738B")}\uFF1A${monthLabel}${names} | \u{1F41F} \u6478\u9C7C\u6307\u6570\uFF1A${maxFish}%`);
|
|
1547
1602
|
}
|
|
1603
|
+
adjustedAvgFish = Math.round(
|
|
1604
|
+
activeDailyIndices.reduce((sum, d) => sum + d.fish, 0) / activeDailyIndices.length
|
|
1605
|
+
);
|
|
1606
|
+
console.log("" + chalk.gray("-".repeat(50)));
|
|
1607
|
+
console.log(chalk.cyan.bold(`\u{1F4CA} \u672C\u6708\u5747\u503C\uFF1A\u{1F41F} \u6478\u9C7C\u6307\u6570 ${adjustedAvgFish}%`));
|
|
1548
1608
|
}
|
|
1549
1609
|
}
|
|
1550
|
-
console.log(
|
|
1551
|
-
console.log(`\u{1F916} ${
|
|
1552
|
-
console.log(
|
|
1610
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1611
|
+
console.log(`\u{1F916} ${chalk.magenta.bold("\u9510\u8BC4")}\uFF1A`);
|
|
1612
|
+
console.log(chalk.white(getAICriticForMonth(stats, adjustedAvgFish)));
|
|
1553
1613
|
console.log("");
|
|
1554
1614
|
}
|
|
1555
1615
|
async function runProjectReport(weeksAgo, source, isMonth = false) {
|
|
@@ -1570,10 +1630,10 @@ async function runProjectReport(weeksAgo, source, isMonth = false) {
|
|
|
1570
1630
|
const loading = showLoading("\u6B63\u5728\u7EDF\u8BA1\u9879\u76EE\u7206\u809D\u7A0B\u5EA6...");
|
|
1571
1631
|
const stats = isMonth ? await analyzeMonthly(projects, targetDate, source) : await analyzeWeekly(projects, targetDate, source);
|
|
1572
1632
|
loading.stop();
|
|
1573
|
-
console.log(
|
|
1633
|
+
console.log(chalk.cyan.bold(`\u{1F4CA} \u5BF9\u5E94\u65F6\u6BB5\u9879\u76EE\u7206\u809D\u6392\u884C (${since.toLocaleDateString()} ~ ${until.toLocaleDateString()})`));
|
|
1574
1634
|
const ranked = stats.projectsRanked;
|
|
1575
1635
|
if (ranked.length === 0) {
|
|
1576
|
-
console.log(
|
|
1636
|
+
console.log(chalk.gray(" \u672C\u65F6\u6BB5\u6682\u65E0\u9879\u76EE\u63D0\u4EA4\u6570\u636E\u3002"));
|
|
1577
1637
|
} else {
|
|
1578
1638
|
const totalCommits = ranked.reduce((sum, p) => sum + p.count, 0);
|
|
1579
1639
|
let hasPrimaryProject = false;
|
|
@@ -1583,21 +1643,21 @@ async function runProjectReport(weeksAgo, source, isMonth = false) {
|
|
|
1583
1643
|
let suffix;
|
|
1584
1644
|
if (ratio >= 0.5 || N >= 30) {
|
|
1585
1645
|
if (!hasPrimaryProject) {
|
|
1586
|
-
suffix =
|
|
1646
|
+
suffix = chalk.red(" (\u4E3B\u529B\u642C\u7816\u5730 \u{1F9F1})");
|
|
1587
1647
|
hasPrimaryProject = true;
|
|
1588
1648
|
} else {
|
|
1589
|
-
suffix =
|
|
1649
|
+
suffix = chalk.red(" (\u9B42\u5F52\u4E4B\u5904\uFF0C\u4EE3\u7801\u5728\u8FD9\u5BB6\u5C31\u5728 \u{1F3E0})");
|
|
1590
1650
|
}
|
|
1591
1651
|
} else if (ratio >= 0.2 || N >= 14) {
|
|
1592
|
-
suffix =
|
|
1652
|
+
suffix = chalk.magenta(" (\u591A\u7EBF\u7A0B\u5206\u51FA\u6765\u7684\u6253\u5DE5\u9B42 \u{1F9F5})");
|
|
1593
1653
|
} else if (ratio >= 0.15 || N >= 5) {
|
|
1594
|
-
suffix =
|
|
1654
|
+
suffix = chalk.yellow(" (\u5076\u5C14\u4E0A\u53BB\u70B9\u4E00\u4E0B \u{1F41F})");
|
|
1595
1655
|
} else if (N === 1) {
|
|
1596
|
-
suffix =
|
|
1656
|
+
suffix = chalk.cyan(" (\u6D4B\u5B8C\u5C31\u8DD1\uFF0C\u7EAF\u7CB9\u8DEF\u8FC7 \u{1F6AC})");
|
|
1597
1657
|
} else {
|
|
1598
|
-
suffix =
|
|
1658
|
+
suffix = chalk.gray(" (\u8FB9\u7F18\u6302\u673A\u9879\u76EE \u{1F4A4})");
|
|
1599
1659
|
}
|
|
1600
|
-
console.log(` ${idx + 1}. ${
|
|
1660
|
+
console.log(` ${idx + 1}. ${chalk.bold.white(proj.name)}: ${chalk.cyan(N + " \u6B21\u63D0\u4EA4")}${suffix}`);
|
|
1601
1661
|
});
|
|
1602
1662
|
}
|
|
1603
1663
|
console.log("");
|
|
@@ -1622,14 +1682,14 @@ async function runTimeReport(offset, source, isMonth) {
|
|
|
1622
1682
|
loading.stop();
|
|
1623
1683
|
const maxCount = Math.max(...hours.map((h) => h.count));
|
|
1624
1684
|
const barScale = maxCount > 0 ? 30 / maxCount : 1;
|
|
1625
|
-
console.log(
|
|
1685
|
+
console.log(chalk.cyan.bold(`\u{1F552} \u5BF9\u5E94\u65F6\u6BB5 24 \u5C0F\u65F6 commit \u9891\u6B21\u5206\u5E03\u56FE\uFF1A`));
|
|
1626
1686
|
hours.forEach(({ hour, count }) => {
|
|
1627
1687
|
const barLength = Math.round(count * barScale);
|
|
1628
1688
|
const barStr = "\u2588".repeat(barLength);
|
|
1629
1689
|
const hourStr = String(hour).padStart(2, "0") + ":00";
|
|
1630
1690
|
let tag = count > 0 ? getHourTag(hour) : "";
|
|
1631
|
-
const barColorStr = count > 0 ?
|
|
1632
|
-
console.log(` ${
|
|
1691
|
+
const barColorStr = count > 0 ? chalk.blue(barStr.padEnd(30, " ")) : chalk.gray("".padEnd(30, " "));
|
|
1692
|
+
console.log(` ${chalk.bold.cyan(hourStr)} | [${barColorStr}] ${chalk.white(count + " \u6B21")}${tag}`);
|
|
1633
1693
|
});
|
|
1634
1694
|
console.log("");
|
|
1635
1695
|
}
|
|
@@ -1646,19 +1706,19 @@ async function runGhostReport(weeksAgo, source) {
|
|
|
1646
1706
|
const ghosts = await getGhostCommits(projects, since, until, source);
|
|
1647
1707
|
loading.stop();
|
|
1648
1708
|
if (ghosts.length === 0) {
|
|
1649
|
-
console.log(
|
|
1650
|
-
console.log(
|
|
1709
|
+
console.log(chalk.green.bold("\u{1F389} \u606D\u559C\uFF01\u672C\u65F6\u95F4\u6BB5\u5185\u672A\u68C0\u6D4B\u5230\u4EFB\u4F55\u6DF1\u591C\u5E7D\u7075\u63D0\u4EA4\u3002"));
|
|
1710
|
+
console.log(chalk.white("\u4F60\u7684\u53D1\u9645\u7EBF\u5341\u5206\u5B89\u5168\uFF0C\u5927\u798F\u62A5\u5DF2\u88AB\u65E0\u60C5\u62D2\u6536\uFF0C\u7761\u7720\u5065\u5EB7\u5F97\u5206\uFF1A100 \u5206\uFF01\n"));
|
|
1651
1711
|
} else {
|
|
1652
|
-
console.log(
|
|
1653
|
-
console.log(
|
|
1654
|
-
console.log(
|
|
1712
|
+
console.log(chalk.red.bold(`\u26A0\uFE0F \u8B66\u544A\uFF1A\u672C\u65F6\u95F4\u6BB5\u5185\u5171\u68C0\u6D4B\u5230 ${ghosts.length} \u6B21\u6DF1\u591C\u5E7D\u7075\u63D0\u4EA4\uFF01`));
|
|
1713
|
+
console.log(chalk.gray("\u6DF1\u591C\u7684 Commit \u95EA\u70C1\u7740\u7EFF\u5149\uFF0C\u6BCF\u4E00\u884C\u90FD\u662F\u7ED9\u8001\u677F\u5E93\u91CC\u5357\u52A0\u6CB9\u7684\u6C57\u6C34\u3002"));
|
|
1714
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1655
1715
|
ghosts.forEach((c) => {
|
|
1656
|
-
console.log(` - [${
|
|
1657
|
-
console.log(` \u{1F4AC} ${
|
|
1716
|
+
console.log(` - [${chalk.yellow(c.project)}] ${chalk.cyan(c.date.slice(0, 19).replace("T", " "))} (${chalk.gray(c.hash)})`);
|
|
1717
|
+
console.log(` \u{1F4AC} ${chalk.italic.white(c.message)}`);
|
|
1658
1718
|
});
|
|
1659
|
-
console.log(
|
|
1660
|
-
console.log(`\u{1F916} ${
|
|
1661
|
-
console.log(
|
|
1719
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1720
|
+
console.log(`\u{1F916} ${chalk.magenta.bold("\u9510\u8BC4")}\uFF1A`);
|
|
1721
|
+
console.log(chalk.red("\u547D\u662F\u81EA\u5DF1\u7684\uFF0C\u5927\u798F\u62A5\u7559\u7ED9\u8001\u677F\u5427\uFF01\u8D76\u7D27\u7761\u89C9\uFF0C\u4FDD\u547D\u8981\u7D27\uFF01\n"));
|
|
1662
1722
|
}
|
|
1663
1723
|
}
|
|
1664
1724
|
program.name("fish").description("\u{1F41F} Git \u6478\u9C7C & \u7206\u809D\u5206\u6790\u5668 CLI").version(getCliVersion()).option("-m, --month [monthsAgo]", "\u67E5\u770B\u6478\u9C7C/\u7206\u809D\u6708\u62A5 (\u9ED8\u8BA4 0 \u4E3A\u672C\u6708\uFF0C1 \u4E3A\u4E0A\u6708\uFF0C2 \u4E3A\u4E0A\u4E0A\u6708...)").option("-p, --project", "\u67E5\u770B\u9879\u76EE\u7206\u809D\u6392\u884C").option("-t, --time", "\u67E5\u770B\u9EC4\u91D1\u6478\u9C7C\u65F6\u95F4\u6BB5 analysis (24\u5C0F\u65F6\u5206\u5E03)").option("-g, --ghost", "\u68C0\u6D4B\u6DF1\u591C\u5E7D\u7075\u63D0\u4EA4").option("-w, --weeks-ago <number>", "\u67E5\u8BE2\u51E0\u5468\u524D/\u6708\u524D\u7684\u62A5\u544A (\u9ED8\u8BA4 0\uFF0C\u5373\u672C\u5468/\u672C\u6708)", "0").option("-P, --show-projects", "\u663E\u793A\u5177\u4F53\u9879\u76EE\u540D\u79F0\uFF08\u9ED8\u8BA4\u9690\u85CF\uFF09").option("-s, --source <source>", "\u9009\u62E9\u8981\u67E5\u8BE2\u7684 GitLab \u6570\u636E\u6E90 (\u5E8F\u53F7\u6216\u522B\u540D/host)").action(async (options) => {
|
|
@@ -1687,45 +1747,45 @@ var configCmd = program.command("config").description("\u7BA1\u7406\u76D1\u63A7\
|
|
|
1687
1747
|
configCmd.command("add <path>").description("\u624B\u52A8\u6DFB\u52A0\u4E00\u4E2A\u672C\u5730 Git \u4ED3\u5E93\u8DEF\u5F84").action((projPath) => {
|
|
1688
1748
|
const res = addProject(projPath);
|
|
1689
1749
|
if (res.success) {
|
|
1690
|
-
console.log(
|
|
1750
|
+
console.log(chalk.green(`\u2714 ${res.message}`));
|
|
1691
1751
|
} else {
|
|
1692
|
-
console.log(
|
|
1752
|
+
console.log(chalk.red(`\u2718 ${res.message}`));
|
|
1693
1753
|
}
|
|
1694
1754
|
});
|
|
1695
1755
|
configCmd.command("remove <path>").description("\u4ECE\u914D\u7F6E\u4E2D\u79FB\u9664\u4E00\u4E2A\u9879\u76EE\u8DEF\u5F84").action((projPath) => {
|
|
1696
1756
|
const res = removeProject(projPath);
|
|
1697
1757
|
if (res.success) {
|
|
1698
|
-
console.log(
|
|
1758
|
+
console.log(chalk.green(`\u2714 ${res.message}`));
|
|
1699
1759
|
} else {
|
|
1700
|
-
console.log(
|
|
1760
|
+
console.log(chalk.red(`\u2718 ${res.message}`));
|
|
1701
1761
|
}
|
|
1702
1762
|
});
|
|
1703
1763
|
configCmd.command("list").description("\u5217\u51FA\u5F53\u524D\u6240\u6709\u76D1\u63A7\u7684\u9879\u76EE\u4E0E GitLab \u914D\u7F6E").action(() => {
|
|
1704
1764
|
const config = readConfig();
|
|
1705
|
-
console.log(
|
|
1765
|
+
console.log(chalk.cyan.bold("\n\u{1F4C1} \u5F53\u524D\u76D1\u63A7\u7684\u672C\u5730\u9879\u76EE\u5217\u8868:"));
|
|
1706
1766
|
if (config.projects.length === 0) {
|
|
1707
|
-
console.log(
|
|
1767
|
+
console.log(chalk.gray(` (\u76EE\u524D\u672A\u914D\u7F6E\u672C\u5730\u9879\u76EE\uFF0C\u82E5\u65E0 GitLab \u8FDC\u7A0B\u5219\u9ED8\u8BA4\u626B\u63CF\u5F53\u524D\u76EE\u5F55: ${process.cwd()})`));
|
|
1708
1768
|
} else {
|
|
1709
1769
|
config.projects.forEach((p, idx) => {
|
|
1710
|
-
console.log(` ${idx + 1}. ${
|
|
1770
|
+
console.log(` ${idx + 1}. ${chalk.white(p)}`);
|
|
1711
1771
|
});
|
|
1712
1772
|
}
|
|
1713
|
-
console.log(
|
|
1773
|
+
console.log(chalk.cyan.bold("\n\u{1F98A} \u5F53\u524D\u914D\u7F6E\u7684 GitLab \u8FDC\u7A0B\u6E90:"));
|
|
1714
1774
|
const gitlabs = config.gitlabs || [];
|
|
1715
1775
|
if (gitlabs.length === 0) {
|
|
1716
|
-
console.log(
|
|
1776
|
+
console.log(chalk.gray(" (\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55 GitLab \u8FDC\u7A0B\u6E90)"));
|
|
1717
1777
|
} else {
|
|
1718
1778
|
gitlabs.forEach((g, idx) => {
|
|
1719
|
-
console.log(` ${idx + 1}. ${
|
|
1779
|
+
console.log(` ${idx + 1}. ${chalk.bold.white(g.name)} | Host: ${chalk.gray(g.host)}`);
|
|
1720
1780
|
});
|
|
1721
1781
|
}
|
|
1722
1782
|
console.log("");
|
|
1723
1783
|
});
|
|
1724
1784
|
configCmd.command("scan <dir>").description("\u81EA\u52A8\u626B\u63CF\u6307\u5B9A\u76EE\u5F55\u4E0B\u7684\u6240\u6709 Git \u4ED3\u5E93\u5E76\u6279\u91CF\u6DFB\u52A0").action((dir) => {
|
|
1725
|
-
console.log(
|
|
1785
|
+
console.log(chalk.cyan(`\u{1F50D} \u6B63\u5728\u626B\u63CF\u76EE\u5F55 ${dir} \u4E0B of Git \u4ED3\u5E93...`));
|
|
1726
1786
|
const repos = scanDirectory(dir);
|
|
1727
1787
|
if (repos.length === 0) {
|
|
1728
|
-
console.log(
|
|
1788
|
+
console.log(chalk.yellow(`\u26A0 \u672A\u5728 ${dir} \u4E0B\u53D1\u73B0\u4EFB\u4F55 Git \u4ED3\u5E93\u3002`));
|
|
1729
1789
|
return;
|
|
1730
1790
|
}
|
|
1731
1791
|
const config = readConfig();
|
|
@@ -1738,26 +1798,26 @@ configCmd.command("scan <dir>").description("\u81EA\u52A8\u626B\u63CF\u6307\u5B9
|
|
|
1738
1798
|
}
|
|
1739
1799
|
if (addedCount > 0) {
|
|
1740
1800
|
writeConfig(config);
|
|
1741
|
-
console.log(
|
|
1742
|
-
repos.forEach((r) => console.log(` - ${
|
|
1801
|
+
console.log(chalk.green(`\u2714 \u6210\u529F\u53D1\u73B0\u5E76\u6DFB\u52A0\u4E86 ${addedCount} \u4E2A\u65B0 Git \u4ED3\u5E93\uFF1A`));
|
|
1802
|
+
repos.forEach((r) => console.log(` - ${chalk.gray(r)}`));
|
|
1743
1803
|
} else {
|
|
1744
|
-
console.log(
|
|
1804
|
+
console.log(chalk.yellow(`\u26A0 \u626B\u63CF\u5230\u4E86 ${repos.length} \u4E2A\u4ED3\u5E93\uFF0C\u4F46\u90FD\u5DF2\u5728\u76D1\u63A7\u914D\u7F6E\u4E2D\u3002`));
|
|
1745
1805
|
}
|
|
1746
1806
|
});
|
|
1747
1807
|
configCmd.command("gitlab <token> [host] [name]").description("\u914D\u7F6E GitLab \u4E2A\u4EBA\u8BBF\u95EE\u4EE4\u724C(PAT)\u3001Host \u4E0E\u522B\u540D\uFF0C\u5F00\u542F GitLab \u8FDC\u7A0B\u626B\u63CF").action((token, host, name) => {
|
|
1748
1808
|
setGitLabConfig(token, host, name);
|
|
1749
|
-
console.log(
|
|
1809
|
+
console.log(chalk.green(`\u2714 \u5DF2\u6210\u529F\u914D\u7F6E\u5E76\u4FDD\u5B58 GitLab \u8BBF\u95EE\u6E90\u3002`));
|
|
1750
1810
|
const targetHost = host || "https://gitlab.com";
|
|
1751
1811
|
const targetName = name || targetHost.replace(/^https?:\/\//, "").replace(/\/$/, "");
|
|
1752
|
-
console.log(
|
|
1753
|
-
console.log(
|
|
1812
|
+
console.log(chalk.gray(`\u522B\u540D (Name): ${targetName}`));
|
|
1813
|
+
console.log(chalk.gray(`\u5730\u5740 (Host): ${targetHost}`));
|
|
1754
1814
|
});
|
|
1755
1815
|
configCmd.command("gitlab-clear [name_or_index]").description("\u6E05\u9664\u6307\u5B9A\u6216\u6240\u6709\u7684 GitLab \u8FDC\u7A0B\u626B\u63CF\u914D\u7F6E").action((nameOrIndex) => {
|
|
1756
1816
|
clearGitLabConfig(nameOrIndex);
|
|
1757
1817
|
if (nameOrIndex) {
|
|
1758
|
-
console.log(
|
|
1818
|
+
console.log(chalk.green(`\u2714 \u5DF2\u6E05\u9664\u6307\u5B9A\u7684 GitLab \u8BBF\u95EE\u914D\u7F6E [${nameOrIndex}]\u3002`));
|
|
1759
1819
|
} else {
|
|
1760
|
-
console.log(
|
|
1820
|
+
console.log(chalk.green(`\u2714 \u5DF2\u6E05\u9664\u6240\u6709 GitLab \u8BBF\u95EE\u914D\u7F6E\u3002\u5DF2\u5173\u95ED GitLab \u8FDC\u7A0B\u626B\u63CF\u3002`));
|
|
1761
1821
|
}
|
|
1762
1822
|
});
|
|
1763
1823
|
program.parse(process.argv);
|