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 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
+ ```
@@ -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
+ ```
@@ -0,0 +1,3 @@
1
+ """gitsumm — summarize a git repository's recent activity in plain English."""
2
+
3
+ __version__ = "1.0.0"