@extenshi/mcp 0.5.2 → 0.6.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,6 +53,22 @@ 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
+ | `record_project_evidence` | Store metadata bound to the exact artifact, input hash, browser and source revision | Requires evidence.write for OAuth |
64
+ | `get_release_readiness` | Explain current, stale and missing release checks by browser and locale | Pro project; project read access |
65
+ | `list_my_projects` | Your projects, repository bindings and claimed listings | Free; identity required |
66
+ | `get_project_state` | Manifest, selected types, saved-state index, hosted URLs and exact integration file | Free; identity required |
67
+ | `get_project_scaffold` | Starter files for one project and target browser | Free; identity required |
68
+ | `list_privacy_policy_versions` | Hosted policy version history | Pro project; no read credit |
69
+ | `get_privacy_policy_version` | One hosted policy's markdown and HTML | Pro project; no read credit |
70
+ | `update_privacy_policy_with_ai` | Propose a policy update for the author to review | Pro project; daily update limit applies |
71
+ | `publish_privacy_policy` | Publish a policy at the project's hosted URL | Pro project; changes the live page |
47
72
  | `search_docs` | Search the Extenshi docs + `@extenshi/cli` reference so the assistant can quote exact commands | Free (no key) |
48
73
  | `generate_icon_workflow` | Icon design requirements + the local agent-draws-SVG → `npx @extenshi/cli@latest icon preview` → export workflow | Free (no key) |
