failproofai 0.0.5 → 0.0.6-beta.1

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 (179) hide show
  1. package/.next/standalone/.failproofai/policies/review-policies.mjs +112 -0
  2. package/.next/standalone/.failproofai/policies/workflow-policies.mjs +2 -1
  3. package/.next/standalone/.next/BUILD_ID +1 -1
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/.next/required-server-files.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
  8. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  9. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  14. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  15. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  16. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  17. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
  19. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  20. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  23. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  24. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  25. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  26. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  27. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  28. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  29. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/index.html +1 -1
  31. package/.next/standalone/.next/server/app/index.rsc +15 -15
  32. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  34. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  35. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
  36. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
  38. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  39. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +2 -2
  42. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  43. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +2 -2
  46. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  47. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +2 -2
  50. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  51. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  52. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +2 -2
  55. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  56. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
  59. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  60. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  61. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  62. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  63. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  64. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  65. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0a~g15g._.js → [root-of-the-server]__0rh.18_._.js} +2 -2
  66. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +6 -6
  67. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qn95h3._.js → [root-of-the-server]__0~kmh8w._.js} +2 -2
  68. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  69. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  70. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  71. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  72. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  73. package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
  74. package/.next/standalone/.next/server/pages/404.html +2 -2
  75. package/.next/standalone/.next/server/pages/500.html +1 -1
  76. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  78. package/.next/standalone/.next/static/chunks/{0sme4lkv.tgn-.js → 01b~z8f1ws0rk.js} +1 -1
  79. package/.next/standalone/.next/static/chunks/{0lgbwkfqmnsmc.js → 03rz6ykw-a2xi.js} +1 -1
  80. package/.next/standalone/.next/static/chunks/{17manv47o-~wp.js → 08t08igdql9yt.js} +1 -1
  81. package/.next/standalone/.next/static/chunks/09_k80d~cq2wg.js +4 -0
  82. package/.next/standalone/.next/static/chunks/{0ksdlt_1hucdm.js → 0bvhsa6zva2o..js} +1 -1
  83. package/.next/standalone/.next/static/chunks/{09ikntpt2-o9b.js → 0gbf4cphy8ksq.js} +1 -1
  84. package/.next/standalone/.next/static/chunks/{0yumumfzx_f27.js → 0v.yd0kg_ld3r.js} +1 -1
  85. package/.next/standalone/.next/static/chunks/{13juklu.vksks.js → 0wlyoif4_kj_t.js} +1 -1
  86. package/.next/standalone/.next/static/chunks/{09e7drilkf1sn.js → 12simlrcfk3g2.js} +1 -1
  87. package/.next/standalone/.next/static/chunks/{0em7tspi4kylh.js → 12~yi9oj8av8p.js} +2 -2
  88. package/.next/standalone/.next/static/chunks/{turbopack-0r26pc8h0y_-e.js → turbopack-0o7k.hakttp4k.js} +1 -1
  89. package/.next/standalone/CHANGELOG.md +13 -0
  90. package/.next/standalone/README.md +2 -2
  91. package/.next/standalone/bun.lock +43 -85
  92. package/.next/standalone/dist/cli.mjs +107 -3
  93. package/.next/standalone/docs/ar/architecture.mdx +65 -64
  94. package/.next/standalone/docs/ar/configuration.mdx +42 -42
  95. package/.next/standalone/docs/ar/custom-policies.mdx +62 -64
  96. package/.next/standalone/docs/built-in-policies.mdx +37 -0
  97. package/.next/standalone/docs/custom-policies.mdx +1 -1
  98. package/.next/standalone/docs/de/architecture.mdx +92 -92
  99. package/.next/standalone/docs/de/configuration.mdx +34 -34
  100. package/.next/standalone/docs/de/custom-policies.mdx +49 -50
  101. package/.next/standalone/docs/es/architecture.mdx +72 -72
  102. package/.next/standalone/docs/es/configuration.mdx +25 -25
  103. package/.next/standalone/docs/es/custom-policies.mdx +48 -49
  104. package/.next/standalone/docs/examples.mdx +54 -0
  105. package/.next/standalone/docs/fr/architecture.mdx +53 -53
  106. package/.next/standalone/docs/fr/configuration.mdx +25 -25
  107. package/.next/standalone/docs/fr/custom-policies.mdx +42 -43
  108. package/.next/standalone/docs/getting-started.mdx +52 -0
  109. package/.next/standalone/docs/he/architecture.mdx +66 -66
  110. package/.next/standalone/docs/he/configuration.mdx +53 -52
  111. package/.next/standalone/docs/he/custom-policies.mdx +72 -73
  112. package/.next/standalone/docs/hi/architecture.mdx +106 -106
  113. package/.next/standalone/docs/hi/configuration.mdx +39 -39
  114. package/.next/standalone/docs/hi/custom-policies.mdx +75 -76
  115. package/.next/standalone/docs/i18n/README.ar.md +66 -66
  116. package/.next/standalone/docs/i18n/README.de.md +38 -38
  117. package/.next/standalone/docs/i18n/README.es.md +38 -38
  118. package/.next/standalone/docs/i18n/README.fr.md +42 -42
  119. package/.next/standalone/docs/i18n/README.he.md +67 -67
  120. package/.next/standalone/docs/i18n/README.hi.md +70 -70
  121. package/.next/standalone/docs/i18n/README.it.md +62 -62
  122. package/.next/standalone/docs/i18n/README.ja.md +54 -54
  123. package/.next/standalone/docs/i18n/README.ko.md +58 -58
  124. package/.next/standalone/docs/i18n/README.pt-br.md +43 -43
  125. package/.next/standalone/docs/i18n/README.ru.md +69 -69
  126. package/.next/standalone/docs/i18n/README.tr.md +76 -76
  127. package/.next/standalone/docs/i18n/README.vi.md +70 -70
  128. package/.next/standalone/docs/i18n/README.zh.md +52 -52
  129. package/.next/standalone/docs/it/architecture.mdx +54 -53
  130. package/.next/standalone/docs/it/configuration.mdx +44 -45
  131. package/.next/standalone/docs/it/custom-policies.mdx +76 -78
  132. package/.next/standalone/docs/ja/architecture.mdx +93 -93
  133. package/.next/standalone/docs/ja/configuration.mdx +47 -47
  134. package/.next/standalone/docs/ja/custom-policies.mdx +62 -63
  135. package/.next/standalone/docs/ko/architecture.mdx +66 -66
  136. package/.next/standalone/docs/ko/configuration.mdx +35 -35
  137. package/.next/standalone/docs/ko/custom-policies.mdx +71 -72
  138. package/.next/standalone/docs/pt-br/architecture.mdx +55 -55
  139. package/.next/standalone/docs/pt-br/configuration.mdx +35 -35
  140. package/.next/standalone/docs/pt-br/custom-policies.mdx +60 -61
  141. package/.next/standalone/docs/ru/architecture.mdx +59 -60
  142. package/.next/standalone/docs/ru/configuration.mdx +52 -53
  143. package/.next/standalone/docs/ru/custom-policies.mdx +68 -69
  144. package/.next/standalone/docs/tr/architecture.mdx +124 -124
  145. package/.next/standalone/docs/tr/configuration.mdx +45 -46
  146. package/.next/standalone/docs/tr/custom-policies.mdx +75 -75
  147. package/.next/standalone/docs/vi/architecture.mdx +65 -64
  148. package/.next/standalone/docs/vi/configuration.mdx +41 -41
  149. package/.next/standalone/docs/vi/custom-policies.mdx +68 -69
  150. package/.next/standalone/docs/zh/architecture.mdx +67 -67
  151. package/.next/standalone/docs/zh/configuration.mdx +34 -34
  152. package/.next/standalone/docs/zh/custom-policies.mdx +53 -54
  153. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  154. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  155. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +7 -7
  156. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  157. package/.next/standalone/node_modules/next/dist/server/config-schema.js +10 -2
  158. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  159. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  160. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  161. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  162. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  163. package/.next/standalone/node_modules/next/dist/server/render.js +27 -20
  164. package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  165. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  166. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  167. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  168. package/.next/standalone/node_modules/next/package.json +15 -15
  169. package/.next/standalone/package.json +2 -2
  170. package/.next/standalone/server.js +1 -1
  171. package/.next/standalone/src/hooks/builtin-policies.ts +131 -0
  172. package/README.md +2 -2
  173. package/dist/cli.mjs +107 -3
  174. package/package.json +2 -2
  175. package/src/hooks/builtin-policies.ts +131 -0
  176. package/.next/standalone/.next/static/chunks/0_yayar~bpphd.js +0 -4
  177. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → CkmOT-ZvDN-sVULinGVKT}/_buildManifest.js +0 -0
  178. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → CkmOT-ZvDN-sVULinGVKT}/_clientMiddlewareManifest.js +0 -0
  179. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → CkmOT-ZvDN-sVULinGVKT}/_ssgManifest.js +0 -0
