cullit 1.7.0 → 1.9.1
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 +62 -0
- package/dist/index.js +13 -3
- package/package.json +5 -4
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# cullit CLI
|
|
2
|
+
|
|
3
|
+
AI-powered release notes from your terminal.
|
|
4
|
+
|
|
5
|
+
`cullit` reads your git history (and optionally Jira/Linear context), then generates and publishes release notes to the channels your team already uses.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# one-off
|
|
11
|
+
npx cullit generate --from v1.0.0 --to v1.1.0
|
|
12
|
+
|
|
13
|
+
# global
|
|
14
|
+
npm install -g cullit
|
|
15
|
+
|
|
16
|
+
# dev dependency
|
|
17
|
+
npm install -D cullit
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# initialize .cullit.yml
|
|
24
|
+
cullit init
|
|
25
|
+
|
|
26
|
+
# generate between refs
|
|
27
|
+
cullit generate --from v1.0.0 --to v1.1.0
|
|
28
|
+
|
|
29
|
+
# autodetect last two tags
|
|
30
|
+
cullit generate
|
|
31
|
+
|
|
32
|
+
# no AI key needed (template mode)
|
|
33
|
+
cullit generate --from HEAD~10 --provider none
|
|
34
|
+
|
|
35
|
+
# select a named template profile from .cullit.yml
|
|
36
|
+
cullit generate --from v1.8.0 --template customer-facing
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Common Flags
|
|
40
|
+
|
|
41
|
+
- `--from <ref>` source git ref / tag / query
|
|
42
|
+
- `--to <ref>` target ref (defaults to `HEAD`)
|
|
43
|
+
- `--provider <name>` `anthropic|openai|gemini|ollama|openclaw|none`
|
|
44
|
+
- `--model <id>` override model
|
|
45
|
+
- `--audience <type>` tune output for `developer|end-user|executive`
|
|
46
|
+
- `--tone <style>` tone controls for generated output
|
|
47
|
+
- `--format <fmt>` output format
|
|
48
|
+
- `--template <name>` select named template profile from config
|
|
49
|
+
- `--quiet` minimal logs
|
|
50
|
+
- `--verbose` detailed logs
|
|
51
|
+
|
|
52
|
+
## Docs
|
|
53
|
+
|
|
54
|
+
- Full docs: https://cullit.io/docs
|
|
55
|
+
- Tutorial: https://cullit.io/tutorial
|
|
56
|
+
- Pricing: https://cullit.io/pricing
|
|
57
|
+
|
|
58
|
+
## Source and Issues
|
|
59
|
+
|
|
60
|
+
- Repository: https://github.com/mttaylor/cullit
|
|
61
|
+
- Issues: https://github.com/mttaylor/cullit/issues
|
|
62
|
+
- Security: see `SECURITY.md` in the repository
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
|
-
import { runPipeline, VERSION, createLogger, analyzeReleaseReadiness, resolveLicense, AI_PROVIDERS, AUDIENCES, TONES, SOURCE_TYPES } from "@cullit/core";
|
|
4
|
+
import { runPipeline, VERSION, createLogger, analyzeReleaseReadiness, resolveLicense, AI_PROVIDERS, AUDIENCES, TONES, SOURCE_TYPES, OUTPUT_FORMATS } from "@cullit/core";
|
|
5
5
|
import { loadConfig } from "@cullit/config";
|
|
6
6
|
import { getRecentTags } from "@cullit/core";
|
|
7
7
|
import { writeFileSync, readFileSync, existsSync } from "fs";
|
|
@@ -48,6 +48,7 @@ var HELP = `
|
|
|
48
48
|
--to, -t End ref (defaults to HEAD)
|
|
49
49
|
--config, -c Path to config file (default: .cullit.yml)
|
|
50
50
|
--format Output format: markdown, html, html-dark, html-minimal, html-edgy, json
|
|
51
|
+
--template Template profile name from config.templates
|
|
51
52
|
--dry-run Generate but don't publish
|
|
52
53
|
--provider Override AI provider (anthropic, openai, gemini, ollama, openclaw, none)
|
|
53
54
|
--source Override source type (local, jira, linear, gitlab, bitbucket)
|
|
@@ -64,6 +65,7 @@ var HELP = `
|
|
|
64
65
|
$ cullit generate --source jira --from "project = PROJ" --provider anthropic
|
|
65
66
|
$ cullit generate --source linear --from "team:ENG" --provider openai
|
|
66
67
|
$ cullit generate --source gitlab --from v1.0.0 --to v1.1.0
|
|
68
|
+
$ cullit generate --from v1.2.0 --template customer-facing
|
|
67
69
|
$ cullit generate --from HEAD~5 --tone edgy --format html-edgy
|
|
68
70
|
$ cullit init
|
|
69
71
|
`;
|
|
@@ -189,17 +191,25 @@ async function runGenerate(from, to, opts) {
|
|
|
189
191
|
}
|
|
190
192
|
config.source.type = opts.source;
|
|
191
193
|
}
|
|
192
|
-
|
|
194
|
+
if (opts.format && !OUTPUT_FORMATS.includes(opts.format)) {
|
|
195
|
+
console.error(`
|
|
196
|
+
\u2717 Invalid format: ${opts.format}`);
|
|
197
|
+
console.error(` Valid formats: ${OUTPUT_FORMATS.join(", ")}`);
|
|
198
|
+
process.exitCode = 1;
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const format = opts.format;
|
|
193
202
|
const dryRun = "dry-run" in opts || "dryRun" in opts;
|
|
194
203
|
const logLevel = "verbose" in opts ? "verbose" : "quiet" in opts ? "quiet" : "normal";
|
|
195
204
|
const logger = createLogger(logLevel);
|
|
205
|
+
const templateProfile = opts.template || opts.templateProfile || opts["template-profile"];
|
|
196
206
|
const license = resolveLicense();
|
|
197
207
|
if (logLevel !== "quiet") {
|
|
198
208
|
const tierLabel = license.tier === "pro" ? "\u{1F511} Pro" : "\u{1F193} Free";
|
|
199
209
|
logger.info(`\xBB License: ${tierLabel}`);
|
|
200
210
|
}
|
|
201
211
|
try {
|
|
202
|
-
const result = await runPipeline(from, to, config, { format, dryRun, logger });
|
|
212
|
+
const result = await runPipeline(from, to, config, { format, dryRun, logger, templateProfile });
|
|
203
213
|
if (logLevel !== "quiet") {
|
|
204
214
|
try {
|
|
205
215
|
const advisory = analyzeReleaseReadiness();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cullit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Cull the noise from your releases. AI-powered release notes from the CLI.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,14 +23,15 @@
|
|
|
23
23
|
},
|
|
24
24
|
"main": "./dist/index.js",
|
|
25
25
|
"files": [
|
|
26
|
-
"dist"
|
|
26
|
+
"dist",
|
|
27
|
+
"README.md"
|
|
27
28
|
],
|
|
28
29
|
"engines": {
|
|
29
30
|
"node": ">=18"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"@cullit/
|
|
33
|
-
"@cullit/
|
|
33
|
+
"@cullit/core": "1.9.1",
|
|
34
|
+
"@cullit/config": "1.9.1"
|
|
34
35
|
},
|
|
35
36
|
"scripts": {
|
|
36
37
|
"build": "tsup src/index.ts --format esm --clean",
|