commitect 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 (55) hide show
  1. package/.github/workflows/publish.yml +39 -0
  2. package/LICENSE +21 -0
  3. package/README.md +176 -0
  4. package/dist/commands/analyze.d.ts +2 -0
  5. package/dist/commands/analyze.d.ts.map +1 -0
  6. package/dist/commands/analyze.js +40 -0
  7. package/dist/commands/analyze.js.map +1 -0
  8. package/dist/commands/clear-cache.d.ts +2 -0
  9. package/dist/commands/clear-cache.d.ts.map +1 -0
  10. package/dist/commands/clear-cache.js +23 -0
  11. package/dist/commands/clear-cache.js.map +1 -0
  12. package/dist/commands/commit.d.ts +2 -0
  13. package/dist/commands/commit.d.ts.map +1 -0
  14. package/dist/commands/commit.js +42 -0
  15. package/dist/commands/commit.js.map +1 -0
  16. package/dist/commands/copy.d.ts +2 -0
  17. package/dist/commands/copy.d.ts.map +1 -0
  18. package/dist/commands/copy.js +42 -0
  19. package/dist/commands/copy.js.map +1 -0
  20. package/dist/commands/help.d.ts +2 -0
  21. package/dist/commands/help.d.ts.map +1 -0
  22. package/dist/commands/help.js +129 -0
  23. package/dist/commands/help.js.map +1 -0
  24. package/dist/commands/history.d.ts +2 -0
  25. package/dist/commands/history.d.ts.map +1 -0
  26. package/dist/commands/history.js +58 -0
  27. package/dist/commands/history.js.map +1 -0
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +44 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/services/llm.d.ts +6 -0
  33. package/dist/services/llm.d.ts.map +1 -0
  34. package/dist/services/llm.js +94 -0
  35. package/dist/services/llm.js.map +1 -0
  36. package/dist/utils/cache.d.ts +61 -0
  37. package/dist/utils/cache.d.ts.map +1 -0
  38. package/dist/utils/cache.js +141 -0
  39. package/dist/utils/cache.js.map +1 -0
  40. package/dist/utils/git.d.ts +5 -0
  41. package/dist/utils/git.d.ts.map +1 -0
  42. package/dist/utils/git.js +69 -0
  43. package/dist/utils/git.js.map +1 -0
  44. package/package.json +38 -0
  45. package/src/commands/analyze.ts +44 -0
  46. package/src/commands/clear-cache.ts +23 -0
  47. package/src/commands/commit.ts +48 -0
  48. package/src/commands/copy.ts +48 -0
  49. package/src/commands/help.ts +143 -0
  50. package/src/commands/history.ts +62 -0
  51. package/src/index.ts +53 -0
  52. package/src/services/llm.ts +123 -0
  53. package/src/utils/cache.ts +170 -0
  54. package/src/utils/git.ts +74 -0
  55. package/tsconfig.json +20 -0
