@extenshi/mcp 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -4
- package/dist/bff.d.ts +87 -0
- package/dist/bff.d.ts.map +1 -1
- package/dist/bff.js +17 -0
- package/dist/bff.js.map +1 -1
- package/dist/development-guide.d.ts +34 -33
- package/dist/development-guide.d.ts.map +1 -1
- package/dist/development-guide.js +35 -9
- package/dist/development-guide.js.map +1 -1
- package/dist/landing-page.d.ts +22 -4
- package/dist/landing-page.d.ts.map +1 -1
- package/dist/landing-page.js +14 -11
- package/dist/landing-page.js.map +1 -1
- package/dist/landing-sections.d.ts +332 -0
- package/dist/landing-sections.d.ts.map +1 -0
- package/dist/landing-sections.js +1071 -0
- package/dist/landing-sections.js.map +1 -0
- package/dist/landing-workflow.d.ts +18 -0
- package/dist/landing-workflow.d.ts.map +1 -1
- package/dist/landing-workflow.js +56 -5
- package/dist/landing-workflow.js.map +1 -1
- package/dist/pay.d.ts +25 -1
- package/dist/pay.d.ts.map +1 -1
- package/dist/pay.js +22 -0
- package/dist/pay.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +559 -5
- package/dist/tools.js.map +1 -1
- package/package.json +11 -11
|
@@ -63,26 +63,26 @@ export declare const DEVELOPMENT_SERVICES: readonly [{
|
|
|
63
63
|
}, {
|
|
64
64
|
readonly id: "privacy";
|
|
65
65
|
readonly purpose: "A policy that reflects actual data practices: generated and exported, or hosted with version history.";
|
|
66
|
-
readonly tools: readonly ["list_privacy_policy_versions", "get_privacy_policy_version", "update_privacy_policy_with_ai", "publish_privacy_policy"];
|
|
67
|
-
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.";
|
|
66
|
+
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"];
|
|
67
|
+
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.";
|
|
68
68
|
readonly urls: readonly [string, string, string];
|
|
69
69
|
}, {
|
|
70
70
|
readonly id: "onboarding";
|
|
71
71
|
readonly purpose: "Welcome page, pin guide, install instructions and uninstall survey, with verified URLs wired into the extension.";
|
|
72
|
-
readonly tools: readonly ["generate_welcome_page_workflow", "get_project_state"];
|
|
73
|
-
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; it
|
|
74
|
-
readonly urls: readonly [string, string, string, string, string, string, string];
|
|
72
|
+
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"];
|
|
73
|
+
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).";
|
|
74
|
+
readonly urls: readonly [string, string, string, string, string, string, string, string];
|
|
75
75
|
}, {
|
|
76
76
|
readonly id: "listing-and-marketing";
|
|
77
77
|
readonly purpose: "Listing copy, screenshots, landing page, support links and AI discovery assets.";
|
|
78
|
-
readonly tools: readonly ["generate_landing_page", "publish_landing_page", "get_landing_page", "unpublish_landing_page", "upload_project_media", "upsert_hosted_page"];
|
|
79
|
-
readonly access: "The landing-page generator is free and offline: it returns static HTML (CLI: extenshi page generate). 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; 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.";
|
|
78
|
+
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"];
|
|
79
|
+
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.";
|
|
80
80
|
readonly urls: readonly [string, string, string, string, string, string];
|
|
81
81
|
}, {
|
|
82
82
|
readonly id: "verification-and-ci";
|
|
83
83
|
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.";
|
|
84
84
|
readonly tools: readonly ["scan_extension", "record_project_evidence", "get_release_readiness"];
|
|
85
|
-
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
|
|
85
|
+
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.";
|
|
86
86
|
readonly urls: readonly [string, string, string];
|
|
87
87
|
}, {
|
|
88
88
|
readonly id: "publishing";
|
|
@@ -99,7 +99,7 @@ export declare const DEVELOPMENT_SERVICES: readonly [{
|
|
|
99
99
|
}, {
|
|
100
100
|
readonly id: "monetization";
|
|
101
101
|
readonly purpose: "Optional paid-feature integration: seller setup, offers, checkout, signed entitlements and purchase verification.";
|
|
102
|
-
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", "set_pay_enabled", "rotate_pay_key"];
|
|
102
|
+
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"];
|
|
103
103
|
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. 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.";
|
|
104
104
|
readonly urls: readonly [string, "https://dojo.extenshi.io/payments"];
|
|
105
105
|
}];
|
|
@@ -123,85 +123,85 @@ declare function buildSections(registeredTools: readonly GuideTool[]): {
|
|
|
123
123
|
docs: string;
|
|
124
124
|
}[];
|
|
125
125
|
services: ({
|
|
126
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
126
|
+
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")[];
|
|
127
127
|
id: "documentation";
|
|
128
128
|
purpose: "Capabilities, extension shapes, exact CLI commands and reusable skill packages.";
|
|
129
129
|
access: "Free reference; no API key. Hosted transport still requires connector sign-in.";
|
|
130
130
|
urls: readonly [string, string, string];
|
|
131
131
|
} | {
|
|
132
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
132
|
+
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")[];
|
|
133
133
|
id: "account";
|
|
134
134
|
purpose: "Sign-in, API keys for local tools and credit-pool balances ahead of paid work.";
|
|
135
135
|
access: "Balance lookup is free and requires identity; catalog reads and scans use credit pools.";
|
|
136
136
|
urls: readonly [string, "https://dojo.extenshi.io/api-keys", "https://dojo.extenshi.io/billing"];
|
|
137
137
|
} | {
|
|
138
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
138
|
+
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")[];
|
|
139
139
|
id: "research";
|
|
140
140
|
purpose: "Demand, competitors, user complaints, permissions and existing security findings.";
|
|
141
141
|
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.";
|
|
142
142
|
urls: readonly [string, "https://catalog.extenshi.io"];
|
|
143
143
|
} | {
|
|
144
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
144
|
+
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")[];
|
|
145
145
|
id: "projects";
|
|
146
146
|
purpose: "Existing projects: selected browser types, manifests, repository binding, saved tool state, hosted URLs and starter files.";
|
|
147
147
|
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.";
|
|
148
148
|
urls: readonly [string, "https://dojo.extenshi.io/projects", "https://dojo.extenshi.io/integrations"];
|
|
149
149
|
} | {
|
|
150
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
150
|
+
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")[];
|
|
151
151
|
id: "manifest";
|
|
152
152
|
purpose: "Minimum permissions, target browsers and manifest entries, with every referenced file present.";
|
|
153
153
|
access: "Free template reference; project reads require identity. The cabinet also has a manifest editor.";
|
|
154
154
|
urls: readonly [string, string];
|
|
155
155
|
} | {
|
|
156
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
156
|
+
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")[];
|
|
157
157
|
id: "localization";
|
|
158
158
|
purpose: "Local translation of extension messages and validation of the resulting locales.";
|
|
159
159
|
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.";
|
|
160
160
|
urls: readonly [string];
|
|
161
161
|
} | {
|
|
162
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
162
|
+
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")[];
|
|
163
163
|
id: "icons";
|
|
164
164
|
purpose: "SVG icon design, toolbar-size preview and store-asset export with the local CLI.";
|
|
165
165
|
access: "Free. Drawing, browser preview and file export happen locally; the cabinet offers its own icon generator subject to availability and credits.";
|
|
166
166
|
urls: readonly [string, string];
|
|
167
167
|
} | {
|
|
168
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
168
|
+
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")[];
|
|
169
169
|
id: "privacy";
|
|
170
170
|
purpose: "A policy that reflects actual data practices: generated and exported, or hosted with version history.";
|
|
171
|
-
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.";
|
|
171
|
+
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.";
|
|
172
172
|
urls: readonly [string, string, string];
|
|
173
173
|
} | {
|
|
174
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
174
|
+
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")[];
|
|
175
175
|
id: "onboarding";
|
|
176
176
|
purpose: "Welcome page, pin guide, install instructions and uninstall survey, with verified URLs wired into the extension.";
|
|
177
|
-
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; it
|
|
178
|
-
urls: readonly [string, string, string, string, string, string, string];
|
|
177
|
+
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).";
|
|
178
|
+
urls: readonly [string, string, string, string, string, string, string, string];
|
|
179
179
|
} | {
|
|
180
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
180
|
+
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")[];
|
|
181
181
|
id: "listing-and-marketing";
|
|
182
182
|
purpose: "Listing copy, screenshots, landing page, support links and AI discovery assets.";
|
|
183
|
-
access: "The landing-page generator is free and offline: it returns static HTML (CLI: extenshi page generate). 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; 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.";
|
|
183
|
+
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.";
|
|
184
184
|
urls: readonly [string, string, string, string, string, string];
|
|
185
185
|
} | {
|
|
186
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
186
|
+
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")[];
|
|
187
187
|
id: "verification-and-ci";
|
|
188
188
|
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.";
|
|
189
|
-
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
|
|
189
|
+
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.";
|
|
190
190
|
urls: readonly [string, string, string];
|
|
191
191
|
} | {
|
|
192
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
192
|
+
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")[];
|
|
193
193
|
id: "publishing";
|
|
194
194
|
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.";
|
|
195
195
|
access: string;
|
|
196
196
|
urls: readonly [string, string, string, string, string];
|
|
197
197
|
} | {
|
|
198
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
198
|
+
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")[];
|
|
199
199
|
id: "maintenance";
|
|
200
200
|
purpose: "Listing claims, finding responses, reviews and uninstall feedback, policy updates and ongoing releases.";
|
|
201
201
|
access: "Catalog reads are metered. Ownership, declarations, responses, badges and feedback management live in the cabinet and depend on account access.";
|
|
202
202
|
urls: readonly [string, string, string, string, string];
|
|
203
203
|
} | {
|
|
204
|
-
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" | "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" | "generate_welcome_page_workflow" | "generate_landing_page" | "publish_landing_page" | "get_landing_page" | "unpublish_landing_page" | "upload_project_media" | "scan_extension" | "publish_extension")[];
|
|
204
|
+
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")[];
|
|
205
205
|
id: "monetization";
|
|
206
206
|
purpose: "Optional paid-feature integration: seller setup, offers, checkout, signed entitlements and purchase verification.";
|
|
207
207
|
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. 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.";
|
|
@@ -241,12 +241,12 @@ declare function buildSections(registeredTools: readonly GuideTool[]): {
|
|
|
241
241
|
readonly doneWhen: "Acceptance criteria pass on real target surfaces; optional integrations have end-to-end evidence or remain explicit blockers.";
|
|
242
242
|
}, {
|
|
243
243
|
readonly id: "assets-and-hosted-pages";
|
|
244
|
-
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 on any HTTPS origin; it is registered as the project homepage, which sets HOMEPAGE_URL. 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.";
|
|
245
|
-
readonly relatedTools: readonly ["generate_icon_workflow", "generate_welcome_page_workflow", "generate_landing_page", "publish_landing_page", "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"];
|
|
244
|
+
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.";
|
|
245
|
+
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"];
|
|
246
246
|
readonly doneWhen: "Assets show the real product; hosted links load and match actual data practices; installation/uninstallation flows work.";
|
|
247
247
|
}, {
|
|
248
248
|
readonly id: "quality-and-listing";
|
|
249
|
-
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
|
|
249
|
+
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.";
|
|
250
250
|
readonly relatedTools: readonly ["search_docs", "scan_extension", "get_release_readiness"];
|
|
251
251
|
readonly doneWhen: "The exact versioned artifact has passing checks, retained scan/review reports and truthful store materials; unresolved findings have a disposition.";
|
|
252
252
|
}, {
|
|
@@ -262,9 +262,10 @@ declare function buildSections(registeredTools: readonly GuideTool[]): {
|
|
|
262
262
|
}];
|
|
263
263
|
storeMedia: {
|
|
264
264
|
readonly screenshots: {
|
|
265
|
-
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]";
|
|
265
|
+
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]]";
|
|
266
266
|
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.";
|
|
267
267
|
readonly output: "<out>/<store>/<locale>/NN-<scene>-WxH.png, plus <out>/screenshots.json (files with sha256, verified locales, warnings).";
|
|
268
|
+
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.";
|
|
268
269
|
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.";
|
|
269
270
|
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.";
|
|
270
271
|
readonly sizes: {
|
|
@@ -341,7 +342,7 @@ declare function buildSections(registeredTools: readonly GuideTool[]): {
|
|
|
341
342
|
readonly tool: "upload_project_media (hosted.write)";
|
|
342
343
|
readonly cli: "npx @extenshi/cli@latest media upload <file…> --project <id>, or page publish --upload-local";
|
|
343
344
|
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.";
|
|
344
|
-
readonly use: "The returned url is accepted by publish_landing_page as screenshots[].url or logoUrl.";
|
|
345
|
+
readonly use: "The returned url is accepted by publish_landing_page as screenshots[].url, a screenshots section item url, seo.ogImageUrl or logoUrl.";
|
|
345
346
|
};
|
|
346
347
|
};
|
|
347
348
|
handoff: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"development-guide.d.ts","sourceRoot":"","sources":["../src/development-guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE;QACZ,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,eAAe,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;CACD;AAKD,eAAO,MAAM,qBAAqB,QAA+B,CAAA;AAEjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"development-guide.d.ts","sourceRoot":"","sources":["../src/development-guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE;QACZ,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,eAAe,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;CACD;AAKD,eAAO,MAAM,qBAAqB,QAA+B,CAAA;AAEjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqOvB,CAAA;AA0GV,qFAAqF;AACrF,eAAO,MAAM,cAAc,mGAQjB,CAAA;AACV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AA2F1D,iBAAS,aAAa,CAAC,eAAe,EAAE,SAAS,SAAS,EAAE;;;cAjcrD,MAAM;qBACC,MAAM;qBACN;YACZ,YAAY,CAAC,EAAE,OAAO,CAAA;YACtB,eAAe,CAAC,EAAE,OAAO,CAAA;SACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAufD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;AAE5D,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,EAAE,CAIlF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACpC,eAAe,EAAE,SAAS,SAAS,EAAE,EACrC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAC3B;IAAE,aAAa,EAAE,CAAC,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,aAAa,CAAC,GAC5F,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBvB"}
|
|
@@ -88,18 +88,29 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
88
88
|
'get_privacy_policy_version',
|
|
89
89
|
'update_privacy_policy_with_ai',
|
|
90
90
|
'publish_privacy_policy',
|
|
91
|
+
'get_legal_translations',
|
|
92
|
+
'set_legal_translations',
|
|
91
93
|
],
|
|
92
|
-
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.',
|
|
94
|
+
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.',
|
|
93
95
|
urls: [docs('privacy-policy-generator'), docs('data-declaration'), toolPage('privacy-policy-generator')],
|
|
94
96
|
},
|
|
95
97
|
{
|
|
96
98
|
id: 'onboarding',
|
|
97
99
|
purpose: 'Welcome page, pin guide, install instructions and uninstall survey, with verified URLs wired into the extension.',
|
|
98
|
-
tools: [
|
|
99
|
-
|
|
100
|
+
tools: [
|
|
101
|
+
'generate_welcome_page_workflow',
|
|
102
|
+
'get_project_state',
|
|
103
|
+
'get_install_instructions',
|
|
104
|
+
'publish_install_instructions',
|
|
105
|
+
'unpublish_install_instructions',
|
|
106
|
+
'get_page_translations',
|
|
107
|
+
'set_page_translations',
|
|
108
|
+
],
|
|
109
|
+
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).',
|
|
100
110
|
urls: [
|
|
101
111
|
DEVELOPMENT_GUIDE_URL,
|
|
102
112
|
docs('pin-guide'),
|
|
113
|
+
docs('install-instructions'),
|
|
103
114
|
docs('uninstall-feedback'),
|
|
104
115
|
toolPage('onboarding-page'),
|
|
105
116
|
toolPage('instruction-generator'),
|
|
@@ -112,13 +123,21 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
112
123
|
purpose: 'Listing copy, screenshots, landing page, support links and AI discovery assets.',
|
|
113
124
|
tools: [
|
|
114
125
|
'generate_landing_page',
|
|
126
|
+
'draft_landing_page',
|
|
127
|
+
'preview_landing_page',
|
|
115
128
|
'publish_landing_page',
|
|
116
129
|
'get_landing_page',
|
|
130
|
+
'list_landing_page_versions',
|
|
131
|
+
'rollback_landing_page',
|
|
117
132
|
'unpublish_landing_page',
|
|
133
|
+
'get_custom_domain',
|
|
134
|
+
'set_custom_domain',
|
|
135
|
+
'verify_custom_domain',
|
|
136
|
+
'remove_custom_domain',
|
|
118
137
|
'upload_project_media',
|
|
119
138
|
'upsert_hosted_page',
|
|
120
139
|
],
|
|
121
|
-
access: "The landing-page generator is free and offline: it returns static HTML (CLI: extenshi page generate). 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; 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.",
|
|
140
|
+
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.",
|
|
122
141
|
urls: [
|
|
123
142
|
docs('cli'),
|
|
124
143
|
docs('ai-visibility'),
|
|
@@ -132,7 +151,7 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
132
151
|
id: 'verification-and-ci',
|
|
133
152
|
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.',
|
|
134
153
|
tools: ['scan_extension', 'record_project_evidence', 'get_release_readiness'],
|
|
135
|
-
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
|
|
154
|
+
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.',
|
|
136
155
|
urls: [docs('cli'), docs('cli-github-actions'), docs('store-policies')],
|
|
137
156
|
},
|
|
138
157
|
{
|
|
@@ -184,6 +203,8 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
184
203
|
'set_pay_seller_profile',
|
|
185
204
|
'upsert_pay_offer',
|
|
186
205
|
'archive_pay_offer',
|
|
206
|
+
'get_pay_offer_translations',
|
|
207
|
+
'set_pay_offer_translations',
|
|
187
208
|
'set_pay_enabled',
|
|
188
209
|
'rotate_pay_key',
|
|
189
210
|
],
|
|
@@ -237,12 +258,16 @@ const WORKFLOW = [
|
|
|
237
258
|
},
|
|
238
259
|
{
|
|
239
260
|
id: 'assets-and-hosted-pages',
|
|
240
|
-
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 on any HTTPS origin; it is registered as the project homepage, which sets HOMEPAGE_URL. 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.",
|
|
261
|
+
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.",
|
|
241
262
|
relatedTools: [
|
|
242
263
|
'generate_icon_workflow',
|
|
243
264
|
'generate_welcome_page_workflow',
|
|
244
265
|
'generate_landing_page',
|
|
266
|
+
'draft_landing_page',
|
|
267
|
+
'preview_landing_page',
|
|
245
268
|
'publish_landing_page',
|
|
269
|
+
'set_custom_domain',
|
|
270
|
+
'verify_custom_domain',
|
|
246
271
|
'upload_project_media',
|
|
247
272
|
'upsert_hosted_page',
|
|
248
273
|
'list_privacy_policy_versions',
|
|
@@ -255,7 +280,7 @@ const WORKFLOW = [
|
|
|
255
280
|
},
|
|
256
281
|
{
|
|
257
282
|
id: 'quality-and-listing',
|
|
258
|
-
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
|
|
283
|
+
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.',
|
|
259
284
|
relatedTools: ['search_docs', 'scan_extension', 'get_release_readiness'],
|
|
260
285
|
doneWhen: 'The exact versioned artifact has passing checks, retained scan/review reports and truthful store materials; unresolved findings have a disposition.',
|
|
261
286
|
},
|
|
@@ -298,9 +323,10 @@ const SECTION_SUMMARIES = {
|
|
|
298
323
|
*/
|
|
299
324
|
const STORE_MEDIA = {
|
|
300
325
|
screenshots: {
|
|
301
|
-
command: 'npx @extenshi/cli@latest screenshots <unpacked-dir|zip> --scenes scenes.json [--locales en,de] [--store chrome,edge,firefox] [--small] [--out store-screenshots] [--json]',
|
|
326
|
+
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]]',
|
|
302
327
|
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.',
|
|
303
328
|
output: '<out>/<store>/<locale>/NN-<scene>-WxH.png, plus <out>/screenshots.json (files with sha256, verified locales, warnings).',
|
|
329
|
+
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.',
|
|
304
330
|
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.',
|
|
305
331
|
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.',
|
|
306
332
|
sizes: {
|
|
@@ -345,7 +371,7 @@ const STORE_MEDIA = {
|
|
|
345
371
|
tool: 'upload_project_media (hosted.write)',
|
|
346
372
|
cli: 'npx @extenshi/cli@latest media upload <file…> --project <id>, or page publish --upload-local',
|
|
347
373
|
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.',
|
|
348
|
-
use: 'The returned url is accepted by publish_landing_page as screenshots[].url or logoUrl.',
|
|
374
|
+
use: 'The returned url is accepted by publish_landing_page as screenshots[].url, a screenshots section item url, seo.ogImageUrl or logoUrl.',
|
|
349
375
|
},
|
|
350
376
|
};
|
|
351
377
|
const AVAILABILITY = 'Tool lists describe the tools registered on THIS connection. Registration does not prove account access, remaining credits or local prerequisites. Service URLs describe where work happens; account/project access is checked live. Exact input schemas come from MCP tools/list. This guide makes no network calls.';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"development-guide.js","sourceRoot":"","sources":["../src/development-guide.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"development-guide.js","sourceRoot":"","sources":["../src/development-guide.ts"],"names":[],"mappings":"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"}
|