@ginkoai/cli 1.7.2 → 1.8.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 (50) hide show
  1. package/dist/commands/insights/index.d.ts +12 -0
  2. package/dist/commands/insights/index.d.ts.map +1 -0
  3. package/dist/commands/insights/index.js +12 -0
  4. package/dist/commands/insights/index.js.map +1 -0
  5. package/dist/commands/insights/insights-command.d.ts +20 -0
  6. package/dist/commands/insights/insights-command.d.ts.map +1 -0
  7. package/dist/commands/insights/insights-command.js +331 -0
  8. package/dist/commands/insights/insights-command.js.map +1 -0
  9. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  10. package/dist/commands/start/start-reflection.js +50 -13
  11. package/dist/commands/start/start-reflection.js.map +1 -1
  12. package/dist/index.js +30 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/insights/analyzers/anti-patterns.d.ts +32 -0
  15. package/dist/lib/insights/analyzers/anti-patterns.d.ts.map +1 -0
  16. package/dist/lib/insights/analyzers/anti-patterns.js +302 -0
  17. package/dist/lib/insights/analyzers/anti-patterns.js.map +1 -0
  18. package/dist/lib/insights/analyzers/efficiency.d.ts +22 -0
  19. package/dist/lib/insights/analyzers/efficiency.d.ts.map +1 -0
  20. package/dist/lib/insights/analyzers/efficiency.js +311 -0
  21. package/dist/lib/insights/analyzers/efficiency.js.map +1 -0
  22. package/dist/lib/insights/analyzers/index.d.ts +24 -0
  23. package/dist/lib/insights/analyzers/index.d.ts.map +1 -0
  24. package/dist/lib/insights/analyzers/index.js +37 -0
  25. package/dist/lib/insights/analyzers/index.js.map +1 -0
  26. package/dist/lib/insights/analyzers/patterns.d.ts +21 -0
  27. package/dist/lib/insights/analyzers/patterns.d.ts.map +1 -0
  28. package/dist/lib/insights/analyzers/patterns.js +327 -0
  29. package/dist/lib/insights/analyzers/patterns.js.map +1 -0
  30. package/dist/lib/insights/analyzers/quality.d.ts +29 -0
  31. package/dist/lib/insights/analyzers/quality.d.ts.map +1 -0
  32. package/dist/lib/insights/analyzers/quality.js +366 -0
  33. package/dist/lib/insights/analyzers/quality.js.map +1 -0
  34. package/dist/lib/insights/data-collector.d.ts +68 -0
  35. package/dist/lib/insights/data-collector.d.ts.map +1 -0
  36. package/dist/lib/insights/data-collector.js +467 -0
  37. package/dist/lib/insights/data-collector.js.map +1 -0
  38. package/dist/lib/insights/index.d.ts +14 -0
  39. package/dist/lib/insights/index.d.ts.map +1 -0
  40. package/dist/lib/insights/index.js +17 -0
  41. package/dist/lib/insights/index.js.map +1 -0
  42. package/dist/lib/insights/types.d.ts +216 -0
  43. package/dist/lib/insights/types.d.ts.map +1 -0
  44. package/dist/lib/insights/types.js +12 -0
  45. package/dist/lib/insights/types.js.map +1 -0
  46. package/dist/templates/ai-instructions-template.d.ts +1 -0
  47. package/dist/templates/ai-instructions-template.d.ts.map +1 -1
  48. package/dist/templates/ai-instructions-template.js +51 -0
  49. package/dist/templates/ai-instructions-template.js.map +1 -1
  50. package/package.json +1 -1
