@releasehub/cli 1.0.1 → 1.1.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 (60) hide show
  1. package/dist/__tests__/ai.test.d.ts +2 -0
  2. package/dist/__tests__/ai.test.d.ts.map +1 -0
  3. package/dist/__tests__/ai.test.js +160 -0
  4. package/dist/__tests__/ai.test.js.map +1 -0
  5. package/dist/__tests__/cost.test.d.ts +2 -0
  6. package/dist/__tests__/cost.test.d.ts.map +1 -0
  7. package/dist/__tests__/cost.test.js +49 -0
  8. package/dist/__tests__/cost.test.js.map +1 -0
  9. package/dist/__tests__/formatters.test.d.ts +2 -0
  10. package/dist/__tests__/formatters.test.d.ts.map +1 -0
  11. package/dist/__tests__/formatters.test.js +133 -0
  12. package/dist/__tests__/formatters.test.js.map +1 -0
  13. package/dist/__tests__/generate.integration.test.d.ts +2 -0
  14. package/dist/__tests__/generate.integration.test.d.ts.map +1 -0
  15. package/dist/__tests__/generate.integration.test.js +162 -0
  16. package/dist/__tests__/generate.integration.test.js.map +1 -0
  17. package/dist/__tests__/github.test.d.ts +2 -0
  18. package/dist/__tests__/github.test.d.ts.map +1 -0
  19. package/dist/__tests__/github.test.js +44 -0
  20. package/dist/__tests__/github.test.js.map +1 -0
  21. package/dist/__tests__/prefilter.test.d.ts +2 -0
  22. package/dist/__tests__/prefilter.test.d.ts.map +1 -0
  23. package/dist/__tests__/prefilter.test.js +58 -0
  24. package/dist/__tests__/prefilter.test.js.map +1 -0
  25. package/dist/commands/ai.d.ts.map +1 -1
  26. package/dist/commands/ai.js +8 -3
  27. package/dist/commands/ai.js.map +1 -1
  28. package/dist/commands/config.d.ts +3 -0
  29. package/dist/commands/config.d.ts.map +1 -0
  30. package/dist/commands/config.js +60 -0
  31. package/dist/commands/config.js.map +1 -0
  32. package/dist/commands/generate.d.ts +2 -0
  33. package/dist/commands/generate.d.ts.map +1 -1
  34. package/dist/commands/generate.js +35 -9
  35. package/dist/commands/generate.js.map +1 -1
  36. package/dist/index.js +2 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/ai.d.ts +3 -1
  39. package/dist/lib/ai.d.ts.map +1 -1
  40. package/dist/lib/ai.js +85 -31
  41. package/dist/lib/ai.js.map +1 -1
  42. package/dist/lib/config.d.ts +3 -1
  43. package/dist/lib/config.d.ts.map +1 -1
  44. package/dist/lib/config.js +11 -1
  45. package/dist/lib/config.js.map +1 -1
  46. package/dist/lib/cost.d.ts +13 -0
  47. package/dist/lib/cost.d.ts.map +1 -0
  48. package/dist/lib/cost.js +29 -0
  49. package/dist/lib/cost.js.map +1 -0
  50. package/dist/lib/errors.d.ts.map +1 -1
  51. package/dist/lib/errors.js +0 -1
  52. package/dist/lib/errors.js.map +1 -1
  53. package/dist/lib/github.d.ts.map +1 -1
  54. package/dist/lib/github.js +3 -2
  55. package/dist/lib/github.js.map +1 -1
  56. package/dist/lib/prefilter.d.ts +8 -0
  57. package/dist/lib/prefilter.d.ts.map +1 -0
  58. package/dist/lib/prefilter.js +34 -0
  59. package/dist/lib/prefilter.js.map +1 -0
  60. package/package.json +11 -3
