agentic-api 2.0.26 → 2.0.314

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 (90) hide show
  1. package/README.md +224 -60
  2. package/dist/src/agents/agents.example.js +21 -22
  3. package/dist/src/agents/authentication.js +1 -2
  4. package/dist/src/agents/prompts.d.ts +5 -4
  5. package/dist/src/agents/prompts.js +42 -87
  6. package/dist/src/agents/reducer.core.d.ts +24 -2
  7. package/dist/src/agents/reducer.core.js +125 -35
  8. package/dist/src/agents/reducer.loaders.d.ts +55 -1
  9. package/dist/src/agents/reducer.loaders.js +114 -1
  10. package/dist/src/agents/reducer.types.d.ts +45 -2
  11. package/dist/src/agents/semantic.js +1 -2
  12. package/dist/src/agents/simulator.d.ts +4 -0
  13. package/dist/src/agents/simulator.executor.d.ts +5 -1
  14. package/dist/src/agents/simulator.executor.js +41 -9
  15. package/dist/src/agents/simulator.js +86 -28
  16. package/dist/src/agents/simulator.prompts.d.ts +3 -2
  17. package/dist/src/agents/simulator.prompts.js +52 -78
  18. package/dist/src/agents/simulator.types.d.ts +20 -5
  19. package/dist/src/agents/simulator.utils.d.ts +7 -2
  20. package/dist/src/agents/simulator.utils.js +33 -11
  21. package/dist/src/agents/system.js +1 -2
  22. package/dist/src/execute.d.ts +17 -3
  23. package/dist/src/execute.js +156 -158
  24. package/dist/src/index.d.ts +1 -1
  25. package/dist/src/index.js +1 -1
  26. package/dist/src/{princing.openai.d.ts → pricing.llm.d.ts} +6 -0
  27. package/dist/src/pricing.llm.js +234 -0
  28. package/dist/src/prompts.d.ts +13 -4
  29. package/dist/src/prompts.js +221 -114
  30. package/dist/src/rag/embeddings.d.ts +36 -18
  31. package/dist/src/rag/embeddings.js +125 -128
  32. package/dist/src/rag/index.d.ts +5 -5
  33. package/dist/src/rag/index.js +14 -17
  34. package/dist/src/rag/parser.d.ts +2 -1
  35. package/dist/src/rag/parser.js +11 -14
  36. package/dist/src/rag/rag.examples.d.ts +27 -0
  37. package/dist/src/rag/rag.examples.js +151 -0
  38. package/dist/src/rag/rag.manager.d.ts +383 -0
  39. package/dist/src/rag/rag.manager.js +1378 -0
  40. package/dist/src/rag/types.d.ts +128 -12
  41. package/dist/src/rag/types.js +100 -1
  42. package/dist/src/rag/usecase.d.ts +37 -0
  43. package/dist/src/rag/usecase.js +96 -7
  44. package/dist/src/rules/git/git.e2e.helper.js +1 -0
  45. package/dist/src/rules/git/git.health.d.ts +57 -0
  46. package/dist/src/rules/git/git.health.js +281 -1
  47. package/dist/src/rules/git/index.d.ts +2 -2
  48. package/dist/src/rules/git/index.js +12 -1
  49. package/dist/src/rules/git/repo.d.ts +117 -0
  50. package/dist/src/rules/git/repo.js +536 -0
  51. package/dist/src/rules/git/repo.tools.d.ts +22 -1
  52. package/dist/src/rules/git/repo.tools.js +50 -1
  53. package/dist/src/rules/types.d.ts +16 -14
  54. package/dist/src/rules/utils.matter.d.ts +0 -4
  55. package/dist/src/rules/utils.matter.js +26 -7
  56. package/dist/src/scrapper.d.ts +15 -22
  57. package/dist/src/scrapper.js +57 -110
  58. package/dist/src/stategraph/index.d.ts +1 -1
  59. package/dist/src/stategraph/stategraph.d.ts +31 -2
  60. package/dist/src/stategraph/stategraph.js +93 -6
  61. package/dist/src/stategraph/stategraph.storage.js +4 -0
  62. package/dist/src/stategraph/types.d.ts +22 -0
  63. package/dist/src/types.d.ts +4 -2
  64. package/dist/src/types.js +1 -1
  65. package/dist/src/usecase.d.ts +11 -2
  66. package/dist/src/usecase.js +27 -35
  67. package/dist/src/utils.d.ts +32 -18
  68. package/dist/src/utils.js +60 -126
  69. package/package.json +7 -2
  70. package/dist/src/agents/digestor.test.d.ts +0 -1
  71. package/dist/src/agents/digestor.test.js +0 -45
  72. package/dist/src/agents/reducer.example.d.ts +0 -28
  73. package/dist/src/agents/reducer.example.js +0 -118
  74. package/dist/src/agents/reducer.process.d.ts +0 -16
  75. package/dist/src/agents/reducer.process.js +0 -143
  76. package/dist/src/agents/reducer.tools.d.ts +0 -29
  77. package/dist/src/agents/reducer.tools.js +0 -157
  78. package/dist/src/agents/simpleExample.d.ts +0 -3
  79. package/dist/src/agents/simpleExample.js +0 -38
  80. package/dist/src/agents/system-review.d.ts +0 -5
  81. package/dist/src/agents/system-review.js +0 -181
  82. package/dist/src/agents/systemReview.d.ts +0 -4
  83. package/dist/src/agents/systemReview.js +0 -22
  84. package/dist/src/princing.openai.js +0 -54
  85. package/dist/src/rag/tools.d.ts +0 -76
  86. package/dist/src/rag/tools.js +0 -196
  87. package/dist/src/rules/user.mapper.d.ts +0 -61
  88. package/dist/src/rules/user.mapper.js +0 -160
  89. package/dist/src/rules/utils/slug.d.ts +0 -22
  90. package/dist/src/rules/utils/slug.js +0 -35