@@ -0,0 +1,467 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-12-15
5
+ * @tags: [insights, data-collection, events, tasks, commits]
6
+ * @related: [types.ts, ../event-logger.ts, ../sprint-parser.ts]
7
+ * @priority: high
8
+ * @complexity: high
9
+ * @dependencies: [fs, path, child_process]
10
+ */
11
+ import * as fs from 'fs';
12
+ import * as path from 'path';
13
+ import { execSync } from 'child_process';
14
+ import { findGinkoRoot } from '../../utils/ginko-root.js';
15
+ // ============================================================================
16
+ // Configuration
17
+ // ============================================================================
18
+ const DEFAULT_DAYS = 30;
19
+ const ADR_PATTERN = /ADR-(\d{3})/gi;
20
+ const TASK_PATTERN = /TASK-(\d+)/gi;
21
+ const PATTERN_PATTERN = /pattern[:\s]+([a-z-]+)/gi;
22
+ /**
23
+ * Collects and aggregates data from all sources for insight analysis.
24
+ * Uses findGinkoRoot to locate .ginko at monorepo root (like git finds .git).
25
+ */
26
+ export async function collectInsightData(options = {}) {
27
+ const days = options.days ?? DEFAULT_DAYS;
28
+ // Find ginko root (traverses up to monorepo root like git)
29
+ const ginkoRoot = await findGinkoRoot(options.projectRoot);
30
+ const projectRoot = ginkoRoot ?? options.projectRoot ?? process.cwd();
31
+ const now = new Date();
32
+ const start = new Date(now.getTime() - days * 24 * 60 * 60 * 1000);
33
+ // Determine user and project IDs
34
+ const userId = options.userId ?? detectUserId(projectRoot);
35
+ const projectId = detectProjectId(projectRoot);
36
+ // Collect data from all sources in parallel
37
+ const [events, tasks, commits, sessions, patterns, gotchas] = await Promise.all([
38
+ collectEvents(projectRoot, userId, start, now),
39
+ collectTasks(projectRoot, start, now),
40
+ collectCommits(projectRoot, start, now),
41
+ collectSessions(projectRoot, userId, start, now),
42
+ collectPatterns(projectRoot),
43
+ collectGotchas(projectRoot),
44
+ ]);
45
+ return {
46
+ userId,
47
+ projectId,
48
+ graphId: options.graphId,
49
+ period: { start, end: now, days },
50
+ events,
51
+ tasks,
52
+ commits,
53
+ sessions,
54
+ patterns,
55
+ gotchas,
56
+ };
57
+ }
58
+ // ============================================================================
59
+ // Event Collection
60
+ // ============================================================================
61
+ /**
62
+ * Collect events from local JSONL files.
63
+ */
64
+ async function collectEvents(projectRoot, userId, start, end) {
65
+ const events = [];
66
+ const userSlug = userId.replace('@', '-at-').replace(/\./g, '-');
67
+ const eventsFile = path.join(projectRoot, '.ginko', 'sessions', userSlug, 'current-events.jsonl');
68
+ if (!fs.existsSync(eventsFile)) {
69
+ return events;
70
+ }
71
+ try {
72
+ const content = fs.readFileSync(eventsFile, 'utf-8');
73
+ const lines = content.trim().split('\n').filter(Boolean);
74
+ for (const line of lines) {
75
+ try {
76
+ const event = JSON.parse(line);
77
+ const timestamp = new Date(event.timestamp);
78
+ // Filter by date range
79
+ if (timestamp < start || timestamp > end) {
80
+ continue;
81
+ }
82
+ events.push({
83
+ id: event.id,
84
+ category: event.category,
85
+ description: event.description,
86
+ timestamp,
87
+ impact: event.impact,
88
+ files: event.files,
89
+ branch: event.branch,
90
+ adrRefs: extractADRRefs(event.description),
91
+ taskRefs: extractTaskRefs(event.description),
92
+ patternRefs: extractPatternRefs(event.description),
93
+ });
94
+ }
95
+ catch {
96
+ // Skip malformed lines
97
+ }
98
+ }
99
+ }
100
+ catch {
101
+ // File read error
102
+ }
103
+ return events.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
104
+ }
105
+ // ============================================================================
106
+ // Task Collection
107
+ // ============================================================================
108
+ /**
109
+ * Collect task data from sprint files.
110
+ */
111
+ async function collectTasks(projectRoot, start, end) {
112
+ const tasks = {
113
+ completed: [],
114
+ inProgress: [],
115
+ abandoned: [],
116
+ paused: [],
117
+ total: 0,
118
+ completionRate: 0,
119
+ };
120
+ const sprintFile = path.join(projectRoot, 'docs', 'sprints', 'CURRENT-SPRINT.md');
121
+ if (!fs.existsSync(sprintFile)) {
122
+ return tasks;
123
+ }
124
+ try {
125
+ const content = fs.readFileSync(sprintFile, 'utf-8');
126
+ const taskBlocks = content.split(/### TASK-\d+:/);
127
+ for (let i = 1; i < taskBlocks.length; i++) {
128
+ const block = taskBlocks[i];
129
+ const task = parseTaskBlock(block, i);
130
+ if (task) {
131
+ tasks.total++;
132
+ switch (task.status) {
133
+ case 'complete':
134
+ tasks.completed.push(task);
135
+ break;
136
+ case 'in_progress':
137
+ // Check if abandoned (in progress > 5 days with no recent events)
138
+ if (task.daysInProgress > 5) {
139
+ tasks.abandoned.push(task);
140
+ }
141
+ else {
142
+ tasks.inProgress.push(task);
143
+ }
144
+ break;
145
+ case 'paused':
146
+ tasks.paused.push(task);
147
+ break;
148
+ default:
149
+ // todo - not started
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ tasks.completionRate =
155
+ tasks.total > 0 ? (tasks.completed.length / tasks.total) * 100 : 0;
156
+ }
157
+ catch {
158
+ // File read error
159
+ }
160
+ return tasks;
161
+ }
162
+ /**
163
+ * Parse a task block from sprint markdown.
164
+ */
165
+ function parseTaskBlock(block, index) {
166
+ const lines = block.split('\n');
167
+ const titleMatch = lines[0]?.match(/^([^(]+)/);
168
+ const title = titleMatch ? titleMatch[1].trim() : `Task ${index}`;
169
+ // Parse status
170
+ let status = 'todo';
171
+ const statusMatch = block.match(/\*\*Status:\*\*\s*\[([ xX@Z])\]/i);
172
+ if (statusMatch) {
173
+ const marker = statusMatch[1].toLowerCase();
174
+ if (marker === 'x')
175
+ status = 'complete';
176
+ else if (marker === '@')
177
+ status = 'in_progress';
178
+ else if (marker === 'z')
179
+ status = 'paused';
180
+ }
181
+ // Parse priority
182
+ const priorityMatch = block.match(/\*\*Priority:\*\*\s*(HIGH|MEDIUM|LOW)/i);
183
+ const priority = priorityMatch ? priorityMatch[1].toUpperCase() : undefined;
184
+ // Parse effort
185
+ const effortMatch = lines[0]?.match(/\((\d+h?)\)/);
186
+ const effort = effortMatch ? effortMatch[1] : undefined;
187
+ // Parse ID
188
+ const idMatch = block.match(/\*\*ID:\*\*\s*(e\d+_s\d+_t\d+)/);
189
+ const id = idMatch ? idMatch[1] : `task-${index}`;
190
+ return {
191
+ id,
192
+ title,
193
+ status,
194
+ daysInProgress: status === 'in_progress' ? estimateDaysInProgress(block) : 0,
195
+ eventCount: 0, // Will be enriched later
196
+ effort,
197
+ priority,
198
+ };
199
+ }
200
+ /**
201
+ * Estimate days in progress based on sprint start.
202
+ */
203
+ function estimateDaysInProgress(block) {
204
+ // For now, return a default. Could be enhanced with git history.
205
+ return 3;
206
+ }
207
+ // ============================================================================
208
+ // Commit Collection
209
+ // ============================================================================
210
+ /**
211
+ * Collect commit data from git log.
212
+ */
213
+ async function collectCommits(projectRoot, start, end) {
214
+ const commits = [];
215
+ try {
216
+ const since = start.toISOString().split('T')[0];
217
+ const until = end.toISOString().split('T')[0];
218
+ // Get commit log with stats
219
+ const output = execSync(`git log --since="${since}" --until="${until}" --format="%H|%s|%aI|%an" --shortstat`, { cwd: projectRoot, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
220
+ const lines = output.trim().split('\n');
221
+ let currentCommit = null;
222
+ for (const line of lines) {
223
+ if (line.includes('|')) {
224
+ // New commit line
225
+ if (currentCommit?.hash) {
226
+ commits.push(currentCommit);
227
+ }
228
+ const [hash, message, timestamp, author] = line.split('|');
229
+ currentCommit = {
230
+ hash: hash.substring(0, 7),
231
+ message,
232
+ timestamp: new Date(timestamp),
233
+ author,
234
+ filesChanged: 0,
235
+ linesAdded: 0,
236
+ linesRemoved: 0,
237
+ adrRefs: extractADRRefs(message),
238
+ taskRefs: extractTaskRefs(message),
239
+ };
240
+ }
241
+ else if (line.includes('file') && currentCommit) {
242
+ // Stats line
243
+ const filesMatch = line.match(/(\d+) files? changed/);
244
+ const addMatch = line.match(/(\d+) insertions?/);
245
+ const delMatch = line.match(/(\d+) deletions?/);
246
+ currentCommit.filesChanged = filesMatch ? parseInt(filesMatch[1]) : 0;
247
+ currentCommit.linesAdded = addMatch ? parseInt(addMatch[1]) : 0;
248
+ currentCommit.linesRemoved = delMatch ? parseInt(delMatch[1]) : 0;
249
+ }
250
+ }
251
+ // Push last commit
252
+ if (currentCommit?.hash) {
253
+ commits.push(currentCommit);
254
+ }
255
+ }
256
+ catch {
257
+ // Git command failed
258
+ }
259
+ return commits;
260
+ }
261
+ // ============================================================================
262
+ // Session Collection
263
+ // ============================================================================
264
+ /**
265
+ * Collect session data from archive files.
266
+ */
267
+ async function collectSessions(projectRoot, userId, start, end) {
268
+ const sessions = [];
269
+ const userSlug = userId.replace('@', '-at-').replace(/\./g, '-');
270
+ const archiveDir = path.join(projectRoot, '.ginko', 'sessions', userSlug, 'archive');
271
+ if (!fs.existsSync(archiveDir)) {
272
+ return sessions;
273
+ }
274
+ try {
275
+ const files = fs.readdirSync(archiveDir).filter((f) => f.endsWith('.md'));
276
+ for (const file of files) {
277
+ // Parse timestamp from filename: session-log-2025-12-15T15-22-55-104Z.md
278
+ const match = file.match(/session-log-(\d{4}-\d{2}-\d{2}T[\d-]+Z)\.md/);
279
+ if (!match)
280
+ continue;
281
+ const timestamp = new Date(match[1].replace(/-/g, ':').replace('T', 'T').slice(0, -4).replace(/:(\d{2}):(\d{2}):(\d{3})/, ':$1:$2.$3'));
282
+ // Filter by date range
283
+ if (timestamp < start || timestamp > end) {
284
+ continue;
285
+ }
286
+ const filePath = path.join(archiveDir, file);
287
+ const content = fs.readFileSync(filePath, 'utf-8');
288
+ sessions.push(parseSessionLog(content, file, timestamp));
289
+ }
290
+ }
291
+ catch {
292
+ // Archive read error
293
+ }
294
+ // Also check current session
295
+ const currentLogFile = path.join(projectRoot, '.ginko', 'sessions', userSlug, 'current-session-log.md');
296
+ if (fs.existsSync(currentLogFile)) {
297
+ try {
298
+ const content = fs.readFileSync(currentLogFile, 'utf-8');
299
+ const stats = fs.statSync(currentLogFile);
300
+ sessions.push(parseSessionLog(content, 'current-session-log.md', stats.mtime));
301
+ }
302
+ catch {
303
+ // Current session read error
304
+ }
305
+ }
306
+ return sessions.sort((a, b) => a.startedAt.getTime() - b.startedAt.getTime());
307
+ }
308
+ /**
309
+ * Parse session log for metrics.
310
+ */
311
+ function parseSessionLog(content, filename, timestamp) {
312
+ // Count events (lines starting with timestamps)
313
+ const eventLines = content.match(/^\d{4}-\d{2}-\d{2}/gm) || [];
314
+ // Check for handoff
315
+ const hasHandoff = content.toLowerCase().includes('handoff') ||
316
+ content.toLowerCase().includes('session summary');
317
+ // Estimate flow state from content
318
+ let flowState = 'cold';
319
+ if (content.includes('Hot (10/10)') || content.includes('Hot (9/10)')) {
320
+ flowState = 'hot';
321
+ }
322
+ else if (content.includes('Warm') || content.includes('(7/10)') || content.includes('(8/10)')) {
323
+ flowState = 'warm';
324
+ }
325
+ // Estimate duration (rough: count of events * avg time between)
326
+ const durationMinutes = Math.max(15, eventLines.length * 10);
327
+ return {
328
+ id: filename.replace('.md', ''),
329
+ startedAt: timestamp,
330
+ durationMinutes,
331
+ flowState,
332
+ eventCount: eventLines.length,
333
+ hasHandoff,
334
+ archiveFile: filename,
335
+ };
336
+ }
337
+ // ============================================================================
338
+ // Pattern Collection
339
+ // ============================================================================
340
+ /**
341
+ * Collect pattern data from local docs.
342
+ */
343
+ async function collectPatterns(projectRoot) {
344
+ const patterns = [];
345
+ const patternsDir = path.join(projectRoot, 'docs', 'patterns');
346
+ if (!fs.existsSync(patternsDir)) {
347
+ return patterns;
348
+ }
349
+ try {
350
+ const files = fs.readdirSync(patternsDir).filter((f) => f.endsWith('.md'));
351
+ for (const file of files) {
352
+ const filePath = path.join(patternsDir, file);
353
+ const content = fs.readFileSync(filePath, 'utf-8');
354
+ // Parse pattern metadata
355
+ const nameMatch = content.match(/^#\s*(.+)/m);
356
+ const name = nameMatch ? nameMatch[1].trim() : file.replace('.md', '');
357
+ const confidenceMatch = content.match(/confidence:\s*(high|medium|low)/i);
358
+ const confidence = (confidenceMatch ? confidenceMatch[1].toLowerCase() : 'low');
359
+ patterns.push({
360
+ id: file.replace('.md', ''),
361
+ name,
362
+ confidence,
363
+ usageCount: 0, // Would need graph API to get actual count
364
+ });
365
+ }
366
+ }
367
+ catch {
368
+ // Patterns directory read error
369
+ }
370
+ return patterns;
371
+ }
372
+ // ============================================================================
373
+ // Gotcha Collection
374
+ // ============================================================================
375
+ /**
376
+ * Collect gotcha data from local docs.
377
+ */
378
+ async function collectGotchas(projectRoot) {
379
+ const gotchas = [];
380
+ const gotchasDir = path.join(projectRoot, 'docs', 'gotchas');
381
+ if (!fs.existsSync(gotchasDir)) {
382
+ return gotchas;
383
+ }
384
+ try {
385
+ const files = fs.readdirSync(gotchasDir).filter((f) => f.endsWith('.md'));
386
+ for (const file of files) {
387
+ const filePath = path.join(gotchasDir, file);
388
+ const content = fs.readFileSync(filePath, 'utf-8');
389
+ // Parse gotcha metadata
390
+ const titleMatch = content.match(/^#\s*(.+)/m);
391
+ const title = titleMatch ? titleMatch[1].trim() : file.replace('.md', '');
392
+ const severityMatch = content.match(/severity:\s*(critical|high|medium|low)/i);
393
+ const severity = (severityMatch ? severityMatch[1].toLowerCase() : 'medium');
394
+ gotchas.push({
395
+ id: file.replace('.md', ''),
396
+ title,
397
+ severity,
398
+ encounters: 0, // Would need graph API to get actual count
399
+ resolutions: 0,
400
+ });
401
+ }
402
+ }
403
+ catch {
404
+ // Gotchas directory read error
405
+ }
406
+ return gotchas;
407
+ }
408
+ // ============================================================================
409
+ // Helper Functions
410
+ // ============================================================================
411
+ /**
412
+ * Detect user ID from git config or session files.
413
+ */
414
+ function detectUserId(projectRoot) {
415
+ try {
416
+ const email = execSync('git config user.email', {
417
+ cwd: projectRoot,
418
+ encoding: 'utf-8',
419
+ }).trim();
420
+ return email;
421
+ }
422
+ catch {
423
+ return 'unknown@local';
424
+ }
425
+ }
426
+ /**
427
+ * Detect project ID from directory name or package.json.
428
+ */
429
+ function detectProjectId(projectRoot) {
430
+ try {
431
+ const pkgPath = path.join(projectRoot, 'package.json');
432
+ if (fs.existsSync(pkgPath)) {
433
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
434
+ return pkg.name || path.basename(projectRoot);
435
+ }
436
+ }
437
+ catch {
438
+ // Fall through
439
+ }
440
+ return path.basename(projectRoot);
441
+ }
442
+ /**
443
+ * Extract ADR references from text.
444
+ */
445
+ function extractADRRefs(text) {
446
+ const matches = text.match(ADR_PATTERN) || [];
447
+ return [...new Set(matches.map((m) => m.toUpperCase()))];
448
+ }
449
+ /**
450
+ * Extract TASK references from text.
451
+ */
452
+ function extractTaskRefs(text) {
453
+ const matches = text.match(TASK_PATTERN) || [];
454
+ return [...new Set(matches.map((m) => m.toUpperCase()))];
455
+ }
456
+ /**
457
+ * Extract pattern references from text.
458
+ */
459
+ function extractPatternRefs(text) {
460
+ const matches = text.match(PATTERN_PATTERN) || [];
461
+ return [...new Set(matches.map((m) => m.toLowerCase().replace('pattern:', '').trim()))];
462
+ }
463
+ // ============================================================================
464
+ // Exports
465
+ // ============================================================================
466
+ export { collectEvents, collectTasks, collectCommits, collectSessions, collectPatterns, collectGotchas, detectUserId, detectProjectId, extractADRRefs, extractTaskRefs, extractPatternRefs, };
467
+ //# sourceMappingURL=data-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-collector.js","sourceRoot":"","sources":["../../../src/lib/insights/data-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @fileType: module-index
3
+ * @status: current
4
+ * @updated: 2025-12-15
5
+ * @tags: [insights, coaching, module]
6
+ * @related: [types.ts, data-collector.ts, analyzers/]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: []
10
+ */
11
+ export * from './types.js';
12
+ export { collectInsightData, collectEvents, collectTasks, collectCommits, collectSessions, collectPatterns, collectGotchas, detectUserId, detectProjectId, type CollectorOptions, } from './data-collector.js';
13
+ export { EfficiencyAnalyzer, PatternAnalyzer, QualityAnalyzer, AntiPatternDetector, getAllAnalyzers, getAnalyzer, } from './analyzers/index.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/insights/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,YAAY,EACZ,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @fileType: module-index
3
+ * @status: current
4
+ * @updated: 2025-12-15
5
+ * @tags: [insights, coaching, module]
6
+ * @related: [types.ts, data-collector.ts, analyzers/]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: []
10
+ */
11
+ // Types
12
+ export * from './types.js';
13
+ // Data Collection
14
+ export { collectInsightData, collectEvents, collectTasks, collectCommits, collectSessions, collectPatterns, collectGotchas, detectUserId, detectProjectId, } from './data-collector.js';
15
+ // Analyzers
16
+ export { EfficiencyAnalyzer, PatternAnalyzer, QualityAnalyzer, AntiPatternDetector, getAllAnalyzers, getAnalyzer, } from './analyzers/index.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/insights/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,YAAY,EACZ,eAAe,GAEhB,MAAM,qBAAqB,CAAC;AAE7B,YAAY;AACZ,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC"}