@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 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é ; `with_agent` ne garde que celles partagées avec une boîte |
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
- - la liste des agents avec leurs compteurs (envoyés, reçus, non lus) ;
336
- - tous les messages, filtrables par agent, par fil ou par recherche texte ;
337
- - le contenu d'un message et son état de distribution (qui l'a reçu, dans quel dossier, lu ou non) ;
338
- - sous le message ouvert, les échanges qui l'ont précédé, repliés par défaut et dépliables d'un bouton, comme dans une boîte mail ;
339
- - le fil complet d'une conversation ;
340
- - un rafraîchissement automatique toutes les 5 secondes.
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]` · `/admin/threads/:id` | Supervision, lecture seule |
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
  ---
@@ -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
  *