@remcp/runtime 0.2.234 → 0.2.236

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/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.236 — 2026-11-05
4
+
5
+ - Report CDP readiness only for eligible page targets and classify configured unavailable CDP connections with bounded diagnostics.
6
+ - Retain browser authorization, loopback restrictions, runtime tool contracts and opt-in WebRTC boundaries.
7
+ - Coordinate with client macOS CLI alias corrections, without rewriting the already published fleet-safe 0.2.235 runtime.
8
+
9
+ ## 0.2.235 — 2026-11-05
10
+
11
+ - Publish the unchanged local runtime in lockstep with the fleet-aware 0.2.235 ReMCP agent update.
12
+ - No additional runtime tools, permissions or protocol privileges; the update scheduling changes are client/backend coordination only.
13
+
3
14
  ## 0.2.234 — 2026-11-05
4
15
 
5
16
  - Publish the unchanged local runtime with the compatible 0.2.234 ReMCP agent update.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remcp/runtime",
3
- "version": "0.2.234",
3
+ "version": "0.2.236",
4
4
  "description": "First-party ReMCP local device runtime: filesystem, terminal, computer-use, browser, diagnostics and document tools over MCP.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -20,7 +20,7 @@ export function classifyRuntimeToolError(error, toolName = '') {
20
20
  if (browserTool && code === 'BROWSER_TARGET_DISAPPEARED') return 'browser_target_stale';
21
21
  if (/\bcancelled\b|\bcanceled\b|\baborted by the client\b/.test(message)) return 'cancelled';
22
22
  if (/blocked (?:by|local|private)|outside the directories this device allows|private browser destination|blocked local browser scheme/.test(message)) return 'blocked';
23
- if (browserTool && /browser cdp endpoint is unavailable|browser control is unavailable|cdp websocket (?:error|connection timed out)|local cdp endpoint did not become ready/.test(message)) {
23
+ if (browserTool && /(?:browser|the configured) cdp endpoint is unavailable|browser control is unavailable|cdp websocket (?:error|connection timed out)|local cdp endpoint did not become ready/.test(message)) {
24
24
  return 'browser_unavailable';
25
25
  }
26
26
  if (browserTool) {
@@ -1,7 +1,7 @@
1
1
  // Optional bounded local CDP readiness probe. This reports availability only;
2
2
  // it never exposes tab titles/URLs, starts Chrome, changes CDP flags or grants
3
3
  // permission to access targets. Actual actions always re-check browser policy.
4
- import { browserRemoteEnabled, endpointUrl, requestJson, validatedTargetWebSocketUrl } from './browser-endpoint.mjs';
4
+ import { browserRemoteEnabled, endpointUrl, requestJson, safePageUrl, validatedTargetWebSocketUrl } from './browser-endpoint.mjs';
5
5
 
6
6
  const records = new Map();
7
7
  // Avoid duplicate /json/version + /json/list reads when several agent calls
@@ -19,6 +19,10 @@ export function classifyBrowserReadiness(version, targets, endpoint) {
19
19
  for (const target of targets.slice(0, 1000)) {
20
20
  if (target?.type !== 'page' || !target?.id || !target?.webSocketDebuggerUrl) continue;
21
21
  try {
22
+ // A CDP socket alone does not make a page eligible for browser_tabs.
23
+ // Validate its URL with the same synchronous scheme/host policy; full
24
+ // DNS/allowlist checks still happen at use time in browser_tabs.
25
+ safePageUrl(target.url);
22
26
  validatedTargetWebSocketUrl(target, endpointUrl(endpoint));
23
27
  pages += 1;
24
28
  } catch {