49
74
  | `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) |
@@ -91,3 +116,5 @@ EXTENSHI_API_KEY=ek_… npx @modelcontextprotocol/inspector node dist/index.js
91
116
 
92
117
  Publishing is handled by `./scripts/publish.sh` (npm Automation token from Infisical;
93
118
  `DRY_RUN=1 ./scripts/publish.sh` to validate). Requires Node ≥20.
119
+
120
+ See the [project synchronization workflow](https://docs.extenshi.io/developers/project-sync) for CLI commands, revision conflicts, evidence freshness and OAuth recovery.
package/dist/bff.d.ts CHANGED
@@ -35,6 +35,19 @@ export interface ExtensionRef {
35
35
  store: 'CHROME' | 'FIREFOX' | 'EDGE';
36
36
  }
37
37
  export interface Bff {
38
+ importManifest(input: import('./project-workspace.js').ManifestImport): Promise<unknown>;
39
+ getProjectWorkspace(input: {
40
+ projectId: string;
41
+ }): Promise<unknown>;
42
+ diffProjectWorkspace(input: import('./project-workspace.js').WorkspacePatch): Promise<unknown>;
43
+ patchProjectWorkspace(input: import('./project-workspace.js').WorkspacePatch): Promise<unknown>;
44
+ recordProjectEvidence(input: Omit<import('./project-workspace.js').Evidence, 'id' | 'recordedAt'>): Promise<unknown>;
45
+ getReleaseReadiness(input: {
46
+ projectId: string;
47
+ browser?: 'chrome' | 'firefox' | 'edge';
48
+ artifactDigest?: string;
49
+ }): Promise<unknown>;
50
+ connectionDiagnostics(): Promise<unknown>;
38
51
  searchExtensions(input: Record<string, unknown>): Promise<unknown>;
39
52
  getExtensionById(id: number): Promise<unknown>;
40
53
  /** Paginated store user reviews for an extension (PII-free projection). */
@@ -94,6 +107,21 @@ export interface Bff {
94
107
  projectId: string;
95
108
  browser?: string;
96
109
  }): Promise<unknown>;
110
+ listPrivacyPolicyVersions(input: {
111
+ projectId: string;
112
+ }): Promise<unknown>;
113
+ getPrivacyPolicyVersion(input: {
114
+ projectId: string;
115
+ versionNumber: number;
116
+ }): Promise<unknown>;
117
+ publishPrivacyPolicy(input: {
118
+ projectId: string;
119
+ bodyMarkdown?: string;
120
+ kind?: string;
121
+ }): Promise<unknown>;
122
+ updatePrivacyPolicyWithAi(input: {
123
+ projectId: string;
124
+ }): Promise<unknown>;
97
125
  }
98
126
  /** Build a BFF client from a static `ek_…` key (stdio path). */
99
127
  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":"AAAA;;;;;;;;;;;;;GAaG;AAMH,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IAC1B,2GAA2G;IAC3G,SAAS,EAAE,MAAM,CAAA;IACjB,iGAAiG;IACjG,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,UAAU,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC;AAED,MAAM,WAAW,GAAG;IACnB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C,2EAA2E;IAC3E,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5D,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrD,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACjE,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5B,sGAAsG;IACtG,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3C,2DAA2D;IAC3D,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,yFAAyF;IACzF,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAChD;;;;OAIG;IACH,mBAAmB,CAAC,KAAK,EAAE;QAC1B,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;KACrC,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAChC;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAAE;QAC9B,UAAU,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;SAAE,CAAC,CAAA;KAC5E,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACpB;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/F;;;;OAIG;IACH,oBAAoB,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACtF;AAED,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CA6B/F"}
1
+ {"version":3,"file":"bff.d.ts","sourceRoot":"","sources":["../src/bff.ts"],"names":[],"mappings":"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"}
package/dist/bff.js CHANGED
@@ -35,6 +35,13 @@ export function makeBffWithAuth(bffUrl, authHeader) {
35
35
  // NB: the store router is mounted under `catalog` in the BFF appRouter
36
36
  // (routers/index.ts: `catalog: storeRouter`), NOT `store`. Security is `security`.
37
37
  return {
38
+ importManifest: (input) => client.devProject.agentImportManifest.mutate(input),
39
+ getProjectWorkspace: (input) => client.devProject.agentGetWorkspace.query(input),
40
+ diffProjectWorkspace: (input) => client.devProject.agentDiffWorkspace.mutate(input),
41
+ patchProjectWorkspace: (input) => client.devProject.agentPatchWorkspace.mutate(input),
42
+ recordProjectEvidence: (input) => client.devProject.agentRecordEvidence.mutate(input),
43
+ getReleaseReadiness: (input) => client.devProject.agentReleaseReadiness.query(input),
44
+ connectionDiagnostics: () => client.devProject.agentConnectionDiagnostics.query(),
38
45
  searchExtensions: (input) => client.catalog.searchExtensions.query(input),
39
46
  getExtensionById: (id) => client.catalog.getExtensionById.query({ id }),
40
47
  getReviews: (input) => client.catalog.getReviewsForExtension.query(input),
@@ -50,6 +57,10 @@ export function makeBffWithAuth(bffUrl, authHeader) {
50
57
  listMyProjects: () => client.devProject.agentListProjects.query(),
51
58
  getMyProjectState: (input) => client.devProject.agentGetProjectState.query(input),
52
59
  getMyProjectScaffold: (input) => client.devProject.agentGetProjectScaffold.query(input),
60
+ listPrivacyPolicyVersions: (input) => client.privacyPolicy.agentListVersions.query(input),
61
+ getPrivacyPolicyVersion: (input) => client.privacyPolicy.agentGetVersion.query(input),
62
+ publishPrivacyPolicy: (input) => client.privacyPolicy.agentPublish.mutate(input),
63
+ updatePrivacyPolicyWithAi: (input) => client.privacyPolicy.agentUpdateWithAi.mutate(input),
53
64
  };
54
65
  }
55
66
  //# 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,237 @@
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", "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 and evidence.write require explicit OAuth consent. Repository metadata does not grant GitHub access. 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: "icons";
46
+ readonly purpose: "Design the SVG, preview at toolbar sizes and export store assets with the local CLI.";
47
+ readonly tools: readonly ["generate_icon_workflow"];
48
+ 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.";
49
+ readonly urls: readonly [string, string];
50
+ }, {
51
+ readonly id: "privacy";
52
+ readonly purpose: "Describe actual data practices; generate/export a policy or maintain a hosted policy and its version history.";
53
+ readonly tools: readonly ["list_privacy_policy_versions", "get_privacy_policy_version", "update_privacy_policy_with_ai", "publish_privacy_policy"];
54
+ 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.";
55
+ readonly urls: readonly [string, string, string];
56
+ }, {
57
+ readonly id: "onboarding";
58
+ readonly purpose: "Prepare a welcome page, pin guide, install instructions and uninstall survey; wire verified URLs into the extension.";
59
+ readonly tools: readonly ["generate_welcome_page_workflow", "get_project_state"];
60
+ 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.";
61
+ readonly urls: readonly [string, string, string, string, string, string, string];
62
+ }, {
63
+ readonly id: "listing-and-marketing";
64
+ readonly purpose: "Prepare listing copy, screenshots, landing page, support links and AI discovery assets.";
65
+ readonly tools: readonly [];
66
+ readonly access: "Use CLI generate-listing / review-risk and cabinet tools where enabled. MCP has no listing, landing-page or SEO execution tool.";
67
+ readonly urls: readonly [string, string, string, string, string, string];
68
+ }, {
69
+ readonly id: "verification-and-ci";
70
+ readonly purpose: "Test the built extension in each target browser, review store risks, scan the final package and retain reports in CI.";
71
+ readonly tools: readonly ["scan_extension"];
72
+ 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.";
73
+ readonly urls: readonly [string, string, string];
74
+ }, {
75
+ readonly id: "publishing";
76
+ readonly purpose: "Validate store credentials, submit the exact tested package and verify review status and the public listing.";
77
+ readonly tools: readonly ["publish_extension"];
78
+ 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.";
79
+ readonly urls: readonly [string, string, string];
80
+ }, {
81
+ readonly id: "maintenance";
82
+ readonly purpose: "Claim the listing, respond to findings, inspect reviews/uninstall feedback, update policies and maintain releases.";
83
+ readonly tools: readonly ["get_reviews", "get_security", "get_project_state"];
84
+ readonly access: "Catalog reads are metered. Ownership, declarations, responses, badges and feedback management use the cabinet; consult account access.";
85
+ readonly urls: readonly [string, string, string, string, string];
86
+ }, {
87
+ readonly id: "monetization";
88
+ readonly purpose: "Optional paid-feature integration: seller setup, offers, checkout, signed entitlements and purchase verification.";
89
+ readonly tools: readonly [];
90
+ readonly access: "Conditional integration, not a callable MCP service. Verify current SDK distribution, project access, seller agreement and payment readiness in the documentation and cabinet before planning installation or promising working payments.";
91
+ readonly urls: readonly [string, "https://dojo.extenshi.io/projects"];
92
+ }];
93
+ export declare function buildDevelopmentGuide(registeredTools: readonly GuideTool[]): {
94
+ schemaVersion: number;
95
+ documentation: string;
96
+ availability: string;
97
+ tools: {
98
+ docs: string[];
99
+ name: string;
100
+ description: string;
101
+ annotations: {
102
+ readOnlyHint?: boolean;
103
+ destructiveHint?: boolean;
104
+ };
105
+ }[];
106
+ localActions: {
107
+ name: string;
108
+ availableInThisConnection: boolean;
109
+ fallback: string;
110
+ docs: string;
111
+ }[];
112
+ services: ({
113
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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")[];
114
+ id: "documentation";
115
+ purpose: "Discover capabilities, extension shapes, exact CLI commands and reusable agent skills.";
116
+ access: "Free guidance; no API key. Hosted transport still requires connector sign-in.";
117
+ urls: readonly [string, string, string];
118
+ } | {
119
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "account";
121
+ purpose: "Sign in, provision an API key for local tools and check credit pools before paid work.";
122
+ access: "Balance lookup is free and requires identity; catalog reads and scans use credit pools.";
123
+ urls: readonly [string, "https://dojo.extenshi.io/api-keys", "https://dojo.extenshi.io/billing"];
124
+ } | {
125
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "research";
127
+ purpose: "Validate demand, competitors, user complaints, permissions and existing security findings.";
128
+ 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.";
129
+ urls: readonly [string, "https://catalog.extenshi.io"];
130
+ } | {
131
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "projects";
133
+ purpose: "Read an existing project, selected browser types, manifests, repository binding, saved tool state, hosted URLs and starter files.";
134
+ 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 and evidence.write require explicit OAuth consent. Repository metadata does not grant GitHub access. Automated release-readiness access requires a Pro project.";
135
+ urls: readonly [string, "https://dojo.extenshi.io/projects", "https://dojo.extenshi.io/integrations"];
136
+ } | {
137
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "manifest";
139
+ purpose: "Choose minimum permissions, target browsers and manifest entries; validate every referenced file.";
140
+ access: "Free template guidance; project reads require identity. The cabinet also has a manifest editor.";
141
+ urls: readonly [string, string];
142
+ } | {
143
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "icons";
145
+ purpose: "Design the SVG, preview at toolbar sizes and export store assets with the local CLI.";
146
+ 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.";
147
+ urls: readonly [string, string];
148
+ } | {
149
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "privacy";
151
+ purpose: "Describe actual data practices; generate/export a policy or maintain a hosted policy and its version history.";
152
+ 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.";
153
+ urls: readonly [string, string, string];
154
+ } | {
155
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "onboarding";
157
+ purpose: "Prepare a welcome page, pin guide, install instructions and uninstall survey; wire verified URLs into the extension.";
158
+ 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.";
159
+ urls: readonly [string, string, string, string, string, string, string];
160
+ } | {
161
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "listing-and-marketing";
163
+ purpose: "Prepare listing copy, screenshots, landing page, support links and AI discovery assets.";
164
+ access: "Use CLI generate-listing / review-risk and cabinet tools where enabled. MCP has no listing, landing-page or SEO execution tool.";
165
+ urls: readonly [string, string, string, string, string, string];
166
+ } | {
167
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "verification-and-ci";
169
+ purpose: "Test the built extension in each target browser, review store risks, scan the final package and retain reports in CI.";
170
+ 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.";
171
+ urls: readonly [string, string, string];
172
+ } | {
173
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "publishing";
175
+ purpose: "Validate store credentials, submit the exact tested package and verify review status and the public listing.";
176
+ 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.";
177
+ urls: readonly [string, string, string];
178
+ } | {
179
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "maintenance";
181
+ purpose: "Claim the listing, respond to findings, inspect reviews/uninstall feedback, update policies and maintain releases.";
182
+ access: "Catalog reads are metered. Ownership, declarations, responses, badges and feedback management use the cabinet; consult account access.";
183
+ urls: readonly [string, string, string, string, string];
184
+ } | {
185
+ toolsInThisConnection: ("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" | "get_release_readiness" | "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: "monetization";
187
+ purpose: "Optional paid-feature integration: seller setup, offers, checkout, signed entitlements and purchase verification.";
188
+ access: "Conditional integration, not a callable MCP service. Verify current SDK distribution, project access, seller agreement and payment readiness in the documentation and cabinet before planning installation or promising working payments.";
189
+ urls: readonly [string, "https://dojo.extenshi.io/projects"];
190
+ })[];
191
+ repository: {
192
+ recommendation: string;
193
+ setup: string;
194
+ layout: string[];
195
+ practice: string;
196
+ docs: string[];
197
+ };
198
+ workflow: readonly [{
199
+ readonly id: "scope";
200
+ 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.";
201
+ readonly doneWhen: "A written scope and acceptance checklist cover implementation, testing, assets, release and maintenance.";
202
+ }, {
203
+ readonly id: "research";
204
+ 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.";
205
+ readonly doneWhen: "The chosen feature and supported surfaces have evidence; optional research is marked skipped with a reason.";
206
+ }, {
207
+ readonly id: "project-and-repository";
208
+ 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.";
209
+ readonly doneWhen: "Project ID (or explicit pending status), repository URL, branch, README, build commands and release checklist are recorded.";
210
+ }, {
211
+ readonly id: "architecture-and-scaffold";
212
+ 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.";
213
+ readonly doneWhen: "Each manifest references real packaged files; browser variants and the project integration contract are preserved.";
214
+ }, {
215
+ readonly id: "implementation";
216
+ 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. Plan localization. If payments or user accounts are needed, verify the supported integration and complete its prerequisites before depending on it.";
217
+ readonly doneWhen: "Acceptance criteria pass on real target surfaces; optional integrations have end-to-end evidence or remain explicit blockers.";
218
+ }, {
219
+ readonly id: "assets-and-hosted-pages";
220
+ 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.";
221
+ readonly doneWhen: "Assets show the real product; hosted links load and match actual data practices; installation/uninstallation flows work.";
222
+ }, {
223
+ readonly id: "quality-and-listing";
224
+ 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.";
225
+ readonly doneWhen: "The exact versioned artifact has passing checks, retained scan/review reports and truthful store materials; unresolved findings have a disposition.";
226
+ }, {
227
+ readonly id: "release";
228
+ 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.";
229
+ readonly doneWhen: "Store status and installed version are verified; pending store review is reported as pending, with artifact and source commit recorded.";
230
+ }, {
231
+ readonly id: "operate";
232
+ 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.";
233
+ readonly doneWhen: "A handoff records repository/commit, artifacts, URLs, checks, remaining blockers, support owner and follow-up work.";
234
+ }];
235
+ handoff: string[];
236
+ };
237
+ //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6JvB,CAAA;AAoEV,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,SAAS,SAAS,EAAE;;;;;;cA9OpE,MAAM;qBACC,MAAM;qBACN;YACZ,YAAY,CAAC,EAAE,OAAO,CAAA;YACtB,eAAe,CAAC,EAAE,OAAO,CAAA;SACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuSD"}