gitcoach-cli 1.0.0
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/bin/run.js +80 -0
- package/dist/analytics/index.d.ts +3 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +3 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/stats-calculator.d.ts +24 -0
- package/dist/analytics/stats-calculator.d.ts.map +1 -0
- package/dist/analytics/stats-calculator.js +135 -0
- package/dist/analytics/stats-calculator.js.map +1 -0
- package/dist/analytics/tracker.d.ts +36 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +103 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +12 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +154 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +45 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/quick.d.ts +12 -0
- package/dist/commands/quick.d.ts.map +1 -0
- package/dist/commands/quick.js +112 -0
- package/dist/commands/quick.js.map +1 -0
- package/dist/commands/stats.d.ts +7 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +42 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/config/defaults.d.ts +37 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +33 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/user-config.d.ts +33 -0
- package/dist/config/user-config.d.ts.map +1 -0
- package/dist/config/user-config.js +106 -0
- package/dist/config/user-config.js.map +1 -0
- package/dist/i18n/index.d.ts +8 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +45 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.json +353 -0
- package/dist/i18n/locales/es.json +353 -0
- package/dist/i18n/locales/fr.json +353 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/services/analysis-service.d.ts +24 -0
- package/dist/services/analysis-service.d.ts.map +1 -0
- package/dist/services/analysis-service.js +158 -0
- package/dist/services/analysis-service.js.map +1 -0
- package/dist/services/copilot-service.d.ts +30 -0
- package/dist/services/copilot-service.d.ts.map +1 -0
- package/dist/services/copilot-service.js +385 -0
- package/dist/services/copilot-service.js.map +1 -0
- package/dist/services/git-service.d.ts +75 -0
- package/dist/services/git-service.d.ts.map +1 -0
- package/dist/services/git-service.js +230 -0
- package/dist/services/git-service.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +5 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/prevention-service.d.ts +29 -0
- package/dist/services/prevention-service.d.ts.map +1 -0
- package/dist/services/prevention-service.js +213 -0
- package/dist/services/prevention-service.js.map +1 -0
- package/dist/ui/components/box.d.ts +16 -0
- package/dist/ui/components/box.d.ts.map +1 -0
- package/dist/ui/components/box.js +100 -0
- package/dist/ui/components/box.js.map +1 -0
- package/dist/ui/components/index.d.ts +5 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/index.js +5 -0
- package/dist/ui/components/index.js.map +1 -0
- package/dist/ui/components/prompt.d.ts +19 -0
- package/dist/ui/components/prompt.d.ts.map +1 -0
- package/dist/ui/components/prompt.js +62 -0
- package/dist/ui/components/prompt.js.map +1 -0
- package/dist/ui/components/spinner.d.ts +8 -0
- package/dist/ui/components/spinner.d.ts.map +1 -0
- package/dist/ui/components/spinner.js +24 -0
- package/dist/ui/components/spinner.js.map +1 -0
- package/dist/ui/components/table.d.ts +25 -0
- package/dist/ui/components/table.d.ts.map +1 -0
- package/dist/ui/components/table.js +72 -0
- package/dist/ui/components/table.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/menus/add-menu.d.ts +6 -0
- package/dist/ui/menus/add-menu.d.ts.map +1 -0
- package/dist/ui/menus/add-menu.js +60 -0
- package/dist/ui/menus/add-menu.js.map +1 -0
- package/dist/ui/menus/branch-menu.d.ts +8 -0
- package/dist/ui/menus/branch-menu.d.ts.map +1 -0
- package/dist/ui/menus/branch-menu.js +141 -0
- package/dist/ui/menus/branch-menu.js.map +1 -0
- package/dist/ui/menus/commit-menu.d.ts +7 -0
- package/dist/ui/menus/commit-menu.d.ts.map +1 -0
- package/dist/ui/menus/commit-menu.js +129 -0
- package/dist/ui/menus/commit-menu.js.map +1 -0
- package/dist/ui/menus/config-menu.d.ts +3 -0
- package/dist/ui/menus/config-menu.d.ts.map +1 -0
- package/dist/ui/menus/config-menu.js +97 -0
- package/dist/ui/menus/config-menu.js.map +1 -0
- package/dist/ui/menus/help-menu.d.ts +3 -0
- package/dist/ui/menus/help-menu.d.ts.map +1 -0
- package/dist/ui/menus/help-menu.js +133 -0
- package/dist/ui/menus/help-menu.js.map +1 -0
- package/dist/ui/menus/history-menu.d.ts +3 -0
- package/dist/ui/menus/history-menu.d.ts.map +1 -0
- package/dist/ui/menus/history-menu.js +129 -0
- package/dist/ui/menus/history-menu.js.map +1 -0
- package/dist/ui/menus/index.d.ts +8 -0
- package/dist/ui/menus/index.d.ts.map +1 -0
- package/dist/ui/menus/index.js +8 -0
- package/dist/ui/menus/index.js.map +1 -0
- package/dist/ui/menus/main-menu.d.ts +4 -0
- package/dist/ui/menus/main-menu.d.ts.map +1 -0
- package/dist/ui/menus/main-menu.js +134 -0
- package/dist/ui/menus/main-menu.js.map +1 -0
- package/dist/ui/menus/pull-menu.d.ts +7 -0
- package/dist/ui/menus/pull-menu.d.ts.map +1 -0
- package/dist/ui/menus/pull-menu.js +69 -0
- package/dist/ui/menus/pull-menu.js.map +1 -0
- package/dist/ui/menus/push-menu.d.ts +8 -0
- package/dist/ui/menus/push-menu.d.ts.map +1 -0
- package/dist/ui/menus/push-menu.js +160 -0
- package/dist/ui/menus/push-menu.js.map +1 -0
- package/dist/ui/menus/setup-menu.d.ts +5 -0
- package/dist/ui/menus/setup-menu.d.ts.map +1 -0
- package/dist/ui/menus/setup-menu.js +234 -0
- package/dist/ui/menus/setup-menu.js.map +1 -0
- package/dist/ui/menus/stash-menu.d.ts +3 -0
- package/dist/ui/menus/stash-menu.d.ts.map +1 -0
- package/dist/ui/menus/stash-menu.js +205 -0
- package/dist/ui/menus/stash-menu.js.map +1 -0
- package/dist/ui/menus/undo-menu.d.ts +3 -0
- package/dist/ui/menus/undo-menu.d.ts.map +1 -0
- package/dist/ui/menus/undo-menu.js +197 -0
- package/dist/ui/menus/undo-menu.js.map +1 -0
- package/dist/ui/themes/colored.d.ts +35 -0
- package/dist/ui/themes/colored.d.ts.map +1 -0
- package/dist/ui/themes/colored.js +85 -0
- package/dist/ui/themes/colored.js.map +1 -0
- package/dist/ui/themes/index.d.ts +39 -0
- package/dist/ui/themes/index.d.ts.map +1 -0
- package/dist/ui/themes/index.js +9 -0
- package/dist/ui/themes/index.js.map +1 -0
- package/dist/ui/themes/monochrome.d.ts +35 -0
- package/dist/ui/themes/monochrome.d.ts.map +1 -0
- package/dist/ui/themes/monochrome.js +80 -0
- package/dist/ui/themes/monochrome.js.map +1 -0
- package/dist/utils/error-helper.d.ts +10 -0
- package/dist/utils/error-helper.d.ts.map +1 -0
- package/dist/utils/error-helper.js +55 -0
- package/dist/utils/error-helper.js.map +1 -0
- package/dist/utils/helpers.d.ts +16 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +95 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +71 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validators.d.ts +10 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +78 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +71 -0
package/bin/run.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { Config } from '@oclif/core';
|
|
6
|
+
|
|
7
|
+
// Buffer to collect warnings during config load
|
|
8
|
+
let suppressWarnings = true;
|
|
9
|
+
let warningBuffer = [];
|
|
10
|
+
|
|
11
|
+
// Override stderr to suppress SINGLE_COMMAND_CLI warnings
|
|
12
|
+
const originalStderrWrite = process.stderr.write.bind(process.stderr);
|
|
13
|
+
process.stderr.write = (chunk, ...args) => {
|
|
14
|
+
const str = chunk.toString();
|
|
15
|
+
if (suppressWarnings && (str.includes('Symbol(SINGLE_COMMAND_CLI)') || str.includes('ModuleLoadError'))) {
|
|
16
|
+
warningBuffer.push(str);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return originalStderrWrite(chunk, ...args);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// Override stdout to suppress warnings printed there too
|
|
23
|
+
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
24
|
+
process.stdout.write = (chunk, ...args) => {
|
|
25
|
+
const str = chunk.toString();
|
|
26
|
+
if (suppressWarnings && (str.includes('Symbol(SINGLE_COMMAND_CLI)') || str.includes('ModuleLoadError'))) {
|
|
27
|
+
warningBuffer.push(str);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return originalStdoutWrite(chunk, ...args);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// Also suppress Node.js warnings
|
|
34
|
+
process.removeAllListeners('warning');
|
|
35
|
+
process.on('warning', () => {});
|
|
36
|
+
|
|
37
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
38
|
+
const __dirname = dirname(__filename);
|
|
39
|
+
|
|
40
|
+
async function main() {
|
|
41
|
+
const config = await Config.load({ root: join(__dirname, '..') });
|
|
42
|
+
|
|
43
|
+
// Re-enable output after config is loaded
|
|
44
|
+
suppressWarnings = false;
|
|
45
|
+
|
|
46
|
+
// Get args without node and script path
|
|
47
|
+
const args = process.argv.slice(2);
|
|
48
|
+
|
|
49
|
+
// Handle global flags
|
|
50
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
51
|
+
const { Help } = await import('@oclif/core');
|
|
52
|
+
const help = new Help(config);
|
|
53
|
+
await help.showHelp(args.filter(a => a !== '--help' && a !== '-h'));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
58
|
+
console.log(`gitsense/${config.version} ${process.platform}-${process.arch} node-${process.version}`);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// If no arguments provided, run the main menu (index command)
|
|
63
|
+
if (args.length === 0) {
|
|
64
|
+
// Dynamically import and run the Index command
|
|
65
|
+
const { default: IndexCommand } = await import('../dist/commands/index.js');
|
|
66
|
+
const cmd = new IndexCommand(args, config);
|
|
67
|
+
await cmd.run();
|
|
68
|
+
} else {
|
|
69
|
+
// Otherwise, let oclif handle the command
|
|
70
|
+
await config.runCommand(args[0], args.slice(1));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
main().catch((error) => {
|
|
75
|
+
suppressWarnings = false;
|
|
76
|
+
// Only show error if it's not the SINGLE_COMMAND_CLI warning
|
|
77
|
+
if (!error.message?.includes('Symbol(SINGLE_COMMAND_CLI)')) {
|
|
78
|
+
console.error(error);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface UsageStats {
|
|
2
|
+
totalOperations: number;
|
|
3
|
+
mostUsedOperation: string;
|
|
4
|
+
averageOperationsPerDay: number;
|
|
5
|
+
daysActive: number;
|
|
6
|
+
streakDays: number;
|
|
7
|
+
peakHour: number;
|
|
8
|
+
errorPreventionRate: number;
|
|
9
|
+
aiAssistanceRate: number;
|
|
10
|
+
}
|
|
11
|
+
export interface TimeStats {
|
|
12
|
+
estimatedTimeSaved: number;
|
|
13
|
+
timeByOperation: Record<string, number>;
|
|
14
|
+
}
|
|
15
|
+
declare class StatsCalculator {
|
|
16
|
+
calculateUsageStats(): UsageStats;
|
|
17
|
+
calculateTimeStats(): TimeStats;
|
|
18
|
+
private calculateStreak;
|
|
19
|
+
private calculatePeakHour;
|
|
20
|
+
formatTimeSaved(minutes: number): string;
|
|
21
|
+
}
|
|
22
|
+
export declare const statsCalculator: StatsCalculator;
|
|
23
|
+
export default statsCalculator;
|
|
24
|
+
//# sourceMappingURL=stats-calculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats-calculator.d.ts","sourceRoot":"","sources":["../../src/analytics/stats-calculator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,cAAM,eAAe;IACnB,mBAAmB,IAAI,UAAU;IA0DjC,kBAAkB,IAAI,SAAS;IAwB/B,OAAO,CAAC,eAAe;IAwCvB,OAAO,CAAC,iBAAiB;IAuBzB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAczC;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC;AACrD,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats-calculator.js","sourceRoot":"","sources":["../../src/analytics/stats-calculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
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: 'gitsense',
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/analytics/tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,WAAW,SAAiC;IAE5D,OAAgB,QAAQ,WAAgC;IAElD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAI3B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { initI18n } from '../i18n/index.js';
|
|
3
|
+
import { showConfigMenu } from '../ui/menus/config-menu.js';
|
|
4
|
+
export default class Config extends Command {
|
|
5
|
+
static description = 'Configure GitSense settings';
|
|
6
|
+
static examples = ['<%= config.bin %> config'];
|
|
7
|
+
async run() {
|
|
8
|
+
await initI18n();
|
|
9
|
+
await showConfigMenu();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAU,WAAW,GAAG,6BAA6B,CAAC;IAE5D,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA4BtC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,OAAgB,WAAW,SAA0C;IAErE,OAAgB,QAAQ,WAKtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAkDZ,eAAe;YA0Cf,YAAY;CA0D3B"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { initI18n, t } from '../i18n/index.js';
|
|
3
|
+
import { userConfig } from '../config/user-config.js';
|
|
4
|
+
import { gitService } from '../services/git-service.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
import { getTheme } from '../ui/themes/index.js';
|
|
7
|
+
import { showMainMenu, showStatusScreen } from '../ui/menus/main-menu.js';
|
|
8
|
+
import { showAddMenu } from '../ui/menus/add-menu.js';
|
|
9
|
+
import { showCommitMenu } from '../ui/menus/commit-menu.js';
|
|
10
|
+
import { showBranchMenu } from '../ui/menus/branch-menu.js';
|
|
11
|
+
import { showConfigMenu } from '../ui/menus/config-menu.js';
|
|
12
|
+
import { showPushMenu } from '../ui/menus/push-menu.js';
|
|
13
|
+
import { showPullMenu } from '../ui/menus/pull-menu.js';
|
|
14
|
+
import { showUndoMenu } from '../ui/menus/undo-menu.js';
|
|
15
|
+
import { showHistoryMenu } from '../ui/menus/history-menu.js';
|
|
16
|
+
import { showStashMenu } from '../ui/menus/stash-menu.js';
|
|
17
|
+
import { showSetupMenu, handleGitInit, handleGitClone } from '../ui/menus/setup-menu.js';
|
|
18
|
+
import { showHelpMenu } from '../ui/menus/help-menu.js';
|
|
19
|
+
export default class Index extends Command {
|
|
20
|
+
static description = 'GitSense - Your AI-Powered Git Coach';
|
|
21
|
+
static examples = [
|
|
22
|
+
'<%= config.bin %>',
|
|
23
|
+
'<%= config.bin %> init',
|
|
24
|
+
'<%= config.bin %> config',
|
|
25
|
+
'<%= config.bin %> quick'
|
|
26
|
+
];
|
|
27
|
+
async run() {
|
|
28
|
+
// Initialize i18n
|
|
29
|
+
await initI18n();
|
|
30
|
+
// Check if we're in a git repository
|
|
31
|
+
const isRepo = await gitService.isGitRepo();
|
|
32
|
+
if (!isRepo) {
|
|
33
|
+
// Show setup menu for non-git directories
|
|
34
|
+
const setupResult = await this.handleSetupMenu();
|
|
35
|
+
if (!setupResult) {
|
|
36
|
+
// User chose to quit or setup failed
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// After init, continue to main menu
|
|
40
|
+
}
|
|
41
|
+
// Update last used timestamp
|
|
42
|
+
userConfig.updateLastUsed();
|
|
43
|
+
// Check if first run and needs setup
|
|
44
|
+
if (userConfig.isFirstRun()) {
|
|
45
|
+
// Run init command for first-time setup
|
|
46
|
+
await this.config.runCommand('init');
|
|
47
|
+
}
|
|
48
|
+
// Main menu loop
|
|
49
|
+
let running = true;
|
|
50
|
+
while (running) {
|
|
51
|
+
try {
|
|
52
|
+
const action = await showMainMenu();
|
|
53
|
+
running = await this.handleAction(action);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// Handle Ctrl+C gracefully
|
|
57
|
+
if (error instanceof Error && error.message.includes('User force closed')) {
|
|
58
|
+
running = false;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
logger.error(t('errors.generic', {
|
|
62
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Goodbye message
|
|
68
|
+
const theme = getTheme();
|
|
69
|
+
logger.raw('\n' + theme.textMuted(t('app.goodbye')) + '\n');
|
|
70
|
+
}
|
|
71
|
+
async handleSetupMenu() {
|
|
72
|
+
const theme = getTheme();
|
|
73
|
+
let running = true;
|
|
74
|
+
while (running) {
|
|
75
|
+
try {
|
|
76
|
+
const action = await showSetupMenu();
|
|
77
|
+
switch (action) {
|
|
78
|
+
case 'init': {
|
|
79
|
+
const initSuccess = await handleGitInit();
|
|
80
|
+
if (initSuccess) {
|
|
81
|
+
// Repo created, can continue to main menu
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
// Stay in setup menu
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
case 'clone':
|
|
88
|
+
await handleGitClone();
|
|
89
|
+
// After clone, user needs to cd into directory, so exit
|
|
90
|
+
return false;
|
|
91
|
+
case 'quit':
|
|
92
|
+
logger.raw('\n' + theme.textMuted(t('app.goodbye')) + '\n');
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (error instanceof Error && error.message.includes('User force closed')) {
|
|
98
|
+
running = false;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
logger.error(t('errors.generic', {
|
|
102
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
async handleAction(action) {
|
|
110
|
+
switch (action) {
|
|
111
|
+
case 'status':
|
|
112
|
+
await showStatusScreen();
|
|
113
|
+
return true;
|
|
114
|
+
case 'add':
|
|
115
|
+
await showAddMenu();
|
|
116
|
+
return true;
|
|
117
|
+
case 'commit':
|
|
118
|
+
await showCommitMenu();
|
|
119
|
+
return true;
|
|
120
|
+
case 'push':
|
|
121
|
+
await showPushMenu();
|
|
122
|
+
return true;
|
|
123
|
+
case 'pull':
|
|
124
|
+
await showPullMenu();
|
|
125
|
+
return true;
|
|
126
|
+
case 'branch':
|
|
127
|
+
await showBranchMenu();
|
|
128
|
+
return true;
|
|
129
|
+
case 'undo':
|
|
130
|
+
await showUndoMenu();
|
|
131
|
+
return true;
|
|
132
|
+
case 'history':
|
|
133
|
+
await showHistoryMenu();
|
|
134
|
+
return true;
|
|
135
|
+
case 'stash':
|
|
136
|
+
await showStashMenu();
|
|
137
|
+
return true;
|
|
138
|
+
case 'config':
|
|
139
|
+
await showConfigMenu();
|
|
140
|
+
return true;
|
|
141
|
+
case 'stats':
|
|
142
|
+
await this.config.runCommand('stats');
|
|
143
|
+
return true;
|
|
144
|
+
case 'help':
|
|
145
|
+
await showHelpMenu();
|
|
146
|
+
return true;
|
|
147
|
+
case 'quit':
|
|
148
|
+
return false;
|
|
149
|
+
default:
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAetC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,OAAgB,WAAW,SAA0C;IAErE,OAAgB,QAAQ,WAA8B;IAEhD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuD3B"}
|