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.
- package/CHANGELOG.md +80 -0
- package/README.md +28 -0
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/phpstan/error.d.ts +8 -0
- package/dist/phpstan/error.js +9 -0
- package/dist/phpstan/error.js.map +1 -0
- package/dist/phpstan/output.d.ts +57 -0
- package/dist/phpstan/output.js +76 -0
- package/dist/phpstan/output.js.map +1 -0
- package/dist/phpstan/process.d.ts +45 -0
- package/dist/phpstan/process.js +148 -0
- package/dist/phpstan/process.js.map +1 -0
- package/dist/phpstan/queue.d.ts +21 -0
- package/dist/phpstan/queue.js +76 -0
- package/dist/phpstan/queue.js.map +1 -0
- package/dist/phpstan.d.ts +7 -65
- package/dist/phpstan.js +8 -289
- package/dist/phpstan.js.map +1 -1
- package/dist/server.d.ts +0 -6
- package/dist/server.js +5 -6
- package/dist/server.js.map +1 -1
- package/dist/tools/analysis.d.ts +8 -0
- package/dist/tools/analysis.js +131 -0
- package/dist/tools/analysis.js.map +1 -0
- package/dist/tools/inspect.d.ts +14 -0
- package/dist/tools/inspect.js +211 -0
- package/dist/tools/inspect.js.map +1 -0
- package/dist/tools/prompts.d.ts +3 -0
- package/dist/tools/prompts.js +45 -0
- package/dist/tools/prompts.js.map +1 -0
- package/dist/tools/shared.d.ts +153 -0
- package/dist/tools/shared.js +219 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/writes.d.ts +17 -0
- package/dist/tools/writes.js +122 -0
- package/dist/tools/writes.js.map +1 -0
- package/dist/tools.d.ts +0 -11
- package/dist/tools.js +5 -594
- package/dist/tools.js.map +1 -1
- package/dist/version.d.ts +9 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/package.json +7 -4
package/dist/tools.js
CHANGED
|
@@ -1,102 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { DEFAULT_LIMIT, MAX_LIMIT, buildReport, displayPath, renderReport } from './report.js';
|
|
6
|
-
import { ProjectError, discoverProjects, resolveNewWithin, resolveProject, resolveWithin } from './project.js';
|
|
7
|
-
import { TmpDirError } from './tmpdir.js';
|
|
8
|
-
import { ROOTS_ENV_VAR } from './roots.js';
|
|
9
|
-
/** Env-variabele die schrijvende tools vrijgeeft. */
|
|
10
|
-
export const WRITES_ENV_VAR = 'PHPSTAN_MCP_ALLOW_WRITES';
|
|
11
|
-
/**
|
|
12
|
-
* Of schrijvende tools geregistreerd mogen worden. Alleen "1" en "true" tellen; al
|
|
13
|
-
* het andere staat uit. Dat faalt de veilige kant op: een typfout laat schrijven
|
|
14
|
-
* uit, en de opstartregel zegt wat er geldt.
|
|
15
|
-
*
|
|
16
|
-
* Niet registreren en niet weigeren-bij-de-aanroep: een tool die bestaat maar altijd
|
|
17
|
-
* nee zegt, kost het model een ronde en context om dat te ontdekken.
|
|
18
|
-
*/
|
|
19
|
-
export function writesAllowed(env = process.env) {
|
|
20
|
-
const configured = env[WRITES_ENV_VAR]?.trim().toLowerCase();
|
|
21
|
-
return configured === '1' || configured === 'true';
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Nullable veld als `anyOf` in plaats van `type: [..., "null"]`. Zod's `.nullable()`
|
|
25
|
-
* levert de array-vorm op; die is geldig JSON Schema, maar meerdere MCP-clients
|
|
26
|
-
* lezen `type` als één string en laten de constraint dan vallen of weigeren de tool.
|
|
27
|
-
*
|
|
28
|
-
* Let op de `z.literal(null)`: zod vouwt zowel `.nullable()` als een union met
|
|
29
|
-
* `z.null()` terug naar diezelfde array-vorm. Alleen de literal levert echt `anyOf`
|
|
30
|
-
* op (met een overbodige maar onschadelijke `const: null` erbij).
|
|
31
|
-
*/
|
|
32
|
-
function nullable(schema) {
|
|
33
|
-
return z.union([schema, z.literal(null)]);
|
|
34
|
-
}
|
|
35
|
-
const projectArgument = z
|
|
36
|
-
.string()
|
|
37
|
-
.describe('Absoluut pad naar de projectroot, zoals list_projects het teruggeeft');
|
|
38
|
-
const analysisShape = {
|
|
39
|
-
project: z.string(),
|
|
40
|
-
totals: z.object({ fileErrors: z.number(), generalErrors: z.number() }),
|
|
41
|
-
generalErrors: z
|
|
42
|
-
.array(z.string())
|
|
43
|
-
.describe('Fouten die niet aan een bestand hangen, zoals een crash of configuratiefout'),
|
|
44
|
-
warnings: z
|
|
45
|
-
.array(z.string())
|
|
46
|
-
.describe('Wat PHPStan naast het resultaat meldde. Staat hier "Result is incomplete", dan ' +
|
|
47
|
-
'dekt de analyse niet het hele project en is een schone uitslag geen bewijs'),
|
|
48
|
-
notices: z
|
|
49
|
-
.array(z.string())
|
|
50
|
-
.describe('Meldingen van deze server zelf, zoals een baseline die meedoet — dan rapporteert ' +
|
|
51
|
-
'PHPStan alleen wat er nieuw bij komt'),
|
|
52
|
-
omitted: z
|
|
53
|
-
.object({ warnings: z.number(), generalErrors: z.number() })
|
|
54
|
-
.describe('Hoeveel meldingen weggelaten zijn omdat het er te veel waren'),
|
|
55
|
-
summary: z
|
|
56
|
-
.object({
|
|
57
|
-
filesWithFindings: z.number(),
|
|
58
|
-
byFile: z.array(z.object({ file: z.string(), count: z.number() })),
|
|
59
|
-
byIdentifier: z.array(z.object({ identifier: z.string(), count: z.number() })),
|
|
60
|
-
})
|
|
61
|
-
.describe('Tellingen over álle bevindingen, ook die buiten deze pagina vallen'),
|
|
62
|
-
findings: z.array(z.object({
|
|
63
|
-
file: z.string().describe('Pad relatief aan de projectroot'),
|
|
64
|
-
line: nullable(z.number()),
|
|
65
|
-
message: z.string(),
|
|
66
|
-
identifier: nullable(z.string()),
|
|
67
|
-
tip: nullable(z.string()),
|
|
68
|
-
})),
|
|
69
|
-
page: z
|
|
70
|
-
.object({
|
|
71
|
-
offset: z.number(),
|
|
72
|
-
limit: z.number(),
|
|
73
|
-
returned: z.number(),
|
|
74
|
-
total: z.number(),
|
|
75
|
-
hasMore: z.boolean(),
|
|
76
|
-
})
|
|
77
|
-
.describe('Welk deel van de bevindingen dit antwoord bevat'),
|
|
78
|
-
filter: nullable(z.array(z.string())).describe('Op welke identifiers deze pagina beperkt is, of null als er niet gefilterd is'),
|
|
79
|
-
};
|
|
80
|
-
const configArgument = z
|
|
81
|
-
.string()
|
|
82
|
-
.optional()
|
|
83
|
-
.describe('Ander configbestand dan PHPStan zelf zou pakken, bijv. "phpstan-strict.neon". ' +
|
|
84
|
-
'Moet binnen het project liggen');
|
|
85
|
-
const windowShape = {
|
|
86
|
-
identifiers: z
|
|
87
|
-
.array(z.string())
|
|
88
|
-
.optional()
|
|
89
|
-
.describe('Beperk de bevindingen tot deze identifiers, bijv. ["argument.type"]. ' +
|
|
90
|
-
'"missingType" matcht de hele groep. De samenvatting blijft over alles tellen'),
|
|
91
|
-
offset: z.number().int().min(0).optional().describe('Sla de eerste N bevindingen over'),
|
|
92
|
-
limit: z
|
|
93
|
-
.number()
|
|
94
|
-
.int()
|
|
95
|
-
.min(1)
|
|
96
|
-
.max(MAX_LIMIT)
|
|
97
|
-
.optional()
|
|
98
|
-
.describe(`Hoeveel bevindingen dit antwoord bevat (standaard ${String(DEFAULT_LIMIT)})`),
|
|
99
|
-
};
|
|
1
|
+
import { registerAnalyseChanged, registerAnalyseFile, registerAnalyseProject, } from './tools/analysis.js';
|
|
2
|
+
import { registerBaselineSummary, registerDiagnose, registerListProjects, registerServerConfig, } from './tools/inspect.js';
|
|
3
|
+
import { registerPrompts } from './tools/prompts.js';
|
|
4
|
+
import { registerClearResultCache, registerGenerateBaseline, writesAllowed, } from './tools/writes.js';
|
|
100
5
|
/** Hangt alle tools aan de server. */
|
|
101
6
|
export function registerTools(server, roots) {
|
|
102
7
|
registerListProjects(server, roots);
|
|
@@ -105,504 +10,10 @@ export function registerTools(server, roots) {
|
|
|
105
10
|
registerAnalyseChanged(server, roots);
|
|
106
11
|
registerBaselineSummary(server, roots);
|
|
107
12
|
registerDiagnose(server, roots);
|
|
13
|
+
registerServerConfig(server, roots);
|
|
108
14
|
registerClearResultCache(server, roots);
|
|
109
15
|
if (writesAllowed())
|
|
110
16
|
registerGenerateBaseline(server, roots);
|
|
111
17
|
registerPrompts(server);
|
|
112
18
|
}
|
|
113
|
-
function registerBaselineSummary(server, roots) {
|
|
114
|
-
server.registerTool('baseline_summary', {
|
|
115
|
-
title: 'Baseline samenvatten',
|
|
116
|
-
description: 'Leest de phpstan-baseline*.neon van een project en telt wat er genegeerd wordt, ' +
|
|
117
|
-
'per identifier en per bestand. Draait geen analyse. Let op: wat hier in staat is ' +
|
|
118
|
-
'precies wat analyse_project NIET meldt — een project dat zijn baseline includet, ' +
|
|
119
|
-
'rapporteert alleen de fouten die er nieuw bij komen.',
|
|
120
|
-
inputSchema: { project: projectArgument },
|
|
121
|
-
outputSchema: {
|
|
122
|
-
project: z.string(),
|
|
123
|
-
files: z.array(z.object({ file: z.string(), entries: z.number(), errors: z.number() })),
|
|
124
|
-
totals: z.object({ entries: z.number(), errors: z.number() }),
|
|
125
|
-
byIdentifier: z.array(z.object({ identifier: z.string(), count: z.number() })),
|
|
126
|
-
byPath: z.array(z.object({ path: z.string(), count: z.number() })),
|
|
127
|
-
},
|
|
128
|
-
annotations: readOnly(),
|
|
129
|
-
}, ({ project }) => {
|
|
130
|
-
try {
|
|
131
|
-
const summary = summariseBaseline(resolveProject(project, roots));
|
|
132
|
-
return {
|
|
133
|
-
content: [{ type: 'text', text: renderBaseline(summary) }],
|
|
134
|
-
structuredContent: { ...summary },
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
return toFailure(error);
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
function registerDiagnose(server, roots) {
|
|
143
|
-
server.registerTool('diagnose_project', {
|
|
144
|
-
title: 'PHPStan-opstelling opvragen',
|
|
145
|
-
description: 'Vraagt PHPStan zelf om zijn opstelling in dit project: PHP- en PHPStan-versie, de ' +
|
|
146
|
-
'configs die Composer-pakketten meebrengen (zoals Larastan) en of de turbo-extensie ' +
|
|
147
|
-
'aanstaat. Draait geen analyse. Gebruik dit als een project zich anders gedraagt dan ' +
|
|
148
|
-
'een ander project, vóórdat je aan de code gaat twijfelen.',
|
|
149
|
-
inputSchema: {
|
|
150
|
-
project: projectArgument,
|
|
151
|
-
timeoutSeconds: z.number().int().positive().max(1800).optional(),
|
|
152
|
-
},
|
|
153
|
-
outputSchema: {
|
|
154
|
-
project: z.string(),
|
|
155
|
-
output: z.string().describe('PHPStans eigen tekst, ongewijzigd'),
|
|
156
|
-
},
|
|
157
|
-
annotations: readOnly(),
|
|
158
|
-
}, async (args, extra) => {
|
|
159
|
-
try {
|
|
160
|
-
const resolved = resolveProject(args.project, roots);
|
|
161
|
-
const diagnosis = await diagnose(resolved, {
|
|
162
|
-
...(args.timeoutSeconds === undefined ? {} : { timeoutMs: args.timeoutSeconds * 1000 }),
|
|
163
|
-
signal: extra.signal,
|
|
164
|
-
});
|
|
165
|
-
return {
|
|
166
|
-
content: [{ type: 'text', text: diagnosis.output }],
|
|
167
|
-
structuredContent: { ...diagnosis },
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
catch (error) {
|
|
171
|
-
return toFailure(error);
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Eén prompt met het werkpatroon. Er zijn zes tools waarvan drie op elkaar lijken;
|
|
177
|
-
* zonder dit moet het model de juiste volgorde uit de losse beschrijvingen
|
|
178
|
-
* reconstrueren, en dan is `analyse_project` op een groot project de eerste gok.
|
|
179
|
-
*/
|
|
180
|
-
function registerClearResultCache(server, roots) {
|
|
181
|
-
server.registerTool('clear_result_cache', {
|
|
182
|
-
title: 'Resultcache legen',
|
|
183
|
-
description: 'Leegt PHPStans resultcache, zodat de volgende analyse alles opnieuw doorrekent. ' +
|
|
184
|
-
'Gebruik dit als een uitslag niet klopt met de code — bijvoorbeeld na een wijziging ' +
|
|
185
|
-
'aan een extensie of een geïncludeerde config. Let op: die cache ligt standaard niet ' +
|
|
186
|
-
'in het project maar in de tijdelijke map van het systeem, en wordt dan gedeeld met ' +
|
|
187
|
-
'elk ander project dat geen eigen tmpDir zet. Het antwoord noemt de map die geleegd is.',
|
|
188
|
-
inputSchema: {
|
|
189
|
-
project: projectArgument,
|
|
190
|
-
config: configArgument,
|
|
191
|
-
timeoutSeconds: z.number().int().positive().max(1800).optional(),
|
|
192
|
-
},
|
|
193
|
-
outputSchema: { project: z.string(), output: z.string() },
|
|
194
|
-
annotations: clears(),
|
|
195
|
-
}, async (args, extra) => {
|
|
196
|
-
try {
|
|
197
|
-
const resolved = resolveProject(args.project, roots);
|
|
198
|
-
const cleared = await clearResultCache(resolved, {
|
|
199
|
-
...(args.config === undefined ? {} : { config: resolveWithin(resolved, args.config) }),
|
|
200
|
-
...(args.timeoutSeconds === undefined ? {} : { timeoutMs: args.timeoutSeconds * 1000 }),
|
|
201
|
-
signal: extra.signal,
|
|
202
|
-
});
|
|
203
|
-
return {
|
|
204
|
-
content: [{ type: 'text', text: cleared.output }],
|
|
205
|
-
structuredContent: { ...cleared },
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
return toFailure(error);
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
/** Standaardnaam, dezelfde die PHPStan zelf gebruikt. */
|
|
214
|
-
const DEFAULT_BASELINE = 'phpstan-baseline.neon';
|
|
215
|
-
function registerGenerateBaseline(server, roots) {
|
|
216
|
-
server.registerTool('generate_baseline', {
|
|
217
|
-
title: 'Baseline genereren',
|
|
218
|
-
description: 'Zet alle huidige fouten in een baseline-bestand, zodat een volgende analyse alleen ' +
|
|
219
|
-
'meldt wat er nieuw bij komt. Bedoeld om een bestaand project onder PHPStan te ' +
|
|
220
|
-
'krijgen, niet om fouten weg te werken: wat hierin komt, wordt daarna niet meer ' +
|
|
221
|
-
'gemeld. Overschrijft een bestaande baseline. Het bestand moet nog wel in de config ' +
|
|
222
|
-
'geïncludeerd worden voordat het effect heeft.',
|
|
223
|
-
inputSchema: {
|
|
224
|
-
project: projectArgument,
|
|
225
|
-
file: z
|
|
226
|
-
.string()
|
|
227
|
-
.optional()
|
|
228
|
-
.describe(`Doelbestand binnen het project (standaard ${DEFAULT_BASELINE})`),
|
|
229
|
-
paths: z.array(z.string()).optional().describe('Paden binnen het project'),
|
|
230
|
-
level: z.string().optional().describe('Level-override, 0 t/m 10 of "max"'),
|
|
231
|
-
config: configArgument,
|
|
232
|
-
allowEmpty: z
|
|
233
|
-
.boolean()
|
|
234
|
-
.optional()
|
|
235
|
-
.describe('Ook schrijven als er niets te negeren valt; anders weigert PHPStan'),
|
|
236
|
-
memoryLimit: z.string().optional(),
|
|
237
|
-
timeoutSeconds: z.number().int().positive().max(1800).optional(),
|
|
238
|
-
},
|
|
239
|
-
outputSchema: {
|
|
240
|
-
project: z.string(),
|
|
241
|
-
file: z.string(),
|
|
242
|
-
errors: z.number().describe('Hoeveel fouten er in de baseline gezet zijn'),
|
|
243
|
-
output: z.string(),
|
|
244
|
-
},
|
|
245
|
-
annotations: writes(),
|
|
246
|
-
}, async (args, extra) => {
|
|
247
|
-
try {
|
|
248
|
-
const resolved = resolveProject(args.project, roots);
|
|
249
|
-
const generated = await generateBaseline(resolved, {
|
|
250
|
-
file: resolveNewWithin(resolved, args.file ?? DEFAULT_BASELINE),
|
|
251
|
-
...(args.paths === undefined
|
|
252
|
-
? {}
|
|
253
|
-
: { paths: args.paths.map((path) => resolveWithin(resolved, path)) }),
|
|
254
|
-
...(args.allowEmpty === undefined ? {} : { allowEmpty: args.allowEmpty }),
|
|
255
|
-
...common(resolved, args),
|
|
256
|
-
signal: extra.signal,
|
|
257
|
-
});
|
|
258
|
-
return {
|
|
259
|
-
content: [{ type: 'text', text: renderGenerated(resolved, generated) }],
|
|
260
|
-
structuredContent: { ...generated },
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
catch (error) {
|
|
264
|
-
return toFailure(error);
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
/** De uitkomst plus wat er nog moet gebeuren voordat de baseline iets doet. */
|
|
269
|
-
function renderGenerated(project, generated) {
|
|
270
|
-
const naam = displayPath(project.path, generated.file);
|
|
271
|
-
return [
|
|
272
|
-
`${String(generated.errors)} fout(en) in ${naam} gezet.`,
|
|
273
|
-
'',
|
|
274
|
-
`Deze fouten worden vanaf nu niet meer gemeld zodra ${naam} in de configuratie staat:`,
|
|
275
|
-
'',
|
|
276
|
-
'includes:',
|
|
277
|
-
` - ${naam}`,
|
|
278
|
-
].join('\n');
|
|
279
|
-
}
|
|
280
|
-
function registerPrompts(server) {
|
|
281
|
-
server.registerPrompt('phpstan_wijziging_nakijken', {
|
|
282
|
-
title: 'Eigen wijziging nakijken met PHPStan',
|
|
283
|
-
description: 'Het werkpatroon om je eigen wijziging na te kijken zonder het hele project door te rekenen.',
|
|
284
|
-
argsSchema: {
|
|
285
|
-
project: z
|
|
286
|
-
.string()
|
|
287
|
-
.optional()
|
|
288
|
-
.describe('Absoluut pad naar de projectroot; laat leeg om eerst list_projects te doen'),
|
|
289
|
-
},
|
|
290
|
-
}, ({ project }) => ({
|
|
291
|
-
messages: [
|
|
292
|
-
{
|
|
293
|
-
role: 'user',
|
|
294
|
-
content: {
|
|
295
|
-
type: 'text',
|
|
296
|
-
text: [
|
|
297
|
-
project === undefined || project === ''
|
|
298
|
-
? 'Roep eerst `list_projects` aan en kies het project waar ik in werk.'
|
|
299
|
-
: `Werk in het project ${project}.`,
|
|
300
|
-
'',
|
|
301
|
-
'Ga daarna zo te werk:',
|
|
302
|
-
'1. `analyse_changed` met dat project — dat pakt alleen wat git gewijzigd heeft,',
|
|
303
|
-
' inclusief bestanden die nog niet toegevoegd zijn. Doe dit ook als het project',
|
|
304
|
-
' groot is; `analyse_project` zonder paden rekent alles door.',
|
|
305
|
-
'2. Staat er "LET OP" of "Ter info" boven het rapport, lees dat eerst: een',
|
|
306
|
-
' onvolledige analyse of een baseline die meedoet maakt een schone uitslag',
|
|
307
|
-
' onbetrouwbaar.',
|
|
308
|
-
'3. Repareer de bevindingen bij de bron. Verzwak geen types naar `mixed` en voeg',
|
|
309
|
-
' niets aan de baseline toe.',
|
|
310
|
-
'4. Draai `analyse_changed` opnieuw tot het schoon is. Blijven er veel',
|
|
311
|
-
' bevindingen van één soort over, gebruik dan `identifiers` om er per soort',
|
|
312
|
-
' door te lopen.',
|
|
313
|
-
'',
|
|
314
|
-
'Gedraagt het project zich onverklaarbaar, draai dan `diagnose_project` voordat',
|
|
315
|
-
'je aan de code twijfelt.',
|
|
316
|
-
].join('\n'),
|
|
317
|
-
},
|
|
318
|
-
},
|
|
319
|
-
],
|
|
320
|
-
}));
|
|
321
|
-
}
|
|
322
|
-
function registerListProjects(server, roots) {
|
|
323
|
-
server.registerTool('list_projects', {
|
|
324
|
-
title: 'PHP-projecten opsommen',
|
|
325
|
-
description: 'Somt de PHP-projecten op die deze server mag analyseren, met per project of ' +
|
|
326
|
-
'PHPStan geïnstalleerd is en welk configbestand er ligt. Gebruik het `path` uit ' +
|
|
327
|
-
'het resultaat als `project`-argument voor de andere tools.',
|
|
328
|
-
inputSchema: {},
|
|
329
|
-
outputSchema: {
|
|
330
|
-
projects: z.array(z.object({
|
|
331
|
-
path: z.string(),
|
|
332
|
-
root: z.string(),
|
|
333
|
-
hasPhpstan: z.boolean(),
|
|
334
|
-
config: nullable(z.string()),
|
|
335
|
-
hasGit: z.boolean().describe('Of analyse_changed hier bruikbaar is'),
|
|
336
|
-
})),
|
|
337
|
-
problems: z.array(z.object({ root: z.string(), problem: z.string() })),
|
|
338
|
-
},
|
|
339
|
-
annotations: readOnly(),
|
|
340
|
-
}, () => {
|
|
341
|
-
if (roots.length === 0) {
|
|
342
|
-
return failure(`Er zijn geen projectmappen geconfigureerd. Zet ${ROOTS_ENV_VAR} in de ` +
|
|
343
|
-
'MCP-serverconfiguratie op de absolute paden die geanalyseerd mogen worden, ' +
|
|
344
|
-
'gescheiden door een dubbele punt.');
|
|
345
|
-
}
|
|
346
|
-
const projects = discoverProjects(roots);
|
|
347
|
-
const problems = roots
|
|
348
|
-
.filter((root) => root.problem !== null)
|
|
349
|
-
.map((root) => ({ root: root.raw, problem: root.problem }));
|
|
350
|
-
return {
|
|
351
|
-
content: [{ type: 'text', text: renderProjects(projects, problems) }],
|
|
352
|
-
structuredContent: { projects, problems },
|
|
353
|
-
};
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
function registerAnalyseProject(server, roots) {
|
|
357
|
-
server.registerTool('analyse_project', {
|
|
358
|
-
title: 'Project analyseren',
|
|
359
|
-
description: 'Draait PHPStan over (een deel van) een project en geeft de bevindingen terug. ' +
|
|
360
|
-
'Zonder `paths` wordt geanalyseerd wat in phpstan.neon staat.',
|
|
361
|
-
inputSchema: {
|
|
362
|
-
project: projectArgument,
|
|
363
|
-
paths: z
|
|
364
|
-
.array(z.string())
|
|
365
|
-
.optional()
|
|
366
|
-
.describe('Paden binnen het project; leeg betekent: volg de configuratie'),
|
|
367
|
-
level: z.string().optional().describe('Level-override, 0 t/m 10 of "max"'),
|
|
368
|
-
config: configArgument,
|
|
369
|
-
memoryLimit: z
|
|
370
|
-
.string()
|
|
371
|
-
.optional()
|
|
372
|
-
.describe('Bijv. "1G", als PHPStan op de PHP-limiet klapt; overrulet de serverstandaard'),
|
|
373
|
-
timeoutSeconds: z.number().int().positive().max(1800).optional(),
|
|
374
|
-
...windowShape,
|
|
375
|
-
},
|
|
376
|
-
outputSchema: analysisShape,
|
|
377
|
-
annotations: readOnly(),
|
|
378
|
-
}, async (args, extra) => runAnalysis(roots, args.project, (resolved) => ({
|
|
379
|
-
options: {
|
|
380
|
-
// Elk pad door resolveWithin, ook al komt het rechtstreeks uit de
|
|
381
|
-
// aanroep. Ongefilterd doorgeven was op twee manieren mis: een pad
|
|
382
|
-
// buiten het project liet PHPStan bestanden lezen waar de whitelist
|
|
383
|
-
// juist over gaat, en een "pad" als --generate-baseline=x werd door
|
|
384
|
-
// PHPStan als vlag gelezen en schreef dat bestand echt weg
|
|
385
|
-
// (nagemeten). Na resolveWithin is elk pad absoluut en bestaat het,
|
|
386
|
-
// dus het kan geen vlag meer zijn.
|
|
387
|
-
...(args.paths === undefined
|
|
388
|
-
? {}
|
|
389
|
-
: { paths: args.paths.map((path) => resolveWithin(resolved, path)) }),
|
|
390
|
-
...common(resolved, args),
|
|
391
|
-
},
|
|
392
|
-
}), window(args), extra.signal));
|
|
393
|
-
}
|
|
394
|
-
function registerAnalyseChanged(server, roots) {
|
|
395
|
-
server.registerTool('analyse_changed', {
|
|
396
|
-
title: 'Gewijzigde bestanden analyseren',
|
|
397
|
-
description: 'Draait PHPStan over de PHP-bestanden die in dit project gewijzigd zijn volgens git, ' +
|
|
398
|
-
'inclusief bestanden die nog niet toegevoegd zijn. Bedoeld om te zien of een eigen ' +
|
|
399
|
-
'wijziging fouten oplevert, zonder het hele project door te rekenen. Vergelijkt ' +
|
|
400
|
-
`standaard met ${DEFAULT_BASE}; geef \`base\` mee (bijv. "main") voor de hele branch.`,
|
|
401
|
-
inputSchema: {
|
|
402
|
-
project: projectArgument,
|
|
403
|
-
base: z
|
|
404
|
-
.string()
|
|
405
|
-
.optional()
|
|
406
|
-
.describe(`Commit, branch of tag om tegen te vergelijken (standaard ${DEFAULT_BASE})`),
|
|
407
|
-
staged: z
|
|
408
|
-
.boolean()
|
|
409
|
-
.optional()
|
|
410
|
-
.describe('Alleen wat gestaged is (git diff --cached), voor een check vóór een commit'),
|
|
411
|
-
level: z.string().optional().describe('Level-override, 0 t/m 10 of "max"'),
|
|
412
|
-
config: configArgument,
|
|
413
|
-
memoryLimit: z.string().optional(),
|
|
414
|
-
timeoutSeconds: z.number().int().positive().max(1800).optional(),
|
|
415
|
-
...windowShape,
|
|
416
|
-
},
|
|
417
|
-
outputSchema: analysisShape,
|
|
418
|
-
annotations: readOnly(),
|
|
419
|
-
}, async (args, extra) => runAnalysis(roots, args.project, async (resolved) => {
|
|
420
|
-
const changed = await changedPhpFiles(resolved, args.base, args.staged);
|
|
421
|
-
if (changed.files.length === 0) {
|
|
422
|
-
return { nothingToDo: describeNothingChanged(changed) };
|
|
423
|
-
}
|
|
424
|
-
return {
|
|
425
|
-
options: { paths: [...changed.files], ...common(resolved, args) },
|
|
426
|
-
heading: describeChanged(resolved, changed),
|
|
427
|
-
};
|
|
428
|
-
}, window(args), extra.signal));
|
|
429
|
-
}
|
|
430
|
-
/** Waarom er niets geanalyseerd is; de overgeslagen paden horen daar bij. */
|
|
431
|
-
function describeNothingChanged(changed) {
|
|
432
|
-
const wat = changed.staged ? 'gestagede' : 'gewijzigde';
|
|
433
|
-
const lines = [`Geen ${wat} PHP-bestanden ten opzichte van ${changed.base}.`];
|
|
434
|
-
if (changed.skipped.length > 0)
|
|
435
|
-
lines.push('', ...skippedLines(changed));
|
|
436
|
-
return lines.join('\n');
|
|
437
|
-
}
|
|
438
|
-
/** Wat er geanalyseerd is, zodat zichtbaar is waarop het rapport eronder betrekking heeft. */
|
|
439
|
-
function describeChanged(resolved, changed) {
|
|
440
|
-
const waar = changed.staged ? 'gestaged ten opzichte van' : 'gewijzigd ten opzichte van';
|
|
441
|
-
const lines = [
|
|
442
|
-
`${String(changed.files.length)} PHP-bestand(en) ${waar} ${changed.base}:`,
|
|
443
|
-
...changed.files.map((file) => ` ${displayPath(resolved.path, file)}`),
|
|
444
|
-
];
|
|
445
|
-
if (changed.skipped.length > 0)
|
|
446
|
-
lines.push('', ...skippedLines(changed));
|
|
447
|
-
return lines.join('\n');
|
|
448
|
-
}
|
|
449
|
-
function skippedLines(changed) {
|
|
450
|
-
return [
|
|
451
|
-
'Overgeslagen, dus niet meegenomen in dit rapport:',
|
|
452
|
-
...changed.skipped.map((entry) => ` ${entry.path}: ${entry.reason}`),
|
|
453
|
-
];
|
|
454
|
-
}
|
|
455
|
-
function registerAnalyseFile(server, roots) {
|
|
456
|
-
server.registerTool('analyse_file', {
|
|
457
|
-
title: 'Bestand of map analyseren',
|
|
458
|
-
description: 'Draait PHPStan over één bestand of map binnen een project. Het pad mag relatief ' +
|
|
459
|
-
'aan de projectroot zijn of absoluut, maar moet binnen het project liggen.',
|
|
460
|
-
inputSchema: {
|
|
461
|
-
project: projectArgument,
|
|
462
|
-
path: z.string().describe('Bestand of map binnen het project, bijv. "app/Models/User.php"'),
|
|
463
|
-
level: z.string().optional().describe('Level-override, 0 t/m 10 of "max"'),
|
|
464
|
-
config: configArgument,
|
|
465
|
-
memoryLimit: z.string().optional(),
|
|
466
|
-
timeoutSeconds: z.number().int().positive().max(1800).optional(),
|
|
467
|
-
...windowShape,
|
|
468
|
-
},
|
|
469
|
-
outputSchema: analysisShape,
|
|
470
|
-
annotations: readOnly(),
|
|
471
|
-
}, async (args, extra) => runAnalysis(roots, args.project, (resolved) => ({
|
|
472
|
-
options: {
|
|
473
|
-
paths: [resolveWithin(resolved, args.path)],
|
|
474
|
-
...common(resolved, args),
|
|
475
|
-
},
|
|
476
|
-
}), window(args), extra.signal));
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* Zet de gedeelde argumenten om in AnalyseOptions. `config` gaat door resolveWithin:
|
|
480
|
-
* een neon mag `bootstrapFiles` en extensies bevatten, dus een vrij te kiezen
|
|
481
|
-
* configpad zou anders een route zijn om willekeurige PHP-code te laten uitvoeren —
|
|
482
|
-
* langs de whitelist heen die `project` juist wél afdwingt.
|
|
483
|
-
*/
|
|
484
|
-
function common(resolved, args) {
|
|
485
|
-
return {
|
|
486
|
-
...(args.level === undefined ? {} : { level: args.level }),
|
|
487
|
-
...(args.config === undefined ? {} : { config: resolveWithin(resolved, args.config) }),
|
|
488
|
-
...(args.memoryLimit === undefined ? {} : { memoryLimit: args.memoryLimit }),
|
|
489
|
-
...(args.timeoutSeconds === undefined ? {} : { timeoutMs: args.timeoutSeconds * 1000 }),
|
|
490
|
-
};
|
|
491
|
-
}
|
|
492
|
-
function window(args) {
|
|
493
|
-
return {
|
|
494
|
-
offset: args.offset,
|
|
495
|
-
limit: args.limit,
|
|
496
|
-
...(args.identifiers === undefined ? {} : { identifiers: args.identifiers }),
|
|
497
|
-
};
|
|
498
|
-
}
|
|
499
|
-
/**
|
|
500
|
-
* Resolvet het project één keer en geeft het aan `plan`, zodat een tool die zelf nog
|
|
501
|
-
* paden binnen dat project moet valideren dat op hetzelfde geresolvede project doet.
|
|
502
|
-
* Eerder resolveerde analyse_file het project en deed runAnalysis dat daarna nog
|
|
503
|
-
* een keer.
|
|
504
|
-
*/
|
|
505
|
-
async function runAnalysis(roots, project, plan, window, signal) {
|
|
506
|
-
try {
|
|
507
|
-
const resolved = resolveProject(project, roots);
|
|
508
|
-
const chosen = await plan(resolved);
|
|
509
|
-
if ('nothingToDo' in chosen) {
|
|
510
|
-
// Toch het volledige rapportschema teruggeven: een client die op
|
|
511
|
-
// structuredContent vertrouwt moet niet ineens een ander soort antwoord
|
|
512
|
-
// krijgen omdat er niets te doen was.
|
|
513
|
-
const empty = buildReport({
|
|
514
|
-
project: resolved.path,
|
|
515
|
-
findings: [],
|
|
516
|
-
generalErrors: [],
|
|
517
|
-
warnings: [],
|
|
518
|
-
totals: { fileErrors: 0, generalErrors: 0 },
|
|
519
|
-
}, {});
|
|
520
|
-
return {
|
|
521
|
-
content: [{ type: 'text', text: chosen.nothingToDo }],
|
|
522
|
-
structuredContent: { ...empty },
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
// Het signaal komt uit het MCP-verzoek zelf: annuleert de client, dan wordt de
|
|
526
|
-
// procesgroep opgeruimd in plaats van dat PHPStan doorrekent voor niemand.
|
|
527
|
-
const result = await analyse(resolved, {
|
|
528
|
-
...chosen.options,
|
|
529
|
-
...(signal === undefined ? {} : { signal }),
|
|
530
|
-
});
|
|
531
|
-
const report = buildReport(result, window, collectNotices(resolved));
|
|
532
|
-
const heading = chosen.heading === undefined ? '' : `${chosen.heading}\n\n`;
|
|
533
|
-
return {
|
|
534
|
-
content: [{ type: 'text', text: heading + renderReport(report) }],
|
|
535
|
-
structuredContent: { ...report },
|
|
536
|
-
};
|
|
537
|
-
}
|
|
538
|
-
catch (error) {
|
|
539
|
-
return toFailure(error);
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
/**
|
|
543
|
-
* Wat deze server zelf bij een analyse te melden heeft. Nu alleen de baseline: doet
|
|
544
|
-
* die mee, dan rapporteert PHPStan alleen wat er nieuw bij komt, en dan is een
|
|
545
|
-
* schone uitslag geen schone code. Dat staat in de toolbeschrijving, maar niet in
|
|
546
|
-
* het antwoord waar het model naar kijkt.
|
|
547
|
-
*/
|
|
548
|
-
function collectNotices(project) {
|
|
549
|
-
const baseline = describeIncludedBaseline(project);
|
|
550
|
-
return baseline === null ? [] : [baseline];
|
|
551
|
-
}
|
|
552
|
-
function renderProjects(projects, problems) {
|
|
553
|
-
const lines = [];
|
|
554
|
-
if (projects.length === 0) {
|
|
555
|
-
lines.push('Geen PHP-projecten gevonden onder de geconfigureerde mappen.');
|
|
556
|
-
}
|
|
557
|
-
else {
|
|
558
|
-
lines.push(`${projects.length} project(en):`);
|
|
559
|
-
for (const project of projects) {
|
|
560
|
-
const config = project.config ?? 'geen config';
|
|
561
|
-
const phpstan = project.hasPhpstan ? 'phpstan aanwezig' : 'phpstan NIET geïnstalleerd';
|
|
562
|
-
const git = project.hasGit ? 'git' : 'geen git';
|
|
563
|
-
lines.push(`- ${project.path} (${phpstan}, ${config}, ${git})`);
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
if (problems.length > 0) {
|
|
567
|
-
lines.push('', 'Overgeslagen regels uit de configuratie:');
|
|
568
|
-
for (const problem of problems)
|
|
569
|
-
lines.push(`- ${problem.root}: ${problem.problem}`);
|
|
570
|
-
}
|
|
571
|
-
return lines.join('\n');
|
|
572
|
-
}
|
|
573
|
-
/**
|
|
574
|
-
* Analyseren verandert de broncode niet. PHPStan schrijft wel zijn resultcache weg,
|
|
575
|
-
* maar dat is geen wijziging waar de gebruiker iets van merkt.
|
|
576
|
-
*/
|
|
577
|
-
function readOnly() {
|
|
578
|
-
return { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false };
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
|
-
* Verandert wel iets, maar niet aan de broncode. `idempotentHint` staat aan omdat
|
|
582
|
-
* twee keer legen hetzelfde oplevert; `destructiveHint` omdat er data weggaat die
|
|
583
|
-
* PHPStan daarna opnieuw moet opbouwen.
|
|
584
|
-
*/
|
|
585
|
-
function clears() {
|
|
586
|
-
return { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: false };
|
|
587
|
-
}
|
|
588
|
-
/**
|
|
589
|
-
* Schrijft een bestand in het project. Niet idempotent: draai je het opnieuw nadat
|
|
590
|
-
* er fouten bij zijn gekomen, dan staat er iets anders in.
|
|
591
|
-
*/
|
|
592
|
-
function writes() {
|
|
593
|
-
return { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false };
|
|
594
|
-
}
|
|
595
|
-
function toFailure(error) {
|
|
596
|
-
if (error instanceof ProjectError ||
|
|
597
|
-
error instanceof PhpstanError ||
|
|
598
|
-
error instanceof BaselineError ||
|
|
599
|
-
error instanceof GitError ||
|
|
600
|
-
error instanceof TmpDirError) {
|
|
601
|
-
return failure(error.message);
|
|
602
|
-
}
|
|
603
|
-
throw error;
|
|
604
|
-
}
|
|
605
|
-
function failure(text) {
|
|
606
|
-
return { isError: true, content: [{ type: 'text', text }] };
|
|
607
|
-
}
|
|
608
19
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,sCAAsC;AACtC,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,KAAa;IAC5D,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,aAAa,EAAE;QAAE,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,eAAe,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Versie van de server zoals gemeld in de MCP-handshake. Spiegelt `version` in
|
|
3
|
+
* package.json; die kan hier niet zomaar geïmporteerd worden, want een JSON-import
|
|
4
|
+
* verhuist bij het bouwen mee naar dist/ en wijst dan naar het verkeerde bestand.
|
|
5
|
+
*
|
|
6
|
+
* Staat los van server.ts omdat tools.ts hem ook nodig heeft, en server.ts
|
|
7
|
+
* importeert tools.ts — dat zou een cyclus zijn.
|
|
8
|
+
*/
|
|
9
|
+
export declare const VERSION = "0.9.0";
|