failproofai 0.0.6-beta.1 → 0.0.6-beta.2

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 (160) hide show
  1. package/.next/standalone/.failproofai/policies/review-policies.mjs +4 -3
  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]__0~kmh8w._.js → [root-of-the-server]__05akje6._.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]__0g.lg8b._.js +2 -2
  56. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  57. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0rh.18_._.js → [root-of-the-server]__0i5kvry._.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/{08t08igdql9yt.js → 00j0rr7rh8ef8.js} +1 -1
  71. package/.next/standalone/.next/static/chunks/{12~yi9oj8av8p.js → 05j1px0r8yzh6.js} +2 -2
  72. package/.next/standalone/.next/static/chunks/{09_k80d~cq2wg.js → 0badv41uxa56..js} +1 -1
  73. package/.next/standalone/.next/static/chunks/{0wlyoif4_kj_t.js → 0ijk_kek9_wyx.js} +1 -1
  74. package/.next/standalone/.next/static/chunks/{0bvhsa6zva2o..js → 0ksdlt_1hucdm.js} +1 -1
  75. package/.next/standalone/.next/static/chunks/{03rz6ykw-a2xi.js → 0npb~873.wvg3.js} +1 -1
  76. package/.next/standalone/.next/static/chunks/{01b~z8f1ws0rk.js → 0xpl.oscrakvx.js} +1 -1
  77. package/.next/standalone/.next/static/chunks/{0gbf4cphy8ksq.js → 1052sguyd-.ka.js} +1 -1
  78. package/.next/standalone/.next/static/chunks/{0v.yd0kg_ld3r.js → 14cl9poem30dq.js} +1 -1
  79. package/.next/standalone/CHANGELOG.md +11 -0
  80. package/.next/standalone/dist/cli.mjs +3 -3
  81. package/.next/standalone/docs/ar/built-in-policies.mdx +124 -87
  82. package/.next/standalone/docs/ar/custom-policies.mdx +72 -72
  83. package/.next/standalone/docs/ar/examples.mdx +86 -33
  84. package/.next/standalone/docs/ar/getting-started.mdx +82 -29
  85. package/.next/standalone/docs/built-in-policies.mdx +1 -1
  86. package/.next/standalone/docs/de/built-in-policies.mdx +93 -56
  87. package/.next/standalone/docs/de/custom-policies.mdx +56 -56
  88. package/.next/standalone/docs/de/examples.mdx +72 -18
  89. package/.next/standalone/docs/de/getting-started.mdx +72 -20
  90. package/.next/standalone/docs/es/built-in-policies.mdx +115 -78
  91. package/.next/standalone/docs/es/custom-policies.mdx +55 -55
  92. package/.next/standalone/docs/es/examples.mdx +73 -19
  93. package/.next/standalone/docs/es/getting-started.mdx +72 -20
  94. package/.next/standalone/docs/fr/built-in-policies.mdx +83 -46
  95. package/.next/standalone/docs/fr/custom-policies.mdx +51 -51
  96. package/.next/standalone/docs/fr/examples.mdx +78 -24
  97. package/.next/standalone/docs/fr/getting-started.mdx +65 -13
  98. package/.next/standalone/docs/he/built-in-policies.mdx +156 -117
  99. package/.next/standalone/docs/he/custom-policies.mdx +75 -75
  100. package/.next/standalone/docs/he/examples.mdx +87 -33
  101. package/.next/standalone/docs/he/getting-started.mdx +84 -33
  102. package/.next/standalone/docs/hi/built-in-policies.mdx +101 -60
  103. package/.next/standalone/docs/hi/custom-policies.mdx +71 -70
  104. package/.next/standalone/docs/hi/examples.mdx +90 -36
  105. package/.next/standalone/docs/hi/getting-started.mdx +80 -27
  106. package/.next/standalone/docs/i18n/README.ar.md +69 -69
  107. package/.next/standalone/docs/i18n/README.de.md +46 -46
  108. package/.next/standalone/docs/i18n/README.es.md +42 -42
  109. package/.next/standalone/docs/i18n/README.fr.md +39 -39
  110. package/.next/standalone/docs/i18n/README.he.md +83 -83
  111. package/.next/standalone/docs/i18n/README.hi.md +69 -69
  112. package/.next/standalone/docs/i18n/README.it.md +72 -72
  113. package/.next/standalone/docs/i18n/README.ja.md +71 -71
  114. package/.next/standalone/docs/i18n/README.ko.md +52 -52
  115. package/.next/standalone/docs/i18n/README.pt-br.md +44 -44
  116. package/.next/standalone/docs/i18n/README.ru.md +66 -66
  117. package/.next/standalone/docs/i18n/README.tr.md +82 -83
  118. package/.next/standalone/docs/i18n/README.vi.md +70 -71
  119. package/.next/standalone/docs/i18n/README.zh.md +51 -51
  120. package/.next/standalone/docs/it/built-in-policies.mdx +118 -81
  121. package/.next/standalone/docs/it/custom-policies.mdx +69 -69
  122. package/.next/standalone/docs/it/examples.mdx +93 -39
  123. package/.next/standalone/docs/it/getting-started.mdx +73 -21
  124. package/.next/standalone/docs/ja/built-in-policies.mdx +98 -61
  125. package/.next/standalone/docs/ja/custom-policies.mdx +71 -71
  126. package/.next/standalone/docs/ja/examples.mdx +76 -22
  127. package/.next/standalone/docs/ja/getting-started.mdx +65 -13
  128. package/.next/standalone/docs/ko/built-in-policies.mdx +137 -100
  129. package/.next/standalone/docs/ko/custom-policies.mdx +67 -67
  130. package/.next/standalone/docs/ko/examples.mdx +87 -33
  131. package/.next/standalone/docs/ko/getting-started.mdx +61 -9
  132. package/.next/standalone/docs/pt-br/built-in-policies.mdx +94 -57
  133. package/.next/standalone/docs/pt-br/custom-policies.mdx +56 -56
  134. package/.next/standalone/docs/pt-br/examples.mdx +78 -24
  135. package/.next/standalone/docs/pt-br/getting-started.mdx +64 -12
  136. package/.next/standalone/docs/ru/built-in-policies.mdx +142 -105
  137. package/.next/standalone/docs/ru/custom-policies.mdx +82 -81
  138. package/.next/standalone/docs/ru/examples.mdx +77 -22
  139. package/.next/standalone/docs/ru/getting-started.mdx +74 -22
  140. package/.next/standalone/docs/tr/built-in-policies.mdx +104 -67
  141. package/.next/standalone/docs/tr/custom-policies.mdx +59 -60
  142. package/.next/standalone/docs/tr/examples.mdx +97 -42
  143. package/.next/standalone/docs/tr/getting-started.mdx +75 -23
  144. package/.next/standalone/docs/vi/built-in-policies.mdx +110 -72
  145. package/.next/standalone/docs/vi/custom-policies.mdx +68 -68
  146. package/.next/standalone/docs/vi/examples.mdx +93 -38
  147. package/.next/standalone/docs/vi/getting-started.mdx +74 -22
  148. package/.next/standalone/docs/zh/built-in-policies.mdx +132 -95
  149. package/.next/standalone/docs/zh/custom-policies.mdx +49 -49
  150. package/.next/standalone/docs/zh/examples.mdx +90 -36
  151. package/.next/standalone/docs/zh/getting-started.mdx +73 -21
  152. package/.next/standalone/package.json +1 -1
  153. package/.next/standalone/server.js +1 -1
  154. package/.next/standalone/src/hooks/builtin-policies.ts +5 -1
  155. package/dist/cli.mjs +3 -3
  156. package/package.json +1 -1
  157. package/src/hooks/builtin-policies.ts +5 -1
  158. /package/.next/standalone/.next/static/{CkmOT-ZvDN-sVULinGVKT → A9pNTZdoYJTVyPAYwQMx5}/_buildManifest.js +0 -0
  159. /package/.next/standalone/.next/static/{CkmOT-ZvDN-sVULinGVKT → A9pNTZdoYJTVyPAYwQMx5}/_clientMiddlewareManifest.js +0 -0
  160. /package/.next/standalone/.next/static/{CkmOT-ZvDN-sVULinGVKT → A9pNTZdoYJTVyPAYwQMx5}/_ssgManifest.js +0 -0