@@ -0,0 +1,44 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ // extractLinkedIssues is not exported — replicate the logic to test it
3
+ function extractLinkedIssues(body) {
4
+ if (!body)
5
+ return [];
6
+ const matches = body.matchAll(/(?:closes?|fixe?s?|resolves?)\s+#(\d+)/gi);
7
+ return [...matches].map(m => `#${m[1]}`);
8
+ }
9
+ describe('extractLinkedIssues', () => {
10
+ it('returns empty array for null body', () => {
11
+ expect(extractLinkedIssues(null)).toEqual([]);
12
+ });
13
+ it('returns empty array for body with no issue references', () => {
14
+ expect(extractLinkedIssues('This PR improves performance.')).toEqual([]);
15
+ });
16
+ it('extracts "Closes #123"', () => {
17
+ expect(extractLinkedIssues('Closes #123')).toEqual(['#123']);
18
+ });
19
+ it('extracts "Fixes #456"', () => {
20
+ expect(extractLinkedIssues('Fixes #456')).toEqual(['#456']);
21
+ });
22
+ it('extracts "Resolves #789"', () => {
23
+ expect(extractLinkedIssues('Resolves #789')).toEqual(['#789']);
24
+ });
25
+ it('is case-insensitive', () => {
26
+ expect(extractLinkedIssues('CLOSES #1\nFIXES #2\nRESOLVES #3')).toEqual(['#1', '#2', '#3']);
27
+ });
28
+ it('handles plural forms: close, fix, resolve', () => {
29
+ expect(extractLinkedIssues('close #10')).toEqual(['#10']);
30
+ expect(extractLinkedIssues('fix #11')).toEqual(['#11']);
31
+ expect(extractLinkedIssues('resolve #12')).toEqual(['#12']);
32
+ });
33
+ it('extracts multiple issues from one body', () => {
34
+ const body = 'This fixes #10 and closes #20.\nAlso resolves #30.';
35
+ expect(extractLinkedIssues(body)).toEqual(['#10', '#20', '#30']);
36
+ });
37
+ it('ignores bare issue numbers without keyword', () => {
38
+ expect(extractLinkedIssues('See #123 for context')).toEqual([]);
39
+ });
40
+ it('handles extra whitespace between keyword and number', () => {
41
+ expect(extractLinkedIssues('Closes #99')).toEqual(['#99']);
42
+ });
43
+ });
44
+ //# sourceMappingURL=github.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.test.js","sourceRoot":"","sources":["../../src/__tests__/github.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prefilter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefilter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/prefilter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { prefilterPRs } from '../lib/prefilter.js';
3
+ function pr(title, labels = []) {
4
+ return { number: 1, title, body: null, labels, author: 'a', merged_at: '', url: '', linked_issues: [] };
5
+ }
6
+ describe('prefilterPRs', () => {
7
+ it('passes user-facing PRs through to toAnalyze', () => {
8
+ const { toAnalyze, prefiltered } = prefilterPRs([pr('Add dark mode support')]);
9
+ expect(toAnalyze).toHaveLength(1);
10
+ expect(prefiltered).toHaveLength(0);
11
+ });
12
+ it('pre-filters conventional commit chore prefix', () => {
13
+ const { toAnalyze, prefiltered } = prefilterPRs([pr('chore: update eslint config')]);
14
+ expect(toAnalyze).toHaveLength(0);
15
+ expect(prefiltered[0].category).toBe('internal');
16
+ });
17
+ it('pre-filters ci prefix', () => {
18
+ const { prefiltered } = prefilterPRs([pr('ci: add node 20 to matrix')]);
19
+ expect(prefiltered).toHaveLength(1);
20
+ });
21
+ it('pre-filters bump commits', () => {
22
+ const { prefiltered } = prefilterPRs([pr('bump lodash from 4.17.20 to 4.17.21')]);
23
+ expect(prefiltered).toHaveLength(1);
24
+ });
25
+ it('pre-filters dependabot PRs', () => {
26
+ const { prefiltered } = prefilterPRs([pr('Bump axios from 1.0.0 to 1.1.0', ['dependabot'])]);
27
+ expect(prefiltered).toHaveLength(1);
28
+ });
29
+ it('pre-filters by dependencies label', () => {
30
+ const { prefiltered } = prefilterPRs([pr('Update packages', ['dependencies'])]);
31
+ expect(prefiltered).toHaveLength(1);
32
+ });
33
+ it('pre-filtered items have visible: false', () => {
34
+ const { prefiltered } = prefilterPRs([pr('chore: cleanup')]);
35
+ expect(prefiltered[0].visible).toBe(false);
36
+ expect(prefiltered[0].confidence).toBe(1);
37
+ });
38
+ it('pre-filters refactor prefix', () => {
39
+ const { prefiltered } = prefilterPRs([pr('refactor: extract auth middleware')]);
40
+ expect(prefiltered).toHaveLength(1);
41
+ });
42
+ it('does not pre-filter a real feature even with chore-like words', () => {
43
+ const { toAnalyze } = prefilterPRs([pr('Add CI status badge to README')]);
44
+ expect(toAnalyze).toHaveLength(1);
45
+ });
46
+ it('handles mixed batch correctly', () => {
47
+ const prs = [
48
+ pr('Add search functionality'),
49
+ pr('chore: bump node version'),
50
+ pr('Fix login timeout bug'),
51
+ pr('ci: update GitHub Actions workflow'),
52
+ ];
53
+ const { toAnalyze, prefiltered } = prefilterPRs(prs);
54
+ expect(toAnalyze).toHaveLength(2);
55
+ expect(prefiltered).toHaveLength(2);
56
+ });
57
+ });
58
+ //# sourceMappingURL=prefilter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefilter.test.js","sourceRoot":"","sources":["../../src/__tests__/prefilter.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAuFnC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiJzD"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6FnC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkJzD"}
@@ -40,6 +40,10 @@ async function validateKey(provider, key) {
40
40
  });
