@remcp/runtime 0.2.51 → 0.2.53

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
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.2.53 — 2026-09-20
6
+
7
+ - Lockstep patch release with the ReMCP client at `0.2.53`; the runtime tool implementation is unchanged from `0.2.52`.
8
+
9
+ ## 0.2.52 — 2026-09-20
10
+
11
+ - `computer_snapshot.active_window` is nullable when native accessibility state cannot be matched to the platform's top-level window enumeration, preventing valid macOS snapshots from failing structured output validation.
12
+ - Lockstep patch release with the ReMCP client at `0.2.52`.
13
+
5
14
  ## 0.2.51 — 2026-09-20
6
15
 
7
16
  - Linux AT-SPI text/focus operations reject explicit false results, `type_text method=accessibility` remains accessibility-only, and semantic browser text failures direct callers to `browser_action` rather than reporting an unverified paste as success.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remcp/runtime",
3
- "version": "0.2.51",
3
+ "version": "0.2.53",
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",
@@ -164,6 +164,7 @@ const outputString = description => ({ type:'string', ...(description ? { descri
164
164
  const outputNumber = description => ({ type:'number', ...(description ? { description } : {}) });
165
165
  const outputBoolean = description => ({ type:'boolean', ...(description ? { description } : {}) });
166
166
  const outputObject = description => ({ type:'object', additionalProperties:true, ...(description ? { description } : {}) });
167
+ const outputNullableObject = description => ({ type:['object','null'], additionalProperties:true, ...(description ? { description } : {}) });
167
168
  const outputRecord = (properties = {}, description) => ({ type:'object', properties, additionalProperties:true, ...(description ? { description } : {}) });
168
169
  const outputArray = (items = {}, description) => ({ type:'array', items, ...(description ? { description } : {}) });
169
170
 
@@ -172,7 +173,7 @@ const OUTPUT_FIELDS = Object.freeze({
172
173
  device:outputObject('Device/platform metadata for the captured computer state.'),
173
174
  windows:outputArray(outputObject(), 'Top-level windows with stable ids/PIDs/bounds when available.'),
174
175
  displays:outputArray(outputObject(), 'Display inventory used for virtual-desktop geometry.'),
175
- active_window:outputObject('Active top-level window when known.'),
176
+ active_window:outputNullableObject('Active top-level window when known; null when accessibility state cannot be joined to top-level window enumeration.'),
176
177
  ui:outputObject('Native accessibility snapshot and semantic tree.'),
177
178
  cursor:outputObject('Pointer position when available.'),
178
179
  clipboard:outputObject('Clipboard metadata only unless clipboard content was explicitly requested.'),