cullit 1.9.1 → 1.10.0

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 +76 -62
  2. package/dist/index.js +11 -10
  3. package/package.json +9 -5
package/README.md CHANGED
@@ -1,62 +1,76 @@
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
1
+ # cullit CLI
2
+
3
+ Public CLI installer for Cullit's local, template-based workflow.
4
+
5
+ The `cullit` package on npm is intentionally limited to the free local surface:
6
+
7
+ - local git collection
8
+ - template generation with `--provider none`
9
+ - stdout and file publishing
10
+ - config, status, and tag helpers
11
+
12
+ Installing from npm does not grant paid access by itself. Licensed AI providers, Jira/Linear enrichment, premium publishers, dashboard workflows, and other paid surfaces are delivered through Cullit-hosted or private licensed distributions.
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ # one-off free local run
18
+ npx cullit generate --from v1.0.0 --to v1.1.0 --provider none
19
+
20
+ # global install
21
+ npm install -g cullit
22
+
23
+ # dev dependency
24
+ npm install -D cullit
25
+ ```
26
+
27
+ ## Quick Start
28
+
29
+ ```bash
30
+ # initialize .cullit.yml
31
+ cullit init
32
+
33
+ # generate between refs with the built-in template engine
34
+ cullit generate --from v1.0.0 --to v1.1.0 --provider none
35
+
36
+ # autodetect the last two tags
37
+ cullit generate --provider none
38
+
39
+ # write release notes to a file
40
+ cullit generate --from HEAD~10 --provider none --format markdown --dry-run
41
+
42
+ # select a named template profile from .cullit.yml
43
+ cullit generate --from v1.8.0 --provider none --template customer-facing
44
+ ```
45
+
46
+ ## Licensing
47
+
48
+ - Public npm package: free local/template workflow only
49
+ - Paid tiers (Pro, Team, Enterprise): delivered through the private package `@cullit/licensed`
50
+ - `CULLIT_API_KEY`: used by licensed hosted/private Cullit surfaces
51
+ - Need Pro or Team access: https://cullit.io/pricing
52
+
53
+ ## Common Flags
54
+
55
+ - `--from <ref>` source git ref / tag / query
56
+ - `--to <ref>` target ref (defaults to `HEAD`)
57
+ - `--provider <name>` `anthropic|openai|gemini|ollama|openclaw|none`
58
+ - `--model <id>` override model
59
+ - `--audience <type>` tune output for `developer|end-user|executive`
60
+ - `--tone <style>` tone controls for generated output
61
+ - `--format <fmt>` output format
62
+ - `--template <name>` select named template profile from config
63
+ - `--quiet` minimal logs
64
+ - `--verbose` detailed logs
65
+
66
+ ## Docs
67
+
68
+ - Full docs: https://cullit.io/docs
69
+ - Tutorial: https://cullit.io/tutorial
70
+ - Pricing: https://cullit.io/pricing
71
+
72
+ ## Source and Issues
73
+
74
+ - Repository: https://github.com/mttaylor/cullit
75
+ - Issues: https://github.com/mttaylor/cullit/issues
76
+ - 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, OUTPUT_FORMATS } from "@cullit/core";
4
+ import { runPipeline, VERSION, createLogger, analyzeReleaseReadiness, resolveLicense, reportUsage, 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";
@@ -38,7 +38,7 @@ var HELP = `
38
38
  $ cullit <command> [options]
39
39
 
40
40
  COMMANDS
41
- generate Generate release notes from git, Jira, or Linear
41
+ generate Generate release notes from git or licensed sources
42
42
  status Release readiness check \u2014 should you release?
43
43
  init Create a .cullit.yml config file
44
44
  tags List recent tags in the current repo
