agentic-api 1.0.6 → 2.0.31

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.
Files changed (103) hide show
  1. package/README.md +336 -76
  2. package/dist/src/agents/agents.example.d.ts +3 -0
  3. package/dist/src/agents/agents.example.js +38 -0
  4. package/dist/src/agents/authentication.js +2 -0
  5. package/dist/src/agents/prompts.d.ts +2 -2
  6. package/dist/src/agents/prompts.js +112 -49
  7. package/dist/src/agents/reducer.core.d.ts +12 -0
  8. package/dist/src/agents/reducer.core.js +207 -0
  9. package/dist/src/agents/reducer.d.ts +3 -0
  10. package/dist/src/agents/reducer.example.d.ts +28 -0
  11. package/dist/src/agents/reducer.example.js +118 -0
  12. package/dist/src/agents/reducer.js +19 -0
  13. package/dist/src/agents/reducer.loaders.d.ts +34 -0
  14. package/dist/src/agents/reducer.loaders.js +122 -0
  15. package/dist/src/agents/reducer.process.d.ts +16 -0
  16. package/dist/src/agents/reducer.process.js +143 -0
  17. package/dist/src/agents/reducer.tools.d.ts +29 -0
  18. package/dist/src/agents/reducer.tools.js +157 -0
  19. package/dist/src/agents/reducer.types.d.ts +50 -0
  20. package/dist/src/agents/reducer.types.js +5 -0
  21. package/dist/src/agents/simulator.d.ts +47 -0
  22. package/dist/src/agents/simulator.executor.d.ts +26 -0
  23. package/dist/src/agents/simulator.executor.js +132 -0
  24. package/dist/src/agents/simulator.js +205 -0
  25. package/dist/src/agents/simulator.prompts.d.ts +16 -0
  26. package/dist/src/agents/simulator.prompts.js +108 -0
  27. package/dist/src/agents/simulator.types.d.ts +42 -0
  28. package/dist/src/agents/simulator.types.js +2 -0
  29. package/dist/src/agents/simulator.utils.d.ts +20 -0
  30. package/dist/src/agents/simulator.utils.js +87 -0
  31. package/dist/src/execute.d.ts +13 -6
  32. package/dist/src/execute.js +351 -85
  33. package/dist/src/index.d.ts +9 -0
  34. package/dist/src/index.js +14 -0
  35. package/dist/src/princing.openai.d.ts +9 -2
  36. package/dist/src/princing.openai.js +15 -11
  37. package/dist/src/prompts.d.ts +3 -2
  38. package/dist/src/prompts.js +159 -19
  39. package/dist/src/rag/embeddings.d.ts +103 -0
  40. package/dist/src/rag/embeddings.js +466 -0
  41. package/dist/src/rag/index.d.ts +12 -0
  42. package/dist/src/rag/index.js +40 -0
  43. package/dist/src/rag/lucene.d.ts +45 -0
  44. package/dist/src/rag/lucene.js +227 -0
  45. package/dist/src/rag/parser.d.ts +68 -0
  46. package/dist/src/rag/parser.js +192 -0
  47. package/dist/src/rag/tools.d.ts +76 -0
  48. package/dist/src/rag/tools.js +196 -0
  49. package/dist/src/rag/types.d.ts +178 -0
  50. package/dist/src/rag/types.js +21 -0
  51. package/dist/src/rag/usecase.d.ts +16 -0
  52. package/dist/src/rag/usecase.js +79 -0
  53. package/dist/src/rules/errors.d.ts +60 -0
  54. package/dist/src/rules/errors.js +97 -0
  55. package/dist/src/rules/git/git.e2e.helper.d.ts +104 -0
  56. package/dist/src/rules/git/git.e2e.helper.js +488 -0
  57. package/dist/src/rules/git/git.health.d.ts +66 -0
  58. package/dist/src/rules/git/git.health.js +354 -0
  59. package/dist/src/rules/git/git.helper.d.ts +129 -0
  60. package/dist/src/rules/git/git.helper.js +53 -0
  61. package/dist/src/rules/git/index.d.ts +6 -0
  62. package/dist/src/rules/git/index.js +76 -0
  63. package/dist/src/rules/git/repo.d.ts +128 -0
  64. package/dist/src/rules/git/repo.js +900 -0
  65. package/dist/src/rules/git/repo.pr.d.ts +137 -0
  66. package/dist/src/rules/git/repo.pr.js +589 -0
  67. package/dist/src/rules/git/repo.tools.d.ts +134 -0
  68. package/dist/src/rules/git/repo.tools.js +730 -0
  69. package/dist/src/rules/index.d.ts +8 -0
  70. package/dist/src/rules/index.js +25 -0
  71. package/dist/src/rules/messages.d.ts +17 -0
  72. package/dist/src/rules/messages.js +21 -0
  73. package/dist/src/rules/types.ctrl.d.ts +28 -0
  74. package/dist/src/rules/types.ctrl.js +2 -0
  75. package/dist/src/rules/types.d.ts +510 -0
  76. package/dist/src/rules/types.helpers.d.ts +132 -0
  77. package/dist/src/rules/types.helpers.js +2 -0
  78. package/dist/src/rules/types.js +33 -0
  79. package/dist/src/rules/user.mapper.d.ts +61 -0
  80. package/dist/src/rules/user.mapper.js +160 -0
  81. package/dist/src/rules/utils/slug.d.ts +22 -0
  82. package/dist/src/rules/utils/slug.js +35 -0
  83. package/dist/src/rules/utils.matter.d.ts +66 -0
  84. package/dist/src/rules/utils.matter.js +208 -0
  85. package/dist/src/rules/utils.slug.d.ts +22 -0
  86. package/dist/src/rules/utils.slug.js +35 -0
  87. package/dist/src/scrapper.d.ts +3 -2
  88. package/dist/src/scrapper.js +33 -37
  89. package/dist/src/stategraph/index.d.ts +8 -0
  90. package/dist/src/stategraph/index.js +21 -0
  91. package/dist/src/stategraph/stategraph.d.ts +91 -0
  92. package/dist/src/stategraph/stategraph.js +241 -0
  93. package/dist/src/stategraph/stategraph.storage.d.ts +41 -0
  94. package/dist/src/stategraph/stategraph.storage.js +166 -0
  95. package/dist/src/stategraph/types.d.ts +139 -0
  96. package/dist/src/stategraph/types.js +19 -0
  97. package/dist/src/types.d.ts +62 -39
  98. package/dist/src/types.js +53 -89
  99. package/dist/src/usecase.d.ts +4 -0
  100. package/dist/src/usecase.js +44 -0
  101. package/dist/src/utils.d.ts +12 -5
  102. package/dist/src/utils.js +30 -13
  103. package/package.json +9 -3
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Implémentation du système AgentStateGraph
4
+ * Classe principale pour gérer les discussions par agent
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AgentStateGraph = void 0;
8
+ const crypto_1 = require("crypto");
9
+ const types_1 = require("./types");
10
+ /**
11
+ * Implémentation du StateGraph pour la gestion des discussions par agent
12
+ * Remplace AgenticMemoryManager avec une architecture simplifiée
13
+ */
14
+ class AgentStateGraph {
15
+ constructor() {
16
+ this.discussions = [];
17
+ }
18
+ /**
19
+ * Crée ou restaure une discussion pour un agent donné
20
+ * @param agentName Nom de l'agent
21
+ * @returns Discussion existante ou nouvelle discussion créée
22
+ */
23
+ createOrRestore(agentName, description) {
24
+ // Chercher une discussion existante pour cet agent
25
+ let discussion = this.discussions.find(d => d.startAgent === agentName);
26
+ if (!discussion) {
27
+ // Créer une nouvelle discussion
28
+ discussion = {
29
+ id: (0, crypto_1.randomUUID)(),
30
+ description: description,
31
+ messages: [],
32
+ usage: { prompt: 0, completion: 0, total: 0, cost: 0 },
33
+ createdAt: new Date(),
34
+ updatedAt: new Date(),
35
+ startAgent: agentName
36
+ };
37
+ this.discussions.push(discussion);
38
+ }
39
+ return discussion;
40
+ }
41
+ /**
42
+ * Ajoute un message à la discussion d'un agent
43
+ * @param agentName Nom de l'agent
44
+ * @param message Message sans ID ni timestamp (auto-générés)
45
+ */
46
+ push(agentName, message) {
47
+ const discussion = this.createOrRestore(agentName);
48
+ const fullMessage = {
49
+ ...message,
50
+ id: (0, crypto_1.randomUUID)(),
51
+ timestamp: new Date()
52
+ };
53
+ discussion.messages.push(fullMessage);
54
+ discussion.updatedAt = new Date();
55
+ }
56
+ /**
57
+ * Écrase le message system de la discussion avec un nouvel agent
58
+ * Le message system est toujours messages[0] avec role: "system"
59
+ * @param agentName Nom de l'agent
60
+ * @param content Nouveau contenu du message system
61
+ */
62
+ set(agentName, content) {
63
+ const discussion = this.createOrRestore(agentName);
64
+ const systemMessage = {
65
+ id: (0, crypto_1.randomUUID)(),
66
+ role: 'system',
67
+ content,
68
+ agent: agentName,
69
+ timestamp: new Date()
70
+ };
71
+ // Écraser ou créer le message system (toujours en position 0)
72
+ if (discussion.messages.length === 0) {
73
+ discussion.messages.push(systemMessage);
74
+ }
75
+ else {
76
+ discussion.messages[0] = systemMessage;
77
+ }
78
+ discussion.updatedAt = new Date();
79
+ }
80
+ /**
81
+ * Additionne l'usage des tokens pour un agent
82
+ * @param agentName Nom de l'agent
83
+ * @param usage Ajout aux valeurs existantes (addition)
84
+ */
85
+ updateTokens(agentName, usage) {
86
+ const discussion = this.createOrRestore(agentName);
87
+ // Additionner les valeurs aux existantes
88
+ discussion.usage = {
89
+ prompt: discussion.usage.prompt + (usage.prompt ?? 0),
90
+ completion: discussion.usage.completion + (usage.completion ?? 0),
91
+ total: discussion.usage.total + (usage.total ?? 0),
92
+ cost: discussion.usage.cost ? discussion.usage.cost + (usage.cost ?? 0) : (usage.cost ?? 0)
93
+ };
94
+ discussion.updatedAt = new Date();
95
+ }
96
+ /**
97
+ * Retourne une vue filtrée pour le client
98
+ * Supprime les messages system et les métadonnées d'outils
99
+ * @param agentName Nom de l'agent
100
+ * @returns Discussion filtrée pour l'affichage client
101
+ */
102
+ toClientView(agentName) {
103
+ const discussion = this.createOrRestore(agentName);
104
+ const cleanContent = (content) => {
105
+ if (typeof content === 'string') {
106
+ return content.replace(/<memories[^>]+[\s\S]*?<\/memories>/g, '');
107
+ }
108
+ return content;
109
+ };
110
+ // Filtrer les messages pour le client - exclure system et tool
111
+ const clientMessages = discussion.messages
112
+ .filter(msg => msg.role !== 'system' && !msg.name)
113
+ .map(msg => ({
114
+ id: msg.id,
115
+ role: msg.role,
116
+ content: cleanContent(msg.content),
117
+ timestamp: msg.timestamp
118
+ }));
119
+ return {
120
+ id: discussion.id,
121
+ name: discussion.name,
122
+ description: discussion.description,
123
+ agent: agentName,
124
+ messages: clientMessages,
125
+ usage: discussion.usage,
126
+ createdAt: discussion.createdAt,
127
+ updatedAt: discussion.updatedAt
128
+ };
129
+ }
130
+ /**
131
+ * Trouve une discussion par son ID
132
+ * @param discussionId ID de la discussion
133
+ * @returns Discussion trouvée ou undefined
134
+ */
135
+ findDiscussionById(discussionId) {
136
+ return this.discussions.find(d => d.id === discussionId);
137
+ }
138
+ /**
139
+ * Supprime une discussion
140
+ * @param discussionId ID de la discussion à supprimer
141
+ * @returns true si supprimée, false si non trouvée
142
+ */
143
+ deleteDiscussion(discussionId) {
144
+ const index = this.discussions.findIndex(d => d.id === discussionId);
145
+ if (index >= 0) {
146
+ this.discussions.splice(index, 1);
147
+ return true;
148
+ }
149
+ return false;
150
+ }
151
+ /**
152
+ * Vide une discussion en gardant uniquement le message system
153
+ * @param agentName Nom de l'agent
154
+ */
155
+ clearDiscussion(agentName) {
156
+ const discussion = this.createOrRestore(agentName);
157
+ // Garder uniquement le premier message s'il est de type system
158
+ if (discussion.messages.length > 0 && discussion.messages[0].role === 'system') {
159
+ discussion.messages = [discussion.messages[0]];
160
+ }
161
+ else {
162
+ discussion.messages = [];
163
+ }
164
+ // Réinitialiser l'usage
165
+ discussion.usage = { prompt: 0, completion: 0, total: 0, cost: 0 };
166
+ discussion.updatedAt = new Date();
167
+ }
168
+ /**
169
+ * Supprime un message spécifique d'une discussion
170
+ * @param agentName Nom de l'agent
171
+ * @param messageId ID du message à supprimer
172
+ * @returns true si le message a été supprimé, false s'il n'a pas été trouvé
173
+ */
174
+ deleteMessage(agentName, messageId) {
175
+ const discussion = this.createOrRestore(agentName);
176
+ // Trouver l'index du message à supprimer
177
+ const messageIndex = discussion.messages.findIndex(msg => msg.id === messageId);
178
+ if (messageIndex !== -1) {
179
+ // Supprimer le message
180
+ discussion.messages.splice(messageIndex, 1);
181
+ discussion.updatedAt = new Date();
182
+ return true;
183
+ }
184
+ return false;
185
+ }
186
+ /**
187
+ * Renomme une discussion
188
+ * @param discussionId ID de la discussion
189
+ * @param name Nouveau nom
190
+ * @param description Nouvelle description (optionnel)
191
+ */
192
+ renameDiscussion(discussionId, name, description) {
193
+ const discussion = this.findDiscussionById(discussionId);
194
+ if (discussion) {
195
+ discussion.name = name;
196
+ if (description !== undefined) {
197
+ discussion.description = description;
198
+ }
199
+ discussion.updatedAt = new Date();
200
+ }
201
+ }
202
+ /**
203
+ * Retourne l'agent spécialisé pour une discussion
204
+ * @param agentName Nom de l'agent
205
+ * @returns Nom de l'agent spécialisé
206
+ */
207
+ getSpecializedAgent(agentName) {
208
+ const discussion = this.discussions.find(d => d.startAgent === agentName);
209
+ if (discussion) {
210
+ return (0, types_1.getSpecializedAgent)(discussion);
211
+ }
212
+ return agentName;
213
+ }
214
+ /**
215
+ * Sérialise le StateGraph en JSON
216
+ * @returns Représentation JSON
217
+ */
218
+ toJSON() {
219
+ return {
220
+ discussions: this.discussions
221
+ };
222
+ }
223
+ /**
224
+ * Restaure le StateGraph depuis JSON
225
+ * @param data Données JSON
226
+ */
227
+ fromJSON(data) {
228
+ if (data.discussions && Array.isArray(data.discussions)) {
229
+ this.discussions = data.discussions.map((d) => ({
230
+ ...d,
231
+ createdAt: new Date(d.createdAt),
232
+ updatedAt: new Date(d.updatedAt),
233
+ messages: d.messages.map((m) => ({
234
+ ...m,
235
+ timestamp: new Date(m.timestamp)
236
+ }))
237
+ }));
238
+ }
239
+ }
240
+ }
241
+ exports.AgentStateGraph = AgentStateGraph;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview Gestion du stockage et de la persistance pour AgentStateGraph
3
+ * Intégration avec req.session avec compression gzip pour optimiser la taille
4
+ */
5
+ import { AgentStateGraph } from './stategraph';
6
+ import { AgenticContext } from '../types';
7
+ /**
8
+ * Récupère le StateGraph depuis la session avec décompression
9
+ * @param context qui contient la session requête Express OU objet avec session pour les tests
10
+ * @returns StateGraph existant ou nouveau
11
+ */
12
+ export declare function sessionStateGraphGet(context: AgenticContext): AgentStateGraph;
13
+ /**
14
+ * Sauvegarde le StateGraph dans la session avec compression
15
+ * @param req Requête Express avec session OU objet avec session pour les tests
16
+ * @param stateGraph StateGraph à sauvegarder
17
+ */
18
+ export declare function sessionStateGraphSet(context: AgenticContext, stateGraph: AgentStateGraph): void;
19
+ /**
20
+ * Supprime le StateGraph de la session
21
+ * @param context AgenticContext qui contient la session
22
+ */
23
+ export declare function sessionStateGraphClear(context: AgenticContext): void;
24
+ /**
25
+ * Vérifie si un StateGraph existe dans la session
26
+ * @param context AgenticContext qui contient la session
27
+ * @returns true si un StateGraph existe
28
+ */
29
+ export declare function sessionStateGraphExists(context: AgenticContext): boolean;
30
+ /**
31
+ * Obtient la taille du StateGraph en session (en bytes)
32
+ * @param context AgenticContext qui contient la session
33
+ * @returns Taille en bytes ou 0 si pas de StateGraph
34
+ */
35
+ export declare function sessionStateGraphSize(context: AgenticContext): number;
36
+ /**
37
+ * Convertit req.session.memory vers AgentStateGraph
38
+ * @param context AgenticContext qui contient la session
39
+ * @returns true si migration effectuée
40
+ */
41
+ export declare function migrateFromLegacySession(context: AgenticContext): boolean;
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Gestion du stockage et de la persistance pour AgentStateGraph
4
+ * Intégration avec req.session avec compression gzip pour optimiser la taille
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.sessionStateGraphGet = sessionStateGraphGet;
8
+ exports.sessionStateGraphSet = sessionStateGraphSet;
9
+ exports.sessionStateGraphClear = sessionStateGraphClear;
10
+ exports.sessionStateGraphExists = sessionStateGraphExists;
11
+ exports.sessionStateGraphSize = sessionStateGraphSize;
12
+ exports.migrateFromLegacySession = migrateFromLegacySession;
13
+ const zlib_1 = require("zlib");
14
+ const stategraph_1 = require("./stategraph");
15
+ /**
16
+ * Clé utilisée pour stocker le StateGraph dans req.session
17
+ */
18
+ const SESSION_STATEGRAPH_KEY = 'agentStateGraph';
19
+ /**
20
+ * Récupère le StateGraph depuis la session avec décompression
21
+ * @param context qui contient la session requête Express OU objet avec session pour les tests
22
+ * @returns StateGraph existant ou nouveau
23
+ */
24
+ function sessionStateGraphGet(context) {
25
+ const session = context.session;
26
+ if (!session) {
27
+ // Pour les tests, retourner un nouveau StateGraph si pas de session
28
+ if (process.env.NODE_ENV === 'test') {
29
+ return new stategraph_1.AgentStateGraph();
30
+ }
31
+ throw new Error('Session middleware non configuré');
32
+ }
33
+ // Vérifier si un StateGraph existe dans la session
34
+ const compressedData = session[SESSION_STATEGRAPH_KEY];
35
+ if (compressedData) {
36
+ try {
37
+ // Décompresser et parser le JSON
38
+ const jsonData = (0, zlib_1.gunzipSync)(Buffer.from(compressedData, 'base64')).toString('utf8');
39
+ const data = JSON.parse(jsonData);
40
+ // Créer un nouveau StateGraph et le restaurer
41
+ const stateGraph = new stategraph_1.AgentStateGraph();
42
+ stateGraph.fromJSON(data);
43
+ return stateGraph;
44
+ }
45
+ catch (error) {
46
+ console.warn('Erreur lors de la restauration du StateGraph:', error);
47
+ // En cas d'erreur, retourner un nouveau StateGraph
48
+ }
49
+ }
50
+ // Retourner un nouveau StateGraph si rien en session
51
+ return new stategraph_1.AgentStateGraph();
52
+ }
53
+ /**
54
+ * Sauvegarde le StateGraph dans la session avec compression
55
+ * @param req Requête Express avec session OU objet avec session pour les tests
56
+ * @param stateGraph StateGraph à sauvegarder
57
+ */
58
+ function sessionStateGraphSet(context, stateGraph) {
59
+ const session = context.session;
60
+ if (!session) {
61
+ // Pour les tests, ne rien faire si pas de session
62
+ if (process.env.NODE_ENV === 'test') {
63
+ return;
64
+ }
65
+ throw new Error('Session middleware non configuré');
66
+ }
67
+ try {
68
+ // Sérialiser en JSON
69
+ const jsonData = JSON.stringify(stateGraph.toJSON());
70
+ // Compresser avec gzip
71
+ const compressed = (0, zlib_1.gzipSync)(Buffer.from(jsonData, 'utf8'));
72
+ // Stocker en base64 dans la session
73
+ session[SESSION_STATEGRAPH_KEY] = compressed.toString('base64');
74
+ // Logging pour debug (taille avant/après compression)
75
+ if (process.env.NODE_ENV === 'development') {
76
+ const originalSize = Buffer.byteLength(jsonData, 'utf8');
77
+ const compressedSize = compressed.length;
78
+ const ratio = Math.round((1 - compressedSize / originalSize) * 100);
79
+ console.log(`🗜️ StateGraph sauvegardé: ${originalSize}B → ${compressedSize}B (${ratio}% compression)`);
80
+ }
81
+ }
82
+ catch (error) {
83
+ console.error('Erreur lors de la sauvegarde du StateGraph:', error);
84
+ throw error;
85
+ }
86
+ }
87
+ /**
88
+ * Supprime le StateGraph de la session
89
+ * @param context AgenticContext qui contient la session
90
+ */
91
+ function sessionStateGraphClear(context) {
92
+ const session = context.session;
93
+ if (session && session[SESSION_STATEGRAPH_KEY]) {
94
+ delete session[SESSION_STATEGRAPH_KEY];
95
+ }
96
+ }
97
+ /**
98
+ * Vérifie si un StateGraph existe dans la session
99
+ * @param context AgenticContext qui contient la session
100
+ * @returns true si un StateGraph existe
101
+ */
102
+ function sessionStateGraphExists(context) {
103
+ const session = context.session;
104
+ return session && !!session[SESSION_STATEGRAPH_KEY];
105
+ }
106
+ /**
107
+ * Obtient la taille du StateGraph en session (en bytes)
108
+ * @param context AgenticContext qui contient la session
109
+ * @returns Taille en bytes ou 0 si pas de StateGraph
110
+ */
111
+ function sessionStateGraphSize(context) {
112
+ const session = context.session;
113
+ if (!session || !session[SESSION_STATEGRAPH_KEY]) {
114
+ return 0;
115
+ }
116
+ try {
117
+ const compressedData = session[SESSION_STATEGRAPH_KEY];
118
+ return Buffer.from(compressedData, 'base64').length;
119
+ }
120
+ catch (error) {
121
+ console.error('Erreur lors du calcul de la taille StateGraph:', error);
122
+ return 0;
123
+ }
124
+ }
125
+ /**
126
+ * Convertit req.session.memory vers AgentStateGraph
127
+ * @param context AgenticContext qui contient la session
128
+ * @returns true si migration effectuée
129
+ */
130
+ function migrateFromLegacySession(context) {
131
+ const session = context.session;
132
+ if (!session || !session.memory || sessionStateGraphExists(context)) {
133
+ return false;
134
+ }
135
+ try {
136
+ const legacyMemory = session.memory;
137
+ const stateGraph = new stategraph_1.AgentStateGraph();
138
+ // Créer une discussion depuis l'ancienne mémoire
139
+ if (legacyMemory.messages && Array.isArray(legacyMemory.messages)) {
140
+ const agentName = legacyMemory.currentAgent || 'default';
141
+ const discussion = stateGraph.createOrRestore(agentName);
142
+ // Migrer les messages
143
+ legacyMemory.messages.forEach((msg, index) => {
144
+ stateGraph.push(agentName, {
145
+ role: msg.role || 'user',
146
+ content: msg.content || '',
147
+ agent: msg.agent || agentName
148
+ });
149
+ });
150
+ // Migrer l'usage
151
+ if (legacyMemory.usage) {
152
+ stateGraph.updateTokens(agentName, legacyMemory.usage);
153
+ }
154
+ }
155
+ // Sauvegarder le nouveau format
156
+ sessionStateGraphSet(context, stateGraph);
157
+ // Supprimer l'ancienne mémoire
158
+ delete session.memory;
159
+ console.log('✅ Migration réussie de session.memory vers AgentStateGraph');
160
+ return true;
161
+ }
162
+ catch (error) {
163
+ console.error('❌ Erreur lors de la migration:', error);
164
+ return false;
165
+ }
166
+ }
@@ -0,0 +1,139 @@
1
+ /**
2
+ * @fileoverview Types pour le système AgentStateGraph
3
+ * Remplace l'ancien système AgenticMemoryManager pour une gestion simplifiée des discussions par agent
4
+ */
5
+ /**
6
+ * Message d'agent dans une discussion
7
+ * Compatible avec le format OpenAI Chat Completions
8
+ */
9
+ export interface AgentMessage {
10
+ /** Identifiant unique du message */
11
+ id: string;
12
+ /** Rôle du message (system, user, assistant, tool) */
13
+ role: 'system' | 'user' | 'assistant' | 'tool';
14
+ /** Contenu textuel du message */
15
+ content: string;
16
+ /** Nom de l'agent ou de l'outil (compatible OpenAI) */
17
+ name?: string;
18
+ /** Agent associé à ce message (optionnel) */
19
+ agent?: string;
20
+ /** Timestamp de création */
21
+ timestamp: Date;
22
+ }
23
+ /**
24
+ * Usage des tokens et coût
25
+ */
26
+ export interface TokenUsage {
27
+ /** Tokens de prompt */
28
+ prompt: number;
29
+ /** Tokens de complétion */
30
+ completion: number;
31
+ /** Total des tokens */
32
+ total: number;
33
+ /** Coût estimé en USD (optionnel) */
34
+ cost?: number;
35
+ }
36
+ /**
37
+ * Discussion d'agent - thread de messages pour un agent spécifique
38
+ * Remplace l'ancienne AgenticMemorySession
39
+ */
40
+ export interface AgentDiscussion {
41
+ /** Identifiant unique de la discussion */
42
+ id: string;
43
+ /** Nom descriptif (optionnel) */
44
+ name?: string;
45
+ /** Description de la discussion (optionnel) */
46
+ description?: string;
47
+ /** Messages de la discussion */
48
+ messages: AgentMessage[];
49
+ /** Usage des tokens pour cette discussion */
50
+ usage: TokenUsage;
51
+ /** Date de création */
52
+ createdAt: Date;
53
+ /** Date de dernière mise à jour */
54
+ updatedAt: Date;
55
+ /** Agent qui a initié cette discussion (requis) */
56
+ startAgent: string;
57
+ }
58
+ /**
59
+ * Interface principale du StateGraph pour gérer les discussions par agent
60
+ * Remplace AgenticMemoryManager avec une API simplifiée
61
+ */
62
+ export interface AgentStateGraph {
63
+ /** Liste des discussions par agent */
64
+ discussions: AgentDiscussion[];
65
+ /**
66
+ * Crée ou restaure une discussion pour un agent
67
+ * @param agentName Nom de l'agent
68
+ * @returns Discussion existante ou nouvelle
69
+ */
70
+ createOrRestore(agentName: string): AgentDiscussion;
71
+ /**
72
+ * Ajoute un message à la discussion d'un agent
73
+ * @param agentName Nom de l'agent
74
+ * @param message Message sans ID ni timestamp (auto-générés)
75
+ */
76
+ push(agentName: string, message: Omit<AgentMessage, 'id' | 'timestamp'>): void;
77
+ /**
78
+ * Écrase le message system de la discussion avec un nouvel agent
79
+ * @param agentName Nom de l'agent
80
+ * @param content Nouveau contenu du message system
81
+ */
82
+ set(agentName: string, content: string): void;
83
+ /**
84
+ * Additionne l'usage des tokens pour un agent
85
+ * @param agentName Nom de l'agent
86
+ * @param usage Ajout aux valeurs existantes (addition)
87
+ */
88
+ updateTokens(agentName: string, usage: Partial<TokenUsage>): void;
89
+ /**
90
+ * Retourne une vue filtrée pour le client (sans system messages, sans metadata tools)
91
+ * @param agentName Nom de l'agent
92
+ * @returns Discussion filtrée pour l'affichage client
93
+ */
94
+ toClientView(agentName: string): ClientDiscussion;
95
+ /**
96
+ * Vide une discussion en gardant uniquement le message system
97
+ * @param agentName Nom de l'agent
98
+ */
99
+ clearDiscussion(agentName: string): void;
100
+ /**
101
+ * Supprime un message spécifique d'une discussion
102
+ * @param agentName Nom de l'agent
103
+ * @param messageId ID du message à supprimer
104
+ * @returns true si le message a été supprimé, false s'il n'a pas été trouvé
105
+ */
106
+ deleteMessage(agentName: string, messageId: string): boolean;
107
+ }
108
+ /**
109
+ * Vue client d'une discussion (filtrée)
110
+ */
111
+ export interface ClientDiscussion {
112
+ /** Identifiant de la discussion */
113
+ id: string;
114
+ /** Nom de la discussion */
115
+ name?: string;
116
+ /** Description */
117
+ description?: string;
118
+ /** Agent associé à cette discussion */
119
+ agent?: string;
120
+ /** Messages filtrés (sans system, sans metadata) */
121
+ messages: Array<{
122
+ id: string;
123
+ role: 'user' | 'assistant';
124
+ content: string;
125
+ timestamp: Date;
126
+ }>;
127
+ /** Usage des tokens */
128
+ usage: TokenUsage;
129
+ /** Dates */
130
+ createdAt: Date;
131
+ updatedAt: Date;
132
+ }
133
+ /**
134
+ * Retourne l'agent spécialisé d'une discussion
135
+ * Récupère l'agent depuis messages[0].agent ou utilise startAgent comme fallback
136
+ * @param discussion Discussion à analyser
137
+ * @returns Nom de l'agent spécialisé
138
+ */
139
+ export declare function getSpecializedAgent(discussion: AgentDiscussion): string;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Types pour le système AgentStateGraph
4
+ * Remplace l'ancien système AgenticMemoryManager pour une gestion simplifiée des discussions par agent
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getSpecializedAgent = getSpecializedAgent;
8
+ /**
9
+ * Retourne l'agent spécialisé d'une discussion
10
+ * Récupère l'agent depuis messages[0].agent ou utilise startAgent comme fallback
11
+ * @param discussion Discussion à analyser
12
+ * @returns Nom de l'agent spécialisé
13
+ */
14
+ function getSpecializedAgent(discussion) {
15
+ if (discussion && discussion.messages.length > 0 && discussion.messages[0].agent) {
16
+ return discussion.messages[0].agent;
17
+ }
18
+ return discussion.startAgent;
19
+ }