failproofai 0.0.5 → 0.0.6-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/.next/standalone/.failproofai/policies/workflow-policies.mjs +2 -1
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/required-server-files.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  11. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  12. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  14. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  15. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  20. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  21. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  22. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  23. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  24. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  26. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/index.html +1 -1
  28. package/.next/standalone/.next/server/app/index.rsc +15 -15
  29. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  30. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  31. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  32. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
  33. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  35. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  38. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  41. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  44. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  45. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  48. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
  51. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  52. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0a~g15g._.js → [root-of-the-server]__0.~fd7s._.js} +2 -2
  53. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  54. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  55. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qn95h3._.js → [root-of-the-server]__0a.nuas._.js} +2 -2
  56. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  57. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  58. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  59. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +2 -2
  60. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  61. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  62. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  63. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  65. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  66. package/.next/standalone/.next/server/pages/404.html +2 -2
  67. package/.next/standalone/.next/server/pages/500.html +1 -1
  68. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  70. package/.next/standalone/.next/static/chunks/{09ikntpt2-o9b.js → 0.z51twd.0l5z.js} +1 -1
  71. package/.next/standalone/.next/static/chunks/{0sme4lkv.tgn-.js → 0hctoh28rg838.js} +1 -1
  72. package/.next/standalone/.next/static/chunks/{13juklu.vksks.js → 0hplx-8c-4vpv.js} +1 -1
  73. package/.next/standalone/.next/static/chunks/{0em7tspi4kylh.js → 0maq.q1t.ri85.js} +2 -2
  74. package/.next/standalone/.next/static/chunks/{17manv47o-~wp.js → 0teq8wdh3po1n.js} +1 -1
  75. package/.next/standalone/.next/static/chunks/{0lgbwkfqmnsmc.js → 0uc0um_uz51m_.js} +1 -1
  76. package/.next/standalone/.next/static/chunks/{0yumumfzx_f27.js → 0ul6fk-z.6k-0.js} +1 -1
  77. package/.next/standalone/.next/static/chunks/{0_yayar~bpphd.js → 0w9lwqy0-v1dk.js} +1 -1
  78. package/.next/standalone/CHANGELOG.md +5 -0
  79. package/.next/standalone/dist/cli.mjs +19 -2
  80. package/.next/standalone/docs/ar/architecture.mdx +65 -64
  81. package/.next/standalone/docs/ar/configuration.mdx +42 -42
  82. package/.next/standalone/docs/ar/custom-policies.mdx +62 -64
  83. package/.next/standalone/docs/de/architecture.mdx +92 -92
  84. package/.next/standalone/docs/de/configuration.mdx +34 -34
  85. package/.next/standalone/docs/de/custom-policies.mdx +49 -50
  86. package/.next/standalone/docs/es/architecture.mdx +72 -72
  87. package/.next/standalone/docs/es/configuration.mdx +25 -25
  88. package/.next/standalone/docs/es/custom-policies.mdx +48 -49
  89. package/.next/standalone/docs/fr/architecture.mdx +53 -53
  90. package/.next/standalone/docs/fr/configuration.mdx +25 -25
  91. package/.next/standalone/docs/fr/custom-policies.mdx +42 -43
  92. package/.next/standalone/docs/he/architecture.mdx +66 -66
  93. package/.next/standalone/docs/he/configuration.mdx +53 -52
  94. package/.next/standalone/docs/he/custom-policies.mdx +72 -73
  95. package/.next/standalone/docs/hi/architecture.mdx +106 -106
  96. package/.next/standalone/docs/hi/configuration.mdx +39 -39
  97. package/.next/standalone/docs/hi/custom-policies.mdx +75 -76
  98. package/.next/standalone/docs/i18n/README.ar.md +66 -66
  99. package/.next/standalone/docs/i18n/README.de.md +38 -38
  100. package/.next/standalone/docs/i18n/README.es.md +38 -38
  101. package/.next/standalone/docs/i18n/README.fr.md +42 -42
  102. package/.next/standalone/docs/i18n/README.he.md +67 -67
  103. package/.next/standalone/docs/i18n/README.hi.md +70 -70
  104. package/.next/standalone/docs/i18n/README.it.md +62 -62
  105. package/.next/standalone/docs/i18n/README.ja.md +54 -54
  106. package/.next/standalone/docs/i18n/README.ko.md +58 -58
  107. package/.next/standalone/docs/i18n/README.pt-br.md +43 -43
  108. package/.next/standalone/docs/i18n/README.ru.md +69 -69
  109. package/.next/standalone/docs/i18n/README.tr.md +76 -76
  110. package/.next/standalone/docs/i18n/README.vi.md +70 -70
  111. package/.next/standalone/docs/i18n/README.zh.md +52 -52
  112. package/.next/standalone/docs/it/architecture.mdx +54 -53
  113. package/.next/standalone/docs/it/configuration.mdx +44 -45
  114. package/.next/standalone/docs/it/custom-policies.mdx +76 -78
  115. package/.next/standalone/docs/ja/architecture.mdx +93 -93
  116. package/.next/standalone/docs/ja/configuration.mdx +47 -47
  117. package/.next/standalone/docs/ja/custom-policies.mdx +62 -63
  118. package/.next/standalone/docs/ko/architecture.mdx +66 -66
  119. package/.next/standalone/docs/ko/configuration.mdx +35 -35
  120. package/.next/standalone/docs/ko/custom-policies.mdx +71 -72
  121. package/.next/standalone/docs/pt-br/architecture.mdx +55 -55
  122. package/.next/standalone/docs/pt-br/configuration.mdx +35 -35
  123. package/.next/standalone/docs/pt-br/custom-policies.mdx +60 -61
  124. package/.next/standalone/docs/ru/architecture.mdx +59 -60
  125. package/.next/standalone/docs/ru/configuration.mdx +52 -53
  126. package/.next/standalone/docs/ru/custom-policies.mdx +68 -69
  127. package/.next/standalone/docs/tr/architecture.mdx +124 -124
  128. package/.next/standalone/docs/tr/configuration.mdx +45 -46
  129. package/.next/standalone/docs/tr/custom-policies.mdx +75 -75
  130. package/.next/standalone/docs/vi/architecture.mdx +65 -64
  131. package/.next/standalone/docs/vi/configuration.mdx +41 -41
  132. package/.next/standalone/docs/vi/custom-policies.mdx +68 -69
  133. package/.next/standalone/docs/zh/architecture.mdx +67 -67
  134. package/.next/standalone/docs/zh/configuration.mdx +34 -34
  135. package/.next/standalone/docs/zh/custom-policies.mdx +53 -54
  136. package/.next/standalone/package.json +1 -1
  137. package/.next/standalone/server.js +1 -1
  138. package/.next/standalone/src/hooks/builtin-policies.ts +30 -0
  139. package/dist/cli.mjs +19 -2
  140. package/package.json +1 -1
  141. package/src/hooks/builtin-policies.ts +30 -0
  142. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_buildManifest.js +0 -0
  143. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_clientMiddlewareManifest.js +0 -0
  144. /package/.next/standalone/.next/static/{hYQM6iCWnF1W5XDpsIRhV → 8mygPGI5bzrtWK36ZYO59}/_ssgManifest.js +0 -0
