failproofai 1.0.12-beta.0 → 1.0.12-beta.2
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 +3 -3
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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/_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 +22 -22
- 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/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page.js +1 -1
- 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 +3 -3
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
- package/.next/standalone/.next/server/app/policies/page.js +4 -4
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/settings/page.js +7 -7
- 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]__0-ha5ydqq0mws._.js → [externals]__0vt9i6fqinjne._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__20xe05hm5u8_1._.js → [root-of-the-server]__0f_4g-vazrvxv._.js} +1 -1
- package/.next/standalone/.next/server/chunks/_0hf5q4xzyg40j._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0tovk6q0miud6._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0trp3ycqv17cl._.js +1 -1
- package/.next/standalone/.next/server/chunks/_19011-u44143j._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1ek68lnh2daur._.js +2 -2
- package/.next/standalone/.next/server/chunks/{_0kc-piux3hady._.js → _1y590mjzpkbos._.js} +2 -2
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4vkpxxu7._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_0_em82s16zfym._.js +5 -0
- package/.next/standalone/.next/server/chunks/src_hooks_builtin-policies_ts_1yq5ybgx1v98e._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3h94wnn._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_daemon-client_ts_0il_yu1zc0291._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_fp-home_ts_09kv0bn_4twyh._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ts0fg5yih1c1._.js → [root-of-the-server]__00l2u6j86cb8y._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08ch3staq3ejw._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bigvy9xmv2ka._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h86bl2qf0k_o._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1_xbg2kx30wp-._.js → [root-of-the-server]__0naevg4bcoh54._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pia5h3p8re4c._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pwj2h2efe5f-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-ey9fgesfbc0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15usvs-ms-0hf._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16gb3_92zvk5x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1avi2kypusyb_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1r7drlqli-ado._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0vcyntk4snf0f._.js → [root-of-the-server]__1vofkb2oq7p7e._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0bseae9u7g98r._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0eoura3_9gjb-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0mouhaflye1ro._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1gb0ifpkowwub._.js → _0ouu886szh6yj._.js} +10 -9
- package/.next/standalone/.next/server/chunks/ssr/_0pedwblqdoh58._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1djqs9i27e4kg._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1ve8y151ua7qx._.js → _1fw0_nzkae5ao._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_20hn4gn87nsjc._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo5_vm5f.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9snixb5fd-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47q0xq5w._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_project-list_tsx_1ke6anr0vt64h._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x33jqb6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpcz0uxur._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h47jmhhd._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_html-to-image_es_index_00jxj8foxqz5t.js → node_modules_html-to-image_es_index_1fv03uigni8s5.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/package_json_[json]_cjs_013tntikdft59._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_06kzv9ddabn3_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_0agdmptetetdt._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_0mdwgjisv4fub._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4l1tzrm._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_daemon-client_ts_0k41_i7jg6ndv._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-config_ts_04t589gp4p60j._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me658zqmh_._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- 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/preview-props.json +3 -3
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
- package/.next/standalone/.next/static/chunks/{0pjxnp927y7_j.js → 0ay__-d2h1xb5.js} +1 -1
- package/.next/standalone/.next/static/chunks/{2znt1784j9gd9.js → 0tbm3vjm62h-2.js} +1 -1
- package/.next/standalone/.next/static/chunks/1c_jf6g5wnslk.js +1 -0
- package/.next/standalone/.next/static/chunks/{3tn1bzk094e8e.js → 1my3-5p47t7r-.js} +1 -1
- package/.next/standalone/.next/static/chunks/20py8k1gd_i1m.js +1 -0
- package/.next/standalone/.next/static/chunks/21hckpmsc4g70.js +6 -0
- package/.next/standalone/.next/static/chunks/2hmex93ppj1ke.js +1 -0
- package/.next/standalone/.next/static/chunks/2o6d37j425uci.js +1 -0
- package/.next/standalone/.next/static/chunks/40oworn_-x12p.js +1 -0
- package/.next/standalone/.next/static/chunks/{2qz5piiir-qqm.js → 42xptz88mtq3x.js} +1 -1
- package/.next/standalone/app/actions/update-jev-config.ts +5 -3
- package/.next/standalone/app/settings/jev-panel.tsx +1 -1
- package/.next/standalone/fp-cloud-cli/CHANGELOG.md +32 -0
- package/.next/standalone/fp-cloud-cli/README.md +40 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/client.py +91 -12
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/fleet_cmds.py +78 -16
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/policies_cmds.py +84 -18
- package/.next/standalone/fp-cloud-cli/fp_cli/enforcement.py +124 -6
- package/.next/standalone/fp-cloud-cli/fp_cli/models.py +89 -6
- package/.next/standalone/fp-cloud-cli/fp_cli/output.py +189 -20
- package/.next/standalone/fp-cloud-cli/fp_cli/policy_check.py +8 -5
- package/.next/standalone/fp-cloud-cli/skill/SKILL.md +2 -2
- package/.next/standalone/fp-cloud-cli/skill/references/commands.md +14 -7
- package/.next/standalone/fp-cloud-cli/tests/test_cloud_jev.py +527 -0
- package/.next/standalone/fp-cloud-cli/tests/test_enforcement_logic.py +46 -0
- package/.next/standalone/fp-cloud-cli/tests/test_output.py +23 -0
- package/.next/standalone/hermes-plugin/README.md +6 -4
- package/.next/standalone/hermes-plugin/__init__.py +27 -0
- package/.next/standalone/hermes-plugin/client.py +5 -1
- package/.next/standalone/hermes-plugin/plugin.yaml +1 -1
- package/.next/standalone/package.json +11 -10
- package/.next/standalone/sdk/python/uv.lock +31 -8
- package/.next/standalone/server.js +1 -1
- package/bin/failproofai.mjs +17 -1
- package/dist/cli.mjs +3507 -1250
- package/dist/worker.mjs +1779 -169
- package/hermes-plugin/README.md +6 -4
- package/hermes-plugin/__init__.py +27 -0
- package/hermes-plugin/client.py +5 -1
- package/hermes-plugin/plugin.yaml +1 -1
- package/package.json +11 -10
- package/src/audit/open-browser.ts +6 -7
- package/src/hooks/agent-roster.ts +180 -0
- package/src/hooks/agent-skill.ts +203 -0
- package/src/hooks/agent-targets.ts +60 -0
- package/src/hooks/cloud-connection.ts +91 -45
- package/src/hooks/cloud-enrollment-cli.ts +7 -4
- package/src/hooks/cloud-login.ts +6 -3
- package/src/hooks/cloud-managed-policies.ts +430 -20
- package/src/hooks/cloud-policy-errors.ts +481 -0
- package/src/hooks/codex-system-hooks.ts +10 -4
- package/src/hooks/config-status.ts +10 -4
- package/src/hooks/configure-wizard.ts +54 -26
- package/src/hooks/custom-hooks-loader.ts +26 -3
- package/src/hooks/daemon-client.ts +9 -4
- package/src/hooks/daemon-service.ts +2 -1
- package/src/hooks/delivery-health.ts +47 -2
- package/src/hooks/effective-reviewers.ts +36 -1
- package/src/hooks/fp-config.ts +19 -0
- package/src/hooks/fp-home.ts +6 -0
- package/src/hooks/handler.ts +255 -19
- package/src/hooks/health-probe.ts +15 -0
- package/src/hooks/hook-activity-store.ts +7 -1
- package/src/hooks/integrations.ts +36 -14
- package/src/hooks/jev-activity.ts +117 -1
- package/src/hooks/jev-cli.ts +196 -1
- package/src/hooks/jev-cloud-connection.ts +92 -0
- package/src/hooks/manager.ts +174 -34
- package/src/hooks/pack-failclosed.ts +2 -0
- package/src/hooks/pack-manifest.ts +8 -1
- package/src/hooks/policy-evaluator.ts +22 -1
- package/src/hooks/policy-registry.ts +3 -2
- package/src/hooks/policy-reviewability.ts +23 -5
- package/src/hooks/semantic/cloud-jev-health.ts +227 -0
- package/src/hooks/semantic/cloud-jev.ts +868 -0
- package/src/hooks/semantic/combine.ts +26 -1
- package/src/hooks/semantic/jev-client.ts +19 -2
- package/src/hooks/semantic/jev-config.ts +179 -30
- package/src/hooks/semantic/jev-review.ts +217 -10
- package/src/hooks/semantic/pack-policies.ts +2 -1
- package/src/hooks/semantic/types.ts +8 -0
- package/src/hooks/session-pause-cli.ts +1 -1
- package/src/hooks/tui.ts +13 -4
- package/src/hooks/uninstall-cli.ts +12 -1
- package/src/hooks/worker-server.ts +5 -1
- package/.next/standalone/.next/server/chunks/src_hooks_1aveq0uhs2t1b._.js +0 -5
- package/.next/standalone/.next/server/chunks/src_hooks_1eem5a7cyqlb2._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_effective-reviewers_ts_1h4wtvo55j16x._.js +0 -5
- package/.next/standalone/.next/static/chunks/0a-ccsp3xmypz.js +0 -1
- package/.next/standalone/.next/static/chunks/13jv-xvabeb62.js +0 -6
- package/.next/standalone/.next/static/chunks/2ank2u3apy8m6.js +0 -1
- package/.next/standalone/.next/static/chunks/2meqb9kygrncb.js +0 -1
- package/.next/standalone/.next/static/chunks/2ohktp_-lkv3x.js +0 -1
- package/.next/standalone/.next/static/chunks/2py0eldhwz8ay.js +0 -1
- /package/.next/standalone/.next/static/{SNr7o_-G4kNBQTR-iLZMM → LHCtFxVG0mdvd4lsXAOFC}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{SNr7o_-G4kNBQTR-iLZMM → LHCtFxVG0mdvd4lsXAOFC}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{SNr7o_-G4kNBQTR-iLZMM → LHCtFxVG0mdvd4lsXAOFC}/_ssgManifest.js +0 -0
package/.next/standalone/.next/server/chunks/ssr/{_1gb0ifpkowwub._.js → _0ouu886szh6yj._.js}
RENAMED
|
@@ -22,9 +22,9 @@ ${c.indent}`)}}else(""===z||"\n"===z[0])&&(A="");return x+=A+z,c.inFlow?y&&h&&h(
|
|
|
22
22
|
${c}`)+"'";return b.implicitKey?d:f.foldFlowLines(d,c,f.FOLD_FLOW,g(b,!1))}function j(a,b){let c,{singleQuote:d}=b.options;if(!1===d)c=h;else{let b=a.includes('"'),e=a.includes("'");c=b&&!e?i:e&&!b?h:d?i:h}return c(a,b)}try{d=RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{d=/\n+(?!\n|$)/g}function k({comment:a,type:b,value:c},h,i,l){let m,n,o,p,{blockQuote:q,commentString:r,lineWidth:s}=h.options;if(!q||/\n[\t ]+$/.test(c))return j(c,h);let t=h.indent||(h.forceBlockIndent||(p=c,/^(%|---|\.\.\.)/m.test(p))?" ":""),u="literal"===q||"folded"!==q&&b!==e.Scalar.BLOCK_FOLDED&&(b===e.Scalar.BLOCK_LITERAL||!function(a,b,c){if(!b||b<0)return!1;let d=b-c,e=a.length;if(e<=d)return!1;for(let b=0,c=0;b<e;++b)if("\n"===a[b]){if(b-c>d)return!0;if(e-(c=b+1)<=d)return!1}return!0}(c,s,t.length));if(!c)return u?"|\n":">\n";for(n=c.length;n>0;--n){let a=c[n-1];if("\n"!==a&&" "!==a&&" "!==a)break}let v=c.substring(n),w=v.indexOf("\n");-1===w?m="-":c===v||w!==v.length-1?(m="+",l&&l()):m="",v&&(c=c.slice(0,-v.length),"\n"===v[v.length-1]&&(v=v.slice(0,-1)),v=v.replace(d,`$&${t}`));let x=!1,y=-1;for(o=0;o<c.length;++o){let a=c[o];if(" "===a)x=!0;else if("\n"===a)y=o;else break}let z=c.substring(0,y<o?y+1:o);z&&(c=c.substring(z.length),z=z.replace(/\n+/g,`$&${t}`));let A=t?"2":"1",B=(x?A:"")+m;if(a&&(B+=" "+r(a.replace(/ ?[\r\n]+/g," ")),i&&i()),!u){let a=c.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${t}`),d=!1,i=g(h,!0);"folded"!==q&&b!==e.Scalar.BLOCK_FOLDED&&(i.onOverflow=()=>{d=!0});let j=f.foldFlowLines(`${z}${a}${v}`,t,f.FOLD_BLOCK,i);if(!d)return`>${B}
|
|
23
23
|
${t}${j}`}return c=c.replace(/\n+/g,`$&${t}`),`|${B}
|
|
24
24
|
${t}${z}${c}${v}`}c.stringifyString=function(a,b,c,d){let{implicitKey:l,inFlow:m}=b,n="string"==typeof a.value?a:Object.assign({},a,{value:String(a.value)}),{type:o}=a;o!==e.Scalar.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(n.value)&&(o=e.Scalar.QUOTE_DOUBLE);let p=a=>{switch(a){case e.Scalar.BLOCK_FOLDED:case e.Scalar.BLOCK_LITERAL:return l||m?j(n.value,b):k(n,b,c,d);case e.Scalar.QUOTE_DOUBLE:return h(n.value,b);case e.Scalar.QUOTE_SINGLE:return i(n.value,b);case e.Scalar.PLAIN:return function(a,b,c,d){let{type:h,value:i}=a,{actualString:l,implicitKey:m,indent:n,indentStep:o,inFlow:p}=b;if(m&&i.includes("\n")||p&&/[[\]{},]/.test(i))return j(i,b);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(i))return m||p||!i.includes("\n")?j(i,b):k(a,b,c,d);if(!m&&!p&&h!==e.Scalar.PLAIN&&i.includes("\n"))return k(a,b,c,d);if(/^(%|---|\.\.\.)/m.test(i)){if(""===n)return b.forceBlockIndent=!0,k(a,b,c,d);else if(m&&n===o)return j(i,b)}let q=i.replace(/\n+/g,`$&
|
|
25
|
-
${n}`);if(l){let a=a=>a.default&&"tag:yaml.org,2002:str"!==a.tag&&a.test?.test(q),{compat:c,tags:d}=b.doc.schema;if(d.some(a)||c?.some(a))return j(i,b)}return m?q:f.foldFlowLines(q,n,f.FOLD_FLOW,g(b,!1))}(n,b,c,d);default:return null}},q=p(o);if(null===q){let{defaultKeyType:a,defaultStringType:c}=b.options,d=l&&a||c;if(null===(q=p(d)))throw Error(`Unsupported default string type ${d}`)}return q}},85927,(a,b,c)=>{var d=a.r(27267);let e=Symbol("break visit"),f=Symbol("skip children"),g=Symbol("remove node");function h(a,b){let c=l(b);d.isDocument(a)?i(null,a.contents,c,Object.freeze([a]))===g&&(a.contents=null):i(null,a,c,Object.freeze([]))}function i(a,b,c,f){let h=m(a,b,c,f);if(d.isNode(h)||d.isPair(h))return n(a,f,h),i(a,h,c,f);if("symbol"!=typeof h){if(d.isCollection(b)){f=Object.freeze(f.concat(b));for(let a=0;a<b.items.length;++a){let d=i(a,b.items[a],c,f);if("number"==typeof d)a=d-1;else{if(d===e)return e;d===g&&(b.items.splice(a,1),a-=1)}}}else if(d.isPair(b)){f=Object.freeze(f.concat(b));let a=i("key",b.key,c,f);if(a===e)return e;a===g&&(b.key=null);let d=i("value",b.value,c,f);if(d===e)return e;d===g&&(b.value=null)}}return h}async function j(a,b){let c=l(b);d.isDocument(a)?await k(null,a.contents,c,Object.freeze([a]))===g&&(a.contents=null):await k(null,a,c,Object.freeze([]))}async function k(a,b,c,f){let h=await m(a,b,c,f);if(d.isNode(h)||d.isPair(h))return n(a,f,h),k(a,h,c,f);if("symbol"!=typeof h){if(d.isCollection(b)){f=Object.freeze(f.concat(b));for(let a=0;a<b.items.length;++a){let d=await k(a,b.items[a],c,f);if("number"==typeof d)a=d-1;else{if(d===e)return e;d===g&&(b.items.splice(a,1),a-=1)}}}else if(d.isPair(b)){f=Object.freeze(f.concat(b));let a=await k("key",b.key,c,f);if(a===e)return e;a===g&&(b.key=null);let d=await k("value",b.value,c,f);if(d===e)return e;d===g&&(b.value=null)}}return h}function l(a){return"object"==typeof a&&(a.Collection||a.Node||a.Value)?Object.assign({Alias:a.Node,Map:a.Node,Scalar:a.Node,Seq:a.Node},a.Value&&{Map:a.Value,Scalar:a.Value,Seq:a.Value},a.Collection&&{Map:a.Collection,Seq:a.Collection},a):a}function m(a,b,c,e){return"function"==typeof c?c(a,b,e):d.isMap(b)?c.Map?.(a,b,e):d.isSeq(b)?c.Seq?.(a,b,e):d.isPair(b)?c.Pair?.(a,b,e):d.isScalar(b)?c.Scalar?.(a,b,e):d.isAlias(b)?c.Alias?.(a,b,e):void 0}function n(a,b,c){let e=b[b.length-1];if(d.isCollection(e))e.items[a]=c;else if(d.isPair(e))"key"===a?e.key=c:e.value=c;else if(d.isDocument(e))e.contents=c;else{let a=d.isAlias(e)?"alias":"scalar";throw Error(`Cannot replace node with ${a} parent`)}}h.BREAK=e,h.SKIP=f,h.REMOVE=g,j.BREAK=e,j.SKIP=f,j.REMOVE=g,c.visit=h,c.visitAsync=j},17280,a=>{var b=a.i(66680),c=a.i(2157),d=a.i(50227),e=a.i(9909),f=a.i(86304);let g="failproofai-pack.json",h="failproofai-pack.mjs",i="SHA256SUMS";function j(){return(process.env.FAILPROOFAI_PACK_BASE_URL||"https://github.com").replace(/\/+$/,"")}let k=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,l=/^[A-Za-z0-9][A-Za-z0-9._/-]{0,127}$/,m="FailproofAI/policies",n=new Set(["core","failproofai","official"]);function o(a){let b=a.trim();if(0===b.length)throw Error("pack source is empty");let c=b.match(/^(?:https?:\/\/)?(?:www\.)?github\.com\/(.+)$/i);if(c){let[a,b,...d]=c[1].replace(/\/+$/,"").split("/"),e=null;if("releases"===d[0]&&("tag"===d[1]||"download"===d[1])){let a=d.slice(2);e=("download"===d[1]?a.slice(0,-1):a).join("/")||null}else"releases"===d[0]&&"latest"===d[1]&&(e=null);return p(a,b,e)}let d=b.replace(/^github:/i,""),e=d.lastIndexOf("@"),f=e>0?d.slice(0,e):d,g=e>0?d.slice(e+1):null,h=f.indexOf("/");if(h<=0||h===f.length-1){if(n.has(f.trim().toLowerCase()))throw Error(`${JSON.stringify(a)} is no longer a pack name — ours is a pack like anyone else's now. Use ${m} instead.`);throw Error(`pack source must be owner/repo, owner/repo@tag, or a github.com URL — got ${JSON.stringify(a)}`)}return p(f.slice(0,h),f.slice(h+1),g)}function p(a,b,c){if(!a||!k.test(a))throw Error(`unsafe owner ${JSON.stringify(a)}`);if(!b||!k.test(b))throw Error(`unsafe repo ${JSON.stringify(b)}`);if(null!==c&&!l.test(c))throw Error(`unsafe tag ${JSON.stringify(c)}`);return{owner:a,repo:b,tag:c}}async function q(a){let b=`${j()}/${a.owner}/${a.repo}/releases/latest`,c=await fetch(b,{signal:AbortSignal.timeout(3e4),redirect:"manual"}),d=c.headers.get("location");if(!d)throw Error(`could not resolve the newest release of ${a.owner}/${a.repo} (GET ${b} returned ${c.status} with no redirect). That redirect is issued only for a published, non-prerelease release, so either the repository has no releases at all or every release it has is a prerelease or a draft. Name a tag explicitly.`);let e=d.match(/\/releases\/tag\/(.+)$/);if(!e)throw Error(`unexpected redirect from ${b}: ${d}`);let f=decodeURIComponent(e[1]).replace(/\/+$/,"");if(!l.test(f))throw Error(`unsafe tag ${JSON.stringify(f)} from ${b}`);return f}async function r(b,c){let d,e=c.toLowerCase(),f=`${(process.env.FAILPROOFAI_GITHUB_API??"https://api.github.com").replace(/\/+$/,"")}/repos/${b.owner}/${b.repo}/releases?per_page=100`;try{let a=(process.env.GITHUB_TOKEN||process.env.GH_TOKEN||"").trim(),b=await fetch(f,{headers:{...a?{Authorization:`Bearer ${a}`}:{},Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"failproofai"},signal:AbortSignal.timeout(3e4),redirect:"follow"});if(!b.ok)throw Error(`GET ${f} returned ${b.status}`);d=await b.json()}catch(a){throw Error(`could not resolve commit ${c} in ${b.owner}/${b.repo}: ${L(a)}. Name the release tag instead if you know it.`)}let{parseReleaseBody:g}=await a.A(49679),h=Array.isArray(d)?d:[],i=[];for(let a of h){let b="string"==typeof a.tag_name?a.tag_name:"";if(!b||!l.test(b))continue;let c=g("string"==typeof a.body?a.body:"");c.commit&&c.commit.startsWith(e)&&i.push({tag:b,commit:c.commit})}if(i.length>1)throw Error(`commit ${c} matches ${i.length} releases of ${b.owner}/${b.repo}: `+i.map(a=>`${a.tag} (${a.commit})`).join(", ")+". Name one of those tags, or type more of the commit.");return 1===i.length?i[0].tag:null}async function s(a){return null===a.tag?q(a):e.r.test(a.tag)?await r(a,a.tag)??a.tag:a.tag}function t(a){return`github:${a.owner}/${a.repo}@${a.tag}`}function u(a,b){return`${j()}/${a.owner}/${a.repo}/releases/download/${a.tag}/${b}`}async function v(a){let b=await fetch(a,{signal:AbortSignal.timeout(3e4),redirect:"follow"});if(!b.ok)throw Error(`GET ${a} returned ${b.status}`);let c=b.headers.get("content-length");if(null!==c){let d=Number(c);if(Number.isFinite(d)&&d>8388608)throw await b.body?.cancel(),Error(`${a} declares ${d} bytes, over the 8388608 limit`)}if(!b.body)return Buffer.alloc(0);let d=[],e=b.body.getReader(),f=0;try{for(;;){let{done:b,value:c}=await e.read();if(b)break;if((f+=c.byteLength)>8388608)throw await e.cancel(),Error(`${a} is over the 8388608 byte limit`);d.push(Buffer.from(c))}}finally{e.releaseLock()}return Buffer.concat(d,f)}function w(a,b){for(let c of a.split("\n")){let a=c.trim().match(/^([0-9a-f]{64})\s+\*?(.+)$/i);if(a&&a[2].trim()===b)return a[1].toLowerCase()}return null}function x(a){return(0,b.createHash)("sha256").update(a).digest("hex")}function y(a,b){let e=`${a}.${process.pid}.tmp`;try{(0,c.mkdirSync)((0,d.dirname)(a),{recursive:!0}),(0,c.writeFileSync)(e,b),(0,c.renameSync)(e,a)}catch(a){throw(0,c.rmSync)(e,{force:!0}),a}}function z(a,b){if(void 0===b)return[];if(!Array.isArray(b))throw Error(`pack ${a} semantic is not an array`);if(b.length>e.P)throw Error(`pack ${a} declares ${b.length} semantic policies, over the cap of ${e.P}`);let c=b.map((b,c)=>(0,e.U)(a,b,c)),d=new Set;for(let b of c){if(d.has(b.name))throw Error(`pack ${a} declares semantic policy ${b.name} twice`);d.add(b.name)}return c}function A(a,b){let c=(0,e.T)(a,b);if("too-old"===c.kind)throw Error(c.reason);return"unreadable"===c.kind?{minCliVersionNote:c.reason}:c.declared?{minCliVersion:c.declared}:{}}async function B(a,b={}){let c=await I(a,b);return{id:c.id,version:c.version,enabled:c.enabled,available:c.available,bundled:!1,source:c.source,tag:c.tag,resolvedFromLatest:c.resolvedFromLatest,selection:c.selection,categories:c.categories}}async function C(a){let b;if("1"===process.env.FAILPROOFAI_NO_DOWNLOAD)throw Error("FAILPROOFAI_NO_DOWNLOAD is set, so nothing can be fetched to preview");let c=o(a),d=null===c.tag,f={...c,tag:await s(c)},h=(await v(u(f,i))).toString("utf8"),j=await v(u(f,g)),k=w(h,g);if(!k)throw Error(`${i} has no entry for ${g}`);if(x(j)!==k)throw Error(`${g} failed integrity verification`);try{b=JSON.parse(j.toString("utf8"))}catch(a){throw Error(`${g} is not valid JSON: ${L(a)}`)}if(!b||"object"!=typeof b)throw Error(`${g} is not an object`);let l=b,m=(0,e.$)(l),n=A(m.id,l.minCliVersion),p=z(m.id,l.semantic),q=D(m.id,l.policies);return E(q,p),{id:m.id,version:m.version,effect:m.effect,...m.commit?{commit:m.commit}:{},policies:q,semantic:p,...n,source:t(f),resolvedFromLatest:d}}function D(a,b){if(void 0===b)return[];if(!Array.isArray(b))throw Error(`pack ${a} policies is not an array`);let c=b.map((b,c)=>(0,e.Z)(a,b,c)),d=new Set;for(let b of c){if(d.has(b.name))throw Error(`pack ${a} declares ${b.name} twice`);d.add(b.name)}return c}function E(a,b){if(0===a.length&&0===b.length)throw Error("pack manifest declares no policies")}async function F(a){let b,c=(await v(u(a,i))).toString("utf8"),d=await v(u(a,g)),f=w(c,g);if(!f)throw Error(`${i} has no entry for ${g}`);if(x(d)!==f)throw Error(`${g} failed integrity verification`);let j=await v(u(a,h)),k=w(c,h);if(!k)throw Error(`${i} has no entry for ${h}`);let l=x(j);if(l!==k)throw Error(`${h} failed integrity verification`);try{b=JSON.parse(d.toString("utf8"))}catch(a){throw Error(`${g} is not valid JSON: ${L(a)}`)}if(!b||"object"!=typeof b)throw Error(`${g} is not an object`);let m=b,n=(0,e.$)(m),o=A(n.id,m.minCliVersion),p=D(n.id,m.policies),q=z(n.id,m.semantic);return E(p,q),{id:n.id,version:n.version,policies:p,semantic:q,...o,...void 0!==m.effect?{effect:n.effect}:{},...n.commit?{commit:n.commit}:{},artifact:j,artifactDigest:l}}function G(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}async function H(b,c){let d,{loadCustomHooks:e}=await a.A(6188);try{d=(await e(b,{strict:!0})).map(a=>a.name)}catch(a){throw Error(`its artifact could not be loaded: ${a instanceof Error?a.message:String(a)}`)}let f=c.filter(a=>!d.includes(a)),g=d.filter(a=>!c.includes(a));if(f.length>0)throw Error(`its manifest declares ${f.join(", ")} but the artifact does not register ${1===f.length?"it":"them"} — that would install as protection that never runs`);if(g.length>0)throw Error(`its artifact registers undeclared ${g.join(", ")} — a policy that enforces but appears in no listing cannot be reviewed or switched off`)}async function I(a,b){var g,h,i,j;let k,l;if(process.env.FAILPROOFAI_NO_DOWNLOAD)throw Error("pack downloads are disabled (FAILPROOFAI_NO_DOWNLOAD). Already-installed packs keep enforcing.");let m=o(a),n={...m,tag:await s(m)},p=null===m.tag,q=await F(n);if(g=n.tag,h=q.version,(k=g.slice(g.lastIndexOf("/")+1))!==h&&k!==`v${h}`){let a=n.tag.slice(n.tag.lastIndexOf("/")+1).replace(/^v/,""),b=`re-tag the release ${q.version} (a leading v is fine), or rebuild the pack with --version ${a}`;throw Error(`${q.id} was not installed: release tag ${n.tag} does not match the version its manifest declares (${q.version}). `+(p?`That is the newest release of ${n.owner}/${n.repo}, so the release and the pack disagree at the source — ask the publisher to ${b}.`:`Name the tag whose manifest says ${q.version}, or fix the pack: ${b}.`))}if(/^failproofai\//i.test(q.id)&&!(0,f.g)({source:t(n)}))throw Error(`${q.id} was not installed: the FailproofAI/ namespace is reserved for releases from github.com/FailproofAI, and this one came from ${n.owner}/${n.repo}.`);let r=q.policies.map(a=>a.name),u=(i=q.id,j=q.artifactDigest,(l=(0,e.V)().packs).find(a=>a.id===i)??l.find(a=>a.sha256===j)),{enabled:v,reason:w}=function(a,b,c,d){let e=a.map(a=>a.name);if(b?.all)return{enabled:null,reason:"all"};let f=new Set;if(b?.categories?.length){let c=new Set(b.categories.map(G)),d=new Map(a.map(a=>[G(a.category),a.category])),e=[...c].filter(a=>!d.has(a));if(e.length>0)throw Error(`no such categor${1===e.length?"y":"ies"}: ${e.join(", ")} (has: ${[...new Set(a.map(a=>G(a.category)))].join(", ")})`);for(let b of a)c.has(G(b.category))&&f.add(b.name)}if(b?.only?.length){let a=b.only.filter(a=>!e.includes(a));if(a.length>0)throw Error(`pack does not contain ${a.join(", ")}`);for(let a of b.only)f.add(a)}if(b?.only!==void 0||b?.categories?.length){if(b.merge&&d){if(null===c)return{enabled:null,reason:"carried"};for(let a of c??[])f.add(a);return{enabled:e.filter(a=>f.has(a)),reason:"added"}}return{enabled:e.filter(a=>f.has(a)),reason:"selected"}}return d?{enabled:null===c?null:c??null,reason:"carried"}:{enabled:a.filter(a=>a.defaultEnabled).map(a=>a.name),reason:"defaults"}}(q.policies,b,u?.enabled?u.enabled.filter(a=>r.includes(a)):u?.enabled,!!u),x=(0,e.N)(),z=`artifacts/${q.artifactDigest}.mjs`,A=(0,d.resolve)(x,z);(0,c.existsSync)(A)||y(A,q.artifact);try{await H(A,r)}catch(a){throw Error(`${q.id}@${q.version} was not installed: ${a instanceof Error?a.message:String(a)}`)}let B=a=>{let b=a.lastIndexOf("@");return b>a.indexOf(":")?a.slice(0,b):a};if(u&&u.id===q.id&&!u.source.startsWith("bundled:")&&B(u.source)!==B(t(n)))throw Error(`pack id ${q.id} is already installed from ${u.source}. Refusing to replace it with ${t(n)} — remove it first if that is what you mean.`);let C={id:q.id,version:q.version,source:t(n),entry:z,sha256:q.artifactDigest,policies:q.policies,...q.semantic.length>0?{semantic:q.semantic}:{},...q.minCliVersion?{minCliVersion:q.minCliVersion}:{},...q.commit?{commit:q.commit}:{},...q.effect?{effect:q.effect}:{},...v?{enabled:v}:{},...b?.clis?{clis:b.clis}:b?.merge!==!1&&u?.clis?{clis:u.clis}:{}};return{replaced:function(a,b=!0){let f=(0,d.resolve)((0,e.N)(),"installed.json"),g=[];if((0,c.existsSync)(f))try{let a=JSON.parse((0,c.readFileSync)(f,"utf8"));Array.isArray(a.packs)&&(g=a.packs)}catch{throw Error(`existing pack manifest at ${f} is unreadable; move it aside and re-add`)}let h=g.filter(b=>b?.sha256===a.sha256&&b?.id!==a.id).map(a=>a.id);if(b&&!a.enabled){let b=g.find(a=>h.includes(a?.id)),c=b?.enabled?.filter(b=>a.policies?.some(a=>a?.name===b));c&&c.length>0&&(a.enabled=c)}let i=g.filter(a=>!h.includes(a?.id)),j=i.findIndex(b=>b?.id===a.id);return j>=0?i[j]=a:i.push(a),y(f,JSON.stringify({schemaVersion:1,packs:i},null,2)+"\n"),h}(C,"all"!==w),id:q.id,version:q.version,source:C.source,tag:n.tag,resolvedFromLatest:p,enabled:v??r,available:r,selection:w,categories:[...new Set(q.policies.map(a=>G(a.category)))],semantic:q.semantic.length,...q.minCliVersionNote?{minCliVersionNote:q.minCliVersionNote}:{},...q.effect?{effect:q.effect}:{},...C.clis?{clis:C.clis}:{},artifact:A}}function J(a){let b=a.trim(),c=b.lastIndexOf("@");return(c>0?b.slice(0,c):b).trim()}class K extends Error{candidates;constructor(a,b){super(`${b} matches ${a.length} installed packs: ${a.join(", ")}. Name one of them exactly.`),this.candidates=a,this.name="AmbiguousPackId"}}function L(a){return a instanceof Error?a.message:String(a)}a.s(["w",0,m,"U",0,i,"Z",0,h,"v",0,g,"I",0,I,"z",0,B,"k",0,C,"R",0,function(a){let b,f=(0,d.resolve)((0,e.N)(),"installed.json");if(!(0,c.existsSync)(f))return null;try{b=JSON.parse((0,c.readFileSync)(f,"utf8"))}catch{return null}let g=Array.isArray(b.packs)?b.packs:[],h=g.find(b=>b?.id===J(a)),i=g.filter(b=>{var c;return b?.id&&(c=b.id,J(c).toLowerCase()===J(a).toLowerCase())});if(!h&&i.length>1)throw new K(i.map(a=>a.id).filter(a=>"string"==typeof a),a);let j=h??i[0],k=g.filter(a=>a!==j);return j&&k.length!==g.length?(y(f,JSON.stringify({schemaVersion:1,packs:k},null,2)+"\n"),j.id):null},"g",0,function(a,b,f){let g,h=(0,d.resolve)((0,e.N)(),"installed.json");if(!(0,c.existsSync)(h))return{ok:!1,reason:"no packs are installed"};try{g=JSON.parse((0,c.readFileSync)(h,"utf8"))}catch{return{ok:!1,reason:`pack manifest at ${h} is unreadable`}}let i=Array.isArray(g.packs)?g.packs:[],j=i.find(b=>b?.id===a);if(!j)return{ok:!1,reason:`no installed pack with id ${a}`};let k=(Array.isArray(j.policies)?j.policies:[]).map(a=>"string"==typeof a?.name?a.name:null).filter(a=>null!==a);if(!k.includes(b))return{ok:!1,reason:`pack ${a} declares no policy named ${b}`};let l=j.enabled??k,m=f?[...new Set([...l,b])]:l.filter(a=>a!==b);return j.enabled=k.filter(a=>m.includes(a)),y(h,JSON.stringify({schemaVersion:1,packs:i},null,2)+"\n"),{ok:!0}}])},1459,a=>{var b=a.i(1457),c=a.i(12072);let d={rgb:[102,209,181],c256:79,basic:"36"},e={rgb:[228,88,125],c256:168,basic:"95"},f={rgb:[227,179,65],c256:179,basic:"33"},g={rgb:[107,118,132],basic:"2"},h={rgb:[118,127,139],basic:"2"},i={rgb:[62,67,76],basic:"2"},j={rgb:[240,113,120],c256:203,basic:"31"};function k(a){return!!a.isTTY&&!process.env.NO_COLOR}let l="\x1b[0m";function m(){return/truecolor|24bit/i.test(process.env.COLORTERM||"")?"truecolor":/256color/i.test(process.env.TERM||"")?"ansi256":"basic"}function n(a,b){return"truecolor"===b?`38;2;${a.rgb[0]};${a.rgb[1]};${a.rgb[2]}`:"ansi256"===b&&void 0!==a.c256?`38;5;${a.c256}`:a.basic}let o=["...tt........","..tttt.......",".tttttt..pppp",".tttttt..pppp","..tttt...pppp","...tt....pppp",".........pppp",".........pppp","..pppp...pppp","..pppp...pppp","..pppp...pppp",".pppppp..pppp",".pppppp..pppp",".pppppp..pppp",".pppppp..pppp","..pppp...pppp","..ppppppppppp","..ppppppppppp","..ppppppppppp","..ppppppppppp"];function p(a,b){let c=0,d="",e=0;for(;e<a.length;)if("\x1b"===a[e]&&"["===a[e+1]){let b=e+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;b++,d+=a.slice(e,b),e=b}else{if(c>=b)break;d+=a[e],c++,e++}return d}function q(a,b,c,d={}){let e=a.columns||80,f=d.cut??!0,g=c.map(a=>""!==a&&f?p(a,e):a).join("\n")+"\n",h=b.lastCount>0?`\x1b[${b.lastCount}A\x1b[J`:"";a.write(`\x1b[?2026h${d.lead??""}${h}${g}${d.tail??""}\x1b[?2026l`),b.lastCount=c.length}function r(a){let b=0,c=0;for(;c<a.length;)if("\x1b"===a[c]&&"["===a[c+1]){let b=c+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;c=b+1}else b++,c++;return b}function s(a){let b=[],c="",d=0;for(;d<a.length;)if("\x1b"===a[d]&&"["===a[d+1]){let b=d+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;let e=a.slice(d,b+1);c=/\[0?m$/.test(e)?"":c+e,d=b+1}else b.push({ch:a[d],active:c}),d++;return b}function t(a){let b="",c="";for(let d of a)d.active!==c&&(c&&(b+=l),b+=d.active,c=d.active),b+=d.ch;return c?b+l:b}function u(a,b,c="left"){let d=Math.max(0,b-r(a));return"right"===c?" ".repeat(d)+a:a+" ".repeat(d)}Symbol("failproofai.back"),Symbol("failproofai.open-source"),Object.values({on:"✓ ON",off:"· OFF",mixed:"◐ MIXED",locked:"✓ LOCK",cloud:"✓ CLOUD",pack:"✓ PACK",failed:"▲ FAIL",observe:"◉ OBS"}).map(a=>a.length),a.s(["J",0," ","v",0,k,"w",0,function(a=process.stdout){return{cols:a.columns||80,color:k(a)}},"m",0,function(a={}){var k;let v,w,{cols:x,c:y}={cols:Math.max(20,a?.cols??80),c:(v=(k=a?.color??!1)?m():"basic",{bold:a=>k?`\x1b[1m${a}\x1b[0m`:a,dim:(w=(a,b=!1)=>c=>k?`\x1b[${b?"1;":""}${n(a,v)}m${c}\x1b[0m`:c)(g),guide:w(d),pink:w(e),pinkBold:w(e,!0),softPink:w(e),warn:w(f),ink2:a=>a,ink3:w(h),track:w(i),err:w(j)})},z=a.color??!1,A=a.version??c.version,B=y.ink3(" · "),C=(a,b)=>b?a(b):"",D=a=>y.pink(a),E=y.guide("●"),F=y.ink3("○"),G=y.err("✕"),H=y.pink("■"),I=y.ink3("□"),J=a=>`${y.bold("fa")}${y.pinkBold("il")}${y.bold("proof ai")} ${y.ink3(`v${A}`)}`+(a?`${B}${a}`:""),K=(a,b)=>y.bold(a.toUpperCase())+(b?` ${y.ink3(b)}`:""),L=(b,c=0)=>{let d=Math.max(c,...b.map(([a,b])=>b?r(a)+2:0));return b.map(([b,c])=>{let e,f;if(!c)return` ${b}`;let g=` ${u(b,d)}`;return g+(e=y.ink2(c),f=x-r(g),a.fit&&r(e)>f?function(a,b){var c;if(r(a)<=b)return a;if(a.includes("\x1b")){let d,e;return b<=1?"…":`${(e=(d=s(c=p(a,b-1)))[d.length-1])&&e.active?c+l:c}…`}return b<=0?"":a.length<=b?a:a.slice(0,b-1).trimEnd()+"…"}(e,Math.max(1,f)):e)})};return{cols:x,sep:B,cmd:D,on:E,off:F,failed:G,selected:H,unselected:I,meta:a=>C(y.ink3,a),header:J,head:K,rows:L,kv:(a,b=9)=>{let c=Math.max(b,...a.map(([a])=>r(a)))+2;return a.map(([a,b])=>b?` ${u(C(y.ink3,a),c)}${b}`:` ${C(y.ink3,a)}`)},ok:(a,b)=>`${y.guide("✓")} ${a}${b?` ${y.ink3(b)}`:""}`,caution:(a,b)=>`${y.warn("▲")} ${a}${b?`${B}${D(b)}`:""}`,fail:(a,b)=>`${y.err("✕")} ${a}${b?`${B}${D(b)}`:""}`,notice:(a,b)=>{let c=a=>(a.split("`").length-1)%2==0?a.replace(/`([^`]+)`/g,(a,b)=>D(b)):a,d="ok"===a?y.guide("✓"):"caution"===a?y.warn("▲"):y.err("✕"),[e="",...f]=b.split("\n");return[`${d} ${c(e)}`,...f.map(a=>""===a.trim()?"":` ${c(a)}`)]},confirm:(a,c="Continue?")=>new Promise(d=>{let{stdin:e,stdout:f}=a,g="",h=!1,i=e.isRaw,j=a=>{h||(h=!0,e.removeListener("keypress",l),e.removeListener("end",k),e.setRawMode?.(i??!1),e.pause(),f.write("\n"),d(a))};function k(){j(!1)}function l(a,b){let c=b?.name;b?.ctrl&&("c"===c||"d"===c)||"escape"===c?j(!1):"return"===c||"enter"===c?j(/^y(es)?$/i.test(g.trim())):"backspace"===c?g&&(g=g.slice(0,-1),f.write("\b \b")):a&&1===a.length&&a>=" "&&!b?.ctrl&&!b?.meta&&(g+=a,f.write(a))}f.write(`${c} ${y.ink3("y/N")} `),b.emitKeypressEvents(e),e.setRawMode?.(!0),e.on("keypress",l),e.on("end",k),e.resume()}),keys:a=>y.ink3(a.join(" · ")),bar:(a,b)=>{let c=Math.round(Math.max(0,Math.min(1,b))*a),d=Math.max(0,a-c);return C(y.pink,"━".repeat(c))+(z?C(y.track,"━".repeat(d)):" ".repeat(d))},logo:()=>x<22?[]:(function(a){let b=".".repeat(o[0]?.length??0),c=a=>"t"===a?d:"p"===a?e:null,f=[];for(let d=0;d<o.length;d+=2){let e=o[d],g=o[d+1]??b,h="";for(let b=0;b<e.length;b++){let d=c(e[b]),f=c(g[b]);if(d||f)if("basic"===a)h+=d&&f?"█":d?"▀":"▄";else if(d&&f)h+=d===f?`\x1b[${n(d,a)}m█\x1b[0m`:`\x1b[${n(d,a)};${"ansi256"===a&&void 0!==f.c256?`48;5;${f.c256}`:`48;2;${f.rgb[0]};${f.rgb[1]};${f.rgb[2]}`}m▀\x1b[0m`;else d?h+=`\x1b[${n(d,a)}m▀\x1b[0m`:h+=`\x1b[${n(f,a)}m▄\x1b[0m`;else h+=" "}f.push(h)}return f})(z?m():"basic").map(a=>` ${a}`),helpPage:b=>{var c;let d,e=[J(b.name),"",K("Usage"),...L(b.usage)];return b.options?.length&&e.push("",K("Options"),...(c=b.options,d=Math.max(b.optionsCol??0,...c.map(([a,b])=>b?r(a)+2:0)),c.flatMap(([b,c])=>{if(!c)return[` ${b}`];let e=` ${u(b,d)}`,f=x-r(e);if(!a.fit||r(c)<=f)return[e+y.ink2(c)];let g=" ".repeat(r(e));return(function(a,b){if(b<=0)return[a];if(!a.includes("\x1b")){if(b<=0)return[a];let c=a.split(/\s+/).filter(Boolean);if(0===c.length)return[];let d=[],e="";for(let a of c)e?e.length+1+a.length<=b?e+=` ${a}`:(d.push(e),e=a):e=a;return e&&d.push(e),d}let c=[],d=[];for(let b of s(a))/\s/.test(b.ch)?(d.length>0&&c.push(d),d=[]):d.push(b);d.length>0&&c.push(d);let e=[],f=[];for(let a of c){if(f.length>0&&f.length+1+a.length>b){e.push(t(f)),f=[...a];continue}f.length>0&&f.push({ch:" ",active:f[f.length-1].active}),f.push(...a)}return f.length>0&&e.push(t(f)),e})(c,Math.max(1,f)).map((a,b)=>(0===b?e:g)+y.ink2(a))}))),b.examples?.length&&e.push("",K("Examples"),...b.examples.map(a=>` ${D(a)}`)),e},live:a=>{let b={lastCount:0},c=0,d=null,e=null,f=!1,g=!1,h=()=>{a.write("\x1b[?25h")},i=()=>{process.removeListener("exit",h),process.removeListener("SIGINT",j),process.removeListener("SIGTERM",j)},j=a=>{g=!0,e&&clearTimeout(e),i(),h(),process.kill(process.pid,a)},k=()=>{e=null;let i=d;if(d=null,!i||g)return;c=Date.now();let k="";f||(f=!0,k="\x1b[?25l",process.once("exit",h),process.on("SIGINT",j),process.on("SIGTERM",j)),q(a,b,i(),{lead:k})};return{draw(a){if(g||(d=a,e))return;let b=c+100-Date.now();b<=0?k():(e=setTimeout(k,b),e.unref?.())},done(c){g||(g=!0,e&&clearTimeout(e),e=null,d=null,i(),q(a,b,c,{cut:!1,tail:f?"\x1b[?25h":""}))}}}}}])},91997,80504,67121,a=>{let b=["user","project","local"],c=["claude","codex","copilot","cursor","opencode","pi","hermes","openclaw","factory","devin","antigravity","goose"],d=["user","project"],e=["session_start","pre_tool_use","permission_request","post_tool_use","user_prompt_submit","stop","subagent_start","pre_compact","post_compact","subagent_stop"],f={session_start:"SessionStart",pre_tool_use:"PreToolUse",permission_request:"PermissionRequest",post_tool_use:"PostToolUse",user_prompt_submit:"UserPromptSubmit",stop:"Stop",subagent_start:"SubagentStart",pre_compact:"PreCompact",post_compact:"PostCompact",subagent_stop:"SubagentStop"},g=["user"],h=["pre_tool_call","post_tool_call","on_session_start","on_session_end","subagent_stop"],i=["user","project"],j=["SessionStart","SessionEnd","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","PostToolUseFailure","ErrorOccurred","PreCompact","PermissionRequest","Notification"],k=["user","project"],l=["sessionStart","sessionEnd","beforeSubmitPrompt","preToolUse","postToolUse","stop","subagentStop"],m=["user","project"],n=["tool.execute.before","tool.execute.after","session.created","session.deleted","session.idle","message.updated","permission.ask"],o=["user","project"],p=["session_start","session_shutdown","input","tool_call","user_bash","tool_result","agent_end"],q=["user"],r=["before_tool_call","after_tool_call","before_agent_run","before_agent_finalize","session_start","session_end","subagent_ended","before_compaction"],s=["user","project"],t=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Notification","Stop","SubagentStop","PreCompact","SessionEnd"],u=["user","project"],v=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","PermissionRequest","Stop","SessionEnd"],w=["user","project"],x=["PreToolUse","PostToolUse","PreInvocation","Stop"],y=["user","project"],z=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","SessionEnd"],A=["SessionStart","SessionEnd","UserPromptSubmit","PreToolUse","PermissionRequest","PermissionDenied","PostToolUse","PostToolUseFailure","Notification","SubagentStart","SubagentStop","TaskCreated","TaskCompleted","Stop","StopFailure","TeammateIdle","InstructionsLoaded","ConfigChange","CwdChanged","FileChanged","WorktreeCreate","WorktreeRemove","PreCompact","PostCompact","Elicitation","ElicitationResult","UserPromptExpansion","PostToolBatch","Setup"].filter(a=>"WorktreeCreate"!==a),B="__failproofai_hook__";a.s(["X",0,x,"m",0,w,"I",0,A,"p",0,f,"W",0,e,"L",0,d,"d",0,j,"w",0,i,"s",0,l,"Y",0,k,"D",0,v,"c",0,u,"n",0,t,"B",0,s,"Z",0,B,"i",0,z,"x",0,y,"y",0,h,"M",0,g,"F",0,b,"z",0,c,"P",0,r,"E",0,q,"e",0,n,"O",0,m,"J",0,p,"G",0,o],91997);var C=a.i(74533),D=a.i(2157),E=a.i(50227),F=a.i(57764),G=a.i(60526),H=a.i(22650),I=a.i(66680);class J extends Error{path;target;constructor(a,b){super(`Refusing to write ${a}: it is a symlink to ${b}, which does not exist. Fix or remove the link, then retry — failproofai will not replace it with a regular file.`),this.path=a,this.target=b,this.name="DanglingConfigSymlinkError"}}function K(a,b,c={}){let d,e,f="replace"===c.symlinks&&function(a){try{return(0,D.lstatSync)(a).isSymbolicLink()}catch{return!1}}(a),g="replace"===c.symlinks?a:function(a){let b=!1;try{b=(0,D.lstatSync)(a).isSymbolicLink()}catch{return a}if(!b)return a;try{return(0,D.realpathSync)(a)}catch{let b="(unreadable link)";try{b=(0,D.readlinkSync)(a)}catch{}throw new J(a,b)}}(a),h=(0,E.dirname)(g);(0,D.mkdirSync)(h,{recursive:!0});try{d=c.mode??(f?void 0:511&(0,D.statSync)(g).mode)}catch{d=c.mode}let i=(0,E.join)(h,`.${(0,E.basename)(g)}.failproofai-${process.pid}-${(0,I.randomBytes)(4).toString("hex")}.tmp`);try{e=(0,D.openSync)(i,"wx",d??438);let a=Buffer.from(b,"utf8"),j=0;for(;j<a.length;)j+=(0,D.writeSync)(e,a,j,a.length-j);(0,D.fsyncSync)(e),(0,D.closeSync)(e),e=void 0,void 0!==d&&(0,D.chmodSync)(i,d),!1!==c.backup&&!f&&(0,D.existsSync)(g)&&function(a,b){let c=`${a}.failproofai-backup`,d=(0,E.join)(b,`.${(0,E.basename)(a)}.failproofai-backup-${process.pid}-${(0,I.randomBytes)(4).toString("hex")}.tmp`);try{(0,D.copyFileSync)(a,d,D.constants.COPYFILE_EXCL),(0,D.renameSync)(d,c)}catch(a){throw(0,D.rmSync)(d,{force:!0}),a}}(g,h),(c.rename??D.renameSync)(i,g)}catch(a){if(void 0!==e)try{(0,D.closeSync)(e)}catch{}throw(0,D.rmSync)(i,{force:!0}),a}try{let a=(0,D.openSync)(h,"r");try{(0,D.fsyncSync)(a)}finally{(0,D.closeSync)(a)}}catch{}}var L=a.i(8284),M=a.i(68561);let N="# >>> failproofai managed hooks >>>",O="# <<< failproofai managed hooks <<<",P="0.129.0",Q=["PreToolUse","PermissionRequest","PostToolUse","PreCompact","PostCompact","SessionStart","SessionEnd","UserPromptSubmit","SubagentStart","SubagentStop","Stop","Interrupt"];function R(a){return`${a}.failproofai-backup`}function S(){try{let a=(0,C.execSync)("codex --version",{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5e3});return/(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/.exec(a)?.[1]??null}catch{return null}}function T(a){let b=RegExp(`^${U(N)}[ \\t]*$`,"m").exec(a);if(!b)return RegExp(`^${U(O)}[ \\t]*$`,"m").test(a)?"malformed":null;let c=RegExp(`^${U(O)}[ \\t]*$`,"mg");c.lastIndex=b.index+b[0].length;let d=c.exec(a);if(!d)return"malformed";let e=d.index+d[0].length;return"\r"===a[e]&&e++,"\n"===a[e]&&e++,{start:b.index,end:e}}function U(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function V(a,b){let c=T(a);if("malformed"===c)throw Error("failproofai's managed block is missing its begin or end marker");if(c){let d=a.slice(0,c.start),e=a.slice(c.end);return null!==b?d+b+e:(d.endsWith("\n\n")&&""===e?d.slice(0,-1):d)+e}return null===b?a:""===a?b:`${a}${a.endsWith("\n")?"\n":"\n\n"}${b}`}function W(a){let b;return void 0!==a.path?a.path:void 0!==(b=process.env.FAILPROOFAI_CODEX_SYSTEM_CONFIG)?""===b||"off"===b?null:(0,E.resolve)(b):"/etc/codex/config.toml"}function X(a){let b=(0,E.dirname)(a);for(;!(0,D.existsSync)(b);){let a=(0,E.dirname)(b);if(a===b)return!1;b=a}try{return(0,D.accessSync)(b,D.constants.W_OK),(0,D.existsSync)(a)&&(0,D.accessSync)(a,D.constants.W_OK),!0}catch{return!1}}function Y(a){try{return(511&(0,D.statSync)(a).mode).toString(8).padStart(4,"0")}catch{return"0644"}}function Z(a,b,c,d){if(d){K(a,b,{backup:!1}),(0,D.chmodSync)(a,parseInt(c,8));return}(0,L.p)("install",["-d","-m","0755",(0,E.dirname)(a)]),(0,L.C)(a,b,c)}function $(a,b){b?(0,D.rmSync)(a,{force:!0}):(0,L.p)("rm",["-f",a])}function _(a={}){let b=W(a);if(!b)return!1;try{var c;let a;return c=(0,D.readFileSync)(b,"utf8"),a=T(c),null!==a&&"malformed"!==a}catch{return!1}}function aa(a){return a.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase()}let ab=new Set(["UserPromptSubmit","Stop","Interrupt"]);function ac(a,b){for(;b<a.length&&(" "===a[b]||" "===a[b]);)b++;return b}function ad(a,b){let c=[];for(;;){b=ac(a,b);let d=ae(a,b);if(d)c.push(d.value),b=d.end;else{let d=/^[A-Za-z0-9_-]+/.exec(a.slice(b));if(!d)return null;c.push(d[0]),b+=d[0].length}let e=ac(a,b);if("."!==a[e])return{path:c,end:b};b=e+1}}function ae(a,b){if("'"===a[b]){let c=a.indexOf("'",b+1);return c<0?null:{value:a.slice(b+1,c),end:c+1}}if('"'!==a[b])return null;let c="";for(let d=b+1;d<a.length;d++){let b=a[d];if('"'===b)return{value:c,end:d+1};if("\\"!==b){c+=b;continue}let e=a[++d],f={b:"\b",t:" ",n:"\n",f:"\f",r:"\r",'"':'"',"\\":"\\",e:"\x1b"};if(e in f)c+=f[e];else if("u"===e||"U"===e){let b="u"===e?4:8,f=a.slice(d+1,d+1+b);if(!/^[0-9A-Fa-f]+$/.test(f)||f.length!==b)return null;c+=String.fromCodePoint(parseInt(f,16)),d+=b}else break}return null}a.s(["s",0,"Codex won't run failproofai's hooks until they're trusted.\nRe-run `failproofai config` and allow sudo, or open `codex` once and approve the hooks.","c",0,function(a={}){let b=W(a);if(b&&_({path:b}))return{kind:"system",path:b};let c=a.hooksJsonPath??(0,E.resolve)((0,G.homedir)(),".codex","hooks.json"),d=function(a){let b;try{b=JSON.parse((0,D.readFileSync)(a,"utf8"))}catch{return[]}let c=b?.hooks;if(!c||"object"!=typeof c)return[];let d=[];for(let[b,e]of Object.entries(c))Array.isArray(e)&&e.forEach((c,e)=>{let f=c?.hooks;Array.isArray(f)&&f.forEach((f,g)=>{if(!function(a){if(!a||"object"!=typeof a)return!1;if(!0===a[B])return!0;let b="string"==typeof a.command?a.command:"";return b.includes("failproofai")&&b.includes("--hook")}(f))return;let h=c.matcher;d.push({key:`${a}:${aa(b)}:${e}:${g}`,hash:function(a,b,c){let d="SessionEnd"===a||"Interrupt"===a,e="number"==typeof c.timeout&&Number.isFinite(c.timeout)?Math.trunc(c.timeout):null,f=d?Math.min(3,Math.max(1,e??1)):Math.max(1,e??600),g={async:!0===c.async,command:"string"==typeof c.command?c.command:"",timeout:f,type:"command"};"string"==typeof c.statusMessage&&(g.statusMessage=c.statusMessage);let h=c.additionalContextLimit;"number"==typeof h&&2500!==h&&(g.additionalContextLimit=h);let i={event_name:aa(a),hooks:[g]};return null===b||ab.has(a)||(i.matcher=b),`sha256:${(0,I.createHash)("sha256").update(function a(b){if(Array.isArray(b))return`[${b.map(a).join(",")}]`;if(b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b));return`{${c.map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`).join(",")}}`}return JSON.stringify(b)}(i)).digest("hex")}`}(b,"string"==typeof h?h:null,f)})})});return d}(c);if(0===d.length)return{kind:"none"};let e=(a.codexVersion??S)();if(e&&!function(a){if(!a)return!0;let b=(0,M.f)(a,P);return null===b||b>=0}(e))return{kind:"ungated",path:c,version:e};let f=new Map;try{f=function(a){let b=new Map,c=(a,c)=>{if(4===a.length&&"hooks"===a[0]&&"state"===a[1]&&"trusted_hash"===a[3]){let d=a[2].trim();d&&b.set(d,c)}},d=[],e=null;for(let b of a.split("\n")){let a=b.replace(/\r$/,"");if(e){a.includes(e)&&(e=null);continue}let f=a.trimStart();if(f.startsWith("#")||""===f)continue;if(f.startsWith("[[")){let a=ad(f,2);d=a?[...a.path,"[]"]:["[]"];continue}if(f.startsWith("[")){let a=ad(f,1);d=a&&"]"===f[ac(f,a.end)]?a.path:["?"];continue}let g=ad(f,0);if(!g)continue;let h=ac(f,g.end);if("="!==f[h])continue;h=ac(f,h+1);let i=[...d,...g.path];if(f.startsWith('"""',h)||f.startsWith("'''",h)){let a=f.slice(h,h+3);f.slice(h+3).includes(a)||(e=a);continue}let j=ae(f,h);if(j){c(i,j.value);continue}if("{"===f[h]){let a=h+1;for(;;){a=ac(f,a);let b=ad(f,a);if(!b||(a=ac(f,b.end),"="!==f[a]))break;a=ac(f,a+1);let d=ae(f,a);if(d)c([...i,...b.path],d.value),a=d.end;else for(;a<f.length&&","!==f[a]&&"}"!==f[a];)a++;if(a=ac(f,a),","!==f[a])break;a++}}}return b}((0,D.readFileSync)(a.userConfigPath??(0,E.resolve)((0,G.homedir)(),".codex","config.toml"),"utf8"))}catch{}let g=d.filter(a=>f.get(a.key)!==a.hash).length;return 0===g?{kind:"trusted",path:c}:{kind:"untrusted",path:c,untrusted:g,total:d.length}},"j",0,_,"i",0,function(a,b={}){let c=W(b);if(!c)return{ok:!1,reason:"unsupported-platform"};let d=(b.codexVersion??S)();if(!d)return{ok:!1,reason:"codex-not-found",path:c};let e=(0,M.f)(d,P);if(null!==e&&e<0)return{ok:!1,reason:"codex-too-old",detail:d,path:c};let f="",g=(0,D.existsSync)(c);if(g)try{f=(0,D.readFileSync)(c,"utf8")}catch(a){return{ok:!1,reason:"unreadable",detail:a instanceof Error?a.message:String(a),path:c}}let h=T(f);if("malformed"===h)return{ok:!1,reason:"unreadable",detail:"failproofai's block has lost one of its markers",path:c};let i=function(a){let b=Q.join("|"),c=/^\s*hooks\s*=/,d=RegExp(`^\\s*hooks\\s*\\.\\s*"?(${b})"?\\s*(=|\\.)`),e=RegExp(`^\\s*\\[\\s*hooks\\s*\\.\\s*"?(${b})"?\\s*(\\]|\\.)`),f=RegExp(`^\\s*"?(${b})"?\\s*(=|\\.)`),g=!1;for(let b of a.split("\n")){let a=b.replace(/\r$/,"");if(/^\s*\[\[/.test(a)){g=!1;continue}if(/^\s*\[/.test(a)){if(e.test(a))return a.trim();g=/^\s*\[\s*hooks\s*\]/.test(a);continue}if(c.test(a)||d.test(a)||g&&f.test(a))return a.trim()}return null}(h?f.slice(0,h.start)+f.slice(h.end):f);if(i)return{ok:!1,reason:"conflict",detail:i,path:c};let j=V(f,function(a){let b=[N,"# Written by failproofai. Codex runs hooks from its system config without","# asking to trust them. `failproofai uninstall` removes this block; edit","# outside the markers only, everything between them is replaced."];for(let c of a)b.push("",`[[hooks.${c.event}]]`,`[[hooks.${c.event}.hooks]]`,'type = "command"',`command = ${JSON.stringify(c.command)}`,`timeout = ${Math.trunc(c.timeout)}`);return b.push(O),`${b.join("\n")}
|
|
26
|
-
`}(a));if(
|
|
27
|
-
`)?(Z(c,h,Y(c),i),$(g,i)):null===h&&""===f.trim()?$(c,i):Z(c,f,Y(c),i)}catch(a){return{status:"failed",path:c,reason:a instanceof Error?a.message:String(a)}}return{status:"removed",path:c,hooks:e}}],80504);var af=a.i(43600);let ag="default";function ah(){let a,b=function(){let a=(process.env.OPENCLAW_STATE_DIR??"").trim();if(a)return(0,E.resolve)(a);let b=(process.env.OPENCLAW_HOME??"").trim();if(b)return(0,E.resolve)(b);let c=(process.env.OPENCLAW_CONFIG_PATH||"").trim();return c?(0,E.dirname)((0,E.resolve)(c)):(0,E.join)((0,G.homedir)(),".openclaw")}(),c=(0,E.basename)(b);if(".openclaw"!==c&&!c.startsWith(".openclaw-"))return[{name:ag,home:b}];let d=(0,E.dirname)(b),e=[{name:ag,home:(0,E.join)(d,".openclaw")}];try{a=(0,D.readdirSync)(d,{withFileTypes:!0})}catch{return e}let f=a.filter(a=>(a.isDirectory()||a.isSymbolicLink())&&a.name.startsWith(".openclaw-")&&a.name.length>10&&(0,D.existsSync)((0,E.join)(d,a.name,"openclaw.json"))).map(a=>({name:a.name.slice(10),home:(0,E.join)(d,a.name)})).sort((a,b)=>a.name.localeCompare(b.name));return e.push(...f),e}var ai={get url(){return a.F("src/hooks/integrations.ts")},env:{DEV:!1,PROD:!0,MODE:"production",BASE_URL:"/",SSR:!0}};class aj extends Error{path;constructor(a,b){super(`Refusing to modify ${a}: ${b}. failproofai never rewrites a config it could not parse — fix or move the file, then retry.`),this.path=a,this.name="UnreadableAgentConfigError"}}function ak(a){let b,c;if(!(0,D.existsSync)(a))return{};try{b=(0,D.readFileSync)(a,"utf8")}catch(b){throw new aj(a,`it could not be read (${b instanceof Error?b.message:String(b)})`)}if(""===b.trim())return{};try{c=JSON.parse(b)}catch(b){throw new aj(a,`it is not valid JSON (${b instanceof Error?b.message:String(b)})`)}if(!c||"object"!=typeof c||Array.isArray(c))throw new aj(a,"its top level is not a JSON object");return c}function al(a,b){K(a,JSON.stringify(b,null,2)+"\n")}function am(a){let b;if(!(0,D.existsSync)(a))return(0,H.parseDocument)("");try{b=(0,D.readFileSync)(a,"utf8")}catch(b){throw new aj(a,`it could not be read (${b instanceof Error?b.message:String(b)})`)}let c=(0,H.parseDocument)(b);if(c.errors.length>0){let b=c.errors[0]?.message.split("\n")[0]??"syntax error";throw new aj(a,`it does not parse as YAML (${b})`)}return c}function an(a,b){K(a,b.toString())}function ao(a){if(!a||"object"!=typeof a)return!1;if(!0===a[B])return!0;let b="string"==typeof a.command?a.command:"";return b.includes("failproofai")&&b.includes("--hook")}function ap(a){return"version"in a&&(delete a.version,!0)}function aq(a){try{let b=`which ${a}`;return(0,C.execSync)(b,{encoding:"utf8",stdio:"pipe"}),!0}catch{return!1}}function ar(a,b,c){let d=a.getSettingsPaths?.(b,c);return d&&d.length>0?d:[a.getSettingsPath(b,c)]}let as={id:"claude",displayName:"Claude Code",scopes:b,eventTypes:A,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".claude","settings.json");case"project":return(0,E.resolve)(c,".claude","settings.json");case"local":return(0,E.resolve)(c,".claude","settings.local.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b}`:`"${a}" --hook ${b}`,timeout:60,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){a.hooks||(a.hooks={});let d=new Set(A);for(let b of Object.keys(a.hooks)){if(d.has(b))continue;let c=a.hooks[b];if(!Array.isArray(c))continue;let e=[];for(let a of c){if(!a||!Array.isArray(a.hooks)){a&&e.push(a);continue}let b=a.hooks.length;a.hooks=a.hooks.filter(a=>!ao(a)),0===a.hooks.length&&b>0||e.push(a)}a.hooks[b]=e,0===e.length&&delete a.hooks[b]}for(let d of A){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!ao(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("claude")||aq("claude-code")},at={id:"codex",displayName:"OpenAI Codex",scopes:d,eventTypes:e,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".codex","hooks.json");case"project":case"local":return(0,E.resolve)(c,".codex","hooks.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli codex`:`"${a}" --hook ${b} --cli codex`,timeout:60,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){for(let d of(ap(a),a.hooks||(a.hooks={}),e)){let e=f[d],g=this.buildHookEntry(b,d,c);a.hooks[e]||(a.hooks[e]=[]);let h=a.hooks[e],i=!1;for(let a of h){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=g,i=!0;break}}i||h.push({hooks:[g]})}},removeHooksFromFile(a){let b=this.readSettings(a),c=ap(b);if(!b.hooks)return c&&this.writeSettings(a,b),0;let d=0;for(let a of Object.keys(b.hooks)){let c=b.hooks[a];if(Array.isArray(c)){for(let a=c.length-1;a>=0;a--){let b=c[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!ao(a)),d+=e-b.hooks.length,0===b.hooks.length&&c.splice(a,1)}0===c.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,(d>0||c)&&this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){if("user"===a&&_())return!0;let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("codex")};function au(a){if(!0===a[B])return!0;for(let b of["string"==typeof a.bash?a.bash:"","string"==typeof a.powershell?a.powershell:""])if(b.includes("failproofai")&&b.includes("--hook"))return!0;return!1}let av="./plugins/failproofai.mjs";function aw(a){return(0,E.resolve)((0,E.dirname)(a),"plugins","failproofai.mjs")}function ax(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,E.resolve)(a,"pi-extension"):(0,E.resolve)((0,F.fileURLToPath)(ai.url),"..","..","..","pi-extension")}function ay(a){return"string"==typeof a&&(!!/(?:^|\/)pi-extension\/?$/.test(a)||a.includes("pi-extension")&&a.includes("failproofai"))}let az="failproofai",aA=".failproofai-managed",aB=["plugin.yaml","__init__.py","client.py","ledger.py"],aC="hermes-plugin";function aD(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,E.resolve)(a,aC):function(a){let b=(0,E.resolve)(a);for(let a=0;a<8;a++){let a=(0,E.resolve)(b,aC);if((0,D.existsSync)((0,E.resolve)(a,"plugin.yaml")))return a;let c=(0,E.dirname)(b);if(c===b)break;b=c}return(0,E.resolve)(a,"..","..",aC)}((0,E.dirname)((0,F.fileURLToPath)(ai.url)))}function aE(a){return(0,E.resolve)((0,E.dirname)(a),"plugins",az)}function aF(a){try{return(0,D.lstatSync)(a),!0}catch{return!1}}function aG(a){return aB.every(b=>(0,D.existsSync)((0,E.resolve)(a,b)))}function aH(a){return(0,E.resolve)((0,E.dirname)(a),".failproofai-link")}function aI(a){try{let b=(0,D.readFileSync)(aH(a),"utf8").trim();return""===b?null:(0,E.resolve)(b)}catch{return null}}function aJ(a,b){K(aH(a),(0,E.resolve)(b)+"\n",{backup:!1,symlinks:"replace"})}function aK(a){(0,D.rmSync)(aH(a),{force:!0})}function aL(a,b){if((0,E.resolve)(a)===(0,E.resolve)(b))return!0;try{return(0,D.realpathSync)(a)===(0,D.realpathSync)(b)}catch{return!1}}function aM(a){let b,c,d=aE(a);try{let a=(0,D.lstatSync)(d);b=a.isSymbolicLink(),c=a.isDirectory()}catch{return{kind:"absent"}}if(b){let a;try{a=(0,E.resolve)((0,E.dirname)(d),(0,D.readlinkSync)(d))}catch{return{kind:"foreign"}}return!function(a,b){let c=aI(a);if(c&&(0,E.resolve)(b)===c||aL(b,aD()))return!0;let d=(0,E.dirname)((0,E.resolve)(b));if((0,E.basename)((0,E.resolve)(b))!==aC||"failproofai"!==(0,E.basename)(d)||"node_modules"!==(0,E.basename)((0,E.dirname)(d)))return!1;try{let a=JSON.parse((0,D.readFileSync)((0,E.resolve)(d,"package.json"),"utf8"));return"failproofai"===a.name}catch{return!1}}(d,a)?{kind:"foreign"}:{kind:"link",target:a,complete:aG(a),current:aL(a,aD())}}return c&&(0,D.existsSync)((0,E.resolve)(d,aA))?{kind:"copy",complete:aG(d)}:{kind:"foreign"}}function aN(a){let b=(a.toJS()??{}).hooks,c=0;if(b&&"object"==typeof b){for(let a of Object.keys(b)){let d=b[a];if(!Array.isArray(d))continue;let e=d.length,f=d.filter(a=>!ao(a));c+=e-f.length,0===f.length?delete b[a]:b[a]=f}0===Object.keys(b).length?(a.delete("hooks"),c>0&&a.delete("hooks_auto_accept")):a.set("hooks",b)}return c}function aO(a){if(!(0,D.existsSync)(a))return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1};let b=function(a){try{return am(a)}catch{return null}}(a);if(!b)return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1,unreadable:!0};let c=b.toJS()??{},d=c.plugins?.enabled,e=c.plugins?.disabled,f=!!c.hooks&&"object"==typeof c.hooks&&Object.values(c.hooks).some(a=>Array.isArray(a)&&a.some(a=>ao(a))),g=Array.isArray(d)&&d.includes(az),h=Array.isArray(e)&&e.includes(az);return{pluginEnabled:g&&!h,pluginListed:g,pluginDisabled:h,legacyShellHookPresent:f}}let aP="failproofai";function aQ(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,E.resolve)(a,"openclaw-plugin"):(0,E.resolve)((0,F.fileURLToPath)(ai.url),"..","..","..","openclaw-plugin")}function aR(a){return"string"==typeof a&&(/(?:^|\/)openclaw-plugin\/?$/.test(a)||a.includes("openclaw-plugin")&&a.includes("failproofai"))}let aS="failproofai",aT=new Set(["PreToolUse","PostToolUse"]);function aU(a){if(!a||"object"!=typeof a)return!1;let b=a.command;return"string"==typeof b&&b.includes("failproofai")&&b.includes("--cli goose")}let aV={claude:as,codex:at,copilot:{id:"copilot",displayName:"GitHub Copilot",scopes:i,eventTypes:j,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".copilot","hooks","failproofai.json");case"project":case"local":return(0,E.resolve)(c,".github","hooks","failproofai.json")}},readSettings(a){let b=ak(a);return void 0===b.version&&(b.version=1),b},writeSettings(a,b){al(a,b)},buildHookEntry(a,b,c){let d="project"===c?`npx -y failproofai --hook ${b} --cli copilot`:`"${a}" --hook ${b} --cli copilot`;return{type:"command",bash:d,powershell:d,timeoutSec:60,[B]:!0}},isFailproofaiHook:au,writeHookEntries(a,b,c){for(let d of(void 0===a.version&&(a.version=1),a.hooks||(a.hooks={}),j)){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>au(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!au(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>au(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("copilot")},cursor:{id:"cursor",displayName:"Cursor Agent",scopes:k,eventTypes:l,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".cursor","hooks.json");case"project":case"local":return(0,E.resolve)(c,".cursor","hooks.json")}},readSettings(a){let b=ak(a);return void 0===b.version&&(b.version=1),b},writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli cursor`:`"${a}" --hook ${b} --cli cursor`,timeout:60,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){for(let d of(void 0===a.version&&(a.version=1),a.hooks||(a.hooks={}),l)){let e=this.buildHookEntry(b,d,c),f=a.hooks[d],g=f??[];f||(a.hooks[d]=g);let h=g.findIndex(a=>ao(a));h>=0?g[h]=e:g.push(e)}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(!Array.isArray(d))continue;let e=d.length,f=d.filter(a=>!ao(a));c+=e-f.length,0===f.length?delete b.hooks[a]:b.hooks[a]=f}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)&&b.some(a=>ao(a)))return!0}catch{}return!1},detectInstalled:()=>aq("cursor-agent")||aq("agent")},opencode:{id:"opencode",displayName:"OpenCode",scopes:m,eventTypes:n,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".config","opencode","opencode.json");case"project":case"local":return(0,E.resolve)(c,".opencode","opencode.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry(a,b,c){if("user"===c){let a=(0,E.resolve)((0,G.homedir)(),".config","opencode","plugins","failproofai.mjs");return{spec:`file://${a}`,[B]:!0}}return{spec:av,[B]:!0}},isFailproofaiHook:a=>"string"==typeof a?a.includes("failproofai.mjs"):!!Array.isArray(a)&&"string"==typeof a[0]&&a[0].includes("failproofai.mjs"),writeHookEntries(a,b,c){let d,e,f=c??"project",g=aw("user"===f?(0,E.resolve)((0,G.homedir)(),".config","opencode","opencode.json"):(0,E.resolve)(process.cwd(),".opencode","opencode.json"));(0,D.mkdirSync)((0,E.dirname)(g),{recursive:!0}),K(g,(e=(d="project"===f)?'""':JSON.stringify(b),`// AUTO-GENERATED by failproofai. ${B}
|
|
25
|
+
${n}`);if(l){let a=a=>a.default&&"tag:yaml.org,2002:str"!==a.tag&&a.test?.test(q),{compat:c,tags:d}=b.doc.schema;if(d.some(a)||c?.some(a))return j(i,b)}return m?q:f.foldFlowLines(q,n,f.FOLD_FLOW,g(b,!1))}(n,b,c,d);default:return null}},q=p(o);if(null===q){let{defaultKeyType:a,defaultStringType:c}=b.options,d=l&&a||c;if(null===(q=p(d)))throw Error(`Unsupported default string type ${d}`)}return q}},85927,(a,b,c)=>{var d=a.r(27267);let e=Symbol("break visit"),f=Symbol("skip children"),g=Symbol("remove node");function h(a,b){let c=l(b);d.isDocument(a)?i(null,a.contents,c,Object.freeze([a]))===g&&(a.contents=null):i(null,a,c,Object.freeze([]))}function i(a,b,c,f){let h=m(a,b,c,f);if(d.isNode(h)||d.isPair(h))return n(a,f,h),i(a,h,c,f);if("symbol"!=typeof h){if(d.isCollection(b)){f=Object.freeze(f.concat(b));for(let a=0;a<b.items.length;++a){let d=i(a,b.items[a],c,f);if("number"==typeof d)a=d-1;else{if(d===e)return e;d===g&&(b.items.splice(a,1),a-=1)}}}else if(d.isPair(b)){f=Object.freeze(f.concat(b));let a=i("key",b.key,c,f);if(a===e)return e;a===g&&(b.key=null);let d=i("value",b.value,c,f);if(d===e)return e;d===g&&(b.value=null)}}return h}async function j(a,b){let c=l(b);d.isDocument(a)?await k(null,a.contents,c,Object.freeze([a]))===g&&(a.contents=null):await k(null,a,c,Object.freeze([]))}async function k(a,b,c,f){let h=await m(a,b,c,f);if(d.isNode(h)||d.isPair(h))return n(a,f,h),k(a,h,c,f);if("symbol"!=typeof h){if(d.isCollection(b)){f=Object.freeze(f.concat(b));for(let a=0;a<b.items.length;++a){let d=await k(a,b.items[a],c,f);if("number"==typeof d)a=d-1;else{if(d===e)return e;d===g&&(b.items.splice(a,1),a-=1)}}}else if(d.isPair(b)){f=Object.freeze(f.concat(b));let a=await k("key",b.key,c,f);if(a===e)return e;a===g&&(b.key=null);let d=await k("value",b.value,c,f);if(d===e)return e;d===g&&(b.value=null)}}return h}function l(a){return"object"==typeof a&&(a.Collection||a.Node||a.Value)?Object.assign({Alias:a.Node,Map:a.Node,Scalar:a.Node,Seq:a.Node},a.Value&&{Map:a.Value,Scalar:a.Value,Seq:a.Value},a.Collection&&{Map:a.Collection,Seq:a.Collection},a):a}function m(a,b,c,e){return"function"==typeof c?c(a,b,e):d.isMap(b)?c.Map?.(a,b,e):d.isSeq(b)?c.Seq?.(a,b,e):d.isPair(b)?c.Pair?.(a,b,e):d.isScalar(b)?c.Scalar?.(a,b,e):d.isAlias(b)?c.Alias?.(a,b,e):void 0}function n(a,b,c){let e=b[b.length-1];if(d.isCollection(e))e.items[a]=c;else if(d.isPair(e))"key"===a?e.key=c:e.value=c;else if(d.isDocument(e))e.contents=c;else{let a=d.isAlias(e)?"alias":"scalar";throw Error(`Cannot replace node with ${a} parent`)}}h.BREAK=e,h.SKIP=f,h.REMOVE=g,j.BREAK=e,j.SKIP=f,j.REMOVE=g,c.visit=h,c.visitAsync=j},41863,80504,a=>{var b=a.i(74533),c=a.i(2157),d=a.i(50227),e=a.i(57764),f=a.i(60526),g=a.i(22650),h=a.i(66680);class i extends Error{path;target;constructor(a,b){super(`Refusing to write ${a}: it is a symlink to ${b}, which does not exist. Fix or remove the link, then retry — failproofai will not replace it with a regular file.`),this.path=a,this.target=b,this.name="DanglingConfigSymlinkError"}}function j(a,b,e={}){let f,g,k="replace"===e.symlinks&&function(a){try{return(0,c.lstatSync)(a).isSymbolicLink()}catch{return!1}}(a),l="replace"===e.symlinks?a:function(a){let b=!1;try{b=(0,c.lstatSync)(a).isSymbolicLink()}catch{return a}if(!b)return a;try{return(0,c.realpathSync)(a)}catch{let b="(unreadable link)";try{b=(0,c.readlinkSync)(a)}catch{}throw new i(a,b)}}(a),m=(0,d.dirname)(l);(0,c.mkdirSync)(m,{recursive:!0});try{f=e.mode??(k?void 0:511&(0,c.statSync)(l).mode)}catch{f=e.mode}let n=(0,d.join)(m,`.${(0,d.basename)(l)}.failproofai-${process.pid}-${(0,h.randomBytes)(4).toString("hex")}.tmp`);try{g=(0,c.openSync)(n,"wx",f??438);let a=Buffer.from(b,"utf8"),i=0;for(;i<a.length;)i+=(0,c.writeSync)(g,a,i,a.length-i);(0,c.fsyncSync)(g),(0,c.closeSync)(g),g=void 0,void 0!==f&&(0,c.chmodSync)(n,f),!1!==e.backup&&!k&&(0,c.existsSync)(l)&&function(a,b){let e=`${a}.failproofai-backup`,f=(0,d.join)(b,`.${(0,d.basename)(a)}.failproofai-backup-${process.pid}-${(0,h.randomBytes)(4).toString("hex")}.tmp`);try{(0,c.copyFileSync)(a,f,c.constants.COPYFILE_EXCL),(0,c.renameSync)(f,e)}catch(a){throw(0,c.rmSync)(f,{force:!0}),a}}(l,m),(e.rename??c.renameSync)(n,l)}catch(a){if(void 0!==g)try{(0,c.closeSync)(g)}catch{}throw(0,c.rmSync)(n,{force:!0}),a}try{let a=(0,c.openSync)(m,"r");try{(0,c.fsyncSync)(a)}finally{(0,c.closeSync)(a)}}catch{}}var k=a.i(8284),l=a.i(68561),m=a.i(91997);let n="# >>> failproofai managed hooks >>>",o="# <<< failproofai managed hooks <<<",p="0.129.0",q=["PreToolUse","PermissionRequest","PostToolUse","PreCompact","PostCompact","SessionStart","SessionEnd","UserPromptSubmit","SubagentStart","SubagentStop","Stop","Interrupt"];function r(a){return`${a}.failproofai-backup`}function s(){try{let a=(0,b.execSync)("codex --version",{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5e3});return/(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/.exec(a)?.[1]??null}catch{return null}}function t(a){let b=RegExp(`^${u(n)}[ \\t]*$`,"m").exec(a);if(!b)return RegExp(`^${u(o)}[ \\t]*$`,"m").test(a)?"malformed":null;let c=RegExp(`^${u(o)}[ \\t]*$`,"mg");c.lastIndex=b.index+b[0].length;let d=c.exec(a);if(!d)return"malformed";let e=d.index+d[0].length;return"\r"===a[e]&&e++,"\n"===a[e]&&e++,{start:b.index,end:e}}function u(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function v(a,b){let c=t(a);if("malformed"===c)throw Error("failproofai's managed block is missing its begin or end marker");if(c){let d=a.slice(0,c.start),e=a.slice(c.end);return null!==b?d+b+e:(d.endsWith("\n\n")&&""===e?d.slice(0,-1):d)+e}return null===b?a:""===a?b:`${a}${a.endsWith("\n")?"\n":"\n\n"}${b}`}function w(a){let b;return void 0!==a.path?a.path:void 0!==(b=process.env.FAILPROOFAI_CODEX_SYSTEM_CONFIG)?""===b||"off"===b?null:(0,d.resolve)(b):"/etc/codex/config.toml"}function x(a){let b=(0,d.dirname)(a);for(;!(0,c.existsSync)(b);){let a=(0,d.dirname)(b);if(a===b)return!1;b=a}try{return(0,c.accessSync)(b,c.constants.W_OK),(0,c.existsSync)(a)&&(0,c.accessSync)(a,c.constants.W_OK),!0}catch{return!1}}function y(a){try{return(511&(0,c.statSync)(a).mode).toString(8).padStart(4,"0")}catch{return"0644"}}function z(a,b,e,f){if(f){j(a,b,{backup:!1}),(0,c.chmodSync)(a,parseInt(e,8));return}(0,k.p)("install",["-d","-m","0755",(0,d.dirname)(a)]),(0,k.C)(a,b,e)}function A(a,b){b?(0,c.rmSync)(a,{force:!0}):(0,k.p)("rm",["-f",a])}function B(a={}){let b=w(a);if(!b)return!1;try{var d;let a;return d=(0,c.readFileSync)(b,"utf8"),a=t(d),null!==a&&"malformed"!==a}catch{return!1}}function C(){let a=process.env.CODEX_HOME?.trim();return a?(0,d.resolve)(a):(0,d.resolve)((0,f.homedir)(),".codex")}function D(a){return a.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase()}let E=new Set(["UserPromptSubmit","Stop","Interrupt"]);function F(a,b){for(;b<a.length&&(" "===a[b]||" "===a[b]);)b++;return b}function G(a,b){let c=[];for(;;){b=F(a,b);let d=H(a,b);if(d)c.push(d.value),b=d.end;else{let d=/^[A-Za-z0-9_-]+/.exec(a.slice(b));if(!d)return null;c.push(d[0]),b+=d[0].length}let e=F(a,b);if("."!==a[e])return{path:c,end:b};b=e+1}}function H(a,b){if("'"===a[b]){let c=a.indexOf("'",b+1);return c<0?null:{value:a.slice(b+1,c),end:c+1}}if('"'!==a[b])return null;let c="";for(let d=b+1;d<a.length;d++){let b=a[d];if('"'===b)return{value:c,end:d+1};if("\\"!==b){c+=b;continue}let e=a[++d],f={b:"\b",t:" ",n:"\n",f:"\f",r:"\r",'"':'"',"\\":"\\",e:"\x1b"};if(e in f)c+=f[e];else if("u"===e||"U"===e){let b="u"===e?4:8,f=a.slice(d+1,d+1+b);if(!/^[0-9A-Fa-f]+$/.test(f)||f.length!==b)return null;c+=String.fromCodePoint(parseInt(f,16)),d+=b}else break}return null}a.s(["s",0,"Codex won't run failproofai's hooks until they're trusted.\nRe-run `failproofai config` and allow sudo, or open `codex` once and approve the hooks.","m",0,C,"c",0,function(a={}){let b=w(a);if(b&&B({path:b}))return{kind:"system",path:b};let e=a.hooksJsonPath??(0,d.resolve)(C(),"hooks.json"),f=function(a){let b;try{b=JSON.parse((0,c.readFileSync)(a,"utf8"))}catch{return[]}let d=b?.hooks;if(!d||"object"!=typeof d)return[];let e=[];for(let[b,c]of Object.entries(d))Array.isArray(c)&&c.forEach((c,d)=>{let f=c?.hooks;Array.isArray(f)&&f.forEach((f,g)=>{if(!function(a){if(!a||"object"!=typeof a)return!1;if(!0===a[m.Z])return!0;let b="string"==typeof a.command?a.command:"";return b.includes("failproofai")&&b.includes("--hook")}(f))return;let i=c.matcher;e.push({key:`${a}:${D(b)}:${d}:${g}`,hash:function(a,b,c){let d="SessionEnd"===a||"Interrupt"===a,e="number"==typeof c.timeout&&Number.isFinite(c.timeout)?Math.trunc(c.timeout):null,f=d?Math.min(3,Math.max(1,e??1)):Math.max(1,e??600),g={async:!0===c.async,command:"string"==typeof c.command?c.command:"",timeout:f,type:"command"};"string"==typeof c.statusMessage&&(g.statusMessage=c.statusMessage);let i=c.additionalContextLimit;"number"==typeof i&&2500!==i&&(g.additionalContextLimit=i);let j={event_name:D(a),hooks:[g]};return null===b||E.has(a)||(j.matcher=b),`sha256:${(0,h.createHash)("sha256").update(function a(b){if(Array.isArray(b))return`[${b.map(a).join(",")}]`;if(b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b));return`{${c.map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`).join(",")}}`}return JSON.stringify(b)}(j)).digest("hex")}`}(b,"string"==typeof i?i:null,f)})})});return e}(e);if(0===f.length)return{kind:"none"};let g=(a.codexVersion??s)();if(g&&!function(a){if(!a)return!0;let b=(0,l.f)(a,p);return null===b||b>=0}(g))return{kind:"ungated",path:e,version:g};let i=new Map;try{i=function(a){let b=new Map,c=(a,c)=>{if(4===a.length&&"hooks"===a[0]&&"state"===a[1]&&"trusted_hash"===a[3]){let d=a[2].trim();d&&b.set(d,c)}},d=[],e=null;for(let b of a.split("\n")){let a=b.replace(/\r$/,"");if(e){a.includes(e)&&(e=null);continue}let f=a.trimStart();if(f.startsWith("#")||""===f)continue;if(f.startsWith("[[")){let a=G(f,2);d=a?[...a.path,"[]"]:["[]"];continue}if(f.startsWith("[")){let a=G(f,1);d=a&&"]"===f[F(f,a.end)]?a.path:["?"];continue}let g=G(f,0);if(!g)continue;let h=F(f,g.end);if("="!==f[h])continue;h=F(f,h+1);let i=[...d,...g.path];if(f.startsWith('"""',h)||f.startsWith("'''",h)){let a=f.slice(h,h+3);f.slice(h+3).includes(a)||(e=a);continue}let j=H(f,h);if(j){c(i,j.value);continue}if("{"===f[h]){let a=h+1;for(;;){a=F(f,a);let b=G(f,a);if(!b||(a=F(f,b.end),"="!==f[a]))break;a=F(f,a+1);let d=H(f,a);if(d)c([...i,...b.path],d.value),a=d.end;else for(;a<f.length&&","!==f[a]&&"}"!==f[a];)a++;if(a=F(f,a),","!==f[a])break;a++}}}return b}((0,c.readFileSync)(a.userConfigPath??(0,d.resolve)(C(),"config.toml"),"utf8"))}catch{}let j=f.filter(a=>i.get(a.key)!==a.hash).length;return 0===j?{kind:"trusted",path:e}:{kind:"untrusted",path:e,untrusted:j,total:f.length}},"j",0,B,"i",0,function(a,b={}){let d=w(b);if(!d)return{ok:!1,reason:"unsupported-platform"};let e=(b.codexVersion??s)();if(!e)return{ok:!1,reason:"codex-not-found",path:d};let f=(0,l.f)(e,p);if(null!==f&&f<0)return{ok:!1,reason:"codex-too-old",detail:e,path:d};let g="",h=(0,c.existsSync)(d);if(h)try{g=(0,c.readFileSync)(d,"utf8")}catch(a){return{ok:!1,reason:"unreadable",detail:a instanceof Error?a.message:String(a),path:d}}let i=t(g);if("malformed"===i)return{ok:!1,reason:"unreadable",detail:"failproofai's block has lost one of its markers",path:d};let j=function(a){let b=q.join("|"),c=/^\s*hooks\s*=/,d=RegExp(`^\\s*hooks\\s*\\.\\s*"?(${b})"?\\s*(=|\\.)`),e=RegExp(`^\\s*\\[\\s*hooks\\s*\\.\\s*"?(${b})"?\\s*(\\]|\\.)`),f=RegExp(`^\\s*"?(${b})"?\\s*(=|\\.)`),g=!1;for(let b of a.split("\n")){let a=b.replace(/\r$/,"");if(/^\s*\[\[/.test(a)){g=!1;continue}if(/^\s*\[/.test(a)){if(e.test(a))return a.trim();g=/^\s*\[\s*hooks\s*\]/.test(a);continue}if(c.test(a)||d.test(a)||g&&f.test(a))return a.trim()}return null}(i?g.slice(0,i.start)+g.slice(i.end):g);if(j)return{ok:!1,reason:"conflict",detail:j,path:d};let m=v(g,function(a){let b=[n,"# Written by failproofai. Codex runs hooks from its system config without","# asking to trust them. `failproofai uninstall` removes this block; edit","# outside the markers only, everything between them is replaced."];for(let c of a)b.push("",`[[hooks.${c.event}]]`,`[[hooks.${c.event}.hooks]]`,'type = "command"',`command = ${JSON.stringify(c.command)}`,`timeout = ${Math.trunc(c.timeout)}`);return b.push(o),`${b.join("\n")}
|
|
26
|
+
`}(a));if(m===g)return{ok:!0,path:d,changed:!1};let u=x(d);if(!u&&!(b.canElevate??k.e)())return{ok:!1,reason:"no-root",path:d};try{let a=h?y(d):"0644",b=r(d);!h||i||(0,c.existsSync)(b)||z(b,g,a,u),z(d,m,a,u)}catch(a){return{ok:!1,reason:"write-failed",detail:a instanceof Error?a.message:String(a),path:d}}return{ok:!0,path:d,changed:!0}},"g",0,function(a={}){let b,d=w(a);if(!d||!(0,c.existsSync)(d))return{status:"absent"};try{b=(0,c.readFileSync)(d,"utf8")}catch(a){return{status:"failed",path:d,reason:a instanceof Error?a.message:String(a)}}let e=t(b);if(null===e)return{status:"absent"};if("malformed"===e)return{status:"failed",path:d,reason:"one of failproofai's markers is missing; remove the block by hand"};let f=(b.slice(e.start,e.end).match(/^\[\[hooks\.[A-Za-z]+\.hooks\]\]/gm)??[]).length,g=v(b,null),h=r(d),i=null;try{(0,c.existsSync)(h)&&(i=(0,c.readFileSync)(h,"utf8"))}catch{i=null}let j=x(d);if(!j&&!(a.canElevate??k.e)())return{status:"failed",path:d,reason:"removing it needs root, and sudo is not available"};try{null!==i&&(g===i||g===`${i}
|
|
27
|
+
`)?(z(d,i,y(d),j),A(h,j)):null===i&&""===g.trim()?A(d,j):z(d,g,y(d),j)}catch(a){return{status:"failed",path:d,reason:a instanceof Error?a.message:String(a)}}return{status:"removed",path:d,hooks:f}}],80504);var I=a.i(43600);let J="default";function K(){let a,b=function(){let a=(process.env.OPENCLAW_STATE_DIR??"").trim();if(a)return(0,d.resolve)(a);let b=(process.env.OPENCLAW_HOME??"").trim();if(b)return(0,d.resolve)(b);let c=(process.env.OPENCLAW_CONFIG_PATH||"").trim();return c?(0,d.dirname)((0,d.resolve)(c)):(0,d.join)((0,f.homedir)(),".openclaw")}(),e=(0,d.basename)(b);if(".openclaw"!==e&&!e.startsWith(".openclaw-"))return[{name:J,home:b}];let g=(0,d.dirname)(b),h=[{name:J,home:(0,d.join)(g,".openclaw")}];try{a=(0,c.readdirSync)(g,{withFileTypes:!0})}catch{return h}let i=a.filter(a=>(a.isDirectory()||a.isSymbolicLink())&&a.name.startsWith(".openclaw-")&&a.name.length>10&&(0,c.existsSync)((0,d.join)(g,a.name,"openclaw.json"))).map(a=>({name:a.name.slice(10),home:(0,d.join)(g,a.name)})).sort((a,b)=>a.name.localeCompare(b.name));return h.push(...i),h}var L={get url(){return a.F("src/hooks/integrations.ts")},env:{DEV:!1,PROD:!0,MODE:"production",BASE_URL:"/",SSR:!0}};class M extends Error{path;constructor(a,b){super(`Refusing to modify ${a}: ${b}. failproofai never rewrites a config it could not parse — fix or move the file, then retry.`),this.path=a,this.name="UnreadableAgentConfigError"}}function N(a){let b,d;if(!(0,c.existsSync)(a))return{};try{b=(0,c.readFileSync)(a,"utf8")}catch(b){throw new M(a,`it could not be read (${b instanceof Error?b.message:String(b)})`)}if(""===b.trim())return{};try{d=JSON.parse(b)}catch(b){throw new M(a,`it is not valid JSON (${b instanceof Error?b.message:String(b)})`)}if(!d||"object"!=typeof d||Array.isArray(d))throw new M(a,"its top level is not a JSON object");return d}function O(a,b){j(a,JSON.stringify(b,null,2)+"\n")}function P(a){let b;if(!(0,c.existsSync)(a))return(0,g.parseDocument)("");try{b=(0,c.readFileSync)(a,"utf8")}catch(b){throw new M(a,`it could not be read (${b instanceof Error?b.message:String(b)})`)}let d=(0,g.parseDocument)(b);if(d.errors.length>0){let b=d.errors[0]?.message.split("\n")[0]??"syntax error";throw new M(a,`it does not parse as YAML (${b})`)}return d}function Q(a,b){j(a,b.toString())}function R(a){if(!a||"object"!=typeof a)return!1;if(!0===a[m.Z])return!0;let b="string"==typeof a.command?a.command:"";return b.includes("failproofai")&&b.includes("--hook")}function S(a){return` --agent-scope ${a??"user"}`}function T(a){return"version"in a&&(delete a.version,!0)}function U(a){try{let c=`which ${a}`;return(0,b.execSync)(c,{encoding:"utf8",stdio:"pipe"}),!0}catch{return!1}}function V(a,b,c){let d=a.getSettingsPaths?.(b,c);return d&&d.length>0?d:[a.getSettingsPath(b,c)]}let W={id:"claude",displayName:"Claude Code",scopes:m.F,eventTypes:m.I,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":let e;return(0,d.resolve)((e=process.env.CLAUDE_CONFIG_DIR?.trim())?(0,d.resolve)(e):(0,d.resolve)((0,f.homedir)(),".claude"),"settings.json");case"project":return(0,d.resolve)(c,".claude","settings.json");case"local":return(0,d.resolve)(c,".claude","settings.local.json")}},readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b}`:`"${a}" --hook ${b}`)+S(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:R,writeHookEntries(a,b,c){a.hooks||(a.hooks={});let d=new Set(m.I);for(let b of Object.keys(a.hooks)){if(d.has(b))continue;let c=a.hooks[b];if(!Array.isArray(c))continue;let e=[];for(let a of c){if(!a||!Array.isArray(a.hooks)){a&&e.push(a);continue}let b=a.hooks.length;a.hooks=a.hooks.filter(a=>!R(a)),0===a.hooks.length&&b>0||e.push(a)}a.hooks[b]=e,0===e.length&&delete a.hooks[b]}for(let d of m.I){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>R(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!R(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("claude")||U("claude-code")},X={id:"codex",displayName:"OpenAI Codex",scopes:m.L,eventTypes:m.W,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)(C(),"hooks.json");case"project":case"local":return(0,d.resolve)(c,".codex","hooks.json")}},readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli codex`:`"${a}" --hook ${b} --cli codex`)+S(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:R,writeHookEntries(a,b,c){for(let d of(T(a),a.hooks||(a.hooks={}),m.W)){let e=m.p[d],f=this.buildHookEntry(b,d,c);a.hooks[e]||(a.hooks[e]=[]);let g=a.hooks[e],h=!1;for(let a of g){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>R(a));if(b>=0){a.hooks[b]=f,h=!0;break}}h||g.push({hooks:[f]})}},removeHooksFromFile(a){let b=this.readSettings(a),c=T(b);if(!b.hooks)return c&&this.writeSettings(a,b),0;let d=0;for(let a of Object.keys(b.hooks)){let c=b.hooks[a];if(Array.isArray(c)){for(let a=c.length-1;a>=0;a--){let b=c[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!R(a)),d+=e-b.hooks.length,0===b.hooks.length&&c.splice(a,1)}0===c.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,(d>0||c)&&this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){if("user"===a&&B())return!0;let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("codex")};function Y(a){if(!0===a[m.Z])return!0;for(let b of["string"==typeof a.bash?a.bash:"","string"==typeof a.powershell?a.powershell:""])if(b.includes("failproofai")&&b.includes("--hook"))return!0;return!1}let Z={id:"copilot",displayName:"GitHub Copilot",scopes:m.w,eventTypes:m.d,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".copilot","hooks","failproofai.json");case"project":case"local":return(0,d.resolve)(c,".github","hooks","failproofai.json")}},readSettings(a){let b=N(a);return void 0===b.version&&(b.version=1),b},writeSettings(a,b){O(a,b)},buildHookEntry(a,b,c){let d="project"===c?`npx -y failproofai --hook ${b} --cli copilot`:`"${a}" --hook ${b} --cli copilot`;return{type:"command",bash:d+S(c),powershell:d+S(c),timeoutSec:60,[m.Z]:!0}},isFailproofaiHook:Y,writeHookEntries(a,b,c){for(let d of(void 0===a.version&&(a.version=1),a.hooks||(a.hooks={}),m.d)){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>Y(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!Y(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>Y(a)))return!0}}catch{}return!1},detectInstalled:()=>U("copilot")},$={id:"cursor",displayName:"Cursor Agent",scopes:m.Y,eventTypes:m.s,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".cursor","hooks.json");case"project":case"local":return(0,d.resolve)(c,".cursor","hooks.json")}},readSettings(a){let b=N(a);return void 0===b.version&&(b.version=1),b},writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli cursor`:`"${a}" --hook ${b} --cli cursor`)+S(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:R,writeHookEntries(a,b,c){for(let d of(void 0===a.version&&(a.version=1),a.hooks||(a.hooks={}),m.s)){let e=this.buildHookEntry(b,d,c),f=a.hooks[d],g=f??[];f||(a.hooks[d]=g);let h=g.findIndex(a=>R(a));h>=0?g[h]=e:g.push(e)}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(!Array.isArray(d))continue;let e=d.length,f=d.filter(a=>!R(a));c+=e-f.length,0===f.length?delete b.hooks[a]:b.hooks[a]=f}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)&&b.some(a=>R(a)))return!0}catch{}return!1},detectInstalled:()=>U("cursor-agent")||U("agent")},_="./plugins/failproofai.mjs";function aa(a){return(0,d.resolve)((0,d.dirname)(a),"plugins","failproofai.mjs")}let ab={id:"opencode",displayName:"OpenCode",scopes:m.O,eventTypes:m.e,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".config","opencode","opencode.json");case"project":case"local":return(0,d.resolve)(c,".opencode","opencode.json")}},readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry(a,b,c){if("user"===c){let a=(0,d.resolve)((0,f.homedir)(),".config","opencode","plugins","failproofai.mjs");return{spec:`file://${a}`,[m.Z]:!0}}return{spec:_,[m.Z]:!0}},isFailproofaiHook:a=>"string"==typeof a?a.includes("failproofai.mjs"):!!Array.isArray(a)&&"string"==typeof a[0]&&a[0].includes("failproofai.mjs"),writeHookEntries(a,b,e){let g,h,i=e??"project",k=aa("user"===i?(0,d.resolve)((0,f.homedir)(),".config","opencode","opencode.json"):(0,d.resolve)(process.cwd(),".opencode","opencode.json"));(0,c.mkdirSync)((0,d.dirname)(k),{recursive:!0}),j(k,(h=(g="project"===i)?'""':JSON.stringify(b),`// AUTO-GENERATED by failproofai. ${m.Z}
|
|
28
28
|
// Re-generate via: failproofai policies --install --cli opencode
|
|
29
29
|
// Plugin shim that bridges OpenCode's plugin API to the failproofai binary.
|
|
30
30
|
// See: https://opencode.ai/docs/plugins/
|
|
@@ -88,14 +88,15 @@ function canonicalizeToolInput(canonicalToolName, args) {
|
|
|
88
88
|
return out;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
const FAILPROOFAI_BIN = ${
|
|
92
|
-
const USE_NPX = ${
|
|
91
|
+
const FAILPROOFAI_BIN = ${h};
|
|
92
|
+
const USE_NPX = ${g};
|
|
93
|
+
const AGENT_SCOPE = ${JSON.stringify(i)};
|
|
93
94
|
|
|
94
95
|
function runFailproofai(eventName, payload, directory) {
|
|
95
96
|
const cmd = USE_NPX ? "npx" : FAILPROOFAI_BIN;
|
|
96
97
|
const args = USE_NPX
|
|
97
|
-
? ["-y", "failproofai", "--hook", eventName, "--cli", "opencode"]
|
|
98
|
-
: ["--hook", eventName, "--cli", "opencode"];
|
|
98
|
+
? ["-y", "failproofai", "--hook", eventName, "--cli", "opencode", "--agent-scope", AGENT_SCOPE]
|
|
99
|
+
: ["--hook", eventName, "--cli", "opencode", "--agent-scope", AGENT_SCOPE];
|
|
99
100
|
const r = spawnSync(cmd, args, {
|
|
100
101
|
input: JSON.stringify(payload),
|
|
101
102
|
encoding: "utf8",
|
|
@@ -229,6 +230,6 @@ export default async function failproofaiPlugin({ client, directory }) {
|
|
|
229
230
|
},
|
|
230
231
|
};
|
|
231
232
|
}
|
|
232
|
-
`),{symlinks:"replace"}),Array.isArray(a.plugin)||(a.plugin=[]);let h="user"===f?`file://${g}`:av,i=a.plugin.findIndex(a=>this.isFailproofaiHook(a));i>=0?a.plugin[i]=h:a.plugin.push(h)},removeHooksFromFile(a){let b=0,c=this.readSettings(a);if(Array.isArray(c.plugin)){let a=c.plugin.length;c.plugin=c.plugin.filter(a=>!this.isFailproofaiHook(a)),b+=a-c.plugin.length,0===c.plugin.length&&delete c.plugin}this.writeSettings(a,c);let d=aw(a);if((0,D.existsSync)(d))try{(0,D.readFileSync)(d,"utf8").includes(B)&&((0,D.unlinkSync)(d),0===b&&(b=1))}catch{}return b},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!Array.isArray(a.plugin)||!a.plugin.some(a=>this.isFailproofaiHook(a)))return!1;let b=aw(c);if(!(0,D.existsSync)(b))return!1;return(0,D.readFileSync)(b,"utf8").includes(B)}catch{return!1}},detectInstalled:()=>aq("opencode")},pi:{id:"pi",displayName:"Pi",scopes:o,eventTypes:p,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".pi","agent","settings.json");case"project":case"local":return(0,E.resolve)(c,".pi","settings.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({[B]:!0,_piPackagePath:ax(),_piScope:c}),isFailproofaiHook:a=>"string"==typeof a?ay(a):!!a&&"object"==typeof a&&(!0===a[B]||"string"==typeof a.source&&ay(a.source)),writeHookEntries(a,b,c){var d;let e,f,g;Array.isArray(a.packages)||(a.packages=[]);let h=ax(),i="project"===c?(d=h,e=process.cwd(),f=(0,E.resolve)(e),(g=(0,E.resolve)(d)).startsWith(f+"/")||g===f?"../"+g.slice(f.length+1):g):h,j=a.packages.findIndex(a=>ay(a));j>=0?a.packages[j]=i:a.packages.push(i)},removeHooksFromFile(a){if(!(0,D.existsSync)(a))return 0;let b=this.readSettings(a);if(!Array.isArray(b.packages))return 0;let c=b.packages.length;b.packages=b.packages.filter(a=>!ay(a));let d=c-b.packages.length;return 0===b.packages.length&&delete b.packages,this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!Array.isArray(a.packages))return!1;return a.packages.some(a=>ay(a))}catch{return!1}},detectInstalled:()=>aq("pi")},hermes:{id:"hermes",displayName:"Hermes",requiresHealthyDaemon:!0,scopes:g,eventTypes:h,getSettingsPath:()=>(0,E.resolve)((0,af.P)(),"config.yaml"),getSettingsPaths:()=>(0,af.J)().map(a=>(0,E.resolve)(a.home,"config.yaml")),readSettings:a=>am(a),writeSettings(a,b){an(a,b)},prepareInstall(a){!function(a,b={}){let c=aD();for(let a of aB)if(!(0,D.existsSync)((0,E.resolve)(c,a)))throw Error(`Hermes plugin asset is missing from the failproofai package: ${a}`);let d=aE(a),e=aM(a);if("foreign"===e.kind)throw Error(`Refusing to overwrite an unmanaged Hermes plugin at ${d}. Move it aside or install FailproofAI under a different Hermes profile.`);if("link"===e.kind&&e.current){if(aI(d)!==(0,E.resolve)(e.target))try{aJ(d,e.target)}catch{}return}(0,D.mkdirSync)((0,E.dirname)(d),{recursive:!0});let f=`${process.pid}-${Date.now()}`,g=`${d}.install-${f}`,h=!1;try{(b.symlink??function(a,b){(0,D.symlinkSync)(a,b,"dir")})(c,g),h=!0}catch{(0,D.rmSync)(g,{recursive:!0,force:!0})}if(!h){(0,D.mkdirSync)(g,{recursive:!0});try{for(let a of aB)(0,D.cpSync)((0,E.resolve)(c,a),(0,E.resolve)(g,a));(0,D.writeFileSync)((0,E.resolve)(g,aA),"Managed by failproofai. Remove with `failproofai policies --uninstall --cli hermes`.\n",{encoding:"utf8",mode:384})}catch(a){throw(0,D.rmSync)(g,{recursive:!0,force:!0}),a}}if(h&&("absent"===e.kind||"link"===e.kind))try{return(0,D.renameSync)(g,d),aJ(d,c),"linked"}catch(a){if("link"!==e.kind)throw(0,D.rmSync)(g,{force:!0}),a}let i=`${d}.backup-${f}`,j=!1;try{aF(d)&&((0,D.renameSync)(d,i),j=!0),(0,D.renameSync)(g,d),j&&(0,D.rmSync)(i,{recursive:!0,force:!0}),h?aJ(d,c):aK(d)}catch(a){throw(0,D.rmSync)(g,{recursive:!0,force:!0}),j&&!aF(d)&&aF(i)&&(0,D.renameSync)(i,d),a}}(a)},buildHookEntry:(a,b,c)=>({[B]:!0,_hermesPluginPath:aD()}),isFailproofaiHook:ao,writeHookEntries(a){let b,c,d;aN(a),(d=Array.isArray((c=(b=a.toJS()??{}).plugins&&"object"==typeof b.plugins?b.plugins:{}).enabled)?[...c.enabled]:[]).includes(az)||d.push(az),c.enabled=d,Array.isArray(c.disabled)&&(c.disabled=c.disabled.filter(a=>a!==az),0===c.disabled.length&&delete c.disabled),a.set("plugins",c)},removeHooksFromFile(a){let b,c,d=am(a),e=aN(d),f=(d.toJS()??{}).plugins,g=e>0;if(f&&"object"==typeof f){if(Array.isArray(f.enabled)){let a=f.enabled.length;f.enabled=f.enabled.filter(a=>a!==az),f.enabled.length!==a&&(e+=1,g=!0),0===f.enabled.length&&delete f.enabled}f.entries&&az in f.entries&&(delete f.entries[az],g=!0),0===Object.keys(f).length?d.delete("plugins"):d.set("plugins",f)}return g&&an(a,d),b=aE(a),("link"===(c=aM(a)).kind?((0,D.unlinkSync)(b),aK(b),0):"copy"!==c.kind||((0,D.rmSync)(b,{recursive:!0,force:!0}),0))||(e+=1),e},hooksInstalledInSettings(a,b){let c=ar(this,a,b);return c.length>0&&c.every(a=>(function(a){try{let b,c=aO(a);return c.pluginEnabled&&(b=aM(a),("link"===b.kind||"copy"===b.kind)&&b.complete)&&!c.legacyShellHookPresent}catch{}return!1})(a))},detectInstalled:()=>aq("hermes")},openclaw:{id:"openclaw",displayName:"OpenClaw",scopes:q,eventTypes:r,getSettingsPath:()=>(0,E.resolve)(ah()[0].home,"openclaw.json"),getSettingsPaths:()=>ah().map(a=>(0,E.resolve)(a.home,"openclaw.json")),readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:()=>({[B]:!0,_openclawPluginPath:aQ()}),isFailproofaiHook:a=>"string"==typeof a?aR(a):!!a&&"object"==typeof a&&(!0===a[B]||"string"==typeof a.source&&aR(a.source)),writeHookEntries(a){let b=a.plugins??={},c=b.load??={};Array.isArray(c.paths)||(c.paths=[]);let d=aQ(),e=c.paths.findIndex(a=>aR(a));e>=0?c.paths[e]=d:c.paths.push(d);let f=b.entries??={},g=f[aP]??={};g.enabled=!0,(g.hooks??={}).allowConversationAccess=!0},removeHooksFromFile(a){if(!(0,D.existsSync)(a))return 0;let b=this.readSettings(a),c=b.plugins;if(!c)return 0;let d=0;if(Array.isArray(c.load?.paths)){let a=c.load.paths.length;c.load.paths=c.load.paths.filter(a=>!aR(a)),d+=a-c.load.paths.length,0===c.load.paths.length&&delete c.load.paths,c.load&&0===Object.keys(c.load).length&&delete c.load}return c.entries&&aP in c.entries&&(delete c.entries[aP],d+=1,0===Object.keys(c.entries).length&&delete c.entries),0===Object.keys(c).length&&delete b.plugins,this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){let c=ar(this,a,b);return c.length>0&&c.every(a=>{if(!(0,D.existsSync)(a))return!1;try{let b=this.readSettings(a),c=b.plugins?.load?.paths,d=Array.isArray(c)&&c.some(a=>aR(a)),e=b.plugins?.entries?.[aP]?.enabled===!0;return d&&e}catch{return!1}})},detectInstalled:()=>aq("openclaw")},factory:{id:"factory",displayName:"Factory Droid",scopes:s,eventTypes:t,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".factory","hooks.json");case"project":case"local":return(0,E.resolve)(c,".factory","hooks.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli factory`:`"${a}" --hook ${b} --cli factory`,timeout:30,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){for(let d of t){let e=this.buildHookEntry(b,d,c);Array.isArray(a[d])||(a[d]=[]);let f=a[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=e,g=!0;break}}if(!g){let a="PreToolUse"===d||"PostToolUse"===d;f.push(a?{matcher:"*",hooks:[e]}:{hooks:[e]})}}},removeHooksFromFile(a){let b=this.readSettings(a),c=0;for(let a of Object.keys(b)){let d=b[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b||!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!ao(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b[a]}}return this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(a&&a.hooks&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("droid")},devin:{id:"devin",displayName:"Devin CLI",scopes:u,eventTypes:v,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".config","devin","config.json");case"project":case"local":return(0,E.resolve)(c,".devin","config.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli devin`:`"${a}" --hook ${b} --cli devin`,timeout:60,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){for(let d of(a.hooks||(a.hooks={}),v)){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!ao(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("devin")},antigravity:{id:"antigravity",displayName:"Antigravity CLI",scopes:w,eventTypes:x,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".gemini","config","hooks.json");case"project":case"local":return(0,E.resolve)(c,".agents","hooks.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli antigravity`:`"${a}" --hook ${b} --cli antigravity`,timeout:30,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){a[aS]&&"object"==typeof a[aS]||(a[aS]={});let d=a[aS];for(let a of x){let e=this.buildHookEntry(b,a,c);if(aT.has(a)){Array.isArray(d[a])||(d[a]=[]);let b=d[a],c=!1;for(let a of b){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=e,c=!0;break}}c||b.push({matcher:"*",hooks:[e]})}else{Array.isArray(d[a])||(d[a]=[]);let b=d[a],c=b.findIndex(a=>ao(a));c>=0?b[c]=e:b.push(e)}}},removeHooksFromFile(a){let b=this.readSettings(a),c=b[aS];if(!c||"object"!=typeof c)return this.writeSettings(a,b),0;let d=0;for(let a of Object.keys(c)){let b=c[a];if(Array.isArray(b))if(aT.has(a)){for(let a=b.length-1;a>=0;a--){let c=b[a];if(!c||!c.hooks)continue;let e=c.hooks.length;c.hooks=c.hooks.filter(a=>!ao(a)),d+=e-c.hooks.length,0===c.hooks.length&&b.splice(a,1)}0===b.length&&delete c[a]}else{let e=b.length,f=b.filter(a=>!ao(a));d+=e-f.length,0===f.length?delete c[a]:c[a]=f}}return 0===Object.keys(c).length&&delete b[aS],this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c)[aS];if(!a||"object"!=typeof a)return!1;for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(ao(a)||a&&Array.isArray(a.hooks)&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("agy")},goose:{id:"goose",displayName:"Goose",scopes:y,eventTypes:z,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".agents","plugins","failproofai","hooks","hooks.json");case"project":case"local":return(0,E.resolve)(c,".agents","plugins","failproofai","hooks","hooks.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli goose`:`"${a}" --hook ${b} --cli goose`}),isFailproofaiHook:aU,writeHookEntries(a,b,c){for(let d of(a.hooks||(a.hooks={}),z)){let e=this.buildHookEntry(b,d,c);Array.isArray(a.hooks[d])||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>aU(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b||!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!aU(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a&&a.hooks&&a.hooks.some(a=>aU(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("goose")}};a.s(["p",0,as,"D",0,function(a){return e.map(b=>{let c=at.buildHookEntry(a,b,"user");return{event:f[b],command:c.command,timeout:c.timeout}})},"w",0,function(){return c.filter(a=>aV[a]?.detectInstalled())},"B",0,function(a){let b=aV[a];if(!b)throw Error(`"${a}" is audit-only — live-hook install is not supported for it yet. Installable: ${c.filter(a=>void 0!==aV[a]).join(", ")}`);return b},"d",0,function(){return(0,af.J)().map(a=>{let b=(0,E.resolve)(a.home,"config.yaml"),c=aO(b),d=aM(b),e=("link"===d.kind||"copy"===d.kind)&&d.complete,f=e&&c.pluginEnabled;return{name:a.name,home:a.home,settingsPath:b,pluginInstalled:e,pluginMode:"link"===d.kind||"copy"===d.kind?d.kind:null,pluginEnabled:c.pluginEnabled,pluginDisabled:c.pluginDisabled,legacyShellHookPresent:c.legacyShellHookPresent,cronUnchecked:c.legacyShellHookPresent&&!f,configUnreadable:!0===c.unreadable,pluginForeign:"foreign"===d.kind,healthy:f&&!c.legacyShellHookPresent&&!0!==c.unreadable}})},"u",0,function(){return c.map(a=>aV[a]).filter(a=>void 0!==a)},"r",0,ar],67121)}]})();
|
|
233
|
+
`),{symlinks:"replace"}),Array.isArray(a.plugin)||(a.plugin=[]);let l="user"===i?`file://${k}`:_,n=a.plugin.findIndex(a=>this.isFailproofaiHook(a));n>=0?a.plugin[n]=l:a.plugin.push(l)},removeHooksFromFile(a){let b=0,d=this.readSettings(a);if(Array.isArray(d.plugin)){let a=d.plugin.length;d.plugin=d.plugin.filter(a=>!this.isFailproofaiHook(a)),b+=a-d.plugin.length,0===d.plugin.length&&delete d.plugin}this.writeSettings(a,d);let e=aa(a);if((0,c.existsSync)(e))try{(0,c.readFileSync)(e,"utf8").includes(m.Z)&&((0,c.unlinkSync)(e),0===b&&(b=1))}catch{}return b},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!Array.isArray(a.plugin)||!a.plugin.some(a=>this.isFailproofaiHook(a)))return!1;let b=aa(d);if(!(0,c.existsSync)(b))return!1;return(0,c.readFileSync)(b,"utf8").includes(m.Z)}catch{return!1}},detectInstalled:()=>U("opencode")};function ac(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,"pi-extension"):(0,d.resolve)((0,e.fileURLToPath)(L.url),"..","..","..","pi-extension")}function ad(a){return"string"==typeof a&&(!!/(?:^|\/)pi-extension\/?$/.test(a)||a.includes("pi-extension")&&a.includes("failproofai"))}let ae={id:"pi",displayName:"Pi",scopes:m.G,eventTypes:m.J,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".pi","agent","settings.json");case"project":case"local":return(0,d.resolve)(c,".pi","settings.json")}},readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({[m.Z]:!0,_piPackagePath:ac(),_piScope:c}),isFailproofaiHook:a=>"string"==typeof a?ad(a):!!a&&"object"==typeof a&&(!0===a[m.Z]||"string"==typeof a.source&&ad(a.source)),writeHookEntries(a,b,c){var e;let f,g,h;Array.isArray(a.packages)||(a.packages=[]);let i=ac(),j="project"===c?(e=i,f=process.cwd(),g=(0,d.resolve)(f),(h=(0,d.resolve)(e)).startsWith(g+"/")||h===g?"../"+h.slice(g.length+1):h):i,k=a.packages.findIndex(a=>ad(a));k>=0?a.packages[k]=j:a.packages.push(j)},removeHooksFromFile(a){if(!(0,c.existsSync)(a))return 0;let b=this.readSettings(a);if(!Array.isArray(b.packages))return 0;let d=b.packages.length;b.packages=b.packages.filter(a=>!ad(a));let e=d-b.packages.length;return 0===b.packages.length&&delete b.packages,this.writeSettings(a,b),e},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!Array.isArray(a.packages))return!1;return a.packages.some(a=>ad(a))}catch{return!1}},detectInstalled:()=>U("pi")},af="failproofai",ag=".failproofai-managed",ah=["plugin.yaml","__init__.py","client.py","ledger.py"],ai="hermes-plugin";function aj(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,ai):function(a){let b=(0,d.resolve)(a);for(let a=0;a<8;a++){let a=(0,d.resolve)(b,ai);if((0,c.existsSync)((0,d.resolve)(a,"plugin.yaml")))return a;let e=(0,d.dirname)(b);if(e===b)break;b=e}return(0,d.resolve)(a,"..","..",ai)}((0,d.dirname)((0,e.fileURLToPath)(L.url)))}function ak(a){return(0,d.resolve)((0,d.dirname)(a),"plugins",af)}function al(a){try{return(0,c.lstatSync)(a),!0}catch{return!1}}function am(a){return ah.every(b=>(0,c.existsSync)((0,d.resolve)(a,b)))}function an(a){return(0,d.resolve)((0,d.dirname)(a),".failproofai-link")}function ao(a){try{let b=(0,c.readFileSync)(an(a),"utf8").trim();return""===b?null:(0,d.resolve)(b)}catch{return null}}function ap(a,b){j(an(a),(0,d.resolve)(b)+"\n",{backup:!1,symlinks:"replace"})}function aq(a){(0,c.rmSync)(an(a),{force:!0})}function ar(a,b){if((0,d.resolve)(a)===(0,d.resolve)(b))return!0;try{return(0,c.realpathSync)(a)===(0,c.realpathSync)(b)}catch{return!1}}function as(a){let b,e,f=ak(a);try{let a=(0,c.lstatSync)(f);b=a.isSymbolicLink(),e=a.isDirectory()}catch{return{kind:"absent"}}if(b){let a;try{a=(0,d.resolve)((0,d.dirname)(f),(0,c.readlinkSync)(f))}catch{return{kind:"foreign"}}return!function(a,b){let e=ao(a);if(e&&(0,d.resolve)(b)===e||ar(b,aj()))return!0;let f=(0,d.dirname)((0,d.resolve)(b));if((0,d.basename)((0,d.resolve)(b))!==ai||"failproofai"!==(0,d.basename)(f)||"node_modules"!==(0,d.basename)((0,d.dirname)(f)))return!1;try{let a=JSON.parse((0,c.readFileSync)((0,d.resolve)(f,"package.json"),"utf8"));return"failproofai"===a.name}catch{return!1}}(f,a)?{kind:"foreign"}:{kind:"link",target:a,complete:am(a),current:ar(a,aj())}}return e&&(0,c.existsSync)((0,d.resolve)(f,ag))?{kind:"copy",complete:am(f)}:{kind:"foreign"}}function at(a){let b=(a.toJS()??{}).hooks,c=0;if(b&&"object"==typeof b){for(let a of Object.keys(b)){let d=b[a];if(!Array.isArray(d))continue;let e=d.length,f=d.filter(a=>!R(a));c+=e-f.length,0===f.length?delete b[a]:b[a]=f}0===Object.keys(b).length?(a.delete("hooks"),c>0&&a.delete("hooks_auto_accept")):a.set("hooks",b)}return c}function au(a){if(!(0,c.existsSync)(a))return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1};let b=function(a){try{return P(a)}catch{return null}}(a);if(!b)return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1,unreadable:!0};let d=b.toJS()??{},e=d.plugins?.enabled,f=d.plugins?.disabled,g=!!d.hooks&&"object"==typeof d.hooks&&Object.values(d.hooks).some(a=>Array.isArray(a)&&a.some(a=>R(a))),h=Array.isArray(e)&&e.includes(af),i=Array.isArray(f)&&f.includes(af);return{pluginEnabled:h&&!i,pluginListed:h,pluginDisabled:i,legacyShellHookPresent:g}}let av={id:"hermes",displayName:"Hermes",requiresHealthyDaemon:!0,scopes:m.M,eventTypes:m.y,getSettingsPath:()=>(0,d.resolve)((0,I.P)(),"config.yaml"),getSettingsPaths:()=>(0,I.J)().map(a=>(0,d.resolve)(a.home,"config.yaml")),readSettings:a=>P(a),writeSettings(a,b){Q(a,b)},prepareInstall(a){!function(a,b={}){let e=aj();for(let a of ah)if(!(0,c.existsSync)((0,d.resolve)(e,a)))throw Error(`Hermes plugin asset is missing from the failproofai package: ${a}`);let f=ak(a),g=as(a);if("foreign"===g.kind)throw Error(`Refusing to overwrite an unmanaged Hermes plugin at ${f}. Move it aside or install FailproofAI under a different Hermes profile.`);if("link"===g.kind&&g.current){if(ao(f)!==(0,d.resolve)(g.target))try{ap(f,g.target)}catch{}return}(0,c.mkdirSync)((0,d.dirname)(f),{recursive:!0});let h=`${process.pid}-${Date.now()}`,i=`${f}.install-${h}`,j=!1;try{(b.symlink??function(a,b){(0,c.symlinkSync)(a,b,"dir")})(e,i),j=!0}catch{(0,c.rmSync)(i,{recursive:!0,force:!0})}if(!j){(0,c.mkdirSync)(i,{recursive:!0});try{for(let a of ah)(0,c.cpSync)((0,d.resolve)(e,a),(0,d.resolve)(i,a));(0,c.writeFileSync)((0,d.resolve)(i,ag),"Managed by failproofai. Remove with `failproofai policies --uninstall --cli hermes`.\n",{encoding:"utf8",mode:384})}catch(a){throw(0,c.rmSync)(i,{recursive:!0,force:!0}),a}}if(j&&("absent"===g.kind||"link"===g.kind))try{return(0,c.renameSync)(i,f),ap(f,e),"linked"}catch(a){if("link"!==g.kind)throw(0,c.rmSync)(i,{force:!0}),a}let k=`${f}.backup-${h}`,l=!1;try{al(f)&&((0,c.renameSync)(f,k),l=!0),(0,c.renameSync)(i,f),l&&(0,c.rmSync)(k,{recursive:!0,force:!0}),j?ap(f,e):aq(f)}catch(a){throw(0,c.rmSync)(i,{recursive:!0,force:!0}),l&&!al(f)&&al(k)&&(0,c.renameSync)(k,f),a}}(a)},buildHookEntry:(a,b,c)=>({[m.Z]:!0,_hermesPluginPath:aj()}),isFailproofaiHook:R,writeHookEntries(a){let b,c,d;at(a),(d=Array.isArray((c=(b=a.toJS()??{}).plugins&&"object"==typeof b.plugins?b.plugins:{}).enabled)?[...c.enabled]:[]).includes(af)||d.push(af),c.enabled=d,Array.isArray(c.disabled)&&(c.disabled=c.disabled.filter(a=>a!==af),0===c.disabled.length&&delete c.disabled),a.set("plugins",c)},removeHooksFromFile(a){let b,d,e=P(a),f=at(e),g=(e.toJS()??{}).plugins,h=f>0;if(g&&"object"==typeof g){if(Array.isArray(g.enabled)){let a=g.enabled.length;g.enabled=g.enabled.filter(a=>a!==af),g.enabled.length!==a&&(f+=1,h=!0),0===g.enabled.length&&delete g.enabled}g.entries&&af in g.entries&&(delete g.entries[af],h=!0),0===Object.keys(g).length?e.delete("plugins"):e.set("plugins",g)}return h&&Q(a,e),b=ak(a),("link"===(d=as(a)).kind?((0,c.unlinkSync)(b),aq(b),0):"copy"!==d.kind||((0,c.rmSync)(b,{recursive:!0,force:!0}),0))||(f+=1),f},hooksInstalledInSettings(a,b){let c=V(this,a,b);return c.length>0&&c.every(a=>(function(a){try{let b,c=au(a);return c.pluginEnabled&&(b=as(a),("link"===b.kind||"copy"===b.kind)&&b.complete)&&!c.legacyShellHookPresent}catch{}return!1})(a))},detectInstalled:()=>U("hermes")},aw="failproofai";function ax(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,"openclaw-plugin"):(0,d.resolve)((0,e.fileURLToPath)(L.url),"..","..","..","openclaw-plugin")}function ay(a){return"string"==typeof a&&(/(?:^|\/)openclaw-plugin\/?$/.test(a)||a.includes("openclaw-plugin")&&a.includes("failproofai"))}let az={id:"openclaw",displayName:"OpenClaw",scopes:m.E,eventTypes:m.P,getSettingsPath:()=>(0,d.resolve)(K()[0].home,"openclaw.json"),getSettingsPaths:()=>K().map(a=>(0,d.resolve)(a.home,"openclaw.json")),readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:()=>({[m.Z]:!0,_openclawPluginPath:ax()}),isFailproofaiHook:a=>"string"==typeof a?ay(a):!!a&&"object"==typeof a&&(!0===a[m.Z]||"string"==typeof a.source&&ay(a.source)),writeHookEntries(a){let b=a.plugins??={},c=b.load??={};Array.isArray(c.paths)||(c.paths=[]);let d=ax(),e=c.paths.findIndex(a=>ay(a));e>=0?c.paths[e]=d:c.paths.push(d);let f=b.entries??={},g=f[aw]??={};g.enabled=!0,(g.hooks??={}).allowConversationAccess=!0},removeHooksFromFile(a){if(!(0,c.existsSync)(a))return 0;let b=this.readSettings(a),d=b.plugins;if(!d)return 0;let e=0;if(Array.isArray(d.load?.paths)){let a=d.load.paths.length;d.load.paths=d.load.paths.filter(a=>!ay(a)),e+=a-d.load.paths.length,0===d.load.paths.length&&delete d.load.paths,d.load&&0===Object.keys(d.load).length&&delete d.load}return d.entries&&aw in d.entries&&(delete d.entries[aw],e+=1,0===Object.keys(d.entries).length&&delete d.entries),0===Object.keys(d).length&&delete b.plugins,this.writeSettings(a,b),e},hooksInstalledInSettings(a,b){let d=V(this,a,b);return d.length>0&&d.every(a=>{if(!(0,c.existsSync)(a))return!1;try{let b=this.readSettings(a),c=b.plugins?.load?.paths,d=Array.isArray(c)&&c.some(a=>ay(a)),e=b.plugins?.entries?.[aw]?.enabled===!0;return d&&e}catch{return!1}})},detectInstalled:()=>U("openclaw")},aA={id:"factory",displayName:"Factory Droid",scopes:m.B,eventTypes:m.n,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".factory","hooks.json");case"project":case"local":return(0,d.resolve)(c,".factory","hooks.json")}},readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli factory`:`"${a}" --hook ${b} --cli factory`)+S(c),timeout:30,[m.Z]:!0}),isFailproofaiHook:R,writeHookEntries(a,b,c){for(let d of m.n){let e=this.buildHookEntry(b,d,c);Array.isArray(a[d])||(a[d]=[]);let f=a[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>R(a));if(b>=0){a.hooks[b]=e,g=!0;break}}if(!g){let a="PreToolUse"===d||"PostToolUse"===d;f.push(a?{matcher:"*",hooks:[e]}:{hooks:[e]})}}},removeHooksFromFile(a){let b=this.readSettings(a),c=0;for(let a of Object.keys(b)){let d=b[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b||!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!R(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b[a]}}return this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(a&&a.hooks&&a.hooks.some(a=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("droid")},aB={id:"devin",displayName:"Devin CLI",scopes:m.c,eventTypes:m.D,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".config","devin","config.json");case"project":case"local":return(0,d.resolve)(c,".devin","config.json")}},readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli devin`:`"${a}" --hook ${b} --cli devin`)+S(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:R,writeHookEntries(a,b,c){for(let d of(a.hooks||(a.hooks={}),m.D)){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>R(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!R(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("devin")},aC="failproofai",aD=new Set(["PreToolUse","PostToolUse"]);function aE(a){if(!a||"object"!=typeof a)return!1;let b=a.command;return"string"==typeof b&&b.includes("failproofai")&&b.includes("--cli goose")}let aF={claude:W,codex:X,copilot:Z,cursor:$,opencode:ab,pi:ae,hermes:av,openclaw:az,factory:aA,devin:aB,antigravity:{id:"antigravity",displayName:"Antigravity CLI",scopes:m.m,eventTypes:m.X,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".gemini","config","hooks.json");case"project":case"local":return(0,d.resolve)(c,".agents","hooks.json")}},readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli antigravity`:`"${a}" --hook ${b} --cli antigravity`)+S(c),timeout:30,[m.Z]:!0}),isFailproofaiHook:R,writeHookEntries(a,b,c){a[aC]&&"object"==typeof a[aC]||(a[aC]={});let d=a[aC];for(let a of m.X){let e=this.buildHookEntry(b,a,c);if(aD.has(a)){Array.isArray(d[a])||(d[a]=[]);let b=d[a],c=!1;for(let a of b){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>R(a));if(b>=0){a.hooks[b]=e,c=!0;break}}c||b.push({matcher:"*",hooks:[e]})}else{Array.isArray(d[a])||(d[a]=[]);let b=d[a],c=b.findIndex(a=>R(a));c>=0?b[c]=e:b.push(e)}}},removeHooksFromFile(a){let b=this.readSettings(a),c=b[aC];if(!c||"object"!=typeof c)return this.writeSettings(a,b),0;let d=0;for(let a of Object.keys(c)){let b=c[a];if(Array.isArray(b))if(aD.has(a)){for(let a=b.length-1;a>=0;a--){let c=b[a];if(!c||!c.hooks)continue;let e=c.hooks.length;c.hooks=c.hooks.filter(a=>!R(a)),d+=e-c.hooks.length,0===c.hooks.length&&b.splice(a,1)}0===b.length&&delete c[a]}else{let e=b.length,f=b.filter(a=>!R(a));d+=e-f.length,0===f.length?delete c[a]:c[a]=f}}return 0===Object.keys(c).length&&delete b[aC],this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d)[aC];if(!a||"object"!=typeof a)return!1;for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(R(a)||a&&Array.isArray(a.hooks)&&a.hooks.some(a=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("agy")},goose:{id:"goose",displayName:"Goose",scopes:m.x,eventTypes:m.i,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".agents","plugins","failproofai","hooks","hooks.json");case"project":case"local":return(0,d.resolve)(c,".agents","plugins","failproofai","hooks","hooks.json")}},readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli goose`:`"${a}" --hook ${b} --cli goose`)+S(c)}),isFailproofaiHook:aE,writeHookEntries(a,b,c){for(let d of(a.hooks||(a.hooks={}),m.i)){let e=this.buildHookEntry(b,d,c);Array.isArray(a.hooks[d])||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>aE(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b||!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!aE(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a&&a.hooks&&a.hooks.some(a=>aE(a)))return!0}}catch{}return!1},detectInstalled:()=>U("goose")}};a.s(["p",0,W,"D",0,function(a){return m.W.map(b=>{let c=X.buildHookEntry(a,b,"user");return{event:m.p[b],command:c.command,timeout:c.timeout}})},"w",0,function(){return m.z.filter(a=>aF[a]?.detectInstalled())},"B",0,function(a){let b=aF[a];if(!b)throw Error(`"${a}" is audit-only — live-hook install is not supported for it yet. Installable: ${m.z.filter(a=>void 0!==aF[a]).join(", ")}`);return b},"d",0,function(){return(0,I.J)().map(a=>{let b=(0,d.resolve)(a.home,"config.yaml"),c=au(b),e=as(b),f=("link"===e.kind||"copy"===e.kind)&&e.complete,g=f&&c.pluginEnabled;return{name:a.name,home:a.home,settingsPath:b,pluginInstalled:f,pluginMode:"link"===e.kind||"copy"===e.kind?e.kind:null,pluginEnabled:c.pluginEnabled,pluginDisabled:c.pluginDisabled,legacyShellHookPresent:c.legacyShellHookPresent,cronUnchecked:c.legacyShellHookPresent&&!g,configUnreadable:!0===c.unreadable,pluginForeign:"foreign"===e.kind,healthy:g&&!c.legacyShellHookPresent&&!0!==c.unreadable}})},"u",0,function(){return m.z.map(a=>aF[a]).filter(a=>void 0!==a)},"r",0,V],41863)},17280,a=>{var b=a.i(66680),c=a.i(2157),d=a.i(50227),e=a.i(9909),f=a.i(86304);let g="failproofai-pack.json",h="failproofai-pack.mjs",i="SHA256SUMS";function j(){return(process.env.FAILPROOFAI_PACK_BASE_URL||"https://github.com").replace(/\/+$/,"")}let k=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,l=/^[A-Za-z0-9][A-Za-z0-9._/-]{0,127}$/,m="FailproofAI/policies",n=new Set(["core","failproofai","official"]);function o(a){let b=a.trim();if(0===b.length)throw Error("pack source is empty");let c=b.match(/^(?:https?:\/\/)?(?:www\.)?github\.com\/(.+)$/i);if(c){let[a,b,...d]=c[1].replace(/\/+$/,"").split("/"),e=null;if("releases"===d[0]&&("tag"===d[1]||"download"===d[1])){let a=d.slice(2);e=("download"===d[1]?a.slice(0,-1):a).join("/")||null}else"releases"===d[0]&&"latest"===d[1]&&(e=null);return p(a,b,e)}let d=b.replace(/^github:/i,""),e=d.lastIndexOf("@"),f=e>0?d.slice(0,e):d,g=e>0?d.slice(e+1):null,h=f.indexOf("/");if(h<=0||h===f.length-1){if(n.has(f.trim().toLowerCase()))throw Error(`${JSON.stringify(a)} is no longer a pack name — ours is a pack like anyone else's now. Use ${m} instead.`);throw Error(`pack source must be owner/repo, owner/repo@tag, or a github.com URL — got ${JSON.stringify(a)}`)}return p(f.slice(0,h),f.slice(h+1),g)}function p(a,b,c){if(!a||!k.test(a))throw Error(`unsafe owner ${JSON.stringify(a)}`);if(!b||!k.test(b))throw Error(`unsafe repo ${JSON.stringify(b)}`);if(null!==c&&!l.test(c))throw Error(`unsafe tag ${JSON.stringify(c)}`);return{owner:a,repo:b,tag:c}}async function q(a){let b=`${j()}/${a.owner}/${a.repo}/releases/latest`,c=await fetch(b,{signal:AbortSignal.timeout(3e4),redirect:"manual"}),d=c.headers.get("location");if(!d)throw Error(`could not resolve the newest release of ${a.owner}/${a.repo} (GET ${b} returned ${c.status} with no redirect). That redirect is issued only for a published, non-prerelease release, so either the repository has no releases at all or every release it has is a prerelease or a draft. Name a tag explicitly.`);let e=d.match(/\/releases\/tag\/(.+)$/);if(!e)throw Error(`unexpected redirect from ${b}: ${d}`);let f=decodeURIComponent(e[1]).replace(/\/+$/,"");if(!l.test(f))throw Error(`unsafe tag ${JSON.stringify(f)} from ${b}`);return f}async function r(b,c){let d,e=c.toLowerCase(),f=`${(process.env.FAILPROOFAI_GITHUB_API??"https://api.github.com").replace(/\/+$/,"")}/repos/${b.owner}/${b.repo}/releases?per_page=100`;try{let a=(process.env.GITHUB_TOKEN||process.env.GH_TOKEN||"").trim(),b=await fetch(f,{headers:{...a?{Authorization:`Bearer ${a}`}:{},Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"failproofai"},signal:AbortSignal.timeout(3e4),redirect:"follow"});if(!b.ok)throw Error(`GET ${f} returned ${b.status}`);d=await b.json()}catch(a){throw Error(`could not resolve commit ${c} in ${b.owner}/${b.repo}: ${L(a)}. Name the release tag instead if you know it.`)}let{parseReleaseBody:g}=await a.A(49679),h=Array.isArray(d)?d:[],i=[];for(let a of h){let b="string"==typeof a.tag_name?a.tag_name:"";if(!b||!l.test(b))continue;let c=g("string"==typeof a.body?a.body:"");c.commit&&c.commit.startsWith(e)&&i.push({tag:b,commit:c.commit})}if(i.length>1)throw Error(`commit ${c} matches ${i.length} releases of ${b.owner}/${b.repo}: `+i.map(a=>`${a.tag} (${a.commit})`).join(", ")+". Name one of those tags, or type more of the commit.");return 1===i.length?i[0].tag:null}async function s(a){return null===a.tag?q(a):e.r.test(a.tag)?await r(a,a.tag)??a.tag:a.tag}function t(a){return`github:${a.owner}/${a.repo}@${a.tag}`}function u(a,b){return`${j()}/${a.owner}/${a.repo}/releases/download/${a.tag}/${b}`}async function v(a){let b=await fetch(a,{signal:AbortSignal.timeout(3e4),redirect:"follow"});if(!b.ok)throw Error(`GET ${a} returned ${b.status}`);let c=b.headers.get("content-length");if(null!==c){let d=Number(c);if(Number.isFinite(d)&&d>8388608)throw await b.body?.cancel(),Error(`${a} declares ${d} bytes, over the 8388608 limit`)}if(!b.body)return Buffer.alloc(0);let d=[],e=b.body.getReader(),f=0;try{for(;;){let{done:b,value:c}=await e.read();if(b)break;if((f+=c.byteLength)>8388608)throw await e.cancel(),Error(`${a} is over the 8388608 byte limit`);d.push(Buffer.from(c))}}finally{e.releaseLock()}return Buffer.concat(d,f)}function w(a,b){for(let c of a.split("\n")){let a=c.trim().match(/^([0-9a-f]{64})\s+\*?(.+)$/i);if(a&&a[2].trim()===b)return a[1].toLowerCase()}return null}function x(a){return(0,b.createHash)("sha256").update(a).digest("hex")}function y(a,b){let e=`${a}.${process.pid}.tmp`;try{(0,c.mkdirSync)((0,d.dirname)(a),{recursive:!0}),(0,c.writeFileSync)(e,b),(0,c.renameSync)(e,a)}catch(a){throw(0,c.rmSync)(e,{force:!0}),a}}function z(a,b){if(void 0===b)return[];if(!Array.isArray(b))throw Error(`pack ${a} semantic is not an array`);if(b.length>e.P)throw Error(`pack ${a} declares ${b.length} semantic policies, over the cap of ${e.P}`);let c=b.map((b,c)=>(0,e.U)(a,b,c)),d=new Set;for(let b of c){if(d.has(b.name))throw Error(`pack ${a} declares semantic policy ${b.name} twice`);d.add(b.name)}return c}function A(a,b){let c=(0,e.T)(a,b);if("too-old"===c.kind)throw Error(c.reason);return"unreadable"===c.kind?{minCliVersionNote:c.reason}:c.declared?{minCliVersion:c.declared}:{}}async function B(a,b={}){let c=await I(a,b);return{id:c.id,version:c.version,enabled:c.enabled,available:c.available,bundled:!1,source:c.source,tag:c.tag,resolvedFromLatest:c.resolvedFromLatest,selection:c.selection,categories:c.categories}}async function C(a){let b;if("1"===process.env.FAILPROOFAI_NO_DOWNLOAD)throw Error("FAILPROOFAI_NO_DOWNLOAD is set, so nothing can be fetched to preview");let c=o(a),d=null===c.tag,f={...c,tag:await s(c)},h=(await v(u(f,i))).toString("utf8"),j=await v(u(f,g)),k=w(h,g);if(!k)throw Error(`${i} has no entry for ${g}`);if(x(j)!==k)throw Error(`${g} failed integrity verification`);try{b=JSON.parse(j.toString("utf8"))}catch(a){throw Error(`${g} is not valid JSON: ${L(a)}`)}if(!b||"object"!=typeof b)throw Error(`${g} is not an object`);let l=b,m=(0,e.$)(l),n=A(m.id,l.minCliVersion),p=z(m.id,l.semantic),q=D(m.id,l.policies);return E(q,p),{id:m.id,version:m.version,effect:m.effect,...m.commit?{commit:m.commit}:{},policies:q,semantic:p,...n,source:t(f),resolvedFromLatest:d}}function D(a,b){if(void 0===b)return[];if(!Array.isArray(b))throw Error(`pack ${a} policies is not an array`);let c=b.map((b,c)=>(0,e.Z)(a,b,c)),d=new Set;for(let b of c){if(d.has(b.name))throw Error(`pack ${a} declares ${b.name} twice`);d.add(b.name)}return c}function E(a,b){if(0===a.length&&0===b.length)throw Error("pack manifest declares no policies")}async function F(a){let b,c=(await v(u(a,i))).toString("utf8"),d=await v(u(a,g)),f=w(c,g);if(!f)throw Error(`${i} has no entry for ${g}`);if(x(d)!==f)throw Error(`${g} failed integrity verification`);let j=await v(u(a,h)),k=w(c,h);if(!k)throw Error(`${i} has no entry for ${h}`);let l=x(j);if(l!==k)throw Error(`${h} failed integrity verification`);try{b=JSON.parse(d.toString("utf8"))}catch(a){throw Error(`${g} is not valid JSON: ${L(a)}`)}if(!b||"object"!=typeof b)throw Error(`${g} is not an object`);let m=b,n=(0,e.$)(m),o=A(n.id,m.minCliVersion),p=D(n.id,m.policies),q=z(n.id,m.semantic);return E(p,q),{id:n.id,version:n.version,policies:p,semantic:q,...o,...void 0!==m.effect?{effect:n.effect}:{},...n.commit?{commit:n.commit}:{},artifact:j,artifactDigest:l}}function G(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}async function H(b,c){let d,{loadCustomHooks:e}=await a.A(6188);try{d=(await e(b,{strict:!0})).map(a=>a.name)}catch(a){throw Error(`its artifact could not be loaded: ${a instanceof Error?a.message:String(a)}`)}let f=c.filter(a=>!d.includes(a)),g=d.filter(a=>!c.includes(a));if(f.length>0)throw Error(`its manifest declares ${f.join(", ")} but the artifact does not register ${1===f.length?"it":"them"} — that would install as protection that never runs`);if(g.length>0)throw Error(`its artifact registers undeclared ${g.join(", ")} — a policy that enforces but appears in no listing cannot be reviewed or switched off`)}async function I(a,b){var g,h,i,j;let k,l;if(process.env.FAILPROOFAI_NO_DOWNLOAD)throw Error("pack downloads are disabled (FAILPROOFAI_NO_DOWNLOAD). Already-installed packs keep enforcing.");let m=o(a),n={...m,tag:await s(m)},p=null===m.tag,q=await F(n);if(g=n.tag,h=q.version,(k=g.slice(g.lastIndexOf("/")+1))!==h&&k!==`v${h}`){let a=n.tag.slice(n.tag.lastIndexOf("/")+1).replace(/^v/,""),b=`re-tag the release ${q.version} (a leading v is fine), or rebuild the pack with --version ${a}`;throw Error(`${q.id} was not installed: release tag ${n.tag} does not match the version its manifest declares (${q.version}). `+(p?`That is the newest release of ${n.owner}/${n.repo}, so the release and the pack disagree at the source — ask the publisher to ${b}.`:`Name the tag whose manifest says ${q.version}, or fix the pack: ${b}.`))}if(/^failproofai\//i.test(q.id)&&!(0,f.g)({source:t(n)}))throw Error(`${q.id} was not installed: the FailproofAI/ namespace is reserved for releases from github.com/FailproofAI, and this one came from ${n.owner}/${n.repo}.`);let r=q.policies.map(a=>a.name),u=(i=q.id,j=q.artifactDigest,(l=(0,e.V)().packs).find(a=>a.id===i)??l.find(a=>a.sha256===j)),{enabled:v,reason:w}=function(a,b,c,d){let e=a.map(a=>a.name);if(b?.all)return{enabled:null,reason:"all"};let f=new Set;if(b?.categories?.length){let c=new Set(b.categories.map(G)),d=new Map(a.map(a=>[G(a.category),a.category])),e=[...c].filter(a=>!d.has(a));if(e.length>0)throw Error(`no such categor${1===e.length?"y":"ies"}: ${e.join(", ")} (has: ${[...new Set(a.map(a=>G(a.category)))].join(", ")})`);for(let b of a)c.has(G(b.category))&&f.add(b.name)}if(b?.only?.length){let a=b.only.filter(a=>!e.includes(a));if(a.length>0)throw Error(`pack does not contain ${a.join(", ")}`);for(let a of b.only)f.add(a)}if(b?.only!==void 0||b?.categories?.length){if(b.merge&&d){if(null===c)return{enabled:null,reason:"carried"};for(let a of c??[])f.add(a);return{enabled:e.filter(a=>f.has(a)),reason:"added"}}return{enabled:e.filter(a=>f.has(a)),reason:"selected"}}return d?{enabled:null===c?null:c??null,reason:"carried"}:{enabled:a.filter(a=>a.defaultEnabled).map(a=>a.name),reason:"defaults"}}(q.policies,b,u?.enabled?u.enabled.filter(a=>r.includes(a)):u?.enabled,!!u),x=(0,e.N)(),z=`artifacts/${q.artifactDigest}.mjs`,A=(0,d.resolve)(x,z);(0,c.existsSync)(A)||y(A,q.artifact);try{await H(A,r)}catch(a){throw Error(`${q.id}@${q.version} was not installed: ${a instanceof Error?a.message:String(a)}`)}let B=a=>{let b=a.lastIndexOf("@");return b>a.indexOf(":")?a.slice(0,b):a};if(u&&u.id===q.id&&!u.source.startsWith("bundled:")&&B(u.source)!==B(t(n)))throw Error(`pack id ${q.id} is already installed from ${u.source}. Refusing to replace it with ${t(n)} — remove it first if that is what you mean.`);let C={id:q.id,version:q.version,source:t(n),entry:z,sha256:q.artifactDigest,policies:q.policies,...q.semantic.length>0?{semantic:q.semantic}:{},...q.minCliVersion?{minCliVersion:q.minCliVersion}:{},...q.commit?{commit:q.commit}:{},...q.effect?{effect:q.effect}:{},...v?{enabled:v}:{},...b?.clis?{clis:b.clis}:b?.merge!==!1&&u?.clis?{clis:u.clis}:{}};return{replaced:function(a,b=!0){let f=(0,d.resolve)((0,e.N)(),"installed.json"),g=[];if((0,c.existsSync)(f))try{let a=JSON.parse((0,c.readFileSync)(f,"utf8"));Array.isArray(a.packs)&&(g=a.packs)}catch{throw Error(`existing pack manifest at ${f} is unreadable; move it aside and re-add`)}let h=g.filter(b=>b?.sha256===a.sha256&&b?.id!==a.id).map(a=>a.id);if(b&&!a.enabled){let b=g.find(a=>h.includes(a?.id)),c=b?.enabled?.filter(b=>a.policies?.some(a=>a?.name===b));c&&c.length>0&&(a.enabled=c)}let i=g.filter(a=>!h.includes(a?.id)),j=i.findIndex(b=>b?.id===a.id);return j>=0?i[j]=a:i.push(a),y(f,JSON.stringify({schemaVersion:1,packs:i},null,2)+"\n"),h}(C,"all"!==w),id:q.id,version:q.version,source:C.source,tag:n.tag,resolvedFromLatest:p,enabled:v??r,available:r,selection:w,categories:[...new Set(q.policies.map(a=>G(a.category)))],semantic:q.semantic.length,...q.minCliVersionNote?{minCliVersionNote:q.minCliVersionNote}:{},...q.effect?{effect:q.effect}:{},...C.clis?{clis:C.clis}:{},artifact:A}}function J(a){let b=a.trim(),c=b.lastIndexOf("@");return(c>0?b.slice(0,c):b).trim()}class K extends Error{candidates;constructor(a,b){super(`${b} matches ${a.length} installed packs: ${a.join(", ")}. Name one of them exactly.`),this.candidates=a,this.name="AmbiguousPackId"}}function L(a){return a instanceof Error?a.message:String(a)}a.s(["w",0,m,"U",0,i,"Z",0,h,"v",0,g,"I",0,I,"z",0,B,"k",0,C,"R",0,function(a){let b,f=(0,d.resolve)((0,e.N)(),"installed.json");if(!(0,c.existsSync)(f))return null;try{b=JSON.parse((0,c.readFileSync)(f,"utf8"))}catch{return null}let g=Array.isArray(b.packs)?b.packs:[],h=g.find(b=>b?.id===J(a)),i=g.filter(b=>{var c;return b?.id&&(c=b.id,J(c).toLowerCase()===J(a).toLowerCase())});if(!h&&i.length>1)throw new K(i.map(a=>a.id).filter(a=>"string"==typeof a),a);let j=h??i[0],k=g.filter(a=>a!==j);return j&&k.length!==g.length?(y(f,JSON.stringify({schemaVersion:1,packs:k},null,2)+"\n"),j.id):null},"g",0,function(a,b,f){let g,h=(0,d.resolve)((0,e.N)(),"installed.json");if(!(0,c.existsSync)(h))return{ok:!1,reason:"no packs are installed"};try{g=JSON.parse((0,c.readFileSync)(h,"utf8"))}catch{return{ok:!1,reason:`pack manifest at ${h} is unreadable`}}let i=Array.isArray(g.packs)?g.packs:[],j=i.find(b=>b?.id===a);if(!j)return{ok:!1,reason:`no installed pack with id ${a}`};let k=(Array.isArray(j.policies)?j.policies:[]).map(a=>"string"==typeof a?.name?a.name:null).filter(a=>null!==a);if(!k.includes(b))return{ok:!1,reason:`pack ${a} declares no policy named ${b}`};let l=j.enabled??k,m=f?[...new Set([...l,b])]:l.filter(a=>a!==b);return j.enabled=k.filter(a=>m.includes(a)),y(h,JSON.stringify({schemaVersion:1,packs:i},null,2)+"\n"),{ok:!0}}])},1459,a=>{var b=a.i(1457),c=a.i(12072);let d={rgb:[102,209,181],c256:79,basic:"36"},e={rgb:[228,88,125],c256:168,basic:"95"},f={rgb:[227,179,65],c256:179,basic:"33"},g={rgb:[107,118,132],basic:"2"},h={rgb:[118,127,139],basic:"2"},i={rgb:[62,67,76],basic:"2"},j={rgb:[240,113,120],c256:203,basic:"31"};function k(a){return!!a.isTTY&&!process.env.NO_COLOR}let l="\x1b[0m";function m(){return/truecolor|24bit/i.test(process.env.COLORTERM||"")?"truecolor":/256color/i.test(process.env.TERM||"")?"ansi256":"basic"}function n(a,b){return"truecolor"===b?`38;2;${a.rgb[0]};${a.rgb[1]};${a.rgb[2]}`:"ansi256"===b&&void 0!==a.c256?`38;5;${a.c256}`:a.basic}let o=["...tt........","..tttt.......",".tttttt..pppp",".tttttt..pppp","..tttt...pppp","...tt....pppp",".........pppp",".........pppp","..pppp...pppp","..pppp...pppp","..pppp...pppp",".pppppp..pppp",".pppppp..pppp",".pppppp..pppp",".pppppp..pppp","..pppp...pppp","..ppppppppppp","..ppppppppppp","..ppppppppppp","..ppppppppppp"];function p(a,b){let c=0,d="",e=0;for(;e<a.length;)if("\x1b"===a[e]&&"["===a[e+1]){let b=e+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;b++,d+=a.slice(e,b),e=b}else{if(c>=b)break;d+=a[e],c++,e++}return d}function q(a,b,c,d={}){let e=a.columns||80,f=d.cut??!0,g=c.map(a=>""!==a&&f?p(a,e):a).join("\n")+"\n",h=b.lastCount>0?`\x1b[${b.lastCount}A\x1b[J`:"";a.write(`\x1b[?2026h${d.lead??""}${h}${g}${d.tail??""}\x1b[?2026l`),b.lastCount=c.length}function r(a){let b=0,c=0;for(;c<a.length;)if("\x1b"===a[c]&&"["===a[c+1]){let b=c+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;c=b+1}else b++,c++;return b}function s(a){let b=[],c="",d=0;for(;d<a.length;)if("\x1b"===a[d]&&"["===a[d+1]){let b=d+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;let e=a.slice(d,b+1);c=/\[0?m$/.test(e)?"":c+e,d=b+1}else b.push({ch:a[d],active:c}),d++;return b}function t(a){let b="",c="";for(let d of a)d.active!==c&&(c&&(b+=l),b+=d.active,c=d.active),b+=d.ch;return c?b+l:b}function u(a,b,c="left"){let d=Math.max(0,b-r(a));return"right"===c?" ".repeat(d)+a:a+" ".repeat(d)}Symbol("failproofai.back"),Symbol("failproofai.open-source"),Object.values({on:"✓ ON",off:"· OFF",mixed:"◐ MIXED",locked:"✓ LOCK",cloud:"✓ CLOUD",pack:"✓ PACK",failed:"▲ FAIL",observe:"◉ OBS"}).map(a=>a.length),a.s(["J",0," ","v",0,k,"w",0,function(a=process.stdout){return{cols:a.columns||80,color:k(a)}},"m",0,function(a={}){var k;let v,w,{cols:x,c:y}={cols:Math.max(20,a?.cols??80),c:(v=(k=a?.color??!1)?m():"basic",{bold:a=>k?`\x1b[1m${a}\x1b[0m`:a,dim:(w=(a,b=!1)=>c=>k?`\x1b[${b?"1;":""}${n(a,v)}m${c}\x1b[0m`:c)(g),guide:w(d),pink:w(e),pinkBold:w(e,!0),softPink:w(e),warn:w(f),ink2:a=>a,ink3:w(h),track:w(i),err:w(j)})},z=a.color??!1,A=a.version??c.version,B=y.ink3(" · "),C=(a,b)=>b?a(b):"",D=a=>y.pink(a),E=y.guide("●"),F=y.ink3("○"),G=y.err("✕"),H=y.pink("■"),I=y.ink3("□"),J=a=>`${y.bold("fa")}${y.pinkBold("il")}${y.bold("proof ai")} ${y.ink3(`v${A}`)}`+(a?`${B}${a}`:""),K=(a,b)=>y.bold(a.toUpperCase())+(b?` ${y.ink3(b)}`:""),L=(b,c=0)=>{let d=Math.max(c,...b.map(([a,b])=>b?r(a)+2:0));return b.map(([b,c])=>{let e,f;if(!c)return` ${b}`;let g=` ${u(b,d)}`;return g+(e=y.ink2(c),f=x-r(g),a.fit&&r(e)>f?function(a,b){var c;if(r(a)<=b)return a;if(a.includes("\x1b")){let d,e;return b<=1?"…":`${(e=(d=s(c=p(a,b-1)))[d.length-1])&&e.active?c+l:c}…`}return b<=0?"":a.length<=b?a:a.slice(0,b-1).trimEnd()+"…"}(e,Math.max(1,f)):e)})};return{cols:x,sep:B,cmd:D,on:E,off:F,failed:G,selected:H,unselected:I,meta:a=>C(y.ink3,a),header:J,head:K,rows:L,kv:(a,b=9)=>{let c=Math.max(b,...a.map(([a])=>r(a)))+2;return a.map(([a,b])=>b?` ${u(C(y.ink3,a),c)}${b}`:` ${C(y.ink3,a)}`)},ok:(a,b)=>`${y.guide("✓")} ${a}${b?` ${y.ink3(b)}`:""}`,caution:(a,b)=>`${y.warn("▲")} ${a}${b?`${B}${D(b)}`:""}`,fail:(a,b)=>`${y.err("✕")} ${a}${b?`${B}${D(b)}`:""}`,notice:(a,b)=>{let c=a=>(a.split("`").length-1)%2==0?a.replace(/`([^`]+)`/g,(a,b)=>D(b)):a,d="ok"===a?y.guide("✓"):"caution"===a?y.warn("▲"):y.err("✕"),[e="",...f]=b.split("\n");return[`${d} ${c(e)}`,...f.map(a=>""===a.trim()?"":` ${c(a)}`)]},confirm:(a,c="Continue?")=>new Promise(d=>{let{stdin:e,stdout:f}=a,g="",h=!1,i=e.isRaw,j=a=>{h||(h=!0,e.removeListener("keypress",l),e.removeListener("end",k),e.setRawMode?.(i??!1),e.pause(),f.write("\n"),d(a))};function k(){j(!1)}function l(a,b){let c=b?.name;b?.ctrl&&("c"===c||"d"===c)||"escape"===c?j(!1):"return"===c||"enter"===c?j(/^y(es)?$/i.test(g.trim())):"backspace"===c?g&&(g=g.slice(0,-1),f.write("\b \b")):a&&1===a.length&&a>=" "&&!b?.ctrl&&!b?.meta&&(g+=a,f.write(a))}f.write(`${c} ${y.ink3("y/N")} `),b.emitKeypressEvents(e),e.setRawMode?.(!0),e.on("keypress",l),e.on("end",k),e.resume()}),keys:a=>y.ink3(a.join(" · ")),bar:(a,b)=>{let c=Math.round(Math.max(0,Math.min(1,b))*a),d=Math.max(0,a-c);return C(y.pink,"━".repeat(c))+(z?C(y.track,"━".repeat(d)):" ".repeat(d))},logo:()=>x<22?[]:(function(a){let b=".".repeat(o[0]?.length??0),c=a=>"t"===a?d:"p"===a?e:null,f=[];for(let d=0;d<o.length;d+=2){let e=o[d],g=o[d+1]??b,h="";for(let b=0;b<e.length;b++){let d=c(e[b]),f=c(g[b]);if(d||f)if("basic"===a)h+=d&&f?"█":d?"▀":"▄";else if(d&&f)h+=d===f?`\x1b[${n(d,a)}m█\x1b[0m`:`\x1b[${n(d,a)};${"ansi256"===a&&void 0!==f.c256?`48;5;${f.c256}`:`48;2;${f.rgb[0]};${f.rgb[1]};${f.rgb[2]}`}m▀\x1b[0m`;else d?h+=`\x1b[${n(d,a)}m▀\x1b[0m`:h+=`\x1b[${n(f,a)}m▄\x1b[0m`;else h+=" "}f.push(h)}return f})(z?m():"basic").map(a=>` ${a}`),helpPage:b=>{var c;let d,e=[J(b.name),"",K("Usage"),...L(b.usage)];return b.options?.length&&e.push("",K("Options"),...(c=b.options,d=Math.max(b.optionsCol??0,...c.map(([a,b])=>b?r(a)+2:0)),c.flatMap(([b,c])=>{if(!c)return[` ${b}`];let e=` ${u(b,d)}`,f=x-r(e);if(!a.fit||r(c)<=f)return[e+y.ink2(c)];let g=" ".repeat(r(e));return(function(a,b){if(b<=0)return[a];if(!a.includes("\x1b")){if(b<=0)return[a];let c=a.split(/\s+/).filter(Boolean);if(0===c.length)return[];let d=[],e="";for(let a of c)e?e.length+1+a.length<=b?e+=` ${a}`:(d.push(e),e=a):e=a;return e&&d.push(e),d}let c=[],d=[];for(let b of s(a))/\s/.test(b.ch)?(d.length>0&&c.push(d),d=[]):d.push(b);d.length>0&&c.push(d);let e=[],f=[];for(let a of c){if(f.length>0&&f.length+1+a.length>b){e.push(t(f)),f=[...a];continue}f.length>0&&f.push({ch:" ",active:f[f.length-1].active}),f.push(...a)}return f.length>0&&e.push(t(f)),e})(c,Math.max(1,f)).map((a,b)=>(0===b?e:g)+y.ink2(a))}))),b.examples?.length&&e.push("",K("Examples"),...b.examples.map(a=>` ${D(a)}`)),e},live:a=>{let b={lastCount:0},c=0,d=null,e=null,f=!1,g=!1,h=()=>{a.write("\x1b[?25h")},i=()=>{process.removeListener("exit",h),process.removeListener("SIGINT",j),process.removeListener("SIGTERM",j)},j=a=>{g=!0,e&&clearTimeout(e),i(),h(),process.kill(process.pid,a)},k=()=>{e=null;let i=d;if(d=null,!i||g)return;c=Date.now();let k="";f||(f=!0,k="\x1b[?25l",process.once("exit",h),process.on("SIGINT",j),process.on("SIGTERM",j)),q(a,b,i(),{lead:k})};return{draw(a){if(g||(d=a,e))return;let b=c+100-Date.now();b<=0?k():(e=setTimeout(k,b),e.unref?.())},done(c){g||(g=!0,e&&clearTimeout(e),e=null,d=null,i(),q(a,b,c,{cut:!1,tail:f?"\x1b[?25h":""}))}}}}}])}]})();
|
|
233
234
|
|
|
234
|
-
//# sourceMappingURL=
|
|
235
|
+
//# sourceMappingURL=_0ouu886szh6yj._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[21776,a=>{"use strict";var b=a.i(36359),c=a.i(7292);a.S([b,"
|
|
1
|
+
module.exports=[21776,a=>{"use strict";var b=a.i(36359),c=a.i(7292);a.S([b,"00728227e41042729b3182aad2fe4c5d77f021b514,f",0,c,"6052b34d2e59825e93c0f9f6841554b4a903623a89,m"],21776)},2726,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__12qr51qgrrt6o._.js","server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuznb72p7z._.js"].map(b=>a.l(b))).then(()=>b(74493)))}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_0pedwblqdoh58._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(()=>{"use strict";module.exports=[45550,a=>{var b=a.i(72131),c=a.i(66036);let d=/\b[\w-]+-extension:\/\//i;function e(a){return"app"===function({stack:a,filename:b,appOrigin:c}){let e=[b,a].filter(Boolean).join("\n");return e.trim()?d.test(e)?"extension":c&&e.includes(c)?"app":"unknown":"unknown"}(a)}a.s(["GlobalErrorListeners",0,function(){return(0,b.useEffect)(()=>{let a=a=>{e({stack:a.error?.stack,filename:a.filename,appOrigin:window.location.origin})&&(0,c.L)("unhandled_exception",{error_message:a.message,error_name:a.error?.name,error_filename:a.filename,error_lineno:a.lineno,error_colno:a.colno})},b=a=>{let b=a.reason;e({stack:b instanceof Error?b.stack:void 0,appOrigin:window.location.origin})&&(0,c.L)("unhandled_rejection",{error_message:b instanceof Error?b.message:String(b),error_name:b instanceof Error?b.name:void 0})};return window.addEventListener("error",a),window.addEventListener("unhandledrejection",b),()=>{window.removeEventListener("error",a),window.removeEventListener("unhandledrejection",b)}},[]),null}],45550)},10815,a=>{var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(41476),f=a.i(72131),g=a.i(64831);let h={name:"git-branch",size:24,node:[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]]};h.node;let i=(0,g.f)(h);var j=a.i(89027);let k={name:"star",size:24,node:[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]};k.node;let l=(0,g.f)(k),m={name:"book-open",size:24,node:[["path",{d:"M12 5v16",key:"1f6ucr"}],["path",{d:"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z",key:"1fyvmf"}]]};m.node;let n=(0,g.f)(m),o={name:"message-circle",size:24,node:[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]]};o.node;let p=(0,g.f)(o),q={name:"messages-square",size:24,node:[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]};q.node;let r=(0,g.f)(q),s={name:"message-square-warning",size:24,node:[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 15h.01",key:"q59x07"}],["path",{d:"M12 7v4",key:"xawao1"}]]};s.node;let t=(0,g.f)(s);var u=a.i(40695);let v="failproofai@exosphere.host",w=[{label:"Star us on GitHub",icon:l,href:"https://github.com/failproofai/failproofai",color:"#f5c842",bg:"rgba(245,200,66,0.08)"},{label:"Documentation",icon:n,href:"https://docs.befailproof.ai/introduction",color:"#60a5fa",bg:"rgba(96,165,250,0.08)"},{label:"Join our Discord",icon:p,href:"https://discord.befailproof.ai/",color:"#5865f2",bg:"rgba(88,101,242,0.08)"},{label:"Join r/failproofai",icon:r,href:"https://www.reddit.com/r/failproofai/",color:"#ff4500",bg:"rgba(255,69,0,0.08)"},{label:"Feedback & Issues",icon:t,href:"https://github.com/FailproofAI/failproofai/issues/new/choose",color:"#34d399",bg:"rgba(52,211,153,0.08)"}],x=()=>{let[a,c]=(0,f.useState)(!1),d=(0,f.useCallback)(()=>c(!1),[]),e=(0,f.useCallback)(a=>{"Escape"===a.key&&c(!1)},[]);return(0,b.jsxs)("div",{className:"relative",onKeyDown:e,children:[a&&(0,b.jsx)("div",{className:"fixed inset-0 z-40",onClick:d,"aria-hidden":"true"}),(0,b.jsxs)(u.f,{type:"button",variant:"ghost",size:"sm",onClick:()=>c(a=>!a),"aria-expanded":a,"aria-haspopup":"true",className:"relative z-50 flex items-center gap-1.5 text-muted-foreground hover:text-foreground",children:[(0,b.jsx)(i,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"hidden sm:inline text-xs whitespace-nowrap",children:"Reach Us"}),(0,b.jsx)(j.f,{className:`h-3 w-3 transition-transform ${a?"rotate-180":""}`})]}),a&&(0,b.jsxs)("div",{className:"absolute right-0 mt-2 w-60 rounded-lg border border-border bg-card shadow-xl z-50",role:"menu",style:{boxShadow:"0 8px 32px rgba(0,0,0,0.45), 0 0 0 1px rgba(255,255,255,0.04)"},children:[(0,b.jsxs)("div",{className:"px-3 py-2.5 border-b border-border",style:{background:"linear-gradient(135deg, rgba(236,72,153,0.12) 0%, rgba(139,92,246,0.08) 100%)"},children:[(0,b.jsx)("p",{className:"text-xs font-semibold",style:{color:"#e879f9",letterSpacing:"0.06em"},children:"Reach Developers"}),(0,b.jsx)("p",{className:"text-[0.65rem] text-muted-foreground mt-0.5",children:"We'd love to hear from you"})]}),(0,b.jsx)("div",{className:"py-1",children:w.map(({label:a,icon:c,href:e,color:f,bg:g})=>(0,b.jsxs)("a",{href:e,target:"_blank",rel:"noopener noreferrer",role:"menuitem",className:"flex items-center gap-2.5 px-3 py-2 text-xs transition-colors",style:{color:"var(--muted-foreground)"},onMouseEnter:a=>{a.currentTarget.style.background=g,a.currentTarget.style.color=f},onMouseLeave:a=>{a.currentTarget.style.background="",a.currentTarget.style.color=""},onClick:d,children:[(0,b.jsx)(c,{className:"h-3.5 w-3.5 flex-shrink-0",style:{color:f}}),a]},a))}),(0,b.jsx)("div",{className:"px-3 py-2 border-t border-border",style:{background:"rgba(0,0,0,0.2)"},children:(0,b.jsxs)("p",{className:"text-[0.65rem] text-muted-foreground",children:["or email"," ",(0,b.jsx)("a",{href:`mailto:${v}`,className:"transition-colors",style:{color:"#e879f9"},onMouseEnter:a=>a.currentTarget.style.opacity="0.75",onMouseLeave:a=>a.currentTarget.style.opacity="1",children:v})]})})]})]})},y={name:"refresh-cw",size:24,node:[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]};y.node;let z=(0,g.f)(y);var A=a.i(97895),B=a.i(6236);let C=[{label:"Off",value:0},{label:"5s",value:5},{label:"10s",value:10},{label:"30s",value:30}];function D({className:a}){let c=(0,d.useRouter)(),[e,g]=(0,f.useTransition)(),{intervalSec:h,setIntervalSec:i}=(0,B.useAutoRefresh)(),j=(0,f.useCallback)(()=>{g(()=>c.refresh())},[c]);(0,f.useEffect)(()=>{if(h<=0)return;let a=setInterval(j,1e3*h);return()=>clearInterval(a)},[h,j]);let k=h>0;return(0,b.jsxs)("div",{className:(0,A.f)("inline-flex items-center rounded-lg border border-border bg-muted/50 p-0.5 gap-0.5",a),children:[(0,b.jsx)("button",{onClick:j,title:"Refresh",className:(0,A.f)("inline-flex items-center justify-center rounded-md p-1.5 transition-colors",k?"text-primary hover:bg-primary/10":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:(0,b.jsx)(z,{className:(0,A.f)("w-3.5 h-3.5",e&&"animate-spin")})}),(0,b.jsx)("div",{className:"w-px h-4 bg-border"}),(0,b.jsx)("div",{className:"inline-flex items-center gap-0.5",role:"group","aria-label":"Auto-refresh interval",children:C.map(a=>(0,b.jsx)("button",{onClick:()=>i(a.value),"aria-pressed":h===a.value,className:(0,A.f)("px-2 py-1 text-[11px] font-medium rounded-md transition-colors",h===a.value?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:a.label},a.value))})]})}var E=a.i(10765);let F=[{href:"/projects",label:"projects"},{href:"/policies",label:"policies"},{href:"/audit",label:"audit"}];a.s(["Navbar",0,({disabledPages:a=[]})=>{let f=(0,d.usePathname)(),{capture:g}=(0,E.usePostHog)(),h=f.startsWith("/policies")?"policies":f.startsWith("/audit")?"audit":f.startsWith("/settings")?"settings":f.startsWith("/projects")||f.startsWith("/project/")?"projects":"";return(0,b.jsxs)("header",{className:"app-header",children:[(0,b.jsx)("a",{href:"https://github.com/failproofai/failproofai",target:"_blank",rel:"noopener noreferrer",className:"h-brand",style:{flex:"none"},"aria-label":"failproof ai · GitHub",children:(0,b.jsx)("img",{src:"/logo.svg",alt:"failproof_ai",style:{height:18,display:"block",flexShrink:0}})}),(0,b.jsx)("nav",{className:"tabs",style:{border:"none",padding:0,gap:0},children:F.filter(({href:b})=>{let c=b.slice(1);return!a.includes(c)}).map(({href:a,label:d})=>{let e="/projects"===a?"/projects"===f||f.startsWith("/project/"):f.startsWith(a);return(0,b.jsx)(c.default,{href:a,className:`tab${e?" is-active":""}`,"aria-current":e?"page":void 0,onClick:()=>{"/audit"===a&&g("audit_nav_clicked",{from_path:f,is_active_tab:e})},children:d},a)})}),(0,b.jsx)("div",{style:{flex:1}}),(0,b.jsxs)("div",{className:"h-meta",children:[(0,b.jsxs)("span",{className:"h-version",children:["v","1.0.12-beta.
|
|
1
|
+
(()=>{"use strict";module.exports=[45550,a=>{var b=a.i(72131),c=a.i(66036);let d=/\b[\w-]+-extension:\/\//i;function e(a){return"app"===function({stack:a,filename:b,appOrigin:c}){let e=[b,a].filter(Boolean).join("\n");return e.trim()?d.test(e)?"extension":c&&e.includes(c)?"app":"unknown":"unknown"}(a)}a.s(["GlobalErrorListeners",0,function(){return(0,b.useEffect)(()=>{let a=a=>{e({stack:a.error?.stack,filename:a.filename,appOrigin:window.location.origin})&&(0,c.L)("unhandled_exception",{error_message:a.message,error_name:a.error?.name,error_filename:a.filename,error_lineno:a.lineno,error_colno:a.colno})},b=a=>{let b=a.reason;e({stack:b instanceof Error?b.stack:void 0,appOrigin:window.location.origin})&&(0,c.L)("unhandled_rejection",{error_message:b instanceof Error?b.message:String(b),error_name:b instanceof Error?b.name:void 0})};return window.addEventListener("error",a),window.addEventListener("unhandledrejection",b),()=>{window.removeEventListener("error",a),window.removeEventListener("unhandledrejection",b)}},[]),null}],45550)},10815,a=>{var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(41476),f=a.i(72131),g=a.i(64831);let h={name:"git-branch",size:24,node:[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]]};h.node;let i=(0,g.f)(h);var j=a.i(89027);let k={name:"star",size:24,node:[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]};k.node;let l=(0,g.f)(k),m={name:"book-open",size:24,node:[["path",{d:"M12 5v16",key:"1f6ucr"}],["path",{d:"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z",key:"1fyvmf"}]]};m.node;let n=(0,g.f)(m),o={name:"message-circle",size:24,node:[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]]};o.node;let p=(0,g.f)(o),q={name:"messages-square",size:24,node:[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]};q.node;let r=(0,g.f)(q),s={name:"message-square-warning",size:24,node:[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 15h.01",key:"q59x07"}],["path",{d:"M12 7v4",key:"xawao1"}]]};s.node;let t=(0,g.f)(s);var u=a.i(40695);let v="failproofai@exosphere.host",w=[{label:"Star us on GitHub",icon:l,href:"https://github.com/failproofai/failproofai",color:"#f5c842",bg:"rgba(245,200,66,0.08)"},{label:"Documentation",icon:n,href:"https://docs.befailproof.ai/introduction",color:"#60a5fa",bg:"rgba(96,165,250,0.08)"},{label:"Join our Discord",icon:p,href:"https://discord.befailproof.ai/",color:"#5865f2",bg:"rgba(88,101,242,0.08)"},{label:"Join r/failproofai",icon:r,href:"https://www.reddit.com/r/failproofai/",color:"#ff4500",bg:"rgba(255,69,0,0.08)"},{label:"Feedback & Issues",icon:t,href:"https://github.com/FailproofAI/failproofai/issues/new/choose",color:"#34d399",bg:"rgba(52,211,153,0.08)"}],x=()=>{let[a,c]=(0,f.useState)(!1),d=(0,f.useCallback)(()=>c(!1),[]),e=(0,f.useCallback)(a=>{"Escape"===a.key&&c(!1)},[]);return(0,b.jsxs)("div",{className:"relative",onKeyDown:e,children:[a&&(0,b.jsx)("div",{className:"fixed inset-0 z-40",onClick:d,"aria-hidden":"true"}),(0,b.jsxs)(u.f,{type:"button",variant:"ghost",size:"sm",onClick:()=>c(a=>!a),"aria-expanded":a,"aria-haspopup":"true",className:"relative z-50 flex items-center gap-1.5 text-muted-foreground hover:text-foreground",children:[(0,b.jsx)(i,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"hidden sm:inline text-xs whitespace-nowrap",children:"Reach Us"}),(0,b.jsx)(j.f,{className:`h-3 w-3 transition-transform ${a?"rotate-180":""}`})]}),a&&(0,b.jsxs)("div",{className:"absolute right-0 mt-2 w-60 rounded-lg border border-border bg-card shadow-xl z-50",role:"menu",style:{boxShadow:"0 8px 32px rgba(0,0,0,0.45), 0 0 0 1px rgba(255,255,255,0.04)"},children:[(0,b.jsxs)("div",{className:"px-3 py-2.5 border-b border-border",style:{background:"linear-gradient(135deg, rgba(236,72,153,0.12) 0%, rgba(139,92,246,0.08) 100%)"},children:[(0,b.jsx)("p",{className:"text-xs font-semibold",style:{color:"#e879f9",letterSpacing:"0.06em"},children:"Reach Developers"}),(0,b.jsx)("p",{className:"text-[0.65rem] text-muted-foreground mt-0.5",children:"We'd love to hear from you"})]}),(0,b.jsx)("div",{className:"py-1",children:w.map(({label:a,icon:c,href:e,color:f,bg:g})=>(0,b.jsxs)("a",{href:e,target:"_blank",rel:"noopener noreferrer",role:"menuitem",className:"flex items-center gap-2.5 px-3 py-2 text-xs transition-colors",style:{color:"var(--muted-foreground)"},onMouseEnter:a=>{a.currentTarget.style.background=g,a.currentTarget.style.color=f},onMouseLeave:a=>{a.currentTarget.style.background="",a.currentTarget.style.color=""},onClick:d,children:[(0,b.jsx)(c,{className:"h-3.5 w-3.5 flex-shrink-0",style:{color:f}}),a]},a))}),(0,b.jsx)("div",{className:"px-3 py-2 border-t border-border",style:{background:"rgba(0,0,0,0.2)"},children:(0,b.jsxs)("p",{className:"text-[0.65rem] text-muted-foreground",children:["or email"," ",(0,b.jsx)("a",{href:`mailto:${v}`,className:"transition-colors",style:{color:"#e879f9"},onMouseEnter:a=>a.currentTarget.style.opacity="0.75",onMouseLeave:a=>a.currentTarget.style.opacity="1",children:v})]})})]})]})},y={name:"refresh-cw",size:24,node:[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]};y.node;let z=(0,g.f)(y);var A=a.i(97895),B=a.i(6236);let C=[{label:"Off",value:0},{label:"5s",value:5},{label:"10s",value:10},{label:"30s",value:30}];function D({className:a}){let c=(0,d.useRouter)(),[e,g]=(0,f.useTransition)(),{intervalSec:h,setIntervalSec:i}=(0,B.useAutoRefresh)(),j=(0,f.useCallback)(()=>{g(()=>c.refresh())},[c]);(0,f.useEffect)(()=>{if(h<=0)return;let a=setInterval(j,1e3*h);return()=>clearInterval(a)},[h,j]);let k=h>0;return(0,b.jsxs)("div",{className:(0,A.f)("inline-flex items-center rounded-lg border border-border bg-muted/50 p-0.5 gap-0.5",a),children:[(0,b.jsx)("button",{onClick:j,title:"Refresh",className:(0,A.f)("inline-flex items-center justify-center rounded-md p-1.5 transition-colors",k?"text-primary hover:bg-primary/10":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:(0,b.jsx)(z,{className:(0,A.f)("w-3.5 h-3.5",e&&"animate-spin")})}),(0,b.jsx)("div",{className:"w-px h-4 bg-border"}),(0,b.jsx)("div",{className:"inline-flex items-center gap-0.5",role:"group","aria-label":"Auto-refresh interval",children:C.map(a=>(0,b.jsx)("button",{onClick:()=>i(a.value),"aria-pressed":h===a.value,className:(0,A.f)("px-2 py-1 text-[11px] font-medium rounded-md transition-colors",h===a.value?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:a.label},a.value))})]})}var E=a.i(10765);let F=[{href:"/projects",label:"projects"},{href:"/policies",label:"policies"},{href:"/audit",label:"audit"}];a.s(["Navbar",0,({disabledPages:a=[]})=>{let f=(0,d.usePathname)(),{capture:g}=(0,E.usePostHog)(),h=f.startsWith("/policies")?"policies":f.startsWith("/audit")?"audit":f.startsWith("/settings")?"settings":f.startsWith("/projects")||f.startsWith("/project/")?"projects":"";return(0,b.jsxs)("header",{className:"app-header",children:[(0,b.jsx)("a",{href:"https://github.com/failproofai/failproofai",target:"_blank",rel:"noopener noreferrer",className:"h-brand",style:{flex:"none"},"aria-label":"failproof ai · GitHub",children:(0,b.jsx)("img",{src:"/logo.svg",alt:"failproof_ai",style:{height:18,display:"block",flexShrink:0}})}),(0,b.jsx)("nav",{className:"tabs",style:{border:"none",padding:0,gap:0},children:F.filter(({href:b})=>{let c=b.slice(1);return!a.includes(c)}).map(({href:a,label:d})=>{let e="/projects"===a?"/projects"===f||f.startsWith("/project/"):f.startsWith(a);return(0,b.jsx)(c.default,{href:a,className:`tab${e?" is-active":""}`,"aria-current":e?"page":void 0,onClick:()=>{"/audit"===a&&g("audit_nav_clicked",{from_path:f,is_active_tab:e})},children:d},a)})}),(0,b.jsx)("div",{style:{flex:1}}),(0,b.jsxs)("div",{className:"h-meta",children:[(0,b.jsxs)("span",{className:"h-version",children:["v","1.0.12-beta.2"]}),h&&(0,b.jsx)("span",{className:"h-brand-sep","aria-hidden":"true",children:"·"}),h&&(0,b.jsx)("span",{className:"h-brand-section",children:h})]}),(0,b.jsxs)("div",{className:"h-actions",children:[(0,b.jsx)(D,{}),(0,b.jsx)("span",{style:{width:1,height:18,background:"var(--line)",margin:"0 6px"}}),!a.includes("settings")&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(c.default,{href:"/settings",className:`h-icon-btn${f.startsWith("/settings")?" is-active":""}`,"aria-label":"settings","aria-current":f.startsWith("/settings")?"page":void 0,title:"settings",children:(0,b.jsx)(e.f,{className:"w-3.5 h-3.5",strokeWidth:1.75,"aria-hidden":"true"})}),(0,b.jsx)("span",{style:{width:1,height:18,background:"var(--line)",margin:"0 6px"}})]}),(0,b.jsx)(x,{})]})]})}],10815)}]})();
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_1djqs9i27e4kg._.js.map
|
package/.next/standalone/.next/server/chunks/ssr/{_1ve8y151ua7qx._.js → _1fw0_nzkae5ao._.js}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(()=>{"use strict";module.exports=[
|
|
1
|
+
(()=>{"use strict";module.exports=[19121,a=>{var b=a.i(5050);let c=(0,b.createServerReference)("00728227e41042729b3182aad2fe4c5d77f021b514",b.callServer,void 0,b.findSourceMapURL,"getTelemetryConfig");a.s(["f",0,c])},18952,a=>{var b=a.i(87924),c=a.i(72131);let d=[],e=0,f=new Set;function g(){for(let a of f)a()}function h(a){return f.add(a),()=>f.delete(a)}function i(){return d}function j({message:a}){let[d,e]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{requestAnimationFrame(()=>e(!0));let a=setTimeout(()=>e(!1),2e3);return()=>clearTimeout(a)},[]),(0,b.jsx)("div",{className:`bg-card border border-border text-foreground text-sm px-4 py-2 rounded-lg shadow-lg transition-opacity duration-300 ${d?"opacity-100":"opacity-0"}`,children:a})}a.s(["Toaster",0,function(){let a=(0,c.useSyncExternalStore)(h,i,i);return(0,b.jsx)("div",{className:"fixed bottom-4 right-4 z-50 flex flex-col gap-2",children:a.map(a=>(0,b.jsx)(j,{message:a.message},a.id))})},"toast",0,function(a){let b=e++;d=[...d,{id:b,message:a}],g(),setTimeout(()=>{d=d.filter(a=>a.id!==b),g()},2500)}])},10765,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(19121),f=a.i(66036);let g=(0,c.createContext)(void 0);a.s(["PostHogProvider",0,function({children:a}){let h=(0,d.usePathname)(),i=(0,c.useRef)(null),j=(0,c.useRef)(!1);(0,c.useEffect)(()=>{let a=!1;return(0,e.f)().then(b=>{a||((0,f.$)(b),j.current=!0,(0,f.L)("$pageview"),i.current=window.location.pathname)}),()=>{a=!0}},[]),(0,c.useEffect)(()=>{j.current&&i.current!==h&&(i.current=h,(0,f.L)("$pageview"))},[h]);let k=c.default.useCallback((a,b)=>{(0,f.L)(a,b)},[]);return(0,b.jsx)(g.Provider,{value:{capture:k},children:a})},"usePostHog",0,function(){let a=(0,c.useContext)(g);if(void 0===a)throw Error("usePostHog must be used within a PostHogProvider");return a}])},66036,a=>{a.s(["L",0,function(a,b){},"$",0,function(a){}])},5050,(a,b,c)=>{Object.defineProperty(c,"__esModule",{value:!0});var d={callServer:function(){return f.callServer},createServerReference:function(){return h.createServerReference},findSourceMapURL:function(){return g.findSourceMapURL}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20611),g=a.r(1722),h=a.r(38783)}]})();
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=_1fw0_nzkae5ao._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(()=>{"use strict";module.exports=[65967,a=>{var b=a.i(87924),c=a.i(7963),d=a.i(
|
|
1
|
+
(()=>{"use strict";module.exports=[65967,a=>{var b=a.i(87924),c=a.i(7963),d=a.i(11330);a.s(["f",0,function({currentPage:a,totalPages:e,onPageChange:f}){if(e<=1)return null;let g=a=>`px-3 py-2 text-sm rounded-md transition-colors flex items-center gap-1 bg-muted text-muted-foreground ${a?"opacity-50 cursor-not-allowed":"hover:bg-muted/80"}`;return(0,b.jsxs)("div",{className:"flex items-center justify-center gap-2 py-4",children:[(0,b.jsxs)("button",{onClick:()=>f(a-1),disabled:1===a,className:g(1===a),"aria-label":"Previous page",children:[(0,b.jsx)(c.f,{className:"w-4 h-4"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Previous"})]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:(()=>{if(e<=7)return Array.from({length:e},(a,b)=>b+1);let b=[1],c=Math.max(2,a-1),d=Math.min(e-1,a+1);a<=3&&(d=Math.min(5,e-1)),a>=e-2&&(c=Math.max(2,e-4)),c>2&&b.push("ellipsis-start");for(let a=c;a<=d;a++)b.push(a);return d<e-1&&b.push("ellipsis-end"),b.push(e),b})().map(c=>"string"==typeof c?(0,b.jsx)("span",{className:"px-2 text-muted-foreground",children:"..."},c):(0,b.jsx)("button",{onClick:()=>f(c),className:`min-w-[2.5rem] px-3 py-2 text-sm rounded-md transition-colors ${a===c?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground hover:bg-muted/80"}`,"aria-label":`Page ${c}`,"aria-current":a===c?"page":void 0,children:c},c))}),(0,b.jsxs)("button",{onClick:()=>f(a+1),disabled:a===e,className:g(a===e),"aria-label":"Next page",children:[(0,b.jsx)("span",{className:"hidden sm:inline",children:"Next"}),(0,b.jsx)(d.f,{className:"w-4 h-4"})]})]})}])},87256,a=>{let b={claude:{id:"claude",label:"Claude Code",badgeClasses:"bg-orange-500/10 text-orange-400 border-orange-500/20"},codex:{id:"codex",label:"OpenAI Codex",badgeClasses:"bg-purple-500/10 text-purple-400 border-purple-500/20"},copilot:{id:"copilot",label:"GitHub Copilot",badgeClasses:"bg-blue-500/10 text-blue-400 border-blue-500/20"},cursor:{id:"cursor",label:"Cursor Agent",badgeClasses:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20"},opencode:{id:"opencode",label:"OpenCode",badgeClasses:"bg-amber-500/10 text-amber-400 border-amber-500/20"},pi:{id:"pi",label:"Pi",badgeClasses:"bg-pink-500/10 text-pink-400 border-pink-500/20"},hermes:{id:"hermes",label:"Hermes",badgeClasses:"bg-indigo-500/10 text-indigo-400 border-indigo-500/20"},openclaw:{id:"openclaw",label:"OpenClaw",badgeClasses:"bg-teal-500/10 text-teal-400 border-teal-500/20"},factory:{id:"factory",label:"Factory Droid",badgeClasses:"bg-rose-500/10 text-rose-400 border-rose-500/20"},devin:{id:"devin",label:"Devin CLI",badgeClasses:"bg-violet-500/10 text-violet-400 border-violet-500/20"},antigravity:{id:"antigravity",label:"Antigravity CLI",badgeClasses:"bg-cyan-500/10 text-cyan-400 border-cyan-500/20"},goose:{id:"goose",label:"Goose",badgeClasses:"bg-lime-500/10 text-lime-400 border-lime-500/20"}};a.s(["z",0,["claude","codex","copilot","cursor","opencode","pi","hermes","openclaw","factory","devin","antigravity","goose"],"G",0,function(a){return b[a]?.badgeClasses??b.claude.badgeClasses},"A",0,function(a){return b[a]?.label??a},"U",0,function(a){return"string"==typeof a&&Object.prototype.hasOwnProperty.call(b,a)}])},90619,95947,a=>{var b=a.i(50944),c=a.i(72131);function d(a){let b=a.getFullYear(),c=String(a.getMonth()+1).padStart(2,"0"),d=String(a.getDate()).padStart(2,"0");return`${b}-${c}-${d}`}function e(a){var b;if(!a||(b=a,!/^\d{4}-\d{2}-\d{2}$/.test(b)||isNaN(Date.parse(b))))return null;let[c,d,e]=a.split("-").map(Number);return new Date(c,d-1,e,12,0,0)}a.s(["f",0,function(){let a=(0,b.useSearchParams)(),d=(0,b.useRouter)(),e=(0,b.usePathname)(),f=(0,c.useRef)(null),g=(0,c.useCallback)(b=>a.get(b),[a]),h=(0,c.useCallback)(()=>new URLSearchParams(a.toString()),[a]),i=(0,c.useCallback)(b=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{let c=new URLSearchParams(a.toString());for(let[a,d]of Object.entries(b))void 0===d||""===d?c.delete(a):c.set(a,d);let f=c.toString(),g=f?`${e}?${f}`:e;d.replace(g,{scroll:!1})},150)},[a,e,d]);return(0,c.useEffect)(()=>()=>{f.current&&clearTimeout(f.current)},[]),{get:g,getAll:h,setAll:i}}],90619),a.s(["V",0,function(a){let b={};return a.from&&(b.from=d(a.from)),a.to&&(b.to=d(a.to)),b},"l",0,function(a){if(0!==a.length)return a.map(a=>encodeURIComponent(a)).join(",")},"t",0,function(a){return a<=1?void 0:String(a)},"w",0,function(a){return a?a.split(",").map(a=>decodeURIComponent(a.trim())).filter(a=>a.length>0):[]},"m",0,function(a){if(!a)return 1;let b=parseInt(a,10);return Number.isFinite(b)&&b>=1?b:1},"S",0,function(a){return a&&["all","last-hour","today","last-7-days","last-30-days","custom"].includes(a)?a:"all"},"R",0,function(a,b){return{from:e(a),to:e(b)}},"$",0,function(a){return"all"===a?void 0:a}],95947)},7963,a=>{var b=a.i(64831);let c={name:"chevron-left",size:24,node:[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]};c.node;let d=(0,b.f)(c);a.s(["f",0,d],7963)},11330,a=>{var b=a.i(64831);let c={name:"chevron-right",size:24,node:[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]};c.node;let d=(0,b.f)(c);a.s(["f",0,d],11330)}]})();
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_20hn4gn87nsjc._.js.map
|