create-merlin-brain 3.22.0 → 4.0.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 (80) hide show
  1. package/README.md +38 -4
  2. package/bin/merlin-ask.cjs +111 -0
  3. package/bin/merlin-cli.cjs +22 -0
  4. package/bin/runtime-adapters.cjs +709 -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 +56 -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/help.d.ts +3 -0
  25. package/dist/server/tools/help.d.ts.map +1 -0
  26. package/dist/server/tools/help.js +110 -0
  27. package/dist/server/tools/help.js.map +1 -0
  28. package/dist/server/tools/hud.d.ts +13 -0
  29. package/dist/server/tools/hud.d.ts.map +1 -0
  30. package/dist/server/tools/hud.js +295 -0
  31. package/dist/server/tools/hud.js.map +1 -0
  32. package/dist/server/tools/index.d.ts +5 -0
  33. package/dist/server/tools/index.d.ts.map +1 -1
  34. package/dist/server/tools/index.js +5 -0
  35. package/dist/server/tools/index.js.map +1 -1
  36. package/dist/server/tools/provider-ask.d.ts +10 -0
  37. package/dist/server/tools/provider-ask.d.ts.map +1 -0
  38. package/dist/server/tools/provider-ask.js +234 -0
  39. package/dist/server/tools/provider-ask.js.map +1 -0
  40. package/dist/server/tools/rate-limit.d.ts +8 -0
  41. package/dist/server/tools/rate-limit.d.ts.map +1 -0
  42. package/dist/server/tools/rate-limit.js +184 -0
  43. package/dist/server/tools/rate-limit.js.map +1 -0
  44. package/dist/server/tools/skills.d.ts +16 -0
  45. package/dist/server/tools/skills.d.ts.map +1 -0
  46. package/dist/server/tools/skills.js +326 -0
  47. package/dist/server/tools/skills.js.map +1 -0
  48. package/dist/server/tools/team-workers.d.ts +7 -0
  49. package/dist/server/tools/team-workers.d.ts.map +1 -0
  50. package/dist/server/tools/team-workers.js +271 -0
  51. package/dist/server/tools/team-workers.js.map +1 -0
  52. package/dist/server/utils/merlin-manifest.d.ts +6 -1
  53. package/dist/server/utils/merlin-manifest.d.ts.map +1 -1
  54. package/dist/server/utils/merlin-manifest.js +34 -1
  55. package/dist/server/utils/merlin-manifest.js.map +1 -1
  56. package/files/CLAUDE.md +22 -0
  57. package/files/hooks/rate-limit-watch.sh +120 -0
  58. package/files/hooks/statusline.sh +148 -0
  59. package/files/merlin/skills/SKILLS-INDEX.md +82 -0
  60. package/files/merlin/skills/automation/payments.md +14 -0
  61. package/files/merlin/skills/automation/webhooks.md +14 -0
  62. package/files/merlin/skills/coding/accessibility.md +14 -0
  63. package/files/merlin/skills/coding/api-design.md +14 -0
  64. package/files/merlin/skills/coding/debug-mode.md +14 -0
  65. package/files/merlin/skills/coding/focus-mode.md +14 -0
  66. package/files/merlin/skills/coding/loop.md +14 -0
  67. package/files/merlin/skills/coding/performance.md +14 -0
  68. package/files/merlin/skills/coding/react-patterns.md +51 -0
  69. package/files/merlin/skills/coding/security-hardening.md +56 -0
  70. package/files/merlin/skills/coding/verify.md +14 -0
  71. package/files/merlin/skills/communication/dispatcher.md +40 -0
  72. package/files/merlin/skills/communication/email-gmail.md +31 -0
  73. package/files/merlin/skills/communication/telegram.md +50 -0
  74. package/files/merlin/skills/communication/whatsapp.md +47 -0
  75. package/files/merlin/skills/data/google-sheets.md +14 -0
  76. package/files/merlin/skills/design/animation.md +14 -0
  77. package/files/merlin/skills/devops/docker-containers.md +14 -0
  78. package/files/merlin/skills/research/brainstorm.md +14 -0
  79. package/files/merlin/skills/testing/tdd-workflow.md +58 -0
  80. package/package.json +4 -2
@@ -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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"}
@@ -11,6 +11,7 @@ export { registerVerificationTools } from './verification.js';
11
11
  export { registerAdaptiveTools } from './adaptive.js';
12
12
  export { registerAgentTools } from './agents.js';
13
13
  export { registerDiscoveryTools } from './discoveries.js';
14
+ export { registerHelpTools } from './help.js';
14
15
  export { registerRouteTools } from './route.js';
15
16
  export { registerSightsIndexTools } from './sights-index.js';
