phpstan-mcp-mx 0.13.0 → 0.14.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 (50) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +113 -6
  3. package/dist/baseline.d.ts +19 -0
  4. package/dist/baseline.js +44 -11
  5. package/dist/baseline.js.map +1 -1
  6. package/dist/config.d.ts +3 -2
  7. package/dist/config.js.map +1 -1
  8. package/dist/defaults.d.ts +37 -0
  9. package/dist/defaults.js +100 -0
  10. package/dist/defaults.js.map +1 -0
  11. package/dist/failure.d.ts +1 -1
  12. package/dist/failure.js.map +1 -1
  13. package/dist/index.js +17 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/phpstan.js +58 -19
  16. package/dist/phpstan.js.map +1 -1
  17. package/dist/project.d.ts +10 -1
  18. package/dist/project.js +28 -1
  19. package/dist/project.js.map +1 -1
  20. package/dist/report.d.ts +15 -2
  21. package/dist/report.js +12 -5
  22. package/dist/report.js.map +1 -1
  23. package/dist/runs.d.ts +59 -0
  24. package/dist/runs.js +78 -0
  25. package/dist/runs.js.map +1 -0
  26. package/dist/schema-dialect.d.ts +30 -0
  27. package/dist/schema-dialect.js +57 -0
  28. package/dist/schema-dialect.js.map +1 -0
  29. package/dist/server.js +5 -0
  30. package/dist/server.js.map +1 -1
  31. package/dist/tools/analysis.d.ts +4 -3
  32. package/dist/tools/analysis.js +26 -6
  33. package/dist/tools/analysis.js.map +1 -1
  34. package/dist/tools/inspect.d.ts +2 -0
  35. package/dist/tools/inspect.js +140 -1
  36. package/dist/tools/inspect.js.map +1 -1
  37. package/dist/tools/prompts.d.ts +8 -1
  38. package/dist/tools/prompts.js +79 -2
  39. package/dist/tools/prompts.js.map +1 -1
  40. package/dist/tools/shared.d.ts +14 -1
  41. package/dist/tools/shared.js +51 -5
  42. package/dist/tools/shared.js.map +1 -1
  43. package/dist/tools.js +9 -4
  44. package/dist/tools.js.map +1 -1
  45. package/dist/unmatched.d.ts +91 -0
  46. package/dist/unmatched.js +309 -0
  47. package/dist/unmatched.js.map +1 -0
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,21 @@ Alle noemenswaardige wijzigingen per versie. Vanaf 0.10.0 gegenereerd door
4
4
  semantic-release uit de commit-historie; de versies daarvoor zijn met de hand
5
5
  geschreven.
6
6
 
7
+ # [0.14.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.13.0...v0.14.0) (2026-09-10)
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * laat $schema weg uit de tool-schema's ([96be748](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/96be748cd7d738e485f6de1960c3c3e0919c7579))
13
+
14
+
15
+ ### Features
16
+
17
+ * lees de volgende pagina uit hetzelfde resultaat met runId ([caee99f](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/caee99f7fb645acf267b4748ecdaee1cb936e3cb))
18
+ * prompt die laat zien wat een level hoger kost ([94cad76](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/94cad761b6fc97a46ef47cbc972a2f2522bb32db))
19
+ * spoor verouderde negeerregels op met unmatched_ignores ([435db54](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/435db540f1b132552805a7a897db52fced1b470c))
20
+ * standaarden per project voor geheugen, timeout en config ([053335b](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/053335bb97a93f7b99f5fc21b07489bff4f11c68))
21
+
7
22
  # [0.13.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.12.0...v0.13.0) (2026-09-10)
8
23
 
9
24
 
package/README.md CHANGED
@@ -194,12 +194,15 @@ pad in `PHPSTAN_MCP_CONFIG`):
194
194
  "command": ["docker", "exec", "-w", "/var/www/html", "admin-app"],
195
195
  "workdir": "/var/www/html"
196
196
  }
197
+ },
198
+ "projects": {
199
+ "/Users/jij/projecten/shop": { "memoryLimit": "4G", "timeoutSeconds": 900 }
197
200
  }
198
201
  }
