@ginkoai/cli 1.7.2 → 2.0.0-beta.2

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 (101) hide show
  1. package/dist/commands/assign.d.ts +19 -0
  2. package/dist/commands/assign.d.ts.map +1 -0
  3. package/dist/commands/assign.js +200 -0
  4. package/dist/commands/assign.js.map +1 -0
  5. package/dist/commands/epic.d.ts.map +1 -1
  6. package/dist/commands/epic.js +48 -23
  7. package/dist/commands/epic.js.map +1 -1
  8. package/dist/commands/graph/api-client.d.ts +1 -0
  9. package/dist/commands/graph/api-client.d.ts.map +1 -1
  10. package/dist/commands/graph/api-client.js.map +1 -1
  11. package/dist/commands/insights/index.d.ts +12 -0
  12. package/dist/commands/insights/index.d.ts.map +1 -0
  13. package/dist/commands/insights/index.js +12 -0
  14. package/dist/commands/insights/index.js.map +1 -0
  15. package/dist/commands/insights/insights-command.d.ts +20 -0
  16. package/dist/commands/insights/insights-command.d.ts.map +1 -0
  17. package/dist/commands/insights/insights-command.js +369 -0
  18. package/dist/commands/insights/insights-command.js.map +1 -0
  19. package/dist/commands/principles/seed.d.ts +26 -0
  20. package/dist/commands/principles/seed.d.ts.map +1 -0
  21. package/dist/commands/principles/seed.js +150 -0
  22. package/dist/commands/principles/seed.js.map +1 -0
  23. package/dist/commands/start/start-reflection.d.ts +11 -0
  24. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  25. package/dist/commands/start/start-reflection.js +149 -16
  26. package/dist/commands/start/start-reflection.js.map +1 -1
  27. package/dist/commands/sync/index.d.ts +21 -0
  28. package/dist/commands/sync/index.d.ts.map +1 -0
  29. package/dist/commands/sync/index.js +38 -0
  30. package/dist/commands/sync/index.js.map +1 -0
  31. package/dist/commands/sync/node-syncer.d.ts +58 -0
  32. package/dist/commands/sync/node-syncer.d.ts.map +1 -0
  33. package/dist/commands/sync/node-syncer.js +192 -0
  34. package/dist/commands/sync/node-syncer.js.map +1 -0
  35. package/dist/commands/sync/sprint-syncer.d.ts +42 -0
  36. package/dist/commands/sync/sprint-syncer.d.ts.map +1 -0
  37. package/dist/commands/sync/sprint-syncer.js +274 -0
  38. package/dist/commands/sync/sprint-syncer.js.map +1 -0
  39. package/dist/commands/sync/sync-command.d.ts +16 -0
  40. package/dist/commands/sync/sync-command.d.ts.map +1 -0
  41. package/dist/commands/sync/sync-command.js +429 -0
  42. package/dist/commands/sync/sync-command.js.map +1 -0
  43. package/dist/commands/sync/types.d.ts +86 -0
  44. package/dist/commands/sync/types.d.ts.map +1 -0
  45. package/dist/commands/sync/types.js +12 -0
  46. package/dist/commands/sync/types.js.map +1 -0
  47. package/dist/core/session-log-manager.d.ts +3 -1
  48. package/dist/core/session-log-manager.d.ts.map +1 -1
  49. package/dist/core/session-log-manager.js +5 -3
  50. package/dist/core/session-log-manager.js.map +1 -1
  51. package/dist/data/standard-principles.d.ts +43 -0
  52. package/dist/data/standard-principles.d.ts.map +1 -0
  53. package/dist/data/standard-principles.js +323 -0
  54. package/dist/data/standard-principles.js.map +1 -0
  55. package/dist/index.js +54 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib/insights/analyzers/anti-patterns.d.ts +32 -0
  58. package/dist/lib/insights/analyzers/anti-patterns.d.ts.map +1 -0
  59. package/dist/lib/insights/analyzers/anti-patterns.js +302 -0
  60. package/dist/lib/insights/analyzers/anti-patterns.js.map +1 -0
  61. package/dist/lib/insights/analyzers/efficiency.d.ts +22 -0
  62. package/dist/lib/insights/analyzers/efficiency.d.ts.map +1 -0
  63. package/dist/lib/insights/analyzers/efficiency.js +311 -0
  64. package/dist/lib/insights/analyzers/efficiency.js.map +1 -0
  65. package/dist/lib/insights/analyzers/index.d.ts +24 -0
  66. package/dist/lib/insights/analyzers/index.d.ts.map +1 -0
  67. package/dist/lib/insights/analyzers/index.js +37 -0
  68. package/dist/lib/insights/analyzers/index.js.map +1 -0
  69. package/dist/lib/insights/analyzers/patterns.d.ts +21 -0
  70. package/dist/lib/insights/analyzers/patterns.d.ts.map +1 -0
  71. package/dist/lib/insights/analyzers/patterns.js +337 -0
  72. package/dist/lib/insights/analyzers/patterns.js.map +1 -0
  73. package/dist/lib/insights/analyzers/quality.d.ts +29 -0
  74. package/dist/lib/insights/analyzers/quality.d.ts.map +1 -0
  75. package/dist/lib/insights/analyzers/quality.js +371 -0
  76. package/dist/lib/insights/analyzers/quality.js.map +1 -0
  77. package/dist/lib/insights/data-collector.d.ts +68 -0
  78. package/dist/lib/insights/data-collector.d.ts.map +1 -0
  79. package/dist/lib/insights/data-collector.js +514 -0
  80. package/dist/lib/insights/data-collector.js.map +1 -0
  81. package/dist/lib/insights/index.d.ts +14 -0
  82. package/dist/lib/insights/index.d.ts.map +1 -0
  83. package/dist/lib/insights/index.js +17 -0
  84. package/dist/lib/insights/index.js.map +1 -0
  85. package/dist/lib/insights/scheduler.d.ts +71 -0
  86. package/dist/lib/insights/scheduler.d.ts.map +1 -0
  87. package/dist/lib/insights/scheduler.js +126 -0
  88. package/dist/lib/insights/scheduler.js.map +1 -0
  89. package/dist/lib/insights/types.d.ts +216 -0
  90. package/dist/lib/insights/types.d.ts.map +1 -0
  91. package/dist/lib/insights/types.js +12 -0
  92. package/dist/lib/insights/types.js.map +1 -0
  93. package/dist/templates/ai-instructions-template.d.ts +1 -0
  94. package/dist/templates/ai-instructions-template.d.ts.map +1 -1
  95. package/dist/templates/ai-instructions-template.js +51 -0
  96. package/dist/templates/ai-instructions-template.js.map +1 -1
  97. package/package.json +1 -1
  98. package/dist/lib/__tests__/task-timeout.test.d.ts +0 -12
  99. package/dist/lib/__tests__/task-timeout.test.d.ts.map +0 -1
  100. package/dist/lib/__tests__/task-timeout.test.js +0 -278
  101. package/dist/lib/__tests__/task-timeout.test.js.map +0 -1
