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.
Files changed (185) hide show
  1. package/bin/run.js +80 -0
  2. package/dist/analytics/index.d.ts +3 -0
  3. package/dist/analytics/index.d.ts.map +1 -0
  4. package/dist/analytics/index.js +3 -0
  5. package/dist/analytics/index.js.map +1 -0
  6. package/dist/analytics/stats-calculator.d.ts +24 -0
  7. package/dist/analytics/stats-calculator.d.ts.map +1 -0
  8. package/dist/analytics/stats-calculator.js +135 -0
  9. package/dist/analytics/stats-calculator.js.map +1 -0
  10. package/dist/analytics/tracker.d.ts +36 -0
  11. package/dist/analytics/tracker.d.ts.map +1 -0
  12. package/dist/analytics/tracker.js +103 -0
  13. package/dist/analytics/tracker.js.map +1 -0
  14. package/dist/commands/config.d.ts +7 -0
  15. package/dist/commands/config.d.ts.map +1 -0
  16. package/dist/commands/config.js +12 -0
  17. package/dist/commands/config.js.map +1 -0
  18. package/dist/commands/index.d.ts +9 -0
  19. package/dist/commands/index.d.ts.map +1 -0
  20. package/dist/commands/index.js +154 -0
  21. package/dist/commands/index.js.map +1 -0
  22. package/dist/commands/init.d.ts +7 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +45 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/quick.d.ts +12 -0
  27. package/dist/commands/quick.d.ts.map +1 -0
  28. package/dist/commands/quick.js +112 -0
  29. package/dist/commands/quick.js.map +1 -0
  30. package/dist/commands/stats.d.ts +7 -0
  31. package/dist/commands/stats.d.ts.map +1 -0
  32. package/dist/commands/stats.js +42 -0
  33. package/dist/commands/stats.js.map +1 -0
  34. package/dist/config/defaults.d.ts +37 -0
  35. package/dist/config/defaults.d.ts.map +1 -0
  36. package/dist/config/defaults.js +33 -0
  37. package/dist/config/defaults.js.map +1 -0
  38. package/dist/config/index.d.ts +3 -0
  39. package/dist/config/index.d.ts.map +1 -0
  40. package/dist/config/index.js +3 -0
  41. package/dist/config/index.js.map +1 -0
  42. package/dist/config/user-config.d.ts +33 -0
  43. package/dist/config/user-config.d.ts.map +1 -0
  44. package/dist/config/user-config.js +106 -0
  45. package/dist/config/user-config.js.map +1 -0
  46. package/dist/i18n/index.d.ts +8 -0
  47. package/dist/i18n/index.d.ts.map +1 -0
  48. package/dist/i18n/index.js +45 -0
  49. package/dist/i18n/index.js.map +1 -0
  50. package/dist/i18n/locales/en.json +353 -0
  51. package/dist/i18n/locales/es.json +353 -0
  52. package/dist/i18n/locales/fr.json +353 -0
  53. package/dist/index.d.ts +9 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +11 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/services/analysis-service.d.ts +24 -0
  58. package/dist/services/analysis-service.d.ts.map +1 -0
  59. package/dist/services/analysis-service.js +158 -0
  60. package/dist/services/analysis-service.js.map +1 -0
  61. package/dist/services/copilot-service.d.ts +30 -0
  62. package/dist/services/copilot-service.d.ts.map +1 -0
  63. package/dist/services/copilot-service.js +385 -0
  64. package/dist/services/copilot-service.js.map +1 -0
  65. package/dist/services/git-service.d.ts +75 -0
  66. package/dist/services/git-service.d.ts.map +1 -0
  67. package/dist/services/git-service.js +230 -0
  68. package/dist/services/git-service.js.map +1 -0
  69. package/dist/services/index.d.ts +5 -0
  70. package/dist/services/index.d.ts.map +1 -0
  71. package/dist/services/index.js +5 -0
  72. package/dist/services/index.js.map +1 -0
  73. package/dist/services/prevention-service.d.ts +29 -0
  74. package/dist/services/prevention-service.d.ts.map +1 -0
  75. package/dist/services/prevention-service.js +213 -0
  76. package/dist/services/prevention-service.js.map +1 -0
  77. package/dist/ui/components/box.d.ts +16 -0
  78. package/dist/ui/components/box.d.ts.map +1 -0
  79. package/dist/ui/components/box.js +100 -0
  80. package/dist/ui/components/box.js.map +1 -0
  81. package/dist/ui/components/index.d.ts +5 -0
  82. package/dist/ui/components/index.d.ts.map +1 -0
  83. package/dist/ui/components/index.js +5 -0
  84. package/dist/ui/components/index.js.map +1 -0
  85. package/dist/ui/components/prompt.d.ts +19 -0
  86. package/dist/ui/components/prompt.d.ts.map +1 -0
  87. package/dist/ui/components/prompt.js +62 -0
  88. package/dist/ui/components/prompt.js.map +1 -0
  89. package/dist/ui/components/spinner.d.ts +8 -0
  90. package/dist/ui/components/spinner.d.ts.map +1 -0
  91. package/dist/ui/components/spinner.js +24 -0
  92. package/dist/ui/components/spinner.js.map +1 -0
  93. package/dist/ui/components/table.d.ts +25 -0
  94. package/dist/ui/components/table.d.ts.map +1 -0
  95. package/dist/ui/components/table.js +72 -0
  96. package/dist/ui/components/table.js.map +1 -0
  97. package/dist/ui/index.d.ts +3 -0
  98. package/dist/ui/index.d.ts.map +1 -0
  99. package/dist/ui/index.js +3 -0
  100. package/dist/ui/index.js.map +1 -0
  101. package/dist/ui/menus/add-menu.d.ts +6 -0
  102. package/dist/ui/menus/add-menu.d.ts.map +1 -0
  103. package/dist/ui/menus/add-menu.js +60 -0
  104. package/dist/ui/menus/add-menu.js.map +1 -0
  105. package/dist/ui/menus/branch-menu.d.ts +8 -0
  106. package/dist/ui/menus/branch-menu.d.ts.map +1 -0
  107. package/dist/ui/menus/branch-menu.js +141 -0
  108. package/dist/ui/menus/branch-menu.js.map +1 -0
  109. package/dist/ui/menus/commit-menu.d.ts +7 -0
  110. package/dist/ui/menus/commit-menu.d.ts.map +1 -0
  111. package/dist/ui/menus/commit-menu.js +129 -0
  112. package/dist/ui/menus/commit-menu.js.map +1 -0
  113. package/dist/ui/menus/config-menu.d.ts +3 -0
  114. package/dist/ui/menus/config-menu.d.ts.map +1 -0
  115. package/dist/ui/menus/config-menu.js +97 -0
  116. package/dist/ui/menus/config-menu.js.map +1 -0
  117. package/dist/ui/menus/help-menu.d.ts +3 -0
  118. package/dist/ui/menus/help-menu.d.ts.map +1 -0
  119. package/dist/ui/menus/help-menu.js +133 -0
  120. package/dist/ui/menus/help-menu.js.map +1 -0
  121. package/dist/ui/menus/history-menu.d.ts +3 -0
  122. package/dist/ui/menus/history-menu.d.ts.map +1 -0
  123. package/dist/ui/menus/history-menu.js +129 -0
  124. package/dist/ui/menus/history-menu.js.map +1 -0
  125. package/dist/ui/menus/index.d.ts +8 -0
  126. package/dist/ui/menus/index.d.ts.map +1 -0
  127. package/dist/ui/menus/index.js +8 -0
  128. package/dist/ui/menus/index.js.map +1 -0
  129. package/dist/ui/menus/main-menu.d.ts +4 -0
  130. package/dist/ui/menus/main-menu.d.ts.map +1 -0
  131. package/dist/ui/menus/main-menu.js +134 -0
  132. package/dist/ui/menus/main-menu.js.map +1 -0
  133. package/dist/ui/menus/pull-menu.d.ts +7 -0
  134. package/dist/ui/menus/pull-menu.d.ts.map +1 -0
  135. package/dist/ui/menus/pull-menu.js +69 -0
  136. package/dist/ui/menus/pull-menu.js.map +1 -0
  137. package/dist/ui/menus/push-menu.d.ts +8 -0
  138. package/dist/ui/menus/push-menu.d.ts.map +1 -0
  139. package/dist/ui/menus/push-menu.js +160 -0
  140. package/dist/ui/menus/push-menu.js.map +1 -0
  141. package/dist/ui/menus/setup-menu.d.ts +5 -0
  142. package/dist/ui/menus/setup-menu.d.ts.map +1 -0
  143. package/dist/ui/menus/setup-menu.js +234 -0
  144. package/dist/ui/menus/setup-menu.js.map +1 -0
  145. package/dist/ui/menus/stash-menu.d.ts +3 -0
  146. package/dist/ui/menus/stash-menu.d.ts.map +1 -0
  147. package/dist/ui/menus/stash-menu.js +205 -0
  148. package/dist/ui/menus/stash-menu.js.map +1 -0
  149. package/dist/ui/menus/undo-menu.d.ts +3 -0
  150. package/dist/ui/menus/undo-menu.d.ts.map +1 -0
  151. package/dist/ui/menus/undo-menu.js +197 -0
  152. package/dist/ui/menus/undo-menu.js.map +1 -0
  153. package/dist/ui/themes/colored.d.ts +35 -0
  154. package/dist/ui/themes/colored.d.ts.map +1 -0
  155. package/dist/ui/themes/colored.js +85 -0
  156. package/dist/ui/themes/colored.js.map +1 -0
  157. package/dist/ui/themes/index.d.ts +39 -0
  158. package/dist/ui/themes/index.d.ts.map +1 -0
  159. package/dist/ui/themes/index.js +9 -0
  160. package/dist/ui/themes/index.js.map +1 -0
  161. package/dist/ui/themes/monochrome.d.ts +35 -0
  162. package/dist/ui/themes/monochrome.d.ts.map +1 -0
  163. package/dist/ui/themes/monochrome.js +80 -0
  164. package/dist/ui/themes/monochrome.js.map +1 -0
  165. package/dist/utils/error-helper.d.ts +10 -0
  166. package/dist/utils/error-helper.d.ts.map +1 -0
  167. package/dist/utils/error-helper.js +55 -0
  168. package/dist/utils/error-helper.js.map +1 -0
  169. package/dist/utils/helpers.d.ts +16 -0
  170. package/dist/utils/helpers.d.ts.map +1 -0
  171. package/dist/utils/helpers.js +95 -0
  172. package/dist/utils/helpers.js.map +1 -0
  173. package/dist/utils/index.d.ts +4 -0
  174. package/dist/utils/index.d.ts.map +1 -0
  175. package/dist/utils/index.js +4 -0
  176. package/dist/utils/index.js.map +1 -0
  177. package/dist/utils/logger.d.ts +24 -0
  178. package/dist/utils/logger.d.ts.map +1 -0
  179. package/dist/utils/logger.js +71 -0
  180. package/dist/utils/logger.js.map +1 -0
  181. package/dist/utils/validators.d.ts +10 -0
  182. package/dist/utils/validators.d.ts.map +1 -0
  183. package/dist/utils/validators.js +78 -0
  184. package/dist/utils/validators.js.map +1 -0
  185. package/package.json +71 -0