16
17
  export { registerAgentsIndexTools } from './agents-index.js';
@@ -19,4 +20,8 @@ export { registerSessionSearchTools } from './session-search.js';
19
20
  export { registerPromoteTools } from './promote.js';
20
21
  export { registerLearningTools } from './learning.js';
21
22
  export { registerChallengeTools } from './challenge.js';
23
+ export { registerAutoModeTools } from './auto-mode.js';
24
+ export { registerDreamTools } from './dream.js';
25
+ export { registerComputerUseTools } from './computer-use.js';
26
+ export { registerSkillsTools } from './skills.js';
22
27
  //# 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,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,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"}
@@ -10,6 +10,7 @@ export { registerVerificationTools } from './verification.js';
10
10
  export { registerAdaptiveTools } from './adaptive.js';
11
11
  export { registerAgentTools } from './agents.js';
12
12
  export { registerDiscoveryTools } from './discoveries.js';
13
+ export { registerHelpTools } from './help.js';
13
14
  export { registerRouteTools } from './route.js';
14
15
  export { registerSightsIndexTools } from './sights-index.js';
15
16
  export { registerAgentsIndexTools } from './agents-index.js';
@@ -18,4 +19,8 @@ export { registerSessionSearchTools } from './session-search.js';
18
19
  export { registerPromoteTools } from './promote.js';
19
20
  export { registerLearningTools } from './learning.js';
20
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';
21
26
  //# 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,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Multi-Provider CLI Orchestration Tools
