@untools/commitgen 0.1.0 → 0.2.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/README.md +380 -21
- package/dist/index.js +221 -34
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/utils/commit-history.d.ts +35 -0
- package/dist/utils/commit-history.js +165 -0
- package/dist/utils/commit-history.js.map +1 -0
- package/dist/utils/issue-tracker.d.ts +43 -0
- package/dist/utils/issue-tracker.js +207 -0
- package/dist/utils/issue-tracker.js.map +1 -0
- package/dist/utils/multi-commit.d.ts +40 -0
- package/dist/utils/multi-commit.js +274 -0
- package/dist/utils/multi-commit.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
<!-- ./README.md -->
|
|
2
|
+
|
|
1
3
|
# @untools/commitgen
|
|
2
4
|
|
|
3
5
|
🚀 AI-powered commit message generator for Git with modular AI provider support.
|
|
@@ -17,6 +19,12 @@
|
|
|
17
19
|
- 🔜 Google Direct
|
|
18
20
|
- 🔜 Local LLMs (Ollama, LM Studio, etc.)
|
|
19
21
|
|
|
22
|
+
📜 **Commit History Learning**: Analyzes your past commits to personalize suggestions in your style.
|
|
23
|
+
|
|
24
|
+
🔄 **Multi-Commit Mode**: Intelligently splits staged changes into multiple atomic commits.
|
|
25
|
+
|
|
26
|
+
🎫 **Issue Tracker Integration**: Auto-links commits to Jira, GitHub, Linear, and GitLab issues from your branch name.
|
|
27
|
+
|
|
20
28
|
🎨 **Beautiful CLI**: Colorized output with interactive prompts using Inquirer
|
|
21
29
|
|
|
22
30
|
📊 **Smart Analysis**: Analyzes file patterns, additions/deletions, and git diffs
|
|
@@ -31,23 +39,27 @@ npm install -g @untools/commitgen
|
|
|
31
39
|
|
|
32
40
|
# Or use with npx
|
|
33
41
|
npx @untools/commitgen
|
|
34
|
-
|
|
42
|
+
````
|
|
35
43
|
|
|
36
44
|
## Quick Start
|
|
37
45
|
|
|
38
46
|
1. **Stage your changes**:
|
|
39
47
|
|
|
48
|
+
<!-- end list -->
|
|
49
|
+
|
|
40
50
|
```bash
|
|
41
51
|
git add .
|
|
42
52
|
```
|
|
43
53
|
|
|
44
54
|
2. **Generate commit message**:
|
|
45
55
|
|
|
56
|
+
<!-- end list -->
|
|
57
|
+
|
|
46
58
|
```bash
|
|
47
59
|
commitgen
|
|
48
60
|
```
|
|
49
61
|
|
|
50
|
-
That's it
|
|
62
|
+
That's it\! If it's your first time, CommitGen will automatically prompt you to configure your API key. The tool will then analyze your changes and suggest commit messages.
|
|
51
63
|
|
|
52
64
|
### First-Time Setup
|
|
53
65
|
|
|
@@ -65,7 +77,7 @@ Choose "Yes" to set up your configuration, or run `commitgen config` manually an
|
|
|
65
77
|
### Basic Commands
|
|
66
78
|
|
|
67
79
|
```bash
|
|
68
|
-
# Generate commit message (interactive)
|
|
80
|
+
# Generate commit message (interactive, all features enabled)
|
|
69
81
|
commitgen
|
|
70
82
|
|
|
71
83
|
# Commit and push in one command
|
|
@@ -87,9 +99,28 @@ commitgen --help
|
|
|
87
99
|
commitgen --version
|
|
88
100
|
```
|
|
89
101
|
|
|
102
|
+
### Command-Line Overrides
|
|
103
|
+
|
|
104
|
+
You can temporarily disable new features using flags:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Disable history learning for a single commit
|
|
108
|
+
commitgen --no-history
|
|
109
|
+
|
|
110
|
+
# Force or disable multi-commit mode
|
|
111
|
+
commitgen --multi-commit
|
|
112
|
+
commitgen --no-multi-commit
|
|
113
|
+
|
|
114
|
+
# Disable issue linking for a single commit
|
|
115
|
+
commitgen --no-issues
|
|
116
|
+
|
|
117
|
+
# Quick commit without any enhancements
|
|
118
|
+
commitgen --no-history --no-multi-commit --no-issues
|
|
119
|
+
```
|
|
120
|
+
|
|
90
121
|
### Configuration
|
|
91
122
|
|
|
92
|
-
The configuration file is stored at `~/.commitgenrc.json
|
|
123
|
+
The configuration file is stored at `~/.commitgenrc.json`. It stores both your provider settings and your preferences for new features.
|
|
93
124
|
|
|
94
125
|
```json
|
|
95
126
|
{
|
|
@@ -97,10 +128,17 @@ The configuration file is stored at `~/.commitgenrc.json`:
|
|
|
97
128
|
"provider": "vercel-google",
|
|
98
129
|
"model": "gemini-2.5-flash",
|
|
99
130
|
"apiKey": "optional-if-using-env-var"
|
|
131
|
+
},
|
|
132
|
+
"features": {
|
|
133
|
+
"historyLearning": true,
|
|
134
|
+
"multiCommit": true,
|
|
135
|
+
"issueTracking": true
|
|
100
136
|
}
|
|
101
137
|
}
|
|
102
138
|
```
|
|
103
139
|
|
|
140
|
+
You can disable features globally by setting them to `false` in this file.
|
|
141
|
+
|
|
104
142
|
### Environment Variables
|
|
105
143
|
|
|
106
144
|
You can use environment variables instead of storing API keys in the config:
|
|
@@ -143,26 +181,248 @@ Uses the [Vercel AI SDK](https://sdk.vercel.ai/) with Google's Gemini models.
|
|
|
143
181
|
## How It Works
|
|
144
182
|
|
|
145
183
|
1. **Analysis**: Scans your staged git changes
|
|
184
|
+
- File patterns (tests, docs, configs, components)
|
|
185
|
+
- Addition/deletion statistics
|
|
186
|
+
- Git diff content
|
|
187
|
+
2. **AI Generation**: Sends analysis to your configured AI provider
|
|
188
|
+
- Uses a specialized prompt for commit message generation
|
|
189
|
+
- Follows Conventional Commits specification
|
|
190
|
+
- Returns 3-5 contextual suggestions
|
|
191
|
+
3. **Selection**: Interactive prompt to choose or customize
|
|
192
|
+
- Select from AI-generated suggestions
|
|
193
|
+
- Write a custom message
|
|
194
|
+
- Confirm before committing
|
|
195
|
+
4. **Commit**: Executes git commit with your chosen message
|
|
196
|
+
- Optional: Push to remote with `--push` flag
|
|
197
|
+
- Optional: Skip hooks with `--noverify` flag
|
|
146
198
|
|
|
147
|
-
|
|
148
|
-
- Addition/deletion statistics
|
|
149
|
-
- Git diff content
|
|
199
|
+
## Core Features in Detail
|
|
150
200
|
|
|
151
|
-
|
|
201
|
+
### 📜 Commit History Learning
|
|
152
202
|
|
|
153
|
-
|
|
154
|
-
- Follows Conventional Commits specification
|
|
155
|
-
- Returns 3-5 contextual suggestions
|
|
203
|
+
CommitGen now analyzes your past commits to personalize suggestions in your style.
|
|
156
204
|
|
|
157
|
-
|
|
205
|
+
**How It Works**
|
|
158
206
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
207
|
+
- **Automatic Analysis**: Analyzes your last 50 commits to understand your patterns
|
|
208
|
+
- **Smart Caching**: Results cached for 5 minutes to maintain performance
|
|
209
|
+
- **Pattern Recognition**: Identifies your preferred:
|
|
210
|
+
- Commit types (feat, fix, chore, etc.)
|
|
211
|
+
- Scopes and naming conventions
|
|
212
|
+
- Subject length preferences
|
|
213
|
+
- Style preferences (capitalization, emojis, periods)
|
|
162
214
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
215
|
+
**Usage**
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
# Enabled by default
|
|
219
|
+
commitgen
|
|
220
|
+
|
|
221
|
+
# Disable for a single commit
|
|
222
|
+
commitgen --no-history
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**What Gets Personalized**
|
|
226
|
+
|
|
227
|
+
- **Type Selection**: Favors your most-used commit types
|
|
228
|
+
- **Subject Length**: Matches your typical message length
|
|
229
|
+
- **Capitalization**: Follows your capitalization style
|
|
230
|
+
- **Punctuation**: Respects your period usage preferences
|
|
231
|
+
|
|
232
|
+
**Example**
|
|
233
|
+
|
|
234
|
+
If your history shows:
|
|
235
|
+
|
|
236
|
+
- 60% of commits are `feat` type
|
|
237
|
+
- Average subject length: 45 characters
|
|
238
|
+
- 90% capitalize first letter
|
|
239
|
+
- 10% use periods
|
|
240
|
+
|
|
241
|
+
Then suggestions will be adjusted to match this style.
|
|
242
|
+
|
|
243
|
+
### 🔄 Multi-Commit Mode
|
|
244
|
+
|
|
245
|
+
Intelligently splits staged changes into multiple atomic commits for better git history.
|
|
246
|
+
|
|
247
|
+
**How It Works**
|
|
248
|
+
|
|
249
|
+
- **Automatic Detection**: Analyzes staged files for distinct concerns
|
|
250
|
+
- **Smart Grouping**: Groups files by:
|
|
251
|
+
- File type (tests, docs, configs, types)
|
|
252
|
+
- Directory structure
|
|
253
|
+
- Functional concerns (API, components, utils)
|
|
254
|
+
- **Logical Ordering**: Commits in the right order (types → config → features → tests → docs)
|
|
255
|
+
|
|
256
|
+
**Usage**
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Let CommitGen suggest splitting
|
|
260
|
+
commitgen
|
|
261
|
+
|
|
262
|
+
# Force multi-commit mode
|
|
263
|
+
commitgen --multi-commit
|
|
264
|
+
|
|
265
|
+
# Disable multi-commit mode
|
|
266
|
+
commitgen --no-multi-commit
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**When It Triggers**
|
|
270
|
+
|
|
271
|
+
Multi-commit mode is suggested when:
|
|
272
|
+
|
|
273
|
+
- You have 4+ files changed
|
|
274
|
+
- Files belong to 2+ distinct concerns
|
|
275
|
+
|
|
276
|
+
**Example**
|
|
277
|
+
|
|
278
|
+
Staged Changes:
|
|
279
|
+
|
|
280
|
+
- `src/types.ts`
|
|
281
|
+
- `src/config.ts`
|
|
282
|
+
- `src/components/Button.tsx`
|
|
283
|
+
- `src/components/Button.test.tsx`
|
|
284
|
+
- `README.md`
|
|
285
|
+
|
|
286
|
+
Suggested Commits:
|
|
287
|
+
|
|
288
|
+
1. Type definition updates (1 file)
|
|
289
|
+
- `src/types.ts`
|
|
290
|
+
2. Configuration changes (1 file)
|
|
291
|
+
- `src/config.ts`
|
|
292
|
+
3. Component updates (1 file)
|
|
293
|
+
- `src/components/Button.tsx`
|
|
294
|
+
4. Test additions/updates (1 file)
|
|
295
|
+
- `src/components/Button.test.tsx`
|
|
296
|
+
5. Documentation updates (1 file)
|
|
297
|
+
- `README.md`
|
|
298
|
+
|
|
299
|
+
**Benefits**
|
|
300
|
+
|
|
301
|
+
- **Cleaner History**: Each commit has a single responsibility
|
|
302
|
+
- **Better Rollbacks**: Can revert specific changes without affecting others
|
|
303
|
+
- **Easier Reviews**: Smaller, focused commits are easier to review
|
|
304
|
+
- **Semantic Versioning**: Clear separation of features, fixes, and chores
|
|
305
|
+
|
|
306
|
+
### 🎫 Issue Tracker Integration
|
|
307
|
+
|
|
308
|
+
Auto-links commits to Jira/GitHub/Linear/GitLab issues from branch names.
|
|
309
|
+
|
|
310
|
+
**Supported Platforms**
|
|
311
|
+
|
|
312
|
+
- **Jira**
|
|
313
|
+
- Pattern: `PROJ-123` or `feature/PROJ-123-description`
|
|
314
|
+
- Format: `[PROJ-123]` in subject + footer
|
|
315
|
+
- **GitHub**
|
|
316
|
+
- Pattern: `#123`, `issue-123`, or `123-description`
|
|
317
|
+
- Format: `Closes #123` in footer (auto-closes issues)
|
|
318
|
+
- **Linear**
|
|
319
|
+
- Pattern: `TEAM-123` or `team/TEAM-123-description`
|
|
320
|
+
- Format: `[TEAM-123]` in subject
|
|
321
|
+
- **GitLab**
|
|
322
|
+
- Pattern: Same as GitHub
|
|
323
|
+
- Format: `Closes #123` in footer (auto-closes issues)
|
|
324
|
+
|
|
325
|
+
**How It Works**
|
|
326
|
+
|
|
327
|
+
- **Branch Detection**: Extracts issue ID from current branch name
|
|
328
|
+
- **Type Inference**: Suggests commit type based on branch prefix
|
|
329
|
+
- `feature/` → `feat`
|
|
330
|
+
- `fix/` or `bugfix/` → `fix`
|
|
331
|
+
- `hotfix/` → `fix`
|
|
332
|
+
- `docs/` → `docs`
|
|
333
|
+
- **Auto-Linking**: Adds proper references to commit message
|
|
334
|
+
|
|
335
|
+
**Usage**
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
# Enabled by default
|
|
339
|
+
commitgen
|
|
340
|
+
|
|
341
|
+
# Disable for a single commit
|
|
342
|
+
commitgen --no-issues
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Examples**
|
|
346
|
+
|
|
347
|
+
- **Jira Integration**
|
|
348
|
+
- Branch: `feature/AUTH-456-oauth-login`
|
|
349
|
+
- Result:
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
feat(auth): add OAuth2 authentication [AUTH-456]
|
|
353
|
+
|
|
354
|
+
Implemented OAuth2 flow with Google provider
|
|
355
|
+
|
|
356
|
+
Jira: AUTH-456
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
- **GitHub Integration**
|
|
360
|
+
- Branch: `fix/123-navigation-bug`
|
|
361
|
+
- Result:
|
|
362
|
+
|
|
363
|
+
```
|
|
364
|
+
fix(navigation): resolve routing issue
|
|
365
|
+
|
|
366
|
+
Fixed navigation bug causing incorrect redirects
|
|
367
|
+
|
|
368
|
+
Closes #123
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
- **Linear Integration**
|
|
372
|
+
- Branch: `ENG-789-refactor-api`
|
|
373
|
+
- Result:
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
refactor(api): simplify endpoint structure [ENG-789]
|
|
377
|
+
|
|
378
|
+
Restructured API endpoints for better organization
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
**Branch Naming Best Practices**
|
|
382
|
+
|
|
383
|
+
For best results, use conventional branch names:
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
# Jira
|
|
387
|
+
feature/PROJ-123-short-description
|
|
388
|
+
fix/PROJ-456-bug-description
|
|
389
|
+
hotfix/PROJ-789-critical-fix
|
|
390
|
+
|
|
391
|
+
# GitHub/GitLab
|
|
392
|
+
feature/123-new-feature
|
|
393
|
+
fix/456-bug-fix
|
|
394
|
+
docs/789-update-readme
|
|
395
|
+
|
|
396
|
+
# Linear
|
|
397
|
+
feature/TEAM-123-description
|
|
398
|
+
refactor/TEAM-456-cleanup
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### Performance Optimizations
|
|
402
|
+
|
|
403
|
+
All new features are designed with performance in mind:
|
|
404
|
+
|
|
405
|
+
- **Commit History Learning**
|
|
406
|
+
- ✅ Cached Results: 5-minute TTL cache
|
|
407
|
+
- ✅ Limited Analysis: Only last 50 commits
|
|
408
|
+
- ✅ Async Processing: Non-blocking analysis
|
|
409
|
+
- ⚡ Impact: \<50ms overhead
|
|
410
|
+
- **Multi-Commit Mode**
|
|
411
|
+
- ✅ Lazy Evaluation: Only triggers when needed
|
|
412
|
+
- ✅ Pattern Matching: Fast regex-based detection
|
|
413
|
+
- ✅ Incremental Git Ops: Efficient file-specific diffs
|
|
414
|
+
- ⚡ Impact: \~100ms for large changesets
|
|
415
|
+
- **Issue Tracker Integration**
|
|
416
|
+
- ✅ Single Git Call: One branch name fetch
|
|
417
|
+
- ✅ Regex Parsing: No external API calls
|
|
418
|
+
- ✅ Result Caching: Cached per session
|
|
419
|
+
- ⚡ Impact: \<10ms overhead
|
|
420
|
+
|
|
421
|
+
**Combined Overhead**
|
|
422
|
+
|
|
423
|
+
- Typical usage: **+150ms total**
|
|
424
|
+
- Large projects: **+250ms total**
|
|
425
|
+
- All features disabled: **0ms overhead**
|
|
166
426
|
|
|
167
427
|
## Examples
|
|
168
428
|
|
|
@@ -257,6 +517,71 @@ Added JWT token management and refresh logic.
|
|
|
257
517
|
BREAKING CHANGE: Authentication API has changed
|
|
258
518
|
```
|
|
259
519
|
|
|
520
|
+
## Migration Guide
|
|
521
|
+
|
|
522
|
+
### From v0.0.x to v0.1.x
|
|
523
|
+
|
|
524
|
+
- **Breaking Changes**: None
|
|
525
|
+
- **New Features**: All new features (History Learning, Multi-Commit, Issue Tracking) are **enabled by default**.
|
|
526
|
+
- **Recommended Steps**:
|
|
527
|
+
1. Update package: `npm install -g @untools/commitgen@latest`
|
|
528
|
+
2. Test new features: `commitgen` (uses all features)
|
|
529
|
+
3. Configure preferences in `~/.commitgenrc.json` if you wish to disable any features globally.
|
|
530
|
+
4. Update CI/CD workflows to use new flags (e.g., `--no-history`) if desired.
|
|
531
|
+
|
|
532
|
+
### Backward Compatibility
|
|
533
|
+
|
|
534
|
+
All existing commands work exactly as before:
|
|
535
|
+
|
|
536
|
+
```bash
|
|
537
|
+
# These still work identically
|
|
538
|
+
commitgen
|
|
539
|
+
commitgen --push
|
|
540
|
+
commitgen --noverify
|
|
541
|
+
commitgen --no-ai
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
## API for Advanced Users
|
|
545
|
+
|
|
546
|
+
### Programmatic Usage
|
|
547
|
+
|
|
548
|
+
```javascript
|
|
549
|
+
import { CommitGen } from '@untools/commitgen';
|
|
550
|
+
|
|
551
|
+
const commitGen = new CommitGen();
|
|
552
|
+
|
|
553
|
+
await commitGen.run({
|
|
554
|
+
push: false,
|
|
555
|
+
noverify: false,
|
|
556
|
+
useAi: true,
|
|
557
|
+
multiCommit: true,
|
|
558
|
+
learnFromHistory: true,
|
|
559
|
+
linkIssues: true
|
|
560
|
+
});
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
### Custom History Analyzer
|
|
564
|
+
|
|
565
|
+
```javascript
|
|
566
|
+
import { CommitHistoryAnalyzer } from '@untools/commitgen/utils/commit-history';
|
|
567
|
+
|
|
568
|
+
const analyzer = new CommitHistoryAnalyzer();
|
|
569
|
+
const pattern = await analyzer.getCommitPattern();
|
|
570
|
+
|
|
571
|
+
console.log(pattern.commonTypes); // { feat: 30, fix: 15, ... }
|
|
572
|
+
console.log(pattern.avgSubjectLength); // 45
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
### Custom Multi-Commit Logic
|
|
576
|
+
|
|
577
|
+
```javascript
|
|
578
|
+
import { MultiCommitAnalyzer } from '@untools/commitgen/utils/multi-commit';
|
|
579
|
+
|
|
580
|
+
const analyzer = new MultiCommitAnalyzer();
|
|
581
|
+
const shouldSplit = analyzer.shouldSplit(analysis);
|
|
582
|
+
const groups = analyzer.groupFiles(analysis);
|
|
583
|
+
```
|
|
584
|
+
|
|
260
585
|
## Troubleshooting
|
|
261
586
|
|
|
262
587
|
### "No staged changes found"
|
|
@@ -280,11 +605,43 @@ Set your API key either:
|
|
|
280
605
|
|
|
281
606
|
The tool will automatically fall back to rule-based suggestions if AI generation fails. You can also force rule-based mode with `--no-ai`.
|
|
282
607
|
|
|
608
|
+
### History Learning Not Working
|
|
609
|
+
|
|
610
|
+
- **Issue**: "No personalization detected"
|
|
611
|
+
- **Solutions**:
|
|
612
|
+
- Ensure you have at least 5 commits in your repository
|
|
613
|
+
- Check that commits follow conventional commit format
|
|
614
|
+
- Wait 5 minutes for cache to refresh
|
|
615
|
+
|
|
616
|
+
### Multi-Commit Mode Not Triggering
|
|
617
|
+
|
|
618
|
+
- **Issue**: Single commit despite multiple concerns
|
|
619
|
+
- **Solutions**:
|
|
620
|
+
- Ensure you have 4+ files staged
|
|
621
|
+
- Use `--multi-commit` flag to force
|
|
622
|
+
- Check that files have distinct purposes
|
|
623
|
+
|
|
624
|
+
### Issue Reference Not Detected
|
|
625
|
+
|
|
626
|
+
- **Issue**: Branch issue not linked
|
|
627
|
+
- **Solutions**:
|
|
628
|
+
- Check branch naming follows conventions
|
|
629
|
+
- Verify issue ID format matches platform
|
|
630
|
+
- Use `git branch --show-current` to check branch name
|
|
631
|
+
|
|
632
|
+
### Performance Issues
|
|
633
|
+
|
|
634
|
+
- **Issue**: CommitGen feels slow
|
|
635
|
+
- **Solutions**:
|
|
636
|
+
- Disable features individually to identify bottleneck (`--no-history`, etc.)
|
|
637
|
+
- Check git repository size (very large repos may be slower)
|
|
638
|
+
- Clear cache with `rm -rf ~/.commitgen-cache` (if implemented)
|
|
639
|
+
|
|
283
640
|
## Development
|
|
284
641
|
|
|
285
642
|
```bash
|
|
286
643
|
# Clone the repository
|
|
287
|
-
git clone https://github.com/aevrHQ/untools-commitgen.git
|
|
644
|
+
git clone [https://github.com/aevrHQ/untools-commitgen.git](https://github.com/aevrHQ/untools-commitgen.git)
|
|
288
645
|
cd untools-commitgen
|
|
289
646
|
|
|
290
647
|
# Install dependencies
|
|
@@ -314,7 +671,7 @@ commitgen
|
|
|
314
671
|
|
|
315
672
|
## Contributing
|
|
316
673
|
|
|
317
|
-
Contributions are welcome
|
|
674
|
+
Contributions are welcome\! Please feel free to submit a Pull Request.
|
|
318
675
|
|
|
319
676
|
## License
|
|
320
677
|
|
|
@@ -326,6 +683,8 @@ MIT © Miracle Onyenma
|
|
|
326
683
|
- [npm Package](https://www.npmjs.com/package/@untools/commitgen)
|
|
327
684
|
- [Issue Tracker](https://github.com/aevrHQ/untools-commitgen/issues)
|
|
328
685
|
|
|
329
|
-
|
|
686
|
+
-----
|
|
330
687
|
|
|
331
688
|
Made with ❤️ by [Miracle Onyenma](https://github.com/miracleonyenma)
|
|
689
|
+
|
|
690
|
+
```
|