@extension.dev/mcp 10.10.0 → 10.10.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 +247 -0
- package/README.md +5 -4
- package/claude/CLAUDE.md +2 -1
- package/dist/module.js +2232 -261
- package/dist/src/lib/bridge-tabs.d.ts +8 -1
- package/dist/src/lib/cdp-devtools.d.ts +27 -0
- package/dist/src/lib/cdp-extension-page.d.ts +18 -0
- package/dist/src/lib/cdp-targets.d.ts +7 -0
- package/dist/src/lib/cdp.d.ts +2 -0
- package/dist/src/lib/common-schema.d.ts +3 -3
- package/dist/src/lib/credentials.d.ts +24 -3
- package/dist/src/lib/device-flow.d.ts +6 -3
- package/dist/src/lib/exec.d.ts +1 -0
- package/dist/src/lib/extension-surfaces.d.ts +7 -0
- package/dist/src/lib/publish.d.ts +3 -1
- package/dist/src/lib/registry.d.ts +1 -0
- package/dist/src/lib/relay-eval.d.ts +12 -0
- package/dist/src/lib/session-browser.d.ts +1 -1
- package/dist/src/lib/session-paths.d.ts +10 -1
- package/dist/src/lib/types.d.ts +3 -0
- package/dist/src/tools/browsers.d.ts +1 -1
- package/dist/src/tools/build.d.ts +1 -1
- package/dist/src/tools/detect-browsers.d.ts +3 -0
- package/dist/src/tools/dev.d.ts +1 -1
- package/dist/src/tools/eval.d.ts +4 -1
- package/dist/src/tools/inspect-gecko.d.ts +3 -0
- package/dist/src/tools/logout.d.ts +1 -1
- package/dist/src/tools/open.d.ts +25 -1
- package/dist/src/tools/preview-web.d.ts +7 -2
- package/dist/src/tools/project-create.d.ts +15 -0
- package/dist/src/tools/publish.d.ts +5 -0
- package/dist/src/tools/release-promote.d.ts +5 -0
- package/dist/src/tools/shares.d.ts +5 -0
- package/dist/src/tools/start.d.ts +6 -1
- package/dist/src/tools/stop.d.ts +5 -0
- package/dist/src/tools/submit.d.ts +5 -0
- package/dist/src/tools/workspace-create.d.ts +42 -0
- package/package.json +18 -13
- package/server.json +3 -3
|
@@ -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.10.
|
|
13
|
+
"version": "10.10.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 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.10.
|
|
4
|
+
"version": "10.10.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cezar Augusto",
|
|
7
7
|
"email": "hello@extension.dev",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,252 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 10.10.2
|
|
4
|
+
|
|
5
|
+
- The engine pin moves to the Extension.js canary
|
|
6
|
+
`4.1.31-canary.1791055414.4bbb683a` (ruled 2026-10-01, refreshed
|
|
7
|
+
2026-10-03 when the canary moved on): `extension_dev`,
|
|
8
|
+
`extension_start` and `extension_build` spawn that build when a project
|
|
9
|
+
has no engine of its own, and the nightly engine-pin check now reads a
|
|
10
|
+
canary pin against the canary dist-tag instead of latest. The canary's
|
|
11
|
+
log query treats level `off` as none (it was a synonym for all), which
|
|
12
|
+
changes nothing for `extension_logs`, whose `off` stays "signals only".
|
|
13
|
+
The canary also adopts a project root only when it owns the manifest
|
|
14
|
+
(same folder, the `src/manifest.json` layout, a dependency on
|
|
15
|
+
Extension.js, or an `extension.config.*` beside it) and otherwise builds
|
|
16
|
+
into the manifest's own folder; the session artifact resolver here
|
|
17
|
+
applies the same four tests, so `extension_wait` and `extension_logs`
|
|
18
|
+
keep reading the ready.json the engine writes.
|
|
19
|
+
- Logins to several projects now live side by side in `auth.json`, one
|
|
20
|
+
entry per workspace/project with the latest marked active, instead of
|
|
21
|
+
one slot the next login overwrote. `extension_publish`,
|
|
22
|
+
`extension_release_promote`, `extension_submit`, `extension_shares` and
|
|
23
|
+
`extension_preview_web` take `project` ('<workspace>/<project>', or a
|
|
24
|
+
project slug that matches one login) to pick a stored login, which
|
|
25
|
+
outranks `EXTENSION_DEV_TOKEN`; omitted, the order stays environment
|
|
26
|
+
first, then the active login. `extension_auth` status lists every login
|
|
27
|
+
under `logins`, and logout with `project` removes just that one. A
|
|
28
|
+
version 1 file is read as a store of one and rewritten on the next login
|
|
29
|
+
(BUGS_TO_FIX_MCP.md entry 36).
|
|
30
|
+
- Four findings from the six-browser sweep (BUGS_TO_FIX_MCP.md entries 40
|
|
31
|
+
to 43): `extension_open` reads new headless off the `User-Agent` field
|
|
32
|
+
of `/json/version` as well (`--headless=new` keeps `Chrome/151` in the
|
|
33
|
+
`Browser` field) and, whatever the launch flags said, falls back to the
|
|
34
|
+
tab route on any window refusal: Chromium's gesture refusal for a popup,
|
|
35
|
+
an options or popup window the engine called opened but no document
|
|
36
|
+
appeared for within 3 s, and Gecko's "Popup is disabled"; a Gecko
|
|
37
|
+
browser that gets Chromium's gesture sentence (the engine counts every
|
|
38
|
+
non-Firefox name as Chromium, extension.js ledger 642) is answered with
|
|
39
|
+
Gecko wording; and when the background refuses the `runtime.getURL` eval
|
|
40
|
+
the tab route needs (an extension CSP that forbids eval), the
|
|
41
|
+
`moz-extension://` base is read off the profile's
|
|
42
|
+
`extensions.webextensions.uuids` pref through the add-on id the built
|
|
43
|
+
manifest declares, so the fallback still lands (40). `extension_eval` context `background` wakes an idle
|
|
44
|
+
MV3 worker through `ServiceWorker.startWorker` from a page session
|
|
45
|
+
before evaluating, with a warning that it was idle, instead of answering
|
|
46
|
+
`E_NO_TARGET` (41). `extension_open surface: "devtools"` takes `waitMs`
|
|
47
|
+
and `reload` (reload the inspected tab once DevTools is open, for
|
|
48
|
+
extensions that create their panel when the page reports to them) and
|
|
49
|
+
the missing-panel hint names both (42). A page eval the PAGE's CSP
|
|
50
|
+
refuses on a Gecko MV2 build is re-run through `tabs.executeScript`, the
|
|
51
|
+
same wrapper the no-scripting-API case uses (43); an MV3 Gecko build
|
|
52
|
+
keeps the policy explanation, pending engine ledger 560.
|
|
53
|
+
- `extension_eval` over CDP awaits a promise-valued expression again. The
|
|
54
|
+
CDP routes added for entries 29 and 31 passed `replMode` on every
|
|
55
|
+
`Runtime.evaluate`, and Chrome 151 answers a replMode evaluate with the
|
|
56
|
+
promise object itself, ignoring `awaitPromise`, so `Promise.resolve(42)`,
|
|
57
|
+
an async IIFE or `chrome.tabs.query({}).then(...)` read as `{}` with
|
|
58
|
+
`ok: true` on pages and workers alike. The evaluate now runs without
|
|
59
|
+
replMode, and only an expression Chrome refuses for a top-level `await`
|
|
60
|
+
is re-run in replMode with the promise settled through
|
|
61
|
+
`Runtime.awaitPromise` (BUGS_TO_FIX_MCP.md entry 39, a regression of
|
|
62
|
+
10.10.2's own, never released).
|
|
63
|
+
- `extension_open` takes `surface: "devtools"` on Chromium: it opens the
|
|
64
|
+
browser's real DevTools on a tab (the one `url` matches, else the first
|
|
65
|
+
web page) through CDP `Target.openDevTools`, waits for the extension's
|
|
66
|
+
`devtools_page` to register its panel, shows it (`panel` picks a title
|
|
67
|
+
when there are several) and hands back the panel document's url, which
|
|
68
|
+
`extension_eval` reads with context `page` and that url, with
|
|
69
|
+
`chrome.devtools` available. Context `devtools` on `extension_eval` now
|
|
70
|
+
evaluates over CDP on an MV3 session like the other surfaces, and an
|
|
71
|
+
extension document lookup matches the iframe targets a DevTools panel
|
|
72
|
+
and its devtools page are. Works headed or headless (measured Chrome
|
|
73
|
+
151). Gecko gets a refusal that says no protocol opens its developer
|
|
74
|
+
tools (BUGS_TO_FIX_MCP.md entry 38).
|
|
75
|
+
- `zen` and `floorp` join the browser enum of `extension_dev`,
|
|
76
|
+
`extension_start` and friends, the Gecko family, `extension_browsers`
|
|
77
|
+
detection (app bundles, Linux and Windows paths) and the process match
|
|
78
|
+
`extension_stop` uses, the same way waterfox is listed; the engine has
|
|
79
|
+
launched both since 4.1.26 (entry 37).
|
|
80
|
+
- The dependency floors move past every advisory `pnpm audit` reported on
|
|
81
|
+
2026-09-30 (42: 18 high, 22 moderate, 2 low, all transitive): axios,
|
|
82
|
+
brace-expansion, fast-uri, js-yaml, nanoid, devalue, hono, ip-address,
|
|
83
|
+
qs and postcss-selector-parser through `pnpm.overrides`, vitest to 4.1.11
|
|
84
|
+
as a dev dependency. The audit reads zero; nothing the server does
|
|
85
|
+
changes.
|
|
86
|
+
- The bundled template catalog moves to the corpus at `2c3a486a`, which
|
|
87
|
+
renamed the `new-*` examples to `newtab-*` and added the `devtools-*`
|
|
88
|
+
family and `sidebar-monorepo-nx`. `extension_add_feature`'s newtab row
|
|
89
|
+
now names `newtab`, `newtab-react`, `newtab-vue`, `newtab-svelte` and
|
|
90
|
+
`newtab-preact`; the catalog-sync PR had failed on the old names every
|
|
91
|
+
day since 2026-09-26 (BUGS_TO_FIX_MCP.md entry 14).
|
|
92
|
+
|
|
93
|
+
Nine findings from a session that brought ten third-party extensions under
|
|
94
|
+
the server in one day (BUGS_TO_FIX_MCP.md entries 15 to 27; the ones this
|
|
95
|
+
release closes are 16 to 19 and 21 to 25):
|
|
96
|
+
|
|
97
|
+
- `extension_dev` and `extension_start` spawn the engine in the project
|
|
98
|
+
directory, not where the MCP client started the server, so the engine a
|
|
99
|
+
session drives is the project's own and the started envelope names it
|
|
100
|
+
under `value.engine` (entry 25).
|
|
101
|
+
- Every session artifact path (ready.json, logs, the build summary) now
|
|
102
|
+
resolves from the engine's project root, the nearest package.json,
|
|
103
|
+
deno.json or deno.jsonc at or above the manifest, so a project whose
|
|
104
|
+
manifest sits in a subfolder no longer makes `extension_wait` watch a
|
|
105
|
+
contract the engine never writes (entry 23).
|
|
106
|
+
- A failed `extension_build` carries the compiler errors the engine stamped
|
|
107
|
+
on its contract under `value.errors`, or the bundler's own output under
|
|
108
|
+
`value.output`, and its hint no longer asserts a manifest location the
|
|
109
|
+
engine does not require (entry 16).
|
|
110
|
+
- `extension_wait` on an `extension_start` session answers `launched` at
|
|
111
|
+
once with the production-build guidance instead of spending its budget on
|
|
112
|
+
a "transient" `E_NOT_ATTACHED` that is permanent there; a clamped budget
|
|
113
|
+
is reported in `warnings` on every exit; and a dead-contract note names
|
|
114
|
+
only the browser the call asked about (entry 18).
|
|
115
|
+
- `extension_eval` names the extension's own content security policy when
|
|
116
|
+
the engine refuses with "call to eval() blocked by CSP", instead of
|
|
117
|
+
blaming the expression (entry 19), and on MV2 Gecko a page or content
|
|
118
|
+
eval goes through `tabs.executeScript` from the background when the
|
|
119
|
+
engine has no scripting API, with the content-world caveat stated
|
|
120
|
+
(entry 24).
|
|
121
|
+
- `extension_open` with a `url` opens a new tab unless `tab` names one, so
|
|
122
|
+
a page under test is never taken over; a path with no scheme resolves
|
|
123
|
+
against the extension's own origin on Chromium and Gecko (entry 21).
|
|
124
|
+
- `extension_manifest_validate` reads `public/` when resolving manifest
|
|
125
|
+
references, warns rather than blocks on a missing web-accessible resource
|
|
126
|
+
and on a Chromium-only side panel, counts `devtools_page` and options
|
|
127
|
+
pages when ranking similar templates and ranks by surface overlap ratio,
|
|
128
|
+
and on Firefox warns on a missing `browser_specific_settings.gecko.id`,
|
|
129
|
+
on Chromium-only keys and on `extension_ids`, and gives an MV2 manifest
|
|
130
|
+
the keys to port for MV3 (entries 17 and 22).
|
|
131
|
+
- `extension_start` takes `outputPath`, an existing unpacked extension
|
|
132
|
+
directory to launch as it is through the engine's preview verb, so an
|
|
133
|
+
artifact another toolchain produced, or the exact release candidate, can
|
|
134
|
+
be run and watched without an Extension.js build (entry 26). A directory
|
|
135
|
+
with no manifest.json is refused before anything launches.
|
|
136
|
+
- `extension_manifest_validate` warns on Firefox when
|
|
137
|
+
`browser_specific_settings.gecko.data_collection_permissions` is missing,
|
|
138
|
+
which AMO now requires for new add-ons, and shows the minimal form.
|
|
139
|
+
|
|
140
|
+
Seven more from the same session's functional sweep (entries 29 to 35):
|
|
141
|
+
|
|
142
|
+
- `extension_eval` reaches the Chromium background over CDP: the MV3 service
|
|
143
|
+
worker or MV2 background page is a target of its own, and evaluating on it
|
|
144
|
+
is the inspector path the extension's content security policy does not
|
|
145
|
+
govern, so state only the worker knows is readable again under
|
|
146
|
+
`script-src 'self'`. An idle worker with no target answers `E_NO_TARGET`
|
|
147
|
+
with how to wake it (entry 29).
|
|
148
|
+
- `extension_eval` with context `page` and a url evaluates on the matching
|
|
149
|
+
tab's CDP target, so a site that enforces Trusted Types (YouTube, Gmail)
|
|
150
|
+
no longer refuses the string; the active-tab refusal names Trusted Types
|
|
151
|
+
and the url route (entry 31). Every CDP route falls back to the in-bundle
|
|
152
|
+
relay when the session has no debug port.
|
|
153
|
+
- `extension_open` asks the browser whether it is headless (HeadlessChrome
|
|
154
|
+
names itself) and renders popup, options and sidebar as a tab at once
|
|
155
|
+
when it is, instead of opening a popup that is gone before the next call
|
|
156
|
+
(entry 32). A page the browser swapped for its own error page answers
|
|
157
|
+
`navigate-blocked` with the browser's title instead of `navigated`, and
|
|
158
|
+
eval refuses such a tab (entry 35).
|
|
159
|
+
- `extension_browsers` reports the newest managed version when several sit
|
|
160
|
+
in the cache, the one the engine launches (entry 30).
|
|
161
|
+
- `extension_inspect` probes on Gecko return the same shape as on Chromium,
|
|
162
|
+
`{selector, count, samples[]}` with a text snippet per element
|
|
163
|
+
(entry 34).
|
|
164
|
+
- `extension_assert` on Gecko reads `background-worker-booted` off the
|
|
165
|
+
control channel (the bridge executor runs in the background) and
|
|
166
|
+
`surface-rendered` off the surface relay, instead of answering
|
|
167
|
+
inconclusive for want of a CDP target list; a selector clause stays
|
|
168
|
+
inconclusive there and names the tool that probes it (entry 33).
|
|
169
|
+
|
|
170
|
+
- `@extension.dev/urls` moves to `^0.8.1`, which reserves `chromium`,
|
|
171
|
+
`firefox`, `mcp` and `skill` as mint slugs.
|
|
172
|
+
- `extension_browsers` install hands the canary's installer the server's
|
|
173
|
+
own managed-binary search as `locateInstalledBinary`, which that
|
|
174
|
+
installer now requires to verify an install before it reports success.
|
|
175
|
+
- The stored login reader no longer types a missing entry as `undefined`
|
|
176
|
+
where it promises `null`, so consumers that compile the server's source
|
|
177
|
+
under `noUncheckedIndexedAccess` typecheck it.
|
|
178
|
+
|
|
179
|
+
## 10.10.1
|
|
180
|
+
|
|
181
|
+
Five Gecko findings from one agent session on Firefox and Waterfox
|
|
182
|
+
(BUGS_TO_FIX_MCP.md entries 5 to 9), each replayed against a live Firefox
|
|
183
|
+
Nightly before and after the fix where the shape allowed it, plus four more
|
|
184
|
+
that followed them the same week, and the engine release that carries the
|
|
185
|
+
root-cause fix for the first of them.
|
|
186
|
+
|
|
187
|
+
- `extension-create`, `extension-develop` and `extension-install` move from
|
|
188
|
+
4.1.29 to 4.1.30. That engine settles a promise before a surface relay
|
|
189
|
+
replies to an eval (the root cause behind the first entry below, filed
|
|
190
|
+
from this repo as extension.js 512), names a missing tab, a refused url,
|
|
191
|
+
a closed surface and a browser exit on every act verb instead of a
|
|
192
|
+
generic refusal, and lets `reload` resolve a surface's tab. The relay
|
|
193
|
+
wrapper below stays: a project that pins an older engine in its own
|
|
194
|
+
node_modules still drives that engine.
|
|
195
|
+
|
|
196
|
+
- `extension_eval` on a surface that answers through the in-bundle relay
|
|
197
|
+
(every Gecko session, and Chromium MV2) never hands the relay a promise.
|
|
198
|
+
The relay evaluates synchronously and passes the raw value to
|
|
199
|
+
`sendResponse`; a promise is not cloneable, Firefox reports that to the
|
|
200
|
+
sender as no reply, and the bridge then called the surface "not open"
|
|
201
|
+
while the page was still running the expression. The wrapper now settles
|
|
202
|
+
a thenable inside the page under a token, and the tool polls until it is
|
|
203
|
+
done: an async expression returns its value, a rejection answers `E_EVAL`
|
|
204
|
+
with the page's own message, and one that never settles answers
|
|
205
|
+
`E_WAIT_TIMEOUT` naming where the result will land. The engine's "open it
|
|
206
|
+
first: extension open newtab" hint is now spoken as the tool call it means.
|
|
207
|
+
- `extension_inspect` on Gecko reads a page inside the extension through
|
|
208
|
+
its surface relay: a url that matches a declared surface document (the
|
|
209
|
+
full `moz-extension://` address, the document path, or its file name)
|
|
210
|
+
routes to that context instead of the tab injection, which Firefox
|
|
211
|
+
refuses into extension pages with "Missing host permission for the tab".
|
|
212
|
+
An extension url that matches no declared surface says so and names the
|
|
213
|
+
ones the manifest declares.
|
|
214
|
+
- `extension_stop` reaps the browser the launcher recorded in `ready.json`
|
|
215
|
+
(`browserPid`, `launcherPid`, and any process holding `profilePath`), so
|
|
216
|
+
a Firefox started on a custom profile, or one whose argv never names the
|
|
217
|
+
project, no longer survives a `stopped` answer with `reaped: []`.
|
|
218
|
+
- `extension_doctor` no longer calls a Gecko session unhealthy over a
|
|
219
|
+
browser exit that the executor outlived: Firefox hands a fresh profile to
|
|
220
|
+
a relaunched process and the first one exits 0, which the engine's browser
|
|
221
|
+
leg reports as a failure while storage probes and evals keep answering.
|
|
222
|
+
That leg becomes a warning that says so, and any other failure still
|
|
223
|
+
counts.
|
|
224
|
+
- `extension_browsers` detect finds a managed binary as deep as the cache
|
|
225
|
+
writes it (a Firefox Nightly sits six levels down inside its app bundle),
|
|
226
|
+
so it no longer reports the system Firefox as available while
|
|
227
|
+
`extension_dev` launches the cached Nightly. When both exist, the entry
|
|
228
|
+
carries `systemBinaryPath` and a `devLaunches` line saying which one dev
|
|
229
|
+
starts and how to choose the other. `extension_wait` reports `browserPid`
|
|
230
|
+
and `profilePath` from the contract.
|
|
231
|
+
- `extension_open` with surface `sidebar` on Gecko no longer stops at the
|
|
232
|
+
engine's "sidePanel not available", a Chromium API named on a Firefox
|
|
233
|
+
engine. It asks the sidebar relay whether the `sidebar_action` panel is
|
|
234
|
+
open and reports `status: "already-open"` when it is (Firefox opens the
|
|
235
|
+
panel at install, so it usually is); when it is not, the document is
|
|
236
|
+
rendered as a tab with the gesture rule stated (Firefox opens the panel
|
|
237
|
+
only from the toolbar button or View > Sidebar, Bugzilla 1392624).
|
|
238
|
+
- `extension_eval` with context `page` and a `moz-extension://` url on
|
|
239
|
+
Gecko evaluates through the surface relay of the document that url names,
|
|
240
|
+
with a warning naming the context to pass next time, instead of "chrome.
|
|
241
|
+
scripting is not available ... use context background". An extension url
|
|
242
|
+
that matches no declared surface says which surfaces the manifest
|
|
243
|
+
declares. The url-to-surface mapping now lives in one place for inspect
|
|
244
|
+
and eval.
|
|
245
|
+
- `extension_dev` with `port: 0` no longer warns "Requested port 0 was not
|
|
246
|
+
available": 0 asks the engine for any free port, so the note now says
|
|
247
|
+
which port it picked, and the collision wording stays for a numbered port
|
|
248
|
+
the server could not bind.
|
|
249
|
+
|
|
3
250
|
## 10.10.0
|
|
4
251
|
|
|
5
252
|
Safari was the one engine this server treated as a dead end, while the
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
# @extension.dev/mcp [![Version][npm-version-image]][npm-version-url] [![Downloads][npm-downloads-image]][npm-downloads-url] [![Discord][discord-image]][discord-url]
|
|
9
9
|
|
|
10
|
-
> Give your AI agent hands for browser extension development.
|
|
10
|
+
> Give your AI agent hands for browser extension development. 31 MCP tools that scaffold, run, inspect, debug, and publish cross-browser extensions.
|
|
11
11
|
|
|
12
12
|
<img alt="Logo" align="right" src="https://media.extension.land/brand/extension-dev/logo-dock.png" width="20.7%" />
|
|
13
13
|
|
|
@@ -26,7 +26,7 @@ Extensions fail silently: content scripts that never inject, panels that never o
|
|
|
26
26
|
These tools give agents eyes on the live browser, so they debug from evidence instead of guessing:
|
|
27
27
|
|
|
28
28
|
- **Scaffold** from the 50+ template catalog behind [templates.extension.dev](https://templates.extension.dev), or add a popup, sidebar, or content script to an existing project
|
|
29
|
-
- **Run** the dev server with HMR in Chrome, Edge, Firefox, Brave, Opera, Vivaldi, Yandex, Waterfox, LibreWolf, or any Chromium- or Gecko-based binary, plus Safari on macOS (no HMR yet), no build config
|
|
29
|
+
- **Run** the dev server with HMR in Chrome, Edge, Firefox, Brave, Opera, Vivaldi, Yandex, Waterfox, LibreWolf, Zen, Floorp, or any Chromium- or Gecko-based binary, plus Safari on macOS (no HMR yet), no build config
|
|
30
30
|
- **See** the live DOM, unified logs from every extension context, `chrome.storage` contents, and the loaded-extension list
|
|
31
31
|
- **Act**: evaluate code in any context, trigger the action button and commands, reload the extension, replay events
|
|
32
32
|
- **Ship**: validate the manifest cross-browser, build for production, publish a shareable preview, and promote builds to release channels headlessly
|
|
@@ -106,7 +106,7 @@ cp node_modules/@extension.dev/mcp/claude/commands/*.md ~/my-extension/.claude/c
|
|
|
106
106
|
| build | `extension_add_feature` | Add sidebar/popup/content script |
|
|
107
107
|
| build | `extension_build` | Build for production |
|
|
108
108
|
| run | `extension_dev` | Dev server with HMR |
|
|
109
|
-
| run | `extension_start` | Build + launch the production build (`build: false` launches the existing dist) |
|
|
109
|
+
| run | `extension_start` | Build + launch the production build (`build: false` launches the existing dist; `outputPath` launches any prebuilt unpacked directory) |
|
|
110
110
|
| run | `extension_wait` | Poll the dev-server ready contract |
|
|
111
111
|
| run | `extension_stop` | Stop a dev/start/preview session (server + browser) |
|
|
112
112
|
| see | `extension_manifest_validate` | Cross-browser manifest validation |
|
|
@@ -121,9 +121,10 @@ cp node_modules/@extension.dev/mcp/claude/commands/*.md ~/my-extension/.claude/c
|
|
|
121
121
|
| act | `extension_eval` | Evaluate in a context (needs `allowEval: true` on `extension_dev`) |
|
|
122
122
|
| act | `extension_storage` | Read/write `chrome.storage` |
|
|
123
123
|
| act | `extension_reload` | Reload extension or tab |
|
|
124
|
-
| act | `extension_open` | Open a surface / trigger `action`, `command` |
|
|
124
|
+
| act | `extension_open` | Open a surface (popup, options, sidebar, devtools panel, override pages) / trigger `action`, `command` |
|
|
125
125
|
| browsers | `extension_browsers` | Detect, list, install, and uninstall browsers |
|
|
126
126
|
| platform | `extension_auth` | Device login at extension.dev, plus login status and logout |
|
|
127
|
+
| platform | `extension_workspace_create` | Create an extension.dev workspace, headless, via device approval; the approver becomes its owner |
|
|
127
128
|
| platform | `extension_project_create` | Create the extension.dev project for a built extension, headless, via device approval |
|
|
128
129
|
| platform | `extension_preview_web` | Render a build in the web emulator, and share it as a link |
|
|
129
130
|
| platform | `extension_shares` | List every link you have shared, and revoke one permanently |
|
package/claude/CLAUDE.md
CHANGED
|
@@ -26,7 +26,8 @@ The extension.dev platform ships 50+ templates in the [examples](https://github.
|
|
|
26
26
|
| Content script | `content` | `content-react` | `content-vue` | `content-svelte` | n/a |
|
|
27
27
|
| Sidebar | `sidebar` | `sidebar-shadcn` | n/a | n/a | `ai-claude` |
|
|
28
28
|
| Action popup | `action` | n/a | n/a | n/a | `ai-chatgpt` |
|
|
29
|
-
| New tab | `
|
|
29
|
+
| New tab | `newtab` | `newtab-react` | `newtab-vue` | `newtab-svelte` | n/a |
|
|
30
|
+
| DevTools | `devtools` | `devtools-react` | `devtools-vue`| `devtools-svelte`| n/a |
|
|
30
31
|
| Full framework | `javascript` | `react` | `vue` | `svelte` | n/a |
|
|
31
32
|
|
|
32
33
|
**When recommending a template:**
|