@extension.dev/mcp 5.1.0 → 5.1.2
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +22 -0
- package/dist/module.js +39 -5
- package/dist/src/tools/deploy.d.ts +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"name": "extension-mcp",
|
|
11
11
|
"source": "./",
|
|
12
12
|
"description": "MCP tools for browser extension development: scaffold from 60+ templates, run the dev server with HMR, inspect the live DOM and logs, and publish store-ready builds for Chrome, Edge, and Firefox.",
|
|
13
|
-
"version": "5.1.
|
|
13
|
+
"version": "5.1.2",
|
|
14
14
|
"category": "development",
|
|
15
15
|
"author": {
|
|
16
16
|
"name": "Cezar Augusto"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "extension-mcp",
|
|
3
3
|
"description": "MCP tools for browser extension development: scaffold from 60+ templates, run the dev server with HMR, inspect the live DOM and logs, and publish store-ready builds for Chrome, Edge, and Firefox. Ships /extension, /extension-add, /extension-debug, and /extension-publish commands.",
|
|
4
|
-
"version": "5.1.
|
|
4
|
+
"version": "5.1.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cezar Augusto",
|
|
7
7
|
"email": "boss@cezaraugusto.net",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.1.2
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- `extension_logs` no longer flags a healthy live session as stale. Newer
|
|
8
|
+
engine canaries stamp log and event rows with ready.json's `instanceId`
|
|
9
|
+
rather than its `runId`, so the staleness check compared ids from two
|
|
10
|
+
different spaces and every live read carried `stale: true` with a
|
|
11
|
+
do-not-trust warning. The comparator now accepts either identity field,
|
|
12
|
+
pinned by a test against the real contract shapes. (Filed upstream as
|
|
13
|
+
Extension.js bug 77 so the ready/logs contract agrees on one field.)
|
|
14
|
+
|
|
15
|
+
## 5.1.1
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- `extension_deploy` warns when a Firefox or Edge submission ships without
|
|
20
|
+
the STORE.md notes the platform submits automatically (Firefox reviewer
|
|
21
|
+
and release notes, Edge certification notes). The warnings ride along in
|
|
22
|
+
the result as `warnings` and never block the submission; Chrome-only
|
|
23
|
+
submissions stay silent.
|
|
24
|
+
|
|
3
25
|
## 5.1.0
|
|
4
26
|
|
|
5
27
|
The engine closed its entire open bug range (Extension.js 61-73) in the
|
package/dist/module.js
CHANGED
|
@@ -36,7 +36,8 @@ var deploy_namespaceObject = {};
|
|
|
36
36
|
__webpack_require__.r(deploy_namespaceObject);
|
|
37
37
|
__webpack_require__.d(deploy_namespaceObject, {
|
|
38
38
|
handler: ()=>deploy_handler,
|
|
39
|
-
schema: ()=>deploy_schema
|
|
39
|
+
schema: ()=>deploy_schema,
|
|
40
|
+
storeMdWarnings: ()=>storeMdWarnings
|
|
40
41
|
});
|
|
41
42
|
var detect_browsers_namespaceObject = {};
|
|
42
43
|
__webpack_require__.r(detect_browsers_namespaceObject);
|
|
@@ -202,7 +203,7 @@ __webpack_require__.d(whoami_namespaceObject, {
|
|
|
202
203
|
handler: ()=>whoami_handler,
|
|
203
204
|
schema: ()=>whoami_schema
|
|
204
205
|
});
|
|
205
|
-
var package_namespaceObject = JSON.parse('{"rE":"
|
|
206
|
+
var package_namespaceObject = JSON.parse('{"rE":"5.1.1","El":{"OP":"^4.0.13"}}');
|
|
206
207
|
function scaffoldEnginePin(projectPath) {
|
|
207
208
|
try {
|
|
208
209
|
const pkg = JSON.parse(node_fs.readFileSync(node_path.join(projectPath, "package.json"), "utf8"));
|
|
@@ -3228,7 +3229,11 @@ function staleFileNote(projectPath, browser, eventsRunId) {
|
|
|
3228
3229
|
} catch {
|
|
3229
3230
|
return `These events are from a PAST run: the session that wrote them (pid ${contract.pid}) is dead. Nothing current is producing logs; do not read these as live output.`;
|
|
3230
3231
|
}
|
|
3231
|
-
|
|
3232
|
+
const liveIds = [
|
|
3233
|
+
contract.runId,
|
|
3234
|
+
contract.instanceId
|
|
3235
|
+
].map((v)=>String(v || "")).filter(Boolean);
|
|
3236
|
+
if (eventsRunId && liveIds.length > 0 && !liveIds.includes(eventsRunId)) return `These events carry runId ${eventsRunId} but the current session is run ${liveIds.join(" / ")}, which has written nothing yet. Do not read these as the current run's output.`;
|
|
3232
3237
|
}
|
|
3233
3238
|
async function readFromFile(args, browser, limit) {
|
|
3234
3239
|
const file = logsFilePath(args.projectPath, browser);
|
|
@@ -4462,6 +4467,32 @@ async function release_promote_handler(args) {
|
|
|
4462
4467
|
return JSON.stringify(data);
|
|
4463
4468
|
}
|
|
4464
4469
|
const deploy_DEFAULT_API = "https://www.extension.dev";
|
|
4470
|
+
function storeMdWarnings(browsers, cwd) {
|
|
4471
|
+
const wantsFirefox = browsers.includes("firefox");
|
|
4472
|
+
const wantsEdge = browsers.includes("edge");
|
|
4473
|
+
if (!wantsFirefox && !wantsEdge) return [];
|
|
4474
|
+
let content;
|
|
4475
|
+
try {
|
|
4476
|
+
content = node_fs.readFileSync(node_path.join(cwd, "STORE.md"), "utf8");
|
|
4477
|
+
} catch {
|
|
4478
|
+
return [
|
|
4479
|
+
"No STORE.md found in the project root. Reviewer notes (Firefox) and certification notes (Edge) will not accompany the submission. See the extension-dev skill's store-md reference."
|
|
4480
|
+
];
|
|
4481
|
+
}
|
|
4482
|
+
const hasField = (section, field)=>{
|
|
4483
|
+
const parts = content.split(/^## +/m);
|
|
4484
|
+
const match = parts.find((p)=>section.test(p.split("\n", 1)[0] ?? ""));
|
|
4485
|
+
if (!match) return false;
|
|
4486
|
+
const sub = match.split(/^### +/m).find((p)=>field.test(p.split("\n", 1)[0] ?? ""));
|
|
4487
|
+
if (!sub) return false;
|
|
4488
|
+
const body = sub.split("\n").slice(1).join("\n");
|
|
4489
|
+
return body.replace(/<!--[\s\S]*?-->/g, "").trim().length > 0;
|
|
4490
|
+
};
|
|
4491
|
+
const warnings = [];
|
|
4492
|
+
if (wantsFirefox && !hasField(/firefox|amo/i, /reviewer notes/i)) warnings.push("STORE.md has no Firefox reviewer notes; AMO reviews go faster with test credentials and steps.");
|
|
4493
|
+
if (wantsEdge && !hasField(/edge/i, /certification notes/i)) warnings.push("STORE.md has no Edge certification notes; the certification team gets no testing guidance.");
|
|
4494
|
+
return warnings;
|
|
4495
|
+
}
|
|
4465
4496
|
const deploy_schema = {
|
|
4466
4497
|
name: "extension_deploy",
|
|
4467
4498
|
description: "Submit a built extension to the Chrome Web Store, Firefox AMO, and/or Edge Add-ons THROUGH extension.dev, which holds your store credentials and dispatches the release from your project's mirror CI. DEFAULTS TO A DRY RUN (preflight: verifies auth, the project, that the build exists, and the store workflow - dispatches nothing); pass dryRun:false to actually submit, which is irreversible and enters store review. The target project is identified by your token (extension_login or a release token in EXTENSION_DEV_TOKEN); store credentials are never tool arguments and local files are not uploaded. Pass browsers + buildSha. Posts to the platform's CLI store-submission endpoint.",
|
|
@@ -4559,11 +4590,14 @@ async function deploy_handler(args) {
|
|
|
4559
4590
|
};
|
|
4560
4591
|
}
|
|
4561
4592
|
if (!res.ok) return deploy_fail("DeployError", `submit failed (${res.status}): ${data?.message || text || "unknown error"}`);
|
|
4562
|
-
|
|
4593
|
+
const warnings = storeMdWarnings(browsers, process.cwd());
|
|
4594
|
+
const result = {
|
|
4563
4595
|
mode: "platform",
|
|
4564
4596
|
dryRun,
|
|
4565
4597
|
...data
|
|
4566
|
-
}
|
|
4598
|
+
};
|
|
4599
|
+
if (warnings.length > 0) result.warnings = warnings;
|
|
4600
|
+
return JSON.stringify(result);
|
|
4567
4601
|
}
|
|
4568
4602
|
function doctor_readReadyContract(projectPath, browser) {
|
|
4569
4603
|
try {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@extension.dev/mcp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.1.
|
|
4
|
+
"version": "5.1.2",
|
|
5
5
|
"description": "MCP server that lets AI agents (Claude Code, Claude Desktop, Cursor, Copilot, Codex) build, run, inspect, and publish browser extensions. 31 tools for scaffolding, live DOM inspection, log streaming, and store-ready builds across Chrome, Edge, Firefox, Safari, and every Chromium- or Gecko-based browser (Brave, Opera, Vivaldi, Yandex, Waterfox, LibreWolf). Powered by extension.dev and Extension.js.",
|
|
6
6
|
"mcpName": "io.github.extensiondev/mcp",
|
|
7
7
|
"license": "MIT",
|
package/server.json
CHANGED
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
9
|
"websiteUrl": "https://extension.dev",
|
|
10
|
-
"version": "5.1.
|
|
10
|
+
"version": "5.1.2",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
15
15
|
"identifier": "@extension.dev/mcp",
|
|
16
|
-
"version": "5.1.
|
|
16
|
+
"version": "5.1.2",
|
|
17
17
|
"runtimeHint": "npx",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|