phpstan-mcp-mx 0.7.1 → 0.9.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 (44) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +28 -0
  3. package/dist/index.js +3 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/phpstan/error.d.ts +8 -0
  6. package/dist/phpstan/error.js +9 -0
  7. package/dist/phpstan/error.js.map +1 -0
  8. package/dist/phpstan/output.d.ts +57 -0
  9. package/dist/phpstan/output.js +76 -0
  10. package/dist/phpstan/output.js.map +1 -0
  11. package/dist/phpstan/process.d.ts +45 -0
  12. package/dist/phpstan/process.js +148 -0
  13. package/dist/phpstan/process.js.map +1 -0
  14. package/dist/phpstan/queue.d.ts +21 -0
  15. package/dist/phpstan/queue.js +76 -0
  16. package/dist/phpstan/queue.js.map +1 -0
  17. package/dist/phpstan.d.ts +7 -65
  18. package/dist/phpstan.js +8 -289
  19. package/dist/phpstan.js.map +1 -1
  20. package/dist/server.d.ts +0 -6
  21. package/dist/server.js +5 -6
  22. package/dist/server.js.map +1 -1
  23. package/dist/tools/analysis.d.ts +8 -0
  24. package/dist/tools/analysis.js +131 -0
  25. package/dist/tools/analysis.js.map +1 -0
  26. package/dist/tools/inspect.d.ts +14 -0
  27. package/dist/tools/inspect.js +211 -0
  28. package/dist/tools/inspect.js.map +1 -0
  29. package/dist/tools/prompts.d.ts +3 -0
  30. package/dist/tools/prompts.js +45 -0
  31. package/dist/tools/prompts.js.map +1 -0
  32. package/dist/tools/shared.d.ts +153 -0
  33. package/dist/tools/shared.js +219 -0
  34. package/dist/tools/shared.js.map +1 -0
  35. package/dist/tools/writes.d.ts +17 -0
  36. package/dist/tools/writes.js +122 -0
  37. package/dist/tools/writes.js.map +1 -0
  38. package/dist/tools.d.ts +0 -11
  39. package/dist/tools.js +5 -594
  40. package/dist/tools.js.map +1 -1
  41. package/dist/version.d.ts +9 -0
  42. package/dist/version.js +10 -0
  43. package/dist/version.js.map +1 -0
  44. package/package.json +7 -4
package/dist/phpstan.d.ts CHANGED
@@ -1,34 +1,15 @@
1
1
  import type { ResolvedProject } from './project.js';
2
+ import type { AnalysisResult, Finding } from './phpstan/output.js';
3
+ export type { AnalysisResult, Finding };
4
+ export { collectWarnings } from './phpstan/output.js';
5
+ export { isReportableKillError, planKill } from './phpstan/process.js';
6
+ export type { KillPlan } from './phpstan/process.js';
7
+ export { MAX_PARALLEL_ENV_VAR, loadMaxParallel } from './phpstan/queue.js';
8
+ export { PhpstanError } from './phpstan/error.js';
2
9
  /** Standaardtijd waarna een analyse wordt afgebroken. */
3
10
  export declare const DEFAULT_TIMEOUT_MS = 300000;
4
11
  /** Env-variabele met de `--memory-limit` voor aanroepen die er zelf geen meegeven. */
5
12
  export declare const MEMORY_LIMIT_ENV_VAR = "PHPSTAN_MCP_MEMORY_LIMIT";
6
- /** Env-variabele met het aantal analyses dat tegelijk mag draaien. */
7
- export declare const MAX_PARALLEL_ENV_VAR = "PHPSTAN_MCP_MAX_PARALLEL";
8
- /** Eén bevinding van PHPStan, gekoppeld aan een bestand. */
9
- export interface Finding {
10
- /** Absoluut pad zoals PHPStan het rapporteert. */
11
- readonly file: string;
12
- readonly line: number | null;
13
- readonly message: string;
14
- /** Bijv. "argument.type"; ontbreekt bij oudere PHPStan-versies. */
15
- readonly identifier: string | null;
16
- /** PHPStans eigen hint bij deze fout, als die er is. */
17
- readonly tip: string | null;
18
- }
19
- /** Uitkomst van een geslaagde analyse — ook als er fouten gevonden zijn. */
20
- export interface AnalysisResult {
21
- readonly project: string;
22
- readonly findings: readonly Finding[];
23
- /** Fouten die niet aan een bestand hangen, zoals configuratieproblemen. */
24
- readonly generalErrors: readonly string[];
25
- /** Wat PHPStan naast de JSON op stderr zei; leeg als er niets bijzonders was. */
26
- readonly warnings: readonly string[];
27
- readonly totals: {
28
- readonly fileErrors: number;
29
- readonly generalErrors: number;
30
- };
31
- }
32
13
  /** Opties per aanroep; alles optioneel, want het project bepaalt de standaard. */