199
202
  ```
200
203
 
201
204
  Daarmee is je MCP-registratie één regel zonder `--env`, en staat de configuratie op één plek
202
- in plaats van verdeeld over zes variabelen.
205
+ in plaats van verdeeld over zeven variabelen.
203
206
 
204
207
  Een bestand dat er niet is, is geen fout: dan geldt alleen de omgeving. Een bestand dat er
205
208
  wél is maar niet klopt, laat de server niet starten — dan heeft iemand iets bedoeld wat
@@ -325,6 +328,41 @@ Dit is de enige manier om het bij de server vast te leggen. PHPStan kent er geen
325
328
  eigen env-variabele; het alternatief is `memory_limit` in je `php.ini`, en dat geldt dan
326
329
  voor élke PHP-CLI op je machine.
327
330
 
331
+ Heeft één project meer nodig dan de rest, zet het dan bij dat project in
332
+ `PHPSTAN_MCP_PROJECTS` in plaats van deze waarde voor iedereen op te hogen — met
333
+ `PHPSTAN_MCP_MAX_PARALLEL=2` is een machinebrede 4G twee keer 4G.
334
+
335
+ ### `PHPSTAN_MCP_PROJECTS` (optioneel)
336
+
337
+ Standaarden voor één project, als JSON — of onder `projects` in het configbestand:
338
+
339
+ ```json
340
+ {
341
+ "/Users/jij/projecten/shop": {
342
+ "memoryLimit": "4G",
343
+ "timeoutSeconds": 900,
344
+ "config": "phpstan-ci.neon"
345
+ }
346
+ }
347
+ ```
348
+
349
+ | Sleutel | Betekenis |
350
+ | --- | --- |
351
+ | `memoryLimit` | `--memory-limit` voor dit project, in dezelfde vorm als `PHPSTAN_MCP_MEMORY_LIMIT` |
352
+ | `timeoutSeconds` | timeout voor dit project, van 1 tot en met 1800 |
353
+ | `config` | configbestand binnen het project, als PHPStan dat niet zelf vindt |
354
+
355
+ De volgorde is steeds dezelfde: wat de aanroep meegeeft, dan de standaard van het project,
356
+ dan die van de hele server. Een standaard is dus geen plafond.
357
+
358
+ `config` gaat door dezelfde padcontrole als een `config` uit een aanroep en moet binnen het
359
+ project liggen; een neon kan PHP-code laten uitvoeren. Hij telt overal als dé config van het
360
+ project: bij de melding dat er een baseline meedoet en bij `unmatched_ignores`.
361
+
362
+ Een onbekende sleutel wordt geweigerd, niet genegeerd: `memorylimit` met een kleine l zou
363
+ anders stil niets doen. `list_projects` en `server_config` tonen welke standaarden er gelden,
364
+ en een kapotte waarde staat daar als probleem bij — de lijst met projecten blijft werken.
365
+
328
366
  ## Tools
329
367
 
330
368
  Elke tool verwacht een expliciet `project`-pad. De server heeft geen "huidig project": dat
@@ -375,10 +413,17 @@ antwoord volloopt met wat er al jaren stond.
375
413
  | `project` | ja | absoluut pad naar de projectroot |
376
414
  | `base` | nee | commit, branch of tag om tegen te vergelijken (standaard `HEAD`) |
377
415
  | `staged` | nee | alleen wat gestaged is (`git diff --cached`), voor een check vóór een commit |
416
+ | `onlyChangedLines` | nee | alleen bevindingen op regels die gewijzigd zijn |
378
417
 
379
418
  Verder dezelfde argumenten als `analyse_project`, op `paths` na. Met `base=main` krijg je de
380
419
  hele branch in plaats van alleen je onopgeslagen werk.
381
420
 
421
+ Elke bevinding zegt met `onChangedLine` of hij op een gewijzigde regel staat; in de tekst
422
+ staat er een `+` voor. Een gewijzigd bestand bevat vaak ook fouten die er al stonden, en
423
+ zonder dat onderscheid ga je die repareren of stop je te vroeg. Let wel: een bevinding op een
424
+ ongewijzigde regel kan nog steeds uit je wijziging volgen — een aangepaste signatuur geeft
425
+ fouten bij de aanroepen, en die regels heb je niet aangeraakt.
426
+
382
427
  Twee dingen die het meeneemt en die je makkelijk mist: **nieuwe bestanden die nog niet aan
383
428
  git toegevoegd zijn** (`git diff` kent die niet, dus er is een tweede uitvraag voor) en
384
429
  **niets uit `resources/views`** — een `.blade.php` eindigt op `.php`, maar is een template
@@ -415,8 +460,11 @@ clientlog, onzichtbaar voor het model. Een geweigerde instelling wordt gemeld in
415
460
  weggelaten: staat `PHPSTAN_MCP_MAX_PARALLEL` op onzin, dan is dat veld `null` en staat de
416
461
  reden onder "Geweigerde instellingen", terwijl de rest gewoon leesbaar blijft.
417
462
 
418
- Let op wat er *niet* in staat: dit is een vaste lijst van zes instellingen en geen
419
- doorgeefluik naar de omgeving. In dezelfde omgeving zitten tokens; die horen niet in een
463
+ Heeft een project eigen standaarden (`PHPSTAN_MCP_PROJECTS`), dan staan die er per project
464
+ onder.
465
+
466
+ Let op wat er *niet* in staat: dit is een vaste lijst van instellingen en geen doorgeefluik
467
+ naar de omgeving. In dezelfde omgeving zitten tokens; die horen niet in een
420
468
  toolantwoord.
421
469
 
422
470
  ### `diagnose_project`
@@ -456,6 +504,36 @@ Let op het onderscheid: wat hier in staat is precies wat `analyse_project` *niet
456
504
  project dat zijn baseline includet, rapporteert alleen de fouten die er nieuw bij komen —
457
505
  die vergelijking maakt PHPStan zelf al.
458
506
 
507
+ ### `unmatched_ignores`
508
+
509
+ Zoekt de negeerregels die niets meer doen: baseline-regels voor fouten die allang opgelost
510
+ zijn, en regels waarvan de `count` hoger is dan wat er nog voorkomt. Veel projecten zetten
511
+ `reportUnmatchedIgnoredErrors: false`, en dan groeit dat ongemerkt — op één project bleken
512
+ 554 van de 2116 baseline-regels niets meer te matchen.
513
+
514
+ | Argument | Verplicht | Betekenis |
515
+ | --- | --- | --- |
516
+ | `project` | ja | absoluut pad naar de projectroot |
517
+ | `memoryLimit` | nee | dit is een volledige analyse, dus die kan meer nodig hebben |
518
+ | `timeoutSeconds` | nee | standaard 300 |
519
+ | `offset` / `limit` | nee | welk deel van de regels je terugkrijgt |
520
+
521
+ Dit is een volledige analyse, met een tijdelijke config die die van het project includet en
522
+ de vlag omzet. Die config staat in de tijdelijke map van de server en niet in het project,
523
+ dus er verandert niets aan je repository. PHPStans resultcache blijft bruikbaar: de vlag
524
+ verandert niets aan wat er geanalyseerd wordt, dus de volgende gewone analyse is net zo snel.
525
+
526
+ Per regel staat erbij of hij uit de baseline komt. Patronen zonder pad komen apart; die staan
527
+ in `ignoreErrors` van je config of van een config die een pakket meebrengt, en daar helpt een
528
+ nieuwe baseline niet.
529
+
530
+ Er is bewust geen `level` en geen `paths`: op een ander niveau zijn het andere fouten, en bij
531
+ een deel van het project lijkt alles daarbuiten verouderd.
532
+
533
+ Werkt niet op een project met een eigen uitvoeringsomgeving (`PHPSTAN_MCP_RUNNERS`): de
534
+ tijdelijke config staat op de host en is in een container niet te zien. De tool zegt dat met
535
+ reden `unsupported_with_runner`.
536
+
459
537
  ### `generate_baseline` (alleen met schrijfrechten)
460
538
 
461
539
  Zet alle huidige fouten in een baseline, zodat een volgende analyse alleen meldt wat er nieuw
@@ -495,6 +573,21 @@ includes:
495
573
  - phpstan-baseline.neon
496
574
  ```
