failproofai 0.0.5 → 0.0.6-beta.0

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 (144) hide show
  1. package/.next/standalone/.failproofai/policies/workflow-policies.mjs +2 -1
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/required-server-files.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  11. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  12. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  14. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  15. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  20. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  21. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  22. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  23. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  24. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  26. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/index.html +1 -1
  28. package/.next/standalone/.next/server/app/index.rsc +15 -15
  29. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  30. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  31. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  32. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
  33. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  35. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  38. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  41. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  44. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  45. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  48. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
  51. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  52. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0a~g15g._.js → [root-of-the-server]__0.~fd7s._.js} +2 -2
  53. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  54. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  55. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qn95h3._.js → [root-of-the-server]__0a.nuas._.js} +2 -2
  56. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  57. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  58. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  59. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +2 -2
  60. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  61. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  62. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  63. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  65. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  66. package/.next/standalone/.next/server/pages/404.html +2 -2
  67. package/.next/standalone/.next/server/pages/500.html +1 -1
  68. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  70. package/.next/standalone/.next/static/chunks/{09ikntpt2-o9b.js → 0.z51twd.0l5z.js} +1 -1
  71. package/.next/standalone/.next/static/chunks/{0sme4lkv.tgn-.js → 0hctoh28rg838.js} +1 -1
  72. package/.next/standalone/.next/static/chunks/{13juklu.vksks.js → 0hplx-8c-4vpv.js} +1 -1
  73. package/.next/standalone/.next/static/chunks/{0em7tspi4kylh.js → 0maq.q1t.ri85.js} +2 -2
  74. package/.next/standalone/.next/static/chunks/{17manv47o-~wp.js → 0teq8wdh3po1n.js} +1 -1
  75. package/.next/standalone/.next/static/chunks/{0lgbwkfqmnsmc.js → 0uc0um_uz51m_.js} +1 -1
  76. package/.next/standalone/.next/static/chunks/{0yumumfzx_f27.js → 0ul6fk-z.6k-0.js} +1 -1
  77. package/.next/standalone/.next/static/chunks/{0_yayar~bpphd.js → 0w9lwqy0-v1dk.js} +1 -1
  78. package/.next/standalone/CHANGELOG.md +5 -0
  79. package/.next/standalone/dist/cli.mjs +19 -2
  80. package/.next/standalone/docs/ar/architecture.mdx +65 -64
  81. package/.next/standalone/docs/ar/configuration.mdx +42 -42
  82. package/.next/standalone/docs/ar/custom-policies.mdx +62 -64
  83. package/.next/standalone/docs/de/architecture.mdx +92 -92
  84. package/.next/standalone/docs/de/configuration.mdx +34 -34
  85. package/.next/standalone/docs/de/custom-policies.mdx +49 -50
  86. package/.next/standalone/docs/es/architecture.mdx +72 -72
  87. package/.next/standalone/docs/es/configuration.mdx +25 -25
  88. package/.next/standalone/docs/es/custom-policies.mdx +48 -49
  89. package/.next/standalone/docs/fr/architecture.mdx +53 -53
  90. package/.next/standalone/docs/fr/configuration.mdx +25 -25
  91. package/.next/standalone/docs/fr/custom-policies.mdx +42 -43
  92. package/.next/standalone/docs/he/architecture.mdx +66 -66
  93. package/.next/standalone/docs/he/configuration.mdx +53 -52
  94. package/.next/standalone/docs/he/custom-policies.mdx +72 -73
  95. package/.next/standalone/docs/hi/architecture.mdx +106 -106
  96. package/.next/standalone/docs/hi/configuration.mdx +39 -39
  97. package/.next/standalone/docs/hi/custom-policies.mdx +75 -76
  98. package/.next/standalone/docs/i18n/README.ar.md +66 -66
  99. package/.next/standalone/docs/i18n/README.de.md +38 -38
  100. package/.next/standalone/docs/i18n/README.es.md +38 -38
  101. package/.next/standalone/docs/i18n/README.fr.md +42 -42
  102. package/.next/standalone/docs/i18n/README.he.md +67 -67
  103. package/.next/standalone/docs/i18n/README.hi.md +70 -70
  104. package/.next/standalone/docs/i18n/README.it.md +62 -62
  105. package/.next/standalone/docs/i18n/README.ja.md +54 -54
  106. package/.next/standalone/docs/i18n/README.ko.md +58 -58
  107. package/.next/standalone/docs/i18n/README.pt-br.md +43 -43
  108. package/.next/standalone/docs/i18n/README.ru.md +69 -69
  109. package/.next/standalone/docs/i18n/README.tr.md +76 -76
  110. package/.next/standalone/docs/i18n/README.vi.md +70 -70
  111. package/.next/standalone/docs/i18n/README.zh.md +52 -52
  112. package/.next/standalone/docs/it/architecture.mdx +54 -53
  113. package/.next/standalone/docs/it/configuration.mdx +44 -45
  114. package/.next/standalone/docs/it/custom-policies.mdx +76 -78
  115. package/.next/standalone/docs/ja/architecture.mdx +93 -93
  116. package/.next/standalone/docs/ja/configuration.mdx +47 -47
  117. package/.next/standalone/docs/ja/custom-policies.mdx +62 -63
  118. package/.next/standalone/docs/ko/architecture.mdx +66 -66
  119. package/.next/standalone/docs/ko/configuration.mdx +35 -35
  120. package/.next/standalone/docs/ko/custom-policies.mdx +71 -72
  121. package/.next/standalone/docs/pt-br/architecture.mdx +55 -55
  122. package/.next/standalone/docs/pt-br/configuration.mdx +35 -35
  123. package/.next/standalone/docs/pt-br/custom-policies.mdx +60 -61
  124. package/.next/standalone/docs/ru/architecture.mdx +59 -60
  125. package/.next/standalone/docs/ru/configuration.mdx +52 -53
  126. package/.next/standalone/docs/ru/custom-policies.mdx +68 -69
  127. package/.next/standalone/docs/tr/architecture.mdx +124 -124
  128. package/.next/standalone/docs/tr/configuration.mdx +45 -46
  129. package/.next/standalone/docs/tr/custom-policies.mdx +75 -75
  130. package/.next/standalone/docs/vi/architecture.mdx +65 -64
  131. package/.next/standalone/docs/vi/configuration.mdx +41 -41
  132. package/.next/standalone/docs/vi/custom-policies.mdx +68 -69
  133. package/.next/standalone/docs/zh/architecture.mdx +67 -67
  134. package/.next/standalone/docs/zh/configuration.mdx +34 -34
  135. package/.next/standalone/docs/zh/custom-policies.mdx +53 -54
  136. package/.next/standalone/package.json +1 -1
  137. package/.next/standalone/server.js +1 -1
  138. package/.next/standalone/src/hooks/builtin-policies.ts +30 -0
  139. package/dist/cli.mjs +19 -2
  140. package/package.json +1 -1
  141. package/src/hooks/builtin-policies.ts +30 -0
  142. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_buildManifest.js +0 -0
  143. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_clientMiddlewareManifest.js +0 -0
  144. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_ssgManifest.js +0 -0
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: Politiques personnalisées
3
- description: "Écrivez vos propres politiques en JavaScript — appliquez des conventions, prévenez la dérive, détectez les échecs, intégrez des systèmes externes"
3
+ description: "Écrivez vos propres politiques en JavaScript — appliquez des conventions, prévenez la dérive, détectez les défaillances, intégrez des systèmes externes"
4
4
  icon: code