@@ -0,0 +1,230 @@
1
+ import { simpleGit } from 'simple-git';
2
+ class GitService {
3
+ git;
4
+ constructor(basePath) {
5
+ this.git = simpleGit(basePath || process.cwd());
6
+ }
7
+ setWorkingDirectory(path) {
8
+ this.git = simpleGit(path);
9
+ }
10
+ async isGitRepo() {
11
+ try {
12
+ await this.git.status();
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ async getStatus() {
20
+ const status = await this.git.status();
21
+ return {
22
+ isClean: status.isClean(),
23
+ current: status.current,
24
+ tracking: status.tracking,
25
+ staged: [...status.staged, ...status.created.filter(f => status.staged.includes(f))],
26
+ modified: status.modified.filter(f => !status.staged.includes(f)),
27
+ deleted: status.deleted,
28
+ untracked: status.not_added,
29
+ ahead: status.ahead,
30
+ behind: status.behind
31
+ };
32
+ }
33
+ async getRawStatus() {
34
+ return this.git.status();
35
+ }
36
+ async getCurrentBranch() {
37
+ const status = await this.git.status();
38
+ return status.current;
39
+ }
40
+ async isDetachedHead() {
41
+ const status = await this.git.status();
42
+ return status.current === null || status.detached;
43
+ }
44
+ async getBranches() {
45
+ const summary = await this.git.branch();
46
+ const branches = [];
47
+ for (const [name, data] of Object.entries(summary.branches)) {
48
+ branches.push({
49
+ name,
50
+ current: data.current,
51
+ commit: data.commit,
52
+ label: data.label
53
+ });
54
+ }
55
+ return branches;
56
+ }
57
+ async getStagedFiles() {
58
+ const status = await this.git.status();
59
+ return [...status.staged, ...status.created];
60
+ }
61
+ async getUnstagedFiles() {
62
+ const status = await this.git.status();
63
+ return [...status.modified, ...status.deleted, ...status.not_added];
64
+ }
65
+ async hasUncommittedChanges() {
66
+ const status = await this.git.status();
67
+ return !status.isClean();
68
+ }
69
+ async getDiff(staged = false) {
70
+ if (staged) {
71
+ return this.git.diff(['--cached']);
72
+ }
73
+ return this.git.diff();
74
+ }
75
+ async getDiffSummary(staged = false) {
76
+ if (staged) {
77
+ return this.git.diffSummary(['--cached']);
78
+ }
79
+ return this.git.diffSummary();
80
+ }
81
+ async add(files) {
82
+ const fileList = Array.isArray(files) ? files : [files];
83
+ await this.git.add(fileList);
84
+ }
85
+ async addAll() {
86
+ await this.git.add('-A');
87
+ }
88
+ async commit(message) {
89
+ const result = await this.git.commit(message);
90
+ return result.commit;
91
+ }
92
+ async push(remote = 'origin', branch, force = false, setUpstream = false) {
93
+ const currentBranch = branch || (await this.getCurrentBranch());
94
+ if (!currentBranch) {
95
+ throw new Error('Cannot push: no branch specified and detached HEAD');
96
+ }
97
+ const options = [];
98
+ if (force)
99
+ options.push('--force');
100
+ if (setUpstream)
101
+ options.push('-u');
102
+ await this.git.push(remote, currentBranch, options);
103
+ }
104
+ /**
105
+ * Check if there are local commits that haven't been pushed
106
+ * Works even when there's no upstream branch set
107
+ */
108
+ async hasUnpushedCommits() {
109
+ try {
110
+ const status = await this.git.status();
111
+ // If tracking is set, use ahead count
112
+ if (status.tracking) {
113
+ return status.ahead > 0;
114
+ }
115
+ // No tracking branch - check if there are any commits at all
116
+ const log = await this.git.log({ maxCount: 1 });
117
+ return log.total > 0;
118
+ }
119
+ catch {
120
+ return false;
121
+ }
122
+ }
123
+ /**
124
+ * Get the number of unpushed commits
125
+ * Returns -1 if no upstream is set (meaning all commits are unpushed)
126
+ */
127
+ async getUnpushedCommitCount() {
128
+ try {
129
+ const status = await this.git.status();
130
+ // If tracking is set, return ahead count
131
+ if (status.tracking) {
132
+ return status.ahead;
133
+ }
134
+ // No tracking branch - count all local commits
135
+ const log = await this.git.log();
136
+ return log.total;
137
+ }
138
+ catch {
139
+ return 0;
140
+ }
141
+ }
142
+ async pull(remote = 'origin', branch) {
143
+ const currentBranch = branch || (await this.getCurrentBranch());
144
+ if (!currentBranch) {
145
+ throw new Error('Cannot pull: no branch specified and detached HEAD');
146
+ }
147
+ await this.git.pull(remote, currentBranch);
148
+ }
149
+ async checkout(branch) {
150
+ await this.git.checkout(branch);
151
+ }
152
+ async createBranch(name, checkout = true) {
153
+ if (checkout) {
154
+ await this.git.checkoutLocalBranch(name);
155
+ }
156
+ else {
157
+ await this.git.branch([name]);
158
+ }
159
+ }
160
+ async deleteBranch(name, force = false) {
161
+ const options = force ? ['-D', name] : ['-d', name];
162
+ await this.git.branch(options);
163
+ }
164
+ async getLog(maxCount = 10) {
165
+ const log = await this.git.log({ maxCount });
166
+ return log.all.map(entry => ({
167
+ hash: entry.hash,
168
+ date: entry.date,
169
+ message: entry.message,
170
+ author: entry.author_name
171
+ }));
172
+ }
173
+ async getRemotes() {
174
+ const remotes = await this.git.getRemotes();
175
+ return remotes.map(r => r.name);
176
+ }
177
+ async hasRemote() {
178
+ const remotes = await this.getRemotes();
179
+ return remotes.length > 0;
180
+ }
181
+ async fetch(remote = 'origin') {
182
+ await this.git.fetch(remote);
183
+ }
184
+ async reset(mode = 'mixed', ref = 'HEAD') {
185
+ await this.git.reset([`--${mode}`, ref]);
186
+ }
187
+ async stash(message) {
188
+ if (message) {
189
+ await this.git.stash(['push', '-m', message]);
190
+ }
191
+ else {
192
+ await this.git.stash();
193
+ }
194
+ }
195
+ async stashPop() {
196
+ await this.git.stash(['pop']);
197
+ }
198
+ async stashApply(index = 0) {
199
+ await this.git.stash(['apply', `stash@{${index}}`]);
200
+ }
201
+ async stashDrop(index = 0) {
202
+ await this.git.stash(['drop', `stash@{${index}}`]);
203
+ }
204
+ async getStashList() {
205
+ const result = await this.git.stash(['list']);
206
+ if (!result)
207
+ return [];
208
+ return result.split('\n').filter(line => line.trim());
209
+ }
210
+ async getFileContent(file, ref = 'HEAD') {
211
+ return this.git.show([`${ref}:${file}`]);
212
+ }
213
+ async init() {
214
+ await this.git.init();
215
+ }
216
+ async addRemote(name, url) {
217
+ await this.git.addRemote(name, url);
218
+ }
219
+ async clone(repoUrl, directory) {
220
+ if (directory) {
221
+ await this.git.clone(repoUrl, directory);
222
+ }
223
+ else {
224
+ await this.git.clone(repoUrl);
225
+ }
226
+ }
227
+ }
228
+ export const gitService = new GitService();
229
+ export default gitService;
230
+ //# sourceMappingURL=git-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-service.js","sourceRoot":"","sources":["../../src/services/git-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './git-service.js';
2
+ export * from './copilot-service.js';
3
+ export * from './prevention-service.js';
4
+ export * from './analysis-service.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './git-service.js';
2
+ export * from './copilot-service.js';
3
+ export * from './prevention-service.js';
4
+ export * from './analysis-service.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,29 @@
1
+ export type WarningLevel = 'info' | 'warning' | 'critical';
2
+ export interface Warning {
3
+ level: WarningLevel;
4
+ title: string;
5
+ message: string;
6
+ action: string;
7
+ }
8
+ export interface ValidationResult {
9
+ valid: boolean;
10
+ warnings: Warning[];
11
+ canProceed: boolean;
12
+ }
13
+ declare class PreventionService {
14
+ checkUncommittedChanges(): Promise<Warning | null>;
15
+ checkForcePush(): Promise<Warning | null>;
16
+ checkWrongBranch(expectedBranch: string): Promise<Warning | null>;
17
+ checkDetachedHead(): Promise<Warning | null>;
18
+ checkNoRemote(): Promise<Warning | null>;
19
+ checkNotGitRepo(): Promise<Warning | null>;
20
+ validateCheckout(_targetBranch: string): Promise<ValidationResult>;
21
+ validatePush(force?: boolean): Promise<ValidationResult>;
22
+ validateCommit(): Promise<ValidationResult>;
23
+ validatePull(): Promise<ValidationResult>;
24
+ validateBranchDelete(branchName: string): Promise<ValidationResult>;
25
+ shouldConfirmAction(): boolean;
26
+ }
27
+ export declare const preventionService: PreventionService;
28
+ export default preventionService;
29
+ //# sourceMappingURL=prevention-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prevention-service.d.ts","sourceRoot":"","sources":["../../src/services/prevention-service.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,cAAM,iBAAiB;IACf,uBAAuB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAoBlD,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAUzC,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAoBjE,iBAAiB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAoB5C,aAAa,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAmBxC,eAAe,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAwB1C,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgBlE,YAAY,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8B/D,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA2B3C,YAAY,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAyBzC,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqBzE,mBAAmB,IAAI,OAAO;CAG/B;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC;AACzD,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,213 @@
1
+ import { gitService } from './git-service.js';
2
+ import { userConfig } from '../config/user-config.js';
3
+ import { t } from '../i18n/index.js';
4
+ class PreventionService {
5
+ async checkUncommittedChanges() {
6
+ try {
7
+ const hasChanges = await gitService.hasUncommittedChanges();
8
+ if (hasChanges) {
9
+ userConfig.incrementErrorsPrevented();
10
+ return {
11
+ level: 'warning',
12
+ title: t('warnings.title'),
13
+ message: t('warnings.uncommittedChanges'),
14
+ action: t('warnings.uncommittedChangesAction')
15
+ };
16
+ }
17
+ return null;
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ async checkForcePush() {
24
+ userConfig.incrementErrorsPrevented();
25
+ return {
26
+ level: 'critical',
27
+ title: t('warnings.title'),
28
+ message: t('warnings.forcePush'),
29
+ action: t('warnings.forcePushAction')
30
+ };
31
+ }
32
+ async checkWrongBranch(expectedBranch) {
33
+ try {
34
+ const currentBranch = await gitService.getCurrentBranch();
35
+ if (currentBranch && currentBranch !== expectedBranch) {
36
+ userConfig.incrementErrorsPrevented();
37
+ return {
38
+ level: 'warning',
39
+ title: t('warnings.title'),
40
+ message: t('warnings.wrongBranch', { current: currentBranch, expected: expectedBranch }),
41
+ action: t('warnings.wrongBranchAction')
42
+ };
43
+ }
44
+ return null;
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ async checkDetachedHead() {
51
+ try {
52
+ const isDetached = await gitService.isDetachedHead();
53
+ if (isDetached) {
54
+ userConfig.incrementErrorsPrevented();
55
+ return {
56
+ level: 'warning',
57
+ title: t('warnings.title'),
58
+ message: t('warnings.detachedHead'),
59
+ action: t('warnings.detachedHeadAction')
60
+ };
61
+ }
62
+ return null;
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ async checkNoRemote() {
69
+ try {
70
+ const hasRemote = await gitService.hasRemote();
71
+ if (!hasRemote) {
72
+ return {
73
+ level: 'info',
74
+ title: t('warnings.title'),
75
+ message: t('warnings.noRemote'),
76
+ action: ''
77
+ };
78
+ }
79
+ return null;
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ async checkNotGitRepo() {
86
+ try {
87
+ const isRepo = await gitService.isGitRepo();
88
+ if (!isRepo) {
89
+ return {
90
+ level: 'critical',
91
+ title: t('warnings.title'),
92
+ message: t('warnings.notGitRepo'),
93
+ action: ''
94
+ };
95
+ }
96
+ return null;
97
+ }
98
+ catch {
99
+ return {
100
+ level: 'critical',
101
+ title: t('warnings.title'),
102
+ message: t('warnings.notGitRepo'),
103
+ action: ''
104
+ };
105
+ }
106
+ }
107
+ async validateCheckout(_targetBranch) {
108
+ const warnings = [];
109
+ // Check for uncommitted changes
110
+ const uncommittedWarning = await this.checkUncommittedChanges();
111
+ if (uncommittedWarning) {
112
+ warnings.push(uncommittedWarning);
113
+ }
114
+ return {
115
+ valid: warnings.length === 0,
116
+ warnings,
117
+ canProceed: !warnings.some(w => w.level === 'critical')
118
+ };
119
+ }
120
+ async validatePush(force = false) {
121
+ const warnings = [];
122
+ // Check for detached HEAD
123
+ const detachedWarning = await this.checkDetachedHead();
124
+ if (detachedWarning) {
125
+ warnings.push(detachedWarning);
126
+ }
127
+ // Check for no remote
128
+ const noRemoteWarning = await this.checkNoRemote();
129
+ if (noRemoteWarning) {
130
+ warnings.push(noRemoteWarning);
131
+ }
132
+ // Check force push
133
+ if (force) {
134
+ const forcePushWarning = await this.checkForcePush();
135
+ if (forcePushWarning) {
136
+ warnings.push(forcePushWarning);
137
+ }
138
+ }
139
+ return {
140
+ valid: warnings.length === 0,
141
+ warnings,
142
+ canProceed: !warnings.some(w => w.level === 'critical' && !force)
143
+ };
144
+ }
145
+ async validateCommit() {
146
+ const warnings = [];
147
+ // Check for detached HEAD
148
+ const detachedWarning = await this.checkDetachedHead();
149
+ if (detachedWarning) {
150
+ warnings.push(detachedWarning);
151
+ }
152
+ // Check for staged files
153
+ const stagedFiles = await gitService.getStagedFiles();
154
+ if (stagedFiles.length === 0) {
155
+ warnings.push({
156
+ level: 'info',
157
+ title: t('warnings.title'),
158
+ message: t('commands.commit.noStaged'),
159
+ action: ''
160
+ });
161
+ }
162
+ return {
163
+ valid: stagedFiles.length > 0,
164
+ warnings,
165
+ canProceed: stagedFiles.length > 0
166
+ };
167
+ }
168
+ async validatePull() {
169
+ const warnings = [];
170
+ // Check for uncommitted changes (could cause merge conflicts)
171
+ const uncommittedWarning = await this.checkUncommittedChanges();
172
+ if (uncommittedWarning) {
173
+ warnings.push({
174
+ ...uncommittedWarning,
175
+ level: 'info' // Downgrade to info for pull
176
+ });
177
+ }
178
+ // Check for no remote
179
+ const noRemoteWarning = await this.checkNoRemote();
180
+ if (noRemoteWarning) {
181
+ warnings.push(noRemoteWarning);
182
+ }
183
+ return {
184
+ valid: true,
185
+ warnings,
186
+ canProceed: !warnings.some(w => w.level === 'critical')
187
+ };
188
+ }
189
+ async validateBranchDelete(branchName) {
190
+ const warnings = [];
191
+ // Check if trying to delete current branch
192
+ const currentBranch = await gitService.getCurrentBranch();
193
+ if (currentBranch === branchName) {
194
+ warnings.push({
195
+ level: 'critical',
196
+ title: t('warnings.title'),
197
+ message: t('commands.branch.cannotDeleteCurrent'),
198
+ action: ''
199
+ });
200
+ }
201
+ return {
202
+ valid: currentBranch !== branchName,
203
+ warnings,
204
+ canProceed: currentBranch !== branchName
205
+ };
206
+ }
207
+ shouldConfirmAction() {
208
+ return userConfig.getConfirmDestructiveActions();
209
+ }
210
+ }
211
+ export const preventionService = new PreventionService();
212
+ export default preventionService;
213
+ //# sourceMappingURL=prevention-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prevention-service.js","sourceRoot":"","sources":["../../src/services/prevention-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface BoxOptions {
2
+ title?: string;
3
+ padding?: number;
4
+ margin?: number;
5
+ borderStyle?: 'single' | 'double' | 'round' | 'bold' | 'classic';
6
+ borderColor?: string;
7
+ textAlignment?: 'left' | 'center' | 'right';
8
+ }
9
+ export declare function createBox(content: string, options?: BoxOptions): string;
10
+ export declare function titleBox(title: string, subtitle?: string): string;
11
+ export declare function infoBox(content: string, title?: string): string;
12
+ export declare function warningBox(content: string, title?: string): string;
13
+ export declare function errorBox(content: string, title?: string): string;
14
+ export declare function successBox(content: string, title?: string): string;
15
+ export declare function banner(version: string, tagline: string): string;
16
+ //# sourceMappingURL=box.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../../src/ui/components/box.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC7C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAoB3E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0B/D"}
@@ -0,0 +1,100 @@
1
+ import boxen from 'boxen';
2
+ import chalk from 'chalk';
3
+ import { getTheme } from '../themes/index.js';
4
+ import { userConfig } from '../../config/user-config.js';
5
+ const ASCII_BANNER = `
6
+ ██████╗ ██╗████████╗███████╗███████╗███╗ ██╗███████╗███████╗
7
+ ██╔════╝ ██║╚══██╔══╝██╔════╝██╔════╝████╗ ██║██╔════╝██╔════╝
8
+ ██║ ███╗██║ ██║ ███████╗█████╗ ██╔██╗ ██║███████╗█████╗
9
+ ██║ ██║██║ ██║ ╚════██║██╔══╝ ██║╚██╗██║╚════██║██╔══╝
10
+ ╚██████╔╝██║ ██║ ███████║███████╗██║ ╚████║███████║███████╗
11
+ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═══╝╚══════╝╚══════╝
12
+ `;
13
+ export function createBox(content, options = {}) {
14
+ const isMonochrome = userConfig.getTheme() === 'monochrome';
15
+ const boxenOptions = {
16
+ padding: options.padding ?? 1,
17
+ margin: options.margin ?? 0,
18
+ borderStyle: options.borderStyle ?? 'round',
19
+ textAlignment: options.textAlignment ?? 'left'
20
+ };
21
+ if (options.title) {
22
+ boxenOptions.title = options.title;
23
+ boxenOptions.titleAlignment = 'center';
24
+ }
25
+ if (!isMonochrome && options.borderColor) {
26
+ boxenOptions.borderColor = options.borderColor;
27
+ }
28
+ return boxen(content, boxenOptions);
29
+ }
30
+ export function titleBox(title, subtitle) {
31
+ const theme = getTheme();
32
+ let content = theme.title(title);
33
+ if (subtitle) {
34
+ content += '\n' + theme.subtitle(subtitle);
35
+ }
36
+ return createBox(content, {
37
+ padding: 1,
38
+ borderStyle: 'double',
39
+ borderColor: 'cyan',
40
+ textAlignment: 'center'
41
+ });
42
+ }
43
+ export function infoBox(content, title) {
44
+ return createBox(content, {
45
+ title,
46
+ padding: 1,
47
+ borderStyle: 'round',
48
+ borderColor: 'blue'
49
+ });
50
+ }
51
+ export function warningBox(content, title) {
52
+ const theme = getTheme();
53
+ return createBox(theme.warning(content), {
54
+ title: title || 'Warning',
55
+ padding: 1,
56
+ borderStyle: 'bold',
57
+ borderColor: 'yellow'
58
+ });
59
+ }
60
+ export function errorBox(content, title) {
61
+ const theme = getTheme();
62
+ return createBox(theme.error(content), {
63
+ title: title || 'Error',
64
+ padding: 1,
65
+ borderStyle: 'bold',
66
+ borderColor: 'red'
67
+ });
68
+ }
69
+ export function successBox(content, title) {
70
+ const theme = getTheme();
71
+ return createBox(theme.success(content), {
72
+ title: title || 'Success',
73
+ padding: 1,
74
+ borderStyle: 'round',
75
+ borderColor: 'green'
76
+ });
77
+ }
78
+ export function banner(version, tagline) {
79
+ const isMonochrome = userConfig.getTheme() === 'monochrome';
80
+ let output = '\n';
81
+ if (isMonochrome) {
82
+ output += ASCII_BANNER;
83
+ output += `\n v${version} - ${tagline}\n`;
84
+ }
85
+ else {
86
+ // Shadow effect: render shadow first (offset by 1), then main text on top
87
+ const lines = ASCII_BANNER.split('\n').filter(line => line.trim());
88
+ // Create shadow effect by using darker background color behind text
89
+ lines.forEach((line) => {
90
+ // Main text in bright cyan with shadow hint at the end
91
+ output += chalk.cyanBright(line) + chalk.gray('▒') + '\n';
92
+ });
93
+ // Bottom shadow line
94
+ output += chalk.gray(' ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒') + '\n';
95
+ output += '\n' + chalk.bgCyan.black(' ') + chalk.cyan('─────────────────────────────────────────────────────────────') + chalk.bgCyan.black(' ') + '\n';
96
+ output += chalk.bold.white(` v${version}`) + chalk.gray(' │ ') + chalk.cyanBright(tagline) + '\n';
97
+ }
98
+ return output;
99
+ }
100
+ //# sourceMappingURL=box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/ui/components/box.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './box.js';
2
+ export * from './table.js';
3
+ export * from './prompt.js';
4
+ export * from './spinner.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}