@@ -1,10 +1,11 @@
1
1
  ---
2
+ ---
2
3
  title: Пользовательские политики
3
- description: "Напишите свои собственные политики на JavaScript обеспечьте соблюдение соглашений, предотвратите отклонения, обнаружьте сбои, интегрируйте с внешними системами"
4
+ description: "Напишите собственные политики на JavaScript - обеспечьте соблюдение соглашений, предотвратите дрейф, выявляйте сбои, интегрируйтесь с внешними системами"
4
5
  icon: code
5
6
  ---
6
7
 
7
- Пользовательские политики позволяют вам написать правила для любого поведения агента: обеспечить соблюдение проектных соглашений, предотвратить отклонения, заблокировать деструктивные операции, обнаружить зависшие агенты или интегрироваться с Slack, рабочими процессами утверждения и т. д. Они используют ту же систему событий hook и решения `allow`, `deny`, `instruct`, что и встроенные политики.
8
+ Пользовательские политики позволяют писать правила для любого поведения агента: обеспечивать соблюдение соглашений проекта, предотвращать дрейф, блокировать деструктивные операции, выявлять зависшие агенты или интегрироваться со Slack, рабочими процессами одобрения и многим другим. Они используют ту же систему событий hook и решения `allow`, `deny`, `instruct`, что и встроенные политики.
8
9
 
9
10
  ---
10
11
 
@@ -39,52 +40,52 @@ failproofai policies --install --custom ./my-policies.js
39
40
 
40
41
  ## Два способа загрузки пользовательских политик
41
42
 
42
- ### Вариант 1: На основе соглашений (рекомендуется)
43
+ ### Вариант 1: На основе соглашения (рекомендуется)
43
44
 
44
- Поместите файлы `*policies.{js,mjs,ts}` в `.failproofai/policies/` и они будут автоматически загружены не требуется никаких флагов или изменений конфигурации. Это работает как git hooks: поместите файл, и он просто работает.
45
+ Разместите файлы `*policies.{js,mjs,ts}` в `.failproofai/policies/` и они будут загружены автоматически — без флагов или изменений конфигурации. Это работает как git hooks: положите файл, и он просто работает.
45
46
 
