@extenshi/mcp 0.7.0 → 0.9.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 +9 -4
- package/dist/bff.d.ts +17 -0
- package/dist/bff.d.ts.map +1 -1
- package/dist/bff.js +4 -0
- package/dist/bff.js.map +1 -1
- package/dist/development-guide.d.ts +109 -79
- package/dist/development-guide.d.ts.map +1 -1
- package/dist/development-guide.js +133 -45
- package/dist/development-guide.js.map +1 -1
- package/dist/docs.d.ts +45 -4
- package/dist/docs.d.ts.map +1 -1
- package/dist/docs.js +162 -17
- package/dist/docs.js.map +1 -1
- package/dist/icon-workflow.d.ts +5 -4
- package/dist/icon-workflow.d.ts.map +1 -1
- package/dist/icon-workflow.js +33 -32
- package/dist/icon-workflow.js.map +1 -1
- package/dist/json-ld.d.ts +89 -0
- package/dist/json-ld.d.ts.map +1 -0
- package/dist/json-ld.js +118 -0
- package/dist/json-ld.js.map +1 -0
- package/dist/landing-page.d.ts +123 -0
- package/dist/landing-page.d.ts.map +1 -0
- package/dist/landing-page.js +405 -0
- package/dist/landing-page.js.map +1 -0
- package/dist/landing-workflow.d.ts +49 -0
- package/dist/landing-workflow.d.ts.map +1 -0
- package/dist/landing-workflow.js +80 -0
- package/dist/landing-workflow.js.map +1 -0
- package/dist/localize-workflow.d.ts +6 -1
- package/dist/localize-workflow.d.ts.map +1 -1
- package/dist/localize-workflow.js +65 -47
- package/dist/localize-workflow.js.map +1 -1
- package/dist/pay.d.ts +1 -1
- package/dist/pay.d.ts.map +1 -1
- package/dist/pay.js +11 -11
- package/dist/pay.js.map +1 -1
- package/dist/privacy-ai-outcome.d.ts +21 -0
- package/dist/privacy-ai-outcome.d.ts.map +1 -0
- package/dist/privacy-ai-outcome.js +69 -0
- package/dist/privacy-ai-outcome.js.map +1 -0
- package/dist/scan.d.ts +7 -0
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +26 -2
- package/dist/scan.js.map +1 -1
- package/dist/search-filters.js +1 -1
- package/dist/search-filters.js.map +1 -1
- package/dist/shape.d.ts +34 -0
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +150 -3
- package/dist/shape.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +3 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/templates.js +5 -5
- package/dist/templates.js.map +1 -1
- package/dist/tools.d.ts +2 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +398 -115
- package/dist/tools.js.map +1 -1
- package/dist/welcome-agent-brief.d.ts +9 -9
- package/dist/welcome-agent-brief.d.ts.map +1 -1
- package/dist/welcome-agent-brief.js +32 -32
- package/dist/welcome-agent-brief.js.map +1 -1
- package/dist/welcome-workflow.d.ts +5 -5
- package/dist/welcome-workflow.d.ts.map +1 -1
- package/dist/welcome-workflow.js +13 -14
- package/dist/welcome-workflow.js.map +1 -1
- package/package.json +3 -2
|
@@ -4,21 +4,21 @@ export const DEVELOPMENT_GUIDE_URL = docs('development-workflow');
|
|
|
4
4
|
export const DEVELOPMENT_SERVICES = [
|
|
5
5
|
{
|
|
6
6
|
id: 'documentation',
|
|
7
|
-
purpose: '
|
|
7
|
+
purpose: 'Capabilities, extension shapes, exact CLI commands and reusable skill packages.',
|
|
8
8
|
tools: ['get_development_guide', 'search_docs', 'list_extension_templates'],
|
|
9
|
-
access: 'Free
|
|
9
|
+
access: 'Free reference; no API key. Hosted transport still requires connector sign-in.',
|
|
10
10
|
urls: [docs('mcp'), DEVELOPMENT_GUIDE_URL, docs('agent-skills')],
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
13
|
id: 'account',
|
|
14
|
-
purpose: 'Sign
|
|
14
|
+
purpose: 'Sign-in, API keys for local tools and credit-pool balances ahead of paid work.',
|
|
15
15
|
tools: ['get_credit_balance', 'connection_diagnostics'],
|
|
16
16
|
access: 'Balance lookup is free and requires identity; catalog reads and scans use credit pools.',
|
|
17
17
|
urls: [docs('scan-credits'), 'https://dojo.extenshi.io/api-keys', 'https://dojo.extenshi.io/billing'],
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
id: 'research',
|
|
21
|
-
purpose: '
|
|
21
|
+
purpose: 'Demand, competitors, user complaints, permissions and existing security findings.',
|
|
22
22
|
tools: [
|
|
23
23
|
'search_extensions',
|
|
24
24
|
'get_extension',
|
|
@@ -27,12 +27,12 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
27
27
|
'get_risk_by_store_ids',
|
|
28
28
|
'market_overview',
|
|
29
29
|
],
|
|
30
|
-
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;
|
|
30
|
+
access: 'Identity required. Catalog tools cost 1 read per call; get_security costs 3. Bulk risk: up to 40 per call. Chrome review text is unavailable; its aggregate rating is available.',
|
|
31
31
|
urls: [docs('mcp'), 'https://catalog.extenshi.io'],
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
id: 'projects',
|
|
35
|
-
purpose: '
|
|
35
|
+
purpose: 'Existing projects: selected browser types, manifests, repository binding, saved tool state, hosted URLs and starter files.',
|
|
36
36
|
tools: [
|
|
37
37
|
'list_my_projects',
|
|
38
38
|
'get_project_state',
|
|
@@ -45,10 +45,11 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
45
45
|
'create_ci_ingest_secret',
|
|
46
46
|
'upsert_hosted_page',
|
|
47
47
|
'verify_hosted_artifact',
|
|
48
|
+
'remove_hosted_page',
|
|
48
49
|
'list_hosted_pages',
|
|
49
50
|
'get_release_readiness',
|
|
50
51
|
],
|
|
51
|
-
access: 'Own-project MCP reads are free and require identity.
|
|
52
|
+
access: 'Own-project MCP reads are free and require identity. Projects are created in the cabinet. Repository metadata, source/built manifests and scope synchronize through typed revisioned patches. project.write, evidence.write and hosted.write require explicit OAuth consent. Repository metadata does not grant GitHub access. CI evidence (source=ci) is written only by the verified ingest endpoint, which authenticates with a secret from create_ci_ingest_secret. Automated release-readiness access requires a Pro project.',
|
|
52
53
|
urls: [
|
|
53
54
|
DEVELOPMENT_GUIDE_URL,
|
|
54
55
|
'https://dojo.extenshi.io/projects',
|
|
@@ -57,28 +58,28 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
57
58
|
},
|
|
58
59
|
{
|
|
59
60
|
id: 'manifest',
|
|
60
|
-
purpose: '
|
|
61
|
+
purpose: 'Minimum permissions, target browsers and manifest entries, with every referenced file present.',
|
|
61
62
|
tools: ['list_extension_templates', 'get_project_state', 'get_project_scaffold'],
|
|
62
|
-
access: 'Free template
|
|
63
|
+
access: 'Free template reference; project reads require identity. The cabinet also has a manifest editor.',
|
|
63
64
|
urls: [docs('manifest-generator'), toolPage('manifest-generator')],
|
|
64
65
|
},
|
|
65
66
|
{
|
|
66
67
|
id: 'localization',
|
|
67
|
-
purpose: '
|
|
68
|
+
purpose: 'Local translation of extension messages and validation of the resulting locales.',
|
|
68
69
|
tools: ['localize_workflow'],
|
|
69
|
-
access:
|
|
70
|
+
access: "Free static reference; local CLI validation requires no key or Extenshi credits. Translation uses the developer's own provider. CLI release availability is part of the reference.",
|
|
70
71
|
urls: [docs('localization')],
|
|
71
72
|
},
|
|
72
73
|
{
|
|
73
74
|
id: 'icons',
|
|
74
|
-
purpose: '
|
|
75
|
+
purpose: 'SVG icon design, toolbar-size preview and store-asset export with the local CLI.',
|
|
75
76
|
tools: ['generate_icon_workflow'],
|
|
76
|
-
access: 'Free
|
|
77
|
+
access: 'Free. Drawing, browser preview and file export happen locally; the cabinet offers its own icon generator subject to availability and credits.',
|
|
77
78
|
urls: [docs('icon-generator'), toolPage('icon-generator')],
|
|
78
79
|
},
|
|
79
80
|
{
|
|
80
81
|
id: 'privacy',
|
|
81
|
-
purpose: '
|
|
82
|
+
purpose: 'A policy that reflects actual data practices: generated and exported, or hosted with version history.',
|
|
82
83
|
tools: [
|
|
83
84
|
'list_privacy_policy_versions',
|
|
84
85
|
'get_privacy_policy_version',
|
|
@@ -90,9 +91,9 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
90
91
|
},
|
|
91
92
|
{
|
|
92
93
|
id: 'onboarding',
|
|
93
|
-
purpose: '
|
|
94
|
+
purpose: 'Welcome page, pin guide, install instructions and uninstall survey, with verified URLs wired into the extension.',
|
|
94
95
|
tools: ['generate_welcome_page_workflow', 'get_project_state'],
|
|
95
|
-
access: 'Free welcome-page
|
|
96
|
+
access: 'Free welcome-page specification. Editing, hosting and responses live in the cabinet where enabled; account/project limits apply. MCP returns specifications and saved state; it has no page-publishing tool.',
|
|
96
97
|
urls: [
|
|
97
98
|
DEVELOPMENT_GUIDE_URL,
|
|
98
99
|
docs('pin-guide'),
|
|
@@ -105,9 +106,15 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
105
106
|
},
|
|
106
107
|
{
|
|
107
108
|
id: 'listing-and-marketing',
|
|
108
|
-
purpose: '
|
|
109
|
-
tools: [
|
|
110
|
-
|
|
109
|
+
purpose: 'Listing copy, screenshots, landing page, support links and AI discovery assets.',
|
|
110
|
+
tools: [
|
|
111
|
+
'generate_landing_page',
|
|
112
|
+
'publish_landing_page',
|
|
113
|
+
'get_landing_page',
|
|
114
|
+
'unpublish_landing_page',
|
|
115
|
+
'upsert_hosted_page',
|
|
116
|
+
],
|
|
117
|
+
access: 'The landing-page generator is free and offline: it returns static HTML (CLI: extenshi page generate). The same page can be hosted by Extenshi at page.extenshi.io/{code} with publish_landing_page (identity and hosted.write; CLI: extenshi page publish), which also registers it as the project homepage; images there are store screenshots or Dojo uploads. A page hosted elsewhere on HTTPS is registered with upsert_hosted_page (CLI: extenshi page register). The registered homepage feeds HOMEPAGE_URL. Listing copy and store-risk review are covered by CLI generate-listing / review-risk and cabinet tools where enabled. MCP has no listing or SEO execution tool.',
|
|
111
118
|
urls: [
|
|
112
119
|
docs('cli'),
|
|
113
120
|
docs('ai-visibility'),
|
|
@@ -119,23 +126,23 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
119
126
|
},
|
|
120
127
|
{
|
|
121
128
|
id: 'verification-and-ci',
|
|
122
|
-
purpose: '
|
|
129
|
+
purpose: 'Testing the built extension in each target browser, store-risk review, final package scan and CI report retention.',
|
|
123
130
|
tools: ['scan_extension'],
|
|
124
|
-
access: 'Scan requires a local artifact and API key, and spends 1 scan credit. CLI review-risk is local.
|
|
131
|
+
access: 'Scan requires a local artifact and API key, and spends 1 scan credit. CLI review-risk is local. GitHub Actions is configured in the repository; browser tests run in the local environment.',
|
|
125
132
|
urls: [docs('cli'), docs('cli-github-actions'), docs('store-policies')],
|
|
126
133
|
},
|
|
127
134
|
{
|
|
128
135
|
id: 'publishing',
|
|
129
|
-
purpose: '
|
|
136
|
+
purpose: 'Store credential validation, submission of the exact tested package to Chrome Web Store, Firefox Add-ons and/or Edge Add-ons, and verification of review status and the public listing.',
|
|
130
137
|
tools: ['publish_extension'],
|
|
131
138
|
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.',
|
|
132
139
|
urls: [docs('cli'), docs('publish-to-chrome-web-store'), toolPage('publish')],
|
|
133
140
|
},
|
|
134
141
|
{
|
|
135
142
|
id: 'maintenance',
|
|
136
|
-
purpose: '
|
|
143
|
+
purpose: 'Listing claims, finding responses, reviews and uninstall feedback, policy updates and ongoing releases.',
|
|
137
144
|
tools: ['get_reviews', 'get_security', 'get_project_state'],
|
|
138
|
-
access: 'Catalog reads are metered. Ownership, declarations, responses, badges and feedback management
|
|
145
|
+
access: 'Catalog reads are metered. Ownership, declarations, responses, badges and feedback management live in the cabinet and depend on account access.',
|
|
139
146
|
urls: [
|
|
140
147
|
docs('claim-your-extension'),
|
|
141
148
|
docs('respond-to-findings'),
|
|
@@ -165,63 +172,111 @@ export const DEVELOPMENT_SERVICES = [
|
|
|
165
172
|
'set_pay_enabled',
|
|
166
173
|
'rotate_pay_key',
|
|
167
174
|
],
|
|
168
|
-
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.
|
|
175
|
+
access: 'Pay applications work independently of development projects. Explicit pay.read/pay.write permission is required; older connections and API keys have no Pay grant. Readiness (get_pay_readiness) and the actual SDK distribution determine whether integration is possible. The author completes the seller agreement and Stripe KYC in the browser. Checkout is enabled only after offers and profile are configured, and only with explicit authorization. Registration does not prove production deployment or npm publication.',
|
|
169
176
|
urls: [docs('pay-sdk'), 'https://dojo.extenshi.io/payments'],
|
|
170
177
|
},
|
|
171
178
|
];
|
|
179
|
+
/**
|
|
180
|
+
* The development lifecycle as a process description. `actions` describes what
|
|
181
|
+
* the stage consists of; `relatedTools` is a factual list of the tools that
|
|
182
|
+
* cover it (not an instruction to call them); `doneWhen` is the exit criterion.
|
|
183
|
+
*/
|
|
172
184
|
const WORKFLOW = [
|
|
173
185
|
{
|
|
174
186
|
id: 'scope',
|
|
175
|
-
actions: '
|
|
187
|
+
actions: 'Stage 1 — Scope: the user problem, target sites and browsers, MVP, permissions/data needs, acceptance criteria, distribution and optional monetization are written down. Deferred features stay out of release promises.',
|
|
188
|
+
relatedTools: ['get_development_guide', 'search_docs'],
|
|
176
189
|
doneWhen: 'A written scope and acceptance checklist cover implementation, testing, assets, release and maintenance.',
|
|
177
190
|
},
|
|
178
191
|
{
|
|
179
192
|
id: 'research',
|
|
180
|
-
actions: '
|
|
181
|
-
|
|
193
|
+
actions: 'Stage 2 — Research (optional): demand, competitors, user complaints and security findings for a small relevant set of existing extensions; gaps and constraints are recorded. Catalog reads are metered, so the credit balance matters here.',
|
|
194
|
+
relatedTools: [
|
|
195
|
+
'get_credit_balance',
|
|
196
|
+
'search_extensions',
|
|
197
|
+
'market_overview',
|
|
198
|
+
'get_extension',
|
|
199
|
+
'get_reviews',
|
|
200
|
+
'get_security',
|
|
201
|
+
'get_risk_by_store_ids',
|
|
202
|
+
],
|
|
203
|
+
doneWhen: 'The chosen feature and supported surfaces have evidence; skipped research is recorded as skipped with a reason.',
|
|
182
204
|
},
|
|
183
205
|
{
|
|
184
206
|
id: 'project-and-repository',
|
|
185
|
-
actions: '
|
|
207
|
+
actions: 'Stage 3 — Project and repository: an existing dojo project and its bound repository are reused. Without a project, one is created in dojo where available, or work continues locally with integration recorded as pending. A Git remote (GitHub preferred) exists before substantial implementation.',
|
|
208
|
+
relatedTools: ['list_my_projects', 'get_project_state'],
|
|
186
209
|
doneWhen: 'Project ID (or explicit pending status), repository URL, branch, README, build commands and release checklist are recorded.',
|
|
187
210
|
},
|
|
188
211
|
{
|
|
189
212
|
id: 'architecture-and-scaffold',
|
|
190
|
-
actions: '
|
|
213
|
+
actions: 'Stage 4 — Architecture and scaffold: extension types, minimum permissions and browser-specific files are chosen. A new project gets one scaffold per browser in separate outputs; an existing repository keeps its code. Tool states are read only for the keys the extension needs. integration.file is written verbatim to integration.path, integration.unwired lists what is still unconnected, and project state is re-read after cabinet changes.',
|
|
214
|
+
relatedTools: ['list_extension_templates', 'get_project_scaffold', 'get_project_state'],
|
|
191
215
|
doneWhen: 'Each manifest references real packaged files; browser variants and the project integration contract are preserved.',
|
|
192
216
|
},
|
|
193
217
|
{
|
|
194
218
|
id: 'implementation',
|
|
195
|
-
actions: '
|
|
219
|
+
actions: 'Stage 5 — Implementation: the MVP, accessible popup/options, storage and error handling, tested on the actual target sites and across the extension lifecycle, including service-worker restart and permission denial. Localization covers message translation, structural validation and manual language/RTL review. Payments or user accounts depend on a verified supported integration with its prerequisites complete.',
|
|
220
|
+
relatedTools: ['localize_workflow'],
|
|
196
221
|
doneWhen: 'Acceptance criteria pass on real target surfaces; optional integrations have end-to-end evidence or remain explicit blockers.',
|
|
197
222
|
},
|
|
198
223
|
{
|
|
199
224
|
id: 'assets-and-hosted-pages',
|
|
200
|
-
actions: "
|
|
225
|
+
actions: "Stage 6 — Assets and hosted pages: icon, welcome page, screenshots, pin/install instructions, privacy policy, uninstall feedback, support and landing URLs. A landing page is generated as static HTML and either hosted by Extenshi (page.extenshi.io) or on any HTTPS origin; it is registered as the project homepage, which sets HOMEPAGE_URL. An existing Pro policy is updated as a reviewed proposal (proposedMarkdown) and published within the author's authorization. Returned URLs are verified against project state.",
|
|
226
|
+
relatedTools: [
|
|
227
|
+
'generate_icon_workflow',
|
|
228
|
+
'generate_welcome_page_workflow',
|
|
229
|
+
'generate_landing_page',
|
|
230
|
+
'publish_landing_page',
|
|
231
|
+
'upsert_hosted_page',
|
|
232
|
+
'list_privacy_policy_versions',
|
|
233
|
+
'get_privacy_policy_version',
|
|
234
|
+
'update_privacy_policy_with_ai',
|
|
235
|
+
'publish_privacy_policy',
|
|
236
|
+
'get_project_state',
|
|
237
|
+
],
|
|
201
238
|
doneWhen: 'Assets show the real product; hosted links load and match actual data practices; installation/uninstallation flows work.',
|
|
202
239
|
},
|
|
203
240
|
{
|
|
204
241
|
id: 'quality-and-listing',
|
|
205
|
-
actions: '
|
|
242
|
+
actions: 'Stage 7 — Quality and listing: each browser package is built; unit/integration checks and manual browser scenarios run. Disclosures, permission justifications, listing copy and screenshots are reviewed against the build (CLI review-risk and generate-listing; exact commands in the CLI docs). The final package is scanned, and CI follows the cli-github-actions docs.',
|
|
243
|
+
relatedTools: ['search_docs', 'scan_extension'],
|
|
206
244
|
doneWhen: 'The exact versioned artifact has passing checks, retained scan/review reports and truthful store materials; unresolved findings have a disposition.',
|
|
207
245
|
},
|
|
208
246
|
{
|
|
209
247
|
id: 'release',
|
|
210
|
-
actions: "
|
|
248
|
+
actions: "Stage 8 — Release: store accounts, credentials and submission access are verified; a validate-only run precedes submission where available. The tested artifact is submitted within the user's publishing authorization through local MCP, CLI or the store console. Upload, submission, approval and public-listing status are recorded separately.",
|
|
249
|
+
relatedTools: ['publish_extension'],
|
|
211
250
|
doneWhen: 'Store status and installed version are verified; pending store review is reported as pending, with artifact and source commit recorded.',
|
|
212
251
|
},
|
|
213
252
|
{
|
|
214
253
|
id: 'operate',
|
|
215
|
-
actions: '
|
|
254
|
+
actions: 'Stage 9 — Operate: catalog listing claim, declarations and security badge, findings and uninstall feedback, optional purchase/license flow checks, and planned updates. Later versions repeat the build, review, scan, policy and release checks.',
|
|
255
|
+
relatedTools: ['get_reviews', 'get_security', 'get_project_state'],
|
|
216
256
|
doneWhen: 'A handoff records repository/commit, artifacts, URLs, checks, remaining blockers, support owner and follow-up work.',
|
|
217
257
|
},
|
|
218
258
|
];
|
|
219
|
-
|
|
259
|
+
/** Top-level sections of the full guide, selectable via the `sections` parameter. */
|
|
260
|
+
export const GUIDE_SECTIONS = [
|
|
261
|
+
'tools',
|
|
262
|
+
'localActions',
|
|
263
|
+
'services',
|
|
264
|
+
'repository',
|
|
265
|
+
'workflow',
|
|
266
|
+
'handoff',
|
|
267
|
+
];
|
|
268
|
+
const SECTION_SUMMARIES = {
|
|
269
|
+
tools: 'Every tool registered on this connection: description, read-only/destructive hints and docs links.',
|
|
270
|
+
localActions: 'Artifact scan and store publishing: availability on this connection and the local fallback.',
|
|
271
|
+
services: 'Service directory: purpose, related tools, access requirements and URLs per lifecycle area.',
|
|
272
|
+
repository: 'Git repository recommendation, setup, layout and secret-handling practice.',
|
|
273
|
+
workflow: 'The nine lifecycle stages with descriptions, related tools and exit criteria.',
|
|
274
|
+
handoff: 'Items a completed handoff records.',
|
|
275
|
+
};
|
|
276
|
+
const AVAILABILITY = 'Tool lists describe the tools registered on THIS connection. Registration does not prove account access, remaining credits or local prerequisites. Service URLs describe where work happens; account/project access is checked live. Exact input schemas come from MCP tools/list. This guide makes no network calls.';
|
|
277
|
+
function buildSections(registeredTools) {
|
|
220
278
|
const names = new Set(registeredTools.map((tool) => tool.name));
|
|
221
279
|
return {
|
|
222
|
-
schemaVersion: 1,
|
|
223
|
-
documentation: DEVELOPMENT_GUIDE_URL,
|
|
224
|
-
availability: 'tools lists the tools registered on THIS connection. Registration does not prove account access, remaining credits or local prerequisites. Service URLs describe where work happens; check live account/project access. Use MCP tools/list for the exact input schemas. This guide makes no network calls.',
|
|
225
280
|
tools: registeredTools.map((tool) => ({
|
|
226
281
|
...tool,
|
|
227
282
|
docs: [
|
|
@@ -231,7 +286,7 @@ export function buildDevelopmentGuide(registeredTools) {
|
|
|
231
286
|
localActions: ['scan_extension', 'publish_extension'].map((name) => ({
|
|
232
287
|
name,
|
|
233
288
|
availableInThisConnection: names.has(name),
|
|
234
|
-
fallback: '
|
|
289
|
+
fallback: 'Available through local @extenshi/mcp (stdio), or npx @extenshi/cli@latest on the machine holding the artifact. Exact commands and prerequisites: the CLI documentation.',
|
|
235
290
|
docs: docs('cli'),
|
|
236
291
|
})),
|
|
237
292
|
services: DEVELOPMENT_SERVICES.map(({ tools, ...service }) => ({
|
|
@@ -239,18 +294,18 @@ export function buildDevelopmentGuide(registeredTools) {
|
|
|
239
294
|
toolsInThisConnection: tools.filter((name) => names.has(name)),
|
|
240
295
|
})),
|
|
241
296
|
repository: {
|
|
242
|
-
recommendation: '
|
|
243
|
-
setup: "
|
|
297
|
+
recommendation: 'Source lives in a developer-owned Git repository; GitHub fits the existing dojo integration and GitHub Actions. An already-bound repository is reused. GitLab, Bitbucket or self-hosted Git also work with local code and CI; automatic dojo binding for them is not provided by these MCP tools.',
|
|
298
|
+
setup: "Repository owner and visibility are the developer's choice; private unless public source is intended. GitHub connects at https://dojo.extenshi.io/integrations, and the repository is selected in the project where enabled. Repository creation and writes go through GitHub, its connector/CLI or the cabinet, with the user's authorization.",
|
|
244
299
|
layout: [
|
|
245
300
|
'README.md: setup, target browsers, build/test/release commands',
|
|
246
301
|
'src/: extension logic and extenshi.config.js at the path supplied by the project',
|
|
247
|
-
'assets/ and _locales/: icons and translations (
|
|
302
|
+
'assets/ and _locales/: icons and translations (following the chosen framework layout)',
|
|
248
303
|
'tests/: behavior and browser scenarios',
|
|
249
304
|
'docs/: privacy source, listing copy, support and release checklist',
|
|
250
305
|
'.github/workflows/: build, tests and artifact scan',
|
|
251
|
-
'dist/: generated per-browser packages;
|
|
306
|
+
'dist/: generated per-browser packages; versioned artifacts attached to CI/releases',
|
|
252
307
|
],
|
|
253
|
-
practice: '
|
|
308
|
+
practice: 'Committed: source, dependency lockfile and .env.example with placeholders. Kept in local/CI secret storage: tokens, store credentials, signing keys, .env and user data. Changes go through branches and reviewable pull requests; release artifacts are associated with a source commit/tag.',
|
|
254
309
|
docs: [
|
|
255
310
|
'https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories',
|
|
256
311
|
docs('cli-github-actions'),
|
|
@@ -270,4 +325,37 @@ export function buildDevelopmentGuide(registeredTools) {
|
|
|
270
325
|
],
|
|
271
326
|
};
|
|
272
327
|
}
|
|
328
|
+
/** Normalise a caller's `sections` argument: unknown ids are dropped, `all` expands. */
|
|
329
|
+
export function resolveGuideSections(requested) {
|
|
330
|
+
if (!requested || requested.length === 0)
|
|
331
|
+
return [];
|
|
332
|
+
if (requested.includes('all'))
|
|
333
|
+
return [...GUIDE_SECTIONS];
|
|
334
|
+
return GUIDE_SECTIONS.filter((section) => requested.includes(section));
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Build the guide. With no `sections`, returns the compact overview: tool names,
|
|
338
|
+
* workflow stage ids with exit criteria, and a table of contents. Listed
|
|
339
|
+
* sections (or `all`) are returned in full.
|
|
340
|
+
*/
|
|
341
|
+
export function buildDevelopmentGuide(registeredTools, requested) {
|
|
342
|
+
const sections = resolveGuideSections(requested);
|
|
343
|
+
const full = buildSections(registeredTools);
|
|
344
|
+
const base = { schemaVersion: 2, documentation: DEVELOPMENT_GUIDE_URL, availability: AVAILABILITY };
|
|
345
|
+
if (sections.length > 0) {
|
|
346
|
+
return { ...base, ...Object.fromEntries(sections.map((section) => [section, full[section]])) };
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
...base,
|
|
350
|
+
overview: 'Extenshi development lifecycle reference: idea and research, project and repository, scaffold, implementation, assets and hosted pages, quality and listing, store release, maintenance.',
|
|
351
|
+
toolNames: registeredTools.map((tool) => tool.name),
|
|
352
|
+
workflowStages: WORKFLOW.map(({ id, doneWhen }) => ({ id, doneWhen })),
|
|
353
|
+
contents: GUIDE_SECTIONS.map((id) => ({
|
|
354
|
+
section: id,
|
|
355
|
+
summary: SECTION_SUMMARIES[id],
|
|
356
|
+
entries: Array.isArray(full[id]) ? full[id].length : undefined,
|
|
357
|
+
})),
|
|
358
|
+
sectionsParameter: 'Full sections are included when named in the `sections` argument (e.g. ["workflow", "services"]); "all" returns every section.',
|
|
359
|
+
};
|
|
360
|
+
}
|
|
273
361
|
//# sourceMappingURL=development-guide.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"development-guide.js","sourceRoot":"","sources":["../src/development-guide.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"development-guide.js","sourceRoot":"","sources":["../src/development-guide.ts"],"names":[],"mappings":"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"}
|
package/dist/docs.d.ts
CHANGED
|
@@ -38,12 +38,53 @@ export declare function splitSections(full: string): DocSection[];
|
|
|
38
38
|
* the body. Pure (no I/O) so it is unit-testable with a fixture.
|
|
39
39
|
*/
|
|
40
40
|
export declare function rankSections(full: string, query: string, limit: number): DocSection[];
|
|
41
|
+
/**
|
|
42
|
+
* One searchable passage: a `##` subsection of a docs page (or the page intro
|
|
43
|
+
* before its first `##`). Returning passages instead of whole pages keeps a
|
|
44
|
+
* search result proportional to the question — a page can run to 8k+ chars,
|
|
45
|
+
* while the answer usually lives in one subsection.
|
|
46
|
+
*/
|
|
47
|
+
export interface DocPassage {
|
|
48
|
+
page: string;
|
|
49
|
+
heading?: string;
|
|
50
|
+
url?: string;
|
|
51
|
+
body: string;
|
|
52
|
+
}
|
|
53
|
+
/** Split `llms-full.txt` into `##`-level passages, fence-aware, carrying the page source URL. */
|
|
54
|
+
export declare function splitPassages(full: string): DocPassage[];
|
|
55
|
+
/**
|
|
56
|
+
* Rank passages against a query with BM25 over passage bodies, so a long
|
|
57
|
+
* passage that merely repeats common words does not outrank a short one that
|
|
58
|
+
* answers the question. Heading and page-title matches add a bonus; hyphenated
|
|
59
|
+
* or long tokens (command and flag names) get a phrase boost. Pure (no I/O) so
|
|
60
|
+
* it is unit-testable with a fixture.
|
|
61
|
+
*/
|
|
62
|
+
export declare function rankPassages(full: string, query: string, limit: number): DocPassage[];
|
|
63
|
+
/** Default and bounds for the per-result excerpt length (characters). */
|
|
64
|
+
export declare const DEFAULT_EXCERPT_CHARS = 1500;
|
|
65
|
+
export declare const MIN_EXCERPT_CHARS = 200;
|
|
66
|
+
export declare const MAX_EXCERPT_CHARS = 8000;
|
|
67
|
+
/**
|
|
68
|
+
* Cut a passage to `maxChars` on a line boundary. An unterminated code fence is
|
|
69
|
+
* closed so the rest of the response still renders as prose.
|
|
70
|
+
*/
|
|
71
|
+
export declare function excerpt(body: string, maxChars: number): {
|
|
72
|
+
text: string;
|
|
73
|
+
truncated: boolean;
|
|
74
|
+
};
|
|
41
75
|
/** Fetch the docs index (`llms.txt`) — the page list returned when no query is given. */
|
|
42
76
|
export declare function getDocsIndex(docsUrl: string): Promise<string>;
|
|
77
|
+
export interface SearchDocsOptions {
|
|
78
|
+
/** Max passages returned. */
|
|
79
|
+
limit: number;
|
|
80
|
+
/** Max characters per passage excerpt. */
|
|
81
|
+
maxChars?: number;
|
|
82
|
+
}
|
|
83
|
+
/** Render ranked passages: page › heading, source URL, bounded excerpt. Pure. */
|
|
84
|
+
export declare function renderPassages(query: string, matches: DocPassage[], maxChars: number): string;
|
|
43
85
|
/**
|
|
44
|
-
* Search the docs and return
|
|
45
|
-
*
|
|
46
|
-
* note pointing at the index.
|
|
86
|
+
* Search the docs and return the top matching passages, each with its source
|
|
87
|
+
* link and a bounded excerpt. Falls back to a "nothing matched" note.
|
|
47
88
|
*/
|
|
48
|
-
export declare function searchDocs(docsUrl: string, query: string,
|
|
89
|
+
export declare function searchDocs(docsUrl: string, query: string, options: SearchDocsOptions): Promise<string>;
|
|
49
90
|
//# sourceMappingURL=docs.d.ts.map
|
package/dist/docs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,qEAAqE;AACrE,qBAAa,SAAU,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI3B;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACZ;AAkDD,mEAAmE;AACnE,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAyBxD;AAoCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAwBrF;
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,qEAAqE;AACrE,qBAAa,SAAU,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI3B;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACZ;AAkDD,mEAAmE;AACnE,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAyBxD;AAoCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAwBrF;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACZ;AAID,iGAAiG;AACjG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CA8BxD;AAiBD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAiErF;AAED,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,OAAO,CAAA;AACzC,eAAO,MAAM,iBAAiB,MAAM,CAAA;AACpC,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAS5F;AAED,yFAAyF;AACzF,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;AAED,MAAM,WAAW,iBAAiB;IACjC,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY7F;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,GACxB,OAAO,CAAC,MAAM,CAAC,CAOjB"}
|