@boshu2/vibe-check 1.6.2 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/bundles/actionable-coaching-plan-2025-12-02.md +209 -0
- package/.agents/bundles/automatic-learning-cadence-plan-2025-12-02.md +1297 -0
- package/.agents/bundles/automatic-learning-cadence-research-2025-12-02.md +481 -0
- package/.agents/bundles/dashboard-data-quality-plan.md +458 -0
- package/.agents/bundles/rating-scoring-alignment-plan.md +427 -0
- package/.agents/bundles/rpi-session-capture-plan-2025-12-02.md +693 -0
- package/.agents/bundles/rpi-session-capture-research-2025-12-02.md +433 -0
- package/.agents/bundles/session-integration-plan-2025-12-02.md +144 -0
- package/.agents/plans/git-forensics-enhancement-2025-12-05.md +493 -0
- package/.claude/skills/typescript-review.md +152 -0
- package/CHANGELOG.md +53 -0
- package/CLAUDE.md +79 -3
- package/Makefile +160 -0
- package/README.md +141 -155
- package/SECURITY.md +5 -1
- package/assets/logo-dark.svg +47 -0
- package/assets/logo.svg +47 -0
- package/claude-progress.json +54 -4
- package/claude-progress.txt +114 -0
- package/dashboard/app.js +699 -66
- package/dashboard/chart.min.js +20 -0
- package/dashboard/dashboard-data.js +764 -0
- package/dashboard/dashboard-data.json +182 -71
- package/dashboard/index.html +139 -14
- package/dashboard/styles.css +579 -4
- package/dist/analyzers/patterns.d.ts +62 -0
- package/dist/analyzers/patterns.d.ts.map +1 -0
- package/dist/analyzers/patterns.js +103 -0
- package/dist/analyzers/patterns.js.map +1 -0
- package/dist/analyzers/quality.d.ts +58 -0
- package/dist/analyzers/quality.d.ts.map +1 -0
- package/dist/analyzers/quality.js +114 -0
- package/dist/analyzers/quality.js.map +1 -0
- package/dist/analyzers/sessions.d.ts +45 -0
- package/dist/analyzers/sessions.d.ts.map +1 -0
- package/dist/analyzers/sessions.js +123 -0
- package/dist/analyzers/sessions.js.map +1 -0
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +43 -2
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/dashboard.js +4 -1
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/forensics.d.ts +29 -0
- package/dist/commands/forensics.d.ts.map +1 -0
- package/dist/commands/forensics.js +213 -0
- package/dist/commands/forensics.js.map +1 -0
- package/dist/commands/index.d.ts +5 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +13 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/insights.d.ts +3 -0
- package/dist/commands/insights.d.ts.map +1 -0
- package/dist/commands/insights.js +120 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/learn.d.ts +3 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +161 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/lesson.d.ts +8 -0
- package/dist/commands/lesson.d.ts.map +1 -0
- package/dist/commands/lesson.js +206 -0
- package/dist/commands/lesson.js.map +1 -0
- package/dist/commands/pipeline.d.ts +3 -0
- package/dist/commands/pipeline.d.ts.map +1 -0
- package/dist/commands/pipeline.js +485 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/profile.d.ts +0 -1
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +3 -206
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/session.d.ts +51 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +599 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/sessions.d.ts +20 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +201 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +48 -7
- package/dist/commands/watch.js.map +1 -1
- package/dist/gamification/index.d.ts +1 -3
- package/dist/gamification/index.d.ts.map +1 -1
- package/dist/gamification/index.js +2 -5
- package/dist/gamification/index.js.map +1 -1
- package/dist/gamification/pattern-memory.d.ts +1 -1
- package/dist/gamification/pattern-memory.d.ts.map +1 -1
- package/dist/gamification/pattern-memory.js.map +1 -1
- package/dist/gamification/profile.d.ts +2 -2
- package/dist/gamification/profile.d.ts.map +1 -1
- package/dist/gamification/profile.js +2 -15
- package/dist/gamification/profile.js.map +1 -1
- package/dist/gamification/types.d.ts +8 -2
- package/dist/gamification/types.d.ts.map +1 -1
- package/dist/gamification/types.js.map +1 -1
- package/dist/insights/index.d.ts.map +1 -1
- package/dist/insights/index.js +16 -4
- package/dist/insights/index.js.map +1 -1
- package/dist/insights/types.d.ts +14 -0
- package/dist/insights/types.d.ts.map +1 -1
- package/dist/learning/cadence.d.ts +15 -0
- package/dist/learning/cadence.d.ts.map +1 -0
- package/dist/learning/cadence.js +130 -0
- package/dist/learning/cadence.js.map +1 -0
- package/dist/learning/index.d.ts +19 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +35 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/lessons-storage.d.ts +48 -0
- package/dist/learning/lessons-storage.d.ts.map +1 -0
- package/dist/learning/lessons-storage.js +266 -0
- package/dist/learning/lessons-storage.js.map +1 -0
- package/dist/learning/lessons-types.d.ts +83 -0
- package/dist/learning/lessons-types.d.ts.map +1 -0
- package/dist/learning/lessons-types.js +15 -0
- package/dist/learning/lessons-types.js.map +1 -0
- package/dist/learning/nudges.d.ts +20 -0
- package/dist/learning/nudges.d.ts.map +1 -0
- package/dist/learning/nudges.js +68 -0
- package/dist/learning/nudges.js.map +1 -0
- package/dist/learning/retrospective.d.ts +27 -0
- package/dist/learning/retrospective.d.ts.map +1 -0
- package/dist/learning/retrospective.js +184 -0
- package/dist/learning/retrospective.js.map +1 -0
- package/dist/learning/storage.d.ts +44 -0
- package/dist/learning/storage.d.ts.map +1 -0
- package/dist/learning/storage.js +194 -0
- package/dist/learning/storage.js.map +1 -0
- package/dist/learning/surfacing.d.ts +36 -0
- package/dist/learning/surfacing.d.ts.map +1 -0
- package/dist/learning/surfacing.js +255 -0
- package/dist/learning/surfacing.js.map +1 -0
- package/dist/learning/synthesis.d.ts +17 -0
- package/dist/learning/synthesis.d.ts.map +1 -0
- package/dist/learning/synthesis.js +293 -0
- package/dist/learning/synthesis.js.map +1 -0
- package/dist/learning/types.d.ts +60 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +17 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +11 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/spiral-history.d.ts +62 -0
- package/dist/storage/spiral-history.d.ts.map +1 -0
- package/dist/storage/spiral-history.js +265 -0
- package/dist/storage/spiral-history.js.map +1 -0
- package/docs/ARCHITECTURE.md +2 -10
- package/docs/GAMIFICATION.md +19 -266
- package/docs/METRICS.md +528 -0
- package/docs/VIBE-ECOSYSTEM.md +12 -78
- package/feature-list.json +141 -68
- package/package.json +1 -1
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lessons Database Storage
|
|
4
|
+
*
|
|
5
|
+
* Persists lessons to ~/.vibe-check/lessons.json (global, not per-repo).
|
|
6
|
+
* Lessons are meant to accumulate across all repositories.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.getLessonsPath = getLessonsPath;
|
|
43
|
+
exports.createInitialLessonsDatabase = createInitialLessonsDatabase;
|
|
44
|
+
exports.loadLessons = loadLessons;
|
|
45
|
+
exports.saveLessons = saveLessons;
|
|
46
|
+
exports.upsertLesson = upsertLesson;
|
|
47
|
+
exports.getLessonById = getLessonById;
|
|
48
|
+
exports.getLessonsForPattern = getLessonsForPattern;
|
|
49
|
+
exports.getActiveLessons = getActiveLessons;
|
|
50
|
+
exports.dismissLesson = dismissLesson;
|
|
51
|
+
exports.applyLesson = applyLesson;
|
|
52
|
+
const fs = __importStar(require("fs"));
|
|
53
|
+
const path = __importStar(require("path"));
|
|
54
|
+
const os = __importStar(require("os"));
|
|
55
|
+
const lessons_types_1 = require("./lessons-types");
|
|
56
|
+
const LESSONS_DIR = '.vibe-check';
|
|
57
|
+
const LESSONS_FILE = 'lessons.json';
|
|
58
|
+
/**
|
|
59
|
+
* Get lessons database file path (global)
|
|
60
|
+
*/
|
|
61
|
+
function getLessonsPath() {
|
|
62
|
+
return path.join(os.homedir(), LESSONS_DIR, LESSONS_FILE);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create initial empty lessons database
|
|
66
|
+
*/
|
|
67
|
+
function createInitialLessonsDatabase() {
|
|
68
|
+
const now = new Date().toISOString();
|
|
69
|
+
return {
|
|
70
|
+
version: lessons_types_1.LESSONS_DB_VERSION,
|
|
71
|
+
lastUpdated: now,
|
|
72
|
+
lastSynthesis: '',
|
|
73
|
+
lessons: [],
|
|
74
|
+
lessonsByPattern: {},
|
|
75
|
+
stats: {
|
|
76
|
+
totalLessons: 0,
|
|
77
|
+
activeLessons: 0,
|
|
78
|
+
patternsWithLessons: 0,
|
|
79
|
+
averageConfidence: 0,
|
|
80
|
+
totalTimeWastedMinutes: 0,
|
|
81
|
+
},
|
|
82
|
+
synthesisLog: [],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Load lessons database from disk
|
|
87
|
+
*/
|
|
88
|
+
function loadLessons() {
|
|
89
|
+
const filePath = getLessonsPath();
|
|
90
|
+
if (fs.existsSync(filePath)) {
|
|
91
|
+
try {
|
|
92
|
+
const data = fs.readFileSync(filePath, 'utf-8');
|
|
93
|
+
const db = JSON.parse(data);
|
|
94
|
+
return migrateLessonsDatabase(db);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return createInitialLessonsDatabase();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return createInitialLessonsDatabase();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Save lessons database to disk
|
|
104
|
+
*/
|
|
105
|
+
function saveLessons(db) {
|
|
106
|
+
const dirPath = path.join(os.homedir(), LESSONS_DIR);
|
|
107
|
+
const filePath = getLessonsPath();
|
|
108
|
+
if (!fs.existsSync(dirPath)) {
|
|
109
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
110
|
+
}
|
|
111
|
+
// Update metadata
|
|
112
|
+
db.lastUpdated = new Date().toISOString();
|
|
113
|
+
db.stats = computeStats(db);
|
|
114
|
+
// Trim if too many lessons
|
|
115
|
+
if (db.lessons.length > lessons_types_1.MAX_LESSONS) {
|
|
116
|
+
db.lessons = trimLessons(db.lessons);
|
|
117
|
+
}
|
|
118
|
+
// Rebuild index
|
|
119
|
+
db.lessonsByPattern = buildPatternIndex(db.lessons);
|
|
120
|
+
fs.writeFileSync(filePath, JSON.stringify(db, null, 2));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Add or update a lesson in the database
|
|
124
|
+
*/
|
|
125
|
+
function upsertLesson(db, lesson) {
|
|
126
|
+
const existingIndex = db.lessons.findIndex(l => l.id === lesson.id);
|
|
127
|
+
if (existingIndex >= 0) {
|
|
128
|
+
// Update existing
|
|
129
|
+
db.lessons[existingIndex] = {
|
|
130
|
+
...lesson,
|
|
131
|
+
version: db.lessons[existingIndex].version + 1,
|
|
132
|
+
updatedAt: new Date().toISOString(),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Add new
|
|
137
|
+
db.lessons.push(lesson);
|
|
138
|
+
}
|
|
139
|
+
// Rebuild index
|
|
140
|
+
db.lessonsByPattern = buildPatternIndex(db.lessons);
|
|
141
|
+
return db;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get lesson by ID
|
|
145
|
+
*/
|
|
146
|
+
function getLessonById(db, id) {
|
|
147
|
+
return db.lessons.find(l => l.id === id);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get lessons for a pattern
|
|
151
|
+
*/
|
|
152
|
+
function getLessonsForPattern(db, pattern) {
|
|
153
|
+
const ids = db.lessonsByPattern[pattern] || [];
|
|
154
|
+
return ids
|
|
155
|
+
.map(id => db.lessons.find(l => l.id === id))
|
|
156
|
+
.filter((l) => l !== undefined && !l.dismissed);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get all active (non-dismissed) lessons
|
|
160
|
+
*/
|
|
161
|
+
function getActiveLessons(db) {
|
|
162
|
+
return db.lessons.filter(l => !l.dismissed);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Dismiss a lesson
|
|
166
|
+
*/
|
|
167
|
+
function dismissLesson(db, lessonId) {
|
|
168
|
+
const lesson = db.lessons.find(l => l.id === lessonId);
|
|
169
|
+
if (lesson) {
|
|
170
|
+
lesson.dismissed = true;
|
|
171
|
+
lesson.updatedAt = new Date().toISOString();
|
|
172
|
+
}
|
|
173
|
+
return db;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Mark a lesson as applied with effectiveness score
|
|
177
|
+
*/
|
|
178
|
+
function applyLesson(db, lessonId, effectiveness) {
|
|
179
|
+
const lesson = db.lessons.find(l => l.id === lessonId);
|
|
180
|
+
if (lesson) {
|
|
181
|
+
lesson.applied = true;
|
|
182
|
+
lesson.appliedDate = new Date().toISOString();
|
|
183
|
+
lesson.userEffectiveness = effectiveness;
|
|
184
|
+
lesson.updatedAt = new Date().toISOString();
|
|
185
|
+
// Adjust confidence based on effectiveness
|
|
186
|
+
if (effectiveness >= 70) {
|
|
187
|
+
lesson.confidence = Math.min(100, lesson.confidence + 5);
|
|
188
|
+
}
|
|
189
|
+
else if (effectiveness < 40) {
|
|
190
|
+
lesson.confidence = Math.max(0, lesson.confidence - 10);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return db;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Build pattern → lesson IDs index
|
|
197
|
+
*/
|
|
198
|
+
function buildPatternIndex(lessons) {
|
|
199
|
+
const index = {};
|
|
200
|
+
for (const lesson of lessons) {
|
|
201
|
+
if (!index[lesson.pattern]) {
|
|
202
|
+
index[lesson.pattern] = [];
|
|
203
|
+
}
|
|
204
|
+
index[lesson.pattern].push(lesson.id);
|
|
205
|
+
}
|
|
206
|
+
return index;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Compute database statistics
|
|
210
|
+
*/
|
|
211
|
+
function computeStats(db) {
|
|
212
|
+
const activeLessons = db.lessons.filter(l => !l.dismissed);
|
|
213
|
+
const patterns = new Set(activeLessons.map(l => l.pattern));
|
|
214
|
+
const totalConfidence = activeLessons.reduce((sum, l) => sum + l.confidence, 0);
|
|
215
|
+
const totalTimeWasted = db.lessons.reduce((sum, l) => sum + l.totalTimeWasted, 0);
|
|
216
|
+
return {
|
|
217
|
+
totalLessons: db.lessons.length,
|
|
218
|
+
activeLessons: activeLessons.length,
|
|
219
|
+
patternsWithLessons: patterns.size,
|
|
220
|
+
averageConfidence: activeLessons.length > 0
|
|
221
|
+
? Math.round(totalConfidence / activeLessons.length)
|
|
222
|
+
: 0,
|
|
223
|
+
totalTimeWastedMinutes: totalTimeWasted,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Trim lessons to MAX_LESSONS, keeping most valuable
|
|
228
|
+
*/
|
|
229
|
+
function trimLessons(lessons) {
|
|
230
|
+
// Sort by: not dismissed, confidence, evidence count, recency
|
|
231
|
+
return lessons
|
|
232
|
+
.sort((a, b) => {
|
|
233
|
+
// Keep non-dismissed first
|
|
234
|
+
if (a.dismissed !== b.dismissed)
|
|
235
|
+
return a.dismissed ? 1 : -1;
|
|
236
|
+
// Higher confidence first
|
|
237
|
+
if (a.confidence !== b.confidence)
|
|
238
|
+
return b.confidence - a.confidence;
|
|
239
|
+
// More evidence first
|
|
240
|
+
if (a.evidenceCount !== b.evidenceCount)
|
|
241
|
+
return b.evidenceCount - a.evidenceCount;
|
|
242
|
+
// More recent first
|
|
243
|
+
return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();
|
|
244
|
+
})
|
|
245
|
+
.slice(0, lessons_types_1.MAX_LESSONS);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Migrate old database versions
|
|
249
|
+
*/
|
|
250
|
+
function migrateLessonsDatabase(db) {
|
|
251
|
+
if (!db.version) {
|
|
252
|
+
db.version = lessons_types_1.LESSONS_DB_VERSION;
|
|
253
|
+
}
|
|
254
|
+
// Ensure all fields exist
|
|
255
|
+
if (!db.synthesisLog) {
|
|
256
|
+
db.synthesisLog = [];
|
|
257
|
+
}
|
|
258
|
+
if (!db.lessonsByPattern) {
|
|
259
|
+
db.lessonsByPattern = buildPatternIndex(db.lessons || []);
|
|
260
|
+
}
|
|
261
|
+
if (!db.stats) {
|
|
262
|
+
db.stats = computeStats(db);
|
|
263
|
+
}
|
|
264
|
+
return db;
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=lessons-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lessons-storage.js","sourceRoot":"","sources":["../../src/learning/lessons-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lessons Database Types
|
|
3
|
+
*
|
|
4
|
+
* A lesson is a persistent learning extracted from pattern + intervention data.
|
|
5
|
+
* Unlike nudges (ephemeral), lessons accumulate and get smarter over time.
|
|
6
|
+
*/
|
|
7
|
+
import { InterventionType } from '../gamification/types';
|
|
8
|
+
/**
|
|
9
|
+
* A single lesson learned from recurring patterns
|
|
10
|
+
*/
|
|
11
|
+
export interface Lesson {
|
|
12
|
+
id: string;
|
|
13
|
+
version: number;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
pattern: string;
|
|
17
|
+
components: string[];
|
|
18
|
+
title: string;
|
|
19
|
+
description: string;
|
|
20
|
+
rootCause?: string;
|
|
21
|
+
prevention: string[];
|
|
22
|
+
interventions: LessonIntervention[];
|
|
23
|
+
confidence: number;
|
|
24
|
+
evidenceCount: number;
|
|
25
|
+
totalTimeWasted: number;
|
|
26
|
+
dismissed: boolean;
|
|
27
|
+
applied: boolean;
|
|
28
|
+
appliedDate?: string;
|
|
29
|
+
userEffectiveness?: number;
|
|
30
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
31
|
+
tags: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* An intervention associated with a lesson
|
|
35
|
+
*/
|
|
36
|
+
export interface LessonIntervention {
|
|
37
|
+
type: InterventionType;
|
|
38
|
+
successCount: number;
|
|
39
|
+
totalCount: number;
|
|
40
|
+
effectiveness: number;
|
|
41
|
+
notes?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The lessons database
|
|
45
|
+
*/
|
|
46
|
+
export interface LessonsDatabase {
|
|
47
|
+
version: string;
|
|
48
|
+
lastUpdated: string;
|
|
49
|
+
lastSynthesis: string;
|
|
50
|
+
lessons: Lesson[];
|
|
51
|
+
lessonsByPattern: Record<string, string[]>;
|
|
52
|
+
stats: {
|
|
53
|
+
totalLessons: number;
|
|
54
|
+
activeLessons: number;
|
|
55
|
+
patternsWithLessons: number;
|
|
56
|
+
averageConfidence: number;
|
|
57
|
+
totalTimeWastedMinutes: number;
|
|
58
|
+
};
|
|
59
|
+
synthesisLog: SynthesisLogEntry[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Log entry for synthesis runs
|
|
63
|
+
*/
|
|
64
|
+
export interface SynthesisLogEntry {
|
|
65
|
+
timestamp: string;
|
|
66
|
+
lessonsCreated: number;
|
|
67
|
+
lessonsUpdated: number;
|
|
68
|
+
patternsProcessed: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Result of surfacing lessons for a context
|
|
72
|
+
*/
|
|
73
|
+
export interface SurfacedLesson {
|
|
74
|
+
lesson: Lesson;
|
|
75
|
+
relevanceScore: number;
|
|
76
|
+
reason: string;
|
|
77
|
+
suggestedIntervention?: InterventionType;
|
|
78
|
+
}
|
|
79
|
+
export declare const LESSONS_DB_VERSION = "1.0.0";
|
|
80
|
+
export declare const SYNTHESIS_THRESHOLD = 2;
|
|
81
|
+
export declare const MAX_LESSONS = 100;
|
|
82
|
+
export declare const CONFIDENCE_BASE = 50;
|
|
83
|
+
//# sourceMappingURL=lessons-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lessons-types.d.ts","sourceRoot":"","sources":["../../src/learning/lessons-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,MAAM;IAErB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IAGrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IAGpC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IAGxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IAGtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAGlB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAG3C,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IAGF,YAAY,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,gBAAgB,CAAC;CAC1C;AAGD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lessons Database Types
|
|
4
|
+
*
|
|
5
|
+
* A lesson is a persistent learning extracted from pattern + intervention data.
|
|
6
|
+
* Unlike nudges (ephemeral), lessons accumulate and get smarter over time.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CONFIDENCE_BASE = exports.MAX_LESSONS = exports.SYNTHESIS_THRESHOLD = exports.LESSONS_DB_VERSION = void 0;
|
|
10
|
+
// Constants
|
|
11
|
+
exports.LESSONS_DB_VERSION = '1.0.0';
|
|
12
|
+
exports.SYNTHESIS_THRESHOLD = 2; // Min occurrences to create lesson
|
|
13
|
+
exports.MAX_LESSONS = 100; // Cap lessons database
|
|
14
|
+
exports.CONFIDENCE_BASE = 50; // Starting confidence
|
|
15
|
+
//# sourceMappingURL=lessons-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lessons-types.js","sourceRoot":"","sources":["../../src/learning/lessons-types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAqGH,YAAY;AACC,QAAA,kBAAkB,GAAG,OAAO,CAAC;AAC7B,QAAA,mBAAmB,GAAG,CAAC,CAAC,CAAQ,mCAAmC;AACnE,QAAA,WAAW,GAAG,GAAG,CAAC,CAAc,uBAAuB;AACvD,QAAA,eAAe,GAAG,EAAE,CAAC,CAAW,sBAAsB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nudge Display System
|
|
3
|
+
*
|
|
4
|
+
* Formats and displays nudges in CLI output.
|
|
5
|
+
*/
|
|
6
|
+
import { Nudge } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Format nudges for CLI display (after gamification section)
|
|
9
|
+
*/
|
|
10
|
+
export declare function formatNudgesForCli(maxDisplay?: number): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Get nudge summary for profile command
|
|
13
|
+
*/
|
|
14
|
+
export declare function getNudgeSummary(): {
|
|
15
|
+
pending: number;
|
|
16
|
+
displayed: number;
|
|
17
|
+
dismissed: number;
|
|
18
|
+
nudges: Nudge[];
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=nudges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nudges.d.ts","sourceRoot":"","sources":["../../src/learning/nudges.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,GAAE,MAAU,GAAG,MAAM,EAAE,CA0BnE;AAwBD;;GAEG;AACH,wBAAgB,eAAe,IAAI;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAUA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Nudge Display System
|
|
4
|
+
*
|
|
5
|
+
* Formats and displays nudges in CLI output.
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.formatNudgesForCli = formatNudgesForCli;
|
|
12
|
+
exports.getNudgeSummary = getNudgeSummary;
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
|
+
const storage_1 = require("./storage");
|
|
15
|
+
/**
|
|
16
|
+
* Format nudges for CLI display (after gamification section)
|
|
17
|
+
*/
|
|
18
|
+
function formatNudgesForCli(maxDisplay = 2) {
|
|
19
|
+
const state = (0, storage_1.loadLearningState)();
|
|
20
|
+
const nudges = (0, storage_1.getPendingNudges)(state);
|
|
21
|
+
if (nudges.length === 0) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
const toDisplay = nudges.slice(0, maxDisplay);
|
|
25
|
+
const lines = [];
|
|
26
|
+
lines.push('');
|
|
27
|
+
for (const nudge of toDisplay) {
|
|
28
|
+
lines.push(formatSingleNudge(nudge));
|
|
29
|
+
}
|
|
30
|
+
if (nudges.length > maxDisplay) {
|
|
31
|
+
lines.push(chalk_1.default.gray(` ... and ${nudges.length - maxDisplay} more. Run \`vibe-check profile\` to see all.`));
|
|
32
|
+
}
|
|
33
|
+
// Mark as displayed
|
|
34
|
+
const updatedState = (0, storage_1.markNudgesDisplayed)(state, toDisplay.length);
|
|
35
|
+
(0, storage_1.saveLearningState)(updatedState);
|
|
36
|
+
return lines;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Format a single nudge for display
|
|
40
|
+
*/
|
|
41
|
+
function formatSingleNudge(nudge) {
|
|
42
|
+
const lines = [];
|
|
43
|
+
// Color based on type
|
|
44
|
+
const colorFn = nudge.type === 'pattern' ? chalk_1.default.yellow :
|
|
45
|
+
nudge.type === 'retro' ? chalk_1.default.cyan :
|
|
46
|
+
nudge.type === 'achievement' ? chalk_1.default.green :
|
|
47
|
+
chalk_1.default.white;
|
|
48
|
+
lines.push(colorFn(` ${nudge.icon} ${nudge.title}`));
|
|
49
|
+
lines.push(chalk_1.default.gray(` ${nudge.message}`));
|
|
50
|
+
if (nudge.action) {
|
|
51
|
+
lines.push(chalk_1.default.gray(` ${nudge.action}`));
|
|
52
|
+
}
|
|
53
|
+
return lines.join('\n');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get nudge summary for profile command
|
|
57
|
+
*/
|
|
58
|
+
function getNudgeSummary() {
|
|
59
|
+
const state = (0, storage_1.loadLearningState)();
|
|
60
|
+
const pending = (0, storage_1.getPendingNudges)(state);
|
|
61
|
+
return {
|
|
62
|
+
pending: pending.length,
|
|
63
|
+
displayed: state.nudgesDisplayed,
|
|
64
|
+
dismissed: state.nudgesDismissed,
|
|
65
|
+
nudges: pending,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=nudges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nudges.js","sourceRoot":"","sources":["../../src/learning/nudges.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AASH,gDA0BC;AA2BD,0CAeC;AA3ED,kDAA0B;AAE1B,uCAAwG;AAExG;;GAEG;AACH,SAAgB,kBAAkB,CAAC,aAAqB,CAAC;IACvD,MAAM,KAAK,GAAG,IAAA,2BAAiB,GAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,GAAG,UAAU,+CAA+C,CAAC,CAAC,CAAC;IACjH,CAAC;IAED,oBAAoB;IACpB,MAAM,YAAY,GAAG,IAAA,6BAAmB,EAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClE,IAAA,2BAAiB,EAAC,YAAY,CAAC,CAAC;IAEhC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAY;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,sBAAsB;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC;gBAC5C,eAAK,CAAC,KAAK,CAAC;IAE5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEhD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAM7B,MAAM,KAAK,GAAG,IAAA,2BAAiB,GAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;IAExC,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,SAAS,EAAE,KAAK,CAAC,eAAe;QAChC,SAAS,EAAE,KAAK,CAAC,eAAe;QAChC,MAAM,EAAE,OAAO;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retrospective System
|
|
3
|
+
*
|
|
4
|
+
* Generates weekly retrospective summaries from accumulated data.
|
|
5
|
+
*/
|
|
6
|
+
import { RetroSummary } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Generate a weekly retrospective summary
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateWeeklyRetro(): RetroSummary;
|
|
11
|
+
/**
|
|
12
|
+
* Display retrospective in terminal
|
|
13
|
+
*/
|
|
14
|
+
export declare function displayRetro(summary: RetroSummary): void;
|
|
15
|
+
/**
|
|
16
|
+
* Run and save retrospective
|
|
17
|
+
*/
|
|
18
|
+
export declare function runAndSaveRetro(): RetroSummary;
|
|
19
|
+
/**
|
|
20
|
+
* Check if retrospective is due
|
|
21
|
+
*/
|
|
22
|
+
export declare function isRetroDue(): {
|
|
23
|
+
due: boolean;
|
|
24
|
+
reason: string;
|
|
25
|
+
daysSince: number;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=retrospective.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrospective.d.ts","sourceRoot":"","sources":["../../src/learning/retrospective.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQvC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,CA+DlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAwDxD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAuC9C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAgBhF"}
|