46
47
  ```
47
- # Уровень проекта — коммитится в git, общий для всей команды
48
+ # На уровне проекта — добавляется в git, совместно используется командой
48
49
  .failproofai/policies/security-policies.mjs
49
50
  .failproofai/policies/workflow-policies.mjs
50
51
 
51
- # Уровень пользователя — личный, применяется ко всем проектам
52
+ # На уровне пользователя — личные, применяются ко всем проектам
52
53
  ~/.failproofai/policies/my-policies.mjs
53
54
  ```
54
55
 
55
56
  **Как это работает:**
56
- - Оба директория проекта и пользователя сканируются (объединение — не первый находит победителя)
57
- - Файлы загружаются в алфавитном порядке в каждом директории. Используйте префикс `01-`, `02-` для управления порядком
58
- - Загружаются только файлы, соответствующие `*policies.{js,mjs,ts}`; другие файлы игнорируются
57
+ - Оба каталога (проекта и пользователя) сканируются (объединение — не первый найденный)
58
+ - Файлы загружаются в алфавитном порядке в каждом каталоге. Добавьте префикс `01-`, `02-` для управления порядком
59
+ - Загружаются только файлы, соответствующие `*policies.{js,mjs,ts}`; остальные файлы игнорируются
59
60
  - Каждый файл загружается независимо (fail-open для каждого файла)
60
- - Работает наряду с явным `--custom` и встроенными политиками
61
+ - Работает рядом с явными `--custom` и встроенными политиками
61
62
 
62
63
  <Tip>
63
- Политики соглашений — самый простой способ поделиться политиками с командой. Коммитьте `.failproofai/policies/` в git, и каждый член команды получит их автоматически.
64
+ Политики на основе соглашения — самый простой способ установить стандарт качества для вашей организации. Добавьте `.failproofai/policies/` в git, и каждый участник команды получит одни и те же правила автоматически — не требуется настройка для каждого разработчика. По мере того как ваша команда обнаруживает новые режимы сбоев, добавьте политику и отправьте её. Со временем эти политики становятся живым стандартом качества, который улучшается с каждым вкладом.
64
65
  </Tip>
65
66
 
66
- ### Вариант 2: Явный путь файла
67
+ ### Вариант 2: Явный путь к файлу
67
68
 
68
69
  ```bash
69
- # Установите с файлом пользовательских политик
70
+ # Установка с пользовательским файлом политик
70
71
  failproofai policies --install --custom ./my-policies.js
71
72
 
72
- # Замените путь файла политик
73
+ # Замена пути к файлу политик
73
74
  failproofai policies --install --custom ./new-policies.js
74
75
 
75
- # Удалите путь пользовательских политик из конфигурации
76
+ # Удаление пути к пользовательским политикам из конфигурации
76
77
  failproofai policies --uninstall --custom
77
78
  ```
78
79
 
79
80
  Разрешённый абсолютный путь сохраняется в `policies-config.json` как `customPoliciesPath`. Файл загружается заново при каждом событии hook — кеширования между событиями нет.
80
81
 
81
- ### Использование обоих вместе
82
+ ### Использование обоих способов вместе
82
83
 
83
- Политики соглашений и явный файл `--custom` могут сосуществовать. Порядок загрузки:
84
+ Политики на основе соглашения и явный файл `--custom` могут сосуществовать. Порядок загрузки:
84
85
 
85
- 1. Файл явной `customPoliciesPath` (если настроена)
86
- 2. Файлы соглашений проекта (`{cwd}/.failproofai/policies/`, в алфавитном порядке)
87
- 3. Файлы соглашений пользователя (`~/.failproofai/policies/`, в алфавитном порядке)
86
+ 1. Файл с явным `customPoliciesPath` (если настроен)
87
+ 2. Файлы соглашения проекта (`{cwd}/.failproofai/policies/`, в алфавитном порядке)
88
+ 3. Файлы соглашения пользователя (`~/.failproofai/policies/`, в алфавитном порядке)
88
89
 
89
90
  ---
90
91
 
@@ -98,45 +99,45 @@ import { customPolicies, allow, deny, instruct } from "failproofai";
98
99
 
99
100
  ### `customPolicies.add(hook)`
100
101
 
101
- Регистрирует политику. Вызовите это столько раз, сколько требуется, для нескольких политик в одном файле.
102
+ Регистрирует политику. Вызывайте столько раз, сколько нужно для нескольких политик в одном файле.
102
103
 
103
104
  ```ts
104
105
  customPolicies.add({
105
- name: string; // обязательно - уникальный идентификатор
106
+ name: string; // обязателен - уникальный идентификатор
106
107
  description?: string; // показывается в выводе `failproofai policies`
107
- match?: { events?: HookEventType[] }; // фильтр по типу события; опустите для совпадения со всеми
108
+ match?: { events?: HookEventType[] }; // фильтр по типу события; опустите для соответствия всем
108
109
  fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
109
110
  });
110
111
  ```
111
112
 
112
- ### Вспомогательные функции решений
113
+ ### Вспомогательные функции принятия решений
113
114
 
114
- | Функция | Эффект | Используйте, когда |
115
- |---------|--------|----------|
115
+ | Функция | Эффект | Когда использовать |
116
+ |---------|--------|-------------------|
116
117
  | `allow()` | Разрешить операцию молча | Действие безопасно, сообщение не требуется |
