@extension.dev/mcp 10.1.0 → 10.3.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +100 -0
- package/README.md +5 -4
- package/dist/module.d.ts +1 -1
- package/dist/module.js +1863 -593
- package/dist/src/index.d.ts +9 -0
- package/dist/src/lib/artifacts-api.d.ts +2 -0
- package/dist/src/lib/boot-verdict.d.ts +0 -1
- package/dist/src/lib/carrier-exit.d.ts +8 -0
- package/dist/src/lib/carrier-registry.d.ts +4 -0
- package/dist/src/lib/carrier.d.ts +8 -0
- package/dist/src/lib/engine-version.d.ts +24 -0
- package/dist/src/lib/envelope.d.ts +1 -1
- package/dist/src/lib/guest-load-oracle.d.ts +1 -0
- package/dist/src/lib/login-flow.d.ts +1 -1
- package/dist/src/lib/process-manager.d.ts +1 -0
- package/dist/src/lib/server-identity.d.ts +16 -0
- package/dist/src/lib/session-paths.d.ts +12 -0
- package/dist/src/lib/share-cors-probe.d.ts +17 -0
- package/dist/src/lib/template-artifact-source.d.ts +1 -1
- package/dist/src/lib/zip-entries.d.ts +5 -0
- package/dist/src/tools/build.d.ts +23 -0
- package/dist/src/tools/logs-constants.d.ts +2 -2
- package/dist/src/tools/logs-filter.d.ts +3 -1
- package/dist/src/tools/logs.d.ts +8 -0
- package/dist/src/tools/whoami.d.ts +3 -1
- package/package.json +20 -4
- 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 50+ 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": "10.
|
|
13
|
+
"version": "10.3.0",
|
|
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 50+ 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": "10.
|
|
4
|
+
"version": "10.3.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cezar Augusto",
|
|
7
7
|
"email": "hello@extension.dev",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,105 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 10.3.0
|
|
4
|
+
|
|
5
|
+
Four fixes for places where a tool answered confidently about something it
|
|
6
|
+
had not actually checked: a login refusal that never said where the slugs
|
|
7
|
+
come from, a doctor report labelled with a browser that had no session, a
|
|
8
|
+
preview probe that certified whatever was listening on the port, and a
|
|
9
|
+
release gate that passed on a stale bundle.
|
|
10
|
+
|
|
11
|
+
- `extension_auth login` refused a malformed `project` without saying
|
|
12
|
+
where the two slugs come from. Both the refusal and the input schema now
|
|
13
|
+
name the console address bar as the source: an existing project's page is
|
|
14
|
+
`console.extension.dev/<workspace>/<project>`, and a project that does
|
|
15
|
+
not exist yet is created at extension.dev/new first.
|
|
16
|
+
- `extension_doctor` diagnoses the session that exists, not a hardcoded
|
|
17
|
+
default. The shared session resolver only counts contracts marked
|
|
18
|
+
"ready", which is exactly wrong for the tool you reach for when a session
|
|
19
|
+
failed: doctor fell back to chrome, labelled the report with it, read the
|
|
20
|
+
absent contract, and returned a healthy verdict over a session that had
|
|
21
|
+
errored. When there is no ready session, the browser with a contract on
|
|
22
|
+
disk wins, newest first and whatever its status.
|
|
23
|
+
- `extension_preview_web` certifies the probe against the build the call
|
|
24
|
+
just minted instead of against the port. Anything can be listening on the
|
|
25
|
+
local preview port, and the old probe read `hostReachable` and
|
|
26
|
+
`previewLoadable` as true off whatever JSON came back, then echoed that
|
|
27
|
+
server's `identifier`, name and version into the envelope unmarked, which
|
|
28
|
+
made any local server a text channel into the agent's context. The name
|
|
29
|
+
and version must now match the `dist` manifest read off disk, and the
|
|
30
|
+
identifier is echoed only when it matches the derivation the real
|
|
31
|
+
middleware uses. A mismatch returns the status
|
|
32
|
+
`host-serving-different-artifact` with `previewLoadable: false`, and
|
|
33
|
+
anything the host claimed that could not be confirmed locally travels
|
|
34
|
+
clipped under `probe.hostReported`, named as the host's claim.
|
|
35
|
+
- The release gate asserts the version the built bundle exports rather than
|
|
36
|
+
grepping the bundle for the version string. The grep greenwashed: the
|
|
37
|
+
bundle carries the pinned engine version and fifty-two `"version":"1.0.0"`
|
|
38
|
+
strings from the template corpus, so a release cut at any of those
|
|
39
|
+
numbers passed the gate over a stale `dist`. `dist/module.js` now exports
|
|
40
|
+
the manifest version it inlined at build time, and the gate reads it back
|
|
41
|
+
and compares.
|
|
42
|
+
|
|
43
|
+
## 10.2.0
|
|
44
|
+
|
|
45
|
+
A production walk of the full share-and-publish loop, then a fix for every
|
|
46
|
+
roughness it surfaced, on top of a week of engine tracking and preview
|
|
47
|
+
hardening. Everything landed since 10.1.0 ships here; the 10.1.1 version
|
|
48
|
+
bump was never published and is folded in.
|
|
49
|
+
|
|
50
|
+
- Revoking a share accepts the ids the platform actually mints: `gen_` plus
|
|
51
|
+
64 hex characters, with the older 32-character form still valid. A
|
|
52
|
+
malformed reference is refused by name, with what a real id looks like,
|
|
53
|
+
instead of being silently cut down to a 32-character prefix that revokes
|
|
54
|
+
nothing while reporting the wrong cause.
|
|
55
|
+
- Every revoke handle the tools return points at `www.extension.dev`
|
|
56
|
+
directly, so one plain DELETE works. The apex `extension.dev` answers
|
|
57
|
+
DELETE with a redirect, and a caller that does not follow redirects got
|
|
58
|
+
"Redirecting..." back while the share stayed live.
|
|
59
|
+
- `extension_doctor` hands over the CLI's own report when the engine exits
|
|
60
|
+
nonzero with output the server cannot parse: the response carries
|
|
61
|
+
`cliReport`, the doctor's actual check list and remediations, instead of
|
|
62
|
+
discarding it and guessing that the local CLI is stale.
|
|
63
|
+
- `extension_inspect` with no `url` ranks the extension's own surfaces
|
|
64
|
+
first and the toolchain's pages last, so it no longer inspects the
|
|
65
|
+
Extension.js welcome surface and reports on the wrong document. When only
|
|
66
|
+
toolchain or override pages are open, a warning names exactly which page
|
|
67
|
+
was inspected and how to target yours.
|
|
68
|
+
- `extension_publish` against a host where the token's project does not
|
|
69
|
+
exist now says what to do: check the token's scope with `extension_auth`,
|
|
70
|
+
create the project first at extension.dev/new, or log in against a
|
|
71
|
+
project that exists there.
|
|
72
|
+
- `extension_auth status` asks the platform who the stored credential
|
|
73
|
+
really is instead of trusting the file on this machine, and reports the
|
|
74
|
+
three answers apart: the server confirmed it, the server refused it and
|
|
75
|
+
the workspace shown is only a local claim, or the server could not be
|
|
76
|
+
reached and nothing here is server confirmed. A credential minted against
|
|
77
|
+
a development deployment reads as refused where production refuses it,
|
|
78
|
+
which is what it always was and never said.
|
|
79
|
+
- The MCP `isError` flag now agrees with the envelope: every `ok: false`
|
|
80
|
+
result is marked `isError: true`, so an agent branching on the transport
|
|
81
|
+
flag no longer reads a platform refusal, a publish 404 or an auth 401, as
|
|
82
|
+
success.
|
|
83
|
+
- `extension_preview_web` with `share: true` no longer fails a working
|
|
84
|
+
share because the local dev lane is dead: the uploaded link is what was
|
|
85
|
+
asked for, so the result is `ok: true` with status `shared` and a warning
|
|
86
|
+
naming the unreachable local leg, which is expected outside the
|
|
87
|
+
extension.dev monorepo.
|
|
88
|
+
- The Extension.js engine pin moved to 4.0.20, the server asks the engine
|
|
89
|
+
its version and JSON support from its published capabilities instead of
|
|
90
|
+
paying for a second build to find out, and a canary pin no longer parses
|
|
91
|
+
to NaN.
|
|
92
|
+
- Safari packaging lets an agent name the app and bundle id it is
|
|
93
|
+
packaging, and the docs say what a derived bundle id actually costs a
|
|
94
|
+
developer instead of claiming Apple rejects it.
|
|
95
|
+
- Preview and share housekeeping: `hostUrl` is pinned to a local server,
|
|
96
|
+
stale carriers are cleared on start and swept on every exit, re-sharing
|
|
97
|
+
is documented for what it really does, and the CORS verdict is read off
|
|
98
|
+
the last hop a browser would follow.
|
|
99
|
+
- The offline template fallback points at the published corpus, three
|
|
100
|
+
control refusals are told apart instead of sharing one message, and a
|
|
101
|
+
stray binary file no longer ships in the package.
|
|
102
|
+
|
|
3
103
|
## 10.1.0
|
|
4
104
|
|
|
5
105
|
A six-lens audit of the whole surface (auth, platform, run, see, act and
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ claude mcp add extension-dev npx @extension.dev/mcp
|
|
|
17
17
|
|
|
18
18
|
Works with Claude Code, Claude Desktop, Cursor, and any MCP client.
|
|
19
19
|
|
|
20
|
-
[extension.dev](https://extension.dev) · [
|
|
20
|
+
[extension.dev](https://extension.dev) · [Extension.js](https://extension.js.org) · [Templates](https://templates.extension.dev) · [Examples](https://github.com/extension-js/examples) · [Discord](https://discord.gg/v9h2RgeTSN)
|
|
21
21
|
|
|
22
22
|
## Why an MCP server for extensions
|
|
23
23
|
|
|
@@ -134,7 +134,7 @@ Browser-launching tools (`dev`, `start`) shell out to the `extension` CLI, the p
|
|
|
134
134
|
|
|
135
135
|
## Sharing a build in progress
|
|
136
136
|
|
|
137
|
-
An unpacked extension is unusually hard to hand to someone: the only way to look at a colleague's work-in-progress has been to take their zip and run untrusted code with real browser permissions on your own machine. `extension_preview_web` with `share: true` uploads the `dist/` it just built and returns a link that renders those exact bytes in the emulator. Whoever opens it installs nothing and signs in to nothing, which is what lets a designer, a PM, or a reviewer into the loop at all. Sharing needs auth (`extension_auth` or `EXTENSION_DEV_TOKEN`), the link
|
|
137
|
+
An unpacked extension is unusually hard to hand to someone: the only way to look at a colleague's work-in-progress has been to take their zip and run untrusted code with real browser permissions on your own machine. `extension_preview_web` with `share: true` uploads the `dist/` it just built and returns a link that renders those exact bytes in the emulator. Whoever opens it installs nothing and signs in to nothing, which is what lets a designer, a PM, or a reviewer into the loop at all. Those bytes run in an isolated sandbox origin or they do not run at all: preview refuses a shared build rather than serving it in its own renderer. Sharing needs auth (`extension_auth` or `EXTENSION_DEV_TOKEN`), the link lives 30 days, and `DELETE`ing the returned `revokeUrl` with the same token kills it early. Re-sharing an unchanged build returns that same link rather than a second one, and only a revoked link is replaced by a different one, because revocation is permanent: the address is burned and never resolves again. That makes `revokeUrl` the handle to the link you just made, so every share is also appended to `.extension.dev/shared-previews.json` in the project (gitignored) so it survives losing the tool output. The upload holds up to 2,000 files and about 64MB of text, or roughly 48MB when the build is mostly images, fonts or wasm, which travel base64-encoded. Without `share`, the tool returns a local-only deep link and uploads nothing.
|
|
138
138
|
|
|
139
139
|
`extension_shares` is the other half of that: it lists every link the token has shared, live and dead, with the `previewUrl` and `revokeUrl` of each, and revokes one by `artifactId` or by pasting any of its URLs. Pass `projectPath` and it reconciles the platform's answer with the project's own record, so a link shared from another machine shows up as `remoteOnly` and a record with nothing behind it any more shows up under `localOnly`. It never rewrites the local file.
|
|
140
140
|
|
|
@@ -155,8 +155,9 @@ All of it rides on [Extension.js](https://github.com/extension-js/extension.js),
|
|
|
155
155
|
|
|
156
156
|
## Community
|
|
157
157
|
|
|
158
|
-
- Join the [Discord](https://discord.gg/v9h2RgeTSN) for help and feedback
|
|
159
|
-
- Browse production-ready [
|
|
158
|
+
- Join the extension.dev [Discord](https://discord.gg/v9h2RgeTSN) for help and feedback
|
|
159
|
+
- Browse production-ready templates at [templates.extension.dev](https://templates.extension.dev)
|
|
160
|
+
- Follow the platform's public packages on [GitHub](https://github.com/extensiondev)
|
|
160
161
|
- Report Extension.js framework issues on [GitHub](https://github.com/extension-js/extension.js/issues)
|
|
161
162
|
|
|
162
163
|
## License
|
package/dist/module.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { startServer, runCli } from "./src/index";
|
|
1
|
+
export { startServer, runCli, version } from "./src/index";
|