@releasehub/cli 1.0.1 → 1.1.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 (40) 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 +140 -0
  4. package/dist/__tests__/ai.test.js.map +1 -0
  5. package/dist/__tests__/formatters.test.d.ts +2 -0
  6. package/dist/__tests__/formatters.test.d.ts.map +1 -0
  7. package/dist/__tests__/formatters.test.js +133 -0
  8. package/dist/__tests__/formatters.test.js.map +1 -0
  9. package/dist/__tests__/generate.integration.test.d.ts +2 -0
  10. package/dist/__tests__/generate.integration.test.d.ts.map +1 -0
  11. package/dist/__tests__/generate.integration.test.js +162 -0
  12. package/dist/__tests__/generate.integration.test.js.map +1 -0
  13. package/dist/__tests__/github.test.d.ts +2 -0
  14. package/dist/__tests__/github.test.d.ts.map +1 -0
  15. package/dist/__tests__/github.test.js +44 -0
  16. package/dist/__tests__/github.test.js.map +1 -0
  17. package/dist/commands/ai.d.ts.map +1 -1
  18. package/dist/commands/ai.js +8 -3
  19. package/dist/commands/ai.js.map +1 -1
  20. package/dist/commands/config.d.ts +3 -0
  21. package/dist/commands/config.d.ts.map +1 -0
  22. package/dist/commands/config.js +60 -0
  23. package/dist/commands/config.js.map +1 -0
  24. package/dist/commands/generate.d.ts +1 -0
  25. package/dist/commands/generate.d.ts.map +1 -1
  26. package/dist/commands/generate.js +23 -6
  27. package/dist/commands/generate.js.map +1 -1
  28. package/dist/index.js +2 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/ai.d.ts.map +1 -1
  31. package/dist/lib/ai.js +25 -0
  32. package/dist/lib/ai.js.map +1 -1
  33. package/dist/lib/config.d.ts +3 -1
  34. package/dist/lib/config.d.ts.map +1 -1
  35. package/dist/lib/config.js +11 -1
  36. package/dist/lib/config.js.map +1 -1
  37. package/dist/lib/github.d.ts.map +1 -1
  38. package/dist/lib/github.js +3 -2
  39. package/dist/lib/github.js.map +1 -1
  40. package/package.json +11 -3
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ai.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ai.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,140 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ // parseResponse is not exported — test it indirectly via the output shape
3
+ // We test the logic that surrounds AI calls: prompt building and response parsing
4
+ // ─── buildUserPrompt (extracted logic) ────────────────────────────────────────
5
+ function buildUserPrompt(prs) {
6
+ const list = prs.map(pr => {
7
+ const labels = pr.labels.length ? `\nLabels: ${pr.labels.join(', ')}` : '';
8
+ const issues = pr.linked_issues.length ? `\nLinked issues: ${pr.linked_issues.join(', ')}` : '';
9
+ const body = pr.body ? `\nBody: ${pr.body.slice(0, 300)}` : '';
10
+ return `#${pr.number}: ${pr.title}${labels}${issues}${body}`;
11
+ }).join('\n\n');
12
+ return `Analyze these ${prs.length} pull requests:\n\n${list}`;
13
+ }
14
+ // ─── parseResponse (extracted logic) ──────────────────────────────────────────
15
+ function parseResponse(raw) {
16
+ const cleaned = raw
17
+ .replace(/```(?:json)?\n?/g, '')
18
+ .replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/g, '')
19
+ .trim();
20
+ return JSON.parse(cleaned);
21
+ }
22
+ // ─── Tests ────────────────────────────────────────────────────────────────────
23
+ describe('buildUserPrompt', () => {
24
+ it('includes PR number and title', () => {
25
+ const prompt = buildUserPrompt([
26
+ { number: 42, title: 'Fix login bug', body: null, labels: [], linked_issues: [] },
27
+ ]);
28
+ expect(prompt).toContain('#42: Fix login bug');
29
+ });
30
+ it('includes labels when present', () => {
31
+ const prompt = buildUserPrompt([
32
+ { number: 1, title: 'Add feature', body: null, labels: ['enhancement', 'ui'], linked_issues: [] },
33
+ ]);
34
+ expect(prompt).toContain('Labels: enhancement, ui');
35
+ });
36
+ it('omits labels line when empty', () => {
37
+ const prompt = buildUserPrompt([
38
+ { number: 1, title: 'Add feature', body: null, labels: [], linked_issues: [] },
39
+ ]);
40
+ expect(prompt).not.toContain('Labels:');
41
+ });
42
+ it('includes linked issues when present', () => {
43
+ const prompt = buildUserPrompt([
44
+ { number: 1, title: 'Fix', body: null, labels: [], linked_issues: ['#10', '#11'] },
45
+ ]);
46
+ expect(prompt).toContain('Linked issues: #10, #11');
47
+ });
48
+ it('truncates body to 300 chars', () => {
49
+ const longBody = 'x'.repeat(500);
50
+ const prompt = buildUserPrompt([
51
+ { number: 1, title: 'Fix', body: longBody, labels: [], linked_issues: [] },
52
+ ]);
53
+ const bodyLine = prompt.split('\n').find(l => l.startsWith('Body:'));
54
+ expect(bodyLine.length).toBeLessThanOrEqual(310);
55
+ });
56
+ it('states correct PR count in header', () => {
57
+ const prs = [
58
+ { number: 1, title: 'A', body: null, labels: [], linked_issues: [] },
59
+ { number: 2, title: 'B', body: null, labels: [], linked_issues: [] },
60
+ { number: 3, title: 'C', body: null, labels: [], linked_issues: [] },
61
+ ];
62
+ const prompt = buildUserPrompt(prs);
63
+ expect(prompt).toContain('Analyze these 3 pull requests');
64
+ });
65
+ });
66
+ describe('parseResponse', () => {
67
+ it('parses clean JSON array', () => {
68
+ const raw = JSON.stringify([{ category: 'bugfix', visible: true }]);
69
+ const result = parseResponse(raw);
70
+ expect(result).toHaveLength(1);
71
+ expect(result[0].category).toBe('bugfix');
72
+ });
73
+ it('strips markdown code fences', () => {
74
+ const raw = '```json\n[{"category":"feature"}]\n```';
75
+ const result = parseResponse(raw);
76
+ expect(result[0].category).toBe('feature');
77
+ });
78
+ it('strips code fences without language tag', () => {
79
+ const raw = '```\n[{"category":"bugfix"}]\n```';
80
+ const result = parseResponse(raw);
81
+ expect(result[0].category).toBe('bugfix');
82
+ });
83
+ it('handles multiple items', () => {
84
+ const items = [
85
+ { category: 'feature', visible: true },
86
+ { category: 'internal', visible: false },
87
+ ];
88
+ const result = parseResponse(JSON.stringify(items));
89
+ expect(result).toHaveLength(2);
90
+ });
91
+ it('throws on invalid JSON', () => {
92
+ expect(() => parseResponse('not json')).toThrow();
93
+ });
94
+ });
95
+ // ─── Gemini provider mock ──────────────────────────────────────────────────────
96
+ vi.mock('@google/generative-ai', () => ({
97
+ GoogleGenerativeAI: vi.fn().mockImplementation(() => ({
98
+ getGenerativeModel: vi.fn().mockReturnValue({
99
+ generateContent: vi.fn().mockResolvedValue({
100
+ response: {
101
+ text: () => JSON.stringify([
102
+ {
103
+ original_title: 'Add search',
104
+ rewritten_title: 'You can now search across all items',
105
+ category: 'feature',
106
+ visible: true,
107
+ confidence: 0.95,
108
+ reasoning: 'New user-facing capability',
109
+ },
110
+ ]),
111
+ },
112
+ }),
113
+ }),
114
+ })),
115
+ }));
116
+ vi.mock('../lib/config.js', () => ({
117
+ getActiveProvider: vi.fn(() => 'gemini'),
118
+ getActiveAIKey: vi.fn(() => 'AIza-test-key'),
119
+ }));
120
+ describe('analyzeWithGemini (via analyzePullRequests)', () => {
121
+ it('calls GoogleGenerativeAI with the active key', async () => {
122
+ const { GoogleGenerativeAI } = await import('@google/generative-ai');
123
+ const { analyzePullRequests } = await import('../lib/ai.js');
124
+ await analyzePullRequests([
125
+ { number: 1, title: 'Add search', body: null, labels: [], author: 'alice', merged_at: '', url: '', linked_issues: [] },
126
+ ]);
127
+ expect(GoogleGenerativeAI).toHaveBeenCalledWith('AIza-test-key');
128
+ });
129
+ it('returns parsed AnalyzedChange from Gemini response', async () => {
130
+ const { analyzePullRequests } = await import('../lib/ai.js');
131
+ const result = await analyzePullRequests([
132
+ { number: 1, title: 'Add search', body: null, labels: [], author: 'alice', merged_at: '', url: '', linked_issues: [] },
133
+ ]);
134
+ expect(result.changes).toHaveLength(1);
135
+ expect(result.changes[0].category).toBe('feature');
136
+ expect(result.changes[0].visible).toBe(true);
137
+ expect(result.changes[0].rewritten_title).toContain('search');
138
+ });
139
+ });
140
+ //# sourceMappingURL=ai.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.test.js","sourceRoot":"","sources":["../../src/__tests__/ai.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=formatters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/formatters.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,133 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { formatGitHubRelease, formatChangelog, formatSlack, formatOutput, } from '../lib/formatters.js';
3
+ // ─── Fixtures ─────────────────────────────────────────────────────────────────
4
+ const change = (overrides = {}) => ({
5
+ original_title: 'fix something',
6
+ rewritten_title: 'Fixed an issue with something',
7
+ category: 'bugfix',
8
+ visible: true,
9
+ confidence: 0.95,
10
+ reasoning: 'user-facing fix',
11
+ ...overrides,
12
+ });
13
+ const feature = (title = 'You can now do something new') => change({ category: 'feature', rewritten_title: title });
14
+ const bugfix = (title = 'Fixed an issue where X happened') => change({ category: 'bugfix', rewritten_title: title });
15
+ const breaking = (title = 'Breaking: old behavior removed') => change({ category: 'breaking', rewritten_title: title });
16
+ const internal = () => change({ category: 'internal', visible: false, rewritten_title: 'Refactored internals' });
17
+ // ─── formatGitHubRelease ──────────────────────────────────────────────────────
18
+ describe('formatGitHubRelease', () => {
19
+ it('renders version heading', () => {
20
+ const out = formatGitHubRelease({ version: 'v1.2.0', changes: [feature()] });
21
+ expect(out).toContain('## v1.2.0');
22
+ });
23
+ it('groups changes under correct headers', () => {
24
+ const out = formatGitHubRelease({
25
+ version: 'v1.0.0',
26
+ changes: [feature(), bugfix(), breaking()],
27
+ });
28
+ expect(out).toContain('### ⚠️ Breaking Changes');
29
+ expect(out).toContain('### ✨ New Features');
30
+ expect(out).toContain('### 🐛 Bug Fixes');
31
+ });
32
+ it('filters out internal changes', () => {
33
+ const out = formatGitHubRelease({
34
+ version: 'v1.0.0',
35
+ changes: [feature(), internal()],
36
+ });
37
+ expect(out).not.toContain('Refactored internals');
38
+ expect(out).toContain('You can now do something new');
39
+ });
40
+ it('shows empty state when all changes are internal', () => {
41
+ const out = formatGitHubRelease({ version: 'v1.0.0', changes: [internal()] });
42
+ expect(out).toContain('No user-facing changes');
43
+ });
44
+ it('includes summary sentence', () => {
45
+ const out = formatGitHubRelease({
46
+ version: 'v1.0.0',
47
+ changes: [feature(), bugfix()],
48
+ });
49
+ expect(out).toContain('This release includes');
50
+ });
51
+ it('puts breaking changes before features', () => {
52
+ const out = formatGitHubRelease({
53
+ version: 'v1.0.0',
54
+ changes: [feature(), breaking()],
55
+ });
56
+ const breakingPos = out.indexOf('Breaking Changes');
57
+ const featurePos = out.indexOf('New Features');
58
+ expect(breakingPos).toBeLessThan(featurePos);
59
+ });
60
+ });
61
+ // ─── formatChangelog ──────────────────────────────────────────────────────────
62
+ describe('formatChangelog', () => {
63
+ it('includes today\'s date', () => {
64
+ const today = new Date().toISOString().split('T')[0];
65
+ const out = formatChangelog({ version: 'v1.0.0', changes: [feature()] });
66
+ expect(out).toContain(today);
67
+ });
68
+ it('renders version in Keep a Changelog format', () => {
69
+ const out = formatChangelog({ version: 'v1.0.0', changes: [feature()] });
70
+ expect(out).toMatch(/## \[v1\.0\.0\]/);
71
+ });
72
+ it('filters out internal changes', () => {
73
+ const out = formatChangelog({ version: 'v1.0.0', changes: [feature(), internal()] });
74
+ expect(out).not.toContain('Refactored internals');
75
+ });
76
+ it('shows empty state when all changes are internal', () => {
77
+ const out = formatChangelog({ version: 'v1.0.0', changes: [internal()] });
78
+ expect(out).toContain('No user-facing changes');
79
+ });
80
+ });
81
+ // ─── formatSlack ──────────────────────────────────────────────────────────────
82
+ describe('formatSlack', () => {
83
+ it('starts with bold version', () => {
84
+ const out = formatSlack({ version: 'v1.0.0', changes: [feature()] });
85
+ expect(out).toContain('*🚀 v1.0.0*');
86
+ });
87
+ it('filters out internal changes', () => {
88
+ const out = formatSlack({ version: 'v1.0.0', changes: [feature(), internal()] });
89
+ expect(out).not.toContain('Refactored internals');
90
+ });
91
+ it('always shows breaking changes', () => {
92
+ const manyFeatures = Array.from({ length: 10 }, (_, i) => feature(`Feature ${i}`));
93
+ const out = formatSlack({
94
+ version: 'v1.0.0',
95
+ changes: [breaking(), ...manyFeatures],
96
+ });
97
+ expect(out).toContain('Breaking: old behavior removed');
98
+ });
99
+ it('caps output at 6 items with overflow message', () => {
100
+ const changes = Array.from({ length: 10 }, (_, i) => feature(`Feature ${i}`));
101
+ const out = formatSlack({ version: 'v1.0.0', changes });
102
+ expect(out).toContain('+ 4 more updates');
103
+ });
104
+ it('shows empty state when all changes are internal', () => {
105
+ const out = formatSlack({ version: 'v1.0.0', changes: [internal()] });
106
+ expect(out).toContain('No user-facing changes');
107
+ });
108
+ it('truncates long titles at 80 chars', () => {
109
+ const longTitle = 'A'.repeat(100);
110
+ const out = formatSlack({ version: 'v1.0.0', changes: [feature(longTitle)] });
111
+ const lines = out.split('\n').filter(l => l.includes('A'));
112
+ expect(lines[0].length).toBeLessThanOrEqual(90); // emoji + space + 80 chars
113
+ });
114
+ });
115
+ // ─── formatOutput ─────────────────────────────────────────────────────────────
116
+ describe('formatOutput', () => {
117
+ it('dispatches to github-release', () => {
118
+ const out = formatOutput('github-release', { version: 'v1.0.0', changes: [feature()] });
119
+ expect(out).toContain('## v1.0.0');
120
+ });
121
+ it('dispatches to changelog', () => {
122
+ const out = formatOutput('changelog', { version: 'v1.0.0', changes: [feature()] });
123
+ expect(out).toContain('[v1.0.0]');
124
+ });
125
+ it('dispatches to slack', () => {
126
+ const out = formatOutput('slack', { version: 'v1.0.0', changes: [feature()] });
127
+ expect(out).toContain('🚀');
128
+ });
129
+ it('throws on unknown format', () => {
130
+ expect(() => formatOutput('unknown', { version: 'v1.0.0', changes: [] })).toThrow('Unknown format');
131
+ });
132
+ });
133
+ //# sourceMappingURL=formatters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.test.js","sourceRoot":"","sources":["../../src/__tests__/formatters.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generate.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/generate.integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,162 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ // ─── Mocks ────────────────────────────────────────────────────────────────────
3
+ vi.mock('../lib/github.js', () => ({
4
+ fetchPullRequests: vi.fn(),
5
+ publishGitHubRelease: vi.fn(),
6
+ }));
7
+ vi.mock('../lib/ai.js', () => ({
8
+ analyzePullRequests: vi.fn(),
9
+ }));
10
+ vi.mock('../lib/git.js', () => ({
11
+ detectRepo: vi.fn(() => ({ owner: 'testuser', name: 'testrepo' })),
12
+ parseRepo: vi.fn((s) => {
13
+ const [owner, name] = s.split('/');
14
+ return { owner, name };
15
+ }),
16
+ }));
17
+ vi.mock('../lib/config.js', () => ({
18
+ getActiveProvider: vi.fn(() => 'anthropic'),
19
+ getActiveAIKey: vi.fn(() => 'sk-test-key'),
20
+ AI_PROVIDER_LABELS: { anthropic: 'Anthropic (Claude)', openai: 'OpenAI (GPT-4o)', gemini: 'Google (Gemini 1.5 Flash)' },
21
+ }));
22
+ import { fetchPullRequests, publishGitHubRelease } from '../lib/github.js';
23
+ import { analyzePullRequests } from '../lib/ai.js';
24
+ import { formatOutput } from '../lib/formatters.js';
25
+ // ─── Fixtures ─────────────────────────────────────────────────────────────────
26
+ const mockPRs = [
27
+ {
28
+ number: 101,
29
+ title: 'Add dark mode support',
30
+ body: 'Users can now switch to dark mode in settings.',
31
+ labels: ['enhancement'],
32
+ author: 'alice',
33
+ merged_at: '2024-01-15T10:00:00Z',
34
+ url: 'https://github.com/testuser/testrepo/pull/101',
35
+ linked_issues: ['#55'],
36
+ },
37
+ {
38
+ number: 102,
39
+ title: 'Fix login timeout issue',
40
+ body: 'Fixes #60 — users were getting logged out after 5 minutes.',
41
+ labels: ['bug'],
42
+ author: 'bob',
43
+ merged_at: '2024-01-16T12:00:00Z',
44
+ url: 'https://github.com/testuser/testrepo/pull/102',
45
+ linked_issues: ['#60'],
46
+ },
47
+ {
48
+ number: 103,
49
+ title: 'Bump lodash to 4.17.21',
50
+ body: null,
51
+ labels: ['dependencies'],
52
+ author: 'dependabot',
53
+ merged_at: '2024-01-17T08:00:00Z',
54
+ url: 'https://github.com/testuser/testrepo/pull/103',
55
+ linked_issues: [],
56
+ },
57
+ ];
58
+ const mockChanges = [
59
+ {
60
+ original_title: 'Add dark mode support',
61
+ rewritten_title: 'You can now switch to dark mode in settings',
62
+ category: 'feature',
63
+ visible: true,
64
+ confidence: 0.97,
65
+ reasoning: 'New user-facing capability',
66
+ },
67
+ {
68
+ original_title: 'Fix login timeout issue',
69
+ rewritten_title: 'Fixed an issue where users were logged out unexpectedly',
70
+ category: 'bugfix',
71
+ visible: true,
72
+ confidence: 0.95,
73
+ reasoning: 'User-facing bug fix',
74
+ },
75
+ {
76
+ original_title: 'Bump lodash to 4.17.21',
77
+ rewritten_title: 'Bump lodash to 4.17.21',
78
+ category: 'internal',
79
+ visible: false,
80
+ confidence: 0.99,
81
+ reasoning: 'Dependency update with no user impact',
82
+ },
83
+ ];
84
+ // ─── Tests ────────────────────────────────────────────────────────────────────
85
+ describe('generate pipeline — integration', () => {
86
+ beforeEach(() => {
87
+ vi.clearAllMocks();
88
+ vi.mocked(fetchPullRequests).mockResolvedValue(mockPRs);
89
+ vi.mocked(analyzePullRequests).mockResolvedValue({ changes: mockChanges });
90
+ });
91
+ it('fetches PRs with correct repo and range', async () => {
92
+ await vi.mocked(fetchPullRequests)({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
93
+ expect(fetchPullRequests).toHaveBeenCalledWith({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
94
+ });
95
+ it('passes fetched PRs to AI analysis', async () => {
96
+ const prs = await vi.mocked(fetchPullRequests)({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
97
+ await vi.mocked(analyzePullRequests)(prs);
98
+ expect(analyzePullRequests).toHaveBeenCalledWith(mockPRs);
99
+ });
100
+ it('filters internal changes out of formatted output', () => {
101
+ const output = formatOutput('github-release', { version: 'v1.1.0', changes: mockChanges });
102
+ expect(output).not.toContain('lodash');
103
+ expect(output).not.toContain('Bump');
104
+ });
105
+ it('includes feature and bugfix in formatted output', () => {
106
+ const output = formatOutput('github-release', { version: 'v1.1.0', changes: mockChanges });
107
+ expect(output).toContain('dark mode');
108
+ expect(output).toContain('logged out unexpectedly');
109
+ });
110
+ it('full pipeline: fetch → analyze → format produces valid github-release output', async () => {
111
+ const prs = await vi.mocked(fetchPullRequests)({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
112
+ const { changes } = await vi.mocked(analyzePullRequests)(prs);
113
+ const output = formatOutput('github-release', { version: 'v1.1.0', changes });
114
+ expect(output).toContain('## v1.1.0');
115
+ expect(output).toContain('### ✨ New Features');
116
+ expect(output).toContain('### 🐛 Bug Fixes');
117
+ expect(output).not.toContain('internal');
118
+ expect(output).not.toContain('lodash');
119
+ });
120
+ it('full pipeline: fetch → analyze → format produces valid slack output', async () => {
121
+ const prs = await vi.mocked(fetchPullRequests)({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
122
+ const { changes } = await vi.mocked(analyzePullRequests)(prs);
123
+ const output = formatOutput('slack', { version: 'v1.1.0', changes });
124
+ expect(output).toContain('*🚀 v1.1.0*');
125
+ expect(output).toContain('dark mode');
126
+ expect(output).not.toContain('lodash');
127
+ });
128
+ it('full pipeline: fetch → analyze → format produces valid changelog output', async () => {
129
+ const prs = await vi.mocked(fetchPullRequests)({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
130
+ const { changes } = await vi.mocked(analyzePullRequests)(prs);
131
+ const output = formatOutput('changelog', { version: 'v1.1.0', changes });
132
+ const today = new Date().toISOString().split('T')[0];
133
+ expect(output).toContain(`[v1.1.0] — ${today}`);
134
+ expect(output).toContain('dark mode');
135
+ });
136
+ it('publish step receives correctly formatted release body', async () => {
137
+ vi.mocked(publishGitHubRelease).mockResolvedValue({
138
+ id: 1,
139
+ html_url: 'https://github.com/testuser/testrepo/releases/tag/v1.1.0',
140
+ name: 'v1.1.0',
141
+ });
142
+ const prs = await vi.mocked(fetchPullRequests)({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
143
+ const { changes } = await vi.mocked(analyzePullRequests)(prs);
144
+ const body = formatOutput('github-release', { version: 'v1.1.0', changes });
145
+ await publishGitHubRelease({ owner: 'testuser', name: 'testrepo' }, 'v1.1.0', body);
146
+ expect(publishGitHubRelease).toHaveBeenCalledWith({ owner: 'testuser', name: 'testrepo' }, 'v1.1.0', expect.stringContaining('## v1.1.0'));
147
+ });
148
+ it('handles empty PR list gracefully', async () => {
149
+ vi.mocked(fetchPullRequests).mockResolvedValue([]);
150
+ const prs = await vi.mocked(fetchPullRequests)({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
151
+ expect(prs).toHaveLength(0);
152
+ });
153
+ it('handles all-internal changes gracefully', async () => {
154
+ const allInternal = mockChanges.map(c => ({ ...c, visible: false, category: 'internal' }));
155
+ vi.mocked(analyzePullRequests).mockResolvedValue({ changes: allInternal });
156
+ const prs = await vi.mocked(fetchPullRequests)({ owner: 'testuser', name: 'testrepo' }, 'v1.0.0', 'v1.1.0');
157
+ const { changes } = await vi.mocked(analyzePullRequests)(prs);
158
+ const output = formatOutput('github-release', { version: 'v1.1.0', changes });
159
+ expect(output).toContain('No user-facing changes');
160
+ });
161
+ });
162
+ //# sourceMappingURL=generate.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/generate.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=github.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/github.test.ts"],"names":[],"mappings":""}
@@ -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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"}
@@ -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":"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"}
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,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,+DAA+D,GAAG,EAAE,CACrE,CAAA;YACD,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,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;IAClH,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,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;YAClH,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;wBAC/D,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"}
@@ -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,7 @@ export interface GenerateOptions {
7
7
  output?: string;
8
8
  publish?: boolean;
9
9
  quiet?: boolean;
10
+ dryRun?: boolean;
10
11
  }
11
12
  export declare function registerGenerateCommand(program: Command): void;
12
13
  //# 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;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;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2H9D"}
@@ -31,6 +31,7 @@ ${chalk.bold('Examples:')}
31
31
  .option('--output <file>', 'Write output to a file instead of printing to stdout')
32
32
  .option('--publish', 'Publish directly as a GitHub Release via the API')
33
33
  .option('--quiet', 'Suppress progress output — prints only the final result (useful in CI)')
34
+ .option('--dry-run', 'Fetch PRs and show what would be analyzed — no AI call, no output written')
34
35
  .action(async (options) => {
35
36
  try {
36
37
  const log = (msg) => { if (!options.quiet)
@@ -43,8 +44,8 @@ ${chalk.bold('Examples:')}
43
44
  log(chalk.dim(` format : ${options.format}`));
44
45
  log(chalk.dim(` provider : ${AI_PROVIDER_LABELS[getActiveProvider()]}`));
45
46
  log('');
46
- // 2. Check AI key
47
- if (!getActiveAIKey()) {
47
+ // 2. Check AI key (skip in dry-run)
48
+ if (!options.dryRun && !getActiveAIKey()) {
48
49
  throw new AuthError('No AI key found. Run: releasehub ai add-key');
49
50
  }
50
51
  // 3. Fetch PRs
@@ -58,7 +59,23 @@ ${chalk.bold('Examples:')}
58
59
  process.exit(0);
59
60
  }
60
61
  prSpinner.succeed(`Fetched ${chalk.bold(prs.length)} pull requests`);
61
- // 4. AI analysis
62
+ // 4. Dry run — show PR list, skip AI
63
+ if (options.dryRun) {
64
+ log('');
65
+ log(chalk.bold(' Dry run — no AI call will be made'));
66
+ log('');
67
+ prs.forEach((pr, i) => {
68
+ const labels = pr.labels?.join(', ');
69
+ const labelStr = labels ? chalk.dim(` [${labels}]`) : '';
70
+ log(` ${chalk.dim(`${i + 1}.`)} ${pr.title}${labelStr}`);
71
+ });
72
+ log('');
73
+ log(chalk.dim(` ${prs.length} PRs would be sent to ${AI_PROVIDER_LABELS[getActiveProvider()]} for analysis.`));
74
+ log(chalk.dim(' Remove --dry-run to generate release notes.'));
75
+ log('');
76
+ process.exit(0);
77
+ }
78
+ // 5. AI analysis
62
79
  const aiSpinner = ora({ text: 'Analyzing with AI...', isSilent: options.quiet }).start();
63
80
  const { changes } = await analyzePullRequests(prs);
64
81
  const visible = changes.filter(c => c.visible);
@@ -72,9 +89,9 @@ ${chalk.bold('Examples:')}
72
89
  log('');
73
90
  process.exit(0);
74
91
  }
75
- // 5. Format output
92
+ // 6. Format output
76
93
  const output = formatOutput(options.format, { version: options.to, changes });
77
- // 6. Write or print
94
+ // 7. Write or print
78
95
  if (options.output) {
79
96
  writeFileSync(options.output, output, 'utf8');
80
97
  log('');
@@ -85,7 +102,7 @@ ${chalk.bold('Examples:')}
85
102
  // Only print to stdout if not publishing (publish prints the URL instead)
86
103
  process.stdout.write(output);
87
104
  }
88
- // 7. Publish as GitHub Release
105
+ // 8. Publish as GitHub Release
89
106
  if (options.publish) {
90
107
  const publishSpinner = ora({ text: 'Publishing GitHub Release...', isSilent: options.quiet }).start();
91
108
  // --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"}
@@ -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":"AAKA,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;AA6ID,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAiBrF"}
package/dist/lib/ai.js CHANGED
@@ -1,5 +1,6 @@
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';
5
6
  // ─── Prompt ───────────────────────────────────────────────────────────────────
@@ -62,6 +63,7 @@ function parseResponse(raw) {
62
63
  // ─── Providers ────────────────────────────────────────────────────────────────
63
64
  const ANTHROPIC_MODEL = 'claude-sonnet-4-5';
64
65
  const OPENAI_MODEL = 'gpt-4o';
66
+ const GEMINI_MODEL = 'gemini-1.5-flash';
65
67
  const BATCH_SIZE = 20;
66
68
  async function analyzeWithAnthropic(prs) {
67
69
  const key = getActiveAIKey();
@@ -106,6 +108,26 @@ async function analyzeWithOpenAI(prs) {
106
108
  }
107
109
  return results;
108
110
  }
111
+ async function analyzeWithGemini(prs) {
112
+ const key = getActiveAIKey();
113
+ if (!key)
114
+ throw new AuthError('No Gemini key found. Run: releasehub ai add-key');
115
+ const client = new GoogleGenerativeAI(key);
116
+ const model = client.getGenerativeModel({
117
+ model: GEMINI_MODEL,
118
+ systemInstruction: SYSTEM_PROMPT,
119
+ });
120
+ const results = [];
121
+ for (let i = 0; i < prs.length; i += BATCH_SIZE) {
122
+ const batch = prs.slice(i, i + BATCH_SIZE);
123
+ const result = await model.generateContent(buildUserPrompt(batch));
124
+ const content = result.response.text();
125
+ if (!content)
126
+ throw new ApiError('Unexpected response from Gemini API');
127
+ results.push(...parseResponse(content));
128
+ }
129
+ return results;
130
+ }
109
131
  // ─── Public API ───────────────────────────────────────────────────────────────
110
132
  export async function analyzePullRequests(prs) {
111
133
  const provider = getActiveProvider();
@@ -117,6 +139,9 @@ export async function analyzePullRequests(prs) {
117
139
  case 'openai':
118
140
  changes = await analyzeWithOpenAI(prs);
119
141
  break;
142
+ case 'gemini':
143
+ changes = await analyzeWithGemini(prs);
144
+ break;
120
145
  default: throw new ApiError(`Unsupported AI provider: ${provider}`);
121
146
  }
122
147
  const order = {
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/lib/ai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/lib/ai.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type AIProvider = 'anthropic' | 'openai';
1
+ export type AIProvider = 'anthropic' | 'openai' | 'gemini';
2
2
  export declare const AI_PROVIDERS: AIProvider[];
3
3
  export declare const AI_PROVIDER_LABELS: Record<AIProvider, string>;
4
4
  export declare const AI_PROVIDER_KEY_URLS: Record<AIProvider, string>;
@@ -7,6 +7,7 @@ export interface Config {
7
7
  ai_provider?: AIProvider;
8
8
  anthropic_key?: string;
9
9
  openai_key?: string;
10
+ gemini_key?: string;
10
11
  default_format?: 'github-release' | 'changelog' | 'slack';
11
12
  }
12
13
  export declare function readConfig(): Config;
@@ -15,6 +16,7 @@ export declare function updateConfig(partial: Partial<Config>): void;
15
16
  export declare function getGitHubToken(): string | undefined;
16
17
  export declare function getAnthropicKey(): string | undefined;
17
18
  export declare function getOpenAIKey(): string | undefined;
19
+ export declare function getGeminiKey(): string | undefined;
18
20
  export declare function getActiveProvider(): AIProvider;
19
21
  export declare function getActiveAIKey(): string | undefined;
20
22
  export declare function getKeyForProvider(provider: AIProvider): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAA;AAE/C,eAAO,MAAM,YAAY,EAAE,UAAU,EAA4B,CAAA;AAEjE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAGzD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAG3D,CAAA;AAED,MAAM,WAAW,MAAM;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,gBAAgB,GAAG,WAAW,GAAG,OAAO,CAAA;CAC1D;AAMD,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQhD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAE3D;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAgB,iBAAiB,IAAI,UAAU,CAE9C;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAMnD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAK1E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE1D,eAAO,MAAM,YAAY,EAAE,UAAU,EAAsC,CAAA;AAE3E,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAIzD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAI3D,CAAA;AAED,MAAM,WAAW,MAAM;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,gBAAgB,GAAG,WAAW,GAAG,OAAO,CAAA;CAC1D;AAMD,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQhD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAE3D;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAgB,iBAAiB,IAAI,UAAU,CAI9C;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAOnD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAM1E"}
@@ -4,14 +4,16 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync, chmodSync } from 'f
4
4
  import { ConfigError } from './errors.js';
5
5
  const CONFIG_DIR = join(homedir(), '.releasehub');
6
6
  const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
7
- export const AI_PROVIDERS = ['anthropic', 'openai'];
7
+ export const AI_PROVIDERS = ['anthropic', 'openai', 'gemini'];
8
8
  export const AI_PROVIDER_LABELS = {
9
9
  anthropic: 'Anthropic (Claude)',
10
10
  openai: 'OpenAI (GPT-4o)',
11
+ gemini: 'Google (Gemini 1.5 Flash)',
11
12
  };
12
13
  export const AI_PROVIDER_KEY_URLS = {
13
14
  anthropic: 'https://console.anthropic.com',
14
15
  openai: 'https://platform.openai.com/api-keys',
16
+ gemini: 'https://aistudio.google.com/app/apikey',
15
17
  };
16
18
  function ensureConfigDir() {
17
19
  if (!existsSync(CONFIG_DIR))
@@ -50,7 +52,13 @@ export function getAnthropicKey() {
50
52
  export function getOpenAIKey() {
51
53
  return process.env['RELEASEHUB_OPENAI_KEY'] ?? readConfig().openai_key;
52
54
  }
55
+ export function getGeminiKey() {
56
+ return process.env['RELEASEHUB_GEMINI_KEY'] ?? readConfig().gemini_key;
57
+ }
53
58
  export function getActiveProvider() {
59
+ const envProvider = process.env['RELEASEHUB_AI_PROVIDER'];
60
+ if (envProvider === 'openai' || envProvider === 'anthropic' || envProvider === 'gemini')
61
+ return envProvider;
54
62
  return readConfig().ai_provider ?? 'anthropic';
55
63
  }
56
64
  export function getActiveAIKey() {
@@ -58,12 +66,14 @@ export function getActiveAIKey() {
58
66
  switch (provider) {
59
67
  case 'anthropic': return getAnthropicKey();
60
68
  case 'openai': return getOpenAIKey();
69
+ case 'gemini': return getGeminiKey();
61
70
  }
62
71
  }
63
72
  export function getKeyForProvider(provider) {
64
73
  switch (provider) {
65
74
  case 'anthropic': return getAnthropicKey();
66
75
  case 'openai': return getOpenAIKey();
76
+ case 'gemini': return getGeminiKey();
67
77
  }
68
78
  }
69
79
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAInD,MAAM,CAAC,MAAM,YAAY,GAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,kBAAkB,GAA+B;IAC5D,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;CAC1B,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAA+B;IAC9D,SAAS,EAAE,+BAA+B;IAC1C,MAAM,EAAE,sCAAsC;CAC/C,CAAA;AAUD,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,eAAe,EAAE,CAAA;IACjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAW,CAAA;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAA;IAClE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,eAAe,EAAE,CAAA;IACjB,IAAI,CAAC;QACH,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QACpE,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAA;IACnE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAwB;IACnD,WAAW,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,UAAU,EAAE,CAAC,YAAY,CAAA;AAC5E,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,UAAU,EAAE,CAAC,aAAa,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,UAAU,EAAE,CAAC,UAAU,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,EAAE,CAAC,WAAW,IAAI,WAAW,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,OAAO,eAAe,EAAE,CAAA;QAC1C,KAAK,QAAQ,CAAC,CAAI,OAAO,YAAY,EAAE,CAAA;IACzC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAoB;IACpD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,OAAO,eAAe,EAAE,CAAA;QAC1C,KAAK,QAAQ,CAAC,CAAI,OAAO,YAAY,EAAE,CAAA;IACzC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAkBD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAuC9D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,EAAE,CAAC,CAoExB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CAwBxB"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAmBD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAuC9D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,EAAE,CAAC,CAoExB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CAwBxB"}
@@ -5,7 +5,8 @@ function getOctokit() {
5
5
  const token = getGitHubToken();
6
6
  if (!token)
7
7
  throw new AuthError('No GitHub token found. Run: releasehub auth login');
8
- return new Octokit({ auth: token, request: { fetch } });
8
+ const fetchImpl = typeof fetch !== 'undefined' ? fetch : undefined;
9
+ return new Octokit({ auth: token, ...(fetchImpl ? { request: { fetch: fetchImpl } } : {}) });
9
10
  }
10
11
  /**
11
12
  * Extract linked issue numbers from PR body text.
@@ -14,7 +15,7 @@ function getOctokit() {
14
15
  function extractLinkedIssues(body) {
15
16
  if (!body)
16
17
  return [];
17
- const matches = body.matchAll(/(?:closes?|fixes?|resolves?)\s+#(\d+)/gi);
18
+ const matches = body.matchAll(/(?:closes?|fixe?s?|resolves?)\s+#(\d+)/gi);
18
19
  return [...matches].map(m => `#${m[1]}`);
19
20
  }
20
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@releasehub/cli",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "AI-powered release notes from your terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,10 +12,14 @@
12
12
  "scripts": {
13
13
  "build": "tsc",
14
14
  "dev": "tsc --watch",
15
- "start": "node dist/index.js"
15
+ "start": "node dist/index.js",
16
+ "test": "vitest run",
17
+ "test:watch": "vitest",
18
+ "lint": "eslint src"
16
19
  },
17
20
  "dependencies": {
18
21
  "@anthropic-ai/sdk": "^0.24.0",
22
+ "@google/generative-ai": "^0.24.1",
19
23
  "@octokit/rest": "^21.0.0",
20
24
  "chalk": "^5.3.0",
21
25
  "commander": "^12.1.0",
@@ -23,8 +27,12 @@
23
27
  "ora": "^8.0.1"
24
28
  },
25
29
  "devDependencies": {
30
+ "@eslint/js": "^9.0.0",
26
31
  "@types/node": "^20.0.0",
27
- "typescript": "^5.4.0"
32
+ "eslint": "^9.0.0",
33
+ "typescript": "^5.4.0",
34
+ "typescript-eslint": "^8.0.0",
35
+ "vitest": "^2.0.0"
28
36
  },
29
37
  "engines": {
30
38
  "node": ">=18"