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
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: Пользовательские политики
3
- description: "Напишите свои собственные политики на JavaScript - применяйте соглашения, предотвращайте дрейф, обнаруживайте сбои, интегрируйте с внешними системами"
3
+ description: "Напишите свои собственные политики на JavaScript обеспечьте соблюдение соглашений, предотвратите отклонения, обнаружьте сбои, интегрируйте с внешними системами"
4
4
  icon: code
5
5
  ---
6
6
 
7
- Пользовательские политики позволяют написать правила для любого поведения агента: применять соглашения проекта, предотвращать дрейф, блокировать деструктивные операции, обнаруживать зависшие агенты или интегрироваться с Slack, рабочими процессами одобрения и многим другим. Они используют ту же систему событий перехватчиков и решения `allow`, `deny`, `instruct`, что и встроенные политики.
7
+ Пользовательские политики позволяют вам написать правила для любого поведения агента: обеспечить соблюдение проектных соглашений, предотвратить отклонения, заблокировать деструктивные операции, обнаружить зависшие агенты или интегрироваться с Slack, рабочими процессами утверждения и т. д. Они используют ту же систему событий hook и решения `allow`, `deny`, `instruct`, что и встроенные политики.
8
8
 
9
9
  ---
10
10
 
@@ -41,48 +41,48 @@ failproofai policies --install --custom ./my-policies.js
41
41
 
42
42
  ### Вариант 1: На основе соглашений (рекомендуется)
43
43
 
44
- Поместите файлы `*policies.{js,mjs,ts}` в `.failproofai/policies/` и они будут загружены автоматически — никаких флагов или изменений конфигурации не требуется. Это работает как git hooks: поместите файл, и он просто работает.
44
+ Поместите файлы `*policies.{js,mjs,ts}` в `.failproofai/policies/` и они будут автоматически загружены — не требуется никаких флагов или изменений конфигурации. Это работает как git hooks: поместите файл, и он просто работает.
45
45
 
46
46
  ```
47
- # На уровне проекта — коммитится в git, делится с командой
47
+ # Уровень проекта — коммитится в git, общий для всей команды
48
48
  .failproofai/policies/security-policies.mjs
49
49
  .failproofai/policies/workflow-policies.mjs
50
50
 
51
- # На уровне пользователя — личные, применяется ко всем проектам
51
+ # Уровень пользователя — личный, применяется ко всем проектам
52
52
  ~/.failproofai/policies/my-policies.mjs
53
53
  ```
54
54
 
55
55
  **Как это работает:**
56
- - Сканируются оба каталога — проекта и пользователя (объединение — не первый приоритет)
57
- - Файлы загружаются в алфавитном порядке в каждом каталоге. Используйте префиксы `01-`, `02-` для управления порядком
58
- - Загружаются только файлы, соответствующие `*policies.{js,mjs,ts}`; остальные файлы игнорируются
56
+ - Оба директория проекта и пользователя сканируются (объединение — не первый находит победителя)
57
+ - Файлы загружаются в алфавитном порядке в каждом директории. Используйте префикс `01-`, `02-` для управления порядком
58
+ - Загружаются только файлы, соответствующие `*policies.{js,mjs,ts}`; другие файлы игнорируются
59
59
  - Каждый файл загружается независимо (fail-open для каждого файла)
60
- - Работает вместе с явным `--custom` и встроенными политиками
60
+ - Работает наряду с явным `--custom` и встроенными политиками
61
61
 
62
62
  <Tip>
63
- Политики на основе соглашений — это самый простой способ поделиться политиками с командой. Закоммитьте `.failproofai/policies/` в git, и каждый член команды получит их автоматически.
63
+ Политики соглашений — самый простой способ поделиться политиками с командой. Коммитьте `.failproofai/policies/` в git, и каждый член команды получит их автоматически.
64
64
  </Tip>
65
65
 
66
- ### Вариант 2: Явный путь к файлу
66
+ ### Вариант 2: Явный путь файла
67
67
 
68
68
  ```bash
69
69
  # Установите с файлом пользовательских политик
70
70
  failproofai policies --install --custom ./my-policies.js
71
71
 
72
- # Замените путь к файлу политик
72
+ # Замените путь файла политик
73
73
  failproofai policies --install --custom ./new-policies.js
74
74
 
75
- # Удалите путь к пользовательским политикам из конфигурации
75
+ # Удалите путь пользовательских политик из конфигурации
76
76
  failproofai policies --uninstall --custom
77
77
  ```
