failproofai 1.0.5 → 1.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/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +5 -5
- 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 +6 -6
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- 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 +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +14 -14
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -14
- 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 +14 -14
- 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 +1 -1
- 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/app/settings/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +4 -4
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/[externals]__0sds_16._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
- package/.next/standalone/.next/server/chunks/_09dz7xv._.js +3 -3
- package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oi._.js +2 -2
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +2 -2
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013jr2b._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02npjtd._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da85px._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ftmoxc._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0oa1lav._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p-5p8u._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s740oi._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__15k-dqb._.js → [root-of-the-server]__1i26dsw._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0sz_5na._.js → [root-of-the-server]__1ouobn4._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1p2otjt._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1qapotl._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0-yi74u._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1b78kcp._.js → _09hs6ms._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0guaevg._.js → _0lbwa8m._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0wso5d3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1-3unkg._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1ddpc5g._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1es2j7i._.js +3 -3
- package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +3 -3
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_project-list_tsx_1ke6anr._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1hl81y4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuzn._.js +2 -2
- package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
- package/.next/standalone/.next/server/pages/404.html +1 -1
- 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 +19 -19
- package/.next/standalone/.next/static/chunks/{3w46euc60dx39.js → 03n_qjih7-w6q.js} +1 -1
- package/.next/standalone/.next/static/chunks/{2zafgs90r_leq.js → 06jxjnw8bfczc.js} +1 -1
- package/.next/standalone/.next/static/chunks/{252xreaecy80h.js → 0vanab2g65op_.js} +1 -1
- package/.next/standalone/.next/static/chunks/17pjz_h45j10c.js +1 -0
- package/.next/standalone/.next/static/chunks/1ekh-hj_iom84.js +1 -0
- package/.next/standalone/.next/static/chunks/{021ydrq6rhpsi.js → 1so_3s0q4c4j1.js} +1 -1
- package/.next/standalone/.next/static/chunks/1xacnwjkbekn7.js +1 -0
- package/.next/standalone/.next/static/chunks/2hg_bp8z_vm2g.js +1 -0
- package/.next/standalone/.next/static/chunks/{3bleyy40s99f2.js → 2u0kol_boahtv.js} +1 -1
- package/.next/standalone/.next/static/chunks/{1vb33xa6j9y2q.js → 3_vesf83-0903.js} +1 -1
- package/.next/standalone/.next/static/chunks/3d3hzhcnns6ww.js +1 -0
- package/.next/standalone/.next/static/chunks/3iasus89n8mg1.js +6 -0
- package/.next/standalone/.next/static/chunks/{11s_v03ub6nss.js → 44_cj1_i_aa2z.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-3p73obe0xmrxm.js → turbopack-38nzuvp95_2rv.js} +1 -1
- package/.next/standalone/fp-cloud-cli/uv.lock +3 -3
- package/.next/standalone/hermes-plugin/README.md +133 -0
- package/.next/standalone/hermes-plugin/__init__.py +248 -0
- package/.next/standalone/hermes-plugin/client.py +134 -0
- package/.next/standalone/hermes-plugin/ledger.py +187 -0
- package/.next/standalone/hermes-plugin/plugin.yaml +37 -0
- 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/app-page-turbo-experimental.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js +2 -1
- 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/image-optimizer.js +14 -0
- package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/disk-lru-cache.external.js +7 -1
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +6 -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 +10 -10
- package/.next/standalone/node_modules/react/cjs/react.development.js +92 -46
- package/.next/standalone/node_modules/react/cjs/react.production.js +112 -89
- package/.next/standalone/node_modules/react/package.json +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1165 -790
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1171 -791
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +1294 -862
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +1305 -868
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +1315 -896
- package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +24 -5
- package/.next/standalone/node_modules/react-dom/package.json +4 -4
- package/.next/standalone/package.json +13 -12
- package/.next/standalone/sdk/python/uv.lock +18 -18
- package/.next/standalone/server.js +1 -1
- package/README.md +29 -13
- package/bin/failproofai.mjs +3 -1
- package/dist/cli.mjs +420 -178
- package/dist/worker.mjs +17 -3
- package/hermes-plugin/README.md +133 -0
- package/hermes-plugin/__init__.py +248 -0
- package/hermes-plugin/client.py +134 -0
- package/hermes-plugin/ledger.py +187 -0
- package/hermes-plugin/plugin.yaml +37 -0
- package/package.json +13 -12
- package/scripts/translate-docs/validate-translation.ts +48 -0
- package/src/hooks/handler.ts +29 -1
- package/src/hooks/integrations.ts +264 -73
- package/src/hooks/manager.ts +17 -5
- package/src/hooks/types.ts +8 -8
- package/src/hooks/worker-server.ts +1 -0
- package/.next/standalone/.next/server/chunks/[externals]__157pf8j._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_13n822a._.js +0 -3
- package/.next/standalone/.next/static/chunks/0y8_1s45gbqmn.js +0 -6
- package/.next/standalone/.next/static/chunks/14b3ezufe5411.js +0 -1
- package/.next/standalone/.next/static/chunks/1oskk7pdo8aon.js +0 -1
- package/.next/standalone/.next/static/chunks/2xycd6mjg00fb.js +0 -1
- package/.next/standalone/.next/static/chunks/3l36d73kj18zw.js +0 -1
- package/.next/standalone/.next/static/chunks/40lpt2o2b283e.js +0 -1
- /package/.next/standalone/.next/static/{uFpAs_vIXSo6qBzmkXPWD → -7OT2NwGPxAu-skEL_Xee}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{uFpAs_vIXSo6qBzmkXPWD → -7OT2NwGPxAu-skEL_Xee}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{uFpAs_vIXSo6qBzmkXPWD → -7OT2NwGPxAu-skEL_Xee}/_ssgManifest.js +0 -0
|
@@ -43,13 +43,20 @@ var Internals = {
|
|
|
43
43
|
p: 0,
|
|
44
44
|
findDOMNode: null
|
|
45
45
|
},
|
|
46
|
-
REACT_PORTAL_TYPE = Symbol.for("react.portal")
|
|
46
|
+
REACT_PORTAL_TYPE = Symbol.for("react.portal"),
|
|
47
|
+
REACT_RECOVERABLE_TYPE = Symbol.for("react.recoverable"),
|
|
48
|
+
REACT_OPTIMISTIC_KEY = Symbol.for("react.optimistic_key");
|
|
47
49
|
function createPortal$1(children, containerInfo, implementation) {
|
|
48
50
|
var key =
|
|
49
51
|
3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;
|
|
50
52
|
return {
|
|
51
53
|
$$typeof: REACT_PORTAL_TYPE,
|
|
52
|
-
key:
|
|
54
|
+
key:
|
|
55
|
+
null == key
|
|
56
|
+
? null
|
|
57
|
+
: key === REACT_OPTIMISTIC_KEY
|
|
58
|
+
? REACT_OPTIMISTIC_KEY
|
|
59
|
+
: "" + key,
|
|
53
60
|
children: children,
|
|
54
61
|
containerInfo: containerInfo,
|
|
55
62
|
implementation: implementation
|
|
@@ -64,6 +71,9 @@ function getCrossOriginStringAs(as, input) {
|
|
|
64
71
|
}
|
|
65
72
|
exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
|
|
66
73
|
Internals;
|
|
74
|
+
exports.browser = function (reason) {
|
|
75
|
+
return { $$typeof: REACT_RECOVERABLE_TYPE, _reason: reason };
|
|
76
|
+
};
|
|
67
77
|
exports.createPortal = function (children, container) {
|
|
68
78
|
var key =
|
|
69
79
|
2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;
|
|
@@ -144,7 +154,11 @@ exports.preinitModule = function (href, options) {
|
|
|
144
154
|
crossOrigin: crossOrigin,
|
|
145
155
|
integrity:
|
|
146
156
|
"string" === typeof options.integrity ? options.integrity : void 0,
|
|
147
|
-
nonce: "string" === typeof options.nonce ? options.nonce : void 0
|
|
157
|
+
nonce: "string" === typeof options.nonce ? options.nonce : void 0,
|
|
158
|
+
fetchPriority:
|
|
159
|
+
"string" === typeof options.fetchPriority
|
|
160
|
+
? options.fetchPriority
|
|
161
|
+
: void 0
|
|
148
162
|
});
|
|
149
163
|
}
|
|
150
164
|
} else null == options && Internals.d.M(href);
|
|
@@ -191,7 +205,12 @@ exports.preloadModule = function (href, options) {
|
|
|
191
205
|
: void 0,
|
|
192
206
|
crossOrigin: crossOrigin,
|
|
193
207
|
integrity:
|
|
194
|
-
"string" === typeof options.integrity ? options.integrity : void 0
|
|
208
|
+
"string" === typeof options.integrity ? options.integrity : void 0,
|
|
209
|
+
nonce: "string" === typeof options.nonce ? options.nonce : void 0,
|
|
210
|
+
fetchPriority:
|
|
211
|
+
"string" === typeof options.fetchPriority
|
|
212
|
+
? options.fetchPriority
|
|
213
|
+
: void 0
|
|
195
214
|
});
|
|
196
215
|
} else Internals.d.m(href);
|
|
197
216
|
};
|
|
@@ -207,4 +226,4 @@ exports.useFormState = function (action, initialState, permalink) {
|
|
|
207
226
|
exports.useFormStatus = function () {
|
|
208
227
|
return ReactSharedInternals.H.useHostTransitionStatus();
|
|
209
228
|
};
|
|
210
|
-
exports.version = "19.
|
|
229
|
+
exports.version = "19.3.0";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-dom",
|
|
3
|
-
"version": "19.
|
|
3
|
+
"version": "19.3.0",
|
|
4
4
|
"description": "React package for working with the DOM.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
},
|
|
18
18
|
"homepage": "https://react.dev/",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"scheduler": "^0.
|
|
20
|
+
"scheduler": "^0.28.0"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"react": "^19.
|
|
23
|
+
"react": "^19.3.0"
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
"LICENSE",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"react-server": "./server.react-server.js",
|
|
59
59
|
"workerd": "./server.edge.js",
|
|
60
60
|
"bun": "./server.bun.js",
|
|
61
|
-
"deno": "./server.
|
|
61
|
+
"deno": "./server.node.js",
|
|
62
62
|
"worker": "./server.browser.js",
|
|
63
63
|
"node": "./server.node.js",
|
|
64
64
|
"edge-light": "./server.edge.js",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "failproofai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6-beta.0",
|
|
4
4
|
"description": "Observability and enforcement for AI agent harnesses. 39 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"failproofai": "./dist/cli.mjs",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"scripts/",
|
|
13
13
|
"lib/",
|
|
14
14
|
"pi-extension/",
|
|
15
|
+
"hermes-plugin/",
|
|
15
16
|
"openclaw-plugin/",
|
|
16
17
|
".next/standalone/",
|
|
17
18
|
"dist/",
|
|
@@ -80,15 +81,15 @@
|
|
|
80
81
|
"access": "public"
|
|
81
82
|
},
|
|
82
83
|
"devDependencies": {
|
|
83
|
-
"@anthropic-ai/sdk": "^0.
|
|
84
|
+
"@anthropic-ai/sdk": "^0.125.0",
|
|
84
85
|
"@mdx-js/mdx": "^3.1.1",
|
|
85
86
|
"@tailwindcss/postcss": "^4.3.1",
|
|
86
87
|
"@tanstack/react-virtual": "^3.14.10",
|
|
87
88
|
"@testing-library/jest-dom": "^7.0.0",
|
|
88
89
|
"@testing-library/react": "^16.3.2",
|
|
89
90
|
"@testing-library/user-event": "^14.6.5",
|
|
90
|
-
"@types/node": "26.
|
|
91
|
-
"@types/react": "19.
|
|
91
|
+
"@types/node": "26.5.1",
|
|
92
|
+
"@types/react": "19.3.0",
|
|
92
93
|
"@types/react-dom": "^19.2.3",
|
|
93
94
|
"@vitejs/plugin-react": "^6.1.0",
|
|
94
95
|
"clsx": "^2.1.1",
|
|
@@ -121,15 +122,15 @@
|
|
|
121
122
|
"browserslist": "4.28.8"
|
|
122
123
|
},
|
|
123
124
|
"optionalDependencies": {
|
|
124
|
-
"@failproofai/failproofaid-linux-x64": "1.0.
|
|
125
|
-
"@failproofai/failproofaid-linux-arm64": "1.0.
|
|
126
|
-
"@failproofai/failproofaid-darwin-x64": "1.0.
|
|
127
|
-
"@failproofai/failproofaid-darwin-arm64": "1.0.
|
|
125
|
+
"@failproofai/failproofaid-linux-x64": "1.0.6-beta.0",
|
|
126
|
+
"@failproofai/failproofaid-linux-arm64": "1.0.6-beta.0",
|
|
127
|
+
"@failproofai/failproofaid-darwin-x64": "1.0.6-beta.0",
|
|
128
|
+
"@failproofai/failproofaid-darwin-arm64": "1.0.6-beta.0"
|
|
128
129
|
},
|
|
129
130
|
"failproofaidBinaries": {
|
|
130
|
-
"linux-x64": "
|
|
131
|
-
"linux-arm64": "
|
|
132
|
-
"darwin-x64": "
|
|
133
|
-
"darwin-arm64": "
|
|
131
|
+
"linux-x64": "38637a91db9a0e5683bbfbfffbba3d65e421960c3135510f23541df5f9d60478",
|
|
132
|
+
"linux-arm64": "b9a2d9126fb9816b7743ec5b068d36d6515fa3a93fc2e3801fbe3a7a1b2143bf",
|
|
133
|
+
"darwin-x64": "a06675cd28b3d2f54d45a28f527643841a69006dd68f989dad654806b190948b",
|
|
134
|
+
"darwin-arm64": "6ef65b956ebff944c38cf2d65b6dc1066384aba7952d7d19c4805c1f1ba593ba"
|
|
134
135
|
}
|
|
135
136
|
}
|
|
@@ -751,7 +751,7 @@ wheels = [
|
|
|
751
751
|
|
|
752
752
|
[[package]]
|
|
753
753
|
name = "crewai"
|
|
754
|
-
version = "1.15.
|
|
754
|
+
version = "1.15.21"
|
|
755
755
|
source = { registry = "https://pypi.org/simple" }
|
|
756
756
|
dependencies = [
|
|
757
757
|
{ name = "aiofiles" },
|
|
@@ -786,14 +786,14 @@ dependencies = [
|
|
|
786
786
|
{ name = "tomli" },
|
|
787
787
|
{ name = "tomli-w" },
|
|
788
788
|
]
|
|
789
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
789
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ab/d4/58a44b3450f95c0cb2654bccc01bc5cd65bff768b57189f11cecf641d18d/crewai-1.15.21.tar.gz", hash = "sha256:87eb5c7ad772db5b21cfd4c219800c1886a6a5076d02617db16824f944264345", size = 7975540, upload-time = "2026-09-09T22:54:56.424Z" }
|
|
790
790
|
wheels = [
|
|
791
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
791
|
+
{ url = "https://files.pythonhosted.org/packages/c6/2b/38d8b378ec1f55d893f2d52dfb6349b282f464f40535ff53b047916f21d4/crewai-1.15.21-py3-none-any.whl", hash = "sha256:08ef2605260b0ffa7c54218fbcab8d3c4dc8d6307bd3b43513985529f6f666ab", size = 1144433, upload-time = "2026-09-09T22:54:54.299Z" },
|
|
792
792
|
]
|
|
793
793
|
|
|
794
794
|
[[package]]
|
|
795
795
|
name = "crewai-cli"
|
|
796
|
-
version = "1.15.
|
|
796
|
+
version = "1.15.21"
|
|
797
797
|
source = { registry = "https://pypi.org/simple" }
|
|
798
798
|
dependencies = [
|
|
799
799
|
{ name = "appdirs" },
|
|
@@ -813,14 +813,14 @@ dependencies = [
|
|
|
813
813
|
{ name = "tomli-w" },
|
|
814
814
|
{ name = "uv" },
|
|
815
815
|
]
|
|
816
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
816
|
+
sdist = { url = "https://files.pythonhosted.org/packages/c7/22/4747b13eeedcc073d6b5c5af1738491d321b26846ab9d979def67fbecbff/crewai_cli-1.15.21.tar.gz", hash = "sha256:9b949c50d20daef8b51a0c54e7726a0570b55233eef8ffd47febfe329137b3da", size = 235951, upload-time = "2026-09-09T22:54:59.153Z" }
|
|
817
817
|
wheels = [
|
|
818
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
818
|
+
{ url = "https://files.pythonhosted.org/packages/ad/b4/3352d0f1bb431bc2d8f4aaabd045a30bd374a50c682e15c80fc1290b8d52/crewai_cli-1.15.21-py3-none-any.whl", hash = "sha256:f65b4d0f55816a1a2d3b86c9c087527ddb1c85d868a4d2a75931edc04482cbd9", size = 198948, upload-time = "2026-09-09T22:54:57.921Z" },
|
|
819
819
|
]
|
|
820
820
|
|
|
821
821
|
[[package]]
|
|
822
822
|
name = "crewai-core"
|
|
823
|
-
version = "1.15.
|
|
823
|
+
version = "1.15.21"
|
|
824
824
|
source = { registry = "https://pypi.org/simple" }
|
|
825
825
|
dependencies = [
|
|
826
826
|
{ name = "appdirs" },
|
|
@@ -836,9 +836,9 @@ dependencies = [
|
|
|
836
836
|
{ name = "rich" },
|
|
837
837
|
{ name = "tomli" },
|
|
838
838
|
]
|
|
839
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
839
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b3/4c/28f0bcf8b77bcb5adc782b6403001fb23e83ec26e6a6c7a5aee97b480450/crewai_core-1.15.21.tar.gz", hash = "sha256:8ca73bd33e0fe1de1a25193bd3c468e9e23aee55f6b4001c4f43e65a3fdbde81", size = 39213, upload-time = "2026-09-09T22:55:01.395Z" }
|
|
840
840
|
wheels = [
|
|
841
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
841
|
+
{ url = "https://files.pythonhosted.org/packages/a1/36/9a415b0420ff9dff74d9413fb48a438754ebaa102fc73b85f7923d5819a1/crewai_core-1.15.21-py3-none-any.whl", hash = "sha256:26143369fb3278c41ea843f2bab29437c78d962738b98e8f846aac3225c65bf5", size = 42480, upload-time = "2026-09-09T22:55:00.218Z" },
|
|
842
842
|
]
|
|
843
843
|
|
|
844
844
|
[[package]]
|
|
@@ -2003,7 +2003,7 @@ wheels = [
|
|
|
2003
2003
|
|
|
2004
2004
|
[[package]]
|
|
2005
2005
|
name = "langchain-core"
|
|
2006
|
-
version = "1.6.
|
|
2006
|
+
version = "1.6.3"
|
|
2007
2007
|
source = { registry = "https://pypi.org/simple" }
|
|
2008
2008
|
dependencies = [
|
|
2009
2009
|
{ name = "httpx" },
|
|
@@ -2017,9 +2017,9 @@ dependencies = [
|
|
|
2017
2017
|
{ name = "typing-extensions" },
|
|
2018
2018
|
{ name = "uuid-utils" },
|
|
2019
2019
|
]
|
|
2020
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2020
|
+
sdist = { url = "https://files.pythonhosted.org/packages/06/d7/1482670ccebc863166852516a08a1956fc50da40fbe2fe7dd218abfef4a1/langchain_core-1.6.3.tar.gz", hash = "sha256:88b430944fbd4d40fa98135d6c873581d497b6f33515d01962337548e918df2f", size = 1006228, upload-time = "2026-09-11T17:37:45.614Z" }
|
|
2021
2021
|
wheels = [
|
|
2022
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2022
|
+
{ url = "https://files.pythonhosted.org/packages/e6/18/cf18cfec118b02e003f35300b54d6a1173dc6e4905cffdf5ea49e390a7f9/langchain_core-1.6.3-py3-none-any.whl", hash = "sha256:114fe1868c9ed60606662b9dd0074bf3152cc6b0b1522ba37cbd6b04f55ca77d", size = 571753, upload-time = "2026-09-11T17:37:43.875Z" },
|
|
2023
2023
|
]
|
|
2024
2024
|
|
|
2025
2025
|
[[package]]
|
|
@@ -3906,7 +3906,7 @@ wheels = [
|
|
|
3906
3906
|
|
|
3907
3907
|
[[package]]
|
|
3908
3908
|
name = "pydantic-ai-slim"
|
|
3909
|
-
version = "2.
|
|
3909
|
+
version = "2.42.0"
|
|
3910
3910
|
source = { registry = "https://pypi.org/simple" }
|
|
3911
3911
|
dependencies = [
|
|
3912
3912
|
{ name = "anyio" },
|
|
@@ -3919,9 +3919,9 @@ dependencies = [
|
|
|
3919
3919
|
{ name = "pydantic-graph" },
|
|
3920
3920
|
{ name = "typing-inspection" },
|
|
3921
3921
|
]
|
|
3922
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
3922
|
+
sdist = { url = "https://files.pythonhosted.org/packages/47/ec/59161f7aa44251775afec888615b84905634252b7dac6f0acf2f430ffadf/pydantic_ai_slim-2.42.0.tar.gz", hash = "sha256:045c788b1636e0ed79542f2b7562d2688a3e3701744ed7379a928fceec446336", size = 1453904, upload-time = "2026-09-09T03:48:51.06Z" }
|
|
3923
3923
|
wheels = [
|
|
3924
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
3924
|
+
{ url = "https://files.pythonhosted.org/packages/80/d5/5f9489b6d8583366c32c76671f4d5c3a91cf7e0e0a7073269d9fee756f28/pydantic_ai_slim-2.42.0-py3-none-any.whl", hash = "sha256:a042b73551470c40a2ab7cd532e26c20f592b5731ae544ff3eecbcdf6ceebcc4", size = 1714452, upload-time = "2026-09-09T03:48:43.81Z" },
|
|
3925
3925
|
]
|
|
3926
3926
|
|
|
3927
3927
|
[[package]]
|
|
@@ -4044,7 +4044,7 @@ wheels = [
|
|
|
4044
4044
|
|
|
4045
4045
|
[[package]]
|
|
4046
4046
|
name = "pydantic-graph"
|
|
4047
|
-
version = "2.
|
|
4047
|
+
version = "2.42.0"
|
|
4048
4048
|
source = { registry = "https://pypi.org/simple" }
|
|
4049
4049
|
dependencies = [
|
|
4050
4050
|
{ name = "anyio" },
|
|
@@ -4052,9 +4052,9 @@ dependencies = [
|
|
|
4052
4052
|
{ name = "pydantic" },
|
|
4053
4053
|
{ name = "typing-inspection" },
|
|
4054
4054
|
]
|
|
4055
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
4055
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/f14d82d10c7f4e4e4d20c880593745e05686b176ac397fe52a5ec40959a9/pydantic_graph-2.42.0.tar.gz", hash = "sha256:eb6c416dee9e3415195194c44ca3abeeae8853bff095d38ac798c7c3395f815d", size = 45189, upload-time = "2026-09-09T03:48:53.398Z" }
|
|
4056
4056
|
wheels = [
|
|
4057
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
4057
|
+
{ url = "https://files.pythonhosted.org/packages/7a/c7/eafabe22e04e4e8dfb8e01725e051feed75d3cda937054a727cffc525497/pydantic_graph-2.42.0-py3-none-any.whl", hash = "sha256:25c47047ac1bbad2fdc6dace23958c6ec700a6366abc18d67dccd41411185df7", size = 52700, upload-time = "2026-09-09T03:48:46.931Z" },
|
|
4058
4058
|
]
|
|
4059
4059
|
|
|
4060
4060
|
[[package]]
|
|
@@ -9,7 +9,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
|
|
|
9
9
|
const hostname = process.env.HOSTNAME || '0.0.0.0'
|
|
10
10
|
|
|
11
11
|
let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
|
|
12
|
-
const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"1.0.
|
|
12
|
+
const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"1.0.6-beta.0"},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"instrumentationClientInject":[],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/failproofai/failproofai","enablePrerenderSourceMaps":true,"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":true,"coldCacheBadge":false,"devValidationWorker":true,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"dynamicOnHover":false,"useOffline":false,"varyParams":true,"optimisticRouting":true,"instrumentationClientRouterTransitionEvents":false,"prefetchInlining":{"maxSize":2048,"maxBundleSize":10240},"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptOperationCache":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"devMemoryThresholdRestart":true,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"requestInsights":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"useTypeScriptCli":true,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":true,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"serverComponentsHmrCancellation":false,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":true,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","turbopackMemoryEvictionMode":"auto","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"useCacheTimeout":54,"instantInsights":{"validationLevel":"warning"},"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","outputFileTracingExcludes":{"*":["node_modules/@img/**","node_modules/sharp/**"]},"turbopack":{"root":"/home/runner/work/failproofai/failproofai"},"repoRoot":"/home/runner/work/failproofai/failproofai","distDirRoot":".next"}
|
|
13
13
|
|
|
14
14
|
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
|
|
15
15
|
|
package/README.md
CHANGED
|
@@ -31,8 +31,11 @@ tool calls before they execute. 39 built-in policies. Zero latency. Runs locally
|
|
|
31
31
|
## Supported harnesses
|
|
32
32
|
|
|
33
33
|
Twelve harnesses in two classes — ten coding CLIs, and two chat and assistant
|
|
34
|
-
gateways (Hermes, OpenClaw).
|
|
35
|
-
|
|
34
|
+
gateways (Hermes, OpenClaw). One policy API and one session history across all
|
|
35
|
+
of them. What a policy can *block* is per-harness: stopping a tool call before
|
|
36
|
+
it runs is verified on all twelve, turn-end gates on eight. The
|
|
37
|
+
[per-harness matrix](https://docs.befailproof.ai/reference/harnesses#enforcement-capability)
|
|
38
|
+
lists the events each one honours.
|
|
36
39
|
|
|
37
40
|
Agents that run in none of them report through the [Python SDK](https://docs.befailproof.ai/reference/custom-agents),
|
|
38
41
|
which gives you tracing, sessions and audits. Enforcement there needs a hook in
|
|
@@ -136,11 +139,22 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
136
139
|
|
|
137
140
|
```sh
|
|
138
141
|
npm install -g failproofai
|
|
139
|
-
failproofai
|
|
140
|
-
failproofai
|
|
142
|
+
failproofai config # wire up your agents and the daemon
|
|
143
|
+
failproofai policies add FailproofAI/policies # choose what to enforce
|
|
144
|
+
failproofai # dashboard on localhost:8020
|
|
141
145
|
```
|
|
142
146
|
|
|
143
|
-
|
|
147
|
+
Setup wires the hooks and picks **no** policies — that second command is what
|
|
148
|
+
puts guardrails on the machine, and any pack is typed the same way
|
|
149
|
+
(`failproofai policies add <owner>/<repo>`; `policies show <owner>/<repo>` reads
|
|
150
|
+
one first). Run `failproofai config` with no terminal — CI, a container, an
|
|
151
|
+
agent driving it — and it applies rather than asking. On a machine that has
|
|
152
|
+
never been set up, any other command runs the same wizard first; disable that
|
|
153
|
+
with `FAILPROOFAI_NO_FIRST_RUN=1`.
|
|
154
|
+
|
|
155
|
+
Until a pack arrives, the only thing enforcing is `block-failproofai-commands`,
|
|
156
|
+
which is always on and cannot be switched off or paused: an agent that can pause
|
|
157
|
+
enforcement can switch off every other policy.
|
|
144
158
|
|
|
145
159
|
---
|
|
146
160
|
|
|
@@ -148,7 +162,6 @@ failproofai
|
|
|
148
162
|
|
|
149
163
|
| Policy | What it blocks |
|
|
150
164
|
|---|---|
|
|
151
|
-
| `sanitize-api-keys` | API keys leaking into the agent's context |
|
|
152
165
|
| `block-env-files` | Reads of `.env` and other secret files |
|
|
153
166
|
| `warn-repeated-tool-calls` | The agent looping on the same call |
|
|
154
167
|
| `block-sudo` | Privilege escalation |
|
|
@@ -157,10 +170,13 @@ failproofai
|
|
|
157
170
|
| `block-rm-rf` | Recursive file deletion |
|
|
158
171
|
| `block-force-push` / `block-push-master` | `git push --force`, direct pushes to `main` |
|
|
159
172
|
|
|
160
|
-
|
|
161
|
-
|
|
173
|
+
Every one of these gates the call *before* it runs, so they hold on all twelve
|
|
174
|
+
harnesses. The first four apply to any agent that can call a tool; the last
|
|
175
|
+
three are the developer favourites — coding CLIs are the harness class we cover
|
|
176
|
+
deepest. The `sanitize-*` family is separate: it runs after a tool returns, so
|
|
177
|
+
it reports a secret in tool output rather than keeping it out of the context.
|
|
162
178
|
|
|
163
|
-
→ [All 39 built-in policies](https://docs.befailproof.ai/policies/
|
|
179
|
+
→ [All 39 built-in policies](https://docs.befailproof.ai/policies/packs)
|
|
164
180
|
|
|
165
181
|
---
|
|
166
182
|
|
|
@@ -191,7 +207,7 @@ Three decisions available to every policy:
|
|
|
191
207
|
| `deny(message)` | Block it — message goes back to the agent |
|
|
192
208
|
| `instruct(message)` | Let it through, but add context to the agent's next prompt |
|
|
193
209
|
|
|
194
|
-
→ [
|
|
210
|
+
→ [Write a policy](https://docs.befailproof.ai/policies/editor)
|
|
195
211
|
|
|
196
212
|
---
|
|
197
213
|
|
|
@@ -242,9 +258,9 @@ own cluster is available on the Enterprise plan.
|
|
|
242
258
|
|
|
243
259
|
| Enforce | |
|
|
244
260
|
|---|---|
|
|
245
|
-
| [
|
|
246
|
-
| [
|
|
247
|
-
| [Configuration](https://docs.befailproof.ai/policies/local-configuration) | Config scopes
|
|
261
|
+
| [Policy packs](https://docs.befailproof.ai/policies/packs) | The Failproof AI policies, and packs from the policy hub |
|
|
262
|
+
| [Write a policy](https://docs.befailproof.ai/policies/editor) | From an audit, or in code |
|
|
263
|
+
| [Configuration](https://docs.befailproof.ai/policies/local-configuration) | Config scopes, merge rules and policy parameters |
|
|
248
264
|
|
|
249
265
|
| Instrument your own agent | |
|
|
250
266
|
|---|---|
|
package/bin/failproofai.mjs
CHANGED
|
@@ -2259,6 +2259,8 @@ async function runCli() {
|
|
|
2259
2259
|
);
|
|
2260
2260
|
const opts = optsFor(process.stdout);
|
|
2261
2261
|
const report = connectionStatusReport();
|
|
2262
|
+
const { hermesProfileStatusRows } = await import("../src/hooks/integrations");
|
|
2263
|
+
const hermesRows = hermesProfileStatusRows();
|
|
2262
2264
|
// The version line was written to be "the only place a user can find out
|
|
2263
2265
|
// which daemon they are running" and then never called from anywhere. It
|
|
2264
2266
|
// is the right thing for the heading to carry, and it retires a heading
|
|
@@ -2276,7 +2278,7 @@ async function runCli() {
|
|
|
2276
2278
|
// Always printed, including where reports can never work: "why am I
|
|
2277
2279
|
// not getting them?" is the question --status exists to answer, and
|
|
2278
2280
|
// an omitted line answers it with silence.
|
|
2279
|
-
rows([...report.rows, ...(result.rows ?? [])], opts),
|
|
2281
|
+
rows([...report.rows, ...hermesRows, ...(result.rows ?? [])], opts),
|
|
2280
2282
|
report.warnings.length > 0 ? warning(report.warnings, opts) : null,
|
|
2281
2283
|
// The trailer is not rows — it is the note and the resume command.
|
|
2282
2284
|
// Rendering only `rows` dropped the one line that tells a paused
|