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.
- package/.next/standalone/.failproofai/policies/review-policies.mjs +112 -0
- package/.next/standalone/.failproofai/policies/workflow-policies.mjs +2 -1
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0a~g15g._.js → [root-of-the-server]__0rh.18_._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +6 -6
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qn95h3._.js → [root-of-the-server]__0~kmh8w._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
- package/.next/standalone/.next/static/chunks/{0sme4lkv.tgn-.js → 01b~z8f1ws0rk.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0lgbwkfqmnsmc.js → 03rz6ykw-a2xi.js} +1 -1
- package/.next/standalone/.next/static/chunks/{17manv47o-~wp.js → 08t08igdql9yt.js} +1 -1
- package/.next/standalone/.next/static/chunks/09_k80d~cq2wg.js +4 -0
- package/.next/standalone/.next/static/chunks/{0ksdlt_1hucdm.js → 0bvhsa6zva2o..js} +1 -1
- package/.next/standalone/.next/static/chunks/{09ikntpt2-o9b.js → 0gbf4cphy8ksq.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0yumumfzx_f27.js → 0v.yd0kg_ld3r.js} +1 -1
- package/.next/standalone/.next/static/chunks/{13juklu.vksks.js → 0wlyoif4_kj_t.js} +1 -1
- package/.next/standalone/.next/static/chunks/{09e7drilkf1sn.js → 12simlrcfk3g2.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0em7tspi4kylh.js → 12~yi9oj8av8p.js} +2 -2
- package/.next/standalone/.next/static/chunks/{turbopack-0r26pc8h0y_-e.js → turbopack-0o7k.hakttp4k.js} +1 -1
- package/.next/standalone/CHANGELOG.md +13 -0
- package/.next/standalone/README.md +2 -2
- package/.next/standalone/bun.lock +43 -85
- package/.next/standalone/dist/cli.mjs +107 -3
- package/.next/standalone/docs/ar/architecture.mdx +65 -64
- package/.next/standalone/docs/ar/configuration.mdx +42 -42
- package/.next/standalone/docs/ar/custom-policies.mdx +62 -64
- package/.next/standalone/docs/built-in-policies.mdx +37 -0
- package/.next/standalone/docs/custom-policies.mdx +1 -1
- package/.next/standalone/docs/de/architecture.mdx +92 -92
- package/.next/standalone/docs/de/configuration.mdx +34 -34
- package/.next/standalone/docs/de/custom-policies.mdx +49 -50
- package/.next/standalone/docs/es/architecture.mdx +72 -72
- package/.next/standalone/docs/es/configuration.mdx +25 -25
- package/.next/standalone/docs/es/custom-policies.mdx +48 -49
- package/.next/standalone/docs/examples.mdx +54 -0
- package/.next/standalone/docs/fr/architecture.mdx +53 -53
- package/.next/standalone/docs/fr/configuration.mdx +25 -25
- package/.next/standalone/docs/fr/custom-policies.mdx +42 -43
- package/.next/standalone/docs/getting-started.mdx +52 -0
- package/.next/standalone/docs/he/architecture.mdx +66 -66
- package/.next/standalone/docs/he/configuration.mdx +53 -52
- package/.next/standalone/docs/he/custom-policies.mdx +72 -73
- package/.next/standalone/docs/hi/architecture.mdx +106 -106
- package/.next/standalone/docs/hi/configuration.mdx +39 -39
- package/.next/standalone/docs/hi/custom-policies.mdx +75 -76
- package/.next/standalone/docs/i18n/README.ar.md +66 -66
- package/.next/standalone/docs/i18n/README.de.md +38 -38
- package/.next/standalone/docs/i18n/README.es.md +38 -38
- package/.next/standalone/docs/i18n/README.fr.md +42 -42
- package/.next/standalone/docs/i18n/README.he.md +67 -67
- package/.next/standalone/docs/i18n/README.hi.md +70 -70
- package/.next/standalone/docs/i18n/README.it.md +62 -62
- package/.next/standalone/docs/i18n/README.ja.md +54 -54
- package/.next/standalone/docs/i18n/README.ko.md +58 -58
- package/.next/standalone/docs/i18n/README.pt-br.md +43 -43
- package/.next/standalone/docs/i18n/README.ru.md +69 -69
- package/.next/standalone/docs/i18n/README.tr.md +76 -76
- package/.next/standalone/docs/i18n/README.vi.md +70 -70
- package/.next/standalone/docs/i18n/README.zh.md +52 -52
- package/.next/standalone/docs/it/architecture.mdx +54 -53
- package/.next/standalone/docs/it/configuration.mdx +44 -45
- package/.next/standalone/docs/it/custom-policies.mdx +76 -78
- package/.next/standalone/docs/ja/architecture.mdx +93 -93
- package/.next/standalone/docs/ja/configuration.mdx +47 -47
- package/.next/standalone/docs/ja/custom-policies.mdx +62 -63
- package/.next/standalone/docs/ko/architecture.mdx +66 -66
- package/.next/standalone/docs/ko/configuration.mdx +35 -35
- package/.next/standalone/docs/ko/custom-policies.mdx +71 -72
- package/.next/standalone/docs/pt-br/architecture.mdx +55 -55
- package/.next/standalone/docs/pt-br/configuration.mdx +35 -35
- package/.next/standalone/docs/pt-br/custom-policies.mdx +60 -61
- package/.next/standalone/docs/ru/architecture.mdx +59 -60
- package/.next/standalone/docs/ru/configuration.mdx +52 -53
- package/.next/standalone/docs/ru/custom-policies.mdx +68 -69
- package/.next/standalone/docs/tr/architecture.mdx +124 -124
- package/.next/standalone/docs/tr/configuration.mdx +45 -46
- package/.next/standalone/docs/tr/custom-policies.mdx +75 -75
- package/.next/standalone/docs/vi/architecture.mdx +65 -64
- package/.next/standalone/docs/vi/configuration.mdx +41 -41
- package/.next/standalone/docs/vi/custom-policies.mdx +68 -69
- package/.next/standalone/docs/zh/architecture.mdx +67 -67
- package/.next/standalone/docs/zh/configuration.mdx +34 -34
- package/.next/standalone/docs/zh/custom-policies.mdx +53 -54
- package/.next/standalone/node_modules/@next/env/package.json +1 -1
- package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +7 -7
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/config-schema.js +10 -2
- package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/render.js +27 -20
- package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/.next/standalone/node_modules/next/package.json +15 -15
- package/.next/standalone/package.json +2 -2
- package/.next/standalone/server.js +1 -1
- package/.next/standalone/src/hooks/builtin-policies.ts +131 -0
- package/README.md +2 -2
- package/dist/cli.mjs +107 -3
- package/package.json +2 -2
- package/src/hooks/builtin-policies.ts +131 -0
- package/.next/standalone/.next/static/chunks/0_yayar~bpphd.js +0 -4
- /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → CkmOT-ZvDN-sVULinGVKT}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → CkmOT-ZvDN-sVULinGVKT}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → CkmOT-ZvDN-sVULinGVKT}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@ description: "Formato do arquivo de configuração, sistema de três escopos e r
|
|
|
4
4
|
icon: gear
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
failproofai
|
|
7
|
+
failproofai utiliza arquivos de configuração JSON para controlar quais políticas estão ativas, como elas se comportam e de onde políticas customizadas são carregadas. A configuração foi projetada para ser fácil de compartilhar com o time — faça o commit no repositório e todos os desenvolvedores terão a mesma rede de segurança para o agente.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -13,12 +13,12 @@ failproofai usa arquivos de configuração JSON para controlar quais políticas
|
|
|
13
13
|
Existem três escopos de configuração, avaliados em ordem de prioridade:
|
|
14
14
|
|
|
15
15
|
| Escopo | Caminho do arquivo | Finalidade |
|
|
16
|
-
|
|
16
|
+
|--------|--------------------|------------|
|
|
17
17
|
| **project** | `.failproofai/policies-config.json` | Configurações por repositório, commitadas no controle de versão |
|
|
18
18
|
| **local** | `.failproofai/policies-config.local.json` | Substituições pessoais por repositório, ignoradas pelo git |
|
|
19
|
-
| **global** | `~/.failproofai/policies-config.json` | Padrões do usuário
|
|
19
|
+
| **global** | `~/.failproofai/policies-config.json` | Padrões do usuário aplicados a todos os projetos |
|
|
20
20
|
|
|
21
|
-
Quando failproofai recebe um evento de hook, ele carrega e mescla os três arquivos
|
|
21
|
+
Quando failproofai recebe um evento de hook, ele carrega e mescla todos os três arquivos existentes para o diretório de trabalho atual.
|
|
22
22
|
|
|
23
23
|
### Regras de mesclagem
|
|
24
24
|
|
|
@@ -32,26 +32,26 @@ global: ["block-sudo", "sanitize-api-keys"]
|
|
|
32
32
|
resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"] ← união sem duplicatas
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
**`policyParams`** — o primeiro escopo que define
|
|
35
|
+
**`policyParams`** — o primeiro escopo que define parâmetros para uma determinada política prevalece completamente. Não há mesclagem profunda de valores dentro dos parâmetros de uma política.
|
|
36
36
|
|
|
37
37
|
```text
|
|
38
38
|
project: block-sudo → { allowPatterns: ["sudo apt-get update"] }
|
|
39
39
|
global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
|
|
40
40
|
|
|
41
|
-
resolved: { allowPatterns: ["sudo apt-get update"] } ← project
|
|
41
|
+
resolved: { allowPatterns: ["sudo apt-get update"] } ← project prevalece, global ignorado
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
```text
|
|
45
|
-
project: (sem entrada block-sudo)
|
|
46
|
-
local: (sem entrada block-sudo)
|
|
45
|
+
project: (sem entrada para block-sudo)
|
|
46
|
+
local: (sem entrada para block-sudo)
|
|
47
47
|
global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
|
|
48
48
|
|
|
49
|
-
resolved: { allowPatterns: ["sudo systemctl status"] } ←
|
|
49
|
+
resolved: { allowPatterns: ["sudo systemctl status"] } ← cai para o global
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
**`customPoliciesPath`** — o primeiro escopo que o
|
|
52
|
+
**`customPoliciesPath`** — o primeiro escopo que o definir prevalece.
|
|
53
53
|
|
|
54
|
-
**`llm`** — o primeiro escopo que o
|
|
54
|
+
**`llm`** — o primeiro escopo que o definir prevalece.
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
@@ -102,46 +102,46 @@ resolved: { allowPatterns: ["sudo systemctl status"] } ← recai para o global
|
|
|
102
102
|
|
|
103
103
|
Tipo: `string[]`
|
|
104
104
|
|
|
105
|
-
Lista de nomes de políticas a habilitar. Os nomes devem corresponder exatamente aos identificadores de política exibidos por `failproofai policies`. Consulte [Políticas
|
|
105
|
+
Lista de nomes de políticas a habilitar. Os nomes devem corresponder exatamente aos identificadores de política exibidos por `failproofai policies`. Consulte [Políticas Integradas](/pt-br/built-in-policies) para a lista completa.
|
|
106
106
|
|
|
107
|
-
Políticas
|
|
107
|
+
Políticas que não estão em `enabledPolicies` ficam inativas, mesmo que possuam entradas em `policyParams`.
|
|
108
108
|
|
|
109
109
|
### `policyParams`
|
|
110
110
|
|
|
111
111
|
Tipo: `Record<string, Record<string, unknown>>`
|
|
112
112
|
|
|
113
|
-
Substituições de parâmetros por política. A chave externa é o nome da política; as chaves internas são específicas de cada política. Cada política documenta seus parâmetros disponíveis em [Políticas
|
|
113
|
+
Substituições de parâmetros por política. A chave externa é o nome da política; as chaves internas são específicas de cada política. Cada política documenta seus parâmetros disponíveis em [Políticas Integradas](/pt-br/built-in-policies).
|
|
114
114
|
|
|
115
|
-
Se uma política possui parâmetros mas você não os especifica, os
|
|
115
|
+
Se uma política possui parâmetros, mas você não os especifica, os padrões integrados da política são utilizados. Usuários que não configuram `policyParams` obtêm comportamento idêntico ao das versões anteriores.
|
|
116
116
|
|
|
117
|
-
Chaves desconhecidas dentro do bloco de parâmetros de uma política são silenciosamente ignoradas no momento
|
|
117
|
+
Chaves desconhecidas dentro do bloco de parâmetros de uma política são silenciosamente ignoradas no momento do disparo do hook, mas sinalizadas como avisos quando você executa `failproofai policies`.
|
|
118
118
|
|
|
119
119
|
#### `hint` (transversal)
|
|
120
120
|
|
|
121
121
|
Tipo: `string` (opcional)
|
|
122
122
|
|
|
123
|
-
Uma mensagem anexada ao motivo quando uma política retorna `deny` ou `instruct`. Use
|
|
123
|
+
Uma mensagem anexada ao motivo quando uma política retorna `deny` ou `instruct`. Use para fornecer orientações acionáveis ao Claude sem modificar a política em si.
|
|
124
124
|
|
|
125
|
-
Funciona com qualquer tipo de política — integrada,
|
|
125
|
+
Funciona com qualquer tipo de política — integrada, customizada (`custom/`), convenção de projeto (`.failproofai-project/`) ou convenção do usuário (`.failproofai-user/`).
|
|
126
126
|
|
|
127
127
|
```json
|
|
128
128
|
{
|
|
129
129
|
"policyParams": {
|
|
130
130
|
"block-force-push": {
|
|
131
|
-
"hint": "
|
|
131
|
+
"hint": "Try creating a fresh branch instead."
|
|
132
132
|
},
|
|
133
133
|
"block-sudo": {
|
|
134
134
|
"allowPatterns": ["sudo apt-get"],
|
|
135
|
-
"hint": "Use apt-get
|
|
135
|
+
"hint": "Use apt-get directly without sudo."
|
|
136
136
|
},
|
|
137
137
|
"custom/my-policy": {
|
|
138
|
-
"hint": "
|
|
138
|
+
"hint": "Ask the user for approval first."
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
Quando `block-force-push` nega, Claude
|
|
144
|
+
Quando `block-force-push` nega, Claude vê: *"Force-pushing is blocked. Try creating a fresh branch instead."*
|
|
145
145
|
|
|
146
146
|
Valores não textuais e strings vazias são silenciosamente ignorados. Se `hint` não estiver definido, o comportamento permanece inalterado (compatível com versões anteriores).
|
|
147
147
|
|
|
@@ -149,32 +149,32 @@ Valores não textuais e strings vazias são silenciosamente ignorados. Se `hint`
|
|
|
149
149
|
|
|
150
150
|
Tipo: `string` (caminho absoluto)
|
|
151
151
|
|
|
152
|
-
Caminho para um arquivo JavaScript contendo políticas de hook
|
|
152
|
+
Caminho para um arquivo JavaScript contendo políticas de hook customizadas. Este valor é definido automaticamente por `failproofai policies --install --custom <path>` (o caminho é resolvido para absoluto antes de ser armazenado).
|
|
153
153
|
|
|
154
|
-
O arquivo é carregado novamente a cada evento de hook — não há cache. Consulte [Políticas
|
|
154
|
+
O arquivo é carregado novamente a cada evento de hook — não há cache. Consulte [Políticas Customizadas](/pt-br/custom-policies) para detalhes sobre como criá-las.
|
|
155
155
|
|
|
156
156
|
### Políticas baseadas em convenção
|
|
157
157
|
|
|
158
|
-
Além do `customPoliciesPath` explícito, failproofai descobre e carrega automaticamente arquivos de
|
|
158
|
+
Além do `customPoliciesPath` explícito, failproofai descobre e carrega automaticamente arquivos de política dos diretórios `.failproofai/policies/`:
|
|
159
159
|
|
|
160
160
|
| Nível | Diretório | Escopo |
|
|
161
161
|
|-------|-----------|--------|
|
|
162
162
|
| Projeto | `.failproofai/policies/` | Compartilhado com o time via controle de versão |
|
|
163
|
-
| Usuário | `~/.failproofai/policies/` | Pessoal,
|
|
163
|
+
| Usuário | `~/.failproofai/policies/` | Pessoal, aplicado a todos os projetos |
|
|
164
164
|
|
|
165
|
-
**Correspondência de arquivos:**
|
|
165
|
+
**Correspondência de arquivos:** Somente arquivos que correspondam a `*policies.{js,mjs,ts}` são carregados (ex.: `security-policies.mjs`, `workflow-policies.js`). Outros arquivos no diretório são ignorados.
|
|
166
166
|
|
|
167
|
-
**Sem necessidade de configuração:** Políticas de convenção não
|
|
167
|
+
**Sem necessidade de configuração:** Políticas de convenção não requerem entradas em `policies-config.json`. Basta colocar os arquivos no diretório e eles serão detectados no próximo evento de hook.
|
|
168
168
|
|
|
169
|
-
**Carregamento por união:**
|
|
169
|
+
**Carregamento por união:** Tanto o diretório de convenção do projeto quanto o do usuário são verificados. Todos os arquivos correspondentes de ambos os níveis são carregados (ao contrário de `customPoliciesPath`, que utiliza o primeiro escopo que prevalece).
|
|
170
170
|
|
|
171
|
-
Consulte [Políticas
|
|
171
|
+
Consulte [Políticas Customizadas](/pt-br/custom-policies) para mais detalhes e exemplos.
|
|
172
172
|
|
|
173
173
|
### `llm`
|
|
174
174
|
|
|
175
175
|
Tipo: `object` (opcional)
|
|
176
176
|
|
|
177
|
-
Configuração do cliente LLM para políticas que
|
|
177
|
+
Configuração do cliente LLM para políticas que realizam chamadas de IA. Não é necessário para a maioria das configurações.
|
|
178
178
|
|
|
179
179
|
```json
|
|
180
180
|
{
|
|
@@ -192,15 +192,15 @@ Configuração do cliente LLM para políticas que fazem chamadas de IA. Não é
|
|
|
192
192
|
Os comandos `policies --install` e `policies --uninstall` escrevem no `settings.json` do Claude Code (os pontos de entrada do hook), enquanto `policies-config.json` é o arquivo que você gerencia diretamente. Os dois são separados:
|
|
193
193
|
|
|
194
194
|
- **`settings.json`** — instrui o Claude Code a chamar `failproofai --hook <event>` a cada uso de ferramenta
|
|
195
|
-
- **`policies-config.json`** — instrui
|
|
195
|
+
- **`policies-config.json`** — instrui failproofai sobre quais políticas avaliar e com quais parâmetros
|
|
196
196
|
|
|
197
197
|
Você pode editar `policies-config.json` diretamente a qualquer momento; as alterações entram em vigor imediatamente no próximo evento de hook, sem necessidade de reinicialização.
|
|
198
198
|
|
|
199
199
|
---
|
|
200
200
|
|
|
201
|
-
## Exemplo: configuração no nível do projeto com padrões
|
|
201
|
+
## Exemplo: configuração no nível do projeto com padrões da equipe
|
|
202
202
|
|
|
203
|
-
Faça commit de `.failproofai/policies-config.json` no seu repositório:
|
|
203
|
+
Faça o commit de `.failproofai/policies-config.json` no seu repositório:
|
|
204
204
|
|
|
205
205
|
```json
|
|
206
206
|
{
|
|
@@ -219,4 +219,4 @@ Faça commit de `.failproofai/policies-config.json` no seu repositório:
|
|
|
219
219
|
}
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
-
Cada desenvolvedor pode então criar `.failproofai/policies-config.local.json` (ignorado pelo git) para substituições pessoais sem afetar os colegas de
|
|
222
|
+
Cada desenvolvedor pode então criar `.failproofai/policies-config.local.json` (ignorado pelo git) para substituições pessoais sem afetar os colegas de equipe.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Políticas Personalizadas
|
|
3
|
-
description: "Escreva suas próprias políticas em JavaScript - aplique convenções,
|
|
3
|
+
description: "Escreva suas próprias políticas em JavaScript - aplique convenções, evite desvios, detecte falhas e integre com sistemas externos"
|
|
4
4
|
icon: code
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
As políticas personalizadas permitem que você escreva regras para qualquer comportamento do agente: aplicar convenções do projeto,
|
|
7
|
+
As políticas personalizadas permitem que você escreva regras para qualquer comportamento do agente: aplicar convenções do projeto, evitar desvios, bloquear operações destrutivas, detectar agentes travados ou integrar com Slack, fluxos de aprovação e muito mais. Elas utilizam o mesmo sistema de eventos de hook e as decisões `allow`, `deny`, `instruct` das políticas integradas.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -41,32 +41,32 @@ failproofai policies --install --custom ./my-policies.js
|
|
|
41
41
|
|
|
42
42
|
### Opção 1: Baseada em convenção (recomendada)
|
|
43
43
|
|
|
44
|
-
Coloque arquivos `*policies.{js,mjs,ts}`
|
|
44
|
+
Coloque arquivos `*policies.{js,mjs,ts}` na pasta `.failproofai/policies/` e eles serão carregados automaticamente — sem flags ou alterações de configuração. Funciona como git hooks: basta adicionar o arquivo e pronto.
|
|
45
45
|
|
|
46
46
|
```
|
|
47
|
-
# Nível
|
|
47
|
+
# Nível de projeto — versionado no git, compartilhado com a equipe
|
|
48
48
|
.failproofai/policies/security-policies.mjs
|
|
49
49
|
.failproofai/policies/workflow-policies.mjs
|
|
50
50
|
|
|
51
|
-
# Nível
|
|
51
|
+
# Nível de usuário — pessoal, aplicado a todos os projetos
|
|
52
52
|
~/.failproofai/policies/my-policies.mjs
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
**Como funciona:**
|
|
56
|
-
-
|
|
57
|
-
- Os arquivos são carregados em ordem alfabética dentro de cada diretório. Use
|
|
58
|
-
-
|
|
56
|
+
- Os diretórios de projeto e usuário são verificados (união — sem prioridade por escopo)
|
|
57
|
+
- Os arquivos são carregados em ordem alfabética dentro de cada diretório. Use o prefixo `01-`, `02-` para controlar a ordem
|
|
58
|
+
- Somente arquivos que correspondem a `*policies.{js,mjs,ts}` são carregados; outros arquivos são ignorados
|
|
59
59
|
- Cada arquivo é carregado de forma independente (fail-open por arquivo)
|
|
60
|
-
- Funciona
|
|
60
|
+
- Funciona em conjunto com `--custom` explícito e políticas integradas
|
|
61
61
|
|
|
62
62
|
<Tip>
|
|
63
|
-
As políticas por convenção são a forma mais fácil de compartilhar políticas
|
|
63
|
+
As políticas por convenção são a forma mais fácil de compartilhar políticas em uma equipe. Versione `.failproofai/policies/` no git e todos os membros da equipe receberão as políticas automaticamente.
|
|
64
64
|
</Tip>
|
|
65
65
|
|
|
66
66
|
### Opção 2: Caminho de arquivo explícito
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
|
-
# Instalar com um arquivo de políticas
|
|
69
|
+
# Instalar com um arquivo de políticas personalizadas
|
|
70
70
|
failproofai policies --install --custom ./my-policies.js
|
|
71
71
|
|
|
72
72
|
# Substituir o caminho do arquivo de políticas
|
|
@@ -78,13 +78,13 @@ failproofai policies --uninstall --custom
|
|
|
78
78
|
|
|
79
79
|
O caminho absoluto resolvido é armazenado em `policies-config.json` como `customPoliciesPath`. O arquivo é carregado novamente a cada evento de hook — não há cache entre eventos.
|
|
80
80
|
|
|
81
|
-
### Usando
|
|
81
|
+
### Usando ambas juntas
|
|
82
82
|
|
|
83
83
|
As políticas por convenção e o arquivo `--custom` explícito podem coexistir. Ordem de carregamento:
|
|
84
84
|
|
|
85
85
|
1. Arquivo `customPoliciesPath` explícito (se configurado)
|
|
86
|
-
2. Arquivos de convenção do projeto (`{cwd}/.failproofai/policies/`, ordem alfabética)
|
|
87
|
-
3. Arquivos de convenção do usuário (`~/.failproofai/policies/`, ordem alfabética)
|
|
86
|
+
2. Arquivos de convenção do projeto (`{cwd}/.failproofai/policies/`, em ordem alfabética)
|
|
87
|
+
3. Arquivos de convenção do usuário (`~/.failproofai/policies/`, em ordem alfabética)
|
|
88
88
|
|
|
89
89
|
---
|
|
90
90
|
|
|
@@ -104,39 +104,38 @@ Registra uma política. Chame quantas vezes forem necessárias para múltiplas p
|
|
|
104
104
|
customPolicies.add({
|
|
105
105
|
name: string; // obrigatório - identificador único
|
|
106
106
|
description?: string; // exibido na saída de `failproofai policies`
|
|
107
|
-
match?: { events?: HookEventType[] }; // filtra por tipo de evento;
|
|
107
|
+
match?: { events?: HookEventType[] }; // filtra por tipo de evento; omitir para corresponder a todos
|
|
108
108
|
fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
|
|
109
109
|
});
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
-
###
|
|
112
|
+
### Funções auxiliares de decisão
|
|
113
113
|
|
|
114
|
-
| Função | Efeito |
|
|
115
|
-
|
|
116
|
-
| `allow()` | Permite a operação silenciosamente | A ação é segura,
|
|
114
|
+
| Função | Efeito | Quando usar |
|
|
115
|
+
|----------|--------|----------|
|
|
116
|
+
| `allow()` | Permite a operação silenciosamente | A ação é segura, sem mensagem necessária |
|
|
117
117
|
| `deny(message)` | Bloqueia a operação | O agente não deve executar esta ação |
|
|
118
118
|
| `instruct(message)` | Adiciona contexto sem bloquear | Fornece contexto adicional ao agente para mantê-lo no caminho certo |
|
|
119
119
|
|
|
120
|
-
`deny(message)` — a mensagem aparece para Claude com o prefixo `"Blocked by failproofai:"`. Um único `deny` interrompe toda avaliação
|
|
120
|
+
`deny(message)` — a mensagem aparece para Claude com o prefixo `"Blocked by failproofai:"`. Um único `deny` interrompe toda avaliação subsequente.
|
|
121
121
|
|
|
122
|
-
`instruct(message)` — a mensagem é anexada ao contexto
|
|
122
|
+
`instruct(message)` — a mensagem é anexada ao contexto do Claude para a chamada de ferramenta atual. Todas as mensagens `instruct` são acumuladas e entregues juntas.
|
|
123
123
|
|
|
124
124
|
<Tip>
|
|
125
|
-
Você pode adicionar orientações extras a qualquer mensagem `deny` ou `instruct` incluindo um campo `hint` em `policyParams` — sem necessidade de alteração
|
|
125
|
+
Você pode adicionar orientações extras a qualquer mensagem `deny` ou `instruct` incluindo um campo `hint` em `policyParams` — sem necessidade de alteração no código. Isso também funciona para políticas personalizadas (`custom/`), de convenção de projeto (`.failproofai-project/`) e de convenção de usuário (`.failproofai-user/`). Consulte [Configuração → hint](/pt-br/configuration#hint-cross-cutting) para mais detalhes.
|
|
126
126
|
</Tip>
|
|
127
127
|
|
|
128
128
|
### Mensagens informativas de allow
|
|
129
129
|
|
|
130
|
+
`allow(message)` permite a operação **e** envia uma mensagem informativa para Claude. A mensagem é entregue como `additionalContext` na resposta stdout do handler de hook — o mesmo mecanismo usado por `instruct`, mas semanticamente diferente: é uma atualização de status, não um aviso.
|
|
130
131
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
|
134
|
-
|--------|--------|------------|
|
|
135
|
-
| `allow(message)` | Permite e envia contexto para Claude | Confirmar que uma verificação passou, ou explicar por que foi ignorada |
|
|
132
|
+
| Função | Efeito | Quando usar |
|
|
133
|
+
|----------|--------|----------|
|
|
134
|
+
| `allow(message)` | Permite e envia contexto para Claude | Confirma que uma verificação passou ou explica por que foi ignorada |
|
|
136
135
|
|
|
137
136
|
Casos de uso:
|
|
138
|
-
- **Confirmações de status:** `allow("All CI checks passed.")` — informa Claude que tudo está ok
|
|
139
|
-
- **Explicações de fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — informa Claude por que uma verificação foi ignorada
|
|
137
|
+
- **Confirmações de status:** `allow("All CI checks passed.")` — informa ao Claude que tudo está ok
|
|
138
|
+
- **Explicações de fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — informa ao Claude por que uma verificação foi ignorada para que ele tenha contexto completo
|
|
140
139
|
- **Múltiplas mensagens se acumulam:** se várias políticas retornarem `allow(message)`, todas as mensagens são unidas com quebras de linha e entregues juntas
|
|
141
140
|
|
|
142
141
|
```js
|
|
@@ -147,7 +146,7 @@ customPolicies.add({
|
|
|
147
146
|
const cwd = ctx.session?.cwd;
|
|
148
147
|
if (!cwd) return allow("No working directory, skipping branch check.");
|
|
149
148
|
|
|
150
|
-
// ...
|
|
149
|
+
// ... verificar status do branch ...
|
|
151
150
|
if (allPushed) {
|
|
152
151
|
return allow("Branch is up to date with remote.");
|
|
153
152
|
}
|
|
@@ -159,27 +158,27 @@ customPolicies.add({
|
|
|
159
158
|
### Campos de `PolicyContext`
|
|
160
159
|
|
|
161
160
|
| Campo | Tipo | Descrição |
|
|
162
|
-
|
|
161
|
+
|-------|------|-------------|
|
|
163
162
|
| `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
|
|
164
|
-
| `toolName` | `string \| undefined` | A ferramenta sendo chamada (ex
|
|
163
|
+
| `toolName` | `string \| undefined` | A ferramenta sendo chamada (ex: `"Bash"`, `"Write"`, `"Read"`) |
|
|
165
164
|
| `toolInput` | `Record<string, unknown> \| undefined` | Os parâmetros de entrada da ferramenta |
|
|
166
|
-
| `payload` | `Record<string, unknown>` | Payload
|
|
165
|
+
| `payload` | `Record<string, unknown>` | Payload completo do evento bruto do Claude Code |
|
|
167
166
|
| `session` | `SessionMetadata \| undefined` | Contexto da sessão (veja abaixo) |
|
|
168
167
|
|
|
169
168
|
### Campos de `SessionMetadata`
|
|
170
169
|
|
|
171
170
|
| Campo | Tipo | Descrição |
|
|
172
|
-
|
|
173
|
-
| `sessionId` | `string` | Identificador
|
|
171
|
+
|-------|------|-------------|
|
|
172
|
+
| `sessionId` | `string` | Identificador de sessão do Claude Code |
|
|
174
173
|
| `cwd` | `string` | Diretório de trabalho da sessão do Claude Code |
|
|
175
174
|
| `transcriptPath` | `string` | Caminho para o arquivo de transcrição JSONL da sessão |
|
|
176
175
|
|
|
177
176
|
### Tipos de evento
|
|
178
177
|
|
|
179
178
|
| Evento | Quando dispara | Conteúdo de `toolInput` |
|
|
180
|
-
|
|
181
|
-
| `PreToolUse` | Antes de Claude executar uma ferramenta | A entrada da ferramenta (ex
|
|
182
|
-
| `PostToolUse` | Após
|
|
179
|
+
|-------|--------------|----------------------|
|
|
180
|
+
| `PreToolUse` | Antes de Claude executar uma ferramenta | A entrada da ferramenta (ex: `{ command: "..." }` para Bash) |
|
|
181
|
+
| `PostToolUse` | Após uma ferramenta ser concluída | A entrada da ferramenta + `tool_result` (a saída) |
|
|
183
182
|
| `Notification` | Quando Claude envia uma notificação | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - hooks devem sempre retornar `allow()`, não podem bloquear notificações |
|
|
184
183
|
| `Stop` | Quando a sessão Claude encerra | Vazio |
|
|
185
184
|
|
|
@@ -189,10 +188,10 @@ customPolicies.add({
|
|
|
189
188
|
|
|
190
189
|
As políticas são avaliadas nesta ordem:
|
|
191
190
|
|
|
192
|
-
1. Políticas
|
|
193
|
-
2. Políticas personalizadas explícitas
|
|
194
|
-
3. Políticas de convenção do projeto `.failproofai/policies/` (arquivos em ordem alfabética, ordem de `.add()` dentro de cada arquivo)
|
|
195
|
-
4. Políticas de convenção do usuário `~/.failproofai/policies/` (arquivos em ordem alfabética, ordem de `.add()` dentro de cada arquivo)
|
|
191
|
+
1. Políticas integradas (na ordem de definição)
|
|
192
|
+
2. Políticas personalizadas explícitas de `customPoliciesPath` (na ordem de `.add()`)
|
|
193
|
+
3. Políticas de convenção do projeto em `.failproofai/policies/` (arquivos em ordem alfabética, ordem de `.add()` dentro de cada arquivo)
|
|
194
|
+
4. Políticas de convenção do usuário em `~/.failproofai/policies/` (arquivos em ordem alfabética, ordem de `.add()` dentro de cada arquivo)
|
|
196
195
|
|
|
197
196
|
<Note>
|
|
198
197
|
O primeiro `deny` interrompe todas as políticas subsequentes. Todas as mensagens `instruct` são acumuladas e entregues juntas.
|
|
@@ -219,7 +218,7 @@ customPolicies.add({
|
|
|
219
218
|
});
|
|
220
219
|
```
|
|
221
220
|
|
|
222
|
-
Todas as importações relativas acessíveis a partir do arquivo de entrada são resolvidas. Isso é implementado reescrevendo as importações
|
|
221
|
+
Todas as importações relativas acessíveis a partir do arquivo de entrada são resolvidas. Isso é implementado reescrevendo as importações `from "failproofai"` para o caminho real em dist e criando arquivos `.mjs` temporários para garantir compatibilidade com ESM.
|
|
223
222
|
|
|
224
223
|
---
|
|
225
224
|
|
|
@@ -232,7 +231,7 @@ customPolicies.add({
|
|
|
232
231
|
name: "require-summary-on-stop",
|
|
233
232
|
match: { events: ["Stop"] },
|
|
234
233
|
fn: async (ctx) => {
|
|
235
|
-
//
|
|
234
|
+
// Só dispara quando a sessão encerra
|
|
236
235
|
// ctx.session.transcriptPath contém o log completo da sessão
|
|
237
236
|
return allow();
|
|
238
237
|
},
|
|
@@ -245,20 +244,20 @@ Omita `match` completamente para disparar em todos os tipos de evento.
|
|
|
245
244
|
|
|
246
245
|
## Tratamento de erros e modos de falha
|
|
247
246
|
|
|
248
|
-
|
|
247
|
+
Políticas personalizadas são **fail-open**: erros nunca bloqueiam políticas integradas nem derrubam o handler de hook.
|
|
249
248
|
|
|
250
249
|
| Falha | Comportamento |
|
|
251
|
-
|
|
252
|
-
| `customPoliciesPath` não
|
|
253
|
-
| Arquivo não encontrado | Aviso registrado em `~/.failproofai/hook.log`;
|
|
254
|
-
| Erro de sintaxe/importação (explícito) | Erro registrado em `~/.failproofai/hook.log`; políticas personalizadas explícitas
|
|
255
|
-
| Erro de sintaxe/importação (convenção) | Erro registrado; aquele arquivo é ignorado, outros arquivos de convenção
|
|
256
|
-
| `fn` lança
|
|
250
|
+
|---------|----------|
|
|
251
|
+
| `customPoliciesPath` não configurado | Nenhuma política personalizada explícita é executada; políticas por convenção e integradas continuam normalmente |
|
|
252
|
+
| Arquivo não encontrado | Aviso registrado em `~/.failproofai/hook.log`; integradas continuam |
|
|
253
|
+
| Erro de sintaxe/importação (explícito) | Erro registrado em `~/.failproofai/hook.log`; políticas personalizadas explícitas ignoradas |
|
|
254
|
+
| Erro de sintaxe/importação (convenção) | Erro registrado; aquele arquivo é ignorado, outros arquivos de convenção continuam carregando |
|
|
255
|
+
| `fn` lança exceção em tempo de execução | Erro registrado; aquele hook é tratado como `allow`; outros hooks continuam |
|
|
257
256
|
| `fn` demora mais de 10s | Timeout registrado; tratado como `allow` |
|
|
258
257
|
| Diretório de convenção ausente | Nenhuma política de convenção é executada; sem erro |
|
|
259
258
|
|
|
260
259
|
<Tip>
|
|
261
|
-
Para depurar erros
|
|
260
|
+
Para depurar erros em políticas personalizadas, acompanhe o arquivo de log:
|
|
262
261
|
|
|
263
262
|
```bash
|
|
264
263
|
tail -f ~/.failproofai/hook.log
|
|
@@ -286,7 +285,7 @@ customPolicies.add({
|
|
|
286
285
|
},
|
|
287
286
|
});
|
|
288
287
|
|
|
289
|
-
// Mantém o agente no caminho certo:
|
|
288
|
+
// Mantém o agente no caminho certo: verificar testes antes de fazer commit
|
|
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
|
+
// Evita mudanças de dependências não planejadas durante o período de freeze
|
|
305
304
|
customPolicies.add({
|
|
306
305
|
name: "dependency-freeze",
|
|
307
306
|
description: "Prevent unplanned dependency changes during freeze period",
|
|
@@ -327,11 +326,11 @@ export { customPolicies };
|
|
|
327
326
|
O diretório `examples/` contém arquivos de políticas prontos para uso:
|
|
328
327
|
|
|
329
328
|
| Arquivo | Conteúdo |
|
|
330
|
-
|
|
331
|
-
| `examples/policies-basic.js` | Cinco políticas iniciais cobrindo modos de falha
|
|
332
|
-
| `examples/policies-advanced/index.js` | Padrões avançados: importações transitivas, chamadas assíncronas,
|
|
333
|
-
| `examples/convention-policies/security-policies.mjs` | Políticas de segurança baseadas em convenção (bloquear escritas em .env,
|
|
334
|
-
| `examples/convention-policies/workflow-policies.mjs` | Políticas de fluxo de trabalho baseadas em convenção (lembretes de
|
|
329
|
+
|------|----------|
|
|
330
|
+
| `examples/policies-basic.js` | Cinco políticas iniciais cobrindo modos comuns de falha de agentes |
|
|
331
|
+
| `examples/policies-advanced/index.js` | Padrões avançados: importações transitivas, chamadas assíncronas, sanitização de saída e hooks de fim de sessão |
|
|
332
|
+
| `examples/convention-policies/security-policies.mjs` | Políticas de segurança baseadas em convenção (bloquear escritas em .env, evitar reescrita de histórico git) |
|
|
333
|
+
| `examples/convention-policies/workflow-policies.mjs` | Políticas de fluxo de trabalho baseadas em convenção (lembretes de teste, auditoria de escritas em arquivos) |
|
|
335
334
|
|
|
336
335
|
### Usando exemplos com arquivo explícito
|
|
337
336
|
|
|
@@ -342,11 +341,11 @@ failproofai policies --install --custom ./examples/policies-basic.js
|
|
|
342
341
|
### Usando exemplos baseados em convenção
|
|
343
342
|
|
|
344
343
|
```bash
|
|
345
|
-
# Copiar para o nível
|
|
344
|
+
# Copiar para o nível de projeto
|
|
346
345
|
mkdir -p .failproofai/policies
|
|
347
346
|
cp examples/convention-policies/*.mjs .failproofai/policies/
|
|
348
347
|
|
|
349
|
-
# Ou copiar para o nível
|
|
348
|
+
# Ou copiar para o nível de usuário
|
|
350
349
|
mkdir -p ~/.failproofai/policies
|
|
351
350
|
cp examples/convention-policies/*.mjs ~/.failproofai/policies/
|
|
352
351
|
```
|