fivocell 1.0.5 → 3.0.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.
- package/README.md +63 -464
- package/bin/cell.js +2 -2
- package/dist/behavior-intelligence.d.ts +90 -0
- package/dist/behavior-intelligence.d.ts.map +1 -0
- package/dist/behavior-intelligence.js +595 -0
- package/dist/behavior-intelligence.js.map +1 -0
- package/dist/behavioral-tracker.d.ts +90 -0
- package/dist/behavioral-tracker.d.ts.map +1 -0
- package/dist/behavioral-tracker.js +185 -0
- package/dist/behavioral-tracker.js.map +1 -0
- package/dist/cli.js +417 -1659
- package/dist/cli.js.map +1 -1
- package/dist/cloud-sync.d.ts +66 -0
- package/dist/cloud-sync.d.ts.map +1 -0
- package/dist/cloud-sync.js +328 -0
- package/dist/cloud-sync.js.map +1 -0
- package/dist/code-scanner.d.ts +51 -0
- package/dist/code-scanner.d.ts.map +1 -0
- package/dist/code-scanner.js +966 -0
- package/dist/code-scanner.js.map +1 -0
- package/dist/community-intel.d.ts +34 -0
- package/dist/community-intel.d.ts.map +1 -0
- package/dist/community-intel.js +148 -0
- package/dist/community-intel.js.map +1 -0
- package/dist/community-intelligence.d.ts +42 -0
- package/dist/community-intelligence.d.ts.map +1 -0
- package/dist/community-intelligence.js +160 -0
- package/dist/community-intelligence.js.map +1 -0
- package/dist/community-v2.d.ts +106 -0
- package/dist/community-v2.d.ts.map +1 -0
- package/dist/community-v2.js +378 -0
- package/dist/community-v2.js.map +1 -0
- package/dist/core/__tests__/chapter8-hostile.test.js +1 -1
- package/dist/core/__tests__/chapter8-hostile.test.js.map +1 -1
- package/dist/core/__tests__/chapter9-hostile.test.js +1 -1
- package/dist/core/__tests__/chapter9-hostile.test.js.map +1 -1
- package/dist/core/__tests__/complexity-analyzer.test.js +15 -15
- package/dist/core/__tests__/team-composer.test.js +2 -1
- package/dist/core/__tests__/team-composer.test.js.map +1 -1
- package/dist/core/convention-detector.d.ts.map +1 -1
- package/dist/core/convention-detector.js +11 -23
- package/dist/core/convention-detector.js.map +1 -1
- package/dist/core/cost-optimizer.d.ts.map +1 -1
- package/dist/core/cost-optimizer.js +13 -25
- package/dist/core/cost-optimizer.js.map +1 -1
- package/dist/core/database.d.ts +28 -0
- package/dist/core/database.d.ts.map +1 -0
- package/dist/core/database.js +587 -0
- package/dist/core/database.js.map +1 -0
- package/dist/core/knowledge-graph.d.ts.map +1 -1
- package/dist/core/knowledge-graph.js +9 -24
- package/dist/core/knowledge-graph.js.map +1 -1
- package/dist/core/logger.d.ts +9 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +26 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/playbook-generator.js +48 -48
- package/dist/core/privacy-manager.d.ts.map +1 -1
- package/dist/core/privacy-manager.js +5 -0
- package/dist/core/privacy-manager.js.map +1 -1
- package/dist/core/project-dna.d.ts.map +1 -1
- package/dist/core/project-dna.js +6 -19
- package/dist/core/project-dna.js.map +1 -1
- package/dist/core/prompt-builder.d.ts +18 -0
- package/dist/core/prompt-builder.d.ts.map +1 -0
- package/dist/core/prompt-builder.js +325 -0
- package/dist/core/prompt-builder.js.map +1 -0
- package/dist/core/session-memory.d.ts +90 -0
- package/dist/core/session-memory.d.ts.map +1 -0
- package/dist/core/session-memory.js +229 -0
- package/dist/core/session-memory.js.map +1 -0
- package/dist/core/signal-capture.d.ts +5 -0
- package/dist/core/signal-capture.d.ts.map +1 -1
- package/dist/core/signal-capture.js +67 -0
- package/dist/core/signal-capture.js.map +1 -1
- package/dist/core/team-composer.d.ts.map +1 -1
- package/dist/core/team-composer.js +16 -6
- package/dist/core/team-composer.js.map +1 -1
- package/dist/cross-model-memory.d.ts +95 -0
- package/dist/cross-model-memory.d.ts.map +1 -0
- package/dist/cross-model-memory.js +229 -0
- package/dist/cross-model-memory.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +3 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +98 -64
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +637 -25
- package/dist/daemon/server.js.map +1 -1
- package/dist/developer-intelligence.d.ts +18 -0
- package/dist/developer-intelligence.d.ts.map +1 -0
- package/dist/developer-intelligence.js +180 -0
- package/dist/developer-intelligence.js.map +1 -0
- package/dist/first-run.d.ts +8 -0
- package/dist/first-run.d.ts.map +1 -0
- package/dist/first-run.js +182 -0
- package/dist/first-run.js.map +1 -0
- package/dist/focus-report.d.ts +32 -0
- package/dist/focus-report.d.ts.map +1 -0
- package/dist/focus-report.js +293 -0
- package/dist/focus-report.js.map +1 -0
- package/dist/ide-intelligence.d.ts +118 -0
- package/dist/ide-intelligence.d.ts.map +1 -0
- package/dist/ide-intelligence.js +284 -0
- package/dist/ide-intelligence.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +119 -2
- package/dist/index.js.map +1 -1
- package/dist/insight-generator.d.ts +58 -0
- package/dist/insight-generator.d.ts.map +1 -0
- package/dist/insight-generator.js +314 -0
- package/dist/insight-generator.js.map +1 -0
- package/dist/journey-memory.d.ts +75 -0
- package/dist/journey-memory.d.ts.map +1 -0
- package/dist/journey-memory.js +360 -0
- package/dist/journey-memory.js.map +1 -0
- package/dist/layers.d.ts +92 -0
- package/dist/layers.d.ts.map +1 -0
- package/dist/layers.js +226 -0
- package/dist/layers.js.map +1 -0
- package/dist/mcp-server.d.ts +406 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +414 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/onboarding-scan.d.ts +174 -0
- package/dist/onboarding-scan.d.ts.map +1 -0
- package/dist/onboarding-scan.js +1039 -0
- package/dist/onboarding-scan.js.map +1 -0
- package/dist/pc-scanner.d.ts +46 -0
- package/dist/pc-scanner.d.ts.map +1 -0
- package/dist/pc-scanner.js +488 -0
- package/dist/pc-scanner.js.map +1 -0
- package/dist/personal-intelligence.d.ts +97 -0
- package/dist/personal-intelligence.d.ts.map +1 -0
- package/dist/personal-intelligence.js +408 -0
- package/dist/personal-intelligence.js.map +1 -0
- package/dist/predictive-engine.d.ts +19 -0
- package/dist/predictive-engine.d.ts.map +1 -0
- package/dist/predictive-engine.js +107 -0
- package/dist/predictive-engine.js.map +1 -0
- package/dist/predictive-intelligence.d.ts +95 -0
- package/dist/predictive-intelligence.d.ts.map +1 -0
- package/dist/predictive-intelligence.js +544 -0
- package/dist/predictive-intelligence.js.map +1 -0
- package/dist/production.d.ts +67 -0
- package/dist/production.d.ts.map +1 -0
- package/dist/production.js +333 -0
- package/dist/production.js.map +1 -0
- package/dist/senior-features.d.ts +63 -0
- package/dist/senior-features.d.ts.map +1 -0
- package/dist/senior-features.js +325 -0
- package/dist/senior-features.js.map +1 -0
- package/dist/style-pull.d.ts +40 -0
- package/dist/style-pull.d.ts.map +1 -0
- package/dist/style-pull.js +385 -0
- package/dist/style-pull.js.map +1 -0
- package/dist/team-collaboration.d.ts +116 -0
- package/dist/team-collaboration.d.ts.map +1 -0
- package/dist/team-collaboration.js +375 -0
- package/dist/team-collaboration.js.map +1 -0
- package/dist/team-git.d.ts +47 -0
- package/dist/team-git.d.ts.map +1 -0
- package/dist/team-git.js +305 -0
- package/dist/team-git.js.map +1 -0
- package/dist/team-intelligence.d.ts +64 -0
- package/dist/team-intelligence.d.ts.map +1 -0
- package/dist/team-intelligence.js +289 -0
- package/dist/team-intelligence.js.map +1 -0
- package/dist/test-watch.d.ts +2 -0
- package/dist/test-watch.d.ts.map +1 -0
- package/dist/test-watch.js +8 -0
- package/dist/test-watch.js.map +1 -0
- package/dist/user-intelligence.d.ts +69 -0
- package/dist/user-intelligence.d.ts.map +1 -0
- package/dist/user-intelligence.js +553 -0
- package/dist/user-intelligence.js.map +1 -0
- package/dist/work-style.d.ts +49 -0
- package/dist/work-style.d.ts.map +1 -0
- package/dist/work-style.js +247 -0
- package/dist/work-style.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectCodingRhythm = detectCodingRhythm;
|
|
4
|
+
exports.detectBurnout = detectBurnout;
|
|
5
|
+
exports.trackSkillProgression = trackSkillProgression;
|
|
6
|
+
exports.getTechMasteryMap = getTechMasteryMap;
|
|
7
|
+
exports.generatePersonalInsights = generatePersonalInsights;
|
|
8
|
+
exports.getCareerTrajectory = getCareerTrajectory;
|
|
9
|
+
exports.generateWeeklyDigest = generateWeeklyDigest;
|
|
10
|
+
const database_1 = require("./core/database");
|
|
11
|
+
// ─── Coding Rhythm Detector ──────────────────────────────────────────────────
|
|
12
|
+
function detectCodingRhythm() {
|
|
13
|
+
(0, database_1.initializeDatabase)();
|
|
14
|
+
const db = (0, database_1.getDb)();
|
|
15
|
+
const sessions = db.prepare("SELECT start_time, end_time, files_touched FROM sessions WHERE end_time IS NOT NULL").all();
|
|
16
|
+
const bugs = db.prepare("SELECT created_at FROM behavior_events WHERE event_type = 'bug_fix'").all();
|
|
17
|
+
const hourStats = new Map();
|
|
18
|
+
const dayStats = new Map();
|
|
19
|
+
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
20
|
+
for (const s of sessions) {
|
|
21
|
+
try {
|
|
22
|
+
const start = new Date(s.start_time);
|
|
23
|
+
const end = new Date(s.end_time);
|
|
24
|
+
if (isNaN(start.getTime()) || isNaN(end.getTime()))
|
|
25
|
+
continue;
|
|
26
|
+
const mins = (end.getTime() - start.getTime()) / (1000 * 60);
|
|
27
|
+
const hour = start.getHours();
|
|
28
|
+
const day = days[start.getDay()];
|
|
29
|
+
const hs = hourStats.get(hour) || { sessions: 0, bugs: 0, totalMins: 0 };
|
|
30
|
+
hs.sessions++;
|
|
31
|
+
hs.totalMins += mins;
|
|
32
|
+
hourStats.set(hour, hs);
|
|
33
|
+
const ds = dayStats.get(day) || { sessions: 0, bugs: 0, totalMins: 0 };
|
|
34
|
+
ds.sessions++;
|
|
35
|
+
ds.totalMins += mins;
|
|
36
|
+
dayStats.set(day, ds);
|
|
37
|
+
}
|
|
38
|
+
catch { /* skip */ }
|
|
39
|
+
}
|
|
40
|
+
for (const b of bugs) {
|
|
41
|
+
try {
|
|
42
|
+
const d = new Date(b.created_at);
|
|
43
|
+
if (isNaN(d.getTime()))
|
|
44
|
+
continue;
|
|
45
|
+
const hour = d.getHours();
|
|
46
|
+
const day = days[d.getDay()];
|
|
47
|
+
const hs = hourStats.get(hour);
|
|
48
|
+
if (hs)
|
|
49
|
+
hs.bugs++;
|
|
50
|
+
const ds = dayStats.get(day);
|
|
51
|
+
if (ds)
|
|
52
|
+
ds.bugs++;
|
|
53
|
+
}
|
|
54
|
+
catch { /* skip */ }
|
|
55
|
+
}
|
|
56
|
+
const hourlyBreakdown = {};
|
|
57
|
+
for (const [hour, stats] of hourStats) {
|
|
58
|
+
const quality = stats.sessions > 0 ? Math.max(0, 100 - Math.round((stats.bugs / stats.sessions) * 100)) : 100;
|
|
59
|
+
hourlyBreakdown[hour] = { sessions: stats.sessions, bugs: stats.bugs, quality };
|
|
60
|
+
}
|
|
61
|
+
const dayBreakdown = {};
|
|
62
|
+
for (const [day, stats] of dayStats) {
|
|
63
|
+
const quality = stats.sessions > 0 ? Math.max(0, 100 - Math.round((stats.bugs / stats.sessions) * 100)) : 100;
|
|
64
|
+
dayBreakdown[day] = { commits: stats.sessions, bugs: stats.bugs, quality };
|
|
65
|
+
}
|
|
66
|
+
const sortedHours = [...hourStats.entries()].sort((a, b) => {
|
|
67
|
+
const qA = a[1].sessions > 0 ? 1 - (a[1].bugs / a[1].sessions) : 1;
|
|
68
|
+
const qB = b[1].sessions > 0 ? 1 - (b[1].bugs / b[1].sessions) : 1;
|
|
69
|
+
return qB - qA;
|
|
70
|
+
});
|
|
71
|
+
const sortedDays = [...dayStats.entries()].sort((a, b) => {
|
|
72
|
+
const qA = a[1].sessions > 0 ? 1 - (a[1].bugs / a[1].sessions) : 1;
|
|
73
|
+
const qB = b[1].sessions > 0 ? 1 - (b[1].bugs / b[1].sessions) : 1;
|
|
74
|
+
return qB - qA;
|
|
75
|
+
});
|
|
76
|
+
const bestHours = sortedHours.slice(0, 3).map(([h]) => `${h}:00-${h + 1}:00`);
|
|
77
|
+
const worstHours = sortedHours.slice(-3).map(([h]) => `${h}:00-${h + 1}:00`);
|
|
78
|
+
const bestDays = sortedDays.slice(0, 2).map(([d]) => d);
|
|
79
|
+
const worstDays = sortedDays.slice(-2).map(([d]) => d);
|
|
80
|
+
let totalMins = 0;
|
|
81
|
+
let sessionCount = 0;
|
|
82
|
+
for (const [, stats] of hourStats) {
|
|
83
|
+
totalMins += stats.totalMins;
|
|
84
|
+
sessionCount += stats.sessions;
|
|
85
|
+
}
|
|
86
|
+
const avgSessionMinutes = sessionCount > 0 ? Math.round(totalMins / sessionCount) : 45;
|
|
87
|
+
const optimalSessionMinutes = Math.round(avgSessionMinutes * 1.2);
|
|
88
|
+
return {
|
|
89
|
+
bestHours,
|
|
90
|
+
bestDays,
|
|
91
|
+
worstHours,
|
|
92
|
+
worstDays,
|
|
93
|
+
avgSessionMinutes,
|
|
94
|
+
optimalSessionMinutes,
|
|
95
|
+
peakFlowWindow: bestHours[0] || '10:00-11:00',
|
|
96
|
+
dayBreakdown,
|
|
97
|
+
hourlyBreakdown,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// ─── Burnout Predictor ───────────────────────────────────────────────────────
|
|
101
|
+
function detectBurnout() {
|
|
102
|
+
const db = (0, database_1.getDb)();
|
|
103
|
+
const signals = [];
|
|
104
|
+
const recentBugs = db.prepare("SELECT created_at FROM behavior_events WHERE event_type = 'bug_fix' AND created_at >= datetime('now', '-14 days')").all();
|
|
105
|
+
const olderBugs = db.prepare("SELECT created_at FROM behavior_events WHERE event_type = 'bug_fix' AND created_at >= datetime('now', '-28 days') AND created_at < datetime('now', '-14 days')").all();
|
|
106
|
+
const recentErrorRate = recentBugs.length / 14;
|
|
107
|
+
const olderErrorRate = olderBugs.length / 14 || 0.01;
|
|
108
|
+
const errorTrend = recentErrorRate > olderErrorRate * 1.5 ? 'increasing' : recentErrorRate < olderErrorRate * 0.7 ? 'decreasing' : 'stable';
|
|
109
|
+
if (errorTrend === 'increasing') {
|
|
110
|
+
signals.push(`Error rate increased ${Math.round((recentErrorRate / olderErrorRate) * 100)}% in last 2 weeks`);
|
|
111
|
+
}
|
|
112
|
+
const recentSessions = db.prepare("SELECT start_time, end_time FROM sessions WHERE start_time >= datetime('now', '-14 days') AND end_time IS NOT NULL").all();
|
|
113
|
+
const olderSessions = db.prepare("SELECT start_time, end_time FROM sessions WHERE start_time >= datetime('now', '-28 days') AND start_time < datetime('now', '-14 days') AND end_time IS NOT NULL").all();
|
|
114
|
+
const avgRecentDuration = recentSessions.length > 0
|
|
115
|
+
? recentSessions.reduce((sum, s) => sum + (new Date(s.end_time).getTime() - new Date(s.start_time).getTime()) / 60000, 0) / recentSessions.length
|
|
116
|
+
: 0;
|
|
117
|
+
const avgOlderDuration = olderSessions.length > 0
|
|
118
|
+
? olderSessions.reduce((sum, s) => sum + (new Date(s.end_time).getTime() - new Date(s.start_time).getTime()) / 60000, 0) / olderSessions.length
|
|
119
|
+
: 0;
|
|
120
|
+
const sessionTrend = avgRecentDuration < avgOlderDuration * 0.7 ? 'decreasing' : avgRecentDuration > avgOlderDuration * 1.3 ? 'increasing' : 'stable';
|
|
121
|
+
if (sessionTrend === 'decreasing') {
|
|
122
|
+
signals.push(`Average session length dropped from ${Math.round(avgOlderDuration)}min to ${Math.round(avgRecentDuration)}min`);
|
|
123
|
+
}
|
|
124
|
+
const recentReverts = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE description LIKE '%revert%' AND created_at >= datetime('now', '-14 days')").get();
|
|
125
|
+
if (recentReverts.cnt > 2) {
|
|
126
|
+
signals.push(`${recentReverts.cnt} reverts in last 2 weeks — possible fatigue`);
|
|
127
|
+
}
|
|
128
|
+
const recentCommits = recentSessions.length;
|
|
129
|
+
const olderCommits = olderSessions.length;
|
|
130
|
+
const commitTrend = recentCommits < olderCommits * 0.6 ? 'decreasing' : 'stable';
|
|
131
|
+
if (commitTrend === 'decreasing') {
|
|
132
|
+
signals.push(`Commit frequency dropped from ${olderCommits} to ${recentCommits} sessions`);
|
|
133
|
+
}
|
|
134
|
+
let severity = 'none';
|
|
135
|
+
if (signals.length >= 3)
|
|
136
|
+
severity = 'severe';
|
|
137
|
+
else if (signals.length === 2)
|
|
138
|
+
severity = 'moderate';
|
|
139
|
+
else if (signals.length === 1)
|
|
140
|
+
severity = 'mild';
|
|
141
|
+
let suggestion = '';
|
|
142
|
+
if (severity === 'severe')
|
|
143
|
+
suggestion = 'Strong burnout signals detected. Take a 2-3 day break. Your error rate is 2x normal and session lengths have halved.';
|
|
144
|
+
else if (severity === 'moderate')
|
|
145
|
+
suggestion = 'Moderate burnout risk. Consider a lighter schedule this week. Your metrics are trending downward.';
|
|
146
|
+
else if (severity === 'mild')
|
|
147
|
+
suggestion = 'Minor fatigue detected. Take a longer break between sessions today.';
|
|
148
|
+
else
|
|
149
|
+
suggestion = 'No burnout signals. Keep up the healthy rhythm!';
|
|
150
|
+
return {
|
|
151
|
+
detected: severity !== 'none',
|
|
152
|
+
severity,
|
|
153
|
+
signals,
|
|
154
|
+
metrics: {
|
|
155
|
+
errorRateTrend: `${Math.round(recentErrorRate * 100)}/day (was ${Math.round(olderErrorRate * 100)}/day)`,
|
|
156
|
+
sessionLengthTrend: `${Math.round(avgRecentDuration)}min avg (was ${Math.round(avgOlderDuration)}min)`,
|
|
157
|
+
revertRate: `${recentReverts.cnt} reverts in 2 weeks`,
|
|
158
|
+
commitFrequencyTrend: `${recentCommits} sessions (was ${olderCommits})`,
|
|
159
|
+
},
|
|
160
|
+
suggestion,
|
|
161
|
+
confidence: Math.min(0.9, 0.4 + signals.length * 0.15),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// ─── Skill Progression Tracker ───────────────────────────────────────────────
|
|
165
|
+
function trackSkillProgression() {
|
|
166
|
+
const db = (0, database_1.getDb)();
|
|
167
|
+
const skills = db.prepare('SELECT * FROM skills ORDER BY file_count DESC').all();
|
|
168
|
+
const progressions = [];
|
|
169
|
+
for (const skill of skills) {
|
|
170
|
+
const lang = String(skill.language || '');
|
|
171
|
+
if (!lang || lang.length < 2)
|
|
172
|
+
continue;
|
|
173
|
+
const firstSeen = String(skill.first_seen || '');
|
|
174
|
+
const lastActive = String(skill.last_active || '');
|
|
175
|
+
const monthsActive = firstSeen ? Math.max(1, Math.round((Date.now() - new Date(firstSeen).getTime()) / (30 * 24 * 60 * 60 * 1000))) : 0;
|
|
176
|
+
const bugs = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' AND file_path LIKE ?").get(`%${lang.toLowerCase()}%`);
|
|
177
|
+
const totalFiles = Number(skill.file_count || 0);
|
|
178
|
+
const errorRate = totalFiles > 0 ? bugs.cnt / totalFiles : 0;
|
|
179
|
+
const recentBugs = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' AND file_path LIKE ? AND created_at >= datetime('now', '-30 days')").get(`%${lang.toLowerCase()}%`);
|
|
180
|
+
const olderBugs = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' AND file_path LIKE ? AND created_at >= datetime('now', '-60 days') AND created_at < datetime('now', '-30 days')").get(`%${lang.toLowerCase()}%`);
|
|
181
|
+
const errorTrend = recentBugs.cnt < olderBugs.cnt * 0.7 ? 'improving' : recentBugs.cnt > olderBugs.cnt * 1.3 ? 'worsening' : 'stable';
|
|
182
|
+
let stage = 'learning';
|
|
183
|
+
let stageNumber = 1;
|
|
184
|
+
if (monthsActive >= 6 && errorTrend !== 'worsening' && totalFiles > 20) {
|
|
185
|
+
stage = 'mastery';
|
|
186
|
+
stageNumber = 3;
|
|
187
|
+
}
|
|
188
|
+
else if (monthsActive >= 2 && errorTrend !== 'worsening') {
|
|
189
|
+
stage = 'pattern_formation';
|
|
190
|
+
stageNumber = 2;
|
|
191
|
+
}
|
|
192
|
+
const milestones = [];
|
|
193
|
+
if (totalFiles > 10)
|
|
194
|
+
milestones.push(`${totalFiles} files written`);
|
|
195
|
+
if (monthsActive >= 1)
|
|
196
|
+
milestones.push(`${monthsActive} months active`);
|
|
197
|
+
if (errorTrend === 'improving')
|
|
198
|
+
milestones.push('Error rate improving');
|
|
199
|
+
if (stageNumber >= 2)
|
|
200
|
+
milestones.push('Pattern formation detected');
|
|
201
|
+
if (stageNumber >= 3)
|
|
202
|
+
milestones.push('Mastery achieved');
|
|
203
|
+
progressions.push({
|
|
204
|
+
language: lang,
|
|
205
|
+
stage,
|
|
206
|
+
stageNumber,
|
|
207
|
+
firstSeen,
|
|
208
|
+
lastActive,
|
|
209
|
+
monthsActive,
|
|
210
|
+
totalFiles,
|
|
211
|
+
totalLines: Number(skill.line_count || 0),
|
|
212
|
+
errorRate: Math.round(errorRate * 100) / 100,
|
|
213
|
+
errorTrend,
|
|
214
|
+
milestones,
|
|
215
|
+
evidence: [`Stage ${stageNumber}: ${stage}`, `${monthsActive} months active`, `${totalFiles} files, ${bugs.cnt} bugs`],
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return progressions.sort((a, b) => b.stageNumber - a.stageNumber || b.monthsActive - a.monthsActive);
|
|
219
|
+
}
|
|
220
|
+
// ─── Technology Mastery Map ──────────────────────────────────────────────────
|
|
221
|
+
function getTechMasteryMap() {
|
|
222
|
+
const db = (0, database_1.getDb)();
|
|
223
|
+
const skills = db.prepare('SELECT * FROM skills ORDER BY file_count DESC').all();
|
|
224
|
+
const mastery = [];
|
|
225
|
+
for (const skill of skills) {
|
|
226
|
+
const lang = String(skill.language || '');
|
|
227
|
+
if (!lang || lang.length < 2)
|
|
228
|
+
continue;
|
|
229
|
+
const monthsActive = String(skill.first_seen || '')
|
|
230
|
+
? Math.max(1, Math.round((Date.now() - new Date(String(skill.first_seen)).getTime()) / (30 * 24 * 60 * 60 * 1000)))
|
|
231
|
+
: 0;
|
|
232
|
+
const fileCount = Number(skill.file_count || 0);
|
|
233
|
+
const lineCount = Number(skill.line_count || 0);
|
|
234
|
+
const projects = db.prepare("SELECT COUNT(DISTINCT project) as cnt FROM behavior_events WHERE file_path LIKE ?").get(`%${lang.toLowerCase()}%`);
|
|
235
|
+
const recentBugs = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' AND file_path LIKE ? AND created_at >= datetime('now', '-30 days')").get(`%${lang.toLowerCase()}%`);
|
|
236
|
+
const olderBugs = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' AND file_path LIKE ? AND created_at >= datetime('now', '-90 days') AND created_at < datetime('now', '-30 days')").get(`%${lang.toLowerCase()}%`);
|
|
237
|
+
const recentErrorRate = fileCount > 0 ? recentBugs.cnt / fileCount : 0;
|
|
238
|
+
const historicalErrorRate = fileCount > 0 ? olderBugs.cnt / fileCount : 0;
|
|
239
|
+
let stage = 'learning';
|
|
240
|
+
let confidence = 30;
|
|
241
|
+
if (monthsActive >= 8 && recentErrorRate < 0.05 && fileCount > 30) {
|
|
242
|
+
stage = 'mastered';
|
|
243
|
+
confidence = 95;
|
|
244
|
+
}
|
|
245
|
+
else if (monthsActive >= 4 && recentErrorRate < 0.1 && fileCount > 15) {
|
|
246
|
+
stage = 'advanced';
|
|
247
|
+
confidence = 80;
|
|
248
|
+
}
|
|
249
|
+
else if (monthsActive >= 2 && fileCount > 5) {
|
|
250
|
+
stage = 'proficient';
|
|
251
|
+
confidence = 60;
|
|
252
|
+
}
|
|
253
|
+
const actualPerformance = Math.max(0, Math.min(100, 100 - Math.round(recentErrorRate * 200)));
|
|
254
|
+
const confidenceGap = Math.abs(confidence - actualPerformance);
|
|
255
|
+
const descriptions = {
|
|
256
|
+
mastered: `${lang}: ${monthsActive} months, ${fileCount} files, near-zero errors. Mastery achieved.`,
|
|
257
|
+
advanced: `${lang}: ${monthsActive} months, ${fileCount} files, low error rate. Advanced level.`,
|
|
258
|
+
proficient: `${lang}: ${monthsActive} months, ${fileCount} files. Proficient — building patterns.`,
|
|
259
|
+
learning: `${lang}: ${monthsActive || '<1'} month, ${fileCount} files. Still learning — expect errors.`,
|
|
260
|
+
};
|
|
261
|
+
mastery.push({
|
|
262
|
+
language: lang,
|
|
263
|
+
stage,
|
|
264
|
+
confidence,
|
|
265
|
+
actualPerformance,
|
|
266
|
+
confidenceGap,
|
|
267
|
+
monthsActive,
|
|
268
|
+
projectCount: projects.cnt,
|
|
269
|
+
fileCount,
|
|
270
|
+
lineCount,
|
|
271
|
+
recentErrorRate: Math.round(recentErrorRate * 100) / 100,
|
|
272
|
+
historicalErrorRate: Math.round(historicalErrorRate * 100) / 100,
|
|
273
|
+
description: descriptions[stage],
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
return mastery.sort((a, b) => b.confidence - a.confidence);
|
|
277
|
+
}
|
|
278
|
+
// ─── Insight Generation Engine ───────────────────────────────────────────────
|
|
279
|
+
function generatePersonalInsights() {
|
|
280
|
+
const db = (0, database_1.getDb)();
|
|
281
|
+
const insights = [];
|
|
282
|
+
const totalSessions = db.prepare('SELECT COUNT(*) as cnt FROM sessions').get().cnt;
|
|
283
|
+
const totalBugs = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix'").get().cnt;
|
|
284
|
+
const totalDecisions = db.prepare('SELECT COUNT(*) as cnt FROM decisions').get().cnt;
|
|
285
|
+
const rightDecisions = db.prepare('SELECT COUNT(*) as cnt FROM decisions WHERE was_right = 1').get().cnt;
|
|
286
|
+
const accuracy = totalDecisions > 0 ? Math.round((rightDecisions / totalDecisions) * 100) : 0;
|
|
287
|
+
const patterns = db.prepare('SELECT COUNT(*) as cnt FROM patterns').get().cnt;
|
|
288
|
+
const skills = db.prepare('SELECT COUNT(*) as cnt FROM skills WHERE level != ?').get('new');
|
|
289
|
+
insights.push({
|
|
290
|
+
type: '6month',
|
|
291
|
+
title: '6-Month Intelligence Report',
|
|
292
|
+
content: `In the last period: ${totalSessions} sessions, ${totalBugs} bugs fixed, ${totalDecisions} decisions (${accuracy}% accurate). ${patterns} patterns learned across ${skills.cnt} technologies.`,
|
|
293
|
+
metrics: { sessions: totalSessions, bugs: totalBugs, decisions: totalDecisions, accuracy, patterns, technologies: skills.cnt },
|
|
294
|
+
generatedAt: new Date().toISOString(),
|
|
295
|
+
});
|
|
296
|
+
const progression = trackSkillProgression();
|
|
297
|
+
const mastered = progression.filter(p => p.stage === 'mastery');
|
|
298
|
+
const learning = progression.filter(p => p.stage === 'learning');
|
|
299
|
+
insights.push({
|
|
300
|
+
type: '1year',
|
|
301
|
+
title: 'Growth Trajectory',
|
|
302
|
+
content: `Technologies mastered: ${mastered.length} (${mastered.map(m => m.language).join(', ') || 'none yet'}). Still learning: ${learning.length} (${learning.map(l => l.language).join(', ') || 'none'}).`,
|
|
303
|
+
metrics: { mastered: mastered.length, learning: learning.length, total: progression.length },
|
|
304
|
+
generatedAt: new Date().toISOString(),
|
|
305
|
+
});
|
|
306
|
+
const rhythm = detectCodingRhythm();
|
|
307
|
+
insights.push({
|
|
308
|
+
type: 'weekly',
|
|
309
|
+
title: 'Weekly Digest',
|
|
310
|
+
content: `Best hours: ${rhythm.bestHours.join(', ') || 'no data'}. Best days: ${rhythm.bestDays.join(', ') || 'no data'}. Optimal session: ${rhythm.optimalSessionMinutes}min.`,
|
|
311
|
+
metrics: { bestHour: 0, avgSession: rhythm.avgSessionMinutes },
|
|
312
|
+
generatedAt: new Date().toISOString(),
|
|
313
|
+
});
|
|
314
|
+
return insights;
|
|
315
|
+
}
|
|
316
|
+
// ─── Career Trajectory ───────────────────────────────────────────────────────
|
|
317
|
+
function getCareerTrajectory() {
|
|
318
|
+
const db = (0, database_1.getDb)();
|
|
319
|
+
const progression = trackSkillProgression();
|
|
320
|
+
const mastery = getTechMasteryMap();
|
|
321
|
+
const totalSessions = db.prepare('SELECT COUNT(*) as cnt FROM sessions').get().cnt;
|
|
322
|
+
const totalDecisions = db.prepare('SELECT COUNT(*) as cnt FROM decisions').get().cnt;
|
|
323
|
+
const rightDecisions = db.prepare('SELECT COUNT(*) as cnt FROM decisions WHERE was_right = 1').get().cnt;
|
|
324
|
+
const accuracy = totalDecisions > 0 ? (rightDecisions / totalDecisions) * 100 : 0;
|
|
325
|
+
const masteredCount = mastery.filter(m => m.stage === 'mastered').length;
|
|
326
|
+
const advancedCount = mastery.filter(m => m.stage === 'advanced').length;
|
|
327
|
+
const totalMonths = mastery.reduce((sum, m) => sum + m.monthsActive, 0);
|
|
328
|
+
let level = 'junior';
|
|
329
|
+
let levelConfidence = 50;
|
|
330
|
+
if (masteredCount >= 3 && accuracy >= 80 && totalSessions > 50) {
|
|
331
|
+
level = 'senior';
|
|
332
|
+
levelConfidence = 85;
|
|
333
|
+
}
|
|
334
|
+
else if (masteredCount >= 1 && advancedCount >= 2 && accuracy >= 65) {
|
|
335
|
+
level = 'mid';
|
|
336
|
+
levelConfidence = 75;
|
|
337
|
+
}
|
|
338
|
+
else if (totalMonths >= 3) {
|
|
339
|
+
level = 'mid';
|
|
340
|
+
levelConfidence = 55;
|
|
341
|
+
}
|
|
342
|
+
const seniorReadiness = Math.min(100, Math.round((masteredCount * 25) + (advancedCount * 15) + (accuracy * 0.3) + (totalSessions > 30 ? 10 : 0)));
|
|
343
|
+
const monthsToSenior = Math.max(0, Math.round((100 - seniorReadiness) / 5));
|
|
344
|
+
const strongAreas = mastery.filter(m => m.stage === 'mastered' || m.stage === 'advanced').map(m => m.language);
|
|
345
|
+
const weakAreas = progression.filter(p => p.stage === 'learning').map(p => p.language);
|
|
346
|
+
const recommendations = [];
|
|
347
|
+
if (weakAreas.length > 0)
|
|
348
|
+
recommendations.push(`Level up: ${weakAreas.join(', ')}`);
|
|
349
|
+
if (accuracy < 70)
|
|
350
|
+
recommendations.push(`Improve decision accuracy (currently ${Math.round(accuracy)}%)`);
|
|
351
|
+
if (masteredCount < 2)
|
|
352
|
+
recommendations.push('Aim to master 2+ technologies before senior');
|
|
353
|
+
if (totalSessions < 30)
|
|
354
|
+
recommendations.push('Increase coding sessions for more evidence');
|
|
355
|
+
return {
|
|
356
|
+
currentLevel: level,
|
|
357
|
+
levelConfidence: Math.round(levelConfidence),
|
|
358
|
+
seniorReadiness,
|
|
359
|
+
monthsToSenior,
|
|
360
|
+
weakAreas,
|
|
361
|
+
strongAreas,
|
|
362
|
+
recommendations,
|
|
363
|
+
evidence: [
|
|
364
|
+
`${masteredCount} technologies mastered`,
|
|
365
|
+
`${advancedCount} technologies advanced`,
|
|
366
|
+
`${accuracy}% decision accuracy`,
|
|
367
|
+
`${totalSessions} total sessions`,
|
|
368
|
+
`${totalMonths} total months active`,
|
|
369
|
+
],
|
|
370
|
+
growthRate: Math.round(seniorReadiness / Math.max(1, totalMonths)),
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
// ─── Weekly Digest ───────────────────────────────────────────────────────────
|
|
374
|
+
function generateWeeklyDigest() {
|
|
375
|
+
const db = (0, database_1.getDb)();
|
|
376
|
+
const since = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
|
|
377
|
+
const sessions = db.prepare("SELECT COUNT(*) as cnt FROM sessions WHERE start_time >= ?").get(since).cnt;
|
|
378
|
+
const bugs = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' AND created_at >= ?").get(since).cnt;
|
|
379
|
+
const decisions = db.prepare("SELECT COUNT(*) as cnt FROM decisions WHERE created_at >= ?").get(since).cnt;
|
|
380
|
+
const patterns = db.prepare("SELECT COUNT(*) as cnt FROM patterns WHERE created_at >= ?").get(since).cnt;
|
|
381
|
+
const topLangs = db.prepare("SELECT language, file_count FROM skills ORDER BY file_count DESC LIMIT 3").all();
|
|
382
|
+
const highlights = [];
|
|
383
|
+
if (sessions > 0)
|
|
384
|
+
highlights.push(`${sessions} coding sessions`);
|
|
385
|
+
if (decisions > 0)
|
|
386
|
+
highlights.push(`${decisions} decisions tracked`);
|
|
387
|
+
if (patterns > 0)
|
|
388
|
+
highlights.push(`${patterns} new patterns`);
|
|
389
|
+
const improvements = [];
|
|
390
|
+
const rhythm = detectCodingRhythm();
|
|
391
|
+
if (rhythm.bestHours.length > 0)
|
|
392
|
+
improvements.push(`Peak hours identified: ${rhythm.bestHours[0]}`);
|
|
393
|
+
const focus = [];
|
|
394
|
+
if (bugs > 5)
|
|
395
|
+
focus.push(`${bugs} bugs this week — review error patterns`);
|
|
396
|
+
return {
|
|
397
|
+
period: 'Last 7 days',
|
|
398
|
+
totalSessions: sessions,
|
|
399
|
+
totalBugs: bugs,
|
|
400
|
+
totalDecisions: decisions,
|
|
401
|
+
newPatterns: patterns,
|
|
402
|
+
topLanguages: topLangs.map(l => l.language),
|
|
403
|
+
highlights,
|
|
404
|
+
improvements,
|
|
405
|
+
areasToFocus: focus,
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=personal-intelligence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personal-intelligence.js","sourceRoot":"","sources":["../src/personal-intelligence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface Prediction {
|
|
2
|
+
type: 'repeat_mistake' | 'decision_regret' | 'complexity_trap' | 'energy_warning' | 'tool_suggestion';
|
|
3
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
4
|
+
message: string;
|
|
5
|
+
evidence: string;
|
|
6
|
+
suggestion: string;
|
|
7
|
+
}
|
|
8
|
+
export interface PredictiveReport {
|
|
9
|
+
project: string;
|
|
10
|
+
predictions: Prediction[];
|
|
11
|
+
repeatMistakeCount: number;
|
|
12
|
+
decisionsToReconsider: number;
|
|
13
|
+
complexityRisk: boolean;
|
|
14
|
+
energyInsight: string;
|
|
15
|
+
generatedAt: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function generatePredictions(project?: string): PredictiveReport;
|
|
18
|
+
export declare function getQuickWarnings(project?: string): string[];
|
|
19
|
+
//# sourceMappingURL=predictive-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predictive-engine.d.ts","sourceRoot":"","sources":["../src/predictive-engine.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IACtG,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA4GtE;AAID,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAM3D"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generatePredictions = generatePredictions;
|
|
4
|
+
exports.getQuickWarnings = getQuickWarnings;
|
|
5
|
+
const database_1 = require("./core/database");
|
|
6
|
+
// ─── Prediction Engine ───────────────────────────────────────────────────────
|
|
7
|
+
function generatePredictions(project) {
|
|
8
|
+
const db = (0, database_1.getDb)();
|
|
9
|
+
const predictions = [];
|
|
10
|
+
// ── 1. Repeat Mistakes ─────────────────────────────────────────────
|
|
11
|
+
const errorQuery = project
|
|
12
|
+
? `SELECT error_type, error_message, file_path, COUNT(*) as cnt, MAX(occurred_at) as last FROM error_log WHERE (fix_applied IS NULL OR fix_applied = '') AND project = '${project.replace(/'/g, "''")}' GROUP BY error_type, error_message HAVING cnt > 1 ORDER BY cnt DESC LIMIT 10`
|
|
13
|
+
: `SELECT error_type, error_message, file_path, COUNT(*) as cnt, MAX(occurred_at) as last FROM error_log WHERE fix_applied IS NULL OR fix_applied = '' GROUP BY error_type, error_message HAVING cnt > 1 ORDER BY cnt DESC LIMIT 10`;
|
|
14
|
+
const errors = db.prepare(errorQuery).all();
|
|
15
|
+
for (const err of errors) {
|
|
16
|
+
predictions.push({
|
|
17
|
+
type: 'repeat_mistake',
|
|
18
|
+
severity: err.cnt > 3 ? 'critical' : err.cnt > 1 ? 'high' : 'medium',
|
|
19
|
+
message: `"${err.error_message}" — ${err.cnt}x repeated`,
|
|
20
|
+
evidence: `Last: ${err.last}, File: ${err.file_path || 'unknown'}`,
|
|
21
|
+
suggestion: 'Fix pattern, not just instance. Check if root cause is same.',
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
// ── 2. Decision Regret (from behavioral + git decisions) ────────────
|
|
25
|
+
const decQuery = project
|
|
26
|
+
? `SELECT decision, approach, result, worked, context, decided_at FROM decision_log WHERE project = '${project.replace(/'/g, "''")}' ORDER BY decided_at DESC LIMIT 20`
|
|
27
|
+
: 'SELECT decision, approach, result, worked, context, decided_at FROM decision_log ORDER BY decided_at DESC LIMIT 20';
|
|
28
|
+
const decisions = db.prepare(decQuery).all();
|
|
29
|
+
const failedDecisions = decisions.filter(d => !d.worked);
|
|
30
|
+
for (const d of failedDecisions.slice(0, 3)) {
|
|
31
|
+
predictions.push({
|
|
32
|
+
type: 'decision_regret',
|
|
33
|
+
severity: 'medium',
|
|
34
|
+
message: `"${d.decision}" — did not work out`,
|
|
35
|
+
evidence: `Approach: ${d.approach}. Context: ${d.context || 'unknown'}`,
|
|
36
|
+
suggestion: 'Reconsider this approach. Look at alternatives that succeeded.',
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// ── 3. Complexity Trap (from AST nesting depth) ─────────────────────
|
|
40
|
+
const complexQuery = project
|
|
41
|
+
? `SELECT pattern_value, count FROM code_patterns WHERE pattern_type = 'blind_spot_deep_nesting' AND project = '${project.replace(/'/g, "''")}' ORDER BY count DESC LIMIT 5`
|
|
42
|
+
: `SELECT pattern_value, count FROM code_patterns WHERE pattern_type = 'blind_spot_deep_nesting' ORDER BY count DESC LIMIT 5`;
|
|
43
|
+
const complexFiles = db.prepare(complexQuery).all();
|
|
44
|
+
for (const cf of complexFiles) {
|
|
45
|
+
predictions.push({
|
|
46
|
+
type: 'complexity_trap',
|
|
47
|
+
severity: cf.count > 10 ? 'critical' : 'high',
|
|
48
|
+
message: `Deep nesting detected (${cf.count} levels)`,
|
|
49
|
+
evidence: `${cf.pattern_value}`,
|
|
50
|
+
suggestion: 'Break into smaller functions. Each function should do ONE thing.',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// ── 4. Energy-Based Prediction (from time patterns in git) ──────────
|
|
54
|
+
// ── 5. Empty Catch Blocks (errors silently swallowed) ───────────────
|
|
55
|
+
const emptyQuery = project
|
|
56
|
+
? `SELECT pattern_value, count FROM code_patterns WHERE pattern_type = 'blind_spot_empty_catch' AND project = '${project.replace(/'/g, "''")}' ORDER BY count DESC LIMIT 3`
|
|
57
|
+
: `SELECT pattern_value, count FROM code_patterns WHERE pattern_type = 'blind_spot_empty_catch' ORDER BY count DESC LIMIT 3`;
|
|
58
|
+
const emptyCatches = db.prepare(emptyQuery).all();
|
|
59
|
+
const now = new Date();
|
|
60
|
+
const hour = now.getHours();
|
|
61
|
+
const day = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][now.getDay()];
|
|
62
|
+
if (hour >= 17 || hour < 8) {
|
|
63
|
+
predictions.push({
|
|
64
|
+
type: 'energy_warning',
|
|
65
|
+
severity: 'medium',
|
|
66
|
+
message: `Late/early coding session (${hour}:00)`,
|
|
67
|
+
evidence: `Day: ${day}. Bug rates typically 2-4x higher outside 9am-5pm.`,
|
|
68
|
+
suggestion: 'Complex logic ke liye morning session better. Abhi sirf simple fixes kar.',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (day === 'Fri' && hour >= 15) {
|
|
72
|
+
predictions.push({
|
|
73
|
+
type: 'energy_warning',
|
|
74
|
+
severity: 'high',
|
|
75
|
+
message: `Friday evening coding — take extra care`,
|
|
76
|
+
evidence: 'Friday evening bug rate historically 3-4x higher.',
|
|
77
|
+
suggestion: 'Aaj complex features mat push kar. Simple fixes aur testing kar.',
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// ── Summary ─────────────────────────────────────────────────────────
|
|
81
|
+
const repeatCount = predictions.filter(p => p.type === 'repeat_mistake').length;
|
|
82
|
+
const decisionCount = predictions.filter(p => p.type === 'decision_regret').length;
|
|
83
|
+
const complexityRisk = predictions.filter(p => p.type === 'complexity_trap').length > 0;
|
|
84
|
+
let energyInsight = 'No energy warnings. Keep going! 🚀';
|
|
85
|
+
const energyWarnings = predictions.filter(p => p.type === 'energy_warning');
|
|
86
|
+
if (energyWarnings.length > 0) {
|
|
87
|
+
energyInsight = energyWarnings[0].suggestion;
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
project: project || 'all',
|
|
91
|
+
predictions,
|
|
92
|
+
repeatMistakeCount: repeatCount,
|
|
93
|
+
decisionsToReconsider: decisionCount,
|
|
94
|
+
complexityRisk,
|
|
95
|
+
energyInsight,
|
|
96
|
+
generatedAt: new Date().toISOString(),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// ─── Quick Warning (lightweight for real-time) ──────────────────────────────
|
|
100
|
+
function getQuickWarnings(project) {
|
|
101
|
+
const report = generatePredictions(project);
|
|
102
|
+
return report.predictions
|
|
103
|
+
.filter(p => p.severity === 'critical' || p.severity === 'high')
|
|
104
|
+
.slice(0, 3)
|
|
105
|
+
.map(p => `⚠ ${p.message} — ${p.suggestion}`);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=predictive-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predictive-engine.js","sourceRoot":"","sources":["../src/predictive-engine.ts"],"names":[],"mappings":"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"}
|