agentic-api 1.0.6 → 2.0.26

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 +118 -22
  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
@@ -0,0 +1,8 @@
1
+ export * from './types';
2
+ export * from './types.ctrl';
3
+ export * from './types.helpers';
4
+ export * from './errors';
5
+ export * from './utils.slug';
6
+ export * from './utils.matter';
7
+ export * from './git/index';
8
+ export * from './messages';
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Export des API du dossier rules depuis agentic-server
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./types.ctrl"), exports);
20
+ __exportStar(require("./types.helpers"), exports);
21
+ __exportStar(require("./errors"), exports);
22
+ __exportStar(require("./utils.slug"), exports);
23
+ __exportStar(require("./utils.matter"), exports);
24
+ __exportStar(require("./git/index"), exports);
25
+ __exportStar(require("./messages"), exports);
@@ -0,0 +1,17 @@
1
+ export declare const i18nRules: {
2
+ git_repo_path_not_set: string;
3
+ git_config_incomplete: string;
4
+ markdown_lint_issues: string;
5
+ writer_lint_warning: (slug: string) => string;
6
+ commit_message_update: (slug: string) => string;
7
+ writer_save_success: (slug: string, branch: string) => string;
8
+ writer_save_error_console: (slug: string) => string;
9
+ writer_save_error_user: (slug: string, errorMsg: string) => string;
10
+ publish_success: (mainBranch: string, tag: string) => string;
11
+ publish_error_console: string;
12
+ generic_server_error_publish: (errorMsg: string) => string;
13
+ manager_publication_success: string;
14
+ manager_publication_error_console: string;
15
+ reader_file_not_found_console: (slug: string, branch: string, path: string) => string;
16
+ reader_load_error_console: (slug: string, branch: string) => string;
17
+ };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18nRules = void 0;
4
+ exports.i18nRules = {
5
+ git_repo_path_not_set: 'Configuration error: GIT_REPO_PATH environment variable is not set.',
6
+ git_config_incomplete: 'Configuration Git incomplète: une ou plusieurs variables d\'environnement requises (GIT_REPO_PATH, DEFAULT_BRANCH_DRAFT, DEFAULT_BRANCH_MAIN) sont manquantes.',
7
+ markdown_lint_issues: 'Le contenu Markdown contient des problèmes de linting.',
8
+ writer_lint_warning: (slug) => `Service writer: Le contenu pour '${slug}' contient des problèmes de linting.`,
9
+ commit_message_update: (slug) => `docs(${slug}): update`,
10
+ writer_save_success: (slug, branch) => `Document '${slug}' sauvegardé et commit sur la branche '${branch}'.`,
11
+ writer_save_error_console: (slug) => `Service writer: Erreur lors de la sauvegarde du document '${slug}':`,
12
+ writer_save_error_user: (slug, errorMsg) => `Erreur serveur lors de la sauvegarde de ${slug}: ${errorMsg}`,
13
+ publish_success: (mainBranch, tag) => `Publication terminée: branche ${mainBranch} mise à jour et tag ${tag} créé et poussé.`,
14
+ publish_error_console: 'Service content/writer (publishGitChanges): Erreur lors de la publication:',
15
+ generic_server_error_publish: (errorMsg) => `Erreur serveur lors de la publication: ${errorMsg}`,
16
+ manager_publication_success: 'Publication réussie: La branche main a été mise à jour et l\'index de recherche reconstruit.',
17
+ manager_publication_error_console: 'Service publication manager: Erreur lors du processus de publication:',
18
+ // ADDED: Messages for reader.ts
19
+ reader_file_not_found_console: (slug, branch, path) => `Service reader: Fichier non trouvé pour slug '${slug}' sur la branche '${branch}'. Relatif: '${path}'.`,
20
+ reader_load_error_console: (slug, branch) => `Service reader: Erreur lors du chargement du fichier pour slug '${slug}' sur la branche '${branch}':`,
21
+ };
@@ -0,0 +1,28 @@
1
+ export interface RulesLintDiagnostic {
2
+ line: number | undefined;
3
+ column: number | undefined;
4
+ message: string;
5
+ rule: string | undefined;
6
+ source?: string | undefined;
7
+ fatal?: boolean | null | undefined;
8
+ }
9
+ export interface RulesTextlintMessage {
10
+ line: number;
11
+ column: number;
12
+ message: string;
13
+ ruleId: string;
14
+ }
15
+ export interface RulesTextlintResult {
16
+ messages: RulesTextlintMessage[];
17
+ }
18
+ export interface RulesSaveResult {
19
+ success: boolean;
20
+ message: string;
21
+ diagnostics?: RulesLintDiagnostic[];
22
+ commit?: string;
23
+ }
24
+ export interface RulesPublicationResult {
25
+ success: boolean;
26
+ message: string;
27
+ tag?: string;
28
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,510 @@
1
+ import { MergeConflict, MergeResult, SimpleGit } from 'simple-git';
2
+ /**
3
+ * @fileoverview Types et interfaces pour le système de gestion des règles métier
4
+ *
5
+ * Ce fichier définit tous les types TypeScript utilisés dans le workflow de gestion
6
+ * des règles, depuis les types de haut niveau (Rules, PR) jusqu'aux types Git de bas niveau.
7
+ */
8
+ /**
9
+ * Énumération des statuts possibles d'une règle dans le workflow
10
+ *
11
+ * Le statut d'une règle reflète sa position dans le processus de validation
12
+ * et de publication, basé sur la branche Git où elle se trouve.
13
+ *
14
+ * @enum {string}
15
+ */
16
+ export declare enum RuleStatus {
17
+ /** Règle publiée et officielle (branche main) */
18
+ PUBLISHED = "published",
19
+ /** Règle en cours d'édition (branche editor/draft) */
20
+ EDITING = "editing",
21
+ /** Règle en cours de validation via pull request (branche validation) */
22
+ PULLREQUEST = "pullrequest",
23
+ /** Règle candidate pour une release (branche release) */
24
+ RELEASE_CANDIDATE = "candidate",
25
+ /** Règle en correction urgente (branche hotfix) */
26
+ HOTFIX = "hotfix",
27
+ /** Nouvelle règle non encore trackée par Git (fichier local) */
28
+ NEW = "new"
29
+ }
30
+ /**
31
+ * Représente un utilisateur dans le système de gestion des règles
32
+ *
33
+ * Cette interface est utilisée pour identifier les auteurs, validateurs
34
+ * et autres acteurs des opérations sur les règles.
35
+ */
36
+ export interface RuleUser {
37
+ /** Nom complet de l'utilisateur */
38
+ name: string;
39
+ /** Adresse email unique de l'utilisateur */
40
+ email: string;
41
+ /** Rôle optionnel dans l'organisation (ex: "validator", "admin") */
42
+ role?: string;
43
+ }
44
+ /**
45
+ * Interface de base pour une règle avec informations minimales
46
+ *
47
+ * Contient les propriétés essentielles pour identifier et localiser
48
+ * une règle dans le système Git.
49
+ */
50
+ export interface RuleCore {
51
+ /** Chemin relatif du fichier de règle dans le dépôt */
52
+ file: string;
53
+ /** Nom de la branche Git où se trouve cette version de la règle */
54
+ branch: string;
55
+ /** Statut actuel de la règle dans le workflow */
56
+ status: RuleStatus;
57
+ }
58
+ /**
59
+ * Interface complète pour une règle avec tout son contenu et métadonnées
60
+ *
61
+ * Étend RuleCore avec le contenu complet, les métadonnées front-matter
62
+ * et l'historique des modifications optionnel.
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const rule: Rule = {
67
+ * file: 'procedures/finance/budget-validation.md',
68
+ * branch: 'rule-editor',
69
+ * status: RuleStatus.EDITING,
70
+ * updated: new Date('2025-01-14'),
71
+ * content: '# Validation Budget\n\nProcédure pour...',
72
+ * matter: {
73
+ * title: 'Validation Budget',
74
+ * slugs: ['budget-validation'],
75
+ * tags: ['finance', 'validation'],
76
+ * role: 'rule'
77
+ * }
78
+ * };
79
+ * ```
80
+ */
81
+ export interface Rule extends RuleCore {
82
+ /** Date de dernière modification de la règle */
83
+ updated: Date;
84
+ /** Contenu Markdown complet de la règle */
85
+ content: string;
86
+ /** Métadonnées front-matter parsées de la règle */
87
+ matter: FrontMatter;
88
+ /** Historique optionnel des commits pour cette règle */
89
+ history?: GitCommitHistory[];
90
+ }
91
+ /** @deprecated Utiliser Rule à la place */
92
+ export type FileInfo = Rule;
93
+ /** @deprecated Utiliser Rule à la place */
94
+ export type RuleContent = Rule;
95
+ /** @deprecated Utiliser Rule à la place */
96
+ export type ValidationInfo = Rule;
97
+ /**
98
+ * Métadonnées front-matter d'une règle (contenu YAML en en-tête)
99
+ *
100
+ * Cette interface définit toutes les métadonnées qui peuvent être spécifiées
101
+ * dans le front-matter YAML d'un fichier de règle Markdown.
102
+ *
103
+ * @example
104
+ * ```yaml
105
+ * ---
106
+ * title: Procédure de Validation Budget
107
+ * slugs: ["budget-validation", "validation-budget"]
108
+ * version: "2.1"
109
+ * author:
110
+ * name: "Jean Dupont"
111
+ * email: "jean.dupont@entreprise.com"
112
+ * validator: "marie.martin@entreprise.com"
113
+ * service: "Finance"
114
+ * role: "rule"
115
+ * tags: ["finance", "budget", "validation"]
116
+ * terminated: true
117
+ * ---
118
+ * ```
119
+ */
120
+ export interface FrontMatter {
121
+ /** Identifiant documentaire stable (attribué par RAG Embeddings) */
122
+ id?: number;
123
+ /** Titre descriptif de la règle */
124
+ title: string;
125
+ oldfile?: string;
126
+ /** Liste des identifiants/alias pour cette règle (pour recherche) */
127
+ slugs: string[];
128
+ /** Version de la règle (optionnelle, format libre) */
129
+ version?: string;
130
+ /** Auteur original de la règle */
131
+ author?: RuleUser;
132
+ /** Email du validateur assigné à cette règle */
133
+ validator?: string;
134
+ /** Indique si la règle est finalisée et prête pour validation */
135
+ terminated?: boolean;
136
+ /** Service ou département propriétaire de cette règle */
137
+ service?: string;
138
+ /** Type de contenu de ce document */
139
+ role?: "rule" | "template" | "rule-helper" | "web" | "document";
140
+ /** Tags de catégorisation pour recherche et filtrage */
141
+ tags?: string[];
142
+ /** Date de dernière modification explicite */
143
+ lastModified?: Date;
144
+ /** Clé personnalisée pour données additionnelles */
145
+ custom?: string;
146
+ [key: string]: string | Date | number | string[] | RuleUser | boolean | undefined;
147
+ }
148
+ /**
149
+ * Représente un élément de l'historique Git d'une règle
150
+ *
151
+ * Contient les informations d'un commit spécifique affectant une règle,
152
+ * avec éventuellement le contenu de la règle à ce moment-là.
153
+ */
154
+ export interface RuleHistoryItem {
155
+ /** Hash du commit Git */
156
+ commit: string;
157
+ /** Informations sur l'auteur du commit */
158
+ author: {
159
+ /** Nom de l'auteur */
160
+ name: string;
161
+ /** Email de l'auteur */
162
+ email: string;
163
+ };
164
+ /** Date du commit */
165
+ date: Date;
166
+ /** Message de commit */
167
+ message: string;
168
+ /** État de la règle au moment de ce commit (optionnel) */
169
+ rule?: Rule;
170
+ }
171
+ /**
172
+ * Détails modifiables d'une pull request de règle
173
+ *
174
+ * Interface utilisée pour mettre à jour les métadonnées d'une PR
175
+ * en cours de validation.
176
+ */
177
+ export interface RulePullRequestDetails {
178
+ /** Commentaires de validation ou de révision */
179
+ comments?: string[];
180
+ /** Email du validateur assigné */
181
+ validator?: string;
182
+ /** Indique si la règle est prête pour validation finale */
183
+ readyForValidation?: boolean;
184
+ }
185
+ /**
186
+ * Type représentant une pull request de règle complète
187
+ *
188
+ * Combine les informations PRInfo avec la méthode toString()
189
+ * pour faciliter l'utilisation dans les APIs.
190
+ */
191
+ export type RulePullRequest = PRInfo & {
192
+ /** Méthode de sérialisation vers string (nom de branche) */
193
+ toString(): string;
194
+ };
195
+ /**
196
+ * Interface simplifiée du SDK pour la gestion des workflows d'édition de règles
197
+ *
198
+ * Cette interface définit les opérations de base disponibles pour manipuler
199
+ * les règles dans le workflow Git. Version simplifiée par rapport à celle
200
+ * définie dans workflow.ts qui contient des méthodes additionnelles.
201
+ *
202
+ * @deprecated Utiliser l'interface RulesSDK de workflow.ts qui est plus complète
203
+ */
204
+ export interface RulesSDK {
205
+ /** Crée une pull request pour valider des règles */
206
+ createPullRequest(slugs: string[], message: string, user: RuleUser, contents?: string[]): Promise<RulePullRequest>;
207
+ /** Charge une pull request existante */
208
+ loadPullRequest(slug: string): Promise<RulePullRequest>;
209
+ /** Ferme et merge une pull request */
210
+ closePullRequest(pullRequestBranch: string, user: RuleUser): Promise<PRMergeResult>;
211
+ /** Supprime complètement une pull request */
212
+ deletePullRequest(pullRequestBranch: string, user: RuleUser): Promise<void>;
213
+ /** Sauvegarde une règle */
214
+ save(slug: string, content: string, user: RuleUser, pr: RulePullRequest): Promise<void>;
215
+ /** Charge une règle */
216
+ load(slug: string, branch?: string): Promise<Rule>;
217
+ /** Liste les règles publiées */
218
+ listPublished(): Promise<Rule[]>;
219
+ /** Liste les brouillons */
220
+ listDrafts(): Promise<Rule[]>;
221
+ /** Liste les pull requests */
222
+ listPullRequests(): Promise<RulePullRequest[]>;
223
+ /** Liste les fichiers non trackés */
224
+ listFilesOutsideRepo(): Promise<Rule[]>;
225
+ /** Crée un candidat de release */
226
+ createReleaseCandidate(user: RuleUser, message: string): Promise<RulePullRequest>;
227
+ /** Publie une release */
228
+ publishRelease(releaseCandidate: RulePullRequest, user: RuleUser, message: string): Promise<PRMergeResult>;
229
+ /** Crée un hotfix (à implémenter) */
230
+ createHotfix(slug: string, user: RuleUser): Promise<string>;
231
+ }
232
+ /**
233
+ * Configuration complète pour les opérations Git du système de règles
234
+ *
235
+ * Cette interface centralise toute la configuration nécessaire pour
236
+ * les opérations Git de bas niveau, y compris les branches, les préfixes,
237
+ * la concurrence et les Git Notes.
238
+ *
239
+ * @example
240
+ * ```typescript
241
+ * const config: RulesGitConfig = {
242
+ * instance: simpleGit('/path/to/repo'),
243
+ * repoPath: '/path/to/repo',
244
+ * draftBranch: 'rule-editor',
245
+ * mainBranch: 'main',
246
+ * validationPrefix: 'rule-validation-',
247
+ * releasePrefix: 'rule-release-',
248
+ * validationToken: 'closed',
249
+ * concurrency: { maxRetries: 3, retryDelayMs: 100, timeoutMs: 5000 },
250
+ * gitNotes: { namespace: 'refs/notes/pr-status', enabled: true, fallbackToCommit: true }
251
+ * };
252
+ * ```
253
+ */
254
+ export interface RulesGitConfig {
255
+ /** Service d'embeddings pour la recherche sémantique (optionnel) */
256
+ embeddings?: any;
257
+ /** Instance SimpleGit configurée pour ce dépôt */
258
+ instance: SimpleGit;
259
+ /** Chemin absolu vers le dépôt Git */
260
+ repoPath: string;
261
+ /** Chemin relatif pour les uploads (ex: '.assets') */
262
+ uploadPath?: string;
263
+ /** Nom de la branche d'édition/draft (ex: 'rule-editor') */
264
+ draftBranch: string;
265
+ /** Nom de la branche principale/publication (ex: 'main') */
266
+ mainBranch: string;
267
+ /** Préfixe pour les branches de validation (ex: 'rule-validation-') */
268
+ validationPrefix: string;
269
+ /** Préfixe pour les branches de release (ex: 'rule-release-') */
270
+ releasePrefix: string;
271
+ /** Token utilisé dans les commits pour marquer la fermeture des PRs */
272
+ validationToken: string;
273
+ /** Configuration de gestion de la concurrence */
274
+ concurrency: ConcurrencyOptions;
275
+ /** Configuration des Git Notes */
276
+ gitNotes: GitNotesConfig;
277
+ /** Permet les opérations forcées (dangereux, pour développement) */
278
+ canForce?: boolean;
279
+ /** Force le rechargement de la configuration */
280
+ reset?: boolean;
281
+ /** URL du remote Git (optionnel pour dépôts locaux) */
282
+ remoteUrl?: string;
283
+ /** Active les logs verbeux pour debug */
284
+ verbose?: boolean;
285
+ }
286
+ /**
287
+ * Configuration des options de concurrence pour les opérations Git
288
+ *
289
+ * Ces options contrôlent le comportement de retry et les timeouts
290
+ * pour les opérations Git potentiellement concurrentes.
291
+ */
292
+ export interface ConcurrencyOptions {
293
+ /** Nombre maximum de tentatives en cas d'échec */
294
+ maxRetries: number;
295
+ /** Délai en millisecondes entre les tentatives */
296
+ retryDelayMs: number;
297
+ /** Timeout maximum en millisecondes pour une opération */
298
+ timeoutMs: number;
299
+ }
300
+ /**
301
+ * Résultat d'une opération avec mécanisme de retry
302
+ *
303
+ * @template T Type du résultat en cas de succès
304
+ */
305
+ export interface RetryResult<T> {
306
+ /** Indique si l'opération a réussi */
307
+ success: boolean;
308
+ /** Résultat de l'opération si succès */
309
+ result?: T;
310
+ /** Nombre de tentatives effectuées */
311
+ attempts: number;
312
+ /** Dernière erreur rencontrée si échec */
313
+ error?: Error;
314
+ }
315
+ /**
316
+ * Représentation simplifiée d'un commit Git avec ses métadonnées
317
+ *
318
+ * Interface utilisée pour transporter les informations essentielles
319
+ * d'un commit à travers les différentes couches du système.
320
+ */
321
+ export interface GitCommitHistory {
322
+ /** Hash unique du commit */
323
+ hash: string;
324
+ /** Date et heure du commit */
325
+ date: Date;
326
+ /** Message de commit */
327
+ message: string;
328
+ /** Auteur du commit */
329
+ author: RuleUser;
330
+ /** Contenu du fichier à ce commit (optionnel) */
331
+ content?: string;
332
+ /** Branche où s'est produit ce commit (optionnel) */
333
+ branch?: string;
334
+ }
335
+ /**
336
+ * Résumé d'un fichier Git avec son commit associé
337
+ *
338
+ * Structure utilisée pour les listings rapides de fichiers
339
+ * sans charger tout l'historique.
340
+ */
341
+ export interface GitFileSummary {
342
+ /** Chemin relatif du fichier */
343
+ filePath: string;
344
+ /** Contenu actuel du fichier */
345
+ content: string;
346
+ /** Informations du dernier commit affectant ce fichier */
347
+ commit: GitCommitHistory;
348
+ }
349
+ /**
350
+ * Informations complètes d'une Pull Request
351
+ *
352
+ * Cette interface centralise toutes les données d'une PR,
353
+ * incluant les métadonnées stockées dans Git Notes.
354
+ */
355
+ export interface PRInfo {
356
+ /** Nom de la branche de la pull request */
357
+ branch: string;
358
+ /** Liste des fichiers inclus dans cette PR (peut dupliquer metadata.files) */
359
+ files: string[];
360
+ /** Indique si la PR est ouverte (true) ou fermée (false) */
361
+ open: boolean;
362
+ /** Hash du dernier commit de la branche */
363
+ lastCommit?: string;
364
+ /** Message du dernier commit */
365
+ lastCommitMessage?: string;
366
+ /** Date de dernière modification */
367
+ lastModified?: Date;
368
+ /** Métadonnées détaillées stockées dans Git Notes */
369
+ metadata: PRMetadata;
370
+ /** Méthode de sérialisation (retourne le nom de branche) */
371
+ toString(): string;
372
+ }
373
+ /**
374
+ * Résultat d'une opération de merge d'une Pull Request
375
+ *
376
+ * Contient toutes les informations sur le résultat d'un merge,
377
+ * y compris les conflits éventuels et les tags de release.
378
+ */
379
+ export interface PRMergeResult {
380
+ /** Métadonnées de la PR mergée */
381
+ metadata: PRMetadata;
382
+ /** Indique si le merge a échoué */
383
+ failed: boolean;
384
+ /** Liste des conflits de merge détectés */
385
+ conflicts: MergeConflict[];
386
+ /** Résultat brut de l'opération Git */
387
+ raw: string | MergeResult;
388
+ /** Tag de release créé lors du merge (optionnel) */
389
+ releaseTag?: string;
390
+ }
391
+ /**
392
+ * Statut d'une Pull Request basé sur Git Notes
393
+ *
394
+ * Interface pour tracker l'état d'une PR au fil du temps
395
+ * avec toutes les informations de traçabilité.
396
+ */
397
+ export interface PRStatus {
398
+ /** Nom de la branche de la PR */
399
+ branch: string;
400
+ /** Statut actuel de la PR */
401
+ status: 'open' | 'closed' | 'merged';
402
+ /** Date de fermeture (si fermée) */
403
+ closedAt?: Date;
404
+ /** Utilisateur ayant fermé la PR */
405
+ closedBy: RuleUser;
406
+ /** Date de création de la PR */
407
+ createdAt?: Date;
408
+ /** Utilisateur ayant créé la PR */
409
+ createdBy: RuleUser;
410
+ /** Raison de la fermeture (optionnelle) */
411
+ closureReason?: string;
412
+ /** Référence de la note Git contenant ces informations */
413
+ noteRef?: string;
414
+ }
415
+ /**
416
+ * Métadonnées complètes d'une Pull Request stockées dans Git Notes
417
+ *
418
+ * Cette interface définit toutes les métadonnées d'une PR qui sont
419
+ * persistées dans Git Notes pour assurer la traçabilité et l'état.
420
+ *
421
+ * @example
422
+ * ```json
423
+ * {
424
+ * "id": 42,
425
+ * "status": "open",
426
+ * "timestamp": "2025-01-14T10:30:00Z",
427
+ * "createdBy": {
428
+ * "name": "Jean Dupont",
429
+ * "email": "jean.dupont@entreprise.com"
430
+ * },
431
+ * "mergeBase": "main",
432
+ * "comments": ["Nouvelle procédure de validation budget"],
433
+ * "validator": "marie.martin@entreprise.com",
434
+ * "readyForValidation": true,
435
+ * "files": ["procedures/finance/budget-validation.md"]
436
+ * }
437
+ * ```
438
+ */
439
+ export interface PRMetadata {
440
+ /** Identifiant numérique unique de la PR */
441
+ id: number;
442
+ /** Statut actuel de la PR */
443
+ status: 'open' | 'closed' | 'merged';
444
+ /** Timestamp ISO 8601 de création/dernière modification */
445
+ timestamp: string;
446
+ /** Utilisateur ayant créé la PR */
447
+ createdBy: RuleUser;
448
+ /** Utilisateur ayant fermé la PR (si applicable) */
449
+ closedBy?: RuleUser;
450
+ /** Timestamp ISO 8601 de fermeture (si applicable) */
451
+ closedAt?: string;
452
+ /** Branche de base pour le merge (ex: 'main', 'rule-editor') */
453
+ mergeBase: string;
454
+ /** Liste des commentaires de validation/révision */
455
+ comments: string[];
456
+ /** Email du validateur assigné */
457
+ validator?: string;
458
+ /** Indique si la règle est prête pour validation finale */
459
+ readyForValidation?: boolean;
460
+ /** Liste des fichiers inclus dans cette PR */
461
+ files?: string[];
462
+ }
463
+ /**
464
+ * Configuration pour le système Git Notes
465
+ *
466
+ * Git Notes permet de stocker des métadonnées additionnelles
467
+ * associées aux commits sans modifier l'historique Git.
468
+ */
469
+ export interface GitNotesConfig {
470
+ /** Namespace des notes Git (ex: "refs/notes/pr-status") */
471
+ namespace: string;
472
+ /** Active/désactive le système Git Notes */
473
+ enabled: boolean;
474
+ /** Utilise l'ancien système de commit en fallback si les notes échouent */
475
+ fallbackToCommit: boolean;
476
+ }
477
+ /**
478
+ * État de santé d'une branche Git
479
+ *
480
+ * Cette interface fournit un diagnostic complet de l'état d'une branche
481
+ * pour détecter les problèmes nécessitant une réparation.
482
+ */
483
+ export interface GitHealthStatus {
484
+ /** Nom de la branche diagnostiquée */
485
+ branch: string;
486
+ /** Indique si la branche existe dans le dépôt */
487
+ exists: boolean;
488
+ /** Indique si la branche est accessible (checkout possible) */
489
+ accessible: boolean;
490
+ /** Indique si le working directory est propre */
491
+ clean: boolean;
492
+ /** Indique si un merge est en cours */
493
+ mergeInProgress: boolean;
494
+ /** Nombre de fichiers en conflit */
495
+ conflictedFiles: number;
496
+ /** Nombre de fichiers modifiés non committés */
497
+ modifiedFiles: number;
498
+ /** Nombre de fichiers non trackés */
499
+ untrackedFiles: number;
500
+ /** Nombre de fichiers stagés */
501
+ stagedFiles: number;
502
+ /** Indique si l'index Git est lisible */
503
+ indexReadable: boolean;
504
+ /** Évaluation globale de la santé */
505
+ healthy: boolean;
506
+ /** Liste des problèmes détectés */
507
+ issues: string[];
508
+ /** Recommandations de réparation */
509
+ recommendations: string[];
510
+ }