agentic-api 2.0.646 → 2.0.885
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/prompts.d.ts +2 -3
- package/dist/src/agents/prompts.js +21 -118
- package/dist/src/agents/reducer.loaders.d.ts +103 -1
- package/dist/src/agents/reducer.loaders.js +164 -2
- package/dist/src/agents/reducer.types.d.ts +34 -3
- package/dist/src/agents/simulator.d.ts +32 -2
- package/dist/src/agents/simulator.executor.d.ts +15 -5
- package/dist/src/agents/simulator.executor.js +134 -67
- package/dist/src/agents/simulator.js +251 -8
- package/dist/src/agents/simulator.prompts.d.ts +55 -10
- package/dist/src/agents/simulator.prompts.js +305 -61
- package/dist/src/agents/simulator.types.d.ts +62 -1
- package/dist/src/agents/simulator.types.js +5 -0
- package/dist/src/agents/subagent.d.ts +128 -0
- package/dist/src/agents/subagent.js +231 -0
- package/dist/src/agents/worker.executor.d.ts +48 -0
- package/dist/src/agents/worker.executor.js +152 -0
- package/dist/src/execute/helpers.d.ts +3 -0
- package/dist/src/execute/helpers.js +222 -16
- package/dist/src/execute/responses.js +81 -55
- package/dist/src/execute/shared.d.ts +5 -0
- package/dist/src/execute/shared.js +27 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js +3 -1
- package/dist/src/llm/openai.js +8 -1
- package/dist/src/llm/pricing.js +2 -0
- package/dist/src/llm/xai.js +11 -6
- package/dist/src/prompts.d.ts +14 -0
- package/dist/src/prompts.js +41 -1
- package/dist/src/rag/rag.manager.d.ts +18 -3
- package/dist/src/rag/rag.manager.js +114 -12
- package/dist/src/rag/types.d.ts +3 -1
- package/dist/src/rules/git/git.e2e.helper.js +51 -4
- package/dist/src/rules/git/git.health.js +89 -56
- package/dist/src/rules/git/index.d.ts +2 -2
- package/dist/src/rules/git/index.js +22 -5
- package/dist/src/rules/git/repo.d.ts +64 -6
- package/dist/src/rules/git/repo.js +572 -141
- package/dist/src/rules/git/repo.pr.d.ts +11 -18
- package/dist/src/rules/git/repo.pr.js +82 -94
- package/dist/src/rules/git/repo.tools.d.ts +5 -0
- package/dist/src/rules/git/repo.tools.js +6 -1
- package/dist/src/rules/types.d.ts +0 -2
- package/dist/src/rules/utils.matter.js +1 -5
- package/dist/src/scrapper.d.ts +138 -25
- package/dist/src/scrapper.js +538 -160
- package/dist/src/stategraph/stategraph.d.ts +6 -2
- package/dist/src/stategraph/stategraph.js +21 -6
- package/dist/src/stategraph/types.d.ts +14 -6
- package/dist/src/types.d.ts +22 -0
- package/dist/src/utils.d.ts +24 -0
- package/dist/src/utils.js +84 -86
- package/package.json +3 -2
- package/dist/src/agents/semantic.d.ts +0 -4
- package/dist/src/agents/semantic.js +0 -19
- package/dist/src/execute/legacy.d.ts +0 -46
- package/dist/src/execute/legacy.js +0 -460
- package/dist/src/pricing.llm.d.ts +0 -5
- package/dist/src/pricing.llm.js +0 -14
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AgentSimulator = void 0;
|
|
4
4
|
const simulator_executor_1 = require("./simulator.executor");
|
|
5
|
+
const execute_1 = require("../execute");
|
|
5
6
|
class AgentSimulator {
|
|
6
7
|
constructor(config) {
|
|
7
8
|
this.config = config;
|
|
@@ -59,6 +60,195 @@ class AgentSimulator {
|
|
|
59
60
|
});
|
|
60
61
|
}
|
|
61
62
|
// ============================================================================
|
|
63
|
+
// WORKER API : runJob(input) — exécution de mission autonome
|
|
64
|
+
// ============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Exécuter un WorkerJob — boucle Worker LLM ↔ Agent LLM
|
|
67
|
+
*
|
|
68
|
+
* Parallèle à testCase() mais pour des missions de production :
|
|
69
|
+
* - Le Worker LLM formule des questions pour l'Agent
|
|
70
|
+
* - L'Agent répond avec ses tools (RAG, DB, emails, calendar...)
|
|
71
|
+
* - Le Worker LLM évalue et continue ou termine avec [WORKER_COMPLETE]
|
|
72
|
+
*
|
|
73
|
+
* @param input - Paramètres du job (query, maxIterations, agentContext)
|
|
74
|
+
* @returns WorkerResult
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const worker = new AgentSimulator({
|
|
79
|
+
* agents: [...], start: 'PR-knowledge', verbose: false,
|
|
80
|
+
* mode: 'worker',
|
|
81
|
+
* positionDescription: 'Consulter tous les mails du jour et résumer les actions'
|
|
82
|
+
* });
|
|
83
|
+
*
|
|
84
|
+
* const result = await worker.runJob({
|
|
85
|
+
* query: 'Commence par lister les mails du jour',
|
|
86
|
+
* maxIterations: 10,
|
|
87
|
+
* agentContext: realContext
|
|
88
|
+
* });
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
async runJob(input) {
|
|
92
|
+
const startTime = Date.now();
|
|
93
|
+
const maxIterations = input.maxIterations ?? 10;
|
|
94
|
+
const stdout = input.agentContext?.stdout || execute_1.DummyWritable;
|
|
95
|
+
const emptyUsage = { prompt: 0, completion: 0, total: 0, cost: 0 };
|
|
96
|
+
//
|
|
97
|
+
// Helper : émettre un WorkerEvent via sendFeedback
|
|
98
|
+
const emitWorkerEvent = (description, data) => {
|
|
99
|
+
(0, execute_1.sendFeedback)({
|
|
100
|
+
agent: 'worker',
|
|
101
|
+
stdout,
|
|
102
|
+
description,
|
|
103
|
+
usage: context.lastExecution?.usage || emptyUsage,
|
|
104
|
+
state: input.jobId || '',
|
|
105
|
+
data
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
//
|
|
109
|
+
// Initialiser les contextes avec le contexte réel de l'agent
|
|
110
|
+
const context = await this.executor.initializeContexts({ goals: '', persona: '', result: '' }, input.agentContext);
|
|
111
|
+
context.maxTurns = maxIterations;
|
|
112
|
+
const allMessages = [];
|
|
113
|
+
let exchangeCounter = 0;
|
|
114
|
+
//
|
|
115
|
+
// Événement : worker_started
|
|
116
|
+
emitWorkerEvent(input.description || 'Worker démarré', { type: 'worker_started', jobId: input.jobId || '', maxIterations, description: input.description });
|
|
117
|
+
try {
|
|
118
|
+
let currentUserQuery = input.query;
|
|
119
|
+
//
|
|
120
|
+
// Stocker le message initial
|
|
121
|
+
const initialMsg = { content: currentUserQuery, role: 'user' };
|
|
122
|
+
allMessages.push(initialMsg);
|
|
123
|
+
if (input.onMessage) {
|
|
124
|
+
input.onMessage(initialMsg);
|
|
125
|
+
}
|
|
126
|
+
//
|
|
127
|
+
// Boucle Worker — maxIterations échanges (parallèle à executeSimulation)
|
|
128
|
+
while (exchangeCounter < maxIterations) {
|
|
129
|
+
//
|
|
130
|
+
// Événement : worker_iteration (avant appel Agent)
|
|
131
|
+
emitWorkerEvent(currentUserQuery.substring(0, 120), { type: 'worker_iteration', iteration: exchangeCounter + 1, maxIterations, query: currentUserQuery.substring(0, 200) });
|
|
132
|
+
//
|
|
133
|
+
// Agent répond à la question
|
|
134
|
+
const agentResponse = await this.executor.executeAgent(context, currentUserQuery);
|
|
135
|
+
const agentMsg = { content: agentResponse, role: 'assistant' };
|
|
136
|
+
allMessages.push(agentMsg);
|
|
137
|
+
if (input.onMessage) {
|
|
138
|
+
input.onMessage(agentMsg);
|
|
139
|
+
}
|
|
140
|
+
exchangeCounter++;
|
|
141
|
+
//
|
|
142
|
+
// Worker LLM évalue la réponse de l'Agent
|
|
143
|
+
const workerResponse = await this.executor.executeSimulator(context, agentResponse);
|
|
144
|
+
//
|
|
145
|
+
// Vérifier [WORKER_COMPLETE]
|
|
146
|
+
if (this.isWorkerComplete(workerResponse)) {
|
|
147
|
+
const parsed = this.parseWorkerResult(workerResponse);
|
|
148
|
+
if (this.isWorkerCompletionValid(parsed)) {
|
|
149
|
+
this.lastExecution = context.lastExecution;
|
|
150
|
+
const duration = Date.now() - startTime;
|
|
151
|
+
emitWorkerEvent(parsed.summary || 'Worker terminé', { type: 'worker_completed', success: true, summary: parsed.summary, iterations: exchangeCounter, duration });
|
|
152
|
+
return {
|
|
153
|
+
success: true,
|
|
154
|
+
deliverable: parsed.deliverable,
|
|
155
|
+
summary: parsed.summary,
|
|
156
|
+
confidence: parsed.confidence,
|
|
157
|
+
iterations: exchangeCounter,
|
|
158
|
+
maxIterations,
|
|
159
|
+
duration,
|
|
160
|
+
execution: context.lastExecution,
|
|
161
|
+
messages: allMessages
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
this.lastExecution = context.lastExecution;
|
|
165
|
+
const duration = Date.now() - startTime;
|
|
166
|
+
emitWorkerEvent('Clôture invalide', { type: 'worker_failed', error: 'deliverable must be concrete and non-empty', iterations: exchangeCounter, duration });
|
|
167
|
+
return {
|
|
168
|
+
success: false,
|
|
169
|
+
deliverable: '',
|
|
170
|
+
summary: 'Invalid [WORKER_COMPLETE] payload',
|
|
171
|
+
confidence: 0,
|
|
172
|
+
iterations: exchangeCounter,
|
|
173
|
+
maxIterations,
|
|
174
|
+
duration,
|
|
175
|
+
execution: context.lastExecution,
|
|
176
|
+
messages: allMessages,
|
|
177
|
+
error: 'Worker completion rejected: deliverable must be concrete and non-empty'
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//
|
|
181
|
+
// Pas terminé — extraire la prochaine question pour l'Agent
|
|
182
|
+
currentUserQuery = this.extractConversationalPart(workerResponse);
|
|
183
|
+
if (currentUserQuery) {
|
|
184
|
+
const workerMsg = { content: currentUserQuery, role: 'user' };
|
|
185
|
+
allMessages.push(workerMsg);
|
|
186
|
+
if (input.onMessage) {
|
|
187
|
+
input.onMessage(workerMsg);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//
|
|
192
|
+
// Budget épuisé — forcer une conclusion avant de déclarer timeout
|
|
193
|
+
// On demande au Worker LLM de synthétiser tout ce qui a été collecté
|
|
194
|
+
const forceConcludeMsg = `[BUDGET ÉPUISÉ — dernier tour obligatoire]\nTu as utilisé ${exchangeCounter}/${maxIterations} tours. Produis maintenant ton [WORKER_COMPLETE] final en synthétisant toutes les informations récoltées.`;
|
|
195
|
+
const forceResponse = await this.executor.executeSimulator(context, forceConcludeMsg);
|
|
196
|
+
if (this.isWorkerComplete(forceResponse)) {
|
|
197
|
+
const parsed = this.parseWorkerResult(forceResponse);
|
|
198
|
+
if (this.isWorkerCompletionValid(parsed)) {
|
|
199
|
+
this.lastExecution = context.lastExecution;
|
|
200
|
+
const duration = Date.now() - startTime;
|
|
201
|
+
emitWorkerEvent(parsed.summary || 'Worker terminé (budget épuisé)', { type: 'worker_completed', success: true, summary: parsed.summary, iterations: exchangeCounter, duration });
|
|
202
|
+
return {
|
|
203
|
+
success: true,
|
|
204
|
+
deliverable: parsed.deliverable,
|
|
205
|
+
summary: parsed.summary,
|
|
206
|
+
confidence: parsed.confidence,
|
|
207
|
+
iterations: exchangeCounter,
|
|
208
|
+
maxIterations,
|
|
209
|
+
duration,
|
|
210
|
+
execution: context.lastExecution,
|
|
211
|
+
messages: allMessages
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
//
|
|
216
|
+
// Timeout réel — le Worker n'a pas pu conclure
|
|
217
|
+
this.lastExecution = context.lastExecution;
|
|
218
|
+
const duration = Date.now() - startTime;
|
|
219
|
+
emitWorkerEvent(`Limite atteinte (${maxIterations} itérations)`, { type: 'worker_failed', error: 'Max iterations reached', iterations: exchangeCounter, duration });
|
|
220
|
+
return {
|
|
221
|
+
success: false,
|
|
222
|
+
deliverable: '',
|
|
223
|
+
summary: `Max iterations reached (${maxIterations})`,
|
|
224
|
+
confidence: 0,
|
|
225
|
+
iterations: exchangeCounter,
|
|
226
|
+
maxIterations,
|
|
227
|
+
duration,
|
|
228
|
+
execution: context.lastExecution,
|
|
229
|
+
messages: allMessages,
|
|
230
|
+
error: 'Max iterations reached without [WORKER_COMPLETE]'
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
this.lastExecution = context.lastExecution;
|
|
235
|
+
const duration = Date.now() - startTime;
|
|
236
|
+
emitWorkerEvent(`Erreur: ${(error.message || error).substring(0, 80)}`, { type: 'worker_failed', error: error.message || String(error), iterations: exchangeCounter, duration });
|
|
237
|
+
return {
|
|
238
|
+
success: false,
|
|
239
|
+
deliverable: '',
|
|
240
|
+
summary: '',
|
|
241
|
+
confidence: 0,
|
|
242
|
+
iterations: exchangeCounter,
|
|
243
|
+
maxIterations,
|
|
244
|
+
duration,
|
|
245
|
+
execution: context.lastExecution,
|
|
246
|
+
messages: allMessages,
|
|
247
|
+
error: `Erreur d'exécution: ${error.message || error}`
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// ============================================================================
|
|
62
252
|
// ANCIENNE API : executeSimulation(options) - deprecated
|
|
63
253
|
// ============================================================================
|
|
64
254
|
/**
|
|
@@ -81,6 +271,7 @@ class AgentSimulator {
|
|
|
81
271
|
async executeSimulation(options) {
|
|
82
272
|
// ✅ Initialiser les contextes avec le scenario complet
|
|
83
273
|
const context = await this.executor.initializeContexts(options.scenario);
|
|
274
|
+
context.maxTurns = options.maxExchanges;
|
|
84
275
|
const allMessages = [];
|
|
85
276
|
let lastAgentMessage = '';
|
|
86
277
|
let exchangeCounter = 0; // Compteur d'échanges (user+assistant)
|
|
@@ -118,12 +309,18 @@ class AgentSimulator {
|
|
|
118
309
|
const parsed = this.parseSimulationResult(simulatorResult, expectedFormat, context);
|
|
119
310
|
this.lastExecution = context.lastExecution;
|
|
120
311
|
// Validation des tools si expectedTool est fourni
|
|
121
|
-
if (options.expectedTool) {
|
|
312
|
+
if (options.expectedTool && Object.keys(options.expectedTool).length > 0) {
|
|
122
313
|
const validation = this.validateExpectedTools(options.expectedTool);
|
|
314
|
+
//
|
|
315
|
+
// Toujours définir toolValidation pour inspection par les tests
|
|
316
|
+
parsed.toolValidation = validation;
|
|
123
317
|
if (!validation.passed) {
|
|
124
318
|
parsed.success = false;
|
|
125
|
-
|
|
126
|
-
|
|
319
|
+
//
|
|
320
|
+
// Préserver l'erreur LLM si présente, ajouter l'erreur de validation
|
|
321
|
+
const llmError = parsed.error || '';
|
|
322
|
+
const toolError = validation.errors.join('; ');
|
|
323
|
+
parsed.error = llmError ? `${llmError} | Tool validation: ${toolError}` : toolError;
|
|
127
324
|
}
|
|
128
325
|
}
|
|
129
326
|
// Ajouter l'historique des messages au résultat
|
|
@@ -149,12 +346,16 @@ class AgentSimulator {
|
|
|
149
346
|
const timeout = await this.generateTimeoutReport(context, expectedFormat);
|
|
150
347
|
this.lastExecution = context.lastExecution;
|
|
151
348
|
// Validation des tools même en cas de timeout
|
|
152
|
-
if (options.expectedTool) {
|
|
349
|
+
if (options.expectedTool && Object.keys(options.expectedTool).length > 0) {
|
|
153
350
|
const validation = this.validateExpectedTools(options.expectedTool);
|
|
351
|
+
//
|
|
352
|
+
// Toujours définir toolValidation pour inspection par les tests
|
|
353
|
+
timeout.toolValidation = validation;
|
|
154
354
|
if (!validation.passed) {
|
|
155
355
|
timeout.success = false;
|
|
156
|
-
timeout.error
|
|
157
|
-
|
|
356
|
+
const llmError = timeout.error || '';
|
|
357
|
+
const toolError = validation.errors.join('; ');
|
|
358
|
+
timeout.error = llmError ? `${llmError} | Tool validation: ${toolError}` : toolError;
|
|
158
359
|
}
|
|
159
360
|
}
|
|
160
361
|
return { ...timeout, exchangeCount: exchangeCounter, messages: allMessages }; // Utiliser notre compteur
|
|
@@ -173,7 +374,7 @@ class AgentSimulator {
|
|
|
173
374
|
}
|
|
174
375
|
/**
|
|
175
376
|
* Compter les occurrences d'une action dans le dernier ExecutionResult
|
|
176
|
-
* @param name Nom exact de l'action (ex: '
|
|
377
|
+
* @param name Nom exact de l'action (ex: 'resolveLocataire', 'lookupKnowledge', 'sendInternalEmail')
|
|
177
378
|
* @returns { firstPos, count, total } où:
|
|
178
379
|
* - firstPos: index de la première occurrence (ou -1 si absente)
|
|
179
380
|
* - count: nombre d'occurrences de cette action
|
|
@@ -222,6 +423,48 @@ class AgentSimulator {
|
|
|
222
423
|
isSimulationComplete(response) {
|
|
223
424
|
return response.includes('[DONE]') || response.includes('[SIMULATION_COMPLETE]') || response.includes('[TERMINE]');
|
|
224
425
|
}
|
|
426
|
+
isWorkerComplete(response) {
|
|
427
|
+
return response.includes('[WORKER_COMPLETE]');
|
|
428
|
+
}
|
|
429
|
+
isWorkerCompletionValid(parsed) {
|
|
430
|
+
const deliverable = (parsed.deliverable || '').trim();
|
|
431
|
+
const summary = (parsed.summary || '').trim();
|
|
432
|
+
if (!deliverable) {
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
// Rejeter les fausses clôtures qui ne sont qu'une enveloppe JSON sérialisée en texte.
|
|
436
|
+
const isWrappedJsonEnvelope = deliverable.startsWith('{')
|
|
437
|
+
&& /"deliverable"\s*:/.test(deliverable)
|
|
438
|
+
&& /"summary"\s*:/.test(deliverable);
|
|
439
|
+
if (isWrappedJsonEnvelope) {
|
|
440
|
+
return false;
|
|
441
|
+
}
|
|
442
|
+
// Rejeter les clôtures déclaratives sans résultat concret.
|
|
443
|
+
if (/^instruction envoy[ée]e?/i.test(summary)) {
|
|
444
|
+
return false;
|
|
445
|
+
}
|
|
446
|
+
return true;
|
|
447
|
+
}
|
|
448
|
+
parseWorkerResult(response) {
|
|
449
|
+
const match = response.match(/\[WORKER_COMPLETE\]\s*\n?([\s\S]*)/);
|
|
450
|
+
if (match) {
|
|
451
|
+
const content = match[1].trim();
|
|
452
|
+
try {
|
|
453
|
+
const parsed = JSON.parse(content);
|
|
454
|
+
return {
|
|
455
|
+
deliverable: parsed.deliverable || content,
|
|
456
|
+
summary: parsed.summary || '',
|
|
457
|
+
confidence: parsed.confidence ?? 0.5
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
catch {
|
|
461
|
+
//
|
|
462
|
+
// Fallback : contenu brut comme deliverable
|
|
463
|
+
return { deliverable: content, summary: '', confidence: 0.5 };
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
return { deliverable: '', summary: '', confidence: 0 };
|
|
467
|
+
}
|
|
225
468
|
parseSimulationResult(response, expectedFormat, context) {
|
|
226
469
|
// Le simulateur produit directement le résultat et rapport
|
|
227
470
|
// Parsing pour détecter la fin et extraire le contenu JSON
|
|
@@ -286,7 +529,7 @@ class AgentSimulator {
|
|
|
286
529
|
extractConversationalPart(response) {
|
|
287
530
|
// Extraire la partie conversationnelle avant les tags d'évaluation ou d'observation
|
|
288
531
|
// Filtrer tous les tags système : [DONE], [OBSERVATEUR SILENCIEUX], [À NOTER], etc.
|
|
289
|
-
const tagIndex = response.search(/\[(DONE|SIMULATION_COMPLETE|TERMINE|BUG_|OBSERVATEUR|À NOTER|NOTE|ANALYSE)/i);
|
|
532
|
+
const tagIndex = response.search(/\[(DONE|SIMULATION_COMPLETE|TERMINE|WORKER_COMPLETE|BUG_|OBSERVATEUR|À NOTER|NOTE|ANALYSE)/i);
|
|
290
533
|
if (tagIndex !== -1) {
|
|
291
534
|
return response.substring(0, tagIndex).trim();
|
|
292
535
|
}
|
|
@@ -1,18 +1,63 @@
|
|
|
1
1
|
import { SimulationScenario } from "./simulator.types";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Basé sur ClientSimulator avec Mirror Agent Model
|
|
6
|
-
* Intègre directement les valeurs du scenario dans des tags XML
|
|
7
|
-
*
|
|
8
|
-
* @param scenario - Scenario de simulation avec persona, goals, result
|
|
9
|
-
* @param instructionEx - Instructions additionnelles spécifiques à l'agent (ajoutées à la fin)
|
|
10
|
-
* @returns Prompt complet avec plan de simulation intégré
|
|
3
|
+
* Section ACTEURS — décrit les 3 rôles de la boucle.
|
|
4
|
+
* Spécifique par agent : le descripteur de l'orchestrateur diffère.
|
|
11
5
|
*/
|
|
12
|
-
export declare
|
|
6
|
+
export declare const acteursSectionSimulatorPrompt = "# ACTEURS\nIl y a 3 acteurs dans cette boucle de test E2E :\n1. **Utilisateur** \u2014 celui qui a pos\u00E9 la question initiale (premier message). Il est HORS boucle.\n2. **Agent** \u2014 il poss\u00E8de les outils de l'entreprise et r\u00E9pond \u00E0 tes demandes. C'est lui qu'on teste.\n3. **Toi (Simulateur)** \u2014 tu pilotes l'Agent tour par tour selon <simulation_brief> et tu \u00E9values ses r\u00E9ponses. Ta personnalit\u00E9 est d\u00E9crite dans <persona_user>.";
|
|
7
|
+
export declare const acteursSectionWorkerPrompt = "# ACTEURS\nIl y a 3 acteurs dans cette boucle de travail :\n1. **Utilisateur** \u2014 celui qui a pos\u00E9 la question initiale (premier message). Il est HORS boucle pendant l'ex\u00E9cution : tu ne dois jamais le solliciter ni attendre d'information de sa part.\n2. **Agent** \u2014 il dispose des outils de l'entreprise et ex\u00E9cute tes demandes.\n3. **Toi (Worker)** \u2014 tu pilotes l'Agent tour par tour afin d'accomplir la mission d\u00E9crite dans <worker_brief>.";
|
|
13
8
|
/**
|
|
14
|
-
*
|
|
9
|
+
* Section DÉMARRAGE / premier tour — comportement au premier message.
|
|
10
|
+
* - Simulator : avertissement sur la nature du premier message (réponse Agent, pas utilisateur).
|
|
11
|
+
* - Worker : dérivation d'intention depuis les déclencheurs de la fiche de poste.
|
|
15
12
|
*/
|
|
13
|
+
export declare const starterSectionSimulatorPrompt = "\u26A0\uFE0F Le premier message que tu re\u00E7ois est d\u00E9j\u00E0 la r\u00E9ponse de l'Agent \u00E0 la question initiale de l'Utilisateur. Ce n'est PAS un message de l'utilisateur.";
|
|
14
|
+
export declare const starterSectionWorkerPrompt = "# D\u00C9MARRAGE (premier tour uniquement)\nAvant d'envoyer ta premi\u00E8re demande \u00E0 l'Agent :\n1. Identifie si une intention est **explicite** dans le message [verbe + objet direct].\n2. Si non (texte brut, r\u00E9sum\u00E9 de mail, message ambigu) \u2192 parcours les champs `D\u00E9clencheur:` des **Activit\u00E9s** de ta `<worker_brief>`. S\u00E9lectionne l'activit\u00E9 dont le d\u00E9clencheur correspond le mieux au message : son champ `Travail:` d\u00E9finit ton objectif, son champ `B\u00E9n\u00E9ficiaire:` identifie le destinataire.\n3. Formule un plan d'action en 2-3 \u00E9tapes **(raisonnement interne \u2014 ne jamais l'envoyer \u00E0 l'Agent)**.\n4. Premi\u00E8re demande = \u00E9tape 1 du plan, cibl\u00E9e et sourc\u00E9e. Pas de pr\u00E9ambule ni num\u00E9rotation.";
|
|
15
|
+
/**
|
|
16
|
+
* Section LIFECYCLE — budget de tours injecté à chaque tour via <execution-context>.
|
|
17
|
+
* - Simulator : inclut aussi `tools` (outils réellement appelés) pour validation E2E.
|
|
18
|
+
* - Worker : inclut les instructions de clôture au dernier tour (fallback utile).
|
|
19
|
+
*/
|
|
20
|
+
export declare const lifecycleSectionSimulatorPrompt = "# LIFECYCLE\n\u00C0 chaque tour, un tag `<execution-context>` est inject\u00E9 avec :\n- `turn` : tour actuel\n- `maxTurns` : budget total\n- `turnsRemaining` : tours restants\n- `tools` : noms exacts des outils **r\u00E9ellement appel\u00E9s** par l'Agent pendant ce tour\nUtilise cette info pour planifier : si peu de tours restent, privil\u00E9gie les questions qui valident directement les objectifs.\n**CRITIQUE**: Si un outil appara\u00EEt dans `tools`, il a **r\u00E9ellement \u00E9t\u00E9 ex\u00E9cut\u00E9**.\n**\u00C9QUIVALENCE M\u00C9TIER**: pour l'\u00E9valuation, `M-Files` = `GED` = outils `resolve*` / `lookupMfiles*`. Si l'objectif demande d'utiliser le GED ou M-Files et qu'un outil `resolve*` ou `lookupMfiles*` appara\u00EEt dans `tools`, consid\u00E8re que l'objectif GED/M-Files est satisfait.";
|
|
21
|
+
export declare const lifecycleSectionWorkerPrompt = "# LIFECYCLE\n\u00C0 chaque tour, un tag `<execution-context>` est inject\u00E9 avec ton budget :\n- `turn` : tour actuel\n- `maxTurns` : budget total\n- `turnsRemaining` : tours restants\nUtilise cette info pour prioriser : si peu de tours restent, concentre-toi sur le livrable.\n**DERNIER TOUR** : quand `turnsRemaining` \u2264 1, tu DOIS conclure avec `[WORKER_COMPLETE]` en synth\u00E9tisant toutes les informations r\u00E9colt\u00E9es.\nSi l'information est insuffisante, fournis un **fallback utile** : meilleures hypoth\u00E8ses explicites + options + plan d'action concret (sans inventer de faits). Ne demande pas de tour suppl\u00E9mentaire.";
|
|
22
|
+
/**
|
|
23
|
+
* Section SAFETY — règles anti-hallucination.
|
|
24
|
+
* Formulation différente selon le rôle (évaluateur vs exécutant).
|
|
25
|
+
*/
|
|
26
|
+
export declare const safetySectionSimulatorPrompt = "# SAFETY\n- N'invente pas de r\u00E9sultats d'outils.\n- Si l'Agent a produit une r\u00E9ponse visible dans la conversation, \u00E9value-la \u2014 ne d\u00E9clare jamais \"pas de r\u00E9ponse\".";
|
|
27
|
+
export declare const safetySectionWorkerPrompt = "# SAFETY\n- N'invente pas de faits.\n- Si l'information est incertaine ou incompl\u00E8te, indique-le dans `summary`.";
|
|
28
|
+
/**
|
|
29
|
+
* Bloc CRITICAL final — rappel JSON strict après le trigger de sortie.
|
|
30
|
+
* Factorisé via fonction car seul le nom du trigger diffère.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildCriticalBlock(trigger: string): string;
|
|
16
33
|
export declare const PERSONA_PATIENT = "Utilisateur patient et poli qui prend le temps d'expliquer sa situation";
|
|
17
34
|
export declare const PERSONA_PRESSE = "Utilisateur press\u00E9 qui veut une solution rapide, r\u00E9pond bri\u00E8vement";
|
|
18
35
|
export declare const PERSONA_ENERVE = "Utilisateur \u00E9nerv\u00E9 et frustr\u00E9, c'est son 3\u00E8me appel pour le m\u00EAme probl\u00E8me, ton direct et impatient";
|
|
36
|
+
export declare const PERSONA_RESULT_CLIENT = "R\u00E9daction claire et orient\u00E9e client, empathique, sans jargon interne, avec des conclusions directement actionnables.";
|
|
37
|
+
/**
|
|
38
|
+
* Préfixe injecté au premier message Worker→Agent en mode autonome.
|
|
39
|
+
* Signale à l'Agent qu'il est piloté par un orchestrateur et doit éviter
|
|
40
|
+
* les questions de clarification destinées à un utilisateur humain.
|
|
41
|
+
*/
|
|
42
|
+
export declare const WORKER_AUTONOMOUS_PREFIX = "[MODE AUTONOME] Tu es pilot\u00E9 par un orchestrateur. Ne pose pas de question de clarification, va droit au but, pas de bavardage ni de formules de politesse superflues.\n\n";
|
|
43
|
+
/**
|
|
44
|
+
* Génère le prompt du simulateur générique avec le scenario intégré.
|
|
45
|
+
*
|
|
46
|
+
* @param scenario - Scénario de simulation avec persona, goals, result
|
|
47
|
+
* @param positionDescription - Instructions additionnelles (ajoutées à la fin)
|
|
48
|
+
*/
|
|
49
|
+
export declare function GENERIC_SIMULATOR_PROMPT(scenario: SimulationScenario, positionDescription?: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Prompt interne fixe du WorkerJob — system prompt pour le Worker LLM.
|
|
52
|
+
*
|
|
53
|
+
* Structure (inspirée OpenClaw) :
|
|
54
|
+
* CONTEXT → ACTEURS, CAPACITÉS AGENT, worker_brief (persona/soul)
|
|
55
|
+
* PROCESS → DÉMARRAGE, MISSION, BOUCLE DE DÉCISION, STYLE
|
|
56
|
+
* CONSTRAINTS → CONTRAINTES (RÈGLES + BLOCAGE + NO-PROGRESS + INTERDICTIONS)
|
|
57
|
+
* OUTPUT → LIFECYCLE, SAFETY, VÉRIFICATION, TRIGGERS, FORMAT
|
|
58
|
+
*
|
|
59
|
+
* @param positionDescription - Fiche de poste du collaborateur (= PERSONA_PROMPTS[key], tronquée à -- END --)
|
|
60
|
+
* @param personaResult - Style du deliverable final (orienté client)
|
|
61
|
+
* @param agentCapabilities - Capacités de l'Agent (firstLine de chaque tool.function.description)
|
|
62
|
+
*/
|
|
63
|
+
export declare function WORKER_INTERNAL_PROMPT(positionDescription: string, personaResult?: string, agentCapabilities?: string): string;
|