3
+ *
4
+ * Delegate tasks to external AI CLI tools (claude, codex, gemini) and
5
+ * capture their output as artifacts. Supports parallel synthesis across
6
+ * multiple providers for second opinions and architectural decisions.
7
+ */
8
+ import type { ToolContext } from './types.js';
9
+ export declare function registerProviderTools(ctx: ToolContext): void;
10
+ //# sourceMappingURL=provider-ask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-ask.d.ts","sourceRoot":"","sources":["../../../src/server/tools/provider-ask.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsN9C,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CA0F5D"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Multi-Provider CLI Orchestration Tools
3
+ *
4
+ * Delegate tasks to external AI CLI tools (claude, codex, gemini) and
5
+ * capture their output as artifacts. Supports parallel synthesis across
6
+ * multiple providers for second opinions and architectural decisions.
7
+ */
8
+ import { z } from 'zod';
9
+ import { spawn } from 'child_process';
10
+ import { existsSync, mkdirSync, writeFileSync } from 'fs';
11
+ import { join } from 'path';
12
+ import { homedir } from 'os';
13
+ // ── Constants ─────────────────────────────────────────────────────────────────
14
+ const ARTIFACTS_DIR = join(homedir(), '.merlin', 'artifacts', 'ask');
15
+ // ── Helpers ───────────────────────────────────────────────────────────────────
16
+ /** Build the shell command array for a given provider. */
17
+ function buildCommand(provider, prompt) {
18
+ switch (provider) {
19
+ case 'claude':
20
+ return ['claude', '-p', prompt, '--output-format', 'text'];
21
+ case 'codex':
22
+ return ['codex', 'exec', prompt];
23
+ case 'gemini':
24
+ return ['gemini', '-p', prompt];
25
+ }
26
+ }
27
+ /** Check whether a CLI binary exists on PATH. */
28
+ async function isBinaryAvailable(bin) {
29
+ return new Promise((resolve) => {
30
+ const proc = spawn('which', [bin], { stdio: 'pipe' });
31
+ proc.on('close', (code) => resolve(code === 0));
32
+ proc.on('error', () => resolve(false));
33
+ });
34
+ }
35
+ /** Build a URL-friendly slug from a prompt string. */
36
+ function slugify(text) {
37
+ return text
38
+ .toLowerCase()
39
+ .replace(/[^a-z0-9\s-]/g, '')
40
+ .trim()
41
+ .replace(/\s+/g, '-')
42
+ .slice(0, 40);
43
+ }
44
+ /** Ensure the artifacts directory exists. */
45
+ function ensureArtifactsDir() {
46
+ if (!existsSync(ARTIFACTS_DIR)) {
47
+ mkdirSync(ARTIFACTS_DIR, { recursive: true });
48
+ }
49
+ }
50
+ /** Save the result to a markdown artifact file. Returns the path. */
51
+ function saveArtifact(provider, prompt, output, exitCode, timestamp) {
52
+ ensureArtifactsDir();
53
+ const slug = slugify(prompt);
54
+ const filename = `${provider}-${slug}-${timestamp}.md`;
55
+ const filePath = join(ARTIFACTS_DIR, filename);
56
+ const content = [
57
+ `# Provider Ask — ${provider}`,
58
+ '',
59
+ `**Timestamp:** ${timestamp}`,
60
+ `**Exit Code:** ${exitCode}`,
61
+ '',
62
+ '## Prompt',
63
+ '',
64
+ prompt,
65
+ '',
66
+ '## Output',
67
+ '',
68
+ output || '_(no output)_',
69
+ ].join('\n');
70
+ writeFileSync(filePath, content, 'utf-8');
71
+ return filePath;
72
+ }
73
+ /** Spawn one provider CLI and return its result. */
74
+ async function runProvider(provider, prompt, agentPrompt, timeoutMs, timestamp) {
75
+ const startTime = Date.now();
76
+ const available = await isBinaryAvailable(provider === 'claude' ? 'claude' : provider);
77
+ if (!available) {
78
+ return {
79
+ provider,
80
+ output: '',
81
+ exitCode: -1,
82
+ durationMs: 0,
83
+ artifactPath: null,
84
+ error: `CLI not found: '${provider}' is not installed or not on PATH. Install it and try again.`,
85
+ };
86
+ }
87
+ const fullPrompt = agentPrompt ? `${agentPrompt}\n\n${prompt}` : prompt;
88
+ const cmdArgs = buildCommand(provider, fullPrompt);
89
+ const [cmd, ...args] = cmdArgs;
90
+ // Strip env vars known to interfere with Codex
91
+ const env = { ...process.env };
92
+ if (provider === 'codex') {
93
+ delete env['RUST_LOG'];
94
+ delete env['RUST_BACKTRACE'];
95
+ }
96
+ return new Promise((resolve) => {
97
+ const stdoutChunks = [];
98
+ const stderrChunks = [];
99
+ const proc = spawn(cmd, args, {
100
+ stdio: ['ignore', 'pipe', 'pipe'],
101
+ env,
102
+ });
103
+ proc.stdout.on('data', (chunk) => stdoutChunks.push(chunk));
104
+ proc.stderr.on('data', (chunk) => stderrChunks.push(chunk));
105
+ let timedOut = false;
106
+ const timer = setTimeout(() => {
107
+ timedOut = true;
108
+ proc.kill('SIGTERM');
109
+ }, timeoutMs);
110
+ proc.on('close', (code) => {
111
+ clearTimeout(timer);
112
+ const durationMs = Date.now() - startTime;
113
+ const output = Buffer.concat(stdoutChunks).toString('utf-8').trim();
114
+ const stderr = Buffer.concat(stderrChunks).toString('utf-8').trim();
115
+ const exitCode = timedOut ? 124 : (code ?? -1);
116
+ let error = null;
117
+ if (timedOut) {
118
+ error = `Timed out after ${timeoutMs / 1000}s`;
119
+ }
120
+ else if (exitCode !== 0 && !output) {
121
+ error = stderr || `Process exited with code ${exitCode}`;
122
+ }
123
+ const artifactPath = saveArtifact(provider, prompt, output || stderr, exitCode, timestamp);
124
+ resolve({ provider, output: output || stderr, exitCode, durationMs, artifactPath, error });
125
+ });
126
+ proc.on('error', (err) => {
127
+ clearTimeout(timer);
128
+ resolve({
129
+ provider,
130
+ output: '',
131
+ exitCode: -1,
132
+ durationMs: Date.now() - startTime,
133
+ artifactPath: null,
134
+ error: `Failed to spawn process: ${err.message}`,
135
+ });
136
+ });
137
+ });
138
+ }
139
+ /** Format a single provider result for display. */
140
+ function formatResult(result) {
141
+ const statusLine = result.error
142
+ ? `Status: ERROR — ${result.error}`
143
+ : `Status: OK (exit ${result.exitCode}, ${result.durationMs}ms)`;
144
+ const artifactLine = result.artifactPath ? `Artifact: ${result.artifactPath}` : '';
145
+ const lines = [
146
+ `## ${result.provider.toUpperCase()}`,
147
+ statusLine,
148
+ artifactLine,
149
+ '',
150
+ result.error && !result.output ? '_No output._' : result.output,
151
+ ].filter((l) => l !== undefined);
152
+ return lines.join('\n');
153
+ }
154
+ /** Build a comparison table from multiple results. */
155
+ function buildSynthesis(results, prompt) {
156
+ const rows = results.map((r) => {
157
+ const status = r.error ? 'ERROR' : 'OK';
158
+ const preview = (r.output || '').slice(0, 120).replace(/\n/g, ' ');
159
+ return `| ${r.provider} | ${status} | ${r.durationMs}ms | ${preview}... |`;
160
+ });
161
+ return [
162
+ '## Synthesis Comparison',
163
+ '',
164
+ `**Prompt:** ${prompt}`,
165
+ '',
166
+ '| Provider | Status | Duration | Output Preview |',
167
+ '|----------|--------|----------|----------------|',
168
+ ...rows,
169
+ '',
170
+ '### Full Outputs',
171
+ '',
172
+ ...results.map(formatResult),
173
+ ].join('\n');
174
+ }
175
+ // ── Tool Registration ─────────────────────────────────────────────────────────
176
+ export function registerProviderTools(ctx) {
177
+ const { server } = ctx;
178
+ // ── merlin_ask_provider ───────────────────────────────────────────────────
179
+ server.tool('merlin_ask_provider', 'Delegate a task to an external AI CLI provider (claude, codex, or gemini) and capture the result. ' +
180
+ 'Use for multi-model synthesis, second opinions, or leveraging provider-specific strengths. ' +
181
+ 'Automatically detects if the CLI is installed and saves an artifact to ~/.merlin/artifacts/ask/. ' +
182
+ 'Returns the full output text so Merlin can incorporate it into orchestration decisions.', {
183
+ provider: z.enum(['claude', 'codex', 'gemini']).describe('Which AI CLI to invoke: claude (Claude Code), codex (OpenAI Codex CLI), or gemini (Google Gemini CLI)'),
184
+ prompt: z.string().describe('The task or question to send to the provider'),
185
+ agentPrompt: z.string().optional().describe('Optional role/persona template to prepend before the main prompt (e.g., "You are a senior security engineer.")'),
186
+ timeoutSeconds: z.number().optional().default(120).describe('Maximum seconds to wait for the provider to respond (default: 120)'),
187
+ }, async ({ provider, prompt, agentPrompt, timeoutSeconds }) => {
188
+ const timeoutMs = (timeoutSeconds ?? 120) * 1000;
189
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
190
+ const result = await runProvider(provider, prompt, agentPrompt, timeoutMs, timestamp);
191
+ if (result.error && !result.output) {
192
+ return {
193
+ content: [
194
+ {
195
+ type: 'text',
196
+ text: `Provider ask failed — ${provider}: ${result.error}`,
197
+ },
198
+ ],
199
+ isError: true,
200
+ };
201
+ }
202
+ const text = [
203
+ formatResult(result),
204
+ result.artifactPath ? `\nArtifact saved to: ${result.artifactPath}` : '',
205
+ ]
206
+ .join('\n')
207
+ .trim();
208
+ return { content: [{ type: 'text', text }] };
209
+ });
210
+ // ── merlin_ask_synthesis ──────────────────────────────────────────────────
211
+ server.tool('merlin_ask_synthesis', 'Run the same prompt through multiple AI CLI providers in parallel and synthesize the results. ' +
212
+ 'Ideal for architecture decisions, code review, security analysis, or any task where multiple perspectives add value. ' +
213
+ 'Returns a comparison table plus each provider\'s full output. ' +
214
+ 'Artifacts for each provider are saved to ~/.merlin/artifacts/ask/.', {
215
+ providers: z.array(z.enum(['claude', 'codex', 'gemini'])).describe('Which AI CLIs to query in parallel — all must be installed locally'),
216
+ prompt: z.string().describe('The task or question to send to all providers'),
217
+ synthesize: z.boolean().optional().default(true).describe('When true (default), includes a comparison table at the top of the response'),
218
+ }, async ({ providers, prompt, synthesize }) => {
219
+ if (providers.length === 0) {
220
+ return {
221
+ content: [{ type: 'text', text: 'No providers specified. Pass at least one of: claude, codex, gemini.' }],
222
+ isError: true,
223
+ };
224
+ }
225
+ const timeoutMs = 180 * 1000; // synthesis allows longer per-provider timeout
226
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
227
+ const results = await Promise.all(providers.map((p) => runProvider(p, prompt, undefined, timeoutMs, timestamp)));
228
+ const text = synthesize !== false
229
+ ? buildSynthesis(results, prompt)
230
+ : results.map(formatResult).join('\n\n---\n\n');
231
+ return { content: [{ type: 'text', text }] };
232
+ });
233
+ }
234
+ //# sourceMappingURL=provider-ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-ask.js","sourceRoot":"","sources":["../../../src/server/tools/provider-ask.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Rate Limit Tools
3
+ * Monitor Claude/provider rate-limit state and configure auto-resume behavior.
4
+ * State is written by the rate-limit-watch.sh PostToolUse hook.
5
+ */
6
+ import type { ToolContext } from './types.js';
7
+ export declare function registerRateLimitTools(ctx: ToolContext): void;
8
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/server/tools/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0G9C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CA8H7D"}