497
575
 
576
+ ## Prompts
577
+
578
+ Twee werkpatronen die alleen bestaande tools combineren. Een prompt en geen tool, omdat een
579
+ tool context kost in elke sessie en een prompt alleen als je hem kiest.
580
+
581
+ - **`phpstan_wijziging_nakijken`** — je eigen wijziging nakijken met `analyse_changed`,
582
+ beginnen bij de bevindingen op gewijzigde regels, en herhalen tot het schoon is (zonder
583
+ `runId`, anders zie je de uitslag van vóór je reparatie).
584
+ - **`phpstan_level_verhogen`** — wat een level hoger kost: twee tellingen met `limit: 1` en
585
+ het verschil per soort. Het level staat vaak in een gedeelde config in `vendor/`, en
586
+ `ignore.*`-bevindingen tellen niet mee: dat zijn inline `@phpstan-ignore`-regels die op een
587
+ ander level niets te negeren hebben.
588
+
589
+ Beide nemen een optioneel `project`; de tweede ook een doel-`level`.
590
+
498
591
  ## Als een tool mislukt
499
592
 
500
593
  Een mislukte aanroep geeft twee blokken terug: de melding in gewone taal, en een JSON-blok
@@ -515,8 +608,8 @@ met velden waarop je kunt sturen.
515
608
  lezen: `no_roots_configured`, `project_outside_roots`, `project_not_found`,