@@ -4,7 +4,7 @@ description: "Fonctionnement interne du gestionnaire de hooks, du chargement de
4
4
  icon: sitemap
5
5
  ---
6
6
 
7
- Ce document explique le fonctionnement interne de failproofai : comment le système de hooks intercepte les appels d'outils des agents, comment la configuration est chargée et fusionnée, comment les politiques sont évaluées, et comment le tableau de bord surveille l'activité des agents.
7
+ Ce document explique le fonctionnement interne de failproofai : comment le système de hooks intercepte les appels d'outils de l'agent, comment la configuration est chargée et fusionnée, comment les politiques sont évaluées, et comment le tableau de bord surveille l'activité de l'agent.
8
8
 
9
9
  ---
10
10
 
@@ -12,10 +12,10 @@ Ce document explique le fonctionnement interne de failproofai : comment le syst
12
12
 
13
13
  failproofai comporte deux sous-systèmes indépendants :
14
14
 
15
- 1. **Gestionnaire de hooks** - Un sous-processus CLI rapide que Claude Code invoque à chaque appel d'outil d'agent. Il évalue les politiques et retourne une décision.
15
+ 1. **Gestionnaire de hooks** - Un sous-processus CLI rapide que Claude Code invoque à chaque appel d'outil de l'agent. Il évalue les politiques et retourne une décision.
16
16
  2. **Moniteur d'agent (Tableau de bord)** - Une application web Next.js pour surveiller les sessions d'agent et gérer les politiques.
