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.
Files changed (102) hide show
  1. package/dist/src/agents/agents.example.js +21 -22
  2. package/dist/src/agents/authentication.js +1 -2
  3. package/dist/src/agents/prompts.d.ts +5 -4
  4. package/dist/src/agents/prompts.js +44 -87
  5. package/dist/src/agents/reducer.core.d.ts +24 -2
  6. package/dist/src/agents/reducer.core.js +125 -35
  7. package/dist/src/agents/reducer.loaders.d.ts +55 -1
  8. package/dist/src/agents/reducer.loaders.js +114 -1
  9. package/dist/src/agents/reducer.types.d.ts +45 -2
  10. package/dist/src/agents/semantic.js +1 -2
  11. package/dist/src/agents/simulator.d.ts +11 -3
  12. package/dist/src/agents/simulator.executor.d.ts +14 -4
  13. package/dist/src/agents/simulator.executor.js +81 -23
  14. package/dist/src/agents/simulator.js +128 -42
  15. package/dist/src/agents/simulator.prompts.d.ts +9 -7
  16. package/dist/src/agents/simulator.prompts.js +66 -86
  17. package/dist/src/agents/simulator.types.d.ts +23 -5
  18. package/dist/src/agents/simulator.utils.d.ts +7 -2
  19. package/dist/src/agents/simulator.utils.js +31 -11
  20. package/dist/src/agents/system.js +1 -2
  21. package/dist/src/execute/helpers.d.ts +75 -0
  22. package/dist/src/execute/helpers.js +139 -0
  23. package/dist/src/execute/index.d.ts +11 -0
  24. package/dist/src/execute/index.js +44 -0
  25. package/dist/src/execute/legacy.d.ts +46 -0
  26. package/dist/src/execute/legacy.js +460 -0
  27. package/dist/src/execute/modelconfig.d.ts +19 -0
  28. package/dist/src/execute/modelconfig.js +56 -0
  29. package/dist/src/execute/responses.d.ts +55 -0
  30. package/dist/src/execute/responses.js +594 -0
  31. package/dist/src/execute/shared.d.ts +83 -0
  32. package/dist/src/execute/shared.js +188 -0
  33. package/dist/src/index.d.ts +1 -1
  34. package/dist/src/index.js +2 -2
  35. package/dist/src/{princing.openai.d.ts → pricing.llm.d.ts} +6 -0
  36. package/dist/src/pricing.llm.js +255 -0
  37. package/dist/src/prompts.d.ts +13 -4
  38. package/dist/src/prompts.js +221 -114
  39. package/dist/src/rag/embeddings.d.ts +36 -18
  40. package/dist/src/rag/embeddings.js +131 -128
  41. package/dist/src/rag/index.d.ts +5 -5
  42. package/dist/src/rag/index.js +14 -17
  43. package/dist/src/rag/parser.d.ts +2 -1
  44. package/dist/src/rag/parser.js +11 -14
  45. package/dist/src/rag/rag.examples.d.ts +27 -0
  46. package/dist/src/rag/rag.examples.js +151 -0
  47. package/dist/src/rag/rag.manager.d.ts +383 -0
  48. package/dist/src/rag/rag.manager.js +1390 -0
  49. package/dist/src/rag/types.d.ts +128 -12
  50. package/dist/src/rag/types.js +100 -1
  51. package/dist/src/rag/usecase.d.ts +37 -0
  52. package/dist/src/rag/usecase.js +96 -7
  53. package/dist/src/rules/git/git.e2e.helper.js +22 -2
  54. package/dist/src/rules/git/git.health.d.ts +61 -2
  55. package/dist/src/rules/git/git.health.js +333 -11
  56. package/dist/src/rules/git/index.d.ts +2 -2
  57. package/dist/src/rules/git/index.js +13 -1
  58. package/dist/src/rules/git/repo.d.ts +160 -0
  59. package/dist/src/rules/git/repo.js +777 -0
  60. package/dist/src/rules/git/repo.pr.js +117 -13
  61. package/dist/src/rules/git/repo.tools.d.ts +22 -1
  62. package/dist/src/rules/git/repo.tools.js +50 -1
  63. package/dist/src/rules/types.d.ts +27 -14
  64. package/dist/src/rules/utils.matter.d.ts +0 -4
  65. package/dist/src/rules/utils.matter.js +35 -7
  66. package/dist/src/scrapper.d.ts +15 -22
  67. package/dist/src/scrapper.js +58 -110
  68. package/dist/src/stategraph/index.d.ts +1 -1
  69. package/dist/src/stategraph/stategraph.d.ts +56 -2
  70. package/dist/src/stategraph/stategraph.js +134 -6
  71. package/dist/src/stategraph/stategraph.storage.js +8 -0
  72. package/dist/src/stategraph/types.d.ts +27 -0
  73. package/dist/src/types.d.ts +46 -9
  74. package/dist/src/types.js +8 -7
  75. package/dist/src/usecase.d.ts +11 -2
  76. package/dist/src/usecase.js +27 -35
  77. package/dist/src/utils.d.ts +32 -18
  78. package/dist/src/utils.js +87 -129
  79. package/package.json +10 -3
  80. package/dist/src/agents/digestor.test.d.ts +0 -1
  81. package/dist/src/agents/digestor.test.js +0 -45
  82. package/dist/src/agents/reducer.example.d.ts +0 -28
  83. package/dist/src/agents/reducer.example.js +0 -118
  84. package/dist/src/agents/reducer.process.d.ts +0 -16
  85. package/dist/src/agents/reducer.process.js +0 -143
  86. package/dist/src/agents/reducer.tools.d.ts +0 -29
  87. package/dist/src/agents/reducer.tools.js +0 -157
  88. package/dist/src/agents/simpleExample.d.ts +0 -3
  89. package/dist/src/agents/simpleExample.js +0 -38
  90. package/dist/src/agents/system-review.d.ts +0 -5
  91. package/dist/src/agents/system-review.js +0 -181
  92. package/dist/src/agents/systemReview.d.ts +0 -4
  93. package/dist/src/agents/systemReview.js +0 -22
  94. package/dist/src/execute.d.ts +0 -49
  95. package/dist/src/execute.js +0 -564
  96. package/dist/src/princing.openai.js +0 -54
  97. package/dist/src/rag/tools.d.ts +0 -76
  98. package/dist/src/rag/tools.js +0 -196
  99. package/dist/src/rules/user.mapper.d.ts +0 -61
  100. package/dist/src/rules/user.mapper.js +0 -160
  101. package/dist/src/rules/utils/slug.d.ts +0 -22
  102. 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 type { AgentModel } from '../types';
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?: AgentModel;
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: (0, execute_1.modelConfig)("LOW"),
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 : réponse du simulateur après analyse du scenario
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
- * - Message initial : buildSimulatorQuery(scenario) - format structuré avec SIMULATION SCENARIO
16
- * - Messages suivants : réponse de l'agent testé (pour évaluation et réaction)
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 simulatorAgent;
5
- constructor(config: SimulatorConfig);
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 types_1 = require("../types");
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
- // Construire les instructions complètes du simulateur
12
- const fullInstructions = simulator_prompts_1.GENERIC_SIMULATOR_PROMPT +
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: (0, execute_1.modelConfig)("MEDIUM-fast"), // JSON sera forcé via les instructions du prompt
14
+ model: ("HIGH-fast"),
19
15
  publicDescription: "Simulateur simple pour tests - TOUJOURS retourner JSON valide",
20
- instructions: fullInstructions,
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: false,
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: { write: () => { }, end: () => { }, writableEnded: false },
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 = (0, types_1.executionResultMerge)(context.lastExecution, execResult);
71
- }
72
- else {
73
- context.lastExecution = execResult;
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 dynamique avec instructions étendues
84
- // console.log('DEBUG: Exécution du simulateur avec query:\n', query);
85
- await (0, execute_1.executeAgentSet)([this.simulatorAgent], context.simulatorContext, {
86
- query,
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: { write: () => { }, end: () => { }, writableEnded: false },
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
  }