overmind-mcp 2.0.0 → 2.0.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.
@@ -1,246 +0,0 @@
1
- import { z } from 'zod';
2
- import { readdir, readFile, stat, realpath } from 'fs/promises';
3
- import { join, extname, basename, resolve, sep } from 'path';
4
- export const metadataSchema = z.object({
5
- path: z.string().default('.').describe('Chemin du projet (défaut: répertoire courant)'),
6
- depth: z.number().min(1).max(8).default(3).describe("Profondeur de l'arborescence (défaut: 3)"),
7
- includeStats: z.boolean().default(true).describe('Inclure les statistiques (défaut: true)'),
8
- });
9
- const IGNORED = new Set([
10
- 'node_modules',
11
- '.git',
12
- '.github',
13
- 'dist',
14
- '.next',
15
- 'build',
16
- 'coverage',
17
- '__pycache__',
18
- '.cache',
19
- '.turbo',
20
- '.pnpm-store',
21
- ]);
22
- const CONFIG_FILES = [
23
- 'package.json',
24
- 'tsconfig.json',
25
- 'tsconfig.base.json',
26
- '.env.example',
27
- 'vite.config.ts',
28
- 'vite.config.js',
29
- 'vitest.config.ts',
30
- 'eslint.config.js',
31
- '.eslintrc.json',
32
- 'prettier.config.js',
33
- '.prettierrc',
34
- 'Dockerfile',
35
- 'docker-compose.yml',
36
- ];
37
- const LANG_MAP = {
38
- '.ts': 'TypeScript',
39
- '.tsx': 'TypeScript (JSX)',
40
- '.js': 'JavaScript',
41
- '.jsx': 'JavaScript (JSX)',
42
- '.py': 'Python',
43
- '.go': 'Go',
44
- '.rs': 'Rust',
45
- '.java': 'Java',
46
- '.cs': 'C#',
47
- '.cpp': 'C++',
48
- '.c': 'C',
49
- '.md': 'Markdown',
50
- '.json': 'JSON',
51
- '.yaml': 'YAML',
52
- '.yml': 'YAML',
53
- '.toml': 'TOML',
54
- '.sh': 'Shell',
55
- '.bat': 'Batch',
56
- '.sql': 'SQL',
57
- '.html': 'HTML',
58
- '.css': 'CSS',
59
- '.scss': 'SCSS',
60
- };
61
- async function buildTree(dir, depth, currentDepth = 0) {
62
- if (currentDepth >= depth)
63
- return [];
64
- let entries;
65
- try {
66
- entries = await readdir(dir, { withFileTypes: true });
67
- }
68
- catch {
69
- return [];
70
- }
71
- const nodes = [];
72
- for (const entry of entries) {
73
- if (IGNORED.has(entry.name) || (entry.name.startsWith('.') && entry.name !== '.env.example'))
74
- continue;
75
- if (entry.isDirectory()) {
76
- const children = await buildTree(join(dir, entry.name), depth, currentDepth + 1);
77
- nodes.push({ name: entry.name, type: 'dir', children });
78
- }
79
- else {
80
- nodes.push({ name: entry.name, type: 'file' });
81
- }
82
- }
83
- return nodes.sort((a, b) => {
84
- if (a.type !== b.type)
85
- return a.type === 'dir' ? -1 : 1;
86
- return a.name.localeCompare(b.name);
87
- });
88
- }
89
- function renderTree(nodes, prefix = '') {
90
- let out = '';
91
- for (let i = 0; i < nodes.length; i++) {
92
- const node = nodes[i];
93
- const isLast = i === nodes.length - 1;
94
- const connector = isLast ? '└── ' : '├── ';
95
- const icon = node.type === 'dir' ? '📁 ' : '📄 ';
96
- out += `${prefix}${connector}${icon}${node.name}\n`;
97
- if (node.children?.length) {
98
- out += renderTree(node.children, prefix + (isLast ? ' ' : '│ '));
99
- }
100
- }
101
- return out;
102
- }
103
- async function collectStats(dir) {
104
- const stats = { totalFiles: 0, totalLines: 0, languages: {}, filePaths: [] };
105
- async function walk(d) {
106
- let entries;
107
- try {
108
- entries = await readdir(d, { withFileTypes: true });
109
- }
110
- catch {
111
- return;
112
- }
113
- for (const entry of entries) {
114
- if (IGNORED.has(entry.name))
115
- continue;
116
- const fullPath = join(d, entry.name);
117
- if (entry.isDirectory()) {
118
- await walk(fullPath);
119
- }
120
- else {
121
- const ext = extname(entry.name).toLowerCase();
122
- const lang = LANG_MAP[ext];
123
- if (lang) {
124
- stats.totalFiles++;
125
- stats.languages[lang] = (stats.languages[lang] ?? 0) + 1;
126
- // Store relative path from project root
127
- stats.filePaths.push(fullPath.slice(dir.length + 1).replace(/\\/g, '/'));
128
- try {
129
- const content = await readFile(fullPath, 'utf8');
130
- stats.totalLines += content.split('\n').length;
131
- }
132
- catch {
133
- // skip unreadable files
134
- }
135
- }
136
- }
137
- }
138
- }
139
- await walk(dir);
140
- stats.filePaths.sort();
141
- return stats;
142
- }
143
- async function getConfigs(dir) {
144
- const result = {};
145
- for (const file of CONFIG_FILES) {
146
- try {
147
- const filePath = join(dir, file);
148
- const s = await stat(filePath);
149
- if (s.size > 1024 * 1024) {
150
- result[file] = '[FILE TOO LARGE >1MB — skipped]';
151
- continue;
152
- }
153
- const content = await readFile(filePath, 'utf8');
154
- result[file] = content.length > 2000 ? content.slice(0, 2000) + '\n…(tronqué)' : content;
155
- }
156
- catch {
157
- // file absent
158
- }
159
- }
160
- return result;
161
- }
162
- function withinRoot(candidate, root) {
163
- // Normalize: add trailing sep so /foo doesn't match /foobar
164
- const norm = (s) => {
165
- const withSep = s.endsWith(sep) ? s : s + sep;
166
- // Case-insensitive on Windows
167
- return process.platform === 'win32' ? withSep.toLowerCase() : withSep;
168
- };
169
- return norm(candidate).startsWith(norm(root));
170
- }
171
- async function resolveAbsPath(p) {
172
- const cwd = await realpath(process.cwd());
173
- if (!p || p === '.')
174
- return cwd;
175
- // Pre-check before stat (catches obvious traversal early)
176
- const candidate = resolve(cwd, p);
177
- if (!withinRoot(candidate, cwd)) {
178
- throw new Error(`Chemin refusé : "${p}" est en dehors du répertoire de travail. Utilisez un chemin relatif.`);
179
- }
180
- let real;
181
- try {
182
- const s = await stat(candidate);
183
- if (!s.isDirectory())
184
- throw new Error(`"${p}" n'est pas un répertoire.`);
185
- // Resolve symlinks and re-check — prevents symlink escape on Linux/Mac
186
- real = await realpath(candidate);
187
- }
188
- catch (e) {
189
- if (e instanceof Error && (e.message.startsWith('Chemin refusé') || e.message.startsWith('"')))
190
- throw e;
191
- throw new Error(`Répertoire introuvable : "${p}"`);
192
- }
193
- if (!withinRoot(real, cwd)) {
194
- throw new Error(`Chemin refusé : "${p}" pointe (via symlink) en dehors du répertoire de travail.`);
195
- }
196
- return real;
197
- }
198
- export async function metadataTool(args) {
199
- const { path: rawPath, depth, includeStats } = args;
200
- let absPath;
201
- try {
202
- absPath = await resolveAbsPath(rawPath);
203
- }
204
- catch (e) {
205
- return {
206
- isError: true,
207
- content: [
208
- { type: 'text', text: `❌ ${e instanceof Error ? e.message : String(e)}` },
209
- ],
210
- };
211
- }
212
- const projectName = basename(absPath);
213
- let output = `# 🗂️ Metadata — \`${projectName}\`\n\n`;
214
- output += `> **Chemin :** \`${absPath}\`\n\n`;
215
- // Arborescence
216
- const tree = await buildTree(absPath, depth);
217
- output += `## 📁 Arborescence (profondeur ${depth})\n\`\`\`\n${projectName}/\n${renderTree(tree)}\`\`\`\n\n`;
218
- // Configs
219
- const configs = await getConfigs(absPath);
220
- if (Object.keys(configs).length > 0) {
221
- output += `## ⚙️ Fichiers de configuration\n`;
222
- for (const [file, content] of Object.entries(configs)) {
223
- const ext = file.endsWith('.json') ? 'json' : file.endsWith('.md') ? 'markdown' : 'yaml';
224
- output += `### \`${file}\`\n\`\`\`${ext}\n${content}\n\`\`\`\n\n`;
225
- }
226
- }
227
- // Stats
228
- if (includeStats) {
229
- const stats = await collectStats(absPath);
230
- output += `## 📊 Statistiques\n`;
231
- output += `- **Fichiers sources :** ${stats.totalFiles}\n`;
232
- output += `- **Lignes totales :** ${stats.totalLines.toLocaleString()}\n`;
233
- output += `- **Langages :**\n`;
234
- const sorted = Object.entries(stats.languages).sort((a, b) => b[1] - a[1]);
235
- for (const [lang, count] of sorted) {
236
- output += ` - ${lang}: ${count} fichier${count > 1 ? 's' : ''}\n`;
237
- }
238
- output += `\n## 📋 Fichiers sources (${stats.totalFiles})\n\`\`\`\n`;
239
- output += stats.filePaths.join('\n');
240
- output += `\n\`\`\`\n`;
241
- }
242
- return {
243
- content: [{ type: 'text', text: output }],
244
- };
245
- }
246
- //# sourceMappingURL=metadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"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"}