create-merlin-brain 5.3.7 → 5.4.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 (67) hide show
  1. package/bin/install-rtk.cjs +282 -0
  2. package/bin/install.cjs +26 -4
  3. package/dist/server/api/client.d.ts.map +1 -1
  4. package/dist/server/api/client.js +35 -6
  5. package/dist/server/api/client.js.map +1 -1
  6. package/dist/server/server.d.ts.map +1 -1
  7. package/dist/server/server.js +146 -42
  8. package/dist/server/server.js.map +1 -1
  9. package/dist/server/session-coach.d.ts.map +1 -1
  10. package/dist/server/session-coach.js +12 -0
  11. package/dist/server/session-coach.js.map +1 -1
  12. package/dist/server/session-guardian.d.ts +8 -1
  13. package/dist/server/session-guardian.d.ts.map +1 -1
  14. package/dist/server/session-guardian.js +26 -14
  15. package/dist/server/session-guardian.js.map +1 -1
  16. package/dist/server/tools/challenge.d.ts.map +1 -1
  17. package/dist/server/tools/challenge.js +7 -1
  18. package/dist/server/tools/challenge.js.map +1 -1
  19. package/dist/server/tools/computer-use.d.ts.map +1 -1
  20. package/dist/server/tools/computer-use.js +13 -6
  21. package/dist/server/tools/computer-use.js.map +1 -1
  22. package/dist/server/tools/index.d.ts +0 -1
  23. package/dist/server/tools/index.d.ts.map +1 -1
  24. package/dist/server/tools/index.js +0 -1
  25. package/dist/server/tools/index.js.map +1 -1
  26. package/dist/server/tools/project.d.ts.map +1 -1
  27. package/dist/server/tools/project.js +14 -12
  28. package/dist/server/tools/project.js.map +1 -1
  29. package/dist/server/tools/verification-runner.d.ts +45 -0
  30. package/dist/server/tools/verification-runner.d.ts.map +1 -0
  31. package/dist/server/tools/verification-runner.js +264 -0
  32. package/dist/server/tools/verification-runner.js.map +1 -0
  33. package/dist/server/tools/verification.d.ts +3 -0
  34. package/dist/server/tools/verification.d.ts.map +1 -1
  35. package/dist/server/tools/verification.js +8 -265
  36. package/dist/server/tools/verification.js.map +1 -1
  37. package/files/CLAUDE.md +1 -0
  38. package/files/commands/merlin/check-size.md +152 -0
  39. package/files/hooks/check-file-size.sh +166 -58
  40. package/files/hooks/pre-edit-sights-check.sh +19 -3
  41. package/files/hooks/security-scanner.sh +3 -4
  42. package/files/hooks/session-end.sh +45 -32
  43. package/files/hooks/smart-approve.sh +11 -3
  44. package/files/hooks/user-prompt-router.sh +24 -3
  45. package/files/merlin/VERSION +1 -1
  46. package/files/merlin-system-prompt.txt +3 -1
  47. package/package.json +2 -2
  48. package/dist/server/tools/context.d.ts +0 -7
  49. package/dist/server/tools/context.d.ts.map +0 -1
  50. package/dist/server/tools/context.js +0 -614
  51. package/dist/server/tools/context.js.map +0 -1
  52. package/dist/server/tools/hud.d.ts +0 -13
  53. package/dist/server/tools/hud.d.ts.map +0 -1
  54. package/dist/server/tools/hud.js +0 -295
  55. package/dist/server/tools/hud.js.map +0 -1
  56. package/dist/server/tools/provider-ask.d.ts +0 -10
  57. package/dist/server/tools/provider-ask.d.ts.map +0 -1
  58. package/dist/server/tools/provider-ask.js +0 -234
  59. package/dist/server/tools/provider-ask.js.map +0 -1
  60. package/dist/server/tools/rate-limit.d.ts +0 -8
  61. package/dist/server/tools/rate-limit.d.ts.map +0 -1
  62. package/dist/server/tools/rate-limit.js +0 -184
  63. package/dist/server/tools/rate-limit.js.map +0 -1
  64. package/dist/server/tools/team-workers.d.ts +0 -7
  65. package/dist/server/tools/team-workers.d.ts.map +0 -1
  66. package/dist/server/tools/team-workers.js +0 -271
  67. package/dist/server/tools/team-workers.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-runner.d.ts","sourceRoot":"","sources":["../../../src/server/tools/verification-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,+BAA+B;AAC/B,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACzC;AAED,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,OAAO,SAAS,GACf,OAAO,CAAC,aAAa,CAAC,CA8CxB;AAED,6BAA6B;AAC7B,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAKtF;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWtE;AAED,wDAAwD;AACxD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgMnF"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Verification runner — async command execution and 6-phase pipeline.
