@remcp/runtime 0.2.138 → 0.2.139

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,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.139 — 2026-10-02
4
+
5
+ - `create_archive` and `extract_archive` are now advertised on macOS in addition to Linux.
6
+ - The tar verbose-output parser accepts native bsdtar month/day/time rows that omit the year for current-year entries, while retaining the existing archive expanded-size safety checks.
7
+ - Public macOS release validation performs a real archive create/extract round trip. Windows archive tools remain intentionally hidden until a separately validated backend exists.
8
+ - Tool names and MCP schemas are unchanged; macOS parity rises from 81 to 83 advertised tools on a fully capable host.
9
+
3
10
  ## 0.2.138 — 2026-10-02
4
11
 
5
12
  - `browser_tabs`, `browser_snapshot`, `browser_find`, and `browser_wait` now set `openWorldHint=true` while retaining `readOnlyHint=true` and `idempotentHint=true`.
package/README.md CHANGED
@@ -40,7 +40,7 @@ support and emits `notifications/tools/list_changed` when that capability set ch
40
40
  | --- | --- |
41
41
  | Read | `read_file`, `read_files`, `read_multiple_files`, `read_image`, `read_binary`, `list_directory`, `get_file_info`, `hash_file`, `diff_files` |
42
42
  | Write / edit | `write_file`, `write_files`, `write_binary`, `apply_patch`, `set_permissions`, `edit_block`, `replace_lines`, `replace_in_files` |
43
- | Organise | `create_directory`, `move_file`, `copy_file`, `copy_paths`, `move_paths`, `move_to_trash`, `create_archive`, `extract_archive` |
43
+ | Organise | `create_directory`, `move_file`, `copy_file`, `copy_paths`, `move_paths`, `move_to_trash`, `create_archive`, `extract_archive` (Linux/macOS; tar/zip backends are validated before use) |
44
44
  | Delete | `delete_path`, `delete_paths` |
45
45
  | Transfer | `read_binary` / `write_binary` stream any file as base64 chunks in both directions; `create_archive` / `extract_archive` move whole trees |
46
46
  | Screen | `take_screenshot` returns the desktop as an image on Linux, macOS, and Windows |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remcp/runtime",
3
- "version": "0.2.138",
3
+ "version": "0.2.139",
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",
package/src/catalog.mjs CHANGED
@@ -830,8 +830,8 @@ export const toolDefinitions = [
830
830
  },
831
831
  ];
832
832
 
833
- export function coreToolSupported(definition) {
834
- return !['create_archive', 'extract_archive'].includes(definition.name) || process.platform === 'linux';
833
+ export function coreToolSupported(definition, { platform = process.platform } = {}) {
834
+ return !['create_archive', 'extract_archive'].includes(definition.name) || ['linux', 'darwin'].includes(platform);
835
835
  }
836
836
 
837
837
  export function supportedCoreTools() {
@@ -1449,17 +1449,16 @@ function archiveExpandedSize(lines, pattern, label, expectedEntries = null) {
1449
1449
  return total;
1450
1450
  }
1451
1451
 
1452
- function tarEntrySize(line) {
1452
+ export function tarEntrySize(line) {
1453
1453
  const tokens = String(line || '').trim().split(/\s+/);
1454
1454
  for (const index of [2, 3, 4]) {
1455
1455
  const size = Number(tokens[index]);
1456
1456
  if (!Number.isSafeInteger(size) || size < 0) continue;
1457
1457
  const tail = tokens.slice(index + 1);
1458
1458
  const gnuDate = /^\d{4}-\d{2}-\d{2}$/.test(tail[0] || '');
1459
- const bsdDate = /^[A-Z][a-z]{2}$/.test(tail[0] || '')
1460
- && /^\d{1,2}$/.test(tail[1] || '')
1461
- && ((/^\d{2}:\d{2}(?::\d{2})?$/.test(tail[2] || '') && /^\d{4}$/.test(tail[3] || ''))
1462
- || /^\d{4}$/.test(tail[2] || ''));
1459
+ const bsdMonthDay = /^[A-Z][a-z]{2}$/.test(tail[0] || '') && /^\d{1,2}$/.test(tail[1] || '');
1460
+ const bsdTime = /^\d{2}:\d{2}(?::\d{2})?$/.test(tail[2] || '');
1461
+ const bsdDate = bsdMonthDay && (bsdTime || /^\d{4}$/.test(tail[2] || ''));
1463
1462
  if (gnuDate || bsdDate) return size;
1464
1463
  }
1465
1464
  return null;