@@ -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 các chính sách nào được kích hoạt, cách chúng hoạt động và nơi tải các chính sách tùy chỉnh. Cấu hình được thiết kế để dễ dàng chia sẻ với nhóm của bạn - cam kết nó vào repo của bạn và mỗi nhà phát triển sẽ nhận được cùng một lưới an toàn tác nhân.
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 trên mỗi repo, đượ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 trên mỗi repo, được gitignore |
19
- | **global** | `~/.failproofai/policies-config.json` | Giá trị mặc định cấp người dùng trên tất cả các dự án |
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 một sự kiện hook, nó tải và hợp nhất cả ba tệp tồn tại cho thư mục làm việc hiện tại.
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 kích hoạt ở bất kỳ mức nào sẽ hoạt động.
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 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 nào đó sẽ chiến thắng hoàn toàn. Không có hợp nhất sâu các giá trị trong tham số của 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 chiến thắng, global bị bỏ qua
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ẽ chiến thắng.
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ẽ chiến thắng.
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 cần 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 [Chính sách tích hợp](/vi/built-in-policies) để có danh sách đầy đủ.
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 nằm trong `enabledPolicies` không hoạt động, ngay cả khi chúng có mục trong `policyParams`.
107
+ Các chính sách không 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à khóa dành riêng cho chính sách. Mỗi chính sách ghi lại các tham số khả dụng của nó trong [Chính sách tích hợp](/vi/built-in-policies).
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ố 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 giá trị mặc định tích hợp của chính sách sẽ được sử dụ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 đó.
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 sẽ bị bỏ qua khi hook được kích hoạt nhưng được đánh dấu là cảnh báo khi bạn chạy `failproofai policies`.
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` (cross-cutting)
119
+ #### `hint` (xuyên suốt)
120
120
 
121
121
  Loại: `string` (tùy chọn)
122
122
 
123
- Một thông điệp được thêm vào lý do khi một chính sách trả về `deny` hoặc `instruct`. Sử dụng nó để đưa ra hướng dẫn hành động cho Claude mà không cần sửa đổi chính sách.
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": "Try creating a fresh branch instead."
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": "Use apt-get directly without sudo."
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": "Ask the user for approval first."
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 is blocked. Try creating a fresh branch instead."*
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 rỗng sẽ bị bỏ qua. Nếu `hint` không được đặt, hành vi không thay đổi (tương thích ngược).
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 mới trên mỗi sự kiện hook - không có lưu cache. Xem [Chính sách tùy chỉnh](/vi/custom-policies) để biết chi tiết tác giả.
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 phát hiện và tải các tệp chính sách từ thư mục `.failproofai/policies/`:
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
- | Mức | Thư mục | Phạm vi |
161
- |-----|--------|--------|
162
- | Dự án | `.failproofai/policies/` | Chia sẻ với nhóm qua kiểm soát phiên bản |
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í dụ: `security-policies.mjs`, `workflow-policies.js`). Các tệp khác trong thư mục sẽ bị bỏ qua.
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:** Chính sách quy ước không yêu cầu mục nhập trong `policies-config.json`. Chỉ cần thả các tệp vào thư mục và chúng sẽ được nhận trên sự kiện hook tiếp theo.
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 kết hợp:** Cả 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 mức được tải (không giống như `customPoliciesPath` sử dụng first-scope-wins).
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 [Chính sách tùy chỉnh](/vi/custom-policies) để biết thêm chi tiết và ví dụ.
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 đối với hầu hết các thiết lập.
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 vào hook), trong khi `policies-config.json` là tệp bạn quản lý trực tiếp. Hai cái này là riêng biệt:
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; các thay đổi có hiệu lực ngay trên sự kiện hook tiếp theo mà không cần khởi động lại.
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 giá trị mặc định nhóm
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 repo của bạn:
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
- Mỗi nhà phát triển sau đó 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 nghiệp.
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 Tùy chỉnh
3
- description: "Viết các quy tắc riêng của bạn bằng JavaScript - thực thi các quy ước, ngăn chặn sự trôi dạt, phát hiện các lỗi, tích hợp với các hệ thống bên ngoài"
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 động của agent nào: thực thi các quy ước dự án, ngăn chặn sự trôi dạt, chặn các hoạt động có tính hủy diệt, 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.v. Chúng sử dụng cùng một 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.
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
- ### Lựa chọn 1: Dựa trên quy ước (được khuyến nghị)
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. Cách này hoạt động giống như git hooks: thả một tệp, nó sẽ hoạt động.
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
- # Mức dự án — được cam kết với git, chia sẻ với đội
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
- # Mức người dùng — cá nhân, áp dụng cho tất cả các dự án
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 (union — 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. Thêm tiền tố `01-`, `02-` để kiểm soát thứ tự
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 cho mỗi tệp)
60
- - Hoạt động cùng với các chính sách `--custom` ràng và tích hợp
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 minhchí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 đội. Cam kết `.failproofai/policies/` với git và mỗi thành viên đội sẽ tự động nhận được chúng.
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
- ### Lựa chọn 2: Đường dẫn tệp ràng
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ộ nhớ cache giữa các sự kiện.
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` ràng có thể cùng tồn tại. Thứ tự tải:
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` ràng (nếu được cấu hình)
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 hàm này bao nhiêu lần cần thiết cho nhiều chính sách trong cùng một tệp.
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 | Tác động | Sử dụng khi |
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 bối cảnh mà không chặn | Cung cấp cho agent bối cảnh bổ sung để tiếp tục theo đúng hướng |
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)` - thông báo sẽ xuất hiện cho Claude với tiền tố `"Blocked by failproofai:"`. Một `deny` duy nhất sẽ ngắt khoá tất cả các đánh giá tiếp theo.
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)` - thông báo được nối thêm vào bối cảnh của Claude cho lệnh gọi công cụ hiện tại. Tất cả các thông báo `instruct` được tích lũy và gửi cùng nhau.
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ể nối thêm hướng dẫn bổ sung vào bất kỳ thông báo `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 [Cấu hình → hint](/vi/configuration#hint-cross-cutting) để biết chi tiết.
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
- ### Thông báo allow thông tin
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
- `allow(message)` cho phép hoạt động **và** gửi một thông báo thông tin quay lại cho Claude. Thông báo được gửi dưới dạng `additionalContext` trong phản hồi stdout của trình xử lý hook — cơ chế tương tự được sử dụng bởi `instruct`, nhưng về mặt ngữ nghĩa khác: đó là một cập nhật trạng thái, không phải cảnh báo.
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
- | Hàm | Tác động | Sử dụng khi |
134
- |-----|---------|-----------|
135
- | `allow(message)` | Cho phép gửi bối cảnh cho Claude | Xác nhận kiểm tra đã vượt qua, hoặc giải thích tại sao một kiểm tra bị bỏ qua |
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 để 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 | Loại | Mô tả |
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>` | Toàn bộ tải trọng sự kiện thô từ Claude Code |
167
- | `session` | `SessionMetadata \| undefined` | Bối cảnh phiên (xem bên dưới) |
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 | Loại | Mô tả |
172
- |--------|------|-------|
173
- | `sessionId` | `string` | định danh phiên Claude Code |
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 transcript JSONL của phiên |
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ó kích hoạt | Nội dung `toolInput` |
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 thành | Đầu vào của công cụ + `tool_result` (đầu ra) |
183
- | `Notification` | Khi Claude gửi thông báo | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - hooks phải luôn trả về `allow()`, chúng không thể chặn thông báo |
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 ràng từ `customPoliciesPath` (theo thứ tự `.add()`)
194
- 3. Chính sách quy ước từ dự án `.failproofai/policies/` (tệp theo thứ tự bảng chữ cái, `.add()` theo thứ tự trong)
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()` theo thứ tự trong)
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 sẽ ngắt khoá tất cả các chính sách tiếp theo. Tất cả các thông báo `instruct` được tích lũy và gửi cùng nhau.
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 transitive
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ể tiếp cận từ tệp 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"` thành đường dẫn dist thực tế và tạo các tệp `.mjs` tạm thời để đảm bảo tương thích ESM.
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` để giới hạn khi một chính sách kích hoạt:
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 trên mọi loại sự kiện.
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**: các lỗi không bao giờ chặn chính sách tích hợp hoặc làm hỏng trình xử lý hook.
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 ràng chạy; chính sách quy ước và tích hợp tiếp tục bình thường |
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 ( ràng) | Lỗi được ghi vào `~/.failproofai/hook.log`; chính sách tùy chỉnh ràng bị bỏ qua |
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 tại thời gian chạy | Lỗi được ghi; hook đó được coi là `allow`; các hook khác tiếp tục |
257
- | `fn` mất lâu hơn 10 giây | Timeout được ghi; được coi là `allow` |
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 để chạy:
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` | hình nâng cao: nhập transitive, gọi không đồng bộ, làm sạch đầu ra, và hook kết thúc phiên |
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, tệp ghi kiểm toán) |
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 các ví dụ tệp rà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 các ví dụ dựa trên quy ước
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 sẽ được chọn tự động khi sự kiện hook tiếp theo.
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.