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
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
---
|
|
4
4
|
title: आर्किटेक्चर
|
|
5
|
-
description: "हुक हैंडलर,
|
|
5
|
+
description: "हुक हैंडलर, कॉन्फ़िगरेशन लोडिंग और पॉलिसी मूल्यांकन आंतरिक रूप से कैसे काम करते हैं"
|
|
6
6
|
icon: sitemap
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
यह दस्तावेज़ failproofai
|
|
9
|
+
यह दस्तावेज़ बताता है कि failproofai आंतरिक रूप से कैसे काम करता है: हुक सिस्टम एजेंट टूल कॉल को कैसे इंटरसेप्ट करता है, कॉन्फ़िगरेशन कैसे लोड और मर्ज होता है, पॉलिसीज़ का मूल्यांकन कैसे होता है, और डैशबोर्ड एजेंट गतिविधि को कैसे मॉनिटर करता है।
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
## सारांश
|
|
14
14
|
|
|
15
|
-
failproofai के दो स्वतंत्र
|
|
15
|
+
failproofai के दो स्वतंत्र उपप्रणालियां हैं:
|
|
16
16
|
|
|
17
|
-
1. **हुक हैंडलर** - एक तेज़ CLI
|
|
18
|
-
2. **एजेंट मॉनिटर (डैशबोर्ड)** - एजेंट
|
|
17
|
+
1. **हुक हैंडलर** - एक तेज़ CLI उपप्रक्रिया जो Claude Code हर एजेंट टूल कॉल पर आमंत्रित करती है। पॉलिसीज़ का मूल्यांकन करता है और एक निर्णय देता है।
|
|
18
|
+
2. **एजेंट मॉनिटर (डैशबोर्ड)** - एजेंट सत्रों की निगरानी और पॉलिसीज़ को प्रबंधित करने के लिए एक Next.js वेब एप्लिकेशन।
|
|
19
19
|
|
|
20
|
-
दोनों
|
|
20
|
+
दोनों उपप्रणालियां `~/.failproofai/` और प्रोजेक्ट की `.failproofai/` डायरेक्टरी में कॉन्फ़िगरेशन फ़ाइलें साझा करती हैं, लेकिन वे अलग-अलग प्रक्रियाओं के रूप में चलती हैं और केवल फ़ाइलसिस्टम के माध्यम से संचार करती हैं।
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
@@ -46,9 +46,9 @@ failproofai के दो स्वतंत्र सबसिस्टम ह
|
|
|
46
46
|
}
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
Claude Code फिर प्रत्येक टूल कॉल से पहले `failproofai --hook PreToolUse` को एक
|
|
49
|
+
Claude Code फिर प्रत्येक टूल कॉल से पहले `failproofai --hook PreToolUse` को एक उपप्रक्रिया के रूप में आमंत्रित करता है, stdin पर एक JSON पेलोड पास करता है।
|
|
50
50
|
|
|
51
|
-
### पेलोड
|
|
51
|
+
### पेलोड प्रारूप
|
|
52
52
|
|
|
53
53
|
```json
|
|
54
54
|
{
|
|
@@ -62,11 +62,11 @@ Claude Code फिर प्रत्येक टूल कॉल से पह
|
|
|
62
62
|
}
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
`PostToolUse` इवेंट्स के लिए, पेलोड में टूल के आउटपुट के साथ `tool_result` भी
|
|
65
|
+
`PostToolUse` इवेंट्स के लिए, पेलोड में टूल के आउटपुट के साथ `tool_result` भी शामिल है।
|
|
66
66
|
|
|
67
|
-
हैंडलर 1 MB stdin
|
|
67
|
+
हैंडलर 1 MB stdin सीमा लागू करता है। इस सीमा से अधिक पेलोड को छोड़ दिया जाता है और सभी पॉलिसीज़ अर्थपूर्ण रूप से अनुमति देती हैं।
|
|
68
68
|
|
|
69
|
-
### प्रतिक्रिया
|
|
69
|
+
### प्रतिक्रिया प्रारूप
|
|
70
70
|
|
|
71
71
|
**अस्वीकार करें (PreToolUse):**
|
|
72
72
|
```json
|
|
@@ -87,7 +87,7 @@ Claude Code फिर प्रत्येक टूल कॉल से पह
|
|
|
87
87
|
}
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
**निर्देशन (Stop को छोड़कर किसी भी इवेंट):**
|
|
91
91
|
```json
|
|
92
92
|
{
|
|
93
93
|
"hookSpecificOutput": {
|
|
@@ -96,17 +96,17 @@ Claude Code फिर प्रत्येक टूल कॉल से पह
|
|
|
96
96
|
}
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
**Stop इवेंट
|
|
100
|
-
- Exit
|
|
101
|
-
- कारण stderr (stdout नहीं)
|
|
99
|
+
**Stop इवेंट निर्देशन:**
|
|
100
|
+
- Exit code: `2`
|
|
101
|
+
- कारण stderr को लिखा गया (stdout को नहीं)
|
|
102
102
|
|
|
103
103
|
**अनुमति दें:**
|
|
104
|
-
- Exit
|
|
104
|
+
- Exit code: `0`
|
|
105
105
|
- खाली stdout
|
|
106
106
|
|
|
107
107
|
**संदेश के साथ अनुमति दें:**
|
|
108
108
|
|
|
109
|
-
`allow(message)` एक पॉलिसी को Claude को सूचनात्मक संदर्भ भेजने देता है भले ही ऑपरेशन की अनुमति हो। हुक हैंडलर निम्नलिखित JSON को **stdout** में लिखता है (
|
|
109
|
+
`allow(message)` एक पॉलिसी को Claude को सूचनात्मक संदर्भ भेजने देता है भले ही ऑपरेशन की अनुमति हो। हुक हैंडलर निम्नलिखित JSON को **stdout** में लिखता है (कॉन्फ़िगरेशन फ़ाइल में नहीं — यह हैंडलर की Claude Code को प्रतिक्रिया है, जैसे अस्वीकार और निर्देश प्रतिक्रियाएं ऊपर दी गई हैं):
|
|
110
110
|
|
|
111
111
|
```json
|
|
112
112
|
// हुक हैंडलर प्रक्रिया द्वारा stdout में लिखा गया
|
|
@@ -116,8 +116,8 @@ Claude Code फिर प्रत्येक टूल कॉल से पह
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
```
|
|
119
|
-
- Exit
|
|
120
|
-
- जब कई पॉलिसीज़ संदेश के साथ `allow`
|
|
119
|
+
- Exit code: `0` (ऑपरेशन की अनुमति है)
|
|
120
|
+
- जब कई पॉलिसीज़ एक संदेश के साथ `allow` देती हैं, तो उनके संदेश नई पंक्तियों के साथ एक एकल `additionalContext` स्ट्रिंग में जुड़ जाते हैं
|
|
121
121
|
- यदि कोई पॉलिसी संदेश प्रदान नहीं करती है, तो stdout खाली है (पहले की तरह)
|
|
122
122
|
|
|
123
123
|
### प्रोसेसिंग पाइपलाइन
|
|
@@ -126,69 +126,69 @@ Claude Code फिर प्रत्येक टूल कॉल से पह
|
|
|
126
126
|
|
|
127
127
|
```text
|
|
128
128
|
stdin JSON
|
|
129
|
-
→
|
|
130
|
-
→
|
|
131
|
-
→ readMergedHooksConfig(cwd) ←
|
|
132
|
-
→
|
|
133
|
-
→
|
|
134
|
-
→
|
|
135
|
-
→
|
|
136
|
-
→
|
|
137
|
-
→
|
|
138
|
-
→
|
|
139
|
-
→ JSON
|
|
140
|
-
→
|
|
141
|
-
→
|
|
129
|
+
→ parse payload (max 1 MB)
|
|
130
|
+
→ extract session metadata (session_id, cwd, tool_name, tool_input, etc.)
|
|
131
|
+
→ readMergedHooksConfig(cwd) ← merges project + local + global config
|
|
132
|
+
→ register enabled builtin policies with resolved params
|
|
133
|
+
→ load custom policies from customPoliciesPath (if set)
|
|
134
|
+
→ register custom policies into policy registry
|
|
135
|
+
→ evaluate all policies (builtins first, then custom)
|
|
136
|
+
→ first deny short-circuits
|
|
137
|
+
→ instruct decisions accumulate
|
|
138
|
+
→ allow messages accumulate
|
|
139
|
+
→ write JSON decision to stdout
|
|
140
|
+
→ persist event to ~/.failproofai/hook-activity.jsonl
|
|
141
|
+
→ exit
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
LLM
|
|
144
|
+
बिना LLM कॉल्स के सामान्य पेलोड्स के लिए पूरी प्रक्रिया 100ms से कम में चलती है।
|
|
145
145
|
|
|
146
146
|
---
|
|
147
147
|
|
|
148
|
-
##
|
|
148
|
+
## कॉन्फ़िगरेशन लोडिंग
|
|
149
149
|
|
|
150
|
-
`src/hooks/hooks-config.ts` तीन-स्कोप
|
|
150
|
+
`src/hooks/hooks-config.ts` तीन-स्कोप कॉन्फ़िगरेशन लोडिंग को लागू करता है।
|
|
151
151
|
|
|
152
152
|
```text
|
|
153
|
-
[1] {cwd}/.failproofai/policies-config.json ←
|
|
154
|
-
[2] {cwd}/.failproofai/policies-config.local.json ←
|
|
155
|
-
[3] ~/.failproofai/policies-config.json ←
|
|
153
|
+
[1] {cwd}/.failproofai/policies-config.json ← project (highest priority)
|
|
154
|
+
[2] {cwd}/.failproofai/policies-config.local.json ← local
|
|
155
|
+
[3] ~/.failproofai/policies-config.json ← global (lowest priority)
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
मर्ज
|
|
159
|
-
- `enabledPolicies` - सभी
|
|
158
|
+
मर्ज तर्क:
|
|
159
|
+
- `enabledPolicies` - सभी तीन फ़ाइलों में डीडुप्लिकेटेड यूनियन
|
|
160
160
|
- `policyParams` - प्रति-पॉलिसी कुंजी, पहली फ़ाइल जो इसे परिभाषित करती है पूरी तरह जीतती है
|
|
161
161
|
- `customPoliciesPath` - पहली फ़ाइल जो इसे परिभाषित करती है जीतती है
|
|
162
162
|
- `llm` - पहली फ़ाइल जो इसे परिभाषित करती है जीतती है
|
|
163
163
|
|
|
164
|
-
वेब डैशबोर्ड पढ़ने और लिखने के लिए `readHooksConfig()` (केवल वैश्विक) का उपयोग करता है, क्योंकि
|
|
164
|
+
वेब डैशबोर्ड पढ़ने और लिखने के लिए `readHooksConfig()` (केवल वैश्विक) का उपयोग करता है, क्योंकि इसे प्रोजेक्ट cwd के साथ आमंत्रित नहीं किया जाता है।
|
|
165
165
|
|
|
166
166
|
---
|
|
167
167
|
|
|
168
168
|
## पॉलिसी मूल्यांकन
|
|
169
169
|
|
|
170
|
-
`src/hooks/policy-evaluator.ts` क्रम में
|
|
170
|
+
`src/hooks/policy-evaluator.ts` पॉलिसीज़ को क्रम में चलाता है।
|
|
171
171
|
|
|
172
172
|
प्रत्येक पॉलिसी के लिए:
|
|
173
173
|
|
|
174
174
|
1. पॉलिसी के `params` स्कीमा को देखें (यदि इसके पास है)।
|
|
175
|
-
2. मर्ज
|
|
176
|
-
3. `ctx.params`
|
|
175
|
+
2. मर्ज किए गए कॉन्फ़िगरेशन से `policyParams[policy.name]` पढ़ें।
|
|
176
|
+
3. `ctx.params` बनाने के लिए स्कीमा डिफ़ॉल्ट्स पर उपयोगकर्ता-प्रदान किए गए मानों को मर्ज करें।
|
|
177
177
|
4. हल किए गए संदर्भ के साथ `policy.fn(ctx)` को कॉल करें।
|
|
178
|
-
5. यदि परिणाम `deny` है, तो तुरंत रुकें और
|
|
178
|
+
5. यदि परिणाम `deny` है, तो तुरंत रुकें और उस निर्णय को वापस करें।
|
|
179
179
|
6. यदि परिणाम `instruct` है, तो संदेश को जमा करें और जारी रखें।
|
|
180
180
|
7. यदि परिणाम `allow` है, तो अगली पॉलिसी पर जाएं।
|
|
181
181
|
|
|
182
182
|
सभी पॉलिसीज़ चलने के बाद:
|
|
183
|
-
- यदि कोई `deny`
|
|
184
|
-
- यदि कोई `instruct`
|
|
185
|
-
- अन्यथा, अनुमति प्रतिक्रिया
|
|
183
|
+
- यदि कोई `deny` वापस किया गया था, तो अस्वीकार प्रतिक्रिया दें।
|
|
184
|
+
- यदि कोई `instruct` वापसी एकत्र किए गए थे, तो सभी संदेशों को जोड़ने के साथ एक एकल निर्देश प्रतिक्रिया दें।
|
|
185
|
+
- अन्यथा, अनुमति प्रतिक्रिया दें (खाली stdout, exit 0)।
|
|
186
186
|
|
|
187
187
|
---
|
|
188
188
|
|
|
189
|
-
##
|
|
189
|
+
## अंतर्निहित पॉलिसीज़
|
|
190
190
|
|
|
191
|
-
`src/hooks/builtin-policies.ts` सभी 26
|
|
191
|
+
`src/hooks/builtin-policies.ts` सभी 26 अंतर्निहित पॉलिसीज़ को `BuiltinPolicyDefinition` ऑब्जेक्ट्स के रूप में परिभाषित करता है:
|
|
192
192
|
|
|
193
193
|
```typescript
|
|
194
194
|
interface BuiltinPolicyDefinition {
|
|
@@ -206,9 +206,9 @@ interface BuiltinPolicyDefinition {
|
|
|
206
206
|
}
|
|
207
207
|
```
|
|
208
208
|
|
|
209
|
-
जो पॉलिसीज़ `params` स्वीकार करती हैं वे प्रत्येक पैरामीटर के लिए प्रकार और
|
|
209
|
+
जो पॉलिसीज़ `params` स्वीकार करती हैं वे प्रत्येक पैरामीटर के लिए प्रकार और डिफ़ॉल्ट्स के साथ `PolicyParamsSchema` घोषित करती हैं। पॉलिसी मूल्यांकन `fn` को कॉल करने से पहले `ctx.params` में हल किए गए मानों को इंजेक्ट करता है। पॉलिसी फ़ंक्शन्स `ctx.params` को पढ़ते हैं बिना null-गार्डिंग के क्योंकि डिफ़ॉल्ट्स हमेशा पहले लागू होते हैं।
|
|
210
210
|
|
|
211
|
-
पॉलिसीज़ के अंदर पैटर्न मिलान
|
|
211
|
+
पॉलिसीज़ के अंदर पैटर्न मिलान पार्स किए गए कमांड टोकन्स (argv) का उपयोग करता है, कच्ची स्ट्रिंग मिलान नहीं। यह shell ऑपरेटर इंजेक्शन के माध्यम से बाईपास को रोकता है (उदाहरण के लिए `sudo systemctl status *` के लिए एक पैटर्न को `; rm -rf /` को जोड़कर बाईपास नहीं किया जा सकता)।
|
|
212
212
|
|
|
213
213
|
---
|
|
214
214
|
|
|
@@ -224,28 +224,28 @@ export const customPolicies = {
|
|
|
224
224
|
};
|
|
225
225
|
|
|
226
226
|
export function getCustomHooks(): CustomHook[] { ... }
|
|
227
|
-
export function clearCustomHooks(): void { ... } //
|
|
227
|
+
export function clearCustomHooks(): void { ... } // used in tests
|
|
228
228
|
```
|
|
229
229
|
|
|
230
230
|
`src/hooks/custom-hooks-loader.ts` उपयोगकर्ता की पॉलिसी फ़ाइल लोड करता है:
|
|
231
231
|
|
|
232
|
-
1.
|
|
233
|
-
2. निरपेक्ष पथ
|
|
234
|
-
3. सभी `from "failproofai"` आयातों को वास्तविक dist
|
|
235
|
-
4. ESM
|
|
232
|
+
1. कॉन्फ़िगरेशन से `customPoliciesPath` पढ़ें; यदि अनुपस्थित है तो छोड़ दें।
|
|
233
|
+
2. निरपेक्ष पथ में हल करें; फ़ाइल मौजूदगी की जांच करें।
|
|
234
|
+
3. सभी `from "failproofai"` आयातों को वास्तविक dist पथ में फिर से लिखें ताकि `customPolicies` एक ही `globalThis` रजिस्ट्री में हल हो।
|
|
235
|
+
4. ESM अनुकूलता सुनिश्चित करने के लिए संक्रमणकालीन स्थानीय आयातों को पुनरावर्ती रूप से फिर से लिखें।
|
|
236
236
|
5. अस्थायी `.mjs` फ़ाइलें लिखें और प्रविष्टि फ़ाइल को `import()` करें।
|
|
237
|
-
6. पंजीकृत
|
|
238
|
-
7. `finally` ब्लॉक में सभी अस्थायी
|
|
237
|
+
6. पंजीकृत हुक्स को पुनः प्राप्त करने के लिए `getCustomHooks()` को कॉल करें।
|
|
238
|
+
7. `finally` ब्लॉक में सभी अस्थायी फ़ाइलों को साफ़ करें।
|
|
239
239
|
|
|
240
|
-
किसी भी त्रुटि पर (फ़ाइल नहीं मिली, सिंटैक्स त्रुटि, आयात
|
|
240
|
+
किसी भी त्रुटि पर (फ़ाइल नहीं मिली, सिंटैक्स त्रुटि, आयात विफलता), त्रुटि को `~/.failproofai/hook.log` में लॉग किया जाता है और लोडर एक खाली सरणी देता है। अंतर्निहित पॉलिसीज़ प्रभावित नहीं होती हैं।
|
|
241
241
|
|
|
242
|
-
कस्टम पॉलिसीज़ सभी
|
|
242
|
+
कस्टम पॉलिसीज़ का मूल्यांकन सभी अंतर्निहित पॉलिसीज़ के बाद किया जाता है। एक कस्टम पॉलिसी `deny` अभी भी आगे की कस्टम पॉलिसीज़ को छोटा करता है (लेकिन सभी अंतर्निहित पॉलिसीज़ पहले ही चल चुकी हैं)।
|
|
243
243
|
|
|
244
244
|
---
|
|
245
245
|
|
|
246
246
|
## गतिविधि लॉगिंग
|
|
247
247
|
|
|
248
|
-
प्रत्येक हुक इवेंट के बाद, हैंडलर `~/.failproofai/hook-activity.jsonl` में एक JSONL
|
|
248
|
+
प्रत्येक हुक इवेंट के बाद, हैंडलर `~/.failproofai/hook-activity.jsonl` में एक JSONL पंक्ति जोड़ता है:
|
|
249
249
|
|
|
250
250
|
```json
|
|
251
251
|
{
|
|
@@ -260,44 +260,44 @@ export function clearCustomHooks(): void { ... } // परीक्षण म
|
|
|
260
260
|
}
|
|
261
261
|
```
|
|
262
262
|
|
|
263
|
-
|
|
263
|
+
प्रत्येक पॉलिसी के लिए एक पंक्ति जिसने एक गैर-अनुमति निर्णय दिया। अनुमति के निर्णय लॉग नहीं किए जाते हैं (फ़ाइल को छोटा रखने के लिए)।
|
|
264
264
|
|
|
265
265
|
---
|
|
266
266
|
|
|
267
267
|
## डैशबोर्ड आर्किटेक्चर
|
|
268
268
|
|
|
269
|
-
डैशबोर्ड एक **Next.js 16** एप्लिकेशन है जो App Router
|
|
269
|
+
डैशबोर्ड एक **Next.js 16** एप्लिकेशन है जो App Router के साथ React Server Components और Server Actions का उपयोग करता है।
|
|
270
270
|
|
|
271
271
|
```text
|
|
272
272
|
app/
|
|
273
|
-
layout.tsx ←
|
|
274
|
-
projects/page.tsx ←
|
|
275
|
-
project/[name]/page.tsx ←
|
|
273
|
+
layout.tsx ← Root layout (theme, telemetry, nav)
|
|
274
|
+
projects/page.tsx ← Server component: list all Claude projects
|
|
275
|
+
project/[name]/page.tsx ← Server component: list sessions in a project
|
|
276
276
|
project/[name]/session/
|
|
277
|
-
[sessionId]/page.tsx ←
|
|
278
|
-
policies/page.tsx ←
|
|
277
|
+
[sessionId]/page.tsx ← Server component: render session viewer
|
|
278
|
+
policies/page.tsx ← Client component: policy management + activity log
|
|
279
279
|
actions/
|
|
280
|
-
get-hooks-config.ts ←
|
|
281
|
-
update-hooks-config.ts ←
|
|
282
|
-
update-policy-params.ts ←
|
|
283
|
-
get-hook-activity.ts ←
|
|
284
|
-
install-hooks-web.ts ←
|
|
280
|
+
get-hooks-config.ts ← Read config + policy list
|
|
281
|
+
update-hooks-config.ts ← Toggle policy on/off
|
|
282
|
+
update-policy-params.ts ← Update policy parameters
|
|
283
|
+
get-hook-activity.ts ← Paginate/search activity log
|
|
284
|
+
install-hooks-web.ts ← Install/remove hooks from the browser
|
|
285
285
|
api/
|
|
286
|
-
download/[project]/[session]/route.ts ←
|
|
286
|
+
download/[project]/[session]/route.ts ← Export session as ZIP/JSONL
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
**डेटा
|
|
289
|
+
**डेटा प्रवाह:**
|
|
290
290
|
|
|
291
|
-
-
|
|
292
|
-
- पॉलिसीज़
|
|
293
|
-
- सेशन दर्शक Claude
|
|
291
|
+
- पेज कंपोनेंट्स प्रोजेक्ट/सेशन डेटा को सीधे फ़ाइलसिस्टम से पढ़ने के लिए `lib/projects.ts` और `lib/log-entries.ts` को कॉल करते हैं (पढ़ने के लिए कोई API परत नहीं)।
|
|
292
|
+
- पॉलिसीज़ पेज सभी म्यूटेशन्स के लिए Server Actions का उपयोग करता है (टॉगल, पैरामीटर अपडेट, इंस्टॉल/निकालना)।
|
|
293
|
+
- सेशन दर्शक Claude की JSONL ट्रांसक्रिप्ट प्रारूप को पार्स करता है और संदेशों और टूल कॉल्स की एक समयरेखा प्रस्तुत करता है।
|
|
294
294
|
|
|
295
295
|
**मुख्य डिज़ाइन निर्णय:**
|
|
296
296
|
|
|
297
|
-
- कोई डेटाबेस नहीं - सभी स्थायी स्थिति
|
|
298
|
-
-
|
|
299
|
-
- पढ़ने
|
|
300
|
-
- क्लाइंट
|
|
297
|
+
- कोई डेटाबेस नहीं - सभी स्थायी स्थिति सादी फ़ाइलों में है (`~/.failproofai/`, `~/.claude/projects/`)।
|
|
298
|
+
- म्यूटेशन्स के लिए Server Actions - CRUD ऑपरेशन्स के लिए कोई REST API आवश्यक नहीं है।
|
|
299
|
+
- पढ़ने पन्नों के लिए React Server Components - तेज़ प्रारंभिक लोड, डेटा फेचिंग के लिए कोई क्लाइंट बंडल नहीं।
|
|
300
|
+
- क्लाइंट कंपोनेंट्स केवल जहां इंटरैक्टिविटी आवश्यक है (पॉलिसी टॉगल, गतिविधि खोज, लॉग दर्शक)।
|
|
301
301
|
|
|
302
302
|
---
|
|
303
303
|
|
|
@@ -306,29 +306,29 @@ app/
|
|
|
306
306
|
```text
|
|
307
307
|
failproofai/
|
|
308
308
|
├── bin/
|
|
309
|
-
│ └── failproofai.mjs # CLI
|
|
309
|
+
│ └── failproofai.mjs # CLI router (hook / dashboard / install / etc.)
|
|
310
310
|
├── src/hooks/
|
|
311
|
-
│ ├── handler.ts #
|
|
312
|
-
│ ├── builtin-policies.ts # 26
|
|
313
|
-
│ ├── policy-evaluator.ts #
|
|
314
|
-
│ ├── policy-registry.ts #
|
|
315
|
-
│ ├── policy-types.ts # TypeScript
|
|
316
|
-
│ ├── hooks-config.ts #
|
|
317
|
-
│ ├── custom-hooks-registry.ts # globalThis
|
|
318
|
-
│ ├── custom-hooks-loader.ts #
|
|
319
|
-
│ ├── manager.ts #
|
|
320
|
-
│ ├── install-prompt.ts #
|
|
321
|
-
│ ├── hook-logger.ts # hook.log
|
|
322
|
-
│ ├── hook-activity-store.ts # hook-activity.jsonl
|
|
323
|
-
│ └── llm-client.ts # LLM API
|
|
324
|
-
├── app/ # Next.js
|
|
325
|
-
├── lib/ #
|
|
326
|
-
│ ├── projects.ts #
|
|
327
|
-
│ ├── log-entries.ts # Claude
|
|
328
|
-
│ ├── paths.ts #
|
|
311
|
+
│ ├── handler.ts # Hook event pipeline
|
|
312
|
+
│ ├── builtin-policies.ts # 26 policy definitions
|
|
313
|
+
│ ├── policy-evaluator.ts # Policy execution engine
|
|
314
|
+
│ ├── policy-registry.ts # Policy registration and lookup
|
|
315
|
+
│ ├── policy-types.ts # TypeScript interfaces
|
|
316
|
+
│ ├── hooks-config.ts # Multi-scope config loading
|
|
317
|
+
│ ├── custom-hooks-registry.ts # globalThis-backed hook registry
|
|
318
|
+
│ ├── custom-hooks-loader.ts # ESM loader for user JS hooks
|
|
319
|
+
│ ├── manager.ts # install / remove / list operations
|
|
320
|
+
│ ├── install-prompt.ts # Interactive policy selection prompt
|
|
321
|
+
│ ├── hook-logger.ts # Logging to hook.log
|
|
322
|
+
│ ├── hook-activity-store.ts # Persist activity to hook-activity.jsonl
|
|
323
|
+
│ └── llm-client.ts # LLM API client (for AI-powered policies)
|
|
324
|
+
├── app/ # Next.js dashboard (pages + server actions)
|
|
325
|
+
├── lib/ # Shared utilities
|
|
326
|
+
│ ├── projects.ts # Enumerate Claude projects from filesystem
|
|
327
|
+
│ ├── log-entries.ts # Parse Claude transcript JSONL format
|
|
328
|
+
│ ├── paths.ts # Resolve system paths
|
|
329
329
|
│ └── ...
|
|
330
|
-
├── components/ #
|
|
331
|
-
├── contexts/ # React
|
|
332
|
-
├── examples/ #
|
|
333
|
-
└── __tests__/ #
|
|
330
|
+
├── components/ # Shared React UI components
|
|
331
|
+
├── contexts/ # React context providers (theme, auto-refresh, telemetry)
|
|
332
|
+
├── examples/ # Example custom hook files
|
|
333
|
+
└── __tests__/ # Unit and E2E tests
|
|
334
334
|
```
|