@remcp/runtime 0.2.132 → 0.2.133

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.133 — 2026-10-02
4
+
5
+ - Explicit `computer_action type target=window` now keeps top-level window selectors separate from semantic element selectors; `window_id` is never rewritten into the UI-element `id` before `type_text`.
6
+ - Auto window fallback uses the same sanitized window-only selector shape, preventing stale UI/browser selectors from hijacking window-scoped text entry.
7
+ - Live GNOME/AT-SPI Zenity validation returned the exact Unicode payload after the accessibility edit path. Runtime tool names and schemas are unchanged from 0.2.132.
8
+
3
9
  ## 0.2.132 — 2026-10-02
4
10
 
5
11
  - `computer_action` now exposes `type`, `scroll`, `drag`, and `target=window` in its MCP schema while keeping specialist tools available when the backend is already known.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remcp/runtime",
3
- "version": "0.2.132",
3
+ "version": "0.2.133",
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",
@@ -1291,6 +1291,24 @@ function browserComputerAction(args, action) {
1291
1291
  });
1292
1292
  }
1293
1293
 
1294
+ export function computerActionWindowTextArgs(args = {}) {
1295
+ const {
1296
+ id: _id,
1297
+ label: _label,
1298
+ name: _name,
1299
+ role: _role,
1300
+ automation_id: _automationId,
1301
+ automationId: _automationIdAlias,
1302
+ selector: _selector,
1303
+ browser_text: _browserText,
1304
+ ...windowArgs
1305
+ } = args;
1306
+ return {
1307
+ ...windowArgs,
1308
+ ...(args.window_title && !args.title ? { title:args.window_title } : {}),
1309
+ };
1310
+ }
1311
+
1294
1312
  export async function computerAction(args = {}) {
1295
1313
  const legacy = ['ui','pointer','window','type','keyboard','scroll','drag','clipboard','launch_app','open_path','reveal_path','notification'];
1296
1314
  const universal = [
@@ -1376,13 +1394,14 @@ export async function computerAction(args = {}) {
1376
1394
  ...(args.window_id ? { id:args.window_id } : {}),
1377
1395
  ...(args.window_title && !args.title ? { title:args.window_title } : {}),
1378
1396
  });
1397
+ const windowTextTarget = () => computerActionWindowTextArgs(args);
1379
1398
 
1380
1399
  if (action === 'type') {
1381
1400
  if (target === 'browser') return browserComputerAction(args, 'type');
1382
1401
  if (target === 'ocr' || target === 'coordinates') {
1383
1402
  throw new Error('computer_action type requires a native UI, browser, or window target');
1384
1403
  }
1385
- if (target === 'window') return typeText(windowTarget());
1404
+ if (target === 'window') return typeText(windowTextTarget());
1386
1405
  if (!automatic) return typeText({ ...args, method:args.method || 'accessibility' });
1387
1406
 
1388
1407
  const failures = [];
@@ -1399,7 +1418,7 @@ export async function computerAction(args = {}) {
1399
1418
  }
1400
1419
  }
1401
1420
  if (args.window_id || args.pid != null || args.app || args.window_title || args.title) {
1402
- try { return await typeText(windowTarget()); }
1421
+ try { return await typeText(windowTextTarget()); }
1403
1422
  catch (error) { failures.push(`window: ${String(error?.message || error).slice(0, 300)}`); }
1404
1423
  }
1405
1424
  if (failures.length) throw new Error(`computer_action type targeting failed: ${failures.join('; ')}`);