@boshu2/vibe-check 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.agents/bundles/automatic-learning-cadence-plan-2025-12-02.md +1297 -0
  2. package/.agents/bundles/automatic-learning-cadence-research-2025-12-02.md +481 -0
  3. package/.agents/bundles/dashboard-data-quality-plan.md +458 -0
  4. package/.agents/bundles/rating-scoring-alignment-plan.md +427 -0
  5. package/.agents/bundles/rpi-session-capture-plan-2025-12-02.md +693 -0
  6. package/.agents/bundles/rpi-session-capture-research-2025-12-02.md +433 -0
  7. package/.agents/bundles/session-integration-plan-2025-12-02.md +144 -0
  8. package/CHANGELOG.md +17 -0
  9. package/CLAUDE.md +74 -2
  10. package/Makefile +173 -0
  11. package/README.md +35 -2
  12. package/claude-progress.json +34 -5
  13. package/claude-progress.txt +66 -0
  14. package/dashboard/app.js +699 -66
  15. package/dashboard/chart.min.js +20 -0
  16. package/dashboard/dashboard-data.js +764 -0
  17. package/dashboard/dashboard-data.json +182 -71
  18. package/dashboard/index.html +139 -14
  19. package/dashboard/styles.css +579 -4
  20. package/dist/cli.js +1 -1
  21. package/dist/cli.js.map +1 -1
  22. package/dist/commands/analyze.d.ts.map +1 -1
  23. package/dist/commands/analyze.js +38 -2
  24. package/dist/commands/analyze.js.map +1 -1
  25. package/dist/commands/dashboard.js +4 -1
  26. package/dist/commands/dashboard.js.map +1 -1
  27. package/dist/commands/index.d.ts +1 -1
  28. package/dist/commands/index.d.ts.map +1 -1
  29. package/dist/commands/index.js +3 -3
  30. package/dist/commands/index.js.map +1 -1
  31. package/dist/commands/learn.d.ts +3 -0
  32. package/dist/commands/learn.d.ts.map +1 -0
  33. package/dist/commands/learn.js +161 -0
  34. package/dist/commands/learn.js.map +1 -0
  35. package/dist/commands/lesson.d.ts +8 -0
  36. package/dist/commands/lesson.d.ts.map +1 -0
  37. package/dist/commands/lesson.js +206 -0
  38. package/dist/commands/lesson.js.map +1 -0
  39. package/dist/commands/profile.d.ts.map +1 -1
  40. package/dist/commands/profile.js +3 -202
  41. package/dist/commands/profile.js.map +1 -1
  42. package/dist/commands/session.d.ts +51 -0
  43. package/dist/commands/session.d.ts.map +1 -0
  44. package/dist/commands/session.js +561 -0
  45. package/dist/commands/session.js.map +1 -0
  46. package/dist/gamification/index.d.ts +1 -3
  47. package/dist/gamification/index.d.ts.map +1 -1
  48. package/dist/gamification/index.js +2 -5
  49. package/dist/gamification/index.js.map +1 -1
  50. package/dist/gamification/pattern-memory.d.ts +1 -1
  51. package/dist/gamification/pattern-memory.d.ts.map +1 -1
  52. package/dist/gamification/pattern-memory.js.map +1 -1
  53. package/dist/gamification/profile.d.ts +2 -2
  54. package/dist/gamification/profile.d.ts.map +1 -1
  55. package/dist/gamification/profile.js +2 -15
  56. package/dist/gamification/profile.js.map +1 -1
  57. package/dist/gamification/types.d.ts +8 -2
  58. package/dist/gamification/types.d.ts.map +1 -1
  59. package/dist/gamification/types.js.map +1 -1
  60. package/dist/insights/index.d.ts.map +1 -1
  61. package/dist/insights/index.js +16 -4
  62. package/dist/insights/index.js.map +1 -1
  63. package/dist/insights/types.d.ts +14 -0
  64. package/dist/insights/types.d.ts.map +1 -1
  65. package/dist/learning/cadence.d.ts +15 -0
  66. package/dist/learning/cadence.d.ts.map +1 -0
  67. package/dist/learning/cadence.js +130 -0
  68. package/dist/learning/cadence.js.map +1 -0
  69. package/dist/learning/index.d.ts +19 -0
  70. package/dist/learning/index.d.ts.map +1 -0
  71. package/dist/learning/index.js +35 -0
  72. package/dist/learning/index.js.map +1 -0
  73. package/dist/learning/lessons-storage.d.ts +48 -0
  74. package/dist/learning/lessons-storage.d.ts.map +1 -0
  75. package/dist/learning/lessons-storage.js +266 -0
  76. package/dist/learning/lessons-storage.js.map +1 -0
  77. package/dist/learning/lessons-types.d.ts +83 -0
  78. package/dist/learning/lessons-types.d.ts.map +1 -0
  79. package/dist/learning/lessons-types.js +15 -0
  80. package/dist/learning/lessons-types.js.map +1 -0
  81. package/dist/learning/nudges.d.ts +20 -0
  82. package/dist/learning/nudges.d.ts.map +1 -0
  83. package/dist/learning/nudges.js +68 -0
  84. package/dist/learning/nudges.js.map +1 -0
  85. package/dist/learning/retrospective.d.ts +27 -0
  86. package/dist/learning/retrospective.d.ts.map +1 -0
  87. package/dist/learning/retrospective.js +184 -0
  88. package/dist/learning/retrospective.js.map +1 -0
  89. package/dist/learning/storage.d.ts +44 -0
  90. package/dist/learning/storage.d.ts.map +1 -0
  91. package/dist/learning/storage.js +194 -0
  92. package/dist/learning/storage.js.map +1 -0
  93. package/dist/learning/surfacing.d.ts +36 -0
  94. package/dist/learning/surfacing.d.ts.map +1 -0
  95. package/dist/learning/surfacing.js +255 -0
  96. package/dist/learning/surfacing.js.map +1 -0
  97. package/dist/learning/synthesis.d.ts +17 -0
  98. package/dist/learning/synthesis.d.ts.map +1 -0
  99. package/dist/learning/synthesis.js +293 -0
  100. package/dist/learning/synthesis.js.map +1 -0
  101. package/dist/learning/types.d.ts +60 -0
  102. package/dist/learning/types.d.ts.map +1 -0
  103. package/dist/learning/types.js +17 -0
  104. package/dist/learning/types.js.map +1 -0
  105. package/docs/METRICS.md +528 -0
  106. package/feature-list.json +21 -0
  107. package/package.json +1 -1
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ /**
3
+ * Retrospective System
4
+ *
5
+ * Generates weekly retrospective summaries from accumulated data.
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.generateWeeklyRetro = generateWeeklyRetro;
12
+ exports.displayRetro = displayRetro;
13
+ exports.runAndSaveRetro = runAndSaveRetro;
14
+ exports.isRetroDue = isRetroDue;
15
+ const chalk_1 = __importDefault(require("chalk"));
16
+ const storage_1 = require("./storage");
17
+ const profile_1 = require("../gamification/profile");
18
+ const pattern_memory_1 = require("../gamification/pattern-memory");
19
+ const intervention_memory_1 = require("../gamification/intervention-memory");
20
+ const synthesis_1 = require("./synthesis");
21
+ const surfacing_1 = require("./surfacing");
22
+ /**
23
+ * Generate a weekly retrospective summary
24
+ */
25
+ function generateWeeklyRetro() {
26
+ const profile = (0, profile_1.loadProfile)();
27
+ const sessions = (0, profile_1.getRecentSessions)(profile, 7);
28
+ const now = new Date();
29
+ const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
30
+ // Calculate metrics
31
+ const totalCommits = sessions.reduce((sum, s) => sum + s.commits, 0);
32
+ const totalSpirals = sessions.reduce((sum, s) => sum + s.spirals, 0);
33
+ const avgScore = sessions.length > 0
34
+ ? Math.round(sessions.reduce((sum, s) => sum + s.vibeScore, 0) / sessions.length)
35
+ : 0;
36
+ // Get pattern analysis
37
+ const patternData = (0, pattern_memory_1.formatPatternMemory)(profile.patternMemory);
38
+ const topPattern = patternData.topPatterns[0]?.pattern;
39
+ // Get intervention analysis
40
+ const interventionData = (0, intervention_memory_1.formatInterventionMemory)(profile.interventionMemory);
41
+ const topIntervention = interventionData.topInterventions[0]?.name;
42
+ // Calculate changes from previous week
43
+ const previousSessions = profile.sessions.slice(-14, -7);
44
+ let trustPassRateChange;
45
+ let spiralRateChange;
46
+ if (previousSessions.length > 0 && sessions.length > 0) {
47
+ const currentTrust = sessions.reduce((sum, s) => sum + (s.metrics?.trustPassRate || 0), 0) / sessions.length;
48
+ const prevTrust = previousSessions.reduce((sum, s) => sum + (s.metrics?.trustPassRate || 0), 0) / previousSessions.length;
49
+ trustPassRateChange = Math.round(currentTrust - prevTrust);
50
+ const currentSpiralRate = totalSpirals / sessions.length;
51
+ const prevSpiralRate = previousSessions.reduce((sum, s) => sum + s.spirals, 0) / previousSessions.length;
52
+ spiralRateChange = Math.round((prevSpiralRate - currentSpiralRate) / (prevSpiralRate || 1) * 100);
53
+ }
54
+ // Generate key insight
55
+ let keyInsight = '';
56
+ if (totalSpirals === 0) {
57
+ keyInsight = 'Zero spirals this week - excellent flow state!';
58
+ }
59
+ else if (topPattern && patternData.topPatterns[0]) {
60
+ const topPatternData = patternData.topPatterns[0];
61
+ keyInsight = `${topPatternData.displayName} is your main spiral trigger (${topPatternData.count} occurrences)`;
62
+ }
63
+ else {
64
+ keyInsight = `${sessions.length} sessions completed with ${avgScore}% average score`;
65
+ }
66
+ return {
67
+ date: now.toISOString().split('T')[0],
68
+ periodStart: weekAgo.toISOString().split('T')[0],
69
+ periodEnd: now.toISOString().split('T')[0],
70
+ sessionsCount: sessions.length,
71
+ commitsCount: totalCommits,
72
+ activeMinutes: sessions.length * 30, // Estimate
73
+ topPattern,
74
+ topIntervention,
75
+ keyInsight,
76
+ trustPassRateChange,
77
+ spiralRateChange,
78
+ };
79
+ }
80
+ /**
81
+ * Display retrospective in terminal
82
+ */
83
+ function displayRetro(summary) {
84
+ const profile = (0, profile_1.loadProfile)();
85
+ const patternData = (0, pattern_memory_1.formatPatternMemory)(profile.patternMemory);
86
+ const interventionData = (0, intervention_memory_1.formatInterventionMemory)(profile.interventionMemory);
87
+ console.log('');
88
+ console.log(chalk_1.default.bold.cyan('='.repeat(64)));
89
+ console.log(chalk_1.default.bold.cyan(' WEEKLY RETROSPECTIVE'));
90
+ console.log(chalk_1.default.bold.cyan(` ${summary.periodStart} - ${summary.periodEnd}`));
91
+ console.log(chalk_1.default.bold.cyan('='.repeat(64)));
92
+ console.log('');
93
+ // Sessions summary
94
+ console.log(chalk_1.default.bold.white(' SESSIONS'));
95
+ console.log(` ${summary.sessionsCount} sessions | ${summary.commitsCount} commits`);
96
+ console.log('');
97
+ // Top patterns
98
+ if (patternData.hasData && patternData.topPatterns.length > 0) {
99
+ console.log(chalk_1.default.bold.white(' TOP SPIRAL TRIGGERS'));
100
+ for (const pattern of patternData.topPatterns.slice(0, 3)) {
101
+ console.log(` ${pattern.displayName}: ${pattern.count} spirals (${pattern.totalMinutes} min)`);
102
+ console.log(chalk_1.default.gray(` ${pattern.advice}`));
103
+ }
104
+ console.log('');
105
+ }
106
+ // What worked
107
+ if (interventionData.hasData && interventionData.topInterventions.length > 0) {
108
+ console.log(chalk_1.default.bold.white(' WHAT WORKED'));
109
+ for (const intervention of interventionData.topInterventions.slice(0, 3)) {
110
+ console.log(` ${intervention.icon} ${intervention.name}: ${intervention.count} times`);
111
+ }
112
+ console.log('');
113
+ }
114
+ // Progress
115
+ console.log(chalk_1.default.bold.white(' PROGRESS'));
116
+ if (summary.trustPassRateChange !== undefined) {
117
+ const trustColor = summary.trustPassRateChange >= 0 ? chalk_1.default.green : chalk_1.default.yellow;
118
+ const trustSign = summary.trustPassRateChange >= 0 ? '+' : '';
119
+ console.log(` Trust Pass Rate: ${trustColor(`${trustSign}${summary.trustPassRateChange}%`)}`);
120
+ }
121
+ if (summary.spiralRateChange !== undefined) {
122
+ const spiralColor = summary.spiralRateChange >= 0 ? chalk_1.default.green : chalk_1.default.yellow;
123
+ const spiralSign = summary.spiralRateChange >= 0 ? '+' : '';
124
+ console.log(` Spiral Reduction: ${spiralColor(`${spiralSign}${summary.spiralRateChange}%`)}`);
125
+ }
126
+ console.log('');
127
+ // Key insight
128
+ console.log(chalk_1.default.bold.cyan(` KEY INSIGHT: ${summary.keyInsight}`));
129
+ console.log('');
130
+ console.log(chalk_1.default.bold.cyan('='.repeat(64)));
131
+ console.log('');
132
+ }
133
+ /**
134
+ * Run and save retrospective
135
+ */
136
+ function runAndSaveRetro() {
137
+ const profile = (0, profile_1.loadProfile)();
138
+ const summary = generateWeeklyRetro();
139
+ displayRetro(summary);
140
+ // Synthesize lessons from pattern + intervention memory
141
+ const { lessonsCreated, lessonsUpdated } = (0, synthesis_1.synthesizeLessons)(profile.patternMemory, profile.interventionMemory);
142
+ // Show lessons synthesis results
143
+ if (lessonsCreated > 0 || lessonsUpdated > 0) {
144
+ console.log(chalk_1.default.bold.cyan(' LESSONS SYNTHESIZED'));
145
+ if (lessonsCreated > 0) {
146
+ console.log(chalk_1.default.green(` + ${lessonsCreated} new lessons created`));
147
+ }
148
+ if (lessonsUpdated > 0) {
149
+ console.log(chalk_1.default.cyan(` ~ ${lessonsUpdated} lessons updated`));
150
+ }
151
+ console.log('');
152
+ // Show lessons summary
153
+ const lessonLines = (0, surfacing_1.formatLessonsSummary)();
154
+ for (const line of lessonLines) {
155
+ console.log(line);
156
+ }
157
+ console.log('');
158
+ console.log(chalk_1.default.gray(' Run `vibe-check lesson` to view all lessons'));
159
+ console.log('');
160
+ console.log(chalk_1.default.bold.cyan('='.repeat(64)));
161
+ console.log('');
162
+ }
163
+ const state = (0, storage_1.loadLearningState)();
164
+ const updatedState = (0, storage_1.recordRetroCompletion)(state, summary);
165
+ (0, storage_1.saveLearningState)(updatedState);
166
+ return summary;
167
+ }
168
+ /**
169
+ * Check if retrospective is due
170
+ */
171
+ function isRetroDue() {
172
+ const state = (0, storage_1.loadLearningState)();
173
+ if (!state.lastWeeklyRetro) {
174
+ return { due: true, reason: 'No retrospective recorded yet', daysSince: 999 };
175
+ }
176
+ const lastRetro = new Date(state.lastWeeklyRetro);
177
+ const now = new Date();
178
+ const daysSince = Math.floor((now.getTime() - lastRetro.getTime()) / (1000 * 60 * 60 * 24));
179
+ if (daysSince >= 7) {
180
+ return { due: true, reason: `${daysSince} days since last retrospective`, daysSince };
181
+ }
182
+ return { due: false, reason: '', daysSince };
183
+ }
184
+ //# sourceMappingURL=retrospective.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrospective.js","sourceRoot":"","sources":["../../src/learning/retrospective.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Learning State Storage
3
+ *
4
+ * Manages persistence of learning state to ~/.vibe-check/learning-state.json
5
+ * This is global (not per-repo) to track cross-repo patterns.
6
+ */
7
+ import { LearningState, Nudge, RetroSummary } from './types';
8
+ /**
9
+ * Get learning state file path (global)
10
+ */
11
+ export declare function getLearningStatePath(): string;
12
+ /**
13
+ * Create initial learning state
14
+ */
15
+ export declare function createInitialLearningState(): LearningState;
16
+ /**
17
+ * Load learning state from disk
18
+ */
19
+ export declare function loadLearningState(): LearningState;
20
+ /**
21
+ * Save learning state to disk
22
+ */
23
+ export declare function saveLearningState(state: LearningState): void;
24
+ /**
25
+ * Add a nudge to the queue
26
+ */
27
+ export declare function addNudge(state: LearningState, nudge: Omit<Nudge, 'id' | 'createdAt'>): LearningState;
28
+ /**
29
+ * Get pending nudges (not dismissed, not expired)
30
+ */
31
+ export declare function getPendingNudges(state: LearningState): Nudge[];
32
+ /**
33
+ * Dismiss a nudge by ID
34
+ */
35
+ export declare function dismissNudge(state: LearningState, nudgeId: string): LearningState;
36
+ /**
37
+ * Mark nudges as displayed
38
+ */
39
+ export declare function markNudgesDisplayed(state: LearningState, count: number): LearningState;
40
+ /**
41
+ * Record retrospective completion
42
+ */
43
+ export declare function recordRetroCompletion(state: LearningState, summary: RetroSummary): LearningState;
44
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/learning/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EACL,aAAa,EACb,KAAK,EACL,YAAY,EAGb,MAAM,SAAS,CAAC;AAMjB;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,aAAa,CAc1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAcjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAS5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,aAAa,CAoBpG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,KAAK,EAAE,CAM9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAQjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAKtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,YAAY,GACpB,aAAa,CAUf"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ /**
3
+ * Learning State Storage
4
+ *
5
+ * Manages persistence of learning state to ~/.vibe-check/learning-state.json
6
+ * This is global (not per-repo) to track cross-repo patterns.
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.getLearningStatePath = getLearningStatePath;
43
+ exports.createInitialLearningState = createInitialLearningState;
44
+ exports.loadLearningState = loadLearningState;
45
+ exports.saveLearningState = saveLearningState;
46
+ exports.addNudge = addNudge;
47
+ exports.getPendingNudges = getPendingNudges;
48
+ exports.dismissNudge = dismissNudge;
49
+ exports.markNudgesDisplayed = markNudgesDisplayed;
50
+ exports.recordRetroCompletion = recordRetroCompletion;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const os = __importStar(require("os"));
54
+ const types_1 = require("./types");
55
+ const LEARNING_DIR = '.vibe-check';
56
+ const LEARNING_FILE = 'learning-state.json';
57
+ const LEARNING_STATE_VERSION = '1.0.0';
58
+ /**
59
+ * Get learning state file path (global)
60
+ */
61
+ function getLearningStatePath() {
62
+ return path.join(os.homedir(), LEARNING_DIR, LEARNING_FILE);
63
+ }
64
+ /**
65
+ * Create initial learning state
66
+ */
67
+ function createInitialLearningState() {
68
+ const today = new Date().toISOString().split('T')[0];
69
+ return {
70
+ version: LEARNING_STATE_VERSION,
71
+ lastDailyCheck: '',
72
+ lastWeeklyRetro: today,
73
+ lastMonthlyReview: today,
74
+ pendingNudges: [],
75
+ retroDue: false,
76
+ retroDueReason: '',
77
+ totalRetrosCompleted: 0,
78
+ nudgesDisplayed: 0,
79
+ nudgesDismissed: 0,
80
+ };
81
+ }
82
+ /**
83
+ * Load learning state from disk
84
+ */
85
+ function loadLearningState() {
86
+ const filePath = getLearningStatePath();
87
+ if (fs.existsSync(filePath)) {
88
+ try {
89
+ const data = fs.readFileSync(filePath, 'utf-8');
90
+ const state = JSON.parse(data);
91
+ return migrateLearningState(state);
92
+ }
93
+ catch {
94
+ return createInitialLearningState();
95
+ }
96
+ }
97
+ return createInitialLearningState();
98
+ }
99
+ /**
100
+ * Save learning state to disk
101
+ */
102
+ function saveLearningState(state) {
103
+ const dirPath = path.join(os.homedir(), LEARNING_DIR);
104
+ const filePath = getLearningStatePath();
105
+ if (!fs.existsSync(dirPath)) {
106
+ fs.mkdirSync(dirPath, { recursive: true });
107
+ }
108
+ fs.writeFileSync(filePath, JSON.stringify(state, null, 2));
109
+ }
110
+ /**
111
+ * Add a nudge to the queue
112
+ */
113
+ function addNudge(state, nudge) {
114
+ const now = new Date();
115
+ const newNudge = {
116
+ ...nudge,
117
+ id: `nudge-${now.getTime()}`,
118
+ createdAt: now.toISOString(),
119
+ expiresAt: new Date(now.getTime() + types_1.NUDGE_TTL_DAYS * 24 * 60 * 60 * 1000).toISOString(),
120
+ };
121
+ // Add to queue, keeping max size
122
+ const updatedNudges = [...state.pendingNudges, newNudge]
123
+ .filter(n => !n.dismissed)
124
+ .filter(n => !n.expiresAt || new Date(n.expiresAt) > now)
125
+ .sort((a, b) => b.priority - a.priority)
126
+ .slice(0, types_1.MAX_PENDING_NUDGES);
127
+ return {
128
+ ...state,
129
+ pendingNudges: updatedNudges,
130
+ };
131
+ }
132
+ /**
133
+ * Get pending nudges (not dismissed, not expired)
134
+ */
135
+ function getPendingNudges(state) {
136
+ const now = new Date();
137
+ return state.pendingNudges
138
+ .filter(n => !n.dismissed)
139
+ .filter(n => !n.expiresAt || new Date(n.expiresAt) > now)
140
+ .sort((a, b) => b.priority - a.priority);
141
+ }
142
+ /**
143
+ * Dismiss a nudge by ID
144
+ */
145
+ function dismissNudge(state, nudgeId) {
146
+ return {
147
+ ...state,
148
+ pendingNudges: state.pendingNudges.map(n => n.id === nudgeId ? { ...n, dismissed: true } : n),
149
+ nudgesDismissed: state.nudgesDismissed + 1,
150
+ };
151
+ }
152
+ /**
153
+ * Mark nudges as displayed
154
+ */
155
+ function markNudgesDisplayed(state, count) {
156
+ return {
157
+ ...state,
158
+ nudgesDisplayed: state.nudgesDisplayed + count,
159
+ };
160
+ }
161
+ /**
162
+ * Record retrospective completion
163
+ */
164
+ function recordRetroCompletion(state, summary) {
165
+ const today = new Date().toISOString().split('T')[0];
166
+ return {
167
+ ...state,
168
+ lastWeeklyRetro: today,
169
+ retroDue: false,
170
+ retroDueReason: '',
171
+ lastRetroSummary: summary,
172
+ totalRetrosCompleted: state.totalRetrosCompleted + 1,
173
+ };
174
+ }
175
+ /**
176
+ * Migrate old learning state versions
177
+ */
178
+ function migrateLearningState(state) {
179
+ if (!state.version) {
180
+ state.version = LEARNING_STATE_VERSION;
181
+ }
182
+ // Add any missing fields
183
+ if (state.totalRetrosCompleted === undefined) {
184
+ state.totalRetrosCompleted = 0;
185
+ }
186
+ if (state.nudgesDisplayed === undefined) {
187
+ state.nudgesDisplayed = 0;
188
+ }
189
+ if (state.nudgesDismissed === undefined) {
190
+ state.nudgesDismissed = 0;
191
+ }
192
+ return state;
193
+ }
194
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/learning/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Lesson Surfacing
3
+ *
4
+ * Finds and formats relevant lessons to display based on current context.
5
+ * This is the "proactive" part - surfacing learnings at the right time.
6
+ */
7
+ import { Lesson, SurfacedLesson } from './lessons-types';
8
+ /**
9
+ * Get lessons relevant to a detected pattern
10
+ *
11
+ * Called from analyze.ts when spirals are detected
12
+ */
13
+ export declare function surfaceLessonsForPattern(pattern: string): SurfacedLesson[];
14
+ /**
15
+ * Get lessons relevant to a component being modified
16
+ *
17
+ * Called when we detect work in a historically problematic area
18
+ */
19
+ export declare function surfaceLessonsForComponent(component: string): SurfacedLesson[];
20
+ /**
21
+ * Get top lessons to show in profile/status
22
+ */
23
+ export declare function getTopLessons(limit?: number): Lesson[];
24
+ /**
25
+ * Format a surfaced lesson for CLI display
26
+ */
27
+ export declare function formatSurfacedLesson(surfaced: SurfacedLesson): string[];
28
+ /**
29
+ * Format a lesson for detailed view
30
+ */
31
+ export declare function formatLessonDetail(lesson: Lesson): string[];
32
+ /**
33
+ * Format lessons summary for learn --status
34
+ */
35
+ export declare function formatLessonsSummary(): string[];
36
+ //# sourceMappingURL=surfacing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfacing.d.ts","sourceRoot":"","sources":["../../src/learning/surfacing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKzD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAiB1E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAyB9E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAU,GAAG,MAAM,EAAE,CAezD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CAiCvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAkF3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CA4B/C"}