17
17
 
18
- Les deux sous-systèmes partagent les fichiers de configuration dans `~/.failproofai/` et le répertoire `.failproofai/` du projet, mais s'exécutent en tant que processus séparés et ne communiquent qu'à travers le système de fichiers.
18
+ Les deux sous-systèmes partagent des fichiers de configuration dans `~/.failproofai/` et le répertoire `.failproofai/` du projet, mais ils s'exécutent en tant que processus séparés et ne communiquent que via le système de fichiers.
19
19
 
20
20
  ---
21
21
 
@@ -23,7 +23,7 @@ Les deux sous-systèmes partagent les fichiers de configuration dans `~/.failpro
23
23
 
24
24
  ### Intégration avec Claude Code
25
25
 
26
- Lorsque vous exécutez `failproofai policies --install`, des entrées comme celle-ci sont écrites dans `~/.claude/settings.json` :
26
+ Lorsque vous exécutez `failproofai policies --install`, il écrit des entrées comme celle-ci dans `~/.claude/settings.json` :
27
27
 
28
28
  ```json
29
29
  {
@@ -44,7 +44,7 @@ Lorsque vous exécutez `failproofai policies --install`, des entrées comme cell
44
44
  }
45
45
  ```
46
46
 
47
- Claude Code invoque ensuite `failproofai --hook PreToolUse` en tant que sous-processus avant chaque appel d'outil, en transmettant un payload JSON sur stdin.
47
+ Claude Code invoque ensuite `failproofai --hook PreToolUse` comme sous-processus avant chaque appel d'outil, en transmettant un payload JSON sur stdin.
48
48
 
49
49
  ### Format du payload
50
50
 
@@ -62,7 +62,7 @@ Claude Code invoque ensuite `failproofai --hook PreToolUse` en tant que sous-pro
62
62
 
63
63
  Pour les événements `PostToolUse`, le payload contient également `tool_result` avec la sortie de l'outil.
64
64
 
65
- Le gestionnaire impose une limite de 1 Mo sur stdin. Les payloads dépassant cette limite sont ignorés et toutes les politiques autorisent implicitement.
65
+ Le gestionnaire impose une limite de 1 Mo sur stdin. Les payloads dépassant cette taille sont ignorés et toutes les politiques autorisent implicitement.
66
66
 
67
67
  ### Format de la réponse
68
68
 
@@ -94,7 +94,7 @@ Le gestionnaire impose une limite de 1 Mo sur stdin. Les payloads dépassant cet
94
94
  }
95
95
  ```
96
96
 
97
- **Instruction sur l'événement Stop :**
97
+ **Instruction pour l'événement Stop :**
98
98
  - Code de sortie : `2`
99
99
  - Raison écrite sur stderr (pas sur stdout)
100
100
 
@@ -116,7 +116,7 @@ Le gestionnaire impose une limite de 1 Mo sur stdin. Les payloads dépassant cet
116
116
  ```
117
117
  - Code de sortie : `0` (l'opération est autorisée)
118
118
  - Lorsque plusieurs politiques retournent `allow` avec un message, leurs messages sont joints par des sauts de ligne en une seule chaîne `additionalContext`
119
- - Si aucune politique ne fournit de message, stdout est vide (comme auparavant)
119
+ - Si aucune politique ne fournit de message, stdout est vide (comme précédemment)
120
120
 
121
121
  ### Pipeline de traitement
122
122
 
@@ -124,19 +124,19 @@ Le gestionnaire impose une limite de 1 Mo sur stdin. Les payloads dépassant cet
124
124
 
125
125
  ```text
126
126
  stdin JSON
127
- analyser le payload (max 1 Mo)
128
- extraire les métadonnées de session (session_id, cwd, tool_name, tool_input, etc.)
129
- → readMergedHooksConfig(cwd) ← fusionne la config projet + locale + globale
130
- enregistrer les politiques intégrées activées avec les paramètres résolus
131
- charger les politiques personnalisées depuis customPoliciesPath (si défini)
132
- enregistrer les politiques personnalisées dans le registre de politiques
133
- évaluer toutes les politiques (intégrées en premier, puis personnalisées)
134
- le premier refus court-circuite
135
- les décisions d'instruction s'accumulent
136
- les messages d'autorisation s'accumulent
137
- écrire la décision JSON sur stdout
138
- persister l'événement dans ~/.failproofai/hook-activity.jsonl
139
- quitter
127
+ parse payload (max 1 MB)
128
+ extract session metadata (session_id, cwd, tool_name, tool_input, etc.)
129
+ → readMergedHooksConfig(cwd) ← merges project + local + global config
130
+ register enabled builtin policies with resolved params
131
+ load custom policies from customPoliciesPath (if set)
132
+ register custom policies into policy registry
133
+ evaluate all policies (builtins first, then custom)
134
+ first deny short-circuits
135
+ instruct decisions accumulate
136
+ allow messages accumulate
137
+ write JSON decision to stdout
138
+ persist event to ~/.failproofai/hook-activity.jsonl
139
+ exit
140
140
  ```
141
141
 
142
142
  L'ensemble du processus s'exécute en moins de 100 ms pour les payloads typiques, sans aucun appel LLM.
@@ -145,7 +145,7 @@ L'ensemble du processus s'exécute en moins de 100 ms pour les payloads typiques
145
145
 
146
146
  ## Chargement de la configuration
147
147
 
148
- `src/hooks/hooks-config.ts` implémente le chargement de configuration à trois portées.
148
+ `src/hooks/hooks-config.ts` implémente le chargement de la configuration sur trois niveaux.
149
149
 
150
150
  ```text
