gitcoach-cli 1.1.2 → 1.1.4
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.md +97 -73
- package/dist/analytics/index.d.ts +1 -2
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +3 -2
- package/dist/analytics/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/quick.d.ts.map +1 -1
- package/dist/commands/quick.js +3 -0
- package/dist/commands/quick.js.map +1 -1
- package/dist/config/defaults.d.ts +3 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +4 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/user-config.d.ts.map +1 -1
- package/dist/config/user-config.js +7 -1
- package/dist/config/user-config.js.map +1 -1
- package/dist/i18n/locales/en.json +10 -0
- package/dist/i18n/locales/es.json +10 -0
- package/dist/i18n/locales/fr.json +10 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/services/analysis-service.js +7 -7
- package/dist/services/analysis-service.js.map +1 -1
- package/dist/services/copilot-service.d.ts +2 -0
- package/dist/services/copilot-service.d.ts.map +1 -1
- package/dist/services/copilot-service.js +18 -0
- package/dist/services/copilot-service.js.map +1 -1
- package/dist/services/prevention-service.d.ts.map +1 -1
- package/dist/services/prevention-service.js +0 -8
- package/dist/services/prevention-service.js.map +1 -1
- package/dist/ui/menus/branch-menu.d.ts.map +1 -1
- package/dist/ui/menus/branch-menu.js +3 -0
- package/dist/ui/menus/branch-menu.js.map +1 -1
- package/dist/ui/menus/push-menu.d.ts.map +1 -1
- package/dist/ui/menus/push-menu.js +4 -0
- package/dist/ui/menus/push-menu.js.map +1 -1
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/package.json +2 -2
- package/dist/analytics/stats-calculator.d.ts +0 -24
- package/dist/analytics/stats-calculator.d.ts.map +0 -1
- package/dist/analytics/stats-calculator.js +0 -135
- package/dist/analytics/stats-calculator.js.map +0 -1
- package/dist/analytics/tracker.d.ts +0 -36
- package/dist/analytics/tracker.d.ts.map +0 -1
- package/dist/analytics/tracker.js +0 -103
- package/dist/analytics/tracker.js.map +0 -1
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { tracker } from './tracker.js';
|
|
2
|
-
class StatsCalculator {
|
|
3
|
-
calculateUsageStats() {
|
|
4
|
-
const summary = tracker.getSummary();
|
|
5
|
-
const events = tracker.getRecentEvents(1000);
|
|
6
|
-
const totalOperations = summary.totalCommits +
|
|
7
|
-
summary.totalPushes +
|
|
8
|
-
summary.totalPulls +
|
|
9
|
-
summary.branchesCreated +
|
|
10
|
-
summary.branchesSwitched;
|
|
11
|
-
// Calculate most used operation
|
|
12
|
-
const operationCounts = {
|
|
13
|
-
commits: summary.totalCommits,
|
|
14
|
-
pushes: summary.totalPushes,
|
|
15
|
-
pulls: summary.totalPulls,
|
|
16
|
-
branches: summary.branchesCreated + summary.branchesSwitched
|
|
17
|
-
};
|
|
18
|
-
const mostUsedOperation = Object.entries(operationCounts)
|
|
19
|
-
.sort(([, a], [, b]) => b - a)[0]?.[0] || 'none';
|
|
20
|
-
// Calculate days active
|
|
21
|
-
const firstUsed = new Date(summary.firstUsed);
|
|
22
|
-
const lastUsed = new Date(summary.lastUsed);
|
|
23
|
-
const daysActive = Math.max(1, Math.ceil((lastUsed.getTime() - firstUsed.getTime()) / (1000 * 60 * 60 * 24)));
|
|
24
|
-
// Average operations per day
|
|
25
|
-
const averageOperationsPerDay = totalOperations / daysActive;
|
|
26
|
-
// Calculate streak (consecutive days)
|
|
27
|
-
const streakDays = this.calculateStreak(events);
|
|
28
|
-
// Peak hour analysis
|
|
29
|
-
const peakHour = this.calculatePeakHour(events);
|
|
30
|
-
// Error prevention rate (errors prevented vs total operations)
|
|
31
|
-
const errorPreventionRate = totalOperations > 0
|
|
32
|
-
? (summary.errorsPrevented / totalOperations) * 100
|
|
33
|
-
: 0;
|
|
34
|
-
// AI assistance rate
|
|
35
|
-
const aiAssistanceRate = summary.totalCommits > 0
|
|
36
|
-
? (summary.aiCommitsGenerated / summary.totalCommits) * 100
|
|
37
|
-
: 0;
|
|
38
|
-
return {
|
|
39
|
-
totalOperations,
|
|
40
|
-
mostUsedOperation,
|
|
41
|
-
averageOperationsPerDay: Math.round(averageOperationsPerDay * 10) / 10,
|
|
42
|
-
daysActive,
|
|
43
|
-
streakDays,
|
|
44
|
-
peakHour,
|
|
45
|
-
errorPreventionRate: Math.round(errorPreventionRate),
|
|
46
|
-
aiAssistanceRate: Math.round(aiAssistanceRate)
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
calculateTimeStats() {
|
|
50
|
-
const summary = tracker.getSummary();
|
|
51
|
-
// Estimated time saved calculations (in minutes):
|
|
52
|
-
// - Each error prevented: ~5 minutes (debugging time saved)
|
|
53
|
-
// - Each AI commit message: ~1 minute (thinking time saved)
|
|
54
|
-
// - Each branch operation: ~0.5 minutes (navigation time saved)
|
|
55
|
-
const timeSavedFromErrors = summary.errorsPrevented * 5;
|
|
56
|
-
const timeSavedFromAI = summary.aiCommitsGenerated * 1;
|
|
57
|
-
const timeSavedFromBranches = (summary.branchesCreated + summary.branchesSwitched) * 0.5;
|
|
58
|
-
const estimatedTimeSaved = timeSavedFromErrors + timeSavedFromAI + timeSavedFromBranches;
|
|
59
|
-
return {
|
|
60
|
-
estimatedTimeSaved: Math.round(estimatedTimeSaved),
|
|
61
|
-
timeByOperation: {
|
|
62
|
-
errorPrevention: timeSavedFromErrors,
|
|
63
|
-
aiAssistance: timeSavedFromAI,
|
|
64
|
-
branchManagement: timeSavedFromBranches
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
calculateStreak(events) {
|
|
69
|
-
if (events.length === 0)
|
|
70
|
-
return 0;
|
|
71
|
-
// Group events by day
|
|
72
|
-
const daySet = new Set();
|
|
73
|
-
for (const event of events) {
|
|
74
|
-
const day = event.timestamp.substring(0, 10); // YYYY-MM-DD
|
|
75
|
-
daySet.add(day);
|
|
76
|
-
}
|
|
77
|
-
const days = Array.from(daySet).sort().reverse();
|
|
78
|
-
if (days.length === 0)
|
|
79
|
-
return 0;
|
|
80
|
-
let streak = 1;
|
|
81
|
-
const today = new Date().toISOString().substring(0, 10);
|
|
82
|
-
// Check if used today or yesterday
|
|
83
|
-
if (days[0] !== today) {
|
|
84
|
-
const yesterday = new Date(Date.now() - 86400000).toISOString().substring(0, 10);
|
|
85
|
-
if (days[0] !== yesterday) {
|
|
86
|
-
return 0; // Streak broken
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Count consecutive days
|
|
90
|
-
for (let i = 1; i < days.length; i++) {
|
|
91
|
-
const prevDate = new Date(days[i - 1]);
|
|
92
|
-
const currDate = new Date(days[i]);
|
|
93
|
-
const diffDays = (prevDate.getTime() - currDate.getTime()) / (1000 * 60 * 60 * 24);
|
|
94
|
-
if (diffDays === 1) {
|
|
95
|
-
streak++;
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return streak;
|
|
102
|
-
}
|
|
103
|
-
calculatePeakHour(events) {
|
|
104
|
-
if (events.length === 0)
|
|
105
|
-
return 12; // Default to noon
|
|
106
|
-
const hourCounts = new Array(24).fill(0);
|
|
107
|
-
for (const event of events) {
|
|
108
|
-
const hour = new Date(event.timestamp).getHours();
|
|
109
|
-
hourCounts[hour]++;
|
|
110
|
-
}
|
|
111
|
-
let maxCount = 0;
|
|
112
|
-
let peakHour = 12;
|
|
113
|
-
for (let i = 0; i < 24; i++) {
|
|
114
|
-
if (hourCounts[i] > maxCount) {
|
|
115
|
-
maxCount = hourCounts[i];
|
|
116
|
-
peakHour = i;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return peakHour;
|
|
120
|
-
}
|
|
121
|
-
formatTimeSaved(minutes) {
|
|
122
|
-
if (minutes < 60) {
|
|
123
|
-
return `${minutes} minute${minutes !== 1 ? 's' : ''}`;
|
|
124
|
-
}
|
|
125
|
-
const hours = Math.floor(minutes / 60);
|
|
126
|
-
const remainingMinutes = minutes % 60;
|
|
127
|
-
if (remainingMinutes === 0) {
|
|
128
|
-
return `${hours} hour${hours !== 1 ? 's' : ''}`;
|
|
129
|
-
}
|
|
130
|
-
return `${hours}h ${remainingMinutes}m`;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
export const statsCalculator = new StatsCalculator();
|
|
134
|
-
export default statsCalculator;
|
|
135
|
-
//# sourceMappingURL=stats-calculator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stats-calculator.js","sourceRoot":"","sources":["../../src/analytics/stats-calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAC;AAkBvD,MAAM,eAAe;IACnB,mBAAmB;QACjB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,eAAe,GACnB,OAAO,CAAC,YAAY;YACpB,OAAO,CAAC,WAAW;YACnB,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,eAAe;YACvB,OAAO,CAAC,gBAAgB,CAAC;QAE3B,gCAAgC;QAChC,MAAM,eAAe,GAAG;YACtB,OAAO,EAAE,OAAO,CAAC,YAAY;YAC7B,MAAM,EAAE,OAAO,CAAC,WAAW;YAC3B,KAAK,EAAE,OAAO,CAAC,UAAU;YACzB,QAAQ,EAAE,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,gBAAgB;SAC7D,CAAC;QAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;aACtD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;QAEnD,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9G,6BAA6B;QAC7B,MAAM,uBAAuB,GAAG,eAAe,GAAG,UAAU,CAAC;QAE7D,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,qBAAqB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEhD,+DAA+D;QAC/D,MAAM,mBAAmB,GAAG,eAAe,GAAG,CAAC;YAC7C,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC,GAAG,GAAG;YACnD,CAAC,CAAC,CAAC,CAAC;QAEN,qBAAqB;QACrB,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC;YAC/C,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG;YAC3D,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO;YACL,eAAe;YACf,iBAAiB;YACjB,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,GAAG,EAAE;YACtE,UAAU;YACV,UAAU;YACV,QAAQ;YACR,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YACpD,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAErC,kDAAkD;QAClD,4DAA4D;QAC5D,4DAA4D;QAC5D,gEAAgE;QAEhE,MAAM,mBAAmB,GAAG,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC;QACxD,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACvD,MAAM,qBAAqB,GAAG,CAAC,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC;QAEzF,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,eAAe,GAAG,qBAAqB,CAAC;QAEzF,OAAO;YACL,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YAClD,eAAe,EAAE;gBACf,eAAe,EAAE,mBAAmB;gBACpC,YAAY,EAAE,eAAe;gBAC7B,gBAAgB,EAAE,qBAAqB;aACxC;SACF,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,MAAwB;QAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAElC,sBAAsB;QACtB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;YAC3D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEhC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAExD,mCAAmC;QACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,CAAC,CAAC,gBAAgB;YAC5B,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAEnF,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,EAAE,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,MAAwB;QAChD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,CAAC,kBAAkB;QAEtD,MAAM,UAAU,GAAa,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;YAClD,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,CAAC;QAED,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;gBAC7B,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACzB,QAAQ,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACvC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;QAEtC,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClD,CAAC;QAED,OAAO,GAAG,KAAK,KAAK,gBAAgB,GAAG,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AACrD,eAAe,eAAe,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export type EventType = 'commit' | 'push' | 'pull' | 'branch_create' | 'branch_switch' | 'branch_delete' | 'error_prevented' | 'ai_commit_generated' | 'config_changed';
|
|
2
|
-
export interface AnalyticsEvent {
|
|
3
|
-
type: EventType;
|
|
4
|
-
timestamp: string;
|
|
5
|
-
details?: Record<string, unknown>;
|
|
6
|
-
}
|
|
7
|
-
export interface AnalyticsData {
|
|
8
|
-
events: AnalyticsEvent[];
|
|
9
|
-
summary: {
|
|
10
|
-
totalCommits: number;
|
|
11
|
-
totalPushes: number;
|
|
12
|
-
totalPulls: number;
|
|
13
|
-
branchesCreated: number;
|
|
14
|
-
branchesSwitched: number;
|
|
15
|
-
branchesDeleted: number;
|
|
16
|
-
errorsPrevented: number;
|
|
17
|
-
aiCommitsGenerated: number;
|
|
18
|
-
firstUsed: string;
|
|
19
|
-
lastUsed: string;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
declare class AnalyticsTracker {
|
|
23
|
-
private maxEvents;
|
|
24
|
-
trackEvent(type: EventType, details?: Record<string, unknown>): void;
|
|
25
|
-
private updateSummary;
|
|
26
|
-
getSummary(): AnalyticsData['summary'];
|
|
27
|
-
getRecentEvents(limit?: number): AnalyticsEvent[];
|
|
28
|
-
getEventsByType(type: EventType, limit?: number): AnalyticsEvent[];
|
|
29
|
-
getEventCountByType(): Record<EventType, number>;
|
|
30
|
-
clearHistory(): void;
|
|
31
|
-
reset(): void;
|
|
32
|
-
getDataPath(): string;
|
|
33
|
-
}
|
|
34
|
-
export declare const tracker: AnalyticsTracker;
|
|
35
|
-
export default tracker;
|
|
36
|
-
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/analytics/tracker.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,MAAM,GACN,MAAM,GACN,eAAe,GACf,eAAe,GACf,eAAe,GACf,iBAAiB,GACjB,qBAAqB,GACrB,gBAAgB,CAAC;AAErB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAwBD,cAAM,gBAAgB;IACpB,OAAO,CAAC,SAAS,CAAQ;IAEzB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAsBpE,OAAO,CAAC,aAAa;IAkCrB,UAAU,IAAI,aAAa,CAAC,SAAS,CAAC;IAItC,eAAe,CAAC,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IAKrD,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IAKtE,mBAAmB,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;IAWhD,YAAY,IAAI,IAAI;IAIpB,KAAK,IAAI,IAAI;IAIb,WAAW,IAAI,MAAM;CAGtB;AAED,eAAO,MAAM,OAAO,kBAAyB,CAAC;AAC9C,eAAe,OAAO,CAAC"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import Conf from 'conf';
|
|
2
|
-
const DEFAULT_ANALYTICS = {
|
|
3
|
-
events: [],
|
|
4
|
-
summary: {
|
|
5
|
-
totalCommits: 0,
|
|
6
|
-
totalPushes: 0,
|
|
7
|
-
totalPulls: 0,
|
|
8
|
-
branchesCreated: 0,
|
|
9
|
-
branchesSwitched: 0,
|
|
10
|
-
branchesDeleted: 0,
|
|
11
|
-
errorsPrevented: 0,
|
|
12
|
-
aiCommitsGenerated: 0,
|
|
13
|
-
firstUsed: new Date().toISOString(),
|
|
14
|
-
lastUsed: new Date().toISOString()
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
const analyticsStore = new Conf({
|
|
18
|
-
projectName: 'gitcoach',
|
|
19
|
-
configName: 'analytics',
|
|
20
|
-
defaults: DEFAULT_ANALYTICS
|
|
21
|
-
});
|
|
22
|
-
class AnalyticsTracker {
|
|
23
|
-
maxEvents = 1000; // Keep last 1000 events to prevent file from growing too large
|
|
24
|
-
trackEvent(type, details) {
|
|
25
|
-
const event = {
|
|
26
|
-
type,
|
|
27
|
-
timestamp: new Date().toISOString(),
|
|
28
|
-
details
|
|
29
|
-
};
|
|
30
|
-
// Add event to history
|
|
31
|
-
const events = analyticsStore.get('events', []);
|
|
32
|
-
events.push(event);
|
|
33
|
-
// Trim events if exceeds max
|
|
34
|
-
if (events.length > this.maxEvents) {
|
|
35
|
-
events.splice(0, events.length - this.maxEvents);
|
|
36
|
-
}
|
|
37
|
-
analyticsStore.set('events', events);
|
|
38
|
-
// Update summary
|
|
39
|
-
this.updateSummary(type);
|
|
40
|
-
}
|
|
41
|
-
updateSummary(type) {
|
|
42
|
-
const summary = analyticsStore.get('summary', DEFAULT_ANALYTICS.summary);
|
|
43
|
-
switch (type) {
|
|
44
|
-
case 'commit':
|
|
45
|
-
summary.totalCommits++;
|
|
46
|
-
break;
|
|
47
|
-
case 'push':
|
|
48
|
-
summary.totalPushes++;
|
|
49
|
-
break;
|
|
50
|
-
case 'pull':
|
|
51
|
-
summary.totalPulls++;
|
|
52
|
-
break;
|
|
53
|
-
case 'branch_create':
|
|
54
|
-
summary.branchesCreated++;
|
|
55
|
-
break;
|
|
56
|
-
case 'branch_switch':
|
|
57
|
-
summary.branchesSwitched++;
|
|
58
|
-
break;
|
|
59
|
-
case 'branch_delete':
|
|
60
|
-
summary.branchesDeleted++;
|
|
61
|
-
break;
|
|
62
|
-
case 'error_prevented':
|
|
63
|
-
summary.errorsPrevented++;
|
|
64
|
-
break;
|
|
65
|
-
case 'ai_commit_generated':
|
|
66
|
-
summary.aiCommitsGenerated++;
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
summary.lastUsed = new Date().toISOString();
|
|
70
|
-
analyticsStore.set('summary', summary);
|
|
71
|
-
}
|
|
72
|
-
getSummary() {
|
|
73
|
-
return analyticsStore.get('summary', DEFAULT_ANALYTICS.summary);
|
|
74
|
-
}
|
|
75
|
-
getRecentEvents(limit = 50) {
|
|
76
|
-
const events = analyticsStore.get('events', []);
|
|
77
|
-
return events.slice(-limit);
|
|
78
|
-
}
|
|
79
|
-
getEventsByType(type, limit = 50) {
|
|
80
|
-
const events = analyticsStore.get('events', []);
|
|
81
|
-
return events.filter(e => e.type === type).slice(-limit);
|
|
82
|
-
}
|
|
83
|
-
getEventCountByType() {
|
|
84
|
-
const events = analyticsStore.get('events', []);
|
|
85
|
-
const counts = {};
|
|
86
|
-
for (const event of events) {
|
|
87
|
-
counts[event.type] = (counts[event.type] || 0) + 1;
|
|
88
|
-
}
|
|
89
|
-
return counts;
|
|
90
|
-
}
|
|
91
|
-
clearHistory() {
|
|
92
|
-
analyticsStore.set('events', []);
|
|
93
|
-
}
|
|
94
|
-
reset() {
|
|
95
|
-
analyticsStore.clear();
|
|
96
|
-
}
|
|
97
|
-
getDataPath() {
|
|
98
|
-
return analyticsStore.path;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
export const tracker = new AnalyticsTracker();
|
|
102
|
-
export default tracker;
|
|
103
|
-
//# sourceMappingURL=tracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/analytics/tracker.ts"],"names":[],"mappings":"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"}
|