cullit 1.9.2 → 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 +26 -12
  2. package/dist/index.js +11 -10
  3. package/package.json +9 -5
package/README.md CHANGED
@@ -1,16 +1,23 @@
1
1
  # cullit CLI
2
2
 
3
- AI-powered release notes from your terminal.
3
+ Public CLI installer for Cullit's local, template-based workflow.
4
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.
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.
6
13
 
7
14
  ## Install
8
15
 
9
16
  ```bash
10
- # one-off
11
- npx cullit generate --from v1.0.0 --to v1.1.0
17
+ # one-off free local run
18
+ npx cullit generate --from v1.0.0 --to v1.1.0 --provider none
12
19
 
13
- # global
20
+ # global install
14
21
  npm install -g cullit
15
22
 
16
23
  # dev dependency
@@ -23,19 +30,26 @@ npm install -D cullit
23
30
  # initialize .cullit.yml
24
31
  cullit init
25
32
 
26
- # generate between refs
27
- cullit generate --from v1.0.0 --to v1.1.0
33
+ # generate between refs with the built-in template engine
34
+ cullit generate --from v1.0.0 --to v1.1.0 --provider none
28
35
 
29
- # autodetect last two tags
30
- cullit generate
36
+ # autodetect the last two tags
37
+ cullit generate --provider none
31
38
 
32
- # no AI key needed (template mode)
33
- cullit generate --from HEAD~10 --provider none
39
+ # write release notes to a file
40
+ cullit generate --from HEAD~10 --provider none --format markdown --dry-run
34
41
 
35
42
  # select a named template profile from .cullit.yml
36
- cullit generate --from v1.8.0 --template customer-facing
43
+ cullit generate --from v1.8.0 --provider none --template customer-facing
37
44
  ```
38
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
+
39
53
  ## Common Flags
40
54
 
41
55
  - `--from <ref>` source git ref / tag / query
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.2",
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.2",
34
- "@cullit/config": "1.9.2"
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",