package/dist/src/index.js CHANGED
@@ -26,7 +26,7 @@ __exportStar(require("./types"), exports);
26
26
  __exportStar(require("./stategraph"), exports);
27
27
  // Execute
28
28
  __exportStar(require("./execute"), exports);
29
- __exportStar(require("./princing.openai"), exports);
29
+ __exportStar(require("./pricing.llm"), exports);
30
30
  // Scrapper
31
31
  __exportStar(require("./scrapper"), exports);
32
32
  // Agents
@@ -8,4 +8,10 @@ type ModelPricing = {
8
8
  export declare const modelPricing: Record<string, ModelPricing>;
9
9
  export declare function calculateCost(model: string, usage?: CompletionUsage): number;
10
10
  export declare function accumulateCost(currentUsage: Usage, model: string, usage?: CompletionUsage): number;
11
+ export declare function LLM(openai: any): any;
12
+ export declare const LLMxai: any;
13
+ /**
14
+ * Get model mapping for OpenAI
15
+ */
16
+ export declare const LLMopenai: any;
11
17
  export {};
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LLMopenai = exports.LLMxai = exports.modelPricing = void 0;
4
+ exports.calculateCost = calculateCost;
5
+ exports.accumulateCost = accumulateCost;
6
+ exports.LLM = LLM;
7
+ //
8
+ // get/update pricing from openai
9
+ // - https://platform.openai.com/docs/pricing#latest-models
10
+ exports.modelPricing = {
11
+ "gpt-4.5-preview": { input: 0.000075, cachedInput: 0.0000325, output: 0.000125 },
12
+ "gpt-4.1": { input: 0.000002, cachedInput: 0.0000005, output: 0.000008 },
13
+ "gpt-4.1-mini": { input: 0.0000004, cachedInput: 0.0000001, output: 0.0000016 },
14
+ "gpt-4.1-nano": { input: 0.0000001, cachedInput: 0.000000025, output: 0.0000004 },
15
+ "gpt-4o": { input: 0.0000025, cachedInput: 0.00000125, output: 0.00001 },
16
+ "gpt-4o-audio-preview": { input: 0.0000025, output: 0.00001 },
17
+ "gpt-4o-realtime-preview": { input: 0.000005, cachedInput: 0.0000025, output: 0.00002 },
18
+ "gpt-4o-search-preview": { input: 0.000005, cachedInput: 0.0000025, output: 0.00002 },
19
+ "gpt-4o-mini": { input: 0.00000015, cachedInput: 0.000000075, output: 0.0000006 },
20
+ "gpt-4o-mini-audio-preview": { input: 0.00000015, output: 0.0000006 },
21
+ "gpt-4o-mini-realtime-preview": { input: 0.0000006, cachedInput: 0.0000003, output: 0.0000024 },
22
+ "gpt-4o-mini-search-preview": { input: 0.0000015, cachedInput: 0.00000075, output: 0.000006 },
23
+ // GPT-5 family
24
+ "gpt-5": { input: 0.00000125, output: 0.00001 },
25
+ "gpt-5-mini": { input: 0.00000025, output: 0.000002 },
26
+ "gpt-5-nano": { input: 0.00000005, output: 0.0000004 },
27
+ "o1": { input: 0.000015, cachedInput: 0.0000075, output: 0.00006 },
28
+ "o4-mini": { input: 0.0000011, cachedInput: 0.00000055, output: 0.0000044 },
29
+ "o3-mini": { input: 0.0000011, cachedInput: 0.00000055, output: 0.0000044 },
30
+ "o1-mini": { input: 0.0000011, cachedInput: 0.00000055, output: 0.0000044 },
31
+ // Grok 4 family - Official pricing from xAI docs (per million tokens)
32
+ "grok-4-fast-reasoning": { input: 0.0002, cachedInput: 0.0001, output: 0.0005 },
33
+ "grok-4-fast-non-reasoning": { input: 0.0002, cachedInput: 0.0001, output: 0.0005 },
34
+ "grok-4-0709": { input: 0.003, cachedInput: 0.0015, output: 0.015 },
35
+ "grok-code-fast-1": { input: 0.0002, cachedInput: 0.0001, output: 0.0015 },
36
+ };
37
+ function calculateCost(model, usage) {
38
+ if (!usage) {
39
+ return 0;
40
+ }
41
+ if (!exports.modelPricing[model]) {
42
+ throw new Error("Unknown model");
43
+ }
44
+ const pricing = exports.modelPricing[model];
45
+ const cost = usage.prompt_tokens * pricing.input +
46
+ // usage.completion_tokens * (pricing.cachedInput || 0) +
47
+ usage.completion_tokens * pricing.output;
48
+ return cost;
49
+ }
50
+ function accumulateCost(currentUsage, model, usage) {
51
+ if (!usage) {
52
+ return 0;
53
+ }
54
+ currentUsage.prompt += usage.prompt_tokens || 0;
55
+ currentUsage.completion += usage.completion_tokens || 0;
56
+ currentUsage.total += usage.total_tokens || 0;
57
+ const cost = calculateCost(model, usage);
58
+ currentUsage.cost += cost;
59
+ return currentUsage.cost;
60
+ }
61
+ //
62
+ // depending on the API source, return the correct mapping between ALIAS and destination models and options.
63
+ // - LOW-fast: openai => gpt-5-nano, xAI => grok-4-nano
64
+ // - etc.
65
+ function LLM(openai) {
66
+ //
67
+ // Detect provider based on baseURL
68
+ const mapping = openai?.baseURL ? LLMmapping[openai?.baseURL] : LLMmapping["default"];
69
+ return mapping;
70
+ }
71
+ exports.LLMxai = {
72
+ "LOW-fast": {
73
+ temperature: 0.2,
74
+ model: "grok-code-fast-1", // Fast code model, good for low-complexity tasks
75
+ stream: true
76
+ },
77
+ "LOW": {
78
+ temperature: 0.2,
79
+ model: "grok-4-fast-non-reasoning", // Fast non-reasoning model
80
+ stream: true
81
+ },
82
+ "MEDIUM-fast": {
83
+ temperature: 0.2,
84
+ model: "grok-4-fast-reasoning", // Fast reasoning model
85
+ stream: true
86
+ },
87
+ "MEDIUM": {
88
+ temperature: 0.2,
89
+ model: "grok-4-fast-reasoning", // Fast reasoning model
90
+ stream: true
91
+ },
92
+ "HIGH-fast": {
93
+ model: "grok-4-fast-reasoning",
94
+ temperature: 0.2,
95
+ stream: true
96
+ },
97
+ "HIGH-low": {
98
+ model: "grok-4-0709", // Most capable Grok-4 model
99
+ temperature: 0.2,
100
+ stream: true
101
+ },
102
+ "HIGH-medium": {
103
+ model: "grok-4-0709", // Most capable Grok-4 model
104
+ temperature: 0.2,
105
+ stream: true
106
+ },
107
+ "SEARCH-fast": {
108
+ temperature: 0.2,
109
+ model: "grok-code-fast-1",
110
+ web_search_options: {
111
+ user_location: {
112
+ type: "approximate",
113
+ approximate: {
114
+ country: "CH",
115
+ city: "Geneva",
116
+ region: "Geneva",
117
+ },
118
+ },
119
+ },
120
+ },
121
+ "SEARCH": {
122
+ temperature: 0.2,
123
+ model: "grok-4-fast-non-reasoning",
124
+ web_search_options: {
125
+ user_location: {
126
+ type: "approximate",
127
+ approximate: {
128
+ country: "CH",
129
+ city: "Geneva",
130
+ region: "Geneva",
131
+ },
132
+ },
133
+ },
134
+ },
135
+ };
136
+ /**
137
+ * Get model mapping for OpenAI
138
+ */
139
+ exports.LLMopenai = {
140
+ "LOW-fast": {
141
+ temperature: 1,
142
+ frequency_penalty: 0.0,
143
+ presence_penalty: 0.0,
144
+ model: "gpt-5-nano",
145
+ reasoning_effort: "minimal",
146
+ verbosity: "low",
147
+ stream: true
148
+ },
149
+ "LOW": {
150
+ temperature: 1,
151
+ frequency_penalty: 0.0,
152
+ presence_penalty: 0.0,
153
+ model: "gpt-5-nano",
154
+ reasoning_effort: "medium",
155
+ verbosity: "low",
156
+ stream: true
157
+ },
158
+ "MEDIUM-fast": {
159
+ temperature: 1,
160
+ frequency_penalty: 0.0,
161
+ presence_penalty: 0.0,
162
+ model: "gpt-5-mini",
163
+ reasoning_effort: "minimal",
164
+ verbosity: "low",
165
+ stream: true
166
+ },
167
+ "LOW-4.1": {
168
+ temperature: .2,
169
+ frequency_penalty: 0.0,
170
+ presence_penalty: 0.0,
171
+ model: "gpt-4.1-nano",
172
+ stream: true
173
+ },
174
+ "MEDIUM-4.1-mini": {
175
+ temperature: .2,
176
+ frequency_penalty: 0.0,
177
+ presence_penalty: 0.0,
178
+ model: "gpt-4.1-mini",
179
+ stream: true
180
+ },
181
+ "MEDIUM-4.1": {
182
+ temperature: .2,
183
+ frequency_penalty: 0.0,
184
+ presence_penalty: 0.0,
185
+ model: "gpt-4.1",
186
+ stream: true
187
+ },
188
+ "MEDIUM": {
189
+ temperature: 1,
190
+ frequency_penalty: 0.0,
191
+ presence_penalty: 0.0,
192
+ model: "gpt-5-mini",
193
+ reasoning_effort: "low",
194
+ verbosity: "low",
195
+ stream: true
196
+ },
197
+ "HIGH-fast": {
198
+ model: "gpt-5",
199
+ reasoning_effort: "minimal",
200
+ verbosity: "low",
201
+ temperature: 1,
202
+ stream: true
203
+ },
204
+ "HIGH-low": {
205
+ model: "gpt-5",
206
+ reasoning_effort: "low",
207
+ verbosity: "low",
208
+ stream: true
209
+ },
210
+ "HIGH-medium": {
211
+ model: "gpt-5",
212
+ reasoning_effort: "medium",
213
+ verbosity: "low",
214
+ stream: true
215
+ },
216
+ "SEARCH": {
217
+ model: "gpt-4o-mini-search-preview",
218
+ web_search_options: {
219
+ user_location: {
220
+ type: "approximate",
221
+ approximate: {
222
+ country: "CH",
223
+ city: "Geneva",
224
+ region: "Geneva",
225
+ },
226
+ },
227
+ },
228
+ },
229
+ };
230
+ const LLMmapping = {
231
+ "https://api.x.ai/v1": exports.LLMxai,
232
+ "https://api.openai.com/v1": exports.LLMopenai,
233
+ "default": exports.LLMopenai
234
+ };
@@ -1,6 +1,15 @@
1
- export declare const transferAgentPrompt_ = "Triggers a transfer of the user to a more specialized agent. \n Calls escalate to a more specialized LLM agent or to a human agent, with additional context. \n Only call this function if one of the available agents is appropriate. Don't transfer to your own agent type.\n \n Let the user know you're about to transfer them before doing so.\n\nAvailable Agents:";
2
- export declare const transferAgentPrompt = "\nTriggers a transfer of the user to a specialized agent, for one task.\nOnly call this function if one of the available agents is more appropriate (as destination_agent). Don't transfer to your own agent name \"__AGENT_NAME__\".\n\n\u26A0\uFE0F Rules:\n- NEVER call this function for requests that match your own specialization.\n\n\nAvailable Agents:";
1
+ export declare const transferAgentPrompt_ = "Triggers a transfer of the user to a more specialized agent. \n Calls escalate to a more specialized LLM agent or to a human agent, with additional context. \n Only call this function if one of the available agents is appropriate. Don't transfer to your own agent type.\n \n Let the user know you're about to transfer them before doing so.\n \n Available Agents:";
2
+ export declare const transferAgentPrompt__ = "\nTriggers a transfer of the user to a specialized agent, for one task.\nOnly call this function if one of the available agents is more appropriate (as destination_agent).\n\n\u26A0\uFE0F Rules:\n- NEVER call this function for requests that match your own specialization (\"__AGENT_NAME__\").\n\n\nAvailable Agents:";
3
+ export declare const transferAgentPrompt = "Transfer control to the agent \"__AGENT_NAME__\".\nThis agent is described as: \"__AGENT_DESCRIPTION__\".\nUse this tool (handoff) when that agent is better suited to handle the user's request.\n\n\nAvailable Agents:";
4
+ export declare const transferAgentPromptStructured = "\nCet outil permet de transf\u00E9rer le contr\u00F4le vers un agent sp\u00E9cialis\u00E9 lorsque la demande de l'utilisateur d\u00E9passe le p\u00E9rim\u00E8tre de \"__AGENT_NAME__\".\n\n**QUAND UTILISER :**\n- Si l'Agent d\u00E9termine que le transfert est n\u00E9cessaire (confidence >= 0.7) il doit appeler cet outil.\n- L'utilisateur demande explicitement un service hors de votre sp\u00E9cialisation\n- La requ\u00EAte n\u00E9cessite des outils ou connaissances sp\u00E9cifiques \u00E0 un autre agent\n- Vous identifiez qu'un agent sp\u00E9cialis\u00E9 (disponible ci-dessous) est mieux adapt\u00E9 pour r\u00E9pondre\n\n**QUAND NE PAS UTILISER :**\n- Votre niveau de confiance (confidence) est inf\u00E9rieur \u00E0 0.7\n\nIl prend les arguments suivants :\n- rationale_for_transfer (string) : La justification pr\u00E9cise expliquant en moins de 10 mots pourquoi ce transfert est n\u00E9cessaire\n- conversation_context (string) : Le contexte pertinent de la conversation qui aidera l'agent destinataire \u00E0 effectuer l'action correcte\n- destination_agent (string) : Le nom de l'agent sp\u00E9cialis\u00E9 qui doit traiter la demande (valeurs possibles list\u00E9es ci-dessous)\n- confidence (number) : Votre niveau de confiance (0.0 \u00E0 1.0) que le transfert vers un agent plus appropri\u00E9 est n\u00E9cessaire. Minimum requis : 0.7\n\nAvailable Agents:";
5
+ export declare const transferAgentPromptHandoff = "# Contexte g\u00E9n\u00E9ral\nTu fais partie d'un syst\u00E8me multi-agents con\u00E7u pour faciliter la coordination et l'ex\u00E9cution entre plusieurs agents. Tu utilises deux abstractions principales : **Agents** et **Transferts**. \nUn agent poss\u00E8de des instructions et des outils, et peut, quand c'est appropri\u00E9, transmettre une conversation \u00E0 un autre agent avec une autre sp\u00E9cialisation. Les transferts se font en appelant un outil nomm\u00E9e `transferAgents`.\nLes transferts entre agents sont g\u00E9r\u00E9s automatiquement en arri\u00E8re-plan ; tu ne dois jamais mentionner ou attirer l'attention sur ces transferts dans ta conversation avec l'utilisateur.\n\n## PROTOCOLE CONTEXT TRAIL `<context-trail>`\nTU DOIS consulter le trail avant de prendre une d\u00E9cision pour \u00E9viter les r\u00E9p\u00E9titions et te coordonner avec les autres agents. Le trail est visible pour toi dans tes instructions syst\u00E8me pour:\n- D\u00E9tecter les boucles et ne pas les reproduire (action d\u00E9j\u00E0 faite \u2192 surtout ne pas r\u00E9p\u00E9ter)\n- Comprendre les \u00E9tapes et ce qui reste\n- Pr\u00E9vention du drift (maintenir l'alignement \u00E0 l'objectif)\n\n";
3
6
  export declare const defaultOutputPrompt = "\n# OUTPUT INSTRUCTIONS\n- Only output CoT and Markdown.\n- Do not output the markdown code syntax, only the content.\n- Use the name of the document on top of the markdown.\n- You use bulleted lists for output, not numbered lists.\n- Do not output the main index as a section.\n- Do not output the images which are not relevant in section.\n- Ensure you follow ALL these instructions when creating your output.\n- EXAMPLE OF SECTION: `# {{page name}} - {{titre}}\n{{content}}`\n";
4
7
  export declare const textToMarkdownPrompt = "# R\u00D4LE:\n- Tu es un expert en transformation de documents proc\u00E9duraux pour un RAG (Retrieval-Augmented Generation).\n- Ton r\u00F4le est de d\u00E9composer une proc\u00E9dure en plusieurs unit\u00E9s de connaissance atomiques, optimis\u00E9es pour la recherche s\u00E9mantique avec HNSW (cosine).\n- Tu agis comme un moteur de \"reader view\" capable de construire une version fluide et lisible du document original.\n\n# MISSION:\n- Tu dois analyser le document fourni (texte brut ou HTML) et le d\u00E9couper en plusieurs unit\u00E9s de connaissance distinctes.\n- Chaque unit\u00E9 doit commencer par \"Titre:\" et \u00EAtre s\u00E9par\u00E9e de la suivante par \"---\".\n- Tu dois suivre rigoureusement le format de sortie et les r\u00E8gles de structuration.\n- Tu utilises le DICTIONNAIRE pour comprendre le jargon de l'entreprise.\n\n# R\u00C8GLES DE STRUCTURATION D'UNE UNIT\u00C9\n\n1. **Titre (Obligatoire)**\n - Le champ \"Titre:\" Une phrase sp\u00E9cifique \u00E0 la section qui contient l'objectif, l'action, le p\u00E9rim\u00E8tre et le b\u00E9n\u00E9ficiaire.\n - Il sert de r\u00E9sum\u00E9 dense unique et contextualis\u00E9 pour l'embedding.\n\n2. **Section (Obligatoire)**\n - Le champ \"Section:\" contient le contenu d\u00E9taill\u00E9 et exhaustif de l'unit\u00E9, incluant le contexte, les \u00E9tapes et les actions.\n\n3. **Champs Optionnels (\u00E0 omettre si vides)**\n - **Exemple:** : Uniquement si un cas d'usage concret ou une situation illustrative est mentionn\u00E9.\n - **Template:** : Uniquement si un mod\u00E8le de lettre, d'e-mail ou de formulaire est d\u00E9crit.\n - **Exception:** : Uniquement si une variante \u00E0 la r\u00E8gle g\u00E9n\u00E9rale est sp\u00E9cifi\u00E9e.\n - **Si un champ est vide, tu ne dois PAS l'inclure dans la sortie.**\n\n# FORMAT DE SORTIE\n- La sortie ne doit contenir AUCUN titre Markdown (pas de \"##\") ni de frontmatter.\n- Chaque unit\u00E9 de connaissance est un bloc de texte.\n- Le s\u00E9parateur \"---\" est utilis\u00E9 exclusivement entre chaque unit\u00E9.\n\n## EXEMPLE DE SORTIE ATTENDUE\nTitre: {Objectif proc\u00E9dure} via {action} incluant {p\u00E9rim\u00E8tre} et {b\u00E9n\u00E9ficiaire}\nSection: Contenu d\u00E9taill\u00E9, contexte, \u00E9tapes, actions\nExemple: Cas d'usage illustratif (omis si vide)\nTemplate: Mod\u00E8le de document r\u00E9utilisable (omis si vide)\nException: Variante \u00E0 la r\u00E8gle g\u00E9n\u00E9rale (omis si vide)\n---\nTitre: Un autre objectif via une autre action\nSection: Le contenu de la deuxi\u00E8me unit\u00E9.\n---\nTitre: Un troisi\u00E8me objectif via une troisi\u00E8me action\nSection: Le contenu de la troisi\u00E8me unit\u00E9.\nTemplate: Un mod\u00E8le de lettre est d\u00E9crit ici.\n\n\n# DIRECTIVES DE NETTOYAGE\n- Analyser **chaque ligne du document** pour identifier sa structure logique (paragraphes, listes, tableaux).\n- Supprimer les caract\u00E8res invisibles ou parasites fr\u00E9quents issus d'une conversion PDF (ex : saut de page \"\\f\").\n- Masquer toute information sensible li\u00E9e \u00E0 une authentification avec des ast\u00E9risques (ex : `jo***3`).\n- \u26A0\uFE0F Les sections qui contiennent uniquement des liens relatifs \u00E0 des proc\u00E9dures sont supprim\u00E9es du r\u00E9sultat final.\n\n# DIRECTIVES PRIORITAIRES POUR CAS COMPLEXES\n- Ne jamais r\u00E9sumer les sections comportant des sc\u00E9narios conditionnels (\"Si... alors...\"). Tous les cas doivent \u00EAtre explicitement d\u00E9velopp\u00E9s.\n- Toute **logique de d\u00E9cision op\u00E9rationnelle** doit \u00EAtre repr\u00E9sent\u00E9e avec une structure claire : **liste num\u00E9rot\u00E9e, liste imbriqu\u00E9e ou tableau de d\u00E9cision**.\n- Lorsque le document mentionne une situation **urgente** (mots cl\u00E9s : \"URGENT\", \"imm\u00E9diat\"), ajouter une ic\u00F4ne \"\u26A0\uFE0F\" au d\u00E9but de l'\u00E9tape.\n\n# DICTIONNAIRE:\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'\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- WC: Toilettes.\n- BAL: Boite \u00E0 Lettre\n- DD: Arrangement de paiement pour facture due mais qui n'est 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# APPROCHE CoT (Chain of Thought):\n- Utilise un processus de r\u00E9flexion structur\u00E9 encadr\u00E9 par les balises <thinking></thinking> avant de g\u00E9n\u00E9rer le r\u00E9sultat final. \n- Dans cette section de raisonnement tu DOIS:\n 1. Analyse toutes les DIRECTIVES et instructions qui sont \u00E0 utiliser conjointement avec la question.\n 2. D\u00E9compose la solution en \u00E9tapes claires, avec des mots-cl\u00E9s non format\u00E9s et en utilisant des balises <step> \u00E0 l'int\u00E9rieur de la r\u00E9flexion <thinking>.\n 3. Ajuste continuellement ton raisonnement en fonction des r\u00E9sultats interm\u00E9diaires et des r\u00E9flexions.\n\n\n# OUTPUT INSTRUCTIONS\n- Only output CoT and Markdown.\n- Do not output the markdown code syntax, only the content.\n- Use the name of the document on top of the markdown.\n- You use bulleted lists for output, not numbered lists.\n- Do not output the main index as a section.\n- Do not output the images which are not relevant in section.\n- Ensure you follow ALL these instructions when creating your output.\n- EXAMPLE OF SECTION: `# {{page name}} - {{titre}}\n{{content}}`\n\n";
5
- export declare const htmlToMarkdownPrompt = "\nVous \u00EAtes *MarkdownPDF-Pro*, un assistant expert charg\u00E9 de transformer un texte brut issu d\u2019un PDF en un fichier Markdown clair et minimaliste, sans mise en page complexe.\nTu travailles dans le contexte de l'entreprise Pilet & Renaud SA. Tu sais que les proc\u00E9dures proviennent des services suivants: SGC (Gestion de la Client\u00E8le), RH, PPE (copropri\u00E9t\u00E9), g\u00E9rance locataire, direction, comptabilit\u00E9, contentieux, IT.\n\n\n**But :**\nStructurer le contenu pour qu\u2019il soit imm\u00E9diatement lisible dans n\u2019importe quel \u00E9diteur Markdown, tout en pr\u00E9servant la hi\u00E9rarchie logique (titres, listes, tableaux simples).\n\n**Contraintes globales (IMP\u00C9RATIF) :**\n1. Aucune syntaxe HTML, pas de balises <div>, <span>, etc. \n2. Pas de styles CSS ni de code LaTeX. \n3. Utiliser exclusivement les \u00E9l\u00E9ments Markdown suivants : \n * `#` \u2026 `######` pour les titres \n * listes \u00E0 puces `-` ou num\u00E9rot\u00E9es `1.` \n * blocs de citation `>` si n\u00E9cessaire \n * tableaux au format pipe `| Col 1 | Col 2 |` \n * emphase `*italique*` et `**gras**` \n * Front\u2011matter YAML `---\n ...\n---\n` pour les m\u00E9tadonn\u00E9es.\n4. Ne pas ajouter d\u2019analyse ou de commentaires personnels.\n5. Si le service n\u2019est pas d\u00E9duit du texte, laisser service: unknown.\n6. les tableaux sont copi\u00E9s telles-quelles \u00E0 l'identique ligne par ligne.\n\n\nRemplir automatiquement le champ title sous la forme \"{service} - {action} {object} {b\u00E9n\u00E9ficiaire}\" en minuscules.\n\n**Heuristique de structuration :**\n1. **D\u00E9tection des titres** \n * Ligne en MAJUSCULES \u2192 `## Titre 2` \n * Ligne qui finit par \u00AB : \u00BB \u2192 `### Titre 3` \n * Saut de ligne double + mot initial capitalis\u00E9 \u2192 `##` si > 3 mots sinon `###`.\n\n2. **Paragraphes** : regrouper les lignes cons\u00E9cutives jusqu\u2019au prochain saut de ligne vide.\n\n3. **Listes** \n * Trouver les puces d\u2019origine (`\u2022`, `-`, `*`, chiffres suivis de `)` ou `.`) et convertir. \n * Conserver l\u2019imbrication (quatre espaces par niveau).\n\n4. **D\u00E9tection de Table** \n * Si plusieurs lignes cons\u00E9cutives contiennent des colonnes align\u00E9es par espaces ou tabulations ou un m\u00EAme s\u00E9parateur, c'est un tableau \u00E0 convertir en Markdown.\n\n5. **Sp\u00E9cifique \u00E0 l'entreprise**: \n * Les informations importantes doivent \u00EAtre converties avec l'icone \u26A0\uFE0F et le texte en gras.\n * Un document fait toujours r\u00E9f\u00E9rence \u00E0 un service de l'entreprise.\n **Mentionner par inf\u00E9rence le service uniquement dans le front-matter; le corps du document doit rester fid\u00E8le \u00E0 la source**\n * Un document fait r\u00E9f\u00E9rence \u00E0 un B\u00E9n\u00E9ficiaire (ex: locataire, copropri\u00E9taire, fournisseur, collaborateur, directeur, etc) dans un contexte de \"use-case\". Si tu ne le trouves pas, laisser b\u00E9n\u00E9ficiaire: unknown.\n * Un document fait r\u00E9f\u00E9rence \u00E0 un Destinataire, qui est un collaborateur de l'entreprise. Si tu ne le trouves pas, laisser destinataire: unknown.\n * Le jargon de l'entreprise:\n - BAL: Boite \u00E0 Lettre\n - DD: Arrangement de paiement pour facture due mais qui n'est pas du loyer.\n - FVGLS: fondation de la ville de Gen\u00E8ve pour le logement social (terme discriminant).\n - GB/GP: Garantie bancaire\n - GED: service qui g\u00E8re le scan des documents, l'\u00E9conomat, le r\u00E9assort des salles de pauses, la saisie des donn\u00E9es pour M-Files\n - MED: Mise en demeure.\n - Logiciels Sp\u00E9cialis\u00E9s: Quorum, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.\n - M-Files: logiciel de gestion de documents (ou MFiles)\n - MyAbacus: logiciel pour les ressources humaines.\n\n6. **\u00C9l\u00E9ments hors-texte** \n * Images : placer `![Img page-X-Y](IMAGE_PLACEHOLDER_X_Y)` \u00E0 l\u2019endroit d\u2019origine (une ligne par image). \n * Notes de bas de page : convertir en liens `[^{n}]` et regrouper \u00E0 la fin sous `## Notes`.\n\n6. **Nettoyage final** \n * Supprimer les en-t\u00EAtes/pieds de page r\u00E9p\u00E9titifs (m\u00EAme s\u00E9quence sur \u2265 3 pages). \n * R\u00E9duire les blancs multiples \u00E0 un seul. \n * Conserver un seul saut de ligne vide entre blocs.\n * Supprimer la section compl\u00E8te du \"rapport de r\u00E9vision de la proc\u00E9dure\"\n\n---\n\n### Format d\u2019entr\u00E9e attendu\n\n**Proc\u00E9dure :**\n1. Lis attentivement le bloc `<<PDF_TEXT>>`. \n2. Applique les heuristiques ci-dessus, \u00E9tape par \u00E9tape (\u00AB chain-of-thought \u00BB interne, ne pas afficher). \n3. Ajoutes un MATTER en ent\u00EAte puis le Markdown final brut sans d\u00E9limiteurs et sans commentaires.\n\n*(Prends le temps n\u00E9cessaire et v\u00E9rifie ta sortie avant de r\u00E9pondre.)*\n\nMATTER : format du matter \u00E0 ajouter dans l'ent\u00EAte du markdown.\n`\n---\ntitle: {service} - {action} {object} {b\u00E9n\u00E9ficiaire}\nservice: {service}\nrole: rule,\nowner: {owner}\n---`\n\n";
6
- export declare const usecaseExtractionPrompt: (file: string) => string;
8
+ export declare const htmlToMarkdownPrompt = "\nVous \u00EAtes *MarkdownPDF-Pro*, un assistant expert charg\u00E9 de transformer un texte brut issu d\u2019un PDF en un fichier Markdown clair et minimaliste, sans mise en page complexe.\nTu travailles dans le contexte de l'entreprise Pilet & Renaud SA. Tu sais que les proc\u00E9dures proviennent des services suivants: SGC (Gestion de la Client\u00E8le), RH, PPE (copropri\u00E9t\u00E9), g\u00E9rance locataire, direction, comptabilit\u00E9, contentieux, IT.\n\n**But :**\nStructurer le contenu pour qu\u2019il soit imm\u00E9diatement lisible dans n\u2019importe quel \u00E9diteur Markdown, tout en pr\u00E9servant la hi\u00E9rarchie logique (titres, listes, tableaux simples).\n\n**Contraintes globales (IMP\u00C9RATIF) :**\n1. Aucune syntaxe HTML, pas de balises <div>, <span>, etc. \n2. Pas de styles CSS ni de code LaTeX. \n3. Utiliser exclusivement les \u00E9l\u00E9ments Markdown suivants : \n * `#` \u2026 `######` pour les titres \n * listes \u00E0 puces `-` ou num\u00E9rot\u00E9es `1.` \n * blocs de citation `>` si n\u00E9cessaire \n * tableaux au format pipe `| Col 1 | Col 2 |` \n * emphase `*italique*` et `**gras**` \n * Front-matter YAML `---\n ...\n---\n` pour les m\u00E9tadonn\u00E9es.\n4. Ne pas ajouter d\u2019analyse ou de commentaires personnels.\n5. Si le service n\u2019est pas d\u00E9duit du texte, laisser `service: unknown`.\n6. **Les tableaux doivent \u00EAtre d\u00E9tect\u00E9s et normalis\u00E9s selon les \u201CR\u00E8gles de TABLE Markdown\u201D ci-dessous (pas de copie brute ligne par ligne).**\n\nRemplir automatiquement le champ `title` sous la forme `{service} - {action} {object} {b\u00E9n\u00E9ficiaire}` en minuscules **uniquement si ces \u00E9l\u00E9ments sont clairement inf\u00E9r\u00E9s** ; sinon, utiliser le premier `# Titre` du document. Ne jamais \u00E9crire \u201Cunknown\u201D dans `title`.\n\n---\n\n### Heuristique de structuration\n1. **D\u00E9tection des titres** \n * Ligne en MAJUSCULES \u2192 `##` \n * Ligne qui finit par \u00AB : \u00BB \u2192 `###` \n * Saut de ligne double + mot initial capitalis\u00E9 \u2192 `##` si > 3 mots sinon `###`.\n2. **Paragraphes** : regrouper les lignes cons\u00E9cutives jusqu\u2019au prochain saut de ligne vide.\n3. **Listes** \n * Convertir les puces d\u2019origine (`\u2022`, `-`, `*`, chiffres suivis de `)` ou `.`). \n * Conserver l\u2019imbrication (quatre espaces par niveau).\n\n---\n\n### R\u00E8gles de TABLE Markdown (g\u00E9n\u00E9riques, robustes)\n1. **D\u00E9tection d\u2019un bloc tableau** : s\u00E9quence de \u22653 lignes pr\u00E9sentant un alignement r\u00E9gulier (espaces/tabs), des s\u00E9parateurs r\u00E9currents, OU une premi\u00E8re colonne contenant des *identifiants plausibles* (ex. codes, IDs, sigles). \n2. **Colonnes** : inf\u00E9rer le nombre de colonnes en analysant la majorit\u00E9 des lignes. Normaliser toutes les lignes \u00E0 ce nombre (remplir les cellules manquantes par vide). \n3. **En-t\u00EAte** : \n - Si une premi\u00E8re ligne contient des libell\u00E9s de colonnes \u2192 utiliser comme `header`. \n - Sinon, g\u00E9n\u00E9rer un en-t\u00EAte minimal et neutre (`Col 1`, `Col 2`, \u2026) ou, si identifi\u00E9, des noms g\u00E9n\u00E9riques (`Identifiant`, `Libell\u00E9`, `Commentaire`). \n4. **Fusion de lignes cass\u00E9es** : joindre aux cellules la/les lignes qui suivent quand elles sont des continuations (indentation, absence de s\u00E9parateur, hyph\u00E9nation en fin de ligne) pour \u00E9viter de cr\u00E9er de fausses lignes. \n5. **En-t\u00EAtes visuels (cat\u00E9gories)** : lignes isol\u00E9es sans s\u00E9parateurs ni motif tabulaire, servant d\u2019intertitre (ex. cat\u00E9gories, sections) \u2192 les rendre en `###` au-dessus du tableau ou entre deux tableaux, **pas** comme des lignes de donn\u00E9es. \n6. **Identifiants / codes** : d\u00E9tecter les *tokens* de type ID (lettres/chiffres/points/traits). Si pr\u00E9sents en premi\u00E8re colonne, **ne pas trier** ; **pr\u00E9server l\u2019ordre d\u2019origine du PDF**. \n7. **S\u00E9paration multi-tableaux** : d\u00E9marrer un nouveau tableau lorsque le sch\u00E9ma de colonnes change, lorsqu\u2019un intertitre visuel survient, ou apr\u00E8s un blanc significatif. \n8. **Nettoyage des cellules** : trim, consolidation des espaces multiples, \u00E9chapper `|` par `|`, conserver les signes et abr\u00E9viations. \n9. **R\u00E9f\u00E9rences crois\u00E9es non list\u00E9es** : si des identifiants sont mentionn\u00E9s dans une cellule (ex. \u201Cutiliser le 123456\u201D) mais n\u2019apparaissent pas comme ligne d\u00E9di\u00E9e, **ne pas les inventer** dans le tableau ; \u00E0 la place, ajouter apr\u00E8s le tableau une section `#### R\u00E9f\u00E9rences crois\u00E9es non list\u00E9es` avec une liste `- 123456 : contexte (extrait bref)` si utile. \n10. **Validation post-g\u00E9n\u00E9ration** : \n - Chaque tableau doit avoir \u22652 colonnes et \u22652 lignes de donn\u00E9es. \n - V\u00E9rifier la coh\u00E9rence (pas de d\u00E9calage de colonnes, pas de titre de cat\u00E9gorie dans les lignes). \n - Si la structure reste ambig\u00FCe, pr\u00E9f\u00E9rer une **liste structur\u00E9e** plut\u00F4t qu\u2019un tableau incorrect.\n\n---\n\n### Sp\u00E9cifique \u00E0 l'entreprise\n- Les informations v\u00E9ritablement critiques peuvent \u00EAtre signal\u00E9es avec `\u26A0\uFE0F` et `**gras**`, sans r\u00E9\u00E9crire le fond. \n- Mentionner par inf\u00E9rence le `service` **uniquement dans le front-matter** ; le corps doit rester fid\u00E8le \u00E0 la source. \n- Ne pas promouvoir des intertitres visuels en alertes `\u26A0\uFE0F`.\n\n---\n\n### \u00C9l\u00E9ments hors-texte\n- **Images** : `![Img page-X-Y](IMAGE_PLACEHOLDER_X_Y)` (une ligne par image, \u00E0 l\u2019emplacement d\u2019origine). \n- **Notes de bas de page** : convertir en liens `[^n]` et regrouper \u00E0 la fin sous `## Notes`.\n\n---\n\n### Nettoyage final\n- Supprimer en-t\u00EAtes/pieds de page r\u00E9p\u00E9t\u00E9s (m\u00EAme s\u00E9quence sur \u2265 3 pages). \n- R\u00E9duire les blancs multiples \u00E0 un seul. \n- Conserver un seul saut de ligne vide entre blocs. \n- Supprimer les sections de revue automatique (ex. \u201Crapport de r\u00E9vision\u2026\u201D) quand d\u00E9tectables.\n\n---\n\n### Format d\u2019entr\u00E9e attendu\n**Proc\u00E9dure :**\n1. Lire attentivement le bloc `<<PDF_TEXT>>`. \n2. Appliquer les heuristiques ci-dessus, \u00E9tape par \u00E9tape (raisonnement interne, ne pas afficher). \n3. Produire un **front-matter** puis le **Markdown final brut**, sans d\u00E9limiteurs et sans commentaires.\n\n**Front-matter (YAML) \u00E0 produire :**\n---\ntitle: {service} - {action} {object} {b\u00E9n\u00E9ficiaire} # en minuscules si inf\u00E9r\u00E9s, sinon premier H1\nservice: {service} # \"unknown\" si non d\u00E9duit\nrole: rule\nowner: {owner}\n---\n\n\n";
9
+ export interface UsecaseExtractionOptions {
10
+ model?: string;
11
+ examples?: string;
12
+ extended?: string;
13
+ }
14
+ export declare const usecaseExtractionPrompt_OLD: (file: string) => string;
15
+ export declare const usecaseExtractionPrompt: (file: string, options?: UsecaseExtractionOptions) => string;