117
- | `deny(message)` | Заблокировать операцию | Агент не должен выполнять это действие |
118
- | `instruct(message)` | Добавить контекст без блокирования | Дайте агенту дополнительный контекст для правильного выполнения |
118
+ | `deny(message)` | Блокировать операцию | Агент не должен выполнять это действие |
119
+ | `instruct(message)` | Добавить контекст без блокировки | Дать агенту дополнительный контекст для остановки на пути |
119
120
 
120
- `deny(message)` сообщение появляется Claude с префиксом `"Blocked by failproofai:"`. Одно `deny` прерывает всю дальнейшую оценку.
121
+ `deny(message)` - сообщение появляется Claude с префиксом `"Blocked by failproofai:"`. Один `deny` прерывает всю дальнейшую оценку.
121
122
 
122
- `instruct(message)` сообщение добавляется к контексту Claude для текущего вызова инструмента. Все сообщения `instruct` накапливаются и доставляются вместе.
123
+ `instruct(message)` - сообщение добавляется в контекст Claude для текущего вызова инструмента. Все сообщения `instruct` накапливаются и доставляются вместе.
123
124
 
124
125
  <Tip>
125
- Вы можете добавить дополнительное руководство к любому сообщению `deny` или `instruct`, добавив поле `hint` в `policyParams` — без изменения кода. Это работает для пользовательских (`custom/`), проектных соглашений (`.failproofai-project/`) и пользовательских соглашений (`.failproofai-user/`) политик. Подробнее см. [Configuration → hint](/ru/configuration#hint-cross-cutting).
126
+ Вы можете добавить дополнительное руководство к любому сообщению `deny` или `instruct`, добавив поле `hint` в `policyParams` — без изменения кода. Это работает для пользовательских (`custom/`), проектных соглашений (`.failproofai-project/`) и пользовательских соглашений (`.failproofai-user/`) политик. Смотрите [Configuration → hint](/ru/configuration#hint-cross-cutting) для деталей.
126
127
  </Tip>
127
128
 
128
129
  ### Информационные сообщения allow
129
130
 
130
- `allow(message)` разрешает операцию **и** отправляет информационное сообщение обратно Claude. Сообщение доставляется как `additionalContext` в ответ stdout обработчика hook — того же механизма, используемого `instruct`, но семантически отличного: это обновление статуса, а не предупреждение.
131
+ `allow(message)` разрешает операцию **и** отправляет информационное сообщение обратно Claude. Сообщение доставляется как `additionalContext` в ответе stdout обработчика hook — тот же механизм, используемый `instruct`, но семантически отличающийся: это обновление статуса, а не предупреждение.
131
132
 
132
- | Функция | Эффект | Используйте, когда |
133
- |---------|--------|----------|
133
+ | Функция | Эффект | Когда использовать |
134
+ |---------|--------|-------------------|
134
135
  | `allow(message)` | Разрешить и отправить контекст Claude | Подтвердить прохождение проверки или объяснить, почему проверка была пропущена |
135
136
 
136
- Варианты использования:
137
- - **Подтверждения статуса:** `allow("All CI checks passed.")` — говорит Claude, что всё хорошо
138
- - **Объяснения fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — говорит Claude, почему проверка была пропущена, чтобы у неё был полный контекст
139
- - **Несколько сообщений накапливаются:** если несколько политик возвращают `allow(message)`, все сообщения объединяются с переводами строк и доставляются вместе
137
+ Примеры использования:
138
+ - **Подтверждения статуса:** `allow("All CI checks passed.")` — сообщает Claude, что всё хорошо
139
+ - **Fail-open объяснения:** `allow("GitHub CLI not installed, skipping CI check.")` — сообщает Claude, почему проверка была пропущена, чтобы у него был полный контекст
140
+ - **Несколько сообщений накапливаются:** если несколько политик каждая возвращает `allow(message)`, все сообщения объединяются с новыми строками и доставляются вместе
140
141
 
141
142
  ```js
142
143
  customPolicies.add({
@@ -158,43 +159,43 @@ customPolicies.add({
158
159
  ### Поля `PolicyContext`
159
160
 
160
161
  | Поле | Тип | Описание |
161
- |------|------|-------------|
162
+ |------|-----|---------|
162
163
  | `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
163
- | `toolName` | `string \| undefined` | Вызываемый инструмент (например, `"Bash"`, `"Write"`, `"Read"`) |
164
+ | `toolName` | `string \| undefined` | Вызываемый инструмент (например `"Bash"`, `"Write"`, `"Read"`) |
164
165
  | `toolInput` | `Record<string, unknown> \| undefined` | Входные параметры инструмента |
165
- | `payload` | `Record<string, unknown>` | Полное необработанное событие от Claude Code |
166
+ | `payload` | `Record<string, unknown>` | Полная необработанная полезная нагрузка события из Claude Code |
166
167
  | `session` | `SessionMetadata \| undefined` | Контекст сессии (см. ниже) |
167
168
 
168
169
  ### Поля `SessionMetadata`
169
170
 
170
171
  | Поле | Тип | Описание |
171
- |------|------|-------------|
172
+ |------|-----|---------|
172
173
  | `sessionId` | `string` | Идентификатор сессии Claude Code |
173
- | `cwd` | `string` | Рабочий директорий сессии Claude Code |
174
+ | `cwd` | `string` | Рабочий каталог сессии Claude Code |
174
175
  | `transcriptPath` | `string` | Путь к файлу транскрипта JSONL сессии |
175
176
 
176
177
  ### Типы событий
177
178
 
178
179
  | Событие | Когда срабатывает | Содержимое `toolInput` |
179
- |--------|--------------|----------------------|
180
- | `PreToolUse` | Перед запуском инструмента Claude | Входные данные инструмента (например, `{ command: "..." }` для Bash) |
181
- | `PostToolUse` | После завершения инструмента | Входные данные инструмента + `tool_result` (результат) |
180
+ |--------|------------------|----------------------|
181
+ | `PreToolUse` | Перед запуском инструмента Claude | Входные данные инструмента (например `{ command: "..." }` для Bash) |
182
+ | `PostToolUse` | После завершения инструмента | Входные данные инструмента + `tool_result` (выход) |
182
183
  | `Notification` | Когда Claude отправляет уведомление | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - hooks должны всегда возвращать `allow()`, они не могут блокировать уведомления |
183
- | `Stop` | Когда сессия Claude завершается | Пусто |
184
+ | `Stop` | Когда сессия Claude заканчивается | Пусто |
184
185
 
185
186
  ---
186
187
 
187
188
  ## Порядок оценки
188
189
 
189
- Политики оцениваются в таком порядке:
190
+ Политики оцениваются в этом порядке:
190
191
 
191
192
  1. Встроенные политики (в порядке определения)
192
193
  2. Явные пользовательские политики из `customPoliciesPath` (в порядке `.add()`)
193
- 3. Политики соглашений из проекта `.failproofai/policies/` (файлы в алфавитном порядке, `.add()` внутри)
194
- 4. Политики соглашений из пользователя `~/.failproofai/policies/` (файлы в алфавитном порядке, `.add()` внутри)
194
+ 3. Политики соглашения из проекта `.failproofai/policies/` (файлы в алфавитном порядке, `.add()` порядок внутри)
195
+ 4. Политики соглашения из пользователя `~/.failproofai/policies/` (файлы в алфавитном порядке, `.add()` порядок внутри)
195
196
 
196
197
  <Note>
197
- Первое `deny` прерывает все последующие политики. Все сообщения `instruct` накапливаются и доставляются вместе.
198
+ Первый `deny` прерывает все последующие политики. Все сообщения `instruct` накапливаются и доставляются вместе.
198
199
  </Note>
199
200
 
200
201
  ---
@@ -218,13 +219,13 @@ customPolicies.add({
218
219
  });
219
220
  ```
220
221
 
221
- Все относительные импорты, достижимые из файла входа, разрешаются. Это реализовано переписыванием импортов `from "failproofai"` на фактический путь dist и созданием временных файлов `.mjs` для обеспечения совместимости ESM.
222
+ Все относительные импорты, доступные из файла входа, разрешаются. Это реализуется путём переписывания импортов `from "failproofai"` на фактический путь dist и создания временных файлов `.mjs` для обеспечения совместимости ESM.
222
223
 
223
224
  ---
224
225
 
225
- ## Фильтрация типов событий
226
+ ## Фильтрация по типу события
226
227
 
227
- Используйте `match.events` для ограничения срабатывания политики:
228
+ Используйте `match.events` для ограничения, когда срабатывает политика:
228
229
 
229
230
  ```js
230
231
  customPolicies.add({
@@ -238,26 +239,26 @@ customPolicies.add({
238
239
  });
239
240
  ```
240
241
 
241
- Опустите `match` полностью, чтобы срабатывать на каждом типе события.
242
+ Опустите `match` полностью, чтобы срабатывать при каждом типе события.
242
243
 
243
244
  ---
244
245
 
245
- ## Обработка ошибок и режимы отказа
246
+ ## Обработка ошибок и режимы сбоя
246
247
 
247
- Пользовательские политики — **fail-open**: ошибки никогда не блокируют встроенные политики и не вызывают крах обработчика hook.
248
+ Пользовательские политики — **fail-open**: ошибки никогда не блокируют встроенные политики и не приводят к краху обработчика hook.
248
249
 
249
- | Отказ | Поведение |
250
- |---------|----------|
251
- | `customPoliciesPath` не установлена | Явные пользовательские политики не запускаются; встроенные и политики соглашений работают нормально |
252
- | Файл не найден | Предупреждение логируется в `~/.failproofai/hook.log`; встроенные работают |
253
- | Ошибка синтаксиса/импорта (явная) | Ошибка логируется в `~/.failproofai/hook.log`; явные пользовательские политики пропущены |
254
- | Ошибка синтаксиса/импорта (соглашение) | Ошибка логируется; этот файл пропущен, другие файлы соглашений всё ещё загружаются |
255
- | `fn` выбрасывает во время выполнения | Ошибка логируется; этот hook рассматривается как `allow`; другие hooks продолжают работать |
256
- | `fn` работает дольше 10 сек | Timeout логируется; рассматривается как `allow` |
257
- | Директорий соглашений отсутствует | Политики соглашений не запускаются; нет ошибки |
250
+ | Сбой | Поведение |
251
+ |------|-----------|
252
+ | `customPoliciesPath` не установлен | Явные пользовательские политики не запускаются; встроенные и политики соглашения продолжают работать нормально |
253
+ | Файл не найден | Предупреждение записывается в `~/.failproofai/hook.log`; встроенные продолжают работать |
254
+ | Синтаксическая/ошибка импорта (явная) | Ошибка записывается в `~/.failproofai/hook.log`; явные пользовательские политики пропускаются |
255
+ | Синтаксическая/ошибка импорта (соглашение) | Ошибка записывается; этот файл пропускается, остальные файлы соглашения всё ещё загружаются |
256
+ | `fn` выбрасывает исключение во время выполнения | Ошибка записывается; этот hook рассматривается как `allow`; остальные hooks продолжают работу |
257
+ | `fn` работает дольше 10 сек | Тайм-аут записывается; рассматривается как `allow` |
258
+ | Каталог соглашения отсутствует | Политики соглашения не запускаются; нет ошибки |
258
259
 
259
260
  <Tip>
260
- Для отладки ошибок пользовательской политики смотрите файл журнала:
261
+ Для отладки ошибок пользовательских политик смотрите файл журнала:
261
262
 
262
263
  ```bash
263
264
  tail -f ~/.failproofai/hook.log
@@ -272,7 +273,7 @@ tail -f ~/.failproofai/hook.log
272
273
  // my-policies.js
273
274
  import { customPolicies, allow, deny, instruct } from "failproofai";
274
275
 
275
- // Предотвратите запись агента в директорий secrets/
276
+ // Запретить агенту писать в каталог secrets/
276
277
  customPolicies.add({
277
278
  name: "block-secrets-dir",
278
279
  description: "Prevent agent from writing to secrets/ directory",
@@ -285,7 +286,7 @@ customPolicies.add({
285
286
  },
286
287
  });
287
288
 
288
- // Удерживайте агента на правильном пути: проверьте тесты перед коммитом
289
+ // Держать агента на пути: проверить тесты перед коммитом
289
290
  customPolicies.add({
290
291
  name: "remind-test-before-commit",
291
292
  description: "Keep the agent on track: verify tests pass before committing",
@@ -300,7 +301,7 @@ customPolicies.add({
300
301
  },
301
302
  });
302
303
 
303
- // Предотвратите неплановые изменения зависимостей во время заморозки
304
+ // Запретить незапланированные изменения зависимостей во время freeze
304
305
  customPolicies.add({
305
306
  name: "dependency-freeze",
306
307
  description: "Prevent unplanned dependency changes during freeze period",
@@ -323,31 +324,31 @@ export { customPolicies };
323
324
 
324
325
  ## Примеры
325
326
 
326
- Директорий `examples/` содержит готовые файлы политик:
327
+ Каталог `examples/` содержит готовые к запуску файлы политик:
327
328
 
328
329
  | Файл | Содержимое |
329
- |------|----------|
330
- | `examples/policies-basic.js` | Пять начальных политик, охватывающих частые режимы отказа агента |
331
- | `examples/policies-advanced/index.js` | Продвинутые паттерны: транзитивные импорты, асинхронные вызовы, очистка вывода и hooks завершения сессии |
332
- | `examples/convention-policies/security-policies.mjs` | Политики безопасности на основе соглашений (блокировка записи .env, предотвращение переписывания истории git) |
333
- | `examples/convention-policies/workflow-policies.mjs` | Политики рабочего процесса на основе соглашений (напоминания о тестах, аудит записей файлов) |
330
+ |------|-----------|
331
+ | `examples/policies-basic.js` | Пять начальных политик, охватывающих распространённые режимы сбоев агента |
332
+ | `examples/policies-advanced/index.js` | Продвинутые паттерны: транзитивные импорты, асинхронные вызовы, очистка выходных данных и hooks конца сессии |
333
+ | `examples/convention-policies/security-policies.mjs` | Политики безопасности на основе соглашения (блокировка записей .env, предотвращение переписывания истории git) |
334
+ | `examples/convention-policies/workflow-policies.mjs` | Политики рабочего процесса на основе соглашения (напоминания о тестах, аудит записей файлов) |
334
335
 
335
- ### Использование примеров явного файла
336
+ ### Использование примеров с явным файлом
336
337
 
337
338
  ```bash
338
339
  failproofai policies --install --custom ./examples/policies-basic.js
339
340
  ```
340
341
 
341
- ### Использование примеров на основе соглашений
342
+ ### Использование примеров на основе соглашения
342
343
 
343
344
  ```bash
344
- # Скопируйте на уровень проекта
345
+ # Копировать на уровень проекта
345
346
  mkdir -p .failproofai/policies
346
347
  cp examples/convention-policies/*.mjs .failproofai/policies/
347
348
 
348
- # Или скопируйте на уровень пользователя
349
+ # Или копировать на уровень пользователя
349
350
  mkdir -p ~/.failproofai/policies
350
351
  cp examples/convention-policies/*.mjs ~/.failproofai/policies/
351
352
  ```
352
353
 
353
- Команда install не требуется — файлы будут подхвачены автоматически при следующем событии hook.
354
+ Команда установки не требуется — файлы будут подхвачены автоматически при следующем событии hook.
@@ -1,17 +1,18 @@
1
1
  ---
2
+
2
3
  ---
3
4
  title: Примеры
4
5
  description: "Как настроить hooks для Claude Code и Agents SDK"
5
6
  icon: book-open
6
7
  ---
7
8
 
8
- Готовые к использованию примеры для типичных сценариев. Каждый показывает, как установить и чего ожидать.
9
+ Готовые примеры для распространённых сценариев. Каждый показывает, как установить и что ожидать.
9
10
 
10
11
  ---
11
12
 
12
13
  ## Настройка hooks для Claude Code
13
14
 
14
- Failproof AI интегрируется с Claude Code через его [систему hooks](https://docs.anthropic.com/en/docs/claude-code/hooks). Когда вы запускаете `failproofai policies --install`, он регистрирует команды hooks в `settings.json` Claude Code, которые срабатывают при каждом вызове инструмента.
15
+ Failproof AI интегрируется с Claude Code через его [систему hooks](https://docs.anthropic.com/en/docs/claude-code/hooks). Когда вы запускаете `failproofai policies --install`, он регистрирует hook-команды в `settings.json` Claude Code, которые срабатывают при каждом вызове инструмента.
15
16
 
16
17
  <Steps>
17
18
  <Step title="Установите failproofai">
@@ -29,14 +30,14 @@ Failproof AI интегрируется с Claude Code через его [сис
29
30
  cat ~/.claude/settings.json | grep failproofai
30
31
  ```
31
32
 
32
- Вы должны увидеть записи hooks для событий `PreToolUse`, `PostToolUse`, `Notification` и `Stop`.
33
+ Вы должны увидеть записи hook для событий `PreToolUse`, `PostToolUse`, `Notification` и `Stop`.
33
34
  </Step>
34
35
  <Step title="Запустите Claude Code">
35
36
  ```bash
36
37
  claude
37
38
  ```
38
39
 
39
- Политики теперь выполняются автоматически при каждом вызове инструмента. Попробуйте попросить Claude выполнить `sudo rm -rf /` — это будет заблокировано.
40
+ Политики теперь выполняются автоматически при каждом вызове инструмента. Попробуйте попросить Claude запустить `sudo rm -rf /` — это будет заблокировано.
40
41
  </Step>
41
42
  </Steps>
42
43
 
@@ -44,7 +45,7 @@ Failproof AI интегрируется с Claude Code через его [сис
44
45
 
45
46
  ## Настройка hooks для Agents SDK
46
47
 
47
- Если вы разрабатываете с помощью [Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk), вы можете использовать ту же систему hooks программно.
48
+ Если вы разрабатываете с использованием [Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk), вы можете использовать ту же систему hooks программно.
48
49
 
49
50
  <Steps>
50
51
  <Step title="Установите failproofai в ваш проект">
@@ -53,7 +54,7 @@ Failproof AI интегрируется с Claude Code через его [сис
53
54
  ```
54
55
  </Step>
55
56
  <Step title="Настройте hooks в вашем агенте">
56
- Передайте команды hooks при создании процесса агента. Hooks срабатывают точно так же, как в Claude Code — через stdin/stdout JSON:
57
+ Передайте hook-команды при создании процесса агента. Hooks срабатывают так же, как в Claude Code — через stdin/stdout JSON:
57
58
 
58
59
  ```bash
59
60
  failproofai --hook PreToolUse # вызывается перед каждым инструментом
@@ -89,7 +90,7 @@ Failproof AI интегрируется с Claude Code через его [сис
89
90
 
90
91
  ## Блокировка деструктивных команд
91
92
 
92
- Самая распространённая настройка — предотвращение необратимого ущерба от действий агентов.
93
+ Наиболее распространённая настройка — предотвратить необратимый ущерб от действий агентов.
93
94
 
94
95
  ```bash
95
96
  failproofai policies --install block-sudo block-rm-rf block-force-push block-curl-pipe-sh
@@ -99,25 +100,25 @@ failproofai policies --install block-sudo block-rm-rf block-force-push block-cur
99
100
  - `block-sudo` — блокирует все команды `sudo`
100
101
  - `block-rm-rf` — блокирует рекурсивное удаление файлов
101
102
  - `block-force-push` — блокирует `git push --force`
102
- - `block-curl-pipe-sh` — блокирует передачу удалённых скриптов в оболочку
103
+ - `block-curl-pipe-sh` — блокирует передачу удалённых скриптов в shell
103
104
 
104
105
  ---
105
106
 
106
107
  ## Предотвращение утечки секретов
107
108
 
108
- Остановите агентов от просмотра или утечки учётных данных в выводе инструментов.
109
+ Помешайте агентам видеть или утекать учётные данные в выводе инструментов.
109
110
 
110
111
  ```bash
111
112
  failproofai policies --install sanitize-api-keys sanitize-jwt sanitize-connection-strings sanitize-bearer-tokens
112
113
  ```
113
114
 
114
- Эти политики срабатывают на `PostToolUse` — после выполнения инструмента они очищают вывод перед тем, как агент его увидит.
115
+ Они срабатывают на `PostToolUse` — после запуска инструмента, они скрывают вывод, прежде чем агент его увидит.
115
116
 
116
117
  ---
117
118
 
118
- ## Получайте оповещения в Slack, когда агентам требуется внимание
119
+ ## Получайте оповещения Slack, когда агентам требуется внимание
119
120
 
120
- Используйте hook уведомлений для отправки оповещений о неактивности в Slack.
121
+ Используйте notification hook для отправки оповещений об ожидании в Slack.
121
122
 
122
123
  ```javascript
123
124
  import { customPolicies, allow, instruct } from "failproofai";
@@ -151,7 +152,7 @@ customPolicies.add({
151
152
  });
152
153
  ```
153
154
 
154
- Установите её:
155
+ Установите это:
155
156
 
156
157
  ```bash
157
158
  SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --custom ./slack-alerts.js
@@ -161,7 +162,7 @@ SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --c
161
162
 
162
163
  ## Держите агентов на одной ветке
163
164
 
164
- Предотвратите переключение ветвей или отправку на защищённые ветви.
165
+ Предотвратите переключение веток и отправку на защищённые ветки.
165
166
 
166
167
  ```javascript
167
168
  import { customPolicies, allow, deny } from "failproofai";
@@ -183,9 +184,9 @@ customPolicies.add({
183
184
 
184
185
  ---
185
186
 
186
- ## Требуйте тесты перед коммитом
187
+ ## Требуйте тесты перед коммитами
187
188
 
188
- Напоминайте агентам запускать тесты перед коммитом.
189
+ Напомните агентам запустить тесты перед коммитом.
189
190
 
190
191
  ```javascript
191
192
  import { customPolicies, allow, instruct } from "failproofai";
@@ -209,7 +210,7 @@ customPolicies.add({
209
210
 
210
211
  ## Заблокируйте production репозиторий
211
212
 
212
- Добавьте конфигурацию на уровне проекта, чтобы все разработчики вашей команды получили одинаковые политики.
213
+ Заколмитьте конфигурацию на уровне проекта, чтобы все разработчики в вашей команде получили одинаковые политики.
213
214
 
214
215
  Создайте `.failproofai/policies-config.json` в вашем репозитории:
215
216
 
@@ -232,7 +233,7 @@ customPolicies.add({
232
233
  }
233
234
  ```
234
235
 
235
- Затем добавьте её:
236
+ Затем заколмитьте это:
236
237
 
237
238
  ```bash
238
239
  git add .failproofai/policies-config.json
@@ -243,12 +244,66 @@ git commit -m "Add failproofai team policies"
243
244
 
244
245
  ---
245
246
 
246
- ## Больше примеров
247
+ ## Постройте стандарт качества на уровне организации с политиками соглашения
248
+
249
+ Наиболее эффективная настройка: заколмитьте `.failproofai/policies/` в ваш репозиторий с политиками, подобранными для вашего проекта. Каждый член команды получит их автоматически — без команд установки, без изменения конфигурации.
250
+
251
+ <Steps>
252
+ <Step title="Создайте директорию и добавьте политики">
253
+ ```bash
254
+ mkdir -p .failproofai/policies
255
+ ```
256
+
257
+ ```js
258
+ // .failproofai/policies/team-policies.mjs
259
+ import { customPolicies, allow, deny, instruct } from "failproofai";
260
+
261
+ // Enforce your team's preferred package manager
262
+ // (or enable the built-in prefer-package-manager policy instead)
263
+ customPolicies.add({
264
+ name: "enforce-bun",
265
+ match: { events: ["PreToolUse"] },
266
+ fn: async (ctx) => {
267
+ if (ctx.toolName !== "Bash") return allow();
268
+ const cmd = String(ctx.toolInput?.command ?? "");
269
+ if (/\bnpm\b/.test(cmd)) return deny("Use bun instead of npm.");
270
+ return allow();
271
+ },
272
+ });
273
+
274
+ // Remind the agent to run tests before committing
275
+ customPolicies.add({
276
+ name: "test-before-commit",
277
+ match: { events: ["PreToolUse"] },
278
+ fn: async (ctx) => {
279
+ if (ctx.toolName !== "Bash") return allow();
280
+ if (/git\s+commit/.test(ctx.toolInput?.command ?? "")) {
281
+ return instruct("Run tests before committing.");
282
+ }
283
+ return allow();
284
+ },
285
+ });
286
+ ```
287
+ </Step>
288
+ <Step title="Заколмитьте в git">
289
+ ```bash
290
+ git add .failproofai/policies/
291
+ git commit -m "Add team quality policies"
292
+ ```
293
+ </Step>
294
+ <Step title="Продолжайте совершенствоваться">
295
+ Когда ваша команда сталкивается с новыми сбоями, добавьте политики и отправьте. Все получат обновление при следующем `git pull`. Эти политики становятся живым стандартом качества, который растёт вместе с вашей командой.
296
+ </Step>
297
+ </Steps>
298
+
299
+ ---
300
+
301
+ ## Другие примеры
247
302
 
248
303
  Директория [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) в репозитории содержит:
249
304
 
250
305
  | Файл | Что он показывает |
251
306
  |------|---------------|
252
- | `policies-basic.js` | Базовые политики — блокировка записей в production, force-push, передачи скриптов |
253
- | `policies-notification.js` | Оповещения Slack для уведомлений о неактивности и завершении сессии |
254
- | `policies-advanced/index.js` | Переходные импорты, асинхронные hooks, очистка вывода PostToolUse, обработка события Stop |
307
+ | `policies-basic.js` | Начальные политики — блокировка записей в production, force-push, передача скриптов |
308
+ | `policies-notification.js` | Оповещения Slack для уведомлений об ожидании и завершения сессии |
309
+ | `policies-advanced/index.js` | Транзитивный импорт, асинхронные hooks, скрубинг вывода PostToolUse, обработка события Stop |