5
5
  ---
6
6
 
7
- Les politiques personnalisées vous permettent d'écrire des règles pour n'importe quel comportement d'agent : appliquer des conventions de projet, prévenir la dérive, bloquer les opérations destructrices, détecter les agents bloqués, ou s'intégrer avec Slack, des workflows d'approbation, et bien plus. Elles utilisent le même système d'événements hook et les mêmes décisions `allow`, `deny`, `instruct` que les politiques intégrées.
7
+ Les politiques personnalisées vous permettent d'écrire des règles pour n'importe quel comportement d'agent : appliquer des conventions de projet, prévenir la dérive, bloquer les opérations destructives, détecter les agents bloqués, ou s'intégrer avec Slack, des workflows d'approbation, et bien plus. Elles utilisent le même système d'événements de hook et les mêmes décisions `allow`, `deny`, `instruct` que les politiques intégrées.
8
8
 
9
9
  ---
10
10
 
@@ -29,7 +29,7 @@ customPolicies.add({
29
29
  });
30
30
  ```
31
31
 
32
- Installez-le :
32
+ Installation :
33
33
 
34
34
  ```bash
35
35
  failproofai policies --install --custom ./my-policies.js
@@ -39,12 +39,12 @@ failproofai policies --install --custom ./my-policies.js
39
39
 
40
40
  ## Deux façons de charger des politiques personnalisées
41
41
 
42
- ### Option 1 : Par convention (recommandé)
42
+ ### Option 1 : Basée sur les conventions (recommandée)
43
43
 
44
- Déposez des fichiers `*policies.{js,mjs,ts}` dans `.failproofai/policies/` et ils sont chargés automatiquement — aucun indicateur ni changement de configuration requis. Cela fonctionne comme les git hooks : déposez un fichier, il est pris en compte immédiatement.
44
+ Déposez des fichiers `*policies.{js,mjs,ts}` dans `.failproofai/policies/` et ils sont automatiquement chargés — aucun indicateur ni modification de configuration nécessaire. Cela fonctionne comme les hooks git : déposez un fichier, et c'est tout.
45
45
 
46
46
  ```
47
- # Niveau projet — commité dans git, partagé avec l'équipe
47
+ # Niveau projet — validé dans git, partagé avec l'équipe
48
48
  .failproofai/policies/security-policies.mjs
49
49
  .failproofai/policies/workflow-policies.mjs
50
50
 
@@ -52,15 +52,15 @@ Déposez des fichiers `*policies.{js,mjs,ts}` dans `.failproofai/policies/` et i
52
52
  ~/.failproofai/policies/my-policies.mjs
53
53
  ```
54
54
 
55
- **Comment ça fonctionne :**
56
- - Les répertoires projet et utilisateur sont tous deux analysés (union — pas de priorité au premier scope)
57
- - Les fichiers sont chargés alphabétiquement dans chaque répertoire. Préfixez avec `01-`, `02-` pour contrôler l'ordre
55
+ **Fonctionnement :**
56
+ - Les répertoires du projet et de l'utilisateur sont tous deux analysés (union — pas de priorité au premier scope)
57
+ - Les fichiers sont chargés par ordre alphabétique dans chaque répertoire. Préfixez avec `01-`, `02-` pour contrôler l'ordre
58
58
  - Seuls les fichiers correspondant à `*policies.{js,mjs,ts}` sont chargés ; les autres fichiers sont ignorés
59
59
  - Chaque fichier est chargé indépendamment (fail-open par fichier)
60
- - Fonctionne en parallèle avec les indicateurs `--custom` explicites et les politiques intégrées
60
+ - Fonctionne conjointement avec les politiques `--custom` explicites et les politiques intégrées
61
61
 
62
62
  <Tip>
63
- Les politiques par convention sont le moyen le plus simple de partager des politiques au sein d'une équipe. Commitez `.failproofai/policies/` dans git et chaque membre de l'équipe les reçoit automatiquement.
63
+ Les politiques par convention sont le moyen le plus simple de partager des politiques au sein d'une équipe. Validez `.failproofai/policies/` dans git et chaque membre de l'équipe les obtient automatiquement.
64
64
  </Tip>
65
65
 
66
66
  ### Option 2 : Chemin de fichier explicite
@@ -76,15 +76,15 @@ failproofai policies --install --custom ./new-policies.js
76
76
  failproofai policies --uninstall --custom