78
78
 
79
- Разрешённый абсолютный путь сохраняется в `policies-config.json` как `customPoliciesPath`. Файл загружается заново при каждом событии перехватчикакэширования между событиями нет.
79
+ Разрешённый абсолютный путь сохраняется в `policies-config.json` как `customPoliciesPath`. Файл загружается заново при каждом событии hookкеширования между событиями нет.
80
80
 
81
- ### Использование обоих способов вместе
81
+ ### Использование обоих вместе
82
82
 
83
- Политики на основе соглашений и явный файл `--custom` могут сосуществовать. Порядок загрузки:
83
+ Политики соглашений и явный файл `--custom` могут сосуществовать. Порядок загрузки:
84
84
 
85
- 1. Явный файл `customPoliciesPath` (если настроен)
85
+ 1. Файл явной `customPoliciesPath` (если настроена)
86
86
  2. Файлы соглашений проекта (`{cwd}/.failproofai/policies/`, в алфавитном порядке)
87
87
  3. Файлы соглашений пользователя (`~/.failproofai/policies/`, в алфавитном порядке)
88
88
 
@@ -98,46 +98,45 @@ import { customPolicies, allow, deny, instruct } from "failproofai";
98
98
 
99
99
  ### `customPolicies.add(hook)`
100
100
 
101
- Регистрирует политику. Вызывайте столько раз, сколько нужно для нескольких политик в одном файле.
101
+ Регистрирует политику. Вызовите это столько раз, сколько требуется, для нескольких политик в одном файле.
102
102
 
103
103
  ```ts
104
104
  customPolicies.add({
105
105
  name: string; // обязательно - уникальный идентификатор
106
- description?: string; // отображается в выводе `failproofai policies`
107
- match?: { events?: HookEventType[] }; // фильтр по типу события; опустите, чтобы совпадал все
106
+ description?: string; // показывается в выводе `failproofai policies`
107
+ match?: { events?: HookEventType[] }; // фильтр по типу события; опустите для совпадения со всеми
108
108
  fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
109
109
  });
110
110
  ```
111
111
 
112
- ### Помощники для принятия решений
112
+ ### Вспомогательные функции решений
113
113
 
114
- | Функция | Эффект | Используйте когда |
115
- |---------|--------|------------------|
114
+ | Функция | Эффект | Используйте, когда |
115
+ |---------|--------|----------|
116
116
  | `allow()` | Разрешить операцию молча | Действие безопасно, сообщение не требуется |
117
117
  | `deny(message)` | Заблокировать операцию | Агент не должен выполнять это действие |
118
- | `instruct(message)` | Добавить контекст без блокировки | Дайте агенту дополнительный контекст для выполнения задачи |
118
+ | `instruct(message)` | Добавить контекст без блокирования | Дайте агенту дополнительный контекст для правильного выполнения |
119
119
 
120
- `deny(message)` — сообщение отображается Claude с префиксом `"Blocked by failproofai:"`. Один `deny` короткозамыкает всю дальнейшую оценку.
120
+ `deny(message)` — сообщение появляется Claude с префиксом `"Blocked by failproofai:"`. Одно `deny` прерывает всю дальнейшую оценку.
121
121
 
122
- `instruct(message)` — сообщение добавляется в контекст Claude для текущего вызова инструмента. Все сообщения `instruct` накапливаются и доставляются вместе.
122
+ `instruct(message)` — сообщение добавляется к контексту Claude для текущего вызова инструмента. Все сообщения `instruct` накапливаются и доставляются вместе.
123
123
 
124
124
  <Tip>