516
609
  `path_outside_project`, `path_not_found`, `phpstan_missing`, `config_missing`,
517
610
  `bootstrap_failed`, `baseline_unreadable`, `invalid_setting`, `memory_limit`, `timeout`,
518
- `cancelled`, `git_missing`, `not_a_git_repository`, `unknown_base`, `unusable_output` en
519
- `phpstan_failed`.
611
+ `cancelled`, `git_missing`, `not_a_git_repository`, `unknown_base`, `unsupported_with_runner`,
612
+ `unusable_output` en `phpstan_failed`.
520
613
 
521
614
  De velden staan bewust in `content` en niet in `structuredContent`: dat laatste wordt door
522
615
  MCP-clients gevalideerd tegen het schema van het *geslaagde* antwoord.
@@ -542,7 +635,21 @@ src/Support/Filters/DealFilters.php
542
635
  42 argument.type Parameter #1 $id expects int, string given.
543
636
  ```
544
637
 
545
- Bij meer resultaten eindigt de tekst met de letterlijke vervolgaanroep (`offset=50`).
638
+ Bij meer resultaten eindigt de tekst met de letterlijke vervolgaanroep:
639
+
640
+ ```
641
+ Nog 12 bevinding(en). Roep dezelfde tool opnieuw aan met offset=50 en runId="kX3v9aQp"; dan
642
+ komt de rest uit dit resultaat in plaats van uit een nieuwe analyse.
643
+ ```
644
+
645
+ Met die `runId` komt de volgende pagina uit hetzelfde resultaat. Zonder zou elke pagina een
646
+ nieuwe analyse zijn, en wie tussendoor een bestand aanpast krijgt dan pagina's met
647
+ verschillende totalen. Alleen `offset`, `limit`, `identifiers` en `onlyChangedLines` mogen
648
+ anders zijn. Hoort de `runId` bij andere argumenten, is hij verlopen (na tien minuten) of
649
+ onbekend, dan volgt een nieuwe analyse met een melding erbij in plaats van een fout.
650
+
651
+ Een pagina uit een eerder resultaat noemt hoe oud dat resultaat is. Analyseer na een
652
+ reparatie dus zónder `runId`: anders zie je de uitslag van vóór de reparatie.
546
653
 
547
654
  ### Annuleren
548
655
 
@@ -55,6 +55,25 @@ export declare function findBaselineFiles(project: ResolvedProject): string[];
55
55
  * op een naam in een comment of onder een andere sleutel.
56
56
  */
57
57
  export declare function describeIncludedBaseline(project: ResolvedProject): string | null;
58
+ /**
59
+ * De baseline-bestanden in de projectroot die de config van het project includeert.
60
+ * Leeg als er geen config is of als die niet te lezen is: dan doet er geen mee.
61
+ */
62
+ export declare function includedBaselineFiles(project: ResolvedProject): string[];
63
+ /** De entries uit de geïncludeerde baselines, met de bestanden die niet te lezen waren. */
64
+ export interface IncludedBaselines {
65
+ readonly files: readonly string[];
66
+ readonly entries: readonly BaselineEntry[];
67
+ /** Bestanden die wél meedoen maar waar deze parser niets uit haalt. */
68
+ readonly unreadable: readonly string[];
69
+ }
70
+ /**
71
+ * Leest de entries uit de baselines die meedoen. Een onleesbaar bestand gooit hier
72
+ * niet, anders dan bij summariseBaseline: wie dit aanroept heeft een analyse in
73
+ * handen die ook zonder de baseline bruikbaar is, en moet alleen weten dát hij
74
+ * niet kan zeggen wat eruit komt.
75
+ */
76
+ export declare function readIncludedBaselines(project: ResolvedProject): IncludedBaselines;
58
77
  /**
59
78
  * Leest een baseline-bestand uit.
60
79
  *
package/dist/baseline.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ToolFailure } from './failure.js';
2
2
  import { readFileSync, readdirSync } from 'node:fs';
3
- import { join } from 'node:path';
3
+ import { join, resolve } from 'node:path';
4
4
  /** Hoeveel regels de samenvattingslijsten hoogstens tonen. */
5
5
  const SUMMARY_ROWS = 15;
6
6
  /** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
@@ -38,16 +38,7 @@ export function findBaselineFiles(project) {
38
38
  * op een naam in een comment of onder een andere sleutel.
39
39
  */
40
40
  export function describeIncludedBaseline(project) {
41
- if (project.config === null)
42
- return null;
43
- let config;
44
- try {
45
- config = readFileSync(join(project.path, project.config), 'utf8');
46
- }
47
- catch {
48
- return null;
49
- }
50
- const included = findBaselineFiles(project).filter((file) => isIncludedIn(config, file));
41
+ const included = includedBaselineFiles(project);
51
42
  if (included.length === 0)
52
43
  return null;
53
44
  const namen = included.join(', ');
@@ -67,6 +58,48 @@ export function describeIncludedBaseline(project) {
67
58
  return (`${namen} wordt geïncludeerd: ${String(errors)} genegeerde fout(en) staan niet in dit ` +
68
59
  'rapport. Gebruik baseline_summary om te zien wat er in staat.');
69
60
  }
61
+ /**
62
+ * De baseline-bestanden in de projectroot die de config van het project includeert.
63
+ * Leeg als er geen config is of als die niet te lezen is: dan doet er geen mee.
64
+ */
65
+ export function includedBaselineFiles(project) {
66
+ if (project.config === null)
67
+ return [];
68
+ let config;
69
+ try {
70
+ config = readFileSync(resolve(project.path, project.config), 'utf8');
71
+ }
72
+ catch {
73
+ return [];
74
+ }
75
+ return findBaselineFiles(project).filter((file) => isIncludedIn(config, file));
76
+ }
77
+ /**
78
+ * Leest de entries uit de baselines die meedoen. Een onleesbaar bestand gooit hier
79
+ * niet, anders dan bij summariseBaseline: wie dit aanroept heeft een analyse in
80
+ * handen die ook zonder de baseline bruikbaar is, en moet alleen weten dát hij
81
+ * niet kan zeggen wat eruit komt.
82
+ */
83
+ export function readIncludedBaselines(project) {
84
+ const files = includedBaselineFiles(project);
85
+ const entries = [];
86
+ const unreadable = [];
87
+ for (const file of files) {
88
+ let content;
89
+ try {
90
+ content = readFileSync(join(project.path, file), 'utf8');
91
+ }
92
+ catch {
93
+ unreadable.push(file);
94
+ continue;
95
+ }
96
+ const parsed = parseBaseline(content);
97
+ if (parsed.length === 0 && content.includes('ignoreErrors'))
98
+ unreadable.push(file);
99
+ entries.push(...parsed);
100
+ }
101
+ return { files, entries, unreadable };
102
+ }
70
103
  /** Of `file` in deze config als lijst-entry voorkomt, met of zonder ./ ervoor. */
71
104
  function isIncludedIn(config, file) {
72
105
  const escaped = file.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
@@ -1 +1 @@
1
- {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -7,8 +7,8 @@ export declare class ConfigError extends ToolFailure {
7
7
  /** Env-variabele die een ander configbestand aanwijst dan de standaardplek. */
8
8
  export declare const CONFIG_ENV_VAR = "PHPSTAN_MCP_CONFIG";
9
9
  /**
10
- * De instellingen zoals ze in het configbestand mogen staan. Dezelfde zes die ook
11
- * als env-variabele kunnen: het bestand is een andere plek, geen andere taal.
10
+ * De instellingen zoals ze in het configbestand mogen staan. Dezelfde die ook als
11
+ * env-variabele kunnen: het bestand is een andere plek, geen andere taal.
12
12
  */
13
13
  export interface FileConfig {
14
14
  readonly roots?: readonly string[];
@@ -17,6 +17,7 @@ export interface FileConfig {
17
17
  readonly tmpDir?: string;
18
18
  readonly allowWrites?: boolean;
19
19
  readonly runners?: Record<string, unknown>;
20
+ readonly projects?: Record<string, unknown>;
20
21
  }
21
22
  /**
22
23
  * Waar het configbestand staat. `XDG_CONFIG_HOME` wint, anders `~/.config` — de
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,+EAA+E;AAC/E,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C,YAAY,OAAe,EAAE,SAAwB,iBAAiB,EAAE,UAA0B,EAAE;QAClG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAenD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAElE,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AACtH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,GAAG,GAAG,2BAA2B,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,WAAW,CAAC,GAAG,GAAG,sDAAsD,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAyB,EAAE,MAAyB,OAAO,CAAC,GAAG;IACxF,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,+EAA+E;AAC/E,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C,YAAY,OAAe,EAAE,SAAwB,iBAAiB,EAAE,UAA0B,EAAE;QAClG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAgBnD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAElE,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AACtH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,GAAG,GAAG,2BAA2B,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,WAAW,CAAC,GAAG,GAAG,sDAAsD,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAyB,EAAE,MAAyB,OAAO,CAAC,GAAG;IACxF,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { FailureDetails, FailureReason } from './failure.js';
2
+ import { ToolFailure } from './failure.js';
3
+ /** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
4
+ export declare class ProjectDefaultsError extends ToolFailure {
5
+ constructor(message: string, reason?: FailureReason, details?: FailureDetails);
6
+ }
7
+ /** Env-variabele met de standaarden per project, als JSON. */
8
+ export declare const PROJECTS_ENV_VAR = "PHPSTAN_MCP_PROJECTS";
9
+ /** Dezelfde bovengrens als het tool-argument: een standaard mag niet meer dan een aanroep. */
10
+ export declare const MAX_TIMEOUT_SECONDS = 1800;
11
+ /**
12
+ * Wat per project anders mag dan de rest van de machine. Een Larastan-project kan 2G
13
+ * nodig hebben waar een klein pakket met 256M toe kan; één machinebrede limiet is dan
14
+ * voor het ene te krap en voor het andere een onnodig hoog plafond.
15
+ */
16
+ export interface ProjectDefaults {
17
+ readonly memoryLimit?: string;
18
+ readonly timeoutSeconds?: number;
19
+ /** Relatief aan de projectroot; gaat bij gebruik door resolveWithin. */
20
+ readonly config?: string;
21
+ }
22
+ /** Of PHPStan deze waarde als `--memory-limit` accepteert. */
23
+ export declare function isValidMemoryLimit(value: string): boolean;
24
+ /**
25
+ * Leest de standaarden per project uit de omgeving, of anders uit het configbestand.
26
+ *
27
+ * Net als de runners komt dit uit de serverconfiguratie en nooit uit een aanroep. De
28
+ * aanroeper kan een standaard wél overrulen met een tool-argument; dat is de
29
+ * volgorde die ook bij de globale geheugenlimiet geldt.
30
+ *
31
+ * Een onbekende sleutel wordt geweigerd en niet genegeerd: `memorylimit` met een
32
+ * kleine l doet anders stilzwijgend niets, en dan heeft iemand iets bedoeld wat niet
33
+ * gebeurt — dezelfde reden waarom een kapot configbestand de server niet laat starten.
34
+ */
35
+ export declare function loadProjectDefaults(env?: NodeJS.ProcessEnv): Map<string, ProjectDefaults>;
36
+ /** De standaarden voor dit project; leeg als er niets bijzonders voor geldt. */
37
+ export declare function defaultsFor(project: string, env?: NodeJS.ProcessEnv): ProjectDefaults;
@@ -0,0 +1,100 @@
1
+ import { isAbsolute } from 'node:path';
2
+ import { fromConfig } from './config.js';
3
+ import { ToolFailure } from './failure.js';
4
+ /** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
5
+ export class ProjectDefaultsError extends ToolFailure {
6
+ constructor(message, reason = 'invalid_setting', details = {}) {
7
+ super(message, reason, details);
8
+ }
9
+ }
10
+ /** Env-variabele met de standaarden per project, als JSON. */
11
+ export const PROJECTS_ENV_VAR = 'PHPSTAN_MCP_PROJECTS';
12
+ /** Dezelfde bovengrens als het tool-argument: een standaard mag niet meer dan een aanroep. */
13
+ export const MAX_TIMEOUT_SECONDS = 1800;
14
+ /** De sleutels die een project mag hebben. Alles daarbuiten is een tikfout. */
15
+ const KEYS = ['memoryLimit', 'timeoutSeconds', 'config'];
16
+ // PHPStans eigen vorm: bytes als getal, optioneel met K, M of G, of -1 voor
17
+ // onbeperkt. Een neon-parameter bestaat er niet voor en PHPStan kent er ook geen
18
+ // eigen env-variabele voor, dus dit is de enige plek om het blijvend vast te leggen.
19
+ const MEMORY_LIMIT_PATTERN = /^(-1|\d+[KMG]?)$/i;
20
+ /** Of PHPStan deze waarde als `--memory-limit` accepteert. */
21
+ export function isValidMemoryLimit(value) {
22
+ return MEMORY_LIMIT_PATTERN.test(value);
23
+ }
24
+ /**
25
+ * Leest de standaarden per project uit de omgeving, of anders uit het configbestand.
26
+ *
27
+ * Net als de runners komt dit uit de serverconfiguratie en nooit uit een aanroep. De
28
+ * aanroeper kan een standaard wél overrulen met een tool-argument; dat is de
29
+ * volgorde die ook bij de globale geheugenlimiet geldt.
30
+ *
31
+ * Een onbekende sleutel wordt geweigerd en niet genegeerd: `memorylimit` met een
32
+ * kleine l doet anders stilzwijgend niets, en dan heeft iemand iets bedoeld wat niet
33
+ * gebeurt — dezelfde reden waarom een kapot configbestand de server niet laat starten.
34
+ */
35
+ export function loadProjectDefaults(env = process.env) {
36
+ const ruw = (env[PROJECTS_ENV_VAR] ?? fromConfig('projects', env))?.trim();
37
+ if (ruw === undefined || ruw === '')
38
+ return new Map();
39
+ let ontleed;
40
+ try {
41
+ ontleed = JSON.parse(ruw);
42
+ }
43
+ catch {
44
+ throw new ProjectDefaultsError(`${PROJECTS_ENV_VAR} bevat geen geldige JSON. Verwacht wordt een object met per ` +
45
+ 'projectpad bijvoorbeeld {"memoryLimit": "2G", "timeoutSeconds": 600, "config": "phpstan.neon"}.');
46
+ }
47
+ if (typeof ontleed !== 'object' || ontleed === null || Array.isArray(ontleed)) {
48
+ throw new ProjectDefaultsError(`${PROJECTS_ENV_VAR} moet een object zijn met een projectpad per sleutel.`);
49
+ }
50
+ const defaults = new Map();
51
+ for (const [pad, waarde] of Object.entries(ontleed)) {
52
+ defaults.set(pad, controleer(pad, waarde));
53
+ }
54
+ return defaults;
55
+ }
56
+ /** De standaarden voor dit project; leeg als er niets bijzonders voor geldt. */
57
+ export function defaultsFor(project, env = process.env) {
58
+ return loadProjectDefaults(env).get(project) ?? {};
59
+ }
60
+ /** Weigert een onbruikbare waarde met een melding die zegt wat er wél mag. */
61
+ function controleer(pad, waarde) {
62
+ const waar = `${PROJECTS_ENV_VAR}: "${pad}"`;
63
+ if (!isAbsolute(pad)) {
64
+ throw new ProjectDefaultsError(`${waar} is geen absoluut projectpad.`);
65
+ }
66
+ if (typeof waarde !== 'object' || waarde === null || Array.isArray(waarde)) {
67
+ throw new ProjectDefaultsError(`${waar} moet een object zijn, bijvoorbeeld {"memoryLimit": "2G"}.`);
68
+ }
69
+ const obj = waarde;
70
+ const onbekend = Object.keys(obj).filter((key) => !KEYS.includes(key));
71
+ if (onbekend.length > 0) {
72
+ throw new ProjectDefaultsError(`${waar} kent ${onbekend.map((key) => `"${key}"`).join(', ')} niet. Toegestaan zijn ${KEYS.join(', ')}.`);
73
+ }
74
+ const result = {};
75
+ if (obj['memoryLimit'] !== undefined) {
76
+ const limit = obj['memoryLimit'];
77
+ if (typeof limit !== 'string' || !isValidMemoryLimit(limit.trim())) {
78
+ throw new ProjectDefaultsError(`${waar} heeft memoryLimit ${JSON.stringify(limit)}, en die vorm accepteert PHPStan niet. ` +
79
+ 'Gebruik een getal met optioneel K, M of G (bijv. "1G"), of -1 voor geen limiet.');
80
+ }
81
+ result.memoryLimit = limit.trim();
82
+ }
83
+ if (obj['timeoutSeconds'] !== undefined) {
84
+ const seconds = obj['timeoutSeconds'];
85
+ if (typeof seconds !== 'number' || !Number.isInteger(seconds) || seconds < 1 || seconds > MAX_TIMEOUT_SECONDS) {
86
+ throw new ProjectDefaultsError(`${waar} heeft timeoutSeconds ${JSON.stringify(seconds)}; verwacht een geheel getal ` +
87
+ `van 1 tot en met ${String(MAX_TIMEOUT_SECONDS)}.`);
88
+ }
89
+ result.timeoutSeconds = seconds;
90
+ }
91
+ if (obj['config'] !== undefined) {
92
+ const config = obj['config'];
93
+ if (typeof config !== 'string' || config.trim() === '') {
94
+ throw new ProjectDefaultsError(`${waar} heeft een lege of onbruikbare config; verwacht een pad binnen het project.`);
95
+ }
96
+ result.config = config.trim();
97
+ }
98
+ return result;
99
+ }
100
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"}
package/dist/failure.d.ts CHANGED
@@ -12,7 +12,7 @@
12
12
  * lijst uit met beleid, niet met vrije tekst — een code die maar één keer voorkomt
13
13
  * helpt niemand.
14
14
  */
15
- export type FailureReason = 'no_roots_configured' | 'project_outside_roots' | 'project_not_found' | 'path_outside_project' | 'path_not_found' | 'phpstan_missing' | 'config_missing' | 'bootstrap_failed' | 'baseline_unreadable' | 'invalid_setting' | 'memory_limit' | 'timeout' | 'cancelled' | 'git_missing' | 'not_a_git_repository' | 'unknown_base' | 'unusable_output' | 'phpstan_failed';
15
+ export type FailureReason = 'no_roots_configured' | 'project_outside_roots' | 'project_not_found' | 'path_outside_project' | 'path_not_found' | 'phpstan_missing' | 'config_missing' | 'bootstrap_failed' | 'baseline_unreadable' | 'invalid_setting' | 'memory_limit' | 'timeout' | 'cancelled' | 'git_missing' | 'not_a_git_repository' | 'unknown_base' | 'unsupported_with_runner' | 'unusable_output' | 'phpstan_failed';
16
16
  /** Wat er naast de reden bekend is. Alles optioneel: niet elke fout weet dit. */
17
17
  export interface FailureDetails {
18
18
  /** Exit code van het proces, als er een proces was. */
@@ -1 +1 @@
1
- {"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"AAkDA;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGzB;IACA;IAHX,YACE,OAAe,EACN,MAAqB,EACrB,UAA0B,EAAE;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,WAAM,GAAN,MAAM,CAAe;QACrB,YAAO,GAAP,OAAO,CAAqB;IAGvC,CAAC;CACF"}
1
+ {"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"AAqDA;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGzB;IACA;IAHX,YACE,OAAe,EACN,MAAqB,EACrB,UAA0B,EAAE;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,WAAM,GAAN,MAAM,CAAe;QACrB,YAAO,GAAP,OAAO,CAAqB;IAGvC,CAAC;CACF"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { loadProjectDefaults } from './defaults.js';
3
4
  import { loadDefaultMemoryLimit, loadMaxParallel } from './phpstan.js';
4
5
  import { loadTmpDirMode } from './tmpdir.js';
5
6
  import { WRITES_ENV_VAR, writesAllowed } from './tools/writes.js';
@@ -17,7 +18,22 @@ async function main() {
17
18
  describeMemoryDefault() +
18
19
  describeMaxParallel() +
19
20
  describeTmpDir() +
20
- describeWrites());
21
+ describeWrites() +
22
+ describeProjectDefaults());
23
+ }
24
+ /**
25
+ * Hoeveel projecten eigen standaarden hebben. Een kapotte waarde is net als bij de
26
+ * geheugenlimiet niet fataal: projecten zonder standaard werken gewoon, en een
27
+ * analyse legt het probleem alsnog uit.
28
+ */
29
+ function describeProjectDefaults() {
30
+ try {
31
+ const aantal = loadProjectDefaults().size;
32
+ return aantal === 0 ? '' : `, eigen standaarden voor ${String(aantal)} project(en)`;
33
+ }
34
+ catch (error) {
35
+ return `, LET OP: ${error instanceof Error ? error.message : String(error)}`;
36
+ }
21
37
  }
22
38
  /**
23
39
  * Zet de standaard geheugenlimiet in de opstartregel, zodat je in het clientlog ziet
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}