cullit 1.8.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.
Files changed (3) hide show
  1. package/README.md +62 -0
  2. package/dist/index.js +13 -3
  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
- const format = opts.format || "markdown";
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.8.0",
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/core": "1.8.0",
33
- "@cullit/config": "1.8.0"
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",