@remcp/runtime 0.2.97 → 0.2.99

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,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.99 — 2026-09-22
4
+
5
+ - Lockstep runtime republish for the release-pipeline catalog synchronization fix.
6
+ - Runtime handlers and schemas are unchanged from 0.2.98: `pdf_action info` fallback exposes numeric `annotation_count`, and the live desktop smoke treats `record_screen` as capability-conditional.
7
+ - 0.2.98 was published publicly but not deployed by the private production pipeline because its stale hosted catalog was caught fail-closed before rollout.
8
+
9
+ ## 0.2.98 — 2026-09-22
10
+
11
+ - `pdf_action info` fallback exposes numeric `annotation_count` instead of violating the declared `annotations` array output contract.
12
+ - Added outputSchema validation coverage for the no-`pdfinfo` fallback path.
13
+ - Live desktop smoke treats `record_screen` as capability-conditional and verifies every tool actually advertised by the runtime.
14
+ - Tool names remain unchanged.
15
+
3
16
  ## 0.2.97 — 2026-09-22
4
17
 
5
18
  - Native GNOME Wayland `move`, `resize`, and `move_resize` no longer trust a portal drag as proof of success.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remcp/runtime",
3
- "version": "0.2.97",
3
+ "version": "0.2.99",
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",
@@ -219,7 +219,7 @@ const OUTPUT_FIELDS = Object.freeze({
219
219
  read_document: { text:outputString(), path:outputString(), data:{}, sheets:outputArray(outputObject()), sheet:outputString(), rows:outputArray({}), cells:outputArray({}) },
220
220
  edit_spreadsheet: { path:outputString(), sheet:outputString(), edited_cells:outputNumber(), bytes:outputNumber(), created:outputBoolean() },
221
221
  edit_document: { path:outputString(), operations:outputNumber(), changes:outputNumber(), bytes:outputNumber(), created:outputBoolean() },
222
- pdf_action: { action:outputString(), path:outputString(), source:outputString(), output:outputString(), output_dir:outputString(), files:outputArray(outputString()), pages:outputString(), bytes:outputNumber(), annotations:outputArray(outputObject()), inputs:outputNumber() },
222
+ pdf_action: { action:outputString(), path:outputString(), source:outputString(), output:outputString(), output_dir:outputString(), files:outputArray(outputString()), pages:outputString(), bytes:outputNumber(), annotations:outputArray(outputObject()), annotation_count:outputNumber('Number of PDF annotations found by the info action.'), inputs:outputNumber() },
223
223
  });
224
224
 
225
225
  function outputSchemaFor(name, title) {
@@ -442,7 +442,7 @@ export async function pdfAction(args) {
442
442
  if (action === 'info') {
443
443
  const source = await resolveSafePath(args.path,'path');
444
444
  if (commandExists('pdfinfo')) return text((await runFile('pdfinfo',[source],{label:'pdfinfo'})).stdout);
445
- const data = await readFile(source); return jsonResult({ path:source, bytes:data.length, annotations:pdfAnnotations(data).length });
445
+ const data = await readFile(source); return jsonResult({ path:source, bytes:data.length, annotation_count:pdfAnnotations(data).length });
446
446
  }
447
447
  if (action === 'merge') {
448
448
  const requested = Array.isArray(args.paths) ? args.paths : [];