@boshu2/vibe-check 1.8.0 → 1.8.1
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/CLAUDE.md +58 -0
- package/Makefile +43 -6
- package/README.md +80 -27
- package/dist/commands/session.d.ts +9 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +57 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +76 -0
- package/dist/commands/watch.js.map +1 -1
- package/dist/inner-loop/context-amnesia.d.ts +20 -0
- package/dist/inner-loop/context-amnesia.d.ts.map +1 -0
- package/dist/inner-loop/context-amnesia.js +249 -0
- package/dist/inner-loop/context-amnesia.js.map +1 -0
- package/dist/inner-loop/index.d.ts +39 -0
- package/dist/inner-loop/index.d.ts.map +1 -0
- package/dist/inner-loop/index.js +208 -0
- package/dist/inner-loop/index.js.map +1 -0
- package/dist/inner-loop/instruction-drift.d.ts +28 -0
- package/dist/inner-loop/instruction-drift.d.ts.map +1 -0
- package/dist/inner-loop/instruction-drift.js +260 -0
- package/dist/inner-loop/instruction-drift.js.map +1 -0
- package/dist/inner-loop/logging-only.d.ts +30 -0
- package/dist/inner-loop/logging-only.d.ts.map +1 -0
- package/dist/inner-loop/logging-only.js +264 -0
- package/dist/inner-loop/logging-only.js.map +1 -0
- package/dist/inner-loop/tests-passing-lie.d.ts +34 -0
- package/dist/inner-loop/tests-passing-lie.d.ts.map +1 -0
- package/dist/inner-loop/tests-passing-lie.js +213 -0
- package/dist/inner-loop/tests-passing-lie.js.map +1 -0
- package/dist/inner-loop/types.d.ts +111 -0
- package/dist/inner-loop/types.d.ts.map +1 -0
- package/dist/inner-loop/types.js +29 -0
- package/dist/inner-loop/types.js.map +1 -0
- package/docs/FEATURES.md +340 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Amnesia Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects when AI forgets previous instructions and:
|
|
5
|
+
* - Reverts intentional changes
|
|
6
|
+
* - Re-implements code that was just deleted
|
|
7
|
+
* - Repeats the same fix multiple times
|
|
8
|
+
*
|
|
9
|
+
* This is a key "Inner Loop Disaster" in vibe coding.
|
|
10
|
+
*/
|
|
11
|
+
import { TimelineEvent } from '../types';
|
|
12
|
+
import { ContextAmnesiaResult, InnerLoopConfig } from './types';
|
|
13
|
+
/**
|
|
14
|
+
* Detect context amnesia patterns in commit history.
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectContextAmnesia(events: TimelineEvent[], filesPerCommit: Map<string, string[]>, lineStatsPerCommit: Map<string, {
|
|
17
|
+
additions: number;
|
|
18
|
+
deletions: number;
|
|
19
|
+
}>, config?: Partial<InnerLoopConfig>): ContextAmnesiaResult;
|
|
20
|
+
//# sourceMappingURL=context-amnesia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-amnesia.d.ts","sourceRoot":"","sources":["../../src/inner-loop/context-amnesia.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,oBAAoB,EAEpB,eAAe,EAEhB,MAAM,SAAS,CAAC;AAajB;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EAAE,EACvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,EACzE,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,oBAAoB,CAuDtB"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Context Amnesia Detector
|
|
4
|
+
*
|
|
5
|
+
* Detects when AI forgets previous instructions and:
|
|
6
|
+
* - Reverts intentional changes
|
|
7
|
+
* - Re-implements code that was just deleted
|
|
8
|
+
* - Repeats the same fix multiple times
|
|
9
|
+
*
|
|
10
|
+
* This is a key "Inner Loop Disaster" in vibe coding.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.detectContextAmnesia = detectContextAmnesia;
|
|
14
|
+
const date_fns_1 = require("date-fns");
|
|
15
|
+
const types_1 = require("./types");
|
|
16
|
+
/**
|
|
17
|
+
* Detect context amnesia patterns in commit history.
|
|
18
|
+
*/
|
|
19
|
+
function detectContextAmnesia(events, filesPerCommit, lineStatsPerCommit, config = {}) {
|
|
20
|
+
const cfg = { ...types_1.DEFAULT_INNER_LOOP_CONFIG, ...config };
|
|
21
|
+
const incidents = [];
|
|
22
|
+
if (events.length < 2) {
|
|
23
|
+
return {
|
|
24
|
+
detected: false,
|
|
25
|
+
incidents: [],
|
|
26
|
+
totalIncidents: 0,
|
|
27
|
+
totalTimeWasted: 0,
|
|
28
|
+
message: 'Not enough commits to detect context amnesia',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Build enriched commit data
|
|
32
|
+
const commits = events.map((e) => ({
|
|
33
|
+
hash: e.hash,
|
|
34
|
+
message: e.subject,
|
|
35
|
+
timestamp: e.timestamp,
|
|
36
|
+
scope: e.scope,
|
|
37
|
+
files: filesPerCommit.get(e.hash) || [],
|
|
38
|
+
additions: lineStatsPerCommit.get(e.hash)?.additions || 0,
|
|
39
|
+
deletions: lineStatsPerCommit.get(e.hash)?.deletions || 0,
|
|
40
|
+
type: e.type,
|
|
41
|
+
}));
|
|
42
|
+
// Sort by timestamp ascending
|
|
43
|
+
commits.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
|
|
44
|
+
// Detection strategies
|
|
45
|
+
const revertIncidents = detectReverts(commits, cfg);
|
|
46
|
+
const reimplementIncidents = detectReimplementation(commits, cfg);
|
|
47
|
+
const repeatedFixIncidents = detectRepeatedFixes(commits, cfg);
|
|
48
|
+
incidents.push(...revertIncidents, ...reimplementIncidents, ...repeatedFixIncidents);
|
|
49
|
+
// Calculate total time wasted
|
|
50
|
+
const totalTimeWasted = incidents.reduce((sum, i) => sum + i.gapMinutes, 0);
|
|
51
|
+
// Generate message
|
|
52
|
+
const detected = incidents.length > 0;
|
|
53
|
+
let message = '';
|
|
54
|
+
if (detected) {
|
|
55
|
+
const types = new Set(incidents.map((i) => i.type));
|
|
56
|
+
const typeStr = Array.from(types).join(', ');
|
|
57
|
+
message = `🧠 Context amnesia detected: ${incidents.length} incident${incidents.length > 1 ? 's' : ''} (${typeStr}). ~${totalTimeWasted}m potentially wasted.`;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
detected,
|
|
61
|
+
incidents: incidents.slice(0, 10), // Top 10
|
|
62
|
+
totalIncidents: incidents.length,
|
|
63
|
+
totalTimeWasted,
|
|
64
|
+
message,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Detect explicit reverts or undo patterns.
|
|
69
|
+
*/
|
|
70
|
+
function detectReverts(commits, config) {
|
|
71
|
+
const incidents = [];
|
|
72
|
+
// Patterns that indicate a revert
|
|
73
|
+
const revertPatterns = [
|
|
74
|
+
/revert/i,
|
|
75
|
+
/undo/i,
|
|
76
|
+
/rollback/i,
|
|
77
|
+
/back\s*out/i,
|
|
78
|
+
/restore\s+previous/i,
|
|
79
|
+
];
|
|
80
|
+
for (let i = 1; i < commits.length; i++) {
|
|
81
|
+
const commit = commits[i];
|
|
82
|
+
const isRevert = revertPatterns.some((p) => p.test(commit.message));
|
|
83
|
+
if (isRevert) {
|
|
84
|
+
// Find what was reverted (look back within window)
|
|
85
|
+
const windowStart = new Date(commit.timestamp.getTime() - config.amnesiaWindowMinutes * 60 * 1000);
|
|
86
|
+
// Find commits in window that touch same files
|
|
87
|
+
for (let j = i - 1; j >= 0; j--) {
|
|
88
|
+
const original = commits[j];
|
|
89
|
+
if (original.timestamp < windowStart)
|
|
90
|
+
break;
|
|
91
|
+
const sharedFiles = commit.files.filter((f) => original.files.includes(f));
|
|
92
|
+
if (sharedFiles.length > 0) {
|
|
93
|
+
const gap = (0, date_fns_1.differenceInMinutes)(commit.timestamp, original.timestamp);
|
|
94
|
+
incidents.push({
|
|
95
|
+
type: 'revert',
|
|
96
|
+
originalCommit: {
|
|
97
|
+
hash: original.hash,
|
|
98
|
+
message: original.message,
|
|
99
|
+
timestamp: original.timestamp,
|
|
100
|
+
},
|
|
101
|
+
repeatCommit: {
|
|
102
|
+
hash: commit.hash,
|
|
103
|
+
message: commit.message,
|
|
104
|
+
timestamp: commit.timestamp,
|
|
105
|
+
},
|
|
106
|
+
scope: commit.scope || original.scope,
|
|
107
|
+
filesAffected: sharedFiles,
|
|
108
|
+
gapMinutes: gap,
|
|
109
|
+
description: `Reverted changes from ${gap}m ago`,
|
|
110
|
+
});
|
|
111
|
+
break; // Only count once per revert
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return incidents;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Detect reimplementation: code deleted then similar code re-added.
|
|
120
|
+
*/
|
|
121
|
+
function detectReimplementation(commits, config) {
|
|
122
|
+
const incidents = [];
|
|
123
|
+
// Track significant deletions
|
|
124
|
+
const deletions = [];
|
|
125
|
+
for (const commit of commits) {
|
|
126
|
+
// Significant deletion: more deletions than additions
|
|
127
|
+
if (commit.deletions > commit.additions && commit.deletions > 10) {
|
|
128
|
+
deletions.push({
|
|
129
|
+
commit,
|
|
130
|
+
files: commit.files,
|
|
131
|
+
linesDeleted: commit.deletions,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Look for later commits that re-add similar content to same files
|
|
136
|
+
for (const deletion of deletions) {
|
|
137
|
+
const windowEnd = new Date(deletion.commit.timestamp.getTime() + config.amnesiaWindowMinutes * 60 * 1000);
|
|
138
|
+
for (const commit of commits) {
|
|
139
|
+
// Must be after the deletion
|
|
140
|
+
if (commit.timestamp <= deletion.commit.timestamp)
|
|
141
|
+
continue;
|
|
142
|
+
if (commit.timestamp > windowEnd)
|
|
143
|
+
continue;
|
|
144
|
+
// Must touch same files with additions
|
|
145
|
+
const sharedFiles = commit.files.filter((f) => deletion.files.includes(f));
|
|
146
|
+
if (sharedFiles.length === 0)
|
|
147
|
+
continue;
|
|
148
|
+
// Must have significant additions (reimplementing)
|
|
149
|
+
if (commit.additions < deletion.linesDeleted * 0.5)
|
|
150
|
+
continue;
|
|
151
|
+
const gap = (0, date_fns_1.differenceInMinutes)(commit.timestamp, deletion.commit.timestamp);
|
|
152
|
+
// Check if this looks like reimplementation vs intentional refactor
|
|
153
|
+
// Refactors usually have "refactor" in message
|
|
154
|
+
if (/refactor/i.test(commit.message))
|
|
155
|
+
continue;
|
|
156
|
+
incidents.push({
|
|
157
|
+
type: 'reimplementation',
|
|
158
|
+
originalCommit: {
|
|
159
|
+
hash: deletion.commit.hash,
|
|
160
|
+
message: deletion.commit.message,
|
|
161
|
+
timestamp: deletion.commit.timestamp,
|
|
162
|
+
},
|
|
163
|
+
repeatCommit: {
|
|
164
|
+
hash: commit.hash,
|
|
165
|
+
message: commit.message,
|
|
166
|
+
timestamp: commit.timestamp,
|
|
167
|
+
},
|
|
168
|
+
scope: commit.scope || deletion.commit.scope,
|
|
169
|
+
filesAffected: sharedFiles,
|
|
170
|
+
gapMinutes: gap,
|
|
171
|
+
description: `Deleted ${deletion.linesDeleted} lines, then re-added ${commit.additions} lines ${gap}m later`,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return incidents;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Detect repeated fixes: same area fixed multiple times in short window.
|
|
179
|
+
*/
|
|
180
|
+
function detectRepeatedFixes(commits, config) {
|
|
181
|
+
const incidents = [];
|
|
182
|
+
// Group fix commits by scope/files
|
|
183
|
+
const fixCommits = commits.filter((c) => c.type === 'fix');
|
|
184
|
+
// Track fixes per scope within time window
|
|
185
|
+
const scopeFixes = new Map();
|
|
186
|
+
for (const fix of fixCommits) {
|
|
187
|
+
const scope = fix.scope || fix.files[0] || 'unknown';
|
|
188
|
+
if (!scopeFixes.has(scope)) {
|
|
189
|
+
scopeFixes.set(scope, []);
|
|
190
|
+
}
|
|
191
|
+
scopeFixes.get(scope).push(fix);
|
|
192
|
+
}
|
|
193
|
+
// Find scopes with 3+ fixes in window (beyond normal spiral detection)
|
|
194
|
+
for (const [scope, fixes] of scopeFixes) {
|
|
195
|
+
if (fixes.length < 3)
|
|
196
|
+
continue;
|
|
197
|
+
// Check if messages are similar (forgot what was tried)
|
|
198
|
+
for (let i = 0; i < fixes.length - 1; i++) {
|
|
199
|
+
const current = fixes[i];
|
|
200
|
+
const next = fixes[i + 1];
|
|
201
|
+
const gap = (0, date_fns_1.differenceInMinutes)(next.timestamp, current.timestamp);
|
|
202
|
+
if (gap > config.amnesiaWindowMinutes)
|
|
203
|
+
continue;
|
|
204
|
+
// Check message similarity
|
|
205
|
+
const similarity = calculateSimilarity(current.message, next.message);
|
|
206
|
+
if (similarity > config.similarityThreshold) {
|
|
207
|
+
incidents.push({
|
|
208
|
+
type: 'forgotten_change',
|
|
209
|
+
originalCommit: {
|
|
210
|
+
hash: current.hash,
|
|
211
|
+
message: current.message,
|
|
212
|
+
timestamp: current.timestamp,
|
|
213
|
+
},
|
|
214
|
+
repeatCommit: {
|
|
215
|
+
hash: next.hash,
|
|
216
|
+
message: next.message,
|
|
217
|
+
timestamp: next.timestamp,
|
|
218
|
+
},
|
|
219
|
+
scope,
|
|
220
|
+
filesAffected: [...new Set([...current.files, ...next.files])],
|
|
221
|
+
gapMinutes: gap,
|
|
222
|
+
description: `Similar fix attempted ${gap}m later (${Math.round(similarity * 100)}% similar)`,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return incidents;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Calculate similarity between two commit messages (Jaccard index).
|
|
231
|
+
*/
|
|
232
|
+
function calculateSimilarity(msg1, msg2) {
|
|
233
|
+
const words1 = new Set(msg1
|
|
234
|
+
.toLowerCase()
|
|
235
|
+
.replace(/[^a-z0-9\s]/g, '')
|
|
236
|
+
.split(/\s+/)
|
|
237
|
+
.filter((w) => w.length > 2));
|
|
238
|
+
const words2 = new Set(msg2
|
|
239
|
+
.toLowerCase()
|
|
240
|
+
.replace(/[^a-z0-9\s]/g, '')
|
|
241
|
+
.split(/\s+/)
|
|
242
|
+
.filter((w) => w.length > 2));
|
|
243
|
+
if (words1.size === 0 || words2.size === 0)
|
|
244
|
+
return 0;
|
|
245
|
+
const intersection = new Set([...words1].filter((w) => words2.has(w)));
|
|
246
|
+
const union = new Set([...words1, ...words2]);
|
|
247
|
+
return intersection.size / union.size;
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=context-amnesia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-amnesia.js","sourceRoot":"","sources":["../../src/inner-loop/context-amnesia.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inner Loop Failure Pattern Detection
|
|
3
|
+
*
|
|
4
|
+
* This module detects the 4 "Inner Loop Disasters" from vibe coding:
|
|
5
|
+
* 1. "Tests Passing" Lie - AI claims success but code doesn't work
|
|
6
|
+
* 2. Context Amnesia - Forgets instructions, re-does work
|
|
7
|
+
* 3. Instruction Drift - "Improves" things not asked for
|
|
8
|
+
* 4. Debug Loop Spiral - Adds logging instead of fixing
|
|
9
|
+
*/
|
|
10
|
+
import { TimelineEvent } from '../types';
|
|
11
|
+
import { InnerLoopAnalysis, InnerLoopConfig } from './types';
|
|
12
|
+
export * from './types';
|
|
13
|
+
export { detectTestsPassingLie } from './tests-passing-lie';
|
|
14
|
+
export { detectContextAmnesia } from './context-amnesia';
|
|
15
|
+
export { detectInstructionDrift, createSessionScope, inferSessionScope } from './instruction-drift';
|
|
16
|
+
export { detectLoggingOnlyCommits, analyzeCommitsForLogging } from './logging-only';
|
|
17
|
+
/**
|
|
18
|
+
* Run all inner loop failure pattern detectors.
|
|
19
|
+
*/
|
|
20
|
+
export declare function analyzeInnerLoop(events: TimelineEvent[], filesPerCommit: Map<string, string[]>, lineStatsPerCommit: Map<string, {
|
|
21
|
+
additions: number;
|
|
22
|
+
deletions: number;
|
|
23
|
+
}>, config?: Partial<InnerLoopConfig>): InnerLoopAnalysis;
|
|
24
|
+
/**
|
|
25
|
+
* Quick check for inner loop issues (fast, no diff analysis).
|
|
26
|
+
*/
|
|
27
|
+
export declare function quickInnerLoopCheck(events: TimelineEvent[], filesPerCommit: Map<string, string[]>, lineStatsPerCommit: Map<string, {
|
|
28
|
+
additions: number;
|
|
29
|
+
deletions: number;
|
|
30
|
+
}>): {
|
|
31
|
+
hasIssues: boolean;
|
|
32
|
+
issueCount: number;
|
|
33
|
+
topIssue: string | null;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Format inner loop analysis for terminal output.
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatInnerLoopAnalysis(analysis: InnerLoopAnalysis): string;
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inner-loop/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,eAAe,EAOhB,MAAM,SAAS,CAAC;AAOjB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EAAE,EACvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,EACzE,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,iBAAiB,CAqDnB;AA2FD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EAAE,EACvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACxE;IACD,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAcA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAgD3E"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Inner Loop Failure Pattern Detection
|
|
4
|
+
*
|
|
5
|
+
* This module detects the 4 "Inner Loop Disasters" from vibe coding:
|
|
6
|
+
* 1. "Tests Passing" Lie - AI claims success but code doesn't work
|
|
7
|
+
* 2. Context Amnesia - Forgets instructions, re-does work
|
|
8
|
+
* 3. Instruction Drift - "Improves" things not asked for
|
|
9
|
+
* 4. Debug Loop Spiral - Adds logging instead of fixing
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
23
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.analyzeCommitsForLogging = exports.detectLoggingOnlyCommits = exports.inferSessionScope = exports.createSessionScope = exports.detectInstructionDrift = exports.detectContextAmnesia = exports.detectTestsPassingLie = void 0;
|
|
27
|
+
exports.analyzeInnerLoop = analyzeInnerLoop;
|
|
28
|
+
exports.quickInnerLoopCheck = quickInnerLoopCheck;
|
|
29
|
+
exports.formatInnerLoopAnalysis = formatInnerLoopAnalysis;
|
|
30
|
+
const types_1 = require("./types");
|
|
31
|
+
const tests_passing_lie_1 = require("./tests-passing-lie");
|
|
32
|
+
const context_amnesia_1 = require("./context-amnesia");
|
|
33
|
+
const instruction_drift_1 = require("./instruction-drift");
|
|
34
|
+
const logging_only_1 = require("./logging-only");
|
|
35
|
+
// Re-export types
|
|
36
|
+
__exportStar(require("./types"), exports);
|
|
37
|
+
// Re-export individual detectors
|
|
38
|
+
var tests_passing_lie_2 = require("./tests-passing-lie");
|
|
39
|
+
Object.defineProperty(exports, "detectTestsPassingLie", { enumerable: true, get: function () { return tests_passing_lie_2.detectTestsPassingLie; } });
|
|
40
|
+
var context_amnesia_2 = require("./context-amnesia");
|
|
41
|
+
Object.defineProperty(exports, "detectContextAmnesia", { enumerable: true, get: function () { return context_amnesia_2.detectContextAmnesia; } });
|
|
42
|
+
var instruction_drift_2 = require("./instruction-drift");
|
|
43
|
+
Object.defineProperty(exports, "detectInstructionDrift", { enumerable: true, get: function () { return instruction_drift_2.detectInstructionDrift; } });
|
|
44
|
+
Object.defineProperty(exports, "createSessionScope", { enumerable: true, get: function () { return instruction_drift_2.createSessionScope; } });
|
|
45
|
+
Object.defineProperty(exports, "inferSessionScope", { enumerable: true, get: function () { return instruction_drift_2.inferSessionScope; } });
|
|
46
|
+
var logging_only_2 = require("./logging-only");
|
|
47
|
+
Object.defineProperty(exports, "detectLoggingOnlyCommits", { enumerable: true, get: function () { return logging_only_2.detectLoggingOnlyCommits; } });
|
|
48
|
+
Object.defineProperty(exports, "analyzeCommitsForLogging", { enumerable: true, get: function () { return logging_only_2.analyzeCommitsForLogging; } });
|
|
49
|
+
/**
|
|
50
|
+
* Run all inner loop failure pattern detectors.
|
|
51
|
+
*/
|
|
52
|
+
function analyzeInnerLoop(events, filesPerCommit, lineStatsPerCommit, config = {}) {
|
|
53
|
+
const cfg = { ...types_1.DEFAULT_INNER_LOOP_CONFIG, ...config };
|
|
54
|
+
// Run all detectors
|
|
55
|
+
const testsPassingLie = (0, tests_passing_lie_1.detectTestsPassingLie)(events, filesPerCommit, cfg);
|
|
56
|
+
const contextAmnesia = (0, context_amnesia_1.detectContextAmnesia)(events, filesPerCommit, lineStatsPerCommit, cfg);
|
|
57
|
+
const instructionDrift = (0, instruction_drift_1.detectInstructionDrift)(events, filesPerCommit, cfg);
|
|
58
|
+
const loggingOnly = (0, logging_only_1.detectLoggingOnlyCommits)(events, cfg);
|
|
59
|
+
// Calculate summary
|
|
60
|
+
const totalIssues = testsPassingLie.totalLies +
|
|
61
|
+
contextAmnesia.totalIncidents +
|
|
62
|
+
instructionDrift.totalDriftCommits +
|
|
63
|
+
(loggingOnly.detected ? 1 : 0);
|
|
64
|
+
// Critical: Tests Passing Lie, high Context Amnesia
|
|
65
|
+
const criticalIssues = testsPassingLie.totalLies + (contextAmnesia.totalIncidents >= 3 ? 1 : 0);
|
|
66
|
+
// Warning: Instruction Drift, Debug Loop
|
|
67
|
+
const warningIssues = (instructionDrift.detected ? 1 : 0) + (loggingOnly.detected ? 1 : 0);
|
|
68
|
+
// Determine overall health
|
|
69
|
+
let overallHealth = 'healthy';
|
|
70
|
+
if (criticalIssues > 0) {
|
|
71
|
+
overallHealth = 'critical';
|
|
72
|
+
}
|
|
73
|
+
else if (warningIssues > 0 || contextAmnesia.totalIncidents > 0) {
|
|
74
|
+
overallHealth = 'warning';
|
|
75
|
+
}
|
|
76
|
+
// Generate recommendations
|
|
77
|
+
const recommendations = generateRecommendations(testsPassingLie, contextAmnesia, instructionDrift, loggingOnly);
|
|
78
|
+
return {
|
|
79
|
+
testsPassingLie,
|
|
80
|
+
contextAmnesia,
|
|
81
|
+
instructionDrift,
|
|
82
|
+
loggingOnly,
|
|
83
|
+
summary: {
|
|
84
|
+
totalIssuesDetected: totalIssues,
|
|
85
|
+
criticalIssues,
|
|
86
|
+
warningIssues,
|
|
87
|
+
overallHealth,
|
|
88
|
+
},
|
|
89
|
+
recommendations,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Generate recommendations based on detected patterns.
|
|
94
|
+
*/
|
|
95
|
+
function generateRecommendations(testsPassingLie, contextAmnesia, instructionDrift, loggingOnly) {
|
|
96
|
+
const recommendations = [];
|
|
97
|
+
// Tests Passing Lie recommendations
|
|
98
|
+
if (testsPassingLie.detected) {
|
|
99
|
+
recommendations.push('🤥 STOP: AI claimed success but code needed fixes. Verify builds/tests actually pass before proceeding.');
|
|
100
|
+
recommendations.push('Run `npm test` or your test command after each "fix" commit to verify.');
|
|
101
|
+
}
|
|
102
|
+
// Context Amnesia recommendations
|
|
103
|
+
if (contextAmnesia.detected) {
|
|
104
|
+
if (contextAmnesia.incidents.some((i) => i.type === 'revert')) {
|
|
105
|
+
recommendations.push('🧠 AI is reverting previous work. Check if changes were intentional before accepting reverts.');
|
|
106
|
+
}
|
|
107
|
+
if (contextAmnesia.incidents.some((i) => i.type === 'reimplementation')) {
|
|
108
|
+
recommendations.push('🧠 AI deleted then re-added code. This suggests context loss - try breaking task into smaller pieces.');
|
|
109
|
+
}
|
|
110
|
+
if (contextAmnesia.incidents.some((i) => i.type === 'forgotten_change')) {
|
|
111
|
+
recommendations.push('🧠 Similar fixes being attempted repeatedly. Consider restarting with clear instructions.');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Instruction Drift recommendations
|
|
115
|
+
if (instructionDrift.detected) {
|
|
116
|
+
if (instructionDrift.drifts.some((d) => d.driftType === 'scope_creep')) {
|
|
117
|
+
recommendations.push('🎯 AI changed files outside your stated scope. Be explicit: "ONLY modify src/feature.ts"');
|
|
118
|
+
}
|
|
119
|
+
if (instructionDrift.drifts.some((d) => d.driftType === 'unrequested_refactor')) {
|
|
120
|
+
recommendations.push('🎯 AI did unrequested refactoring. Add: "Do NOT refactor or clean up other code"');
|
|
121
|
+
}
|
|
122
|
+
if (instructionDrift.drifts.some((d) => d.driftType === 'unrequested_improvement')) {
|
|
123
|
+
recommendations.push('🎯 AI made unrequested "improvements". Be explicit about what NOT to do.');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Debug Loop recommendations
|
|
127
|
+
if (loggingOnly.detected) {
|
|
128
|
+
recommendations.push('🔍 Debug loop detected: Multiple logging commits without fixes. STOP and think about the root cause.');
|
|
129
|
+
recommendations.push('Try: 1) Read error messages carefully, 2) Check the docs, 3) Simplify to minimal reproduction');
|
|
130
|
+
if (loggingOnly.consecutiveLoggingCount >= 5) {
|
|
131
|
+
recommendations.push('⚠️ EMERGENCY: 5+ consecutive debug commits. Consider: git stash, take a break, start fresh.');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// General emergency recommendation
|
|
135
|
+
const totalCritical = testsPassingLie.totalLies +
|
|
136
|
+
contextAmnesia.totalIncidents +
|
|
137
|
+
(loggingOnly.consecutiveLoggingCount >= 3 ? 1 : 0);
|
|
138
|
+
if (totalCritical >= 3) {
|
|
139
|
+
recommendations.unshift('🚨 EMERGENCY PROTOCOL: Multiple inner loop failures detected. STOP → git status → backup → start simple');
|
|
140
|
+
}
|
|
141
|
+
return recommendations;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Quick check for inner loop issues (fast, no diff analysis).
|
|
145
|
+
*/
|
|
146
|
+
function quickInnerLoopCheck(events, filesPerCommit, lineStatsPerCommit) {
|
|
147
|
+
const analysis = analyzeInnerLoop(events, filesPerCommit, lineStatsPerCommit);
|
|
148
|
+
const issues = [];
|
|
149
|
+
if (analysis.testsPassingLie.detected)
|
|
150
|
+
issues.push('tests-passing-lie');
|
|
151
|
+
if (analysis.contextAmnesia.detected)
|
|
152
|
+
issues.push('context-amnesia');
|
|
153
|
+
if (analysis.instructionDrift.detected)
|
|
154
|
+
issues.push('instruction-drift');
|
|
155
|
+
if (analysis.loggingOnly.detected)
|
|
156
|
+
issues.push('debug-loop');
|
|
157
|
+
return {
|
|
158
|
+
hasIssues: issues.length > 0,
|
|
159
|
+
issueCount: issues.length,
|
|
160
|
+
topIssue: issues[0] || null,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Format inner loop analysis for terminal output.
|
|
165
|
+
*/
|
|
166
|
+
function formatInnerLoopAnalysis(analysis) {
|
|
167
|
+
const lines = [];
|
|
168
|
+
// Header
|
|
169
|
+
const healthEmoji = analysis.summary.overallHealth === 'critical'
|
|
170
|
+
? '🚨'
|
|
171
|
+
: analysis.summary.overallHealth === 'warning'
|
|
172
|
+
? '⚠️'
|
|
173
|
+
: '✅';
|
|
174
|
+
lines.push(`\n${healthEmoji} Inner Loop Health: ${analysis.summary.overallHealth.toUpperCase()}`);
|
|
175
|
+
lines.push('─'.repeat(50));
|
|
176
|
+
// Individual pattern results
|
|
177
|
+
if (analysis.testsPassingLie.detected) {
|
|
178
|
+
lines.push(`🤥 Tests Passing Lie: ${analysis.testsPassingLie.message}`);
|
|
179
|
+
}
|
|
180
|
+
if (analysis.contextAmnesia.detected) {
|
|
181
|
+
lines.push(`🧠 Context Amnesia: ${analysis.contextAmnesia.message}`);
|
|
182
|
+
}
|
|
183
|
+
if (analysis.instructionDrift.detected) {
|
|
184
|
+
lines.push(`🎯 Instruction Drift: ${analysis.instructionDrift.message}`);
|
|
185
|
+
}
|
|
186
|
+
if (analysis.loggingOnly.detected) {
|
|
187
|
+
lines.push(`🔍 Debug Loop: ${analysis.loggingOnly.message}`);
|
|
188
|
+
}
|
|
189
|
+
// Summary
|
|
190
|
+
if (analysis.summary.totalIssuesDetected > 0) {
|
|
191
|
+
lines.push('');
|
|
192
|
+
lines.push(`Total: ${analysis.summary.totalIssuesDetected} issue${analysis.summary.totalIssuesDetected > 1 ? 's' : ''} ` +
|
|
193
|
+
`(${analysis.summary.criticalIssues} critical, ${analysis.summary.warningIssues} warning)`);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
lines.push('No inner loop issues detected.');
|
|
197
|
+
}
|
|
198
|
+
// Recommendations
|
|
199
|
+
if (analysis.recommendations.length > 0) {
|
|
200
|
+
lines.push('');
|
|
201
|
+
lines.push('Recommendations:');
|
|
202
|
+
for (const rec of analysis.recommendations.slice(0, 5)) {
|
|
203
|
+
lines.push(` ${rec}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return lines.join('\n');
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/inner-loop/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;AA8BH,4CA0DC;AA8FD,kDAsBC;AAKD,0DAgDC;AA9PD,mCASiB;AACjB,2DAA4D;AAC5D,uDAAyD;AACzD,2DAAoG;AACpG,iDAAoF;AAEpF,kBAAkB;AAClB,0CAAwB;AAExB,iCAAiC;AACjC,yDAA4D;AAAnD,0HAAA,qBAAqB,OAAA;AAC9B,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,yDAAoG;AAA3F,2HAAA,sBAAsB,OAAA;AAAE,uHAAA,kBAAkB,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AACtE,+CAAoF;AAA3E,wHAAA,wBAAwB,OAAA;AAAE,wHAAA,wBAAwB,OAAA;AAE3D;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,MAAuB,EACvB,cAAqC,EACrC,kBAAyE,EACzE,SAAmC,EAAE;IAErC,MAAM,GAAG,GAAG,EAAE,GAAG,iCAAyB,EAAE,GAAG,MAAM,EAAE,CAAC;IAExD,oBAAoB;IACpB,MAAM,eAAe,GAAG,IAAA,yCAAqB,EAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,IAAA,sCAAoB,EAAC,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAC7F,MAAM,gBAAgB,GAAG,IAAA,0CAAsB,EAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,IAAA,uCAAwB,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1D,oBAAoB;IACpB,MAAM,WAAW,GACf,eAAe,CAAC,SAAS;QACzB,cAAc,CAAC,cAAc;QAC7B,gBAAgB,CAAC,iBAAiB;QAClC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,oDAAoD;IACpD,MAAM,cAAc,GAClB,eAAe,CAAC,SAAS,GAAG,CAAC,cAAc,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3E,yCAAyC;IACzC,MAAM,aAAa,GACjB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,2BAA2B;IAC3B,IAAI,aAAa,GAAuC,SAAS,CAAC;IAClE,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,aAAa,GAAG,UAAU,CAAC;IAC7B,CAAC;SAAM,IAAI,aAAa,GAAG,CAAC,IAAI,cAAc,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAClE,aAAa,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,2BAA2B;IAC3B,MAAM,eAAe,GAAG,uBAAuB,CAC7C,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,WAAW,CACZ,CAAC;IAEF,OAAO;QACL,eAAe;QACf,cAAc;QACd,gBAAgB;QAChB,WAAW;QACX,OAAO,EAAE;YACP,mBAAmB,EAAE,WAAW;YAChC,cAAc;YACd,aAAa;YACb,aAAa;SACd;QACD,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,eAAsC,EACtC,cAAoC,EACpC,gBAAwC,EACxC,WAA8B;IAE9B,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,oCAAoC;IACpC,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC7B,eAAe,CAAC,IAAI,CAClB,yGAAyG,CAC1G,CAAC;QACF,eAAe,CAAC,IAAI,CAClB,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC9D,eAAe,CAAC,IAAI,CAClB,+FAA+F,CAChG,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,EAAE,CAAC;YACxE,eAAe,CAAC,IAAI,CAClB,uGAAuG,CACxG,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,EAAE,CAAC;YACxE,eAAe,CAAC,IAAI,CAClB,2FAA2F,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,aAAa,CAAC,EAAE,CAAC;YACvE,eAAe,CAAC,IAAI,CAClB,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QACD,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,sBAAsB,CAAC,EAAE,CAAC;YAChF,eAAe,CAAC,IAAI,CAClB,kFAAkF,CACnF,CAAC;QACJ,CAAC;QACD,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,yBAAyB,CAAC,EAAE,CAAC;YACnF,eAAe,CAAC,IAAI,CAClB,0EAA0E,CAC3E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzB,eAAe,CAAC,IAAI,CAClB,sGAAsG,CACvG,CAAC;QACF,eAAe,CAAC,IAAI,CAClB,+FAA+F,CAChG,CAAC;QACF,IAAI,WAAW,CAAC,uBAAuB,IAAI,CAAC,EAAE,CAAC;YAC7C,eAAe,CAAC,IAAI,CAClB,8FAA8F,CAC/F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,aAAa,GACjB,eAAe,CAAC,SAAS;QACzB,cAAc,CAAC,cAAc;QAC7B,CAAC,WAAW,CAAC,uBAAuB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACvB,eAAe,CAAC,OAAO,CACrB,yGAAyG,CAC1G,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,MAAuB,EACvB,cAAqC,EACrC,kBAAyE;IAMzE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAE9E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAQ,CAAC,eAAe,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACxE,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrE,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzE,IAAI,QAAQ,CAAC,WAAW,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE7D,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;KAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,QAA2B;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,MAAM,WAAW,GACf,QAAQ,CAAC,OAAO,CAAC,aAAa,KAAK,UAAU;QAC3C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS;YAC5C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,GAAG,CAAC;IACZ,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,uBAAuB,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAClG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3B,6BAA6B;IAC7B,IAAI,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,UAAU;IACV,IAAI,QAAQ,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,UAAU,QAAQ,CAAC,OAAO,CAAC,mBAAmB,SAAS,QAAQ,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;YAC3G,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,cAAc,QAAQ,CAAC,OAAO,CAAC,aAAa,WAAW,CAC7F,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instruction Drift Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects when AI starts "improving" things that weren't asked for:
|
|
5
|
+
* - Changes files outside the stated scope
|
|
6
|
+
* - Unrequested refactors
|
|
7
|
+
* - Style changes to unrelated code
|
|
8
|
+
* - "Cleanup" of code that was working fine
|
|
9
|
+
*
|
|
10
|
+
* This is a key "Inner Loop Disaster" in vibe coding.
|
|
11
|
+
*/
|
|
12
|
+
import { TimelineEvent } from '../types';
|
|
13
|
+
import { InstructionDriftResult, SessionScope, InnerLoopConfig } from './types';
|
|
14
|
+
/**
|
|
15
|
+
* Detect instruction drift in commit history.
|
|
16
|
+
*/
|
|
17
|
+
export declare function detectInstructionDrift(events: TimelineEvent[], filesPerCommit: Map<string, string[]>, config?: Partial<InnerLoopConfig>): InstructionDriftResult;
|
|
18
|
+
/**
|
|
19
|
+
* Set session scope for drift detection.
|
|
20
|
+
* Call this at session start to declare intended working files.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createSessionScope(intendedFiles: string[], intendedDirs: string[], taskDescription?: string): SessionScope;
|
|
23
|
+
/**
|
|
24
|
+
* Infer session scope from first N commits.
|
|
25
|
+
* Use this if no explicit scope was declared.
|
|
26
|
+
*/
|
|
27
|
+
export declare function inferSessionScope(events: TimelineEvent[], filesPerCommit: Map<string, string[]>, commitCount?: number): SessionScope;
|
|
28
|
+
//# sourceMappingURL=instruction-drift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instruction-drift.d.ts","sourceRoot":"","sources":["../../src/inner-loop/instruction-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,sBAAsB,EAEtB,YAAY,EACZ,eAAe,EAEhB,MAAM,SAAS,CAAC;AA6CjB;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EAAE,EACvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,sBAAsB,CA8CxB;AAsKD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EAAE,EACvB,YAAY,EAAE,MAAM,EAAE,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,YAAY,CAOd;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EAAE,EACvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,WAAW,GAAE,MAAU,GACtB,YAAY,CAsBd"}
|