151
151
  [1] {cwd}/.failproofai/policies-config.json ← projet (priorité la plus haute)
@@ -156,8 +156,8 @@ L'ensemble du processus s'exécute en moins de 100 ms pour les payloads typiques
156
156
  Logique de fusion :
157
157
  - `enabledPolicies` - union dédupliquée sur les trois fichiers
158
158
  - `policyParams` - par clé de politique, le premier fichier qui la définit l'emporte entièrement
159
- - `customPoliciesPath` - le premier fichier qui le définit l'emporte
160
- - `llm` - le premier fichier qui le définit l'emporte
159
+ - `customPoliciesPath` - le premier fichier qui la définit l'emporte
160
+ - `llm` - le premier fichier qui la définit l'emporte
161
161
 
162
162
  Le tableau de bord web utilise `readHooksConfig()` (global uniquement) pour la lecture et l'écriture, car il n'est pas invoqué avec un répertoire de travail de projet.
163
163
 
@@ -171,7 +171,7 @@ Pour chaque politique :
171
171
 
172
172
  1. Rechercher le schéma `params` de la politique (si elle en possède un).
173
173
  2. Lire `policyParams[policy.name]` depuis la configuration fusionnée.
174
- 3. Fusionner les valeurs fournies par l'utilisateur sur les valeurs par défaut du schéma pour produire `ctx.params`.
174
+ 3. Fusionner les valeurs fournies par l'utilisateur avec les valeurs par défaut du schéma pour produire `ctx.params`.
175
175
  4. Appeler `policy.fn(ctx)` avec le contexte résolu.
176
176
  5. Si le résultat est `deny`, s'arrêter immédiatement et retourner cette décision.
177
177
  6. Si le résultat est `instruct`, accumuler le message et continuer.
@@ -180,7 +180,7 @@ Pour chaque politique :
180
180
  Après l'exécution de toutes les politiques :
181
181
  - Si un `deny` a été retourné, émettre la réponse de refus.
182
182
  - Si des retours `instruct` ont été collectés, émettre une seule réponse d'instruction avec tous les messages joints.
183
- - Sinon, émettre une réponse d'autorisation (stdout vide, code de sortie 0).
183
+ - Sinon, émettre une réponse d'autorisation (stdout vide, exit 0).
184
184
 
185
185
  ---
186
186
 
@@ -204,15 +204,15 @@ interface BuiltinPolicyDefinition {
204
204
  }
205
205
  ```
206
206
 
207
- Les politiques qui acceptent des `params` déclarent un `PolicyParamsSchema` avec les types et les valeurs par défaut de chaque paramètre. L'évaluateur de politiques injecte les valeurs résolues dans `ctx.params` avant d'appeler `fn`. Les fonctions de politique lisent `ctx.params` sans vérification de nullité, car les valeurs par défaut sont toujours appliquées en premier.
207
+ Les politiques qui acceptent des `params` déclarent un `PolicyParamsSchema` avec des types et des valeurs par défaut pour chaque paramètre. L'évaluateur de politiques injecte les valeurs résolues dans `ctx.params` avant d'appeler `fn`. Les fonctions de politique lisent `ctx.params` sans protection contre les valeurs nulles, car les valeurs par défaut sont toujours appliquées en premier.
208
208
 
209
- La correspondance de motifs à l'intérieur des politiques utilise des tokens de commande analysés (argv), et non une correspondance de chaînes brutes. Cela empêche le contournement via l'injection d'opérateurs shell (par exemple, un motif pour `sudo systemctl status *` ne peut pas être contourné en ajoutant `; rm -rf /` à la commande).
209
+ La correspondance de motifs à l'intérieur des politiques utilise des tokens de commande analysés (argv), et non une correspondance de chaînes brutes. Cela empêche les contournements via l'injection d'opérateurs shell (par exemple, un motif pour `sudo systemctl status *` ne peut pas être contourné en ajoutant `; rm -rf /` à la commande).
210
210
 
211
211
  ---
212
212
 
213
213
  ## Politiques personnalisées
214
214
 
215
- `src/hooks/custom-hooks-registry.ts` implémente un registre basé sur `globalThis` :
215
+ `src/hooks/custom-hooks-registry.ts` implémente un registre adossé à `globalThis` :
216
216
 
217
217
  ```typescript
218
218
  const REGISTRY_KEY = "__failproofai_custom_hooks__";
@@ -228,14 +228,14 @@ export function clearCustomHooks(): void { ... } // used in tests
228
228
  `src/hooks/custom-hooks-loader.ts` charge le fichier de politique de l'utilisateur :
229
229
 
230
230
  1. Lire `customPoliciesPath` depuis la configuration ; ignorer si absent.
