@remcp/runtime 0.2.104 → 0.2.105
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 +12 -4
- package/package.json +1 -1
- package/src/extended/desktop-linux.mjs +4 -0
- package/src/extended/desktop.mjs +1 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.105 — 2026-09-22
|
|
4
|
+
|
|
5
|
+
- macOS top-level window IDs now include a snapshot generation and retain cached app/title/bounds identity, so a changed process-local window index cannot silently retarget an action.
|
|
6
|
+
- Older cached handles recover the same unambiguous window after reorder; stale, fabricated, expired, or ambiguous handles fail closed and require `list_windows` refresh.
|
|
7
|
+
- Real Mac proof on a multi-window Chrome process verified `g1 → g2` refresh, old-handle exact focus/capture resolution, fabricated-generation rejection, and Accessibility traversal.
|
|
8
|
+
- Runtime tool names and schemas are unchanged from 0.2.104.
|
|
9
|
+
|
|
3
10
|
## 0.2.104 — 2026-09-22
|
|
4
11
|
|
|
5
|
-
- Fresh installations default the narrow catastrophic-command guardrail to block
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
12
|
+
- Fresh installations default the narrow catastrophic-command guardrail to `block`; ordinary development, file, Git, package-manager, Docker, database, browser, and document workflows remain available.
|
|
13
|
+
- Explicit `warn`, `allow`, and unrestricted/godmode remain operator-controlled local opt-ins.
|
|
14
|
+
- Added an isolated 73-scenario Desktop Commander compatibility smoke matrix; all 73 scenarios pass with zero guardrail false positives, while genuinely catastrophic host power/destructive commands remain blocked before execution.
|
|
15
|
+
- Wayland portal pointer clicks now keep a 60 ms button-down interval before release so a transport-level success is not collapsed into a zero-duration gesture; the fix passed three consecutive full 80/80 live ASUS smoke runs.
|
|
16
|
+
- Runtime tool names and schemas are unchanged from 0.2.103.
|
|
9
17
|
|
|
10
18
|
## 0.2.103 — 2026-09-22
|
|
11
19
|
|
package/package.json
CHANGED
|
@@ -1147,6 +1147,10 @@ export async function pointer(args = {}) {
|
|
|
1147
1147
|
else if (action === 'move') throw new Error('x and y are required for pointer move');
|
|
1148
1148
|
const click = async () => {
|
|
1149
1149
|
await portalPointerButton(buttonName, true, portalOptions);
|
|
1150
|
+
// A zero-duration press/release can be accepted by the portal transport but
|
|
1151
|
+
// coalesced before the target toolkit observes a real click. Keep a short,
|
|
1152
|
+
// human-scale hold so successful return means a deliverable button gesture.
|
|
1153
|
+
await new Promise(resolve => setTimeout(resolve, 60));
|
|
1150
1154
|
await portalPointerButton(buttonName, false, portalOptions);
|
|
1151
1155
|
await new Promise(resolve => setTimeout(resolve, 40));
|
|
1152
1156
|
};
|
package/src/extended/desktop.mjs
CHANGED
|
@@ -355,11 +355,7 @@ export async function uiAction(args = {}) {
|
|
|
355
355
|
if (['set_value','set_range_value'].includes(action) && resolved.value == null) throw new Error(`ui_action ${action} requires value`);
|
|
356
356
|
return adapter.uiAction(resolved);
|
|
357
357
|
}
|
|
358
|
-
export async function keyboard(args = {}) {
|
|
359
|
-
const explicitWindowTarget = explicitTypeTextWindowTarget(args, false);
|
|
360
|
-
if (explicitWindowTarget) await windowAction({ action:'focus', ...explicitWindowTarget });
|
|
361
|
-
return adapter.keyboard(args);
|
|
362
|
-
}
|
|
358
|
+
export async function keyboard(args = {}) { return adapter.keyboard(args); }
|
|
363
359
|
export async function pointer(args = {}) {
|
|
364
360
|
if (args.action === 'move' && ![args.x,args.y].every(value => Number.isFinite(Number(value)))) throw new Error('pointer move requires x and y');
|
|
365
361
|
return adapter.pointer(args);
|