/** Developer lifecycle reference shared by local and hosted MCP transports.
 * Tool inventory comes from registration, so it describes this server instance.
 * Cabinet services are a directory, not a claim about the caller's entitlements.
 *
 * Written as reference material (process descriptions, requirements, related
 * tools), not as directives: every entry reads the same to a developer as to
 * any client that renders it.
 *
 * Token frugality: the default response is a compact overview plus a table of
 * contents; full sections are returned only when requested via `sections`.
 */
export interface GuideTool {
    name: string;
    description: string;
    annotations: {
        readOnlyHint?: boolean;
        destructiveHint?: boolean;
    };
}
export declare const DEVELOPMENT_GUIDE_URL: string;
export declare const DEVELOPMENT_SERVICES: readonly [{
    readonly id: "documentation";
    readonly purpose: "Capabilities, extension shapes, exact CLI commands and reusable skill packages.";
    readonly tools: readonly ["get_development_guide", "search_docs", "list_extension_templates"];
    readonly access: "Free reference; no API key. Hosted transport still requires connector sign-in.";
    readonly urls: readonly [string, string, string];
}, {
    readonly id: "account";
    readonly purpose: "Sign-in, API keys for local tools and credit-pool balances ahead of paid work.";
    readonly tools: readonly ["get_credit_balance", "connection_diagnostics"];
    readonly access: "Balance lookup is free and requires identity; catalog reads and scans use credit pools.";
    readonly urls: readonly [string, "https://dojo.extenshi.io/api-keys", "https://dojo.extenshi.io/billing"];
}, {
    readonly id: "research";
    readonly purpose: "Demand, competitors, user complaints, permissions and existing security findings.";
    readonly tools: readonly ["search_extensions", "get_extension", "get_reviews", "get_security", "get_risk_by_store_ids", "market_overview"];
    readonly access: "Identity required. Catalog tools cost 1 read per call; get_security costs 3. Bulk risk: up to 40 per call. Chrome review text is unavailable; its aggregate rating is available.";
    readonly urls: readonly [string, "https://catalog.extenshi.io"];
}, {
    readonly id: "projects";
    readonly purpose: "Existing projects: selected browser types, manifests, repository binding, saved tool state, hosted URLs and starter files.";
    readonly tools: readonly ["list_my_projects", "create_project", "get_project_state", "get_project_scaffold", "get_decisions", "propose_decision", "get_project_workspace", "import_manifest", "diff_project_state", "apply_project_patch", "record_project_evidence", "create_ci_ingest_secret", "upsert_hosted_page", "verify_hosted_artifact", "remove_hosted_page", "list_hosted_pages", "get_release_readiness"];
    readonly access: "Own-project MCP reads are free and require identity. Projects are created in the cabinet or with create_project (idempotent, project.write). Owner decisions (AMO add-on id, license, seller identity, pricing, targets) are proposed by agents and decided only by the owner in the cabinet; release readiness reports undecided ones as blockers. Repository metadata, source/built manifests and scope synchronize through typed revisioned patches. project.write, evidence.write and hosted.write require explicit OAuth consent. Repository metadata does not grant GitHub access. CI evidence (source=ci) is written only by the verified ingest endpoint, which authenticates with a secret from create_ci_ingest_secret. Automated release-readiness access requires a Pro project.";
    readonly urls: readonly [string, "https://dojo.extenshi.io/projects", "https://dojo.extenshi.io/integrations"];
}, {
    readonly id: "manifest";
    readonly purpose: "Minimum permissions, target browsers and manifest entries, with every referenced file present.";
    readonly tools: readonly ["list_extension_templates", "get_project_state", "get_project_scaffold"];
    readonly access: "Free template reference; project reads require identity. The cabinet also has a manifest editor.";
    readonly urls: readonly [string, string];
}, {
    readonly id: "localization";
    readonly purpose: "Local translation of extension messages and validation of the resulting locales.";
    readonly tools: readonly ["localize_workflow"];
    readonly access: "Free static reference; local CLI validation requires no key or Extenshi credits. Translation uses the developer's own provider. CLI release availability is part of the reference.";
    readonly urls: readonly [string];
}, {
    readonly id: "icons";
    readonly purpose: "SVG icon design, toolbar-size preview and store-asset export with the local CLI.";
    readonly tools: readonly ["generate_icon_workflow"];
    readonly access: "Free. Drawing, browser preview and file export happen locally; the cabinet offers its own icon generator subject to availability and credits.";
    readonly urls: readonly [string, string];
}, {
    readonly id: "privacy";
    readonly purpose: "A policy that reflects actual data practices: generated and exported, or hosted with version history.";
    readonly tools: readonly ["list_privacy_policy_versions", "get_privacy_policy_version", "update_privacy_policy_with_ai", "publish_privacy_policy", "get_legal_translations", "set_legal_translations"];
    readonly access: "Hosted policy tools require an owned Pro project. Version reads spend no credit; AI updates have a per-project daily limit. publish_privacy_policy changes the live page. The browser generator supports export. The English policy (and Pay license terms) is the binding text at the base URL; translated copies for the project’s languages live at <url>/<locale> with a notice linking to the English original — Extenshi translates its template text, the developer translates edited sections and free-text answers with get_legal_translations / set_legal_translations.";
    readonly urls: readonly [string, string, string];
}, {
    readonly id: "onboarding";
    readonly purpose: "Welcome page, pin guide, install instructions and uninstall survey, with verified URLs wired into the extension.";
    readonly tools: readonly ["generate_welcome_page_workflow", "get_project_state", "get_install_instructions", "publish_install_instructions", "unpublish_install_instructions", "get_page_translations", "set_page_translations"];
    readonly access: "Free welcome-page specification. Editing, hosting and responses live in the cabinet where enabled; account/project limits apply. MCP returns specifications and saved state, and publishes the install instructions page (free; hosted.write) — the uninstall form and welcome page are published from the cabinet. The hosted uninstall form, welcome page and install instructions open in the user’s browser language (the generated snippets pass chrome.i18n.getUILanguage() as `hl`) when the project offers it, otherwise in the project’s own language: built-in text is translated by Extenshi (en + 10 languages); the developer’s own text is translated per field with get_page_translations / set_page_translations (identity; hosted.write to save).";
    readonly urls: readonly [string, string, string, string, string, string, string, string];
}, {
    readonly id: "listing-and-marketing";
    readonly purpose: "Listing copy, screenshots, landing page, support links and AI discovery assets.";
    readonly tools: readonly ["generate_landing_page", "draft_landing_page", "preview_landing_page", "publish_landing_page", "get_landing_page", "list_landing_page_versions", "rollback_landing_page", "unpublish_landing_page", "get_custom_domain", "set_custom_domain", "verify_custom_domain", "remove_custom_domain", "upload_project_media", "upsert_hosted_page"];
    readonly access: "The landing-page generator is free and offline: it returns static HTML (CLI: extenshi page generate). Schema v2 (schemaVersion 2) makes it a full homepage: ordered sections (hero, about, features, screenshots, how-it-works, pricing bound to Pay offers by SKU, FAQ with FAQPage JSON-LD, attributed testimonials only, store badges, changelog, links), theme tokens from allowlists, SEO/OG fields, per-locale pages with hreflang, and llms.txt — all declarative, no HTML or JS. draft_landing_page (project.read; CLI: extenshi page draft) builds a v2 form from project state and lists what it could not fill; preview_landing_page (CLI: extenshi page preview) validates and renders exactly what publish would serve, with a path and fix per problem. The same page can be hosted by Extenshi at page.extenshi.io/{code} with publish_landing_page (identity and hosted.write; CLI: extenshi page publish), which also registers it as the project homepage; every publish is a version (list_landing_page_versions / rollback_landing_page; CLI: extenshi page versions / rollback). A custom domain (Pro, one per project; set/verify/get/remove_custom_domain, CLI: extenshi domain add|verify|status|remove) serves the homepage at the domain root after a TXT ownership check and an HTTPS certificate, and switches its canonical and HOMEPAGE_URL; ownership is re-checked every 6 hours and a domain that loses its TXT record is suspended; images there are store screenshots, Dojo uploads or files uploaded with upload_project_media (hosted.write; CLI: extenshi media upload, or page publish --upload-local) to the project's public media store. Store screenshots per locale come from CLI extenshi screenshots and listing artwork from CLI extenshi icon store-assets (formats and sizes: guide section storeMedia). A page hosted elsewhere on HTTPS is registered with upsert_hosted_page (CLI: extenshi page register). The registered homepage feeds HOMEPAGE_URL. Listing copy and store-risk review are covered by CLI generate-listing / review-risk and cabinet tools where enabled. MCP has no listing or SEO execution tool.";
    readonly urls: readonly [string, string, string, string, string, string];
}, {
    readonly id: "verification-and-ci";
    readonly purpose: "Reproducible per-browser packages, installed smoke tests of the exact package in Chromium, Edge and Firefox, store-risk review, final package scan, and release evidence recorded from those results.";
    readonly tools: readonly ["scan_extension", "record_project_evidence", "get_release_readiness"];
    readonly access: "Local CLI, free: `extenshi package <dir> --browser chrome,edge,firefox` writes byte-reproducible zips plus extenshi-packages.json (sha256 per browser; refuses a placeholder Firefox add-on ID; --fix-war expands wildcard web_accessible_resources). `extenshi test smoke <zip|extenshi-packages.json> --browser chromium|edge|firefox --json` installs that exact zip and checks service worker/background start, manifest errors and console errors on popup/options pages (Playwright for Chromium/Edge, any Firefox binary). `--evidence` on scan, review-risk, generate-listing, test smoke and screenshots records scan / permissions / listing (per locale) / installed / screenshots (per locale and store) evidence for the project bound with `extenshi project bind` (advisory listing findings stay passed and are listed in the evidence summary); release prepare accepts extenshi-packages.json. Scan requires an API key and spends 1 scan credit. CI: the scaffold writes .github/workflows/extenshi-verify.yml and extenshi-evidence.yml; CI-sourced evidence arrives through `extenshi evidence ingest` with the create_ci_ingest_secret secret.";
    readonly urls: readonly [string, string, string];
}, {
    readonly id: "publishing";
    readonly purpose: "Store credential validation, submission of the exact tested package to Chrome Web Store, Firefox Add-ons and/or Edge Add-ons, and verification of review status and the public listing.";
    readonly tools: readonly ["publish_extension"];
    readonly access: string;
    readonly urls: readonly [string, string, string, string, string];
}, {
    readonly id: "maintenance";
    readonly purpose: "Listing claims, finding responses, reviews and uninstall feedback, policy updates and ongoing releases.";
    readonly tools: readonly ["get_reviews", "get_security", "get_project_state"];
    readonly access: "Catalog reads are metered. Ownership, declarations, responses, badges and feedback management live in the cabinet and depend on account access.";
    readonly urls: readonly [string, string, string, string, string];
}, {
    readonly id: "monetization";
    readonly purpose: "Optional paid-feature integration: seller setup, offers, checkout, signed entitlements and purchase verification.";
    readonly tools: readonly ["list_pay_apps", "create_pay_app", "get_pay_app", "get_pay_readiness", "get_pay_payment_evidence", "link_pay_app", "unlink_pay_app", "archive_pay_app", "export_pay_data", "get_pay_seller", "connect_pay_seller", "refresh_pay_seller", "set_pay_seller_profile", "upsert_pay_offer", "archive_pay_offer", "get_pay_offer_translations", "set_pay_offer_translations", "set_pay_enabled", "rotate_pay_key", "get_license_terms_questionnaire", "draft_license_terms"];
    readonly access: "Pay applications work independently of development projects. Explicit pay.read/pay.write permission is required; older connections and API keys have no Pay grant. The exceptions are get_license_terms_questionnaire and draft_license_terms: they need only project read access because they return the questions and an unsaved draft built from the answers in the call, not saved answers or Pay state. Readiness (get_pay_readiness) and the actual SDK distribution determine whether integration is possible. The author completes the seller agreement and Stripe KYC in the browser. Checkout is enabled only after offers and profile are configured, and only with explicit authorization. Registration does not prove production deployment or npm publication.";
    readonly urls: readonly [string, "https://dojo.extenshi.io/payments"];
}];
/** Top-level sections of the full guide, selectable via the `sections` parameter. */
export declare const GUIDE_SECTIONS: readonly ["tools", "localActions", "services", "repository", "workflow", "handoff", "storeMedia"];
export type GuideSection = (typeof GUIDE_SECTIONS)[number];
declare function buildSections(registeredTools: readonly GuideTool[]): {
    tools: {
        docs: string[];
        name: string;
        description: string;
        annotations: {
            readOnlyHint?: boolean;
            destructiveHint?: boolean;
        };
    }[];
    localActions: {
        name: string;
        availableInThisConnection: boolean;
        fallback: string;
        docs: string;
    }[];
    services: ({
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "documentation";
        purpose: "Capabilities, extension shapes, exact CLI commands and reusable skill packages.";
        access: "Free reference; no API key. Hosted transport still requires connector sign-in.";
        urls: readonly [string, string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "account";
        purpose: "Sign-in, API keys for local tools and credit-pool balances ahead of paid work.";
        access: "Balance lookup is free and requires identity; catalog reads and scans use credit pools.";
        urls: readonly [string, "https://dojo.extenshi.io/api-keys", "https://dojo.extenshi.io/billing"];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "research";
        purpose: "Demand, competitors, user complaints, permissions and existing security findings.";
        access: "Identity required. Catalog tools cost 1 read per call; get_security costs 3. Bulk risk: up to 40 per call. Chrome review text is unavailable; its aggregate rating is available.";
        urls: readonly [string, "https://catalog.extenshi.io"];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "projects";
        purpose: "Existing projects: selected browser types, manifests, repository binding, saved tool state, hosted URLs and starter files.";
        access: "Own-project MCP reads are free and require identity. Projects are created in the cabinet or with create_project (idempotent, project.write). Owner decisions (AMO add-on id, license, seller identity, pricing, targets) are proposed by agents and decided only by the owner in the cabinet; release readiness reports undecided ones as blockers. Repository metadata, source/built manifests and scope synchronize through typed revisioned patches. project.write, evidence.write and hosted.write require explicit OAuth consent. Repository metadata does not grant GitHub access. CI evidence (source=ci) is written only by the verified ingest endpoint, which authenticates with a secret from create_ci_ingest_secret. Automated release-readiness access requires a Pro project.";
        urls: readonly [string, "https://dojo.extenshi.io/projects", "https://dojo.extenshi.io/integrations"];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "manifest";
        purpose: "Minimum permissions, target browsers and manifest entries, with every referenced file present.";
        access: "Free template reference; project reads require identity. The cabinet also has a manifest editor.";
        urls: readonly [string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "localization";
        purpose: "Local translation of extension messages and validation of the resulting locales.";
        access: "Free static reference; local CLI validation requires no key or Extenshi credits. Translation uses the developer's own provider. CLI release availability is part of the reference.";
        urls: readonly [string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "icons";
        purpose: "SVG icon design, toolbar-size preview and store-asset export with the local CLI.";
        access: "Free. Drawing, browser preview and file export happen locally; the cabinet offers its own icon generator subject to availability and credits.";
        urls: readonly [string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "privacy";
        purpose: "A policy that reflects actual data practices: generated and exported, or hosted with version history.";
        access: "Hosted policy tools require an owned Pro project. Version reads spend no credit; AI updates have a per-project daily limit. publish_privacy_policy changes the live page. The browser generator supports export. The English policy (and Pay license terms) is the binding text at the base URL; translated copies for the project’s languages live at <url>/<locale> with a notice linking to the English original — Extenshi translates its template text, the developer translates edited sections and free-text answers with get_legal_translations / set_legal_translations.";
        urls: readonly [string, string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "onboarding";
        purpose: "Welcome page, pin guide, install instructions and uninstall survey, with verified URLs wired into the extension.";
        access: "Free welcome-page specification. Editing, hosting and responses live in the cabinet where enabled; account/project limits apply. MCP returns specifications and saved state, and publishes the install instructions page (free; hosted.write) — the uninstall form and welcome page are published from the cabinet. The hosted uninstall form, welcome page and install instructions open in the user’s browser language (the generated snippets pass chrome.i18n.getUILanguage() as `hl`) when the project offers it, otherwise in the project’s own language: built-in text is translated by Extenshi (en + 10 languages); the developer’s own text is translated per field with get_page_translations / set_page_translations (identity; hosted.write to save).";
        urls: readonly [string, string, string, string, string, string, string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "listing-and-marketing";
        purpose: "Listing copy, screenshots, landing page, support links and AI discovery assets.";
        access: "The landing-page generator is free and offline: it returns static HTML (CLI: extenshi page generate). Schema v2 (schemaVersion 2) makes it a full homepage: ordered sections (hero, about, features, screenshots, how-it-works, pricing bound to Pay offers by SKU, FAQ with FAQPage JSON-LD, attributed testimonials only, store badges, changelog, links), theme tokens from allowlists, SEO/OG fields, per-locale pages with hreflang, and llms.txt — all declarative, no HTML or JS. draft_landing_page (project.read; CLI: extenshi page draft) builds a v2 form from project state and lists what it could not fill; preview_landing_page (CLI: extenshi page preview) validates and renders exactly what publish would serve, with a path and fix per problem. The same page can be hosted by Extenshi at page.extenshi.io/{code} with publish_landing_page (identity and hosted.write; CLI: extenshi page publish), which also registers it as the project homepage; every publish is a version (list_landing_page_versions / rollback_landing_page; CLI: extenshi page versions / rollback). A custom domain (Pro, one per project; set/verify/get/remove_custom_domain, CLI: extenshi domain add|verify|status|remove) serves the homepage at the domain root after a TXT ownership check and an HTTPS certificate, and switches its canonical and HOMEPAGE_URL; ownership is re-checked every 6 hours and a domain that loses its TXT record is suspended; images there are store screenshots, Dojo uploads or files uploaded with upload_project_media (hosted.write; CLI: extenshi media upload, or page publish --upload-local) to the project's public media store. Store screenshots per locale come from CLI extenshi screenshots and listing artwork from CLI extenshi icon store-assets (formats and sizes: guide section storeMedia). A page hosted elsewhere on HTTPS is registered with upsert_hosted_page (CLI: extenshi page register). The registered homepage feeds HOMEPAGE_URL. Listing copy and store-risk review are covered by CLI generate-listing / review-risk and cabinet tools where enabled. MCP has no listing or SEO execution tool.";
        urls: readonly [string, string, string, string, string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "verification-and-ci";
        purpose: "Reproducible per-browser packages, installed smoke tests of the exact package in Chromium, Edge and Firefox, store-risk review, final package scan, and release evidence recorded from those results.";
        access: "Local CLI, free: `extenshi package <dir> --browser chrome,edge,firefox` writes byte-reproducible zips plus extenshi-packages.json (sha256 per browser; refuses a placeholder Firefox add-on ID; --fix-war expands wildcard web_accessible_resources). `extenshi test smoke <zip|extenshi-packages.json> --browser chromium|edge|firefox --json` installs that exact zip and checks service worker/background start, manifest errors and console errors on popup/options pages (Playwright for Chromium/Edge, any Firefox binary). `--evidence` on scan, review-risk, generate-listing, test smoke and screenshots records scan / permissions / listing (per locale) / installed / screenshots (per locale and store) evidence for the project bound with `extenshi project bind` (advisory listing findings stay passed and are listed in the evidence summary); release prepare accepts extenshi-packages.json. Scan requires an API key and spends 1 scan credit. CI: the scaffold writes .github/workflows/extenshi-verify.yml and extenshi-evidence.yml; CI-sourced evidence arrives through `extenshi evidence ingest` with the create_ci_ingest_secret secret.";
        urls: readonly [string, string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "publishing";
        purpose: "Store credential validation, submission of the exact tested package to Chrome Web Store, Firefox Add-ons and/or Edge Add-ons, and verification of review status and the public listing.";
        access: string;
        urls: readonly [string, string, string, string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "maintenance";
        purpose: "Listing claims, finding responses, reviews and uninstall feedback, policy updates and ongoing releases.";
        access: "Catalog reads are metered. Ownership, declarations, responses, badges and feedback management live in the cabinet and depend on account access.";
        urls: readonly [string, string, string, string, string];
    } | {
        toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "get_pay_payment_evidence" | "link_pay_app" | "unlink_pay_app" | "archive_pay_app" | "export_pay_data" | "get_pay_seller" | "connect_pay_seller" | "refresh_pay_seller" | "set_pay_seller_profile" | "upsert_pay_offer" | "archive_pay_offer" | "get_pay_offer_translations" | "set_pay_offer_translations" | "set_pay_enabled" | "rotate_pay_key" | "get_development_guide" | "search_docs" | "list_extension_templates" | "get_credit_balance" | "connection_diagnostics" | "search_extensions" | "get_extension" | "get_reviews" | "get_security" | "get_risk_by_store_ids" | "market_overview" | "list_my_projects" | "create_project" | "get_project_state" | "get_project_scaffold" | "get_decisions" | "propose_decision" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "remove_hosted_page" | "list_hosted_pages" | "get_release_readiness" | "localize_workflow" | "generate_icon_workflow" | "list_privacy_policy_versions" | "get_privacy_policy_version" | "update_privacy_policy_with_ai" | "publish_privacy_policy" | "get_legal_translations" | "set_legal_translations" | "generate_welcome_page_workflow" | "get_install_instructions" | "publish_install_instructions" | "unpublish_install_instructions" | "get_page_translations" | "set_page_translations" | "generate_landing_page" | "draft_landing_page" | "preview_landing_page" | "publish_landing_page" | "get_landing_page" | "list_landing_page_versions" | "rollback_landing_page" | "unpublish_landing_page" | "get_custom_domain" | "set_custom_domain" | "verify_custom_domain" | "remove_custom_domain" | "upload_project_media" | "scan_extension" | "publish_extension" | "get_license_terms_questionnaire" | "draft_license_terms")[];
        id: "monetization";
        purpose: "Optional paid-feature integration: seller setup, offers, checkout, signed entitlements and purchase verification.";
        access: "Pay applications work independently of development projects. Explicit pay.read/pay.write permission is required; older connections and API keys have no Pay grant. The exceptions are get_license_terms_questionnaire and draft_license_terms: they need only project read access because they return the questions and an unsaved draft built from the answers in the call, not saved answers or Pay state. Readiness (get_pay_readiness) and the actual SDK distribution determine whether integration is possible. The author completes the seller agreement and Stripe KYC in the browser. Checkout is enabled only after offers and profile are configured, and only with explicit authorization. Registration does not prove production deployment or npm publication.";
        urls: readonly [string, "https://dojo.extenshi.io/payments"];
    })[];
    repository: {
        recommendation: string;
        setup: string;
        layout: string[];
        practice: string;
        docs: string[];
    };
    workflow: readonly [{
        readonly id: "scope";
        readonly actions: "Stage 1 — Scope: the user problem, target sites and browsers, MVP, permissions/data needs, acceptance criteria, distribution and optional monetization are written down. Deferred features stay out of release promises.";
        readonly relatedTools: readonly ["get_development_guide", "search_docs"];
        readonly doneWhen: "A written scope and acceptance checklist cover implementation, testing, assets, release and maintenance.";
    }, {
        readonly id: "research";
        readonly actions: "Stage 2 — Research (optional): demand, competitors, user complaints and security findings for a small relevant set of existing extensions; gaps and constraints are recorded. Catalog reads are metered, so the credit balance matters here.";
        readonly relatedTools: readonly ["get_credit_balance", "search_extensions", "market_overview", "get_extension", "get_reviews", "get_security", "get_risk_by_store_ids"];
        readonly doneWhen: "The chosen feature and supported surfaces have evidence; skipped research is recorded as skipped with a reason.";
    }, {
        readonly id: "project-and-repository";
        readonly actions: "Stage 3 — Project and repository: an existing dojo project and its bound repository are reused. Without a project, one is created in dojo where available, or work continues locally with integration recorded as pending. A Git remote (GitHub preferred) exists before substantial implementation.";
        readonly relatedTools: readonly ["list_my_projects", "get_project_state"];
        readonly doneWhen: "Project ID (or explicit pending status), repository URL, branch, README, build commands and release checklist are recorded.";
    }, {
        readonly id: "architecture-and-scaffold";
        readonly actions: "Stage 4 — Architecture and scaffold: extension types, minimum permissions and browser-specific files are chosen. A new project gets one scaffold per browser in separate outputs; an existing repository keeps its code. Tool states are read only for the keys the extension needs. get_project_state returns integration.file, the content for integration.path, and integration.unwired, which lists what is still unconnected; the repository changes only when the author asks for them.";
        readonly relatedTools: readonly ["list_extension_templates", "get_project_scaffold", "get_project_state"];
        readonly doneWhen: "Each manifest references real packaged files; browser variants and the project integration contract are preserved.";
    }, {
        readonly id: "implementation";
        readonly actions: "Stage 5 — Implementation: the MVP, accessible popup/options, storage and error handling, tested on the actual target sites and across the extension lifecycle, including service-worker restart and permission denial. Localization covers message translation, structural validation and manual language/RTL review. Payments or user accounts depend on a verified supported integration with its prerequisites complete.";
        readonly relatedTools: readonly ["localize_workflow"];
        readonly doneWhen: "Acceptance criteria pass on real target surfaces; optional integrations have end-to-end evidence or remain explicit blockers.";
    }, {
        readonly id: "assets-and-hosted-pages";
        readonly actions: "Stage 6 — Assets and hosted pages: icon, welcome page, screenshots, pin/install instructions, privacy policy, uninstall feedback, support and landing URLs. A landing page is generated as static HTML and either hosted by Extenshi (page.extenshi.io, or the project's custom domain root) or on any HTTPS origin; it is registered as the project homepage, which sets HOMEPAGE_URL. The homepage is drafted from project state (draft_landing_page), checked with preview_landing_page, published as a version and can be rolled back. An existing Pro policy is updated as a reviewed proposal (proposedMarkdown) and published within the author's authorization. Returned URLs are verified against project state.";
        readonly relatedTools: readonly ["generate_icon_workflow", "generate_welcome_page_workflow", "generate_landing_page", "draft_landing_page", "preview_landing_page", "publish_landing_page", "set_custom_domain", "verify_custom_domain", "upload_project_media", "upsert_hosted_page", "list_privacy_policy_versions", "get_privacy_policy_version", "update_privacy_policy_with_ai", "publish_privacy_policy", "get_project_state"];
        readonly doneWhen: "Assets show the real product; hosted links load and match actual data practices; installation/uninstallation flows work.";
    }, {
        readonly id: "quality-and-listing";
        readonly actions: "Stage 7 — Quality and listing: each browser package is built reproducibly (CLI package), and that exact zip is installed and smoke-tested per browser (CLI test smoke); unit/integration checks and manual browser scenarios run. Disclosures, permission justifications, listing copy and screenshots are reviewed against the build (CLI review-risk and generate-listing --store chrome|edge|firefox, which draft CHROMEWEBSTORE.md / EDGE.md / AMO.md — the same listing draft review-risk --listing reads back regardless of which one). A Firefox build with minified/bundled code additionally needs extenshi amo-source (source archive + BUILD.md) and a clean `web-ext lint`. With --evidence, scan, review-risk, generate-listing, test smoke and screenshots record their release evidence for the bound project; the final package is scanned. Exact commands: the CLI docs. CI runs the scaffolded extenshi-verify workflow.";
        readonly relatedTools: readonly ["search_docs", "scan_extension", "get_release_readiness"];
        readonly doneWhen: "The exact versioned artifact has passing checks, retained scan/review reports and truthful store materials; unresolved findings have a disposition.";
    }, {
        readonly id: "release";
        readonly actions: "Stage 8 — Release: store accounts, credentials and submission access are verified; a validate-only run precedes submission where available. The tested artifact is submitted within the user's publishing authorization through local MCP, CLI or the store console. Upload, submission, approval and public-listing status are recorded separately.";
        readonly relatedTools: readonly ["publish_extension"];
        readonly doneWhen: "Store status and installed version are verified; pending store review is reported as pending, with artifact and source commit recorded.";
    }, {
        readonly id: "operate";
        readonly actions: "Stage 9 — Operate: catalog listing claim, declarations and security badge, findings and uninstall feedback, optional purchase/license flow checks, and planned updates. Later versions repeat the build, review, scan, policy and release checks.";
        readonly relatedTools: readonly ["get_reviews", "get_security", "get_project_state"];
        readonly doneWhen: "A handoff records repository/commit, artifacts, URLs, checks, remaining blockers, support owner and follow-up work.";
    }];
    storeMedia: {
        readonly screenshots: {
            readonly command: "npx @extenshi/cli@latest screenshots <unpacked-dir|zip> --scenes scenes.json [--locales en,de] [--store chrome,edge,firefox] [--small] [--out store-screenshots] [--json] [--evidence --listing <file> [--evidence-browser chrome,edge,firefox]]";
            readonly requires: "Playwright with the full Chromium build in the project (npm i -D playwright && npx playwright install chromium); the headless shell cannot load extensions. The source build is never modified: it is staged into a temporary copy.";
            readonly output: "<out>/<store>/<locale>/NN-<scene>-WxH.png, plus <out>/screenshots.json (files with sha256, verified locales, warnings).";
            readonly evidence: "--evidence records one `screenshots` readiness check per shot locale and store (the store is the browser) for the project bound with `extenshi project bind`, through the same path as `extenshi evidence push`. It binds to the zip that was shot (artifactDigest; an unpacked folder is refused) and to the --listing file (inputDigest — pass the same file to release prepare --listing). The browsers are --store when given, else the extenshi-packages.json next to the zip, and each must be a store the run shoots. A store whose listing file differs (AMO.md for Firefox) needs its own run with --store and that file. Status is failed when a store and locale have no screenshots or more than the store takes (Chrome 5, Edge 6). Binding, zip and listing are checked before Chromium starts. Each record carries the PNGs of that store for the locale as attachments in the private evidence storage of the project (the evidence push --attach upload: 10 MB per file, 20 per record); identical images upload once, and uploading needs a connection.";
            readonly localeSwitching: "Each locale runs in a fresh Chromium with its UI language set (--lang; LANGUAGE on Linux; -AppleLanguages on macOS, where --lang has no effect). chrome.i18n inside the extension has to report the locale and render a message from _locales/<locale>; a mismatch fails the run. A locale missing from _locales is refused.";
            readonly determinism: "Fixed viewport and device scale factor, reduced motion, animations/transitions/caret disabled, UTC timezone, optional fixed clock (time), fonts and images awaited before capture, store canvas composed by a WebAssembly renderer. Identical inputs produce byte-identical PNGs on the same machine.";
            readonly sizes: {
                readonly chrome: "1280×800 (default) or 640×400 with --small; full bleed; 1–5 per locale — https://developer.chrome.com/docs/webstore/images";
                readonly edge: "1280×800 or 640×480 with --small; up to 6 — https://learn.microsoft.com/en-us/microsoft-edge/extensions/publish/publish-extension";
                readonly firefox: "1280×800 recommended (1.6:1), uploaded as AMO previews — https://extensionworkshop.com/documentation/develop/create-an-appealing-listing/";
            };
            readonly scenesFormat: {
                readonly example: {
                    readonly version: 1;
                    readonly viewport: {
                        readonly width: 1280;
                        readonly height: 800;
                    };
                    readonly deviceScaleFactor: 2;
                    readonly fixtures: "fixtures";
                    readonly frame: {
                        readonly background: "#eef2ff";
                        readonly backgroundTo: "#e0e7ff";
                        readonly margin: 48;
                        readonly shadow: true;
                        readonly radius: 12;
                    };
                    readonly setup: readonly [{
                        readonly storage: {
                            readonly area: "local";
                            readonly set: {
                                readonly onboarded: true;
                            };
                        };
                    }];
                    readonly scenes: readonly [{
                        readonly name: "popup";
                        readonly open: "popup";
                        readonly steps: readonly [{
                            readonly click: "#enable";
                        }, {
                            readonly wait: 300;
                        }];
                    }, {
                        readonly name: "on-a-page";
                        readonly open: "fixture:article.{locale}.html";
                        readonly steps: readonly [{
                            readonly mouse: {
                                readonly x: 640;
                                readonly y: 330;
                            };
                        }];
                    }, {
                        readonly name: "options";
                        readonly open: "options";
                        readonly crop: {
                            readonly selector: "main";
                            readonly padding: 24;
                        };
                    }];
                };
                readonly open: "popup | options (from the manifest) | page:<path inside the extension> | fixture:<file under fixtures, served from 127.0.0.1> | url:https://…. {locale} and {lang} expand to the _locales code (pt_BR) and BCP 47 tag (pt-BR).";
                readonly steps: "click <selector>, hover <selector>, type <selector> + text, press <key>, mouse {x,y}, scroll {x?,y}, wait <ms up to 30000>, waitFor <selector> (+state), storage {area: local|sync|session, set?, remove?, clear?} in the extension context, eval <JS expression> in the scene page.";
                readonly sceneOptions: "viewport, colorScheme (light|dark), init (JS before the page scripts, e.g. stubbing chrome.tabs.query for a popup opened as a tab), crop (viewport | content — default for popup | fullPage | {selector, padding}), fit (contain — centered on the frame, not magnified past its captured pixels | cover), frame, stores (subset).";
                readonly fileOptions: "viewport (default 1280×800), deviceScaleFactor (1–3), colorScheme, time (ISO date for Date.now), fixtures (dir, default the scenes file dir), animations (disabled|allow), frame {background, backgroundTo, margin, shadow, radius}, setup (steps run once per locale before the scenes), scenes (1–12).";
            };
        };
        readonly storeAssets: {
            readonly command: "npx @extenshi/cli@latest icon store-assets <icon.svg|png> [--store chrome,edge,firefox] [--out store-assets] [--background <color>] [--promo <file>] [--marquee <file>] [--font <file.ttf>]";
            readonly outputs: {
                readonly chrome: "icon-128.png (96×96 artwork + 16 px transparent padding), promo-small-440x280.png (required), marquee-1400x560.png — https://developer.chrome.com/docs/webstore/images";
                readonly edge: "logo-300x300.png (1:1, min 128), promo-small-440x280.png, promo-large-1400x560.png — https://learn.microsoft.com/en-us/microsoft-edge/extensions/publish/publish-extension";
                readonly firefox: "icon-128.png (AMO listing icon; AMO derives 32/64), icon-64.png and icon-32.png (manifest icons) — https://mozilla.github.io/addons-server/topics/api/addons.html#addon-icon";
            };
            readonly notes: "Offline WebAssembly renderer, no API key. Built-in padding in the source is trimmed rather than doubled. Tiles are composed from the icon on a tint of its colour unless --promo / --marquee artwork is given; clipped content, wrong aspect ratios and upscaled rasters are reported as warnings. <style> blocks in SVG sources are removed by the scrubber; text uses matching system fonts or --font.";
        };
        readonly publicMedia: {
            readonly tool: "upload_project_media (hosted.write)";
            readonly cli: "npx @extenshi/cli@latest media upload <file…> --project <id>, or page publish --upload-local";
            readonly accepts: "PNG, JPEG or WebP up to 2 MB, 16–4096 px per side; SVG is rasterized by the CLI (the MCP tool refuses it). Magic bytes are checked, EXIF/XMP/text metadata and trailing bytes are stripped, and the key is the SHA-256 of the stored bytes, so the URL is stable and a re-upload returns the same URL. Quota: 100 files / 50 MB per project, Dojo uploads included.";
            readonly use: "The returned url is accepted by publish_landing_page as screenshots[].url, a screenshots section item url, seo.ogImageUrl or logoUrl.";
        };
    };
    handoff: string[];
};
export type GuideSections = ReturnType<typeof buildSections>;
/** Normalise a caller's `sections` argument: unknown ids are dropped, `all` expands. */
export declare function resolveGuideSections(requested?: readonly string[]): GuideSection[];
/**
 * Build the guide. With no `sections`, returns the compact overview: tool names,
 * workflow stage ids with exit criteria, and a table of contents. Listed
 * sections (or `all`) are returned in full.
 */
export declare function buildDevelopmentGuide(registeredTools: readonly GuideTool[], requested?: readonly string[]): {
    schemaVersion: 2;
    documentation: string;
    availability: string;
} & Partial<GuideSections> & Record<string, unknown>;
export {};
//# sourceMappingURL=development-guide.d.ts.map