{
    "generated_by": "bin/hooks.php \u2014 do not edit, regenerate",
    "count": 70,
    "hooks": [
        {
            "hook": "airanksuite/crawler_controls/bots",
            "type": "filter",
            "args": "array $bots",
            "desc": "Filter the AI bot registry.",
            "module": "AI crawlers",
            "sources": [
                "src/Modules/CrawlerControls/CrawlerControlsModule.php:89"
            ]
        },
        {
            "hook": "airanksuite/ai/knowledge",
            "type": "filter",
            "args": "string $text",
            "desc": "Filters the briefing prepended to every AI system prompt.",
            "module": "AI engine",
            "sources": [
                "src/Modules/Ai/Services/Knowledge.php:64"
            ]
        },
        {
            "hook": "airanksuite/ai/pricing",
            "type": "filter",
            "args": "array $table",
            "desc": "Filters the per-model price table (USD per 1M tokens, [input, output]).",
            "module": "AI engine",
            "sources": [
                "src/Modules/Ai/Services/Pricing.php:84"
            ]
        },
        {
            "hook": "airanksuite/ai/prompts",
            "type": "filter",
            "args": "array $prompts",
            "desc": "Filters the prompt registry. Add-ons may add prompts; changing a built-in prompt's wording should bump its version.",
            "module": "AI engine",
            "sources": [
                "src/Modules/Ai/Services/Prompts.php:337"
            ]
        },
        {
            "hook": "airanksuite/ai/providers",
            "type": "filter",
            "args": "array $list",
            "desc": "Filter the AI provider catalog.",
            "module": "AI engine",
            "sources": [
                "src/Modules/Ai/Services/Providers.php:430"
            ]
        },
        {
            "hook": "airanksuite/ai/request_body",
            "type": "filter",
            "args": "array $body, string $provider",
            "desc": "Filter the outgoing chat-completion payload.",
            "module": "AI engine",
            "sources": [
                "src/Modules/Ai/Services/AiClient.php:449"
            ]
        },
        {
            "hook": "airanksuite/ai/timeout",
            "type": "filter",
            "args": "int $timeout, string $provider",
            "desc": "Filters the HTTP timeout for AI provider calls, in seconds.",
            "module": "AI engine",
            "sources": [
                "src/Modules/Ai/Services/AiClient.php:365"
            ]
        },
        {
            "hook": "airanksuite/geo_score/weights",
            "type": "filter",
            "args": "array $weights",
            "desc": "Filter the weight each dimension carries in the overall AI score \u2014 a schema-heavy agency can make Schema count double.",
            "module": "AI score",
            "sources": [
                "src/Modules/GeoScore/Services/ScoreCalculator.php:50"
            ]
        },
        {
            "hook": "airanksuite/htaccess/path",
            "type": "filter",
            "args": "string $path",
            "desc": "Filter the .htaccess path.",
            "module": "Advanced",
            "sources": [
                "src/Modules/Advanced/Services/Htaccess.php:55"
            ]
        },
        {
            "hook": "airanksuite/analytics/assistant_hosts",
            "type": "filter",
            "args": "array $hosts",
            "desc": "Filter the AI assistant referrer hosts.",
            "module": "Analytics",
            "sources": [
                "src/Modules/Analytics/Services/Matomo.php:55"
            ]
        },
        {
            "hook": "airanksuite/consent/country_header",
            "type": "filter",
            "args": "string $header",
            "desc": "Which request header, if any, carries a trustworthy country code.",
            "module": "Analytics",
            "sources": [
                "src/Modules/Analytics/Services/Consent.php:344"
            ]
        },
        {
            "hook": "airanksuite/consent/optout_countries",
            "type": "filter",
            "args": "array $codes",
            "desc": "Filter the countries treated as opt-out under automatic mode.",
            "module": "Analytics",
            "sources": [
                "src/Modules/Analytics/Services/Consent.php:359"
            ]
        },
        {
            "hook": "airanksuite/autopilot/tick",
            "type": "action",
            "args": "array $state",
            "desc": "Fires after each autopilot slice.",
            "module": "Autopilot",
            "sources": [
                "src/Modules/Autopilot/Services/Agent.php:468"
            ]
        },
        {
            "hook": "airanksuite/backlinks/ignored_domains",
            "type": "filter",
            "args": "array $ignored",
            "desc": "Filter the referrer domains that are never treated as backlinks.",
            "module": "Backlinks",
            "sources": [
                "src/Modules/Backlinks/Services/LinkStore.php:585"
            ]
        },
        {
            "hook": "airanksuite/backlinks/record",
            "type": "filter",
            "args": "bool $record, string $referrer",
            "desc": "Filter whether this request should be recorded as a referral.",
            "module": "Backlinks",
            "sources": [
                "src/Modules/Backlinks/BacklinksModule.php:76"
            ]
        },
        {
            "hook": "airanksuite/breadcrumbs/trail",
            "type": "filter",
            "args": "array $items",
            "desc": "Filter the breadcrumb trail.",
            "module": "Breadcrumbs",
            "sources": [
                "src/Modules/Breadcrumbs/BreadcrumbsModule.php:146"
            ]
        },
        {
            "hook": "airanksuite/coexistence/geo_preset",
            "type": "filter",
            "args": "array $map",
            "desc": "Filter the GEO-only ownership preset.",
            "module": "Coexistence",
            "sources": [
                "src/Modules/Coexistence/CoexistenceModule.php:185"
            ]
        },
        {
            "hook": "airanksuite/checks/cornerstone_links",
            "type": "filter",
            "args": "3, $post",
            "desc": "",
            "module": "Content analysis",
            "sources": [
                "src/Modules/ContentAnalyzer/Services/Checks.php:564"
            ]
        },
        {
            "hook": "airanksuite/checks/power_words",
            "type": "filter",
            "args": "array $words",
            "desc": "Filter the power-word list the title checks score against.",
            "module": "Content analysis",
            "sources": [
                "src/Modules/ContentAnalyzer/Services/Checks.php:96"
            ]
        },
        {
            "hook": "airanksuite/checks/sentiment_words",
            "type": "filter",
            "args": "array $words",
            "desc": "Filter the sentiment word list the title checks score against \u2014 bring your own list for another language.",
            "module": "Content analysis",
            "sources": [
                "src/Modules/ContentAnalyzer/Services/Checks.php:65"
            ]
        },
        {
            "hook": "airanksuite/content_analyzer/analyzed",
            "type": "action",
            "args": "array $result, WP_Post $post",
            "desc": "Fires after a post analysis completes.",
            "module": "Content analysis",
            "sources": [
                "src/Modules/ContentAnalyzer/Services/PostAnalyzer.php:258"
            ]
        },
        {
            "hook": "airanksuite/library/ignored_types",
            "type": "filter",
            "args": "array $ignored",
            "desc": "Filter the post types the content library hides.",
            "module": "Content analysis",
            "sources": [
                "src/Modules/ContentAnalyzer/Services/Library.php:88"
            ]
        },
        {
            "hook": "airanksuite/library/meta_keys",
            "type": "filter",
            "args": "array $keys, string $field",
            "desc": "Filter the meta keys a description or keyword may live in.",
            "module": "Content analysis",
            "sources": [
                "src/Modules/ContentAnalyzer/Services/Library.php:345"
            ]
        },
        {
            "hook": "airanksuite/readability/transition_words",
            "type": "filter",
            "args": "array $words, string $language",
            "desc": "Filter the transition words counted for a language.",
            "module": "Content analysis",
            "sources": [
                "src/Modules/ContentAnalyzer/Services/Readability.php:321"
            ]
        },
        {
            "hook": "airanksuite/ai/allow_dynamic_block",
            "type": "filter",
            "args": "bool $allow, string $name",
            "desc": "Filters whether a dynamic block may be rendered for an AI prompt.",
            "module": "Core",
            "sources": [
                "src/Support/Html.php:96"
            ]
        },
        {
            "hook": "airanksuite/ai/content/raw",
            "type": "filter",
            "args": "string $content, WP_Post $post",
            "desc": "Filters the raw content sent to an AI provider.",
            "module": "Core",
            "sources": [
                "src/Support/Html.php:64"
            ]
        },
        {
            "hook": "airanksuite/booted",
            "type": "action",
            "args": "Kernel $kernel",
            "desc": "Fires after every module booted \u2014 the safe point to interact with plugin services.",
            "module": "Core",
            "sources": [
                "src/Kernel.php:346"
            ]
        },
        {
            "hook": "airanksuite/cache/purged",
            "type": "action",
            "args": "string[] $cleared",
            "desc": "Fires after the plugin has cleared what it recognises.",
            "module": "Core",
            "sources": [
                "src/Support/Cache.php:125"
            ]
        },
        {
            "hook": "airanksuite/content/raw",
            "type": "filter",
            "args": "string $content, WP_Post $post",
            "desc": "Filter the raw content before rendering \u2014 the hook page builders use to inject their markup for analysis.",
            "module": "Core",
            "sources": [
                "src/Support/Html.php:28"
            ]
        },
        {
            "hook": "airanksuite/devtools/api_console",
            "type": "filter",
            "args": "defined( 'WP_DEBUG' ) && WP_DEBUG",
            "desc": "Whether developer surfaces (the REST console) render. Defaults to WP_DEBUG: the console is a builder's tool, and a customer install should not present 130 Try buttons against its own API. A site that wants it in production opts in through the filter.",
            "module": "Core",
            "sources": [
                "src/Modules/Core/CoreModule.php:577"
            ]
        },
        {
            "hook": "airanksuite/event",
            "type": "action",
            "args": "string $name, array $envelope",
            "desc": "Fires for every plugin event.",
            "module": "Core",
            "sources": [
                "src/Support/Events.php:85"
            ]
        },
        {
            "hook": "airanksuite/event/",
            "type": "action",
            "args": "string $name, array $envelope",
            "desc": "Fires for every plugin event.",
            "module": "Core",
            "sources": [
                "src/Support/Events.php:86"
            ]
        },
        {
            "hook": "airanksuite/inventory/eligible_types",
            "type": "filter",
            "args": "array $types",
            "desc": "Filter the post types the plugin scores and audits.",
            "module": "Core",
            "sources": [
                "src/Support/Inventory.php:144"
            ]
        },
        {
            "hook": "airanksuite/inventory/flushed",
            "type": "action",
            "args": "",
            "desc": "Fires when the page counts change; derived caches must clear.",
            "module": "Core",
            "sources": [
                "src/Support/Inventory.php:313"
            ]
        },
        {
            "hook": "airanksuite/inventory/technical_ids",
            "type": "filter",
            "args": "array $ids",
            "desc": "Filter the individual post ids treated as technical.",
            "module": "Core",
            "sources": [
                "src/Support/Inventory.php:128"
            ]
        },
        {
            "hook": "airanksuite/inventory/technical_types",
            "type": "filter",
            "args": "array $types",
            "desc": "Filter the post types treated as templates / technical.",
            "module": "Core",
            "sources": [
                "src/Support/Inventory.php:55"
            ]
        },
        {
            "hook": "airanksuite/job/batch_size",
            "type": "filter",
            "args": "int $size, int $batch, int $limit",
            "desc": "Filter the memory-scaled batch size.",
            "module": "Core",
            "sources": [
                "src/Support/Job.php:285"
            ]
        },
        {
            "hook": "airanksuite/job/memory_limit",
            "type": "filter",
            "args": "int $bytes",
            "desc": "Filter the memory limit a job budgets against.",
            "module": "Core",
            "sources": [
                "src/Support/Job.php:223"
            ]
        },
        {
            "hook": "airanksuite/kernel/modules",
            "type": "filter",
            "args": "$classes",
            "desc": "The free edition ships without the Pro module folders, so their classes simply do not exist. That is absence, not failure: filtering here keeps them out of the quarantine list, which is reserved for modules that are present and broken.",
            "module": "Core",
            "sources": [
                "src/Kernel.php:146"
            ]
        },
        {
            "hook": "airanksuite/migrator/settings_keys",
            "type": "filter",
            "args": "array $keys",
            "desc": "Filter the option keys backed up before every migration.",
            "module": "Core",
            "sources": [
                "src/Support/Migrator.php:69"
            ]
        },
        {
            "hook": "airanksuite/options/prime",
            "type": "filter",
            "args": "array $names",
            "desc": "Filter the options primed in a single query on each request.",
            "module": "Core",
            "sources": [
                "src/Support/Options.php:86"
            ]
        },
        {
            "hook": "airanksuite/ssrf/allowed_ports",
            "type": "filter",
            "args": "$allowed_ports",
            "desc": "",
            "module": "Core",
            "sources": [
                "src/Support/Ssrf.php:140"
            ]
        },
        {
            "hook": "airanksuite/toolbar/links",
            "type": "filter",
            "args": "array $links",
            "desc": "Filters the toolbar's jump list.",
            "module": "Core",
            "sources": [
                "src/Modules/Core/Services/Toolbar.php:165"
            ]
        },
        {
            "hook": "airanksuite/toolbar/visible",
            "type": "filter",
            "args": "bool $visible",
            "desc": "Filter who sees the toolbar light.",
            "module": "Core",
            "sources": [
                "src/Modules/Core/Services/Toolbar.php:49"
            ]
        },
        {
            "hook": "airanksuite/upgrade_url",
            "type": "filter",
            "args": "string $url",
            "desc": "Filter the destination of the buy button.",
            "module": "Core",
            "sources": [
                "src/Modules/Core/UpgradeScreen.php:94"
            ]
        },
        {
            "hook": "airanksuite/editor/term_taxonomies",
            "type": "filter",
            "args": "array $out",
            "desc": "Filter the taxonomies whose terms get SEO fields.",
            "module": "Editor",
            "sources": [
                "src/Modules/Editor/Services/TermFields.php:59"
            ]
        },
        {
            "hook": "airanksuite/import/adapters",
            "type": "filter",
            "args": "array $adapters",
            "desc": "Filter the import adapters.",
            "module": "Import Export",
            "sources": [
                "src/Modules/ImportExport/Services/ImportRegistry.php:55"
            ]
        },
        {
            "hook": "airanksuite/import/record",
            "type": "filter",
            "args": "array $record, int $object_id, string $source",
            "desc": "Filter one import record before it is written.",
            "module": "Import Export",
            "sources": [
                "src/Modules/ImportExport/Services/ImportRun.php:411",
                "src/Modules/ImportExport/Services/ImportRun.php:444",
                "src/Modules/ImportExport/Services/ImportRun.php:517"
            ]
        },
        {
            "hook": "airanksuite/graph/request_budget",
            "type": "filter",
            "args": "20",
            "desc": "Build the graph.",
            "module": "Internal Links",
            "sources": [
                "src/Modules/InternalLinks/Services/LinkGraph.php:64",
                "src/Modules/InternalLinks/Services/LinkGraph.php:108"
            ]
        },
        {
            "hook": "airanksuite/licensing/allows",
            "type": "filter",
            "args": "bool $allowed, string $feature",
            "desc": "Filter a Pro feature gate decision.",
            "module": "Licensing",
            "sources": [
                "src/Modules/Licensing/Services/LicenseGate.php:194"
            ]
        },
        {
            "hook": "airanksuite/linkcheck/dynamic_patterns",
            "type": "filter",
            "args": "array(\n\t\t\t\t'#/wp-login\\.php#',\n\t\t\t\t'#\u2026",
            "desc": "",
            "module": "Link Checker",
            "sources": [
                "src/Modules/LinkChecker/Services/LinkScanner.php:307"
            ]
        },
        {
            "hook": "airanksuite/linkscan/cron_budget",
            "type": "filter",
            "args": "20",
            "desc": "",
            "module": "Link Checker",
            "sources": [
                "src/Modules/LinkChecker/Services/LinkScanner.php:182"
            ]
        },
        {
            "hook": "airanksuite/seo_apis/serp",
            "type": "filter",
            "args": "array|WP_Error|null $answer, string $keyword, array $options",
            "desc": "Filter the SERP answer for one keyword.",
            "module": "Rank Tracker",
            "sources": [
                "src/Modules/RankTracker/Services/SerpCheck.php:166"
            ]
        },
        {
            "hook": "airanksuite/seo_apis/serp_provider",
            "type": "filter",
            "args": "string $chosen",
            "desc": "Filter which provider rank checks ask.",
            "module": "Rank Tracker",
            "sources": [
                "src/Modules/RankTracker/Services/SerpCheck.php:203"
            ]
        },
        {
            "hook": "airanksuite/schema/graph",
            "type": "filter",
            "args": "array $graph, WP_Post|null $post",
            "desc": "Filter the JSON-LD graph before output.",
            "module": "Schema",
            "sources": [
                "src/Modules/Schema/SchemaModule.php:246",
                "src/Modules/Schema/SchemaModule.php:251",
                "src/Modules/Schema/SchemaModule.php:332"
            ]
        },
        {
            "hook": "airanksuite/schema/identity",
            "type": "filter",
            "args": "array $out, array $s",
            "desc": "Filter the identity properties before they are merged into the graph.",
            "module": "Schema",
            "sources": [
                "src/Modules/Schema/Services/Identity.php:467"
            ]
        },
        {
            "hook": "airanksuite/schema/node",
            "type": "filter",
            "args": "array $node, string $type, WP_Post $post",
            "desc": "Filter a single schema node before it enters the graph.",
            "module": "Schema",
            "sources": [
                "src/Modules/Schema/Services/SchemaBuilder.php:262"
            ]
        },
        {
            "hook": "airanksuite/schema/types",
            "type": "filter",
            "args": "array $types",
            "desc": "Filter the schema type registry.",
            "module": "Schema",
            "sources": [
                "src/Modules/Schema/Services/SchemaTypes.php:599"
            ]
        },
        {
            "hook": "airanksuite/google/connect_url",
            "type": "filter",
            "args": "string $url",
            "desc": "Filter the Google connect service URL.",
            "module": "Search Console",
            "sources": [
                "src/Modules/SearchConsole/Services/GoogleClient.php:49"
            ]
        },
        {
            "hook": "airanksuite/gsc/question_words",
            "type": "filter",
            "args": "array $words",
            "desc": "Filter the question-word list used to segment queries.",
            "module": "Search Console",
            "sources": [
                "src/Modules/SearchConsole/Services/Insights.php:79"
            ]
        },
        {
            "hook": "airanksuite/seo_apis/providers",
            "type": "filter",
            "args": "Provider[] $list",
            "desc": "Filters the SEO data vendors on offer.",
            "module": "Seo Apis",
            "sources": [
                "src/Modules/SeoApis/Services/Registry.php:67"
            ]
        },
        {
            "hook": "airanksuite/audit/checks",
            "type": "filter",
            "args": "array $checks",
            "desc": "Filter the site-audit rule set \u2014 reprice a weight, soften a severity, rewrite a fix, or drop a rule so its findings disappear from the report and the score.",
            "module": "Site audit",
            "sources": [
                "src/Modules/SiteAudit/Services/Auditor.php:348"
            ]
        },
        {
            "hook": "airanksuite/audit/excluded",
            "type": "filter",
            "args": "array $ids",
            "desc": "Filter the pages the site audit skips entirely.",
            "module": "Site audit",
            "sources": [
                "src/Modules/SiteAudit/Services/Auditor.php:436"
            ]
        },
        {
            "hook": "airanksuite/html_sitemap/posts",
            "type": "filter",
            "args": "array $out, string $type",
            "desc": "Filter the posts one type contributes to the HTML sitemap.",
            "module": "Sitemap",
            "sources": [
                "src/Modules/Sitemap/Services/HtmlSitemap.php:137"
            ]
        },
        {
            "hook": "airanksuite/sitemap/index",
            "type": "filter",
            "args": "array $entries",
            "desc": "Filter sitemap index entries.",
            "module": "Sitemap",
            "sources": [
                "src/Modules/Sitemap/Services/SitemapGenerator.php:120"
            ]
        },
        {
            "hook": "airanksuite/store/facet_params",
            "type": "filter",
            "args": "array $params",
            "desc": "Filter the faceted-navigation parameters watched for index bloat.",
            "module": "Store",
            "sources": [
                "src/Modules/WooCommerce/Services/StoreAudit.php:57"
            ]
        },
        {
            "hook": "airanksuite/urls/publish_scan_portable",
            "type": "filter",
            "args": "bool $portable",
            "desc": "Filter whether the rescan publish uses portable per-row updates instead of one UPDATE \u2026 INNER JOIN per chunk.",
            "module": "Urls",
            "sources": [
                "src/Modules/Urls/Services/UrlInventory.php:1191"
            ]
        },
        {
            "hook": "airanksuite/llms_txt/body",
            "type": "filter",
            "args": "string $body, bool $full",
            "desc": "Filter the final llms.txt body immediately before it is served.",
            "module": "llms.txt",
            "sources": [
                "src/Modules/LlmsTxt/Services/Generator.php:229",
                "src/Modules/LlmsTxt/Services/Generator.php:394"
            ]
        },
        {
            "hook": "airanksuite/llms_txt/exclude",
            "type": "filter",
            "args": "bool $exclude, WP_Post $post",
            "desc": "Decide per post whether it appears in llms.txt at all.",
            "module": "llms.txt",
            "sources": [
                "src/Modules/LlmsTxt/Services/Generator.php:312"
            ]
        },
        {
            "hook": "airanksuite/llms_txt/sections",
            "type": "filter",
            "args": "array $sections",
            "desc": "Filter llms.txt sections before rendering.",
            "module": "llms.txt",
            "sources": [
                "src/Modules/LlmsTxt/Services/Generator.php:197"
            ]
        }
    ]
}