231
- 2. Résoudre le chemin absolu ; vérifier que le fichier existe.
232
- 3. Réécrire tous les imports `from "failproofai"` vers le chemin dist réel afin que `customPolicies` résolve vers le même registre `globalThis`.
231
+ 2. Résoudre vers un chemin absolu ; vérifier que le fichier existe.
232
+ 3. Réécrire tous les imports `from "failproofai"` vers le chemin dist réel afin que `customPolicies` se résolve vers le même registre `globalThis`.
233
233
  4. Réécrire récursivement les imports locaux transitifs pour assurer la compatibilité ESM.
234
234
  5. Écrire des fichiers `.mjs` temporaires et `import()` le fichier d'entrée.
235
235
  6. Appeler `getCustomHooks()` pour récupérer les hooks enregistrés.
236
236
  7. Nettoyer tous les fichiers temporaires dans un bloc `finally`.
237
237
 
238
- En cas d'erreur (fichier introuvable, erreur de syntaxe, échec d'import), l'erreur est consignée dans `~/.failproofai/hook.log` et le chargeur retourne un tableau vide. Les politiques intégrées ne sont pas affectées.
238
+ En cas d'erreur (fichier non trouvé, erreur de syntaxe, échec d'import), l'erreur est consignée dans `~/.failproofai/hook.log` et le chargeur retourne un tableau vide. Les politiques intégrées ne sont pas affectées.
239
239
 
240
240
  Les politiques personnalisées sont évaluées après toutes les politiques intégrées. Un `deny` d'une politique personnalisée court-circuite quand même les politiques personnalisées suivantes (mais toutes les politiques intégrées ont déjà été exécutées à ce stade).
241
241
 
@@ -243,7 +243,7 @@ Les politiques personnalisées sont évaluées après toutes les politiques int
243
243
 
244
244
  ## Journalisation de l'activité
245
245
 
246
- Après chaque événement de hook, le gestionnaire ajoute une ligne JSONL dans `~/.failproofai/hook-activity.jsonl` :
246
+ Après chaque événement de hook, le gestionnaire ajoute une ligne JSONL à `~/.failproofai/hook-activity.jsonl` :
247
247
 
248
248
  ```json
249
249
  {
@@ -258,24 +258,24 @@ Après chaque événement de hook, le gestionnaire ajoute une ligne JSONL dans `
258
258
  }
259
259
  ```
260
260
 
261
- Une ligne par politique ayant pris une décision autre que allow. Les décisions d'autorisation ne sont pas journalisées (pour maintenir la taille du fichier réduite).
261
+ Une ligne par politique ayant pris une décision autre que allow. Les décisions allow ne sont pas journalisées (pour garder le fichier léger).
262
262
 
263
263
  ---
264
264
 
265
265
  ## Architecture du tableau de bord
266
266
 
267
- Le tableau de bord est une application **Next.js 16** utilisant l'App Router avec des React Server Components et des Server Actions.
267
+ Le tableau de bord est une application **Next.js 16** utilisant l'App Router avec les React Server Components et les Server Actions.
268
268
 
269
269
  ```text
270
270
  app/
271
- layout.tsx ← Mise en page racine (thème, télémétrie, nav)
271
+ layout.tsx ← Mise en page racine (thème, télémétrie, navigation)
272
272
  projects/page.tsx ← Composant serveur : liste tous les projets Claude
273
273
  project/[name]/page.tsx ← Composant serveur : liste les sessions d'un projet
274
274
  project/[name]/session/
275
275
  [sessionId]/page.tsx ← Composant serveur : affiche le visualiseur de session
276
276
  policies/page.tsx ← Composant client : gestion des politiques + journal d'activité
277
277
  actions/
278
- get-hooks-config.ts ← Lire la config + la liste des politiques
278
+ get-hooks-config.ts ← Lire la configuration + liste des politiques
279
279
  update-hooks-config.ts ← Activer/désactiver une politique
280
280
  update-policy-params.ts ← Mettre à jour les paramètres d'une politique
281
281
  get-hook-activity.ts ← Paginer/rechercher dans le journal d'activité
@@ -287,19 +287,19 @@ app/
287
287
  **Flux de données :**
288
288
 
289
289
  - Les composants de page appellent `lib/projects.ts` et `lib/log-entries.ts` pour lire les données de projet/session directement depuis le système de fichiers (pas de couche API pour les lectures).
290
- - La page Politiques utilise des Server Actions pour toutes les mutations (activation/désactivation, mise à jour des paramètres, installation/suppression).
291
- - Le visualiseur de session analyse le format de transcript JSONL de Claude et affiche une chronologie des messages et des appels d'outils.
290
+ - La page Politiques utilise les Server Actions pour toutes les mutations (activation/désactivation, mise à jour des paramètres, installation/suppression).
291
+ - Le visualiseur de session analyse le format de transcription JSONL de Claude et affiche une chronologie des messages et des appels d'outils.
292
292
 
293
293
  **Décisions de conception clés :**
294
294
 
