create-merlin-brain 3.11.0 → 3.13.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.
- package/bin/install.cjs +156 -32
- package/bin/runtime-adapters.cjs +396 -0
- package/dist/server/api/types.d.ts +7 -0
- package/dist/server/api/types.d.ts.map +1 -1
- package/dist/server/cost/tracker.d.ts +38 -2
- package/dist/server/cost/tracker.d.ts.map +1 -1
- package/dist/server/cost/tracker.js +87 -15
- package/dist/server/cost/tracker.js.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +74 -30
- package/dist/server/server.js.map +1 -1
- package/dist/server/tools/__tests__/augmentation.test.d.ts +8 -0
- package/dist/server/tools/__tests__/augmentation.test.d.ts.map +1 -0
- package/dist/server/tools/__tests__/augmentation.test.js +76 -0
- package/dist/server/tools/__tests__/augmentation.test.js.map +1 -0
- package/dist/server/tools/__tests__/route-helpers.test.d.ts +5 -0
- package/dist/server/tools/__tests__/route-helpers.test.d.ts.map +1 -0
- package/dist/server/tools/__tests__/route-helpers.test.js +49 -0
- package/dist/server/tools/__tests__/route-helpers.test.js.map +1 -0
- package/dist/server/tools/adaptive.js +1 -1
- package/dist/server/tools/adaptive.js.map +1 -1
- package/dist/server/tools/agent-spawn.d.ts +25 -0
- package/dist/server/tools/agent-spawn.d.ts.map +1 -0
- package/dist/server/tools/agent-spawn.js +95 -0
- package/dist/server/tools/agent-spawn.js.map +1 -0
- package/dist/server/tools/agents-index.js +3 -3
- package/dist/server/tools/agents-index.js.map +1 -1
- package/dist/server/tools/agents.js +5 -5
- package/dist/server/tools/agents.js.map +1 -1
- package/dist/server/tools/augmentation.d.ts +45 -0
- package/dist/server/tools/augmentation.d.ts.map +1 -0
- package/dist/server/tools/augmentation.js +167 -0
- package/dist/server/tools/augmentation.js.map +1 -0
- package/dist/server/tools/behaviors.js +4 -4
- package/dist/server/tools/behaviors.js.map +1 -1
- package/dist/server/tools/context.js +7 -7
- package/dist/server/tools/context.js.map +1 -1
- package/dist/server/tools/cost.d.ts +3 -1
- package/dist/server/tools/cost.d.ts.map +1 -1
- package/dist/server/tools/cost.js +66 -13
- package/dist/server/tools/cost.js.map +1 -1
- package/dist/server/tools/discoveries.js +6 -6
- package/dist/server/tools/discoveries.js.map +1 -1
- package/dist/server/tools/index.d.ts +4 -0
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +4 -0
- package/dist/server/tools/index.js.map +1 -1
- package/dist/server/tools/learning.d.ts +12 -0
- package/dist/server/tools/learning.d.ts.map +1 -0
- package/dist/server/tools/learning.js +269 -0
- package/dist/server/tools/learning.js.map +1 -0
- package/dist/server/tools/project.js +7 -7
- package/dist/server/tools/project.js.map +1 -1
- package/dist/server/tools/promote.d.ts +11 -0
- package/dist/server/tools/promote.d.ts.map +1 -0
- package/dist/server/tools/promote.js +315 -0
- package/dist/server/tools/promote.js.map +1 -0
- package/dist/server/tools/route-helpers.d.ts +45 -0
- package/dist/server/tools/route-helpers.d.ts.map +1 -0
- package/dist/server/tools/route-helpers.js +93 -0
- package/dist/server/tools/route-helpers.js.map +1 -0
- package/dist/server/tools/route.d.ts +4 -3
- package/dist/server/tools/route.d.ts.map +1 -1
- package/dist/server/tools/route.js +80 -284
- package/dist/server/tools/route.js.map +1 -1
- package/dist/server/tools/session-restore.d.ts +18 -0
- package/dist/server/tools/session-restore.d.ts.map +1 -0
- package/dist/server/tools/session-restore.js +154 -0
- package/dist/server/tools/session-restore.js.map +1 -0
- package/dist/server/tools/session-search.d.ts +16 -0
- package/dist/server/tools/session-search.d.ts.map +1 -0
- package/dist/server/tools/session-search.js +240 -0
- package/dist/server/tools/session-search.js.map +1 -0
- package/dist/server/tools/sights-index.js +2 -2
- package/dist/server/tools/sights-index.js.map +1 -1
- package/dist/server/tools/smart-route.d.ts.map +1 -1
- package/dist/server/tools/smart-route.js +4 -5
- package/dist/server/tools/smart-route.js.map +1 -1
- package/dist/server/tools/verification.js +1 -1
- package/dist/server/tools/verification.js.map +1 -1
- package/files/agents/code-organization-supervisor.md +1 -0
- package/files/agents/context-guardian.md +1 -0
- package/files/agents/docs-keeper.md +1 -0
- package/files/agents/dry-refactor.md +1 -0
- package/files/agents/elite-code-refactorer.md +1 -0
- package/files/agents/hardening-guard.md +1 -0
- package/files/agents/implementation-dev.md +1 -0
- package/files/agents/merlin-access-control-reviewer.md +248 -0
- package/files/agents/merlin-codebase-mapper.md +1 -1
- package/files/agents/merlin-dependency-auditor.md +216 -0
- package/files/agents/merlin-executor.md +1 -0
- package/files/agents/merlin-input-validator.md +247 -0
- package/files/agents/merlin-reviewer.md +1 -0
- package/files/agents/merlin-sast-reviewer.md +182 -0
- package/files/agents/merlin-secret-scanner.md +203 -0
- package/files/agents/tests-qa.md +1 -0
- package/files/commands/merlin/execute-phase.md +94 -197
- package/files/commands/merlin/execute-plan.md +116 -180
- package/files/commands/merlin/health.md +385 -0
- package/files/commands/merlin/loop-recipes.md +93 -36
- package/files/commands/merlin/optimize-prompts.md +158 -0
- package/files/commands/merlin/profiles.md +215 -0
- package/files/commands/merlin/promote.md +176 -0
- package/files/commands/merlin/quick.md +229 -0
- package/files/commands/merlin/resume-work.md +27 -1
- package/files/commands/merlin/route.md +43 -1
- package/files/commands/merlin/sandbox.md +359 -0
- package/files/commands/merlin/usage.md +55 -0
- package/files/docker/Dockerfile.merlin +20 -0
- package/files/docker/docker-compose.merlin.yml +23 -0
- package/files/hook-templates/auto-commit.sh +64 -0
- package/files/hook-templates/auto-format.sh +95 -0
- package/files/hook-templates/auto-test.sh +117 -0
- package/files/hook-templates/branch-protection.sh +72 -0
- package/files/hook-templates/changelog-reminder.sh +76 -0
- package/files/hook-templates/complexity-check.sh +112 -0
- package/files/hook-templates/import-audit.sh +83 -0
- package/files/hook-templates/license-header.sh +84 -0
- package/files/hook-templates/pr-description.sh +100 -0
- package/files/hook-templates/todo-tracker.sh +80 -0
- package/files/hooks/check-file-size.sh +17 -4
- package/files/hooks/config-change.sh +44 -16
- package/files/hooks/instructions-loaded.sh +22 -5
- package/files/hooks/notify-desktop.sh +157 -0
- package/files/hooks/notify-webhook.sh +141 -0
- package/files/hooks/pre-edit-sights-check.sh +76 -9
- package/files/hooks/security-scanner.sh +153 -0
- package/files/hooks/session-end-memory-sync.sh +97 -0
- package/files/hooks/session-end.sh +274 -1
- package/files/hooks/session-start.sh +19 -6
- package/files/hooks/smart-approve.sh +270 -0
- package/files/hooks/teammate-idle-verify.sh +87 -12
- package/files/hooks/worktree-create.sh +20 -3
- package/files/hooks/worktree-remove.sh +21 -3
- package/files/merlin/references/plan-format.md +37 -9
- package/files/merlin/sandbox.json +9 -0
- package/files/merlin/security.json +11 -0
- package/files/merlin/templates/ci/docs-update.yml +81 -0
- package/files/merlin/templates/ci/pr-review.yml +50 -0
- package/files/merlin/templates/ci/security-audit.yml +74 -0
- package/files/merlin/templates/config.json +9 -1
- package/files/rules/api-rules.md +30 -0
- package/files/rules/frontend-rules.md +25 -0
- package/files/rules/hooks-rules.md +36 -0
- package/files/rules/mcp-rules.md +30 -0
- package/files/rules/worker-rules.md +29 -0
- package/package.json +5 -2
|
@@ -7,204 +7,32 @@
|
|
|
7
7
|
*
|
|
8
8
|
* 1. Verifies agent exists
|
|
9
9
|
* 2. Fetches Sights context for the task
|
|
10
|
-
* 3.
|
|
11
|
-
* 4.
|
|
12
|
-
* 5.
|
|
10
|
+
* 3. Discovers cloud agent augmentation
|
|
11
|
+
* 4. Builds structured handoff with domain expertise
|
|
12
|
+
* 5. Spawns a fresh `claude --agent <name> -p` process
|
|
13
|
+
* 6. Captures and returns the result
|
|
13
14
|
*
|
|
14
15
|
* Claude just calls `merlin_route(agent, task)` — no bash generation needed.
|
|
15
16
|
*/
|
|
16
17
|
import { z } from 'zod';
|
|
17
18
|
import { spawn } from 'child_process';
|
|
18
|
-
import { existsSync
|
|
19
|
+
import { existsSync } from 'fs';
|
|
19
20
|
import { join } from 'path';
|
|
20
21
|
import { homedir } from 'os';
|
|
21
22
|
import { classifyTask } from '../cost/classifier.js';
|
|
22
23
|
import { recordRouting } from '../cost/tracker.js';
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
*/
|
|
27
|
-
function readAgentEffort(agentPath) {
|
|
28
|
-
try {
|
|
29
|
-
const content = readFileSync(agentPath, 'utf-8');
|
|
30
|
-
// Extract YAML frontmatter between --- markers
|
|
31
|
-
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
32
|
-
if (!match)
|
|
33
|
-
return 'medium';
|
|
34
|
-
const frontmatter = match[1];
|
|
35
|
-
const effortMatch = frontmatter.match(/^effort:\s*(high|medium|low)\s*$/m);
|
|
36
|
-
if (!effortMatch)
|
|
37
|
-
return 'medium';
|
|
38
|
-
return effortMatch[1];
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
return 'medium';
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Build the task prompt prefix based on effort level.
|
|
46
|
-
* - high: prepend ultrathink for deep reasoning
|
|
47
|
-
* - low: append concise note to avoid unnecessary exploration
|
|
48
|
-
* - medium: no prefix (default behavior)
|
|
49
|
-
*/
|
|
50
|
-
function buildEffortPrefix(effort) {
|
|
51
|
-
if (effort === 'high') {
|
|
52
|
-
return { prefix: 'ultrathink\n\n', suffix: '' };
|
|
53
|
-
}
|
|
54
|
-
if (effort === 'low') {
|
|
55
|
-
return {
|
|
56
|
-
prefix: '',
|
|
57
|
-
suffix: '\n\n> **Note:** Be concise and efficient. Focus on output over exploration.',
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
return { prefix: '', suffix: '' };
|
|
61
|
-
}
|
|
62
|
-
/** Known specialist agents and their roles */
|
|
63
|
-
const AGENT_ROLES = {
|
|
64
|
-
'product-spec': 'Feature specification and product definition',
|
|
65
|
-
'system-architect': 'Architecture decisions and system design',
|
|
66
|
-
'implementation-dev': 'Code implementation and feature building',
|
|
67
|
-
'dry-refactor': 'Code cleanup, DRY refactoring, file organization',
|
|
68
|
-
'hardening-guard': 'Security hardening, input validation, error handling',
|
|
69
|
-
'tests-qa': 'Testing and quality assurance',
|
|
70
|
-
'ops-railway': 'Deployment, ops, Railway, Google Cloud',
|
|
71
|
-
'docs-keeper': 'Documentation updates',
|
|
72
|
-
};
|
|
73
|
-
/** Merlin internal workflow agents */
|
|
74
|
-
const WORKFLOW_AGENTS = [
|
|
75
|
-
'merlin-planner', 'merlin-executor', 'merlin-codebase-mapper',
|
|
76
|
-
'merlin-debugger', 'merlin-researcher', 'merlin-reviewer',
|
|
77
|
-
'merlin-work-verifier', 'merlin-milestone-auditor',
|
|
78
|
-
'merlin-frontend', 'merlin-api-designer', 'merlin-security',
|
|
79
|
-
'merlin-performance', 'merlin-migrator', 'merlin-integration-checker',
|
|
80
|
-
];
|
|
81
|
-
/** Max output size to prevent context explosion (100KB) */
|
|
82
|
-
const MAX_OUTPUT_SIZE = 100 * 1024;
|
|
83
|
-
/**
|
|
84
|
-
* Spawn a fresh Claude process and capture its output
|
|
85
|
-
*/
|
|
86
|
-
function spawnAgent(agent, input, timeoutMs, model) {
|
|
87
|
-
return new Promise((resolve, reject) => {
|
|
88
|
-
let settled = false;
|
|
89
|
-
const settle = (fn, value) => {
|
|
90
|
-
if (settled)
|
|
91
|
-
return;
|
|
92
|
-
settled = true;
|
|
93
|
-
clearTimeout(timer);
|
|
94
|
-
fn(value);
|
|
95
|
-
};
|
|
96
|
-
// Remove CLAUDECODE env var so the child process doesn't think it's nested.
|
|
97
|
-
// Claude Code sets CLAUDECODE to detect nested sessions, but merlin_route
|
|
98
|
-
// intentionally spawns isolated fresh processes — not accidental nesting.
|
|
99
|
-
const childEnv = { ...process.env };
|
|
100
|
-
delete childEnv.CLAUDECODE;
|
|
101
|
-
const spawnArgs = [
|
|
102
|
-
'--agent', agent,
|
|
103
|
-
'-p',
|
|
104
|
-
'--permission-mode', 'acceptEdits',
|
|
105
|
-
'--output-format', 'text',
|
|
106
|
-
];
|
|
107
|
-
// Add model flag if specified
|
|
108
|
-
if (model) {
|
|
109
|
-
spawnArgs.push('--model', model);
|
|
110
|
-
}
|
|
111
|
-
const proc = spawn('claude', spawnArgs, {
|
|
112
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
113
|
-
env: childEnv,
|
|
114
|
-
});
|
|
115
|
-
let stdout = '';
|
|
116
|
-
let stderr = '';
|
|
117
|
-
proc.stdout.on('data', (data) => {
|
|
118
|
-
stdout += data.toString();
|
|
119
|
-
// Prevent memory explosion — kill and reject (only if not already settled)
|
|
120
|
-
if (stdout.length > MAX_OUTPUT_SIZE) {
|
|
121
|
-
proc.kill('SIGTERM');
|
|
122
|
-
settle(reject, new Error('Agent output exceeded 100KB limit'));
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
proc.stderr.on('data', (data) => {
|
|
126
|
-
stderr += data.toString();
|
|
127
|
-
});
|
|
128
|
-
proc.stdin.write(input);
|
|
129
|
-
proc.stdin.end();
|
|
130
|
-
const timer = setTimeout(() => {
|
|
131
|
-
proc.kill('SIGTERM');
|
|
132
|
-
settle(reject, new Error(`Agent timed out after ${Math.round(timeoutMs / 60000)} minutes`));
|
|
133
|
-
}, timeoutMs);
|
|
134
|
-
proc.on('close', (code) => {
|
|
135
|
-
settle(resolve, { stdout, stderr, exitCode: code });
|
|
136
|
-
});
|
|
137
|
-
proc.on('error', (err) => {
|
|
138
|
-
settle(reject, err);
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Get list of available agent names from ~/.claude/agents/
|
|
144
|
-
*/
|
|
145
|
-
function getAvailableAgents() {
|
|
146
|
-
const agents = new Set();
|
|
147
|
-
// Check global agents
|
|
148
|
-
const globalDir = join(homedir(), '.claude', 'agents');
|
|
149
|
-
if (existsSync(globalDir)) {
|
|
150
|
-
readdirSync(globalDir).filter(f => f.endsWith('.md')).forEach(f => agents.add(f.replace('.md', '')));
|
|
151
|
-
}
|
|
152
|
-
// Check project-local agents
|
|
153
|
-
const localDir = join(process.cwd(), '.claude', 'agents');
|
|
154
|
-
if (existsSync(localDir)) {
|
|
155
|
-
readdirSync(localDir).filter(f => f.endsWith('.md')).forEach(f => agents.add(f.replace('.md', '')));
|
|
156
|
-
}
|
|
157
|
-
return [...agents].sort();
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Truncate output to prevent context window explosion
|
|
161
|
-
*/
|
|
162
|
-
function truncateOutput(output, maxLength = 50000) {
|
|
163
|
-
if (output.length <= maxLength)
|
|
164
|
-
return output;
|
|
165
|
-
const truncated = output.slice(0, maxLength);
|
|
166
|
-
return truncated + `\n\n... [Output truncated at ${maxLength} chars. Full output was ${output.length} chars]`;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Discovery-first routing: before routing to a built-in agent, check the
|
|
170
|
-
* catalog for a better-fit community/specialist agent. Returns recommendation
|
|
171
|
-
* if a high-scoring match exists, otherwise null.
|
|
172
|
-
*/
|
|
173
|
-
async function discoverBetterAgent(client, task, chosenAgent) {
|
|
174
|
-
try {
|
|
175
|
-
const results = await client.searchAgentsIndex(task, { limit: 3 });
|
|
176
|
-
if (!results || results.length === 0)
|
|
177
|
-
return null;
|
|
178
|
-
// Only suggest if grade is A+ or A++ and it's NOT the same agent already chosen
|
|
179
|
-
const topMatch = results[0];
|
|
180
|
-
const grade = (topMatch.grade || '').toUpperCase();
|
|
181
|
-
if ((grade === 'A++' || grade === 'A+') && topMatch.slug !== chosenAgent && topMatch.name !== chosenAgent) {
|
|
182
|
-
return {
|
|
183
|
-
name: topMatch.name,
|
|
184
|
-
grade: topMatch.grade || '',
|
|
185
|
-
description: topMatch.description || '',
|
|
186
|
-
slug: topMatch.slug,
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
return null;
|
|
190
|
-
}
|
|
191
|
-
catch {
|
|
192
|
-
// Discovery is best-effort — never block routing
|
|
193
|
-
return null;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
24
|
+
import { readAgentEffort, readAgentIsolation, readAgentBackground, buildEffortPrefix, AGENT_ROLES, WORKFLOW_AGENTS, } from './route-helpers.js';
|
|
25
|
+
import { spawnAgent, getAvailableAgents, truncateOutput } from './agent-spawn.js';
|
|
26
|
+
import { discoverBetterAgent, shouldAugment, fetchAugmentation, buildAugmentationSection, } from './augmentation.js';
|
|
196
27
|
export function registerRouteTools(ctx) {
|
|
197
28
|
const { server, client, resolveRepoId } = ctx;
|
|
198
|
-
// ──
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
'
|
|
204
|
-
'
|
|
205
|
-
'Use for: implementation, architecture design, testing, security hardening, documentation, DRY refactoring, deployment, ops. ' +
|
|
206
|
-
'Available agents: product-spec, system-architect, implementation-dev, dry-refactor, hardening-guard, tests-qa, ops-railway, docs-keeper. ' +
|
|
207
|
-
'Also supports any agent installed in ~/.claude/agents/ or discovered via merlin_discover_agents.', {
|
|
29
|
+
// ── merlin_route — Spawn a fresh Claude process for a specialist agent ──
|
|
30
|
+
server.tool('merlin_route', 'Delegate a task to a specialist agent in a FRESH Claude process with full 200K context. ' +
|
|
31
|
+
'Pre-fetches Sights codebase context, builds a structured handoff, applies effort-level routing (ultrathink for high-effort agents), and captures the result. ' +
|
|
32
|
+
'Use when you need a specialist: code implementation, architecture design, test writing, security hardening, DRY refactoring, documentation, deployment/ops. ' +
|
|
33
|
+
'Built-in agents: product-spec, system-architect, implementation-dev, dry-refactor, hardening-guard, tests-qa, ops-railway, docs-keeper. ' +
|
|
34
|
+
'Also routes to any agent in ~/.claude/agents/ or discovered via merlin_discover_agents. ' +
|
|
35
|
+
'NEVER run `claude --agent` via Bash — always use this tool instead.', {
|
|
208
36
|
agent: z.string().describe('Agent name: product-spec, system-architect, implementation-dev, dry-refactor, ' +
|
|
209
37
|
'hardening-guard, tests-qa, ops-railway, docs-keeper, or any installed/discovered agent'),
|
|
210
38
|
task: z.string().describe('What the agent should do (be specific about files, features, scope)'),
|
|
@@ -216,29 +44,7 @@ export function registerRouteTools(ctx) {
|
|
|
216
44
|
// 1. Verify agent exists
|
|
217
45
|
const agentPath = join(homedir(), '.claude', 'agents', `${agent}.md`);
|
|
218
46
|
if (!existsSync(agentPath)) {
|
|
219
|
-
|
|
220
|
-
const specialists = available.filter(a => AGENT_ROLES[a]);
|
|
221
|
-
const workflows = available.filter(a => WORKFLOW_AGENTS.includes(a));
|
|
222
|
-
const other = available.filter(a => !AGENT_ROLES[a] && !WORKFLOW_AGENTS.includes(a));
|
|
223
|
-
let msg = `Agent "${agent}" not found.\n\n`;
|
|
224
|
-
if (specialists.length > 0) {
|
|
225
|
-
msg += `**Specialist Agents:**\n`;
|
|
226
|
-
specialists.forEach(a => {
|
|
227
|
-
msg += `- \`${a}\` — ${AGENT_ROLES[a] || ''}\n`;
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
if (workflows.length > 0) {
|
|
231
|
-
msg += `\n**Workflow Agents:**\n`;
|
|
232
|
-
workflows.forEach(a => { msg += `- \`${a}\`\n`; });
|
|
233
|
-
}
|
|
234
|
-
if (other.length > 0) {
|
|
235
|
-
msg += `\n**Other Agents:**\n`;
|
|
236
|
-
other.forEach(a => { msg += `- \`${a}\`\n`; });
|
|
237
|
-
}
|
|
238
|
-
return {
|
|
239
|
-
content: [{ type: 'text', text: msg }],
|
|
240
|
-
isError: true,
|
|
241
|
-
};
|
|
47
|
+
return { content: [{ type: 'text', text: formatAgentNotFound(agent) }], isError: true };
|
|
242
48
|
}
|
|
243
49
|
// 2. Check if `claude` CLI is available
|
|
244
50
|
try {
|
|
@@ -250,20 +56,14 @@ export function registerRouteTools(ctx) {
|
|
|
250
56
|
}
|
|
251
57
|
catch {
|
|
252
58
|
return {
|
|
253
|
-
content: [{
|
|
254
|
-
type: 'text',
|
|
255
|
-
text: 'The `claude` CLI is not available in PATH. ' +
|
|
256
|
-
'Agent routing requires Claude Code CLI to spawn fresh processes.',
|
|
257
|
-
}],
|
|
59
|
+
content: [{ type: 'text', text: 'The `claude` CLI is not available in PATH. Agent routing requires Claude Code CLI to spawn fresh processes.' }],
|
|
258
60
|
isError: true,
|
|
259
61
|
};
|
|
260
62
|
}
|
|
261
63
|
// 3. Fetch Sights context + discovery check in parallel
|
|
262
64
|
let sightsContext = '';
|
|
263
65
|
let repoRoot = '';
|
|
264
|
-
// Run Sights fetch, discovery check, and repo root in parallel
|
|
265
66
|
const [, discoveryResult] = await Promise.all([
|
|
266
|
-
// Sights context fetch
|
|
267
67
|
(async () => {
|
|
268
68
|
try {
|
|
269
69
|
const repoId = await resolveRepoId();
|
|
@@ -275,128 +75,105 @@ export function registerRouteTools(ctx) {
|
|
|
275
75
|
sightsContext = '';
|
|
276
76
|
}
|
|
277
77
|
})(),
|
|
278
|
-
// Discovery-first: check catalog for a better-fit agent (non-blocking)
|
|
279
78
|
discoverBetterAgent(client, task, agent).catch(() => null),
|
|
280
|
-
// Repo root path
|
|
281
79
|
(async () => {
|
|
282
80
|
try {
|
|
283
81
|
if (ctx.getRepoRootPath) {
|
|
284
82
|
repoRoot = await ctx.getRepoRootPath() || '';
|
|
285
83
|
}
|
|
286
84
|
}
|
|
287
|
-
catch {
|
|
288
|
-
// Non-fatal
|
|
289
|
-
}
|
|
85
|
+
catch { /* Non-fatal */ }
|
|
290
86
|
})(),
|
|
291
87
|
]);
|
|
292
88
|
const discoveryHint = discoveryResult;
|
|
293
89
|
if (discoveryHint) {
|
|
294
|
-
console.error(`[merlin_route] Discovery hint: "${discoveryHint.name}" (${discoveryHint.grade})
|
|
90
|
+
console.error(`[merlin_route] Discovery hint: "${discoveryHint.name}" (${discoveryHint.grade}) — slug: ${discoveryHint.slug}`);
|
|
295
91
|
}
|
|
296
|
-
// 4.
|
|
92
|
+
// 4. Fetch augmentation if cloud agent matched and agent is eligible
|
|
93
|
+
const augmentation = (discoveryHint && shouldAugment(agent))
|
|
94
|
+
? await fetchAugmentation(client, discoveryHint)
|
|
95
|
+
: null;
|
|
96
|
+
// 5. Read agent frontmatter config
|
|
297
97
|
const effort = readAgentEffort(agentPath);
|
|
98
|
+
const isolation = readAgentIsolation(agentPath);
|
|
99
|
+
const isBackground = readAgentBackground(agentPath);
|
|
298
100
|
const { prefix: effortPrefix, suffix: effortSuffix } = buildEffortPrefix(effort);
|
|
299
|
-
console.error(`[merlin_route] Effort
|
|
300
|
-
|
|
101
|
+
console.error(`[merlin_route] Effort: ${effort}${effort === 'high' ? ' (ultrathink)' : effort === 'low' ? ' (concise)' : ''}`);
|
|
102
|
+
if (isolation)
|
|
103
|
+
console.error(`[merlin_route] Isolation: ${isolation}`);
|
|
104
|
+
// 6. Build the handoff
|
|
301
105
|
const handoffParts = [
|
|
302
|
-
`# Agent Task: ${agent}`,
|
|
303
|
-
'',
|
|
304
|
-
`## Your Task`,
|
|
305
|
-
task,
|
|
306
|
-
'',
|
|
106
|
+
`# Agent Task: ${agent}`, '',
|
|
107
|
+
`## Your Task`, task, '',
|
|
307
108
|
];
|
|
308
|
-
if (extraContext)
|
|
109
|
+
if (extraContext)
|
|
309
110
|
handoffParts.push(`## Additional Context`, extraContext, '');
|
|
310
|
-
|
|
311
|
-
if (repoRoot) {
|
|
111
|
+
if (repoRoot)
|
|
312
112
|
handoffParts.push(`## Repository Root`, `\`${repoRoot}\``, '');
|
|
313
|
-
|
|
314
|
-
if (sightsContext) {
|
|
113
|
+
if (sightsContext)
|
|
315
114
|
handoffParts.push(`## Merlin Sights Context (pre-fetched)`, sightsContext, '');
|
|
316
|
-
|
|
115
|
+
if (augmentation)
|
|
116
|
+
handoffParts.push(...buildAugmentationSection(augmentation));
|
|
317
117
|
handoffParts.push(`## Instructions`, `- Complete the task described above`, `- Use Merlin Sights tools (merlin_get_context, merlin_find_files) for additional context`, `- Follow all coding rules and conventions from Sights`, `- Output a clear, concise summary of what you did and any files changed`);
|
|
318
|
-
if (effortSuffix)
|
|
118
|
+
if (effortSuffix)
|
|
319
119
|
handoffParts.push('', effortSuffix);
|
|
320
|
-
}
|
|
321
120
|
const handoff = effortPrefix + handoffParts.join('\n');
|
|
322
|
-
// 7. Classify task
|
|
121
|
+
// 7. Classify task and select model
|
|
323
122
|
const classification = classifyTask(task, agent);
|
|
324
|
-
console.error(`[merlin_route] Model
|
|
325
|
-
|
|
326
|
-
recordRouting(classification.model, classification.complexity);
|
|
123
|
+
console.error(`[merlin_route] Model: ${classification.model} (${classification.complexity}) — ${classification.reason}`);
|
|
124
|
+
recordRouting(classification.model, classification.complexity, { agent });
|
|
327
125
|
// 8. Spawn fresh Claude process
|
|
328
|
-
console.error(`[merlin_route] Spawning
|
|
126
|
+
console.error(`[merlin_route] Spawning "${agent}" for: ${task.slice(0, 100)}...`);
|
|
329
127
|
try {
|
|
330
|
-
const result = await spawnAgent(agent, handoff, timeout, classification.model);
|
|
128
|
+
const result = await spawnAgent(agent, handoff, timeout, classification.model, isolation);
|
|
331
129
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
332
130
|
const output = truncateOutput(result.stdout || '');
|
|
333
131
|
if (result.exitCode !== 0 && !output) {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
? truncateOutput(result.stderr, 5000)
|
|
337
|
-
: 'No output or error from agent process';
|
|
338
|
-
return {
|
|
339
|
-
content: [{
|
|
340
|
-
type: 'text',
|
|
341
|
-
text: `Agent "${agent}" exited with code ${result.exitCode} (${elapsed}s)\n\n**Error:**\n${errMsg}`,
|
|
342
|
-
}],
|
|
343
|
-
isError: true,
|
|
344
|
-
};
|
|
132
|
+
const errMsg = result.stderr ? truncateOutput(result.stderr, 5000) : 'No output or error from agent process';
|
|
133
|
+
return { content: [{ type: 'text', text: `Agent "${agent}" exited with code ${result.exitCode} (${elapsed}s)\n\n**Error:**\n${errMsg}` }], isError: true };
|
|
345
134
|
}
|
|
346
135
|
// Build response header
|
|
347
136
|
let response = `## Agent: ${agent} (${elapsed}s)\n`;
|
|
348
137
|
response += `> Model: \`${classification.model}\` (${classification.complexity}) — ${classification.reason}\n`;
|
|
349
138
|
response += `> Effort: \`${effort}\`${effort === 'high' ? ' — ultrathink enabled' : effort === 'low' ? ' — concise mode' : ''}\n`;
|
|
350
|
-
|
|
139
|
+
if (isolation)
|
|
140
|
+
response += `> Isolation: \`${isolation}\` — running in fresh worktree\n`;
|
|
141
|
+
if (isBackground)
|
|
142
|
+
response += `> Mode: background — non-blocking execution\n`;
|
|
143
|
+
if (augmentation)
|
|
144
|
+
response += `> Augmented with: \`${augmentation.slug}\` (${augmentation.grade}) — ${augmentation.description.slice(0, 80)}\n`;
|
|
351
145
|
if (discoveryHint) {
|
|
352
|
-
response += `\n>
|
|
146
|
+
response += `\n> Catalog match: \`${discoveryHint.name}\` (${discoveryHint.grade}) — ${discoveryHint.description}\n`;
|
|
353
147
|
response += `> View: \`merlin_get_agent_detail("${discoveryHint.slug}")\` | Install: \`merlin_discover_agents("${discoveryHint.slug}")\`\n`;
|
|
354
148
|
}
|
|
355
149
|
response += '\n';
|
|
356
|
-
if (result.exitCode !== 0)
|
|
150
|
+
if (result.exitCode !== 0)
|
|
357
151
|
response += `> Note: Agent exited with code ${result.exitCode}\n\n`;
|
|
358
|
-
}
|
|
359
152
|
response += output;
|
|
360
|
-
return {
|
|
361
|
-
content: [{ type: 'text', text: response }],
|
|
362
|
-
};
|
|
153
|
+
return { content: [{ type: 'text', text: response }] };
|
|
363
154
|
}
|
|
364
155
|
catch (e) {
|
|
365
156
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
366
|
-
return {
|
|
367
|
-
content: [{
|
|
368
|
-
type: 'text',
|
|
369
|
-
text: `Agent "${agent}" failed after ${elapsed}s: ${e.message}`,
|
|
370
|
-
}],
|
|
371
|
-
isError: true,
|
|
372
|
-
};
|
|
157
|
+
return { content: [{ type: 'text', text: `Agent "${agent}" failed after ${elapsed}s: ${e.message}` }], isError: true };
|
|
373
158
|
}
|
|
374
159
|
});
|
|
375
|
-
// ──
|
|
376
|
-
|
|
377
|
-
// merlin_list_agents — List available specialist agents
|
|
378
|
-
// ===================================================================
|
|
379
|
-
server.tool('merlin_list_agents', 'List all installed specialist agents available for routing via merlin_route. Shows agent names, roles, and descriptions for product-spec, system-architect, implementation-dev, dry-refactor, hardening-guard, tests-qa, ops-railway, docs-keeper, and any custom agents. Use to discover what agents are installed before delegating a task.', {}, async () => {
|
|
160
|
+
// ── merlin_list_agents — List available specialist agents ──
|
|
161
|
+
server.tool('merlin_list_agents', 'List all installed specialist agents available for routing via merlin_route. Returns agent names, roles, effort levels, and descriptions for all built-in agents (product-spec, system-architect, implementation-dev, dry-refactor, hardening-guard, tests-qa, ops-railway, docs-keeper) plus any custom agents in ~/.claude/agents/. Use before delegating to confirm which agents are available.', {}, async () => {
|
|
380
162
|
const available = getAvailableAgents();
|
|
381
163
|
let response = `# Available Agents\n\n`;
|
|
382
|
-
// Specialists
|
|
383
164
|
const specialists = available.filter(a => AGENT_ROLES[a]);
|
|
384
165
|
if (specialists.length > 0) {
|
|
385
166
|
response += `## Specialist Agents (use with merlin_route)\n\n`;
|
|
386
167
|
response += `| Agent | Role |\n|-------|------|\n`;
|
|
387
|
-
specialists.forEach(a => {
|
|
388
|
-
response += `| \`${a}\` | ${AGENT_ROLES[a]} |\n`;
|
|
389
|
-
});
|
|
168
|
+
specialists.forEach(a => { response += `| \`${a}\` | ${AGENT_ROLES[a]} |\n`; });
|
|
390
169
|
response += '\n';
|
|
391
170
|
}
|
|
392
|
-
// Workflow agents
|
|
393
171
|
const workflows = available.filter(a => WORKFLOW_AGENTS.includes(a));
|
|
394
172
|
if (workflows.length > 0) {
|
|
395
173
|
response += `## Workflow Agents (used by /merlin:* commands)\n\n`;
|
|
396
174
|
workflows.forEach(a => { response += `- \`${a}\`\n`; });
|
|
397
175
|
response += '\n';
|
|
398
176
|
}
|
|
399
|
-
// Other
|
|
400
177
|
const other = available.filter(a => !AGENT_ROLES[a] && !WORKFLOW_AGENTS.includes(a));
|
|
401
178
|
if (other.length > 0) {
|
|
402
179
|
response += `## Other Agents\n\n`;
|
|
@@ -404,9 +181,28 @@ export function registerRouteTools(ctx) {
|
|
|
404
181
|
}
|
|
405
182
|
response += `\n**Total:** ${available.length} agents installed\n`;
|
|
406
183
|
response += `\n**Usage:** \`merlin_route(agent="implementation-dev", task="add login endpoint")\``;
|
|
407
|
-
return {
|
|
408
|
-
content: [{ type: 'text', text: response }],
|
|
409
|
-
};
|
|
184
|
+
return { content: [{ type: 'text', text: response }] };
|
|
410
185
|
});
|
|
411
186
|
}
|
|
187
|
+
/** Format "agent not found" error with available agents list */
|
|
188
|
+
function formatAgentNotFound(agent) {
|
|
189
|
+
const available = getAvailableAgents();
|
|
190
|
+
const specialists = available.filter(a => AGENT_ROLES[a]);
|
|
191
|
+
const workflows = available.filter(a => WORKFLOW_AGENTS.includes(a));
|
|
192
|
+
const other = available.filter(a => !AGENT_ROLES[a] && !WORKFLOW_AGENTS.includes(a));
|
|
193
|
+
let msg = `Agent "${agent}" not found.\n\n`;
|
|
194
|
+
if (specialists.length > 0) {
|
|
195
|
+
msg += `**Specialist Agents:**\n`;
|
|
196
|
+
specialists.forEach(a => { msg += `- \`${a}\` — ${AGENT_ROLES[a] || ''}\n`; });
|
|
197
|
+
}
|
|
198
|
+
if (workflows.length > 0) {
|
|
199
|
+
msg += `\n**Workflow Agents:**\n`;
|
|
200
|
+
workflows.forEach(a => { msg += `- \`${a}\`\n`; });
|
|
201
|
+
}
|
|
202
|
+
if (other.length > 0) {
|
|
203
|
+
msg += `\n**Other Agents:**\n`;
|
|
204
|
+
other.forEach(a => { msg += `- \`${a}\`\n`; });
|
|
205
|
+
}
|
|
206
|
+
return msg;
|
|
207
|
+
}
|
|
412
208
|
//# sourceMappingURL=route.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/server/tools/route.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/server/tools/route.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Restore Tool
|
|
3
|
+
*
|
|
4
|
+
* Reads the most recent session summary from ~/.claude/merlin/sessions/
|
|
5
|
+
* and returns it formatted for context injection at session start.
|
|
6
|
+
*
|
|
7
|
+
* Session summaries are written by the session-end.sh hook and contain:
|
|
8
|
+
* - Files modified (git diff)
|
|
9
|
+
* - Commit messages from that session
|
|
10
|
+
* - Agents used
|
|
11
|
+
* - Session duration and working directory
|
|
12
|
+
*/
|
|
13
|
+
import type { ToolContext } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Register session restore tools with the MCP server.
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerSessionRestoreTools(ctx: ToolContext): void;
|
|
18
|
+
//# sourceMappingURL=session-restore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-restore.d.ts","sourceRoot":"","sources":["../../../src/server/tools/session-restore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqG9C;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CA2DlE"}
|