phpstan-mcp-mx 0.8.0 → 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 (41) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/phpstan/error.d.ts +8 -0
  5. package/dist/phpstan/error.js +9 -0
  6. package/dist/phpstan/error.js.map +1 -0
  7. package/dist/phpstan/output.d.ts +57 -0
  8. package/dist/phpstan/output.js +76 -0
  9. package/dist/phpstan/output.js.map +1 -0
  10. package/dist/phpstan/process.d.ts +45 -0
  11. package/dist/phpstan/process.js +148 -0
  12. package/dist/phpstan/process.js.map +1 -0
  13. package/dist/phpstan/queue.d.ts +21 -0
  14. package/dist/phpstan/queue.js +76 -0
  15. package/dist/phpstan/queue.js.map +1 -0
  16. package/dist/phpstan.d.ts +7 -65
  17. package/dist/phpstan.js +8 -289
  18. package/dist/phpstan.js.map +1 -1
  19. package/dist/server.js +4 -0
  20. package/dist/server.js.map +1 -1
  21. package/dist/tools/analysis.d.ts +8 -0
  22. package/dist/tools/analysis.js +131 -0
  23. package/dist/tools/analysis.js.map +1 -0
  24. package/dist/tools/inspect.d.ts +14 -0
  25. package/dist/tools/inspect.js +211 -0
  26. package/dist/tools/inspect.js.map +1 -0
  27. package/dist/tools/prompts.d.ts +3 -0
  28. package/dist/tools/prompts.js +45 -0
  29. package/dist/tools/prompts.js.map +1 -0
  30. package/dist/tools/shared.d.ts +153 -0
  31. package/dist/tools/shared.js +219 -0
  32. package/dist/tools/shared.js.map +1 -0
  33. package/dist/tools/writes.d.ts +17 -0
  34. package/dist/tools/writes.js +122 -0
  35. package/dist/tools/writes.js.map +1 -0
  36. package/dist/tools.d.ts +0 -11
  37. package/dist/tools.js +4 -671
  38. package/dist/tools.js.map +1 -1
  39. package/dist/version.d.ts +1 -1
  40. package/dist/version.js +1 -1
  41. package/package.json +7 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAS3C;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAsB,MAAS;IACrD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,EAAE;KACR,QAAQ,CAAC,sEAAsE,CAAC,CAAC;AAEpF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACvE,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,6EAA6E,CAAC;IAC1F,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CACP,iFAAiF;QAC/E,4EAA4E,CAC/E;IACH,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CACP,mFAAmF;QACjF,sCAAsC,CACzC;IACH,OAAO,EAAE,CAAC;SACP,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;SAC3D,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC7B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;KAC/E,CAAC;SACD,QAAQ,CAAC,oEAAoE,CAAC;IACjF,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC5D,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC1B,CAAC,CACH;IACD,IAAI,EAAE,CAAC;SACJ,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;SACD,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAC5C,+EAA+E,CAChF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CACP,gFAAgF;IAC9E,gCAAgC,CACnC,CAAC;AAEJ,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,uEAAuE;QACrE,8EAA8E,CACjF;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACvF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,SAAS,CAAC;SACd,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;CAC3F,CAAC;AAaF;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,QAAyB,EAAE,IAAgB;IAChE,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtF,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,EAAE,CAAC;KACxF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,MAAM,CAAC,IAAqG;IAC1H,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;KAC7E,CAAC;AACJ,CAAC;AAWD;;;;;GAKG;AACH,SAAS,GAAG,CAAC,MAAiB,EAAE,KAAuB,EAAE,IAA6B;IACpF,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACvG,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAiB,EACjB,KAAa,EACb,OAAe,EACf,IAAyD,EACzD,MAAc,EACd,MAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;YAC5B,iEAAiE;YACjE,wEAAwE;YACxE,sCAAsC;YACtC,MAAM,KAAK,GAAG,WAAW,CACvB;gBACE,OAAO,EAAE,QAAQ,CAAC,IAAI;gBACtB,QAAQ,EAAE,EAAE;gBACZ,aAAa,EAAE,EAAE;gBACjB,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;aAC5C,EACD,EAAE,CACH,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrD,iBAAiB,EAAE,EAAE,GAAG,KAAK,EAAE;aAChC,CAAC;QACJ,CAAC;QAED,+EAA+E;QAC/E,2EAA2E;QAC3E,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE;YACrC,GAAG,MAAM,CAAC,OAAO;YACjB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE;YAClB,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,QAAQ,CAAC,IAAI;YACtB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACrC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YACtC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC3B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,MAAM,CAAC;QAE5E,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACjE,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE;SACjC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,OAAwB;IAC9C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACpG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACpG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACrG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IACE,KAAK,YAAY,YAAY;QAC7B,KAAK,YAAY,YAAY;QAC7B,KAAK,YAAY,aAAa;QAC9B,KAAK,YAAY,QAAQ;QACzB,KAAK,YAAY,WAAW,EAC5B,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,KAAK,CAAC;AACd,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Root } from '../roots.js';
