fivocell 5.1.0 → 5.2.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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ci-reporter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-reporter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ci-reporter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const database_1 = require("../walls/06-memory/database/database");
4
+ const TEST_PROJECT = 'test-ci';
5
+ describe('CI Reporter', () => {
6
+ beforeAll(() => {
7
+ const db = (0, database_1.getDb)();
8
+ db.prepare('DELETE FROM memory_events WHERE project = ?').run(TEST_PROJECT);
9
+ });
10
+ test('reportCIBuild records success', () => {
11
+ const { reportCIBuild } = require('../walls/06-memory/stores/ci-reporter');
12
+ const id = reportCIBuild({
13
+ project: TEST_PROJECT, branch: 'main', buildId: 'b1',
14
+ status: 'success', duration: 5000, stage: 'build',
15
+ commitHash: 'abc123', commitMessage: 'fix bug', author: 'test',
16
+ timestamp: new Date().toISOString(), ciPlatform: 'github-actions',
17
+ });
18
+ expect(id).toBeGreaterThan(0);
19
+ const db = (0, database_1.getDb)();
20
+ const row = db.prepare('SELECT * FROM memory_events WHERE id = ?').get(id);
21
+ expect(row.type).toBe('verification');
22
+ expect(row.topic).toBe('ci-build');
23
+ });
24
+ test('reportCIBuild records failure as error', () => {
25
+ const { reportCIBuild } = require('../walls/06-memory/stores/ci-reporter');
26
+ const id = reportCIBuild({
27
+ project: TEST_PROJECT, branch: 'dev', buildId: 'b2',
28
+ status: 'failure', duration: 3000, stage: 'test',
29
+ commitHash: 'def456', commitMessage: 'failing test', author: 'test',
30
+ timestamp: new Date().toISOString(), logSnippet: 'Error: test failed',
31
+ ciPlatform: 'gitlab-ci',
32
+ });
33
+ const db = (0, database_1.getDb)();
34
+ const row = db.prepare('SELECT * FROM memory_events WHERE id = ?').get(id);
35
+ expect(row.type).toBe('error');
36
+ expect(row.topic).toBe('ci-build-failed');
37
+ });
38
+ test('reportCITest records test results', () => {
39
+ const { reportCITest } = require('../walls/06-memory/stores/ci-reporter');
40
+ const id = reportCITest({
41
+ project: TEST_PROJECT, branch: 'main', buildId: 'b3',
42
+ totalTests: 100, passed: 95, failed: 3, skipped: 2,
43
+ duration: 10000, failedTests: ['test1', 'test2', 'test3'],
44
+ coverage: 85, timestamp: new Date().toISOString(),
45
+ });
46
+ expect(id).toBeGreaterThan(0);
47
+ const db = (0, database_1.getDb)();
48
+ const row = db.prepare('SELECT * FROM memory_events WHERE id = ?').get(id);
49
+ expect(row.type).toBe('error');
50
+ expect(row.topic).toBe('ci-test-failed');
51
+ });
52
+ test('reportCITest all passed records verification', () => {
53
+ const { reportCITest } = require('../walls/06-memory/stores/ci-reporter');
54
+ const id = reportCITest({
55
+ project: TEST_PROJECT, branch: 'main', buildId: 'b4',
56
+ totalTests: 50, passed: 50, failed: 0, skipped: 0,
57
+ duration: 5000, failedTests: [], timestamp: new Date().toISOString(),
58
+ });
59
+ const db = (0, database_1.getDb)();
60
+ const row = db.prepare('SELECT * FROM memory_events WHERE id = ?').get(id);
61
+ expect(row.type).toBe('verification');
62
+ expect(row.topic).toBe('ci-test-passed');
63
+ });
64
+ test('reportCIDeploy records deployment', () => {
65
+ const { reportCIDeploy } = require('../walls/06-memory/stores/ci-reporter');
66
+ const id = reportCIDeploy({
67
+ project: TEST_PROJECT, environment: 'production',
68
+ status: 'success', version: 'v1.0.0', duration: 30000,
69
+ timestamp: new Date().toISOString(),
70
+ });
71
+ const db = (0, database_1.getDb)();
72
+ const row = db.prepare('SELECT * FROM memory_events WHERE id = ?').get(id);
73
+ expect(row.type).toBe('publish');
74
+ expect(row.topic).toBe('ci-deploy');
75
+ });
76
+ test('reportCIDeploy failure records error', () => {
77
+ const { reportCIDeploy } = require('../walls/06-memory/stores/ci-reporter');
78
+ const id = reportCIDeploy({
79
+ project: TEST_PROJECT, environment: 'staging',
80
+ status: 'failed', version: 'v1.0.0-rc1', duration: 10000,
81
+ timestamp: new Date().toISOString(),
82
+ });
83
+ const db = (0, database_1.getDb)();
84
+ const row = db.prepare('SELECT * FROM memory_events WHERE id = ?').get(id);
85
+ expect(row.type).toBe('error');
86
+ expect(row.topic).toBe('ci-deploy-failed');
87
+ });
88
+ test('getCISummary aggregates correctly', () => {
89
+ const { getCISummary } = require('../walls/06-memory/stores/ci-reporter');
90
+ const summary = getCISummary(TEST_PROJECT, 30);
91
+ expect(summary.totalBuilds).toBeGreaterThanOrEqual(2);
92
+ expect(summary.successRate).toBeGreaterThanOrEqual(0);
93
+ expect(summary.totalTests).toBeGreaterThanOrEqual(150);
94
+ expect(summary.testPassRate).toBeGreaterThanOrEqual(0);
95
+ });
96
+ test('detectCIFailurePatterns finds patterns', () => {
97
+ const { detectCIFailurePatterns } = require('../walls/06-memory/stores/ci-reporter');
98
+ const patterns = detectCIFailurePatterns(TEST_PROJECT, 30);
99
+ expect(Array.isArray(patterns)).toBe(true);
100
+ });
101
+ test('formatCISummary produces markdown', () => {
102
+ const { getCISummary, formatCISummary } = require('../walls/06-memory/stores/ci-reporter');
103
+ const summary = getCISummary(TEST_PROJECT, 30);
104
+ const formatted = formatCISummary(summary);
105
+ expect(typeof formatted).toBe('string');
106
+ expect(formatted).toContain('CI/CD Summary');
107
+ });
108
+ });
109
+ //# sourceMappingURL=ci-reporter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-reporter.test.js","sourceRoot":"","sources":["../../src/__tests__/ci-reporter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export interface BuildResult {
2
+ project: string;
3
+ branch: string;
4
+ buildId: string;
5
+ status: 'success' | 'failure' | 'cancelled';
6
+ duration: number;
7
+ stage: string;
8
+ commitHash: string;
9
+ commitMessage: string;
10
+ author: string;
11
+ timestamp: string;
12
+ logSnippet?: string;
13
+ ciPlatform: 'github-actions' | 'gitlab-ci' | 'jenkins' | 'circleci' | 'local';
14
+ }
15
+ export interface TestResult {
16
+ project: string;
17
+ branch: string;
18
+ buildId: string;
19
+ totalTests: number;
20
+ passed: number;
21
+ failed: number;
22
+ skipped: number;
23
+ duration: number;
24
+ failedTests: string[];
25
+ coverage?: number;
26
+ timestamp: string;
27
+ }
28
+ export interface DeployResult {
29
+ project: string;
30
+ environment: 'staging' | 'production' | 'preview' | 'local';
31
+ status: 'success' | 'failed' | 'rolled_back';
32
+ version: string;
33
+ duration: number;
34
+ timestamp: string;
35
+ }
36
+ export interface FailurePattern {
37
+ pattern: string;
38
+ count: number;
39
+ firstSeen: string;
40
+ lastSeen: string;
41
+ affectedBranches: string[];
42
+ severity: 'critical' | 'warning' | 'info';
43
+ suggestion: string;
44
+ }
45
+ export interface CISummary {
46
+ totalBuilds: number;
47
+ successRate: number;
48
+ avgBuildDuration: number;
49
+ totalTests: number;
50
+ testPassRate: number;
51
+ deployments: number;
52
+ deploySuccessRate: number;
53
+ failurePatterns: FailurePattern[];
54
+ }
55
+ export declare function reportCIBuild(result: BuildResult): number;
56
+ export declare function reportCITest(result: TestResult): number;
57
+ export declare function reportCIDeploy(result: DeployResult): number;
58
+ export declare function getCISummary(project: string, days?: number): CISummary;
59
+ export declare function detectCIFailurePatterns(project: string, days?: number): FailurePattern[];
60
+ export declare function getBuildTrend(project: string, days?: number): Array<{
61
+ date: string;
62
+ builds: number;
63
+ successes: number;
64
+ failures: number;
65
+ successRate: number;
66
+ }>;
67
+ export declare function formatCISummary(summary: CISummary): string;
68
+ //# sourceMappingURL=ci-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-reporter.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/ci-reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reportCIBuild = reportCIBuild;
4
+ exports.reportCITest = reportCITest;
5
+ exports.reportCIDeploy = reportCIDeploy;
6
+ exports.getCISummary = getCISummary;
7
+ exports.detectCIFailurePatterns = detectCIFailurePatterns;
8
+ exports.getBuildTrend = getBuildTrend;
9
+ exports.formatCISummary = formatCISummary;
10
+ const database_1 = require("../database/database");
11
+ const memory_event_store_1 = require("../stores/memory-event-store");
12
+ function reportCIBuild(result) {
13
+ const topic = result.status === 'failure' ? 'ci-build-failed' : 'ci-build';
14
+ const type = result.status === 'failure' ? 'error' : 'verification';
15
+ const importance = result.status === 'failure' ? 7 : 5;
16
+ const summary = `Build ${result.status}: ${result.stage} [${result.ciPlatform}] ${result.commitHash.slice(0, 8)}`;
17
+ const event = {
18
+ project: result.project,
19
+ branch: result.branch,
20
+ type,
21
+ topic,
22
+ summary,
23
+ details: {
24
+ buildId: result.buildId,
25
+ status: result.status,
26
+ duration: result.duration,
27
+ stage: result.stage,
28
+ commitHash: result.commitHash,
29
+ commitMessage: result.commitMessage,
30
+ author: result.author,
31
+ ciPlatform: result.ciPlatform,
32
+ logSnippet: result.logSnippet,
33
+ source: 'ci-reporter',
34
+ },
35
+ files: [],
36
+ importance,
37
+ tool: 'cell-ci',
38
+ };
39
+ return (0, memory_event_store_1.recordMemoryEvent)(event);
40
+ }
41
+ function reportCITest(result) {
42
+ const allPassed = result.failed === 0;
43
+ const type = allPassed ? 'verification' : 'error';
44
+ const topic = allPassed ? 'ci-test-passed' : 'ci-test-failed';
45
+ const importance = result.failed > 0 ? 7 : 4;
46
+ const summary = `Tests: ${result.passed}/${result.totalTests} passed` +
47
+ (result.failed > 0 ? `, ${result.failed} failed` : '') +
48
+ (result.skipped > 0 ? `, ${result.skipped} skipped` : '') +
49
+ (result.coverage !== undefined ? ` (${result.coverage}% coverage)` : '');
50
+ const event = {
51
+ project: result.project,
52
+ branch: result.branch,
53
+ type,
54
+ topic,
55
+ summary,
56
+ details: {
57
+ buildId: result.buildId,
58
+ totalTests: result.totalTests,
59
+ passed: result.passed,
60
+ failed: result.failed,
61
+ skipped: result.skipped,
62
+ duration: result.duration,
63
+ failedTests: result.failedTests,
64
+ coverage: result.coverage,
65
+ source: 'ci-reporter',
66
+ },
67
+ files: [],
68
+ importance,
69
+ tool: 'cell-ci',
70
+ };
71
+ return (0, memory_event_store_1.recordMemoryEvent)(event);
72
+ }
73
+ function reportCIDeploy(result) {
74
+ const type = result.status === 'success' ? 'publish' : 'error';
75
+ const topic = result.status === 'success' ? 'ci-deploy' : 'ci-deploy-failed';
76
+ const importance = result.status === 'failed' ? 8 : 6;
77
+ const summary = `Deploy ${result.status}: ${result.version} → ${result.environment}` +
78
+ (result.status === 'rolled_back' ? ' (rolled back)' : '');
79
+ const event = {
80
+ project: result.project,
81
+ branch: '',
82
+ type,
83
+ topic,
84
+ summary,
85
+ details: {
86
+ environment: result.environment,
87
+ status: result.status,
88
+ version: result.version,
89
+ duration: result.duration,
90
+ source: 'ci-reporter',
91
+ },
92
+ files: [],
93
+ importance,
94
+ tool: 'cell-ci',
95
+ };
96
+ return (0, memory_event_store_1.recordMemoryEvent)(event);
97
+ }
98
+ function getCISummary(project, days = 30) {
99
+ const db = (0, database_1.getDb)();
100
+ const since = new Date(Date.now() - days * 86400000).toISOString();
101
+ const builds = db.prepare(`
102
+ SELECT details_json, type FROM memory_events
103
+ WHERE project = ? AND topic LIKE 'ci-build%' AND created_at >= ?
104
+ `).all(project, since);
105
+ const tests = db.prepare(`
106
+ SELECT details_json, type FROM memory_events
107
+ WHERE project = ? AND topic LIKE 'ci-test%' AND created_at >= ?
108
+ `).all(project, since);
109
+ const deploys = db.prepare(`
110
+ SELECT details_json, type FROM memory_events
111
+ WHERE project = ? AND topic LIKE 'ci-deploy%' AND created_at >= ?
112
+ `).all(project, since);
113
+ // Build stats
114
+ let totalBuilds = builds.length;
115
+ let successfulBuilds = 0;
116
+ let totalDuration = 0;
117
+ for (const b of builds) {
118
+ try {
119
+ const d = JSON.parse(b.details_json);
120
+ if (d.status === 'success')
121
+ successfulBuilds++;
122
+ totalDuration += d.duration || 0;
123
+ }
124
+ catch { }
125
+ }
126
+ // Test stats
127
+ let totalTests = 0;
128
+ let totalPassed = 0;
129
+ for (const t of tests) {
130
+ try {
131
+ const d = JSON.parse(t.details_json);
132
+ totalTests += d.totalTests || 0;
133
+ totalPassed += d.passed || 0;
134
+ }
135
+ catch { }
136
+ }
137
+ // Deploy stats
138
+ let totalDeploys = deploys.length;
139
+ let successfulDeploys = 0;
140
+ for (const d of deploys) {
141
+ try {
142
+ const details = JSON.parse(d.details_json);
143
+ if (details.status === 'success')
144
+ successfulDeploys++;
145
+ }
146
+ catch { }
147
+ }
148
+ const successRate = totalBuilds > 0 ? Math.round(successfulBuilds / totalBuilds * 100) : 0;
149
+ const testPassRate = totalTests > 0 ? Math.round(totalPassed / totalTests * 100) : 0;
150
+ const deploySuccessRate = totalDeploys > 0 ? Math.round(successfulDeploys / totalDeploys * 100) : 0;
151
+ const avgBuildDuration = totalBuilds > 0 ? Math.round(totalDuration / totalBuilds) : 0;
152
+ const failurePatterns = detectCIFailurePatterns(project, days);
153
+ return {
154
+ totalBuilds,
155
+ successRate,
156
+ avgBuildDuration,
157
+ totalTests,
158
+ testPassRate,
159
+ deployments: totalDeploys,
160
+ deploySuccessRate,
161
+ failurePatterns,
162
+ };
163
+ }
164
+ function detectCIFailurePatterns(project, days = 30) {
165
+ const db = (0, database_1.getDb)();
166
+ const since = new Date(Date.now() - days * 86400000).toISOString();
167
+ const failures = db.prepare(`
168
+ SELECT summary, branch, created_at FROM memory_events
169
+ WHERE project = ? AND type = 'error' AND (topic LIKE 'ci-%')
170
+ AND created_at >= ? ORDER BY created_at
171
+ `).all(project, since);
172
+ if (failures.length === 0)
173
+ return [];
174
+ // Group by summary pattern
175
+ const patternMap = new Map();
176
+ for (const f of failures) {
177
+ // Normalize: remove commit hashes, IDs, timestamps
178
+ const pattern = f.summary
179
+ .replace(/\[[a-f0-9]{8}\]/g, '[hash]')
180
+ .replace(/\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}/g, '[time]')
181
+ .replace(/run[_-]?\d+/gi, '[run]')
182
+ .slice(0, 100);
183
+ const existing = patternMap.get(pattern) || {
184
+ count: 0,
185
+ firstSeen: f.created_at,
186
+ lastSeen: f.created_at,
187
+ branches: new Set(),
188
+ };
189
+ existing.count++;
190
+ if (f.created_at < existing.firstSeen)
191
+ existing.firstSeen = f.created_at;
192
+ if (f.created_at > existing.lastSeen)
193
+ existing.lastSeen = f.created_at;
194
+ existing.branches.add(f.branch);
195
+ patternMap.set(pattern, existing);
196
+ }
197
+ const patterns = [];
198
+ for (const [pattern, data] of patternMap) {
199
+ if (data.count < 2)
200
+ continue; // Only report patterns with 2+ occurrences
201
+ patterns.push({
202
+ pattern,
203
+ count: data.count,
204
+ firstSeen: data.firstSeen,
205
+ lastSeen: data.lastSeen,
206
+ affectedBranches: [...data.branches],
207
+ severity: data.count >= 5 ? 'critical' : data.count >= 2 ? 'warning' : 'info',
208
+ suggestion: data.count >= 5
209
+ ? 'Frequent failure — investigate root cause immediately'
210
+ : 'Recurring failure — consider adding retries or fixing root cause',
211
+ });
212
+ }
213
+ return patterns.sort((a, b) => b.count - a.count).slice(0, 10);
214
+ }
215
+ function getBuildTrend(project, days = 14) {
216
+ const db = (0, database_1.getDb)();
217
+ const since = new Date(Date.now() - days * 86400000).toISOString();
218
+ const rows = db.prepare(`
219
+ SELECT date(created_at) as date, details_json FROM memory_events
220
+ WHERE project = ? AND topic LIKE 'ci-build%' AND created_at >= ?
221
+ ORDER BY date
222
+ `).all(project, since);
223
+ const dayMap = new Map();
224
+ for (const r of rows) {
225
+ const existing = dayMap.get(r.date) || { total: 0, successes: 0 };
226
+ existing.total++;
227
+ try {
228
+ const d = JSON.parse(r.details_json);
229
+ if (d.status === 'success')
230
+ existing.successes++;
231
+ }
232
+ catch { }
233
+ dayMap.set(r.date, existing);
234
+ }
235
+ return [...dayMap.entries()].map(([date, data]) => ({
236
+ date,
237
+ builds: data.total,
238
+ successes: data.successes,
239
+ failures: data.total - data.successes,
240
+ successRate: data.total > 0 ? Math.round(data.successes / data.total * 100) : 0,
241
+ }));
242
+ }
243
+ function formatCISummary(summary) {
244
+ const lines = [];
245
+ lines.push('## CI/CD Summary\n');
246
+ lines.push('| Metric | Value |');
247
+ lines.push('|--------|-------|');
248
+ lines.push(`| Total builds | ${summary.totalBuilds} |`);
249
+ lines.push(`| Build success rate | ${summary.successRate}% |`);
250
+ lines.push(`| Avg build duration | ${formatDuration(summary.avgBuildDuration)} |`);
251
+ lines.push(`| Total tests | ${summary.totalTests} |`);
252
+ lines.push(`| Test pass rate | ${summary.testPassRate}% |`);
253
+ lines.push(`| Deployments | ${summary.deployments} |`);
254
+ lines.push(`| Deploy success rate | ${summary.deploySuccessRate}% |`);
255
+ if (summary.failurePatterns.length > 0) {
256
+ lines.push('\n### Failure Patterns');
257
+ for (const p of summary.failurePatterns) {
258
+ lines.push(`- [${p.severity}] ${p.pattern} (×${p.count}, branches: ${p.affectedBranches.join(', ')})`);
259
+ }
260
+ }
261
+ return lines.join('\n');
262
+ }
263
+ function formatDuration(ms) {
264
+ if (ms === 0)
265
+ return 'N/A';
266
+ if (ms < 60000)
267
+ return `${Math.round(ms / 1000)}s`;
268
+ if (ms < 3600000)
269
+ return `${Math.round(ms / 60000)}m`;
270
+ return `${(ms / 3600000).toFixed(1)}h`;
271
+ }
272
+ //# sourceMappingURL=ci-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-reporter.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/ci-reporter.ts"],"names":[],"mappings":"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"}