create-merlin-brain 3.5.4 → 3.5.6

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.
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Session Coach — Persistent Protocol Enforcement
3
+ *
4
+ * The #1 problem: Claude starts strong with Merlin but drifts after 10-15 minutes.
5
+ * CLAUDE.md instructions fade as context fills up. The Loop doesn't have this
6
+ * problem because every iteration is a fresh 200K context.
7
+ *
8
+ * Solution: The MCP server IS the persistent thing in every session. Every tool
9
+ * response goes through us. We use that channel to inject targeted, escalating
10
+ * behavioral nudges that Claude's attention mechanism can't ignore.
11
+ *
12
+ * The key insight: <sub> tags and decorative boxes get ignored. What works is
13
+ * content that looks like instructions — direct, specific, actionable.
14
+ *
15
+ * Escalation levels:
16
+ * 0 - Green: Claude is following the protocol. Light footer.
17
+ * 1 - Yellow: Starting to drift (5+ min since context check). Nudge.
18
+ * 2 - Orange: Significant drift (10+ min or 12+ queries). Strong nudge.
19
+ * 3 - Red: Protocol abandoned (20+ min). Hard interrupt.
20
+ */
21
+ // Thresholds
22
+ const DRIFT_MINUTES_YELLOW = 5;
23
+ const DRIFT_MINUTES_ORANGE = 10;
24
+ const DRIFT_MINUTES_RED = 20;
25
+ const CALLS_YELLOW = 8;
26
+ const CALLS_ORANGE = 15;
27
+ const CALLS_RED = 25;
28
+ // Tools that count as "context check"
29
+ const CONTEXT_TOOLS = new Set([
30
+ 'merlin_get_context',
31
+ 'merlin_search',
32
+ 'merlin_find_files',
33
+ 'merlin_adaptive_context',
34
+ 'merlin_quickstart',
35
+ 'merlin_get_conventions',
36
+ 'merlin_impact_analysis',
37
+ 'merlin_similar_code',
38
+ 'merlin_ask',
39
+ ]);
40
+ // Tools that suggest Claude is doing edit/implementation work
41
+ const EDIT_ADJACENT_TOOLS = new Set([
42
+ 'merlin_run_verification',
43
+ 'merlin_save_checkpoint',
44
+ 'merlin_sync_task',
45
+ 'merlin_log_activity',
46
+ ]);
47
+ // State
48
+ const state = {
49
+ sessionStart: Date.now(),
50
+ toolCalls: [],
51
+ lastContextCheck: 0,
52
+ lastEditRelated: 0,
53
+ callsSinceContext: 0,
54
+ totalCalls: 0,
55
+ contextCheckCount: 0,
56
+ driftWarnings: 0,
57
+ };
58
+ /**
59
+ * Record a tool call. Called by every Merlin tool handler.
60
+ */
61
+ export function recordToolCall(toolName) {
62
+ const now = Date.now();
63
+ state.toolCalls.push({ tool: toolName, timestamp: now });
64
+ state.totalCalls++;
65
+ // Keep only last 50 calls to prevent memory growth
66
+ if (state.toolCalls.length > 50) {
67
+ state.toolCalls = state.toolCalls.slice(-50);
68
+ }
69
+ if (CONTEXT_TOOLS.has(toolName)) {
70
+ state.lastContextCheck = now;
71
+ state.callsSinceContext = 0;
72
+ state.contextCheckCount++;
73
+ }
74
+ else {
75
+ state.callsSinceContext++;
76
+ }
77
+ if (EDIT_ADJACENT_TOOLS.has(toolName)) {
78
+ state.lastEditRelated = now;
79
+ }
80
+ }
81
+ /**
82
+ * Get the current drift level (0-3)
83
+ */
84
+ export function getDriftLevel() {
85
+ // If context was never checked, and this isn't the first call, drift
86
+ if (state.lastContextCheck === 0 && state.totalCalls > 2) {
87
+ return 3;
88
+ }
89
+ // If context was never checked and it's early, no drift yet
90
+ if (state.lastContextCheck === 0) {
91
+ return 0;
92
+ }
93
+ const minutesSinceContext = (Date.now() - state.lastContextCheck) / (1000 * 60);
94
+ const calls = state.callsSinceContext;
95
+ // Red: abandoned
96
+ if (minutesSinceContext >= DRIFT_MINUTES_RED || calls >= CALLS_RED) {
97
+ return 3;
98
+ }
99
+ // Orange: significant drift
100
+ if (minutesSinceContext >= DRIFT_MINUTES_ORANGE || calls >= CALLS_ORANGE) {
101
+ return 2;
102
+ }
103
+ // Yellow: starting to drift
104
+ if (minutesSinceContext >= DRIFT_MINUTES_YELLOW || calls >= CALLS_YELLOW) {
105
+ return 1;
106
+ }
107
+ return 0;
108
+ }
109
+ /**
110
+ * Get the session health score (0-100)
111
+ */
112
+ export function getSessionHealth() {
113
+ if (state.totalCalls === 0)
114
+ return 100;
115
+ // Ratio of context checks to total calls
116
+ const ratio = state.contextCheckCount / state.totalCalls;
117
+ // Ideal ratio is roughly 1 context check per 5-8 tool calls
118
+ const idealRatio = 0.15;
119
+ const ratioScore = Math.min(100, (ratio / idealRatio) * 100);
120
+ // Freshness score — how recent was last context check
121
+ const minutesSince = state.lastContextCheck > 0
122
+ ? (Date.now() - state.lastContextCheck) / (1000 * 60)
123
+ : 999;
124
+ let freshnessScore = 100;
125
+ if (minutesSince > 20)
126
+ freshnessScore = 10;
127
+ else if (minutesSince > 10)
128
+ freshnessScore = 40;
129
+ else if (minutesSince > 5)
130
+ freshnessScore = 70;
131
+ return Math.round((ratioScore * 0.4) + (freshnessScore * 0.6));
132
+ }
133
+ /**
134
+ * Generate the protocol nudge for a tool response.
135
+ *
136
+ * This is the core coaching function. It returns a string to append to
137
+ * every Merlin tool response. The content is designed to be read as
138
+ * instructions, not decoration.
139
+ *
140
+ * For context-check tools: returns a light confirmation
141
+ * For other tools: returns an escalating nudge based on drift level
142
+ */
143
+ export function getProtocolNudge(currentTool) {
144
+ const isContextTool = CONTEXT_TOOLS.has(currentTool);
145
+ const driftLevel = getDriftLevel();
146
+ // If this IS a context check, give a brief positive reinforcement
147
+ if (isContextTool) {
148
+ if (state.contextCheckCount <= 1) {
149
+ // First context check of the session
150
+ return '\n\n---\n**Protocol:** Context loaded. Call `merlin_get_context` again before each new file modification.';
151
+ }
152
+ // Regular context check — brief confirmation
153
+ return '\n\n---\n**Protocol:** ✓ Context fresh. Next check: before your next file edit.';
154
+ }
155
+ // For non-context tools, escalate based on drift
156
+ switch (driftLevel) {
157
+ case 0:
158
+ // Green — light reminder, rotate messages
159
+ return getGreenNudge();
160
+ case 1:
161
+ // Yellow — noticeable nudge
162
+ state.driftWarnings++;
163
+ return getYellowNudge();
164
+ case 2:
165
+ // Orange — strong nudge
166
+ state.driftWarnings++;
167
+ return getOrangeNudge();
168
+ case 3:
169
+ // Red — hard interrupt
170
+ state.driftWarnings++;
171
+ return getRedNudge();
172
+ default:
173
+ return '';
174
+ }
175
+ }
176
+ /**
177
+ * Green nudge — everything is fine, just a light reminder
178
+ */
179
+ function getGreenNudge() {
180
+ const nudges = [
181
+ '**Next:** `merlin_get_context` before modifying files.',
182
+ '**Tip:** Check Sights before creating new files to avoid duplicates.',
183
+ '**Protocol:** Call `merlin_get_context("your task")` before each edit.',
184
+ ];
185
+ const pick = nudges[state.totalCalls % nudges.length];
186
+ return `\n\n---\n${pick}`;
187
+ }
188
+ /**
189
+ * Yellow nudge — starting to drift, clear instruction
190
+ */
191
+ function getYellowNudge() {
192
+ const minutesSince = state.lastContextCheck > 0
193
+ ? Math.floor((Date.now() - state.lastContextCheck) / (1000 * 60))
194
+ : 0;
195
+ return `\n\n---\n` +
196
+ `**⚡ REFRESH CONTEXT** — ${minutesSince}min since last check, ${state.callsSinceContext} calls without context refresh.\n` +
197
+ `Before your next file edit, run: \`merlin_get_context("what you're working on")\`\n` +
198
+ `This prevents duplicating existing code and catches recent changes.`;
199
+ }
200
+ /**
201
+ * Orange nudge — significant drift, strong instruction
202
+ */
203
+ function getOrangeNudge() {
204
+ const minutesSince = state.lastContextCheck > 0
205
+ ? Math.floor((Date.now() - state.lastContextCheck) / (1000 * 60))
206
+ : 0;
207
+ return `\n\n---\n` +
208
+ `**⚠️ PROTOCOL DRIFT DETECTED** — ${minutesSince}min and ${state.callsSinceContext} tool calls without checking Sights.\n\n` +
209
+ `**REQUIRED before continuing:** Call \`merlin_get_context("your current task")\` now.\n\n` +
210
+ `Without fresh context you risk:\n` +
211
+ `- Duplicating code that already exists\n` +
212
+ `- Missing recent changes by other agents\n` +
213
+ `- Breaking patterns the codebase expects`;
214
+ }
215
+ /**
216
+ * Red nudge — protocol abandoned, hard interrupt
217
+ */
218
+ function getRedNudge() {
219
+ const minutesSince = state.lastContextCheck > 0
220
+ ? Math.floor((Date.now() - state.lastContextCheck) / (1000 * 60))
221
+ : 0;
222
+ const health = getSessionHealth();
223
+ return `\n\n---\n` +
224
+ `**🛑 STOP — CONTEXT STALE (${minutesSince}min, session health: ${health}%)**\n\n` +
225
+ `You have made ${state.callsSinceContext} tool calls without checking codebase context.\n` +
226
+ `This is exactly how duplicate code and broken patterns happen.\n\n` +
227
+ `**DO THIS NOW:**\n` +
228
+ `\`\`\`\nmerlin_get_context("describe what you are currently working on")\n\`\`\`\n\n` +
229
+ `Then continue your work with fresh understanding of the codebase.`;
230
+ }
231
+ /**
232
+ * Get a compact protocol status line for tool responses
233
+ * Shows: health %, drift level, last check time
234
+ */
235
+ export function getProtocolStatus() {
236
+ const health = getSessionHealth();
237
+ const driftLevel = getDriftLevel();
238
+ const icons = ['🟢', '🟡', '🟠', '🔴'];
239
+ const icon = icons[driftLevel] || '🟢';
240
+ const minutesSince = state.lastContextCheck > 0
241
+ ? Math.floor((Date.now() - state.lastContextCheck) / (1000 * 60))
242
+ : -1;
243
+ const lastCheck = minutesSince < 0
244
+ ? 'never'
245
+ : minutesSince === 0
246
+ ? 'just now'
247
+ : `${minutesSince}m ago`;
248
+ return `${icon} Protocol: ${health}% │ Last context: ${lastCheck} │ Calls since: ${state.callsSinceContext}`;
249
+ }
250
+ /**
251
+ * Reset session state (for testing or session restart)
252
+ */
253
+ export function resetCoach() {
254
+ state.sessionStart = Date.now();
255
+ state.toolCalls = [];
256
+ state.lastContextCheck = 0;
257
+ state.lastEditRelated = 0;
258
+ state.callsSinceContext = 0;
259
+ state.totalCalls = 0;
260
+ state.contextCheckCount = 0;
261
+ state.driftWarnings = 0;
262
+ }
263
+ /**
264
+ * Get coach stats for debugging
265
+ */
266
+ export function getCoachStats() {
267
+ return {
268
+ totalCalls: state.totalCalls,
269
+ contextChecks: state.contextCheckCount,
270
+ callsSinceContext: state.callsSinceContext,
271
+ driftLevel: getDriftLevel(),
272
+ health: getSessionHealth(),
273
+ driftWarnings: state.driftWarnings,
274
+ sessionMinutes: Math.floor((Date.now() - state.sessionStart) / (1000 * 60)),
275
+ };
276
+ }
277
+ /**
278
+ * Convenience: Wrap any tool response text with coaching.
279
+ *
280
+ * Use this for tools that don't go through stats.wrapResponse().
281
+ * Records the tool call and appends the appropriate protocol nudge.
282
+ *
283
+ * Usage:
284
+ * return { content: [{ type: 'text', text: coachWrap('merlin_search', resultText) }] };
285
+ */
286
+ export function coachWrap(toolName, text) {
287
+ recordToolCall(toolName);
288
+ return text + getProtocolNudge(toolName);
289
+ }
290
+ //# sourceMappingURL=session-coach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-coach.js","sourceRoot":"","sources":["../../src/server/session-coach.ts"],"names":[],"mappings":"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"}
@@ -80,7 +80,10 @@ export declare function formatHeader(toolName: string, options?: {
80
80
  summary?: string;
81
81
  }): string;