3
+ * Imported by verification.ts (tool registration + formatting).
4
+ */
5
+ import { spawn } from 'child_process';
6
+ import { existsSync, readFileSync } from 'fs';
7
+ import { join } from 'path';
8
+ /**
9
+ * Run a command asynchronously using spawn (shell:false — no injection risk).
10
+ * Resolves with { success, output, error } — never rejects.
11
+ * Enforces timeout: SIGTERM after `timeout` ms, SIGKILL after a 5s grace period.
12
+ */
13
+ export function runCommand(file, args, cwd, timeout = 120000) {
14
+ return new Promise((resolve) => {
15
+ let child;
16
+ try {
17
+ child = spawn(file, args, { cwd, shell: false, stdio: ['pipe', 'pipe', 'pipe'] });
18
+ }
19
+ catch (spawnErr) {
20
+ const msg = spawnErr instanceof Error ? spawnErr.message : String(spawnErr);
21
+ resolve({ success: false, output: '', error: msg });
22
+ return;
23
+ }
24
+ const stdoutChunks = [];
25
+ const stderrChunks = [];
26
+ child.stdout?.on('data', (chunk) => stdoutChunks.push(chunk));
27
+ child.stderr?.on('data', (chunk) => stderrChunks.push(chunk));
28
+ let killed = false;
29
+ const killTimer = setTimeout(() => {
30
+ killed = true;
31
+ child.kill('SIGTERM');
32
+ setTimeout(() => {
33
+ try {
34
+ child.kill('SIGKILL');
35
+ }
36
+ catch { /* already dead */ }
37
+ }, 5000);
38
+ }, timeout);
39
+ child.on('error', (err) => {
40
+ clearTimeout(killTimer);
41
+ resolve({ success: false, output: '', error: err.message });
42
+ });
43
+ child.on('close', (code) => {
44
+ clearTimeout(killTimer);
45
+ const stdout = Buffer.concat(stdoutChunks).toString('utf-8').trim();
46
+ const stderr = Buffer.concat(stderrChunks).toString('utf-8').trim();
47
+ if (killed) {
48
+ resolve({ success: false, output: stdout, error: `Command timed out after ${timeout}ms` });
49
+ return;
50
+ }
51
+ if (code === 0) {
52
+ resolve({ success: true, output: stdout || stderr });
53
+ }
54
+ else {
55
+ resolve({ success: false, output: stdout, error: stderr || `exited with code ${code}` });
56
+ }
57
+ });
58
+ });
59
+ }
60
+ /** Detect package manager */
61
+ export function detectPackageManager(repoRoot) {
62
+ if (existsSync(join(repoRoot, 'bun.lockb')))
63
+ return 'bun';
64
+ if (existsSync(join(repoRoot, 'pnpm-lock.yaml')))
65
+ return 'pnpm';
66
+ if (existsSync(join(repoRoot, 'yarn.lock')))
67
+ return 'yarn';
68
+ return 'npm';
69
+ }
70
+ /** Detect available scripts from package.json */
71
+ export function detectScripts(repoRoot) {
72
+ try {
73
+ const pkgPath = join(repoRoot, 'package.json');
74
+ if (existsSync(pkgPath)) {
75
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
76
+ return pkg.scripts ?? {};
77
+ }
78
+ }
79
+ catch {
80
+ // Ignore
81
+ }
82
+ return {};
83
+ }
84
+ /** Run all 6 verification phases and return a report */
85
+ export async function runVerification(repoRoot) {
86
+ const startTime = Date.now();
87
+ const phases = [];
88
+ const pm = detectPackageManager(repoRoot);
89
+ const scripts = detectScripts(repoRoot);
90
+ // Phase 1: Build
91
+ {
92
+ const phaseStart = Date.now();
93
+ if (scripts.build) {
94
+ const result = await runCommand(pm, ['run', 'build'], repoRoot);
95
+ phases.push({
96
+ phase: 'build',
97
+ status: result.success ? 'pass' : 'fail',
98
+ message: result.success ? 'Build completed successfully' : 'Build failed',
99
+ duration: Date.now() - phaseStart,
100
+ output: result.output?.slice(-500),
101
+ errors: result.error ? [result.error.slice(-500)] : undefined,
102
+ });
103
+ }
104
+ else {
105
+ phases.push({ phase: 'build', status: 'skip', message: 'No build script found in package.json', duration: 0 });
106
+ }
107
+ }
108
+ // Phase 2: Types (TypeScript)
109
+ {
110
+ const phaseStart = Date.now();
111
+ if (existsSync(join(repoRoot, 'tsconfig.json'))) {
112
+ const result = await runCommand('npx', ['tsc', '--noEmit'], repoRoot);
113
+ phases.push({
114
+ phase: 'types',
115
+ status: result.success ? 'pass' : 'fail',
116
+ message: result.success ? 'Type check passed' : 'Type errors found',
117
+ duration: Date.now() - phaseStart,
118
+ output: result.output?.slice(-500),
119
+ errors: result.error ? [result.error.slice(-500)] : undefined,
120
+ });
121
+ }
122
+ else {
123
+ phases.push({ phase: 'types', status: 'skip', message: 'No tsconfig.json found', duration: 0 });
124
+ }
125
+ }
126
+ // Phase 3: Lint
127
+ {
128
+ const phaseStart = Date.now();
129
+ if (scripts.lint) {
130
+ const result = await runCommand(pm, ['run', 'lint'], repoRoot);
131
+ phases.push({
132
+ phase: 'lint',
133
+ status: result.success ? 'pass' : 'fail',
134
+ message: result.success ? 'Lint passed' : 'Lint errors found',
135
+ duration: Date.now() - phaseStart,
136
+ output: result.output?.slice(-500),
137
+ errors: result.error ? [result.error.slice(-500)] : undefined,
138
+ });
139
+ }
140
+ else {
141
+ const hasEslint = ['.eslintrc', '.eslintrc.js', '.eslintrc.json', 'eslint.config.js']
142
+ .some(f => existsSync(join(repoRoot, f)));
143
+ const hasBiome = existsSync(join(repoRoot, 'biome.json'));
144
+ if (hasEslint) {
145
+ const result = await runCommand('npx', ['eslint', '.', '--max-warnings', '0'], repoRoot, 60000);
146
+ phases.push({
147
+ phase: 'lint',
148
+ status: result.success ? 'pass' : 'warn',
149
+ message: result.success ? 'ESLint passed' : 'ESLint warnings found',
150
+ duration: Date.now() - phaseStart,
151
+ output: result.output?.slice(-500),
152
+ });
153
+ }
154
+ else if (hasBiome) {
155
+ const result = await runCommand('npx', ['@biomejs/biome', 'check', '.'], repoRoot, 60000);
156
+ phases.push({
157
+ phase: 'lint',
158
+ status: result.success ? 'pass' : 'warn',
159
+ message: result.success ? 'Biome passed' : 'Biome warnings found',
160
+ duration: Date.now() - phaseStart,
161
+ output: result.output?.slice(-500),
162
+ });
163
+ }
164
+ else {
165
+ phases.push({ phase: 'lint', status: 'skip', message: 'No linter configured', duration: 0 });
166
+ }
167
+ }
168
+ }
169
+ // Phase 4: Tests
170
+ {
171
+ const phaseStart = Date.now();
172
+ const testScript = scripts.test ?? scripts['test:unit'];
173
+ if (testScript) {
174
+ const scriptKey = scripts.test ? 'test' : 'test:unit';
175
+ const result = await runCommand(pm, ['run', scriptKey], repoRoot, 180000);
176
+ phases.push({
177
+ phase: 'tests',
178
+ status: result.success ? 'pass' : 'fail',
179
+ message: result.success ? 'Tests passed' : 'Some tests failed',
180
+ duration: Date.now() - phaseStart,
181
+ output: result.output?.slice(-1000),
182
+ errors: result.error ? [result.error.slice(-500)] : undefined,
183
+ });
184
+ }
185
+ else {
186
+ phases.push({ phase: 'tests', status: 'skip', message: 'No test script found in package.json', duration: 0 });
187
+ }
188
+ }
189
+ // Phase 5: Security
190
+ {
191
+ const phaseStart = Date.now();
192
+ const securityChecks = [];
193
+ let hasIssues = false;
194
+ const gitignorePath = join(repoRoot, '.gitignore');
195
+ const gitignoreContent = existsSync(gitignorePath) ? readFileSync(gitignorePath, 'utf-8') : '';
196
+ for (const envFile of ['.env', '.env.local', '.env.production']) {
197
+ if (existsSync(join(repoRoot, envFile)) && !gitignoreContent.includes(envFile)) {
198
+ securityChecks.push(`⚠️ ${envFile} exists but may not be in .gitignore`);
199
+ hasIssues = true;
200
+ }
201
+ }
202
+ try {
203
+ const pkgPath = join(repoRoot, 'package.json');
204
+ if (existsSync(pkgPath)) {
205
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
206
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
207
+ if (deps['eval'] || deps['eval-js']) {
208
+ securityChecks.push('⚠️ eval package detected - review for security');
209
+ hasIssues = true;
210
+ }
211
+ }
212
+ }
213
+ catch { /* Ignore parse errors */ }
214
+ const auditResult = await runCommand(pm, ['audit', '--audit-level=high'], repoRoot, 30000);
215
+ if (!auditResult.success) {
216
+ securityChecks.push('⚠️ npm audit found high-severity vulnerabilities');
217
+ hasIssues = true;
218
+ }
219
+ if (securityChecks.length === 0)
220
+ securityChecks.push('✅ No obvious security issues detected');
221
+ phases.push({
222
+ phase: 'security',
223
+ status: hasIssues ? 'warn' : 'pass',
224
+ message: hasIssues ? 'Security warnings found' : 'Security check passed',
225
+ duration: Date.now() - phaseStart,
226
+ output: securityChecks.join('\n'),
227
+ });
228
+ }
229
+ // Phase 6: Diff — sequential JS fallback, no shell operators
230
+ {
231
+ const phaseStart = Date.now();
232
+ let diffOutput = '';
233
+ const r1 = await runCommand('git', ['diff', '--stat', 'HEAD~1'], repoRoot, 15000);
234
+ if (r1.success && r1.output) {
235
+ diffOutput = r1.output;
236
+ }
237
+ else {
238
+ const r2 = await runCommand('git', ['diff', '--stat', 'HEAD'], repoRoot, 15000);
239
+ diffOutput = (r2.success && r2.output) ? r2.output : 'No diff available';
240
+ }
241
+ phases.push({
242
+ phase: 'diff',
243
+ status: 'pass',
244
+ message: 'Changes since last commit',
245
+ duration: Date.now() - phaseStart,
246
+ output: diffOutput.slice(-1000) || 'No changes',
247
+ });
248
+ }
249
+ const summary = {
250
+ passed: phases.filter(p => p.status === 'pass').length,
251
+ failed: phases.filter(p => p.status === 'fail').length,
252
+ skipped: phases.filter(p => p.status === 'skip').length,
253
+ warnings: phases.filter(p => p.status === 'warn').length,
254
+ };
255
+ const overallStatus = summary.failed > 0 ? 'fail' : summary.warnings > 0 ? 'warn' : 'pass';
256
+ return {
257
+ timestamp: new Date().toISOString(),
258
+ duration: Date.now() - startTime,
259
+ summary,
260
+ phases,
261
+ overallStatus,
262
+ };
263
+ }
264
+ //# sourceMappingURL=verification-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-runner.js","sourceRoot":"","sources":["../../../src/server/tools/verification-runner.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Verification Checkpoints Tools
3
3
  * 6-phase quality check system: Build → Types → Lint → Tests → Security → Diff
