@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/.env.example
CHANGED
|
@@ -26,3 +26,9 @@ MCP_ALLOWED_ROOTS=
|
|
|
26
26
|
|
|
27
27
|
# Activer ou désactiver Debug wrapper
|
|
28
28
|
MCP_DEBUG=false
|
|
29
|
+
|
|
30
|
+
# Mode lecture seule (exploration safe) : refuse écritures / task_exec mutantes
|
|
31
|
+
# MCP_READONLY=1
|
|
32
|
+
|
|
33
|
+
# Réponses compactes (moins de tokens pour l'agent)
|
|
34
|
+
# MCP_COMPACT=1
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Changelog — MCP Orchestrator (`@fkom13/mcp-sftp-orchestrator`)
|
|
2
|
+
|
|
3
|
+
## 11.8.0 — Security Refresh (2026-09-20)
|
|
4
|
+
|
|
5
|
+
- Met à jour `@modelcontextprotocol/sdk` de 1.29.x vers **1.30.0**.
|
|
6
|
+
- Met à jour `glob` vers **13.0.6** et `uuid` vers **11.1.1+**.
|
|
7
|
+
- Rafraîchit les dépendances transitives vulnérables (`ajv`, `fast-uri`, `minimatch`, `picomatch`, `qs`, `hono`, `ip-address`, `@hono/node-server`, brace expansion).
|
|
8
|
+
- `npm audit --omit=dev` passe de 11 vulnérabilités à **0**.
|
|
9
|
+
- Ajoute `.npmignore` pour empêcher la publication de `.gencodedoc/`, `data/`, `.env`, backups et artefacts locaux dans npm.
|
|
10
|
+
- Exclut `.gencodedoc` de ses propres scans afin d'éviter l'auto-indexation récursive des snapshots locaux.
|
|
11
|
+
- Conserve le transport MCP **stdio**, les 82 tools/capabilities et les hardenings 11.6/11.7 sans réduction de surface.
|
|
12
|
+
- Réaligne les constantes/runtime/tests/docs de version sur 11.8.0.
|
|
13
|
+
- Cette release devient la base de réalignement GitHub/npm et des vendors IACA.
|
|
14
|
+
|
|
15
|
+
## 11.7.0 — AIX / Infrastructure Topology (2026-08-22)
|
|
16
|
+
|
|
17
|
+
- Conserve les **82 capabilities/tools** : aucune réduction artificielle de surface.
|
|
18
|
+
- Ajoute des **annotations MCP standard sur les 82 tools** (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`) via `toolMetadata.js`; les policies serveur restent l'autorité.
|
|
19
|
+
- Clarifie les descriptions de choix entre `system_diagnostics`, `infra_audit`, `fleet_status`, `server_inventory`, `infra_overview`, les familles exec/terminal/transfer/file/snapshot.
|
|
20
|
+
- Transforme `infra_overview` : sans alias = contexte de parc léger; avec alias/group/all = **topologie live** listeners + Docker/Compose + PM2 + systemd + Nginx avec graphe `domain -> proxy -> host port -> container/service`.
|
|
21
|
+
- Ajoute `outputSchema` + `structuredContent` à `infra_overview`.
|
|
22
|
+
- Cache topologique court (2 min), `force`, timeout par machine et réponse compacte par défaut.
|
|
23
|
+
- Fusionne les server blocks Nginx HTTP/HTTPS d'un même domaine dans une vue unique.
|
|
24
|
+
- `task_queue` et `task_history` deviennent filtrables/paginables/compactables; `task_logs` borne son volume.
|
|
25
|
+
- Nouvelle suite `test_aix_117.js`; certification MCP réelle : 82/82 tools annotés.
|
|
26
|
+
- Smoke live Contabo certifié : 52 conteneurs, 24 projets Compose, 60 listeners, 30 domaines agrégés; résolution automatique de routes IACA/Connect/Hermes/DeepSeek/NIM/etc.
|
|
27
|
+
|
|
28
|
+
Archive candidate PC2 : `~/ea-audits/orchestrator-20260822/mcp-sftp-orchestrator-11.7.0-source.tgz`.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
Format basé sur [Keep a Changelog](https://keepachangelog.com/).
|
|
32
|
+
Versions snappshottées via **gencodedoc** (IDs locaux sur le dépôt).
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## [11.6.1] — 2026-08-22
|
|
37
|
+
|
|
38
|
+
### Hardening MCP / multi-agent
|
|
39
|
+
- `server_to_server` supporte désormais les dossiers et le multi-fichiers ; comptage d'échec corrigé.
|
|
40
|
+
- `force:false` est enfin respecté en transfert serveur→serveur.
|
|
41
|
+
- `task_transfer_multi` accepte `server_to_server` avec `source_alias` global ou par entrée.
|
|
42
|
+
- `MCP_ALLOWED_ROOTS` descend au niveau `sourceAdapter` et bloque aussi les échappements par symlink.
|
|
43
|
+
- Guards `MCP_READONLY` / `readonly:true` ajoutés aux transferts, exec interactifs/séquences, shell, restores, tmux, tunnels et mutations de registres.
|
|
44
|
+
- Quoting tmux/tunnels durci via `escapeShellArg`.
|
|
45
|
+
- Interpolations shell restantes durcies (`fail2ban`, nom PM2, `docker --since`).
|
|
46
|
+
- Nouvelle suite `test_hardening_1161.js`.
|
|
47
|
+
|
|
48
|
+
## [11.6.0] — 2026-07-15
|
|
49
|
+
|
|
50
|
+
**Snapshot gencodedoc : #22 (dev) → #23 (final docs)**
|
|
51
|
+
**82 tools MCP**
|
|
52
|
+
|
|
53
|
+
### Added — couche sémantique agent (A–E)
|
|
54
|
+
|
|
55
|
+
- **Projets** (`projects.js`)
|
|
56
|
+
- `project_list` / `project_get` / `project_set` / `project_remove` / `project_resolve`
|
|
57
|
+
- Registre `data/projects.json` : local path ↔ remote alias/path/runtime/url
|
|
58
|
+
- Seed exemple : projet `p-image`
|
|
59
|
+
- **`project_diff`** : diff local↔remote d’un projet (ignore patterns du registre)
|
|
60
|
+
- **Work sessions** (`workSession.js`)
|
|
61
|
+
- `work_start` / `work_log` / `work_list` / `work_end`
|
|
62
|
+
- Journal `data/work_sessions.json` ; `work_end` met à jour `server_note` (`last_intervention`)
|
|
63
|
+
- Option snapshot remote au démarrage
|
|
64
|
+
- **`server_inventory`** (`inventory.js`) : inventaire léger (host, disk, mem, pm2, docker, `$HOME`, tailscale) avec **cache 10 min**
|
|
65
|
+
- **RO par alias** : `server_add.readonly` / `servers.json` `readonly:true` bloque write/exec sur cet alias
|
|
66
|
+
- **`MCP_COMPACT` / `compact:true`** : `utils.compactResult` pour réponses agent plus courtes
|
|
67
|
+
|
|
68
|
+
### Added — trust SSH (v11.6 roadmap)
|
|
69
|
+
|
|
70
|
+
- **`ssh_authorize_key`** (`sshTrust.js`)
|
|
71
|
+
- Ajoute une **pubkey** dans `authorized_keys` distant
|
|
72
|
+
- Sources : `string` | `local_path` (.pub) | `alias` (dérive `.pub` / `ssh-keygen -y`)
|
|
73
|
+
- **Jamais** de copie de clé privée
|
|
74
|
+
- `dry_run: true` par défaut ; chmod 700/600 du `.ssh`
|
|
75
|
+
|
|
76
|
+
### Security / hardening (portés depuis 11.3–11.4)
|
|
77
|
+
|
|
78
|
+
- Masquage secrets dans `api_list`, `server_list`, `system_diagnostics`, `infra_audit`
|
|
79
|
+
- Policy blocklist sur `shell_exec` et chaque étape de `task_exec_sequence`
|
|
80
|
+
- Fix faux positif blocklist `rm -rf /` vs `rm -rf /tmp/...`
|
|
81
|
+
- Port SSH configurable (`serverConfig.port`, défaut 22)
|
|
82
|
+
- `waitForJobCompletion` : statuts terminaux `partial` + `crashed`
|
|
83
|
+
- Fix timeout interactif (secondes confondues avec ms)
|
|
84
|
+
- Pool SSH rewrite : listeners non empilés, flag `ready`/`closed`
|
|
85
|
+
- `MCP_READONLY=1` global + dry-run commandes destructives sur `task_exec`
|
|
86
|
+
|
|
87
|
+
### Tests
|
|
88
|
+
|
|
89
|
+
- `test_p0_unit.js` (24) — utils, policies, secrets, timeouts
|
|
90
|
+
- `test_p1_unit.js` (12) — groups, purge, destructive, version
|
|
91
|
+
- `test_p16_unit.js` (7) — projects, work session, compact, sshTrust
|
|
92
|
+
- `npm test` / `npm test:unit`
|
|
93
|
+
|
|
94
|
+
### Data files
|
|
95
|
+
|
|
96
|
+
| Fichier | Rôle |
|
|
97
|
+
|---------|------|
|
|
98
|
+
| `data/projects.json` | Registre projets |
|
|
99
|
+
| `data/work_sessions.json` | Sessions de travail |
|
|
100
|
+
| `data/server_groups.json` | Groupes d’alias (v11.4) |
|
|
101
|
+
| `data/servers.json` | Alias SSH (+ `readonly?`, `port?`) |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## [11.4.0] — 2026-07-15
|
|
106
|
+
|
|
107
|
+
**Snapshot gencodedoc : #21** · **70 tools**
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
|
|
111
|
+
- `fleet_status` — ping SSH parallèle (latence, load, disk, clé manquante)
|
|
112
|
+
- `infra_audit` — synthèse parc (version, serveurs masqués, notes, crashed, pool)
|
|
113
|
+
- `server_group_list` / `server_group_set` / `server_group_remove` — groupes (`group:oci`, …)
|
|
114
|
+
- `task_retry_all` — relance bulk crashed/failed (+ dry_run)
|
|
115
|
+
- `task_purge` — purge queue (dry_run par défaut)
|
|
116
|
+
- `task_exec` : résolution `all` / `group:x` / nom de groupe ; dry_run / force sur commandes destructives
|
|
117
|
+
- Modules : `fleet.js`, `groups.js`
|
|
118
|
+
|
|
119
|
+
### Fixed
|
|
120
|
+
|
|
121
|
+
- Pool SSH : retry sans empiler les listeners ; readiness réelle
|
|
122
|
+
- SFTP `server_to_server` 100 % via pool `sourceAdapter` (plus de client SFTP inutile)
|
|
123
|
+
- Queue : `maxQueueSize` / `saveInterval` lus depuis config
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## [11.3.0] — 2026-07-15
|
|
128
|
+
|
|
129
|
+
**Snapshot gencodedoc : #20** · alignement version runtime/package
|
|
130
|
+
|
|
131
|
+
### Security
|
|
132
|
+
|
|
133
|
+
- `utils.redactSensitiveObject` / `maskSecret` sur diagnostics et listes API
|
|
134
|
+
- Policy sur shell + sequences
|
|
135
|
+
- Warning secrets en clair au boot
|
|
136
|
+
|
|
137
|
+
### Fixed
|
|
138
|
+
|
|
139
|
+
- Interactive hybrid wait (timeout secondes vs ms)
|
|
140
|
+
- Job status `partial` considéré terminal
|
|
141
|
+
- Port SSH non hardcodé 22 partout
|
|
142
|
+
- Blocklist ancrage pour patterns finissant par `/`
|
|
143
|
+
- Double `sftp.end()` supprimé ; glob remote en `path.posix`
|
|
144
|
+
|
|
145
|
+
### Added
|
|
146
|
+
|
|
147
|
+
- `test_p0_unit.js`
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## [11.x / 10.x] — antérieurs (résumé)
|
|
152
|
+
|
|
153
|
+
| Version | Highlights |
|
|
154
|
+
|---------|------------|
|
|
155
|
+
| 10.4.0 | `sourceSchema` centralisé, `server_to_server` transfert |
|
|
156
|
+
| 10.3.0 | guide, notes, infra_overview, diffFormatter |
|
|
157
|
+
| 10.2.0 | File ops / diff / snapshot via pool SSH |
|
|
158
|
+
| 10.0.0 | Snapshots infra content-addressable |
|
|
159
|
+
| 9.3.0 | Shell sessions PTY persistantes |
|
|
160
|
+
| 9.2.0 | diff_files / diff_folders / compare_all_sources |
|
|
161
|
+
| 9.1.0 | file_read / write / edit + hash |
|
|
162
|
+
| 9.0.x | stdio only, help, sécu escapeShellArg |
|
|
163
|
+
| 8.x | SFTP force, timeouts, interactif, pool |
|
|
164
|
+
|
|
165
|
+
Voir aussi `ROADMAP.md` et `ROADMAP_EXTENDED.md` pour le détail historique des étapes 7–11.
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Liens
|
|
170
|
+
|
|
171
|
+
- Package : `@fkom13/mcp-sftp-orchestrator`
|
|
172
|
+
- Entry : `server.js` (stdio MCP)
|
|
173
|
+
- Tests : `npm test:unit` · `npm test`
|
|
174
|
+
- Snapshots code : gencodedoc dans le dépôt projet
|