reviewflow 3.21.0 → 3.22.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 (96) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/dashboard/index.html +258 -44
  3. package/dist/dashboard/modules/animations.d.ts +164 -0
  4. package/dist/dashboard/modules/animations.d.ts.map +1 -0
  5. package/dist/dashboard/modules/animations.js +405 -0
  6. package/dist/dashboard/modules/animations.js.map +1 -0
  7. package/dist/dashboard/modules/cardCounters.d.ts +16 -1
  8. package/dist/dashboard/modules/cardCounters.d.ts.map +1 -1
  9. package/dist/dashboard/modules/cardCounters.js +36 -2
  10. package/dist/dashboard/modules/cardCounters.js.map +1 -1
  11. package/dist/dashboard/modules/i18n.d.ts.map +1 -1
  12. package/dist/dashboard/modules/i18n.js +20 -2
  13. package/dist/dashboard/modules/i18n.js.map +1 -1
  14. package/dist/dashboard/modules/settingsModal.d.ts.map +1 -1
  15. package/dist/dashboard/modules/settingsModal.js +28 -8
  16. package/dist/dashboard/modules/settingsModal.js.map +1 -1
  17. package/dist/dashboard/styles.css +731 -372
  18. package/dist/main/server.d.ts.map +1 -1
  19. package/dist/main/server.js +22 -0
  20. package/dist/main/server.js.map +1 -1
  21. package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.d.ts +1 -0
  22. package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.d.ts.map +1 -1
  23. package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.js +26 -5
  24. package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.js.map +1 -1
  25. package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.d.ts.map +1 -1
  26. package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.js +1 -0
  27. package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.js.map +1 -1
  28. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
  29. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +3 -0
  30. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  31. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
  32. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +3 -0
  33. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
  34. package/dist/modules/review-execution/entities/reviewContext/reviewContext.gateway.d.ts +1 -0
  35. package/dist/modules/review-execution/entities/reviewContext/reviewContext.gateway.d.ts.map +1 -1
  36. package/dist/modules/review-execution/entities/reviewContext/reviewContext.schema.d.ts +10 -2
  37. package/dist/modules/review-execution/entities/reviewContext/reviewContext.schema.d.ts.map +1 -1
  38. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.d.ts +11 -0
  39. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.d.ts.map +1 -0
  40. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.js +22 -0
  41. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.js.map +1 -0
  42. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.guard.d.ts +10 -0
  43. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.guard.d.ts.map +1 -1
  44. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.d.ts +31 -1
  45. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.d.ts.map +1 -1
  46. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.js +11 -1
  47. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.js.map +1 -1
  48. package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.d.ts +1 -0
  49. package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.d.ts.map +1 -1
  50. package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.js +27 -1
  51. package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.js.map +1 -1
  52. package/dist/modules/review-execution/services/reviewRecovery.service.d.ts +33 -0
  53. package/dist/modules/review-execution/services/reviewRecovery.service.d.ts.map +1 -0
  54. package/dist/modules/review-execution/services/reviewRecovery.service.js +80 -0
  55. package/dist/modules/review-execution/services/reviewRecovery.service.js.map +1 -0
  56. package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.js +2 -0
  57. package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.js.map +1 -1
  58. package/dist/tests/stubs/reviewContextGateway.stub.d.ts +1 -0
  59. package/dist/tests/stubs/reviewContextGateway.stub.d.ts.map +1 -1
  60. package/dist/tests/stubs/reviewContextGateway.stub.js +3 -0
  61. package/dist/tests/stubs/reviewContextGateway.stub.js.map +1 -1
  62. package/dist/tests/units/dashboard/modules/animations.test.d.ts +10 -0
  63. package/dist/tests/units/dashboard/modules/animations.test.d.ts.map +1 -0
  64. package/dist/tests/units/dashboard/modules/animations.test.js +223 -0
  65. package/dist/tests/units/dashboard/modules/animations.test.js.map +1 -0
  66. package/dist/tests/units/dashboard/modules/cardCounters.test.js +56 -0
  67. package/dist/tests/units/dashboard/modules/cardCounters.test.js.map +1 -1
  68. package/dist/tests/units/entities/reviewContext/reviewContext.schema.test.js +1 -0
  69. package/dist/tests/units/entities/reviewContext/reviewContext.schema.test.js.map +1 -1
  70. package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.d.ts +2 -0
  71. package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.d.ts.map +1 -0
  72. package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.js +43 -0
  73. package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.js.map +1 -0
  74. package/dist/tests/units/entities/reviewContext/reviewContextResult.guard.test.js +7 -3
  75. package/dist/tests/units/entities/reviewContext/reviewContextResult.guard.test.js.map +1 -1
  76. package/dist/tests/units/entities/reviewContext/reviewContextResult.schema.test.js +12 -1
  77. package/dist/tests/units/entities/reviewContext/reviewContextResult.schema.test.js.map +1 -1
  78. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +57 -0
  79. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
  80. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
  81. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
  82. package/dist/tests/units/interface-adapters/gateways/reviewContext.fileSystem.gateway.test.js +64 -4
  83. package/dist/tests/units/interface-adapters/gateways/reviewContext.fileSystem.gateway.test.js.map +1 -1
  84. package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.test.js +56 -0
  85. package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.test.js.map +1 -1
  86. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.js +1 -1
  87. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.js.map +1 -1
  88. package/dist/tests/units/services/reviewRecovery.service.test.d.ts +2 -0
  89. package/dist/tests/units/services/reviewRecovery.service.test.d.ts.map +1 -0
  90. package/dist/tests/units/services/reviewRecovery.service.test.js +49 -0
  91. package/dist/tests/units/services/reviewRecovery.service.test.js.map +1 -0
  92. package/dist/tests/units/services/runReviewRecovery.service.test.d.ts +2 -0
  93. package/dist/tests/units/services/runReviewRecovery.service.test.d.ts.map +1 -0
  94. package/dist/tests/units/services/runReviewRecovery.service.test.js +199 -0
  95. package/dist/tests/units/services/runReviewRecovery.service.test.js.map +1 -0
  96. package/package.json +1 -1