@@ -0,0 +1,371 @@
1
+ /**
2
+ * @fileType: analyzer
3
+ * @status: current
4
+ * @updated: 2025-12-15
5
+ * @tags: [insights, analyzer, quality, tasks, commits]
6
+ * @related: [../types.ts, ../data-collector.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: []
10
+ */
11
+ // ============================================================================
12
+ // Configuration
13
+ // ============================================================================
14
+ const THRESHOLDS = {
15
+ // Task completion rate (percentage)
16
+ taskCompletion: {
17
+ excellent: 90, // > 90% is excellent
18
+ good: 70, // > 70% is good
19
+ warning: 50, // < 50% is warning
20
+ },
21
+ // Commits per session
22
+ commitsPerSession: {
23
+ excellent: 5, // > 5 is excellent
24
+ good: 2, // > 2 is good
25
+ warning: 0, // 0 is warning
26
+ },
27
+ // Average commit size (lines changed)
28
+ commitSize: {
29
+ optimal: { min: 20, max: 150 }, // 20-150 lines is optimal
30
+ warning: { max: 500 }, // > 500 lines is warning
31
+ },
32
+ // Event logging rate (events per session)
33
+ // Replaces handoff metric per PATTERN-001: Ephemeral Sessions
34
+ // Context is preserved via defensive logging, not handoffs
35
+ eventLoggingRate: {
36
+ excellent: 5, // > 5 events per session is excellent
37
+ good: 2, // > 2 is good
38
+ warning: 1, // < 1 is warning (silent sessions)
39
+ },
40
+ };
41
+ // ============================================================================
42
+ // Collaboration Quality Analyzer
43
+ // ============================================================================
44
+ export class QualityAnalyzer {
45
+ category = 'quality';
46
+ async analyze(data) {
47
+ const insights = [];
48
+ // Analyze each metric
49
+ insights.push(...this.analyzeTaskCompletion(data));
50
+ insights.push(...this.analyzeCommitFrequency(data));
51
+ insights.push(...this.analyzeCommitSize(data));
52
+ insights.push(...this.analyzeHandoffQuality(data));
53
+ insights.push(...this.analyzeSprintVelocity(data));
54
+ return insights;
55
+ }
56
+ // ===========================================================================
57
+ // Task Completion Analysis
58
+ // ===========================================================================
59
+ analyzeTaskCompletion(data) {
60
+ const insights = [];
61
+ if (data.tasks.total === 0) {
62
+ insights.push({
63
+ category: this.category,
64
+ severity: 'info',
65
+ title: 'No tasks tracked',
66
+ description: 'Use sprint files to track task progress and get completion insights.',
67
+ scoreImpact: 0,
68
+ evidence: [],
69
+ recommendations: ['Create docs/sprints/CURRENT-SPRINT.md with tasks'],
70
+ });
71
+ return insights;
72
+ }
73
+ const completionRate = data.tasks.completionRate;
74
+ const evidence = data.tasks.completed.slice(0, 3).map(t => ({
75
+ type: 'task',
76
+ id: t.id,
77
+ description: `Completed: ${t.title}`,
78
+ }));
79
+ if (completionRate >= THRESHOLDS.taskCompletion.excellent) {
80
+ insights.push({
81
+ category: this.category,
82
+ severity: 'info',
83
+ title: 'Excellent task completion',
84
+ description: `${Math.round(completionRate)}% task completion rate. You're executing consistently.`,
85
+ metricName: 'task_completion_rate',
86
+ metricValue: completionRate,
87
+ metricTarget: THRESHOLDS.taskCompletion.excellent,
88
+ metricUnit: '%',
89
+ scoreImpact: 15,
90
+ evidence,
91
+ recommendations: [],
92
+ });
93
+ }
94
+ else if (completionRate >= THRESHOLDS.taskCompletion.good) {
95
+ insights.push({
96
+ category: this.category,
97
+ severity: 'info',
98
+ title: 'Good task completion',
99
+ description: `${Math.round(completionRate)}% task completion rate. Room for improvement.`,
100
+ metricName: 'task_completion_rate',
101
+ metricValue: completionRate,
102
+ metricTarget: THRESHOLDS.taskCompletion.good,
103
+ metricUnit: '%',
104
+ scoreImpact: 5,
105
+ evidence,
106
+ recommendations: ['Break large tasks into smaller, completable chunks'],
107
+ });
108
+ }
109
+ else if (completionRate < THRESHOLDS.taskCompletion.warning) {
110
+ const inProgressCount = data.tasks.inProgress.length + data.tasks.abandoned.length;
111
+ insights.push({
112
+ category: this.category,
113
+ severity: 'warning',
114
+ title: 'Low task completion',
115
+ description: `Only ${Math.round(completionRate)}% completion with ${inProgressCount} tasks stuck in progress.`,
116
+ metricName: 'task_completion_rate',
117
+ metricValue: completionRate,
118
+ metricTarget: THRESHOLDS.taskCompletion.good,
119
+ metricUnit: '%',
120
+ scoreImpact: -20,
121
+ evidence: data.tasks.inProgress.slice(0, 3).map(t => ({
122
+ type: 'task',
123
+ id: t.id,
124
+ description: `In progress ${t.daysInProgress} days: ${t.title}`,
125
+ })),
126
+ recommendations: [
127
+ 'Review in-progress tasks and identify blockers',
128
+ 'Break large tasks into smaller deliverables',
129
+ 'Consider pausing or descoping stuck tasks',
130
+ ],
131
+ });
132
+ }
133
+ return insights;
134
+ }
135
+ // ===========================================================================
136
+ // Commit Frequency Analysis
137
+ // ===========================================================================
138
+ analyzeCommitFrequency(data) {
139
+ const insights = [];
140
+ if (data.sessions.length === 0)
141
+ return insights;
142
+ const commitsPerSession = data.commits.length / data.sessions.length;
143
+ const evidence = data.commits.slice(0, 3).map(c => ({
144
+ type: 'commit',
145
+ id: c.hash,
146
+ description: c.message.substring(0, 80),
147
+ timestamp: c.timestamp,
148
+ }));
149
+ if (commitsPerSession >= THRESHOLDS.commitsPerSession.excellent) {
150
+ insights.push({
151
+ category: this.category,
152
+ severity: 'info',
153
+ title: 'Strong commit frequency',
154
+ description: `${commitsPerSession.toFixed(1)} commits per session. Frequent commits improve traceability.`,
155
+ metricName: 'commits_per_session',
156
+ metricValue: commitsPerSession,
157
+ metricTarget: THRESHOLDS.commitsPerSession.excellent,
158
+ scoreImpact: 10,
159
+ evidence,
160
+ recommendations: [],
161
+ });
162
+ }
163
+ else if (commitsPerSession >= THRESHOLDS.commitsPerSession.good) {
164
+ insights.push({
165
+ category: this.category,
166
+ severity: 'info',
167
+ title: 'Good commit frequency',
168
+ description: `${commitsPerSession.toFixed(1)} commits per session.`,
169
+ metricName: 'commits_per_session',
170
+ metricValue: commitsPerSession,
171
+ scoreImpact: 5,
172
+ evidence,
173
+ recommendations: ['Consider committing more frequently'],
174
+ });
175
+ }
176
+ else if (commitsPerSession <= THRESHOLDS.commitsPerSession.warning) {
177
+ insights.push({
178
+ category: this.category,
179
+ severity: 'suggestion',
180
+ title: 'Low commit frequency',
181
+ description: `${commitsPerSession.toFixed(1)} commits per session. More frequent commits improve recovery and review.`,
182
+ metricName: 'commits_per_session',
183
+ metricValue: commitsPerSession,
184
+ metricTarget: THRESHOLDS.commitsPerSession.good,
185
+ scoreImpact: -10,
186
+ evidence: [],
187
+ recommendations: [
188
+ 'Commit after completing each logical change',
189
+ 'Use atomic commits for better git history',
190
+ 'Commit before major refactors or experiments',
191
+ ],
192
+ });
193
+ }
194
+ return insights;
195
+ }
196
+ // ===========================================================================
197
+ // Commit Size Analysis
198
+ // ===========================================================================
199
+ analyzeCommitSize(data) {
200
+ const insights = [];
201
+ if (data.commits.length === 0)
202
+ return insights;
203
+ const avgSize = Math.round(data.commits.reduce((sum, c) => sum + c.linesAdded + c.linesRemoved, 0) /
204
+ data.commits.length);
205
+ const largeCommits = data.commits.filter(c => c.linesAdded + c.linesRemoved > THRESHOLDS.commitSize.warning.max);
206
+ const evidence = largeCommits.slice(0, 3).map(c => ({
207
+ type: 'commit',
208
+ id: c.hash,
209
+ description: `${c.linesAdded + c.linesRemoved} lines changed: ${c.message.substring(0, 80)}${c.message.length > 80 ? '...' : ''}`,
210
+ timestamp: c.timestamp,
211
+ }));
212
+ if (avgSize >= THRESHOLDS.commitSize.optimal.min &&
213
+ avgSize <= THRESHOLDS.commitSize.optimal.max) {
214
+ insights.push({
215
+ category: this.category,
216
+ severity: 'info',
217
+ title: 'Optimal commit size',
218
+ description: `Average ${avgSize} lines per commit. This size is easy to review and revert.`,
219
+ metricName: 'avg_commit_size',
220
+ metricValue: avgSize,
221
+ metricUnit: 'lines',
222
+ scoreImpact: 10,
223
+ evidence: [],
224
+ recommendations: [],
225
+ });
226
+ }
227
+ else if (largeCommits.length > 0) {
228
+ insights.push({
229
+ category: this.category,
230
+ severity: 'suggestion',
231
+ title: 'Large commits detected',
232
+ description: `${largeCommits.length} commits exceed 500 lines. Smaller commits are easier to review.`,
233
+ metricName: 'large_commit_count',
234
+ metricValue: largeCommits.length,
235
+ scoreImpact: -5,
236
+ evidence,
237
+ recommendations: [
238
+ 'Break large changes into logical commits',
239
+ 'Commit refactors separately from features',
240
+ 'Use git add -p for partial staging',
241
+ ],
242
+ });
243
+ }
244
+ return insights;
245
+ }
246
+ // ===========================================================================
247
+ // Event Logging Quality Analysis (PATTERN-001: Ephemeral Sessions)
248
+ // ===========================================================================
249
+ /**
250
+ * Analyzes event logging rate instead of handoff rate.
251
+ *
252
+ * Per PATTERN-001: Sessions are ephemeral with 2-3 day validity.
253
+ * Context is preserved via defensive logging (events), not handoffs.
254
+ * Handoffs are optional - what matters is continuous event capture.
255
+ */
256
+ analyzeHandoffQuality(data) {
257
+ const insights = [];
258
+ if (data.sessions.length === 0)
259
+ return insights;
260
+ // Calculate events per session using session-level event counts
261
+ // Each session tracks its own events in the Timeline section
262
+ const totalSessionEvents = data.sessions.reduce((sum, s) => sum + s.eventCount, 0);
263
+ const eventsPerSession = totalSessionEvents / data.sessions.length;
264
+ // Find sessions with good logging
265
+ const wellLoggedSessions = data.sessions.filter(s => s.eventCount >= 2);
266
+ const loggingRate = Math.round((wellLoggedSessions.length / data.sessions.length) * 100);
267
+ const evidence = wellLoggedSessions.slice(0, 3).map(s => ({
268
+ type: 'session',
269
+ id: s.id,
270
+ description: `${s.eventCount} events logged (${s.hasHandoff ? 'with' : 'no'} handoff)`,
271
+ timestamp: s.startedAt,
272
+ }));
273
+ if (eventsPerSession >= THRESHOLDS.eventLoggingRate.excellent) {
274
+ insights.push({
275
+ category: this.category,
276
+ severity: 'info',
277
+ title: 'Strong defensive logging',
278
+ description: `${eventsPerSession.toFixed(1)} events per session. Context is well-captured.`,
279
+ metricName: 'events_per_session',
280
+ metricValue: eventsPerSession,
281
+ metricTarget: THRESHOLDS.eventLoggingRate.excellent,
282
+ scoreImpact: 10,
283
+ evidence,
284
+ recommendations: [],
285
+ });
286
+ }
287
+ else if (eventsPerSession >= THRESHOLDS.eventLoggingRate.good) {
288
+ insights.push({
289
+ category: this.category,
290
+ severity: 'info',
291
+ title: 'Good event logging',
292
+ description: `${eventsPerSession.toFixed(1)} events per session. Consider logging more insights.`,
293
+ metricName: 'events_per_session',
294
+ metricValue: eventsPerSession,
295
+ metricTarget: THRESHOLDS.eventLoggingRate.good,
296
+ scoreImpact: 5,
297
+ evidence,
298
+ recommendations: ['Log decisions and gotchas, not just completions'],
299
+ });
300
+ }
301
+ else if (eventsPerSession < THRESHOLDS.eventLoggingRate.warning) {
302
+ // Note: This differs from "Silent sessions detected" in anti-patterns:
303
+ // - Silent sessions = count of sessions with ZERO events (total context loss)
304
+ // - Low event logging = overall events/session ratio (insufficient logging)
305
+ const lowEventSessions = data.sessions.filter(s => s.eventCount < 2);
306
+ insights.push({
307
+ category: this.category,
308
+ severity: 'suggestion',
309
+ title: 'Low event logging',
310
+ description: `${eventsPerSession.toFixed(1)} events per session on average. This differs from silent sessions (zero events) - here sessions have some events but not enough for good context preservation.`,
311
+ metricName: 'events_per_session',
312
+ metricValue: eventsPerSession,
313
+ metricTarget: THRESHOLDS.eventLoggingRate.good,
314
+ scoreImpact: -10,
315
+ evidence: lowEventSessions.slice(0, 3).map(s => ({
316
+ type: 'session',
317
+ id: s.id,
318
+ description: `Session with ${s.eventCount} event${s.eventCount === 1 ? '' : 's'} (target: 2+)`,
319
+ timestamp: s.startedAt,
320
+ })),
321
+ recommendations: [
322
+ 'Use `ginko log` after fixes, features, and decisions',
323
+ 'Log insights while context is fresh (low pressure)',
324
+ 'Aim for 3-5 events per session for good continuity',
325
+ ],
326
+ });
327
+ }
328
+ return insights;
329
+ }
330
+ // ===========================================================================
331
+ // Sprint Velocity Analysis
332
+ // ===========================================================================
333
+ analyzeSprintVelocity(data) {
334
+ const insights = [];
335
+ // Calculate events per day as a velocity proxy
336
+ const eventsPerDay = data.events.length / data.period.days;
337
+ if (eventsPerDay >= 5) {
338
+ insights.push({
339
+ category: this.category,
340
+ severity: 'info',
341
+ title: 'High activity level',
342
+ description: `${eventsPerDay.toFixed(1)} logged events per day. Strong engagement with the project.`,
343
+ metricName: 'events_per_day',
344
+ metricValue: eventsPerDay,
345
+ scoreImpact: 5,
346
+ evidence: [],
347
+ recommendations: [],
348
+ });
349
+ }
350
+ else if (eventsPerDay < 1) {
351
+ insights.push({
352
+ category: this.category,
353
+ severity: 'suggestion',
354
+ title: 'Low activity logged',
355
+ description: `${eventsPerDay.toFixed(1)} events per day. Consider logging more insights.`,
356
+ metricName: 'events_per_day',
357
+ metricValue: eventsPerDay,
358
+ scoreImpact: -5,
359
+ evidence: [],
360
+ recommendations: [
361
+ 'Use `ginko log` after completing features or fixes',
362
+ 'Log decisions and insights, not just code changes',
363
+ 'Capture gotchas and patterns as you discover them',
364
+ ],
365
+ });
366
+ }
367
+ return insights;
368
+ }
369
+ }
370
+ export default QualityAnalyzer;
371
+ //# sourceMappingURL=quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../../src/lib/insights/analyzers/quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
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 { InsightData, EventData, TaskData, CommitData, SessionData, PatternData, GotchaData } from './types.js';
12
+ export interface CollectorOptions {
13
+ days?: number;
14
+ projectRoot?: string;
15
+ userId?: string;
16
+ graphId?: string;
17
+ }
18
+ /**
19
+ * Collects and aggregates data from all sources for insight analysis.
20
+ * Uses findGinkoRoot to locate .ginko at monorepo root (like git finds .git).
21
+ */
22
+ export declare function collectInsightData(options?: CollectorOptions): Promise<InsightData>;
23
+ /**
24
+ * Collect events from local JSONL files.
25
+ */
26
+ declare function collectEvents(projectRoot: string, userId: string, start: Date, end: Date): Promise<EventData[]>;
27
+ /**
28
+ * Collect task data from sprint files.
29
+ */
30
+ declare function collectTasks(projectRoot: string, start: Date, end: Date): Promise<TaskData>;
31
+ /**
32
+ * Collect commit data from git log.
33
+ */
34
+ declare function collectCommits(projectRoot: string, start: Date, end: Date): Promise<CommitData[]>;
35
+ /**
36
+ * Collect session data from archive files.
37
+ */
38
+ declare function collectSessions(projectRoot: string, userId: string, start: Date, end: Date): Promise<SessionData[]>;
39
+ /**
40
+ * Collect pattern data from local docs.
41
+ */
42
+ declare function collectPatterns(projectRoot: string): Promise<PatternData[]>;
43
+ /**
44
+ * Collect gotcha data from local docs.
45
+ */
46
+ declare function collectGotchas(projectRoot: string): Promise<GotchaData[]>;
47
+ /**
48
+ * Detect user ID from git config or session files.
49
+ */
50
+ declare function detectUserId(projectRoot: string): string;
51
+ /**
52
+ * Detect project ID from directory name or package.json.
53
+ */
54
+ declare function detectProjectId(projectRoot: string): string;
55
+ /**
56
+ * Extract ADR references from text.
57
+ */
58
+ declare function extractADRRefs(text: string): string[];
59
+ /**
60
+ * Extract TASK references from text.
61
+ */
62
+ declare function extractTaskRefs(text: string): string[];
63
+ /**
64
+ * Extract pattern references from text.
65
+ */
66
+ declare function extractPatternRefs(text: string): string[];
67
+ export { collectEvents, collectTasks, collectCommits, collectSessions, collectPatterns, collectGotchas, detectUserId, detectProjectId, extractADRRefs, extractTaskRefs, extractPatternRefs, };
68
+ //# sourceMappingURL=data-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-collector.d.ts","sourceRoot":"","sources":["../../../src/lib/insights/data-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EAER,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAC;AAgBpB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,CAoCtB;AAMD;;GAEG;AACH,iBAAe,aAAa,CAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,IAAI,EACX,GAAG,EAAE,IAAI,GACR,OAAO,CAAC,SAAS,EAAE,CAAC,CAkDtB;AAMD;;GAEG;AACH,iBAAe,YAAY,CACzB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,IAAI,EACX,GAAG,EAAE,IAAI,GACR,OAAO,CAAC,QAAQ,CAAC,CAwDnB;AAuDD;;GAEG;AACH,iBAAe,cAAc,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,IAAI,EACX,GAAG,EAAE,IAAI,GACR,OAAO,CAAC,UAAU,EAAE,CAAC,CAwDvB;AAMD;;GAEG;AACH,iBAAe,eAAe,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,IAAI,EACX,GAAG,EAAE,IAAI,GACR,OAAO,CAAC,WAAW,EAAE,CAAC,CAgFxB;AAuED;;GAEG;AACH,iBAAe,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAkC1E;AAMD;;GAEG;AACH,iBAAe,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAmCxE;AAMD;;GAEG;AACH,iBAAS,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;GAEG;AACH,iBAAS,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAWpD;AAED;;GAEG;AACH,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9C;AAED;;GAEG;AACH,iBAAS,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAG/C;AAED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGlD;AAMD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,CAAC"}