create-merlin-brain 3.22.0 → 3.23.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 (76) hide show
  1. package/README.md +22 -4
  2. package/bin/merlin-ask.cjs +111 -0
  3. package/bin/merlin-cli.cjs +22 -0
  4. package/bin/runtime-adapters.cjs +678 -28
  5. package/dist/server/api/client.d.ts +2 -0
  6. package/dist/server/api/client.d.ts.map +1 -1
  7. package/dist/server/api/client.js +4 -0
  8. package/dist/server/api/client.js.map +1 -1
  9. package/dist/server/server.d.ts.map +1 -1
  10. package/dist/server/server.js +45 -4
  11. package/dist/server/server.js.map +1 -1
  12. package/dist/server/tools/auto-mode.d.ts +9 -0
  13. package/dist/server/tools/auto-mode.d.ts.map +1 -0
  14. package/dist/server/tools/auto-mode.js +231 -0
  15. package/dist/server/tools/auto-mode.js.map +1 -0
  16. package/dist/server/tools/computer-use.d.ts +8 -0
  17. package/dist/server/tools/computer-use.d.ts.map +1 -0
  18. package/dist/server/tools/computer-use.js +355 -0
  19. package/dist/server/tools/computer-use.js.map +1 -0
  20. package/dist/server/tools/dream.d.ts +9 -0
  21. package/dist/server/tools/dream.d.ts.map +1 -0
  22. package/dist/server/tools/dream.js +246 -0
  23. package/dist/server/tools/dream.js.map +1 -0
  24. package/dist/server/tools/hud.d.ts +13 -0
  25. package/dist/server/tools/hud.d.ts.map +1 -0
  26. package/dist/server/tools/hud.js +295 -0
  27. package/dist/server/tools/hud.js.map +1 -0
  28. package/dist/server/tools/index.d.ts +4 -0
  29. package/dist/server/tools/index.d.ts.map +1 -1
  30. package/dist/server/tools/index.js +4 -0
  31. package/dist/server/tools/index.js.map +1 -1
  32. package/dist/server/tools/provider-ask.d.ts +10 -0
  33. package/dist/server/tools/provider-ask.d.ts.map +1 -0
  34. package/dist/server/tools/provider-ask.js +234 -0
  35. package/dist/server/tools/provider-ask.js.map +1 -0
  36. package/dist/server/tools/rate-limit.d.ts +8 -0
  37. package/dist/server/tools/rate-limit.d.ts.map +1 -0
  38. package/dist/server/tools/rate-limit.js +184 -0
  39. package/dist/server/tools/rate-limit.js.map +1 -0
  40. package/dist/server/tools/skills.d.ts +16 -0
  41. package/dist/server/tools/skills.d.ts.map +1 -0
  42. package/dist/server/tools/skills.js +326 -0
  43. package/dist/server/tools/skills.js.map +1 -0
  44. package/dist/server/tools/team-workers.d.ts +7 -0
  45. package/dist/server/tools/team-workers.d.ts.map +1 -0
  46. package/dist/server/tools/team-workers.js +271 -0
  47. package/dist/server/tools/team-workers.js.map +1 -0
  48. package/dist/server/utils/merlin-manifest.d.ts +6 -1
  49. package/dist/server/utils/merlin-manifest.d.ts.map +1 -1
  50. package/dist/server/utils/merlin-manifest.js +34 -1
  51. package/dist/server/utils/merlin-manifest.js.map +1 -1
  52. package/files/CLAUDE.md +22 -0
  53. package/files/hooks/rate-limit-watch.sh +120 -0
  54. package/files/hooks/statusline.sh +148 -0
  55. package/files/merlin/skills/SKILLS-INDEX.md +82 -0
  56. package/files/merlin/skills/automation/payments.md +14 -0
  57. package/files/merlin/skills/automation/webhooks.md +14 -0
  58. package/files/merlin/skills/coding/accessibility.md +14 -0
  59. package/files/merlin/skills/coding/api-design.md +14 -0
  60. package/files/merlin/skills/coding/debug-mode.md +14 -0
  61. package/files/merlin/skills/coding/focus-mode.md +14 -0
  62. package/files/merlin/skills/coding/loop.md +14 -0
  63. package/files/merlin/skills/coding/performance.md +14 -0
  64. package/files/merlin/skills/coding/react-patterns.md +51 -0
  65. package/files/merlin/skills/coding/security-hardening.md +56 -0
  66. package/files/merlin/skills/coding/verify.md +14 -0
  67. package/files/merlin/skills/communication/dispatcher.md +40 -0
  68. package/files/merlin/skills/communication/email-gmail.md +31 -0
  69. package/files/merlin/skills/communication/telegram.md +50 -0
  70. package/files/merlin/skills/communication/whatsapp.md +47 -0
  71. package/files/merlin/skills/data/google-sheets.md +14 -0
  72. package/files/merlin/skills/design/animation.md +14 -0
  73. package/files/merlin/skills/devops/docker-containers.md +14 -0
  74. package/files/merlin/skills/research/brainstorm.md +14 -0
  75. package/files/merlin/skills/testing/tdd-workflow.md +58 -0
  76. package/package.json +4 -2