@@ -0,0 +1,199 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { runReviewRecovery } from '../../../modules/review-execution/services/reviewRecovery.service.js';
3
+ import { StubReviewContextGateway } from '../../../tests/stubs/reviewContextGateway.stub.js';
4
+ import { ReviewContextFactory } from '../../../tests/factories/reviewContext.factory.js';
5
+ const NOW = new Date('2026-05-25T21:00:00Z').getTime();
6
+ const ONE_HOUR_AGO = new Date('2026-05-25T20:00:00Z').toISOString();
7
+ const ONE_MINUTE_AGO = new Date('2026-05-25T20:59:00Z').toISOString();
8
+ const ONE_HOUR_AGO_TWO_MIN_HEARTBEAT = '2026-05-25T20:58:00Z';
9
+ function silentLogger() {
10
+ return { info: vi.fn(), warn: vi.fn(), error: vi.fn() };
11
+ }
12
+ const EMPTY_SUMMARY = {
13
+ scanned: 0,
14
+ recovered: 0,
15
+ partial: 0,
16
+ backfilled: 0,
17
+ skipped: 0,
18
+ failed: 0,
19
+ };
20
+ describe('runReviewRecovery', () => {
21
+ it('returns zero counters when there are no contexts on disk', async () => {
22
+ const gateway = new StubReviewContextGateway();
23
+ const summary = await runReviewRecovery({
24
+ repositories: [{ localPath: '/repo' }],
25
+ reviewContextGateway: gateway,
26
+ executeActions: vi.fn(),
27
+ now: () => NOW,
28
+ logger: silentLogger(),
29
+ });
30
+ expect(summary).toEqual(EMPTY_SUMMARY);
31
+ });
32
+ it('skips contexts that do not match the predicate (no actions queued)', async () => {
33
+ const gateway = new StubReviewContextGateway();
34
+ gateway.setContext('github-owner/repo-1', ReviewContextFactory.create({
35
+ mergeRequestId: 'github-owner/repo-1',
36
+ createdAt: ONE_MINUTE_AGO,
37
+ progress: { phase: 'completed', currentStep: null },
38
+ actions: [],
39
+ }));
40
+ const executeActions = vi.fn();
41
+ const summary = await runReviewRecovery({
42
+ repositories: [{ localPath: '/repo' }],
43
+ reviewContextGateway: gateway,
44
+ executeActions,
45
+ now: () => NOW,
46
+ logger: silentLogger(),
47
+ });
48
+ expect(summary.skipped).toBe(1);
49
+ expect(summary.recovered).toBe(0);
50
+ expect(executeActions).not.toHaveBeenCalled();
51
+ });
52
+ it('backfills (no post) stale contexts older than the grace window', async () => {
53
+ const gateway = new StubReviewContextGateway();
54
+ gateway.setContext('github-owner/repo-1', ReviewContextFactory.create({
55
+ mergeRequestId: 'github-owner/repo-1',
56
+ createdAt: ONE_HOUR_AGO,
57
+ progress: { phase: 'completed', currentStep: null },
58
+ actions: [{ type: 'POST_COMMENT', body: 'historical' }],
59
+ }));
60
+ const executeActions = vi.fn();
61
+ const summary = await runReviewRecovery({
62
+ repositories: [{ localPath: '/repo' }],
63
+ reviewContextGateway: gateway,
64
+ executeActions,
65
+ now: () => NOW,
66
+ logger: silentLogger(),
67
+ graceWindowMs: 30 * 60 * 1000,
68
+ });
69
+ expect(summary.backfilled).toBe(1);
70
+ expect(summary.recovered).toBe(0);
71
+ expect(executeActions).not.toHaveBeenCalled();
72
+ const result = gateway.read('/repo', 'github-owner/repo-1')?.result;
73
+ expect(result?.kind).toBe('backfilled');
74
+ if (result?.kind === 'backfilled') {
75
+ expect(result.reason).toBe('stale-on-boot');
76
+ expect(result.backfilledAt).toBeDefined();
77
+ }
78
+ });
79
+ it('measures grace window from progress.updatedAt, not createdAt (long-running reviews)', async () => {
80
+ const gateway = new StubReviewContextGateway();
81
+ gateway.setContext('github-owner/repo-long', ReviewContextFactory.create({
82
+ mergeRequestId: 'github-owner/repo-long',
83
+ createdAt: ONE_HOUR_AGO, // started > grace window ago
84
+ progress: {
85
+ phase: 'completed',
86
+ currentStep: null,
87
+ updatedAt: ONE_HOUR_AGO_TWO_MIN_HEARTBEAT, // but kept heartbeating 2 min ago
88
+ },
89
+ actions: [{ type: 'POST_COMMENT', body: 'long but fresh' }],
90
+ }));
91
+ const executeActions = vi.fn().mockResolvedValue({ posted: 1, failed: 0 });
92
+ const summary = await runReviewRecovery({
93
+ repositories: [{ localPath: '/repo' }],
94
+ reviewContextGateway: gateway,
95
+ executeActions,
96
+ now: () => NOW,
97
+ logger: silentLogger(),
98
+ graceWindowMs: 30 * 60 * 1000,
99
+ });
100
+ expect(summary.recovered).toBe(1);
101
+ expect(summary.backfilled).toBe(0);
102
+ expect(executeActions).toHaveBeenCalledOnce();
103
+ });
104
+ it('recovers contexts inside the grace window by calling executeActions then finalizing', async () => {
105
+ const gateway = new StubReviewContextGateway();
106
+ gateway.setContext('github-owner/repo-2', ReviewContextFactory.create({
107
+ mergeRequestId: 'github-owner/repo-2',
108
+ createdAt: ONE_MINUTE_AGO,
109
+ progress: { phase: 'completed', currentStep: null },
110
+ actions: [{ type: 'POST_COMMENT', body: 'fresh' }],
111
+ }));
112
+ const executeActions = vi.fn().mockResolvedValue({ posted: 1, failed: 0 });
113
+ const summary = await runReviewRecovery({
114
+ repositories: [{ localPath: '/repo' }],
115
+ reviewContextGateway: gateway,
116
+ executeActions,
117
+ now: () => NOW,
118
+ logger: silentLogger(),
119
+ graceWindowMs: 30 * 60 * 1000,
120
+ });
121
+ expect(summary.recovered).toBe(1);
122
+ expect(summary.partial).toBe(0);
123
+ expect(summary.backfilled).toBe(0);
124
+ expect(executeActions).toHaveBeenCalledTimes(1);
125
+ const result = gateway.read('/repo', 'github-owner/repo-2')?.result;
126
+ expect(result?.kind).toBe('backfilled');
127
+ if (result?.kind === 'backfilled') {
128
+ expect(result.reason).toBe('recovered-after-restart');
129
+ }
130
+ });
131
+ it('counts partial when some posts succeed and some fail, still finalizing to avoid double-post', async () => {
132
+ const gateway = new StubReviewContextGateway();
133
+ gateway.setContext('github-owner/repo-partial', ReviewContextFactory.create({
134
+ mergeRequestId: 'github-owner/repo-partial',
135
+ createdAt: ONE_MINUTE_AGO,
136
+ progress: { phase: 'completed', currentStep: null },
137
+ actions: [
138
+ { type: 'POST_INLINE_COMMENT', filePath: 'a.ts', line: 1, body: 'a' },
139
+ { type: 'POST_INLINE_COMMENT', filePath: 'b.ts', line: 1, body: 'b' },
140
+ ],
141
+ }));
142
+ const executeActions = vi.fn().mockResolvedValue({ posted: 1, failed: 1 });
143
+ const summary = await runReviewRecovery({
144
+ repositories: [{ localPath: '/repo' }],
145
+ reviewContextGateway: gateway,
146
+ executeActions,
147
+ now: () => NOW,
148
+ logger: silentLogger(),
149
+ graceWindowMs: 30 * 60 * 1000,
150
+ });
151
+ expect(summary.partial).toBe(1);
152
+ expect(summary.recovered).toBe(0);
153
+ expect(summary.failed).toBe(0);
154
+ expect(gateway.read('/repo', 'github-owner/repo-partial')?.result?.kind).toBe('backfilled');
155
+ });
156
+ it('leaves the context unfinalized when zero posts went through (safe to retry next boot)', async () => {
157
+ const gateway = new StubReviewContextGateway();
158
+ gateway.setContext('github-owner/repo-zero', ReviewContextFactory.create({
159
+ mergeRequestId: 'github-owner/repo-zero',
160
+ createdAt: ONE_MINUTE_AGO,
161
+ progress: { phase: 'completed', currentStep: null },
162
+ actions: [{ type: 'POST_COMMENT', body: 'unposted' }],
163
+ }));
164
+ const executeActions = vi.fn().mockResolvedValue({ posted: 0, failed: 1 });
165
+ const summary = await runReviewRecovery({
166
+ repositories: [{ localPath: '/repo' }],
167
+ reviewContextGateway: gateway,
168
+ executeActions,
169
+ now: () => NOW,
170
+ logger: silentLogger(),
171
+ graceWindowMs: 30 * 60 * 1000,
172
+ });
173
+ expect(summary.failed).toBe(1);
174
+ expect(summary.recovered).toBe(0);
175
+ expect(gateway.read('/repo', 'github-owner/repo-zero')?.result).toBeUndefined();
176
+ });
177
+ it('counts a failure when executeActions throws and leaves result unset', async () => {
178
+ const gateway = new StubReviewContextGateway();
179
+ gateway.setContext('github-owner/repo-3', ReviewContextFactory.create({
180
+ mergeRequestId: 'github-owner/repo-3',
181
+ createdAt: ONE_MINUTE_AGO,
182
+ progress: { phase: 'completed', currentStep: null },
183
+ actions: [{ type: 'POST_COMMENT', body: 'flaky' }],
184
+ }));
185
+ const executeActions = vi.fn().mockRejectedValue(new Error('gh api down'));
186
+ const summary = await runReviewRecovery({
187
+ repositories: [{ localPath: '/repo' }],
188
+ reviewContextGateway: gateway,
189
+ executeActions,
190
+ now: () => NOW,
191
+ logger: silentLogger(),
192
+ graceWindowMs: 30 * 60 * 1000,
193
+ });
194
+ expect(summary.failed).toBe(1);
195
+ expect(summary.recovered).toBe(0);
196
+ expect(gateway.read('/repo', 'github-owner/repo-3')?.result).toBeUndefined();
197
+ });
198
+ });
199
+ //# sourceMappingURL=runReviewRecovery.service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runReviewRecovery.service.test.js","sourceRoot":"","sources":["../../../../src/tests/units/services/runReviewRecovery.service.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reviewflow",
3
- "version": "3.21.0",
3
+ "version": "3.22.0",
4
4
  "description": "AI-powered code review automation for GitLab/GitHub using Claude Code",
5
5
  "type": "module",
6
6
  "main": "dist/main/server.js",