295
- - Pas de base de données - tout l'état persistant est dans des fichiers simples (`~/.failproofai/`, `~/.claude/projects/`).
296
- - Server Actions pour les mutations - aucune API REST nécessaire pour les opérations CRUD.
295
+ - Pas de base de données - tout l'état persistant est dans des fichiers plats (`~/.failproofai/`, `~/.claude/projects/`).
296
+ - Server Actions pour les mutations - pas d'API REST nécessaire pour les opérations CRUD.
297
297
  - React Server Components pour les pages de lecture - chargement initial plus rapide, pas de bundle client pour la récupération des données.
298
- - Composants client uniquement là où l'interactivité est nécessaire (bascules de politique, recherche d'activité, visualiseur de journal).
298
+ - Composants client uniquement là où l'interactivité est nécessaire (activation des politiques, recherche dans l'activité, visualiseur de journaux).
299
299
 
300
300
  ---
301
301
 
302
- ## Organisation des fichiers
302
+ ## Structure des fichiers
303
303
 
304
304
  ```text
305
305
  failproofai/
@@ -309,23 +309,23 @@ failproofai/
309
309
  │ ├── handler.ts # Pipeline d'événements de hook
310
310
  │ ├── builtin-policies.ts # 26 définitions de politiques
311
311
  │ ├── policy-evaluator.ts # Moteur d'exécution des politiques
312
- │ ├── policy-registry.ts # Enregistrement et recherche de politiques
312
+ │ ├── policy-registry.ts # Enregistrement et recherche des politiques
313
313
  │ ├── policy-types.ts # Interfaces TypeScript
314
- │ ├── hooks-config.ts # Chargement de configuration multi-portée
315
- │ ├── custom-hooks-registry.ts # Registre de hooks basé sur globalThis
314
+ │ ├── hooks-config.ts # Chargement de la configuration multi-niveaux
315
+ │ ├── custom-hooks-registry.ts # Registre de hooks adossé à globalThis
316
316
  │ ├── custom-hooks-loader.ts # Chargeur ESM pour les hooks JS utilisateur
317
- │ ├── manager.ts # Opérations install / remove / list
318
- │ ├── install-prompt.ts # Invite de sélection interactive des politiques
317
+ │ ├── manager.ts # Opérations d'installation / suppression / liste
318
+ │ ├── install-prompt.ts # Invite interactive de sélection des politiques
319
319
  │ ├── hook-logger.ts # Journalisation vers hook.log
320
- │ ├── hook-activity-store.ts # Persistance de l'activité dans hook-activity.jsonl
321
- │ └── llm-client.ts # Client API LLM (pour les politiques pilotées par IA)
320
+ │ ├── hook-activity-store.ts # Persistance de l'activité vers hook-activity.jsonl
321
+ │ └── llm-client.ts # Client API LLM (pour les politiques basées sur l'IA)
322
322
  ├── app/ # Tableau de bord Next.js (pages + server actions)
323
323
  ├── lib/ # Utilitaires partagés
324
- │ ├── projects.ts # Enumération des projets Claude depuis le système de fichiers
325
- │ ├── log-entries.ts # Analyse du format JSONL des transcripts Claude
324
+ │ ├── projects.ts # Énumération des projets Claude depuis le système de fichiers
325
+ │ ├── log-entries.ts # Analyse du format JSONL des transcriptions Claude
326
326
  │ ├── paths.ts # Résolution des chemins système
327
327
  │ └── ...
328
- ├── components/ # Composants React UI partagés
328
+ ├── components/ # Composants UI React partagés
329
329
  ├── contexts/ # Fournisseurs de contexte React (thème, actualisation automatique, télémétrie)
330
330
  ├── examples/ # Exemples de fichiers de hooks personnalisés
331
331
  └── __tests__/ # Tests unitaires et E2E
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: Configuration
3
- description: "Format du fichier de configuration, système à trois portées et règles de fusion"
3
+ description: "Format des fichiers de configuration, système à trois portées et règles de fusion"
4
4
  icon: gear
5
5
  ---
6
6
 
7
- failproofai utilise des fichiers de configuration JSON pour contrôler quelles politiques sont actives, leur comportement et l'emplacement des politiques personnalisées. La configuration est conçue pour être facilement partageable avec votre équipe — committez-la dans votre dépôt et chaque développeur bénéficie du même filet de sécurité pour l'agent.
7
+ failproofai utilise des fichiers de configuration JSON pour contrôler quelles politiques sont actives, leur comportement, et les chemins de chargement des politiques personnalisées. La configuration est conçue pour être facilement partagée avec votre équipe — commitez-la dans votre dépôt et chaque développeur bénéficie du même filet de sécurité pour les agents.
8
8
 
9
9
  ---
10
10
 
@@ -13,16 +13,16 @@ failproofai utilise des fichiers de configuration JSON pour contrôler quelles p
13
13
  Il existe trois portées de configuration, évaluées par ordre de priorité :
14
14
 
15
15
  | Portée | Chemin du fichier | Objectif |
16
- |--------|-------------------|----------|
17
- | **project** | `.failproofai/policies-config.json` | Paramètres par dépôt, committés dans le contrôle de version |
16
+ |--------|-------------------|---------|
17
+ | **project** | `.failproofai/policies-config.json` | Paramètres par dépôt, commités dans le contrôle de version |
18
18
  | **local** | `.failproofai/policies-config.local.json` | Surcharges personnelles par dépôt, ignorées par git |
19
- | **global** | `~/.failproofai/policies-config.json` | Paramètres par défaut au niveau utilisateur pour tous les projets |
19
+ | **global** | `~/.failproofai/policies-config.json` | Valeurs par défaut au niveau utilisateur pour tous les projets |
20
20
 
21
- Quand failproofai reçoit un événement de hook, il charge et fusionne les trois fichiers existants pour le répertoire de travail courant.
21
+ Lorsque failproofai reçoit un événement de hook, il charge et fusionne les trois fichiers qui existent pour le répertoire de travail courant.
22
22
 
23
23
  ### Règles de fusion
24
24
 
25
- **`enabledPolicies`** — union des trois portées. Une politique activée à n'importe quel niveau est active.
25
+ **`enabledPolicies`** — l'union des trois portées. Une politique activée à n'importe quel niveau est active.
26
26
 
27
27
  ```text
