@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.
- package/dist/commands/assign.d.ts +19 -0
- package/dist/commands/assign.d.ts.map +1 -0
- package/dist/commands/assign.js +200 -0
- package/dist/commands/assign.js.map +1 -0
- package/dist/commands/epic.d.ts.map +1 -1
- package/dist/commands/epic.js +48 -23
- package/dist/commands/epic.js.map +1 -1
- package/dist/commands/graph/api-client.d.ts +1 -0
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/insights/index.d.ts +12 -0
- package/dist/commands/insights/index.d.ts.map +1 -0
- package/dist/commands/insights/index.js +12 -0
- package/dist/commands/insights/index.js.map +1 -0
- package/dist/commands/insights/insights-command.d.ts +20 -0
- package/dist/commands/insights/insights-command.d.ts.map +1 -0
- package/dist/commands/insights/insights-command.js +369 -0
- package/dist/commands/insights/insights-command.js.map +1 -0
- package/dist/commands/principles/seed.d.ts +26 -0
- package/dist/commands/principles/seed.d.ts.map +1 -0
- package/dist/commands/principles/seed.js +150 -0
- package/dist/commands/principles/seed.js.map +1 -0
- package/dist/commands/start/start-reflection.d.ts +11 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +149 -16
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/sync/index.d.ts +21 -0
- package/dist/commands/sync/index.d.ts.map +1 -0
- package/dist/commands/sync/index.js +38 -0
- package/dist/commands/sync/index.js.map +1 -0
- package/dist/commands/sync/node-syncer.d.ts +58 -0
- package/dist/commands/sync/node-syncer.d.ts.map +1 -0
- package/dist/commands/sync/node-syncer.js +192 -0
- package/dist/commands/sync/node-syncer.js.map +1 -0
- package/dist/commands/sync/sprint-syncer.d.ts +42 -0
- package/dist/commands/sync/sprint-syncer.d.ts.map +1 -0
- package/dist/commands/sync/sprint-syncer.js +274 -0
- package/dist/commands/sync/sprint-syncer.js.map +1 -0
- package/dist/commands/sync/sync-command.d.ts +16 -0
- package/dist/commands/sync/sync-command.d.ts.map +1 -0
- package/dist/commands/sync/sync-command.js +429 -0
- package/dist/commands/sync/sync-command.js.map +1 -0
- package/dist/commands/sync/types.d.ts +86 -0
- package/dist/commands/sync/types.d.ts.map +1 -0
- package/dist/commands/sync/types.js +12 -0
- package/dist/commands/sync/types.js.map +1 -0
- package/dist/core/session-log-manager.d.ts +3 -1
- package/dist/core/session-log-manager.d.ts.map +1 -1
- package/dist/core/session-log-manager.js +5 -3
- package/dist/core/session-log-manager.js.map +1 -1
- package/dist/data/standard-principles.d.ts +43 -0
- package/dist/data/standard-principles.d.ts.map +1 -0
- package/dist/data/standard-principles.js +323 -0
- package/dist/data/standard-principles.js.map +1 -0
- package/dist/index.js +54 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/insights/analyzers/anti-patterns.d.ts +32 -0
- package/dist/lib/insights/analyzers/anti-patterns.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/anti-patterns.js +302 -0
- package/dist/lib/insights/analyzers/anti-patterns.js.map +1 -0
- package/dist/lib/insights/analyzers/efficiency.d.ts +22 -0
- package/dist/lib/insights/analyzers/efficiency.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/efficiency.js +311 -0
- package/dist/lib/insights/analyzers/efficiency.js.map +1 -0
- package/dist/lib/insights/analyzers/index.d.ts +24 -0
- package/dist/lib/insights/analyzers/index.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/index.js +37 -0
- package/dist/lib/insights/analyzers/index.js.map +1 -0
- package/dist/lib/insights/analyzers/patterns.d.ts +21 -0
- package/dist/lib/insights/analyzers/patterns.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/patterns.js +337 -0
- package/dist/lib/insights/analyzers/patterns.js.map +1 -0
- package/dist/lib/insights/analyzers/quality.d.ts +29 -0
- package/dist/lib/insights/analyzers/quality.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/quality.js +371 -0
- package/dist/lib/insights/analyzers/quality.js.map +1 -0
- package/dist/lib/insights/data-collector.d.ts +68 -0
- package/dist/lib/insights/data-collector.d.ts.map +1 -0
- package/dist/lib/insights/data-collector.js +514 -0
- package/dist/lib/insights/data-collector.js.map +1 -0
- package/dist/lib/insights/index.d.ts +14 -0
- package/dist/lib/insights/index.d.ts.map +1 -0
- package/dist/lib/insights/index.js +17 -0
- package/dist/lib/insights/index.js.map +1 -0
- package/dist/lib/insights/scheduler.d.ts +71 -0
- package/dist/lib/insights/scheduler.d.ts.map +1 -0
- package/dist/lib/insights/scheduler.js +126 -0
- package/dist/lib/insights/scheduler.js.map +1 -0
- package/dist/lib/insights/types.d.ts +216 -0
- package/dist/lib/insights/types.d.ts.map +1 -0
- package/dist/lib/insights/types.js +12 -0
- package/dist/lib/insights/types.js.map +1 -0
- package/dist/templates/ai-instructions-template.d.ts +1 -0
- package/dist/templates/ai-instructions-template.d.ts.map +1 -1
- package/dist/templates/ai-instructions-template.js +51 -0
- package/dist/templates/ai-instructions-template.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/__tests__/task-timeout.test.d.ts +0 -12
- package/dist/lib/__tests__/task-timeout.test.d.ts.map +0 -1
- package/dist/lib/__tests__/task-timeout.test.js +0 -278
- package/dist/lib/__tests__/task-timeout.test.js.map +0 -1
|
@@ -0,0 +1,514 @@
|
|
|
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
|
+
// Convert filename format to ISO: 2025-12-15T15-22-55-104Z → 2025-12-15T15:22:55.104Z
|
|
282
|
+
const isoDate = match[1].replace(/T(\d{2})-(\d{2})-(\d{2})-(\d{3})Z/, 'T$1:$2:$3.$4Z');
|
|
283
|
+
const timestamp = new Date(isoDate);
|
|
284
|
+
// Skip if invalid date (shouldn't happen with correct format)
|
|
285
|
+
if (isNaN(timestamp.getTime())) {
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
// Filter by date range
|
|
289
|
+
if (timestamp < start || timestamp > end) {
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
const filePath = path.join(archiveDir, file);
|
|
293
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
294
|
+
sessions.push(parseSessionLog(content, file, timestamp));
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// Archive read error
|
|
299
|
+
}
|
|
300
|
+
// Also check current session
|
|
301
|
+
const currentLogFile = path.join(projectRoot, '.ginko', 'sessions', userSlug, 'current-session-log.md');
|
|
302
|
+
if (fs.existsSync(currentLogFile)) {
|
|
303
|
+
try {
|
|
304
|
+
const content = fs.readFileSync(currentLogFile, 'utf-8');
|
|
305
|
+
const stats = fs.statSync(currentLogFile);
|
|
306
|
+
sessions.push(parseSessionLog(content, 'current-session-log.md', stats.mtime));
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// Current session read error
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Sort sessions chronologically
|
|
313
|
+
sessions.sort((a, b) => a.startedAt.getTime() - b.startedAt.getTime());
|
|
314
|
+
// Post-process: If previous session had handoff, current session is warm (not cold)
|
|
315
|
+
for (let i = 1; i < sessions.length; i++) {
|
|
316
|
+
const prevSession = sessions[i - 1];
|
|
317
|
+
const currSession = sessions[i];
|
|
318
|
+
// If previous session had handoff and current is cold, upgrade to warm
|
|
319
|
+
if (prevSession.hasHandoff && currSession.flowState === 'cold') {
|
|
320
|
+
currSession.flowState = 'warm';
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return sessions;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Parse session log for metrics.
|
|
327
|
+
*
|
|
328
|
+
* Flow state detection (in order of priority):
|
|
329
|
+
* 1. YAML frontmatter flow_state field (most reliable - written at session start)
|
|
330
|
+
* 2. Explicit "Hot/Warm/Cold" markers in content (legacy fallback)
|
|
331
|
+
* 3. Event count (sessions with events = context preserved)
|
|
332
|
+
* 4. Handoff presence from previous session (checked in collectSessions)
|
|
333
|
+
*/
|
|
334
|
+
function parseSessionLog(content, filename, timestamp) {
|
|
335
|
+
// Count events - match session log entry format: ### HH:MM - [category]
|
|
336
|
+
const entryMatches = content.match(/^### \d{2}:\d{2} - \[/gm) || [];
|
|
337
|
+
const eventCount = entryMatches.length;
|
|
338
|
+
// Check for handoff (multiple patterns)
|
|
339
|
+
const hasHandoff = content.toLowerCase().includes('handoff') ||
|
|
340
|
+
content.toLowerCase().includes('session summary') ||
|
|
341
|
+
content.toLowerCase().includes('session complete') ||
|
|
342
|
+
content.toLowerCase().includes('context preserved');
|
|
343
|
+
// Parse flow state from YAML frontmatter first (most reliable source)
|
|
344
|
+
let flowState = 'cold';
|
|
345
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
346
|
+
if (frontmatterMatch) {
|
|
347
|
+
const frontmatter = frontmatterMatch[1];
|
|
348
|
+
const flowStateMatch = frontmatter.match(/^flow_state:\s*(hot|warm|cool|cold)/mi);
|
|
349
|
+
if (flowStateMatch) {
|
|
350
|
+
flowState = flowStateMatch[1].toLowerCase();
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// Fallback: Check for explicit Hot/Warm markers in content (legacy sessions)
|
|
354
|
+
if (flowState === 'cold') {
|
|
355
|
+
if (content.includes('Hot (10/10)') ||
|
|
356
|
+
content.includes('Hot (9/10)') ||
|
|
357
|
+
content.match(/Hot\s*\|/i) ||
|
|
358
|
+
content.match(/flow.*hot/i)) {
|
|
359
|
+
flowState = 'hot';
|
|
360
|
+
}
|
|
361
|
+
else if (content.includes('Warm') ||
|
|
362
|
+
content.includes('(7/10)') ||
|
|
363
|
+
content.includes('(8/10)') ||
|
|
364
|
+
content.match(/flow.*warm/i)) {
|
|
365
|
+
flowState = 'warm';
|
|
366
|
+
}
|
|
367
|
+
// If session has multiple events, it's at least warm (context was captured)
|
|
368
|
+
else if (eventCount >= 2) {
|
|
369
|
+
flowState = 'warm';
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// Estimate duration (rough: count of events * avg time between)
|
|
373
|
+
const durationMinutes = Math.max(15, eventCount * 10);
|
|
374
|
+
return {
|
|
375
|
+
id: filename.replace('.md', ''),
|
|
376
|
+
startedAt: timestamp,
|
|
377
|
+
durationMinutes,
|
|
378
|
+
flowState,
|
|
379
|
+
eventCount,
|
|
380
|
+
hasHandoff,
|
|
381
|
+
archiveFile: filename,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
// ============================================================================
|
|
385
|
+
// Pattern Collection
|
|
386
|
+
// ============================================================================
|
|
387
|
+
/**
|
|
388
|
+
* Collect pattern data from local docs.
|
|
389
|
+
*/
|
|
390
|
+
async function collectPatterns(projectRoot) {
|
|
391
|
+
const patterns = [];
|
|
392
|
+
const patternsDir = path.join(projectRoot, 'docs', 'patterns');
|
|
393
|
+
if (!fs.existsSync(patternsDir)) {
|
|
394
|
+
return patterns;
|
|
395
|
+
}
|
|
396
|
+
try {
|
|
397
|
+
const files = fs.readdirSync(patternsDir).filter((f) => f.endsWith('.md'));
|
|
398
|
+
for (const file of files) {
|
|
399
|
+
const filePath = path.join(patternsDir, file);
|
|
400
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
401
|
+
// Parse pattern metadata
|
|
402
|
+
const nameMatch = content.match(/^#\s*(.+)/m);
|
|
403
|
+
const name = nameMatch ? nameMatch[1].trim() : file.replace('.md', '');
|
|
404
|
+
const confidenceMatch = content.match(/confidence:\s*(high|medium|low)/i);
|
|
405
|
+
const confidence = (confidenceMatch ? confidenceMatch[1].toLowerCase() : 'low');
|
|
406
|
+
patterns.push({
|
|
407
|
+
id: file.replace('.md', ''),
|
|
408
|
+
name,
|
|
409
|
+
confidence,
|
|
410
|
+
usageCount: 0, // Would need graph API to get actual count
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
catch {
|
|
415
|
+
// Patterns directory read error
|
|
416
|
+
}
|
|
417
|
+
return patterns;
|
|
418
|
+
}
|
|
419
|
+
// ============================================================================
|
|
420
|
+
// Gotcha Collection
|
|
421
|
+
// ============================================================================
|
|
422
|
+
/**
|
|
423
|
+
* Collect gotcha data from local docs.
|
|
424
|
+
*/
|
|
425
|
+
async function collectGotchas(projectRoot) {
|
|
426
|
+
const gotchas = [];
|
|
427
|
+
const gotchasDir = path.join(projectRoot, 'docs', 'gotchas');
|
|
428
|
+
if (!fs.existsSync(gotchasDir)) {
|
|
429
|
+
return gotchas;
|
|
430
|
+
}
|
|
431
|
+
try {
|
|
432
|
+
const files = fs.readdirSync(gotchasDir).filter((f) => f.endsWith('.md'));
|
|
433
|
+
for (const file of files) {
|
|
434
|
+
const filePath = path.join(gotchasDir, file);
|
|
435
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
436
|
+
// Parse gotcha metadata
|
|
437
|
+
const titleMatch = content.match(/^#\s*(.+)/m);
|
|
438
|
+
const title = titleMatch ? titleMatch[1].trim() : file.replace('.md', '');
|
|
439
|
+
const severityMatch = content.match(/severity:\s*(critical|high|medium|low)/i);
|
|
440
|
+
const severity = (severityMatch ? severityMatch[1].toLowerCase() : 'medium');
|
|
441
|
+
gotchas.push({
|
|
442
|
+
id: file.replace('.md', ''),
|
|
443
|
+
title,
|
|
444
|
+
severity,
|
|
445
|
+
encounters: 0, // Would need graph API to get actual count
|
|
446
|
+
resolutions: 0,
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
// Gotchas directory read error
|
|
452
|
+
}
|
|
453
|
+
return gotchas;
|
|
454
|
+
}
|
|
455
|
+
// ============================================================================
|
|
456
|
+
// Helper Functions
|
|
457
|
+
// ============================================================================
|
|
458
|
+
/**
|
|
459
|
+
* Detect user ID from git config or session files.
|
|
460
|
+
*/
|
|
461
|
+
function detectUserId(projectRoot) {
|
|
462
|
+
try {
|
|
463
|
+
const email = execSync('git config user.email', {
|
|
464
|
+
cwd: projectRoot,
|
|
465
|
+
encoding: 'utf-8',
|
|
466
|
+
}).trim();
|
|
467
|
+
return email;
|
|
468
|
+
}
|
|
469
|
+
catch {
|
|
470
|
+
return 'unknown@local';
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Detect project ID from directory name or package.json.
|
|
475
|
+
*/
|
|
476
|
+
function detectProjectId(projectRoot) {
|
|
477
|
+
try {
|
|
478
|
+
const pkgPath = path.join(projectRoot, 'package.json');
|
|
479
|
+
if (fs.existsSync(pkgPath)) {
|
|
480
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
481
|
+
return pkg.name || path.basename(projectRoot);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
catch {
|
|
485
|
+
// Fall through
|
|
486
|
+
}
|
|
487
|
+
return path.basename(projectRoot);
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Extract ADR references from text.
|
|
491
|
+
*/
|
|
492
|
+
function extractADRRefs(text) {
|
|
493
|
+
const matches = text.match(ADR_PATTERN) || [];
|
|
494
|
+
return [...new Set(matches.map((m) => m.toUpperCase()))];
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Extract TASK references from text.
|
|
498
|
+
*/
|
|
499
|
+
function extractTaskRefs(text) {
|
|
500
|
+
const matches = text.match(TASK_PATTERN) || [];
|
|
501
|
+
return [...new Set(matches.map((m) => m.toUpperCase()))];
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Extract pattern references from text.
|
|
505
|
+
*/
|
|
506
|
+
function extractPatternRefs(text) {
|
|
507
|
+
const matches = text.match(PATTERN_PATTERN) || [];
|
|
508
|
+
return [...new Set(matches.map((m) => m.toLowerCase().replace('pattern:', '').trim()))];
|
|
509
|
+
}
|
|
510
|
+
// ============================================================================
|
|
511
|
+
// Exports
|
|
512
|
+
// ============================================================================
|
|
513
|
+
export { collectEvents, collectTasks, collectCommits, collectSessions, collectPatterns, collectGotchas, detectUserId, detectProjectId, extractADRRefs, extractTaskRefs, extractPatternRefs, };
|
|
514
|
+
//# 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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-30
|
|
5
|
+
* @tags: [insights, scheduler, auto-update, coaching]
|
|
6
|
+
* @related: [./index.ts, ../../commands/start/start-reflection.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [fs-extra, path]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for scheduled insights runs.
|
|
13
|
+
*/
|
|
14
|
+
export interface InsightsScheduleConfig {
|
|
15
|
+
day1: ScheduleEntry;
|
|
16
|
+
day7: ScheduleEntry;
|
|
17
|
+
day30: ScheduleEntry;
|
|
18
|
+
}
|
|
19
|
+
export interface ScheduleEntry {
|
|
20
|
+
intervalMs: number;
|
|
21
|
+
lastRun?: string;
|
|
22
|
+
lastScore?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Load the current schedule configuration.
|
|
26
|
+
*/
|
|
27
|
+
export declare function loadSchedule(): Promise<InsightsScheduleConfig>;
|
|
28
|
+
/**
|
|
29
|
+
* Save the schedule configuration.
|
|
30
|
+
*/
|
|
31
|
+
export declare function saveSchedule(schedule: InsightsScheduleConfig): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Check which insights periods need to be refreshed.
|
|
34
|
+
* Returns an array of period names that should be run.
|
|
35
|
+
*/
|
|
36
|
+
export declare function checkSchedule(): Promise<Array<'day1' | 'day7' | 'day30'>>;
|
|
37
|
+
/**
|
|
38
|
+
* Record that an insights run completed for a specific period.
|
|
39
|
+
*/
|
|
40
|
+
export declare function recordRun(period: 'day1' | 'day7' | 'day30', score: number): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Get the last known scores for trend display.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getLastScores(): Promise<{
|
|
45
|
+
day1?: {
|
|
46
|
+
score: number;
|
|
47
|
+
runAt: string;
|
|
48
|
+
};
|
|
49
|
+
day7?: {
|
|
50
|
+
score: number;
|
|
51
|
+
runAt: string;
|
|
52
|
+
};
|
|
53
|
+
day30?: {
|
|
54
|
+
score: number;
|
|
55
|
+
runAt: string;
|
|
56
|
+
};
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* Map period names to the --days flag value for the insights command.
|
|
60
|
+
*/
|
|
61
|
+
export declare function getPeriodDays(period: 'day1' | 'day7' | 'day30'): number;
|
|
62
|
+
declare const _default: {
|
|
63
|
+
loadSchedule: typeof loadSchedule;
|
|
64
|
+
saveSchedule: typeof saveSchedule;
|
|
65
|
+
checkSchedule: typeof checkSchedule;
|
|
66
|
+
recordRun: typeof recordRun;
|
|
67
|
+
getLastScores: typeof getLastScores;
|
|
68
|
+
getPeriodDays: typeof getPeriodDays;
|
|
69
|
+
};
|
|
70
|
+
export default _default;
|
|
71
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/lib/insights/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAepE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlF;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAe/E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EACjC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C,CAAC,CAeD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAMvE;;;;;;;;;AAED,wBAOE"}
|