@extension.dev/mcp 10.10.11 → 10.10.12

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.
@@ -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.11",
13
+ "version": "10.10.12",
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.11",
4
+ "version": "10.10.12",
5
5
  "author": {
6
6
  "name": "Cezar Augusto",
7
7
  "email": "hello@extension.dev",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 10.10.12
4
+
5
+ - `extension_stop` on Windows reads the Windows process table to find what
6
+ is left of a session, so a stop that ended the whole tree says
7
+ `stopped` instead of "survivors were not verified". Before this, every
8
+ Windows stop answered `stopped: false`, and `extension_dev` with
9
+ `replace: true` refused every time. A stop still says unverified when
10
+ the table cannot be read. Measured on a Windows runner.
11
+ - The lockfile raises `proxy-addr`, `source-map-js` and Vue past their
12
+ open advisories.
13
+
3
14
  ## 10.10.11
4
15
 
5
16
  The rest of the 2026-10-05 audit ledger, apart from the Safari WebDriver
package/dist/module.js CHANGED
@@ -247,7 +247,7 @@ __webpack_require__.d(workspace_create_namespaceObject, {
247
247
  handler: ()=>workspace_create_handler,
248
248
  schema: ()=>workspace_create_schema
249
249
  });
250
- var package_namespaceObject = JSON.parse('{"rE":"10.10.11","El":{"OP":"4.1.31"}}');
250
+ var package_namespaceObject = JSON.parse('{"rE":"10.10.12","El":{"OP":"4.1.31"}}');
251
251
  const ENVELOPE_SCHEMA = 1;
252
252
  const collectWarnings = (warnings)=>{
253
253
  if (!warnings) return [];
@@ -4805,7 +4805,53 @@ function listSessions() {
4805
4805
  return Array.from(process_manager_sessions.values());
4806
4806
  }
4807
4807
  const PLAUSIBLE_SESSION_BINARY = /chrom|edge|brave|opera|vivaldi|yandex|firefox|waterfox|librewolf|zen|floorp|safari|node|electron|extension/i;
4808
+ function readWindowsProcessTable() {
4809
+ try {
4810
+ const out = execFileSync("powershell", [
4811
+ "-NoProfile",
4812
+ "-NonInteractive",
4813
+ "-Command",
4814
+ "[Console]::OutputEncoding = [Text.Encoding]::UTF8; Get-CimInstance Win32_Process | ForEach-Object { \"$($_.ProcessId)`t$($_.Name)`t$($_.CommandLine)\" }"
4815
+ ], {
4816
+ encoding: "utf8",
4817
+ windowsHide: true,
4818
+ maxBuffer: 67108864
4819
+ });
4820
+ const rows = [];
4821
+ for (const line of out.split(/\r?\n/)){
4822
+ const [pidText, name = "", ...rest] = line.split("\t");
4823
+ const pid = Number.parseInt(pidText ?? "", 10);
4824
+ if (Number.isInteger(pid) && pid > 0) rows.push({
4825
+ pid,
4826
+ name,
4827
+ commandLine: rest.join("\t")
4828
+ });
4829
+ }
4830
+ return rows.length ? rows : null;
4831
+ } catch {
4832
+ return null;
4833
+ }
4834
+ }
4835
+ function windowsImageName(pid) {
4836
+ try {
4837
+ const out = execFileSync("tasklist", [
4838
+ "/FI",
4839
+ `PID eq ${pid}`,
4840
+ "/FO",
4841
+ "CSV",
4842
+ "/NH"
4843
+ ], {
4844
+ encoding: "utf8",
4845
+ windowsHide: true
4846
+ });
4847
+ const match = /^"([^"]+)","(\d+)"/m.exec(out);
4848
+ return match && Number(match[2]) === pid ? match[1] : "";
4849
+ } catch {
4850
+ return "";
4851
+ }
4852
+ }
4808
4853
  function processCommand(pid) {
4854
+ if ("win32" === process.platform) return windowsImageName(pid);
4809
4855
  try {
4810
4856
  const cmdline = node_fs.readFileSync(`/proc/${pid}/cmdline`, "utf8");
4811
4857
  const argv0 = cmdline.split("\0")[0];
@@ -6763,7 +6809,13 @@ function cleanCarrier(projectPath) {
6763
6809
  carrierNote: `${removal.note} The carrier is still at ${removal.path}; the engine loads ./extensions, so remove it by hand before the next run.`
6764
6810
  } : {};
6765
6811
  }
6766
- function pgrepPids(pattern) {
6812
+ function pgrepPids(pattern, windowsTable) {
6813
+ if ("win32" === process.platform) {
6814
+ const table = windowsTable ? windowsTable() : readWindowsProcessTable();
6815
+ if (!table) return null;
6816
+ const matcher = new RegExp(pattern, "i");
6817
+ return table.filter((row)=>row.pid !== process.pid && matcher.test(row.commandLine)).map((row)=>row.pid);
6818
+ }
6767
6819
  try {
6768
6820
  const out = execFileSync("pgrep", [
6769
6821
  "-f",
@@ -6816,8 +6868,13 @@ function sessionProcessPids(projectPath, hints = {
6816
6868
  }) {
6817
6869
  const pids = new Set();
6818
6870
  let verified = true;
6871
+ let table;
6872
+ const windowsTable = ()=>{
6873
+ if (void 0 === table) table = readWindowsProcessTable();
6874
+ return table;
6875
+ };
6819
6876
  const found = (pattern)=>{
6820
- const hits = pgrepPids(pattern);
6877
+ const hits = pgrepPids(pattern, windowsTable);
6821
6878
  if (null === hits) {
6822
6879
  verified = false;
6823
6880
  return [];
@@ -1,5 +1,11 @@
1
1
  export type PidState = "alive" | "dead" | "foreign";
2
2
  export declare const PLAUSIBLE_SESSION_BINARY: RegExp;
3
+ export interface WindowsProcessRow {
4
+ pid: number;
5
+ name: string;
6
+ commandLine: string;
7
+ }
8
+ export declare function readWindowsProcessTable(): WindowsProcessRow[] | null;
3
9
  export declare function processCommand(pid: number): string;
4
10
  export declare function pidState(pid: number): PidState;
5
11
  export declare function describeForeignPid(pid: number): string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@extension.dev/mcp",
3
3
  "type": "module",
4
- "version": "10.10.11",
4
+ "version": "10.10.12",
5
5
  "description": "MCP server that lets AI agents (Claude Code, Claude Desktop, Cursor, Copilot, Codex) build, run, inspect, and publish browser extensions. 32 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": "Apache-2.0",
@@ -132,7 +132,11 @@
132
132
  "brace-expansion@5": "^5.0.12",
133
133
  "nanoid@3": "^3.3.19",
134
134
  "devalue@5": "^5.9.2",
135
- "postcss-selector-parser@7": "^7.1.6"
135
+ "postcss-selector-parser@7": "^7.1.6",
136
+ "proxy-addr@2": "^2.0.8",
137
+ "source-map-js@1": "^1.2.2",
138
+ "vue@3": "^3.5.43",
139
+ "@vue/compiler-sfc@3": "^3.5.43"
136
140
  }
137
141
  }
138
142
  }
package/server.json CHANGED
@@ -7,13 +7,13 @@
7
7
  "source": "github"
8
8
  },
9
9
  "websiteUrl": "https://extension.dev",
10
- "version": "10.10.11",
10
+ "version": "10.10.12",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "@extension.dev/mcp",
16
- "version": "10.10.11",
16
+ "version": "10.10.12",
17
17
  "runtimeHint": "npx",
18
18
  "transport": {
19
19
  "type": "stdio"