gitsumm 1.0.0__tar.gz
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.
- gitsumm-1.0.0/LICENSE +21 -0
- gitsumm-1.0.0/PKG-INFO +209 -0
- gitsumm-1.0.0/README.md +174 -0
- gitsumm-1.0.0/gitsumm/__init__.py +3 -0
- gitsumm-1.0.0/gitsumm/ai.py +283 -0
- gitsumm-1.0.0/gitsumm/git_utils.py +551 -0
- gitsumm-1.0.0/gitsumm/main.py +457 -0
- gitsumm-1.0.0/gitsumm.egg-info/PKG-INFO +209 -0
- gitsumm-1.0.0/gitsumm.egg-info/SOURCES.txt +13 -0
- gitsumm-1.0.0/gitsumm.egg-info/dependency_links.txt +1 -0
- gitsumm-1.0.0/gitsumm.egg-info/entry_points.txt +2 -0
- gitsumm-1.0.0/gitsumm.egg-info/requires.txt +5 -0
- gitsumm-1.0.0/gitsumm.egg-info/top_level.txt +1 -0
- gitsumm-1.0.0/pyproject.toml +59 -0
- gitsumm-1.0.0/setup.cfg +4 -0
gitsumm-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kshitiz Yadav
|
|
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.
|
gitsumm-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gitsumm
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Get some insight from your git history — plain-English summaries, hotspots, coupling, and more.
|
|
5
|
+
Author: Kshitiz Yadav
|
|
6
|
+
Maintainer: Kshitiz Yadav
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/kshitizyadav6/gitsumm
|
|
9
|
+
Project-URL: Repository, https://github.com/kshitizyadav6/gitsumm
|
|
10
|
+
Project-URL: Issues, https://github.com/kshitizyadav6/gitsumm/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/kshitizyadav6/gitsumm/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: git,summary,standup,changelog,cli,developer-tools,code-review,insights
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
25
|
+
Classifier: Topic :: Utilities
|
|
26
|
+
Classifier: Typing :: Typed
|
|
27
|
+
Requires-Python: >=3.8
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Requires-Dist: typer>=0.9
|
|
31
|
+
Requires-Dist: rich>=13.0
|
|
32
|
+
Provides-Extra: ai
|
|
33
|
+
Requires-Dist: anthropic>=0.25; extra == "ai"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# gitsumm
|
|
37
|
+
|
|
38
|
+
*Say it out loud: "get some."* Point it at a repo and get some insight from your
|
|
39
|
+
git history, in plain English.
|
|
40
|
+
|
|
41
|
+
`git log` tells you *what* happened, one line at a time. `gitsumm` tells you the
|
|
42
|
+
*story*: how many commits, by whom, when activity peaked, whether momentum is up
|
|
43
|
+
or down, and which files only one person has touched (a bus-factor risk). It's
|
|
44
|
+
the digest you paste straight into a standup, changelog, or team update.
|
|
45
|
+
|
|
46
|
+
## Install
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pip install -e . # core tool (works fully offline)
|
|
50
|
+
pip install -e ".[ai]" # add the optional Anthropic-powered summary
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Requires Python 3.8+. The only hard dependencies are `typer` and `rich`; the
|
|
54
|
+
`anthropic` SDK is an optional extra used only by `--ai`.
|
|
55
|
+
|
|
56
|
+
## Usage
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
gitsumm # summarize the last 7 days
|
|
60
|
+
gitsumm --days 14 # custom window (alias: -d 14)
|
|
61
|
+
gitsumm --standup # commit subjects grouped by author
|
|
62
|
+
gitsumm --hotspots 5 # rank the top N churn hotspots (high-risk files)
|
|
63
|
+
gitsumm --coupling # files that tend to change together (hidden coupling)
|
|
64
|
+
gitsumm --verbose # extra detail, incl. the lowest-hygiene commits (-v)
|
|
65
|
+
gitsumm --ai # add a fluent paragraph via the Anthropic SDK
|
|
66
|
+
gitsumm --changelog # themed changelog (Features / Fixes / Refactors / Other)
|
|
67
|
+
gitsumm since v1.0.0 # summarize everything since a tag (or between two tags)
|
|
68
|
+
gitsumm since v1.0.0 --changelog # release notes for a range
|
|
69
|
+
gitsumm --version
|
|
70
|
+
gitsumm --help
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Default summary
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
╭──────────────── gitsumm · myrepo · get some ───────────────╮
|
|
77
|
+
│ Got some — 24 commits from 3 contributors in the last 7 days │
|
|
78
|
+
│ Most active: Alice (14 commits) │
|
|
79
|
+
│ Busiest day: Tuesday (9 commits) │
|
|
80
|
+
│ Files touched: 18 │
|
|
81
|
+
│ Commit hygiene: 86/100 │
|
|
82
|
+
│ Hottest file: payments.py — 23 changes, 5 authors. Handle with care. │
|
|
83
|
+
│ Momentum: ↑ up 6 vs previous 7 days (18 → 24) │
|
|
84
|
+
│ Heads up — 30% of commits land outside working hours... │
|
|
85
|
+
│ │
|
|
86
|
+
│ Bus-factor risk — 3 files touched by a single author: │
|
|
87
|
+
│ • auth.py — only Alice │
|
|
88
|
+
│ • billing.py — only Bob │
|
|
89
|
+
│ • reports.py — only Alice │
|
|
90
|
+
╰──────────────────────────────────────────────────────────────╯
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The **momentum**, **bus-factor**, and **hottest-file** lines are the point of
|
|
94
|
+
the tool — insights a raw log won't give you. Momentum compares this window
|
|
95
|
+
against the equal-length window immediately before it. Bus-factor flags files
|
|
96
|
+
only one author has touched in the window, busiest first, so knowledge silos
|
|
97
|
+
surface. The inline "Hottest file" line names the single highest-risk file (only
|
|
98
|
+
when there's real churn). A "Heads up" line flags **work-hours patterns** —
|
|
99
|
+
appearing only when a meaningful share of commits land outside working hours
|
|
100
|
+
(before 8am / after 8pm) or on weekends, so it reads as a team-health signal
|
|
101
|
+
rather than noise. A **commit hygiene** score (0–100) rates workflow health — it
|
|
102
|
+
penalizes one-word or vague messages and oversized commits; `--verbose` lists
|
|
103
|
+
the worst offenders.
|
|
104
|
+
|
|
105
|
+
### Churn hotspots — where the heat is
|
|
106
|
+
|
|
107
|
+
High-churn, multi-author files are where defects concentrate. `--hotspots N`
|
|
108
|
+
ranks them in a dedicated panel, scored as `changes × distinct authors`:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
╭──── hotspots · myrepo · where the heat is ────╮
|
|
112
|
+
│ • payments.py — 23 changes · 5 authors · score 115 │
|
|
113
|
+
│ • auth.py — 12 changes · 3 authors · score 36 │
|
|
114
|
+
│ • api.py — 9 changes · 2 authors · score 18 │
|
|
115
|
+
╰────────────────────────────────────────────────╯
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Co-change coupling — the usual suspects
|
|
119
|
+
|
|
120
|
+
Files that almost always commit together are coupled whether the code says so or
|
|
121
|
+
not — surfacing undocumented dependencies. `--coupling` reports pairs that
|
|
122
|
+
co-occur often enough (and with a high enough ratio) to matter; bulk commits
|
|
123
|
+
touching many files are ignored so they don't manufacture false coupling.
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
╭──── usual suspects · myrepo · files that travel together ────╮
|
|
127
|
+
│ • auth.py ↔ session.py — change together 90% of the time (9×) │
|
|
128
|
+
│ • api.py ↔ schema.py — change together 80% of the time (8×) │
|
|
129
|
+
╰────────────────────────────────────────────────────────────────╯
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Standup mode
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
╭─ gitsumm · myrepo · get some standup (in the last 7 days) ─╮
|
|
136
|
+
│ Alice (3 commits) │
|
|
137
|
+
│ • Add weekly report export │
|
|
138
|
+
│ • Hash passwords with bcrypt │
|
|
139
|
+
│ • Add login endpoint │
|
|
140
|
+
│ │
|
|
141
|
+
│ Bob (1 commit) │
|
|
142
|
+
│ • Fix invoice rounding │
|
|
143
|
+
╰───────────────────────────────────────────────────────────╯
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### AI mode
|
|
147
|
+
|
|
148
|
+
With the `[ai]` extra installed and `ANTHROPIC_API_KEY` set, `--ai` adds a
|
|
149
|
+
fluent paragraph above the stats panel:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
╭───────────────── gitsumm · myrepo · the gist ─────────────────╮
|
|
153
|
+
│ Over the past week myrepo saw steady progress: 24 commits │
|
|
154
|
+
│ from three contributors, with Alice driving most of the auth │
|
|
155
|
+
│ work and Tuesday the busiest day. Momentum is up on the prior │
|
|
156
|
+
│ week. Heads up — auth.py and reports.py have only been │
|
|
157
|
+
│ touched by Alice, a bus-factor risk worth spreading around. │
|
|
158
|
+
╰───────────────────────────────────────────────────────────────╯
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`--ai` never breaks the tool: if the `anthropic` SDK isn't installed, the API
|
|
162
|
+
key is missing, or the request fails, gitsumm falls back to a deterministic
|
|
163
|
+
templated paragraph and prints a short hint explaining why. Set
|
|
164
|
+
`GITSUMM_AI_MODEL` to use a model other than the default.
|
|
165
|
+
|
|
166
|
+
### Themed changelog & tag ranges
|
|
167
|
+
|
|
168
|
+
`--changelog` groups commits into **Features / Fixes / Refactors / Other** —
|
|
169
|
+
fluent release notes when AI is available, a deterministic keyword grouping
|
|
170
|
+
when it isn't (same crash-proof fallback as `--ai`). Pair it with the `since`
|
|
171
|
+
command to summarize a release instead of a day window:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
gitsumm since v1.0.0 --changelog # everything since a tag
|
|
175
|
+
gitsumm since v1.0.0 v1.1.0 --changelog # between two tags
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
╭─ gitsumm · myrepo · changelog (since v1.0.0) ─╮
|
|
180
|
+
│ Features │
|
|
181
|
+
│ • Add user login endpoint │
|
|
182
|
+
│ • Add billing webhook │
|
|
183
|
+
│ Fixes │
|
|
184
|
+
│ • Fix invoice rounding │
|
|
185
|
+
│ Refactors │
|
|
186
|
+
│ • Refactor reports module │
|
|
187
|
+
╰──────────────────────────────────────────────╯
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Every flag above (`--standup`, `--hotspots`, `--coupling`, `--ai`, `--verbose`)
|
|
191
|
+
also works with `since`.
|
|
192
|
+
|
|
193
|
+
## Behavior & guarantees
|
|
194
|
+
|
|
195
|
+
- **Works fully offline.** AI is an enhancement, never a requirement.
|
|
196
|
+
- **Fails friendly.** Not a git repo, no commits in the window, or git not
|
|
197
|
+
installed each produce a clear one-line message and a clean exit — never a
|
|
198
|
+
stack trace.
|
|
199
|
+
- **Reads `ANTHROPIC_API_KEY`** from the environment; missing key during `--ai`
|
|
200
|
+
falls back gracefully.
|
|
201
|
+
|
|
202
|
+
## Project layout
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
gitsumm/
|
|
206
|
+
├── main.py # CLI wiring + output formatting (typer + rich)
|
|
207
|
+
├── git_utils.py # all git/subprocess logic and analysis; returns clean objects
|
|
208
|
+
└── ai.py # optional Anthropic summary, fully isolated and crash-proof
|
|
209
|
+
```
|
gitsumm-1.0.0/README.md
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# gitsumm
|
|
2
|
+
|
|
3
|
+
*Say it out loud: "get some."* Point it at a repo and get some insight from your
|
|
4
|
+
git history, in plain English.
|
|
5
|
+
|
|
6
|
+
`git log` tells you *what* happened, one line at a time. `gitsumm` tells you the
|
|
7
|
+
*story*: how many commits, by whom, when activity peaked, whether momentum is up
|
|
8
|
+
or down, and which files only one person has touched (a bus-factor risk). It's
|
|
9
|
+
the digest you paste straight into a standup, changelog, or team update.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pip install -e . # core tool (works fully offline)
|
|
15
|
+
pip install -e ".[ai]" # add the optional Anthropic-powered summary
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Requires Python 3.8+. The only hard dependencies are `typer` and `rich`; the
|
|
19
|
+
`anthropic` SDK is an optional extra used only by `--ai`.
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
gitsumm # summarize the last 7 days
|
|
25
|
+
gitsumm --days 14 # custom window (alias: -d 14)
|
|
26
|
+
gitsumm --standup # commit subjects grouped by author
|
|
27
|
+
gitsumm --hotspots 5 # rank the top N churn hotspots (high-risk files)
|
|
28
|
+
gitsumm --coupling # files that tend to change together (hidden coupling)
|
|
29
|
+
gitsumm --verbose # extra detail, incl. the lowest-hygiene commits (-v)
|
|
30
|
+
gitsumm --ai # add a fluent paragraph via the Anthropic SDK
|
|
31
|
+
gitsumm --changelog # themed changelog (Features / Fixes / Refactors / Other)
|
|
32
|
+
gitsumm since v1.0.0 # summarize everything since a tag (or between two tags)
|
|
33
|
+
gitsumm since v1.0.0 --changelog # release notes for a range
|
|
34
|
+
gitsumm --version
|
|
35
|
+
gitsumm --help
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Default summary
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
╭──────────────── gitsumm · myrepo · get some ───────────────╮
|
|
42
|
+
│ Got some — 24 commits from 3 contributors in the last 7 days │
|
|
43
|
+
│ Most active: Alice (14 commits) │
|
|
44
|
+
│ Busiest day: Tuesday (9 commits) │
|
|
45
|
+
│ Files touched: 18 │
|
|
46
|
+
│ Commit hygiene: 86/100 │
|
|
47
|
+
│ Hottest file: payments.py — 23 changes, 5 authors. Handle with care. │
|
|
48
|
+
│ Momentum: ↑ up 6 vs previous 7 days (18 → 24) │
|
|
49
|
+
│ Heads up — 30% of commits land outside working hours... │
|
|
50
|
+
│ │
|
|
51
|
+
│ Bus-factor risk — 3 files touched by a single author: │
|
|
52
|
+
│ • auth.py — only Alice │
|
|
53
|
+
│ • billing.py — only Bob │
|
|
54
|
+
│ • reports.py — only Alice │
|
|
55
|
+
╰──────────────────────────────────────────────────────────────╯
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The **momentum**, **bus-factor**, and **hottest-file** lines are the point of
|
|
59
|
+
the tool — insights a raw log won't give you. Momentum compares this window
|
|
60
|
+
against the equal-length window immediately before it. Bus-factor flags files
|
|
61
|
+
only one author has touched in the window, busiest first, so knowledge silos
|
|
62
|
+
surface. The inline "Hottest file" line names the single highest-risk file (only
|
|
63
|
+
when there's real churn). A "Heads up" line flags **work-hours patterns** —
|
|
64
|
+
appearing only when a meaningful share of commits land outside working hours
|
|
65
|
+
(before 8am / after 8pm) or on weekends, so it reads as a team-health signal
|
|
66
|
+
rather than noise. A **commit hygiene** score (0–100) rates workflow health — it
|
|
67
|
+
penalizes one-word or vague messages and oversized commits; `--verbose` lists
|
|
68
|
+
the worst offenders.
|
|
69
|
+
|
|
70
|
+
### Churn hotspots — where the heat is
|
|
71
|
+
|
|
72
|
+
High-churn, multi-author files are where defects concentrate. `--hotspots N`
|
|
73
|
+
ranks them in a dedicated panel, scored as `changes × distinct authors`:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
╭──── hotspots · myrepo · where the heat is ────╮
|
|
77
|
+
│ • payments.py — 23 changes · 5 authors · score 115 │
|
|
78
|
+
│ • auth.py — 12 changes · 3 authors · score 36 │
|
|
79
|
+
│ • api.py — 9 changes · 2 authors · score 18 │
|
|
80
|
+
╰────────────────────────────────────────────────╯
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Co-change coupling — the usual suspects
|
|
84
|
+
|
|
85
|
+
Files that almost always commit together are coupled whether the code says so or
|
|
86
|
+
not — surfacing undocumented dependencies. `--coupling` reports pairs that
|
|
87
|
+
co-occur often enough (and with a high enough ratio) to matter; bulk commits
|
|
88
|
+
touching many files are ignored so they don't manufacture false coupling.
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
╭──── usual suspects · myrepo · files that travel together ────╮
|
|
92
|
+
│ • auth.py ↔ session.py — change together 90% of the time (9×) │
|
|
93
|
+
│ • api.py ↔ schema.py — change together 80% of the time (8×) │
|
|
94
|
+
╰────────────────────────────────────────────────────────────────╯
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Standup mode
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
╭─ gitsumm · myrepo · get some standup (in the last 7 days) ─╮
|
|
101
|
+
│ Alice (3 commits) │
|
|
102
|
+
│ • Add weekly report export │
|
|
103
|
+
│ • Hash passwords with bcrypt │
|
|
104
|
+
│ • Add login endpoint │
|
|
105
|
+
│ │
|
|
106
|
+
│ Bob (1 commit) │
|
|
107
|
+
│ • Fix invoice rounding │
|
|
108
|
+
╰───────────────────────────────────────────────────────────╯
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### AI mode
|
|
112
|
+
|
|
113
|
+
With the `[ai]` extra installed and `ANTHROPIC_API_KEY` set, `--ai` adds a
|
|
114
|
+
fluent paragraph above the stats panel:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
╭───────────────── gitsumm · myrepo · the gist ─────────────────╮
|
|
118
|
+
│ Over the past week myrepo saw steady progress: 24 commits │
|
|
119
|
+
│ from three contributors, with Alice driving most of the auth │
|
|
120
|
+
│ work and Tuesday the busiest day. Momentum is up on the prior │
|
|
121
|
+
│ week. Heads up — auth.py and reports.py have only been │
|
|
122
|
+
│ touched by Alice, a bus-factor risk worth spreading around. │
|
|
123
|
+
╰───────────────────────────────────────────────────────────────╯
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
`--ai` never breaks the tool: if the `anthropic` SDK isn't installed, the API
|
|
127
|
+
key is missing, or the request fails, gitsumm falls back to a deterministic
|
|
128
|
+
templated paragraph and prints a short hint explaining why. Set
|
|
129
|
+
`GITSUMM_AI_MODEL` to use a model other than the default.
|
|
130
|
+
|
|
131
|
+
### Themed changelog & tag ranges
|
|
132
|
+
|
|
133
|
+
`--changelog` groups commits into **Features / Fixes / Refactors / Other** —
|
|
134
|
+
fluent release notes when AI is available, a deterministic keyword grouping
|
|
135
|
+
when it isn't (same crash-proof fallback as `--ai`). Pair it with the `since`
|
|
136
|
+
command to summarize a release instead of a day window:
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
gitsumm since v1.0.0 --changelog # everything since a tag
|
|
140
|
+
gitsumm since v1.0.0 v1.1.0 --changelog # between two tags
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
╭─ gitsumm · myrepo · changelog (since v1.0.0) ─╮
|
|
145
|
+
│ Features │
|
|
146
|
+
│ • Add user login endpoint │
|
|
147
|
+
│ • Add billing webhook │
|
|
148
|
+
│ Fixes │
|
|
149
|
+
│ • Fix invoice rounding │
|
|
150
|
+
│ Refactors │
|
|
151
|
+
│ • Refactor reports module │
|
|
152
|
+
╰──────────────────────────────────────────────╯
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Every flag above (`--standup`, `--hotspots`, `--coupling`, `--ai`, `--verbose`)
|
|
156
|
+
also works with `since`.
|
|
157
|
+
|
|
158
|
+
## Behavior & guarantees
|
|
159
|
+
|
|
160
|
+
- **Works fully offline.** AI is an enhancement, never a requirement.
|
|
161
|
+
- **Fails friendly.** Not a git repo, no commits in the window, or git not
|
|
162
|
+
installed each produce a clear one-line message and a clean exit — never a
|
|
163
|
+
stack trace.
|
|
164
|
+
- **Reads `ANTHROPIC_API_KEY`** from the environment; missing key during `--ai`
|
|
165
|
+
falls back gracefully.
|
|
166
|
+
|
|
167
|
+
## Project layout
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
gitsumm/
|
|
171
|
+
├── main.py # CLI wiring + output formatting (typer + rich)
|
|
172
|
+
├── git_utils.py # all git/subprocess logic and analysis; returns clean objects
|
|
173
|
+
└── ai.py # optional Anthropic summary, fully isolated and crash-proof
|
|
174
|
+
```
|