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.
- package/.github/workflows/publish.yml +39 -0
- package/LICENSE +21 -0
- package/README.md +176 -0
- package/dist/commands/analyze.d.ts +2 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +40 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/clear-cache.d.ts +2 -0
- package/dist/commands/clear-cache.d.ts.map +1 -0
- package/dist/commands/clear-cache.js +23 -0
- package/dist/commands/clear-cache.js.map +1 -0
- package/dist/commands/commit.d.ts +2 -0
- package/dist/commands/commit.d.ts.map +1 -0
- package/dist/commands/commit.js +42 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/copy.d.ts +2 -0
- package/dist/commands/copy.d.ts.map +1 -0
- package/dist/commands/copy.js +42 -0
- package/dist/commands/copy.js.map +1 -0
- package/dist/commands/help.d.ts +2 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +129 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/history.d.ts +2 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +58 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/services/llm.d.ts +6 -0
- package/dist/services/llm.d.ts.map +1 -0
- package/dist/services/llm.js +94 -0
- package/dist/services/llm.js.map +1 -0
- package/dist/utils/cache.d.ts +61 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +141 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/git.d.ts +5 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +69 -0
- package/dist/utils/git.js.map +1 -0
- package/package.json +38 -0
- package/src/commands/analyze.ts +44 -0
- package/src/commands/clear-cache.ts +23 -0
- package/src/commands/commit.ts +48 -0
- package/src/commands/copy.ts +48 -0
- package/src/commands/help.ts +143 -0
- package/src/commands/history.ts +62 -0
- package/src/index.ts +53 -0
- package/src/services/llm.ts +123 -0
- package/src/utils/cache.ts +170 -0
- package/src/utils/git.ts +74 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,IAAI,IAAI,CAsCrC"}
|