@jobshimo/browser-link 0.25.0 → 0.25.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.
@@ -194,10 +194,18 @@ function body() {
194
194
  ' max_iterations: 200, while_found: ".row", delay_ms: 250 } }',
195
195
  '```',
196
196
  '',
197
- '- Hundreds of iterations in ONE round trip, and every click is still',
198
- ' trusted CDP input with the occlusion guard and a recovery snapshot.',
199
- ' An `evaluate` loop has NONE of that — `el.click()` is',
197
+ '- Every click stays trusted CDP input with the occlusion guard and a',
198
+ ' recovery snapshot, and you get a per-iteration record. An',
199
+ ' `evaluate` loop has NONE of that — `el.click()` is',
200
200
  ' `isTrusted:false`, nothing hit-tests, nothing is recorded.',
201
+ '- Budget reality, so you size it right the first time:',
202
+ ' `2000 + max_iterations * (inner + delay_ms + 500 if while_found)',
203
+ ' <= 60000`. A click costs 2500ms with default settle, 500ms with',
204
+ ' `settle_ms: 0`. So a throttled drain loop fits ~46 iterations per',
205
+ ' call; SET `settle_ms: 0` on the inner click or you only get ~23.',
206
+ ' Draining a long list means several calls — that is expected, and',
207
+ ' each call resumes where the last stopped while `while_found` still',
208
+ ' matches. The win here is safety, not fewer round trips.',
201
209
  '- `max_iterations` is REQUIRED and repeats do NOT nest. Inner steps',
202
210
  ' count against the same 20-step ceiling. If the projected budget',
203
211
  ' exceeds 60s the flow is rejected up front — lower `max_iterations`',
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/agent-instructions/content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/agent-instructions/content.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,24 @@
20
20
  */
21
21
  import { spawn } from 'node:child_process';
22
22
  import type { Language } from './welcome.js';
23
+ export declare function isSafeUpdateTarget(target: string): boolean;
24
+ /**
25
+ * Locate npm's own CLI entrypoint so the install can run as
26
+ * `node npm-cli.js install -g …` instead of going through a shim.
27
+ *
28
+ * This is the preferred path on EVERY platform because it removes the
29
+ * whole problem class rather than working around it: no `.cmd` shim, so
30
+ * no Windows EINVAL; no shell, so no argument concatenation and no
31
+ * DEP0190 deprecation warning printed at the user mid-update; and one
32
+ * identical code path on macOS, Linux and Windows.
33
+ *
34
+ * npm ships inside the Node distribution, so it sits next to the running
35
+ * `node` binary in every standard install (official installer, nvm,
36
+ * nvm4w, fnm). When it is not there — an unusual layout, or a shim-based
37
+ * manager like Volta — we return null and the caller falls back to the
38
+ * platform shim.
39
+ */
40
+ export declare function resolveNpmCliJs(execPath: string, fileExists?: (p: string) => boolean): string | null;
23
41
  export interface SelfUpdateProgress {
24
42
  /** What stage are we in. Drives the UI's status label. */
25
43
  stage: 'preflight' | 'stopping-primary' | 'installing' | 'done' | 'failed';
@@ -39,8 +57,16 @@ export interface SelfUpdateResult {
39
57
  interface SelfUpdateOptions {
40
58
  /** Override the package name (mainly for tests). */
41
59
  packageName?: string;
42
- /** Force `npm` command path. Defaults to the `npm` on PATH. */
60
+ /** Force `npm` command path. Defaults to the `npm` on PATH. Supplying
61
+ * it also forces the shim fallback (the npm-cli.js path is skipped). */
43
62
  npmBin?: string;
63
+ /** Override npm-cli.js resolution. `null` forces the shim fallback —
64
+ * that is how tests exercise it on a machine where npm-cli.js DOES
65
+ * resolve. Undefined auto-resolves next to the running Node binary. */
66
+ npmCliJs?: string | null;
67
+ /** Override the shell decision (mainly for tests). Defaults to true on
68
+ * Windows only — see the spawn call for why it is mandatory there. */
69
+ useShell?: boolean;
44
70
  /** Skip the `runFreePort` step. Tests / dry-run use this. */
45
71
  skipFreePort?: boolean;
46
72
  /** Override the actual spawn for tests. */
@@ -19,8 +19,47 @@
19
19
  * to relaunch it is the only honest thing we can do.
20
20
  */
21
21
  import { spawn } from 'node:child_process';
22
+ import { existsSync } from 'node:fs';
23
+ import { dirname, join } from 'node:path';
22
24
  import { runFreePort } from './free-port.js';
25
+ import { assertSafeNpmName } from './updates.js';
23
26
  import { PACKAGE_NAME } from '../version.js';
27
+ /**
28
+ * What we are willing to install: the `latest` dist-tag, or one exact
29
+ * semver. Validated BEFORE the value is ever interpolated into an
30
+ * argument list, because on Windows the install runs through cmd.exe
31
+ * (see `runSelfUpdate`) and an unvalidated target would be a command
32
+ * injection surface. An allow-list is the right shape here — the set of
33
+ * legitimate values is tiny and closed.
34
+ */
35
+ const UPDATE_TARGET_RE = /^(?:latest|\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?)$/;
36
+ export function isSafeUpdateTarget(target) {
37
+ return UPDATE_TARGET_RE.test(target);
38
+ }
39
+ /** npm reports a global-install permission problem in several shapes
40
+ * depending on OS and npm version. Any of them means the same thing to
41
+ * the user, and the fix is the same. */
42
+ const PERMISSION_RE = /\bEACCES\b|\bEPERM\b|permission denied|operation not permitted/i;
43
+ /**
44
+ * Locate npm's own CLI entrypoint so the install can run as
45
+ * `node npm-cli.js install -g …` instead of going through a shim.
46
+ *
47
+ * This is the preferred path on EVERY platform because it removes the
48
+ * whole problem class rather than working around it: no `.cmd` shim, so
49
+ * no Windows EINVAL; no shell, so no argument concatenation and no
50
+ * DEP0190 deprecation warning printed at the user mid-update; and one
51
+ * identical code path on macOS, Linux and Windows.
52
+ *
53
+ * npm ships inside the Node distribution, so it sits next to the running
54
+ * `node` binary in every standard install (official installer, nvm,
55
+ * nvm4w, fnm). When it is not there — an unusual layout, or a shim-based
56
+ * manager like Volta — we return null and the caller falls back to the
57
+ * platform shim.
58
+ */
59
+ export function resolveNpmCliJs(execPath, fileExists = existsSync) {
60
+ const candidate = join(dirname(execPath), 'node_modules', 'npm', 'bin', 'npm-cli.js');
61
+ return fileExists(candidate) ? candidate : null;
62
+ }
24
63
  const I18N = {
25
64
  en: {
26
65
  starting: (t) => `Updating browser-link → ${t}`,
@@ -31,6 +70,11 @@ const I18N = {
31
70
  installed: (t) => `✓ Installed browser-link@${t}. Restart your MCP client (Claude Code, OpenCode, Copilot CLI, …) to load the new version.`,
32
71
  failed: (reason) => `✗ Update failed: ${reason}`,
33
72
  restartHint: 'Restart your MCP client to pick up the new version.',
73
+ refusedTarget: (t) => `✗ Refusing to install "${t}": a target must be "latest" or an exact version like 1.2.3.`,
74
+ refusedPackage: (name) => `✗ Refusing to install "${name}": it does not match the npm package-name grammar.`,
75
+ permissionHint: 'npm could not write to your global install directory. Either re-run with elevated permissions (`sudo npm install -g ' +
76
+ PACKAGE_NAME +
77
+ '@latest`), or point npm at a user-owned prefix (`npm config set prefix ~/.npm-global`) and reopen your shell.',
34
78
  },
35
79
  es: {
36
80
  starting: (t) => `Actualizando browser-link → ${t}`,
@@ -41,6 +85,11 @@ const I18N = {
41
85
  installed: (t) => `✓ Instalado browser-link@${t}. Reiniciá tu cliente MCP (Claude Code, OpenCode, Copilot CLI, …) para cargar la nueva versión.`,
42
86
  failed: (reason) => `✗ La actualización falló: ${reason}`,
43
87
  restartHint: 'Reiniciá tu cliente MCP para que tome la nueva versión.',
88
+ refusedTarget: (t) => `✗ No instalo "${t}": el destino tiene que ser "latest" o una versión exacta como 1.2.3.`,
89
+ refusedPackage: (name) => `✗ No instalo "${name}": no cumple la gramática de nombres de paquete de npm.`,
90
+ permissionHint: 'npm no pudo escribir en tu directorio de instalación global. O lo corrés con permisos elevados (`sudo npm install -g ' +
91
+ PACKAGE_NAME +
92
+ '@latest`), o apuntás npm a un prefix propio (`npm config set prefix ~/.npm-global`) y reabrís la terminal.',
44
93
  },
45
94
  };
46
95
  /** Returns the human-readable hint to restart the MCP client after a
@@ -49,6 +98,12 @@ const I18N = {
49
98
  export function restartHint(language = 'en') {
50
99
  return I18N[language].restartHint;
51
100
  }
101
+ /** A refusal happens before any stage has started, so it reports as a
102
+ * `failed` preflight rather than pretending an install was attempted. */
103
+ function emitRefusal(onProgress, message) {
104
+ if (onProgress)
105
+ onProgress({ stage: 'failed', message });
106
+ }
52
107
  /**
53
108
  * Run the full self-update pipeline. Reports progress via `onProgress`
54
109
  * (optional). Always resolves with a `SelfUpdateResult` — never throws so
@@ -57,14 +112,56 @@ export function restartHint(language = 'en') {
57
112
  export async function runSelfUpdate(target, language = 'en', onProgress, opts = {}) {
58
113
  const t = I18N[language];
59
114
  const pkgName = opts.packageName ?? PACKAGE_NAME;
60
- // Node's `spawn` does not resolve `.cmd` / `.bat` shims on Windows unless
61
- // it goes through cmd.exe (shell: true) or you pass the explicit filename.
62
- // `npm` on Windows is `npm.cmd`, so a bare `spawn('npm', …)` throws
63
- // ENOENT — the exact error the in-app updater was reporting before this
64
- // fix. We pick the right name per platform instead of opting into
65
- // shell:true, which adds an argument-quoting surface we don't need.
66
- const npmBin = opts.npmBin ?? (process.platform === 'win32' ? 'npm.cmd' : 'npm');
115
+ // Validate BOTH halves of the package ref before anything is spawned.
116
+ // This is not defensive decoration: on Windows the install has to run
117
+ // through cmd.exe (see the spawn call), so an unvalidated target or
118
+ // package name would be a command-injection surface. Refusing is the
119
+ // safe failure mode, and the legitimate value set is tiny and closed.
120
+ if (!isSafeUpdateTarget(target)) {
121
+ const message = t.refusedTarget(target);
122
+ emitRefusal(onProgress, message);
123
+ return { ok: false, target, message };
124
+ }
125
+ try {
126
+ assertSafeNpmName(pkgName);
127
+ }
128
+ catch {
129
+ const message = t.refusedPackage(pkgName);
130
+ emitRefusal(onProgress, message);
131
+ return { ok: false, target, message };
132
+ }
133
+ // Windows needs BOTH halves of this, and getting only the first was the
134
+ // long-standing bug: `npm` on Windows is `npm.cmd`, so a bare
135
+ // `spawn('npm', …)` throws ENOENT — and since Node 18.20.2 / 20.12.2 /
136
+ // 21.7.3 (the CVE-2024-27980 mitigation) spawning a `.cmd` WITHOUT a
137
+ // shell throws EINVAL. Naming the shim was necessary but not
138
+ // sufficient. We opt into the shell on Windows only, and only after
139
+ // allow-list validating the package ref above, so the quoting surface
140
+ // it adds never sees an unvalidated value.
141
+ const isWindows = process.platform === 'win32';
67
142
  const doSpawn = opts.spawnImpl ?? spawn;
143
+ // Preferred: drive npm's own CLI with the Node we are already running.
144
+ // Shell-free on every platform, so Windows never touches a `.cmd` shim
145
+ // and nothing is ever concatenated into a command line.
146
+ const npmCliJs = opts.npmCliJs !== undefined
147
+ ? opts.npmCliJs
148
+ : opts.npmBin === undefined
149
+ ? resolveNpmCliJs(process.execPath)
150
+ : null;
151
+ const installArgs = ['install', '-g'];
152
+ let command;
153
+ let argv;
154
+ let useShell;
155
+ if (npmCliJs !== null) {
156
+ command = process.execPath;
157
+ argv = [npmCliJs, ...installArgs];
158
+ useShell = opts.useShell ?? false;
159
+ }
160
+ else {
161
+ command = opts.npmBin ?? (isWindows ? 'npm.cmd' : 'npm');
162
+ argv = installArgs;
163
+ useShell = opts.useShell ?? isWindows;
164
+ }
68
165
  const emit = (stage, message) => {
69
166
  if (onProgress)
70
167
  onProgress({ stage, message });
@@ -87,15 +184,38 @@ export async function runSelfUpdate(target, language = 'en', onProgress, opts =
87
184
  emit('installing', t.installing(target));
88
185
  const ref = `${pkgName}@${target}`;
89
186
  const installResult = await new Promise((resolve) => {
90
- const child = doSpawn(npmBin, ['install', '-g', ref], {
91
- stdio: ['ignore', 'pipe', 'pipe'],
92
- });
187
+ let child;
188
+ try {
189
+ child = doSpawn(command, [...argv, ref], {
190
+ stdio: ['ignore', 'pipe', 'pipe'],
191
+ // Only reached on the FALLBACK path, where we had to go through
192
+ // the platform shim. It is mandatory there on Windows and is the
193
+ // reason every in-app update used to fail: Node >= 18.20.2 /
194
+ // 20.12.2 / 21.7.3 refuse to spawn a `.cmd` or `.bat` without a
195
+ // shell (the CVE-2024-27980 mitigation), and on Windows `npm` IS
196
+ // `npm.cmd`, so the shell-less spawn throws EINVAL. Both halves
197
+ // of `ref` were allow-list validated above, so nothing
198
+ // unvalidated ever reaches cmd.exe's parser.
199
+ ...(useShell ? { shell: true } : {}),
200
+ });
201
+ }
202
+ catch (err) {
203
+ // `spawn` can throw SYNCHRONOUSLY — EINVAL above, and EACCES /
204
+ // ENOENT on some platforms. That throw never reaches the 'error'
205
+ // listener below, so without this catch it escaped the promise and
206
+ // rejected out of a function whose contract is "never throws".
207
+ resolve({ code: 1, stderr: err instanceof Error ? err.message : String(err) });
208
+ return;
209
+ }
93
210
  let stderr = '';
94
- child.stderr.on('data', (chunk) => {
211
+ // Non-null in practice (stdio is ['ignore','pipe','pipe']), but the
212
+ // declared ChildProcess type allows null, and an optional chain costs
213
+ // nothing here.
214
+ child.stderr?.on('data', (chunk) => {
95
215
  stderr += chunk.toString();
96
216
  });
97
217
  // Drain stdout to avoid blocking npm on large logs.
98
- child.stdout.on('data', () => {
218
+ child.stdout?.on('data', () => {
99
219
  /* drain */
100
220
  });
101
221
  child.on('error', (err) => {
@@ -107,7 +227,12 @@ export async function runSelfUpdate(target, language = 'en', onProgress, opts =
107
227
  });
108
228
  if (installResult.code !== 0) {
109
229
  const lastLine = installResult.stderr.trim().split('\n').pop() ?? `exit code ${installResult.code}`;
110
- const message = t.failed(lastLine);
230
+ // A global-install permission failure is the single most common way
231
+ // this fails on macOS and Linux, and npm's own last line ("EACCES:
232
+ // permission denied") tells the user nothing about what to do. Append
233
+ // the two real remedies instead of making them search.
234
+ const hint = PERMISSION_RE.test(installResult.stderr) ? `\n${t.permissionHint}` : '';
235
+ const message = t.failed(lastLine) + hint;
111
236
  emit('failed', message);
112
237
  return { ok: false, target, message, stderr: installResult.stderr };
113
238
  }
@@ -1 +1 @@
1
- {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,gDAAgD,CAAC;AAE1E,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;wCAEwC;AACxC,MAAM,aAAa,GAAG,iEAAiE,CAAC;AAExF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,aAAqC,UAAU;IAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACtF,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAsDD,MAAM,IAAI,GAAqC;IAC7C,EAAE,EAAE;QACF,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,CAAC,EAAE;QAC/C,QAAQ,EAAE,4CAA4C;QACtD,UAAU,EAAE,4CAA4C;QACxD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,oDAAoD,MAAM,uCAAuC;QACnG,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,YAAY,IAAI,CAAC,EAAE;QACjE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CACf,4BAA4B,CAAC,4FAA4F;QAC3H,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,MAAM,EAAE;QAChD,WAAW,EAAE,qDAAqD;QAClE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CACnB,0BAA0B,CAAC,8DAA8D;QAC3F,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CACvB,0BAA0B,IAAI,oDAAoD;QACpF,cAAc,EACZ,sHAAsH;YACtH,YAAY;YACZ,+GAA+G;KAClH;IACD,EAAE,EAAE;QACF,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,+BAA+B,CAAC,EAAE;QACnD,QAAQ,EAAE,+CAA+C;QACzD,UAAU,EAAE,qDAAqD;QACjE,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,yCAAyC,MAAM,kCAAkC;QACnF,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,YAAY,IAAI,CAAC,EAAE;QACpE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CACf,4BAA4B,CAAC,iGAAiG;QAChI,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,6BAA6B,MAAM,EAAE;QACzD,WAAW,EAAE,yDAAyD;QACtE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CACnB,iBAAiB,CAAC,uEAAuE;QAC3F,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CACvB,iBAAiB,IAAI,yDAAyD;QAChF,cAAc,EACZ,uHAAuH;YACvH,YAAY;YACZ,4GAA4G;KAC/G;CACF,CAAC;AAEF;;iCAEiC;AACjC,MAAM,UAAU,WAAW,CAAC,WAAqB,IAAI;IACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;AACpC,CAAC;AAED;yEACyE;AACzE,SAAS,WAAW,CAAC,UAAkD,EAAE,OAAe;IACtF,IAAI,UAAU;QAAE,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,WAAqB,IAAI,EACzB,UAAuC,EACvC,OAA0B,EAAE;IAE5B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC;IAEjD,sEAAsE;IACtE,sEAAsE;IACtE,oEAAoE;IACpE,qEAAqE;IACrE,sEAAsE;IACtE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,CAAC;QACH,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,OAAO,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,wEAAwE;IACxE,8DAA8D;IAC9D,uEAAuE;IACvE,qEAAqE;IACrE,6DAA6D;IAC7D,oEAAoE;IACpE,sEAAsE;IACtE,2CAA2C;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAExC,uEAAuE;IACvE,uEAAuE;IACvE,wDAAwD;IACxD,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,KAAK,SAAS;QACzB,CAAC,CAAC,IAAI,CAAC,QAAQ;QACf,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;YACzB,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC;IACb,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,OAAe,CAAC;IACpB,IAAI,IAAc,CAAC;IACnB,IAAI,QAAiB,CAAC;IACtB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC3B,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,CAAC;QAClC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,GAAG,WAAW,CAAC;QACnB,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,KAAkC,EAAE,OAAe,EAAQ,EAAE;QACzE,IAAI,UAAU;YAAE,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtC,0EAA0E;IAC1E,mEAAmE;IACnE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,IAAI,WAAmB,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,WAAW,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;IACnC,MAAM,aAAa,GAAG,MAAM,IAAI,OAAO,CAA0C,CAAC,OAAO,EAAE,EAAE;QAC3F,IAAI,KAAmB,CAAC;QACxB,IAAI,CAAC;YACH,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE;gBACvC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,gEAAgE;gBAChE,iEAAiE;gBACjE,6DAA6D;gBAC7D,gEAAgE;gBAChE,iEAAiE;gBACjE,gEAAgE;gBAChE,uDAAuD;gBACvD,6CAA6C;gBAC7C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,+DAA+D;YAC/D,iEAAiE;YACjE,mEAAmE;YACnE,+DAA+D;YAC/D,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QACD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,oEAAoE;QACpE,sEAAsE;QACtE,gBAAgB;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,oDAAoD;QACpD,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC5B,WAAW;QACb,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GACZ,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,aAAa,aAAa,CAAC,IAAI,EAAE,CAAC;QACrF,oEAAoE;QACpE,mEAAmE;QACnE,sEAAsE;QACtE,uDAAuD;QACvD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAClD,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Language } from './welcome.js';
2
+ export declare function assertSafeNpmName(name: string): string;
2
3
  export interface UpdateInfo {
3
4
  current: string;
4
5
  latest: string | null;
@@ -8,7 +8,7 @@ import { PACKAGE_NAME, VERSION } from '../version.js';
8
8
  * lookup elsewhere. Refusing to query at all is the safer failure mode.
9
9
  */
10
10
  const NPM_NAME_REGEX = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/;
11
- function assertSafeNpmName(name) {
11
+ export function assertSafeNpmName(name) {
12
12
  if (!NPM_NAME_REGEX.test(name)) {
13
13
  throw new Error(`Refusing to query registry: package name "${name}" does not match the npm grammar.`);
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../src/commands/updates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../src/commands/updates.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "browser-link",
4
- "version": "0.25.0",
4
+ "version": "0.25.2",
5
5
  "description": "Bridge between Chrome and an MCP client (Claude Code, OpenCode, GitHub Copilot CLI, …). Per-tab manual activation.",
6
6
  "permissions": [
7
7
  "debugger",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobshimo/browser-link",
3
- "version": "0.25.0",
3
+ "version": "0.25.2",
4
4
  "description": "MCP server that bridges Claude Code, OpenCode, GitHub Copilot CLI and other MCP clients to a Chrome tab. Per-tool permissions, multi-agent mode (multiple MCP clients sharing one bridge), persistent UI map across sessions.",
5
5
  "keywords": [
6
6
  "mcp",