82
82
  /**
83
- * Wrap a response with Merlin visual formatting
83
+ * Wrap a response with Merlin visual formatting and session coaching.
84
+ *
85
+ * Every Merlin tool response goes through this. The session coach injects
86
+ * targeted, escalating nudges based on how well Claude is following the protocol.
84
87
  */
85
88
  export declare function wrapResponse(toolName: string, content: string, options?: {
86
89
  task?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/server/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/server/stats.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Shows users the value: "5K tokens vs 65K if you read files directly"
5
5
  */
6
+ import { recordToolCall, getProtocolNudge, getProtocolStatus } from './session-coach.js';
6
7
  // Configuration for periodic reminders
7
8
  const STALE_CONTEXT_MINUTES = 5; // Warn if context older than 5 minutes
8
9
  const QUERIES_BEFORE_REMINDER = 8; // Remind to refresh every N queries
@@ -218,15 +219,20 @@ export function formatHeader(toolName, options = {}) {
218
219
  return header;
219
220
  }
220
221
  /**
221
- * Wrap a response with Merlin visual formatting
222
+ * Wrap a response with Merlin visual formatting and session coaching.
223
+ *
224
+ * Every Merlin tool response goes through this. The session coach injects
225
+ * targeted, escalating nudges based on how well Claude is following the protocol.
222
226
  */
223
227
  export function wrapResponse(toolName, content, options = {}) {
224
228
  const { task, filesFound = 0, isSuccess = true, summary, skipEnforcement = false, isContextRefresh = false } = options;
225
229
  // Calculate tokens
226
230
  const responseTokens = estimateTokens(content);
227
- // Record the query
231
+ // Record the query in stats
228
232
  recordQuery(toolName, content, filesFound);
229
- // Track context refresh vs regular queries
233
+ // Record in session coach (the new enforcement system)
234
+ recordToolCall(toolName);
235
+ // Track context refresh vs regular queries (legacy stats)
230
236
  if (isContextRefresh) {
231
237
  markContextRefresh();
232
238
  }
@@ -236,20 +242,13 @@ export function wrapResponse(toolName, content, options = {}) {
236
242
  // Build formatted response
237
243
  let response = '';
238
244
  // Add enforcement reminder if session status not shown yet
239
- // (unless this is the get_selected_repo tool or enforcement is skipped)
240
245
  if (!skipEnforcement) {
241
246
  const reminder = getSessionEnforcementReminder();
242
247
  if (reminder) {
243
248
  response += reminder;
244
249
  }
245
250
  }
246
- // Add stale context reminder (but not for context refresh tools themselves)
247
- if (!isContextRefresh && !skipEnforcement) {
248
- const staleReminder = getStaleContextReminder();
249
- if (staleReminder) {
250
- response += staleReminder;
251
- }
252
- }
251
+ // Header with tool name, task, file count, token savings
253
252
  response += formatHeader(toolName, {
254
253
  task,
255
254
  filesFound,
@@ -257,30 +256,17 @@ export function wrapResponse(toolName, content, options = {}) {
257
256
  isSuccess,
258
257
  summary,
259
258
  });
259
+ // Protocol status line (compact: 🟢 Protocol: 85% │ Last context: 2m ago │ Calls since: 3)
260
+ response += getProtocolStatus() + '\n';
260
261
  // Separator
261
262
  response += '\n---\n\n';
262
263
  // Actual content
263
264
  response += content;
264
- // Add persistent reminder footer (subtle but always present)
265
- response += getMerlinReminder();
265
+ // Session coach nudge replaces the old weak <sub> reminder
266
+ // This is targeted, escalating, and formatted as instructions not decoration
267
+ response += getProtocolNudge(toolName);
266
268
  return response;
267
269
  }
268
- /**
269
- * Get a subtle reminder to use Merlin
270
- * This appears at the end of every response
271
- */
272
- function getMerlinReminder() {
273
- // Rotate through different reminders to avoid fatigue
274
- const reminders = [
275
- '`merlin_get_context` before modifying code',
276
- 'Check Merlin before creating new files',
277
- 'Use Merlin to find existing patterns',
278
- 'Merlin knows what already exists',
279
- 'Refresh context every few minutes',
280
- ];
281
- const reminder = reminders[Math.floor(Date.now() / 60000) % reminders.length];
282
- return `\n\n---\n<sub>🔮 Remember: ${reminder}</sub>`;
283
- }
284
270
  /**
285
271
  * Get cumulative session stats for display
286
272
  */
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/server/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/server/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Auto-Teach Module
3
+ *
4
+ * Detects when Sights context is low-confidence and prompts Claude to
5
+ * teach back what it discovers through manual exploration.
6
+ *
7
+ * The feedback loop:
8
+ * 1. merlin_get_context returns with confidence assessment
9
+ * 2. If low confidence, response includes a TEACH BACK prompt
10
+ * 3. Claude explores manually (Grep, Read, Glob)
11
+ * 4. Claude calls merlin_report_context_gap to push findings back
12
+ * 5. Findings saved as discoveries — next query returns them instantly
13
+ */
14
+ import type { ToolContext } from './types.js';
15
+ /** Confidence levels for context responses */
16
+ export type ContextConfidence = 'high' | 'medium' | 'low';
17
+ /** Assessment result */
18
+ export interface ConfidenceAssessment {
19
+ level: ContextConfidence;
20
+ score: number;
21
+ reasons: string[];
22
+ filesFound: number;
23
+ howToLength: number;
24
+ }
25
+ /**
26
+ * Assess confidence of a context response.
27
+ *
28
+ * Signals used:
29
+ * - HowTo guide length (short = low confidence)
30
+ * - Number of relevant files found
31
+ * - Whether howTo contains actionable steps vs generic text
32
+ * - Whether file exports were resolved
33
+ */
34
+ export declare function assessContextConfidence(howTo: string, filesFound: number, conventionsFound?: number): ConfidenceAssessment;
35
+ /**
36
+ * Build the teach-back prompt appended to low-confidence responses.
37
+ * This tells Claude to push findings back after manual exploration.
38
+ */
39
+ export declare function buildTeachBackPrompt(task: string, assessment: ConfidenceAssessment): string;
40
+ /**
41
+ * Register the auto-teach tools
42
+ */
43
+ export declare function registerAutoTeachTools(ctx: ToolContext): void;
44
+ //# sourceMappingURL=auto-teach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-teach.d.ts","sourceRoot":"","sources":["../../../src/server/tools/auto-teach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,8CAA8C;AAC9C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE1D,wBAAwB;AACxB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,gBAAgB,GAAE,MAAU,GAC3B,oBAAoB,CA+DtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,oBAAoB,GAC/B,MAAM,CA4BR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAiG7D"}