laminate-cli 0.1.0__tar.gz → 0.1.1__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.
@@ -0,0 +1,301 @@
1
+ Metadata-Version: 2.4
2
+ Name: laminate-cli
3
+ Version: 0.1.1
4
+ Summary: Generate release-ready changelogs from git history using a local LLM
5
+ Requires-Python: >=3.10
6
+ Description-Content-Type: text/markdown
7
+ License-File: LICENSE
8
+ Requires-Dist: llama-cpp-python
9
+ Requires-Dist: pydantic
10
+ Requires-Dist: typer
11
+ Requires-Dist: rich
12
+ Dynamic: license-file
13
+
14
+ <div style="text-align: center;">
15
+ <img src="assets/laminate-logo.svg" alt="Laminate Logo" width="200">
16
+
17
+ <h1>Laminate</h1>
18
+
19
+ <h4>
20
+ <a href="https://apleut.dev">My Website</a> ·
21
+ <a href="CHANGELOG.md">Changelog</a>
22
+ </h4>
23
+
24
+ <hr>
25
+
26
+ </div>
27
+
28
+ > [!WARNING]
29
+ > Laminate is in **early development**. Its output, CLI, and configuration may change between releases.
30
+
31
+ A CLI that turns your Git history into **release-ready changelogs using a local LLM**.
32
+
33
+ Instead of manually sorting hundreds of commits into `Added`, `Changed`, `Fixed`, and other categories, Laminate reads your Git history, interprets the changes, and generates a clean [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) compatible document.
34
+
35
+ ## Features
36
+
37
+ * 🤖 **Local LLM processing** — your Git history stays on your machine
38
+ * 📝 **Release-ready Markdown** — generates structured changelogs
39
+ * 🗂️ **Automatic categorization** — sorts changes into standard changelog categories
40
+ * 🧩 **Related-commit grouping** — combines related commits into a single entry
41
+ * 📦 **Batch processing** — process large repositories without sending the entire history to the model at once
42
+ * 🔒 **No API keys required** — Laminate uses a local GGUF model through `llama-cpp-python`
43
+ * 🛠️ **Git-aware filtering** — filter commits by date or Git commit range
44
+ * 🚀 **Release support** — generate either an `[Unreleased]` section or a versioned release
45
+
46
+ ## Installation
47
+
48
+ ### PyPI
49
+
50
+ Install Laminate with pip:
51
+
52
+ ```bash
53
+ pip install laminate-cli
54
+ ```
55
+
56
+ > **Note:** The PyPI package is named `laminate-cli`, while the command and Python package are named `laminate`.
57
+
58
+ ### From source
59
+
60
+ Clone the repository and install it locally:
61
+
62
+ ```bash
63
+ git clone https://github.com/Apleut/Laminate.git
64
+ cd Laminate
65
+ pip install .
66
+ ```
67
+
68
+ For development:
69
+
70
+ ```bash
71
+ pip install -e .
72
+ ```
73
+
74
+ ### Windows
75
+
76
+ `llama-cpp-python` may require a pre-built CPU wheel on Windows.
77
+
78
+ Install it first with:
79
+
80
+ ```bash
81
+ pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
82
+ ```
83
+
84
+ Then install Laminate:
85
+
86
+ ```bash
87
+ pip install .
88
+ ```
89
+
90
+ ## Model
91
+
92
+ Laminate runs a **local GGUF model** using [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python).
93
+
94
+ Place exactly one `.gguf` model file in:
95
+
96
+ ```text
97
+ models/
98
+ └── your-model.gguf
99
+ ```
100
+
101
+ [Phi-4-mini-instruct](https://huggingface.co/unsloth/Phi-4-mini-instruct-GGUF) is a good pick, and is the model used for Laminate's development.
102
+
103
+ Laminate automatically finds and loads the model when it runs.
104
+
105
+ If the `models/` directory does not exist, or contains zero or multiple `.gguf` files, Laminate will stop and explain what needs to be fixed.
106
+
107
+ The model is intentionally kept separate from the package because GGUF models can be large and have different licensing requirements.
108
+
109
+ ## Usage
110
+
111
+ From inside a Git repository:
112
+
113
+ ```bash
114
+ laminate
115
+ ```
116
+
117
+ Laminate will read the repository's commit history, categorize the changes, and write the result to:
118
+
119
+ ```text
120
+ CHANGELOG.md
121
+ ```
122
+
123
+ For example:
124
+
125
+ ```text
126
+ Reading commits from working directory...
127
+ Found 42 commits. Categorizing with the local model...
128
+ [categorize] processing batch 1/3 (20 commits)...
129
+ [categorize] processing batch 2/3 (20 commits)...
130
+ [categorize] processing batch 3/3 (2 commits)...
131
+
132
+ Done. Changelog written to CHANGELOG.md
133
+ ```
134
+
135
+ ## Options
136
+
137
+ ### `--repo`
138
+
139
+ Specify the Git repository to read.
140
+
141
+ ```bash
142
+ laminate --repo ./my-project
143
+ ```
144
+
145
+ Defaults to the current working directory.
146
+
147
+ ### `--since`
148
+
149
+ Only include commits after a specific date.
150
+
151
+ ```bash
152
+ laminate --since 2026-01-01
153
+ ```
154
+
155
+ ### `--until`
156
+
157
+ Only include commits before a specific date.
158
+
159
+ ```bash
160
+ laminate --until 2026-10-01
161
+ ```
162
+
163
+ ### `--range`
164
+
165
+ Process a specific Git commit range.
166
+
167
+ ```bash
168
+ laminate --range v1.0.0..v1.1.0
169
+ ```
170
+
171
+ `--range` overrides `--since` and `--until`.
172
+
173
+ This is particularly useful when generating a changelog for a release.
174
+
175
+ ### `--output`
176
+
177
+ Choose where the generated changelog should be written.
178
+
179
+ ```bash
180
+ laminate --output RELEASE_NOTES.md
181
+ ```
182
+
183
+ Defaults to:
184
+
185
+ ```text
186
+ CHANGELOG.md
187
+ ```
188
+
189
+ ### `--batch-size`
190
+
191
+ Control how many commits are sent to the model at once.
192
+
193
+ ```bash
194
+ laminate --batch-size 25
195
+ ```
196
+
197
+ Larger batches can provide more context to the model, while smaller batches can reduce the amount of context required for each request.
198
+
199
+ ### `--release`
200
+
201
+ Generate a versioned release section instead of an `[Unreleased]` section.
202
+
203
+ ```bash
204
+ laminate --release 1.1.0
205
+ ```
206
+
207
+ The resulting header will look like:
208
+
209
+ ```markdown
210
+ ## [1.1.0] - 2026-10-03
211
+ ```
212
+
213
+ Without `--release`, Laminate generates:
214
+
215
+ ```markdown
216
+ ## [Unreleased]
217
+ ```
218
+
219
+ ## Example
220
+
221
+ Suppose your repository contains commits like:
222
+
223
+ ```text
224
+ Add user authentication
225
+ Fix crash when configuration is missing
226
+ Refactor authentication middleware
227
+ Remove deprecated login endpoint
228
+ Add password reset flow
229
+ ```
230
+
231
+ Instead of producing one entry for every commit, Laminate can turn them into something like:
232
+
233
+ ```markdown
234
+ # Changelog
235
+
236
+ All notable changes to this project will be documented in this file.
237
+
238
+ The format is based on Keep a Changelog
239
+ and this project adheres to Semantic Versioning.
240
+
241
+ ## [Unreleased]
242
+
243
+ ### Added
244
+
245
+ - Added user authentication and password reset functionality.
246
+
247
+ ### Changed
248
+
249
+ - Refactored the authentication middleware.
250
+
251
+ ### Removed
252
+
253
+ - Removed the deprecated login endpoint.
254
+
255
+ ### Fixed
256
+
257
+ - Fixed a crash caused by missing configuration.
258
+ ```
259
+
260
+ The exact output depends on the Git history and the model being used.
261
+
262
+ ## Supported Categories
263
+
264
+ Laminate currently uses the standard Keep a Changelog categories:
265
+
266
+ * **Added**
267
+ * **Changed**
268
+ * **Deprecated**
269
+ * **Removed**
270
+ * **Fixed**
271
+ * **Security**
272
+
273
+ Categories that contain no changes are omitted from the final document.
274
+
275
+ ## Privacy
276
+
277
+ Laminate is designed around **local processing**.
278
+
279
+ Your Git history is passed to the LLM running on your own machine. Laminate does not require an OpenAI, Anthropic, or other hosted AI API.
280
+
281
+ The model you download and use is subject to its own license and terms.
282
+
283
+ ## Contributing
284
+
285
+ Contributions, bug reports, and ideas are welcome.
286
+
287
+ If you find a problem with Laminate, please open an issue with:
288
+
289
+ * What you were trying to do
290
+ * The command you ran
291
+ * The relevant error message
292
+ * Your Python version
293
+ * Your operating system
294
+
295
+ Or email me at [me@apleut.dev](me@apleut.dev).
296
+
297
+ For changes to Laminate itself, pull requests are welcome.
298
+
299
+ ## License
300
+
301
+ License information will be added before the first stable release.
@@ -0,0 +1,288 @@
1
+ <div style="text-align: center;">
2
+ <img src="assets/laminate-logo.svg" alt="Laminate Logo" width="200">
3
+
4
+ <h1>Laminate</h1>
5
+
6
+ <h4>
7
+ <a href="https://apleut.dev">My Website</a> ·
8
+ <a href="CHANGELOG.md">Changelog</a>
9
+ </h4>
10
+
11
+ <hr>
12
+
13
+ </div>
14
+
15
+ > [!WARNING]
16
+ > Laminate is in **early development**. Its output, CLI, and configuration may change between releases.
17
+
18
+ A CLI that turns your Git history into **release-ready changelogs using a local LLM**.
19
+
20
+ Instead of manually sorting hundreds of commits into `Added`, `Changed`, `Fixed`, and other categories, Laminate reads your Git history, interprets the changes, and generates a clean [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) compatible document.
21
+
22
+ ## Features
23
+
24
+ * 🤖 **Local LLM processing** — your Git history stays on your machine
25
+ * 📝 **Release-ready Markdown** — generates structured changelogs
26
+ * 🗂️ **Automatic categorization** — sorts changes into standard changelog categories
27
+ * 🧩 **Related-commit grouping** — combines related commits into a single entry
28
+ * 📦 **Batch processing** — process large repositories without sending the entire history to the model at once
29
+ * 🔒 **No API keys required** — Laminate uses a local GGUF model through `llama-cpp-python`
30
+ * 🛠️ **Git-aware filtering** — filter commits by date or Git commit range
31
+ * 🚀 **Release support** — generate either an `[Unreleased]` section or a versioned release
32
+
33
+ ## Installation
34
+
35
+ ### PyPI
36
+
37
+ Install Laminate with pip:
38
+
39
+ ```bash
40
+ pip install laminate-cli
41
+ ```
42
+
43
+ > **Note:** The PyPI package is named `laminate-cli`, while the command and Python package are named `laminate`.
44
+
45
+ ### From source
46
+
47
+ Clone the repository and install it locally:
48
+
49
+ ```bash
50
+ git clone https://github.com/Apleut/Laminate.git
51
+ cd Laminate
52
+ pip install .
53
+ ```
54
+
55
+ For development:
56
+
57
+ ```bash
58
+ pip install -e .
59
+ ```
60
+
61
+ ### Windows
62
+
63
+ `llama-cpp-python` may require a pre-built CPU wheel on Windows.
64
+
65
+ Install it first with:
66
+
67
+ ```bash
68
+ pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
69
+ ```
70
+
71
+ Then install Laminate:
72
+
73
+ ```bash
74
+ pip install .
75
+ ```
76
+
77
+ ## Model
78
+
79
+ Laminate runs a **local GGUF model** using [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python).
80
+
81
+ Place exactly one `.gguf` model file in:
82
+
83
+ ```text
84
+ models/
85
+ └── your-model.gguf
86
+ ```
87
+
88
+ [Phi-4-mini-instruct](https://huggingface.co/unsloth/Phi-4-mini-instruct-GGUF) is a good pick, and is the model used for Laminate's development.
89
+
90
+ Laminate automatically finds and loads the model when it runs.
91
+
92
+ If the `models/` directory does not exist, or contains zero or multiple `.gguf` files, Laminate will stop and explain what needs to be fixed.
93
+
94
+ The model is intentionally kept separate from the package because GGUF models can be large and have different licensing requirements.
95
+
96
+ ## Usage
97
+
98
+ From inside a Git repository:
99
+
100
+ ```bash
101
+ laminate
102
+ ```
103
+
104
+ Laminate will read the repository's commit history, categorize the changes, and write the result to:
105
+
106
+ ```text
107
+ CHANGELOG.md
108
+ ```
109
+
110
+ For example:
111
+
112
+ ```text
113
+ Reading commits from working directory...
114
+ Found 42 commits. Categorizing with the local model...
115
+ [categorize] processing batch 1/3 (20 commits)...
116
+ [categorize] processing batch 2/3 (20 commits)...
117
+ [categorize] processing batch 3/3 (2 commits)...
118
+
119
+ Done. Changelog written to CHANGELOG.md
120
+ ```
121
+
122
+ ## Options
123
+
124
+ ### `--repo`
125
+
126
+ Specify the Git repository to read.
127
+
128
+ ```bash
129
+ laminate --repo ./my-project
130
+ ```
131
+
132
+ Defaults to the current working directory.
133
+
134
+ ### `--since`
135
+
136
+ Only include commits after a specific date.
137
+
138
+ ```bash
139
+ laminate --since 2026-01-01
140
+ ```
141
+
142
+ ### `--until`
143
+
144
+ Only include commits before a specific date.
145
+
146
+ ```bash
147
+ laminate --until 2026-10-01
148
+ ```
149
+
150
+ ### `--range`
151
+
152
+ Process a specific Git commit range.
153
+
154
+ ```bash
155
+ laminate --range v1.0.0..v1.1.0
156
+ ```
157
+
158
+ `--range` overrides `--since` and `--until`.
159
+
160
+ This is particularly useful when generating a changelog for a release.
161
+
162
+ ### `--output`
163
+
164
+ Choose where the generated changelog should be written.
165
+
166
+ ```bash
167
+ laminate --output RELEASE_NOTES.md
168
+ ```
169
+
170
+ Defaults to:
171
+
172
+ ```text
173
+ CHANGELOG.md
174
+ ```
175
+
176
+ ### `--batch-size`
177
+
178
+ Control how many commits are sent to the model at once.
179
+
180
+ ```bash
181
+ laminate --batch-size 25
182
+ ```
183
+
184
+ Larger batches can provide more context to the model, while smaller batches can reduce the amount of context required for each request.
185
+
186
+ ### `--release`
187
+
188
+ Generate a versioned release section instead of an `[Unreleased]` section.
189
+
190
+ ```bash
191
+ laminate --release 1.1.0
192
+ ```
193
+
194
+ The resulting header will look like:
195
+
196
+ ```markdown
197
+ ## [1.1.0] - 2026-10-03
198
+ ```
199
+
200
+ Without `--release`, Laminate generates:
201
+
202
+ ```markdown
203
+ ## [Unreleased]
204
+ ```
205
+
206
+ ## Example
207
+
208
+ Suppose your repository contains commits like:
209
+
210
+ ```text
211
+ Add user authentication
212
+ Fix crash when configuration is missing
213
+ Refactor authentication middleware
214
+ Remove deprecated login endpoint
215
+ Add password reset flow
216
+ ```
217
+
218
+ Instead of producing one entry for every commit, Laminate can turn them into something like:
219
+
220
+ ```markdown
221
+ # Changelog
222
+
223
+ All notable changes to this project will be documented in this file.
224
+
225
+ The format is based on Keep a Changelog
226
+ and this project adheres to Semantic Versioning.
227
+
228
+ ## [Unreleased]
229
+
230
+ ### Added
231
+
232
+ - Added user authentication and password reset functionality.
233
+
234
+ ### Changed
235
+
236
+ - Refactored the authentication middleware.
237
+
238
+ ### Removed
239
+
240
+ - Removed the deprecated login endpoint.
241
+
242
+ ### Fixed
243
+
244
+ - Fixed a crash caused by missing configuration.
245
+ ```
246
+
247
+ The exact output depends on the Git history and the model being used.
248
+
249
+ ## Supported Categories
250
+
251
+ Laminate currently uses the standard Keep a Changelog categories:
252
+
253
+ * **Added**
254
+ * **Changed**
255
+ * **Deprecated**
256
+ * **Removed**
257
+ * **Fixed**
258
+ * **Security**
259
+
260
+ Categories that contain no changes are omitted from the final document.
261
+
262
+ ## Privacy
263
+
264
+ Laminate is designed around **local processing**.
265
+
266
+ Your Git history is passed to the LLM running on your own machine. Laminate does not require an OpenAI, Anthropic, or other hosted AI API.
267
+
268
+ The model you download and use is subject to its own license and terms.
269
+
270
+ ## Contributing
271
+
272
+ Contributions, bug reports, and ideas are welcome.
273
+
274
+ If you find a problem with Laminate, please open an issue with:
275
+
276
+ * What you were trying to do
277
+ * The command you ran
278
+ * The relevant error message
279
+ * Your Python version
280
+ * Your operating system
281
+
282
+ Or email me at [me@apleut.dev](me@apleut.dev).
283
+
284
+ For changes to Laminate itself, pull requests are welcome.
285
+
286
+ ## License
287
+
288
+ License information will be added before the first stable release.
@@ -0,0 +1,301 @@
1
+ Metadata-Version: 2.4
2
+ Name: laminate-cli
3
+ Version: 0.1.1
4
+ Summary: Generate release-ready changelogs from git history using a local LLM
5
+ Requires-Python: >=3.10
6
+ Description-Content-Type: text/markdown
7
+ License-File: LICENSE
8
+ Requires-Dist: llama-cpp-python
9
+ Requires-Dist: pydantic
10
+ Requires-Dist: typer
11
+ Requires-Dist: rich
12
+ Dynamic: license-file
13
+
14
+ <div style="text-align: center;">
15
+ <img src="assets/laminate-logo.svg" alt="Laminate Logo" width="200">
16
+
17
+ <h1>Laminate</h1>
18
+
19
+ <h4>
20
+ <a href="https://apleut.dev">My Website</a> ·
21
+ <a href="CHANGELOG.md">Changelog</a>
22
+ </h4>
23
+
24
+ <hr>
25
+
26
+ </div>
27
+
28
+ > [!WARNING]
29
+ > Laminate is in **early development**. Its output, CLI, and configuration may change between releases.
30
+
31
+ A CLI that turns your Git history into **release-ready changelogs using a local LLM**.
32
+
33
+ Instead of manually sorting hundreds of commits into `Added`, `Changed`, `Fixed`, and other categories, Laminate reads your Git history, interprets the changes, and generates a clean [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) compatible document.
34
+
35
+ ## Features
36
+
37
+ * 🤖 **Local LLM processing** — your Git history stays on your machine
38
+ * 📝 **Release-ready Markdown** — generates structured changelogs
39
+ * 🗂️ **Automatic categorization** — sorts changes into standard changelog categories
40
+ * 🧩 **Related-commit grouping** — combines related commits into a single entry
41
+ * 📦 **Batch processing** — process large repositories without sending the entire history to the model at once
42
+ * 🔒 **No API keys required** — Laminate uses a local GGUF model through `llama-cpp-python`
43
+ * 🛠️ **Git-aware filtering** — filter commits by date or Git commit range
44
+ * 🚀 **Release support** — generate either an `[Unreleased]` section or a versioned release
45
+
46
+ ## Installation
47
+
48
+ ### PyPI
49
+
50
+ Install Laminate with pip:
51
+
52
+ ```bash
53
+ pip install laminate-cli
54
+ ```
55
+
56
+ > **Note:** The PyPI package is named `laminate-cli`, while the command and Python package are named `laminate`.
57
+
58
+ ### From source
59
+
60
+ Clone the repository and install it locally:
61
+
62
+ ```bash
63
+ git clone https://github.com/Apleut/Laminate.git
64
+ cd Laminate
65
+ pip install .
66
+ ```
67
+
68
+ For development:
69
+
70
+ ```bash
71
+ pip install -e .
72
+ ```
73
+
74
+ ### Windows
75
+
76
+ `llama-cpp-python` may require a pre-built CPU wheel on Windows.
77
+
78
+ Install it first with:
79
+
80
+ ```bash
81
+ pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
82
+ ```
83
+
84
+ Then install Laminate:
85
+
86
+ ```bash
87
+ pip install .
88
+ ```
89
+
90
+ ## Model
91
+
92
+ Laminate runs a **local GGUF model** using [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python).
93
+
94
+ Place exactly one `.gguf` model file in:
95
+
96
+ ```text
97
+ models/
98
+ └── your-model.gguf
99
+ ```
100
+
101
+ [Phi-4-mini-instruct](https://huggingface.co/unsloth/Phi-4-mini-instruct-GGUF) is a good pick, and is the model used for Laminate's development.
102
+
103
+ Laminate automatically finds and loads the model when it runs.
104
+
105
+ If the `models/` directory does not exist, or contains zero or multiple `.gguf` files, Laminate will stop and explain what needs to be fixed.
106
+
107
+ The model is intentionally kept separate from the package because GGUF models can be large and have different licensing requirements.
108
+
109
+ ## Usage
110
+
111
+ From inside a Git repository:
112
+
113
+ ```bash
114
+ laminate
115
+ ```
116
+
117
+ Laminate will read the repository's commit history, categorize the changes, and write the result to:
118
+
119
+ ```text
120
+ CHANGELOG.md
121
+ ```
122
+
123
+ For example:
124
+
125
+ ```text
126
+ Reading commits from working directory...
127
+ Found 42 commits. Categorizing with the local model...
128
+ [categorize] processing batch 1/3 (20 commits)...
129
+ [categorize] processing batch 2/3 (20 commits)...
130
+ [categorize] processing batch 3/3 (2 commits)...
131
+
132
+ Done. Changelog written to CHANGELOG.md
133
+ ```
134
+
135
+ ## Options
136
+
137
+ ### `--repo`
138
+
139
+ Specify the Git repository to read.
140
+
141
+ ```bash
142
+ laminate --repo ./my-project
143
+ ```
144
+
145
+ Defaults to the current working directory.
146
+
147
+ ### `--since`
148
+
149
+ Only include commits after a specific date.
150
+
151
+ ```bash
152
+ laminate --since 2026-01-01
153
+ ```
154
+
155
+ ### `--until`
156
+
157
+ Only include commits before a specific date.
158
+
159
+ ```bash
160
+ laminate --until 2026-10-01
161
+ ```
162
+
163
+ ### `--range`
164
+
165
+ Process a specific Git commit range.
166
+
167
+ ```bash
168
+ laminate --range v1.0.0..v1.1.0
169
+ ```
170
+
171
+ `--range` overrides `--since` and `--until`.
172
+
173
+ This is particularly useful when generating a changelog for a release.
174
+
175
+ ### `--output`
176
+
177
+ Choose where the generated changelog should be written.
178
+
179
+ ```bash
180
+ laminate --output RELEASE_NOTES.md
181
+ ```
182
+
183
+ Defaults to:
184
+
185
+ ```text
186
+ CHANGELOG.md
187
+ ```
188
+
189
+ ### `--batch-size`
190
+
191
+ Control how many commits are sent to the model at once.
192
+
193
+ ```bash
194
+ laminate --batch-size 25
195
+ ```
196
+
197
+ Larger batches can provide more context to the model, while smaller batches can reduce the amount of context required for each request.
198
+
199
+ ### `--release`
200
+
201
+ Generate a versioned release section instead of an `[Unreleased]` section.
202
+
203
+ ```bash
204
+ laminate --release 1.1.0
205
+ ```
206
+
207
+ The resulting header will look like:
208
+
209
+ ```markdown
210
+ ## [1.1.0] - 2026-10-03
211
+ ```
212
+
213
+ Without `--release`, Laminate generates:
214
+
215
+ ```markdown
216
+ ## [Unreleased]
217
+ ```
218
+
219
+ ## Example
220
+
221
+ Suppose your repository contains commits like:
222
+
223
+ ```text
224
+ Add user authentication
225
+ Fix crash when configuration is missing
226
+ Refactor authentication middleware
227
+ Remove deprecated login endpoint
228
+ Add password reset flow
229
+ ```
230
+
231
+ Instead of producing one entry for every commit, Laminate can turn them into something like:
232
+
233
+ ```markdown
234
+ # Changelog
235
+
236
+ All notable changes to this project will be documented in this file.
237
+
238
+ The format is based on Keep a Changelog
239
+ and this project adheres to Semantic Versioning.
240
+
241
+ ## [Unreleased]
242
+
243
+ ### Added
244
+
245
+ - Added user authentication and password reset functionality.
246
+
247
+ ### Changed
248
+
249
+ - Refactored the authentication middleware.
250
+
251
+ ### Removed
252
+
253
+ - Removed the deprecated login endpoint.
254
+
255
+ ### Fixed
256
+
257
+ - Fixed a crash caused by missing configuration.
258
+ ```
259
+
260
+ The exact output depends on the Git history and the model being used.
261
+
262
+ ## Supported Categories
263
+
264
+ Laminate currently uses the standard Keep a Changelog categories:
265
+
266
+ * **Added**
267
+ * **Changed**
268
+ * **Deprecated**
269
+ * **Removed**
270
+ * **Fixed**
271
+ * **Security**
272
+
273
+ Categories that contain no changes are omitted from the final document.
274
+
275
+ ## Privacy
276
+
277
+ Laminate is designed around **local processing**.
278
+
279
+ Your Git history is passed to the LLM running on your own machine. Laminate does not require an OpenAI, Anthropic, or other hosted AI API.
280
+
281
+ The model you download and use is subject to its own license and terms.
282
+
283
+ ## Contributing
284
+
285
+ Contributions, bug reports, and ideas are welcome.
286
+
287
+ If you find a problem with Laminate, please open an issue with:
288
+
289
+ * What you were trying to do
290
+ * The command you ran
291
+ * The relevant error message
292
+ * Your Python version
293
+ * Your operating system
294
+
295
+ Or email me at [me@apleut.dev](me@apleut.dev).
296
+
297
+ For changes to Laminate itself, pull requests are welcome.
298
+
299
+ ## License
300
+
301
+ License information will be added before the first stable release.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "laminate-cli"
3
- version = "0.1.0"
3
+ version = "0.1.1"
4
4
  description = "Generate release-ready changelogs from git history using a local LLM"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -1,29 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: laminate-cli
3
- Version: 0.1.0
4
- Summary: Generate release-ready changelogs from git history using a local LLM
5
- Requires-Python: >=3.10
6
- Description-Content-Type: text/markdown
7
- License-File: LICENSE
8
- Requires-Dist: llama-cpp-python
9
- Requires-Dist: pydantic
10
- Requires-Dist: typer
11
- Requires-Dist: rich
12
- Dynamic: license-file
13
-
14
- <div style="text-align: center;">
15
- <img src="assets/laminate-logo.svg" alt="Laminate Logo" width=200>
16
- <h1>Laminate</h1>
17
- <h4><a href="https://apleut.dev">My Website</a> - <a href="changelog.md">Changelog</a></h4>
18
- <hr></hr>
19
- </div>
20
-
21
- > [!NOTE]
22
- > Laminate is in **extremely early development.** Everything stated here is subject to change. If you want to contribute to Laminate, contact me via email at __me@apleut.dev__.
23
-
24
- > [!WARNING]
25
- > When installing requirements on Windows machines, make sure to install `llama-cpp-python` using this command first:
26
- > `pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu`
27
- > Otherwise, the path lengths of the source code will be too long for Windows to handle, and it will raise an error.
28
-
29
- A CLI to write release-ready changelogs for you using llama-cpp-python.
@@ -1,16 +0,0 @@
1
- <div style="text-align: center;">
2
- <img src="assets/laminate-logo.svg" alt="Laminate Logo" width=200>
3
- <h1>Laminate</h1>
4
- <h4><a href="https://apleut.dev">My Website</a> - <a href="changelog.md">Changelog</a></h4>
5
- <hr></hr>
6
- </div>
7
-
8
- > [!NOTE]
9
- > Laminate is in **extremely early development.** Everything stated here is subject to change. If you want to contribute to Laminate, contact me via email at __me@apleut.dev__.
10
-
11
- > [!WARNING]
12
- > When installing requirements on Windows machines, make sure to install `llama-cpp-python` using this command first:
13
- > `pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu`
14
- > Otherwise, the path lengths of the source code will be too long for Windows to handle, and it will raise an error.
15
-
16
- A CLI to write release-ready changelogs for you using llama-cpp-python.
@@ -1,29 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: laminate-cli
3
- Version: 0.1.0
4
- Summary: Generate release-ready changelogs from git history using a local LLM
5
- Requires-Python: >=3.10
6
- Description-Content-Type: text/markdown
7
- License-File: LICENSE
8
- Requires-Dist: llama-cpp-python
9
- Requires-Dist: pydantic
10
- Requires-Dist: typer
11
- Requires-Dist: rich
12
- Dynamic: license-file
13
-
14
- <div style="text-align: center;">
15
- <img src="assets/laminate-logo.svg" alt="Laminate Logo" width=200>
16
- <h1>Laminate</h1>
17
- <h4><a href="https://apleut.dev">My Website</a> - <a href="changelog.md">Changelog</a></h4>
18
- <hr></hr>
19
- </div>
20
-
21
- > [!NOTE]
22
- > Laminate is in **extremely early development.** Everything stated here is subject to change. If you want to contribute to Laminate, contact me via email at __me@apleut.dev__.
23
-
24
- > [!WARNING]
25
- > When installing requirements on Windows machines, make sure to install `llama-cpp-python` using this command first:
26
- > `pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu`
27
- > Otherwise, the path lengths of the source code will be too long for Windows to handle, and it will raise an error.
28
-
29
- A CLI to write release-ready changelogs for you using llama-cpp-python.
File without changes
File without changes