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.
Files changed (147) hide show
  1. package/bin/install.cjs +156 -32
  2. package/bin/runtime-adapters.cjs +396 -0
  3. package/dist/server/api/types.d.ts +7 -0
  4. package/dist/server/api/types.d.ts.map +1 -1
  5. package/dist/server/cost/tracker.d.ts +38 -2
  6. package/dist/server/cost/tracker.d.ts.map +1 -1
  7. package/dist/server/cost/tracker.js +87 -15
  8. package/dist/server/cost/tracker.js.map +1 -1
  9. package/dist/server/server.d.ts.map +1 -1
  10. package/dist/server/server.js +74 -30
  11. package/dist/server/server.js.map +1 -1
  12. package/dist/server/tools/__tests__/augmentation.test.d.ts +8 -0
  13. package/dist/server/tools/__tests__/augmentation.test.d.ts.map +1 -0
  14. package/dist/server/tools/__tests__/augmentation.test.js +76 -0
  15. package/dist/server/tools/__tests__/augmentation.test.js.map +1 -0
  16. package/dist/server/tools/__tests__/route-helpers.test.d.ts +5 -0
  17. package/dist/server/tools/__tests__/route-helpers.test.d.ts.map +1 -0
  18. package/dist/server/tools/__tests__/route-helpers.test.js +49 -0
  19. package/dist/server/tools/__tests__/route-helpers.test.js.map +1 -0
  20. package/dist/server/tools/adaptive.js +1 -1
  21. package/dist/server/tools/adaptive.js.map +1 -1
  22. package/dist/server/tools/agent-spawn.d.ts +25 -0
  23. package/dist/server/tools/agent-spawn.d.ts.map +1 -0
  24. package/dist/server/tools/agent-spawn.js +95 -0
  25. package/dist/server/tools/agent-spawn.js.map +1 -0
  26. package/dist/server/tools/agents-index.js +3 -3
  27. package/dist/server/tools/agents-index.js.map +1 -1
  28. package/dist/server/tools/agents.js +5 -5
  29. package/dist/server/tools/agents.js.map +1 -1
  30. package/dist/server/tools/augmentation.d.ts +45 -0
  31. package/dist/server/tools/augmentation.d.ts.map +1 -0
  32. package/dist/server/tools/augmentation.js +167 -0
  33. package/dist/server/tools/augmentation.js.map +1 -0
  34. package/dist/server/tools/behaviors.js +4 -4
  35. package/dist/server/tools/behaviors.js.map +1 -1
  36. package/dist/server/tools/context.js +7 -7
  37. package/dist/server/tools/context.js.map +1 -1
  38. package/dist/server/tools/cost.d.ts +3 -1
  39. package/dist/server/tools/cost.d.ts.map +1 -1
  40. package/dist/server/tools/cost.js +66 -13
  41. package/dist/server/tools/cost.js.map +1 -1
  42. package/dist/server/tools/discoveries.js +6 -6
  43. package/dist/server/tools/discoveries.js.map +1 -1
  44. package/dist/server/tools/index.d.ts +4 -0
  45. package/dist/server/tools/index.d.ts.map +1 -1
  46. package/dist/server/tools/index.js +4 -0
  47. package/dist/server/tools/index.js.map +1 -1
  48. package/dist/server/tools/learning.d.ts +12 -0
  49. package/dist/server/tools/learning.d.ts.map +1 -0
  50. package/dist/server/tools/learning.js +269 -0
  51. package/dist/server/tools/learning.js.map +1 -0
  52. package/dist/server/tools/project.js +7 -7
  53. package/dist/server/tools/project.js.map +1 -1
  54. package/dist/server/tools/promote.d.ts +11 -0
  55. package/dist/server/tools/promote.d.ts.map +1 -0
  56. package/dist/server/tools/promote.js +315 -0
  57. package/dist/server/tools/promote.js.map +1 -0
  58. package/dist/server/tools/route-helpers.d.ts +45 -0
  59. package/dist/server/tools/route-helpers.d.ts.map +1 -0
  60. package/dist/server/tools/route-helpers.js +93 -0
  61. package/dist/server/tools/route-helpers.js.map +1 -0
  62. package/dist/server/tools/route.d.ts +4 -3
  63. package/dist/server/tools/route.d.ts.map +1 -1
  64. package/dist/server/tools/route.js +80 -284
  65. package/dist/server/tools/route.js.map +1 -1
  66. package/dist/server/tools/session-restore.d.ts +18 -0
  67. package/dist/server/tools/session-restore.d.ts.map +1 -0
  68. package/dist/server/tools/session-restore.js +154 -0
  69. package/dist/server/tools/session-restore.js.map +1 -0
  70. package/dist/server/tools/session-search.d.ts +16 -0
  71. package/dist/server/tools/session-search.d.ts.map +1 -0
  72. package/dist/server/tools/session-search.js +240 -0
  73. package/dist/server/tools/session-search.js.map +1 -0
  74. package/dist/server/tools/sights-index.js +2 -2
  75. package/dist/server/tools/sights-index.js.map +1 -1
  76. package/dist/server/tools/smart-route.d.ts.map +1 -1
  77. package/dist/server/tools/smart-route.js +4 -5
  78. package/dist/server/tools/smart-route.js.map +1 -1
  79. package/dist/server/tools/verification.js +1 -1
  80. package/dist/server/tools/verification.js.map +1 -1
  81. package/files/agents/code-organization-supervisor.md +1 -0
  82. package/files/agents/context-guardian.md +1 -0
  83. package/files/agents/docs-keeper.md +1 -0
  84. package/files/agents/dry-refactor.md +1 -0
  85. package/files/agents/elite-code-refactorer.md +1 -0
  86. package/files/agents/hardening-guard.md +1 -0
  87. package/files/agents/implementation-dev.md +1 -0
  88. package/files/agents/merlin-access-control-reviewer.md +248 -0
  89. package/files/agents/merlin-codebase-mapper.md +1 -1
  90. package/files/agents/merlin-dependency-auditor.md +216 -0
  91. package/files/agents/merlin-executor.md +1 -0
  92. package/files/agents/merlin-input-validator.md +247 -0
  93. package/files/agents/merlin-reviewer.md +1 -0
  94. package/files/agents/merlin-sast-reviewer.md +182 -0
  95. package/files/agents/merlin-secret-scanner.md +203 -0
  96. package/files/agents/tests-qa.md +1 -0
  97. package/files/commands/merlin/execute-phase.md +94 -197
  98. package/files/commands/merlin/execute-plan.md +116 -180
  99. package/files/commands/merlin/health.md +385 -0
  100. package/files/commands/merlin/loop-recipes.md +93 -36
  101. package/files/commands/merlin/optimize-prompts.md +158 -0
  102. package/files/commands/merlin/profiles.md +215 -0
  103. package/files/commands/merlin/promote.md +176 -0
  104. package/files/commands/merlin/quick.md +229 -0
  105. package/files/commands/merlin/resume-work.md +27 -1
  106. package/files/commands/merlin/route.md +43 -1
  107. package/files/commands/merlin/sandbox.md +359 -0
  108. package/files/commands/merlin/usage.md +55 -0
  109. package/files/docker/Dockerfile.merlin +20 -0
  110. package/files/docker/docker-compose.merlin.yml +23 -0
  111. package/files/hook-templates/auto-commit.sh +64 -0
  112. package/files/hook-templates/auto-format.sh +95 -0
  113. package/files/hook-templates/auto-test.sh +117 -0
  114. package/files/hook-templates/branch-protection.sh +72 -0
  115. package/files/hook-templates/changelog-reminder.sh +76 -0
  116. package/files/hook-templates/complexity-check.sh +112 -0
  117. package/files/hook-templates/import-audit.sh +83 -0
  118. package/files/hook-templates/license-header.sh +84 -0
  119. package/files/hook-templates/pr-description.sh +100 -0
  120. package/files/hook-templates/todo-tracker.sh +80 -0
  121. package/files/hooks/check-file-size.sh +17 -4
  122. package/files/hooks/config-change.sh +44 -16
  123. package/files/hooks/instructions-loaded.sh +22 -5
  124. package/files/hooks/notify-desktop.sh +157 -0
  125. package/files/hooks/notify-webhook.sh +141 -0
  126. package/files/hooks/pre-edit-sights-check.sh +76 -9
  127. package/files/hooks/security-scanner.sh +153 -0
  128. package/files/hooks/session-end-memory-sync.sh +97 -0
  129. package/files/hooks/session-end.sh +274 -1
  130. package/files/hooks/session-start.sh +19 -6
  131. package/files/hooks/smart-approve.sh +270 -0
  132. package/files/hooks/teammate-idle-verify.sh +87 -12
  133. package/files/hooks/worktree-create.sh +20 -3
  134. package/files/hooks/worktree-remove.sh +21 -3
  135. package/files/merlin/references/plan-format.md +37 -9
  136. package/files/merlin/sandbox.json +9 -0
  137. package/files/merlin/security.json +11 -0
  138. package/files/merlin/templates/ci/docs-update.yml +81 -0
  139. package/files/merlin/templates/ci/pr-review.yml +50 -0
  140. package/files/merlin/templates/ci/security-audit.yml +74 -0
  141. package/files/merlin/templates/config.json +9 -1
  142. package/files/rules/api-rules.md +30 -0
  143. package/files/rules/frontend-rules.md +25 -0
  144. package/files/rules/hooks-rules.md +36 -0
  145. package/files/rules/mcp-rules.md +30 -0
  146. package/files/rules/worker-rules.md +29 -0
  147. 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. Builds structured handoff
