agentic-api 2.0.31 → 2.0.491
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/dist/src/agents/agents.example.js +21 -22
- package/dist/src/agents/authentication.js +1 -2
- package/dist/src/agents/prompts.d.ts +5 -4
- package/dist/src/agents/prompts.js +44 -87
- package/dist/src/agents/reducer.core.d.ts +24 -2
- package/dist/src/agents/reducer.core.js +125 -35
- package/dist/src/agents/reducer.loaders.d.ts +55 -1
- package/dist/src/agents/reducer.loaders.js +114 -1
- package/dist/src/agents/reducer.types.d.ts +45 -2
- package/dist/src/agents/semantic.js +1 -2
- package/dist/src/agents/simulator.d.ts +11 -3
- package/dist/src/agents/simulator.executor.d.ts +14 -4
- package/dist/src/agents/simulator.executor.js +81 -23
- package/dist/src/agents/simulator.js +128 -42
- package/dist/src/agents/simulator.prompts.d.ts +9 -7
- package/dist/src/agents/simulator.prompts.js +66 -86
- package/dist/src/agents/simulator.types.d.ts +23 -5
- package/dist/src/agents/simulator.utils.d.ts +7 -2
- package/dist/src/agents/simulator.utils.js +31 -11
- package/dist/src/agents/system.js +1 -2
- package/dist/src/execute/helpers.d.ts +75 -0
- package/dist/src/execute/helpers.js +139 -0
- package/dist/src/execute/index.d.ts +11 -0
- package/dist/src/execute/index.js +44 -0
- package/dist/src/execute/legacy.d.ts +46 -0
- package/dist/src/execute/legacy.js +460 -0
- package/dist/src/execute/modelconfig.d.ts +19 -0
- package/dist/src/execute/modelconfig.js +56 -0
- package/dist/src/execute/responses.d.ts +55 -0
- package/dist/src/execute/responses.js +594 -0
- package/dist/src/execute/shared.d.ts +83 -0
- package/dist/src/execute/shared.js +188 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/{princing.openai.d.ts → pricing.llm.d.ts} +6 -0
- package/dist/src/pricing.llm.js +255 -0
- package/dist/src/prompts.d.ts +13 -4
- package/dist/src/prompts.js +221 -114
- package/dist/src/rag/embeddings.d.ts +36 -18
- package/dist/src/rag/embeddings.js +131 -128
- package/dist/src/rag/index.d.ts +5 -5
- package/dist/src/rag/index.js +14 -17
- package/dist/src/rag/parser.d.ts +2 -1
- package/dist/src/rag/parser.js +11 -14
- package/dist/src/rag/rag.examples.d.ts +27 -0
- package/dist/src/rag/rag.examples.js +151 -0
- package/dist/src/rag/rag.manager.d.ts +383 -0
- package/dist/src/rag/rag.manager.js +1390 -0
- package/dist/src/rag/types.d.ts +128 -12
- package/dist/src/rag/types.js +100 -1
- package/dist/src/rag/usecase.d.ts +37 -0
- package/dist/src/rag/usecase.js +96 -7
- package/dist/src/rules/git/git.e2e.helper.js +22 -2
- package/dist/src/rules/git/git.health.d.ts +61 -2
- package/dist/src/rules/git/git.health.js +333 -11
- package/dist/src/rules/git/index.d.ts +2 -2
- package/dist/src/rules/git/index.js +13 -1
- package/dist/src/rules/git/repo.d.ts +160 -0
- package/dist/src/rules/git/repo.js +777 -0
- package/dist/src/rules/git/repo.pr.js +117 -13
- package/dist/src/rules/git/repo.tools.d.ts +22 -1
- package/dist/src/rules/git/repo.tools.js +50 -1
- package/dist/src/rules/types.d.ts +27 -14
- package/dist/src/rules/utils.matter.d.ts +0 -4
- package/dist/src/rules/utils.matter.js +35 -7
- package/dist/src/scrapper.d.ts +15 -22
- package/dist/src/scrapper.js +58 -110
- package/dist/src/stategraph/index.d.ts +1 -1
- package/dist/src/stategraph/stategraph.d.ts +56 -2
- package/dist/src/stategraph/stategraph.js +134 -6
- package/dist/src/stategraph/stategraph.storage.js +8 -0
- package/dist/src/stategraph/types.d.ts +27 -0
- package/dist/src/types.d.ts +46 -9
- package/dist/src/types.js +8 -7
- package/dist/src/usecase.d.ts +11 -2
- package/dist/src/usecase.js +27 -35
- package/dist/src/utils.d.ts +32 -18
- package/dist/src/utils.js +87 -129
- package/package.json +10 -3
- package/dist/src/agents/digestor.test.d.ts +0 -1
- package/dist/src/agents/digestor.test.js +0 -45
- package/dist/src/agents/reducer.example.d.ts +0 -28
- package/dist/src/agents/reducer.example.js +0 -118
- package/dist/src/agents/reducer.process.d.ts +0 -16
- package/dist/src/agents/reducer.process.js +0 -143
- package/dist/src/agents/reducer.tools.d.ts +0 -29
- package/dist/src/agents/reducer.tools.js +0 -157
- package/dist/src/agents/simpleExample.d.ts +0 -3
- package/dist/src/agents/simpleExample.js +0 -38
- package/dist/src/agents/system-review.d.ts +0 -5
- package/dist/src/agents/system-review.js +0 -181
- package/dist/src/agents/systemReview.d.ts +0 -4
- package/dist/src/agents/systemReview.js +0 -22
- package/dist/src/execute.d.ts +0 -49
- package/dist/src/execute.js +0 -564
- package/dist/src/princing.openai.js +0 -54
- package/dist/src/rag/tools.d.ts +0 -76
- package/dist/src/rag/tools.js +0 -196
- package/dist/src/rules/user.mapper.d.ts +0 -61
- package/dist/src/rules/user.mapper.js +0 -160
- package/dist/src/rules/utils/slug.d.ts +0 -22
- package/dist/src/rules/utils/slug.js +0 -35
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
* Native Loaders for MapLLM
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.StringNativeLoader = exports.FileNativeLoader = void 0;
|
|
6
|
+
exports.TaskListLoader = exports.StringNativeLoader = exports.FileNativeLoader = void 0;
|
|
7
7
|
const fs_1 = require("fs");
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
8
9
|
/**
|
|
9
10
|
* FileNativeLoader - Loader pour fichiers avec chunking par lignes
|
|
10
11
|
*/
|
|
@@ -120,3 +121,115 @@ class StringNativeLoader {
|
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
123
|
exports.StringNativeLoader = StringNativeLoader;
|
|
124
|
+
/**
|
|
125
|
+
* TaskListLoader - Loader pour exécution séquentielle de tâches
|
|
126
|
+
* Compatible avec NativeLoader pour réutiliser la logique de MapLLM
|
|
127
|
+
* Job = TaskListLoader (pas de type séparé)
|
|
128
|
+
*/
|
|
129
|
+
class TaskListLoader {
|
|
130
|
+
/**
|
|
131
|
+
* Constructeur principal - crée un nouveau Job avec ID auto-généré
|
|
132
|
+
* @param tasks Liste des tâches
|
|
133
|
+
* @param agents Liste des agents matérialisés
|
|
134
|
+
* @param description Description du Job (optionnel)
|
|
135
|
+
*/
|
|
136
|
+
constructor(tasks, agents, description) {
|
|
137
|
+
this._id = (0, crypto_1.randomUUID)();
|
|
138
|
+
this._tasks = tasks;
|
|
139
|
+
this._agents = agents;
|
|
140
|
+
this._description = description || '';
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* ✅ Restaure depuis Job avec liste d'agents matérialisés
|
|
144
|
+
* @param job Job sérialisé (agents = string[])
|
|
145
|
+
* @param availableAgents Liste d'agents matérialisés pour reconstruction
|
|
146
|
+
*/
|
|
147
|
+
static fromJob(job, availableAgents) {
|
|
148
|
+
//
|
|
149
|
+
// Reconstruire AgentConfig[] depuis job.agents (string[])
|
|
150
|
+
const agents = job.agents
|
|
151
|
+
.map(name => availableAgents.find(a => a.name === name))
|
|
152
|
+
.filter(Boolean);
|
|
153
|
+
if (agents.length === 0) {
|
|
154
|
+
throw new Error('No matching agents found for Job');
|
|
155
|
+
}
|
|
156
|
+
const instance = new TaskListLoader(job.tasks, agents, job.description);
|
|
157
|
+
instance._id = job.id; // ✅ Préserver l'ID
|
|
158
|
+
return instance;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* ✅ Méthode static pour charger depuis OneDrive
|
|
162
|
+
* @param credential Token credential
|
|
163
|
+
* @param jobId ID du Job à charger
|
|
164
|
+
* @param availableAgents Liste d'agents matérialisés
|
|
165
|
+
*/
|
|
166
|
+
static async loadJob(credential, jobId, availableAgents) {
|
|
167
|
+
//
|
|
168
|
+
// Import dynamique pour éviter dépendance circulaire
|
|
169
|
+
// getJobsFromOneDrive sera fourni par job.service.ts (agentic-server)
|
|
170
|
+
const jobs = await getJobsFromOneDrive(credential);
|
|
171
|
+
const job = jobs.find(j => j.id === jobId);
|
|
172
|
+
if (!job)
|
|
173
|
+
return null;
|
|
174
|
+
return TaskListLoader.fromJob(job, availableAgents);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Getters
|
|
178
|
+
*/
|
|
179
|
+
get id() { return this._id; }
|
|
180
|
+
get tasks() { return this._tasks; }
|
|
181
|
+
get agents() { return this._agents; }
|
|
182
|
+
get description() { return this._description; }
|
|
183
|
+
get label() { return this._description; }
|
|
184
|
+
/**
|
|
185
|
+
* Ajoute une tâche (agent et model optionnels)
|
|
186
|
+
* @param task Tâche sans ID (auto-généré)
|
|
187
|
+
*/
|
|
188
|
+
addTask(task) {
|
|
189
|
+
const newTask = {
|
|
190
|
+
...task,
|
|
191
|
+
id: (0, crypto_1.randomUUID)(),
|
|
192
|
+
agentName: task.agentName || this._agents[0]?.name
|
|
193
|
+
};
|
|
194
|
+
this._tasks.push(newTask);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* ✅ Retourne Job sérialisable (AgentConfig → string[])
|
|
198
|
+
*/
|
|
199
|
+
toJob() {
|
|
200
|
+
return {
|
|
201
|
+
id: this._id,
|
|
202
|
+
tasks: this._tasks,
|
|
203
|
+
agents: this._agents.map(a => a.name), // ✅ Seulement les noms
|
|
204
|
+
description: this._description,
|
|
205
|
+
discussions: [],
|
|
206
|
+
createdAt: new Date(),
|
|
207
|
+
updatedAt: new Date()
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
async loadNativeChunk(position) {
|
|
211
|
+
if (position >= this._tasks.length) {
|
|
212
|
+
throw new Error(`Task position ${position} out of bounds (total: ${this._tasks.length})`);
|
|
213
|
+
}
|
|
214
|
+
const task = this._tasks[position];
|
|
215
|
+
//
|
|
216
|
+
// Serialize task as JSON string (compatible avec content: string)
|
|
217
|
+
const content = JSON.stringify(task);
|
|
218
|
+
const nextPosition = position + 1;
|
|
219
|
+
const eof = nextPosition >= this._tasks.length;
|
|
220
|
+
return {
|
|
221
|
+
content,
|
|
222
|
+
eof,
|
|
223
|
+
position: nextPosition
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
exports.TaskListLoader = TaskListLoader;
|
|
228
|
+
/**
|
|
229
|
+
* Helper pour TaskListLoader.loadJob
|
|
230
|
+
* Sera fourni par job.service.ts pour éviter import circulaire
|
|
231
|
+
*/
|
|
232
|
+
async function getJobsFromOneDrive(credential) {
|
|
233
|
+
// Placeholder - implémenté dans agentic-server/src/pinned/job.service.ts
|
|
234
|
+
return [];
|
|
235
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Types for the MapLLM reducer functionality
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import { Writable } from 'stream';
|
|
5
5
|
export interface NativeLoader {
|
|
6
6
|
loadNativeChunk(position: number): Promise<{
|
|
7
7
|
content: string;
|
|
@@ -16,6 +16,10 @@ export interface StatefulReducerConfig {
|
|
|
16
16
|
reducePrompt: string;
|
|
17
17
|
/** Modulo for reducing the digest */
|
|
18
18
|
reduceModulo?: number;
|
|
19
|
+
/** ✅ Context pour exécution (optionnel - accès credential, session, etc.) */
|
|
20
|
+
context?: any;
|
|
21
|
+
/** ✅ Stdout pour feedback streaming (optionnel) */
|
|
22
|
+
stdout?: any;
|
|
19
23
|
}
|
|
20
24
|
export interface StructuredOutputFormat {
|
|
21
25
|
/** Schema name for the structured output */
|
|
@@ -28,12 +32,15 @@ export interface StructuredOutputFormat {
|
|
|
28
32
|
export interface MapLLMReduceResult {
|
|
29
33
|
/** Accumulator - string for text mode, object for structured output */
|
|
30
34
|
acc: string | Record<string, any>;
|
|
35
|
+
stdout?: Writable;
|
|
31
36
|
continue?: boolean;
|
|
32
37
|
maxIterations?: boolean;
|
|
38
|
+
/** ✅ Configuration déplacée ici (plus dans params reduce) */
|
|
39
|
+
config?: StatefulReducerConfig;
|
|
33
40
|
/** OpenAI structured output format configuration */
|
|
34
41
|
format?: StructuredOutputFormat;
|
|
35
42
|
/** Model configuration */
|
|
36
|
-
model?:
|
|
43
|
+
model?: string;
|
|
37
44
|
verbose?: boolean;
|
|
38
45
|
/** Processing metadata */
|
|
39
46
|
metadata?: {
|
|
@@ -48,3 +55,39 @@ export interface ChunkStrategy {
|
|
|
48
55
|
size: number;
|
|
49
56
|
overlap?: number;
|
|
50
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Task definition for Plan-Executor
|
|
60
|
+
*/
|
|
61
|
+
export interface Task {
|
|
62
|
+
/** Unique task identifier */
|
|
63
|
+
id: string;
|
|
64
|
+
/** Task prompt/query to execute */
|
|
65
|
+
prompt: string;
|
|
66
|
+
/** Optional: Agent name to use (if not specified, uses default) */
|
|
67
|
+
agentName?: string;
|
|
68
|
+
/** Optional: Force model to use for this task */
|
|
69
|
+
model?: string;
|
|
70
|
+
/** Optional: Tools to add/override for this task */
|
|
71
|
+
tools?: any[];
|
|
72
|
+
/** Optional: Metadata for tracking */
|
|
73
|
+
meta?: Record<string, any>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Job sérialisable (stocké en OneDrive)
|
|
77
|
+
* Les agents sont stockés comme string[] (noms) car AgentConfig n'est pas sérialisable
|
|
78
|
+
*/
|
|
79
|
+
export interface Job {
|
|
80
|
+
/** Identifiant unique du Job */
|
|
81
|
+
id: string;
|
|
82
|
+
/** Liste des tâches */
|
|
83
|
+
tasks: Task[];
|
|
84
|
+
/** Noms des agents (sérialisable - AgentConfig n'est pas sérialisable) */
|
|
85
|
+
agents: string[];
|
|
86
|
+
/** Description du Job */
|
|
87
|
+
description?: string;
|
|
88
|
+
/** IDs des discussions liées à ce Job */
|
|
89
|
+
discussions: string[];
|
|
90
|
+
/** Dates */
|
|
91
|
+
createdAt: Date;
|
|
92
|
+
updatedAt: Date;
|
|
93
|
+
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.semantic = void 0;
|
|
4
|
-
const execute_1 = require("../execute");
|
|
5
4
|
const utils_1 = require("../utils");
|
|
6
5
|
const prompts_1 = require("./prompts");
|
|
7
6
|
exports.semantic = {
|
|
8
7
|
name: "semantic",
|
|
9
|
-
model:
|
|
8
|
+
model: "LOW",
|
|
10
9
|
publicDescription: "Agent spécialisé dans l’extraction sémantique structurée",
|
|
11
10
|
instructions: prompts_1.semanticPrompt,
|
|
12
11
|
tools: [],
|
|
@@ -7,13 +7,17 @@ export declare class AgentSimulator {
|
|
|
7
7
|
/**
|
|
8
8
|
* Exécuter la simulation complète
|
|
9
9
|
*
|
|
10
|
+
* Architecture :
|
|
11
|
+
* - Le scénario (Personnalité, Question, Objectifs, Format JSON) est injecté UNE SEULE FOIS
|
|
12
|
+
* dans les instructions du simulateur au moment de l'initialisation (AVANT la boucle).
|
|
13
|
+
*
|
|
10
14
|
* Format de la query passée à l'agent testé :
|
|
11
|
-
* - Message initial :
|
|
15
|
+
* - Message initial : query fournie par l'utilisateur
|
|
12
16
|
* - Messages suivants : réponse conversationnelle du simulateur (sans tags d'évaluation)
|
|
13
17
|
*
|
|
14
18
|
* Format de la query passée au simulateur :
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
19
|
+
* - Instructions système : scénario complet intégré via GENERIC_SIMULATOR_PROMPT
|
|
20
|
+
* - Tous les messages : réponse directe de l'agent testé (agentResponse)
|
|
17
21
|
*/
|
|
18
22
|
executeSimulation(options: SimulationOptions): Promise<SimulationResult>;
|
|
19
23
|
/**
|
|
@@ -44,4 +48,8 @@ export declare class AgentSimulator {
|
|
|
44
48
|
* Générer le rapport final en cas de timeout
|
|
45
49
|
*/
|
|
46
50
|
private generateTimeoutReport;
|
|
51
|
+
/**
|
|
52
|
+
* Valider que les outils attendus ont été appelés le bon nombre de fois
|
|
53
|
+
*/
|
|
54
|
+
private validateExpectedTools;
|
|
47
55
|
}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { SimulatorConfig, ExecutionContext } from './simulator.types';
|
|
1
|
+
import { SimulatorConfig, ExecutionContext, SimulationScenario } from './simulator.types';
|
|
2
2
|
export declare class AgentExecutor {
|
|
3
3
|
private config;
|
|
4
|
-
private
|
|
5
|
-
|
|
4
|
+
private simulatorAgentBase;
|
|
5
|
+
private mockCacheInitializer?;
|
|
6
|
+
private ragManager?;
|
|
7
|
+
constructor(config: SimulatorConfig & {
|
|
8
|
+
mockCacheInitializer?: (sessionId: string) => Promise<void>;
|
|
9
|
+
});
|
|
6
10
|
/**
|
|
7
11
|
* Initialiser les contextes agent et simulateur
|
|
12
|
+
* @param scenario Le scenario de simulation complet avec persona, goals, result
|
|
8
13
|
*/
|
|
9
|
-
initializeContexts(): Promise<ExecutionContext>;
|
|
14
|
+
initializeContexts(scenario: SimulationScenario): Promise<ExecutionContext>;
|
|
10
15
|
/**
|
|
11
16
|
* ✅ Exécuter l'agent testé et retourner sa réponse (extraction de agent-vs-agent.ts)
|
|
12
17
|
*/
|
|
@@ -15,6 +20,11 @@ export declare class AgentExecutor {
|
|
|
15
20
|
* ✅ Exécuter le simulateur et retourner sa réponse (extraction de client-simulator.ts)
|
|
16
21
|
*/
|
|
17
22
|
executeSimulator(context: ExecutionContext, query: string): Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* ✅ Construire l'injection de contexte technique pour le simulateur
|
|
25
|
+
* Permet au simulateur de connaître les tools utilisés par l'agent testé
|
|
26
|
+
*/
|
|
27
|
+
private buildAgentContextInjection;
|
|
18
28
|
/**
|
|
19
29
|
* ✅ Récupérer le dernier message de l'agent testé (extraction de agent-vs-agent.ts ligne 168-191)
|
|
20
30
|
*/
|
|
@@ -1,37 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AgentExecutor = void 0;
|
|
4
|
-
const
|
|
4
|
+
const rag_1 = require("../rag");
|
|
5
5
|
const stategraph_1 = require("../stategraph");
|
|
6
6
|
const execute_1 = require("../execute");
|
|
7
7
|
const simulator_prompts_1 = require("./simulator.prompts");
|
|
8
8
|
class AgentExecutor {
|
|
9
9
|
constructor(config) {
|
|
10
10
|
this.config = config;
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
(config.instructionEx ? `\n\n${config.instructionEx}` : '') +
|
|
14
|
-
'\n\n**CRITICAL**: Your response after [SIMULATION_COMPLETE] must be valid JSON format only.';
|
|
15
|
-
// Agent simulateur simple pour éviter les dépendances complexes du ClientSimulator
|
|
16
|
-
this.simulatorAgent = {
|
|
11
|
+
// Configuration de base du simulateur (instructions seront construites dynamiquement avec le scenario)
|
|
12
|
+
this.simulatorAgentBase = {
|
|
17
13
|
name: "simple-simulator",
|
|
18
|
-
model: (
|
|
14
|
+
model: ("HIGH-fast"),
|
|
19
15
|
publicDescription: "Simulateur simple pour tests - TOUJOURS retourner JSON valide",
|
|
20
|
-
|
|
16
|
+
cancelMemory: true,
|
|
17
|
+
instructions: '', // Sera construit dans initializeContexts avec GENERIC_SIMULATOR_PROMPT
|
|
21
18
|
tools: [],
|
|
22
19
|
downstreamAgents: []
|
|
23
20
|
};
|
|
21
|
+
//
|
|
22
|
+
// ✅ Annuler la mémoire pour tous les agents en simulation
|
|
23
|
+
config.agents.forEach(agent => {
|
|
24
|
+
agent.cancelMemory = true;
|
|
25
|
+
});
|
|
26
|
+
this.mockCacheInitializer = config.mockCacheInitializer;
|
|
27
|
+
// ✅ Initialiser le RAGManager si la configuration est fournie
|
|
28
|
+
if (config.ragConfig) {
|
|
29
|
+
try {
|
|
30
|
+
this.ragManager = rag_1.RAGManager.get(config.ragConfig);
|
|
31
|
+
console.log(`✅ RAGManager initialisé pour le simulateur (default: ${this.ragManager.getDefault()})`);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.warn('⚠️ Impossible d\'initialiser le RAGManager pour le simulateur:', error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
24
37
|
}
|
|
25
38
|
/**
|
|
26
39
|
* Initialiser les contextes agent et simulateur
|
|
40
|
+
* @param scenario Le scenario de simulation complet avec persona, goals, result
|
|
27
41
|
*/
|
|
28
|
-
async initializeContexts() {
|
|
42
|
+
async initializeContexts(scenario) {
|
|
29
43
|
const sessionId = `simulation-${Date.now()}`;
|
|
30
44
|
const agentContext = {
|
|
31
45
|
user: { id: `test-user`, role: 'user', uid: `test-${sessionId}` },
|
|
32
46
|
credential: { test: true, sessionId: `agent-${sessionId}` },
|
|
33
47
|
verbose: this.config.verbose,
|
|
34
|
-
session: { id: `agent-${sessionId}`, data: {}, messages: [] }
|
|
48
|
+
session: { id: `agent-${sessionId}`, data: {}, messages: [] },
|
|
49
|
+
// ✅ Ajouter customRag au contexte si le RAG est configuré
|
|
50
|
+
...(this.ragManager ? { customRag: this.ragManager.getDefault() } : {})
|
|
35
51
|
};
|
|
36
52
|
const simulatorContext = {
|
|
37
53
|
user: { id: `simulator-user`, role: 'user', uid: `sim-${sessionId}` },
|
|
@@ -39,9 +55,21 @@ class AgentExecutor {
|
|
|
39
55
|
verbose: this.config.verbose,
|
|
40
56
|
session: { id: `sim-${sessionId}`, data: {}, messages: [] }
|
|
41
57
|
};
|
|
58
|
+
// ✅ Initialiser le cache mock si fourni (pour les tests SGC avec M-Files)
|
|
59
|
+
if (this.mockCacheInitializer) {
|
|
60
|
+
await this.mockCacheInitializer(agentContext.session.id);
|
|
61
|
+
}
|
|
62
|
+
// ✅ Construire les instructions complètes avec le scénario intégré via la fonction
|
|
63
|
+
const fullInstructions = (0, simulator_prompts_1.GENERIC_SIMULATOR_PROMPT)(scenario, this.config.instructionEx);
|
|
64
|
+
if (this.config.verbose)
|
|
65
|
+
console.log('---- DBG fullInstructions', fullInstructions);
|
|
42
66
|
return {
|
|
43
67
|
agentContext,
|
|
44
68
|
simulatorContext,
|
|
69
|
+
simulatorAgent: {
|
|
70
|
+
...this.simulatorAgentBase,
|
|
71
|
+
instructions: fullInstructions
|
|
72
|
+
},
|
|
45
73
|
conversationHistory: [],
|
|
46
74
|
exchangeCount: 0,
|
|
47
75
|
lastExecution: {
|
|
@@ -49,8 +77,8 @@ class AgentExecutor {
|
|
|
49
77
|
startQuery: '',
|
|
50
78
|
actions: [],
|
|
51
79
|
lastMessage: '',
|
|
52
|
-
usage: { prompt: 0, completion: 0, total: 0, cost: 0 }
|
|
53
|
-
moreThinkin
|
|
80
|
+
usage: { prompt: 0, completion: 0, total: 0, cost: 0 }
|
|
81
|
+
// moreThinkin removed (obsolete)
|
|
54
82
|
}
|
|
55
83
|
};
|
|
56
84
|
}
|
|
@@ -62,16 +90,23 @@ class AgentExecutor {
|
|
|
62
90
|
const execResult = await (0, execute_1.executeAgentSet)(this.config.agents, context.agentContext, {
|
|
63
91
|
query,
|
|
64
92
|
home: this.config.start,
|
|
65
|
-
stdout:
|
|
93
|
+
stdout: execute_1.DummyWritable,
|
|
66
94
|
verbose: this.config.verbose,
|
|
67
95
|
debug: false
|
|
68
96
|
});
|
|
97
|
+
// Accumuler seulement l'usage, pas les actions
|
|
69
98
|
if (context.lastExecution) {
|
|
70
|
-
context.lastExecution
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
context.lastExecution
|
|
99
|
+
context.lastExecution.usage.prompt += execResult.usage.prompt;
|
|
100
|
+
context.lastExecution.usage.completion += execResult.usage.completion;
|
|
101
|
+
context.lastExecution.usage.total += execResult.usage.total;
|
|
102
|
+
context.lastExecution.usage.cost += execResult.usage.cost;
|
|
74
103
|
}
|
|
104
|
+
context.lastExecution = execResult;
|
|
105
|
+
// if (context.lastExecution) {
|
|
106
|
+
// context.lastExecution = executionResultMerge(context.lastExecution, execResult);
|
|
107
|
+
// } else {
|
|
108
|
+
// context.lastExecution = execResult;
|
|
109
|
+
// }
|
|
75
110
|
context.exchangeCount++;
|
|
76
111
|
// ✅ Extraire et retourner le dernier message de l'agent (logique de getLastPRSolverMessage)
|
|
77
112
|
return this.getLastAgentMessage(context.agentContext);
|
|
@@ -80,12 +115,15 @@ class AgentExecutor {
|
|
|
80
115
|
* ✅ Exécuter le simulateur et retourner sa réponse (extraction de client-simulator.ts)
|
|
81
116
|
*/
|
|
82
117
|
async executeSimulator(context, query) {
|
|
83
|
-
// Utiliser le simulateur
|
|
84
|
-
//
|
|
85
|
-
|
|
86
|
-
|
|
118
|
+
// Utiliser le simulateur avec les instructions complètes (incluant le scénario)
|
|
119
|
+
// ✅ Injecter le contexte technique si disponible
|
|
120
|
+
const agentContextInjection = this.buildAgentContextInjection(context);
|
|
121
|
+
const enrichedQuery = agentContextInjection ? `${query}\n\n${agentContextInjection}` : query;
|
|
122
|
+
// console.log('DEBUG: Exécution du simulateur avec query:\n', enrichedQuery);
|
|
123
|
+
await (0, execute_1.executeAgentSet)([context.simulatorAgent], context.simulatorContext, {
|
|
124
|
+
query: enrichedQuery,
|
|
87
125
|
home: 'simple-simulator',
|
|
88
|
-
stdout:
|
|
126
|
+
stdout: execute_1.DummyWritable,
|
|
89
127
|
verbose: false,
|
|
90
128
|
debug: false
|
|
91
129
|
});
|
|
@@ -93,12 +131,32 @@ class AgentExecutor {
|
|
|
93
131
|
context.conversationHistory.push(`Simulator: ${response}`);
|
|
94
132
|
return response;
|
|
95
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* ✅ Construire l'injection de contexte technique pour le simulateur
|
|
136
|
+
* Permet au simulateur de connaître les tools utilisés par l'agent testé
|
|
137
|
+
*/
|
|
138
|
+
buildAgentContextInjection(context) {
|
|
139
|
+
if (!context.lastExecution || !context.lastExecution.actions || context.lastExecution.actions.length === 0) {
|
|
140
|
+
return '';
|
|
141
|
+
}
|
|
142
|
+
// Extraire les noms des tools appelés (sans les arguments)
|
|
143
|
+
const tools = context.lastExecution.actions.map(action => action.action);
|
|
144
|
+
if (tools.length === 0) {
|
|
145
|
+
return '';
|
|
146
|
+
}
|
|
147
|
+
const contextData = {
|
|
148
|
+
tools: tools,
|
|
149
|
+
exchangeCount: context.exchangeCount
|
|
150
|
+
};
|
|
151
|
+
return `<agent-context>\n${JSON.stringify(contextData, null, 2)}\n</agent-context>`;
|
|
152
|
+
}
|
|
96
153
|
/**
|
|
97
154
|
* ✅ Récupérer le dernier message de l'agent testé (extraction de agent-vs-agent.ts ligne 168-191)
|
|
98
155
|
*/
|
|
99
156
|
getLastAgentMessage(agentContext) {
|
|
100
157
|
const stateGraph = (0, stategraph_1.sessionStateGraphGet)(agentContext);
|
|
101
158
|
const messages = stateGraph.discussions[0].messages;
|
|
159
|
+
// console.log('---- DBG system message (check context-trail):', messages[0]?.content?.substring(messages[0].content.indexOf('<context-trail>'), messages[0].content.indexOf('</context-trail>') + 17));
|
|
102
160
|
if (!messages || !messages.length) {
|
|
103
161
|
return '[Aucun message trouvé]';
|
|
104
162
|
}
|