@@ -57,14 +57,13 @@ var HELP = `
57
57
  --verbose Show detailed output
58
58
  --quiet Suppress all output except errors
59
59
 
60
+ NOTES
61
+ Public npm package: local git + template mode + stdout/file
62
+ Licensed/private Cullit surfaces add AI, enrichments, and premium publishers
63
+
60
64
  EXAMPLES
61
65
  $ cullit generate --from v1.0.0 --to v1.1.0
62
- $ cullit generate --from HEAD~10 --provider gemini
63
- $ cullit generate --from HEAD~5 --provider ollama --model llama3.1
64
66
  $ cullit generate --from HEAD~5 --provider none # no AI key needed
65
- $ cullit generate --source jira --from "project = PROJ" --provider anthropic
66
- $ cullit generate --source linear --from "team:ENG" --provider openai
67
- $ cullit generate --source gitlab --from v1.0.0 --to v1.1.0
68
67
  $ cullit generate --from v1.2.0 --template customer-facing
69
68
  $ cullit generate --from HEAD~5 --tone edgy --format html-edgy
70
69
  $ cullit init
@@ -209,7 +208,9 @@ async function runGenerate(from, to, opts) {
209
208
  logger.info(`\xBB License: ${tierLabel}`);
210
209
  }
211
210
  try {
212
- const result = await runPipeline(from, to, config, { format, dryRun, logger, templateProfile });
211
+ await runPipeline(from, to, config, { format, dryRun, logger, templateProfile });
212
+ reportUsage(from).catch(() => {
213
+ });
213
214
  if (logLevel !== "quiet") {
214
215
  try {
215
216
  const advisory = analyzeReleaseReadiness();
@@ -296,7 +297,7 @@ async function interactiveInit() {
296
297
  const VALID_TONES = TONES;
297
298
  const VALID_ENRICHMENTS = ["jira", "linear", "both", "none"];
298
299
  console.log("\n Cullit \u2014 Project Setup\n");
299
- const provider = await ask(rl, " AI provider (anthropic/openai/gemini/ollama/openclaw/none) [anthropic]: ") || "anthropic";
300
+ const provider = await ask(rl, " AI provider (anthropic/openai/gemini/ollama/openclaw/none) [none]: ") || "none";
300
301
  if (!VALID_PROVIDERS.includes(provider)) {
301
302
  console.error(`
302
303
  \u2717 Invalid provider: ${provider}. Must be one of: ${VALID_PROVIDERS.join(", ")}`);
@@ -317,7 +318,7 @@ async function interactiveInit() {
317
318
  rl.close();
318
319
  process.exit(1);
319
320
  }
320
- const tone = await ask(rl, " Tone (professional/casual/terse) [professional]: ") || "professional";
321
+ const tone = await ask(rl, " Tone (professional/casual/terse/edgy/hype/snarky) [professional]: ") || "professional";
321
322
  if (!VALID_TONES.includes(tone)) {
322
323
  console.error(`
323
324
  \u2717 Invalid tone: ${tone}. Must be one of: ${VALID_TONES.join(", ")}`);
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "cullit",
3
- "version": "1.9.1",
3
+ "version": "1.10.0",
4
4
  "type": "module",
5
- "description": "Cull the noise from your releases. AI-powered release notes from the CLI.",
5
+ "description": "Public Cullit CLI for local, template-based release notes. Licensed AI and integrations are delivered separately.",
6
6
  "license": "MIT",
7
7
  "author": "Cullit <matt@cullit.io>",
8
8
  "repository": {
@@ -18,6 +18,10 @@
18
18
  "devops",
19
19
  "automation"
20
20
  ],
21
+ "homepage": "https://cullit.io",
22
+ "bugs": {
23
+ "url": "https://github.com/mttaylor/cullit/issues"
24
+ },
21
25
  "bin": {
22
26
  "cullit": "./dist/index.js"
23
27
  },
@@ -27,11 +31,11 @@
27
31
  "README.md"
28
32
  ],
29
33
  "engines": {
30
- "node": ">=18"
34
+ "node": ">=22"
31
35
  },
32
36
  "dependencies": {
33
- "@cullit/core": "1.9.1",
34
- "@cullit/config": "1.9.1"
37
+ "@cullit/core": "1.10.0",
38
+ "@cullit/config": "1.10.0"
35
39
  },
36
40
  "scripts": {
37
41
  "build": "tsup src/index.ts --format esm --clean",