@@ -0,0 +1,246 @@
1
+ /**
2
+ * AutoDream Memory Consolidation Tools
3
+ * Enables/configures Claude Code's AutoDream for Merlin's memory system.
4
+ * Project memory: ~/.claude/projects/<derived-path>/memory/
5
+ * Global memory: ~/.claude/memory/
6
+ */
7
+ import { z } from 'zod';
8
+ import { existsSync, readFileSync, writeFileSync, readdirSync, statSync, mkdirSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { homedir } from 'os';
11
+ import { coachWrap } from '../session-coach.js';
12
+ const STALE_DAYS = 30;
13
+ const SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
14
+ const GLOBAL_MEMORY_DIR = join(homedir(), '.claude', 'memory');
15
+ const PROJECTS_BASE_DIR = join(homedir(), '.claude', 'projects');
16
+ // ── Settings ──────────────────────────────────────────────────────────────────
17
+ function readSettings() {
18
+ if (!existsSync(SETTINGS_PATH))
19
+ return {};
20
+ try {
21
+ return JSON.parse(readFileSync(SETTINGS_PATH, 'utf-8'));
22
+ }
23
+ catch {
24
+ return {};
25
+ }
26
+ }
27
+ function writeSettings(settings) {
28
+ const dir = join(homedir(), '.claude');
29
+ if (!existsSync(dir))
30
+ mkdirSync(dir, { recursive: true });
31
+ writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
32
+ }
33
+ // ── Path resolution ───────────────────────────────────────────────────────────
34
+ /** Derive project memory path: replace / with -, strip leading - */
35
+ function deriveProjectMemoryDir(repoRootPath) {
36
+ const derived = repoRootPath.replace(/\//g, '-').replace(/^-/, '');
37
+ return join(PROJECTS_BASE_DIR, derived, 'memory');
38
+ }
39
+ async function resolveMemoryDir(scope, getRepoRootPath) {
40
+ if (scope === 'global')
41
+ return { dir: GLOBAL_MEMORY_DIR, label: 'global' };
42
+ if (getRepoRootPath) {
43
+ const root = await getRepoRootPath();
44
+ if (root)
45
+ return { dir: deriveProjectMemoryDir(root), label: `project (${root})` };
46
+ }
47
+ // Fallback: find most recently modified project memory dir
48
+ if (existsSync(PROJECTS_BASE_DIR)) {
49
+ let newest = null;
50
+ for (const entry of readdirSync(PROJECTS_BASE_DIR)) {
51
+ const memDir = join(PROJECTS_BASE_DIR, entry, 'memory');
52
+ if (existsSync(memDir)) {
53
+ const st = statSync(memDir);
54
+ if (!newest || st.mtimeMs > newest.mtime)
55
+ newest = { dir: memDir, mtime: st.mtimeMs };
56
+ }
57
+ }
58
+ if (newest)
59
+ return { dir: newest.dir, label: 'project (auto-detected)' };
60
+ }
61
+ return { dir: GLOBAL_MEMORY_DIR, label: 'global (fallback)' };
62
+ }
63
+ // ── Frontmatter parser ────────────────────────────────────────────────────────
64
+ function parseFrontmatter(content) {
65
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
66
+ if (!match)
67
+ return { name: '', description: '', type: 'unknown' };
68
+ const block = match[1];
69
+ const get = (key) => { const m = block.match(new RegExp(`^${key}:\\s*(.+)$`, 'm')); return m ? m[1].trim() : ''; };
70
+ return { name: get('name'), description: get('description'), type: get('type') || 'unknown' };
71
+ }
72
+ // ── Memory scanner ────────────────────────────────────────────────────────────
73
+ function scanMemoryFiles(dir) {
74
+ if (!existsSync(dir))
75
+ return [];
76
+ const staleCutoff = STALE_DAYS * 24 * 60 * 60 * 1000;
77
+ const now = Date.now();
78
+ const results = [];
79
+ for (const fname of readdirSync(dir)) {
80
+ if (!fname.endsWith('.md') || fname === 'MEMORY.md')
81
+ continue;
82
+ try {
83
+ const content = readFileSync(join(dir, fname), 'utf-8');
84
+ const st = statSync(join(dir, fname));
85
+ const fm = parseFrontmatter(content);
86
+ results.push({ name: fname, type: fm.type, description: fm.description || fm.name, modifiedAt: st.mtime, isStale: now - st.mtimeMs > staleCutoff });
87
+ }
88
+ catch { /* skip unreadable */ }
89
+ }
90
+ return results;
91
+ }
92
+ // ── Index checker ─────────────────────────────────────────────────────────────
93
+ function checkMemoryIndex(dir, files) {
94
+ const indexPath = join(dir, 'MEMORY.md');
95
+ const existingNames = new Set(files.map(f => f.name));
96
+ if (!existsSync(indexPath))
97
+ return { orphanedEntries: [], unindexedFiles: files.map(f => f.name) };
98
+ const content = readFileSync(indexPath, 'utf-8');
99
+ const linked = new Set();
100
+ for (const m of content.matchAll(/\[.*?\]\(([^)]+\.md)\)/g))
101
+ linked.add(m[1]);
102
+ return {
103
+ orphanedEntries: [...linked].filter(f => !existingNames.has(f)),
104
+ unindexedFiles: [...existingNames].filter(f => !linked.has(f)),
105
+ };
106
+ }
107
+ // ── Duplicate detector ────────────────────────────────────────────────────────
108
+ function findPotentialDuplicates(files) {
109
+ const dupes = [];
110
+ const baseName = (n) => n.replace(/\.md$/, '').replace(/[-_]\d+$/, '').toLowerCase();
111
+ for (let i = 0; i < files.length; i++) {
112
+ for (let j = i + 1; j < files.length; j++) {
113
+ const a = files[i];
114
+ const b = files[j];
115
+ if (a.type === b.type && baseName(a.name) === baseName(b.name)) {
116
+ dupes.push([a.name, b.name]);
117
+ continue;
118
+ }
119
+ if (a.description && b.description && a.description.length > 10 && b.description.length > 10) {
120
+ const [shorter, longer] = a.description.length < b.description.length ? [a.description, b.description] : [b.description, a.description];
121
+ if (longer.toLowerCase().includes(shorter.toLowerCase()))
122
+ dupes.push([a.name, b.name]);
123
+ }
124
+ }
125
+ }
126
+ return dupes;
127
+ }
128
+ // ── Report formatter ──────────────────────────────────────────────────────────
129
+ function formatConsolidationReport(files, indexIssues, label) {
130
+ const byType = {};
131
+ for (const f of files) {
132
+ if (!byType[f.type])
133
+ byType[f.type] = [];
134
+ byType[f.type].push(f.name);
135
+ }
136
+ const stale = files.filter(f => f.isStale).map(f => f.name);
137
+ const dupes = findPotentialDuplicates(files);
138
+ const suggestions = [];
139
+ if (dupes.length > 0)
140
+ suggestions.push(`Merge ${dupes.length} potential duplicate(s): ${dupes.map(([a, b]) => `${a} + ${b}`).join('; ')}`);
141
+ if (stale.length > 0)
142
+ suggestions.push(`Review ${stale.length} stale file(s) (${STALE_DAYS}+ days): ${stale.join(', ')}`);
143
+ if (indexIssues.orphanedEntries.length > 0)
144
+ suggestions.push(`Remove ${indexIssues.orphanedEntries.length} orphaned MEMORY.md link(s): ${indexIssues.orphanedEntries.join(', ')}`);
145
+ if (indexIssues.unindexedFiles.length > 0)
146
+ suggestions.push(`Add ${indexIssues.unindexedFiles.length} missing MEMORY.md entry(s): ${indexIssues.unindexedFiles.join(', ')}`);
147
+ if (suggestions.length === 0)
148
+ suggestions.push('Memory looks clean — no consolidation needed.');
149
+ const lines = [`## Memory Consolidation Report — ${label}`, '', `**Total memory files:** ${files.length}`, ''];
150
+ if (files.length === 0) {
151
+ lines.push('No memory files found in this directory.');
152
+ }
153
+ else {
154
+ lines.push('### Files by Type');
155
+ for (const [type, names] of Object.entries(byType))
156
+ lines.push(`- **${type}** (${names.length}): ${names.join(', ')}`);
157
+ if (stale.length > 0) {
158
+ lines.push('', `### Stale Files (${STALE_DAYS}+ days unchanged)`);
159
+ stale.forEach(f => lines.push(`- ${f}`));
160
+ }
161
+ if (dupes.length > 0) {
162
+ lines.push('', '### Potential Duplicates');
163
+ dupes.forEach(([a, b]) => lines.push(`- \`${a}\` and \`${b}\``));
164
+ }
165
+ if (indexIssues.orphanedEntries.length > 0) {
166
+ lines.push('', '### Orphaned MEMORY.md Entries');
167
+ indexIssues.orphanedEntries.forEach(f => lines.push(`- ${f}`));
168
+ }
169
+ if (indexIssues.unindexedFiles.length > 0) {
170
+ lines.push('', '### Unindexed Files (not in MEMORY.md)');
171
+ indexIssues.unindexedFiles.forEach(f => lines.push(`- ${f}`));
172
+ }
173
+ }
174
+ lines.push('', '### Suggested Actions');
175
+ suggestions.forEach((s, i) => lines.push(`${i + 1}. ${s}`));
176
+ return lines.join('\n');
177
+ }
178
+ // ── Tool registration ─────────────────────────────────────────────────────────
179
+ export function registerDreamTools(ctx) {
180
+ const { server, getRepoRootPath } = ctx;
181
+ server.tool('merlin_dream', 'Enable, disable, check status, or manually trigger consolidation of Merlin\'s AutoDream memory system. AutoDream keeps Claude Code\'s memory files organized by periodically consolidating them. Use "enable" to turn on automatic consolidation, "status" to inspect memory health, and "consolidate" to get a report with actionable suggestions for merging duplicates, pruning stale entries, and fixing the MEMORY.md index.', {
182
+ action: z.enum(['enable', 'disable', 'status', 'consolidate']).describe('enable — turn on AutoDream; disable — turn it off; status — check current state and memory stats; consolidate — scan memory and return actionable suggestions'),
183
+ scope: z.enum(['project', 'global']).optional().describe('"project" (default) uses .claude/projects/<repo>/memory/, "global" uses ~/.claude/memory/'),
184
+ }, async ({ action, scope = 'project' }) => {
185
+ try {
186
+ const { dir: memDir, label } = await resolveMemoryDir(scope, getRepoRootPath);
187
+ if (action === 'enable') {
188
+ const settings = readSettings();
189
+ settings.autoMemoryEnabled = true;
190
+ writeSettings(settings);
191
+ const text = [
192
+ '## AutoDream Enabled',
193
+ '',
194
+ 'Claude Code will now automatically consolidate memory files over time.',
195
+ `**Memory path (${scope}):** \`${memDir}\``,
196
+ '',
197
+ 'Run `merlin_dream` with action "status" to check memory health.',
198
+ 'Run `merlin_dream` with action "consolidate" to get manual suggestions.',
199
+ ].join('\n');
200
+ return { content: [{ type: 'text', text: coachWrap('merlin_dream', text) }] };
201
+ }
202
+ if (action === 'disable') {
203
+ const settings = readSettings();
204
+ settings.autoMemoryEnabled = false;
205
+ writeSettings(settings);
206
+ return { content: [{ type: 'text', text: coachWrap('merlin_dream', '## AutoDream Disabled\n\nAutomatic memory consolidation has been turned off.\nRun `merlin_dream` with action "enable" to re-activate.') }] };
207
+ }
208
+ if (action === 'status') {
209
+ const settings = readSettings();
210
+ const files = scanMemoryFiles(memDir);
211
+ const sorted = [...files].sort((a, b) => a.modifiedAt.getTime() - b.modifiedAt.getTime());
212
+ const lines = [
213
+ '## AutoDream Status',
214
+ '',
215
+ `**Enabled:** ${settings.autoMemoryEnabled === true ? 'Yes' : 'No'}`,
216
+ `**Scope:** ${label}`,
217
+ `**Memory directory:** \`${memDir}\``,
218
+ `**Directory exists:** ${existsSync(memDir) ? 'Yes' : 'No (created on first memory save)'}`,
219
+ '',
220
+ '### Memory Stats',
221
+ `- **Total files:** ${files.length}`,
222
+ `- **Stale (${STALE_DAYS}+ days):** ${files.filter(f => f.isStale).length}`,
223
+ sorted[0] ? `- **Oldest:** ${sorted[0].name} (${sorted[0].modifiedAt.toLocaleDateString()})` : '',
224
+ sorted.at(-1) ? `- **Newest:** ${sorted.at(-1).name} (${sorted.at(-1).modifiedAt.toLocaleDateString()})` : '',
225
+ ].filter(Boolean);
226
+ if (settings.autoMemoryEnabled !== true)
227
+ lines.push('', 'Run `merlin_dream` with action "enable" to activate AutoDream.');
228
+ if (files.length > 0)
229
+ lines.push('', 'Run `merlin_dream` with action "consolidate" for a full health report.');
230
+ return { content: [{ type: 'text', text: coachWrap('merlin_dream', lines.join('\n')) }] };
231
+ }
232
+ // consolidate
233
+ const files = scanMemoryFiles(memDir);
234
+ const indexIssues = checkMemoryIndex(memDir, files);
235
+ const report = formatConsolidationReport(files, indexIssues, label);
236
+ return { content: [{ type: 'text', text: coachWrap('merlin_dream', report) }] };
237
+ }
238
+ catch (error) {
239
+ return {
240
+ content: [{ type: 'text', text: `Error in merlin_dream: ${error instanceof Error ? error.message : 'Unknown error'}` }],
241
+ isError: true,
242
+ };
243
+ }
244
+ });
245
+ }
246
+ //# sourceMappingURL=dream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dream.js","sourceRoot":"","sources":["../../../src/server/tools/dream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * HUD Tools
3
+ * MCP tools for reading and writing live session HUD metrics.
4
+ *
5
+ * merlin_hud_status — read all metrics (agents, tasks, cost, context, rate limit, git)
6
+ * merlin_hud_update — write a single metric (called by hooks and agents)
7
+ *
8
+ * All state lives in ~/.merlin/state/ as small JSON files.
9
+ * Missing files are handled gracefully — metrics fall back to null.
10
+ */
11
+ import type { ToolContext } from './types.js';
12
+ export declare function registerHudTools(ctx: ToolContext): void;
13
+ //# sourceMappingURL=hud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hud.d.ts","sourceRoot":"","sources":["../../../src/server/tools/hud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0K9C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAgKvD"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * HUD Tools
3
+ * MCP tools for reading and writing live session HUD metrics.
4
+ *
5
+ * merlin_hud_status — read all metrics (agents, tasks, cost, context, rate limit, git)
6
+ * merlin_hud_update — write a single metric (called by hooks and agents)
7
+ *
8
+ * All state lives in ~/.merlin/state/ as small JSON files.
9
+ * Missing files are handled gracefully — metrics fall back to null.
10
+ */
11
+ import { z } from 'zod';
12
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
13
+ import { execSync } from 'child_process';
14
+ import { homedir } from 'os';
15
+ import { join } from 'path';
16
+ const STATE_DIR = join(homedir(), '.merlin', 'state');
17
+ const MERLIN_DIR = join(homedir(), '.claude', 'merlin');
18
+ // ── State file paths ────────────────────────────────────────────────────────
19
+ const STATE_FILES = {
20
+ agents: join(STATE_DIR, 'agents.json'),
21
+ tasks: join(STATE_DIR, 'tasks.json'),
22
+ sessionCost: join(STATE_DIR, 'session-cost.json'),
23
+ lastContext: join(STATE_DIR, 'last-context.json'),
24
+ rateLimit: join(STATE_DIR, 'rate-limit.json'),
25
+ };
26
+ // ── Helpers ─────────────────────────────────────────────────────────────────
27
+ function ensureStateDir() {
28
+ if (!existsSync(STATE_DIR)) {
29
+ mkdirSync(STATE_DIR, { recursive: true });
30
+ }
31
+ }
32
+ function readJson(filePath) {
33
+ if (!existsSync(filePath))
34
+ return null;
35
+ try {
36
+ return JSON.parse(readFileSync(filePath, 'utf8'));
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ function writeJson(filePath, data) {
43
+ ensureStateDir();
44
+ writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf8');
45
+ }
46
+ function readVersion() {
47
+ const versionFile = join(MERLIN_DIR, 'VERSION');
48
+ if (!existsSync(versionFile))
49
+ return null;
50
+ return readFileSync(versionFile, 'utf8').trim() || null;
51
+ }
52
+ function readGitBranch() {
53
+ try {
54
+ return execSync('git rev-parse --abbrev-ref HEAD', { timeout: 500, stdio: ['pipe', 'pipe', 'pipe'] })
55
+ .toString()
56
+ .trim();
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ function readGitInfo() {
63
+ const branch = readGitBranch();
64
+ let repoName = null;
65
+ try {
66
+ const remote = execSync('git remote get-url origin', { timeout: 500, stdio: ['pipe', 'pipe', 'pipe'] })
67
+ .toString()
68
+ .trim();
69
+ // Extract repo name from URL (handles HTTPS and SSH)
70
+ const match = remote.match(/[:/]([^/]+\/[^/.]+)(\.git)?$/);
71
+ repoName = match ? match[1] : null;
72
+ }
73
+ catch {
74
+ // no remote — that's fine
75
+ }
76
+ return { branch, repoName };
77
+ }
78
+ function secondsToHuman(elapsed) {
79
+ if (elapsed < 60)
80
+ return `${elapsed}s`;
81
+ if (elapsed < 3600)
82
+ return `${Math.floor(elapsed / 60)}m`;
83
+ return `${Math.floor(elapsed / 3600)}h`;
84
+ }
85
+ function readAgentMetrics() {
86
+ const data = readJson(STATE_FILES.agents);
87
+ return {
88
+ active: typeof data?.active === 'number' ? data.active : 0,
89
+ names: Array.isArray(data?.names) ? data.names : [],
90
+ };
91
+ }
92
+ function readTaskMetrics() {
93
+ const data = readJson(STATE_FILES.tasks);
94
+ if (!data)
95
+ return null;
96
+ return {
97
+ done: typeof data.done === 'number' ? data.done : 0,
98
+ total: typeof data.total === 'number' ? data.total : 0,
99
+ current: typeof data.current === 'string' ? data.current : null,
100
+ };
101
+ }
102
+ function readCostMetrics() {
103
+ const data = readJson(STATE_FILES.sessionCost);
104
+ if (!data)
105
+ return null;
106
+ const raw = data.total;
107
+ const total = typeof raw === 'number'
108
+ ? raw.toFixed(2)
109
+ : typeof raw === 'string'
110
+ ? raw
111
+ : null;
112
+ if (total === null)
113
+ return null;
114
+ return { total, currency: 'USD' };
115
+ }
116
+ function readContextMetrics() {
117
+ const data = readJson(STATE_FILES.lastContext);
118
+ if (!data)
119
+ return null;
120
+ const ts = typeof data.timestamp === 'number' ? data.timestamp : null;
121
+ if (!ts)
122
+ return null;
123
+ const elapsed = Math.floor(Date.now() / 1000) - ts;
124
+ return {
125
+ ageSeconds: elapsed,
126
+ ageHuman: secondsToHuman(elapsed),
127
+ lastQuery: typeof data.query === 'string' ? data.query : null,
128
+ };
129
+ }
130
+ function readRateLimitMetrics() {
131
+ const data = readJson(STATE_FILES.rateLimit);
132
+ const raw = typeof data?.status === 'string' ? data.status.toUpperCase() : 'OK';
133
+ const status = raw === 'WARN' ? 'WARN' : raw === 'BLOCKED' ? 'BLOCKED' : 'OK';
134
+ return {
135
+ status,
136
+ remainingTokens: typeof data?.remainingTokens === 'number' ? data.remainingTokens : null,
137
+ resetsAt: typeof data?.resetsAt === 'string' ? data.resetsAt : null,
138
+ };
139
+ }
140
+ // ── Zod schemas ──────────────────────────────────────────────────────────────
141
+ const HudUpdateSchema = z.object({
142
+ metric: z.enum(['agents', 'tasks', 'cost', 'context', 'rateLimit']),
143
+ value: z.union([z.string(), z.number()]),
144
+ });
145
+ // ── Tool registration ────────────────────────────────────────────────────────
146
+ export function registerHudTools(ctx) {
147
+ const { server } = ctx;
148
+ // ── merlin_hud_status ─────────────────────────────────────────────────────
149
+ server.tool('merlin_hud_status', 'Get real-time HUD metrics for the current Merlin session: active agents, task progress, ' +
150
+ 'session cost, context freshness (time since last Sights call), rate limit health, and git ' +
151
+ 'branch/repo info. Use to display a live statusline, build a session dashboard, or check ' +
152
+ 'session health at a glance. Returns structured JSON with all available metrics; missing ' +
153
+ 'state files produce null values rather than errors.', {}, async () => {
154
+ const version = readVersion();
155
+ const agents = readAgentMetrics();
156
+ const tasks = readTaskMetrics();
157
+ const cost = readCostMetrics();
158
+ const context = readContextMetrics();
159
+ const rateLimit = readRateLimitMetrics();
160
+ const git = readGitInfo();
161
+ // Build human-readable statusline
162
+ const parts = [];
163
+ if (version)
164
+ parts.push(`v${version}`);
165
+ parts.push(`${agents.active} agents`);
166
+ if (tasks)
167
+ parts.push(`${tasks.done}/${tasks.total} tasks`);
168
+ if (cost)
169
+ parts.push(`$${cost.total}`);
170
+ if (git.branch)
171
+ parts.push(git.branch);
172
+ if (context)
173
+ parts.push(`ctx:${context.ageHuman}`);
174
+ parts.push(`rate:${rateLimit.status}`);
175
+ const statusLine = parts.join(' | ');
176
+ const payload = {
177
+ statusLine,
178
+ metrics: {
179
+ version,
180
+ agents,
181
+ tasks,
182
+ cost,
183
+ context,
184
+ rateLimit,
185
+ git,
186
+ },
187
+ stateDir: STATE_DIR,
188
+ generatedAt: new Date().toISOString(),
189
+ };
190
+ return {
191
+ content: [{
192
+ type: 'text',
193
+ text: JSON.stringify(payload, null, 2),
194
+ }],
195
+ };
196
+ });
197
+ // ── merlin_hud_update ─────────────────────────────────────────────────────
198
+ server.tool('merlin_hud_update', 'Update a single HUD metric so the statusline stays current. Called by hooks and agents ' +
199
+ 'after state changes: e.g. set agents=2 when a new agent starts, set cost=1.24 after a ' +
200
+ 'routing call, set context timestamp when Sights is queried. ' +
201
+ 'metric: one of agents | tasks | cost | context | rateLimit. ' +
202
+ 'value: a number (for agents/cost) or a JSON string with structured fields.', {
203
+ metric: z.enum(['agents', 'tasks', 'cost', 'context', 'rateLimit'])
204
+ .describe('Which metric to update'),
205
+ value: z.union([z.string(), z.number()])
206
+ .describe('New value — number for scalar metrics, JSON string for structured ones'),
207
+ }, async (raw) => {
208
+ const parsed = HudUpdateSchema.safeParse(raw);
209
+ if (!parsed.success) {
210
+ return {
211
+ content: [{
212
+ type: 'text',
213
+ text: `Invalid input: ${parsed.error.message}`,
214
+ }],
215
+ isError: true,
216
+ };
217
+ }
218
+ const { metric, value } = parsed.data;
219
+ try {
220
+ ensureStateDir();
221
+ switch (metric) {
222
+ case 'agents': {
223
+ const count = typeof value === 'number' ? value : parseInt(String(value), 10);
224
+ const existing = readJson(STATE_FILES.agents) ?? {};
225
+ writeJson(STATE_FILES.agents, { ...existing, active: isNaN(count) ? 0 : count });
226
+ break;
227
+ }
228
+ case 'tasks': {
229
+ // value can be "3/8" or a JSON string like {"done":3,"total":8}
230
+ if (typeof value === 'string' && value.includes('/')) {
231
+ const [done, total] = value.split('/').map(Number);
232
+ const existing = readJson(STATE_FILES.tasks) ?? {};
233
+ writeJson(STATE_FILES.tasks, { ...existing, done: done ?? 0, total: total ?? 0 });
234
+ }
235
+ else if (typeof value === 'string') {
236
+ try {
237
+ const obj = JSON.parse(value);
238
+ const existing = readJson(STATE_FILES.tasks) ?? {};
239
+ writeJson(STATE_FILES.tasks, { ...existing, ...obj });
240
+ }
241
+ catch {
242
+ return {
243
+ content: [{
244
+ type: 'text',
245
+ text: 'tasks value must be "done/total" (e.g. "3/8") or a JSON object.',
246
+ }],
247
+ isError: true,
248
+ };
249
+ }
250
+ }
251
+ break;
252
+ }
253
+ case 'cost': {
254
+ const total = typeof value === 'number'
255
+ ? value.toFixed(2)
256
+ : String(value).replace(/^\$/, '');
257
+ const existing = readJson(STATE_FILES.sessionCost) ?? {};
258
+ writeJson(STATE_FILES.sessionCost, { ...existing, total });
259
+ break;
260
+ }
261
+ case 'context': {
262
+ const ts = Math.floor(Date.now() / 1000);
263
+ const query = typeof value === 'string' ? value : null;
264
+ const existing = readJson(STATE_FILES.lastContext) ?? {};
265
+ writeJson(STATE_FILES.lastContext, { ...existing, timestamp: ts, query });
266
+ break;
267
+ }
268
+ case 'rateLimit': {
269
+ const statusRaw = String(value).toUpperCase();
270
+ const status = statusRaw === 'WARN' ? 'WARN' : statusRaw === 'BLOCKED' ? 'BLOCKED' : 'OK';
271
+ const existing = readJson(STATE_FILES.rateLimit) ?? {};
272
+ writeJson(STATE_FILES.rateLimit, { ...existing, status });
273
+ break;
274
+ }
275
+ }
276
+ return {
277
+ content: [{
278
+ type: 'text',
279
+ text: `HUD metric '${metric}' updated.`,
280
+ }],
281
+ };
282
+ }
283
+ catch (err) {
284
+ const msg = err instanceof Error ? err.message : String(err);
285
+ return {
286
+ content: [{
287
+ type: 'text',
288
+ text: `Failed to write HUD state: ${msg}`,
289
+ }],
290
+ isError: true,
291
+ };
292
+ }
293
+ });
294
+ }
295
+ //# sourceMappingURL=hud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hud.js","sourceRoot":"","sources":["../../../src/server/tools/hud.ts"],"names":[],"mappings":"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"}
@@ -19,4 +19,8 @@ export { registerSessionSearchTools } from './session-search.js';
19
19
  export { registerPromoteTools } from './promote.js';
20
20
  export { registerLearningTools } from './learning.js';
21
21
  export { registerChallengeTools } from './challenge.js';
22
+ export { registerAutoModeTools } from './auto-mode.js';
23
+ export { registerDreamTools } from './dream.js';
24
+ export { registerComputerUseTools } from './computer-use.js';
25
+ export { registerSkillsTools } from './skills.js';
22
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -18,4 +18,8 @@ export { registerSessionSearchTools } from './session-search.js';
18
18
  export { registerPromoteTools } from './promote.js';
19
19
  export { registerLearningTools } from './learning.js';
20
20
  export { registerChallengeTools } from './challenge.js';
21
+ export { registerAutoModeTools } from './auto-mode.js';
22
+ export { registerDreamTools } from './dream.js';
23
+ export { registerComputerUseTools } from './computer-use.js';
24
+ export { registerSkillsTools } from './skills.js';
21
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}