77
77
  ```
78
78
 
79
- Le chemin absolu résolu est stocké dans `policies-config.json` sous `customPoliciesPath`. Le fichier est chargé à nouveau à chaque événement hook — aucune mise en cache entre les événements.
79
+ Le chemin absolu résolu est stocké dans `policies-config.json` sous `customPoliciesPath`. Le fichier est chargé à nouveau à chaque événement de hook — il n'y a pas de mise en cache entre les événements.
80
80
 
81
81
  ### Utiliser les deux ensemble
82
82
 
83
83
  Les politiques par convention et le fichier `--custom` explicite peuvent coexister. Ordre de chargement :
84
84
 
85
85
  1. Fichier `customPoliciesPath` explicite (si configuré)
86
- 2. Fichiers de convention projet (`{cwd}/.failproofai/policies/`, alphabétique)
87
- 3. Fichiers de convention utilisateur (`~/.failproofai/policies/`, alphabétique)
86
+ 2. Fichiers de convention du projet (`{cwd}/.failproofai/policies/`, alphabétique)
87
+ 3. Fichiers de convention de l'utilisateur (`~/.failproofai/policies/`, alphabétique)
88
88
 
89
89
  ---
90
90
 
@@ -98,7 +98,7 @@ import { customPolicies, allow, deny, instruct } from "failproofai";
98
98
 
99
99
  ### `customPolicies.add(hook)`
100
100
 
101
- Enregistre une politique. Appelez cette méthode autant de fois que nécessaire pour plusieurs politiques dans le même fichier.
101
+ Enregistre une politique. Appelez cette fonction autant de fois que nécessaire pour plusieurs politiques dans le même fichier.
102
102
 
103
103
  ```ts
