@extenshi/mcp 0.3.0 → 0.5.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 +6 -3
- package/dist/bff.d.ts +12 -0
- package/dist/bff.d.ts.map +1 -1
- package/dist/bff.js +1 -0
- package/dist/bff.js.map +1 -1
- package/dist/icon-workflow.js +1 -1
- package/dist/icon-workflow.js.map +1 -1
- package/dist/shape.d.ts +27 -0
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +72 -0
- package/dist/shape.js.map +1 -1
- package/dist/tools.d.ts +15 -3
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +147 -15
- package/dist/tools.js.map +1 -1
- package/dist/untrusted.d.ts +71 -0
- package/dist/untrusted.d.ts.map +1 -0
- package/dist/untrusted.js +130 -0
- package/dist/untrusted.js.map +1 -0
- package/dist/welcome-agent-brief.d.ts +82 -0
- package/dist/welcome-agent-brief.d.ts.map +1 -0
- package/dist/welcome-agent-brief.js +221 -0
- package/dist/welcome-agent-brief.js.map +1 -0
- package/dist/welcome-workflow.d.ts +31 -0
- package/dist/welcome-workflow.d.ts.map +1 -0
- package/dist/welcome-workflow.js +56 -0
- package/dist/welcome-workflow.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -15,8 +15,9 @@ enforces it too.
|
|
|
15
15
|
|
|
16
16
|
1. Sign up at **https://auth.extenshi.io/signup**
|
|
17
17
|
2. Create a key at **https://dojo.extenshi.io/api-keys**
|
|
18
|
-
3. Provide it via the `EXTENSHI_API_KEY` environment variable (or run
|
|
19
|
-
which the MCP server reads from
|
|
18
|
+
3. Provide it via the `EXTENSHI_API_KEY` environment variable (or run
|
|
19
|
+
`npx @extenshi/cli@latest login`, which the MCP server reads from
|
|
20
|
+
`~/.extenshi/config.json`).
|
|
20
21
|
|
|
21
22
|
## Configure your MCP client
|
|
22
23
|
|
|
@@ -40,10 +41,12 @@ enforces it too.
|
|
|
40
41
|
| `get_extension` | Full catalog detail for one extension — by numeric catalog ID **or** by its store id (see below) | 1 read |
|
|
41
42
|
| `get_reviews` | Paginated Firefox/Edge user reviews (rating, short excerpt, date, language) + a store-level aggregate (rating, count, reviews link) — Chrome Web Store review rows excluded (aggregate is the only public content for Chrome); reviewer identity omitted; sort by recent or rating | 1 read |
|
|
42
43
|
| `get_security` | Risk score + finding counts + top grouped findings (reads existing scans) | 3 reads |
|
|
44
|
+
| `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 |
|
|
43
45
|
| `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 |
|
|
44
46
|
| `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 |
|
|
45
47
|
| `search_docs` | Search the Extenshi docs + `@extenshi/cli` reference so the assistant can quote exact commands | Free (no key) |
|
|
46
|
-
| `generate_icon_workflow` | Icon design requirements + the local agent-draws-SVG → `extenshi icon preview` → export workflow | Free (no key) |
|
|
48
|
+
| `generate_icon_workflow` | Icon design requirements + the local agent-draws-SVG → `npx @extenshi/cli@latest icon preview` → export workflow | Free (no key) |
|
|
49
|
+
| `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) |
|
|
47
50
|
| `scan_extension` | Pre-publish security scan of a local artifact (.zip/.crx/.xpi), with live progress | 1 scan |
|
|
48
51
|
| `publish_extension` | Publish to Chrome/Firefox/Edge with your own store credentials (fully local) | Free |
|
|
49
52
|
|
package/dist/bff.d.ts
CHANGED
|
@@ -58,6 +58,18 @@ export interface Bff {
|
|
|
58
58
|
storeId: string;
|
|
59
59
|
store?: 'CHROME' | 'FIREFOX' | 'EDGE';
|
|
60
60
|
}): Promise<ExtensionRef | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Risk for MANY extensions addressed by store id, in ONE metered read.
|
|
63
|
+
* Cluster-resolved server-side, so each row describes the same listing the
|
|
64
|
+
* extension page renders. Capped at 40 extensions per call for metered
|
|
65
|
+
* callers — the BFF rejects a larger batch with a message naming the limit.
|
|
66
|
+
*/
|
|
67
|
+
getSecuritySummaryBatch(input: {
|
|
68
|
+
extensions: Array<{
|
|
69
|
+
storeId: string;
|
|
70
|
+
store: 'CHROME' | 'FIREFOX' | 'EDGE';
|
|
71
|
+
}>;
|
|
72
|
+
}): Promise<unknown>;
|
|
61
73
|
}
|
|
62
74
|
/** Build a BFF client from a static `ek_…` key (stdio path). */
|
|
63
75
|
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;
|
|
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;CACpB;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,CA0B/F"}
|
package/dist/bff.js
CHANGED
|
@@ -46,6 +46,7 @@ export function makeBffWithAuth(bffUrl, authHeader) {
|
|
|
46
46
|
getCategoryTree: () => client.catalog.getCategoryTree.query(),
|
|
47
47
|
getApiCallerBalance: () => client.cli.getApiCallerBalance.query(),
|
|
48
48
|
resolveExtensionRef: (input) => client.catalog.resolveExtensionRef.query(input),
|
|
49
|
+
getSecuritySummaryBatch: (input) => client.security.getSecuritySummaryBatch.query(input),
|
|
49
50
|
};
|
|
50
51
|
}
|
|
51
52
|
//# 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;
|
|
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;AAgE9D,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;KACxF,CAAA;AACF,CAAC"}
|
package/dist/icon-workflow.js
CHANGED
|
@@ -39,7 +39,7 @@ Extenshi CLI renders an offline verification page. No API key, no credits, no up
|
|
|
39
39
|
2. **Render the verification page** (free, offline):
|
|
40
40
|
|
|
41
41
|
\`\`\`bash
|
|
42
|
-
npx @extenshi/cli icon preview ${iconFile} --name "${name}"
|
|
42
|
+
npx @extenshi/cli@latest icon preview ${iconFile} --name "${name}"
|
|
43
43
|
\`\`\`
|
|
44
44
|
|
|
45
45
|
This writes a self-contained HTML file and opens it: Chrome / Firefox / Edge toolbar
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-workflow.js","sourceRoot":"","sources":["../src/icon-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,cAAc,CAAA;IACzD,MAAM,QAAQ,GAAG,UAAU,CAAA;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;+CAqBuC,QAAQ;;;;;
|
|
1
|
+
{"version":3,"file":"icon-workflow.js","sourceRoot":"","sources":["../src/icon-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,cAAc,CAAA;IACzD,MAAM,QAAQ,GAAG,UAAU,CAAA;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;+CAqBuC,QAAQ;;;;;2CAKZ,QAAQ,YAAY,IAAI;;;;;;;2DAOR,QAAQ;;;;;;;;;;;;;;;;;;;;;CAqBlE,CAAA;AACD,CAAC"}
|
package/dist/shape.d.ts
CHANGED
|
@@ -41,5 +41,32 @@ export declare function shapeReviews(result: unknown, limit: number): Obj;
|
|
|
41
41
|
export declare function shapeInstallDialog(preview: unknown): Obj | undefined;
|
|
42
42
|
/** Curate the security view: risk summary + grouped findings (top N per severity). */
|
|
43
43
|
export declare function shapeSecurity(security: unknown, riskSummary: unknown, installDialogPreview?: unknown): Obj;
|
|
44
|
+
/**
|
|
45
|
+
* Shape one row of `security.getSecuritySummaryBatch` for the risk-by-store-id
|
|
46
|
+
* tool.
|
|
47
|
+
*
|
|
48
|
+
* Two things this deliberately does NOT hide:
|
|
49
|
+
* - `scoredStore` / `scoredVariantId` — the batch resolves a store id through
|
|
50
|
+
* its cross-store cluster to the record the extension page renders, and
|
|
51
|
+
* cluster members are scanned independently (the same extension scored 78.55
|
|
52
|
+
* HIGH on its Chrome record and 80.47 CRITICAL on its Edge one). An agent
|
|
53
|
+
* reporting a number to a developer must be able to say which listing it
|
|
54
|
+
* describes.
|
|
55
|
+
* - a `null` score — "not scanned" is an expected state, not an error, and
|
|
56
|
+
* must never be flattened into a reassuring 100.
|
|
57
|
+
*
|
|
58
|
+
* `catalogUrl` uses the CANONICAL id so the link lands on the page the score
|
|
59
|
+
* came from without a redirect hop.
|
|
60
|
+
*/
|
|
61
|
+
export declare function shapeStoreRiskRow(row: unknown): Obj;
|
|
62
|
+
/**
|
|
63
|
+
* Shape a whole risk-by-store-id batch, and say which requested ids the catalog
|
|
64
|
+
* had no listing for — an agent that cannot tell "safe" from "unknown" will
|
|
65
|
+
* report the wrong thing.
|
|
66
|
+
*/
|
|
67
|
+
export declare function shapeStoreRiskBatch(rows: unknown, requested: Array<{
|
|
68
|
+
storeId: string;
|
|
69
|
+
store: string;
|
|
70
|
+
}>): Obj;
|
|
44
71
|
export {};
|
|
45
72
|
//# sourceMappingURL=shape.d.ts.map
|
package/dist/shape.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,UAAU,WAAW;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,mFAAmF;AACnF,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,WAAgB,EAAE,KAAK,SAAI,GAAG,OAAO,CAqBlF;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AA6DlC,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAS/D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkCvD;AAuDD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAUhE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS,CAqBpE;AAkBD,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,OAAO,GAAG,GAAG,CAkD1G"}
|
|
1
|
+
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,UAAU,WAAW;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,mFAAmF;AACnF,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,WAAgB,EAAE,KAAK,SAAI,GAAG,OAAO,CAqBlF;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AA6DlC,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAS/D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkCvD;AAuDD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAUhE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS,CAqBpE;AAkBD,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,OAAO,GAAG,GAAG,CAkD1G;AAKD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CA+BnD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAClD,GAAG,CAiBL"}
|
package/dist/shape.js
CHANGED
|
@@ -305,4 +305,76 @@ export function shapeSecurity(security, riskSummary, installDialogPreview) {
|
|
|
305
305
|
}
|
|
306
306
|
return out;
|
|
307
307
|
}
|
|
308
|
+
/** The catalog URL an agent can hand the developer for a given catalog id. */
|
|
309
|
+
const CATALOG_EXTENSION_URL = 'https://catalog.extenshi.io/extensions/';
|
|
310
|
+
/**
|
|
311
|
+
* Shape one row of `security.getSecuritySummaryBatch` for the risk-by-store-id
|
|
312
|
+
* tool.
|
|
313
|
+
*
|
|
314
|
+
* Two things this deliberately does NOT hide:
|
|
315
|
+
* - `scoredStore` / `scoredVariantId` — the batch resolves a store id through
|
|
316
|
+
* its cross-store cluster to the record the extension page renders, and
|
|
317
|
+
* cluster members are scanned independently (the same extension scored 78.55
|
|
318
|
+
* HIGH on its Chrome record and 80.47 CRITICAL on its Edge one). An agent
|
|
319
|
+
* reporting a number to a developer must be able to say which listing it
|
|
320
|
+
* describes.
|
|
321
|
+
* - a `null` score — "not scanned" is an expected state, not an error, and
|
|
322
|
+
* must never be flattened into a reassuring 100.
|
|
323
|
+
*
|
|
324
|
+
* `catalogUrl` uses the CANONICAL id so the link lands on the page the score
|
|
325
|
+
* came from without a redirect hop.
|
|
326
|
+
*/
|
|
327
|
+
export function shapeStoreRiskRow(row) {
|
|
328
|
+
if (!isObj(row))
|
|
329
|
+
return { value: compact(row) };
|
|
330
|
+
const canonicalId = typeof row.canonicalExtensionId === 'number' ? row.canonicalExtensionId : row.extensionId;
|
|
331
|
+
const scored = row.scoredExtensionId;
|
|
332
|
+
return prune({
|
|
333
|
+
storeId: row.storeId,
|
|
334
|
+
store: row.store,
|
|
335
|
+
name: row.extensionName,
|
|
336
|
+
extensionId: canonicalId,
|
|
337
|
+
catalogUrl: typeof canonicalId === 'number' ? `${CATALOG_EXTENSION_URL}${canonicalId}` : undefined,
|
|
338
|
+
safetyScore: toSafetyScore(row.riskScore),
|
|
339
|
+
riskCategory: row.riskCategory,
|
|
340
|
+
severityBreakdown: isObj(row.severityBreakdown) ? row.severityBreakdown : undefined,
|
|
341
|
+
totalFindings: row.totalFindings ?? undefined,
|
|
342
|
+
lastScanDate: row.lastScanDate,
|
|
343
|
+
// Only worth the tokens when the score came from a DIFFERENT listing
|
|
344
|
+
// than the one the caller asked about — that is the case an agent must
|
|
345
|
+
// not silently paper over.
|
|
346
|
+
//
|
|
347
|
+
// NB the asymmetry, which is deliberate: the emitted `extensionId` above
|
|
348
|
+
// is the CANONICAL id (it is what the catalog URL needs), but the test
|
|
349
|
+
// here is against the raw `row.extensionId` — the MEMBER that owns the
|
|
350
|
+
// store id the caller passed in. "Did the score come from the listing I
|
|
351
|
+
// asked about?" is a question about the member, so comparing against the
|
|
352
|
+
// canonical would suppress the label on exactly the clustered rows that
|
|
353
|
+
// need it.
|
|
354
|
+
scoredStore: typeof scored === 'number' && scored !== row.extensionId ? row.scoredStore : undefined,
|
|
355
|
+
scoredVariantId: typeof scored === 'number' && scored !== row.extensionId ? scored : undefined,
|
|
356
|
+
scanned: row.riskCategory == null ? false : undefined,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Shape a whole risk-by-store-id batch, and say which requested ids the catalog
|
|
361
|
+
* had no listing for — an agent that cannot tell "safe" from "unknown" will
|
|
362
|
+
* report the wrong thing.
|
|
363
|
+
*/
|
|
364
|
+
export function shapeStoreRiskBatch(rows, requested) {
|
|
365
|
+
const list = Array.isArray(rows) ? rows : [];
|
|
366
|
+
const found = new Set(list.filter(isObj).map((row) => `${String(row.store)}:${String(row.storeId)}`));
|
|
367
|
+
const notFound = requested
|
|
368
|
+
.filter((ref) => !found.has(`${ref.store}:${ref.storeId}`))
|
|
369
|
+
.map((ref) => ({ storeId: ref.storeId, store: ref.store }));
|
|
370
|
+
return prune({
|
|
371
|
+
requested: requested.length,
|
|
372
|
+
matched: list.length,
|
|
373
|
+
extensions: list.map(shapeStoreRiskRow),
|
|
374
|
+
notInCatalog: notFound.length > 0 ? notFound : undefined,
|
|
375
|
+
note: notFound.length > 0
|
|
376
|
+
? 'notInCatalog means no listing has been scraped for that store id yet — it is NOT a safety verdict.'
|
|
377
|
+
: undefined,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
308
380
|
//# sourceMappingURL=shape.js.map
|
package/dist/shape.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape.js","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shape.js","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transport-agnostic tool registry for the Extenshi MCP server.
|
|
3
3
|
*
|
|
4
|
-
* The SAME
|
|
4
|
+
* The SAME tool set must run over two transports:
|
|
5
5
|
* - stdio (`index.ts`) — local, single `ek_…` key from the environment.
|
|
6
6
|
* - remote (`http.ts`, in the sibling `@extenshi/mcp-server`) — Streamable
|
|
7
7
|
* HTTP behind OAuth; identity is per-request (an access token → userId).
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
* capability → tools
|
|
23
23
|
* ─────────────────────────────────────────────────────────────
|
|
24
24
|
* 'read' → search_extensions, get_extension, get_reviews,
|
|
25
|
-
* get_security, market_overview
|
|
26
|
-
* 'docs' → search_docs, generate_icon_workflow
|
|
25
|
+
* get_security, get_risk_by_store_ids, market_overview
|
|
26
|
+
* 'docs' → search_docs, generate_icon_workflow,
|
|
27
|
+
* generate_welcome_page_workflow (free; no key)
|
|
27
28
|
* 'scan' → scan_extension (local artifact; stdio only)
|
|
28
29
|
* 'publish' → publish_extension (local creds; stdio only)
|
|
29
30
|
*
|
|
@@ -35,6 +36,17 @@ export declare const KEY_PAGE = "https://dojo.extenshi.io/api-keys";
|
|
|
35
36
|
export declare const SIGNUP_PAGE = "https://auth.extenshi.io/signup";
|
|
36
37
|
export declare const BILLING_PAGE = "https://dojo.extenshi.io/billing";
|
|
37
38
|
export declare const MISSING_KEY_MESSAGE: string;
|
|
39
|
+
/**
|
|
40
|
+
* Max extensions `get_risk_by_store_ids` accepts per call.
|
|
41
|
+
*
|
|
42
|
+
* CROSS-PACKAGE SYNC POINT — nothing can import across it: this is a published
|
|
43
|
+
* npm package, the enforcing code is `METERED_BATCH_MAX_EXTENSIONS` in
|
|
44
|
+
* `catalog/catalog-bff/src/lib/metered-batch-cap.ts`. The BFF is the authority
|
|
45
|
+
* (it rejects an over-cap metered batch); this constant only keeps the tool
|
|
46
|
+
* schema and description honest so an agent is told the limit up front instead
|
|
47
|
+
* of discovering it as a round-tripped error. Pinned by `tools.test.ts`.
|
|
48
|
+
*/
|
|
49
|
+
export declare const MAX_BATCH_EXTENSIONS = 40;
|
|
38
50
|
export declare const SERVER_NAME = "extenshi";
|
|
39
51
|
export declare const SERVER_INSTRUCTIONS: string;
|
|
40
52
|
/** Which tool groups to register on this transport. */
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,SAAS,CAAA;AAE1G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAmBnC,eAAO,MAAM,QAAQ,sCAAsC,CAAA;AAC3D,eAAO,MAAM,WAAW,oCAAoC,CAAA;AAC5D,eAAO,MAAM,YAAY,qCAAqC,CAAA;AAE9D,eAAO,MAAM,mBAAmB,QAWS,CAAA;AAEzC;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,eAAO,MAAM,WAAW,aAAa,CAAA;AAErC,eAAO,MAAM,mBAAmB,QAmBe,CAAA;AAI/C,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC5B;AAED,MAAM,WAAW,QAAQ;IACxB,kEAAkE;IAClE,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,+BAA+B;IAC/B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,GAAG,CAAA;IACrC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAA;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAA;IACxD,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAiFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,MAA2B,GAAG,OAAO,CAGxF;AA6ND;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CA2nBnE"}
|
package/dist/tools.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transport-agnostic tool registry for the Extenshi MCP server.
|
|
3
3
|
*
|
|
4
|
-
* The SAME
|
|
4
|
+
* The SAME tool set must run over two transports:
|
|
5
5
|
* - stdio (`index.ts`) — local, single `ek_…` key from the environment.
|
|
6
6
|
* - remote (`http.ts`, in the sibling `@extenshi/mcp-server`) — Streamable
|
|
7
7
|
* HTTP behind OAuth; identity is per-request (an access token → userId).
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
* capability → tools
|
|
23
23
|
* ─────────────────────────────────────────────────────────────
|
|
24
24
|
* 'read' → search_extensions, get_extension, get_reviews,
|
|
25
|
-
* get_security, market_overview
|
|
26
|
-
* 'docs' → search_docs, generate_icon_workflow
|
|
25
|
+
* get_security, get_risk_by_store_ids, market_overview
|
|
26
|
+
* 'docs' → search_docs, generate_icon_workflow,
|
|
27
|
+
* generate_welcome_page_workflow (free; no key)
|
|
27
28
|
* 'scan' → scan_extension (local artifact; stdio only)
|
|
28
29
|
* 'publish' → publish_extension (local creds; stdio only)
|
|
29
30
|
*
|
|
@@ -37,8 +38,10 @@ import { PublishSetupError, publishArtifact, readStoreCredentials, validateStore
|
|
|
37
38
|
import { checkPublishAccess } from './publish-access.js';
|
|
38
39
|
import { ScanError, scanArtifact } from './scan.js';
|
|
39
40
|
import { describeStoreConstraints, validateSearchFilters } from './search-filters.js';
|
|
40
|
-
import { shapeExtension, shapeReviews, shapeSearch, shapeSecurity } from './shape.js';
|
|
41
|
+
import { shapeExtension, shapeReviews, shapeSearch, shapeSecurity, shapeStoreRiskBatch } from './shape.js';
|
|
41
42
|
import { captureError, captureEvent, classifyError } from './telemetry.js';
|
|
43
|
+
import { renderCatalogPayload } from './untrusted.js';
|
|
44
|
+
import { renderWelcomeWorkflow } from './welcome-workflow.js';
|
|
42
45
|
// ── Public links (shared by tool bodies + server instructions) ──────────────
|
|
43
46
|
export const KEY_PAGE = 'https://dojo.extenshi.io/api-keys';
|
|
44
47
|
export const SIGNUP_PAGE = 'https://auth.extenshi.io/signup';
|
|
@@ -54,6 +57,17 @@ export const MISSING_KEY_MESSAGE = "This tool needs an Extenshi API key, and you
|
|
|
54
57
|
'config (or run `extenshi login`).\n\n' +
|
|
55
58
|
'Tip: the `search_docs` tool is free and needs no key — use it any time to ' +
|
|
56
59
|
'look up product docs and CLI commands.';
|
|
60
|
+
/**
|
|
61
|
+
* Max extensions `get_risk_by_store_ids` accepts per call.
|
|
62
|
+
*
|
|
63
|
+
* CROSS-PACKAGE SYNC POINT — nothing can import across it: this is a published
|
|
64
|
+
* npm package, the enforcing code is `METERED_BATCH_MAX_EXTENSIONS` in
|
|
65
|
+
* `catalog/catalog-bff/src/lib/metered-batch-cap.ts`. The BFF is the authority
|
|
66
|
+
* (it rejects an over-cap metered batch); this constant only keeps the tool
|
|
67
|
+
* schema and description honest so an agent is told the limit up front instead
|
|
68
|
+
* of discovering it as a round-tripped error. Pinned by `tools.test.ts`.
|
|
69
|
+
*/
|
|
70
|
+
export const MAX_BATCH_EXTENSIONS = 40;
|
|
57
71
|
export const SERVER_NAME = 'extenshi';
|
|
58
72
|
export const SERVER_INSTRUCTIONS = 'Extenshi catalog tools for extension developers: search the cross-store catalog, ' +
|
|
59
73
|
'inspect an extension and its security findings, find competitors, read market stats, ' +
|
|
@@ -61,11 +75,16 @@ export const SERVER_INSTRUCTIONS = 'Extenshi catalog tools for extension develop
|
|
|
61
75
|
'key) to consult the live product documentation and the @extenshi/cli command reference — ' +
|
|
62
76
|
'prefer quoting exact CLI commands and flags from the docs over guessing. Use ' +
|
|
63
77
|
'generate_icon_workflow (free, no key) when the developer needs an extension icon — it ' +
|
|
64
|
-
'returns the local agent-draws-SVG → CLI browser-panel preview → export workflow.
|
|
78
|
+
'returns the local agent-draws-SVG → CLI browser-panel preview → export workflow. Use ' +
|
|
79
|
+
'generate_welcome_page_workflow (free, no key) when the developer needs the page shown right ' +
|
|
80
|
+
'after install — it returns which illustrations to produce for the chosen goal, how to mark ' +
|
|
81
|
+
'up where to click, and the block JSON to hand back. Call ' +
|
|
65
82
|
'get_credit_balance (free — it never spends a credit) to check remaining read/scan credits ' +
|
|
66
83
|
'before a large batch instead of guessing whether it is safe. In get_extension / get_reviews / ' +
|
|
67
84
|
'get_security you can identify an extension either by its numeric catalog id or by its store id ' +
|
|
68
|
-
'(the id in the store URL; add the store for a Chrome/Edge id).
|
|
85
|
+
'(the id in the store URL; add the store for a Chrome/Edge id). To check a LIST of installed ' +
|
|
86
|
+
`extensions by store id, use get_risk_by_store_ids — up to ${MAX_BATCH_EXTENSIONS} per call for one ` +
|
|
87
|
+
'read credit total, instead of 3 credits per extension via get_security. The catalog and ' +
|
|
69
88
|
`scan tools require an Extenshi API key (${KEY_PAGE}). Every account gets a one-time free ` +
|
|
70
89
|
'allowance — 10 reads and 3 scans; beyond it, buy prepaid credit packs (scans ' +
|
|
71
90
|
`and reads, never expire) at ${BILLING_PAGE}.`;
|
|
@@ -316,6 +335,12 @@ const TOOL_ANNOTATIONS = {
|
|
|
316
335
|
idempotentHint: true,
|
|
317
336
|
openWorldHint: true,
|
|
318
337
|
},
|
|
338
|
+
get_risk_by_store_ids: {
|
|
339
|
+
title: 'Bulk risk lookup by store id',
|
|
340
|
+
readOnlyHint: true,
|
|
341
|
+
idempotentHint: true,
|
|
342
|
+
openWorldHint: true,
|
|
343
|
+
},
|
|
319
344
|
market_overview: {
|
|
320
345
|
title: 'Catalog market overview',
|
|
321
346
|
readOnlyHint: true,
|
|
@@ -340,6 +365,12 @@ const TOOL_ANNOTATIONS = {
|
|
|
340
365
|
idempotentHint: true,
|
|
341
366
|
openWorldHint: false,
|
|
342
367
|
},
|
|
368
|
+
generate_welcome_page_workflow: {
|
|
369
|
+
title: 'Welcome page design brief',
|
|
370
|
+
readOnlyHint: true,
|
|
371
|
+
idempotentHint: true,
|
|
372
|
+
openWorldHint: false,
|
|
373
|
+
},
|
|
343
374
|
scan_extension: {
|
|
344
375
|
title: 'Scan an extension package',
|
|
345
376
|
readOnlyHint: false,
|
|
@@ -475,7 +506,7 @@ export function registerTools(server, deps) {
|
|
|
475
506
|
skip: args.skip,
|
|
476
507
|
take: limit,
|
|
477
508
|
});
|
|
478
|
-
return
|
|
509
|
+
return renderCatalogPayload(shapeSearch(result, limit));
|
|
479
510
|
}
|
|
480
511
|
catch (err) {
|
|
481
512
|
return readError(err, missingKeyMessage);
|
|
@@ -495,7 +526,7 @@ export function registerTools(server, deps) {
|
|
|
495
526
|
const result = await client.getExtensionById(extensionId);
|
|
496
527
|
if (!result)
|
|
497
528
|
throw new UserError(`No extension found with catalog ID ${extensionId}.`);
|
|
498
|
-
return
|
|
529
|
+
return renderCatalogPayload(shapeExtension(result));
|
|
499
530
|
}
|
|
500
531
|
catch (err) {
|
|
501
532
|
return readError(err, missingKeyMessage);
|
|
@@ -547,7 +578,7 @@ export function registerTools(server, deps) {
|
|
|
547
578
|
minRating: args.min_rating,
|
|
548
579
|
sort: args.sort ?? 'recent',
|
|
549
580
|
});
|
|
550
|
-
return
|
|
581
|
+
return renderCatalogPayload(shapeReviews(result, limit));
|
|
551
582
|
}
|
|
552
583
|
catch (err) {
|
|
553
584
|
return readError(err, missingKeyMessage);
|
|
@@ -580,7 +611,49 @@ export function registerTools(server, deps) {
|
|
|
580
611
|
const installDialogPreview = extension && typeof extension === 'object'
|
|
581
612
|
? extension.installDialogPreview
|
|
582
613
|
: null;
|
|
583
|
-
return
|
|
614
|
+
return renderCatalogPayload(shapeSecurity(security, riskSummary, installDialogPreview));
|
|
615
|
+
}
|
|
616
|
+
catch (err) {
|
|
617
|
+
return readError(err, missingKeyMessage);
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
});
|
|
621
|
+
add({
|
|
622
|
+
name: 'get_risk_by_store_ids',
|
|
623
|
+
description: 'Look up the safety score and risk category for MANY extensions at once, addressed by their ' +
|
|
624
|
+
'STORE ids (the id in the store URL) — the inventory case: you have a list of what a user has ' +
|
|
625
|
+
`installed and need risk for all of it. Up to ${MAX_BATCH_EXTENSIONS} extensions per call, and ` +
|
|
626
|
+
'the WHOLE call costs 1 read credit (not 1 per extension), so prefer this over calling ' +
|
|
627
|
+
'get_security in a loop — that would cost 3 credits each. Returns safety score (0–100, higher ' +
|
|
628
|
+
'= safer, the same number the website shows), risk category, severity counts, last scan date ' +
|
|
629
|
+
'and the catalog URL per extension. Each store id is resolved through its cross-store cluster ' +
|
|
630
|
+
'to the same listing the extension page renders, so these answers agree with the website. ' +
|
|
631
|
+
'`store` is REQUIRED per entry — Chrome and Edge ids share one format. An extension with no ' +
|
|
632
|
+
'score has not been scanned yet (`scanned: false`); ids with no catalog listing come back ' +
|
|
633
|
+
'under `notInCatalog`. Neither means "safe". For the full findings list of ONE extension, use ' +
|
|
634
|
+
'get_security instead.',
|
|
635
|
+
parameters: z.object({
|
|
636
|
+
extensions: z
|
|
637
|
+
.array(z.object({
|
|
638
|
+
store_id: z
|
|
639
|
+
.string()
|
|
640
|
+
.min(1)
|
|
641
|
+
.max(100)
|
|
642
|
+
.describe('The extension id from its store URL, e.g. "cjpalhdlnbpafiamejdnhcphjbkeiagm".'),
|
|
643
|
+
store: z
|
|
644
|
+
.enum(['CHROME', 'FIREFOX', 'EDGE'])
|
|
645
|
+
.describe('Which store this id belongs to. Required — Chrome and Edge ids look identical.'),
|
|
646
|
+
}))
|
|
647
|
+
.min(1)
|
|
648
|
+
.max(MAX_BATCH_EXTENSIONS)
|
|
649
|
+
.describe(`The extensions to look up (max ${MAX_BATCH_EXTENSIONS}). Split a longer list into ` +
|
|
650
|
+
`batches of ${MAX_BATCH_EXTENSIONS}; each batch costs 1 read credit.`),
|
|
651
|
+
}),
|
|
652
|
+
execute: async (args, context) => {
|
|
653
|
+
try {
|
|
654
|
+
const refs = args.extensions.map((e) => ({ storeId: e.store_id, store: e.store }));
|
|
655
|
+
const rows = await bff(context).getSecuritySummaryBatch({ extensions: refs });
|
|
656
|
+
return renderCatalogPayload(shapeStoreRiskBatch(rows, refs));
|
|
584
657
|
}
|
|
585
658
|
catch (err) {
|
|
586
659
|
return readError(err, missingKeyMessage);
|
|
@@ -611,7 +684,11 @@ export function registerTools(server, deps) {
|
|
|
611
684
|
.getSearchFacets({ query: args.query, stores: args.stores, categories: args.categories })
|
|
612
685
|
.catch(() => null),
|
|
613
686
|
]);
|
|
614
|
-
return
|
|
687
|
+
return renderCatalogPayload({
|
|
688
|
+
scope: 'search',
|
|
689
|
+
stats: stats ?? undefined,
|
|
690
|
+
facets: facets ?? undefined,
|
|
691
|
+
});
|
|
615
692
|
}
|
|
616
693
|
// Catalog-wide: the unscoped search facets are all-zero by design, so build the
|
|
617
694
|
// overview from the dedicated catalog-wide procedures (cached server-side).
|
|
@@ -632,7 +709,7 @@ export function registerTools(server, deps) {
|
|
|
632
709
|
count: r.count,
|
|
633
710
|
label: STORE_LABELS[r.store] ?? r.store,
|
|
634
711
|
}));
|
|
635
|
-
return
|
|
712
|
+
return renderCatalogPayload({
|
|
636
713
|
scope: 'catalog-wide',
|
|
637
714
|
stats: stats ?? undefined,
|
|
638
715
|
facets: {
|
|
@@ -641,7 +718,7 @@ export function registerTools(server, deps) {
|
|
|
641
718
|
extended: extended ?? undefined,
|
|
642
719
|
},
|
|
643
720
|
note: 'Monetization and download-volume facets are only computed when scoped to a query — pass `query` to get those.',
|
|
644
|
-
}
|
|
721
|
+
});
|
|
645
722
|
}
|
|
646
723
|
catch (err) {
|
|
647
724
|
return readError(err, missingKeyMessage);
|
|
@@ -652,7 +729,8 @@ export function registerTools(server, deps) {
|
|
|
652
729
|
name: 'get_credit_balance',
|
|
653
730
|
description: 'Check your remaining Extenshi credits BEFORE running a batch, so you never guess whether a ' +
|
|
654
731
|
'large request is safe. Returns every credit pool for your API key: `read` (spent one-per-call by ' +
|
|
655
|
-
'search_extensions / get_extension / get_reviews / market_overview
|
|
732
|
+
'search_extensions / get_extension / get_reviews / market_overview / get_risk_by_store_ids — the ' +
|
|
733
|
+
'last one covers up to 40 extensions for that single credit; get_security costs 3) and ' +
|
|
656
734
|
'`scan` (spent by scan_extension), plus `icon` and `inventory`. Each pool reports `remaining` — the ' +
|
|
657
735
|
'number that actually gates calls (one-time free grant + purchased credits) — and `freeRemaining` ' +
|
|
658
736
|
'(how much of the never-renewing signup grant is left). FREE to call: checking your balance never ' +
|
|
@@ -725,6 +803,60 @@ export function registerTools(server, deps) {
|
|
|
725
803
|
}),
|
|
726
804
|
execute: async (args) => renderIconWorkflow({ extensionName: args.extension_name }),
|
|
727
805
|
});
|
|
806
|
+
add({
|
|
807
|
+
name: 'generate_welcome_page_workflow',
|
|
808
|
+
description: 'Get the design brief for a browser-extension welcome page — the page a user lands on ' +
|
|
809
|
+
'right after installing. Returns the one action the page must drive (pin the extension, ' +
|
|
810
|
+
'keep the new-tab change, use it on a site), exactly which illustrations to produce for ' +
|
|
811
|
+
'that goal, how to capture and crop them, how to place numbered/arrow markers showing ' +
|
|
812
|
+
'where to click, the limits enforced on save, and the block JSON to hand back. Pair with ' +
|
|
813
|
+
'get_extension to reuse the store screenshots Extenshi already hosts. Static content: no ' +
|
|
814
|
+
'API key, no network, no credits.',
|
|
815
|
+
parameters: z.object({
|
|
816
|
+
extension_name: z.string().max(120).optional().describe('Extension display name.'),
|
|
817
|
+
goal: z
|
|
818
|
+
.enum(['PIN_EXTENSION', 'NEW_TAB_OPT_IN', 'VISIT_SITE', 'CUSTOM'])
|
|
819
|
+
.optional()
|
|
820
|
+
.describe('The single action the page drives. PIN_EXTENSION (default) fits ~90% of extensions; ' +
|
|
821
|
+
'NEW_TAB_OPT_IN for new-tab replacements; VISIT_SITE when the extension injects a ' +
|
|
822
|
+
'widget into a site.'),
|
|
823
|
+
what_it_does: z
|
|
824
|
+
.string()
|
|
825
|
+
.max(1000)
|
|
826
|
+
.optional()
|
|
827
|
+
.describe('One or two sentences on what the extension actually does.'),
|
|
828
|
+
target_site: z
|
|
829
|
+
.string()
|
|
830
|
+
.max(200)
|
|
831
|
+
.optional()
|
|
832
|
+
.describe('For VISIT_SITE: the site the extension injects into, e.g. youtube.com.'),
|
|
833
|
+
store_screenshots: z
|
|
834
|
+
.array(z.string().max(1000))
|
|
835
|
+
.max(10)
|
|
836
|
+
.optional()
|
|
837
|
+
.describe('Screenshot URLs from get_extension. Offered to the agent as ready-made illustration ' +
|
|
838
|
+
'material that needs no upload.'),
|
|
839
|
+
existing_steps: z
|
|
840
|
+
.array(z.string().max(200))
|
|
841
|
+
.max(10)
|
|
842
|
+
.optional()
|
|
843
|
+
.describe('Steps the author already wrote, so the brief adds visuals instead of rewriting.'),
|
|
844
|
+
accent_color: z
|
|
845
|
+
.string()
|
|
846
|
+
.max(9)
|
|
847
|
+
.optional()
|
|
848
|
+
.describe("The page's accent colour as hex, so drawn illustrations match it."),
|
|
849
|
+
}),
|
|
850
|
+
execute: async (args) => renderWelcomeWorkflow({
|
|
851
|
+
extensionName: args.extension_name,
|
|
852
|
+
goal: args.goal,
|
|
853
|
+
whatItDoes: args.what_it_does,
|
|
854
|
+
targetSite: args.target_site,
|
|
855
|
+
storeScreenshots: args.store_screenshots,
|
|
856
|
+
existingSteps: args.existing_steps,
|
|
857
|
+
accentColor: args.accent_color,
|
|
858
|
+
}),
|
|
859
|
+
});
|
|
728
860
|
}
|
|
729
861
|
// ── Action tool (paid; key + LOCAL filesystem required; stdio only) ─────────
|
|
730
862
|
if (caps.has('scan')) {
|
|
@@ -769,7 +901,7 @@ export function registerTools(server, deps) {
|
|
|
769
901
|
}
|
|
770
902
|
},
|
|
771
903
|
});
|
|
772
|
-
return
|
|
904
|
+
return renderCatalogPayload(shapeExtension(report));
|
|
773
905
|
}
|
|
774
906
|
catch (err) {
|
|
775
907
|
// Keep the ScanError as `cause`: scanErrorMessage() renders 402/429
|