33
14
  export interface AnalyseOptions {
34
15
  /** Paden binnen het project. Leeg betekent: gebruik wat in de config staat. */
@@ -42,9 +23,6 @@ export interface AnalyseOptions {
42
23
  /** Afbreeksignaal van de aanroeper; komt bij MCP uit het verzoek zelf. */
43
24
  readonly signal?: AbortSignal;
44
25
  }
45
- /** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
46
- export declare class PhpstanError extends Error {
47
- }
48
26
  /** Uitkomst van `phpstan diagnose`: PHPStans eigen tekst, ongewijzigd. */
49
27
  export interface Diagnosis {
50
28
  readonly project: string;
@@ -116,39 +94,3 @@ export declare function analyse(project: ResolvedProject, options?: AnalyseOptio
116
94
  * fout zit in de serverconfiguratie en niet in de aanroep.
117
95
  */
118
96
  export declare function loadDefaultMemoryLimit(env?: NodeJS.ProcessEnv): string | undefined;
119
- /** Hoe een procesgroep op dit platform opgeruimd wordt. */
120
- export type KillPlan = {
121
- readonly kind: 'signaal';
122
- readonly target: number;
123
- readonly signal: NodeJS.Signals;
124
- } | {
125
- readonly kind: 'commando';
126
- readonly command: string;
127
- readonly args: readonly string[];
128
- };
129
- /**
130
- * Bepaalt hoe de procesgroep van `pid` gedood wordt. Als plan teruggegeven en niet
131
- * meteen uitgevoerd, want anders is de Windows-tak niet te testen op een machine
132
- * waar je hem niet kunt uitvoeren — en juist die tak was stuk.
133
- */
134
- export declare function planKill(pid: number, signal: NodeJS.Signals, platform?: NodeJS.Platform): KillPlan;
135
- /**
136
- * Of een mislukte kill het melden waard is. `ESRCH` betekent dat de groep al weg
137
- * is — de race tussen de timer en deze aanroep, en precies de gewenste uitkomst.
138
- * Alles anders wél melden: de vorige versie slikte élke fout en verborg daarmee dat
139
- * een negatieve pid op Windows niet eens bestaat.
140
- */
141
- export declare function isReportableKillError(error: unknown): boolean;
142
- /**
143
- * Haalt uit stderr wat het model moet weten bij een gelúkte analyse. Dit werd eerder
144
- * helemaal weggegooid zodra de JSON parseerde — en juist daar staat PHPStans
145
- * "Result is incomplete because of severe errors.": geldige JSON die het project niet
146
- * volledig dekt. Zonder deze regels leest een model een schone uitslag die dat niet is.
147
- */
148
- export declare function collectWarnings(stderr: string): string[];
149
- /**
150
- * Leest hoeveel analyses tegelijk mogen draaien. Een onbruikbare waarde wordt
151
- * geweigerd en niet stil vervangen door de standaard — net als bij de
152
- * geheugenlimiet: wie dit zet, heeft er iets mee bedoeld.
153
- */
154
- export declare function loadMaxParallel(env?: NodeJS.ProcessEnv): number;
package/dist/phpstan.js CHANGED
@@ -1,26 +1,19 @@
1
- import { spawn } from 'node:child_process';
2
- import { z } from 'zod';
3
- import { tmpDirEnv } from './tmpdir.js';
1
+ import { PhpstanError } from './phpstan/error.js';
2
+ import { collectWarnings, toResult, tryParse } from './phpstan/output.js';
3
+ import { execute } from './phpstan/process.js';
4
+ import { enqueue, throwIfAborted, withSlot } from './phpstan/queue.js';
5
+ export { collectWarnings } from './phpstan/output.js';
6
+ export { isReportableKillError, planKill } from './phpstan/process.js';
7
+ export { MAX_PARALLEL_ENV_VAR, loadMaxParallel } from './phpstan/queue.js';
8
+ export { PhpstanError } from './phpstan/error.js';
4
9
  /** Standaardtijd waarna een analyse wordt afgebroken. */
5
10
  export const DEFAULT_TIMEOUT_MS = 300_000;
6
11
  /** Env-variabele met de `--memory-limit` voor aanroepen die er zelf geen meegeven. */
7
12
  export const MEMORY_LIMIT_ENV_VAR = 'PHPSTAN_MCP_MEMORY_LIMIT';
8
- /** Env-variabele met het aantal analyses dat tegelijk mag draaien. */
9
- export const MAX_PARALLEL_ENV_VAR = 'PHPSTAN_MCP_MAX_PARALLEL';
10
- /**
11
- * Twee tegelijk. De queue per project bestond al voor de resultcache, maar over
12
- * projecten heen begrensde niets: een model dat na list_projects tien projecten
13
- * aanroept, start tien PHPStan-processen die elk hun eigen parallelle workers
14
- * opzetten — en met een geheugenlimiet van 2G is dat tien keer dat plafond.
15
- */
16
- const DEFAULT_MAX_PARALLEL = 2;
17
13
  // PHPStans eigen vorm: bytes als getal, optioneel met K, M of G, of -1 voor
18
14
  // onbeperkt. Een neon-parameter bestaat er niet voor en PHPStan kent er ook geen
19
15
  // eigen env-variabele voor, dus dit is de enige plek om het blijvend vast te leggen.
20
16
  const MEMORY_LIMIT_PATTERN = /^(-1|\d+[KMG]?)$/i;
21
- /** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
22
- export class PhpstanError extends Error {
23
- }
24
17
  /**
25
18
  * Leegt PHPStans resultcache voor dit project.
26
19
  *
@@ -220,219 +213,6 @@ function targets(project, options) {
220
213
  }
221
214
  return paths;
222
215
  }
223
- /** Hoe lang een gedode procesgroep de tijd krijgt voordat SIGKILL volgt. */
224
- const KILL_GRACE_MS = 5_000;
225
- /**
226
- * Start PHPStan zonder shell. Bewust spawn en niet execFile: die laatste kapt de
227
- * output af op maxBuffer (1 MB), en de JSON van een groot project gaat daar
228
- * ruim overheen.
229
- *
230
- * `detached: true` maakt het proces leider van een eigen procesgroep, zodat een
231
- * timeout de héle groep kan doden. Zonder dat blijven PHPStans parallelle workers
232
- * na een timeout gewoon doorrekenen.
233
- */
234
- function execute(binary, args, cwd, timeoutMs, signal) {
235
- return new Promise((resolve) => {
236
- // Geen `timeout`-optie van spawn: die doodt alleen het proces zelf.
237
- const child = spawn(binary, args, {
238
- cwd,
239
- shell: false,
240
- detached: true,
241
- // PAO_DISABLE hoort bij --no-progress en --no-ansi: allemaal om PHPStans
242
- // eigen, machineleesbare uitvoer te krijgen. laravel/pao hangt zich via
243
- // autoload.files in de autoloader van het project, ziet aan variabelen als
244
- // CLAUDECODE dat er een agent draait, en vervangt de uitvoer dan door zijn
245
- // eigen formaat ({"tool":"phpstan","result":"passed"}). Dat parseert hier
246
- // niet, dus zonder deze regel is zo'n project onanalyseerbaar — en de server
247
- // erft die agent-variabelen juist altijd, want de client start hem.
248
- //
249
- // De tmpdir-variabelen komen uit de projectroot (die is hier de cwd), zodat
250
- // elk project zijn eigen resultcache houdt.
251
- env: { ...process.env, PAO_DISABLE: '1', ...tmpDirEnv(cwd) },
252
- });
253
- const stdout = [];
254
- const stderr = [];
255
- let spawnError = null;
256
- child.stdout.on('data', (chunk) => stdout.push(chunk));
257
- child.stderr.on('data', (chunk) => stderr.push(chunk));
258
- child.on('error', (error) => {
259
- spawnError = error;
260
- });
261
- const timers = [];
262
- const stopTimers = () => timers.forEach((timer) => { clearTimeout(timer); });
263
- let reason = null;
264
- // Timeout en annulering ruimen op dezelfde manier op; alleen de reden verschilt,
265
- // en die bepaalt straks welke uitleg het model krijgt.
266
- const stop = (why) => {
267
- reason ??= why;
268
- killGroup(child.pid, 'SIGTERM');
269
- // Wie op SIGTERM niet reageert, krijgt alsnog SIGKILL.
270
- timers.push(setTimeout(() => { killGroup(child.pid, 'SIGKILL'); }, KILL_GRACE_MS));
271
- };
272
- timers.push(setTimeout(() => { stop('timeout'); }, timeoutMs));
273
- const onAbort = () => { stop('geannuleerd'); };
274
- signal?.addEventListener('abort', onAbort, { once: true });
275
- let settled = false;
276
- const finish = (code, stopSignal) => {
277
- if (settled)
278
- return;
279
- settled = true;
280
- stopTimers();
281
- // Listener opruimen: het signaal van een verzoek kan langer leven dan deze
282
- // run, en een achterblijvende listener houdt het proces vast.
283
- signal?.removeEventListener('abort', onAbort);
284
- resolve({
285
- code,
286
- signal: stopSignal,
287
- reason,
288
- stdout: Buffer.concat(stdout).toString('utf8'),
289
- stderr: Buffer.concat(stderr).toString('utf8'),
290
- spawnError,
291
- });
292
- };
293
- // Normaal wachten we op 'close': dan is alle output binnen.
294
- child.on('close', finish);
295
- // Maar bij een timeout wordt alleen het proces zelf gedood, terwijl zijn
296
- // kleinkinderen — PHPStan draait parallelle workers — de pipes openhouden.
297
- // 'close' komt dan pas als die klaar zijn, en dan is de timeout geen timeout
298
- // meer. Zodra het proces zelf door een signaal is gestopt, heeft wachten op
299
- // meer output geen zin.
300
- child.on('exit', (code, exitSignal) => {
301
- if (exitSignal !== null)
302
- finish(code, exitSignal);
303
- });
304
- });
305
- }
306
- /**
307
- * Bepaalt hoe de procesgroep van `pid` gedood wordt. Als plan teruggegeven en niet
308
- * meteen uitgevoerd, want anders is de Windows-tak niet te testen op een machine
309
- * waar je hem niet kunt uitvoeren — en juist die tak was stuk.
310
- */
311
- export function planKill(pid, signal, platform = process.platform) {
312
- // Een negatieve pid als groeps-id is POSIX; op Windows bestaat dat niet en
313
- // gooit process.kill. `taskkill /T` neemt de kinderen mee, `/F` forceert.
314
- // Windows heeft geen SIGTERM-equivalent, dus de vriendelijke eerste stap valt
315
- // daar weg; de tweede aanroep treft dan een al verdwenen boom, en dat is
316
- // onschadelijk (exit 128, net als ESRCH hieronder).
317
- if (platform === 'win32') {
318
- return { kind: 'commando', command: 'taskkill', args: ['/T', '/F', '/PID', String(pid)] };
319
- }
320
- // Het minteken maakt van het pid een groeps-id; dat werkt alleen omdat het
321
- // proces met `detached` is gestart.
322
- return { kind: 'signaal', target: -pid, signal };
323
- }
324
- /** Exit code van taskkill als het proces er al niet meer is. */
325
- const TASKKILL_NOT_FOUND = 128;
326
- /** Doodt de hele procesgroep van `pid`, op de manier die dit platform kent. */
327
- function killGroup(pid, signal) {
328
- if (pid === undefined)
329
- return;
330
- const plan = planKill(pid, signal);
331
- if (plan.kind === 'commando') {
332
- // Fire-and-forget: dit loopt in een timer en mag de event loop niet blokkeren.
333
- const killer = spawn(plan.command, [...plan.args], { shell: false, stdio: 'ignore' });
334
- killer.on('error', (error) => { reportKillFailure(pid, error); });
335
- killer.on('exit', (code) => {
336
- if (code !== 0 && code !== TASKKILL_NOT_FOUND) {
337
- reportKillFailure(pid, new Error(`${plan.command} gaf exit code ${String(code)}`));
338
- }
339
- });
340
- return;
341
- }
342
- try {
343
- process.kill(plan.target, plan.signal);
344
- }
345
- catch (error) {
346
- if (isReportableKillError(error))
347
- reportKillFailure(pid, error);
348
- }
349
- }
350
- /**
351
- * Of een mislukte kill het melden waard is. `ESRCH` betekent dat de groep al weg
352
- * is — de race tussen de timer en deze aanroep, en precies de gewenste uitkomst.
353
- * Alles anders wél melden: de vorige versie slikte élke fout en verborg daarmee dat
354
- * een negatieve pid op Windows niet eens bestaat.
355
- */
356
- export function isReportableKillError(error) {
357
- return error?.code !== 'ESRCH';
358
- }
359
- /**
360
- * Meldt dat het opruimen niet gelukt is. Naar stderr, want bij stdio-transport is
361
- * stdout het protocol — en niet gooien: dit loopt in een timer, waar een exception
362
- * de hele server omhaalt.
363
- */
364
- function reportKillFailure(pid, error) {
365
- const reason = error instanceof Error ? error.message : String(error);
366
- console.error(`phpstan-mcp kon procesgroep ${String(pid)} niet opruimen: ${reason}`);
367
- }
368
- const findingSchema = z.object({
369
- message: z.string(),
370
- line: z.number().nullable().optional(),
371
- identifier: z.string().nullable().optional(),
372
- tip: z.string().nullable().optional(),
373
- });
374
- const outputSchema = z.object({
375
- totals: z.object({ errors: z.number(), file_errors: z.number() }),
376
- files: z.record(z.string(), z.object({ messages: z.array(findingSchema) })),
377
- errors: z.array(z.string()),
378
- });
379
- function tryParse(stdout) {
380
- if (stdout.trim() === '')
381
- return null;
382
- let raw;
383
- try {
384
- raw = JSON.parse(stdout);
385
- }
386
- catch {
387
- return null;
388
- }
389
- // PHP codeert een lege associatieve array als [], niet als {}. Een project
390
- // zonder bevindingen levert dus "files": [] op, wat het schema anders afkeurt.
391
- if (typeof raw === 'object' && raw !== null && Array.isArray(raw.files)) {
392
- raw.files = {};
393
- }
394
- const parsed = outputSchema.safeParse(raw);
395
- return parsed.success ? parsed.data : null;
396
- }
397
- /**
398
- * Regels op stderr die geen waarschuwing zijn. Bewust een lijst van wat ongevaarlijk
399
- * is en niet van wat alarmerend is: PHPStan kan meldingen introduceren die we hier
400
- * niet kennen, en die stil laten vallen is precies de fout die dit moet voorkomen.
401
- */
402
- const HARMLESS_STDERR = [/^Note: /];
403
- /**
404
- * Haalt uit stderr wat het model moet weten bij een gelúkte analyse. Dit werd eerder
405
- * helemaal weggegooid zodra de JSON parseerde — en juist daar staat PHPStans
406
- * "Result is incomplete because of severe errors.": geldige JSON die het project niet
407
- * volledig dekt. Zonder deze regels leest een model een schone uitslag die dat niet is.
408
- */
409
- export function collectWarnings(stderr) {
410
- return stderr
411
- .split('\n')
412
- .map((line) => line.trim())
413
- .filter((line) => line !== '' && !HARMLESS_STDERR.some((pattern) => pattern.test(line)));
414
- }
415
- function toResult(project, output, warnings) {
416
- const findings = [];
417
- for (const [file, entry] of Object.entries(output.files)) {
418
- for (const message of entry.messages) {
419
- findings.push({
420
- file,
421
- line: message.line ?? null,
422
- message: message.message,
423
- identifier: message.identifier ?? null,
424
- tip: message.tip ?? null,
425
- });
426
- }
427
- }
428
- return {
429
- project,
430
- findings,
431
- generalErrors: output.errors,
432
- warnings,
433
- totals: { fileErrors: output.totals.file_errors, generalErrors: output.totals.errors },
434
- };
435
- }
436
216
  /** Vertaalt een run die geen bruikbare JSON opleverde naar iets waar je wat mee kunt. */
437
217
  function describeFailure(project, execution) {
438
218
  const details = (execution.stderr.trim() || execution.stdout.trim()).slice(0, 2000);
@@ -454,65 +234,4 @@ function describeFailure(project, execution) {
454
234
  return (`PHPStan gaf geen bruikbare JSON terug in ${project.path} (exit code ${execution.code ?? '?'}).\n\n` +
455
235
  (details === '' ? 'Geen output op stdout of stderr.' : details));
456
236
  }
457
- /**
458
- * Leest hoeveel analyses tegelijk mogen draaien. Een onbruikbare waarde wordt
459
- * geweigerd en niet stil vervangen door de standaard — net als bij de
460
- * geheugenlimiet: wie dit zet, heeft er iets mee bedoeld.
461
- */
462
- export function loadMaxParallel(env = process.env) {
463
- const configured = env[MAX_PARALLEL_ENV_VAR]?.trim();
464
- if (configured === undefined || configured === '')
465
- return DEFAULT_MAX_PARALLEL;
466
- const parsed = Number(configured);
467
- if (!Number.isInteger(parsed) || parsed < 1) {
468
- throw new PhpstanError(`${MAX_PARALLEL_ENV_VAR} staat op "${configured}", en dat is geen geheel getal van 1 of hoger. ` +
469
- `Laat hem weg voor de standaard (${String(DEFAULT_MAX_PARALLEL)}).`);
470
- }
471
- return parsed;
472
- }
473
- /** Hoeveel analyses er nu draaien, en wie op een vrij slot wacht. */
474
- let running = 0;
475
- const waiting = [];
476
- /**
477
- * Laat `task` pas draaien als er een slot vrij is. Dit zit *binnen* de queue per
478
- * project en niet ervoor: de queue gaat over PHPStans resultcache in dat ene
479
- * project, dit over de machine als geheel.
480
- */
481
- async function withSlot(task) {
482
- // Per poging opnieuw uitlezen, zodat een gewijzigde omgeving meteen geldt en de
483
- // grens niet vastligt op wat er bij het opstarten stond.
484
- while (running >= loadMaxParallel()) {
485
- await new Promise((resolve) => waiting.push(resolve));
486
- }
487
- running += 1;
488
- try {
489
- return await task();
490
- }
491
- finally {
492
- running -= 1;
493
- // Precies één wachtende wekken; die controleert de grens zelf opnieuw.
494
- waiting.shift()?.();
495
- }
496
- }
497
- /** Stopt vóór er iets gestart wordt als de aanroeper het verzoek al heeft afgebroken. */
498
- function throwIfAborted(project, signal) {
499
- if (signal?.aborted === true) {
500
- throw new PhpstanError(`De analyse van ${project} is niet gestart: het verzoek was al geannuleerd.`);
501
- }
502
- }
503
- /** Lopende analyses per projectpad, zodat aanroepen per project op volgorde gaan. */
504
- const queues = new Map();
505
- function enqueue(key, task) {
506
- const previous = queues.get(key) ?? Promise.resolve();
507
- // .catch vóór .then: een mislukte vorige analyse mag de volgende niet blokkeren.
508
- const result = previous.then(task, task);
509
- const tail = result.catch(() => undefined);
510
- queues.set(key, tail);
511
- void tail.then(() => {
512
- // Alleen opruimen als er ondertussen niets nieuws achteraan is gezet.
513
- if (queues.get(key) === tail)
514
- queues.delete(key);
515
- });
516
- return result;
517
- }
518
237
  //# sourceMappingURL=phpstan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"phpstan.js","sourceRoot":"","sources":["../src/phpstan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phpstan.js","sourceRoot":"","sources":["../src/phpstan.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,11 +1,5 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { Root } from './roots.js';
3
- /**
4
- * Versie van de server zoals gemeld in de MCP-handshake. Spiegelt `version` in
5
- * package.json; die kan hier niet zomaar geïmporteerd worden, want een JSON-import
6
- * verhuist bij het bouwen mee naar dist/ en wijst dan naar het verkeerde bestand.
7
- */
8
- export declare const VERSION = "0.7.1";
9
3
  /**
10
4
  * Bouwt de MCP-server met de tools die op deze set roots van toepassing zijn.
11
5
  * De roots worden één keer bij het opstarten ingelezen: ze komen uit de
package/dist/server.js CHANGED
@@ -1,11 +1,6 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { registerTools } from './tools.js';
3
- /**
4
- * Versie van de server zoals gemeld in de MCP-handshake. Spiegelt `version` in
5
- * package.json; die kan hier niet zomaar geïmporteerd worden, want een JSON-import
6
- * verhuist bij het bouwen mee naar dist/ en wijst dan naar het verkeerde bestand.
7
- */
8
- export const VERSION = '0.7.1';
3
+ import { VERSION } from './version.js';
9
4
  /**
10
5
  * Bouwt de MCP-server met de tools die op deze set roots van toepassing zijn.
11
6
  * De roots worden één keer bij het opstarten ingelezen: ze komen uit de
@@ -17,6 +12,10 @@ export const VERSION = '0.7.1';
17
12
  */
18
13
  export function createServer(roots) {
19
14
  const server = new McpServer({ name: 'phpstan-mcp', version: VERSION }, {
15
+ // De SDK registreert de logging/setLevel-handler zelf zodra deze capability
16
+ // aan staat, en filtert de meldingen op het niveau dat de client kiest. Dit
17
+ // is dus geen belofte zonder handler — de valkuil die bij `tools` wél geldt.
18
+ capabilities: { logging: {} },
20
19
  instructions: 'Statische analyse van PHP-projecten met PHPStan. Elke tool verwacht een ' +
21
20
  'expliciet `project`-pad; de server heeft geen "huidig project". Roep ' +
22
21
  'list_projects aan om te zien welke paden geldig zijn.',
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,EACzC;QACE,YAAY,EACV,0EAA0E;YAC1E,uEAAuE;YACvE,uDAAuD;KAC1D,CACF,CAAC;IAEF,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,EACzC;QACE,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7B,YAAY,EACV,0EAA0E;YAC1E,uEAAuE;YACvE,uDAAuD;KAC1D,CACF,CAAC;IAEF,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Root } from '../roots.js';
3
+ /** Hangt `analyse_project` aan de server: PHPStan over (een deel van) een project. */
4
+ export declare function registerAnalyseProject(server: McpServer, roots: Root[]): void;
5
+ /** Hangt `analyse_changed` aan de server: alleen wat git gewijzigd heeft. */
6
+ export declare function registerAnalyseChanged(server: McpServer, roots: Root[]): void;
7
+ /** Hangt `analyse_file` aan de server: één bestand of map binnen een project. */
8
+ export declare function registerAnalyseFile(server: McpServer, roots: Root[]): void;
@@ -0,0 +1,131 @@
1
+ import { z } from 'zod';
2
+ import { DEFAULT_BASE, changedPhpFiles } from '../changed.js';
3
+ import { displayPath } from '../report.js';
4
+ import { resolveWithin } from '../project.js';
5
+ import { analysisShape, common, configArgument, projectArgument, readOnly, runAnalysis, window, windowShape, } from './shared.js';
6
+ /** Hangt `analyse_project` aan de server: PHPStan over (een deel van) een project. */
7
+ export function registerAnalyseProject(server, roots) {
8
+ server.registerTool('analyse_project', {
9
+ title: 'Project analyseren',
10
+ description: 'Draait PHPStan over (een deel van) een project en geeft de bevindingen terug. ' +
11
+ 'Zonder `paths` wordt geanalyseerd wat in phpstan.neon staat.',
12
+ inputSchema: {
13
+ project: projectArgument,
14
+ paths: z
15
+ .array(z.string())
16
+ .optional()
17
+ .describe('Paden binnen het project; leeg betekent: volg de configuratie'),
18
+ level: z.string().optional().describe('Level-override, 0 t/m 10 of "max"'),
19
+ config: configArgument,
20
+ memoryLimit: z
21
+ .string()
22
+ .optional()
23
+ .describe('Bijv. "1G", als PHPStan op de PHP-limiet klapt; overrulet de serverstandaard'),
24
+ timeoutSeconds: z.number().int().positive().max(1800).optional(),
25
+ ...windowShape,
26
+ },
27
+ outputSchema: analysisShape,
28
+ annotations: readOnly(),
29
+ }, async (args, extra) => runAnalysis(server, roots, args.project, (resolved) => ({
30
+ options: {
31
+ // Elk pad door resolveWithin, ook al komt het rechtstreeks uit de
32
+ // aanroep. Ongefilterd doorgeven was op twee manieren mis: een pad
33
+ // buiten het project liet PHPStan bestanden lezen waar de whitelist
34
+ // juist over gaat, en een "pad" als --generate-baseline=x werd door
35
+ // PHPStan als vlag gelezen en schreef dat bestand echt weg
36
+ // (nagemeten). Na resolveWithin is elk pad absoluut en bestaat het,
37
+ // dus het kan geen vlag meer zijn.
38
+ ...(args.paths === undefined
39
+ ? {}
40
+ : { paths: args.paths.map((path) => resolveWithin(resolved, path)) }),
41
+ ...common(resolved, args),
42
+ },
43
+ }), window(args), extra.signal));
44
+ }
45
+ /** Hangt `analyse_changed` aan de server: alleen wat git gewijzigd heeft. */
46
+ export function registerAnalyseChanged(server, roots) {
47
+ server.registerTool('analyse_changed', {
48
+ title: 'Gewijzigde bestanden analyseren',
49
+ description: 'Draait PHPStan over de PHP-bestanden die in dit project gewijzigd zijn volgens git, ' +
50
+ 'inclusief bestanden die nog niet toegevoegd zijn. Bedoeld om te zien of een eigen ' +
51
+ 'wijziging fouten oplevert, zonder het hele project door te rekenen. Vergelijkt ' +
52
+ `standaard met ${DEFAULT_BASE}; geef \`base\` mee (bijv. "main") voor de hele branch.`,
53
+ inputSchema: {
54
+ project: projectArgument,
55
+ base: z
56
+ .string()
57
+ .optional()
58
+ .describe(`Commit, branch of tag om tegen te vergelijken (standaard ${DEFAULT_BASE})`),
59
+ staged: z
60
+ .boolean()
61
+ .optional()
62
+ .describe('Alleen wat gestaged is (git diff --cached), voor een check vóór een commit'),
63
+ level: z.string().optional().describe('Level-override, 0 t/m 10 of "max"'),
64
+ config: configArgument,
65
+ memoryLimit: z.string().optional(),
66
+ timeoutSeconds: z.number().int().positive().max(1800).optional(),
67
+ ...windowShape,
68
+ },
69
+ outputSchema: analysisShape,
70
+ annotations: readOnly(),
71
+ }, async (args, extra) => runAnalysis(server, roots, args.project, async (resolved) => {
72
+ const changed = await changedPhpFiles(resolved, args.base, args.staged);
73
+ if (changed.files.length === 0) {
74
+ return { nothingToDo: describeNothingChanged(changed) };
75
+ }
76
+ return {
77
+ options: { paths: [...changed.files], ...common(resolved, args) },
78
+ heading: describeChanged(resolved, changed),
79
+ };
80
+ }, window(args), extra.signal));
81
+ }
82
+ /** Waarom er niets geanalyseerd is; de overgeslagen paden horen daar bij. */
83
+ function describeNothingChanged(changed) {
84
+ const wat = changed.staged ? 'gestagede' : 'gewijzigde';
85
+ const lines = [`Geen ${wat} PHP-bestanden ten opzichte van ${changed.base}.`];
86
+ if (changed.skipped.length > 0)
87
+ lines.push('', ...skippedLines(changed));
88
+ return lines.join('\n');
89
+ }
90
+ /** Wat er geanalyseerd is, zodat zichtbaar is waarop het rapport eronder betrekking heeft. */
91
+ function describeChanged(resolved, changed) {
92
+ const waar = changed.staged ? 'gestaged ten opzichte van' : 'gewijzigd ten opzichte van';
93
+ const lines = [
94
+ `${String(changed.files.length)} PHP-bestand(en) ${waar} ${changed.base}:`,
95
+ ...changed.files.map((file) => ` ${displayPath(resolved.path, file)}`),
96
+ ];
97
+ if (changed.skipped.length > 0)
98
+ lines.push('', ...skippedLines(changed));
99
+ return lines.join('\n');
100
+ }
101
+ function skippedLines(changed) {
102
+ return [
103
+ 'Overgeslagen, dus niet meegenomen in dit rapport:',
104
+ ...changed.skipped.map((entry) => ` ${entry.path}: ${entry.reason}`),
105
+ ];
106
+ }
107
+ /** Hangt `analyse_file` aan de server: één bestand of map binnen een project. */
108
+ export function registerAnalyseFile(server, roots) {
109
+ server.registerTool('analyse_file', {
110
+ title: 'Bestand of map analyseren',
111
+ description: 'Draait PHPStan over één bestand of map binnen een project. Het pad mag relatief ' +
112
+ 'aan de projectroot zijn of absoluut, maar moet binnen het project liggen.',
113
+ inputSchema: {
114
+ project: projectArgument,
115
+ path: z.string().describe('Bestand of map binnen het project, bijv. "app/Models/User.php"'),
116
+ level: z.string().optional().describe('Level-override, 0 t/m 10 of "max"'),
117
+ config: configArgument,
118
+ memoryLimit: z.string().optional(),
119
+ timeoutSeconds: z.number().int().positive().max(1800).optional(),
120
+ ...windowShape,
121
+ },
122
+ outputSchema: analysisShape,
123
+ annotations: readOnly(),
124
+ }, async (args, extra) => runAnalysis(server, roots, args.project, (resolved) => ({
125
+ options: {
126
+ paths: [resolveWithin(resolved, args.path)],
127
+ ...common(resolved, args),
128
+ },
129
+ }), window(args), extra.signal));
130
+ }
131
+ //# sourceMappingURL=analysis.js.map