From a0727c818f4971346c6df1eb9957c38fbc29c593 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 20 May 2026 21:47:16 +0000 Subject: [PATCH 1/3] =?UTF-8?q?chore:=20rename=20exospherehost=20=E2=86=92?= =?UTF-8?q?=20failproofai=20in=20repo=20URLs=20and=20X=20handle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GitHub org was renamed. Replaces github.com/exospherehost/failproofai with github.com/failproofai/failproofai across package.json metadata, README and 14 translated README badges, CONTRIBUTING, in-app banners (bin/, scripts/, components/), Mintlify docs.json, and 30 translated docs (package-aliases issues link + examples repo-tree link). Also updates the X social handle in docs.json from x.com/exospherehost to x.com/failproofai. LICENSE, package.json author legal entity, contact email, and historical CHANGELOG entries are intentionally left untouched (per audit decisions). https://claude.ai/code/session_01KtaM2jJWogYSpNzp7ziMEa --- CONTRIBUTING.md | 4 ++-- README.md | 2 +- __tests__/components/reach-developers.test.tsx | 4 ++-- bin/failproofai.mjs | 2 +- components/navbar.tsx | 2 +- components/reach-developers.tsx | 4 ++-- docs/ar/examples.mdx | 2 +- docs/ar/package-aliases.mdx | 2 +- docs/de/examples.mdx | 2 +- docs/de/package-aliases.mdx | 2 +- docs/docs.json | 6 +++--- docs/es/examples.mdx | 2 +- docs/es/package-aliases.mdx | 2 +- docs/examples.mdx | 2 +- docs/fr/examples.mdx | 2 +- docs/fr/package-aliases.mdx | 2 +- docs/he/examples.mdx | 2 +- docs/he/package-aliases.mdx | 2 +- docs/hi/examples.mdx | 2 +- docs/hi/package-aliases.mdx | 2 +- docs/i18n/README.ar.md | 2 +- docs/i18n/README.de.md | 2 +- docs/i18n/README.es.md | 2 +- docs/i18n/README.fr.md | 2 +- docs/i18n/README.he.md | 2 +- docs/i18n/README.hi.md | 2 +- docs/i18n/README.it.md | 2 +- docs/i18n/README.ja.md | 2 +- docs/i18n/README.ko.md | 2 +- docs/i18n/README.pt-br.md | 2 +- docs/i18n/README.ru.md | 2 +- docs/i18n/README.tr.md | 2 +- docs/i18n/README.vi.md | 2 +- docs/i18n/README.zh.md | 2 +- docs/it/examples.mdx | 2 +- docs/it/package-aliases.mdx | 2 +- docs/ja/examples.mdx | 2 +- docs/ja/package-aliases.mdx | 2 +- docs/ko/examples.mdx | 2 +- docs/ko/package-aliases.mdx | 2 +- docs/package-aliases.mdx | 2 +- docs/pt-br/examples.mdx | 2 +- docs/pt-br/package-aliases.mdx | 2 +- docs/ru/examples.mdx | 2 +- docs/ru/package-aliases.mdx | 2 +- docs/tr/examples.mdx | 2 +- docs/tr/package-aliases.mdx | 2 +- docs/vi/examples.mdx | 2 +- docs/vi/package-aliases.mdx | 2 +- docs/zh/examples.mdx | 2 +- docs/zh/package-aliases.mdx | 2 +- package.json | 6 +++--- scripts/launch.ts | 2 +- 53 files changed, 60 insertions(+), 60 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a6fae43e..f5c9d807 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ Thanks for your interest in contributing! Here's how to get started. ## Development Setup ```bash -git clone https://github.com/exosphereHost/failproofai.git +git clone https://github.com/failproofai/failproofai.git cd failproofai bun install bun run dev @@ -73,4 +73,4 @@ failproofai/ ## Reporting Issues -Found a bug or have a feature idea? [Open an issue](https://github.com/exosphereHost/failproofai/issues). The issue templates will guide you through providing the right details. +Found a bug or have a feature idea? [Open an issue](https://github.com/failproofai/failproofai/issues). The issue templates will guide you through providing the right details. diff --git a/README.md b/README.md index 740e64c1..e384130c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/__tests__/components/reach-developers.test.tsx b/__tests__/components/reach-developers.test.tsx index ddd476c3..575136f9 100644 --- a/__tests__/components/reach-developers.test.tsx +++ b/__tests__/components/reach-developers.test.tsx @@ -38,7 +38,7 @@ describe("ReachDevelopers", () => { const featureLink = screen.getByText("Request a Feature").closest("a"); expect(featureLink).toHaveAttribute( "href", - expect.stringContaining("github.com/exospherehost/failproofai") + expect.stringContaining("github.com/failproofai/failproofai") ); expect(featureLink).toHaveAttribute( "href", @@ -48,7 +48,7 @@ describe("ReachDevelopers", () => { const bugLink = screen.getByText("Report an Issue").closest("a"); expect(bugLink).toHaveAttribute( "href", - expect.stringContaining("github.com/exospherehost/failproofai") + expect.stringContaining("github.com/failproofai/failproofai") ); }); diff --git a/bin/failproofai.mjs b/bin/failproofai.mjs index c4084207..4b1c9a89 100755 --- a/bin/failproofai.mjs +++ b/bin/failproofai.mjs @@ -169,7 +169,7 @@ EXAMPLES failproofai policies --uninstall --custom LINKS - ⭐ Star us: https://github.com/exospherehost/failproofai + ⭐ Star us: https://github.com/failproofai/failproofai 📖 Docs: https://befailproof.ai 💬 Slack: https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ `.trimStart()); diff --git a/components/navbar.tsx b/components/navbar.tsx index afb87e5e..6b957e0b 100644 --- a/components/navbar.tsx +++ b/components/navbar.tsx @@ -24,7 +24,7 @@ export const Navbar: React.FC<{ disabledPages?: string[] }> = ({ disabledPages =
[![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.de.md b/docs/i18n/README.de.md index bb927ba5..9b735a16 100644 --- a/docs/i18n/README.de.md +++ b/docs/i18n/README.de.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.es.md b/docs/i18n/README.es.md index 5a5597a8..877b57a6 100644 --- a/docs/i18n/README.es.md +++ b/docs/i18n/README.es.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.fr.md b/docs/i18n/README.fr.md index 4af35e30..081afca2 100644 --- a/docs/i18n/README.fr.md +++ b/docs/i18n/README.fr.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.he.md b/docs/i18n/README.he.md index 36cfbb0b..7d4779e0 100644 --- a/docs/i18n/README.he.md +++ b/docs/i18n/README.he.md @@ -11,7 +11,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.hi.md b/docs/i18n/README.hi.md index 1b3d95ef..ee96e07d 100644 --- a/docs/i18n/README.hi.md +++ b/docs/i18n/README.hi.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.it.md b/docs/i18n/README.it.md index 2c3d37b1..541ec85a 100644 --- a/docs/i18n/README.it.md +++ b/docs/i18n/README.it.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.ja.md b/docs/i18n/README.ja.md index 9296cc5f..146063e3 100644 --- a/docs/i18n/README.ja.md +++ b/docs/i18n/README.ja.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.ko.md b/docs/i18n/README.ko.md index 29b78867..fa1ae101 100644 --- a/docs/i18n/README.ko.md +++ b/docs/i18n/README.ko.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.pt-br.md b/docs/i18n/README.pt-br.md index 083fd83c..2d531e05 100644 --- a/docs/i18n/README.pt-br.md +++ b/docs/i18n/README.pt-br.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.ru.md b/docs/i18n/README.ru.md index 6ac738af..a430bb5d 100644 --- a/docs/i18n/README.ru.md +++ b/docs/i18n/README.ru.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.tr.md b/docs/i18n/README.tr.md index f91b0841..e0718f6c 100644 --- a/docs/i18n/README.tr.md +++ b/docs/i18n/README.tr.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.vi.md b/docs/i18n/README.vi.md index 25eb6eb6..a8c9d2d2 100644 --- a/docs/i18n/README.vi.md +++ b/docs/i18n/README.vi.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/i18n/README.zh.md b/docs/i18n/README.zh.md index 323173f2..b583200f 100644 --- a/docs/i18n/README.zh.md +++ b/docs/i18n/README.zh.md @@ -9,7 +9,7 @@ failproof ai [![npm](https://img.shields.io/npm/v/failproofai?style=flat-square&color=CB3837)](https://www.npmjs.com/package/failproofai) -[![CI](https://img.shields.io/github/actions/workflow/status/exospherehost/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/exospherehost/failproofai/actions) +[![CI](https://img.shields.io/github/actions/workflow/status/failproofai/failproofai/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/failproofai/failproofai/actions) [![Slack](https://img.shields.io/badge/Slack-join%20us-4A154B?style=flat-square&logo=slack)](https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ) [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) diff --git a/docs/it/examples.mdx b/docs/it/examples.mdx index 73f16d84..d96392e7 100644 --- a/docs/it/examples.mdx +++ b/docs/it/examples.mdx @@ -298,7 +298,7 @@ L'installazione più efficace: effettua il commit di `.failproofai/policies/` ne ## Altri esempi -La directory [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) nel repo contiene: +La directory [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) nel repo contiene: | File | Cosa mostra | |------|---------------| diff --git a/docs/it/package-aliases.mdx b/docs/it/package-aliases.mdx index c8b77193..59da77ea 100644 --- a/docs/it/package-aliases.mdx +++ b/docs/it/package-aliases.mdx @@ -79,4 +79,4 @@ Il proxy è uno script Node di due righe; non c'è logica, nessuna chiamata di r ## Se trovi un nome che abbiamo perso -Apri un issue su [exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues) e lo registreremo. \ No newline at end of file +Apri un issue su [failproofai/failproofai](https://github.com/failproofai/failproofai/issues) e lo registreremo. \ No newline at end of file diff --git a/docs/ja/examples.mdx b/docs/ja/examples.mdx index 513a77c5..5f25fed9 100644 --- a/docs/ja/examples.mdx +++ b/docs/ja/examples.mdx @@ -298,7 +298,7 @@ failproofai をインストール済みのすべてのチームメンバーが ## その他の使用例 -リポジトリの [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) ディレクトリには以下が含まれています: +リポジトリの [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) ディレクトリには以下が含まれています: | ファイル | 内容 | |------|---------------| diff --git a/docs/ja/package-aliases.mdx b/docs/ja/package-aliases.mdx index 9d70e761..3512b1f6 100644 --- a/docs/ja/package-aliases.mdx +++ b/docs/ja/package-aliases.mdx @@ -79,4 +79,4 @@ npm info failproof ## 見落とされた名前を発見した場合 -[exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues) に Issue を作成してください。確認次第、登録対応いたします。 \ No newline at end of file +[failproofai/failproofai](https://github.com/failproofai/failproofai/issues) に Issue を作成してください。確認次第、登録対応いたします。 \ No newline at end of file diff --git a/docs/ko/examples.mdx b/docs/ko/examples.mdx index 7fdfdedc..79078cb8 100644 --- a/docs/ko/examples.mdx +++ b/docs/ko/examples.mdx @@ -298,7 +298,7 @@ failproofai가 설치된 모든 팀원은 이 규칙을 자동으로 적용받 ## 더 많은 예제 -저장소의 [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) 디렉토리에는 다음이 포함되어 있습니다: +저장소의 [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) 디렉토리에는 다음이 포함되어 있습니다: | 파일 | 내용 | |------|------| diff --git a/docs/ko/package-aliases.mdx b/docs/ko/package-aliases.mdx index 129d1f32..7cdfe374 100644 --- a/docs/ko/package-aliases.mdx +++ b/docs/ko/package-aliases.mdx @@ -79,4 +79,4 @@ npm info failproof ## 누락된 이름을 발견한 경우 -[exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues)에 이슈를 열어주시면 등록하겠습니다. \ No newline at end of file +[failproofai/failproofai](https://github.com/failproofai/failproofai/issues)에 이슈를 열어주시면 등록하겠습니다. \ No newline at end of file diff --git a/docs/package-aliases.mdx b/docs/package-aliases.mdx index 984ff4b3..66f40160 100644 --- a/docs/package-aliases.mdx +++ b/docs/package-aliases.mdx @@ -79,4 +79,4 @@ The proxy is a two-line Node script; there is no logic, no network calls, and no ## If you find a name we missed -Open an issue at [exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues) and we will register it. +Open an issue at [failproofai/failproofai](https://github.com/failproofai/failproofai/issues) and we will register it. diff --git a/docs/pt-br/examples.mdx b/docs/pt-br/examples.mdx index 0f3ba95b..00601bce 100644 --- a/docs/pt-br/examples.mdx +++ b/docs/pt-br/examples.mdx @@ -298,7 +298,7 @@ A configuração de maior impacto: faça commit de `.failproofai/policies/` no s ## Mais exemplos -O diretório [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) no repositório contém: +O diretório [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) no repositório contém: | Arquivo | O que demonstra | |---------|-----------------| diff --git a/docs/pt-br/package-aliases.mdx b/docs/pt-br/package-aliases.mdx index eb36da33..055005a0 100644 --- a/docs/pt-br/package-aliases.mdx +++ b/docs/pt-br/package-aliases.mdx @@ -79,4 +79,4 @@ O proxy é um script Node de duas linhas; não há lógica adicional, chamadas d ## Se você encontrar um nome que esquecemos -Abra uma issue em [exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues) e nós o registraremos. \ No newline at end of file +Abra uma issue em [failproofai/failproofai](https://github.com/failproofai/failproofai/issues) e nós o registraremos. \ No newline at end of file diff --git a/docs/ru/examples.mdx b/docs/ru/examples.mdx index 413d88a3..19cc3ed2 100644 --- a/docs/ru/examples.mdx +++ b/docs/ru/examples.mdx @@ -298,7 +298,7 @@ git commit -m "Add failproofai team policies" ## Больше примеров -Директория [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) в репозитории содержит: +Директория [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) в репозитории содержит: | Файл | Что показывает | |------|---------------| diff --git a/docs/ru/package-aliases.mdx b/docs/ru/package-aliases.mdx index 36d6cb75..4ecdd21c 100644 --- a/docs/ru/package-aliases.mdx +++ b/docs/ru/package-aliases.mdx @@ -79,4 +79,4 @@ npm info failproof ## Если вы нашли имя, которое мы пропустили -Откройте issue в [exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues), и мы его зарегистрируем. \ No newline at end of file +Откройте issue в [failproofai/failproofai](https://github.com/failproofai/failproofai/issues), и мы его зарегистрируем. \ No newline at end of file diff --git a/docs/tr/examples.mdx b/docs/tr/examples.mdx index 3f13b1f0..d422aa8f 100644 --- a/docs/tr/examples.mdx +++ b/docs/tr/examples.mdx @@ -298,7 +298,7 @@ En etkili kurulum: reponuzda `.failproofai/policies/` adresine projeniz için uy ## Daha fazla örnek -Repodaki [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) dizini şunları içerir: +Repodaki [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) dizini şunları içerir: | Dosya | Ne gösterir | |------|------------| diff --git a/docs/tr/package-aliases.mdx b/docs/tr/package-aliases.mdx index 29d6e748..8a33d543 100644 --- a/docs/tr/package-aliases.mdx +++ b/docs/tr/package-aliases.mdx @@ -79,4 +79,4 @@ Ara sunucu iki satırlık bir Node script'idir; hiçbir mantık, ağ çağrısı ## Kaçırdığımız bir ad bulursanız -[exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues) adresinde bir issue açın ve biz bunu kaydederiz. \ No newline at end of file +[failproofai/failproofai](https://github.com/failproofai/failproofai/issues) adresinde bir issue açın ve biz bunu kaydederiz. \ No newline at end of file diff --git a/docs/vi/examples.mdx b/docs/vi/examples.mdx index feb1355b..ea88b058 100644 --- a/docs/vi/examples.mdx +++ b/docs/vi/examples.mdx @@ -298,7 +298,7 @@ Cách thiết lập có tác động lớn nhất: commit `.failproofai/policies ## Các ví dụ khác -Thư mục [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) trong kho lưu trữ chứa: +Thư mục [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) trong kho lưu trữ chứa: | Tệp | Những gì nó cho thấy | |------|---------------| diff --git a/docs/vi/package-aliases.mdx b/docs/vi/package-aliases.mdx index ae2e3f76..069687b3 100644 --- a/docs/vi/package-aliases.mdx +++ b/docs/vi/package-aliases.mdx @@ -79,4 +79,4 @@ Proxy là một tập lệnh Node dài hai dòng; không có logic, không có c ## Nếu bạn tìm thấy một tên chúng tôi bỏ lỡ -Mở một issue tại [exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues) và chúng tôi sẽ đăng ký nó. \ No newline at end of file +Mở một issue tại [failproofai/failproofai](https://github.com/failproofai/failproofai/issues) và chúng tôi sẽ đăng ký nó. \ No newline at end of file diff --git a/docs/zh/examples.mdx b/docs/zh/examples.mdx index 78012511..45f081ed 100644 --- a/docs/zh/examples.mdx +++ b/docs/zh/examples.mdx @@ -298,7 +298,7 @@ git commit -m "Add failproofai team policies" ## 更多示例 -仓库中的 [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) 目录包含以下内容: +仓库中的 [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) 目录包含以下内容: | 文件 | 内容说明 | |------|---------------| diff --git a/docs/zh/package-aliases.mdx b/docs/zh/package-aliases.mdx index 76bc7ca8..2d0b994d 100644 --- a/docs/zh/package-aliases.mdx +++ b/docs/zh/package-aliases.mdx @@ -79,4 +79,4 @@ npm info failproof ## 如果您发现我们遗漏的名称 -请在 [exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues) 提交 Issue,我们会及时注册。 \ No newline at end of file +请在 [failproofai/failproofai](https://github.com/failproofai/failproofai/issues) 提交 Issue,我们会及时注册。 \ No newline at end of file diff --git a/package.json b/package.json index e8e0be98..466e3830 100644 --- a/package.json +++ b/package.json @@ -59,13 +59,13 @@ ], "author": "ExosphereHost Inc. ", "license": "SEE LICENSE IN LICENSE", - "homepage": "https://github.com/exospherehost/failproofai", + "homepage": "https://github.com/failproofai/failproofai", "repository": { "type": "git", - "url": "https://github.com/exospherehost/failproofai.git" + "url": "https://github.com/failproofai/failproofai.git" }, "bugs": { - "url": "https://github.com/exospherehost/failproofai/issues" + "url": "https://github.com/failproofai/failproofai/issues" }, "publishConfig": { "access": "public" diff --git a/scripts/launch.ts b/scripts/launch.ts index afe082d4..76a8f2e0 100644 --- a/scripts/launch.ts +++ b/scripts/launch.ts @@ -17,7 +17,7 @@ export function launch(mode: "dev" | "start"): void { // same column so the values form a clean right-hand column). console.log(`\n failproof ai\n`); console.log(` 📦 Version: ${version}`); - console.log(` ⭐ Star us: https://github.com/exospherehost/failproofai`); + console.log(` ⭐ Star us: https://github.com/failproofai/failproofai`); console.log(` 📖 Docs: https://befailproof.ai`); console.log(` 💬 Slack: https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ\n`); From b2b38c3acc257d13f2bdb6d25d9c1d5f66593f2e Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 20 May 2026 21:47:34 +0000 Subject: [PATCH 2/3] fix: remove orphan exospheresmall token from Next.js proxy matcher MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No asset named exospheresmall exists in public/, app/, or components/ — the matcher exemption was a leftover from the old org's branding. Removing it has no behavioral impact since the path doesn't exist. https://claude.ai/code/session_01KtaM2jJWogYSpNzp7ziMEa --- proxy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxy.ts b/proxy.ts index 291a919a..3e02be5a 100644 --- a/proxy.ts +++ b/proxy.ts @@ -20,5 +20,5 @@ export async function proxy(request: NextRequest): Promise { } export const config = { - matcher: ["/((?!_next/static|_next/image|favicon\\.ico|icon\\.png|exospheresmall).*)"], + matcher: ["/((?!_next/static|_next/image|favicon\\.ico|icon\\.png).*)"], }; From bb06cccd4b7fba36f1ac0250c2c6202459f53722 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 20 May 2026 21:49:24 +0000 Subject: [PATCH 3/3] =?UTF-8?q?feat!:=20rename=20DEFAULT=5FPOLICY=5FNAMESP?= =?UTF-8?q?ACE=20exospherehost=20=E2=86=92=20failproofai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BREAKING CHANGE: Default policy namespace for builtins is now `failproofai`. User configs that explicitly reference builtins as `exospherehost/` must update to `failproofai/`. Flat-name shorthand (e.g. `"sanitize-jwt"`) continues to work unchanged because `normalizePolicyName` auto-prepends the new default namespace. Includes: - src/hooks/policy-registry.ts: one-line constant change (the API surface) - src/hooks/policy-evaluator.ts + builtin-policies.ts: JSDoc/comment refresh - 48 test assertions across __tests__/hooks/{policy-registry,policy-evaluator,builtin-policies}.test.ts - docs/built-in-policies.mdx + 14 translations: 3 namespace mentions each - package.json: bump 0.0.11-beta.0 → 0.0.11-beta.1 - CHANGELOG.md: new 0.0.11-beta.1 section covering all three commits in this PR (URL rename, matcher cleanup, namespace rename) https://claude.ai/code/session_01KtaM2jJWogYSpNzp7ziMEa --- CHANGELOG.md | 11 +++++ __tests__/hooks/builtin-policies.test.ts | 12 +++--- __tests__/hooks/policy-evaluator.test.ts | 54 ++++++++++++------------ __tests__/hooks/policy-registry.test.ts | 30 ++++++------- docs/ar/built-in-policies.mdx | 6 +-- docs/built-in-policies.mdx | 6 +-- docs/de/built-in-policies.mdx | 6 +-- docs/es/built-in-policies.mdx | 6 +-- docs/fr/built-in-policies.mdx | 6 +-- docs/he/built-in-policies.mdx | 6 +-- docs/hi/built-in-policies.mdx | 6 +-- docs/it/built-in-policies.mdx | 6 +-- docs/ja/built-in-policies.mdx | 6 +-- docs/ko/built-in-policies.mdx | 6 +-- docs/pt-br/built-in-policies.mdx | 6 +-- docs/ru/built-in-policies.mdx | 6 +-- docs/tr/built-in-policies.mdx | 6 +-- docs/vi/built-in-policies.mdx | 6 +-- docs/zh/built-in-policies.mdx | 6 +-- package.json | 2 +- src/hooks/builtin-policies.ts | 2 +- src/hooks/policy-evaluator.ts | 6 +-- src/hooks/policy-registry.ts | 2 +- 23 files changed, 110 insertions(+), 99 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5597af94..19ba76c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## 0.0.11-beta.1 — 2026-05-20 + +### Breaking +- Default policy namespace renamed from `exospherehost` to `failproofai`. Configs that explicitly reference builtins as `exospherehost/` must update to `failproofai/`. Flat-name shorthand (e.g. `"sanitize-jwt"`) continues to work unchanged because it auto-resolves to the new default namespace. Builtin docs (EN + 14 translations) updated to show the new namespace. + +### Docs +- Rename GitHub org URLs across `package.json` metadata, README CI badge (EN + 14 translated READMEs), CONTRIBUTING, in-app "Star us" banners (`bin/failproofai.mjs`, `scripts/launch.ts`, navbar, reach-developers component), Mintlify `docs/docs.json`, and 30 translated docs (`package-aliases.mdx` issues link + `examples.mdx` repo-tree link) to reflect the `exospherehost` → `failproofai` org rename. X social handle in `docs/docs.json` updated from `x.com/exospherehost` to `x.com/failproofai`. + +### Fixes +- Remove orphan `exospheresmall` token from the Next.js proxy matcher in `proxy.ts` — no asset by that name exists in the repo. + ## 0.0.11-beta.0 — 2026-05-13 ### Docs diff --git a/__tests__/hooks/builtin-policies.test.ts b/__tests__/hooks/builtin-policies.test.ts index e0396590..b0effdcb 100644 --- a/__tests__/hooks/builtin-policies.test.ts +++ b/__tests__/hooks/builtin-policies.test.ts @@ -50,23 +50,23 @@ describe("hooks/builtin-policies", () => { const policies = getPoliciesForEvent("PreToolUse", "Bash"); expect(policies).toHaveLength(2); expect(policies.map((p) => p.name).sort()).toEqual([ - "exospherehost/block-rm-rf", - "exospherehost/block-sudo", + "failproofai/block-rm-rf", + "failproofai/block-sudo", ]); }); it("accepts qualified names in enabledPolicies (forward compat)", () => { - registerBuiltinPolicies(["exospherehost/block-sudo", "exospherehost/block-rm-rf"]); + registerBuiltinPolicies(["failproofai/block-sudo", "failproofai/block-rm-rf"]); const policies = getPoliciesForEvent("PreToolUse", "Bash"); expect(policies).toHaveLength(2); expect(policies.map((p) => p.name).sort()).toEqual([ - "exospherehost/block-rm-rf", - "exospherehost/block-sudo", + "failproofai/block-rm-rf", + "failproofai/block-sudo", ]); }); it("treats flat and qualified names as equivalent (mixed config works)", () => { - registerBuiltinPolicies(["block-sudo", "exospherehost/block-rm-rf"]); + registerBuiltinPolicies(["block-sudo", "failproofai/block-rm-rf"]); const policies = getPoliciesForEvent("PreToolUse", "Bash"); expect(policies).toHaveLength(2); }); diff --git a/__tests__/hooks/policy-evaluator.test.ts b/__tests__/hooks/policy-evaluator.test.ts index cd1e9d28..909a09a9 100644 --- a/__tests__/hooks/policy-evaluator.test.ts +++ b/__tests__/hooks/policy-evaluator.test.ts @@ -41,7 +41,7 @@ describe("hooks/policy-evaluator", () => { "Blocked Bash by failproofai because: blocked, as per the policy configured by the user", ); expect(parsed.hookSpecificOutput.hookEventName).toBe("PreToolUse"); - expect(result.policyName).toBe("exospherehost/blocker"); + expect(result.policyName).toBe("failproofai/blocker"); expect(result.reason).toBe("blocked"); }); @@ -60,7 +60,7 @@ describe("hooks/policy-evaluator", () => { expect(parsed.hookSpecificOutput.additionalContext).toBe( "Blocked Read by failproofai because: JWT found, as per the policy configured by the user", ); - expect(result.policyName).toBe("exospherehost/jwt-scrub"); + expect(result.policyName).toBe("failproofai/jwt-scrub"); expect(result.reason).toBe("JWT found"); }); @@ -114,8 +114,8 @@ describe("hooks/policy-evaluator", () => { expect(result.decision).toBe("instruct"); const parsed = JSON.parse(result.stdout); expect(parsed.hookSpecificOutput.additionalContext).toContain("You should try something else"); - expect(result.policyName).toBe("exospherehost/advisor"); - expect(result.policyNames).toEqual(["exospherehost/advisor"]); + expect(result.policyName).toBe("failproofai/advisor"); + expect(result.policyNames).toEqual(["failproofai/advisor"]); expect(result.reason).toBe("You should try something else"); }); @@ -131,7 +131,7 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("PreToolUse", { tool_name: "Bash" }); expect(result.decision).toBe("deny"); - expect(result.policyName).toBe("exospherehost/blocker"); + expect(result.policyName).toBe("failproofai/blocker"); const parsed = JSON.parse(result.stdout); expect(parsed.hookSpecificOutput.permissionDecision).toBe("deny"); }); @@ -172,7 +172,7 @@ describe("hooks/policy-evaluator", () => { expect(result.stdout).toBe(""); expect(result.stderr).toContain("MANDATORY ACTION REQUIRED"); expect(result.stderr).toContain("Unsatisfied intents remain"); - expect(result.policyName).toBe("exospherehost/verify"); + expect(result.policyName).toBe("failproofai/verify"); }); it("SubagentStop + instruct also returns exitCode 2 (Claude path mirrors Stop)", async () => { @@ -310,7 +310,7 @@ describe("hooks/policy-evaluator", () => { const parsed = JSON.parse(result.stdout) as { permission?: string; reason?: string }; expect(parsed.permission).toBe("deny"); expect(parsed.reason).toContain("MANDATORY ACTION REQUIRED"); - expect(parsed.reason).toContain("policy: exospherehost/verify"); + expect(parsed.reason).toContain("policy: failproofai/verify"); expect(parsed.reason).toContain("needs verification"); }); @@ -369,8 +369,8 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("PreToolUse", { tool_name: "Read" }); expect(result.decision).toBe("instruct"); - expect(result.policyName).toBe("exospherehost/first"); - expect(result.policyNames).toEqual(["exospherehost/first", "exospherehost/second"]); + expect(result.policyName).toBe("failproofai/first"); + expect(result.policyNames).toEqual(["failproofai/first", "failproofai/second"]); expect(result.reason).toBe("first warning\nsecond warning"); const parsed = JSON.parse(result.stdout); expect(parsed.hookSpecificOutput.additionalContext).toContain("first warning"); @@ -388,11 +388,11 @@ describe("hooks/policy-evaluator", () => { expect(result.exitCode).toBe(0); expect(result.decision).toBe("allow"); expect(result.reason).toBe("All checks passed"); - expect(result.policyName).toBe("exospherehost/info"); - expect(result.policyNames).toEqual(["exospherehost/info"]); + expect(result.policyName).toBe("failproofai/info"); + expect(result.policyNames).toEqual(["failproofai/info"]); const parsed = JSON.parse(result.stdout); expect(parsed.hookSpecificOutput.additionalContext).toBe("Note from failproofai: All checks passed"); - expect(result.stderr).toContain("[failproofai] exospherehost/info: All checks passed"); + expect(result.stderr).toContain("[failproofai] failproofai/info: All checks passed"); }); it("combines multiple allow messages with newline", async () => { @@ -408,12 +408,12 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("Stop", {}); expect(result.exitCode).toBe(0); expect(result.decision).toBe("allow"); - expect(result.policyName).toBe("exospherehost/info1"); - expect(result.policyNames).toEqual(["exospherehost/info1", "exospherehost/info2"]); + expect(result.policyName).toBe("failproofai/info1"); + expect(result.policyNames).toEqual(["failproofai/info1", "failproofai/info2"]); const parsed = JSON.parse(result.stdout); expect(parsed.reason).toBe("Commit check passed\nPush check passed"); - expect(result.stderr).toContain("[failproofai] exospherehost/info1: Commit check passed"); - expect(result.stderr).toContain("[failproofai] exospherehost/info2: Push check passed"); + expect(result.stderr).toContain("[failproofai] failproofai/info1: Commit check passed"); + expect(result.stderr).toContain("[failproofai] failproofai/info2: Push check passed"); }); it("returns empty stdout when allow has no reason (backward-compatible)", async () => { @@ -440,7 +440,7 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("PreToolUse", { tool_name: "Bash" }); expect(result.decision).toBe("deny"); - expect(result.policyName).toBe("exospherehost/blocker"); + expect(result.policyName).toBe("failproofai/blocker"); }); it("instruct takes precedence over allow with message", async () => { @@ -455,7 +455,7 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("PreToolUse", { tool_name: "Bash" }); expect(result.decision).toBe("instruct"); - expect(result.policyName).toBe("exospherehost/advisor"); + expect(result.policyName).toBe("failproofai/advisor"); }); }); @@ -512,7 +512,7 @@ describe("hooks/policy-evaluator", () => { it("flat policyParams key only matches default-namespace policies (not custom/myorg)", async () => { // A custom hook registered with a third-party namespace must NOT pick up // params keyed by the bare short name — that key belongs to the - // exospherehost/ builtin slot, not myorg/. + // failproofai/ builtin slot, not myorg/. let capturedHint: unknown = null; registerPolicy("myorg/foo", "desc", () => ({ decision: "deny", @@ -804,10 +804,10 @@ describe("hooks/policy-evaluator", () => { const parsed = JSON.parse(result.stdout) as { permission?: string; reason?: string }; expect(parsed.permission).toBe("deny"); expect(parsed.reason).toContain("MANDATORY ACTION REQUIRED"); - expect(parsed.reason).toContain("policy: exospherehost/stop-blocker"); + expect(parsed.reason).toContain("policy: failproofai/stop-blocker"); expect(parsed.reason).toContain("tests not run"); expect(result.decision).toBe("deny"); - expect(result.policyName).toBe("exospherehost/stop-blocker"); + expect(result.policyName).toBe("failproofai/stop-blocker"); expect(result.reason).toBe("tests not run"); }); @@ -876,7 +876,7 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("Stop", {}); expect(result.decision).toBe("deny"); - expect(result.policyName).toBe("exospherehost/require-commit"); + expect(result.policyName).toBe("failproofai/require-commit"); expect(policyCalls).toEqual(["commit"]); }); @@ -901,7 +901,7 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("Stop", {}); expect(result.exitCode).toBe(0); expect(result.decision).toBe("allow"); - expect(result.policyNames).toEqual(["exospherehost/wf-commit", "exospherehost/wf-push", "exospherehost/wf-pr", "exospherehost/wf-ci"]); + expect(result.policyNames).toEqual(["failproofai/wf-commit", "failproofai/wf-push", "failproofai/wf-pr", "failproofai/wf-ci"]); const parsed = JSON.parse(result.stdout); expect(parsed.reason).toContain("All changes committed"); expect(parsed.reason).toContain("All commits pushed"); @@ -921,7 +921,7 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("Stop", {}); expect(result.decision).toBe("deny"); - expect(result.policyName).toBe("exospherehost/wf-push"); + expect(result.policyName).toBe("failproofai/wf-push"); expect(result.reason).toBe("unpushed commits"); }); @@ -954,8 +954,8 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("Stop", {}); expect(result.exitCode).toBe(0); expect(result.decision).toBe("allow"); - expect(result.policyName).toBe("exospherehost/informative"); - expect(result.policyNames).toEqual(["exospherehost/informative"]); + expect(result.policyName).toBe("failproofai/informative"); + expect(result.policyNames).toEqual(["failproofai/informative"]); const parsed = JSON.parse(result.stdout); expect(parsed.reason).toBe("CI is green"); }); @@ -971,7 +971,7 @@ describe("hooks/policy-evaluator", () => { const result = await evaluatePolicies("Stop", {}); expect(result.decision).toBe("deny"); - expect(result.policyName).toBe("exospherehost/checker"); + expect(result.policyName).toBe("failproofai/checker"); }); }); diff --git a/__tests__/hooks/policy-registry.test.ts b/__tests__/hooks/policy-registry.test.ts index 1aadd5e0..f0977e32 100644 --- a/__tests__/hooks/policy-registry.test.ts +++ b/__tests__/hooks/policy-registry.test.ts @@ -17,7 +17,7 @@ describe("hooks/policy-registry", () => { registerPolicy("test", "desc", () => ({ decision: "allow" }), { events: ["PreToolUse"] }); const policies = getPoliciesForEvent("PreToolUse"); expect(policies).toHaveLength(1); - expect(policies[0].name).toBe("exospherehost/test"); + expect(policies[0].name).toBe("failproofai/test"); }); it("upserts by name", () => { @@ -33,9 +33,9 @@ describe("hooks/policy-registry", () => { registerPolicy("post", "desc", () => ({ decision: "allow" }), { events: ["PostToolUse"] }); expect(getPoliciesForEvent("PreToolUse")).toHaveLength(1); - expect(getPoliciesForEvent("PreToolUse")[0].name).toBe("exospherehost/pre"); + expect(getPoliciesForEvent("PreToolUse")[0].name).toBe("failproofai/pre"); expect(getPoliciesForEvent("PostToolUse")).toHaveLength(1); - expect(getPoliciesForEvent("PostToolUse")[0].name).toBe("exospherehost/post"); + expect(getPoliciesForEvent("PostToolUse")[0].name).toBe("failproofai/post"); }); it("filters by tool name", () => { @@ -52,7 +52,7 @@ describe("hooks/policy-registry", () => { const readPolicies = getPoliciesForEvent("PreToolUse", "Read"); expect(readPolicies).toHaveLength(1); - expect(readPolicies[0].name).toBe("exospherehost/any-tool"); + expect(readPolicies[0].name).toBe("failproofai/any-tool"); }); it("sorts by priority (higher first)", () => { @@ -62,9 +62,9 @@ describe("hooks/policy-registry", () => { const policies = getPoliciesForEvent("PreToolUse"); expect(policies.map((p) => p.name)).toEqual([ - "exospherehost/high", - "exospherehost/mid", - "exospherehost/low", + "failproofai/high", + "failproofai/mid", + "failproofai/low", ]); }); @@ -90,27 +90,27 @@ describe("hooks/policy-registry", () => { }); describe("namespace canonicalization", () => { - it("DEFAULT_POLICY_NAMESPACE is exospherehost", () => { - expect(DEFAULT_POLICY_NAMESPACE).toBe("exospherehost"); + it("DEFAULT_POLICY_NAMESPACE is failproofai", () => { + expect(DEFAULT_POLICY_NAMESPACE).toBe("failproofai"); }); it("normalizePolicyName prepends default namespace to flat names", () => { - expect(normalizePolicyName("foo")).toBe("exospherehost/foo"); - expect(normalizePolicyName("sanitize-jwt")).toBe("exospherehost/sanitize-jwt"); + expect(normalizePolicyName("foo")).toBe("failproofai/foo"); + expect(normalizePolicyName("sanitize-jwt")).toBe("failproofai/sanitize-jwt"); }); it("normalizePolicyName leaves already-namespaced names untouched", () => { - expect(normalizePolicyName("exospherehost/foo")).toBe("exospherehost/foo"); + expect(normalizePolicyName("failproofai/foo")).toBe("failproofai/foo"); expect(normalizePolicyName("myorg/bar")).toBe("myorg/bar"); expect(normalizePolicyName("custom/hook")).toBe("custom/hook"); }); it("registering a flat name and a qualified name for the same policy upserts (not duplicates)", () => { registerPolicy("dup", "first", () => ({ decision: "allow" }), { events: ["PreToolUse"] }); - registerPolicy("exospherehost/dup", "second", () => ({ decision: "allow" }), { events: ["PreToolUse"] }); + registerPolicy("failproofai/dup", "second", () => ({ decision: "allow" }), { events: ["PreToolUse"] }); const policies = getPoliciesForEvent("PreToolUse"); expect(policies).toHaveLength(1); - expect(policies[0].name).toBe("exospherehost/dup"); + expect(policies[0].name).toBe("failproofai/dup"); expect(policies[0].description).toBe("second"); }); @@ -118,7 +118,7 @@ describe("hooks/policy-registry", () => { registerPolicy("foo", "builtin", () => ({ decision: "allow" }), { events: ["PreToolUse"] }); registerPolicy("myorg/foo", "custom", () => ({ decision: "allow" }), { events: ["PreToolUse"] }); const policies = getPoliciesForEvent("PreToolUse"); - expect(policies.map((p) => p.name).sort()).toEqual(["exospherehost/foo", "myorg/foo"]); + expect(policies.map((p) => p.name).sort()).toEqual(["failproofai/foo", "myorg/foo"]); }); }); }); diff --git a/docs/ar/built-in-policies.mdx b/docs/ar/built-in-policies.mdx index b42b7e63..2e9693f5 100644 --- a/docs/ar/built-in-policies.mdx +++ b/docs/ar/built-in-policies.mdx @@ -33,7 +33,7 @@ icon: shield ### الفراغات الاسمية تعيش كل سياسة في فتحة `/`. تنتمي السياسات المدمجة إلى -الفراغ الاسمي **`exospherehost/`** — على سبيل المثال، `exospherehost/sanitize-jwt`. يمنع الفراغ الاسمي +الفراغ الاسمي **`failproofai/`** — على سبيل المثال، `failproofai/sanitize-jwt`. يمنع الفراغ الاسمي التصادمات عندما تحمل أيضاً سياسات مخصصة أو من طرف ثالث بأسماء قصيرة مشابهة. @@ -44,13 +44,13 @@ icon: shield { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` إذا لم يكن لاسم أي `/`، يتعامل failproofai معه كأنه ينتمي إلى الفراغ الاسمي الافتراضي -`exospherehost`. الأسماء التي تحتوي بالفعل على `/` (مثل `myorg/foo`, +`failproofai`. الأسماء التي تحتوي بالفعل على `/` (مثل `myorg/foo`, `custom/my-hook`) تُحتفظ بها كما هي. - **`require-`** — إيقاف حدث Stop حتى تتحقق الشروط. diff --git a/docs/built-in-policies.mdx b/docs/built-in-policies.mdx index 1542579a..845d20e4 100644 --- a/docs/built-in-policies.mdx +++ b/docs/built-in-policies.mdx @@ -32,7 +32,7 @@ Policies are grouped into categories: ### Namespaces Every policy lives in a `/` slot. Built-in policies belong to the -**`exospherehost/`** namespace — for example, `exospherehost/sanitize-jwt`. The +**`failproofai/`** namespace — for example, `failproofai/sanitize-jwt`. The namespace prevents collisions when you also load custom or third-party policies with similar short names. @@ -43,13 +43,13 @@ qualified name; both forms resolve to the same policy: { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` If a name has no `/`, failproofai treats it as belonging to the default -namespace `exospherehost`. Names that already contain a `/` (e.g. `myorg/foo`, +namespace `failproofai`. Names that already contain a `/` (e.g. `myorg/foo`, `custom/my-hook`) are kept as-is. - **`require-`** — block the Stop event until conditions are met. diff --git a/docs/de/built-in-policies.mdx b/docs/de/built-in-policies.mdx index eca00dfb..6f498e3a 100644 --- a/docs/de/built-in-policies.mdx +++ b/docs/de/built-in-policies.mdx @@ -32,7 +32,7 @@ Richtlinien sind in Kategorien gruppiert: ### Namespaces Jede Richtlinie befindet sich in einem `/`-Slot. Integrierte Richtlinien gehören zum -**`exospherehost/`**-Namespace — zum Beispiel `exospherehost/sanitize-jwt`. Der +**`failproofai/`**-Namespace — zum Beispiel `failproofai/sanitize-jwt`. Der Namespace verhindert Kollisionen, wenn Sie auch benutzerdefinierte oder Drittanbieter-Richtlinien mit ähnlichen Kurznamen laden. @@ -43,13 +43,13 @@ qualifizierten Namen verweisen; beide Formen werden zur selben Richtlinie aufgel { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` Enthält ein Name kein `/`, behandelt failproofai ihn als zum Standard-Namespace -`exospherehost` gehörend. Namen, die bereits ein `/` enthalten (z. B. `myorg/foo`, +`failproofai` gehörend. Namen, die bereits ein `/` enthalten (z. B. `myorg/foo`, `custom/my-hook`), werden unverändert übernommen. - **`require-`** — blockiert das Stop-Ereignis, bis die Bedingungen erfüllt sind. diff --git a/docs/es/built-in-policies.mdx b/docs/es/built-in-policies.mdx index a44e4f73..db59ee47 100644 --- a/docs/es/built-in-policies.mdx +++ b/docs/es/built-in-policies.mdx @@ -32,7 +32,7 @@ Las políticas se agrupan en categorías: ### Espacios de nombres Cada política ocupa un lugar `/`. Las políticas integradas pertenecen al -espacio de nombres **`exospherehost/`** — por ejemplo, `exospherehost/sanitize-jwt`. El +espacio de nombres **`failproofai/`** — por ejemplo, `failproofai/sanitize-jwt`. El espacio de nombres evita colisiones cuando también se cargan políticas personalizadas o de terceros con nombres cortos similares. @@ -43,13 +43,13 @@ por su nombre calificado; ambas formas resuelven a la misma política: { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` Si un nombre no contiene `/`, failproofai lo trata como perteneciente al espacio de nombres -predeterminado `exospherehost`. Los nombres que ya contienen `/` (por ejemplo, `myorg/foo`, +predeterminado `failproofai`. Los nombres que ya contienen `/` (por ejemplo, `myorg/foo`, `custom/my-hook`) se mantienen tal cual. - **`require-`** — bloquea el evento Stop hasta que se cumplan las condiciones. diff --git a/docs/fr/built-in-policies.mdx b/docs/fr/built-in-policies.mdx index 20316cc7..431a7cc7 100644 --- a/docs/fr/built-in-policies.mdx +++ b/docs/fr/built-in-policies.mdx @@ -31,7 +31,7 @@ Les politiques sont regroupées par catégories : ### Espaces de noms -Chaque politique occupe un emplacement `/`. Les politiques intégrées appartiennent à l'espace de noms **`exospherehost/`** — par exemple, `exospherehost/sanitize-jwt`. L'espace de noms évite les collisions lorsque vous chargez également des politiques personnalisées ou tierces ayant des noms courts similaires. +Chaque politique occupe un emplacement `/`. Les politiques intégrées appartiennent à l'espace de noms **`failproofai/`** — par exemple, `failproofai/sanitize-jwt`. L'espace de noms évite les collisions lorsque vous chargez également des politiques personnalisées ou tierces ayant des noms courts similaires. Dans votre configuration, vous pouvez faire référence à une politique intégrée soit par son nom court, soit par son nom qualifié ; les deux formes résolvent vers la même politique : @@ -39,12 +39,12 @@ Dans votre configuration, vous pouvez faire référence à une politique intégr { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -Si un nom ne contient pas de `/`, failproofai le considère comme appartenant à l'espace de noms par défaut `exospherehost`. Les noms qui contiennent déjà un `/` (ex. `myorg/foo`, `custom/my-hook`) sont conservés tels quels. +Si un nom ne contient pas de `/`, failproofai le considère comme appartenant à l'espace de noms par défaut `failproofai`. Les noms qui contiennent déjà un `/` (ex. `myorg/foo`, `custom/my-hook`) sont conservés tels quels. - **`require-`** — bloque l'événement Stop jusqu'à ce que les conditions soient remplies. --- diff --git a/docs/he/built-in-policies.mdx b/docs/he/built-in-policies.mdx index 55ec7bff..3eca7897 100644 --- a/docs/he/built-in-policies.mdx +++ b/docs/he/built-in-policies.mdx @@ -33,7 +33,7 @@ failproofai מגיע עם 39 מדיניות מובנות שתופסות מצבי ### שמות קבוצה כל מדיניות נמצאת בחריץ `/`. מדיניות מובנות שייכות -לשם קבוצה **`exospherehost/`** — לדוגמה, `exospherehost/sanitize-jwt`. שם הקבוצה +לשם קבוצה **`failproofai/`** — לדוגמה, `failproofai/sanitize-jwt`. שם הקבוצה מונע התנגשויות כאשר אתה גם טוען מדיניות מותאמות או של צד שלישי עם שמות קצרים דומים. @@ -44,13 +44,13 @@ failproofai מגיע עם 39 מדיניות מובנות שתופסות מצבי { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` אם לשם אין `/`, failproofai מתייחס אליו כשייך לשם הקבוצה הברירת המחדל -`exospherehost`. שמות שכבר מכילים `/` (לדוגמה `myorg/foo`, +`failproofai`. שמות שכבר מכילים `/` (לדוגמה `myorg/foo`, `custom/my-hook`) נשמרים כפי שהם. - **`require-`** — חסום את אירוע העצירה עד למילוי התנאים. diff --git a/docs/hi/built-in-policies.mdx b/docs/hi/built-in-policies.mdx index 76cf0948..b8e0fa2e 100644 --- a/docs/hi/built-in-policies.mdx +++ b/docs/hi/built-in-policies.mdx @@ -31,7 +31,7 @@ failproofai 39 निर्मित नीतियों के साथ आ ### नेमस्पेस -प्रत्येक नीति एक `/` स्लॉट में रहती है। निर्मित नीतियां **`exospherehost/`** नेमस्पेस से संबंधित हैं — उदाहरण के लिए, `exospherehost/sanitize-jwt`। नेमस्पेस उस समय टकराव को रोकता है जब आप समान छोटे नामों वाली कस्टम या तीसरे पक्ष की नीतियों को भी लोड करते हैं। +प्रत्येक नीति एक `/` स्लॉट में रहती है। निर्मित नीतियां **`failproofai/`** नेमस्पेस से संबंधित हैं — उदाहरण के लिए, `failproofai/sanitize-jwt`। नेमस्पेस उस समय टकराव को रोकता है जब आप समान छोटे नामों वाली कस्टम या तीसरे पक्ष की नीतियों को भी लोड करते हैं। आपके कॉन्फ़िगरेशन में आप एक निर्मित को या तो इसके छोटे नाम से या इसके योग्य नाम से संदर्भित कर सकते हैं; दोनों रूप एक ही नीति को हल करते हैं: @@ -39,12 +39,12 @@ failproofai 39 निर्मित नीतियों के साथ आ { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -यदि किसी नाम में कोई `/` नहीं है, तो failproofai इसे डिफ़ॉल्ट नेमस्पेस `exospherehost` से संबंधित मानता है। ऐसे नाम जिनमें पहले से ही `/` है (उदाहरण के लिए `myorg/foo`, `custom/my-hook`) जैसे हैं वैसे ही रखे जाते हैं। +यदि किसी नाम में कोई `/` नहीं है, तो failproofai इसे डिफ़ॉल्ट नेमस्पेस `failproofai` से संबंधित मानता है। ऐसे नाम जिनमें पहले से ही `/` है (उदाहरण के लिए `myorg/foo`, `custom/my-hook`) जैसे हैं वैसे ही रखे जाते हैं। - **`require-`** — Stop ईवेंट को तब तक ब्लॉक करता है जब तक शर्तें पूरी न हों। --- diff --git a/docs/it/built-in-policies.mdx b/docs/it/built-in-policies.mdx index 0c1bfd49..41953591 100644 --- a/docs/it/built-in-policies.mdx +++ b/docs/it/built-in-policies.mdx @@ -32,7 +32,7 @@ Le politiche sono raggruppate in categorie: ### Namespace Ogni politica risiede in uno slot `/`. Le politiche integrate appartengono allo -spazio dei nomi **`exospherehost/`** — ad esempio, `exospherehost/sanitize-jwt`. Lo +spazio dei nomi **`failproofai/`** — ad esempio, `failproofai/sanitize-jwt`. Lo spazio dei nomi previene collisioni quando carichi anche politiche personalizzate o di terze parti con nomi brevi simili. @@ -43,13 +43,13 @@ nome qualificato; entrambe le forme si risolvono nella stessa politica: { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` Se un nome non ha `/`, failproofai lo tratta come appartenente allo spazio dei nomi predefinito -`exospherehost`. I nomi che contengono già un `/` (ad esempio `myorg/foo`, +`failproofai`. I nomi che contengono già un `/` (ad esempio `myorg/foo`, `custom/my-hook`) vengono mantenuti così come sono. - **`require-`** — blocca l'evento Stop finché le condizioni non sono soddisfatte. diff --git a/docs/ja/built-in-policies.mdx b/docs/ja/built-in-policies.mdx index 70a6eed9..ac8de9c1 100644 --- a/docs/ja/built-in-policies.mdx +++ b/docs/ja/built-in-policies.mdx @@ -31,7 +31,7 @@ failproofai には、エージェントの一般的な障害モードを検出 ### 名前空間 -すべてのポリシーは `/` のスロットに存在します。組み込みポリシーは **`exospherehost/`** 名前空間に属します(例:`exospherehost/sanitize-jwt`)。この名前空間により、類似した短い名前を持つカスタムポリシーやサードパーティポリシーを読み込む際の衝突を防ぎます。 +すべてのポリシーは `/` のスロットに存在します。組み込みポリシーは **`failproofai/`** 名前空間に属します(例:`failproofai/sanitize-jwt`)。この名前空間により、類似した短い名前を持つカスタムポリシーやサードパーティポリシーを読み込む際の衝突を防ぎます。 設定ファイルでは、組み込みポリシーを短い名前または完全修飾名のどちらでも参照できます。どちらの形式も同じポリシーに解決されます: @@ -39,12 +39,12 @@ failproofai には、エージェントの一般的な障害モードを検出 { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -名前に `/` が含まれない場合、failproofai はデフォルト名前空間 `exospherehost` に属するものとして扱います。すでに `/` を含む名前(例:`myorg/foo`、`custom/my-hook`)はそのまま保持されます。 +名前に `/` が含まれない場合、failproofai はデフォルト名前空間 `failproofai` に属するものとして扱います。すでに `/` を含む名前(例:`myorg/foo`、`custom/my-hook`)はそのまま保持されます。 - **`require-`** — 条件が満たされるまで Stop イベントをブロックします。 --- diff --git a/docs/ko/built-in-policies.mdx b/docs/ko/built-in-policies.mdx index 725df0d4..55bacbe4 100644 --- a/docs/ko/built-in-policies.mdx +++ b/docs/ko/built-in-policies.mdx @@ -31,7 +31,7 @@ failproofai에는 에이전트의 일반적인 실패 패턴을 잡아내는 39 ### 네임스페이스 -모든 정책은 `/` 슬롯에 위치합니다. 내장 정책은 **`exospherehost/`** 네임스페이스에 속합니다 — 예를 들어 `exospherehost/sanitize-jwt`와 같습니다. 네임스페이스는 유사한 짧은 이름을 가진 커스텀 또는 서드파티 정책을 함께 로드할 때 충돌을 방지합니다. +모든 정책은 `/` 슬롯에 위치합니다. 내장 정책은 **`failproofai/`** 네임스페이스에 속합니다 — 예를 들어 `failproofai/sanitize-jwt`와 같습니다. 네임스페이스는 유사한 짧은 이름을 가진 커스텀 또는 서드파티 정책을 함께 로드할 때 충돌을 방지합니다. 설정 파일에서 내장 정책은 짧은 이름 또는 전체 이름 중 어느 것으로도 참조할 수 있으며, 두 형태 모두 동일한 정책으로 확인됩니다: @@ -39,12 +39,12 @@ failproofai에는 에이전트의 일반적인 실패 패턴을 잡아내는 39 { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -이름에 `/`가 없으면, failproofai는 기본 네임스페이스인 `exospherehost`에 속하는 것으로 처리합니다. 이미 `/`를 포함하는 이름(예: `myorg/foo`, `custom/my-hook`)은 그대로 유지됩니다. +이름에 `/`가 없으면, failproofai는 기본 네임스페이스인 `failproofai`에 속하는 것으로 처리합니다. 이미 `/`를 포함하는 이름(예: `myorg/foo`, `custom/my-hook`)은 그대로 유지됩니다. - **`require-`** — 조건이 충족될 때까지 Stop 이벤트를 차단합니다. --- diff --git a/docs/pt-br/built-in-policies.mdx b/docs/pt-br/built-in-policies.mdx index f1e147ca..0dc317fd 100644 --- a/docs/pt-br/built-in-policies.mdx +++ b/docs/pt-br/built-in-policies.mdx @@ -31,7 +31,7 @@ As políticas são agrupadas em categorias: ### Namespaces -Cada política ocupa um slot `/`. As políticas integradas pertencem ao namespace **`exospherehost/`** — por exemplo, `exospherehost/sanitize-jwt`. O namespace evita colisões quando você também carrega políticas personalizadas ou de terceiros com nomes curtos semelhantes. +Cada política ocupa um slot `/`. As políticas integradas pertencem ao namespace **`failproofai/`** — por exemplo, `failproofai/sanitize-jwt`. O namespace evita colisões quando você também carrega políticas personalizadas ou de terceiros com nomes curtos semelhantes. Na sua configuração, você pode referenciar uma política integrada pelo nome curto ou pelo nome qualificado; ambas as formas resolvem para a mesma política: @@ -39,12 +39,12 @@ Na sua configuração, você pode referenciar uma política integrada pelo nome { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -Se um nome não contiver `/`, failproofai o trata como pertencente ao namespace padrão `exospherehost`. Nomes que já contêm `/` (ex.: `myorg/foo`, `custom/my-hook`) são mantidos como estão. +Se um nome não contiver `/`, failproofai o trata como pertencente ao namespace padrão `failproofai`. Nomes que já contêm `/` (ex.: `myorg/foo`, `custom/my-hook`) são mantidos como estão. - **`require-`** — bloqueia o evento Stop até que as condições sejam atendidas. --- diff --git a/docs/ru/built-in-policies.mdx b/docs/ru/built-in-policies.mdx index 3eced6a6..b7c8c53c 100644 --- a/docs/ru/built-in-policies.mdx +++ b/docs/ru/built-in-policies.mdx @@ -31,7 +31,7 @@ failproofai поставляется с 39 встроенными политик ### Пространства имён -Каждая политика находится в слоте `/`. Встроенные политики относятся к пространству имён **`exospherehost/`** — например, `exospherehost/sanitize-jwt`. Пространство имён предотвращает конфликты при загрузке пользовательских или сторонних политик с похожими короткими названиями. +Каждая политика находится в слоте `/`. Встроенные политики относятся к пространству имён **`failproofai/`** — например, `failproofai/sanitize-jwt`. Пространство имён предотвращает конфликты при загрузке пользовательских или сторонних политик с похожими короткими названиями. В вашей конфигурации вы можете ссылаться на встроенную политику либо по короткому имени, либо по полному имени; обе формы разрешаются на одну и ту же политику: @@ -39,12 +39,12 @@ failproofai поставляется с 39 встроенными политик { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -Если имя не содержит `/`, failproofai рассматривает его как принадлежащее пространству имён по умолчанию `exospherehost`. Имена, которые уже содержат `/` (например `myorg/foo`, `custom/my-hook`), оставляются без изменений. +Если имя не содержит `/`, failproofai рассматривает его как принадлежащее пространству имён по умолчанию `failproofai`. Имена, которые уже содержат `/` (например `myorg/foo`, `custom/my-hook`), оставляются без изменений. - **`require-`** — заблокировать событие Stop до выполнения условий. --- diff --git a/docs/tr/built-in-policies.mdx b/docs/tr/built-in-policies.mdx index bc5bc117..7e9cf2cc 100644 --- a/docs/tr/built-in-policies.mdx +++ b/docs/tr/built-in-policies.mdx @@ -31,7 +31,7 @@ Politikalar kategorilere ayrılır: ### Ad Alanları -Her politika bir `/` yuvasında yer alır. Yerleşik politikalar **`exospherehost/`** ad alanına aittir — örneğin, `exospherehost/sanitize-jwt`. Ad alanı, benzer kısa adlara sahip özel veya üçüncü taraf politikaları yüklediğinizde çakışmaları önler. +Her politika bir `/` yuvasında yer alır. Yerleşik politikalar **`failproofai/`** ad alanına aittir — örneğin, `failproofai/sanitize-jwt`. Ad alanı, benzer kısa adlara sahip özel veya üçüncü taraf politikaları yüklediğinizde çakışmaları önler. Yapılandırmanızda yerleşik bir politikaya kısa adı veya tam nitelikli adı ile başvurabilirsiniz; her iki form aynı politikaya çözümlenir: @@ -39,12 +39,12 @@ Yapılandırmanızda yerleşik bir politikaya kısa adı veya tam nitelikli adı { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -Bir ad `/` içermiyorsa, failproofai bunu varsayılan ad alanı `exospherehost` olarak ele alır. Zaten `/` içeren adlar (ör. `myorg/foo`, `custom/my-hook`) olduğu gibi kalır. +Bir ad `/` içermiyorsa, failproofai bunu varsayılan ad alanı `failproofai` olarak ele alır. Zaten `/` içeren adlar (ör. `myorg/foo`, `custom/my-hook`) olduğu gibi kalır. - **`require-`** — Stop olayını koşullar karşılanana kadar engelle. --- diff --git a/docs/vi/built-in-policies.mdx b/docs/vi/built-in-policies.mdx index 7f0a7658..6121b06f 100644 --- a/docs/vi/built-in-policies.mdx +++ b/docs/vi/built-in-policies.mdx @@ -33,7 +33,7 @@ Các chính sách được nhóm thành các danh mục: ### Không gian tên -Mỗi chính sách nằm trong một slot `/`. Các chính sách tích hợp sẵn thuộc về không gian tên **`exospherehost/`** — ví dụ, `exospherehost/sanitize-jwt`. Không gian tên ngăn chặn xung đột khi bạn cũng tải các chính sách tùy chỉnh hoặc bên thứ ba có tên ngắn tương tự. +Mỗi chính sách nằm trong một slot `/`. Các chính sách tích hợp sẵn thuộc về không gian tên **`failproofai/`** — ví dụ, `failproofai/sanitize-jwt`. Không gian tên ngăn chặn xung đột khi bạn cũng tải các chính sách tùy chỉnh hoặc bên thứ ba có tên ngắn tương tự. Trong cấu hình của bạn, bạn có thể tham chiếu đến một chính sách tích hợp sẵn bằng tên ngắn hoặc tên đủ điều kiện; cả hai hình thức đều phân giải thành cùng một chính sách: @@ -41,12 +41,12 @@ Trong cấu hình của bạn, bạn có thể tham chiếu đến một chính { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -Nếu tên không có `/`, failproofai coi nó thuộc về không gian tên mặc định `exospherehost`. Tên đã chứa `/` (ví dụ `myorg/foo`, `custom/my-hook`) được giữ nguyên. +Nếu tên không có `/`, failproofai coi nó thuộc về không gian tên mặc định `failproofai`. Tên đã chứa `/` (ví dụ `myorg/foo`, `custom/my-hook`) được giữ nguyên. - **`require-`** — chặn sự kiện Stop cho đến khi các điều kiện được đáp ứng. --- diff --git a/docs/zh/built-in-policies.mdx b/docs/zh/built-in-policies.mdx index 48649c1d..0276b3dd 100644 --- a/docs/zh/built-in-policies.mdx +++ b/docs/zh/built-in-policies.mdx @@ -31,7 +31,7 @@ failproofai 内置了 39 个策略,用于捕获常见的 Agent 故障模式。 ### 命名空间 -每个策略都位于 `/` 插槽中。内置策略属于 **`exospherehost/`** 命名空间——例如 `exospherehost/sanitize-jwt`。命名空间可防止在同时加载具有相似短名称的自定义或第三方策略时发生冲突。 +每个策略都位于 `/` 插槽中。内置策略属于 **`failproofai/`** 命名空间——例如 `failproofai/sanitize-jwt`。命名空间可防止在同时加载具有相似短名称的自定义或第三方策略时发生冲突。 在配置中,你可以通过短名称或完整限定名称来引用内置策略;两种形式都解析到同一个策略: @@ -39,12 +39,12 @@ failproofai 内置了 39 个策略,用于捕获常见的 Agent 故障模式。 { "enabledPolicies": [ "sanitize-jwt", - "exospherehost/block-rm-rf" + "failproofai/block-rm-rf" ] } ``` -如果名称中不含 `/`,failproofai 会将其视为属于默认命名空间 `exospherehost`。已包含 `/` 的名称(例如 `myorg/foo`、`custom/my-hook`)将保持原样。 +如果名称中不含 `/`,failproofai 会将其视为属于默认命名空间 `failproofai`。已包含 `/` 的名称(例如 `myorg/foo`、`custom/my-hook`)将保持原样。 - **`require-`** — 阻止 Stop 事件,直到满足条件为止。 --- diff --git a/package.json b/package.json index 466e3830..eb33b1d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "failproofai", - "version": "0.0.11-beta.0", + "version": "0.0.11-beta.1", "description": "The easiest way to manage policies that keep your AI agents reliable, on-task, and running autonomously — for Claude Code & the Agents SDK", "bin": { "failproofai": "./dist/cli.mjs" diff --git a/src/hooks/builtin-policies.ts b/src/hooks/builtin-policies.ts index 7749b9b3..40418a92 100644 --- a/src/hooks/builtin-policies.ts +++ b/src/hooks/builtin-policies.ts @@ -1959,7 +1959,7 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [ ]; export function registerBuiltinPolicies(enabledNames: string[]): void { - // Tolerate both flat ("sanitize-jwt") and qualified ("exospherehost/sanitize-jwt") + // Tolerate both flat ("sanitize-jwt") and qualified ("failproofai/sanitize-jwt") // forms in the user's enabledPolicies config — canonicalize both sides. const enabledSet = new Set(enabledNames.map(normalizePolicyName)); for (const policy of BUILTIN_POLICIES) { diff --git a/src/hooks/policy-evaluator.ts b/src/hooks/policy-evaluator.ts index bb6f143f..a4a6cf5b 100644 --- a/src/hooks/policy-evaluator.ts +++ b/src/hooks/policy-evaluator.ts @@ -35,11 +35,11 @@ const POLICY_PARAMS_MAP = new Map( /** * Look up policy params for a canonical policy name in the user config, * tolerating either flat ("block-force-push") or qualified - * ("exospherehost/block-force-push") config keys for built-in policies. + * ("failproofai/block-force-push") config keys for built-in policies. * * The flat-key fallback is intentionally limited to the default namespace * so namespace isolation is preserved: `policyParams.foo` only matches - * `exospherehost/foo`, never `myorg/foo` or `custom/foo`. + * `failproofai/foo`, never `myorg/foo` or `custom/foo`. */ function getConfigParamsFor( config: HooksConfig | undefined, @@ -87,7 +87,7 @@ export async function evaluatePolicies( for (const policy of policies) { // Inject params: merge policyParams[policy.name] over schema defaults. - // policy.name is canonical (e.g. "exospherehost/block-force-push"); user + // policy.name is canonical (e.g. "failproofai/block-force-push"); user // config keys may be flat or canonical — getConfigParamsFor accepts both. const schema = POLICY_PARAMS_MAP.get(policy.name); let ctx: PolicyContext; diff --git a/src/hooks/policy-registry.ts b/src/hooks/policy-registry.ts index 187e1d9a..a0a57a4a 100644 --- a/src/hooks/policy-registry.ts +++ b/src/hooks/policy-registry.ts @@ -16,7 +16,7 @@ const INDEX_CACHE_KEY = "__FAILPROOFAI_POLICY_INDEX_CACHE__"; * `/` prefix. Builtins live under this namespace; custom hooks * loaded by the handler get their own prefixes (e.g. `custom/foo`). */ -export const DEFAULT_POLICY_NAMESPACE = "exospherehost"; +export const DEFAULT_POLICY_NAMESPACE = "failproofai"; /** * Canonicalize a policy name. If the name already contains a `/`, it is