@yawlabs/ctxlint 0.25.0 → 0.25.2
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/.pre-commit-hooks.yaml +10 -10
- package/AGENT_SESSION_LINT_SPEC.md +632 -612
- package/AGENT_SKILL_LINT_SPEC.md +20 -18
- package/CONTEXT_LINT_SPEC.md +809 -782
- package/MCP_CONFIG_LINT_SPEC.md +434 -419
- package/README.md +553 -553
- package/agent-session-lint-rules.json +243 -243
- package/bin/ctxlint.mjs +410 -360
- package/context-lint-rules.json +695 -754
- package/dist/index.js +234 -252
- package/mcp-config-lint-rules.json +45 -162
- package/package.json +23 -25
|
@@ -55,9 +55,7 @@
|
|
|
55
55
|
"trigger": "JSON.parse fails on the file content.",
|
|
56
56
|
"message": "MCP config is not valid JSON: {parseError}",
|
|
57
57
|
"fixable": false,
|
|
58
|
-
"clients": [
|
|
59
|
-
"all"
|
|
60
|
-
],
|
|
58
|
+
"clients": ["all"],
|
|
61
59
|
"stability": "stable"
|
|
62
60
|
},
|
|
63
61
|
{
|
|
@@ -69,9 +67,7 @@
|
|
|
69
67
|
"message": "{file} must use \"{expected}\" as root key, not \"{actual}\"",
|
|
70
68
|
"fixable": true,
|
|
71
69
|
"fixDescription": "Rename the root key to match the expected key for the client.",
|
|
72
|
-
"clients": [
|
|
73
|
-
"all"
|
|
74
|
-
],
|
|
70
|
+
"clients": ["all"],
|
|
75
71
|
"stability": "stable"
|
|
76
72
|
},
|
|
77
73
|
{
|
|
@@ -82,9 +78,7 @@
|
|
|
82
78
|
"trigger": "The parsed JSON object has neither \"mcpServers\" nor \"servers\" as a key.",
|
|
83
79
|
"message": "MCP config has no \"{expected}\" key",
|
|
84
80
|
"fixable": false,
|
|
85
|
-
"clients": [
|
|
86
|
-
"all"
|
|
87
|
-
],
|
|
81
|
+
"clients": ["all"],
|
|
88
82
|
"stability": "stable"
|
|
89
83
|
},
|
|
90
84
|
{
|
|
@@ -95,9 +89,7 @@
|
|
|
95
89
|
"trigger": "Server has type \"stdio\" (or no type with no url) and no \"command\" field.",
|
|
96
90
|
"message": "Server \"{name}\" has no \"command\" field",
|
|
97
91
|
"fixable": false,
|
|
98
|
-
"clients": [
|
|
99
|
-
"all"
|
|
100
|
-
],
|
|
92
|
+
"clients": ["all"],
|
|
101
93
|
"stability": "stable"
|
|
102
94
|
},
|
|
103
95
|
{
|
|
@@ -108,9 +100,7 @@
|
|
|
108
100
|
"trigger": "Server has type \"http\" or \"sse\" and no \"url\" field.",
|
|
109
101
|
"message": "Server \"{name}\" has no \"url\" field",
|
|
110
102
|
"fixable": false,
|
|
111
|
-
"clients": [
|
|
112
|
-
"all"
|
|
113
|
-
],
|
|
103
|
+
"clients": ["all"],
|
|
114
104
|
"stability": "stable"
|
|
115
105
|
},
|
|
116
106
|
{
|
|
@@ -121,9 +111,7 @@
|
|
|
121
111
|
"trigger": "A key in the mcpServers/servers object is the empty string.",
|
|
122
112
|
"message": "Server name cannot be empty",
|
|
123
113
|
"fixable": false,
|
|
124
|
-
"clients": [
|
|
125
|
-
"all"
|
|
126
|
-
],
|
|
114
|
+
"clients": ["all"],
|
|
127
115
|
"stability": "stable"
|
|
128
116
|
},
|
|
129
117
|
{
|
|
@@ -134,9 +122,7 @@
|
|
|
134
122
|
"trigger": "The parser could not classify the server's transport — a string \"type\" outside stdio/http/sse, a non-string \"type\", or an entry with neither \"command\" nor \"url\". The no-recognizable-transport case emits the message variant: Server \"{name}\" has no recognizable transport — expected \"command\", \"url\", or a valid \"type\".",
|
|
135
123
|
"message": "Server \"{name}\" has unknown transport type \"{type}\"",
|
|
136
124
|
"fixable": false,
|
|
137
|
-
"clients": [
|
|
138
|
-
"all"
|
|
139
|
-
],
|
|
125
|
+
"clients": ["all"],
|
|
140
126
|
"stability": "stable"
|
|
141
127
|
},
|
|
142
128
|
{
|
|
@@ -147,9 +133,7 @@
|
|
|
147
133
|
"trigger": "Server entry has both \"command\" and \"url\" fields.",
|
|
148
134
|
"message": "Server \"{name}\" has both \"command\" and \"url\" — transport is ambiguous",
|
|
149
135
|
"fixable": false,
|
|
150
|
-
"clients": [
|
|
151
|
-
"all"
|
|
152
|
-
],
|
|
136
|
+
"clients": ["all"],
|
|
153
137
|
"stability": "stable"
|
|
154
138
|
},
|
|
155
139
|
{
|
|
@@ -160,9 +144,7 @@
|
|
|
160
144
|
"trigger": "Root key exists but the object is empty.",
|
|
161
145
|
"message": "MCP config has no server entries",
|
|
162
146
|
"fixable": false,
|
|
163
|
-
"clients": [
|
|
164
|
-
"all"
|
|
165
|
-
],
|
|
147
|
+
"clients": ["all"],
|
|
166
148
|
"stability": "stable"
|
|
167
149
|
},
|
|
168
150
|
{
|
|
@@ -174,9 +156,7 @@
|
|
|
174
156
|
"message": "Server \"{name}\" has a hardcoded Bearer token in a git-tracked file",
|
|
175
157
|
"fixable": true,
|
|
176
158
|
"fixDescription": "Replace the literal token with an env var reference derived from the server name.",
|
|
177
|
-
"clients": [
|
|
178
|
-
"all"
|
|
179
|
-
],
|
|
159
|
+
"clients": ["all"],
|
|
180
160
|
"stability": "stable"
|
|
181
161
|
},
|
|
182
162
|
{
|
|
@@ -188,9 +168,7 @@
|
|
|
188
168
|
"message": "Server \"{name}\" has a hardcoded API key in a git-tracked file",
|
|
189
169
|
"fixable": true,
|
|
190
170
|
"fixDescription": "Replace the literal value with an env var reference.",
|
|
191
|
-
"clients": [
|
|
192
|
-
"all"
|
|
193
|
-
],
|
|
171
|
+
"clients": ["all"],
|
|
194
172
|
"stability": "stable"
|
|
195
173
|
},
|
|
196
174
|
{
|
|
@@ -201,9 +179,7 @@
|
|
|
201
179
|
"trigger": "URL contains query params like ?key=, ?token=, ?api_key= with literal values in a git-tracked file.",
|
|
202
180
|
"message": "Server \"{name}\" has a secret in the URL query string",
|
|
203
181
|
"fixable": false,
|
|
204
|
-
"clients": [
|
|
205
|
-
"all"
|
|
206
|
-
],
|
|
182
|
+
"clients": ["all"],
|
|
207
183
|
"stability": "stable"
|
|
208
184
|
},
|
|
209
185
|
{
|
|
@@ -214,9 +190,7 @@
|
|
|
214
190
|
"trigger": "git ls-files fails for a reason other than \"untracked\" or \"not a repository\" (git unavailable, permissions, timeout). A determined \"untracked\" does not fire this rule.",
|
|
215
191
|
"message": "Could not determine git-tracked status of {file}; hardcoded-secret rules were skipped",
|
|
216
192
|
"fixable": false,
|
|
217
|
-
"clients": [
|
|
218
|
-
"all"
|
|
219
|
-
],
|
|
193
|
+
"clients": ["all"],
|
|
220
194
|
"stability": "experimental"
|
|
221
195
|
},
|
|
222
196
|
{
|
|
@@ -227,9 +201,7 @@
|
|
|
227
201
|
"trigger": "URL scheme is http:// and host is not a loopback address (localhost, [::1], 127.0.0.0/8).",
|
|
228
202
|
"message": "Server \"{name}\" uses HTTP without TLS",
|
|
229
203
|
"fixable": false,
|
|
230
|
-
"clients": [
|
|
231
|
-
"all"
|
|
232
|
-
],
|
|
204
|
+
"clients": ["all"],
|
|
233
205
|
"stability": "stable"
|
|
234
206
|
},
|
|
235
207
|
{
|
|
@@ -241,9 +213,7 @@
|
|
|
241
213
|
"message": "Server \"{name}\": npx requires \"cmd /c\" wrapper on Windows",
|
|
242
214
|
"fixable": true,
|
|
243
215
|
"fixDescription": "Rewrite command from \"npx\" to \"cmd\" with [\"/c\", \"npx\", ...] args.",
|
|
244
|
-
"clients": [
|
|
245
|
-
"all"
|
|
246
|
-
],
|
|
216
|
+
"clients": ["all"],
|
|
247
217
|
"stability": "stable"
|
|
248
218
|
},
|
|
249
219
|
{
|
|
@@ -254,9 +224,7 @@
|
|
|
254
224
|
"trigger": "Command starts with ./ or ../ and the resolved path does not exist. Project-scope configs only — a global config's relative command resolves against that client's own working directory.",
|
|
255
225
|
"message": "Server \"{name}\": command \"{command}\" not found",
|
|
256
226
|
"fixable": false,
|
|
257
|
-
"clients": [
|
|
258
|
-
"all"
|
|
259
|
-
],
|
|
227
|
+
"clients": ["all"],
|
|
260
228
|
"stability": "stable"
|
|
261
229
|
},
|
|
262
230
|
{
|
|
@@ -267,9 +235,7 @@
|
|
|
267
235
|
"trigger": "An arg matches a file path pattern (contains / with extension, or starts with ./) and the file does not exist. Relative paths are checked in project-scope configs only — a global config's relative paths resolve against that client's own working directory. Absolute paths are cwd-independent and are checked at every scope.",
|
|
268
236
|
"message": "Server \"{name}\": arg \"{arg}\" looks like a file path but doesn't exist",
|
|
269
237
|
"fixable": false,
|
|
270
|
-
"clients": [
|
|
271
|
-
"all"
|
|
272
|
-
],
|
|
238
|
+
"clients": ["all"],
|
|
273
239
|
"stability": "stable"
|
|
274
240
|
},
|
|
275
241
|
{
|
|
@@ -281,9 +247,7 @@
|
|
|
281
247
|
"message": "Server \"{name}\" uses deprecated SSE transport — use \"http\" (Streamable HTTP) instead",
|
|
282
248
|
"fixable": true,
|
|
283
249
|
"fixDescription": "Replace \"sse\" with \"http\" in the type field.",
|
|
284
|
-
"clients": [
|
|
285
|
-
"all"
|
|
286
|
-
],
|
|
250
|
+
"clients": ["all"],
|
|
287
251
|
"stability": "stable"
|
|
288
252
|
},
|
|
289
253
|
{
|
|
@@ -295,12 +259,7 @@
|
|
|
295
259
|
"message": "Server \"{name}\": {client} uses {expected}, not {actual}",
|
|
296
260
|
"fixable": true,
|
|
297
261
|
"fixDescription": "Rewrite env var references to the correct syntax for the target client.",
|
|
298
|
-
"clients": [
|
|
299
|
-
"claude-code",
|
|
300
|
-
"cursor",
|
|
301
|
-
"continue",
|
|
302
|
-
"windsurf"
|
|
303
|
-
],
|
|
262
|
+
"clients": ["claude-code", "cursor", "continue", "windsurf"],
|
|
304
263
|
"stability": "stable"
|
|
305
264
|
},
|
|
306
265
|
{
|
|
@@ -330,9 +289,7 @@
|
|
|
330
289
|
"trigger": "\"env\" key is present but the object is empty ({}).",
|
|
331
290
|
"message": "Server \"{name}\": empty \"env\" block can be removed",
|
|
332
291
|
"fixable": false,
|
|
333
|
-
"clients": [
|
|
334
|
-
"all"
|
|
335
|
-
],
|
|
292
|
+
"clients": ["all"],
|
|
336
293
|
"stability": "stable"
|
|
337
294
|
},
|
|
338
295
|
{
|
|
@@ -343,9 +300,7 @@
|
|
|
343
300
|
"trigger": "URL cannot be parsed by standard URL parser and does not contain env var placeholders.",
|
|
344
301
|
"message": "Server \"{name}\": invalid URL \"{url}\"",
|
|
345
302
|
"fixable": false,
|
|
346
|
-
"clients": [
|
|
347
|
-
"all"
|
|
348
|
-
],
|
|
303
|
+
"clients": ["all"],
|
|
349
304
|
"stability": "stable"
|
|
350
305
|
},
|
|
351
306
|
{
|
|
@@ -356,9 +311,7 @@
|
|
|
356
311
|
"trigger": "URL host is a loopback address (localhost, [::1], 127.0.0.0/8 — the same set http-no-tls exempts) and the file is a project-level config.",
|
|
357
312
|
"message": "Server \"{name}\": loopback URL in project config won't work for teammates",
|
|
358
313
|
"fixable": false,
|
|
359
|
-
"clients": [
|
|
360
|
-
"all"
|
|
361
|
-
],
|
|
314
|
+
"clients": ["all"],
|
|
362
315
|
"stability": "stable"
|
|
363
316
|
},
|
|
364
317
|
{
|
|
@@ -369,9 +322,7 @@
|
|
|
369
322
|
"trigger": "URL path is empty or just \"/\".",
|
|
370
323
|
"message": "Server \"{name}\": URL has no path — most MCP servers expect /mcp",
|
|
371
324
|
"fixable": false,
|
|
372
|
-
"clients": [
|
|
373
|
-
"all"
|
|
374
|
-
],
|
|
325
|
+
"clients": ["all"],
|
|
375
326
|
"stability": "stable"
|
|
376
327
|
},
|
|
377
328
|
{
|
|
@@ -382,9 +333,7 @@
|
|
|
382
333
|
"trigger": "Server name exists in 2+ same-scope config files (project-project or user-user) with different url or command/args values. Cross-scope pairs are skipped — a user/global config differing from the project one is documented client precedence (project overrides user), not drift.",
|
|
383
334
|
"message": "Server \"{name}\" is configured differently in {file1} and {file2}",
|
|
384
335
|
"fixable": false,
|
|
385
|
-
"clients": [
|
|
386
|
-
"all"
|
|
387
|
-
],
|
|
336
|
+
"clients": ["all"],
|
|
388
337
|
"stability": "stable"
|
|
389
338
|
},
|
|
390
339
|
{
|
|
@@ -395,9 +344,7 @@
|
|
|
395
344
|
"trigger": "Duplicate key in the mcpServers/servers object.",
|
|
396
345
|
"message": "Duplicate server name \"{name}\" in {file} — only the last definition is used",
|
|
397
346
|
"fixable": false,
|
|
398
|
-
"clients": [
|
|
399
|
-
"all"
|
|
400
|
-
],
|
|
347
|
+
"clients": ["all"],
|
|
401
348
|
"stability": "stable"
|
|
402
349
|
},
|
|
403
350
|
{
|
|
@@ -408,9 +355,7 @@
|
|
|
408
355
|
"trigger": "Server exists in .mcp.json but is absent from .cursor/mcp.json, .vscode/mcp.json, or .amazonq/mcp.json (when those files exist).",
|
|
409
356
|
"message": "Server \"{name}\" is in .mcp.json but missing from {file}",
|
|
410
357
|
"fixable": false,
|
|
411
|
-
"clients": [
|
|
412
|
-
"all"
|
|
413
|
-
],
|
|
358
|
+
"clients": ["all"],
|
|
414
359
|
"stability": "stable"
|
|
415
360
|
},
|
|
416
361
|
{
|
|
@@ -421,9 +366,7 @@
|
|
|
421
366
|
"trigger": "Server has \"disabled\": true (any client's config).",
|
|
422
367
|
"message": "Server \"{name}\" is disabled — consider removing it if no longer needed",
|
|
423
368
|
"fixable": false,
|
|
424
|
-
"clients": [
|
|
425
|
-
"all"
|
|
426
|
-
],
|
|
369
|
+
"clients": ["all"],
|
|
427
370
|
"stability": "stable"
|
|
428
371
|
},
|
|
429
372
|
{
|
|
@@ -434,11 +377,7 @@
|
|
|
434
377
|
"trigger": "Server with same name and identical config (command/args/url/env) exists at both project and global scope.",
|
|
435
378
|
"message": "Server \"{name}\" is identically configured in both {projectFile} and {globalFile}",
|
|
436
379
|
"fixable": false,
|
|
437
|
-
"clients": [
|
|
438
|
-
"claude-code",
|
|
439
|
-
"cursor",
|
|
440
|
-
"amazonq"
|
|
441
|
-
],
|
|
380
|
+
"clients": ["claude-code", "cursor", "amazonq"],
|
|
442
381
|
"stability": "stable"
|
|
443
382
|
}
|
|
444
383
|
],
|
|
@@ -447,23 +386,12 @@
|
|
|
447
386
|
"id": "claude-code",
|
|
448
387
|
"name": "Claude Code",
|
|
449
388
|
"projectConfig": ".mcp.json",
|
|
450
|
-
"globalConfig": [
|
|
451
|
-
"~/.claude.json",
|
|
452
|
-
"~/.claude/settings.json"
|
|
453
|
-
],
|
|
389
|
+
"globalConfig": ["~/.claude.json", "~/.claude/settings.json"],
|
|
454
390
|
"rootKey": "mcpServers",
|
|
455
391
|
"envVarSyntax": "${VAR}",
|
|
456
392
|
"envVarDefaultSyntax": "${VAR:-default}",
|
|
457
|
-
"transports": [
|
|
458
|
-
|
|
459
|
-
"http",
|
|
460
|
-
"sse"
|
|
461
|
-
],
|
|
462
|
-
"scopePrecedence": [
|
|
463
|
-
"local",
|
|
464
|
-
"project",
|
|
465
|
-
"user"
|
|
466
|
-
]
|
|
393
|
+
"transports": ["stdio", "http", "sse"],
|
|
394
|
+
"scopePrecedence": ["local", "project", "user"]
|
|
467
395
|
},
|
|
468
396
|
{
|
|
469
397
|
"id": "claude-desktop",
|
|
@@ -475,14 +403,8 @@
|
|
|
475
403
|
},
|
|
476
404
|
"rootKey": "mcpServers",
|
|
477
405
|
"envVarSyntax": null,
|
|
478
|
-
"transports": [
|
|
479
|
-
|
|
480
|
-
"http",
|
|
481
|
-
"sse"
|
|
482
|
-
],
|
|
483
|
-
"scopePrecedence": [
|
|
484
|
-
"global"
|
|
485
|
-
]
|
|
406
|
+
"transports": ["stdio", "http", "sse"],
|
|
407
|
+
"scopePrecedence": ["global"]
|
|
486
408
|
},
|
|
487
409
|
{
|
|
488
410
|
"id": "vscode",
|
|
@@ -491,15 +413,8 @@
|
|
|
491
413
|
"globalConfig": null,
|
|
492
414
|
"rootKey": "servers",
|
|
493
415
|
"envVarSyntax": "${VAR}",
|
|
494
|
-
"transports": [
|
|
495
|
-
|
|
496
|
-
"http",
|
|
497
|
-
"sse"
|
|
498
|
-
],
|
|
499
|
-
"scopePrecedence": [
|
|
500
|
-
"workspace",
|
|
501
|
-
"user"
|
|
502
|
-
]
|
|
416
|
+
"transports": ["stdio", "http", "sse"],
|
|
417
|
+
"scopePrecedence": ["workspace", "user"]
|
|
503
418
|
},
|
|
504
419
|
{
|
|
505
420
|
"id": "cursor",
|
|
@@ -508,15 +423,8 @@
|
|
|
508
423
|
"globalConfig": "~/.cursor/mcp.json",
|
|
509
424
|
"rootKey": "mcpServers",
|
|
510
425
|
"envVarSyntax": "${env:VAR}",
|
|
511
|
-
"transports": [
|
|
512
|
-
|
|
513
|
-
"http",
|
|
514
|
-
"sse"
|
|
515
|
-
],
|
|
516
|
-
"scopePrecedence": [
|
|
517
|
-
"project",
|
|
518
|
-
"global"
|
|
519
|
-
]
|
|
426
|
+
"transports": ["stdio", "http", "sse"],
|
|
427
|
+
"scopePrecedence": ["project", "global"]
|
|
520
428
|
},
|
|
521
429
|
{
|
|
522
430
|
"id": "windsurf",
|
|
@@ -525,14 +433,8 @@
|
|
|
525
433
|
"globalConfig": "~/.codeium/windsurf/mcp_config.json",
|
|
526
434
|
"rootKey": "mcpServers",
|
|
527
435
|
"envVarSyntax": "${env:VAR}",
|
|
528
|
-
"transports": [
|
|
529
|
-
|
|
530
|
-
"http",
|
|
531
|
-
"sse"
|
|
532
|
-
],
|
|
533
|
-
"scopePrecedence": [
|
|
534
|
-
"global"
|
|
535
|
-
]
|
|
436
|
+
"transports": ["stdio", "http", "sse"],
|
|
437
|
+
"scopePrecedence": ["global"]
|
|
536
438
|
},
|
|
537
439
|
{
|
|
538
440
|
"id": "cline",
|
|
@@ -541,14 +443,8 @@
|
|
|
541
443
|
"globalConfig": "VS Code globalStorage: saoudrizwan.claude-dev/settings/cline_mcp_settings.json",
|
|
542
444
|
"rootKey": "mcpServers",
|
|
543
445
|
"envVarSyntax": null,
|
|
544
|
-
"transports": [
|
|
545
|
-
|
|
546
|
-
"http",
|
|
547
|
-
"sse"
|
|
548
|
-
],
|
|
549
|
-
"scopePrecedence": [
|
|
550
|
-
"global"
|
|
551
|
-
]
|
|
446
|
+
"transports": ["stdio", "http", "sse"],
|
|
447
|
+
"scopePrecedence": ["global"]
|
|
552
448
|
},
|
|
553
449
|
{
|
|
554
450
|
"id": "amazonq",
|
|
@@ -557,14 +453,8 @@
|
|
|
557
453
|
"globalConfig": "~/.aws/amazonq/mcp.json",
|
|
558
454
|
"rootKey": "mcpServers",
|
|
559
455
|
"envVarSyntax": null,
|
|
560
|
-
"transports": [
|
|
561
|
-
|
|
562
|
-
"http"
|
|
563
|
-
],
|
|
564
|
-
"scopePrecedence": [
|
|
565
|
-
"workspace",
|
|
566
|
-
"global"
|
|
567
|
-
]
|
|
456
|
+
"transports": ["stdio", "http"],
|
|
457
|
+
"scopePrecedence": ["workspace", "global"]
|
|
568
458
|
},
|
|
569
459
|
{
|
|
570
460
|
"id": "continue",
|
|
@@ -573,15 +463,8 @@
|
|
|
573
463
|
"globalConfig": "~/.continue/config.yaml",
|
|
574
464
|
"rootKey": "mcpServers",
|
|
575
465
|
"envVarSyntax": "${{ secrets.VAR }}",
|
|
576
|
-
"transports": [
|
|
577
|
-
|
|
578
|
-
"http",
|
|
579
|
-
"sse"
|
|
580
|
-
],
|
|
581
|
-
"scopePrecedence": [
|
|
582
|
-
"workspace",
|
|
583
|
-
"global"
|
|
584
|
-
]
|
|
466
|
+
"transports": ["stdio", "http", "sse"],
|
|
467
|
+
"scopePrecedence": ["workspace", "global"]
|
|
585
468
|
}
|
|
586
469
|
]
|
|
587
470
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yawlabs/ctxlint",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.2",
|
|
4
4
|
"mcpName": "io.github.YawLabs/ctxlint",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Linter for AI agent context files and MCP configs: CLAUDE.md, AGENTS.md, .cursorrules, .mcp.json - catches broken paths, wrong commands, leaked secrets",
|
|
6
6
|
"bin": {
|
|
7
7
|
"ctxlint": "bin/ctxlint.mjs"
|
|
8
8
|
},
|
|
@@ -19,44 +19,42 @@
|
|
|
19
19
|
"pretest": "node build.mjs",
|
|
20
20
|
"pretest:run": "node build.mjs",
|
|
21
21
|
"pretest:coverage": "node build.mjs",
|
|
22
|
-
"test": "vitest",
|
|
23
|
-
"test:run": "vitest run",
|
|
22
|
+
"test": "prettier --check . && vitest",
|
|
23
|
+
"test:run": "prettier --check . && vitest run",
|
|
24
24
|
"test:coverage": "vitest run --coverage --coverage.reporter=text-summary --coverage.reporter=html --coverage.exclude='**/__tests__/**' --coverage.exclude='**/fixtures/**' --coverage.exclude='dist/**' --coverage.exclude='build.mjs' --coverage.exclude='coverage-report.mjs'",
|
|
25
25
|
"lint": "eslint src/",
|
|
26
|
-
"format": "prettier --write
|
|
26
|
+
"format": "prettier --write .",
|
|
27
|
+
"format:check": "prettier --check .",
|
|
27
28
|
"mcp": "node dist/index.js --mcp-server"
|
|
28
29
|
},
|
|
29
30
|
"keywords": [
|
|
30
|
-
"claude",
|
|
31
|
-
"agents",
|
|
32
|
-
"context",
|
|
33
|
-
"lint",
|
|
34
|
-
"linter",
|
|
35
31
|
"claude-md",
|
|
36
32
|
"agents-md",
|
|
33
|
+
"cursorrules",
|
|
34
|
+
"windsurfrules",
|
|
35
|
+
"copilot-instructions",
|
|
36
|
+
"context-lint",
|
|
37
|
+
"linter",
|
|
38
|
+
"lint",
|
|
39
|
+
"ai-agents",
|
|
37
40
|
"ai-coding",
|
|
38
41
|
"context-engineering",
|
|
39
42
|
"mcp",
|
|
40
|
-
"cursorrules",
|
|
41
|
-
"copilot-instructions",
|
|
42
|
-
"windsurfrules",
|
|
43
|
-
"pre-commit",
|
|
44
|
-
"agentic",
|
|
45
|
-
"codex",
|
|
46
|
-
"sarif",
|
|
47
43
|
"mcp-server",
|
|
48
44
|
"model-context-protocol",
|
|
49
|
-
"
|
|
45
|
+
"claude-code",
|
|
46
|
+
"cursor",
|
|
47
|
+
"windsurf",
|
|
48
|
+
"github-copilot",
|
|
50
49
|
"gemini",
|
|
51
50
|
"cline",
|
|
52
|
-
"windsurf",
|
|
53
|
-
"session",
|
|
54
|
-
"cross-project",
|
|
55
|
-
"agent-session",
|
|
56
51
|
"aider",
|
|
57
|
-
"vibe-cli",
|
|
58
52
|
"amazon-q",
|
|
59
|
-
"goose"
|
|
53
|
+
"goose",
|
|
54
|
+
"codex",
|
|
55
|
+
"sarif",
|
|
56
|
+
"pre-commit",
|
|
57
|
+
"agent-session"
|
|
60
58
|
],
|
|
61
59
|
"files": [
|
|
62
60
|
"dist/index.js",
|
|
@@ -83,7 +81,7 @@
|
|
|
83
81
|
"bugs": {
|
|
84
82
|
"url": "https://github.com/YawLabs/ctxlint/issues"
|
|
85
83
|
},
|
|
86
|
-
"homepage": "https://
|
|
84
|
+
"homepage": "https://yaw.sh/mcp-servers/ctxlint/",
|
|
87
85
|
"author": "Yaw Labs <contact@yaw.sh>",
|
|
88
86
|
"engines": {
|
|
89
87
|
"node": ">=20"
|