28
28
  project: ["block-sudo"]
@@ -32,7 +32,7 @@ global: ["block-sudo", "sanitize-api-keys"]
32
32
  resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"] ← union dédupliquée
33
33
  ```
34
34
 
35
- **`policyParams`** — la première portée qui définit les paramètres d'une politique donnée l'emporte entièrement. Il n'y a pas de fusion profonde des valeurs au sein des paramètres d'une politique.
35
+ **`policyParams`** — la première portée qui définit des paramètres pour une politique donnée l'emporte entièrement. Il n'y a pas de fusion profonde des valeurs au sein des paramètres d'une politique.
36
36
 
37
37
  ```text
38
38
  project: block-sudo → { allowPatterns: ["sudo apt-get update"] }
@@ -46,7 +46,7 @@ project: (aucune entrée block-sudo)
46
46
  local: (aucune entrée block-sudo)
47
47
  global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
48
48
 
49
- resolved: { allowPatterns: ["sudo systemctl status"] } ← retombe sur global
49
+ resolved: { allowPatterns: ["sudo systemctl status"] } ← repli sur global
50
50
  ```
51
51
 
52
52
  **`customPoliciesPath`** — la première portée qui le définit l'emporte.
@@ -112,7 +112,7 @@ Type : `Record<string, Record<string, unknown>>`
112
112
 
113
113
  Surcharges de paramètres par politique. La clé externe est le nom de la politique ; les clés internes sont spécifiques à chaque politique. Chaque politique documente ses paramètres disponibles dans [Politiques intégrées](/fr/built-in-policies).
114
114
 
115
- Si une politique possède des paramètres mais que vous ne les spécifiez pas, les valeurs par défaut intégrées de la politique sont utilisées. Les utilisateurs qui ne configurent pas `policyParams` du tout obtiennent un comportement identique aux versions précédentes.
115
+ Si une politique possède des paramètres que vous ne spécifiez pas, les valeurs par défaut intégrées de la politique sont utilisées. Les utilisateurs qui ne configurent pas `policyParams` du tout obtiennent un comportement identique aux versions précédentes.
116
116
 
117
117
  Les clés inconnues dans le bloc de paramètres d'une politique sont silencieusement ignorées au moment du déclenchement du hook, mais signalées comme avertissements lors de l'exécution de `failproofai policies`.
118
118
 
@@ -122,7 +122,7 @@ Type : `string` (optionnel)
122
122
 
123
123
  Un message ajouté à la raison lorsqu'une politique retourne `deny` ou `instruct`. Utilisez-le pour donner à Claude des indications exploitables sans modifier la politique elle-même.
124
124
 
125
- Fonctionne avec n'importe quel type de politique — intégrée, personnalisée (`custom/`), convention de projet (`.failproofai-project/`), ou convention utilisateur (`.failproofai-user/`).
125
+ Fonctionne avec tout type de politique — intégrée, personnalisée (`custom/`), convention de projet (`.failproofai-project/`) ou convention utilisateur (`.failproofai-user/`).
126
126
 
127
127
  ```json
128
128
  {
@@ -141,40 +141,40 @@ Fonctionne avec n'importe quel type de politique — intégrée, personnalisée
141
141
  }