41
41
  return res.ok;
42
42
  }
43
+ if (provider === 'gemini') {
44
+ const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models?key=${key}`);
45
+ return res.ok;
46
+ }
43
47
  return false;
44
48
  }
45
49
  catch {
@@ -61,7 +65,7 @@ async function addKeyForProvider(provider) {
61
65
  spinner.fail(chalk.red('Key validation failed. Check your key and try again.'));
62
66
  process.exit(1);
63
67
  }
64
- const configKey = provider === 'anthropic' ? 'anthropic_key' : 'openai_key';
68
+ const configKey = provider === 'anthropic' ? 'anthropic_key' : provider === 'openai' ? 'openai_key' : 'gemini_key';
65
69
  updateConfig({ [configKey]: key, ai_provider: provider });
66
70
  spinner.succeed(`${AI_PROVIDER_LABELS[provider]} key saved and set as active provider.`);
67
71
  console.log('');
@@ -158,7 +162,7 @@ ${chalk.bold('Commands:')}
158
162
  console.log(chalk.red(' ✖ Invalid selection.'));
159
163
  process.exit(1);
160
164
  }
161
- const configKey = provider === 'anthropic' ? 'anthropic_key' : 'openai_key';
165
+ const configKey = provider === 'anthropic' ? 'anthropic_key' : provider === 'openai' ? 'openai_key' : 'gemini_key';
162
166
  delete config[configKey];
163
167
  if (config.ai_provider === provider) {
164
168
  const other = AI_PROVIDERS.find(p => p !== provider && !!getKeyForProvider(p));
@@ -190,7 +194,8 @@ ${chalk.bold('Commands:')}
190
194
  const spinner = ora({ text: `Checking ${AI_PROVIDER_LABELS[provider]}...` }).start();
191
195
  const valid = await validateKey(provider, key);
192
196
  const source = ((provider === 'anthropic' && process.env['RELEASEHUB_ANTHROPIC_KEY']) ||
193
- (provider === 'openai' && process.env['RELEASEHUB_OPENAI_KEY'])) ? 'env var' : 'config';
197
+ (provider === 'openai' && process.env['RELEASEHUB_OPENAI_KEY']) ||
198
+ (provider === 'gemini' && process.env['RELEASEHUB_GEMINI_KEY'])) ? 'env var' : 'config';
194
199
  if (valid) {
195
200
  spinner.succeed(`${activeTag}${chalk.green(AI_PROVIDER_LABELS[provider])} — valid ${chalk.dim(`(${source}, ${key.slice(0, 10)}...)`)}`);
196
201
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AACpC,OAAO,EACL,UAAU,EAAE,YAAY,EAAE,WAAW,EACrC,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,GAEvD,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,iFAAiF;AAEjF,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACrF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,OAAiB;IACvD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACrF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAA;QACxC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,EAAE;YACnD,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;YACrC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAoB,EAAE,GAAW;IAC1D,IAAI,CAAC;QACH,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;gBAC7D,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,mBAAmB,EAAE,YAAY,EAAE;aACjE,CAAC,CAAA;YACF,OAAO,GAAG,CAAC,EAAE,CAAA;QACf,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,kCAAkC,EAAE;gBAC1D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE;aAC5C,CAAC,CAAA;YACF,OAAO,GAAG,CAAC,EAAE,CAAA;QACf,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAoB;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAEf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAA;IACnF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAA;IAChD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAE9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAA;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAA;IAC3E,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAA;IACzD,OAAO,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAA;IACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAA;IAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACjB,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,EAAE,GAAG,OAAO;SACf,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,6BAA6B,CAAC;SAC1C,WAAW,CAAC,OAAO,EAAE;EACxB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;IACtF,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACjF,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC;KAC7F,CAAC,CAAA;IAEJ,6EAA6E;IAC7E,EAAE;SACC,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAC5B,oBAAoB,EACpB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAC7C,CAAA;YACD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAA;gBAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,6EAA6E;IAC7E,EAAE;SACC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAA;YACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;YAE5E,MAAM,GAAG,GAAG,MAAM,YAAY,CAC5B,2BAA2B,EAC3B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACnB,MAAM,MAAM,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;gBACrC,MAAM,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC3D,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBACrD,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAA;YACtD,CAAC,CAAC,CACH,CAAA;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAAC,CAAC;YACpF,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,OAAM;YAAC,CAAC;YAEnH,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;gBAChF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAA;gBACjE,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;oBAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;oBAAC,OAAM;gBAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;gBAAC,OAAM;YAChD,CAAC;YAED,YAAY,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAA;YACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;YAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,6EAA6E;IAC7E,EAAE;SACC,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;YAC3B,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;YAClE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAAC,OAAM;YAAC,CAAC;YAEtF,MAAM,GAAG,GAAG,MAAM,YAAY,CAC5B,gCAAgC,EAChC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAC1C,CAAA;YACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAAC,CAAC;YAEpF,MAAM,SAAS,GAAG,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAA;YAC3E,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;YACxB,IAAI,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC9E,MAAM,CAAC,WAAW,GAAG,KAAK,CAAA;YAC5B,CAAC;YACD,WAAW,CAAC,MAAM,CAAC,CAAA;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAA;YAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,6EAA6E;IAC7E,EAAE;SACC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAA;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;YAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEf,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;gBACvC,MAAM,QAAQ,GAAG,QAAQ,KAAK,MAAM,CAAA;gBACpC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAA;gBAE/E,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;oBACpF,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;oBAC9C,MAAM,MAAM,GAAG,CACb,CAAC,QAAQ,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;wBACrE,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAChE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;oBAExB,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBACzI,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,uBAAuB,CAAC,CAAA;oBAC7F,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;gBAC3G,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAA;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAA;YACrE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerConfigCommand(program: Command): void;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmBnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C5D"}
@@ -0,0 +1,60 @@
1
+ import chalk from 'chalk';
2
+ import { existsSync, unlinkSync } from 'fs';
3
+ import { homedir } from 'os';
4
+ import { join } from 'path';
5
+ import { readConfig, getActiveProvider, AI_PROVIDER_LABELS } from '../lib/config.js';
6
+ const CONFIG_PATH = join(homedir(), '.releasehub', 'config.json');
7
+ function mask(value) {
8
+ if (value.length <= 8)
9
+ return '••••••••';
10
+ return value.slice(0, 4) + '••••••••' + value.slice(-4);
11
+ }
12
+ function status(value, label) {
13
+ if (!value)
14
+ return chalk.dim(` ${label.padEnd(18)} ${chalk.red('not set')}`);
15
+ return ` ${label.padEnd(18)} ${chalk.green('set')} ${chalk.dim(mask(value))}`;
16
+ }
17
+ export function registerConfigCommand(program) {
18
+ const config = program
19
+ .command('config')
20
+ .description('Show or reset your local ReleaseHub configuration')
21
+ .option('--reset', 'Delete the config file and start fresh')
22
+ .action((options) => {
23
+ if (options.reset) {
24
+ if (existsSync(CONFIG_PATH)) {
25
+ unlinkSync(CONFIG_PATH);
26
+ console.log('');
27
+ console.log(chalk.green(' ✓ Config reset.'));
28
+ console.log(chalk.dim(` Deleted: ${CONFIG_PATH}`));
29
+ console.log(chalk.dim(' Run releasehub auth login and releasehub ai add-key to set up again.'));
30
+ console.log('');
31
+ }
32
+ else {
33
+ console.log('');
34
+ console.log(chalk.dim(' No config file found — nothing to reset.'));
35
+ console.log('');
36
+ }
37
+ return;
38
+ }
39
+ const cfg = readConfig();
40
+ const provider = getActiveProvider();
41
+ console.log('');
42
+ console.log(chalk.bold(' Configuration'));
43
+ console.log(chalk.dim(` ${CONFIG_PATH}`));
44
+ console.log('');
45
+ console.log(status(cfg.github_token, 'GitHub token'));
46
+ console.log('');
47
+ console.log(` ${'AI provider'.padEnd(18)} ${chalk.cyan(AI_PROVIDER_LABELS[provider])}`);
48
+ console.log(status(cfg.anthropic_key, 'Anthropic key'));
49
+ console.log(status(cfg.openai_key, 'OpenAI key'));
50
+ console.log('');
51
+ if (cfg.default_format) {
52
+ console.log(` ${'Default format'.padEnd(18)} ${chalk.cyan(cfg.default_format)}`);
53
+ console.log('');
54
+ }
55
+ console.log(chalk.dim(' releasehub config --reset Delete config and start fresh'));
56
+ console.log('');
57
+ });
58
+ return config;
59
+ }
60
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ export interface GenerateOptions {
7
7
  output?: string;
8
8
  publish?: boolean;
9
9
  quiet?: boolean;
10
+ dryRun?: boolean;
11
+ showCost?: boolean;
10
12
  }
11
13
  export declare function registerGenerateCommand(program: Command): void;
12
14
  //# sourceMappingURL=generate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWnC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyG9D"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYnC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoI9D"}
@@ -7,6 +7,7 @@ import { analyzePullRequests } from '../lib/ai.js';
7
7
  import { getActiveAIKey, getActiveProvider, AI_PROVIDER_LABELS } from '../lib/config.js';
8
8
  import { handleError, AuthError } from '../lib/errors.js';
9
9
  import { formatOutput } from '../lib/formatters.js';
10
+ import { estimateCostForPRs, formatCostEstimate } from '../lib/cost.js';
10
11
  export function registerGenerateCommand(program) {
11
12
  program
12
13
  .command('generate')
@@ -31,6 +32,8 @@ ${chalk.bold('Examples:')}
31
32
  .option('--output <file>', 'Write output to a file instead of printing to stdout')
32
33
  .option('--publish', 'Publish directly as a GitHub Release via the API')
33
34
  .option('--quiet', 'Suppress progress output — prints only the final result (useful in CI)')
35
+ .option('--dry-run', 'Fetch PRs and show what would be analyzed — no AI call, no output written')
36
+ .option('--show-cost', 'Show estimated token usage and cost before generating')
34
37
  .action(async (options) => {
35
38
  try {
36
39
  const log = (msg) => { if (!options.quiet)
@@ -43,8 +46,8 @@ ${chalk.bold('Examples:')}
43
46
  log(chalk.dim(` format : ${options.format}`));
44
47
  log(chalk.dim(` provider : ${AI_PROVIDER_LABELS[getActiveProvider()]}`));
45
48
  log('');
46
- // 2. Check AI key
47
- if (!getActiveAIKey()) {
49
+ // 2. Check AI key (skip in dry-run)
50
+ if (!options.dryRun && !getActiveAIKey()) {
48
51
  throw new AuthError('No AI key found. Run: releasehub ai add-key');
49
52
  }
50
53
  // 3. Fetch PRs
@@ -57,13 +60,36 @@ ${chalk.bold('Examples:')}
57
60
  log('');
58
61
  process.exit(0);
59
62
  }
60
- prSpinner.succeed(`Fetched ${chalk.bold(prs.length)} pull requests`);
61
- // 4. AI analysis
63
+ prSpinner.succeed(`Found ${chalk.bold(prs.length)} pull requests between ${chalk.cyan(options.from)} and ${chalk.cyan(options.to)}`);
64
+ // 4. Dry run — show PR list and cost estimate, skip AI
65
+ if (options.dryRun) {
66
+ log('');
67
+ log(chalk.bold(' Dry run — no AI call will be made'));
68
+ log('');
69
+ prs.forEach((pr, i) => {
70
+ const labels = pr.labels?.join(', ');
71
+ const labelStr = labels ? chalk.dim(` [${labels}]`) : '';
72
+ log(` ${chalk.dim(`${i + 1}.`)} ${pr.title}${labelStr}`);
73
+ });
74
+ log('');
75
+ const estimate = estimateCostForPRs(prs, getActiveProvider());
76
+ log(chalk.dim(` ${prs.length} PRs → ${formatCostEstimate(estimate)}`));
77
+ log(chalk.dim(' Remove --dry-run to generate release notes.'));
78
+ log('');
79
+ process.exit(0);
80
+ }
81
+ // 5. Show cost estimate before AI call (--show-cost flag)
82
+ if (options.showCost) {
83
+ const estimate = estimateCostForPRs(prs, getActiveProvider());
84
+ log(chalk.dim(` cost est. : ${formatCostEstimate(estimate)}`));
85
+ log('');
86
+ }
62
87
  const aiSpinner = ora({ text: 'Analyzing with AI...', isSilent: options.quiet }).start();
63
- const { changes } = await analyzePullRequests(prs);
88
+ const { changes, prefilteredCount } = await analyzePullRequests(prs);
64
89
  const visible = changes.filter(c => c.visible);
65
90
  const hidden = changes.filter(c => !c.visible);
66
- aiSpinner.succeed(`Analyzed ${chalk.bold(visible.length)} user-facing, ${chalk.dim(`${hidden.length} hidden`)}`);
91
+ const prefilteredNote = prefilteredCount > 0 ? chalk.dim(`, ${prefilteredCount} pre-filtered`) : '';
92
+ aiSpinner.succeed(`Analyzed — ${chalk.bold(visible.length)} user-facing, ${chalk.dim(`${hidden.length} hidden`)}${prefilteredNote}`);
67
93
  if (visible.length === 0) {
68
94
  log('');
69
95
  log(chalk.yellow(' No user-facing changes found.'));
@@ -72,9 +98,9 @@ ${chalk.bold('Examples:')}
72
98
  log('');
73
99
  process.exit(0);
74
100
  }
75
- // 5. Format output
101
+ // 7. Format output
76
102
  const output = formatOutput(options.format, { version: options.to, changes });
77
- // 6. Write or print
103
+ // 8. Write or print
78
104
  if (options.output) {
79
105
  writeFileSync(options.output, output, 'utf8');
80
106
  log('');
@@ -85,7 +111,7 @@ ${chalk.bold('Examples:')}
85
111
  // Only print to stdout if not publishing (publish prints the URL instead)
86
112
  process.stdout.write(output);
87
113
  }
88
- // 7. Publish as GitHub Release
114
+ // 9. Publish as GitHub Release
89
115
  if (options.publish) {
90
116
  const publishSpinner = ora({ text: 'Publishing GitHub Release...', isSilent: options.quiet }).start();
91
117
  // --publish only makes sense with github-release format
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ import { createRequire } from 'module';
5
5
  import { registerAuthCommands } from './commands/auth.js';
6
6
  import { registerAICommands } from './commands/ai.js';
7
7
  import { registerGenerateCommand } from './commands/generate.js';
8
+ import { registerConfigCommand } from './commands/config.js';
8
9
  const require = createRequire(import.meta.url);
9
10
  const { version } = require('../package.json');
10
11
  const program = new Command();
@@ -29,5 +30,6 @@ ${chalk.dim('Docs: https://berat.app/releasehub/docs')}
29
30
  registerAuthCommands(program);
30
31
  registerAICommands(program);
31
32
  registerGenerateCommand(program);
33
+ registerConfigCommand(program);
32
34
  program.parse();
33
35
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAA;AAErE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC;KAClD,WAAW,CAAC,OAAO,EAAE;EACtB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACvG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACpG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC;;EAEpG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC;;EAEvE,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC;GACnD,CAAC,CAAA;AAEJ,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAA;AAErE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC;KAClD,WAAW,CAAC,OAAO,EAAE;EACtB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACvG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACpG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC;;EAEpG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC;;EAEvE,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC;GACnD,CAAC,CAAA;AAEJ,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAA"}
package/dist/lib/ai.d.ts CHANGED
@@ -11,5 +11,7 @@ export interface AnalyzedChange {
11
11
  export interface AnalysisResult {
12
12
  changes: AnalyzedChange[];
13
13
  }
14
- export declare function analyzePullRequests(prs: PullRequest[]): Promise<AnalysisResult>;
14
+ export declare function analyzePullRequests(prs: PullRequest[]): Promise<AnalysisResult & {
15
+ prefilteredCount: number;
16
+ }>;
15
17
  //# sourceMappingURL=ai.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/lib/ai.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;AAE3F,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,cAAc,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,cAAc,EAAE,CAAA;CAC1B;AAsHD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAgBrF"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/lib/ai.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;AAE3F,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,cAAc,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,cAAc,EAAE,CAAA;CAC1B;AAkKD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,cAAc,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBpH"}
package/dist/lib/ai.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import Anthropic from '@anthropic-ai/sdk';
2
2
  import OpenAI from 'openai';
3
+ import { GoogleGenerativeAI } from '@google/generative-ai';
3
4
  import { getActiveProvider, getActiveAIKey } from './config.js';
4
5
  import { AuthError, ApiError } from './errors.js';
6
+ import { prefilterPRs } from './prefilter.js';
5
7
  // ─── Prompt ───────────────────────────────────────────────────────────────────
6
8
  const SYSTEM_PROMPT = `You are a release communication assistant for software teams.
7
9
 
@@ -62,6 +64,7 @@ function parseResponse(raw) {
62
64
  // ─── Providers ────────────────────────────────────────────────────────────────
63
65
  const ANTHROPIC_MODEL = 'claude-sonnet-4-5';
64
66
  const OPENAI_MODEL = 'gpt-4o';
67
+ const GEMINI_MODEL = 'gemini-1.5-flash';
65
68
  const BATCH_SIZE = 20;
66
69
  async function analyzeWithAnthropic(prs) {
67
70
  const key = getActiveAIKey();
@@ -71,16 +74,24 @@ async function analyzeWithAnthropic(prs) {
71
74
  const results = [];
72
75
  for (let i = 0; i < prs.length; i += BATCH_SIZE) {
73
76
  const batch = prs.slice(i, i + BATCH_SIZE);
74
- const message = await client.messages.create({
75
- model: ANTHROPIC_MODEL,
76
- max_tokens: 4096,
77
- system: SYSTEM_PROMPT,
78
- messages: [{ role: 'user', content: buildUserPrompt(batch) }],
79
- });
80
- const content = message.content[0];
81
- if (!content || content.type !== 'text')
82
- throw new ApiError('Unexpected response from Anthropic API');
83
- results.push(...parseResponse(content.text));
77
+ try {
78
+ const message = await client.messages.create({
79
+ model: ANTHROPIC_MODEL,
80
+ max_tokens: 4096,
81
+ system: SYSTEM_PROMPT,
82
+ messages: [{ role: 'user', content: buildUserPrompt(batch) }],
83
+ });
84
+ const content = message.content[0];
85
+ if (!content || content.type !== 'text')
86
+ throw new ApiError('Unexpected response from Anthropic API');
87
+ results.push(...parseResponse(content.text));
88
+ }
89
+ catch (err) {
90
+ if (err instanceof Anthropic.AuthenticationError) {
91
+ throw new AuthError('Anthropic API key is invalid or expired. Run: releasehub ai add-key');
92
+ }
93
+ throw err;
94
+ }
84
95
  }
85
96
  return results;
86
97
  }
@@ -92,37 +103,80 @@ async function analyzeWithOpenAI(prs) {
92
103
  const results = [];
93
104
  for (let i = 0; i < prs.length; i += BATCH_SIZE) {
94
105
  const batch = prs.slice(i, i + BATCH_SIZE);
95
- const completion = await client.chat.completions.create({
96
- model: OPENAI_MODEL,
97
- messages: [
98
- { role: 'system', content: SYSTEM_PROMPT },
99
- { role: 'user', content: buildUserPrompt(batch) },
100
- ],
101
- });
102
- const content = completion.choices[0]?.message?.content;
103
- if (!content)
104
- throw new ApiError('Unexpected response from OpenAI API');
105
- results.push(...parseResponse(content));
106
+ try {
107
+ const completion = await client.chat.completions.create({
108
+ model: OPENAI_MODEL,
109
+ messages: [
110
+ { role: 'system', content: SYSTEM_PROMPT },
111
+ { role: 'user', content: buildUserPrompt(batch) },
112
+ ],
113
+ });
114
+ const content = completion.choices[0]?.message?.content;
115
+ if (!content)
116
+ throw new ApiError('Unexpected response from OpenAI API');
117
+ results.push(...parseResponse(content));
118
+ }
119
+ catch (err) {
120
+ if (err instanceof OpenAI.AuthenticationError) {
121
+ throw new AuthError('OpenAI API key is invalid or expired. Run: releasehub ai add-key');
122
+ }
123
+ throw err;
124
+ }
125
+ }
126
+ return results;
127
+ }
128
+ async function analyzeWithGemini(prs) {
129
+ const key = getActiveAIKey();
130
+ if (!key)
131
+ throw new AuthError('No Gemini key found. Run: releasehub ai add-key');
132
+ const client = new GoogleGenerativeAI(key);
133
+ const model = client.getGenerativeModel({
134
+ model: GEMINI_MODEL,
135
+ systemInstruction: SYSTEM_PROMPT,
136
+ });
137
+ const results = [];
138
+ for (let i = 0; i < prs.length; i += BATCH_SIZE) {
139
+ const batch = prs.slice(i, i + BATCH_SIZE);
140
+ try {
141
+ const result = await model.generateContent(buildUserPrompt(batch));
142
+ const content = result.response.text();
143
+ if (!content)
144
+ throw new ApiError('Unexpected response from Gemini API');
145
+ results.push(...parseResponse(content));
146
+ }
147
+ catch (err) {
148
+ if (err instanceof Error && /api.key.not.valid|api_key_invalid|401|403/i.test(err.message)) {
149
+ throw new AuthError('Gemini API key is invalid or expired. Run: releasehub ai add-key');
150
+ }
151
+ throw err;
152
+ }
106
153
  }
107
154
  return results;
108
155
  }
109
156
  // ─── Public API ───────────────────────────────────────────────────────────────
110
157
  export async function analyzePullRequests(prs) {
158
+ const { toAnalyze, prefiltered } = prefilterPRs(prs);
111
159
  const provider = getActiveProvider();
112
- let changes;
113
- switch (provider) {
114
- case 'anthropic':
115
- changes = await analyzeWithAnthropic(prs);
116
- break;
117
- case 'openai':
118
- changes = await analyzeWithOpenAI(prs);
119
- break;
120
- default: throw new ApiError(`Unsupported AI provider: ${provider}`);
160
+ let aiChanges = [];
161
+ if (toAnalyze.length > 0) {
162
+ switch (provider) {
163
+ case 'anthropic':
164
+ aiChanges = await analyzeWithAnthropic(toAnalyze);
165
+ break;
166
+ case 'openai':
167
+ aiChanges = await analyzeWithOpenAI(toAnalyze);
168
+ break;
169
+ case 'gemini':
170
+ aiChanges = await analyzeWithGemini(toAnalyze);
171
+ break;
172
+ default: throw new ApiError(`Unsupported AI provider: ${provider}`);
173
+ }
121
174
  }
175
+ const changes = [...aiChanges, ...prefiltered];
122
176
  const order = {
123
177
  breaking: 0, feature: 1, improvement: 2, bugfix: 3, internal: 4,
124
178
  };
125
179
  changes.sort((a, b) => (order[a.category] ?? 5) - (order[b.category] ?? 5));
126
- return { changes };
180
+ return { changes, prefilteredCount: prefiltered.length };
127
181
  }
128
182
  //# sourceMappingURL=ai.js.map