11
- * 4. Spawns a fresh `claude --agent <name> -p` process
12
- * 5. Captures and returns the result
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, readdirSync, readFileSync } from 'fs';
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
- * Read the effort field from an agent's .md frontmatter.
25
- * Returns 'medium' as the safe default if not found or unreadable.
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
- // ── CORE tool: always loaded, primary way to delegate specialist work ───
199
- // ===================================================================
200
- // merlin_route Spawn a fresh Claude process for a specialist agent
201
- // ===================================================================
202
- server.tool('merlin_route', 'Route and delegate a task to a specialist agent running in a FRESH Claude process with full 200K context window. ' +
203
- 'Automatically pre-fetches Sights codebase context, checks the agent catalog for better-fit specialists, ' +
204
- 'builds a structured handoff, spawns the agent via `claude --agent`, and captures the result. ' +
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
- const available = getAvailableAgents();
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}) may be a better fit — slug: ${discoveryHint.slug}`);
90
+ console.error(`[merlin_route] Discovery hint: "${discoveryHint.name}" (${discoveryHint.grade}) — slug: ${discoveryHint.slug}`);
295
91
  }
296
- // 4. Read effort level from agent frontmatter
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 level: ${effort}${effort === 'high' ? ' (ultrathink enabled)' : effort === 'low' ? ' (concise mode)' : ''}`);
300
- // 5. Build the handoff
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 complexity and select model
121
+ // 7. Classify task and select model
323
122
  const classification = classifyTask(task, agent);
324
- console.error(`[merlin_route] Model selected: ${classification.model} (${classification.complexity}) — ${classification.reason}`);
325
- // Record cost tracking before spawning
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 agent "${agent}" for task: ${task.slice(0, 100)}...`);
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
- // Process failed with no output
335
- const errMsg = result.stderr
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
- // Discovery hint: suggest a better-fit agent from the catalog
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> 💡 **Catalog match:** \`${discoveryHint.name}\` (${discoveryHint.grade}) — ${discoveryHint.description}\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
- // ── CORE tool: always loaded, needed to know what routing options exist ─
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"}