@@ -0,0 +1,39 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+
14
+ - uses: actions/setup-node@v4
15
+ with:
16
+ node-version: 20
17
+ registry-url: https://registry.npmjs.org/
18
+
19
+ - run: npm ci
20
+
21
+ - run: npm run build
22
+
23
+ - name: Check if version changed
24
+ id: version-check
25
+ run: |
26
+ PACKAGE_VERSION=$(node -p "require('./package.json').version")
27
+ PACKAGE_NAME=$(node -p "require('./package.json').name")
28
+
29
+ if npm view "$PACKAGE_NAME@$PACKAGE_VERSION" version 2>/dev/null; then
30
+ echo "should_publish=false" >> $GITHUB_OUTPUT
31
+ else
32
+ echo "should_publish=true" >> $GITHUB_OUTPUT
33
+ fi
34
+
35
+ - name: Publish to npm
36
+ if: steps.version-check.outputs.should_publish == 'true'
37
+ run: npm publish --access public
38
+ env:
39
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mohammed Atef Abd El-Kader
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,176 @@
1
+ # CommiTect
2
+
3
+ **Zero-config Git Commit Assistant CLI** powered by custom LLM API.
4
+
5
+ ## Features
6
+
7
+ ✅ **Zero Configuration** - Works out of the box
8
+ ✅ **AI-Powered** - Generates professional commit messages
9
+ ✅ **Fast** - Instant analysis and suggestions
10
+ ✅ **Smart Caching** - Avoids redundant API calls
11
+ ✅ **History Tracking** - Review all your cached messages
12
+ ✅ **Simple** - Just 5 commands
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install -g commitect
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ### Analyze Changes
23
+
24
+ Generate and display a commit message suggestion:
25
+
26
+ ```bash
27
+ commitect analyze
28
+ ```
29
+
30
+ **Output:**
31
+ ```
32
+ Feature: Add user authentication with JWT tokens
33
+ ```
34
+
35
+ ### Copy to Clipboard
36
+
37
+ Generate a commit message and copy it to your clipboard:
38
+
39
+ ```bash
40
+ commitect copy
41
+ ```
42
+
43
+ **Output:**
44
+ ```
45
+ ✔ Commit message copied to clipboard
46
+ ```
47
+
48
+ ### Auto-Commit
49
+
50
+ Generate a commit message and execute the git commit automatically:
51
+
52
+ ```bash
53
+ commitect commit
54
+ ```
55
+
56
+ **Output:**
57
+ ```
58
+ ✔ Committed: Feature: Add user authentication with JWT tokens
59
+ ```
60
+
61
+ ### View History
62
+
63
+ View all cached commit messages:
64
+
65
+ ```bash
66
+ commitect history
67
+ ```
68
+
69
+ **Output:**
70
+ ```
71
+ 📜 COMMIT HISTORY
72
+ ──────────────────────────────────────────────────────────────────────
73
+
74
+ [1] Feature: Add user authentication with JWT tokens
75
+ 📁 CommiTect_VSCode
76
+ 🕒 24/01/2026, 20:18:58 (4 minutes ago)
77
+
78
+ [2] Bug Fix: Resolve memory leak in connection pool
79
+ 📁 CommiTect_VS
80
+ 🕒 24/01/2026, 20:00:58 (22 minutes ago)
81
+
82
+ ──────────────────────────────────────────────────────────────────────
83
+ Total: 2 cached commit messages
84
+ ```
85
+
86
+ ### Clear Cache
87
+
88
+ Clear the cached commit messages:
89
+
90
+ ```bash
91
+ commitect clear-cache
92
+ ```
93
+
94
+ **Output:**
95
+ ```
96
+ ✔ Cache cleared (15 entries removed)
97
+ ```
98
+
99
+ ## How It Works
100
+
101
+ 1. **Reads git diff** - Analyzes both staged and unstaged changes
102
+ 2. **Checks cache** - If the same diff was processed before, returns cached result instantly
103
+ 3. **Filters noise** - Ignores `node_modules/`, `dist/`, `build/`, etc.
104
+ 4. **Generates message** - Uses your custom LLM API with automatic retry
105
+ 5. **Caches result** - Stores the result for 30 days to avoid redundant API calls
106
+ 6. **Executes action** - Display, copy, or commit based on command
107
+
108
+ ## Requirements
109
+
110
+ - Node.js >= 16
111
+ - Git repository
112
+ - Internet connection (for API calls)
113
+
114
+ ## Workflow
115
+
116
+ ```bash
117
+ # Make your changes
118
+ vim src/auth.ts
119
+
120
+ # Save files
121
+ git add .
122
+
123
+ # Generate and commit
124
+ commitect commit
125
+
126
+ # Continue with your workflow
127
+ git push
128
+ ```
129
+
130
+ ## Caching System
131
+
132
+ CommiTect intelligently caches commit messages to improve performance:
133
+
134
+ - **Fast responses** - Cached results return instantly without API calls
135
+ - **30-day retention** - Cache entries expire after 30 days
136
+ - **Hash-based** - Uses SHA-256 hash of git diff for accurate matching
137
+ - **Persistent** - Cache stored in `~/.commitect/cache.json`
138
+ - **Manual clear** - Use `commitect clear-cache` to reset
139
+
140
+ ### Cache Benefits
141
+
142
+ 1. **Faster execution** - No API latency for repeated diffs
143
+ 2. **Reduced API costs** - Fewer API calls = lower costs
144
+ 3. **Offline capability** - Works offline if result is cached
145
+ 4. **Consistency** - Same diff always produces same message
146
+
147
+ ## API Integration
148
+
149
+ CommiTect connects to your LLM API with:
150
+ - **Automatic retry** - Retries failed requests up to 3 times
151
+ - **Rate limit handling** - Graceful exponential backoff
152
+ - **Network resilience** - Handles timeouts and connection errors
153
+ - **Smart caching** - Reduces API calls significantly
154
+
155
+ ## Ignored Paths
156
+
157
+ The following directories are automatically excluded from analysis:
158
+
159
+ - `node_modules/`
160
+ - `bin/`
161
+ - `obj/`
162
+ - `dist/`
163
+ - `build/`
164
+ - `.git/`
165
+
166
+ ## Commit Message Rules
167
+
168
+ Generated messages follow best practices:
169
+ - **Under 70 characters**
170
+ - **Imperative form** (Add, Fix, Update, Refactor)
171
+ - **Professional and concise**
172
+ - **Contextual** based on actual changes
173
+
174
+ ## License
175
+
176
+ MIT
@@ -0,0 +1,2 @@
1
+ export declare function analyzeCommand(): Promise<void>;
2
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCpD"}
@@ -0,0 +1,40 @@
1
+ import { isGitRepository, getGitDiff, hasChanges } from '../utils/git.js';
2
+ import { generateCommitMessage } from '../services/llm.js';
3
+ import chalk from 'chalk';
4
+ export async function analyzeCommand() {
5
+ try {
6
+ // Validate git repository
7
+ if (!isGitRepository()) {
8
+ console.error(chalk.red('❌ Not a git repository'));
9
+ process.exit(1);
10
+ }
11
+ // Check for changes
12
+ if (!hasChanges()) {
13
+ console.log(chalk.yellow('⚠ No changes detected'));
14
+ process.exit(0);
15
+ }
16
+ // Get diff
17
+ const diff = getGitDiff();
18
+ if (!diff.trim()) {
19
+ console.log(chalk.yellow('⚠ No changes to analyze'));
20
+ process.exit(0);
21
+ }
22
+ // Generate commit message
23
+ console.log(chalk.blue('🔍 Analyzing changes...'));
24
+ const suggestion = await generateCommitMessage(diff);
25
+ // Print result
26
+ console.log('');
27
+ console.log(chalk.green(`${suggestion.intent}: ${suggestion.message}`));
28
+ console.log('');
29
+ }
30
+ catch (error) {
31
+ if (error instanceof Error) {
32
+ console.error(chalk.red('❌ ' + error.message));
33
+ }
34
+ else {
35
+ console.error(chalk.red('❌ An unexpected error occurred'));
36
+ }
37
+ process.exit(1);
38
+ }
39
+ }
40
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,WAAW;QACX,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAErD,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAElB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function clearCacheCommand(): void;
2
+ //# sourceMappingURL=clear-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-cache.d.ts","sourceRoot":"","sources":["../../src/commands/clear-cache.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,IAAI,IAAI,CAmBxC"}
@@ -0,0 +1,23 @@
1
+ import { commitCache } from '../utils/cache.js';
2
+ import chalk from 'chalk';
3
+ export function clearCacheCommand() {
4
+ try {
5
+ const stats = commitCache.getStats();
6
+ if (stats.size === 0) {
7
+ console.log(chalk.yellow('ℹ Cache is already empty'));
8
+ return;
9
+ }
10
+ commitCache.clear();
11
+ console.log(chalk.green(`✔ Cache cleared (${stats.size} entries removed)`));
12
+ }
13
+ catch (error) {
14
+ if (error instanceof Error) {
15
+ console.error(chalk.red('❌ ' + error.message));
16
+ }
17
+ else {
18
+ console.error(chalk.red('❌ Failed to clear cache'));
19
+ }
20
+ process.exit(1);
21
+ }
22
+ }
23
+ //# sourceMappingURL=clear-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-cache.js","sourceRoot":"","sources":["../../src/commands/clear-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QAErC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function commitCommand(): Promise<void>;
2
+ //# sourceMappingURL=commit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA2CnD"}
@@ -0,0 +1,42 @@
1
+ import { isGitRepository, getGitDiff, hasChanges, executeCommit } from '../utils/git.js';
2
+ import { generateCommitMessage } from '../services/llm.js';
3
+ import chalk from 'chalk';
4
+ export async function commitCommand() {
5
+ try {
6
+ // Validate git repository
7
+ if (!isGitRepository()) {
8
+ console.error(chalk.red('❌ Not a git repository'));
9
+ process.exit(1);
10
+ }
11
+ // Check for changes
12
+ if (!hasChanges()) {
13
+ console.log(chalk.yellow('⚠ No changes to commit'));
14
+ process.exit(0);
15
+ }
16
+ // Get diff
17
+ const diff = getGitDiff();
18
+ if (!diff.trim()) {
19
+ console.log(chalk.yellow('⚠ No changes to commit'));
20
+ process.exit(0);
21
+ }
22
+ // Generate commit message
23
+ console.log(chalk.blue('🔍 Generating commit message...'));
24
+ const suggestion = await generateCommitMessage(diff);
25
+ // Build commit message as "intent: message"
26
+ const commitMessage = `${suggestion.intent}: ${suggestion.message}`;
27
+ // Execute git commit
28
+ console.log(chalk.blue('💾 Committing changes...'));
29
+ executeCommit(commitMessage);
30
+ console.log(chalk.green('✔ Committed: ') + commitMessage);
31
+ }
32
+ catch (error) {
33
+ if (error instanceof Error) {
34
+ console.error(chalk.red('❌ ' + error.message));
35
+ }
36
+ else {
37
+ console.error(chalk.red('❌ An unexpected error occurred'));
38
+ }
39
+ process.exit(1);
40
+ }
41
+ }
42
+ //# sourceMappingURL=commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,WAAW;QACX,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAErD,4CAA4C;QAC5C,MAAM,aAAa,GAAG,GAAG,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;QAEpE,qBAAqB;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,aAAa,CAAC,aAAa,CAAC,CAAC;QAE7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,aAAa,CAAC,CAAC;IAE5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function copyCommand(): Promise<void>;
2
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/commands/copy.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA0CjD"}
@@ -0,0 +1,42 @@
1
+ import { isGitRepository, getGitDiff, hasChanges } from '../utils/git.js';
2
+ import { generateCommitMessage } from '../services/llm.js';
3
+ import clipboardy from 'clipboardy';
4
+ import chalk from 'chalk';
5
+ export async function copyCommand() {
6
+ try {
7
+ // Validate git repository
8
+ if (!isGitRepository()) {
9
+ console.error(chalk.red('❌ Not a git repository'));
10
+ process.exit(1);
11
+ }
12
+ // Check for changes
13
+ if (!hasChanges()) {
14
+ console.log(chalk.yellow('⚠ No changes detected'));
15
+ process.exit(0);
16
+ }
17
+ // Get diff
18
+ const diff = getGitDiff();
19
+ if (!diff.trim()) {
20
+ console.log(chalk.yellow('⚠ No changes to analyze'));
21
+ process.exit(0);
22
+ }
23
+ // Generate commit message
24
+ console.log(chalk.blue('🔍 Generating commit message...'));
25
+ const suggestion = await generateCommitMessage(diff);
26
+ // Build commit message as "intent: message"
27
+ const commitMessage = `${suggestion.intent}: ${suggestion.message}`;
28
+ // Copy to clipboard
29
+ await clipboardy.write(commitMessage);
30
+ console.log(chalk.green('✔ Commit message copied to clipboard'));
31
+ }
32
+ catch (error) {
33
+ if (error instanceof Error) {
34
+ console.error(chalk.red('❌ ' + error.message));
35
+ }
36
+ else {
37
+ console.error(chalk.red('❌ An unexpected error occurred'));
38
+ }
39
+ process.exit(1);
40
+ }
41
+ }
42
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/commands/copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,WAAW;QACX,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAErD,4CAA4C;QAC5C,MAAM,aAAa,GAAG,GAAG,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;QAEpE,oBAAoB;QACpB,MAAM,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAEtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAEnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function helpCommand(): void;
2
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAMA,wBAAgB,WAAW,IAAI,IAAI,CAwIlC"}
@@ -0,0 +1,129 @@
1
+ import chalk from 'chalk';
2
+ const VERSION = '1.0.0';
3
+ const GITHUB_REPO = 'https://github.com/Mohammed_3tef/CommiTect_CLI';
4
+ const ISSUES_URL = GITHUB_REPO + '/issues';
5
+ export function helpCommand() {
6
+ console.log('');
7
+ console.log(chalk.bold.cyan('╔══════════════════════════════════════════════════════════╗'));
8
+ console.log(chalk.bold.cyan('║ ') + chalk.bold.white('CommiTect') + chalk.bold.cyan(' ║'));
9
+ console.log(chalk.bold.cyan('║ ') + chalk.gray('Zero-config Git Commit Assistant') + chalk.bold.cyan(' ║'));
10
+ console.log(chalk.bold.cyan('╚══════════════════════════════════════════════════════════╝'));
11
+ console.log('');
12
+ // COMMANDS SECTION
13
+ console.log(chalk.bold.yellow('📋 AVAILABLE COMMANDS'));
14
+ console.log('');
15
+ // ANALYZE
16
+ console.log(chalk.bold.green(' commitect analyze'));
17
+ console.log(chalk.gray(' │'));
18
+ console.log(chalk.gray(' ├─ ') + 'Analyzes your git changes and suggests a commit message');
19
+ console.log(chalk.gray(' ├─ ') + 'Displays both intent and message on the terminal');
20
+ console.log(chalk.gray(' └─ ') + 'Does NOT modify your git repository');
21
+ console.log('');
22
+ console.log(chalk.dim(' Example output:'));
23
+ console.log(chalk.dim(' Feature: Add user authentication with JWT'));
24
+ console.log('');
25
+ // COPY
26
+ console.log(chalk.bold.green(' commitect copy'));
27
+ console.log(chalk.gray(' │'));
28
+ console.log(chalk.gray(' ├─ ') + 'Generates a commit message from your changes');
29
+ console.log(chalk.gray(' ├─ ') + 'Copies ONLY the message (not intent) to clipboard');
30
+ console.log(chalk.gray(' └─ ') + 'Perfect for manual commits with custom flags');
31
+ console.log('');
32
+ console.log(chalk.dim(' Usage:'));
33
+ console.log(chalk.dim(' $ commitect copy'));
34
+ console.log(chalk.dim(' $ git commit -m "<paste>" --no-verify'));
35
+ console.log('');
36
+ // COMMIT
37
+ console.log(chalk.bold.green(' commitect commit'));
38
+ console.log(chalk.gray(' │'));
39
+ console.log(chalk.gray(' ├─ ') + 'Generates a commit message from your changes');
40
+ console.log(chalk.gray(' ├─ ') + 'Automatically executes: git commit -m "<message>"');
41
+ console.log(chalk.gray(' └─ ') + 'Fastest way to commit with AI-generated messages');
42
+ console.log('');
43
+ console.log(chalk.dim(' Warning: Make sure you have staged your changes first!'));
44
+ console.log(chalk.dim(' $ git add .'));
45
+ console.log(chalk.dim(' $ commitect commit'));
46
+ console.log('');
47
+ // HISTORY
48
+ console.log(chalk.bold.green(' commitect history'));
49
+ console.log(chalk.gray(' │'));
50
+ console.log(chalk.gray(' ├─ ') + 'Shows all cached commit messages');
51
+ console.log(chalk.gray(' ├─ ') + 'Displays timestamp and time ago for each entry');
52
+ console.log(chalk.gray(' └─ ') + 'Useful for reviewing past suggestions');
53
+ console.log('');
54
+ // CLEAR-CACHE
55
+ console.log(chalk.bold.green(' commitect clear-cache'));
56
+ console.log(chalk.gray(' │'));
57
+ console.log(chalk.gray(' ├─ ') + 'Clears all cached commit messages');
58
+ console.log(chalk.gray(' ├─ ') + 'Cache location: ~/.commitect/cache.json');
59
+ console.log(chalk.gray(' └─ ') + 'Use when you want fresh suggestions');
60
+ console.log('');
61
+ // HELP
62
+ console.log(chalk.bold.green(' commitect help'));
63
+ console.log(chalk.gray(' │'));
64
+ console.log(chalk.gray(' └─ ') + 'Shows this help message');
65
+ console.log('');
66
+ // HOW IT WORKS
67
+ console.log(chalk.bold.yellow('⚙️ HOW IT WORKS'));
68
+ console.log('');
69
+ console.log(chalk.gray(' 1. ') + '📖 Reads your git diff (staged + unstaged changes)');
70
+ console.log(chalk.gray(' 2. ') + '🔍 Checks cache for previously analyzed diffs');
71
+ console.log(chalk.gray(' 3. ') + '🤖 Sends to AI API if not cached (with auto-retry)');
72
+ console.log(chalk.gray(' 4. ') + '💾 Caches result for 30 days');
73
+ console.log(chalk.gray(' 5. ') + '✨ Returns professional commit message');
74
+ console.log('');
75
+ // WORKFLOW
76
+ console.log(chalk.bold.yellow('🔄 TYPICAL WORKFLOW'));
77
+ console.log('');
78
+ console.log(chalk.gray(' # Make your changes'));
79
+ console.log(chalk.white(' $ vim src/auth.ts'));
80
+ console.log('');
81
+ console.log(chalk.gray(' # Stage files'));
82
+ console.log(chalk.white(' $ git add .'));
83
+ console.log('');
84
+ console.log(chalk.gray(' # Option 1: Preview message'));
85
+ console.log(chalk.white(' $ commitect analyze'));
86
+ console.log('');
87
+ console.log(chalk.gray(' # Option 2: Copy to clipboard'));
88
+ console.log(chalk.white(' $ commitect copy'));
89
+ console.log(chalk.white(' $ git commit -m "<paste>"'));
90
+ console.log('');
91
+ console.log(chalk.gray(' # Option 3: Auto-commit (fastest)'));
92
+ console.log(chalk.white(' $ commitect commit'));
93
+ console.log('');
94
+ // FEATURES
95
+ console.log(chalk.bold.yellow('✨ KEY FEATURES'));
96
+ console.log('');
97
+ console.log(chalk.green(' ✓ ') + 'Zero configuration required');
98
+ console.log(chalk.green(' ✓ ') + 'Smart caching (instant responses for same diffs)');
99
+ console.log(chalk.green(' ✓ ') + 'Auto-retry on API failures (up to 3 attempts)');
100
+ console.log(chalk.green(' ✓ ') + 'Ignores: node_modules/, dist/, build/, .git/');
101
+ console.log(chalk.green(' ✓ ') + 'Professional messages (imperative, <70 chars)');
102
+ console.log(chalk.green(' ✓ ') + 'Works with any git repository');
103
+ console.log('');
104
+ // TIPS
105
+ console.log(chalk.bold.yellow('💡 PRO TIPS'));
106
+ console.log('');
107
+ console.log(chalk.cyan(' • ') + 'Use ' + chalk.bold('analyze') + ' when you want to review before committing');
108
+ console.log(chalk.cyan(' • ') + 'Use ' + chalk.bold('copy') + ' when you need custom git flags');
109
+ console.log(chalk.cyan(' • ') + 'Use ' + chalk.bold('commit') + ' for quick, everyday commits');
110
+ console.log(chalk.cyan(' • ') + 'Use ' + chalk.bold('history') + ' to review all your cached messages');
111
+ console.log(chalk.cyan(' • ') + 'Run ' + chalk.bold('clear-cache') + ' if suggestions seem outdated');
112
+ console.log(chalk.cyan(' • ') + 'Cache saves time and reduces API costs significantly');
113
+ console.log('');
114
+ // REQUIREMENTS
115
+ console.log(chalk.bold.yellow('📦 REQUIREMENTS'));
116
+ console.log('');
117
+ console.log(chalk.gray(' • Node.js >= 16'));
118
+ console.log(chalk.gray(' • Git repository (initialized)'));
119
+ console.log(chalk.gray(' • Internet connection (unless result is cached)'));
120
+ console.log('');
121
+ // FOOTER
122
+ console.log(chalk.bold.cyan('─'.repeat(63)));
123
+ console.log(chalk.gray(' Version: ') + chalk.white(VERSION));
124
+ console.log(chalk.gray(' Docs: ') + chalk.white(GITHUB_REPO));
125
+ console.log(chalk.gray(' Issues: ') + chalk.white(ISSUES_URL));
126
+ console.log(chalk.bold.cyan('─'.repeat(63)));
127
+ console.log('');
128
+ }
129
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function historyCommand(): void;
2
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,IAAI,IAAI,CAsCrC"}