@fkom13/mcp-sftp-orchestrator 11.3.0 → 11.8.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/.env.example +6 -0
- package/CHANGELOG.md +174 -0
- package/README.fr.md +230 -243
- package/README.md +268 -286
- package/apis.js +20 -81
- package/atomicJsonStore.js +117 -0
- package/config.js +5 -0
- package/fleet.js +170 -0
- package/groups.js +25 -0
- package/history.js +5 -51
- package/infraTopology.js +336 -0
- package/inventory.js +151 -0
- package/lhm.plugin.json +7 -0
- package/notes.js +3 -87
- package/package.json +8 -6
- package/policies.js +6 -74
- package/projects.js +108 -0
- package/queue.js +83 -14
- package/server.js +821 -90
- package/servers.js +30 -33
- package/sftp.js +168 -60
- package/shellSessions.js +31 -3
- package/snapshotManager.js +3 -7
- package/sourceAdapter.js +54 -1
- package/ssh.js +17 -3
- package/sshPool.js +129 -112
- package/sshTrust.js +214 -0
- package/toolMetadata.js +76 -0
- package/tunnels.js +36 -17
- package/utils.js +210 -1
- package/workSession.js +139 -0
- package/.gencodedoc.yaml +0 -76
- package/ROADMAP.md +0 -21
- package/test_features.js +0 -112
- package/test_mcp.js +0 -55
package/test_features.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import queue from './queue.js';
|
|
4
|
-
import sshPool from './sshPool.js';
|
|
5
|
-
import { glob } from 'glob';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
|
|
8
|
-
console.log('🧪 Test des fonctionnalités MCP Orchestrator v6.0\n');
|
|
9
|
-
|
|
10
|
-
// Test 1: Queue persistante
|
|
11
|
-
console.log('✅ Test Queue:');
|
|
12
|
-
const testJob = queue.addJob({
|
|
13
|
-
type: 'test',
|
|
14
|
-
alias: 'test_server',
|
|
15
|
-
cmd: 'echo "Test"',
|
|
16
|
-
status: 'pending'
|
|
17
|
-
});
|
|
18
|
-
console.log(` - Tâche créée: ${testJob.id}`);
|
|
19
|
-
console.log(` - Stats queue:`, queue.getStats());
|
|
20
|
-
|
|
21
|
-
// Test 2: Pool de connexions
|
|
22
|
-
console.log('\n✅ Test Pool SSH:');
|
|
23
|
-
const poolStats = sshPool.getStats();
|
|
24
|
-
console.log(` - Connexions totales: ${poolStats.totalConnections}`);
|
|
25
|
-
console.log(` - Serveurs actifs: ${Object.keys(poolStats.byServer).length}`);
|
|
26
|
-
|
|
27
|
-
// Test 3: Patterns Glob
|
|
28
|
-
console.log('\n✅ Test Patterns Glob:');
|
|
29
|
-
async function testGlob() {
|
|
30
|
-
const patterns = ['*.js', '*.json'];
|
|
31
|
-
for (const pattern of patterns) {
|
|
32
|
-
const files = await glob(pattern, { cwd: process.cwd() });
|
|
33
|
-
console.log(` - Pattern "${pattern}": ${files.length} fichiers trouvés`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Test 4: Détection de prompts interactifs
|
|
38
|
-
console.log('\n✅ Test Détection Prompts:');
|
|
39
|
-
const testPrompts = [
|
|
40
|
-
'Are you sure you want to continue? (yes/no)',
|
|
41
|
-
'Password:',
|
|
42
|
-
'Do you want to continue [Y/n]?',
|
|
43
|
-
'Save configuration?'
|
|
44
|
-
];
|
|
45
|
-
|
|
46
|
-
function detectPrompt(text) {
|
|
47
|
-
const patterns = {
|
|
48
|
-
'continue': /continue.*\?/i,
|
|
49
|
-
'password': /password:/i,
|
|
50
|
-
'yes/no': /\(yes\/no\)/i,
|
|
51
|
-
'y/n': /\[y\/n\]/i,
|
|
52
|
-
'save': /save.*\?/i
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
for (const [name, regex] of Object.entries(patterns)) {
|
|
56
|
-
if (regex.test(text)) {
|
|
57
|
-
return name;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
testPrompts.forEach(prompt => {
|
|
64
|
-
const detected = detectPrompt(prompt);
|
|
65
|
-
console.log(` - "${prompt.substring(0, 30)}..." → ${detected || 'non détecté'}`);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// Test 5: Logs système
|
|
69
|
-
console.log('\n✅ Test Logs:');
|
|
70
|
-
queue.log('info', 'Test log info');
|
|
71
|
-
queue.log('warn', 'Test log warning');
|
|
72
|
-
queue.log('error', 'Test log error');
|
|
73
|
-
const logs = queue.getLogs({ limit: 3 });
|
|
74
|
-
console.log(` - ${logs.length} logs récupérés`);
|
|
75
|
-
|
|
76
|
-
// Test 6: Gestion des tâches crashées
|
|
77
|
-
console.log('\n✅ Test Gestion Crashes:');
|
|
78
|
-
const crashedJob = queue.addJob({
|
|
79
|
-
type: 'test_crash',
|
|
80
|
-
alias: 'test',
|
|
81
|
-
status: 'running'
|
|
82
|
-
});
|
|
83
|
-
queue.updateJobStatus(crashedJob.id, 'crashed', {
|
|
84
|
-
canRetry: true,
|
|
85
|
-
crashedAt: new Date()
|
|
86
|
-
});
|
|
87
|
-
const crashed = queue.getCrashedJobs();
|
|
88
|
-
console.log(` - Tâches crashées: ${crashed.length}`);
|
|
89
|
-
if (crashed.length > 0) {
|
|
90
|
-
console.log(` - Peut être relancée: ${crashed[0].canRetry}`);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Test 7: Statistiques
|
|
94
|
-
console.log('\n✅ Résumé des Statistiques:');
|
|
95
|
-
const finalStats = queue.getStats();
|
|
96
|
-
console.log(` - Total tâches: ${finalStats.total}`);
|
|
97
|
-
console.log(` - Par statut:`, finalStats.byStatus);
|
|
98
|
-
console.log(` - Par type:`, finalStats.byType);
|
|
99
|
-
console.log(` - Taux de succès: ${finalStats.successRate}%`);
|
|
100
|
-
|
|
101
|
-
// Exécuter les tests asynchrones
|
|
102
|
-
testGlob().then(() => {
|
|
103
|
-
console.log('\n✨ Tous les tests sont passés avec succès!');
|
|
104
|
-
console.log('📝 Note: Ce sont des tests unitaires, pas des tests de connexion réelle.');
|
|
105
|
-
|
|
106
|
-
// Nettoyer
|
|
107
|
-
queue.cleanOldJobs();
|
|
108
|
-
process.exit(0);
|
|
109
|
-
}).catch(err => {
|
|
110
|
-
console.error('❌ Erreur lors des tests:', err);
|
|
111
|
-
process.exit(1);
|
|
112
|
-
});
|
package/test_mcp.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
-
import { z } from "zod";
|
|
5
|
-
|
|
6
|
-
console.error("🧪 Test MCP Server...");
|
|
7
|
-
|
|
8
|
-
try {
|
|
9
|
-
const server = new McpServer({
|
|
10
|
-
name: "test-server",
|
|
11
|
-
version: "1.0.0",
|
|
12
|
-
description: "Test"
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
console.error("✅ Serveur créé");
|
|
16
|
-
|
|
17
|
-
// Test tool simple
|
|
18
|
-
server.registerTool(
|
|
19
|
-
"test_tool",
|
|
20
|
-
{
|
|
21
|
-
title: "Test",
|
|
22
|
-
description: "Un test simple",
|
|
23
|
-
inputSchema: z.object({})
|
|
24
|
-
},
|
|
25
|
-
async () => {
|
|
26
|
-
return { content: [{ type: "text", text: "OK" }] };
|
|
27
|
-
}
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
console.error("✅ Tool enregistré");
|
|
31
|
-
|
|
32
|
-
// Test tool avec params
|
|
33
|
-
server.registerTool(
|
|
34
|
-
"test_tool_with_params",
|
|
35
|
-
{
|
|
36
|
-
title: "Test avec params",
|
|
37
|
-
description: "Test avec paramètres",
|
|
38
|
-
inputSchema: z.object({
|
|
39
|
-
message: z.string().describe("Un message")
|
|
40
|
-
})
|
|
41
|
-
},
|
|
42
|
-
async (params) => {
|
|
43
|
-
return { content: [{ type: "text", text: params.message }] };
|
|
44
|
-
}
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
console.error("✅ Tool avec params enregistré");
|
|
48
|
-
console.error("🎉 Tout fonctionne !");
|
|
49
|
-
process.exit(0);
|
|
50
|
-
|
|
51
|
-
} catch (error) {
|
|
52
|
-
console.error("❌ ERREUR:", error);
|
|
53
|
-
console.error("Stack:", error.stack);
|
|
54
|
-
process.exit(1);
|
|
55
|
-
}
|