@extenshi/mcp 0.5.2 → 0.7.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 CHANGED
@@ -10,8 +10,9 @@ backend on your behalf.
10
10
 
11
11
  ## Get an API key
12
12
 
13
- An API key is **required** — every tool refuses to run without one, and the backend
14
- enforces it too.
13
+ An API key is required for catalog and own-project tools. Documentation, templates and static
14
+ workflow guides, including `get_development_guide`, work without a key. The backend enforces access
15
+ and project entitlements for authenticated operations.
15
16
 
16
17
  1. Sign up at **https://auth.extenshi.io/signup**
17
18
  2. Create a key at **https://dojo.extenshi.io/api-keys**
@@ -33,6 +34,14 @@ enforces it too.
33
34
  }
34
35
  ```
35
36
 
37
+ ## Plan the whole lifecycle
38
+
39
+ Call `get_development_guide` first for the complete tool inventory on this connection, the Extenshi
40
+ service directory, prerequisites and documentation links, GitHub source/CI guidance, and the ordered
41
+ plan through implementation, testing, store release and maintenance. The inventory is built from
42
+ registered tools. The remote connector shares this guide and directs local artifact operations to
43
+ stdio or CLI. See the [development workflow](https://docs.extenshi.io/developers/development-workflow).
44
+
36
45
  ## Tools
37
46
 
38
47
  | Tool | What it does | Cost |
@@ -44,7 +53,28 @@ enforces it too.
44
53
  | `get_risk_by_store_ids` | Safety scores for **up to 40** extensions in one call, by store id — for auditing a list of installed extensions instead of calling `get_security` per extension | 1 read per call |
45
54
  | `market_overview` | Catalog-wide market intelligence with no args (totals, store split, category tree, and the extended breakdown — MV2/MV3, sensitive permissions, risk tiers, trader status, recency, reviews); pass a `query` to scope facets to a search | 1 read |
46
55
  | `get_credit_balance` | Remaining credits across every pool (read / scan / icon / inventory), so an agent can size a batch before running it instead of hitting a mid-batch limit | Free |
56
+ | `get_development_guide` | Complete tool inventory for this connection, service directory, GitHub guidance and the ordered development-to-maintenance plan | Free (no key) |
57
+ | `list_extension_templates` | Extension shapes, minimum permissions and browser-specific manifest requirements | Free (no key) |
58
+ | `connection_diagnostics` | Authentication, scopes, backend workspace contracts and capabilities | Free; identity required |
59
+ | `import_manifest` | Import manifest JSON into the Dojo editor and project labels; preview changes and apply with a state hash. | Requires project.write for OAuth |
60
+ | `get_project_workspace` | Revisioned repository metadata, source/built manifests, scope and release snapshot | Free; identity required |
61
+ | `diff_project_state` | Three-way metadata preview against a server-held base revision | Free; project read access |
62
+ | `apply_project_patch` | Apply a typed metadata patch with conflicts, tombstones and idempotency | Requires project.write for OAuth |
63
+ | `create_ci_ingest_secret` | Create or rotate the CI evidence ingest secret (shown once, store in Actions secrets) | Requires project.write for OAuth |
64
+ | `upsert_hosted_page` | Register the project homepage/support URL (HTTPS, reachable, hashed) | Requires hosted.write for OAuth |
65
+ | `verify_hosted_artifact` | Re-fetch and compare a hosted page against its record (verified/changed/unreachable) | Requires hosted.write for OAuth |
66
+ | `list_hosted_pages` | Registered hosted pages with verification status | Free; identity required |
67
+ | `record_project_evidence` | Store metadata bound to the exact artifact, input hash, browser and source revision | Requires evidence.write for OAuth |
68
+ | `get_release_readiness` | Explain current, stale and missing release checks by browser and locale | Pro project; project read access |
69
+ | `list_my_projects` | Your projects, repository bindings and claimed listings | Free; identity required |
70
+ | `get_project_state` | Manifest, selected types, saved-state index, hosted URLs and exact integration file | Free; identity required |
71
+ | `get_project_scaffold` | Starter files for one project and target browser | Free; identity required |
72
+ | `list_privacy_policy_versions` | Hosted policy version history | Pro project; no read credit |
73
+ | `get_privacy_policy_version` | One hosted policy's markdown and HTML | Pro project; no read credit |
74
+ | `update_privacy_policy_with_ai` | Propose a policy update for the author to review | Pro project; daily update limit applies |
75
+ | `publish_privacy_policy` | Publish a policy at the project's hosted URL | Pro project; changes the live page |
47
76
  | `search_docs` | Search the Extenshi docs + `@extenshi/cli` reference so the assistant can quote exact commands | Free (no key) |
77
+ | `localize_workflow` | Local message translation contract, CLI validation and manual review gates | Free (no key) |
48
78
  | `generate_icon_workflow` | Icon design requirements + the local agent-draws-SVG → `npx @extenshi/cli@latest icon preview` → export workflow | Free (no key) |
49
79
  | `generate_welcome_page_workflow` | Design brief for the post-install welcome page: the one action it must drive, which illustrations to produce, where to place click markers, and the block JSON to return | Free (no key) |
50
80
  | `scan_extension` | Pre-publish security scan of a local artifact (.zip/.crx/.xpi), with live progress | 1 scan |
@@ -91,3 +121,31 @@ EXTENSHI_API_KEY=ek_… npx @modelcontextprotocol/inspector node dist/index.js
91
121
 
92
122
  Publishing is handled by `./scripts/publish.sh` (npm Automation token from Infisical;
93
123
  `DRY_RUN=1 ./scripts/publish.sh` to validate). Requires Node ≥20.
124
+
125
+ See the [project synchronization workflow](https://docs.extenshi.io/developers/project-sync) for CLI commands, revision conflicts, evidence freshness and OAuth recovery.
126
+
127
+
128
+ ### Standalone Pay applications
129
+
130
+ These tools require a backend with standalone Pay support. A development project is optional. Request explicit `pay.read` and/or `pay.write` OAuth scopes, or grant Pay permissions to a local API key in [API keys](https://dojo.extenshi.io/api-keys). Older credentials have no Pay access. Tool registration does not prove backend rollout or SDK npm publication.
131
+
132
+ | Tool | Permission | Behavior |
133
+ | --- | --- | --- |
134
+ | `list_pay_apps` | `pay.read` | List your independent Pay applications. No development project required. Follow nextCursor for more results. |
135
+ | `create_pay_app` | `pay.write` | Create an independent Pay application; linking a development project is optional. Creates a new application on every call: do not retry blindly after a timeout. |
136
+ | `get_pay_app` | `pay.read` | Read your Pay application and optional project link. |
137
+ | `get_pay_readiness` | `pay.read` | Check current checkout and launch prerequisites. A passing checkout check does not prove a live external purchase or SDK publication. |
138
+ | `link_pay_app` | `pay.write` | Link your Pay application to your development project. Existing purchases remain attached to the Pay application. |
139
+ | `unlink_pay_app` | `pay.write` | Remove the optional development-project link without deleting Pay data. |
140
+ | `archive_pay_app` | `pay.write` | Archive your application and stop new checkout. Preserve payment records and existing entitlements. |
141
+ | `export_pay_data` | `pay.read` | Export one page of your application data. Follow nextCursor until null for a complete export. Customer/payment data is sensitive: save only to an author-controlled destination; never paste into public issues. |
142
+ | `get_pay_seller` | `pay.read` | Read seller connection, public profile, offers and publishable SDK key. Agreement signing and KYC require the author in the browser. |
143
+ | `connect_pay_seller` | `pay.write` | Start Stripe Connect onboarding and return a browser action URL. The author must complete KYC and legal acceptance; never do these on their behalf. |
144
+ | `refresh_pay_seller` | `pay.write` | Refresh current payment-provider onboarding status. This does not complete KYC or accept agreements. |
145
+ | `set_pay_seller_profile` | `pay.write` | Save author-confirmed public seller identity, support and terms links. Never invent legal identity or terms. |
146
+ | `upsert_pay_offer` | `pay.write` | Create or update an offer by stable SKU. Price is in minor currency units. Use only the author-approved price, billing interval and features. |
147
+ | `archive_pay_offer` | `pay.write` | Stop offering a SKU for new checkout; preserve historical purchases. |
148
+ | `set_pay_enabled` | `pay.write` | Explicitly enable or disable new payments. Enabling is a live commerce change: only do so with author authorization and after checking readiness. Backend prerequisites remain enforced. |
149
+ | `rotate_pay_key` | `pay.write` | Generate a new publishable SDK key. Prior keys remain accepted for installed extension builds; this is not secret revocation. Never retry blindly. |
150
+
151
+ The author completes legal acceptance and Stripe KYC in the browser. Read `get_pay_readiness` before enabling checkout; enablement, key rotation and offer changes require explicit author authorization. Export pages contain private financial data and must remain in an author-controlled destination. Only the publishable SDK key belongs in an extension, never a developer API key or Stripe secret.
package/dist/bff.d.ts CHANGED
@@ -12,6 +12,7 @@
12
12
  * (no anonymous data access) — sending the key now is forward-compatible and
13
13
  * needs no client change when enforcement lands.
14
14
  */
15
+ import { type PayBff } from './pay.js';
15
16
  /** One credit pool as reported by `getApiCallerBalance`. */
16
17
  export interface CreditPool {
17
18
  /** Total calls this pool can still fund (free grant + purchased) — the single number that gates a call. */
@@ -34,7 +35,20 @@ export interface ExtensionRef {
34
35
  id: number;
35
36
  store: 'CHROME' | 'FIREFOX' | 'EDGE';
36
37
  }
37
- export interface Bff {
38
+ export interface Bff extends PayBff {
39
+ importManifest(input: import('@extenshi/contracts').ManifestImport): Promise<unknown>;
40
+ getProjectWorkspace(input: {
41
+ projectId: string;
42
+ }): Promise<unknown>;
43
+ diffProjectWorkspace(input: import('@extenshi/contracts').WorkspacePatch): Promise<unknown>;
44
+ patchProjectWorkspace(input: import('@extenshi/contracts').WorkspacePatch): Promise<unknown>;
45
+ recordProjectEvidence(input: Omit<import('@extenshi/contracts').Evidence, 'id' | 'recordedAt'>): Promise<unknown>;
46
+ getReleaseReadiness(input: {
47
+ projectId: string;
48
+ browser?: 'chrome' | 'firefox' | 'edge';
49
+ artifactDigest?: string;
50
+ }): Promise<unknown>;
51
+ connectionDiagnostics(): Promise<unknown>;
38
52
  searchExtensions(input: Record<string, unknown>): Promise<unknown>;
39
53
  getExtensionById(id: number): Promise<unknown>;
40
54
  /** Paginated store user reviews for an extension (PII-free projection). */
@@ -94,6 +108,45 @@ export interface Bff {
94
108
  projectId: string;
95
109
  browser?: string;
96
110
  }): Promise<unknown>;
111
+ listPrivacyPolicyVersions(input: {
112
+ projectId: string;
113
+ }): Promise<unknown>;
114
+ getPrivacyPolicyVersion(input: {
115
+ projectId: string;
116
+ versionNumber: number;
117
+ }): Promise<unknown>;
118
+ publishPrivacyPolicy(input: {
119
+ projectId: string;
120
+ bodyMarkdown?: string;
121
+ kind?: string;
122
+ }): Promise<unknown>;
123
+ updatePrivacyPolicyWithAi(input: {
124
+ projectId: string;
125
+ }): Promise<unknown>;
126
+ /**
127
+ * Create (or ROTATE) the per-project CI evidence ingest secret. The
128
+ * plaintext is shown once and belongs in the repository's Actions secrets.
129
+ */
130
+ createCiIngestSecret(input: {
131
+ projectId: string;
132
+ }): Promise<unknown>;
133
+ revokeCiIngestSecret(input: {
134
+ projectId: string;
135
+ }): Promise<unknown>;
136
+ /** Register a project's homepage/support URL (HTTPS, reachable, hashed). */
137
+ upsertHostedPage(input: {
138
+ projectId: string;
139
+ kind: string;
140
+ url: string;
141
+ }): Promise<unknown>;
142
+ /** Re-fetch and compare: verified | changed | unreachable per kind. */
143
+ verifyHostedArtifact(input: {
144
+ projectId: string;
145
+ kind: string;
146
+ }): Promise<unknown>;
147
+ listHostedPages(input: {
148
+ projectId: string;
149
+ }): Promise<unknown>;
97
150
  }
98
151
  /** Build a BFF client from a static `ek_…` key (stdio path). */
99
152
  export declare function makeBff(bffUrl: string, apiKey: string): Bff;
package/dist/bff.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bff.d.ts","sourceRoot":"","sources":["../src/bff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bff.d.ts","sourceRoot":"","sources":["../src/bff.ts"],"names":[],"mappings":"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"}
package/dist/bff.js CHANGED
@@ -13,6 +13,7 @@
13
13
  * needs no client change when enforcement lands.
14
14
  */
15
15
  import { createTRPCClient, httpBatchLink } from '@trpc/client';
16
+ import { PAY_OPERATIONS, payWireInput } from './pay.js';
16
17
  /** Build a BFF client from a static `ek_…` key (stdio path). */
17
18
  export function makeBff(bffUrl, apiKey) {
18
19
  return makeBffWithAuth(bffUrl, () => `Bearer ${apiKey}`);
@@ -34,7 +35,22 @@ export function makeBffWithAuth(bffUrl, authHeader) {
34
35
  });
35
36
  // NB: the store router is mounted under `catalog` in the BFF appRouter
36
37
  // (routers/index.ts: `catalog: storeRouter`), NOT `store`. Security is `security`.
38
+ const pay = Object.fromEntries(PAY_OPERATIONS.map(([method, , , procedure, mutation]) => [
39
+ method,
40
+ (input) => {
41
+ const [router, action] = procedure.split('.');
42
+ return client[router][action][mutation ? 'mutate' : 'query'](payWireInput(method, input));
43
+ },
44
+ ]));
37
45
  return {
46
+ ...pay,
47
+ importManifest: (input) => client.devProject.agentImportManifest.mutate(input),
48
+ getProjectWorkspace: (input) => client.devProject.agentGetWorkspace.query(input),
49
+ diffProjectWorkspace: (input) => client.devProject.agentDiffWorkspace.mutate(input),
50
+ patchProjectWorkspace: (input) => client.devProject.agentPatchWorkspace.mutate(input),
51
+ recordProjectEvidence: (input) => client.devProject.agentRecordEvidence.mutate(input),
52
+ getReleaseReadiness: (input) => client.devProject.agentReleaseReadiness.query(input),
53
+ connectionDiagnostics: () => client.devProject.agentConnectionDiagnostics.query(),
38
54
  searchExtensions: (input) => client.catalog.searchExtensions.query(input),
39
55
  getExtensionById: (id) => client.catalog.getExtensionById.query({ id }),
40
56
  getReviews: (input) => client.catalog.getReviewsForExtension.query(input),
@@ -50,6 +66,15 @@ export function makeBffWithAuth(bffUrl, authHeader) {
50
66
  listMyProjects: () => client.devProject.agentListProjects.query(),
51
67
  getMyProjectState: (input) => client.devProject.agentGetProjectState.query(input),
52
68
  getMyProjectScaffold: (input) => client.devProject.agentGetProjectScaffold.query(input),
69
+ listPrivacyPolicyVersions: (input) => client.privacyPolicy.agentListVersions.query(input),
70
+ getPrivacyPolicyVersion: (input) => client.privacyPolicy.agentGetVersion.query(input),
71
+ publishPrivacyPolicy: (input) => client.privacyPolicy.agentPublish.mutate(input),
72
+ updatePrivacyPolicyWithAi: (input) => client.privacyPolicy.agentUpdateWithAi.mutate(input),
73
+ createCiIngestSecret: (input) => client.devProject.agentCreateCiIngestSecret.mutate(input),
74
+ revokeCiIngestSecret: (input) => client.devProject.agentRevokeCiIngestSecret.mutate(input),
75
+ upsertHostedPage: (input) => client.devProject.agentUpsertHostedPage.mutate(input),
76
+ verifyHostedArtifact: (input) => client.devProject.agentVerifyHostedArtifact.mutate(input),
77
+ listHostedPages: (input) => client.devProject.agentListHostedPages.query(input),
53
78
  };
54
79
  }
55
80
  //# sourceMappingURL=bff.js.map
package/dist/bff.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bff.js","sourceRoot":"","sources":["../src/bff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAkF9D,gEAAgE;AAChE,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,MAAc;IACrD,OAAO,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,CAAA;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,UAA0C;IACzF,MAAM,MAAM,GAAkB,gBAAgB,CAAC;QAC9C,KAAK,EAAE;YACN,aAAa,CAAC;gBACb,GAAG,EAAE,GAAG,MAAM,WAAW;gBACzB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC;aAC5D,CAAC;SACF;KACD,CAAC,CAAA;IAEF,uEAAuE;IACvE,mFAAmF;IACnF,OAAO;QACN,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QACzE,gBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACvE,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;QACzE,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;QACxF,cAAc,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;QACtF,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QACvE,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;QAC/C,uBAAuB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,EAAE;QAC7E,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;QAC7D,mBAAmB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,EAAE;QACjE,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/E,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC;QACxF,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAE;QACjE,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;QACjF,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC;KACvF,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"bff.js","sourceRoot":"","sources":["../src/bff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,249 @@
1
+ /** Developer lifecycle guidance shared by local and hosted MCP transports.
2
+ * Tool inventory comes from registration, so it describes this server instance.
3
+ * Cabinet services are a directory, not a claim about the caller's entitlements.
4
+ */
5
+ export interface GuideTool {
6
+ name: string;
7
+ description: string;
8
+ annotations: {
9
+ readOnlyHint?: boolean;
10
+ destructiveHint?: boolean;
11
+ };
12
+ }
13
+ export declare const DEVELOPMENT_GUIDE_URL: string;
14
+ export declare const DEVELOPMENT_SERVICES: readonly [{
15
+ readonly id: "documentation";
16
+ readonly purpose: "Discover capabilities, extension shapes, exact CLI commands and reusable agent skills.";
17
+ readonly tools: readonly ["get_development_guide", "search_docs", "list_extension_templates"];
18
+ readonly access: "Free guidance; no API key. Hosted transport still requires connector sign-in.";
19
+ readonly urls: readonly [string, string, string];
20
+ }, {
21
+ readonly id: "account";
22
+ readonly purpose: "Sign in, provision an API key for local tools and check credit pools before paid work.";
23
+ readonly tools: readonly ["get_credit_balance", "connection_diagnostics"];
24
+ readonly access: "Balance lookup is free and requires identity; catalog reads and scans use credit pools.";
25
+ readonly urls: readonly [string, "https://dojo.extenshi.io/api-keys", "https://dojo.extenshi.io/billing"];
26
+ }, {
27
+ readonly id: "research";
28
+ readonly purpose: "Validate demand, competitors, user complaints, permissions and existing security findings.";
29
+ readonly tools: readonly ["search_extensions", "get_extension", "get_reviews", "get_security", "get_risk_by_store_ids", "market_overview"];
30
+ readonly access: "Identity required. Catalog tools cost 1 read per call; get_security costs 3. Bulk risk: up to 40 per call. Chrome review text is unavailable; use its aggregate.";
31
+ readonly urls: readonly [string, "https://catalog.extenshi.io"];
32
+ }, {
33
+ readonly id: "projects";
34
+ readonly purpose: "Read an existing project, selected browser types, manifests, repository binding, saved tool state, hosted URLs and starter files.";
35
+ readonly tools: readonly ["list_my_projects", "get_project_state", "get_project_scaffold", "get_project_workspace", "import_manifest", "diff_project_state", "apply_project_patch", "record_project_evidence", "create_ci_ingest_secret", "upsert_hosted_page", "verify_hosted_artifact", "list_hosted_pages", "get_release_readiness"];
36
+ readonly access: "Own-project MCP reads are free and require identity. Create projects in the cabinet. Synchronize repository metadata, source/built manifests and scope with 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 — create its secret with create_ci_ingest_secret. Automated release-readiness access requires a Pro project.";
37
+ readonly urls: readonly [string, "https://dojo.extenshi.io/projects", "https://dojo.extenshi.io/integrations"];
38
+ }, {
39
+ readonly id: "manifest";
40
+ readonly purpose: "Choose minimum permissions, target browsers and manifest entries; validate every referenced file.";
41
+ readonly tools: readonly ["list_extension_templates", "get_project_state", "get_project_scaffold"];
42
+ readonly access: "Free template guidance; project reads require identity. The cabinet also has a manifest editor.";
43
+ readonly urls: readonly [string, string];
44
+ }, {
45
+ readonly id: "localization";
46
+ readonly purpose: "Translate extension messages locally with your coding agent and validate the resulting locales.";
47
+ readonly tools: readonly ["localize_workflow"];
48
+ readonly access: "Free static workflow; local CLI validation requires no key or Extenshi credits. Translation uses your agent provider. Check CLI release availability before invoking commands.";
49
+ readonly urls: readonly [string];
50
+ }, {
51
+ readonly id: "icons";
52
+ readonly purpose: "Design the SVG, preview at toolbar sizes and export store assets with the local CLI.";
53
+ readonly tools: readonly ["generate_icon_workflow"];
54
+ readonly access: "Free workflow. Drawing, browser preview and file export happen in the local agent environment; the cabinet offers its own icon generator subject to availability and credits.";
55
+ readonly urls: readonly [string, string];
56
+ }, {
57
+ readonly id: "privacy";
58
+ readonly purpose: "Describe actual data practices; generate/export a policy or maintain a hosted policy and its version history.";
59
+ readonly tools: readonly ["list_privacy_policy_versions", "get_privacy_policy_version", "update_privacy_policy_with_ai", "publish_privacy_policy"];
60
+ 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.";
61
+ readonly urls: readonly [string, string, string];
62
+ }, {
63
+ readonly id: "onboarding";
64
+ readonly purpose: "Prepare a welcome page, pin guide, install instructions and uninstall survey; wire verified URLs into the extension.";
65
+ readonly tools: readonly ["generate_welcome_page_workflow", "get_project_state"];
66
+ readonly access: "Free welcome-page brief. Edit, host and inspect responses in the cabinet where enabled; account/project limits apply. MCP returns guidance and saved state, not a page-publishing tool.";
67
+ readonly urls: readonly [string, string, string, string, string, string, string];
68
+ }, {
69
+ readonly id: "listing-and-marketing";
70
+ readonly purpose: "Prepare listing copy, screenshots, landing page, support links and AI discovery assets.";
71
+ readonly tools: readonly [];
72
+ readonly access: "Use CLI generate-listing / review-risk and cabinet tools where enabled. MCP has no listing, landing-page or SEO execution tool.";
73
+ readonly urls: readonly [string, string, string, string, string, string];
74
+ }, {
75
+ readonly id: "verification-and-ci";
76
+ readonly purpose: "Test the built extension in each target browser, review store risks, scan the final package and retain reports in CI.";
77
+ readonly tools: readonly ["scan_extension"];
78
+ readonly access: "Scan requires a local artifact and API key, and spends 1 scan credit. CLI review-risk is local. Configure GitHub Actions in the repository; browser tests use the agent environment.";
79
+ readonly urls: readonly [string, string, string];
80
+ }, {
81
+ readonly id: "publishing";
82
+ readonly purpose: "Validate store credentials, submit the exact tested package and verify review status and the public listing.";
83
+ readonly tools: readonly ["publish_extension"];
84
+ readonly access: "Local stdio or CLI with local store credentials; publishing access is checked. Store registration, disclosures and review are separate steps. Upload success alone does not establish a live release.";
85
+ readonly urls: readonly [string, string, string];
86
+ }, {
87
+ readonly id: "maintenance";
88
+ readonly purpose: "Claim the listing, respond to findings, inspect reviews/uninstall feedback, update policies and maintain releases.";
89
+ readonly tools: readonly ["get_reviews", "get_security", "get_project_state"];
90
+ readonly access: "Catalog reads are metered. Ownership, declarations, responses, badges and feedback management use the cabinet; consult account access.";
91
+ readonly urls: readonly [string, string, string, string, string];
92
+ }, {
93
+ readonly id: "monetization";
94
+ readonly purpose: "Optional paid-feature integration: seller setup, offers, checkout, signed entitlements and purchase verification.";
95
+ readonly tools: readonly ["list_pay_apps", "create_pay_app", "get_pay_app", "get_pay_readiness", "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"];
96
+ 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. Check get_pay_readiness and actual SDK distribution before integrating. Author completes seller agreement and Stripe KYC in the browser. Configure offers and profile, then enable checkout only with explicit authorization. Registration does not prove production deployment or npm publication.";
97
+ readonly urls: readonly [string, "https://dojo.extenshi.io/payments"];
98
+ }];
99
+ export declare function buildDevelopmentGuide(registeredTools: readonly GuideTool[]): {
100
+ schemaVersion: number;
101
+ documentation: string;
102
+ availability: string;
103
+ tools: {
104
+ docs: string[];
105
+ name: string;
106
+ description: string;
107
+ annotations: {
108
+ readOnlyHint?: boolean;
109
+ destructiveHint?: boolean;
110
+ };
111
+ }[];
112
+ localActions: {
113
+ name: string;
114
+ availableInThisConnection: boolean;
115
+ fallback: string;
116
+ docs: string;
117
+ }[];
118
+ services: ({
119
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
120
+ id: "documentation";
121
+ purpose: "Discover capabilities, extension shapes, exact CLI commands and reusable agent skills.";
122
+ access: "Free guidance; no API key. Hosted transport still requires connector sign-in.";
123
+ urls: readonly [string, string, string];
124
+ } | {
125
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
126
+ id: "account";
127
+ purpose: "Sign in, provision an API key for local tools and check credit pools before paid work.";
128
+ access: "Balance lookup is free and requires identity; catalog reads and scans use credit pools.";
129
+ urls: readonly [string, "https://dojo.extenshi.io/api-keys", "https://dojo.extenshi.io/billing"];
130
+ } | {
131
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
132
+ id: "research";
133
+ purpose: "Validate demand, competitors, user complaints, permissions and existing security findings.";
134
+ 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; use its aggregate.";
135
+ urls: readonly [string, "https://catalog.extenshi.io"];
136
+ } | {
137
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
138
+ id: "projects";
139
+ purpose: "Read an existing project, selected browser types, manifests, repository binding, saved tool state, hosted URLs and starter files.";
140
+ access: "Own-project MCP reads are free and require identity. Create projects in the cabinet. Synchronize repository metadata, source/built manifests and scope with 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 — create its secret with create_ci_ingest_secret. Automated release-readiness access requires a Pro project.";
141
+ urls: readonly [string, "https://dojo.extenshi.io/projects", "https://dojo.extenshi.io/integrations"];
142
+ } | {
143
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
144
+ id: "manifest";
145
+ purpose: "Choose minimum permissions, target browsers and manifest entries; validate every referenced file.";
146
+ access: "Free template guidance; project reads require identity. The cabinet also has a manifest editor.";
147
+ urls: readonly [string, string];
148
+ } | {
149
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
150
+ id: "localization";
151
+ purpose: "Translate extension messages locally with your coding agent and validate the resulting locales.";
152
+ access: "Free static workflow; local CLI validation requires no key or Extenshi credits. Translation uses your agent provider. Check CLI release availability before invoking commands.";
153
+ urls: readonly [string];
154
+ } | {
155
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
156
+ id: "icons";
157
+ purpose: "Design the SVG, preview at toolbar sizes and export store assets with the local CLI.";
158
+ access: "Free workflow. Drawing, browser preview and file export happen in the local agent environment; the cabinet offers its own icon generator subject to availability and credits.";
159
+ urls: readonly [string, string];
160
+ } | {
161
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
162
+ id: "privacy";
163
+ purpose: "Describe actual data practices; generate/export a policy or maintain a hosted policy and its version history.";
164
+ 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.";
165
+ urls: readonly [string, string, string];
166
+ } | {
167
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
168
+ id: "onboarding";
169
+ purpose: "Prepare a welcome page, pin guide, install instructions and uninstall survey; wire verified URLs into the extension.";
170
+ access: "Free welcome-page brief. Edit, host and inspect responses in the cabinet where enabled; account/project limits apply. MCP returns guidance and saved state, not a page-publishing tool.";
171
+ urls: readonly [string, string, string, string, string, string, string];
172
+ } | {
173
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
174
+ id: "listing-and-marketing";
175
+ purpose: "Prepare listing copy, screenshots, landing page, support links and AI discovery assets.";
176
+ access: "Use CLI generate-listing / review-risk and cabinet tools where enabled. MCP has no listing, landing-page or SEO execution tool.";
177
+ urls: readonly [string, string, string, string, string, string];
178
+ } | {
179
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
180
+ id: "verification-and-ci";
181
+ purpose: "Test the built extension in each target browser, review store risks, scan the final package and retain reports in CI.";
182
+ access: "Scan requires a local artifact and API key, and spends 1 scan credit. CLI review-risk is local. Configure GitHub Actions in the repository; browser tests use the agent environment.";
183
+ urls: readonly [string, string, string];
184
+ } | {
185
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
186
+ id: "publishing";
187
+ purpose: "Validate store credentials, submit the exact tested package and verify review status and the public listing.";
188
+ access: "Local stdio or CLI with local store credentials; publishing access is checked. Store registration, disclosures and review are separate steps. Upload success alone does not establish a live release.";
189
+ urls: readonly [string, string, string];
190
+ } | {
191
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
192
+ id: "maintenance";
193
+ purpose: "Claim the listing, respond to findings, inspect reviews/uninstall feedback, update policies and maintain releases.";
194
+ access: "Catalog reads are metered. Ownership, declarations, responses, badges and feedback management use the cabinet; consult account access.";
195
+ urls: readonly [string, string, string, string, string];
196
+ } | {
197
+ toolsInThisConnection: ("list_pay_apps" | "create_pay_app" | "get_pay_app" | "get_pay_readiness" | "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" | "get_project_state" | "get_project_scaffold" | "get_project_workspace" | "import_manifest" | "diff_project_state" | "apply_project_patch" | "record_project_evidence" | "create_ci_ingest_secret" | "upsert_hosted_page" | "verify_hosted_artifact" | "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" | "scan_extension" | "publish_extension")[];
198
+ id: "monetization";
199
+ purpose: "Optional paid-feature integration: seller setup, offers, checkout, signed entitlements and purchase verification.";
200
+ 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. Check get_pay_readiness and actual SDK distribution before integrating. Author completes seller agreement and Stripe KYC in the browser. Configure offers and profile, then enable checkout only with explicit authorization. Registration does not prove production deployment or npm publication.";
201
+ urls: readonly [string, "https://dojo.extenshi.io/payments"];
202
+ })[];
203
+ repository: {
204
+ recommendation: string;
205
+ setup: string;
206
+ layout: string[];
207
+ practice: string;
208
+ docs: string[];
209
+ };
210
+ workflow: readonly [{
211
+ readonly id: "scope";
212
+ readonly actions: "Record the user problem, target sites and browsers, MVP, permissions/data needs, acceptance criteria, distribution and optional monetization. Inspect available tools with get_development_guide; use search_docs for current details. Keep deferred features out of release promises.";
213
+ readonly doneWhen: "A written scope and acceptance checklist cover implementation, testing, assets, release and maintenance.";
214
+ }, {
215
+ readonly id: "research";
216
+ readonly actions: "If market research is needed, check get_credit_balance, then search_extensions / market_overview, get_extension and get_reviews for a small relevant set. Use get_security for detailed findings or get_risk_by_store_ids for a batch. Record gaps and constraints.";
217
+ readonly doneWhen: "The chosen feature and supported surfaces have evidence; optional research is marked skipped with a reason.";
218
+ }, {
219
+ readonly id: "project-and-repository";
220
+ readonly actions: "With identity, call list_my_projects then get_project_state for the selected project. Reuse its repository. If no project exists, create/configure one in dojo where available; otherwise continue locally and record that integration is pending. Create or reuse a Git remote, preferably GitHub, before substantial implementation.";
221
+ readonly doneWhen: "Project ID (or explicit pending status), repository URL, branch, README, build commands and release checklist are recorded.";
222
+ }, {
223
+ readonly id: "architecture-and-scaffold";
224
+ readonly actions: "Call list_extension_templates, choose minimum permissions and browser-specific files. For a new project call get_project_scaffold once per browser into separate outputs; preserve existing code when integrating an existing repository. Read includeToolStates only for needed keys. Write integration.file verbatim to integration.path, review integration.unwired and re-read state after cabinet changes.";
225
+ readonly doneWhen: "Each manifest references real packaged files; browser variants and the project integration contract are preserved.";
226
+ }, {
227
+ readonly id: "implementation";
228
+ readonly actions: "Implement the MVP, accessible popup/options, storage and error handling. Test actual target sites and extension lifecycle, including service-worker restart and permission denial. Use localize_workflow for local message translation, structural validation and manual language/RTL review. If payments or user accounts are needed, verify the supported integration and complete its prerequisites before depending on it.";
229
+ readonly doneWhen: "Acceptance criteria pass on real target surfaces; optional integrations have end-to-end evidence or remain explicit blockers.";
230
+ }, {
231
+ readonly id: "assets-and-hosted-pages";
232
+ readonly actions: "Use generate_icon_workflow and generate_welcome_page_workflow as needed. Prepare screenshots, pin/install instructions, a privacy policy, uninstall feedback, support and landing URLs. For an existing Pro policy, list/read versions, then update_privacy_policy_with_ai when needed, review proposedMarkdown and publish within the author's authorization. Re-read get_project_state and verify the returned URLs.";
233
+ readonly doneWhen: "Assets show the real product; hosted links load and match actual data practices; installation/uninstallation flows work.";
234
+ }, {
235
+ readonly id: "quality-and-listing";
236
+ readonly actions: "Build each browser package; run unit/integration checks and manual browser scenarios. Get exact review-risk and generate-listing commands from search_docs; review disclosures, permission justifications, listing copy and screenshots against the build. Run scan_extension if available, otherwise the local CLI. Add CI using cli-github-actions docs.";
237
+ readonly doneWhen: "The exact versioned artifact has passing checks, retained scan/review reports and truthful store materials; unresolved findings have a disposition.";
238
+ }, {
239
+ readonly id: "release";
240
+ readonly actions: "Verify store accounts, credentials and submission access; use publish_extension with validate_only first when available. Submit the tested artifact within the user's publishing authorization through local MCP, CLI or the store console. Record upload, submission, approval and public-listing status separately.";
241
+ readonly doneWhen: "Store status and installed version are verified; pending store review is reported as pending, with artifact and source commit recorded.";
242
+ }, {
243
+ readonly id: "operate";
244
+ readonly actions: "Claim the catalog listing, maintain declarations and a security badge, review findings and uninstall feedback, verify optional purchase/license flows, and plan updates. Repeat build, review, scan, policy and release checks for later versions.";
245
+ readonly doneWhen: "A handoff records repository/commit, artifacts, URLs, checks, remaining blockers, support owner and follow-up work.";
246
+ }];
247
+ handoff: string[];
248
+ };
249
+ //# sourceMappingURL=development-guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-guide.d.ts","sourceRoot":"","sources":["../src/development-guide.ts"],"names":[],"mappings":"AAAA;;;GAGG;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2LvB,CAAA;AAoEV,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,SAAS,SAAS,EAAE;;;;;;cA5QpE,MAAM;qBACC,MAAM;qBACN;YACZ,YAAY,CAAC,EAAE,OAAO,CAAA;YACtB,eAAe,CAAC,EAAE,OAAO,CAAA;SACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqUD"}