@imenam/mcp-messenger 1.0.10 → 1.0.11

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,31 @@ 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** : un par boîte, avec son nom d'agent, ce dont la session
344
+ s'occupe et son nombre de messages non lus. La sélection filtre les fils sur cette
345
+ boîte ; la colonne se replie sur ses seuls avatars quand la place manque ;
346
+ - **la liste des fils**, du plus récemment actif au plus ancien, chacun résumé par son
347
+ nom, ses correspondants, son dernier message et sa priorité la plus haute. Trois puces
348
+ la filtrent : tous, non lus, priorité haute ;
349
+ - **le lecteur du fil** : la conversation entière dans l'ordre, un bloc par message, avec
350
+ qui écrit à qui — en clair, pas en adresses — et une pastille disant si le destinataire
351
+ l'a lu ;
352
+ - **le volet de détail** d'un message, ouvert à la demande : identifiants du message et du
353
+ fil, les deux noms et l'adresse de chaque boîte, et le tableau de distribution (rôle,
354
+ dossier, état). Tout ce qui se recopie a son bouton de copie ;
355
+ - une recherche unique, qui couvre le nom d'un fil, sa description et le texte de ses
356
+ messages ;
357
+ - un rafraîchissement automatique toutes les 5 secondes, débrayable.
358
+
359
+ **Les adresses ne sont pas de l'information de lecture.** La console résout partout
360
+ `box_9f2c4a01b3d7e5f8` en nom d'agent, et ne montre l'adresse qu'aux deux endroits où elle
361
+ sert vraiment : le volet de détail et l'en-tête d'un fil, chaque fois avec un bouton de
362
+ copie. Une boîte jamais connectée se distingue à son avatar en contour et à la mention
363
+ « jamais connectée » — elle reste listée, puisqu'elle a du courrier en attente.
341
364
 
342
365
  À l'ouverture, la console demande `MESSENGER_ADMIN_TOKEN` dans un formulaire. Le serveur
343
366
  le vérifie (`POST /ui/login`) et ouvre une **session** de 12 heures, portée par un cookie
@@ -416,7 +439,9 @@ la console (cookie), qui elle n'ouvre rien d'autre.
416
439
  | `PATCH` | `/api/threads/:id` | Nommer le fil (`title`, `description`) — participants uniquement |
417
440
  | `GET` `POST` `DELETE` | `/api/folders[/:name]` | Gérer les dossiers |
418
441
  | `GET` | `/api/wait` | Attente longue (`timeout_seconds`, `folder`, `watcher`) |
419
- | `GET` | `/admin/overview` · `/admin/messages[/:id]` · `/admin/threads/:id` | Supervision, lecture seule |
442
+ | `GET` | `/admin/overview` · `/admin/messages[/:id]` | Supervision, lecture seule |
443
+ | `GET` | `/admin/threads` | Fils du serveur entier (`agent`, `search`, `unread_only`, `priority`, `limit`, `offset`) |
444
+ | `GET` | `/admin/threads/:id` | Fil complet, corps inclus |
420
445
  | `POST` | `/ui/login` · `/ui/logout` | Session de la console (`{ "token": … }` → cookie `HttpOnly`) |
421
446
 
422
447
  ---
@@ -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,21 @@ 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
+ agent?: string;
108
+ unread_only?: boolean;
109
+ priority?: Priority;
110
+ limit?: number;
111
+ offset?: number;
112
+ }): AdminThreadSummary[];
98
113
  /**
99
114
  * Fil complet vu du serveur, du plus ancien au plus récent, corps inclus.
100
115
  *