failproofai 0.0.5 → 0.0.6-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +3 -3
- 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/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/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/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/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/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/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/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]__0a~g15g._.js → [root-of-the-server]__0.~fd7s._.js} +2 -2
- 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]__0qn95h3._.js → [root-of-the-server]__0a.nuas._.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]__0w6l33k._.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 +3 -3
- 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/{09ikntpt2-o9b.js → 0.z51twd.0l5z.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0sme4lkv.tgn-.js → 0hctoh28rg838.js} +1 -1
- package/.next/standalone/.next/static/chunks/{13juklu.vksks.js → 0hplx-8c-4vpv.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0em7tspi4kylh.js → 0maq.q1t.ri85.js} +2 -2
- package/.next/standalone/.next/static/chunks/{17manv47o-~wp.js → 0teq8wdh3po1n.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0lgbwkfqmnsmc.js → 0uc0um_uz51m_.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0yumumfzx_f27.js → 0ul6fk-z.6k-0.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0_yayar~bpphd.js → 0w9lwqy0-v1dk.js} +1 -1
- package/.next/standalone/CHANGELOG.md +5 -0
- package/.next/standalone/dist/cli.mjs +19 -2
- 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/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/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/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/package.json +1 -1
- package/.next/standalone/server.js +1 -1
- package/.next/standalone/src/hooks/builtin-policies.ts +30 -0
- package/dist/cli.mjs +19 -2
- package/package.json +1 -1
- package/src/hooks/builtin-policies.ts +30 -0
- /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@ description: "Định dạng tệp cấu hình, hệ thống ba phạm vi và qu
|
|
|
4
4
|
icon: gear
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
failproofai sử dụng các tệp cấu hình JSON để kiểm soát
|
|
7
|
+
failproofai sử dụng các tệp cấu hình JSON để kiểm soát những chính sách nào đang hoạt động, cách chúng hoạt động và nơi các chính sách tùy chỉnh được tải. Cấu hình được thiết kế để dễ dàng chia sẻ với đội của bạn - cam kết nó vào kho của bạn và mỗi nhà phát triển sẽ nhận được cùng một lưới bảo mạng cho agent.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -13,32 +13,32 @@ failproofai sử dụng các tệp cấu hình JSON để kiểm soát các chí
|
|
|
13
13
|
Có ba phạm vi cấu hình, được đánh giá theo thứ tự ưu tiên:
|
|
14
14
|
|
|
15
15
|
| Phạm vi | Đường dẫn tệp | Mục đích |
|
|
16
|
-
|
|
17
|
-
| **project** | `.failproofai/policies-config.json` | Cài đặt
|
|
18
|
-
| **local** | `.failproofai/policies-config.local.json` | Ghi đè cá nhân
|
|
19
|
-
| **global** | `~/.failproofai/policies-config.json` |
|
|
16
|
+
|-------|-----------|---------|
|
|
17
|
+
| **project** | `.failproofai/policies-config.json` | Cài đặt cho mỗi kho, được cam kết vào kiểm soát phiên bản |
|
|
18
|
+
| **local** | `.failproofai/policies-config.local.json` | Ghi đè cá nhân cho mỗi kho, được gitignore |
|
|
19
|
+
| **global** | `~/.failproofai/policies-config.json` | Mặc định cấp người dùng trên tất cả các dự án |
|
|
20
20
|
|
|
21
|
-
Khi failproofai nhận
|
|
21
|
+
Khi failproofai nhận được sự kiện hook, nó tải và hợp nhất tất cả ba tệp tồn tại cho thư mục làm việc hiện tại.
|
|
22
22
|
|
|
23
23
|
### Quy tắc hợp nhất
|
|
24
24
|
|
|
25
|
-
**`enabledPolicies`** - hợp của tất cả ba phạm vi. Một chính sách được
|
|
25
|
+
**`enabledPolicies`** - hợp nhất của tất cả ba phạm vi. Một chính sách được bật ở bất kỳ cấp độ nào là hoạt động.
|
|
26
26
|
|
|
27
27
|
```text
|
|
28
28
|
project: ["block-sudo"]
|
|
29
29
|
local: ["block-rm-rf"]
|
|
30
30
|
global: ["block-sudo", "sanitize-api-keys"]
|
|
31
31
|
|
|
32
|
-
resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"] ← loại bỏ trùng lặp
|
|
32
|
+
resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"] ← hợp nhất, loại bỏ trùng lặp
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
**`policyParams`** - phạm vi đầu tiên xác định các tham số cho một chính sách
|
|
35
|
+
**`policyParams`** - phạm vi đầu tiên xác định các tham số cho một chính sách cụ thể sẽ thắng hoàn toàn. Không có hợp nhất sâu các giá trị trong các tham số của một chính sách.
|
|
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 thắng, global bị bỏ qua
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
```text
|
|
@@ -49,9 +49,9 @@ global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
|
|
|
49
49
|
resolved: { allowPatterns: ["sudo systemctl status"] } ← rơi xuống global
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
**`customPoliciesPath`** - phạm vi đầu tiên xác định nó sẽ
|
|
52
|
+
**`customPoliciesPath`** - phạm vi đầu tiên xác định nó sẽ thắng.
|
|
53
53
|
|
|
54
|
-
**`llm`** - phạm vi đầu tiên xác định nó sẽ
|
|
54
|
+
**`llm`** - phạm vi đầu tiên xác định nó sẽ thắng.
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
@@ -102,48 +102,48 @@ resolved: { allowPatterns: ["sudo systemctl status"] } ← rơi xuống global
|
|
|
102
102
|
|
|
103
103
|
Loại: `string[]`
|
|
104
104
|
|
|
105
|
-
Danh sách tên chính sách
|
|
105
|
+
Danh sách tên chính sách để bật. Tên phải khớp chính xác với các định danh chính sách được hiển thị bởi `failproofai policies`. Xem [Built-in Policies](/vi/built-in-policies) để có danh sách đầy đủ.
|
|
106
106
|
|
|
107
|
-
Các chính sách không
|
|
107
|
+
Các chính sách không có trong `enabledPolicies` không hoạt động, ngay cả khi chúng có các mục trong `policyParams`.
|
|
108
108
|
|
|
109
109
|
### `policyParams`
|
|
110
110
|
|
|
111
111
|
Loại: `Record<string, Record<string, unknown>>`
|
|
112
112
|
|
|
113
|
-
Ghi đè tham số cho mỗi chính sách. Khóa bên ngoài là tên chính sách; các khóa bên trong là
|
|
113
|
+
Ghi đè tham số cho mỗi chính sách. Khóa bên ngoài là tên chính sách; các khóa bên trong là dành riêng cho chính sách. Mỗi chính sách ghi lại các tham số có sẵn của nó trong [Built-in Policies](/vi/built-in-policies).
|
|
114
114
|
|
|
115
|
-
Nếu một chính sách có các tham số nhưng bạn không chỉ định chúng, các
|
|
115
|
+
Nếu một chính sách có các tham số nhưng bạn không chỉ định chúng, các mặc định tích hợp của chính sách sẽ được sử dụng. Những người dùng không cấu hình `policyParams` sẽ nhận được hành vi giống hệt như các phiên bản trước đó.
|
|
116
116
|
|
|
117
|
-
Các khóa không xác định bên trong khối tham số của một chính sách
|
|
117
|
+
Các khóa không xác định bên trong khối tham số của một chính sách được bỏ qua âm thầm khi hook kích hoạt nhưng được gắn cờ là cảnh báo khi bạn chạy `failproofai policies`.
|
|
118
118
|
|
|
119
|
-
#### `hint` (
|
|
119
|
+
#### `hint` (xuyên suốt)
|
|
120
120
|
|
|
121
121
|
Loại: `string` (tùy chọn)
|
|
122
122
|
|
|
123
|
-
Một
|
|
123
|
+
Một tin nhắn được nối thêm vào lý do khi một chính sách trả về `deny` hoặc `instruct`. Sử dụng nó để cung cấp hướng dẫn hành động cho Claude mà không cần sửa đổi chính sách.
|
|
124
124
|
|
|
125
|
-
Hoạt động với bất kỳ loại chính sách nào — tích hợp, tùy chỉnh (`custom/`), quy ước dự án (`.failproofai-project/`), hoặc quy ước người dùng (`.failproofai-user/`).
|
|
125
|
+
Hoạt động với bất kỳ loại chính sách nào — tích hợp sẵn, tùy chỉnh (`custom/`), quy ước dự án (`.failproofai-project/`), hoặc quy ước người dùng (`.failproofai-user/`).
|
|
126
126
|
|
|
127
127
|
```json
|
|
128
128
|
{
|
|
129
129
|
"policyParams": {
|
|
130
130
|
"block-force-push": {
|
|
131
|
-
"hint": "
|
|
131
|
+
"hint": "Hãy thử tạo một nhánh mới thay vào đó."
|
|
132
132
|
},
|
|
133
133
|
"block-sudo": {
|
|
134
134
|
"allowPatterns": ["sudo apt-get"],
|
|
135
|
-
"hint": "
|
|
135
|
+
"hint": "Sử dụng apt-get trực tiếp mà không cần sudo."
|
|
136
136
|
},
|
|
137
137
|
"custom/my-policy": {
|
|
138
|
-
"hint": "
|
|
138
|
+
"hint": "Hãy yêu cầu người dùng phê duyệt trước."
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
Khi `block-force-push` từ chối, Claude sẽ thấy: *"Force-pushing
|
|
144
|
+
Khi `block-force-push` từ chối, Claude sẽ thấy: *"Force-pushing bị chặn. Hãy thử tạo một nhánh mới thay vào đó."*
|
|
145
145
|
|
|
146
|
-
Các giá trị không phải chuỗi và chuỗi
|
|
146
|
+
Các giá trị không phải chuỗi và chuỗi trống bị bỏ qua âm thầm. Nếu `hint` không được đặt, hành vi không thay đổi (tương thích ngược).
|
|
147
147
|
|
|
148
148
|
### `customPoliciesPath`
|
|
149
149
|
|
|
@@ -151,30 +151,30 @@ Loại: `string` (đường dẫn tuyệt đối)
|
|
|
151
151
|
|
|
152
152
|
Đường dẫn đến tệp JavaScript chứa các chính sách hook tùy chỉnh. Điều này được đặt tự động bởi `failproofai policies --install --custom <path>` (đường dẫn được giải quyết thành tuyệt đối trước khi được lưu trữ).
|
|
153
153
|
|
|
154
|
-
Tệp được tải
|
|
154
|
+
Tệp được tải lại trên mỗi sự kiện hook - không có bộ nhớ đệm. Xem [Custom Policies](/vi/custom-policies) để biết chi tiết về tác giả.
|
|
155
155
|
|
|
156
156
|
### Chính sách dựa trên quy ước
|
|
157
157
|
|
|
158
|
-
Ngoài `customPoliciesPath` rõ ràng, failproofai tự động
|
|
158
|
+
Ngoài `customPoliciesPath` rõ ràng, failproofai tự động khám phá và tải các tệp chính sách từ các thư mục `.failproofai/policies/`:
|
|
159
159
|
|
|
160
|
-
|
|
|
161
|
-
|
|
162
|
-
| Dự án | `.failproofai/policies/` |
|
|
160
|
+
| Cấp độ | Thư mục | Phạm vi |
|
|
161
|
+
|-------|-----------|-------|
|
|
162
|
+
| Dự án | `.failproofai/policies/` | Được chia sẻ với đội thông qua kiểm soát phiên bản |
|
|
163
163
|
| Người dùng | `~/.failproofai/policies/` | Cá nhân, áp dụng cho tất cả các dự án |
|
|
164
164
|
|
|
165
|
-
**Khớp tệp:** Chỉ các tệp khớp `*policies.{js,mjs,ts}` được tải (ví
|
|
165
|
+
**Khớp tệp:** Chỉ các tệp khớp với `*policies.{js,mjs,ts}` được tải (ví dụ `security-policies.mjs`, `workflow-policies.js`). Các tệp khác trong thư mục bị bỏ qua.
|
|
166
166
|
|
|
167
|
-
**Không cần cấu hình:**
|
|
167
|
+
**Không cần cấu hình:** Các chính sách quy ước không yêu cầu các mục trong `policies-config.json`. Chỉ cần thả các tệp vào thư mục và chúng sẽ được chọn lên trên sự kiện hook tiếp theo.
|
|
168
168
|
|
|
169
|
-
**Tải
|
|
169
|
+
**Tải union:** Cả hai thư mục quy ước dự án và người dùng đều được quét. Tất cả các tệp phù hợp từ cả hai cấp độ được tải (không giống như `customPoliciesPath` sử dụng first-scope-wins).
|
|
170
170
|
|
|
171
|
-
Xem [
|
|
171
|
+
Xem [Custom Policies](/vi/custom-policies) để biết thêm chi tiết và ví dụ.
|
|
172
172
|
|
|
173
173
|
### `llm`
|
|
174
174
|
|
|
175
175
|
Loại: `object` (tùy chọn)
|
|
176
176
|
|
|
177
|
-
Cấu hình máy khách LLM cho các chính sách thực hiện các lệnh gọi AI. Không bắt buộc
|
|
177
|
+
Cấu hình máy khách LLM cho các chính sách thực hiện các lệnh gọi AI. Không bắt buộc cho hầu hết các thiết lập.
|
|
178
178
|
|
|
179
179
|
```json
|
|
180
180
|
{
|
|
@@ -189,18 +189,18 @@ Cấu hình máy khách LLM cho các chính sách thực hiện các lệnh gọ
|
|
|
189
189
|
|
|
190
190
|
## Quản lý cấu hình từ CLI
|
|
191
191
|
|
|
192
|
-
Các lệnh `policies --install` và `policies --uninstall` ghi vào `settings.json` của Claude Code (các điểm
|
|
192
|
+
Các lệnh `policies --install` và `policies --uninstall` ghi vào `settings.json` của Claude Code (các điểm nhập hook), trong khi `policies-config.json` là tệp bạn quản lý trực tiếp. Hai tệp này là riêng biệt:
|
|
193
193
|
|
|
194
194
|
- **`settings.json`** - yêu cầu Claude Code gọi `failproofai --hook <event>` trên mỗi lần sử dụng công cụ
|
|
195
|
-
- **`policies-config.json`** - yêu cầu failproofai đánh giá chính sách nào và với những tham số nào
|
|
195
|
+
- **`policies-config.json`** - yêu cầu failproofai đánh giá những chính sách nào và với những tham số nào
|
|
196
196
|
|
|
197
|
-
Bạn có thể chỉnh sửa `policies-config.json` trực tiếp bất kỳ lúc nào;
|
|
197
|
+
Bạn có thể chỉnh sửa `policies-config.json` trực tiếp bất kỳ lúc nào; những thay đổi có hiệu lực ngay lập tức trên sự kiện hook tiếp theo mà không cần khởi động lại.
|
|
198
198
|
|
|
199
199
|
---
|
|
200
200
|
|
|
201
|
-
## Ví dụ: cấu hình cấp dự án với
|
|
201
|
+
## Ví dụ: cấu hình cấp dự án với mặc định đội
|
|
202
202
|
|
|
203
|
-
Cam kết `.failproofai/policies-config.json` vào
|
|
203
|
+
Cam kết `.failproofai/policies-config.json` vào kho của bạn:
|
|
204
204
|
|
|
205
205
|
```json
|
|
206
206
|
{
|
|
@@ -219,4 +219,4 @@ Cam kết `.failproofai/policies-config.json` vào repo của bạn:
|
|
|
219
219
|
}
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
-
|
|
222
|
+
Sau đó, mỗi nhà phát triển có thể tạo `.failproofai/policies-config.local.json` (được gitignore) cho các ghi đè cá nhân mà không ảnh hưởng đến đồng đội.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: Chính sách
|
|
3
|
-
description: "Viết các quy tắc riêng
|
|
2
|
+
title: Chính sách tùy chỉnh
|
|
3
|
+
description: "Viết các quy tắc của riêng bạn bằng JavaScript - thực thi các quy ước, ngăn chặn độ dịch, phát hiện lỗi, tích hợp với các hệ thống bên ngoài"
|
|
4
4
|
icon: code
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Chính sách tùy chỉnh cho phép bạn viết các quy tắc cho bất kỳ hành
|
|
7
|
+
Chính sách tùy chỉnh cho phép bạn viết các quy tắc cho bất kỳ hành vi agent nào: thực thi quy ước dự án, ngăn chặn độ dịch, hạn chế các phép toán có tính chất phá hoại, phát hiện các agent bị kẹt, hoặc tích hợp với Slack, quy trình phê duyệt, và nhiều hơn nữa. Chúng sử dụng cùng hệ thống sự kiện hook và các quyết định `allow`, `deny`, `instruct` như các chính sách tích hợp sẵn.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -39,31 +39,31 @@ failproofai policies --install --custom ./my-policies.js
|
|
|
39
39
|
|
|
40
40
|
## Hai cách để tải chính sách tùy chỉnh
|
|
41
41
|
|
|
42
|
-
###
|
|
42
|
+
### Tùy chọn 1: Dựa trên quy ước (được khuyên dùng)
|
|
43
43
|
|
|
44
|
-
Thả các tệp `*policies.{js,mjs,ts}` vào `.failproofai/policies/` và chúng sẽ được tải tự động — không cần cờ hoặc thay đổi cấu hình.
|
|
44
|
+
Thả các tệp `*policies.{js,mjs,ts}` vào `.failproofai/policies/` và chúng sẽ được tải tự động — không cần cờ hoặc thay đổi cấu hình. Điều này hoạt động giống như git hooks: thả một tệp, nó chỉ hoạt động.
|
|
45
45
|
|
|
46
46
|
```
|
|
47
|
-
#
|
|
47
|
+
# Cấp độ dự án — được cam kết với git, được chia sẻ với nhóm
|
|
48
48
|
.failproofai/policies/security-policies.mjs
|
|
49
49
|
.failproofai/policies/workflow-policies.mjs
|
|
50
50
|
|
|
51
|
-
#
|
|
51
|
+
# Cấp độ người dùng — cá nhân, áp dụng cho tất cả các dự án
|
|
52
52
|
~/.failproofai/policies/my-policies.mjs
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
**Cách hoạt động:**
|
|
56
|
-
- Cả hai thư mục dự án và người dùng được quét (
|
|
57
|
-
- Các tệp được tải theo thứ tự bảng chữ cái trong mỗi thư mục.
|
|
56
|
+
- Cả hai thư mục dự án và người dùng được quét (liên hợp — không phải first-scope-wins)
|
|
57
|
+
- Các tệp được tải theo thứ tự bảng chữ cái trong mỗi thư mục. Đặt tiền tố với `01-`, `02-` để kiểm soát thứ tự
|
|
58
58
|
- Chỉ các tệp khớp với `*policies.{js,mjs,ts}` được tải; các tệp khác bị bỏ qua
|
|
59
|
-
- Mỗi tệp được tải độc lập (fail-open
|
|
60
|
-
- Hoạt động cùng với các chính sách `--custom`
|
|
59
|
+
- Mỗi tệp được tải độc lập (fail-open trên mỗi tệp)
|
|
60
|
+
- Hoạt động cùng với các chính sách `--custom` tường minh và chính sách tích hợp sẵn
|
|
61
61
|
|
|
62
62
|
<Tip>
|
|
63
|
-
Chính sách quy ước là cách dễ nhất để chia sẻ chính sách trên toàn
|
|
63
|
+
Chính sách quy ước là cách dễ nhất để chia sẻ chính sách trên toàn nhóm. Cam kết `.failproofai/policies/` với git và mỗi thành viên nhóm sẽ nhận được chúng tự động.
|
|
64
64
|
</Tip>
|
|
65
65
|
|
|
66
|
-
###
|
|
66
|
+
### Tùy chọn 2: Đường dẫn tệp tường minh
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
69
|
# Cài đặt với tệp chính sách tùy chỉnh
|
|
@@ -76,13 +76,13 @@ failproofai policies --install --custom ./new-policies.js
|
|
|
76
76
|
failproofai policies --uninstall --custom
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
Đường dẫn tuyệt đối được phân giải được lưu trữ trong `policies-config.json` dưới dạng `customPoliciesPath`. Tệp được tải lại trên mỗi sự kiện hook - không có bộ
|
|
79
|
+
Đường dẫn tuyệt đối đã được phân giải được lưu trữ trong `policies-config.json` dưới dạng `customPoliciesPath`. Tệp được tải lại trên mỗi sự kiện hook - không có bộ đệm ẩm giữa các sự kiện.
|
|
80
80
|
|
|
81
81
|
### Sử dụng cả hai cùng nhau
|
|
82
82
|
|
|
83
|
-
Chính sách quy ước và tệp `--custom`
|
|
83
|
+
Chính sách quy ước và tệp `--custom` tường minh có thể cùng tồn tại. Thứ tự tải:
|
|
84
84
|
|
|
85
|
-
1. Tệp `customPoliciesPath`
|
|
85
|
+
1. Tệp `customPoliciesPath` tường minh (nếu được cấu hình)
|
|
86
86
|
2. Tệp quy ước dự án (`{cwd}/.failproofai/policies/`, theo thứ tự bảng chữ cái)
|
|
87
87
|
3. Tệp quy ước người dùng (`~/.failproofai/policies/`, theo thứ tự bảng chữ cái)
|
|
88
88
|
|
|
@@ -98,7 +98,7 @@ import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
|
98
98
|
|
|
99
99
|
### `customPolicies.add(hook)`
|
|
100
100
|
|
|
101
|
-
Đăng ký một chính sách. Gọi
|
|
101
|
+
Đăng ký một chính sách. Gọi nhiều lần nếu cần cho nhiều chính sách trong cùng một tệp.
|
|
102
102
|
|
|
103
103
|
```ts
|
|
104
104
|
customPolicies.add({
|
|
@@ -111,33 +111,32 @@ customPolicies.add({
|
|
|
111
111
|
|
|
112
112
|
### Trợ giúp quyết định
|
|
113
113
|
|
|
114
|
-
| Hàm |
|
|
115
|
-
|
|
114
|
+
| Hàm | Hiệu ứng | Sử dụng khi |
|
|
115
|
+
|----------|--------|----------|
|
|
116
116
|
| `allow()` | Cho phép hoạt động im lặng | Hành động an toàn, không cần tin nhắn |
|
|
117
117
|
| `deny(message)` | Chặn hoạt động | Agent không nên thực hiện hành động này |
|
|
118
|
-
| `instruct(message)` | Thêm
|
|
118
|
+
| `instruct(message)` | Thêm ngữ cảnh mà không chặn | Cung cấp ngữ cảnh bổ sung để agent ở đúng track |
|
|
119
119
|
|
|
120
|
-
`deny(message)` -
|
|
120
|
+
`deny(message)` - tin nhắn xuất hiện với Claude với tiền tố `"Blocked by failproofai:"`. Một `deny` duy nhất sẽ làm ngắn mạch tất cả đánh giá tiếp theo.
|
|
121
121
|
|
|
122
|
-
`instruct(message)` -
|
|
122
|
+
`instruct(message)` - tin nhắn được thêm vào ngữ cảnh của Claude cho cuộc gọi công cụ hiện tại. Tất cả các tin nhắn `instruct` được tích lũy và gửi cùng nhau.
|
|
123
123
|
|
|
124
124
|
<Tip>
|
|
125
|
-
Bạn có thể
|
|
125
|
+
Bạn có thể thêm hướng dẫn bổ sung vào bất kỳ tin nhắn `deny` hoặc `instruct` nào bằng cách thêm trường `hint` trong `policyParams` — không cần thay đổi mã. Điều này hoạt động cho các chính sách tùy chỉnh (`custom/`), quy ước dự án (`.failproofai-project/`), và quy ước người dùng (`.failproofai-user/`) cũng vậy. Xem [Configuration → hint](/vi/configuration#hint-cross-cutting) để biết chi tiết.
|
|
126
126
|
</Tip>
|
|
127
127
|
|
|
128
|
-
###
|
|
128
|
+
### Tin nhắn allow mang tính thông tin
|
|
129
129
|
|
|
130
|
+
`allow(message)` cho phép hoạt động **và** gửi lại một tin nhắn mang tính thông tin cho Claude. Tin nhắn được gửi dưới dạng `additionalContext` trong phản hồi stdout của trình xử lý hook — cùng một cơ chế được sử dụng bởi `instruct`, nhưng khác nhau về mặt ngữ nghĩa: đó là một bản cập nhật trạng thái, không phải một cảnh báo.
|
|
130
131
|
|
|
131
|
-
|
|
132
|
+
| Hàm | Hiệu ứng | Sử dụng khi |
|
|
133
|
+
|----------|--------|----------|
|
|
134
|
+
| `allow(message)` | Cho phép và gửi ngữ cảnh cho Claude | Xác nhận kiểm tra đã vượt qua, hoặc giải thích tại sao kiểm tra bị bỏ qua |
|
|
132
135
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
Các trường hợp sử dụng:
|
|
138
|
-
- **Xác nhận trạng thái:** `allow("All CI checks passed.")` — cho Claude biết mọi thứ đang ổn
|
|
139
|
-
- **Giải thích fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — cho Claude biết tại sao một kiểm tra bị bỏ qua để nó có đầy đủ bối cảnh
|
|
140
|
-
- **Nhiều thông báo tích lũy:** nếu nhiều chính sách mỗi cái trả về `allow(message)`, tất cả các thông báo được nối lại bằng dòng mới và gửi cùng nhau
|
|
136
|
+
Trường hợp sử dụng:
|
|
137
|
+
- **Xác nhận trạng thái:** `allow("All CI checks passed.")` — cho Claude biết tất cả đều xanh
|
|
138
|
+
- **Giải thích fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — cho Claude biết tại sao kiểm tra bị bỏ qua để nó có bối cảnh đầy đủ
|
|
139
|
+
- **Nhiều tin nhắn tích lũy:** nếu nhiều chính sách trả về `allow(message)`, tất cả các tin nhắn được nối với dòng mới và gửi cùng nhau
|
|
141
140
|
|
|
142
141
|
```js
|
|
143
142
|
customPolicies.add({
|
|
@@ -158,29 +157,29 @@ customPolicies.add({
|
|
|
158
157
|
|
|
159
158
|
### Các trường `PolicyContext`
|
|
160
159
|
|
|
161
|
-
| Trường |
|
|
162
|
-
|
|
160
|
+
| Trường | Kiểu | Mô tả |
|
|
161
|
+
|-------|------|-------------|
|
|
163
162
|
| `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
|
|
164
|
-
| `toolName` | `string \| undefined` | Công cụ được gọi (ví dụ: `"Bash"`, `"Write"`, `"Read"`) |
|
|
163
|
+
| `toolName` | `string \| undefined` | Công cụ đang được gọi (ví dụ: `"Bash"`, `"Write"`, `"Read"`) |
|
|
165
164
|
| `toolInput` | `Record<string, unknown> \| undefined` | Các tham số đầu vào của công cụ |
|
|
166
|
-
| `payload` | `Record<string, unknown>` |
|
|
167
|
-
| `session` | `SessionMetadata \| undefined` |
|
|
165
|
+
| `payload` | `Record<string, unknown>` | Tải trọng sự kiện thô đầy đủ từ Claude Code |
|
|
166
|
+
| `session` | `SessionMetadata \| undefined` | Ngữ cảnh phiên (xem bên dưới) |
|
|
168
167
|
|
|
169
168
|
### Các trường `SessionMetadata`
|
|
170
169
|
|
|
171
|
-
| Trường |
|
|
172
|
-
|
|
173
|
-
| `sessionId` | `string` |
|
|
170
|
+
| Trường | Kiểu | Mô tả |
|
|
171
|
+
|-------|------|-------------|
|
|
172
|
+
| `sessionId` | `string` | Định danh phiên Claude Code |
|
|
174
173
|
| `cwd` | `string` | Thư mục làm việc của phiên Claude Code |
|
|
175
|
-
| `transcriptPath` | `string` | Đường dẫn đến tệp
|
|
174
|
+
| `transcriptPath` | `string` | Đường dẫn đến tệp bản ghi JSONL của phiên |
|
|
176
175
|
|
|
177
176
|
### Các loại sự kiện
|
|
178
177
|
|
|
179
|
-
| Sự kiện | Khi nó
|
|
180
|
-
|
|
178
|
+
| Sự kiện | Khi nó xảy ra | Nội dung `toolInput` |
|
|
179
|
+
|-------|--------------|----------------------|
|
|
181
180
|
| `PreToolUse` | Trước khi Claude chạy một công cụ | Đầu vào của công cụ (ví dụ: `{ command: "..." }` cho Bash) |
|
|
182
|
-
| `PostToolUse` | Sau khi một công cụ hoàn
|
|
183
|
-
| `Notification` | Khi Claude gửi thông báo | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` -
|
|
181
|
+
| `PostToolUse` | Sau khi một công cụ hoàn tất | Đầu vào của công cụ + `tool_result` (đầu ra) |
|
|
182
|
+
| `Notification` | Khi Claude gửi thông báo | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - các hook phải luôn trả về `allow()`, chúng không thể chặn thông báo |
|
|
184
183
|
| `Stop` | Khi phiên Claude kết thúc | Trống |
|
|
185
184
|
|
|
186
185
|
---
|
|
@@ -189,18 +188,18 @@ customPolicies.add({
|
|
|
189
188
|
|
|
190
189
|
Chính sách được đánh giá theo thứ tự này:
|
|
191
190
|
|
|
192
|
-
1. Chính sách tích hợp (theo thứ tự định nghĩa)
|
|
193
|
-
2. Chính sách tùy chỉnh
|
|
194
|
-
3. Chính sách quy ước từ dự án `.failproofai/policies/` (tệp theo thứ tự bảng chữ cái, `.add()`
|
|
195
|
-
4. Chính sách quy ước từ người dùng `~/.failproofai/policies/` (tệp theo thứ tự bảng chữ cái, `.add()`
|
|
191
|
+
1. Chính sách tích hợp sẵn (theo thứ tự định nghĩa)
|
|
192
|
+
2. Chính sách tùy chỉnh tường minh từ `customPoliciesPath` (theo thứ tự `.add()`)
|
|
193
|
+
3. Chính sách quy ước từ dự án `.failproofai/policies/` (tệp theo thứ tự bảng chữ cái, thứ tự `.add()` bên trong)
|
|
194
|
+
4. Chính sách quy ước từ người dùng `~/.failproofai/policies/` (tệp theo thứ tự bảng chữ cái, thứ tự `.add()` bên trong)
|
|
196
195
|
|
|
197
196
|
<Note>
|
|
198
|
-
`deny` đầu tiên
|
|
197
|
+
`deny` đầu tiên làm ngắn mạch tất cả các chính sách tiếp theo. Tất cả các tin nhắn `instruct` được tích lũy và gửi cùng nhau.
|
|
199
198
|
</Note>
|
|
200
199
|
|
|
201
200
|
---
|
|
202
201
|
|
|
203
|
-
## Nhập
|
|
202
|
+
## Nhập khẩu Transitive
|
|
204
203
|
|
|
205
204
|
Các tệp chính sách tùy chỉnh có thể nhập các mô-đun cục bộ bằng cách sử dụng đường dẫn tương đối:
|
|
206
205
|
|
|
@@ -219,13 +218,13 @@ customPolicies.add({
|
|
|
219
218
|
});
|
|
220
219
|
```
|
|
221
220
|
|
|
222
|
-
Tất cả các nhập tương đối có thể
|
|
221
|
+
Tất cả các nhập khẩu tương đối có thể đạt được từ tệp mục nhập được phân giải. Điều này được triển khai bằng cách viết lại các nhập `from "failproofai"` đến đường dẫn dist thực tế và tạo tệp `.mjs` tạm thời để đảm bảo tính tương thích ESM.
|
|
223
222
|
|
|
224
223
|
---
|
|
225
224
|
|
|
226
225
|
## Lọc loại sự kiện
|
|
227
226
|
|
|
228
|
-
Sử dụng `match.events` để
|
|
227
|
+
Sử dụng `match.events` để hạn chế khi chính sách kích hoạt:
|
|
229
228
|
|
|
230
229
|
```js
|
|
231
230
|
customPolicies.add({
|
|
@@ -239,22 +238,22 @@ customPolicies.add({
|
|
|
239
238
|
});
|
|
240
239
|
```
|
|
241
240
|
|
|
242
|
-
Bỏ qua `match` hoàn toàn để kích hoạt
|
|
241
|
+
Bỏ qua `match` hoàn toàn để kích hoạt cho mọi loại sự kiện.
|
|
243
242
|
|
|
244
243
|
---
|
|
245
244
|
|
|
246
245
|
## Xử lý lỗi và chế độ lỗi
|
|
247
246
|
|
|
248
|
-
Chính sách tùy chỉnh là **fail-open**:
|
|
247
|
+
Chính sách tùy chỉnh là **fail-open**: lỗi không bao giờ chặn các chính sách tích hợp sẵn hoặc làm xảy ra sự cố trình xử lý hook.
|
|
249
248
|
|
|
250
249
|
| Lỗi | Hành vi |
|
|
251
|
-
|
|
252
|
-
| `customPoliciesPath` không được đặt | Không có chính sách tùy chỉnh
|
|
253
|
-
| Tệp không tìm thấy | Cảnh báo được ghi vào `~/.failproofai/hook.log`; tích hợp tiếp tục |
|
|
254
|
-
| Lỗi cú pháp/nhập (
|
|
250
|
+
|---------|----------|
|
|
251
|
+
| `customPoliciesPath` không được đặt | Không có chính sách tùy chỉnh tường minh chạy; chính sách quy ước và tích hợp sẵn tiếp tục bình thường |
|
|
252
|
+
| Tệp không tìm thấy | Cảnh báo được ghi vào `~/.failproofai/hook.log`; tích hợp sẵn tiếp tục |
|
|
253
|
+
| Lỗi cú pháp/nhập (tường minh) | Lỗi được ghi vào `~/.failproofai/hook.log`; chính sách tùy chỉnh tường minh bị bỏ qua |
|
|
255
254
|
| Lỗi cú pháp/nhập (quy ước) | Lỗi được ghi; tệp đó bị bỏ qua, các tệp quy ước khác vẫn tải |
|
|
256
|
-
| `fn` ném
|
|
257
|
-
| `fn` mất lâu hơn 10 giây |
|
|
255
|
+
| `fn` ném lỗi ở thời gian chạy | Lỗi được ghi; hook đó được coi là `allow`; các hook khác tiếp tục |
|
|
256
|
+
| `fn` mất thời gian lâu hơn 10 giây | Hết thời gian được ghi; được coi là `allow` |
|
|
258
257
|
| Thư mục quy ước bị thiếu | Không có chính sách quy ước chạy; không có lỗi |
|
|
259
258
|
|
|
260
259
|
<Tip>
|
|
@@ -324,22 +323,22 @@ export { customPolicies };
|
|
|
324
323
|
|
|
325
324
|
## Ví dụ
|
|
326
325
|
|
|
327
|
-
Thư mục `examples/` chứa các tệp chính sách sẵn sàng
|
|
326
|
+
Thư mục `examples/` chứa các tệp chính sách sẵn sàng chạy:
|
|
328
327
|
|
|
329
328
|
| Tệp | Nội dung |
|
|
330
|
-
|
|
329
|
+
|------|----------|
|
|
331
330
|
| `examples/policies-basic.js` | Năm chính sách khởi động bao gồm các chế độ lỗi agent phổ biến |
|
|
332
|
-
| `examples/policies-advanced/index.js` |
|
|
331
|
+
| `examples/policies-advanced/index.js` | Các mẫu nâng cao: nhập khẩu transitive, cuộc gọi không đồng bộ, scrubbing đầu ra, và các hook khi kết thúc phiên |
|
|
333
332
|
| `examples/convention-policies/security-policies.mjs` | Chính sách bảo mật dựa trên quy ước (chặn ghi .env, ngăn chặn viết lại lịch sử git) |
|
|
334
|
-
| `examples/convention-policies/workflow-policies.mjs` | Chính sách quy trình làm việc dựa trên quy ước (nhắc nhở kiểm tra,
|
|
333
|
+
| `examples/convention-policies/workflow-policies.mjs` | Chính sách quy trình làm việc dựa trên quy ước (nhắc nhở kiểm tra, kiểm toán ghi tệp) |
|
|
335
334
|
|
|
336
|
-
### Sử dụng
|
|
335
|
+
### Sử dụng ví dụ tệp tường minh
|
|
337
336
|
|
|
338
337
|
```bash
|
|
339
338
|
failproofai policies --install --custom ./examples/policies-basic.js
|
|
340
339
|
```
|
|
341
340
|
|
|
342
|
-
### Sử dụng
|
|
341
|
+
### Sử dụng ví dụ dựa trên quy ước
|
|
343
342
|
|
|
344
343
|
```bash
|
|
345
344
|
# Copy to project level
|
|
@@ -351,4 +350,4 @@ mkdir -p ~/.failproofai/policies
|
|
|
351
350
|
cp examples/convention-policies/*.mjs ~/.failproofai/policies/
|
|
352
351
|
```
|
|
353
352
|
|
|
354
|
-
Không cần lệnh cài đặt — các tệp
|
|
353
|
+
Không cần lệnh cài đặt — các tệp được nhặt lên tự động trên sự kiện hook tiếp theo.
|