4
+ *
5
+ * Execution engine lives in verification-runner.ts.
6
+ * This file owns: tool registration, input schema, output formatting.
4
7
  */
5
8
  import type { ToolContext } from './types.js';
6
9
  export declare function registerVerificationTools(ctx: ToolContext & {
@@ -1 +1 @@
1
- {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/server/tools/verification.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkV9C,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,WAAW,GAAG;IAAE,eAAe,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAE,GAAG,IAAI,CAqEpH"}
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/server/tools/verification.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAiD9C,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,WAAW,GAAG;IAAE,eAAe,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAE,GAAG,IAAI,CAiEpH"}
@@ -1,265 +1,14 @@
1
1
  /**
2
2
  * Verification Checkpoints Tools
3
3
  * 6-phase quality check system: Build → Types → Lint → Tests → Security → Diff
4
+ *
5
+ * Execution engine lives in verification-runner.ts.
6
+ * This file owns: tool registration, input schema, output formatting.
4
7
  */
5
8
  import { z } from 'zod';
6
- import { execSync } from 'child_process';
7
- import { existsSync, readFileSync } from 'fs';
8
- import { join } from 'path';
9
9
  import { coachWrap } from '../session-coach.js';
10
- /** Run a command and capture output */
11
- function runCommand(cmd, cwd, timeout = 120000) {
12
- try {
13
- const output = execSync(cmd, {
14
- cwd,
15
- encoding: 'utf-8',
16
- timeout,
17
- stdio: ['pipe', 'pipe', 'pipe'],
18
- });
19
- return { success: true, output: output.trim() };
20
- }
21
- catch (error) {
22
- return {
23
- success: false,
24
- output: error.stdout?.toString() || '',
25
- error: error.stderr?.toString() || error.message,
26
- };
27
- }
28
- }
29
- /** Detect package manager */
30
- function detectPackageManager(repoRoot) {
31
- if (existsSync(join(repoRoot, 'bun.lockb')))
32
- return 'bun';
33
- if (existsSync(join(repoRoot, 'pnpm-lock.yaml')))
34
- return 'pnpm';
35
- if (existsSync(join(repoRoot, 'yarn.lock')))
36
- return 'yarn';
37
- return 'npm';
38
- }
39
- /** Detect available scripts from package.json */
40
- function detectScripts(repoRoot) {
41
- try {
42
- const pkgPath = join(repoRoot, 'package.json');
43
- if (existsSync(pkgPath)) {
44
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
45
- return pkg.scripts || {};
46
- }
47
- }
48
- catch {
49
- // Ignore
50
- }
51
- return {};
52
- }
53
- /** Run verification phases */
54
- async function runVerification(repoRoot) {
55
- const startTime = Date.now();
56
- const phases = [];
57
- const pm = detectPackageManager(repoRoot);
58
- const scripts = detectScripts(repoRoot);
59
- const runScript = (script) => `${pm} run ${script}`;
60
- // Phase 1: Build
61
- {
62
- const phaseStart = Date.now();
63
- if (scripts.build) {
64
- const result = runCommand(runScript('build'), repoRoot);
65
- phases.push({
66
- phase: 'build',
67
- status: result.success ? 'pass' : 'fail',
68
- message: result.success ? 'Build completed successfully' : 'Build failed',
69
- duration: Date.now() - phaseStart,
70
- output: result.output?.slice(-500),
71
- errors: result.error ? [result.error.slice(-500)] : undefined,
72
- });
73
- }
74
- else {
75
- phases.push({
76
- phase: 'build',
77
- status: 'skip',
78
- message: 'No build script found in package.json',
79
- duration: 0,
80
- });
81
- }
82
- }
83
- // Phase 2: Types (TypeScript)
84
- {
85
- const phaseStart = Date.now();
86
- const hasTsConfig = existsSync(join(repoRoot, 'tsconfig.json'));
87
- if (hasTsConfig) {
88
- const result = runCommand('npx tsc --noEmit', repoRoot);
89
- phases.push({
90
- phase: 'types',
91
- status: result.success ? 'pass' : 'fail',
92
- message: result.success ? 'Type check passed' : 'Type errors found',
93
- duration: Date.now() - phaseStart,
94
- output: result.output?.slice(-500),
95
- errors: result.error ? [result.error.slice(-500)] : undefined,
96
- });
97
- }
98
- else {
99
- phases.push({
100
- phase: 'types',
101
- status: 'skip',
102
- message: 'No tsconfig.json found',
103
- duration: 0,
104
- });
105
- }
106
- }
107
- // Phase 3: Lint
108
- {
109
- const phaseStart = Date.now();
110
- if (scripts.lint) {
111
- const result = runCommand(runScript('lint'), repoRoot);
112
- phases.push({
113
- phase: 'lint',
114
- status: result.success ? 'pass' : 'fail',
115
- message: result.success ? 'Lint passed' : 'Lint errors found',
116
- duration: Date.now() - phaseStart,
117
- output: result.output?.slice(-500),
118
- errors: result.error ? [result.error.slice(-500)] : undefined,
119
- });
120
- }
121
- else {
122
- // Try common linters directly
123
- const hasEslint = existsSync(join(repoRoot, '.eslintrc')) ||
124
- existsSync(join(repoRoot, '.eslintrc.js')) ||
125
- existsSync(join(repoRoot, '.eslintrc.json')) ||
126
- existsSync(join(repoRoot, 'eslint.config.js'));
127
- const hasBiome = existsSync(join(repoRoot, 'biome.json'));
128
- if (hasEslint) {
129
- const result = runCommand('npx eslint . --max-warnings 0', repoRoot, 60000);
130
- phases.push({
131
- phase: 'lint',
132
- status: result.success ? 'pass' : 'warn',
133
- message: result.success ? 'ESLint passed' : 'ESLint warnings found',
134
- duration: Date.now() - phaseStart,
135
- output: result.output?.slice(-500),
136
- });
137
- }
138
- else if (hasBiome) {
139
- const result = runCommand('npx @biomejs/biome check .', repoRoot, 60000);
140
- phases.push({
141
- phase: 'lint',
142
- status: result.success ? 'pass' : 'warn',
143
- message: result.success ? 'Biome passed' : 'Biome warnings found',
144
- duration: Date.now() - phaseStart,
145
- output: result.output?.slice(-500),
146
- });
147
- }
148
- else {
149
- phases.push({
150
- phase: 'lint',
151
- status: 'skip',
152
- message: 'No linter configured',
153
- duration: 0,
154
- });
155
- }
156
- }
157
- }
158
- // Phase 4: Tests
159
- {
160
- const phaseStart = Date.now();
161
- const testScript = scripts.test || scripts['test:unit'];
162
- if (testScript) {
163
- const result = runCommand(runScript(scripts.test ? 'test' : 'test:unit'), repoRoot, 180000);
164
- phases.push({
165
- phase: 'tests',
166
- status: result.success ? 'pass' : 'fail',
167
- message: result.success ? 'Tests passed' : 'Some tests failed',
168
- duration: Date.now() - phaseStart,
169
- output: result.output?.slice(-1000),
170
- errors: result.error ? [result.error.slice(-500)] : undefined,
171
- });
172
- }
173
- else {
174
- phases.push({
175
- phase: 'tests',
176
- status: 'skip',
177
- message: 'No test script found in package.json',
178
- duration: 0,
179
- });
180
- }
181
- }
182
- // Phase 5: Security
183
- {
184
- const phaseStart = Date.now();
185
- const securityChecks = [];
186
- let hasIssues = false;
187
- // Check for .env files that shouldn't be committed
188
- const envFiles = ['.env', '.env.local', '.env.production'];
189
- const gitignorePath = join(repoRoot, '.gitignore');
190
- let gitignoreContent = '';
191
- if (existsSync(gitignorePath)) {
192
- gitignoreContent = readFileSync(gitignorePath, 'utf-8');
193
- }
194
- envFiles.forEach(envFile => {
195
- if (existsSync(join(repoRoot, envFile)) && !gitignoreContent.includes(envFile)) {
196
- securityChecks.push(`⚠️ ${envFile} exists but may not be in .gitignore`);
197
- hasIssues = true;
198
- }
199
- });
200
- // Check for common security issues in package.json
201
- try {
202
- const pkgPath = join(repoRoot, 'package.json');
203
- if (existsSync(pkgPath)) {
204
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
205
- const deps = { ...pkg.dependencies, ...pkg.devDependencies };
206
- // Check for known problematic patterns
207
- if (deps['eval'] || deps['eval-js']) {
208
- securityChecks.push('⚠️ eval package detected - review for security');
209
- hasIssues = true;
210
- }
211
- }
212
- }
213
- catch {
214
- // Ignore parse errors
215
- }
216
- // Run npm audit (quick check)
217
- const auditResult = runCommand(`${pm} audit --audit-level=high`, repoRoot, 30000);
218
- if (!auditResult.success) {
219
- securityChecks.push('⚠️ npm audit found high-severity vulnerabilities');
220
- hasIssues = true;
221
- }
222
- if (securityChecks.length === 0) {
223
- securityChecks.push('✅ No obvious security issues detected');
224
- }
225
- phases.push({
226
- phase: 'security',
227
- status: hasIssues ? 'warn' : 'pass',
228
- message: hasIssues ? 'Security warnings found' : 'Security check passed',
229
- duration: Date.now() - phaseStart,
230
- output: securityChecks.join('\n'),
231
- });
232
- }
233
- // Phase 6: Diff (what changed)
234
- {
235
- const phaseStart = Date.now();
236
- const result = runCommand('git diff --stat HEAD~1 2>/dev/null || git diff --stat --cached 2>/dev/null || echo "No changes to show"', repoRoot);
237
- phases.push({
238
- phase: 'diff',
239
- status: 'pass',
240
- message: 'Changes since last commit',
241
- duration: Date.now() - phaseStart,
242
- output: result.output?.slice(-1000) || 'No changes',
243
- });
244
- }
245
- // Calculate summary
246
- const summary = {
247
- passed: phases.filter(p => p.status === 'pass').length,
248
- failed: phases.filter(p => p.status === 'fail').length,
249
- skipped: phases.filter(p => p.status === 'skip').length,
250
- warnings: phases.filter(p => p.status === 'warn').length,
251
- };
252
- const overallStatus = summary.failed > 0 ? 'fail' :
253
- summary.warnings > 0 ? 'warn' : 'pass';
254
- return {
255
- timestamp: new Date().toISOString(),
256
- duration: Date.now() - startTime,
257
- summary,
258
- phases,
259
- overallStatus,
260
- };
261
- }
262
- /** Format report for display */
10
+ import { runVerification } from './verification-runner.js';
11
+ /** Format a full verification report as markdown */
263
12
  function formatReport(report) {
264
13
  const statusEmoji = {
265
14
  pass: '✅',
@@ -319,7 +68,6 @@ export function registerVerificationTools(ctx) {
319
68
  // Filter phases if specific ones requested
320
69
  if (selectedPhases && selectedPhases.length > 0) {
321
70
  report.phases = report.phases.filter(p => selectedPhases.includes(p.phase));
322
- // Recalculate summary
323
71
  report.summary = {
324
72
  passed: report.phases.filter(p => p.status === 'pass').length,
325
73
  failed: report.phases.filter(p => p.status === 'fail').length,
@@ -328,15 +76,10 @@ export function registerVerificationTools(ctx) {
328
76
  };
329
77
  }
330
78
  if (format === 'summary') {
331
- const statusEmoji = report.overallStatus === 'pass' ? '✅' :
79
+ const icon = report.overallStatus === 'pass' ? '✅' :
332
80
  report.overallStatus === 'fail' ? '❌' : '⚠️';
333
- const summaryText = `${statusEmoji} Verification: ${report.summary.passed} passed, ${report.summary.failed} failed, ${report.summary.warnings} warnings`;
334
- return {
335
- content: [{
336
- type: 'text',
337
- text: coachWrap('merlin_run_verification', summaryText),
338
- }],
339
- };
81
+ const text = `${icon} Verification: ${report.summary.passed} passed, ${report.summary.failed} failed, ${report.summary.warnings} warnings`;
82
+ return { content: [{ type: 'text', text: coachWrap('merlin_run_verification', text) }] };
340
83
  }
341
84
  return {
342
85
  content: [{ type: 'text', text: coachWrap('merlin_run_verification', formatReport(report)) }],
@@ -1 +1 @@
1
- {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../../src/server/tools/verification.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA0BhD,uCAAuC;AACvC,SAAS,UAAU,CAAC,GAAW,EAAE,GAAW,EAAE,OAAO,GAAG,MAAM;IAC5D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;YAC3B,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,OAAO;YACP,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAClD,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACtC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO;SACjD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,6BAA6B;AAC7B,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAChE,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iDAAiD;AACjD,SAAS,aAAa,CAAC,QAAgB;IACrC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACvD,OAAO,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8BAA8B;AAC9B,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,MAAM,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,MAAM,EAAE,CAAC;IAE5D,iBAAiB;IACjB,CAAC;QACC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBACxC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,cAAc;gBACzE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC;gBAClC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,uCAAuC;gBAChD,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,CAAC;QACC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;QAEhE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBACxC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB;gBACnE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC;gBAClC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,wBAAwB;gBACjC,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,CAAC;QACC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBACxC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB;gBAC7D,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC;gBAClC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACvC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAC1C,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;gBAC5C,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YAE1D,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,UAAU,CAAC,+BAA+B,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC5E,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oBACxC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB;oBACnE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;oBACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,QAAQ,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,UAAU,CAAC,4BAA4B,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACzE,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oBACxC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,sBAAsB;oBACjE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;oBACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,sBAAsB;oBAC/B,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,CAAC;QACC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;QAExD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5F,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBACxC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,mBAAmB;gBAC9D,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;gBACnC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,CAAC;QACC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,mDAAmD;QACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACnD,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9B,gBAAgB,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/E,cAAc,CAAC,IAAI,CAAC,MAAM,OAAO,sCAAsC,CAAC,CAAC;gBACzE,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,mDAAmD;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC/C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;gBAE7D,uCAAuC;gBACvC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBACpC,cAAc,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;oBACtE,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YACxE,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,cAAc,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACnC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB;YACxE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;YACjC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,CAAC;QACC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,yGAAyG,EAAE,QAAQ,CAAC,CAAC;QAE/I,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,2BAA2B;YACpC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY;SACpD,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QACtD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QACtD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;KACzD,CAAC;IAEF,MAAM,aAAa,GACjB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzC,OAAO;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;QAChC,OAAO;QACP,MAAM;QACN,aAAa;KACd,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,SAAS,YAAY,CAAC,MAA0B;IAC9C,MAAM,WAAW,GAAG;QAClB,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;KACX,CAAC;IAEF,IAAI,MAAM,GAAG,2BAA2B,CAAC;IACzC,MAAM,IAAI,eAAe,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC;IACrG,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAElE,MAAM,IAAI,cAAc,CAAC;IACzB,MAAM,IAAI,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;IACnD,MAAM,IAAI,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;IACnD,MAAM,IAAI,kBAAkB,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC;IACxD,MAAM,IAAI,iBAAiB,MAAM,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC;IAExD,MAAM,IAAI,eAAe,CAAC;IAE1B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5B,MAAM,IAAI,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;QAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;QAEf,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,0BAA0B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAC1E,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,mDAAmD,KAAK,CAAC,MAAM,wBAAwB,CAAC;QACpG,CAAC;QAED,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,mBAAmB,MAAM,CAAC,SAAS,GAAG,CAAC;IAEjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAoE;IAC5G,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC;IAExC,4EAA4E;IAC5E,gCAAgC;IAChC,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,mbAAmb,EACnb;QACE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aACxF,QAAQ,CAAC,uCAAuC,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;aAC3D,QAAQ,CAAC,gEAAgE,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,0EAA0E;yBACjF,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YAE/C,2CAA2C;YAC3C,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACvC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAY,CAAC,CACxC,CAAC;gBACF,sBAAsB;gBACtB,MAAM,CAAC,OAAO,GAAG;oBACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;oBAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;oBAC7D,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;oBAC9D,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;iBAChE,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACxC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChE,MAAM,WAAW,GAAG,GAAG,WAAW,kBAAkB,MAAM,CAAC,OAAO,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,CAAC,QAAQ,WAAW,CAAC;gBACzJ,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,SAAS,CAAC,yBAAyB,EAAE,WAAW,CAAC;yBACxD,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,yBAAyB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;aAC9F,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;qBACxF,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../../src/server/tools/verification.ts"],"names":[],"mappings":"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"}
package/files/CLAUDE.md CHANGED
@@ -83,6 +83,7 @@ When user corrects you → `merlin_save_behavior`. When user says "always/never/
83
83
  - Never kill user processes (Xcode, VS Code, browsers) without explicit confirmation.
84
84
  - Never claim "done" without actually building/compiling/testing.
85
85
  - Badge on EVERY action — call `~/.claude/scripts/duo-badge.sh` to get the right badge. If the user can't see the badge, you're not doing your job.
86
+ - No file may exceed 400 LOC. Enforced by ~/.claude/hooks/check-file-size.sh (PreToolUse hook). Override per-file with `// merlin:allow-large-file: <reason>` comment. Override per-session with MERLIN_SKIP_FILE_SIZE_CHECK=1.
86
87
 
87
88
  ## Codex Execution Mode
88
89