@inkog-io/mcp 1.0.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/LICENSE +190 -0
- package/README.md +265 -0
- package/dist/api/client.d.ts +108 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +288 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/types.d.ts +286 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +21 -0
- package/dist/api/types.js.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +130 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +203 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/audit-a2a.d.ts +20 -0
- package/dist/tools/audit-a2a.d.ts.map +1 -0
- package/dist/tools/audit-a2a.js +382 -0
- package/dist/tools/audit-a2a.js.map +1 -0
- package/dist/tools/audit-mcp.d.ts +16 -0
- package/dist/tools/audit-mcp.d.ts.map +1 -0
- package/dist/tools/audit-mcp.js +259 -0
- package/dist/tools/audit-mcp.js.map +1 -0
- package/dist/tools/compliance.d.ts +14 -0
- package/dist/tools/compliance.d.ts.map +1 -0
- package/dist/tools/compliance.js +255 -0
- package/dist/tools/compliance.js.map +1 -0
- package/dist/tools/explain.d.ts +14 -0
- package/dist/tools/explain.d.ts.map +1 -0
- package/dist/tools/explain.js +202 -0
- package/dist/tools/explain.js.map +1 -0
- package/dist/tools/governance.d.ts +16 -0
- package/dist/tools/governance.d.ts.map +1 -0
- package/dist/tools/governance.js +200 -0
- package/dist/tools/governance.js.map +1 -0
- package/dist/tools/index.d.ts +50 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +94 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mlbom.d.ts +18 -0
- package/dist/tools/mlbom.d.ts.map +1 -0
- package/dist/tools/mlbom.js +344 -0
- package/dist/tools/mlbom.js.map +1 -0
- package/dist/tools/scan.d.ts +15 -0
- package/dist/tools/scan.d.ts.map +1 -0
- package/dist/tools/scan.js +270 -0
- package/dist/tools/scan.js.map +1 -0
- package/dist/utils/file-reader.d.ts +55 -0
- package/dist/utils/file-reader.d.ts.map +1 -0
- package/dist/utils/file-reader.js +269 -0
- package/dist/utils/file-reader.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Reader Utility
|
|
3
|
+
*
|
|
4
|
+
* Safe file system operations for reading agent codebases.
|
|
5
|
+
* Features:
|
|
6
|
+
* - Directory traversal with configurable patterns
|
|
7
|
+
* - Binary file detection
|
|
8
|
+
* - Size limits
|
|
9
|
+
* - Ignore patterns (node_modules, .git, etc.)
|
|
10
|
+
*/
|
|
11
|
+
export interface FileInput {
|
|
12
|
+
path: string;
|
|
13
|
+
content: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ReadOptions {
|
|
16
|
+
/** Maximum file size in bytes (default: 1MB) */
|
|
17
|
+
maxFileSize?: number;
|
|
18
|
+
/** Maximum total size in bytes (default: 10MB) */
|
|
19
|
+
maxTotalSize?: number;
|
|
20
|
+
/** Maximum number of files (default: 100) */
|
|
21
|
+
maxFiles?: number;
|
|
22
|
+
/** File extensions to include (default: common code extensions) */
|
|
23
|
+
extensions?: string[];
|
|
24
|
+
/** Patterns to ignore (default: node_modules, .git, etc.) */
|
|
25
|
+
ignorePatterns?: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface ReadResult {
|
|
28
|
+
files: FileInput[];
|
|
29
|
+
skipped: {
|
|
30
|
+
path: string;
|
|
31
|
+
reason: string;
|
|
32
|
+
}[];
|
|
33
|
+
totalSize: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read a single file safely
|
|
37
|
+
*/
|
|
38
|
+
export declare function readFile(filePath: string, options?: ReadOptions): FileInput | null;
|
|
39
|
+
/**
|
|
40
|
+
* Read all files from a directory recursively
|
|
41
|
+
*/
|
|
42
|
+
export declare function readDirectory(dirPath: string, options?: ReadOptions): ReadResult;
|
|
43
|
+
/**
|
|
44
|
+
* Get relative paths for display
|
|
45
|
+
*/
|
|
46
|
+
export declare function getRelativePaths(files: FileInput[], basePath: string): FileInput[];
|
|
47
|
+
/**
|
|
48
|
+
* Check if a path looks like an AGENTS.md file
|
|
49
|
+
*/
|
|
50
|
+
export declare function isAgentsMdFile(filePath: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Find AGENTS.md file in a directory
|
|
53
|
+
*/
|
|
54
|
+
export declare function findAgentsMd(dirPath: string): string | null;
|
|
55
|
+
//# sourceMappingURL=file-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-reader.d.ts","sourceRoot":"","sources":["../../src/utils/file-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;IACJ,SAAS,EAAE,MAAM,CAAC;CACnB;AA0FD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CA6BlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAsHhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAMlF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwB3D"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Reader Utility
|
|
3
|
+
*
|
|
4
|
+
* Safe file system operations for reading agent codebases.
|
|
5
|
+
* Features:
|
|
6
|
+
* - Directory traversal with configurable patterns
|
|
7
|
+
* - Binary file detection
|
|
8
|
+
* - Size limits
|
|
9
|
+
* - Ignore patterns (node_modules, .git, etc.)
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from 'node:fs';
|
|
12
|
+
import * as path from 'node:path';
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Constants
|
|
15
|
+
// =============================================================================
|
|
16
|
+
const DEFAULT_EXTENSIONS = [
|
|
17
|
+
'.py',
|
|
18
|
+
'.js',
|
|
19
|
+
'.jsx',
|
|
20
|
+
'.ts',
|
|
21
|
+
'.tsx',
|
|
22
|
+
'.go',
|
|
23
|
+
'.java',
|
|
24
|
+
'.rb',
|
|
25
|
+
'.php',
|
|
26
|
+
'.cs',
|
|
27
|
+
'.rs',
|
|
28
|
+
'.c',
|
|
29
|
+
'.cpp',
|
|
30
|
+
'.h',
|
|
31
|
+
'.hpp',
|
|
32
|
+
'.yaml',
|
|
33
|
+
'.yml',
|
|
34
|
+
'.json',
|
|
35
|
+
'.md',
|
|
36
|
+
'.env',
|
|
37
|
+
'.conf',
|
|
38
|
+
'.cfg',
|
|
39
|
+
'.toml',
|
|
40
|
+
'.xml',
|
|
41
|
+
];
|
|
42
|
+
const DEFAULT_IGNORE_PATTERNS = [
|
|
43
|
+
'node_modules',
|
|
44
|
+
'.git',
|
|
45
|
+
'__pycache__',
|
|
46
|
+
'.venv',
|
|
47
|
+
'venv',
|
|
48
|
+
'vendor',
|
|
49
|
+
'dist',
|
|
50
|
+
'build',
|
|
51
|
+
'.next',
|
|
52
|
+
'.nuxt',
|
|
53
|
+
'coverage',
|
|
54
|
+
'.pytest_cache',
|
|
55
|
+
'.mypy_cache',
|
|
56
|
+
'target', // Rust/Java
|
|
57
|
+
'bin',
|
|
58
|
+
'obj',
|
|
59
|
+
'.idea',
|
|
60
|
+
'.vscode',
|
|
61
|
+
'.DS_Store',
|
|
62
|
+
'Thumbs.db',
|
|
63
|
+
];
|
|
64
|
+
const DEFAULT_MAX_FILE_SIZE = 1 * 1024 * 1024; // 1MB
|
|
65
|
+
const DEFAULT_MAX_TOTAL_SIZE = 10 * 1024 * 1024; // 10MB
|
|
66
|
+
const DEFAULT_MAX_FILES = 100;
|
|
67
|
+
// =============================================================================
|
|
68
|
+
// File Reader
|
|
69
|
+
// =============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Check if a path should be ignored
|
|
72
|
+
*/
|
|
73
|
+
function shouldIgnore(filePath, ignorePatterns) {
|
|
74
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
75
|
+
return ignorePatterns.some((pattern) => {
|
|
76
|
+
// Check if any path segment matches the pattern
|
|
77
|
+
const segments = normalizedPath.split('/');
|
|
78
|
+
return segments.some((segment) => segment === pattern || segment.startsWith(pattern + '.'));
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if a file is likely binary
|
|
83
|
+
*/
|
|
84
|
+
function isBinaryFile(buffer) {
|
|
85
|
+
// Check for null bytes in first 8KB
|
|
86
|
+
const sample = buffer.subarray(0, 8192);
|
|
87
|
+
for (const byte of sample) {
|
|
88
|
+
if (byte === 0) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Read a single file safely
|
|
96
|
+
*/
|
|
97
|
+
export function readFile(filePath, options) {
|
|
98
|
+
const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;
|
|
99
|
+
try {
|
|
100
|
+
const stats = fs.statSync(filePath);
|
|
101
|
+
if (!stats.isFile()) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
if (stats.size > maxFileSize) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const buffer = fs.readFileSync(filePath);
|
|
108
|
+
if (isBinaryFile(buffer)) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
const content = buffer.toString('utf-8');
|
|
112
|
+
return {
|
|
113
|
+
path: filePath,
|
|
114
|
+
content,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Read all files from a directory recursively
|
|
123
|
+
*/
|
|
124
|
+
export function readDirectory(dirPath, options) {
|
|
125
|
+
const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;
|
|
126
|
+
const maxTotalSize = options?.maxTotalSize ?? DEFAULT_MAX_TOTAL_SIZE;
|
|
127
|
+
const maxFiles = options?.maxFiles ?? DEFAULT_MAX_FILES;
|
|
128
|
+
const extensions = options?.extensions ?? DEFAULT_EXTENSIONS;
|
|
129
|
+
const ignorePatterns = options?.ignorePatterns ?? DEFAULT_IGNORE_PATTERNS;
|
|
130
|
+
const result = {
|
|
131
|
+
files: [],
|
|
132
|
+
skipped: [],
|
|
133
|
+
totalSize: 0,
|
|
134
|
+
};
|
|
135
|
+
function walk(currentPath) {
|
|
136
|
+
// Stop if we've hit limits
|
|
137
|
+
if (result.files.length >= maxFiles) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (result.totalSize >= maxTotalSize) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Check if path should be ignored
|
|
144
|
+
if (shouldIgnore(currentPath, ignorePatterns)) {
|
|
145
|
+
result.skipped.push({ path: currentPath, reason: 'ignored_pattern' });
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
let stats;
|
|
149
|
+
try {
|
|
150
|
+
stats = fs.statSync(currentPath);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
result.skipped.push({ path: currentPath, reason: 'read_error' });
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (stats.isDirectory()) {
|
|
157
|
+
let entries;
|
|
158
|
+
try {
|
|
159
|
+
entries = fs.readdirSync(currentPath);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
result.skipped.push({ path: currentPath, reason: 'read_error' });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
for (const entry of entries) {
|
|
166
|
+
walk(path.join(currentPath, entry));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else if (stats.isFile()) {
|
|
170
|
+
// Check extension
|
|
171
|
+
const ext = path.extname(currentPath).toLowerCase();
|
|
172
|
+
if (extensions.length > 0 && !extensions.includes(ext)) {
|
|
173
|
+
result.skipped.push({ path: currentPath, reason: 'extension_not_supported' });
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// Check file size
|
|
177
|
+
if (stats.size > maxFileSize) {
|
|
178
|
+
result.skipped.push({ path: currentPath, reason: 'file_too_large' });
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Check total size limit
|
|
182
|
+
if (result.totalSize + stats.size > maxTotalSize) {
|
|
183
|
+
result.skipped.push({ path: currentPath, reason: 'total_size_exceeded' });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// Check file count limit
|
|
187
|
+
if (result.files.length >= maxFiles) {
|
|
188
|
+
result.skipped.push({ path: currentPath, reason: 'max_files_exceeded' });
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// Read file
|
|
192
|
+
try {
|
|
193
|
+
const buffer = fs.readFileSync(currentPath);
|
|
194
|
+
if (isBinaryFile(buffer)) {
|
|
195
|
+
result.skipped.push({ path: currentPath, reason: 'binary_file' });
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const content = buffer.toString('utf-8');
|
|
199
|
+
result.files.push({
|
|
200
|
+
path: currentPath,
|
|
201
|
+
content,
|
|
202
|
+
});
|
|
203
|
+
result.totalSize += stats.size;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
result.skipped.push({ path: currentPath, reason: 'read_error' });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Normalize path
|
|
211
|
+
const resolvedPath = path.resolve(dirPath);
|
|
212
|
+
// Check if path exists
|
|
213
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
214
|
+
throw new Error(`Path does not exist: ${dirPath}`);
|
|
215
|
+
}
|
|
216
|
+
const stats = fs.statSync(resolvedPath);
|
|
217
|
+
if (stats.isFile()) {
|
|
218
|
+
// Single file
|
|
219
|
+
const file = readFile(resolvedPath, options);
|
|
220
|
+
if (file !== null) {
|
|
221
|
+
result.files.push(file);
|
|
222
|
+
result.totalSize = stats.size;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else if (stats.isDirectory()) {
|
|
226
|
+
walk(resolvedPath);
|
|
227
|
+
}
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get relative paths for display
|
|
232
|
+
*/
|
|
233
|
+
export function getRelativePaths(files, basePath) {
|
|
234
|
+
const resolvedBase = path.resolve(basePath);
|
|
235
|
+
return files.map((file) => ({
|
|
236
|
+
path: path.relative(resolvedBase, file.path),
|
|
237
|
+
content: file.content,
|
|
238
|
+
}));
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Check if a path looks like an AGENTS.md file
|
|
242
|
+
*/
|
|
243
|
+
export function isAgentsMdFile(filePath) {
|
|
244
|
+
const filename = path.basename(filePath).toLowerCase();
|
|
245
|
+
return filename === 'agents.md';
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Find AGENTS.md file in a directory
|
|
249
|
+
*/
|
|
250
|
+
export function findAgentsMd(dirPath) {
|
|
251
|
+
const resolvedPath = path.resolve(dirPath);
|
|
252
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
const stats = fs.statSync(resolvedPath);
|
|
256
|
+
if (stats.isFile()) {
|
|
257
|
+
return isAgentsMdFile(resolvedPath) ? resolvedPath : null;
|
|
258
|
+
}
|
|
259
|
+
// Check common locations
|
|
260
|
+
const candidates = ['AGENTS.md', 'agents.md', 'Agents.md', '.agents.md'];
|
|
261
|
+
for (const candidate of candidates) {
|
|
262
|
+
const candidatePath = path.join(resolvedPath, candidate);
|
|
263
|
+
if (fs.existsSync(candidatePath)) {
|
|
264
|
+
return candidatePath;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=file-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-reader.js","sourceRoot":"","sources":["../../src/utils/file-reader.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@inkog-io/mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Inkog AI Security Platform - MCP Server for AI agent vulnerability scanning, AGENTS.md governance verification, and compliance reporting",
|
|
5
|
+
"author": "Inkog <hello@inkog.io>",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/inkog-io/inkog-mcp"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://inkog.io",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"mcp",
|
|
14
|
+
"ai-security",
|
|
15
|
+
"ai-agents",
|
|
16
|
+
"agents-md",
|
|
17
|
+
"governance",
|
|
18
|
+
"compliance",
|
|
19
|
+
"eu-ai-act",
|
|
20
|
+
"langchain",
|
|
21
|
+
"crewai",
|
|
22
|
+
"langgraph",
|
|
23
|
+
"vulnerability-scanner"
|
|
24
|
+
],
|
|
25
|
+
"type": "module",
|
|
26
|
+
"main": "dist/index.js",
|
|
27
|
+
"types": "dist/index.d.ts",
|
|
28
|
+
"bin": {
|
|
29
|
+
"inkog-mcp": "dist/index.js"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"README.md",
|
|
34
|
+
"LICENSE"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc",
|
|
38
|
+
"dev": "tsc --watch",
|
|
39
|
+
"lint": "eslint src",
|
|
40
|
+
"lint:fix": "eslint src --fix",
|
|
41
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
42
|
+
"typecheck": "tsc --noEmit",
|
|
43
|
+
"test": "vitest",
|
|
44
|
+
"test:run": "vitest run",
|
|
45
|
+
"prepublishOnly": "npm run build && npm run lint && npm run test:run"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
49
|
+
"zod": "^3.23.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@eslint/js": "^9.0.0",
|
|
53
|
+
"@types/node": "^22.0.0",
|
|
54
|
+
"eslint": "^9.0.0",
|
|
55
|
+
"eslint-config-prettier": "^9.1.0",
|
|
56
|
+
"prettier": "^3.2.0",
|
|
57
|
+
"typescript": "^5.4.0",
|
|
58
|
+
"typescript-eslint": "^8.0.0",
|
|
59
|
+
"vitest": "^1.6.0"
|
|
60
|
+
},
|
|
61
|
+
"engines": {
|
|
62
|
+
"node": ">=18.0.0"
|
|
63
|
+
}
|
|
64
|
+
}
|