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
package/README.md CHANGED
@@ -1,31 +1,59 @@
1
1
  # @agentic-api
2
2
 
3
- Super simple API for intelligent agent orchestration with automatic sequences and escalations. (inspiré du projet [OpenAI Swarm](https://github.com/openai/openai-realtime-agents))
3
+ Comprehensive framework for intelligent agent orchestration, document processing, and enterprise workflow management. (inspired from [OpenAI Swarm](https://github.com/openai/openai-realtime-agents)) (01/2025)
4
4
 
5
- > **Personal Note**:
6
- > This project is not meant to be better than Vercel or LangChain. It's simply less generic and optimized for a specific set of problems.
5
+ > **Design Philosophy**:
6
+ > This project is not meant to be better than Vercel or LangChain. It's simply less generic and optimized for a specific set of enterprise problems.
7
7
  > It focuses on specific features that required too many dependencies with other frameworks.
8
8
 
9
+ ## 🚀 Core Capabilities
9
10
 
10
- ## 🚀 Key Features
11
+ ### 🤖 Agent Orchestration
12
+ - Multi-agent conversations with automatic transfers
13
+ - State machine-driven workflows for complex processes
14
+ - Confidence-based escalation between specialized agents
15
+ - **StateGraph Architecture**: Modern conversation state management with automatic persistence
11
16
 
12
- - Agent orchestration in predefined sequences
13
- - Automatic model escalation to more intelligent instructions and models.
14
- - Smart transfer between specialized agents with confidence threshold
15
- - Prompting models to follow a state machine, for example to accurately collect things like names and phone numbers.
17
+ ### 📄 Document Processing
18
+ - **MapLLM**: Advanced map-reduce pattern for large document analysis
19
+ - **Structured Outputs**: OpenAI JSON schema validation support
20
+ - **Flexible Loaders**: File and string content processing with chunking strategies
21
+ - **Callback-Driven**: User-defined logic for accumulation and flow control
16
22
 
23
+ ### 🧪 Testing & Validation
24
+ - **Agent Simulator**: Comprehensive testing framework with scenario-based simulations
25
+ - **Realistic Personas**: Authentic user behavior simulation for thorough testing
26
+ - **Automatic Validation**: Built-in success/failure detection and reporting
17
27
 
18
- ### Key Advantages
28
+ ### 📋 Enterprise Workflow
29
+ - **Rules Management**: Git-based workflow for business rules and procedures
30
+ - **Pull Request Validation**: Structured review and approval processes
31
+ - **Multi-File Operations**: Atomic operations across related documents
32
+ - **Search Integration**: Full-text search with RAG embeddings
19
33
 
20
- 1. **Simplicity**
21
- - Minimal configuration
22
- - Few dependencies
23
- - Fast
34
+ ## 🎯 Key Advantages
35
+
36
+ 1. **Enterprise-Ready**
37
+ - Production-grade document workflows
38
+ - Comprehensive testing capabilities
39
+ - Git-based version control integration
40
+
41
+ 2. **Developer-Friendly**
42
+ - Minimal configuration required
43
+ - TypeScript-first with full type safety
44
+ - Modular architecture for easy extension
45
+
46
+ 3. **Performance-Optimized**
47
+ - Efficient chunking strategies
48
+ - Intelligent caching systems
49
+ - Parallel processing support
24
50
 
25
51
  ### Recommended Use Cases
26
52
 
27
- - Applications requiring specialized agent orchestration
28
- - Projects needing reliable content extraction
53
+ - **Enterprise Document Management**: Rules, procedures, and knowledge base management
54
+ - **Agent Development & Testing**: Comprehensive agent behavior validation
55
+ - **Large Document Processing**: Analysis and synthesis of complex documents
56
+ - **Conversational AI Systems**: Multi-agent workflows with state management
29
57
 
30
58
 
31
59
  [![](https://mermaid.ink/img/pako:eNpVkcluwjAQhl_FGgmJSoDIQoAcKhEQ7aGXNkiVmqDKTYYkUmJHxu5GeZaq575cH6EmC8sc7PnG_4xn7B1EPEZwYZPztyilQpLVImREmy81dYNqW1_VsVlwIxAlinXNi24Qwt_37w-5VQVlIbTCet2ql0TQMiU-itcswudZgkxuSdAwqbkpdrA4ExjJjDNy93CKekbg0xzPhZ4ZzNVW8gIF8VVZct3k2akV3CsujxnI4pDV7jx4XC3XLVXTkX7_msyaCSvwjAsyL8hqkzsdsuQi0h3QPEsYFnoYknKRfXImaV6LPIP0B2dFPLNhq2Gr5kVbtUn4WtIsVwK_yLxp_HD7KXrUQw_0IxQ0i_U37g6xEGSqmwnB1W6MG6pyGULI9lpKleT-B4vAlUJhDwRXSQruhuZbTaqMqcRFRvW3Fa2kpOyJ8yMm4nBTk60fFsWcKybBHVVScHfwrmFiDgzTGJvToWFY2nrwAe54OBg5pu1Yjj21Dcd29j34rGoPB5OxPT23_T90g8Qf?type=png)](https://mermaid.live/edit#pako:eNpVkcluwjAQhl_FGgmJSoDIQoAcKhEQ7aGXNkiVmqDKTYYkUmJHxu5GeZaq575cH6EmC8sc7PnG_4xn7B1EPEZwYZPztyilQpLVImREmy81dYNqW1_VsVlwIxAlinXNi24Qwt_37w-5VQVlIbTCet2ql0TQMiU-itcswudZgkxuSdAwqbkpdrA4ExjJjDNy93CKekbg0xzPhZ4ZzNVW8gIF8VVZct3k2akV3CsujxnI4pDV7jx4XC3XLVXTkX7_msyaCSvwjAsyL8hqkzsdsuQi0h3QPEsYFnoYknKRfXImaV6LPIP0B2dFPLNhq2Gr5kVbtUn4WtIsVwK_yLxp_HD7KXrUQw_0IxQ0i_U37g6xEGSqmwnB1W6MG6pyGULI9lpKleT-B4vAlUJhDwRXSQruhuZbTaqMqcRFRvW3Fa2kpOyJ8yMm4nBTk60fFsWcKybBHVVScHfwrmFiDgzTGJvToWFY2nrwAe54OBg5pu1Yjj21Dcd29j34rGoPB5OxPT23_T90g8Qf)
@@ -40,31 +68,27 @@ npm install @agentic-api
40
68
 
41
69
  ```typescript
42
70
  import OpenAI from "openai";
43
- import { agents } from '@agentic-api';
44
- import { executeAgentSet } from '@agentic-api/execute';
45
- import { AgenticContext } from '@agentic-api/types';
71
+ import { executeAgentSet } from '@agentic-api';
72
+ import { AgenticContext } from '@agentic-api';
73
+ import { AgentStateGraph } from '@agentic-api';
46
74
 
47
75
  const openai = new OpenAI({
48
76
  apiKey: process.env.OPENAI_API_KEY,
49
77
  });
50
78
 
51
- // Create session context
52
- const session: AgenticContext = {
53
- memory: {
54
- messages: [],
55
- currentAgent: null,
56
- agents,
57
- usage: { prompt: 0, completion: 0, total: 0, cost: 0 }
58
- },
79
+ // Create context with user information
80
+ const context: AgenticContext = {
59
81
  user: {
60
- id: user.id
61
- }
82
+ id: "user123",
83
+ role: "user"
84
+ },
85
+ credential: "your-api-key"
62
86
  };
63
87
 
64
- // Execute agent with memory enrichment
65
- const stream = await executeAgentSet(agents, session, {
88
+ // Execute agent with StateGraph (automatically managed)
89
+ const stream = await executeAgentSet(agents, context, {
66
90
  query: "Hello, what can you do?",
67
- initialAgent: "greeter",
91
+ home: "welcome", // Starting agent
68
92
  verbose: true,
69
93
  enrichWithMemory: async (role) => {
70
94
  // Memory enrichment logic
@@ -76,8 +100,7 @@ const stream = await executeAgentSet(agents, session, {
76
100
  ## 🤖 Custom Agent Creation
77
101
 
78
102
  ```typescript
79
- import { AgentConfig } from '@agentic-api/types';
80
- import { modelConfig } from '@agentic-api/execute';
103
+ import { AgentConfig, modelConfig } from '@agentic-api';
81
104
 
82
105
  // Example specialized agent with thinking tool
83
106
  const haiku: AgentConfig = {
@@ -100,11 +123,55 @@ const welcome: AgentConfig = {
100
123
  };
101
124
 
102
125
  // Inject transfer and thinking tools
103
- import { injectTransferTools } from '@agentic-api/utils';
126
+ import { injectTransferTools } from '@agentic-api';
104
127
  const myAgents = injectTransferTools([welcome, haiku]);
105
128
  ```
106
129
 
107
- ## 🧠 Memory Management
130
+ ## 🧠 StateGraph Memory Management
131
+
132
+ The new StateGraph architecture provides automatic conversation state management:
133
+
134
+ ```typescript
135
+ import { AgentStateGraph, sessionStateGraphGet, sessionStateGraphSet } from '@agentic-api';
136
+
137
+ // StateGraph is automatically managed during executeAgentSet
138
+ // But you can also work with it directly:
139
+
140
+ function setupStateGraph(req: Request) {
141
+ // Get existing StateGraph from session (with automatic migration)
142
+ let stateGraph = sessionStateGraphGet(req);
143
+ if (!stateGraph) {
144
+ stateGraph = new AgentStateGraph();
145
+ }
146
+
147
+ // Create or restore discussion for specific agent
148
+ const discussion = stateGraph.createOrRestore("welcome");
149
+
150
+ // Add messages to discussion
151
+ stateGraph.push("welcome", {
152
+ role: "user",
153
+ content: "Hello!"
154
+ });
155
+
156
+ // Update token usage
157
+ stateGraph.updateTokens("welcome", {
158
+ prompt: 10,
159
+ completion: 20,
160
+ total: 30,
161
+ cost: 0.001
162
+ });
163
+
164
+ // Save back to session with gzip compression
165
+ sessionStateGraphSet(req, stateGraph);
166
+
167
+ return stateGraph;
168
+ }
169
+
170
+ // Client-safe view (filters system messages and tools)
171
+ const clientDiscussion = stateGraph.toClientView("welcome");
172
+ ```
173
+
174
+ ## 🧠 Legacy Memory Management (MemoriesLite)
108
175
 
109
176
  ```typescript
110
177
  import { MemoriesLite } from '@memories-lite';
@@ -138,62 +205,255 @@ ${relevantMemories.results.map(entry => `- ${entry.memory}`).join("\n")}`;
138
205
 
139
206
  ## ⚙️ Model Levels
140
207
 
141
- - **LOW**: gpt-4.1-nano (simple tasks)
142
- - **MEDIUM**: gpt-4.1-mini (balanced performance/cost)
143
- - **HIGH**: gpt-4.1 (advanced reasoning)
208
+ - **LOW**: gpt-4o-mini (simple tasks)
209
+ - **MEDIUM**: gpt-4o (balanced performance/cost)
210
+ - **HIGH**: gpt-4o (advanced reasoning)
144
211
  - **SEARCH**: gpt-4o-mini-search-preview (web search with localization)
145
212
 
146
213
  ## 🔄 Agent Transfer
147
214
 
148
215
  Agent transfer is automatically managed with:
149
- - Confidence threshold (0.7) for transfer
216
+ - **Temporary transfers**: Agents transfer for single transactions and return to specialized agent
217
+ - Confidence threshold (0.7) for transfer
150
218
  - Transfer justification
151
219
  - Conversation context preservation
152
220
  - Automatic system instruction updates
221
+ - **Specialized agent tracking**: Each discussion remembers its starting agent
222
+
223
+ ```typescript
224
+ // Transfer logic (handled automatically)
225
+ // 1. Agent A processes user message
226
+ // 2. If tool calls indicate transfer to Agent B
227
+ // 3. Agent B handles the specific task
228
+ // 4. Control returns to Agent A (specialized agent)
229
+ ```
230
+
231
+ ## 🔄 StateGraph Features
232
+
233
+ ### **Core Operations**
234
+ ```typescript
235
+ // Create or restore agent discussion
236
+ const discussion = stateGraph.createOrRestore("agentName");
237
+
238
+ // Add messages with auto-generated ID and timestamp
239
+ stateGraph.push("agentName", {
240
+ role: "assistant",
241
+ content: "Hello!",
242
+ name: "functionName" // For OpenAI tool calls
243
+ });
244
+
245
+ // Set system message (overwrites existing)
246
+ stateGraph.set("agentName", "You are a helpful assistant");
247
+
248
+ // Update token usage (cumulative)
249
+ stateGraph.updateTokens("agentName", {
250
+ prompt: 10,
251
+ completion: 20,
252
+ cost: 0.001
253
+ });
254
+
255
+ // Clear discussion (keeps system message)
256
+ stateGraph.clearDiscussion("agentName");
257
+ ```
258
+
259
+ ### **Utility Functions**
260
+ ```typescript
261
+ // Get specialized (starting) agent for discussion
262
+ import { getSpecializedAgent } from '@agentic-api';
263
+ const specializedAgent = getSpecializedAgent(discussion);
264
+
265
+ // Find discussion by ID
266
+ const discussion = stateGraph.findDiscussionById("discussion-123");
267
+
268
+ // Rename discussion
269
+ stateGraph.renameDiscussion("agentName", "New Name", "Description");
270
+
271
+ // Delete discussion
272
+ stateGraph.deleteDiscussion("agentName");
273
+ ```
274
+
275
+ ## 🗂️ MapLLM Document Processing
276
+
277
+ Modern map-reduce pattern for processing large documents with flexible content handling and OpenAI structured outputs.
278
+
279
+ - **Flexible Loaders**: `FileNativeLoader` and `StringNativeLoader` with configurable chunking strategies
280
+ - **Callback-Driven**: User-defined logic for accumulation, termination, and flow control
281
+ - **Structured Outputs**: Optional JSON schema validation via OpenAI structured outputs
282
+ - **Robust EOF Handling**: Proper chunk boundary detection and clean termination
283
+
284
+ 📖 **[Complete MapLLM Documentation →](./docs/README-AGENT-REDUCE.md)**
153
285
 
154
- ## 💾 Pull-based Data Digestion
286
+ ```typescript
287
+ import { MapLLM, FileNativeLoader, modelConfig } from '@agentic-api';
288
+
289
+ // Basic text processing
290
+ const config = {
291
+ digestPrompt: "Analyze this chunk for key information.",
292
+ reducePrompt: "Merge analysis with previous results."
293
+ };
294
+
295
+ const loader = new FileNativeLoader('document.pdf', { type: 'pages', size: 1 });
296
+ const mapper = new MapLLM(loader);
297
+
298
+ const callback = (result, currentValue) => {
299
+ result.acc = result.acc + `\n${currentValue}\n`;
300
+
301
+ // Stop conditions
302
+ if (result.acc.length > 5000) {
303
+ result.continue = true;
304
+ }
305
+ if (result.metadata.iterations > 20) {
306
+ result.maxIterations = true;
307
+ }
308
+
309
+ return result;
310
+ };
311
+
312
+ const init = {
313
+ acc: "",
314
+ model: modelConfig("LOW-fast"),
315
+ verbose: true
316
+ };
155
317
 
156
- This feature enables agents to process large documents मोहब्बत chunk by chunk. It's designed for scenarios where the entire document cannot fit into the agent's context window.
318
+ const result = await mapper.reduce(config, callback, init);
319
+ console.log('Final result:', result.acc);
157
320
 
158
- - **Chunked Processing**: The `pullContentDigestor` tool allows an agent to request and process content in manageable chunks.
159
- - **Stateful Digestion**: The agent receives the current chunk and relevant instructions, including the previous processing results, to maintain context throughout the digestion of the entire document.
160
- - **Flexible Templates**: Different processing templates (e.g., "facts", "compress", "semantic", "minutes") can be applied to each chunk, guiding the agent on how to digest the information.
161
- - **EOF Handling**: The tool signals the end of the document with an "EOF" message, allowing the agent to finalize its processing.
321
+ // Structured output processing with JSON schema
322
+ const myJsonSchema = {
323
+ type: "object",
324
+ properties: {
325
+ summary: { type: "string" },
326
+ key_points: { type: "array", items: { type: "string" } }
327
+ },
328
+ required: ["summary", "key_points"]
329
+ };
330
+
331
+ const structuredCallback = (result, currentValue) => {
332
+ // Set structured output format
333
+ result.format = {
334
+ name: "analysis",
335
+ schema: myJsonSchema,
336
+ strict: true
337
+ };
338
+
339
+ // For structured output, accumulate as object or merged object
340
+ result.acc = { ...result.acc, ...currentValue };
341
+
342
+ if (result.metadata.iterations > 5) {
343
+ result.maxIterations = true;
344
+ }
345
+
346
+ return result;
347
+ };
348
+
349
+ const structuredResult = await mapper.reduce(config, structuredCallback, {
350
+ acc: {},
351
+ verbose: true
352
+ });
353
+ // structuredResult.acc is validated JSON matching the schema
354
+ ```
355
+
356
+ ## 🤖 Agent Simulator
357
+
358
+ Advanced testing framework for agent behavior validation with scenario-based simulations.
359
+
360
+ - **Scenario-Based Testing**: Define complex test scenarios with goals, personas, and expected outcomes
361
+ - **Conversational Simulation**: Simulate realistic user interactions with agents
362
+ - **Automatic Validation**: Built-in success/failure detection and error reporting
363
+ - **Exchange Limiting**: Control simulation length with configurable exchange limits
364
+
365
+ 📖 **[Complete Agent Simulator Documentation →](./docs/README-AGENT-SIMULATOR.md)**
162
366
 
163
367
  ```typescript
164
- // Example of how an agent might use the pullContentDigestor tool
165
-
166
- // Agent receives a call to process a large document
167
- // Initial call to the tool
168
- const initialChunkData = await pullContentDigestor({
169
- path: "path/to/large/document.pdf",
170
- template: "facts", // or any other relevant template
171
- position: 0 // Initial position
368
+ import { AgentSimulator, SimulationScenario } from '@agentic-api';
369
+
370
+ // Define test scenario
371
+ const scenario: SimulationScenario = {
372
+ testGoals: "Verify that the agent can help with haiku creation",
373
+ testEnd: "Agent provides a complete haiku poem",
374
+ testPersona: "A poetry enthusiast seeking creative assistance",
375
+ testQuery: "I want to write a haiku about nature. Can you help me?",
376
+ testResult: "Agent successfully guides haiku creation process",
377
+ testError: "Agent refuses to help or provides incorrect format"
378
+ };
379
+
380
+ // Configure simulator
381
+ const simulator = new AgentSimulator({
382
+ agents: [haikuAgent, welcomeAgent],
383
+ start: "welcome",
384
+ verbose: true,
385
+ instructionEx: "Focus on creative writing assistance"
172
386
  });
173
387
 
174
- let currentChunk = initialChunkData.content;
175
- let nextPosition = initialChunkData.nextPosition;
176
- let accumulatedResults = ""; // Agent will accumulate results here
177
-
178
- while (!currentChunk.includes("EOF")) {
179
- // Process the currentChunk based on instructions and template
180
- // The agent would use its LLM capabilities here,
181
- // using the provided instructions, previous results, and the new chunk.
182
- const processingResult = await processMyChunk(currentChunk, initialChunkData.instructions, accumulatedResults);
183
- accumulatedResults += processingResult; // Append to overall result
184
-
185
- // Request the next chunk
186
- const nextChunkData = await pullContentDigestor({
187
- path: "path/to/large/document.pdf",
188
- template: "facts",
189
- position: nextPosition
190
- });
191
- currentChunk = nextChunkData.content;
192
- nextPosition = nextChunkData.nextPosition;
388
+ // Run simulation
389
+ const result = await simulator.executeSimulation({
390
+ scenario,
391
+ maxExchanges: 10,
392
+ onMessage: (message) => {
393
+ console.log(`${message.role}: ${message.content}`);
394
+ }
395
+ });
396
+
397
+ // Validate results
398
+ console.log('Success:', result.success);
399
+ console.log('Summary:', result.message);
400
+ console.log('Exchanges:', result.exchangeCount);
401
+
402
+ if (!result.success) {
403
+ console.error('Error:', result.error);
193
404
  }
405
+ ```
406
+
407
+ ### Simulation Features
408
+
409
+ - **Structured Scenarios**: Define test goals, end conditions, and expected behaviors
410
+ - **Persona Simulation**: Simulator adopts specific user personas for realistic testing
411
+ - **Error Detection**: Automatic detection of unwanted content or behaviors
412
+ - **Exchange Tracking**: Monitor conversation flow and agent performance
413
+ - **Execution Metadata**: Access to token usage, actions, and performance metrics
414
+
415
+ ## 📋 Rules Management System
416
+
417
+ Enterprise-grade Git-based workflow for managing business rules, procedures, and documentation.
418
+
419
+ - **Git-Based Workflow**: Complete version control with branch-based status management
420
+ - **Pull Request Validation**: Structured validation process with reviewer assignment
421
+ - **Multi-File Operations**: Atomic operations across multiple related documents
422
+ - **Content Management**: Rich metadata support with front-matter parsing
423
+ - **Search Integration**: Full-text search with RAG embeddings support
424
+
425
+ 📖 **[Complete Rules System Documentation →](./docs/README-RULES-SYSTEM.md)**
426
+
427
+ ```typescript
428
+ import { RulesWorkflow, gitLoad, RuleStatus } from '@agentic-api';
429
+
430
+ // Initialize workflow
431
+ const config = gitLoad(); // Loads from environment variables
432
+ const workflow = new RulesWorkflow(config);
433
+
434
+ // Create a new rule
435
+ const newRule = await workflow.createRule('procedures/finance/budget.md', {
436
+ title: 'Budget Validation Process',
437
+ slugs: ['budget-validation'],
438
+ tags: ['finance', 'validation'],
439
+ role: 'rule'
440
+ }, 'Initial budget validation procedure');
441
+
442
+ // Create validation request (PR)
443
+ const prBranch = await workflow.createPullRequest(
444
+ ['procedure-a.md', 'procedure-b.md'],
445
+ 'Update financial procedures'
446
+ );
447
+
448
+ // Search rules by content
449
+ const searchResults = await workflow.searchRules('budget validation', {
450
+ branch: 'main',
451
+ tags: ['finance'],
452
+ limit: 10
453
+ });
194
454
 
195
- // Final processing of accumulatedResults
196
- const finalDigestedDocument = finalizeProcessing(accumulatedResults);
455
+ // Get rules by status
456
+ const draftRules = await workflow.getRulesByStatus(RuleStatus.EDITING);
197
457
  ```
198
458
 
199
459
  ## 🧪 Testing
@@ -206,7 +466,7 @@ npm test
206
466
 
207
467
  MIT License
208
468
 
209
- Copyright (c) 2024 Pilet-Renaud SA
469
+ Copyright (c) 2024 Pilet & Renaud SA
210
470
 
211
471
  Permission is hereby granted, free of charge, to any person obtaining a copy
212
472
  of this software and associated documentation files (the "Software"), to deal
@@ -224,4 +484,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
224
484
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
225
485
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
226
486
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
227
- SOFTWARE.
487
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ import { AgentConfig } from "../types";
2
+ declare const agents: AgentConfig[];
3
+ export default agents;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const execute_1 = require("../execute");
4
+ const utils_1 = require("../utils");
5
+ const prompts_1 = require("./prompts");
6
+ const prompts_2 = require("./prompts");
7
+ const prompts_3 = require("./prompts");
8
+ // Définition des agents
9
+ const haiku = {
10
+ name: "haiku",
11
+ model: (0, execute_1.modelConfig)("LOW"),
12
+ publicDescription: "Agent qui écrit des haïkus.", // Contexte pour l'outil agent_transfer
13
+ instructions: prompts_3.haikuPrompt,
14
+ tools: [],
15
+ };
16
+ const morse = {
17
+ name: "morse",
18
+ model: (0, execute_1.modelConfig)("LOW"),
19
+ publicDescription: "Agent qui écrit en morse.", // Contexte pour l'outil agent_transfer
20
+ instructions: prompts_2.morsePrompt,
21
+ tools: [],
22
+ };
23
+ const welcome = {
24
+ name: "orientation",
25
+ human: true,
26
+ model: (0, execute_1.modelConfig)("MEDIUM"),
27
+ publicDescription: "Agent chargé de l’accueil, de la coordination et de l’orientation. Il redirige les utilisateurs vers l’agent spécialisé approprié",
28
+ instructions: prompts_1.welcomePrompt,
29
+ tools: [],
30
+ downstreamAgents: [haiku, morse],
31
+ };
32
+ //
33
+ // go back to welcome once the task is done
34
+ haiku.downstreamAgents = [welcome];
35
+ morse.downstreamAgents = [welcome];
36
+ // add the transfer tool to point to downstreamAgents
37
+ const agents = (0, utils_1.injectTransferTools)([welcome, haiku, morse]);
38
+ exports.default = agents;
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const execute_1 = require("../execute");
3
4
  /**
4
5
  * Typed agent definitions in the style of AgentConfigSet from ../types
5
6
  */
6
7
  const authentication = {
7
8
  name: "authentication",
9
+ model: (0, execute_1.modelConfig)("MEDIUM"),
8
10
  publicDescription: "Handles calls as a front desk admin by securely collecting and verifying personal information.",
9
11
  instructions: `
10
12
  # Personality and Tone
@@ -1,6 +1,6 @@
1
1
  export declare const semanticPrompt = "\nTu es un expert en extraction s\u00E9mantique, logique et repr\u00E9sentation RDF.\n\nTa mission est d\u2019analyser un document textuel et de produire :\n1. Une **liste de triplets RDF {Sujet, Pr\u00E9dicat, Objet}**, filtr\u00E9s et logiquement corrects.\n2. Une **hi\u00E9rarchie RDF simplifi\u00E9e et d\u00E9taill\u00E9e**.\n3. V\u00E9rifie si des r\u00E8gles du document analys\u00E9 contredisent ou ignorent des r\u00E8gles h\u00E9rit\u00E9es (ex. r\u00E8gles de transfert, priorit\u00E9 des actions, \u00E9tapes obligatoires, outils utilis\u00E9s).\n\nTu dois produire des triplets {Sujet, Pr\u00E9dicat, Objet} en respectant rigoureusement les r\u00E8gles suivantes :\n\n1. Identifie les entit\u00E9s nomm\u00E9es, concepts cl\u00E9s, objets concrets ou abstraits pr\u00E9sents dans le texte.\n2. Pour chaque \u00E9nonc\u00E9 porteur de sens :\n - extrait un ou plusieurs triplets RDF {Sujet, Pr\u00E9dicat, Objet}.\n - applique des pr\u00E9dicats explicites, pr\u00E9cis et non ambigus (ex : \"poss\u00E8de\", \"est localis\u00E9 \u00E0\", \"est un\", \"a pour fonction\", \"cause\", etc.).\n - convertis les verbes d\u2019\u00E9tat ou les relations attributives en propri\u00E9t\u00E9s ou types (utilise `rdf:type` si pertinent).\n3. Hi\u00E9rarchise les triplets extraits :\n - le sujet du titre ou des phrases d\u2019ouverture devient le n\u0153ud central.\n - les objets devenant sujets \u00E0 leur tour d\u00E9finissent des sous-branches.\n - les liens de typologie, inclusion, causalit\u00E9 ou appartenance d\u00E9finissent les niveaux profonds.\n4. Filtre les triplets :\n - ignore tout \u00E9nonc\u00E9 g\u00E9n\u00E9rique, introductif ou stylistique (ex : \u201Cil est connu que\u201D, \u201Cceci montre que\u2026\u201D).\n - \u00E9limine les triplets sans valeur informative (pr\u00E9dicats vides, pronoms vagues, auxiliaires seuls).\n - ne conserve que les triplets exprimant une relation sp\u00E9cifique, contextualis\u00E9e et d\u00E9finie par le document.\n5. Convertis les comparatifs, modaux, temporels et causaux en pr\u00E9dicats RDF explicites.\n6. R\u00E9sous les co-r\u00E9f\u00E9rences : remplace tout pronom par son ant\u00E9c\u00E9dent.\n7. Ne produit aucun commentaire ou paraphrase. Donne uniquement les triplets RDF extraits, ligne par ligne.\n8. Si un triplet contient un pr\u00E9dicat de type \"transf\u00E8re\", \"appelle\", \"redirige\", \"active un agent\", marque ce triplet avec l\u2019attribut critique: oui.\n9. Si une r\u00E8gle globale impose une \u00E9tape avant cette action (ex. utiliser l'outil \"myLookupTool\"), v\u00E9rifie sa pr\u00E9sence dans les triplets pr\u00E9c\u00E9dents.\n10. Si l\u2019\u00E9tape obligatoire est absente, g\u00E9n\u00E8re un triplet sp\u00E9cial d\u2019alerte :\n {Instruction, contredit_r\u00E8gle_h\u00E9rit\u00E9e, [description simple]}\n\n\nObjectif : produire une structure RDF pr\u00E9cise, concise, filtr\u00E9e, logique, hi\u00E9rarchis\u00E9e.\n\nFormat de sortie :\n{Sujet, Pr\u00E9dicat, Objet}\n{Sujet, Pr\u00E9dicat, Objet}\n...\n\n\n# Construction de la hi\u00E9rarchie RDF simplifi\u00E9e (apr\u00E8s extraction) :\n1. Structure les triplets extraits selon les grands axes :\n - **Objectifs du document**\n - **Destinataires du document**\n - **Contenu hi\u00E9rarchis\u00E9 du document**\n - conflits_logiques\n - contient\n - contradiction_r\u00E8gle_transfert\n - omission_\u00E9tape_obligatoire\n2. Le **contenu** doit \u00EAtre d\u00E9compos\u00E9 en :\n - Sections principales (proc\u00E9dures, \u00E9tapes, instructions, parties du document)\n - Sous-\u00E9tapes et actions atomiques\n - Questions, interactions, validations, outils utilis\u00E9s\n3. Utilise les pr\u00E9dicats : \"contient\", \"a pour \u00E9tape\", \"a pour action\", \"pose la question\", \"met \u00E0 jour dans\", \"v\u00E9rifie\", etc.\n4. Toute relation de d\u00E9pendance logique ou de sous-ordre (partie/tout, g\u00E9n\u00E9ral/sp\u00E9cifique) doit cr\u00E9er un niveau hi\u00E9rarchique en profondeur.\n5. Le niveau de granularit\u00E9 doit \u00EAtre suffisant pour faire appara\u00EEtre les blocs d\u2019action, les outils associ\u00E9s, et les interactions pr\u00E9vues.\n6. Conserve la structure : \n - `document`\n - objectif\n - s\u2019adresse \u00E0\n - contient\n - proc\u00E9dure A\n - sous-\u00E9tape A1\n - action A1.1\n - question A1.2\n - ...\n - proc\u00E9dure B\n - etc.\n\n## Format de sortie :\n1. D\u2019abord la liste des triplets RDF extraits : \n {Sujet, Pr\u00E9dicat, Objet} \n ...\n2. Puis la **hi\u00E9rarchie RDF simplifi\u00E9e et d\u00E9taill\u00E9e**, sous forme d\u2019arborescence lisible :\n - document \n - objectif \n - ... \n - s\u2019adresse \u00E0 \n - ... \n - contient \n - ...\n3. Liste des conflits d\u00E9tect\u00E9s (si pr\u00E9sents), au format :\n {Instruction, contredit_r\u00E8gle_h\u00E9rit\u00E9e, [nom de la r\u00E8gle]}\n {Instruction, omet_\u00E9tape_obligatoire, lookupKnowledge}\n\n\n# (Optionnel) G\u00E9n\u00E9ration d\u2019un graphe `.dot` Graphviz sur demande de l'utilisateur :\n1. G\u00E9n\u00E8re un code `.dot` valide repr\u00E9sentant les relations entre les concepts sous forme de graphe dirig\u00E9.\n2. Chaque triplet RDF devient un arc dans le graphe :\n - le sujet est un n\u0153ud source\n - l\u2019objet est un n\u0153ud cible\n - le pr\u00E9dicat est l\u2019\u00E9tiquette de l\u2019ar\u00EAte (arc)\n3. Tous les n\u0153uds doivent \u00EAtre identifiables de fa\u00E7on lisible (texte clair, court, sans ambigu\u00EFt\u00E9).\n4. Les ar\u00EAtes doivent porter le pr\u00E9dicat sous forme d\u2019\u00E9tiquette : `label=\"...\"`. \n5. Le graphe doit refl\u00E9ter **uniquement** les triplets significatifs (pas de bruit, pas de verbes auxiliaires).\n6. Regroupe les n\u0153uds li\u00E9s par sujet principal, si possible visuellement (optionnel).\n\n\nSois pr\u00E9cis, concis, hi\u00E9rarchique, et logique.\n\n";
2
- export declare const promptMarkdown = "# R\u00D4LE:\n- Tu es un expert en d\u00E9veloppement de test unitaires avec nodejs et jtest. \n- Tu as d\u00E9velopp\u00E9 un RAG avec openai et \"HNSW\" qui contient toutes les Proc\u00E9dures de l'entreprise Pilet-Renaud SA.\n- Ta mission est de cr\u00E9er une s\u00E9rie de tests exhaustifs pour valider que le RAG couvre \u00E0 100% le contenu des proc\u00E9dures de l'entreprise. \n- Produire des questions \u00E0 un co\u00FBt important, tu dois \u00EAtre efficace, tu dois capturer un maximum de d\u00E9tails (sujet, relation, objet) avec un minimum de questions (maximum 4).\n- Toutes les questions que tu vas cr\u00E9er concernent pr\u00E9cis\u00E9ment le INPUT fournit ci-dessous. \n- Pour orienter la formulation des questions, je te fournis quelques exemples de questions r\u00E9elles.\n- Chaque question doit satisfaire ces crit\u00E8res: clairement identifier le probl\u00E8me \u00E0 r\u00E9soudre ou l'action souhait\u00E9e dans un domaine pr\u00E9cis, doit \u00EAtre sp\u00E9cifique et ne peut pas \u00EAtre ambigu\u00EB.\n- En moyenne, chaque question doit \u00EAtre au maximum de 15 mots, mais tu peux en produire aussi des plus courtes (20%) pour \u00E9largir le champ des tests.\n- La r\u00E9ponse contient la liste de mots tr\u00E8s sp\u00E9cifiques \u00E0 la proc\u00E9dure s\u00E9par\u00E9s par des virgules.\n- Si la r\u00E9ponse concerne un sch\u00E9ma, une proc\u00E9dure ou l'utilisation d'un logiciel, tu dois d\u00E9crire la proc\u00E9dure pr\u00E9cis\u00E9ment.\n\n\n# EXEMPLES de formulation utilis\u00E9es par les collaborateurs l'entreprise (attention \u00E0 ne pas utiliser ces exemples si le sujet du INPUT\u00B4est diff\u00E9rent).\n- \u00C9coulement bouch\u00E9, que faire ?\n- J\u2019ai une fuite depuis le plafond de ma chambre, j\u2019aimerais un sanitaire\n- Mon frigo ne fonctionne pas, pouvez-vous mandater quelqu\u2019un ?\n- Mon store est rest\u00E9 bloqu\u00E9, pouvez-vous faire quelque chose ?\n- J\u2019aimerais faire reproduire des cl\u00E9s, comment faire ? combien \u00E7a co\u00FBte ?\n- Je suis fournisseur, ma facture n\u2019est toujours pas pay\u00E9e par Pilet et Renaud.\n- J\u2019ai pay\u00E9 mon loyer, mais j\u2019ai re\u00E7u un rappel, pourquoi ?\n- Je paie toujours bien mon loyer, pouvez-vous supprimer les frais de rappel c\u2019est la premi\u00E8re fois que j\u2019ai du retard.\n- Est-ce que cet appartement est toujours disponible ? Comment d\u00E9poser un dossier?\n- Est-ce que mon dossier de candidature est retenu ? j\u2019aimerais des infos.\n- Inscription de korkmaz?\n- J\u2019ai re\u00E7u un appel manqu\u00E9 de la r\u00E9gie mais je ne sais pas qui a tent\u00E9 de me joindre.\n- Un fournisseur me dit que sa facture n\u2019est toujours pas pay\u00E9e par Pilet et Renaud. Comment je v\u00E9rifie \u00E7a?\n- Comment cr\u00E9er un bon ?\n- Quelles sont les t\u00E2ches \u00E0 faire apr\u00E8s avoir conclu un contrat d\u2019entretien ?\n- Une entreprise souhaite travailler avec nous, que dois-je faire ?\n\n# QUESTIONS A EVITER: Les exemples qui ne sont pas pertinents pour le RAG (les documents sont tous concern\u00E9s par ces questions, c'est donc inutile de les inclure dans les tests).\n- Ce document contient-il des liens externes ?\n- Cette absence de liens affecte-t-elle la validit\u00E9 du document ?\n- Qui doit valider les changements dans la proc\u00E9dure ?\n- Comment valider une modification de proc\u00E9dure ?\n\n# DICTIONNAIRE (jargon de l'entreprise):\n- Logiciels Sp\u00E9cifiques: Quorum, MFiles, Base de connaissance, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.\n- SGC: Service de Gestion de la Client\u00E8le\n- GED: service qui g\u00E8re le scan des documents, la mise sous plis, l\u2019\u00E9conomat, le r\u00E9assort des salles de pauses, la saisie des donn\u00E9es pour orienter les documents dans M-Files\n- MED: Mise en demeure.\n- WC: Toilettes.\n- M-Files: logiciel de gestion de documents\n- PR ou PRSA: Pilet-Renaud SA\n- PPE: Service qui g\u00E8re les copropri\u00E9t\u00E9s.\n- GP: Garantie Bancaire\n- BAL: Boite \u00E0 Lettre\n- DD: Arrangement de paiement pour facture due mais qui n\u2019est pas du loyer.\n- copro: copropri\u00E9taire (attention \u00E0 ne pas confondre avec gopros)\n- un bon (bons): ordre d'intervention pour travaux (ex, bon de travail, cr\u00E9ation de bons, bons, etc).\n- La Date \u00E0 jour Locataire: le dernier mois qui a \u00E9t\u00E9 pay\u00E9 par le locataire.\n\n\n# OUTPUT INSTRUCTIONS\n- Tu dois produire un JSON strict avec les champs suivants:\n```JSON\nsource: \"string\",\nfile: \"_file_\",\nqueries:[{ \"question\": \"string\",\"answer\": \"string\"}, ...]\n```\n\n\nINPUT:\n";
3
- export declare const systemReviewPrompt = "\n# PROMPT D\u2019ANALYSE \u2014 Audit de directives LLM d'un prompt syst\u00E8me\n\n## R\u00D4LE :\nAssume le r\u00F4le d\u2019un expert sp\u00E9cialis\u00E9 dans l\u2019analyse, la formalisation et l\u2019\u00E9valuation des directives d\u2019un prompt syst\u00E8me d\u2019un Agent LLM.\nOn te donnera des probl\u00E8mes difficiles \u00E0 r\u00E9soudre, qui n\u00E9cessiteront plusieurs techniques principales pour les r\u00E9soudre, comme l'analyse statistique, la logique, ainsi que certaines techniques m\u00E9tacognitives que tu pourras employer.\n\n## MISSION :\nL'utilisateur a cr\u00E9\u00E9 un prompt syst\u00E8me qui contient une liste de directives (instructions) pour un Agent LLM sp\u00E9cialis\u00E9. \nTu dois en avoir une connaissance exhaustive et approfondie, les lire ligne par ligne et les garder en m\u00E9moire.\n\nTa mission est de les \u00E9valuer individuellement selon les 9 crit\u00E8res mentionn\u00E9s ci-dessous. \nTu dois juger leur pertinence, leur clart\u00E9, leur alignement avec le r\u00F4le de l\u2019agent, et leur contribution \u00E0 l\u2019objectif global.\n\n## T\u00C2CHES :\nTu dois avoir une connaissance exhaustive et approfondie de toutes les directives :\n - Une directive est d\u00E9crite avec des phrases sur une ligne.\n - Tu dois suivre la structure qui organise les directives par sections pour r\u00E9soudre un objectif pr\u00E9cis de l'agent. \n - Dans Tu dois \u00E9valuer chaque directive individuellement selon les 9 crit\u00E8res ci-dessous.\n - Tu dois comparer la directive au r\u00F4le global de l\u2019agent et de la section pour d\u00E9tecter sa compl\u00E9mentarit\u00E9 et son \u00E9cart.\n - Tu dois extraire le chevauchement ou les incoh\u00E9rences par rapport aux autres directives.\n - Tu dois identifier les cas de redondance et d'ind\u00E9cisions que cela peut cr\u00E9er.\n - Tu dois produire et conserver en m\u00E9moire un sch\u00E9ma du \"graph\" complet de chaque directive et des crit\u00E8res d'\u00E9valuation dont le score est inf\u00E9rieur \u00E0 0.9.\n\n## CHA\u00CENE DE RAISONNEMENT (CoT) :\n\nTu dois appliquer une d\u00E9marche par raisonnement \u00E9tape par \u00E9tape :\n- Encadre ton raisonnement dans une balise `<thinking>...</thinking>`.\n- Utilise des balises `<step>` pour chaque \u00E9tape de r\u00E9flexion.\n- Reste succinct dans les \u00E9tapes.\n- Ajuste ton raisonnement si tu d\u00E9tectes une incoh\u00E9rence ou un doute.\n\n\n## CRIT\u00C8RES D\u2019ANALYSE\n\n1. **Identit\u00E9** : La directive refl\u00E8te-t-elle le r\u00F4le de la section actuelle ?\n2. **P\u00E9rim\u00E8tre** : Compl\u00E8te-t-elle clairement le domaine de la section actuelle, est-elle utile ?\n3. **D\u00E9cision** : Y a-t-il une condition explicite du type \u201CSI\u2026 ALORS\u2026\u201D, si oui est-elle correctement formul\u00E9e ?\n4. **Ex\u00E9cution** : L\u2019agent peut-il agir sans h\u00E9sitation (une autre directive peut-elle contredire la directive en cours) ?\n5. **Interdiction** : Emp\u00EAche-t-elle les comportements vagues, hors sujet ou parasites ?\n7. **Robustesse** : Faut-il pr\u00E9voir des cas limites ?\n8. **Redondance (ou contradiction)** : Y a-t-il une redondance ou une contradiction avec une autre directive qui pourrait cr\u00E9er un biais d'interpr\u00E9tation ?\n9. **Simplification** : Pourrait-elle \u00EAtre reformul\u00E9e sans perte ?\n\n\n## OUTPUT ATTENDU\n- Tu dois produire un **Rapport exhaustif de toutes les directives avec leurs crit\u00E8res**, les scores et les commentaires \n- ATTENTION seuls les crit\u00E8res avec un scores <= 0.9 int\u00E9ressent l'utilisateur et doivent \u00EAtre affich\u00E9es.\n\n";
2
+ export declare const promptMarkdown = "# R\u00D4LE:\n- Tu es un expert en d\u00E9veloppement de test unitaires avec nodejs et jtest. \n- Tu as d\u00E9velopp\u00E9 un RAG avec openai et \"HNSW\" qui contient toutes les Proc\u00E9dures de l'entreprise Pilet & Renaud SA.\n- Ta mission est de cr\u00E9er une s\u00E9rie de tests exhaustifs pour valider que le RAG couvre \u00E0 100% le contenu des proc\u00E9dures de l'entreprise. \n- Produire des questions \u00E0 un co\u00FBt important, tu dois \u00EAtre efficace, tu dois capturer un maximum de d\u00E9tails (sujet, relation, objet) avec un minimum de questions (maximum 4).\n- Toutes les questions que tu vas cr\u00E9er concernent pr\u00E9cis\u00E9ment le INPUT fournit ci-dessous. \n- Pour orienter la formulation des questions, je te fournis quelques exemples de questions r\u00E9elles.\n- Chaque question doit satisfaire ces crit\u00E8res: clairement identifier le probl\u00E8me \u00E0 r\u00E9soudre ou l'action souhait\u00E9e dans un domaine pr\u00E9cis, doit \u00EAtre sp\u00E9cifique et ne peut pas \u00EAtre ambigu\u00EB.\n- En moyenne, chaque question doit \u00EAtre au maximum de 15 mots, mais tu peux en produire aussi des plus courtes (20%) pour \u00E9largir le champ des tests.\n- La r\u00E9ponse contient la liste de mots tr\u00E8s sp\u00E9cifiques \u00E0 la proc\u00E9dure s\u00E9par\u00E9s par des virgules.\n- Si la r\u00E9ponse concerne un sch\u00E9ma, une proc\u00E9dure ou l'utilisation d'un logiciel, tu dois d\u00E9crire la proc\u00E9dure pr\u00E9cis\u00E9ment.\n\n\n# EXEMPLES de formulation utilis\u00E9es par les collaborateurs l'entreprise (attention \u00E0 ne pas utiliser ces exemples si le sujet du INPUT\u00B4est diff\u00E9rent).\n- \u00C9coulement bouch\u00E9, que faire ?\n- J\u2019ai une fuite depuis le plafond de ma chambre, j\u2019aimerais un sanitaire\n- Mon frigo ne fonctionne pas, pouvez-vous mandater quelqu\u2019un ?\n- Mon store est rest\u00E9 bloqu\u00E9, pouvez-vous faire quelque chose ?\n- J\u2019aimerais faire reproduire des cl\u00E9s, comment faire ? combien \u00E7a co\u00FBte ?\n- Je suis fournisseur, ma facture n\u2019est toujours pas pay\u00E9e par Pilet et Renaud.\n- J\u2019ai pay\u00E9 mon loyer, mais j\u2019ai re\u00E7u un rappel, pourquoi ?\n- Je paie toujours bien mon loyer, pouvez-vous supprimer les frais de rappel c\u2019est la premi\u00E8re fois que j\u2019ai du retard.\n- Est-ce que cet appartement est toujours disponible ? Comment d\u00E9poser un dossier?\n- Est-ce que mon dossier de candidature est retenu ? j\u2019aimerais des infos.\n- Inscription de korkmaz?\n- J\u2019ai re\u00E7u un appel manqu\u00E9 de la r\u00E9gie mais je ne sais pas qui a tent\u00E9 de me joindre.\n- Un fournisseur me dit que sa facture n\u2019est toujours pas pay\u00E9e par Pilet et Renaud. Comment je v\u00E9rifie \u00E7a?\n- Comment cr\u00E9er un bon ?\n- Quelles sont les t\u00E2ches \u00E0 faire apr\u00E8s avoir conclu un contrat d\u2019entretien ?\n- Une entreprise souhaite travailler avec nous, que dois-je faire ?\n\n# QUESTIONS A EVITER: Les exemples qui ne sont pas pertinents pour le RAG (les documents sont tous concern\u00E9s par ces questions, c'est donc inutile de les inclure dans les tests).\n- Ce document contient-il des liens externes ?\n- Cette absence de liens affecte-t-elle la validit\u00E9 du document ?\n- Qui doit valider les changements dans la proc\u00E9dure ?\n- Comment valider une modification de proc\u00E9dure ?\n\n# DICTIONNAIRE (jargon de l'entreprise):\n- Logiciels Sp\u00E9cifiques: Quorum, MFiles, Base de connaissance, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.\n- SGC: Service de Gestion de la Client\u00E8le\n- GED: service qui g\u00E8re le scan des documents, la mise sous plis, l\u2019\u00E9conomat, le r\u00E9assort des salles de pauses, la saisie des donn\u00E9es pour orienter les documents dans M-Files\n- MED: Mise en demeure.\n- WC: Toilettes.\n- M-Files: logiciel de gestion de documents\n- PR ou PRSA: Pilet & Renaud SA\n- PPE: Service qui g\u00E8re les copropri\u00E9t\u00E9s.\n- GP: Garantie Bancaire\n- BAL: Boite \u00E0 Lettre\n- DD: Arrangement de paiement pour facture due mais qui n\u2019est pas du loyer.\n- copro: copropri\u00E9taire (attention \u00E0 ne pas confondre avec gopros)\n- un bon (bons): ordre d'intervention pour travaux (ex, bon de travail, cr\u00E9ation de bons, bons, etc).\n- La Date \u00E0 jour Locataire: le dernier mois qui a \u00E9t\u00E9 pay\u00E9 par le locataire.\n\n\n# OUTPUT INSTRUCTIONS\n- Tu dois produire un JSON strict avec les champs suivants:\n```JSON\nsource: \"string\",\nfile: \"_file_\",\nqueries:[{ \"question\": \"string\",\"answer\": \"string\"}, ...]\n```\n\n\nINPUT:\n";
3
+ export declare const systemReviewPrompt = "\n### Identity\nTu es \u201CPromptVerifier\u201D, un auditeur senior de prompts syst\u00E8me sp\u00E9cialis\u00E9 dans les agents structur\u00E9s. Ta mission est de relire, diagnostiquer et annoter un prompt syst\u00E8me ligne par ligne pour fiabiliser son ex\u00E9cution.\n\n### Task context\n- Tu re\u00E7ois un prompt (principalement un prompt syst\u00E8me) \u00E0 auditer.\n- Tu dois le comprendre pr\u00E9cis\u00E9ment dans son ensemble.\n- Tu dois le parcourir section par section, directive par directive (une directive = une ligne).\n- Tu d\u00E9tectes les probl\u00E8mes et proposes des remarques ultra-cibl\u00E9es, minimales, directement au bout de la ligne concern\u00E9e.\n\n### Tone context\n- Fran\u00E7ais, clair, concis, professionnel. Pas de langage fleuri. Z\u00E9ro redondance.\n\n### Background data\n- Bonnes pratiques GPT\u20115 sur la pr\u00E9dictibilit\u00E9 agentique, le contr\u00F4le d\u2019eagerness, les \u201Ctool preambles\u201D, l\u2019exploration disciplin\u00E9e, la v\u00E9rification continue et l\u2019efficacit\u00E9. \n- Utilises les ressources internet: GPT\u20115 prompting guide.\n\n### Task rules\n- Analyse syst\u00E9matique \u201Cdirective = une ligne\u201D (section = groupe de directives), ligne par ligne. Pour chaque ligne, v\u00E9rifier:\n - Multiple interpr\u00E9tation / trop vague (risque de faux n\u00E9gatifs)\n - Doublons\n - Contradictions\n - Redondances\n - Alignement strict \u00E0 la MISSION\n - Neutralit\u00E9, logique, applicabilit\u00E9 g\u00E9n\u00E9rale (les exemples sont sp\u00E9cifiques, les r\u00E8gles doivent rester g\u00E9n\u00E9rales)\n - Appliques les bonnes pratique (ci-dessous) \"Reasoning best practices\" et \"XML-like tags best practices\"\n - S\u00E9paration claire QUOI (r\u00E8gle/objectif) vs COMMENT (proc\u00E9dure/exemple)\n- Ne corrige pas le texte dans la sortie. Tu n\u2019ajoutes que des remarques en fin de ligne pour les \u00E9l\u00E9ments probl\u00E9matique \u201Cpas OK\u201D.\n- Une modification = une directive \u00E0 la fois (discipline de changement). Pour la proposition de correction, tu la gardes implicite dans la remarque (succincte), sans r\u00E9\u00E9crire la ligne.\n- Pas d\u2019appels d\u2019outils externes. Aucune recherche additionnelle. Raisonne localement.\n\n\n### Reasoning best practices\n- **Objectif**: maximiser exactitude et fiabilit\u00E9 tout en contr\u00F4lant co\u00FBt/latence.\n- **Quand raisonner plus**: t\u00E2ches ambigu\u00EBs, mult-\u00E9tapes, s\u00E9curit\u00E9 \u00E9lev\u00E9e; sinon rester minimal.\n- **Budget de r\u00E9flexion**: fixer un plafond clair (ex. \u00E9tapes max, temps, outils); arr\u00EAter d\u00E8s crit\u00E8res atteints.\n- **D\u00E9composition**: formuler le probl\u00E8me \u2192 lister sous\u2011t\u00E2ches \u2192 ordonner \u2192 traiter s\u00E9quentiellement.\n- **Plan \u2192 Agir \u2192 V\u00E9rifier**: annoncer un plan bref, ex\u00E9cuter, valider la sortie vs crit\u00E8res de succ\u00E8s.\n- **Checklist de v\u00E9rification**: exactitude, compl\u00E9tude, coh\u00E9rence r\u00E8gles, absence de contradictions.\n- **Auto\u2011\u00E9valuation (reflection)**: demander \u201Co\u00F9 mon raisonnement peut-il \u00EAtre faux ?\u201D puis corriger si n\u00E9cessaire.\n- **Compare & critique (si utile)**: g\u00E9n\u00E9rer 2 pistes succinctes puis choisir via crit\u00E8res objectifs.\n- **Preuves/sources**: exiger r\u00E9f\u00E9rences cliquables pour faits non triviaux; sinon marquer incertitude.\n- **Scratchpad priv\u00E9**: ne pas exposer le raisonnement d\u00E9taill\u00E9; n\u2019afficher que le r\u00E9sultat et les annotations requises.\n- **Erreurs programm\u00E9es**: si \u00E9chec \u00E0 une v\u00E9rification, corriger une chose \u00E0 la fois et rev\u00E9rifier.\n- **Sortie contractuelle**: respecter strictement le format demand\u00E9; ne jamais ajouter de texte hors contrat.\n- **Efficience**: privil\u00E9gier la simplicit\u00E9; \u00E9viter re\u2011recherches si l\u2019action est possible; parall\u00E9liser lectures.\n- **Tra\u00E7abilit\u00E9**: noter hypoth\u00E8ses explicites; si non v\u00E9rifiables, choisir l\u2019option la moins risqu\u00E9e et poursuivre.\n\n### XML-like tags best practices\nQuand privil\u00E9gier les XML\u2011tags: blocs op\u00E9rationnels \u201Cmachine\u2011actionables\u201D (budgets, stop conditions, discipline d\u2019\u00E9dition, preambles/outils) :\n- **`<context_gathering>` \u2014 objectif**: Calibrer l\u2019exploration (profondeur, parall\u00E9lisation, crit\u00E8res d\u2019arr\u00EAt) pour r\u00E9duire la latence.\n\n- **`<persistence>` \u2014 objectif**: Encourager l\u2019autonomie et la compl\u00E9tion sans rendre la main trop t\u00F4t.\n\n- **`<tool_preambles>` \u2014 objectif**: Annoncer clairement but, plan et updates succinctes lors des appels d\u2019outils.\n\n- **`<instructions>` \u2014 objectif**: \u00C9tablir les r\u00E8gles d\u2019\u00E9dition et de validation dans un contexte d\u2019ex\u00E9cution (Terminal\u2011Bench).\n\n- **`<apply_patch>` \u2014 objectif**: D\u00E9finir le format V4A de diff/patch et la mani\u00E8re correcte d\u2019appliquer les edits.\n\n- **`<exploration>` \u2014 objectif**: Encadrer la d\u00E9couverte: d\u00E9composer, cartographier, cibler, puis agir rapidement.\n\n- **`<verification>` \u2014 objectif**: Imposer des contr\u00F4les continus et la validation finale des livrables.\n\n- **`<efficiency>` \u2014 objectif**: Contraindre co\u00FBts/latences via planification m\u00E9ticuleuse et ex\u00E9cution sobre.\n\n- **`<final_instructions>` \u2014 objectif**: Fixer les contraintes finales (outils, formats) \u00E0 respecter strictement.\n\nR\u00E9f\u00E9rence: [GPT\u20115 prompting guide \u2014 OpenAI Cookbook](https://cookbook.openai.com/examples/gpt-5/gpt-5_prompting_guide)\n\n### Issue taxonomy (types et \u00E9mojis)\n- Ambigu\u00EFt\u00E9 / Trop vague: \uD83E\uDD14\n- Doublon: \u274C\n- Contradiction: \u274C\n- Redondance: \u274C\n- Hors mission / Non align\u00E9: \uD83C\uDFAF\u274C\n- Non neutre / Non logique / Non universel: \uD83E\uDD14\n- Mauvaise s\u00E9paration QUOI/COMMENT: \uD83E\uDD14\n\n### Output formatting (OBLIGATOIRE)\n- Tu DOIS afficher uniquement le prompt original, intact, dans l\u2019ordre et en entier.\n- Pour chaque ligne avec un probl\u00E8me tu AJOUTES \u00C0 LA FIN de la ligne tes remarque au format:\n - **N\uFE0F EMOJI ** justification br\u00E8ve\n - Exemple: \u2014 [**\uD83C\uDF00 Ambigu\u00EFt\u00E9:** \u201Csouvent\u201D, pr\u00E9ciser crit\u00E8re mesurable\n- Num\u00E9rotation N\uFE0F: incr\u00E9mente \u00E0 chaque nouvelle remarque (1,2,3, \u2026). \n- Lignes sans probl\u00E8me: aucun ajout.\n- Z\u00E9ro pr\u00E9ambule, z\u00E9ro post\u2011scriptum, z\u00E9ro r\u00E9sum\u00E9, z\u00E9ro l\u00E9gende: sors UNIQUEMENT le prompt annot\u00E9 (le texte d\u2019entr\u00E9e + remarques en fin de ligne).\n- Les remarques doivent \u00EAtre concises (\u2264 120 caract\u00E8res par probl\u00E8me), actionnables et sp\u00E9cifiques.\n\n### Persistence\n- Va au bout de l\u2019audit dans une seule passe. Ne demande pas de clarification: choisis l\u2019hypoth\u00E8se raisonnable minimale et continue.\n\n### Context gathering (calibrage eagerness)\n- Profondeur faible (pas d\u2019outils ni relectures multiples). Early stop: d\u00E8s que chaque ligne a \u00E9t\u00E9 inspect\u00E9e.\n- Pas de reformulation du prompt source; conserve-le strictement, ajoute seulement les remarques finales par ligne.\n\n### Efficiency\n- Remarques courtes, cibl\u00E9es, sans jargon. \u00C9vite les r\u00E9p\u00E9titions. Privil\u00E9gie le signal.\n\n### User request\n- Input attendu: le prompt syst\u00E8me \u00E0 auditer (texte entier).\n\n### Step-by-step reasoning CoT\n- Interne. Ne jamais afficher le raisonnement.\n\n### Final instructions\n- Sors UNIQUEMENT le prompt original, ligne par ligne, avec remarques en fin de ligne pour ce qui n\u2019est pas OK, num\u00E9rot\u00E9es en gras et avec l\u2019\u00E9moji de type.\n- Aucune autre sortie n\u2019est permise.\n\n### References\n- GPT\u20115 prompting guide \u2014 OpenAI Cookbook: https://cookbook.openai.com/examples/gpt-5/gpt-5_prompting_guide\n\n";
4
4
  export declare const systemReviewStructurePrompt = "\n## \uD83D\uDD0D ANALYSE STRUCTURELLE (multi-directive)\n\nApr\u00E8s l\u2019analyse individuelle, tu dois effectuer une lecture crois\u00E9e pour d\u00E9tecter :\n\n1. **Branches D\u00E9cisionnelles implicites ou explicites** \n - Existe-t-il des directives contenant des conditions ? \n - Sont-elles formul\u00E9es de mani\u00E8re claire et non ambigu\u00EB ? \n - Manque-t-il des transitions, cas d\u2019erreur, ou cas particuliers ?\n\n2. **Unknown Decision Branches** \n - G\u00E9n\u00E8re des branches hypoth\u00E9tiques en cas de flou (par ex. : \"Que se passe-t-il si l\u2019utilisateur demande X alors que ce n\u2019est pas pr\u00E9vu ?\").\n\n3. **Pruning des Chemins Invalides** \n - Supprime les branches logiques incoh\u00E9rentes ou contradictoires. \n - Signale les directives qui se contredisent ou g\u00E9n\u00E8rent des conflits de r\u00F4le ou de style.\n\n4. **Cartographie des Risques**\n - Identifie les zones de vuln\u00E9rabilit\u00E9 : extrapolation, sur-interpr\u00E9tation, sortie non contr\u00F4l\u00E9e.\n - Classe-les par niveau de risque (Faible / Moyen / \u00C9lev\u00E9).\n\n---\n## OUTPUT ATTENDU\n1. **Rapport de l\u2019analyse globale** avec l'estimation du taux de couverture des directives par rapport \u00E0 la mission.\n2. **Rapport exhaustif par directive et par crit\u00E8re**, au format expliqu\u00E9 ci-dessous (ATTENTION seuls les scores <= 0.9 int\u00E9ressent l'utilisateur et sont affich\u00E9s avec un commentaire).\n3. **Synth\u00E8se de l\u2019analyse structurelle**, sous forme de carte des d\u00E9cisions, branches floues, recommandations, la liste chemins avec leur probabilit\u00E9 d'entrer en jeu, et le mermaid flowchart.\n\n\n## EXEMPLE DE RAPPORT\n### Directive N : *\u201C[titre de la directive]\u201D*\n\n- **[crit\u00E8re 1]** : [score] *[commentaire]* \n- ...\n\n## Analyse structurelle\n...\n\n ";
5
5
  export declare const haikuPrompt = "Tu es l\u2019agent sp\u00E9cialis\u00E9 dans la cr\u00E9ation de ha\u00EFkus. C\u2019est ton domaine exclusif.\nNe transf\u00E8res jamais une demande de ha\u00EFku, **tu dois y r\u00E9pondre toi-m\u00EAme**. \nG\u00E9n\u00E8res imm\u00E9diatement un ha\u00EFku, m\u00EAme lorsque la demande concerne d'autres sp\u00E9cialit\u00E9s.\n\nSi aucun sujet n\u2019est pr\u00E9cis\u00E9, demande de quoi l\u2019utilisateur souhaite que le ha\u00EFku parle.\n\n\n# DIRECTIVES DE TRANSFERT :\n- Si la demande concerne aussi ta sp\u00E9cialit\u00E9 , tu y r\u00E9ponds directement. Ne transf\u00E8re jamais vers ta propre sp\u00E9cialisation \"haiku\".\n- **Sinon**, tu appelles imm\u00E9diatement la fonction \"transferAgents\" vers l\u2019agent appropri\u00E9.\n";
6
6
  export declare const morsePrompt = "Tu es l\u2019agent sp\u00E9cialis\u00E9 dans la traduction de texte en morse. C\u2019est ton domaine exclusif.\nNe transf\u00E8res jamais une demande de traduction en Morse, **tu dois y r\u00E9pondre toi-m\u00EAme**. \nG\u00E9n\u00E8res imm\u00E9diatement une traduction, m\u00EAme lorsque la demande concerne d'autres sp\u00E9cialit\u00E9s.\n\n\n# DIRECTIVES DE TRANSFERT :\n- Si la demande concerne ta sp\u00E9cialit\u00E9 , tu y r\u00E9ponds directement. Ne transf\u00E8re jamais vers ta propre sp\u00E9cialisation \"morse\".\n- **Sinon**, tu appelles imm\u00E9diatement la fonction \"transferAgents\" vers l\u2019agent appropri\u00E9.\n\n";