104
104
  customPolicies.add({
@@ -115,29 +115,28 @@ customPolicies.add({
115
115
  |----------|--------|----------|
116
116
  | `allow()` | Autorise l'opération silencieusement | L'action est sûre, aucun message nécessaire |
117
117
  | `deny(message)` | Bloque l'opération | L'agent ne doit pas effectuer cette action |
118
- | `instruct(message)` | Ajoute du contexte sans bloquer | Fournir à l'agent du contexte supplémentaire pour rester sur la bonne voie |
118
+ | `instruct(message)` | Ajoute du contexte sans bloquer | Donner à l'agent un contexte supplémentaire pour rester sur la bonne voie |
119
119
 
120
120
  `deny(message)` — le message apparaît à Claude préfixé par `"Blocked by failproofai:"`. Un seul `deny` court-circuite toute évaluation ultérieure.
121
121
 
122
122
  `instruct(message)` — le message est ajouté au contexte de Claude pour l'appel d'outil en cours. Tous les messages `instruct` sont accumulés et délivrés ensemble.
123
123
 
124
124
  <Tip>
125
- Vous pouvez ajouter des instructions supplémentaires à n'importe quel message `deny` ou `instruct` en ajoutant un champ `hint` dans `policyParams` — sans modifier le code. Cela fonctionne également pour les politiques personnalisées (`custom/`), par convention projet (`.failproofai-project/`) et par convention utilisateur (`.failproofai-user/`). Voir [Configuration → hint](/fr/configuration#hint-cross-cutting) pour les détails.
125
+ Vous pouvez ajouter des indications supplémentaires à n'importe quel message `deny` ou `instruct` en ajoutant un champ `hint` dans `policyParams` — aucune modification de code nécessaire. Cela fonctionne également pour les politiques personnalisées (`custom/`), les politiques de convention de projet (`.failproofai-project/`) et les politiques de convention utilisateur (`.failproofai-user/`). Consultez [Configuration → hint](/fr/configuration#hint-cross-cutting) pour plus de détails.
126
126
  </Tip>
127
127
 
128
- ### Messages allow informationnels
128
+ ### Messages d'autorisation informatifs
129
129
 
130
-
131
- `allow(message)` autorise l'opération **et** envoie un message informationnel à Claude. Le message est délivré en tant que `additionalContext` dans la réponse stdout du gestionnaire de hook — le même mécanisme qu'`instruct`, mais sémantiquement différent : c'est une mise à jour de statut, pas un avertissement.
130
+ `allow(message)` autorise l'opération **et** envoie un message informatif à Claude. Le message est délivré en tant que `additionalContext` dans la réponse stdout du gestionnaire de hook — le même mécanisme qu'`instruct`, mais sémantiquement différent : c'est une mise à jour de statut, pas un avertissement.
132
131
 
133
132
  | Fonction | Effet | Utiliser quand |
134
133
  |----------|--------|----------|
135
- | `allow(message)` | Autorise et envoie du contexte à Claude | Confirmer qu'une vérification a réussi, ou expliquer pourquoi une vérification a été ignorée |
134
+ | `allow(message)` | Autoriser et envoyer du contexte à Claude | Confirmer qu'une vérification a réussi, ou expliquer pourquoi une vérification a été ignorée |
136
135
 
137
136
  Cas d'utilisation :
138
137
  - **Confirmations de statut :** `allow("All CI checks passed.")` — indique à Claude que tout est en ordre
139
- - **Explications fail-open :** `allow("GitHub CLI not installed, skipping CI check.")` — indique à Claude pourquoi une vérification a été ignorée pour qu'il ait le contexte complet
140
- - **Accumulation de messages multiples :** si plusieurs politiques retournent chacune `allow(message)`, tous les messages sont joints par des sauts de ligne et délivrés ensemble
138
+ - **Explications fail-open :** `allow("GitHub CLI not installed, skipping CI check.")` — indique à Claude pourquoi une vérification a été ignorée afin qu'il dispose du contexte complet
139
+ - **Accumulation de plusieurs messages :** si plusieurs politiques retournent chacune `allow(message)`, tous les messages sont joints par des sauts de ligne et délivrés ensemble
141
140
 
142
141
  ```js
143
142
  customPolicies.add({
@@ -163,7 +162,7 @@ customPolicies.add({
163
162
  | `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
164
163
  | `toolName` | `string \| undefined` | L'outil appelé (ex. `"Bash"`, `"Write"`, `"Read"`) |
165
164
  | `toolInput` | `Record<string, unknown> \| undefined` | Les paramètres d'entrée de l'outil |
166
- | `payload` | `Record<string, unknown>` | Payload brut complet de l'événement provenant de Claude Code |
165
+ | `payload` | `Record<string, unknown>` | Charge utile brute complète de l'événement provenant de Claude Code |
167
166
  | `session` | `SessionMetadata \| undefined` | Contexte de session (voir ci-dessous) |
168
167
 
169
168
  ### Champs de `SessionMetadata`
@@ -190,9 +189,9 @@ customPolicies.add({
190
189
  Les politiques sont évaluées dans cet ordre :
191
190
 
192
191
  1. Politiques intégrées (dans l'ordre de définition)
193
- 2. Politiques personnalisées explicites de `customPoliciesPath` (dans l'ordre `.add()`)
194
- 3. Politiques de convention projet `.failproofai/policies/` (fichiers alphabétiques, ordre `.add()` à l'intérieur)
195
- 4. Politiques de convention utilisateur `~/.failproofai/policies/` (fichiers alphabétiques, ordre `.add()` à l'intérieur)
192
+ 2. Politiques personnalisées explicites depuis `customPoliciesPath` (dans l'ordre `.add()`)
193
+ 3. Politiques de convention du projet `.failproofai/policies/` (fichiers alphabétiques, ordre `.add()` à l'intérieur)
194
+ 4. Politiques de convention de l'utilisateur `~/.failproofai/policies/` (fichiers alphabétiques, ordre `.add()` à l'intérieur)
196
195
 
197
196
  <Note>
198
197
  Le premier `deny` court-circuite toutes les politiques suivantes. Tous les messages `instruct` sont accumulés et délivrés ensemble.
@@ -219,13 +218,13 @@ customPolicies.add({
219
218
  });
220
219
  ```
221
220
 
222
- Tous les imports relatifs accessibles depuis le fichier d'entrée sont résolus. Cela est implémenté en réécrivant les imports `from "failproofai"` vers le chemin dist réel et en créant des fichiers `.mjs` temporaires pour assurer la compatibilité ESM.
221
+ Tous les imports relatifs accessibles depuis le fichier d'entrée sont résolus. Ceci est implémenté en réécrivant les imports `from "failproofai"` vers le chemin dist réel et en créant des fichiers `.mjs` temporaires pour garantir la compatibilité ESM.
223
222
 
224
223
  ---
225
224
 
226
225
  ## Filtrage par type d'événement
227
226
 
228
- Utilisez `match.events` pour limiter le déclenchement d'une politique :
227
+ Utilisez `match.events` pour limiter quand une politique se déclenche :
229
228
 
230
229
  ```js
231
230
  customPolicies.add({
@@ -239,7 +238,7 @@ customPolicies.add({
239
238
  });
240
239
  ```
241
240
 
242
- Omettez `match` entièrement pour se déclencher sur chaque type d'événement.
241
+ Omettez `match` entièrement pour se déclencher à chaque type d'événement.
243
242
 
244
243
  ---
245
244
 
@@ -251,14 +250,14 @@ Les politiques personnalisées sont **fail-open** : les erreurs ne bloquent jama
251
250
  |---------|----------|
252
251
  | `customPoliciesPath` non défini | Aucune politique personnalisée explicite ne s'exécute ; les politiques de convention et les politiques intégrées continuent normalement |
253
252
  | Fichier introuvable | Avertissement consigné dans `~/.failproofai/hook.log` ; les politiques intégrées continuent |
254
- | Erreur de syntaxe/import (explicite) | Erreur consignée dans `~/.failproofai/hook.log` ; politiques personnalisées explicites ignorées |
255
- | Erreur de syntaxe/import (convention) | Erreur consignée ; ce fichier ignoré, les autres fichiers de convention se chargent quand même |
256
- | `fn` lève une exception à l'exécution | Erreur consignée ; ce hook traité comme `allow` ; les autres hooks continuent |
257
- | `fn` prend plus de 10s | Timeout consigné ; traité comme `allow` |
253
+ | Erreur de syntaxe/import (explicite) | Erreur consignée dans `~/.failproofai/hook.log` ; les politiques personnalisées explicites sont ignorées |
254
+ | Erreur de syntaxe/import (convention) | Erreur consignée ; ce fichier est ignoré, les autres fichiers de convention se chargent quand même |
255
+ | `fn` lève une exception à l'exécution | Erreur consignée ; ce hook est traité comme `allow` ; les autres hooks continuent |
256
+ | `fn` prend plus de 10 s | Délai consigné ; traité comme `allow` |
258
257
  | Répertoire de convention manquant | Aucune politique de convention ne s'exécute ; aucune erreur |
259
258
 
260
259
  <Tip>
261
- Pour déboguer les erreurs de politiques personnalisées, surveillez le fichier journal :
260
+ Pour déboguer les erreurs de politiques personnalisées, surveillez le fichier de log :
262
261
 
263
262
  ```bash
264
263
  tail -f ~/.failproofai/hook.log
@@ -328,10 +327,10 @@ Le répertoire `examples/` contient des fichiers de politiques prêts à l'emplo
328
327
 
329
328
  | Fichier | Contenu |
330
329
  |------|----------|
331
- | `examples/policies-basic.js` | Cinq politiques de démarrage couvrant les modes d'échec courants des agents |
332
- | `examples/policies-advanced/index.js` | Patterns avancés : imports transitifs, appels asynchrones, nettoyage de sortie et hooks de fin de session |
333
- | `examples/convention-policies/security-policies.mjs` | Politiques de sécurité par convention (bloquer les écritures .env, empêcher la réécriture de l'historique git) |
334
- | `examples/convention-policies/workflow-policies.mjs` | Politiques de workflow par convention (rappels de tests, audit des écritures de fichiers) |
330
+ | `examples/policies-basic.js` | Cinq politiques de démarrage couvrant les modes de défaillance courants des agents |
331
+ | `examples/policies-advanced/index.js` | Modèles avancés : imports transitifs, appels asynchrones, nettoyage des sorties et hooks de fin de session |
332
+ | `examples/convention-policies/security-policies.mjs` | Politiques de sécurité basées sur les conventions (bloquer les écritures .env, empêcher la réécriture de l'historique git) |
333
+ | `examples/convention-policies/workflow-policies.mjs` | Politiques de workflow basées sur les conventions (rappels de tests, audit des écritures de fichiers) |
335
334
 
336
335
  ### Utiliser les exemples de fichiers explicites
337
336
 
@@ -339,16 +338,16 @@ Le répertoire `examples/` contient des fichiers de politiques prêts à l'emplo
339
338
  failproofai policies --install --custom ./examples/policies-basic.js
340
339
  ```
341
340
 
342
- ### Utiliser les exemples par convention
341
+ ### Utiliser les exemples basés sur les conventions
343
342
 
344
343
  ```bash
345
- # Copier au niveau projet
344
+ # Copier au niveau du projet
346
345
  mkdir -p .failproofai/policies
347
346
  cp examples/convention-policies/*.mjs .failproofai/policies/
348
347
 
349
- # Ou copier au niveau utilisateur
348
+ # Ou copier au niveau de l'utilisateur
350
349
  mkdir -p ~/.failproofai/policies
351
350
  cp examples/convention-policies/*.mjs ~/.failproofai/policies/
352
351
  ```
353
352
 
354
- Aucune commande d'installation requise — les fichiers sont pris en compte automatiquement au prochain événement hook.
353
+ Aucune commande d'installation nécessaire — les fichiers sont récupérés automatiquement au prochain événement de hook.
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  ---
3
3
  title: ארכיטקטורה
4
- description: "כיצד מטפל ה-hook, טעינת ההגדרות והערכת המדיניות עובדים באופן פנימי"
4
+ description: "כיצד מטפל ה-hook, טעינת התצורה והערכת המדיניות עובדים באופן פנימי"
5
5
  icon: sitemap
6
6
  ---
7
7
 
8
- מסמך זה מסביר כיצד failproofai עובד באופן פנימי: כיצד מערכת ה-hook מיירטת קריאות כלים של סוכנים, כיצד הגדרות נטענות ומתמזגות, כיצד מדיניות מוערכת, וכיצד לוח הבקרה עוקב אחרי פעילות סוכנים.
8
+ מסמך זה מסביר כיצד failproofai עובד באופן פנימי: כיצד מערכת ה-hook חוצצת קריאות כלי סוכן, כיצד התצורה נטענת ומוזגת, כיצד מדיניות מוערכת, וכיצד לוח המחוונים מנטר פעילות סוכן.
9
9
 
10
10
  ---
11
11
 
@@ -13,18 +13,18 @@ icon: sitemap
13
13
 
14
14
  ל-failproofai יש שתי תת-מערכות עצמאיות:
15
15
 
16
- 1. **מטפל Hook** - תת-תהליך CLI מהיר שClaude Code מפעיל בכל קריאת כלי סוכן. מעריך מדיניות ומחזיר החלטה.
17
- 2. **Agent Monitor (Dashboard)** - יישום Next.js לניטור של סשנים של סוכנים וניהול מדיניות.
16
+ 1. **מטפל ה-Hook** - תהליך CLI מהיר שהוא Claude Code משדר בכל קריאת כלי סוכן. מעריך מדיניות והחזר החלטה.
17
+ 2. **Agent Monitor (Dashboard)** - אפליקציית Next.js לניטור מושבי סוכן וניהול מדיניות.
18
18
 
19
- שתי התת-מערכות משתפות קבצי הגדרות בתיקייה `~/.failproofai/` ובתיקייה `.failproofai/` של הפרויקט, אך הן פועלות כתהליכים נפרדים ותקשרות רק דרך מערכת הקבצים.
19
+ שתי התת-מערכות חולקות קבצי תצורה ב-`~/.failproofai/` ובתיקייה `~/.failproofai/` של הפרויקט, אך הם פועלים כתהליכים נפרדים ותקשורתם היא רק דרך מערכת הקבצים.
20
20
 
21
21
  ---
22
22
 
23
- ## מטפל Hook
23
+ ## מטפל ה-Hook
24
24
 
25
- ### שילוב עם Claude Code
25
+ ### אינטגרציה עם Claude Code
26
26
 
27
- כאשר אתה מריץ `failproofai policies --install`, הוא כותב ערכים כמו זה לתוך `~/.claude/settings.json`:
27
+ כאשר אתה מריץ `failproofai policies --install`, הוא כותב ערכים כמו זה ב-`~/.claude/settings.json`:
28
28
 
29
29
  ```json
30
30
  {
@@ -45,9 +45,9 @@ icon: sitemap
45
45
  }
46
46
  ```
47
47
 
48
- Claude Code לאחר מכן מפעיל את `failproofai --hook PreToolUse` כתת-תהליך לפני כל קריאת כלי, תוך העברת מטען JSON ל-stdin.
48
+ Claude Code לאחר מכן משדר `failproofai --hook PreToolUse` כתת-תהליך לפני כל קריאת כלי, והעברת עומס JSON על stdin.
49
49
 
50
- ### פורמט מטען
50
+ ### פורמט עומס
51
51
 
52
52
  ```json
53
53
  {
@@ -61,11 +61,11 @@ Claude Code לאחר מכן מפעיל את `failproofai --hook PreToolUse` כת
61
61
  }
62
62
  ```
63
63
 
64
- לאירועי `PostToolUse`, המטען מכיל גם `tool_result` עם הפלט של הכלי.
64
+ עבור אירועי `PostToolUse`, העומס מכיל גם `tool_result` עם הפלט של הכלי.
65
65
 
66
- המטפל אוכף מגבלת stdin של 1 MB. מטענים החוצים זאת מושלכים וכל מדיניות מאפשרת באופן מובנה.
66
+ המטפל כופה גבול של 1 MB ל-stdin. עומסים החוצים זאת מושלכים וכל המדיניות משתמעת להרשות.
67
67
 
68
- ### פורמט תجובה
68
+ ### פורמט תגובה
69
69
 
70
70
  **Deny (PreToolUse):**
71
71
  ```json
@@ -86,7 +86,7 @@ Claude Code לאחר מכן מפעיל את `failproofai --hook PreToolUse` כת
86
86
  }
87
87
  ```
88
88
 
89
- **Instruct (כל אירוע מלבד Stop):**
89
+ **Instruct (any event except Stop):**
90
90
  ```json
91
91
  {
92
92
  "hookSpecificOutput": {
@@ -95,9 +95,9 @@ Claude Code לאחר מכן מפעיל את `failproofai --hook PreToolUse` כת
95
95
  }
96
96
  ```
97
97
 
98
- **אירוע Stop instruct:**
98
+ **Stop event instruct:**
99
99
  - קוד יציאה: `2`
100
- - סיבה כתובה ל-stderr (לא stdout)
100
+ - הנמקה כתובה ל-stderr (לא stdout)
101
101
 
102
102
  **Allow:**
103
103
  - קוד יציאה: `0`
@@ -105,23 +105,23 @@ Claude Code לאחר מכן מפעיל את `failproofai --hook PreToolUse` כת
105
105
 
106
106
  **Allow עם הודעה:**
107
107
 
108
- `allow(message)` מאפשר למדיניות לשלוח הקשר מידע חזור ל-Claude גם כאשר הפעולה מורשית. מטפל ה-hook כותב את ה-JSON הבא ל-**stdout** (לא קובץ הגדרות — זו תגובת המטפל ל-Claude Code, בדיוק כמו תגובות deny ו-instruct לעיל):
108
+ `allow(message)` מאפשר למדיניות לשלוח הקשר מידע חזרה ל-Claude גם כאשר הפעולה מורשית. מטפל ה-Hook כותב את ה-JSON הבא ל-**stdout** (לא קובץ תצורה — זו התגובה של המטפל ל-Claude Code, בדיוק כמו תגובות deny ו-instruct למעלה):
109
109
 
110
110
  ```json
111
- // כתוב ל-stdout על ידי תהליך מטפל ה-hook
111
+ // Written to stdout by the hook handler process
112
112
  {
113
113
  "hookSpecificOutput": {
114
114
  "additionalContext": "All CI checks passed on branch 'feat/my-feature'."
115
115
  }
116
116
  }
117
117
  ```
118
- - קוד יציאה: `0` (פעולה מורשית)
119
- - כאשר מדיניות מרובות מחזירות `allow` עם הודעה, הודעותיהן משולבות עם שורות חדשות לתוך מחרוזת `additionalContext` יחידה
120
- - אם אף מדיניות לא מספקת הודעה, stdout ריק (זהה לקודם)
118
+ - קוד יציאה: `0` (הפעולה מורשית)
119
+ - כאשר מדיניות מרובות החוזרות `allow` עם הודעה, ההודעות שלהן מחוברות עם שורות חדשות למחרוזת `additionalContext` יחידה
120
+ - אם אין מדיניות המספקת הודעה, stdout הוא ריק (כמו קודם)
121
121
 
122
122
  ### צינור עיבוד
123
123
 
124
- `src/hooks/handler.ts` מיישם את כל הצינור:
124
+ `src/hooks/handler.ts` מיישם את המסלול המלא:
125
125
 
126
126
  ```text
127
127
  stdin JSON
@@ -140,13 +140,13 @@ stdin JSON
140
140
  → exit
141
141
  ```
142
142
 
143
- כל התהליך פועל בפחות מ-100ms עבור מטענים טיפוסיים ללא קריאות LLM.
143
+ התהליך כולו פועל בפחות מ-100ms עבור עומסים טיפוסיים ללא קריאות LLM.
144
144
 
145
145
  ---
146
146
 
147
- ## טעינת הגדרות
147
+ ## טעינת תצורה
148
148
 
149
- `src/hooks/hooks-config.ts` מיישם טעינת הגדרות בשלוש טווחים.
149
+ `src/hooks/hooks-config.ts` מיישם טעינת תצורה בתחום שלוש.
150
150
 
151
151
  ```text
152
152
  [1] {cwd}/.failproofai/policies-config.json ← project (highest priority)
@@ -154,40 +154,40 @@ stdin JSON
154
154
  [3] ~/.failproofai/policies-config.json ← global (lowest priority)
155
155
  ```
156
156
 
157
- לוגיקת מיזוג:
158
- - `enabledPolicies` - איחוד מבודד בכל שלושה הקבצים
159
- - `policyParams` - למפתח לכל מדיניות, הקובץ הראשון שמגדיר אותו מנצח במלואו
160
- - `customPoliciesPath` - הקובץ הראשון שמגדיר אותו מנצח
161
- - `llm` - הקובץ הראשון שמגדיר אותו מנצח
157
+ ההיגיון של המיזוג:
158
+ - `enabledPolicies` - איחוד לא משוכפל בכל שלוש הקבצים
159
+ - `policyParams` - per-policy key, הקובץ הראשון שמגדיר את זה מנצח לחלוטין
160
+ - `customPoliciesPath` - הקובץ הראשון שמגדיר את זה מנצח
161
+ - `llm` - הקובץ הראשון שמגדיר את זה מנצח
162
162
 
163
- לוח הבקרה בדיקה משתמש ב-`readHooksConfig()` (גלובאלי בלבד) לקריאה וכתיבה, מכיוון שהוא אינו מופעל עם cwd של פרויקט.
163
+ לוח המחוונים ברשת משתמש ב-`readHooksConfig()` (global only) לקריאה וכתיבה, מכיוון שהוא לא משדר עם cwd של פרויקט.
164
164
 
165
165
  ---
166
166
 
167
167
  ## הערכת מדיניות
168
168
 
169
- `src/hooks/policy-evaluator.ts` מפעיל מדיניות בסדר.
169
+ `src/hooks/policy-evaluator.ts` מריץ מדיניות בסדר.
170
170
 
171
171
  עבור כל מדיניות:
172
172
 
173
- 1. חפש את סכמת `params` של המדיניות (אם יש לה אחת).
174
- 2. קרא את `policyParams[policy.name]` מההגדרה המתמזגת.
175
- 3. מזג ערכים המסופקים על ידי משתמש על ברירות ברירת המחדל של הסכמה לייצור `ctx.params`.
176
- 4. קרא ל-`policy.fn(ctx)` עם ההקשר שנפתר.
177
- 5. אם התוצאה היא `deny`, עצור מיד והחזר את ההחלטה הזו.
173
+ 1. חפש את סכימת `params` של המדיניות (אם יש לה).
174
+ 2. קרא את `policyParams[policy.name]` מהתצורה המוזגת.
175
+ 3. זיזוג ערכים המסופקים על ידי המשתמש מעל ברירות ברירת המחדל בסכימה כדי לייצר `ctx.params`.
176
+ 4. התקשר ל-`policy.fn(ctx)` עם ההקשר המסולק.
177
+ 5. אם התוצאה היא `deny`, עצור מיד והחזר החלטה זו.
178
178
  6. אם התוצאה היא `instruct`, צבור את ההודעה והמשך.
179
179
  7. אם התוצאה היא `allow`, המשך למדיניות הבאה.
180
180
 
181
- לאחר שכל המדיניות פועלות:
182
- - אם הוחזר `deny`, פלוט את תגובת deny.
183
- - אם התוצאות `instruct` נאספו, פלוט תגובת instruct יחידה עם כל ההודעות משולבות.
181
+ לאחר שכל המדיניות תרוץ:
182
+ - אם אחת כלשהי `deny` הוחזרה, פלוט את תגובת deny.
183
+ - אם תשובות `instruct` כלשהן אוספות, פלוט תגובת instruct אחת עם כל ההודעות מחוברות.
184
184
  - אחרת, פלוט תגובת allow (stdout ריק, יציאה 0).
185
185
 
186
186
  ---
187
187
 
188
- ## מדיניות מובנית
188
+ ## מדיניות בנויה
189
189
 
190
- `src/hooks/builtin-policies.ts` מגדיר את כל 26 מדיניות מובנית כאובייקטי `BuiltinPolicyDefinition`:
190
+ `src/hooks/builtin-policies.ts` מגדיר את כל 26 המדיניות המובנות כ-`BuiltinPolicyDefinition` אובייקטים:
191
191
 
192
192
  ```typescript
193
193
  interface BuiltinPolicyDefinition {
@@ -205,15 +205,15 @@ interface BuiltinPolicyDefinition {
205
205
  }
206
206
  ```
207
207
 
208
- מדיניות המקבלת `params` מצהירה ספכמת `PolicyParamsSchema` עם סוגים וברירות מחדל לכל פרמטר. מעריך המדיניות מזריק ערכים שנפתרו ל-`ctx.params` לפני קריאה ל-`fn`. פונקציות מדיניות קוראות `ctx.params` ללא שמירה null מכיוון שברירות מחדל מוחלות תמיד קודם.
208
+ מדיניות המקבלת `params` מצהירה `PolicyParamsSchema` עם סוגים וברירות ברירת מחדל עבור כל פרמטר. מעריך המדיניות מזריק ערכים מסולקים ל-`ctx.params` לפני קריאה ל-`fn`. פונקציות מדיניות קוראות ל-`ctx.params` ללא guard null מכיוון שברירות ברירת מחדל תמיד מיושמות תחילה.
209
209
 
210
- התאמת דפוס בתוך מדיניות משתמשת בטוקנים של פקודה מנותחים (argv), לא התאמה של מחרוזת גולמית. זה מונע עקיפה דרך הזרקת מפעילי shell (לדוגמה, דפוס עבור `sudo systemctl status *` לא יכול להיות מעוקף על ידי הוספת `; rm -rf /` לפקודה).
210
+ התאמת דפוסים בתוך מדיניות משתמשת בקלקולי פקודה מנותחים (argv), לא התאמה של מחרוזות גולמיות. זה מונע עקיפה דרך הזרקת אופרטור מעטפת (למשל דפוס עבור `sudo systemctl status *` לא יכול להיות מעוקף על ידי הוספת `; rm -rf /` לפקודה).
211
211
 
212
212
  ---
213
213
 
214
- ## מדיניות מותאמת אישית
214
+ ## מדיניות מותאמת
215
215
 
216
- `src/hooks/custom-hooks-registry.ts` מיישם רישום `globalThis`-backed:
216
+ `src/hooks/custom-hooks-registry.ts` מיישם רישום מסגרת `globalThis`:
217
217
 
218
218
  ```typescript
219
219
  const REGISTRY_KEY = "__failproofai_custom_hooks__";
@@ -228,23 +228,23 @@ export function clearCustomHooks(): void { ... } // used in tests
228
228
 
229
229
  `src/hooks/custom-hooks-loader.ts` טוען את קובץ המדיניות של המשתמש:
230
230
 
231
- 1. קרא את `customPoliciesPath` מהגדרות; דלג אם היעדר.
232
- 2. פתור לנתיב מוחלט; בדוק שהקובץ קיים.
233
- 3. כתוב מחדש את כל `from "failproofai"` כדי להסב לנתיב dist בפועל כך `customPolicies` מתפתר לרישום `globalThis` זהה.
234
- 4. כתוב מחדש רקורסיבי יבוא מקומי חולף כדי להבטיח תאימות ESM.
235
- 5. כתוב קבצי `.mjs` זמניים ו-`import()` הקובץ הכניסה.
236
- 6. קרא ל-`getCustomHooks()` כדי לאחזר hooks שנרשמו.
231
+ 1. קרא את `customPoliciesPath` מהתצורה; דלג אם חסר.
232
+ 2. פתור לנתיב מוחלט; בדוק קובץ קיים.
233
+ 3. כתוב מחדש את כל `from "failproofai"` ייבוא לנתיב ה-dist בפועל כדי `customPolicies` יתבררו לרישום `globalThis` זהה.
234
+ 4. כתוב מחדש ייבוא מקומי חולף רקורסיבי כדי להבטיח התאימות ESM.
235
+ 5. כתוב קבצי `.mjs` זמניים ו-`import()` קובץ הכניסה.
236
+ 6. התקשר ל-`getCustomHooks()` כדי לשלוח קטגוריות מחדש.
237
237
  7. נקה את כל הקבצים הזמניים בבלוק `finally`.
238
238
 
239
- בכל שגיאה (קובץ לא נמצא, שגיאת תחביר, כשל בייבוא), השגיאה נרשמת ל-`~/.failproofai/hook.log` והטוען מחזיר מערך ריק. מדיניות מובנית אינה מושפעת.
239
+ בכל שגיאה (קובץ לא נמצא, שגיאת תחביר, כישלון ייבוא), השגיאה מתועדת ב-`~/.failproofai/hook.log` והטוען מחזיר מערך ריק. מדיניות מובנית לא מושפעת.
240
240
 
241
- מדיניות מותאמת אישית מוערכת לאחר כל מדיניות מובנית. מדיניות מותאמת אישית `deny` עדיין קוצרת מדיניות מותאמת אישית נוספת (אך כל הביומיניות כבר רצות בנקודה זו).
241
+ מדיניות מותאמת מוערכת לאחר כל המדיניות המובנות. `deny` מדיניות מותאמת עדיין מעיל קצר מדיניות מותאמת נוספת (אך כל הבנוי כבר רץ בנקודה זו).
242
242
 
243
243
  ---
244
244
 
245
245
  ## רישום פעילות
246
246
 
247
- לאחר כל אירוע hook, המטפל מצרף שורת JSONL ל-`~/.failproofai/hook-activity.jsonl`:
247
+ לאחר כל אירוע hook, המטפל מוסיף שורת JSONL ל-`~/.failproofai/hook-activity.jsonl`:
248
248
 
249
249
  ```json
250
250
  {
@@ -259,13 +259,13 @@ export function clearCustomHooks(): void { ... } // used in tests
259
259
  }
260
260
  ```
261
261
 
262
- שורה אחת לכל מדיניות שקיבלה החלטה שאינה allow. החלטות allow אינן נרשמות (כדי להקטין את גודל הקובץ).
262
+ שורה אחת לכל מדיניות שנתנה החלטה שאינה מאפשרת. החלטות Allow לא מתועדות (כדי לשמור את הקובץ קטן).
263
263
 
264
264
  ---
265
265
 
266
- ## ארכיטקטורת לוח הבקרה
266
+ ## ארכיטקטורת לוח המחוונים
267
267
 
268
- לוח הבקרה הוא יישום **Next.js 16** המשתמש ב-App Router עם React Server Components ו-Server Actions.
268
+ לוח המחוונים הוא אפליקציית **Next.js 16** באמצעות App Router עם React Server Components ו-Server Actions.
269
269
 
270
270
  ```text
271
271
  app/
@@ -287,20 +287,20 @@ app/
287
287
 
288
288
  **זרימת נתונים:**
289
289
 
290
- - רכיבי עמוד קוראים ל-`lib/projects.ts` ו-`lib/log-entries.ts` כדי לקרוא נתוני פרויקט/סשן ישירות מ-מערכת הקבצים (אין שכבת API לקריאה).
291
- - עמוד המדיניות משתמש ב-Server Actions לכל מוטציות (toggle, params update, install/remove).
292
- - מציג הסשן מנתח את פורמט התמלילון JSONL של Claude ומרנדר ציר זמן של הודעות וקריאות כלים.
290
+ - רכיבי עמוד קוראים ל-`lib/projects.ts` ו-`lib/log-entries.ts` כדי לקרוא נתוני פרויקט/מושב ישירות מ-filesystem (ללא שכבת API לקריאות).
291
+ - עמוד המדיניות משתמש בשרת Actions עבור כל מוטציות (החלפה, עדכון params, התקנה/הסרה).
292
+ - צופה המושב מנתח פורמט תוליד JSONL של Claude ומרחיב ציר זמן של הודעות וקריאות כלים.
293
293
 
294
294
  **החלטות עיצוב מרכזיות:**
295
295
 
296
- - אין בסיס נתונים - כל מצב מתמשך הוא בקבצים רגילים (`~/.failproofai/`, `~/.claude/projects/`).
297
- - Server Actions למוטציות - אין צורך ב-REST API עבור פעולות CRUD.
298
- - React Server Components עבור עמודי קריאה - טעינה ראשונית מהירה יותר, אין חבילת לקוח עבור הבאת נתונים.
299
- - רכיבים לקוח רק כאשר יש צורך באינטראקטיביות (toggles מדיניות, חיפוש פעילות, מציג יומן).
296
+ - אין מסד נתונים - כל המצב קבוע נמצא בקבצים רגילים (`~/.failproofai/`, `~/.claude/projects/`).
297
+ - Server Actions למוטציות - אין צורך ב-REST API לפעולות CRUD.
298
+ - React Server Components עבור עמודי קריאה - קריאה ראשונית מהירה יותר, אין צרור לקוח לאחזור נתונים.
299
+ - רכיבי לקוח רק בו זה דרוש אינטראקטיביות (החלפות מדיניות, חיפוש פעילות, צופה יומן).
300
300
 
301
301
  ---
302
302
 
303
- ## פריסת קובץ
303
+ ## פריסת קבצים
304
304
 
305
305
  ```text
306
306
  failproofai/