@trusty-squire/mcp 0.7.3 → 0.7.4

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.
@@ -29,7 +29,17 @@
29
29
  flex: none; }
30
30
  #dot.ok { background: #3fb950; }
31
31
  #dot.err { background: #f85149; }
32
- #screen { flex: 1; position: relative; background: #0f1115; min-height: 0; }
32
+ /* overflow:hidden + width:100%+min-width:0 are load-bearing for
33
+ scaleViewport. noVNC measures the screen DIV via
34
+ getBoundingClientRect to decide the scale factor; without
35
+ overflow:hidden the canvas it appends as a child grows the
36
+ parent to its natural framebuffer size, making the bounding
37
+ rect report "no need to scale". min-width:0 prevents a flex
38
+ child from staying at its content's intrinsic width. */
39
+ #screen { flex: 1; position: relative; background: #0f1115;
40
+ min-height: 0; min-width: 0; width: 100%;
41
+ overflow: hidden; }
42
+ #screen > canvas { max-width: 100%; max-height: 100%; }
33
43
  /* Overlay siblings of #screen — `position: fixed` against the
34
44
  viewport, NOT positioned inside #screen. RFB appends a <canvas>
35
45
  child to #screen at connect time, and that canvas can cover any
@@ -110,14 +120,29 @@
110
120
  let rfb;
111
121
  try {
112
122
  rfb = new RFB(screen, wsUrl, { credentials: { password }, shared: true });
113
- // Mobile-friendly geometry. resizeSession asks the X server to
114
- // reshape its desktop to the canvas size, so the Chrome window
115
- // ends up sized to fit a phone instead of a 1280×720 viewport
116
- // that the user has to pan around. scaleViewport stays on as a
117
- // safety net for X servers without RandR (Xvfb has it; older
118
- // x11vnc builds occasionally drop the SetDesktopSize message).
123
+ // Mobile-friendly geometry. scaleViewport CSS-scales the canvas
124
+ // to fit the screen DIV works whether or not the server
125
+ // supports remote resize. resizeSession ALSO asks the X server
126
+ // to reshape its desktop to the canvas size, which avoids the
127
+ // tiny-text problem when the framebuffer is much larger than
128
+ // the phone. We turn both on; if remote resize succeeds the
129
+ // canvas redraws at native resolution, otherwise scaleViewport
130
+ // shrinks the original.
119
131
  rfb.scaleViewport = true;
120
132
  rfb.resizeSession = true;
133
+
134
+ // Re-apply the scale on any layout change (window resize,
135
+ // soft-keyboard pop, orientation flip). noVNC also does this
136
+ // internally on `connect`, but on at least one Android+noVNC-1.x
137
+ // combo the first scale fires before the flex layout finalizes,
138
+ // leaving the canvas at framebuffer-native size until something
139
+ // triggers a re-measure. A no-op assignment runs the setter,
140
+ // which re-reads the screen DIV's bounding rect and re-scales.
141
+ const reapplyScale = () => {
142
+ if (rfb) rfb.scaleViewport = true;
143
+ };
144
+ window.addEventListener("resize", reapplyScale);
145
+ window.addEventListener("orientationchange", reapplyScale);
121
146
  } catch (err) {
122
147
  dot.className = "err";
123
148
  msg.textContent = "Could not start the login window: " + err;
@@ -127,6 +152,10 @@
127
152
  rfb.addEventListener("connect", () => {
128
153
  dot.className = "ok";
129
154
  msg.style.display = "none";
155
+ // Re-fire the scale after the canvas has actually been added
156
+ // to the DOM by RFB — the property assigned at construction
157
+ // time may have run against an empty container.
158
+ reapplyScale();
130
159
  });
131
160
  rfb.addEventListener("disconnect", () => {
132
161
  dot.className = "err";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trusty-squire/mcp",
3
- "version": "0.7.3",
3
+ "version": "0.7.4",
4
4
  "mcpName": "io.github.Trusty-Squire/mcp",
5
5
  "type": "module",
6
6
  "description": "Local MCP server vibe coding agents install. Thin relay to the Trusty Squire API, with the bundled universal signup bot.",