142
142
  ```
143
143
 
144
- Lorsque `block-force-push` refuse, Claude voit : *« Force-pushing is blocked. Try creating a fresh branch instead. »*
144
+ Lorsque `block-force-push` bloque, Claude voit : *« Le push forcé est bloqué. Try creating a fresh branch instead. »*
145
145
 
146
- Les valeurs non-chaînes et les chaînes vides sont silencieusement ignorées. Si `hint` n'est pas défini, le comportement est inchangé (rétrocompatible).
146
+ Les valeurs non-chaînes et les chaînes vides sont silencieusement ignorées. Si `hint` n'est pas défini, le comportement reste inchangé (rétrocompatible).
147
147
 
148
148
  ### `customPoliciesPath`
149
149
 
150
150
  Type : `string` (chemin absolu)
151
151
 
152
- Chemin vers un fichier JavaScript contenant des politiques de hook personnalisées. Ce champ est défini automatiquement par `failproofai policies --install --custom <path>` (le chemin est résolu en chemin absolu avant d'être enregistré).
152
+ Chemin vers un fichier JavaScript contenant des politiques de hook personnalisées. Ce champ est défini automatiquement par `failproofai policies --install --custom <path>` (le chemin est résolu en chemin absolu avant d'être stocké).
153
153
 
154
- Le fichier est chargé à chaque événement de hook — il n'y a pas de mise en cache. Consultez [Politiques personnalisées](/fr/custom-policies) pour les détails de création.
154
+ Le fichier est rechargé à chaque événement de hook — il n'y a pas de mise en cache. Consultez [Politiques personnalisées](/fr/custom-policies) pour les détails de création.
155
155
 
156
156
  ### Politiques basées sur les conventions
157
157
 
158
158
  En plus du `customPoliciesPath` explicite, failproofai découvre et charge automatiquement les fichiers de politiques depuis les répertoires `.failproofai/policies/` :
159
159
 
160
160
  | Niveau | Répertoire | Portée |
161
- |--------|-----------|--------|
161
+ |--------|------------|--------|
162
162
  | Projet | `.failproofai/policies/` | Partagé avec l'équipe via le contrôle de version |
163
163
  | Utilisateur | `~/.failproofai/policies/` | Personnel, s'applique à tous les projets |
164
164
 
165
165
  **Correspondance de fichiers :** Seuls les fichiers correspondant à `*policies.{js,mjs,ts}` sont chargés (par exemple `security-policies.mjs`, `workflow-policies.js`). Les autres fichiers du répertoire sont ignorés.
166
166
 
167
- **Aucune configuration nécessaire :** Les politiques de convention ne nécessitent aucune entrée dans `policies-config.json`. Déposez simplement les fichiers dans le répertoire et ils seront pris en compte au prochain événement de hook.
167
+ **Aucune configuration requise :** Les politiques de convention ne nécessitent aucune entrée dans `policies-config.json`. Il suffit de déposer des fichiers dans le répertoire et ils seront pris en compte au prochain événement de hook.
168
168
 
169
- **Chargement par union :** Les répertoires de convention du projet et de l'utilisateur sont tous deux analysés. Tous les fichiers correspondants des deux niveaux sont chargés (contrairement à `customPoliciesPath` qui utilise la règle du premier gagnant).
169
+ **Chargement par union :** Les répertoires de convention du projet et de l'utilisateur sont tous deux analysés. Tous les fichiers correspondants des deux niveaux sont chargés (contrairement à `customPoliciesPath` qui utilise la règle « première portée gagnante »).
170
170
 
171
- Consultez [Politiques personnalisées](/fr/custom-policies) pour plus de détails et des exemples.
171
+ Consultez [Politiques personnalisées](/fr/custom-policies) pour plus de détails et d'exemples.
172
172
 
173
173
  ### `llm`
174
174
 
175
175
  Type : `object` (optionnel)
176
176
 
177
- Configuration du client LLM pour les politiques qui effectuent des appels à l'IA. Non requis pour la plupart des configurations.
177
+ Configuration du client LLM pour les politiques effectuant des appels à l'IA. Non requis dans la plupart des configurations.
178
178
 
179
179
  ```json
180
180
  {
@@ -187,20 +187,20 @@ Configuration du client LLM pour les politiques qui effectuent des appels à l'I
187
187
 
188
188
  ---
189
189
 
190
- ## Gestion de la configuration depuis l'interface en ligne de commande
190
+ ## Gestion de la configuration depuis la CLI
191
191
 
192
192
  Les commandes `policies --install` et `policies --uninstall` écrivent dans le fichier `settings.json` de Claude Code (les points d'entrée des hooks), tandis que `policies-config.json` est le fichier que vous gérez directement. Les deux sont distincts :
193
193
 
194
194
  - **`settings.json`** — indique à Claude Code d'appeler `failproofai --hook <event>` à chaque utilisation d'outil
195
195
  - **`policies-config.json`** — indique à failproofai quelles politiques évaluer et avec quels paramètres
196
196
 
197
- Vous pouvez modifier `policies-config.json` directement à tout moment ; les modifications prennent effet immédiatement au prochain événement de hook, sans redémarrage nécessaire.
197
+ Vous pouvez modifier `policies-config.json` directement à tout moment ; les changements prennent effet immédiatement au prochain événement de hook, sans redémarrage nécessaire.
198
198
 
199
199
  ---
200
200
 
201
- ## Exemple : configuration au niveau projet avec les paramètres par défaut de l'équipe
201
+ ## Exemple : configuration au niveau projet avec des valeurs par défaut d'équipe
202
202
 
203
- Committez `.failproofai/policies-config.json` dans votre dépôt :
203
+ Commitez `.failproofai/policies-config.json` dans votre dépôt :
204
204
 
205
205
  ```json
206
206
  {
@@ -219,4 +219,4 @@ Committez `.failproofai/policies-config.json` dans votre dépôt :
219
219
  }
220
220
  ```
221
221
 
222
- Chaque développeur peut ensuite créer `.failproofai/policies-config.local.json` (ignoré par git) pour ses surcharges personnelles sans affecter ses coéquipiers.
222
+ Chaque développeur peut ensuite créer `.failproofai/policies-config.local.json` (ignoré par git) pour des surcharges personnelles sans affecter ses coéquipiers.