@imenam/mcp-messenger 1.0.10 → 1.0.13
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/README.md +40 -10
- package/dist/src/core/store.d.ts +23 -1
- package/dist/src/core/store.js +243 -152
- package/dist/src/core/types.d.ts +22 -0
- package/dist/src/mcp/start.js +5 -1
- package/dist/src/mcp/tools.js +29 -16
- package/dist/src/server/app.js +28 -0
- package/dist/src/server/ui/app.js +883 -372
- package/dist/src/server/ui/index.html +92 -27
- package/dist/src/server/ui/styles.css +1228 -368
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -173,13 +173,19 @@ superviseur capable de lire les lignes d'un processus peut la brancher. Sans rel
|
|
|
173
173
|
|
|
174
174
|
## Outils MCP
|
|
175
175
|
|
|
176
|
+
**Deux mots, deux choses.** Une **boîte** (`mailbox` dans les outils) est une adresse
|
|
177
|
+
`box_…` : elle désigne une session, et c'est à elle qu'on écrit. Un **nom d'agent** est le
|
|
178
|
+
projet pour lequel une session travaille : c'est une étiquette, jamais une adresse, et
|
|
179
|
+
toutes les sessions du projet la portent. Partout où un outil attend une adresse, sa
|
|
180
|
+
description dit « mailbox address ».
|
|
181
|
+
|
|
176
182
|
| Outil | Rôle |
|
|
177
183
|
|---|---|
|
|
178
184
|
| `whoami` | Adresse de cette session, serveur connecté, veilleur armé ou non, compteurs par dossier |
|
|
179
185
|
| `attach_to_mailbox` | Se brancher sur une autre boîte via son adresse ; sans argument, retour à la sienne |
|
|
180
186
|
| `rename_mailbox` | Nommer ou renommer sa boîte (de quoi la session s'occupe) ; le nom de l'agent, posé par la configuration, reste |
|
|
181
187
|
| `rename_thread` | Nommer ou renommer un fil (`thread_id`) ; le nom est partagé par tous ses participants |
|
|
182
|
-
| `list_threads` | Carte des conversations : nom, participants, non-lus, dernière activité ; `
|
|
188
|
+
| `list_threads` | Carte des conversations : nom, participants, non-lus, dernière activité ; `with_mailbox` ne garde que celles partagées avec une boîte |
|
|
183
189
|
| `list_agents` | Annuaire groupé par agent : un projet, ses sessions ; `agent_name` déplie un groupe. La boîte de l'appelant n'y figure pas |
|
|
184
190
|
| `send_message` | Écrire à un agent — un seul destinataire par message (`to`, `priority`, `reply_to`, `thread_name`) |
|
|
185
191
|
| `list_messages` | Lister la boîte (filtres : dossier, non lus, expéditeur, fil, texte libre) |
|
|
@@ -330,14 +336,36 @@ configuration partagent alors la même boîte. Utile pour un service unique et s
|
|
|
330
336
|
|
|
331
337
|
## Console web
|
|
332
338
|
|
|
333
|
-
`http://127.0.0.1:3600/ui/` affiche, en lecture seule, **tous les échanges** de la flotte
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
339
|
+
`http://127.0.0.1:3600/ui/` affiche, en lecture seule, **tous les échanges** de la flotte,
|
|
340
|
+
organisés autour du fil — l'unité d'une correspondance, celle qui porte le sujet, les deux
|
|
341
|
+
correspondants et l'état de lecture :
|
|
342
|
+
|
|
343
|
+
- **une colonne d'agents à deux niveaux** : un agent tient une boîte par session ouverte,
|
|
344
|
+
la colonne l'écrit donc ainsi. Chaque agent est **replié par défaut** et se déplie d'un
|
|
345
|
+
chevron sur ses boîtes ; une boîte que son agent n'a pas nommée s'affiche à son adresse,
|
|
346
|
+
la seule chose qui la distingue alors de ses sœurs. Cliquer l'agent filtre les fils sur
|
|
347
|
+
**toutes ses sessions**, cliquer une boîte sur **cette seule session**. La colonne se
|
|
348
|
+
replie sur les seuls avatars d'agents quand la place manque ;
|
|
349
|
+
- **la liste des fils**, du plus récemment actif au plus ancien, chacun résumé par son
|
|
350
|
+
nom, ses correspondants, son dernier message et sa priorité la plus haute. Trois puces
|
|
351
|
+
la filtrent : tous, non lus, priorité haute ;
|
|
352
|
+
- **le lecteur du fil** : la conversation entière dans l'ordre, un bloc par message, avec
|
|
353
|
+
qui écrit à qui — en clair, pas en adresses — et une pastille disant si le destinataire
|
|
354
|
+
l'a lu ;
|
|
355
|
+
- **le volet de détail** d'un message, ouvert à la demande : identifiants du message et du
|
|
356
|
+
fil, les deux noms et l'adresse de chaque boîte, et le tableau de distribution (rôle,
|
|
357
|
+
dossier, état). Tout ce qui se recopie a son bouton de copie ;
|
|
358
|
+
- une recherche unique, qui couvre le nom d'un fil, sa description et le texte de ses
|
|
359
|
+
messages ;
|
|
360
|
+
- un rafraîchissement automatique toutes les 5 secondes, débrayable.
|
|
361
|
+
|
|
362
|
+
**Les adresses ne sont pas de l'information de lecture.** La console résout partout
|
|
363
|
+
`box_9f2c4a01b3d7e5f8` en nom d'agent, et ne montre l'adresse qu'aux endroits où elle sert
|
|
364
|
+
vraiment : le volet de détail, l'en-tête d'un fil et les boîtes sans nom, chaque fois avec
|
|
365
|
+
un bouton de copie. Quand plusieurs sessions d'un même projet apparaissent, le nom de
|
|
366
|
+
l'agent est suivi de celui de la boîte entre parenthèses — sans quoi un fil se lirait
|
|
367
|
+
« Documentor Dev → Documentor Dev » sans dire de quelles sessions il parle. Une boîte jamais connectée se distingue à son avatar en contour et à la mention
|
|
368
|
+
« jamais connectée » — elle reste listée, puisqu'elle a du courrier en attente.
|
|
341
369
|
|
|
342
370
|
À l'ouverture, la console demande `MESSENGER_ADMIN_TOKEN` dans un formulaire. Le serveur
|
|
343
371
|
le vérifie (`POST /ui/login`) et ouvre une **session** de 12 heures, portée par un cookie
|
|
@@ -416,7 +444,9 @@ la console (cookie), qui elle n'ouvre rien d'autre.
|
|
|
416
444
|
| `PATCH` | `/api/threads/:id` | Nommer le fil (`title`, `description`) — participants uniquement |
|
|
417
445
|
| `GET` `POST` `DELETE` | `/api/folders[/:name]` | Gérer les dossiers |
|
|
418
446
|
| `GET` | `/api/wait` | Attente longue (`timeout_seconds`, `folder`, `watcher`) |
|
|
419
|
-
| `GET` | `/admin/overview` · `/admin/messages[/:id]`
|
|
447
|
+
| `GET` | `/admin/overview` · `/admin/messages[/:id]` | Supervision, lecture seule |
|
|
448
|
+
| `GET` | `/admin/threads` | Fils du serveur entier (`agent` — une ou plusieurs adresses séparées par des virgules —, `search`, `unread_only`, `priority`, `limit`, `offset`) |
|
|
449
|
+
| `GET` | `/admin/threads/:id` | Fil complet, corps inclus |
|
|
420
450
|
| `POST` | `/ui/login` · `/ui/logout` | Session de la console (`{ "token": … }` → cookie `HttpOnly`) |
|
|
421
451
|
|
|
422
452
|
---
|
package/dist/src/core/store.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
import { type Agent, type AgentDirectoryEntry, type DeliveryRole, type FolderInfo, type ListMessagesOptions, type ListThreadsOptions, type MailboxStats, type Message, type MessageSummary, type SendMessageInput, type SendMessageResult, type ThreadInfo, type ThreadSummary } from "./types.js";
|
|
2
|
+
import { type AdminThreadSummary, type Agent, type AgentDirectoryEntry, type DeliveryRole, type FolderInfo, type ListMessagesOptions, type ListThreadsOptions, type MailboxStats, type Message, type MessageSummary, type Priority, type SendMessageInput, type SendMessageResult, type ThreadInfo, type ThreadSummary } from "./types.js";
|
|
3
3
|
/** Erreur métier : traduite en 4xx par la couche HTTP, en message d'outil côté MCP. */
|
|
4
4
|
export declare class MessengerError extends Error {
|
|
5
5
|
readonly status: number;
|
|
@@ -95,6 +95,28 @@ export declare class MessageStore extends EventEmitter<StoreEvents> {
|
|
|
95
95
|
limit?: number;
|
|
96
96
|
offset?: number;
|
|
97
97
|
}): MessageSummary[];
|
|
98
|
+
/**
|
|
99
|
+
* Fils du serveur entier, le plus récemment actif en tête.
|
|
100
|
+
*
|
|
101
|
+
* La console est organisée autour du fil : c'est lui qui porte le sujet, les deux
|
|
102
|
+
* correspondants et l'état de lecture. Chaque ligne est autonome — dernier message,
|
|
103
|
+
* aperçu, priorité la plus haute du fil — pour que la liste s'affiche d'une requête.
|
|
104
|
+
*/
|
|
105
|
+
listAllThreadsAdmin(opts?: {
|
|
106
|
+
search?: string;
|
|
107
|
+
/**
|
|
108
|
+
* Adresses de boîtes : un fil est gardé dès que l'une d'elles y participe.
|
|
109
|
+
*
|
|
110
|
+
* Une liste, et non une seule adresse, parce qu'un agent tient autant de boîtes
|
|
111
|
+
* qu'il a de sessions ouvertes : « les fils du projet Documentor » se demande en
|
|
112
|
+
* passant les adresses de toutes ses sessions d'un coup.
|
|
113
|
+
*/
|
|
114
|
+
agents?: string[];
|
|
115
|
+
unread_only?: boolean;
|
|
116
|
+
priority?: Priority;
|
|
117
|
+
limit?: number;
|
|
118
|
+
offset?: number;
|
|
119
|
+
}): AdminThreadSummary[];
|
|
98
120
|
/**
|
|
99
121
|
* Fil complet vu du serveur, du plus ancien au plus récent, corps inclus.
|
|
100
122
|
*
|