125
- Вы можете добавить дополнительные рекомендации к любому сообщению `deny` или `instruct`, добавив поле `hint` в `policyParams` — без изменения кода. Это работает для пользовательских (`custom/`), проектных (`failproofai-project/`) и пользовательских (`failproofai-user/`) политик. См. [Конфигурация → hint](/ru/configuration#hint-cross-cutting) для подробностей.
125
+ Вы можете добавить дополнительное руководство к любому сообщению `deny` или `instruct`, добавив поле `hint` в `policyParams` — без изменения кода. Это работает для пользовательских (`custom/`), проектных соглашений (`.failproofai-project/`) и пользовательских соглашений (`.failproofai-user/`) политик. Подробнее см. [Configuration → hint](/ru/configuration#hint-cross-cutting).
126
126
  </Tip>
127
127
 
128
128
  ### Информационные сообщения allow
129
129
 
130
+ `allow(message)` разрешает операцию **и** отправляет информационное сообщение обратно Claude. Сообщение доставляется как `additionalContext` в ответ stdout обработчика hook — того же механизма, используемого `instruct`, но семантически отличного: это обновление статуса, а не предупреждение.
130
131
 
131
- `allow(message)` разрешает операцию **и** отправляет информационное сообщение обратно Claude. Сообщение доставляется как `additionalContext` в ответе stdout обработчика перехватчика — тот же механизм, используемый `instruct`, но семантически отличается: это обновление статуса, а не предупреждение.
132
-
133
- | Функция | Эффект | Используйте когда |
134
- |---------|--------|------------------|
135
- | `allow(message)` | Разрешить и отправить контекст Claude | Подтвердить, что проверка прошла, или объяснить, почему проверка была пропущена |
132
+ | Функция | Эффект | Используйте, когда |
133
+ |---------|--------|----------|
134
+ | `allow(message)` | Разрешить и отправить контекст Claude | Подтвердить прохождение проверки или объяснить, почему проверка была пропущена |
136
135
 
137
136
  Варианты использования:
138
- - **Подтверждения статуса:** `allow("All CI checks passed.")` — указывает Claude, что всё зелено
139
- - **Объяснения fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — указывает Claude, почему проверка была пропущена, чтобы он имел полный контекст
140
- - **Несколько сообщений накапливаются:** если несколько политик возвращают `allow(message)`, все сообщения объединяются с новыми строками и доставляются вместе
137
+ - **Подтверждения статуса:** `allow("All CI checks passed.")` — говорит Claude, что всё хорошо
138
+ - **Объяснения fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — говорит Claude, почему проверка была пропущена, чтобы у неё был полный контекст
139
+ - **Несколько сообщений накапливаются:** если несколько политик возвращают `allow(message)`, все сообщения объединяются с переводами строк и доставляются вместе
141
140
 
142
141
  ```js
143
142
  customPolicies.add({
@@ -159,35 +158,35 @@ customPolicies.add({
159
158
  ### Поля `PolicyContext`
160
159
 
161
160
  | Поле | Тип | Описание |
162
- |------|-----|---------|
161
+ |------|------|-------------|
163
162
  | `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
164
- | `toolName` | `string \| undefined` | Вызываемый инструмент (например `"Bash"`, `"Write"`, `"Read"`) |
163
+ | `toolName` | `string \| undefined` | Вызываемый инструмент (например, `"Bash"`, `"Write"`, `"Read"`) |
165
164
  | `toolInput` | `Record<string, unknown> \| undefined` | Входные параметры инструмента |
166
- | `payload` | `Record<string, unknown>` | Полная необработанная полезная нагрузка события от Claude Code |
165
+ | `payload` | `Record<string, unknown>` | Полное необработанное событие от Claude Code |
167
166
  | `session` | `SessionMetadata \| undefined` | Контекст сессии (см. ниже) |
168
167
 
169
168
  ### Поля `SessionMetadata`
170
169
 
171
170
  | Поле | Тип | Описание |
172
- |------|-----|---------|
171
+ |------|------|-------------|
173
172
  | `sessionId` | `string` | Идентификатор сессии Claude Code |
174
- | `cwd` | `string` | Рабочий каталог сессии Claude Code |
173
+ | `cwd` | `string` | Рабочий директорий сессии Claude Code |
175
174
  | `transcriptPath` | `string` | Путь к файлу транскрипта JSONL сессии |
176
175
 
177
176
  ### Типы событий
178
177
 
179
178
  | Событие | Когда срабатывает | Содержимое `toolInput` |
180
- |---------|------------------|----------------------|
181
- | `PreToolUse` | До запуска инструмента Claude | Вход инструмента (например `{ command: "..." }` для Bash) |
182
- | `PostToolUse` | После завершения инструмента | Вход инструмента + `tool_result` (выход) |
183
- | `Notification` | Когда Claude отправляет уведомление | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - перехватчики должны всегда возвращать `allow()`, они не могут блокировать уведомления |
184
- | `Stop` | Когда сессия Claude заканчивается | Пусто |
179
+ |--------|--------------|----------------------|
180
+ | `PreToolUse` | Перед запуском инструмента Claude | Входные данные инструмента (например, `{ command: "..." }` для Bash) |
181
+ | `PostToolUse` | После завершения инструмента | Входные данные инструмента + `tool_result` (результат) |
182
+ | `Notification` | Когда Claude отправляет уведомление | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - hooks должны всегда возвращать `allow()`, они не могут блокировать уведомления |
183
+ | `Stop` | Когда сессия Claude завершается | Пусто |
185
184
 
186
185
  ---
187
186
 
188
187
  ## Порядок оценки
189
188
 
190
- Политики оцениваются в следующем порядке:
189
+ Политики оцениваются в таком порядке:
191
190
 
192
191
  1. Встроенные политики (в порядке определения)
193
192
  2. Явные пользовательские политики из `customPoliciesPath` (в порядке `.add()`)
@@ -195,7 +194,7 @@ customPolicies.add({
195
194
  4. Политики соглашений из пользователя `~/.failproofai/policies/` (файлы в алфавитном порядке, `.add()` внутри)
196
195
 
197
196
  <Note>
198
- Первый `deny` короткозамыкает все последующие политики. Все сообщения `instruct` накапливаются и доставляются вместе.
197
+ Первое `deny` прерывает все последующие политики. Все сообщения `instruct` накапливаются и доставляются вместе.
199
198
  </Note>
200
199
 
201
200
  ---
@@ -219,11 +218,11 @@ customPolicies.add({
219
218
  });
220
219
  ```
221
220
 
222
- Все относительные импорты, достижимые из входного файла, разрешаются. Это реализуется путём переписывания импортов `from "failproofai"` на фактический путь dist и создания временных файлов `.mjs` для обеспечения совместимости ESM.
221
+ Все относительные импорты, достижимые из файла входа, разрешаются. Это реализовано переписыванием импортов `from "failproofai"` на фактический путь dist и созданием временных файлов `.mjs` для обеспечения совместимости ESM.
223
222
 
224
223
  ---
225
224
 
226
- ## Фильтрация по типам событий
225
+ ## Фильтрация типов событий
227
226
 
228
227
  Используйте `match.events` для ограничения срабатывания политики:
229
228
 
@@ -245,20 +244,20 @@ customPolicies.add({
245
244
 
246
245
  ## Обработка ошибок и режимы отказа
247
246
 
248
- Пользовательские политики — это **fail-open**: ошибки никогда не блокируют встроенные политики и не приводят к сбою обработчика перехватчика.
247
+ Пользовательские политики — **fail-open**: ошибки никогда не блокируют встроенные политики и не вызывают крах обработчика hook.
249
248
 
250
249
  | Отказ | Поведение |
251
- |-------|----------|
252
- | `customPoliciesPath` не установлен | Явные пользовательские политики не запускаются; встроенные политики продолжают нормально работать |
253
- | Файл не найден | Предупреждение записывается в `~/.failproofai/hook.log`; встроенные политики продолжают работать |
254
- | Синтаксис/ошибка импорта (явная) | Ошибка записывается в `~/.failproofai/hook.log`; явные пользовательские политики пропускаются |
255
- | Синтаксис/ошибка импорта (соглашение) | Ошибка записывается; этот файл пропускается, другие файлы соглашений загружаются |
256
- | `fn` выбрасывает ошибку во время выполнения | Ошибка записывается; этот перехватчик рассматривается как `allow`; другие перехватчики продолжают работу |
257
- | `fn` занимает больше 10 секунд | Истечение времени ожидания записывается; рассматривается как `allow` |
258
- | Каталог соглашений отсутствует | Политики соглашений не запускаются; нет ошибки |
250
+ |---------|----------|
251
+ | `customPoliciesPath` не установлена | Явные пользовательские политики не запускаются; встроенные и политики соглашений работают нормально |
252
+ | Файл не найден | Предупреждение логируется в `~/.failproofai/hook.log`; встроенные работают |
253
+ | Ошибка синтаксиса/импорта (явная) | Ошибка логируется в `~/.failproofai/hook.log`; явные пользовательские политики пропущены |
254
+ | Ошибка синтаксиса/импорта (соглашение) | Ошибка логируется; этот файл пропущен, другие файлы соглашений всё ещё загружаются |
255
+ | `fn` выбрасывает во время выполнения | Ошибка логируется; этот hook рассматривается как `allow`; другие hooks продолжают работать |
256
+ | `fn` работает дольше 10 сек | Timeout логируется; рассматривается как `allow` |
257
+ | Директорий соглашений отсутствует | Политики соглашений не запускаются; нет ошибки |
259
258
 
260
259
  <Tip>
261
- Для отладки ошибок пользовательских политик используйте файл журнала:
260
+ Для отладки ошибок пользовательской политики смотрите файл журнала:
262
261
 
263
262
  ```bash
264
263
  tail -f ~/.failproofai/hook.log
@@ -273,7 +272,7 @@ tail -f ~/.failproofai/hook.log
273
272
  // my-policies.js
274
273
  import { customPolicies, allow, deny, instruct } from "failproofai";
275
274
 
276
- // Предотвращайте запись агента в каталог secrets/
275
+ // Предотвратите запись агента в директорий secrets/
277
276
  customPolicies.add({
278
277
  name: "block-secrets-dir",
279
278
  description: "Prevent agent from writing to secrets/ directory",
@@ -286,7 +285,7 @@ customPolicies.add({
286
285
  },
287
286
  });
288
287
 
289
- // Держите агента на правильном пути: проверьте тесты перед коммитом
288
+ // Удерживайте агента на правильном пути: проверьте тесты перед коммитом
290
289
  customPolicies.add({
291
290
  name: "remind-test-before-commit",
292
291
  description: "Keep the agent on track: verify tests pass before committing",
@@ -301,7 +300,7 @@ customPolicies.add({
301
300
  },
302
301
  });
303
302
 
304
- // Предотвращайте незапланированные изменения зависимостей во время заморозки
303
+ // Предотвратите неплановые изменения зависимостей во время заморозки
305
304
  customPolicies.add({
306
305
  name: "dependency-freeze",
307
306
  description: "Prevent unplanned dependency changes during freeze period",
@@ -324,16 +323,16 @@ export { customPolicies };
324
323
 
325
324
  ## Примеры
326
325
 
327
- Каталог `examples/` содержит готовые файлы политик:
326
+ Директорий `examples/` содержит готовые файлы политик:
328
327
 
329
328
  | Файл | Содержимое |
330
- |------|-----------|
331
- | `examples/policies-basic.js` | Пять начальных политик, охватывающих типичные режимы отказа агента |
332
- | `examples/policies-advanced/index.js` | Продвинутые паттерны: транзитивные импорты, асинхронные вызовы, очистка выводов и перехватчики завершения сессии |
333
- | `examples/convention-policies/security-policies.mjs` | Политики безопасности на основе соглашений (блокировка записей .env, предотвращение переписывания истории git) |
329
+ |------|----------|
330
+ | `examples/policies-basic.js` | Пять начальных политик, охватывающих частые режимы отказа агента |
331
+ | `examples/policies-advanced/index.js` | Продвинутые паттерны: транзитивные импорты, асинхронные вызовы, очистка вывода и hooks завершения сессии |
332
+ | `examples/convention-policies/security-policies.mjs` | Политики безопасности на основе соглашений (блокировка записи .env, предотвращение переписывания истории git) |
334
333
  | `examples/convention-policies/workflow-policies.mjs` | Политики рабочего процесса на основе соглашений (напоминания о тестах, аудит записей файлов) |
335
334
 
336
- ### Использование примеров явных файлов
335
+ ### Использование примеров явного файла
337
336
 
338
337
  ```bash
339
338
  failproofai policies --install --custom ./examples/policies-basic.js
@@ -351,4 +350,4 @@ mkdir -p ~/.failproofai/policies
351
350
  cp examples/convention-policies/*.mjs ~/.failproofai/policies/
352
351
  ```
353
352
 
354
- Команда установки не требуется — файлы выбираются автоматически при следующем событии перехватчика.
353
+ Команда install не требуется — файлы будут подхвачены автоматически при следующем событии hook.