3
+ /** Env-variabele die schrijvende tools vrijgeeft. */
4
+ export declare const WRITES_ENV_VAR = "PHPSTAN_MCP_ALLOW_WRITES";
5
+ /**
6
+ * Of schrijvende tools geregistreerd mogen worden. Alleen "1" en "true" tellen; al
7
+ * het andere staat uit. Dat faalt de veilige kant op: een typfout laat schrijven
8
+ * uit, en de opstartregel zegt wat er geldt.
9
+ *
10
+ * Niet registreren en niet weigeren-bij-de-aanroep: een tool die bestaat maar altijd
11
+ * nee zegt, kost het model een ronde en context om dat te ontdekken.
12
+ */
13
+ export declare function writesAllowed(env?: NodeJS.ProcessEnv): boolean;
14
+ /** Hangt `clear_result_cache` aan de server. Verandert wel iets, maar niet aan de broncode. */
15
+ export declare function registerClearResultCache(server: McpServer, roots: Root[]): void;
16
+ /** Hangt `generate_baseline` aan de server. Alleen aanroepen als schrijven aanstaat. */
17
+ export declare function registerGenerateBaseline(server: McpServer, roots: Root[]): void;
@@ -0,0 +1,122 @@
1
+ import { z } from 'zod';
2
+ import { clearResultCache, generateBaseline } from '../phpstan.js';
3
+ import { displayPath } from '../report.js';
4
+ import { resolveNewWithin, resolveProject, resolveWithin } from '../project.js';
5
+ import { clears, common, configArgument, projectArgument, toFailure, writes } from './shared.js';
6
+ /** Env-variabele die schrijvende tools vrijgeeft. */
7
+ export const WRITES_ENV_VAR = 'PHPSTAN_MCP_ALLOW_WRITES';
8
+ /**
9
+ * Of schrijvende tools geregistreerd mogen worden. Alleen "1" en "true" tellen; al
10
+ * het andere staat uit. Dat faalt de veilige kant op: een typfout laat schrijven
11
+ * uit, en de opstartregel zegt wat er geldt.
12
+ *
13
+ * Niet registreren en niet weigeren-bij-de-aanroep: een tool die bestaat maar altijd
14
+ * nee zegt, kost het model een ronde en context om dat te ontdekken.
15
+ */
16
+ export function writesAllowed(env = process.env) {
17
+ const configured = env[WRITES_ENV_VAR]?.trim().toLowerCase();
18
+ return configured === '1' || configured === 'true';
19
+ }
20
+ /** Hangt `clear_result_cache` aan de server. Verandert wel iets, maar niet aan de broncode. */
21
+ export function registerClearResultCache(server, roots) {
22
+ server.registerTool('clear_result_cache', {
23
+ title: 'Resultcache legen',
24
+ description: 'Leegt PHPStans resultcache, zodat de volgende analyse alles opnieuw doorrekent. ' +
25
+ 'Gebruik dit als een uitslag niet klopt met de code — bijvoorbeeld na een wijziging ' +
26
+ 'aan een extensie of een geïncludeerde config. Let op: die cache ligt standaard niet ' +
27
+ 'in het project maar in de tijdelijke map van het systeem, en wordt dan gedeeld met ' +
28
+ 'elk ander project dat geen eigen tmpDir zet. Het antwoord noemt de map die geleegd is.',
29
+ inputSchema: {
30
+ project: projectArgument,
31
+ config: configArgument,
32
+ timeoutSeconds: z.number().int().positive().max(1800).optional(),
33
+ },
34
+ outputSchema: { project: z.string(), output: z.string() },
35
+ annotations: clears(),
36
+ }, async (args, extra) => {
37
+ try {
38
+ const resolved = resolveProject(args.project, roots);
39
+ const cleared = await clearResultCache(resolved, {
40
+ ...(args.config === undefined ? {} : { config: resolveWithin(resolved, args.config) }),
41
+ ...(args.timeoutSeconds === undefined ? {} : { timeoutMs: args.timeoutSeconds * 1000 }),
42
+ signal: extra.signal,
43
+ });
44
+ return {
45
+ content: [{ type: 'text', text: cleared.output }],
46
+ structuredContent: { ...cleared },
47
+ };
48
+ }
49
+ catch (error) {
50
+ return toFailure(error);
51
+ }
52
+ });
53
+ }
54
+ /** Standaardnaam, dezelfde die PHPStan zelf gebruikt. */
55
+ const DEFAULT_BASELINE = 'phpstan-baseline.neon';
56
+ /** Hangt `generate_baseline` aan de server. Alleen aanroepen als schrijven aanstaat. */
57
+ export function registerGenerateBaseline(server, roots) {
58
+ server.registerTool('generate_baseline', {
59
+ title: 'Baseline genereren',
60
+ description: 'Zet alle huidige fouten in een baseline-bestand, zodat een volgende analyse alleen ' +
61
+ 'meldt wat er nieuw bij komt. Bedoeld om een bestaand project onder PHPStan te ' +
62
+ 'krijgen, niet om fouten weg te werken: wat hierin komt, wordt daarna niet meer ' +
63
+ 'gemeld. Overschrijft een bestaande baseline. Het bestand moet nog wel in de config ' +
64
+ 'geïncludeerd worden voordat het effect heeft.',
65
+ inputSchema: {
66
+ project: projectArgument,
67
+ file: z
68
+ .string()
69
+ .optional()
70
+ .describe(`Doelbestand binnen het project (standaard ${DEFAULT_BASELINE})`),
71
+ paths: z.array(z.string()).optional().describe('Paden binnen het project'),
72
+ level: z.string().optional().describe('Level-override, 0 t/m 10 of "max"'),
73
+ config: configArgument,
74
+ allowEmpty: z
75
+ .boolean()
76
+ .optional()
77
+ .describe('Ook schrijven als er niets te negeren valt; anders weigert PHPStan'),
78
+ memoryLimit: z.string().optional(),
79
+ timeoutSeconds: z.number().int().positive().max(1800).optional(),
80
+ },
81
+ outputSchema: {
82
+ project: z.string(),
83
+ file: z.string(),
84
+ errors: z.number().describe('Hoeveel fouten er in de baseline gezet zijn'),
85
+ output: z.string(),
86
+ },
87
+ annotations: writes(),
88
+ }, async (args, extra) => {
89
+ try {
90
+ const resolved = resolveProject(args.project, roots);
91
+ const generated = await generateBaseline(resolved, {
92
+ file: resolveNewWithin(resolved, args.file ?? DEFAULT_BASELINE),
93
+ ...(args.paths === undefined
94
+ ? {}
95
+ : { paths: args.paths.map((path) => resolveWithin(resolved, path)) }),
96
+ ...(args.allowEmpty === undefined ? {} : { allowEmpty: args.allowEmpty }),
97
+ ...common(resolved, args),
98
+ signal: extra.signal,
99
+ });
100
+ return {
101
+ content: [{ type: 'text', text: renderGenerated(resolved, generated) }],
102
+ structuredContent: { ...generated },
103
+ };
104
+ }
105
+ catch (error) {
106
+ return toFailure(error);
107
+ }
108
+ });
109
+ }
110
+ /** De uitkomst plus wat er nog moet gebeuren voordat de baseline iets doet. */
111
+ function renderGenerated(project, generated) {
112
+ const naam = displayPath(project.path, generated.file);
113
+ return [
114
+ `${String(generated.errors)} fout(en) in ${naam} gezet.`,
115
+ '',
116
+ `Deze fouten worden vanaf nu niet meer gemeld zodra ${naam} in de configuratie staat:`,
117
+ '',
118
+ 'includes:',
119
+ ` - ${naam}`,
120
+ ].join('\n');
121
+ }
122
+ //# sourceMappingURL=writes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes.js","sourceRoot":"","sources":["../../src/tools/writes.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,15 +1,4 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { Root } from './roots.js';
3
- /** Env-variabele die schrijvende tools vrijgeeft. */
4
- export declare const WRITES_ENV_VAR = "PHPSTAN_MCP_ALLOW_WRITES";
5
- /**
6
- * Of schrijvende tools geregistreerd mogen worden. Alleen "1" en "true" tellen; al
7
- * het andere staat uit. Dat faalt de veilige kant op: een typfout laat schrijven
8
- * uit, en de opstartregel zegt wat er geldt.
9
- *
10
- * Niet registreren en niet weigeren-bij-de-aanroep: een tool die bestaat maar altijd
11
- * nee zegt, kost het model een ronde en context om dat te ontdekken.
12
- */
13
- export declare function writesAllowed(env?: NodeJS.ProcessEnv): boolean;
14
3
  /** Hangt alle tools aan de server. */
15
4
  export declare function registerTools(server: McpServer, roots: Root[]): void;