@remcp/runtime 0.2.126 → 0.2.127

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.127 — 2026-10-01
4
+
5
+ - macOS `network listeners` now returns only TCP `LISTEN` rows from the native network table instead of all active connections.
6
+ - Established/closing and Unix-domain rows are filtered out, aligning macOS with the documented listener-only contract.
7
+ - The macOS release CI runs the routing + listener diagnostics test on `macos-latest`. Tool names and schemas remain unchanged.
8
+
3
9
  ## 0.2.126 — 2026-10-01
4
10
 
5
11
  - macOS `network` route inventory now uses `/usr/sbin/netstat -rn`; the previous generic Unix fallback invoked `route -n`, which on BSD/macOS expects a command and can return usage instead of the table.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remcp/runtime",
3
- "version": "0.2.126",
3
+ "version": "0.2.127",
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",
@@ -108,6 +108,13 @@ export async function eventLog(args) {
108
108
  return text(rendered, result.code !== 0 && !result.stdout.trim());
109
109
  }
110
110
 
111
+ export function filterMacosTcpListeners(output) {
112
+ const lines = String(output || '').split(/\r?\n/);
113
+ const header = lines.filter(line => /^Proto\s+/i.test(line) || /^Active Internet connections/i.test(line));
114
+ const listeners = lines.filter(line => /\bLISTEN\b/i.test(line));
115
+ return [...header, ...listeners].join('\n').trim();
116
+ }
117
+
111
118
  async function connectivityTest(host, port, timeoutMs) {
112
119
  return new Promise(resolve => {
113
120
  const started = performance.now();
@@ -138,6 +145,10 @@ export async function networkTool(args) {
138
145
  if (process.platform === 'darwin' && action === 'routes') {
139
146
  return text((await runFile('/usr/sbin/netstat', ['-rn'], { label:'routes' })).stdout);
140
147
  }
148
+ if (process.platform === 'darwin' && action === 'listeners') {
149
+ const { stdout } = await runFile('/usr/sbin/netstat', ['-an', '-p', 'tcp'], { label:'listeners' });
150
+ return text(filterMacosTcpListeners(stdout));
151
+ }
141
152
  if (action === 'routes') {
142
153
  if (commandExists('ip')) return text((await runFile('ip', ['route','show'], { label:'routes' })).stdout);
143
154
  if (commandExists('route')) return text((await runFile('route', ['-n'], { label:'routes' })).stdout);