instar 1.3.1637 → 1.3.1639

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.
Files changed (66) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +22 -8
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/DesktopHost.d.ts +4 -2
  5. package/dist/core/DesktopHost.d.ts.map +1 -1
  6. package/dist/core/DesktopHost.js.map +1 -1
  7. package/dist/core/DesktopProbeReadiness.d.ts +1 -0
  8. package/dist/core/DesktopProbeReadiness.d.ts.map +1 -1
  9. package/dist/core/DesktopProbeReadiness.js +11 -2
  10. package/dist/core/DesktopProbeReadiness.js.map +1 -1
  11. package/dist/core/HyprlandDesktopHost.d.ts +150 -0
  12. package/dist/core/HyprlandDesktopHost.d.ts.map +1 -0
  13. package/dist/core/HyprlandDesktopHost.js +569 -0
  14. package/dist/core/HyprlandDesktopHost.js.map +1 -0
  15. package/dist/core/LinuxDesktopHost.d.ts +1 -0
  16. package/dist/core/LinuxDesktopHost.d.ts.map +1 -1
  17. package/dist/core/LinuxDesktopHost.js +7 -4
  18. package/dist/core/LinuxDesktopHost.js.map +1 -1
  19. package/dist/core/SessionDrainRunner.d.ts +4 -2
  20. package/dist/core/SessionDrainRunner.d.ts.map +1 -1
  21. package/dist/core/SessionDrainRunner.js +2 -2
  22. package/dist/core/SessionDrainRunner.js.map +1 -1
  23. package/dist/core/TopicProfileOrchestrator.d.ts.map +1 -1
  24. package/dist/core/TopicProfileOrchestrator.js +2 -1
  25. package/dist/core/TopicProfileOrchestrator.js.map +1 -1
  26. package/dist/core/WaylandVirtualPointer.d.ts +31 -0
  27. package/dist/core/WaylandVirtualPointer.d.ts.map +1 -0
  28. package/dist/core/WaylandVirtualPointer.js +171 -0
  29. package/dist/core/WaylandVirtualPointer.js.map +1 -0
  30. package/dist/data/standards-guard-index.json +1 -1
  31. package/dist/data/standards-guard-index.meta.json +2 -2
  32. package/dist/data/standards-registry.meta.json +1 -1
  33. package/dist/messaging/plainNoticeCheck.d.ts +9 -0
  34. package/dist/messaging/plainNoticeCheck.d.ts.map +1 -0
  35. package/dist/messaging/plainNoticeCheck.js +68 -0
  36. package/dist/messaging/plainNoticeCheck.js.map +1 -0
  37. package/dist/messaging/shared/isSystemOrProxyMessage.d.ts +0 -24
  38. package/dist/messaging/shared/isSystemOrProxyMessage.d.ts.map +1 -1
  39. package/dist/messaging/shared/isSystemOrProxyMessage.js +6 -3
  40. package/dist/messaging/shared/isSystemOrProxyMessage.js.map +1 -1
  41. package/dist/messaging/userNotices.d.ts +47 -0
  42. package/dist/messaging/userNotices.d.ts.map +1 -0
  43. package/dist/messaging/userNotices.js +79 -0
  44. package/dist/messaging/userNotices.js.map +1 -0
  45. package/dist/native/InstarWedgeCanary.app/Contents/MacOS/InstarWedgeCanary +0 -0
  46. package/dist/native/instar-desktop-host +0 -0
  47. package/dist/scaffold/templates.d.ts.map +1 -1
  48. package/dist/scaffold/templates.js +2 -1
  49. package/dist/scaffold/templates.js.map +1 -1
  50. package/dist/server/AgentServer.js +4 -4
  51. package/dist/server/AgentServer.js.map +1 -1
  52. package/package.json +4 -3
  53. package/scripts/lint-plain-user-notices.mjs +191 -0
  54. package/scripts/plain-user-notices-baseline.json +6 -0
  55. package/src/data/builtin-manifest.json +3 -3
  56. package/src/data/plain-notice-terms.json +38 -0
  57. package/src/data/standards-guard-index.json +1 -1
  58. package/src/data/standards-guard-index.meta.json +2 -2
  59. package/src/data/standards-registry.meta.json +1 -1
  60. package/src/scaffold/templates.ts +2 -1
  61. package/upgrades/1.3.1638.md +21 -0
  62. package/upgrades/1.3.1639.md +24 -0
  63. package/upgrades/side-effects/hyprland-remote-desktop.eli16.md +39 -0
  64. package/upgrades/side-effects/hyprland-remote-desktop.md +91 -0
  65. package/upgrades/side-effects/plain-user-notices.eli16.md +15 -0
  66. package/upgrades/side-effects/plain-user-notices.md +76 -0
@@ -0,0 +1,569 @@
1
+ /** Native Linux desktop host for a Hyprland session (Wayland), the desktop on
2
+ * Omarchy. Hyprland offers its own user's programs what the X11 host gets from
3
+ * the X server: `grim` for the picture, `hyprctl -j` for screens and the cursor,
4
+ * a virtual pointer for the mouse (WaylandVirtualPointer) and `wtype` for keys.
5
+ * Omarchy ships grim, hyprctl and wtype. No port is opened and no root is used:
6
+ * the picture and the input travel only over the existing signed, encrypted
7
+ * desktop stream.
8
+ *
9
+ * Measured on Omarchy 4.0.6 (topic 136848):
10
+ * - A display that idled off gives grim no frame, so it hangs. Moving the
11
+ * pointer wakes it, so connecting and the heartbeat both do that.
12
+ * - Omarchy's lock screen keeps logind's LockedHint at "no", so a locked screen
13
+ * is not detectable. It shows as a password box, and typing works.
14
+ * - wtype's modifier chords reach applications but never Hyprland's own
15
+ * shortcuts (Super+Return and the like). The viewer can use the mouse for those.
16
+ * - `hyprctl dispatch` became Lua in Hyprland 0.56, so nothing here relies on it. */
17
+ import fs from 'node:fs';
18
+ import os from 'node:os';
19
+ import path from 'node:path';
20
+ import { validDesktopInput, validDisplayId } from './DesktopHost.js';
21
+ import { defaultLinuxRunner, LinuxDesktopHost, linuxKeysym } from './LinuxDesktopHost.js';
22
+ import { POINTER_BUTTONS, WaylandVirtualPointer } from './WaylandVirtualPointer.js';
23
+ const FRAME_LIMIT = 4_000_000;
24
+ const TEXT_LIMIT = 256 * 1024;
25
+ const COMMAND_TIMEOUT_MS = 3_000;
26
+ const HEARTBEAT_MS = 2_000;
27
+ /** Pixels of viewer scroll per wheel click, the same as the X11 host. */
28
+ const SCROLL_STEP = 40;
29
+ const CLICK_GAP_MS = 40;
30
+ const SIGNATURE = /^[A-Za-z0-9_-]{1,128}$/;
31
+ const WAYLAND_SOCKET = /^wayland-\d{1,4}$/;
32
+ /** A US keyboard's Shift row. The viewer sends a lowercase key plus Shift, and
33
+ * `wtype -M shift -k a` (or `-k A`) types a lowercase a, measured on Omarchy, so
34
+ * Shift alone is sent as the character it makes, through wtype's text path. */
35
+ const SHIFTED_DIGITS = { '1': '!', '2': '@', '3': '#', '4': '$', '5': '%', '6': '^', '7': '&', '8': '*', '9': '(', '0': ')' };
36
+ export function shiftedCharacter(key) {
37
+ if (/^[a-z]$/.test(key))
38
+ return key.toUpperCase();
39
+ return SHIFTED_DIGITS[key] ?? null;
40
+ }
41
+ /** Viewer modifier names to wtype's names. */
42
+ const MODIFIERS = { Meta: 'logo', Control: 'ctrl', Alt: 'alt', Shift: 'shift' };
43
+ /** The running Hyprland that belongs to this user, from the lock file it keeps
44
+ * under its runtime folder: a pid line and the Wayland socket's name. */
45
+ export function findHyprlandSession(runtimeDir, isRunning = pid => { try {
46
+ process.kill(pid, 0);
47
+ return true;
48
+ }
49
+ catch {
50
+ return false;
51
+ } }) {
52
+ let names;
53
+ try {
54
+ names = fs.readdirSync(path.join(runtimeDir, 'hypr'));
55
+ }
56
+ catch {
57
+ return null;
58
+ } // @silent-fallback-ok — no folder means no Hyprland.
59
+ const found = [];
60
+ for (const signature of names) {
61
+ if (!SIGNATURE.test(signature))
62
+ continue;
63
+ try {
64
+ const lock = path.join(runtimeDir, 'hypr', signature, 'hyprland.lock');
65
+ const [pidLine, socketLine] = fs.readFileSync(lock, 'utf8').split('\n');
66
+ const pid = Number(pidLine);
67
+ const waylandDisplay = (socketLine ?? '').trim();
68
+ if (!Number.isSafeInteger(pid) || pid <= 0 || !WAYLAND_SOCKET.test(waylandDisplay) || !isRunning(pid))
69
+ continue;
70
+ if (!fs.existsSync(path.join(runtimeDir, waylandDisplay)))
71
+ continue;
72
+ found.push({ session: { signature, waylandDisplay, runtimeDir }, started: fs.statSync(lock).mtimeMs });
73
+ }
74
+ catch { /* @silent-fallback-ok — a leftover folder from an old login. */ }
75
+ }
76
+ found.sort((a, b) => b.started - a.started);
77
+ return found[0]?.session ?? null;
78
+ }
79
+ /** `hyprctl -j monitors`. width/height are real pixels; x, y and the pointer use
80
+ * layout coordinates, which are pixels divided by scale. */
81
+ export function parseHyprlandMonitors(text) {
82
+ const rows = JSON.parse(text);
83
+ if (!Array.isArray(rows))
84
+ throw new Error('hyprland-monitors-invalid');
85
+ const out = [];
86
+ for (const row of rows.slice(0, 16)) {
87
+ const { name, width, height, x, y, scale, transform, focused, dpmsStatus, disabled } = (row ?? {});
88
+ if (disabled === true || typeof name !== 'string' || !Number.isFinite(width) || !Number.isFinite(height)
89
+ || !Number.isFinite(x) || !Number.isFinite(y))
90
+ continue;
91
+ const factor = typeof scale === 'number' && scale > 0 ? scale : 1;
92
+ // Transforms 1, 3, 5 and 7 turn the screen on its side.
93
+ const sideways = typeof transform === 'number' && transform % 2 === 1;
94
+ const raw = name.replace(/[^A-Za-z0-9_-]/g, '_').slice(0, 32);
95
+ const id = validDisplayId(raw) ? raw : `m${out.length}`;
96
+ if (out.some(monitor => monitor.id === id))
97
+ continue;
98
+ out.push({ id, name: name.slice(0, 64), main: focused === true, awake: dpmsStatus !== false,
99
+ pixelWidth: width, pixelHeight: height,
100
+ x: x, y: y,
101
+ width: Math.round((sideways ? height : width) / factor),
102
+ height: Math.round((sideways ? width : height) / factor) });
103
+ }
104
+ if (out.length && !out.some(monitor => monitor.main))
105
+ out[0].main = true;
106
+ return out;
107
+ }
108
+ function defaultRuntimeDir(env) {
109
+ const uid = typeof process.getuid === 'function' ? process.getuid() : -1;
110
+ return env.XDG_RUNTIME_DIR || `/run/user/${uid}`;
111
+ }
112
+ function toolOnPath(name, env) {
113
+ for (const dir of (env.PATH ?? '/usr/local/bin:/usr/bin:/bin').split(':')) {
114
+ if (!dir)
115
+ continue;
116
+ try {
117
+ fs.accessSync(path.join(dir, name), fs.constants.X_OK);
118
+ return true;
119
+ }
120
+ catch { /* @silent-fallback-ok — not in this folder. */ }
121
+ }
122
+ return false;
123
+ }
124
+ export class HyprlandDesktopHost {
125
+ options;
126
+ platform = 'linux';
127
+ run;
128
+ baseEnv;
129
+ runtimeDir;
130
+ heartbeatMs;
131
+ sleep;
132
+ toolExists;
133
+ session = null;
134
+ pointer = null;
135
+ selectedDisplayId = null;
136
+ indicatorActive = false;
137
+ indicatorLost = null;
138
+ heartbeat = null;
139
+ generation = 0;
140
+ /** Bumps at every Start and Stop. Work that outlives its session compares and gives up. */
141
+ epoch = 0;
142
+ /** True from the start of startIndicator until Stop: the only time a pointer may exist. */
143
+ pointerAllowed = false;
144
+ pointerConnecting = null;
145
+ queue = Promise.resolve();
146
+ heldModifiers = new Set();
147
+ heldButtons = new Set();
148
+ scrollRest = { dx: 0, dy: 0 };
149
+ timing = { count: 0, total: 0, max: 0 };
150
+ constructor(options = {}) {
151
+ this.options = options;
152
+ this.run = options.run ?? defaultLinuxRunner;
153
+ this.baseEnv = options.env ?? process.env;
154
+ this.runtimeDir = options.runtimeDir ?? defaultRuntimeDir(this.baseEnv);
155
+ this.heartbeatMs = options.heartbeatMs ?? HEARTBEAT_MS;
156
+ this.sleep = options.sleep ?? (ms => new Promise(resolve => setTimeout(resolve, ms)));
157
+ this.toolExists = options.toolExists ?? (name => toolOnPath(name, this.baseEnv));
158
+ }
159
+ currentSession() {
160
+ const session = findHyprlandSession(this.runtimeDir);
161
+ if (!session)
162
+ throw new Error('hyprland-no-session');
163
+ this.session = session;
164
+ return session;
165
+ }
166
+ env(session) {
167
+ return { PATH: this.baseEnv.PATH ?? '/usr/local/bin:/usr/bin:/bin', HOME: this.baseEnv.HOME ?? os.homedir(), LANG: 'C.UTF-8',
168
+ XDG_RUNTIME_DIR: session.runtimeDir, WAYLAND_DISPLAY: session.waylandDisplay, HYPRLAND_INSTANCE_SIGNATURE: session.signature };
169
+ }
170
+ async tool(file, args, limit = TEXT_LIMIT, extra = {}) {
171
+ const session = this.currentSession();
172
+ return this.run(file, args, { env: this.env(session), limit, timeoutMs: extra.timeoutMs ?? COMMAND_TIMEOUT_MS,
173
+ ...(extra.input !== undefined ? { input: extra.input } : {}) });
174
+ }
175
+ async monitors() {
176
+ return parseHyprlandMonitors((await this.tool('hyprctl', ['-j', 'monitors'])).toString('utf8'));
177
+ }
178
+ layout(monitors) {
179
+ if (!monitors.length)
180
+ throw new Error('hyprland-no-monitors');
181
+ const x = Math.min(...monitors.map(row => row.x));
182
+ const y = Math.min(...monitors.map(row => row.y));
183
+ return { x, y, width: Math.max(...monitors.map(row => row.x + row.width)) - x,
184
+ height: Math.max(...monitors.map(row => row.y + row.height)) - y };
185
+ }
186
+ async area() {
187
+ const monitors = await this.monitors();
188
+ if (this.selectedDisplayId !== null) {
189
+ const chosen = monitors.find(row => row.id === this.selectedDisplayId);
190
+ if (chosen)
191
+ return chosen;
192
+ this.selectedDisplayId = null;
193
+ }
194
+ return this.layout(monitors);
195
+ }
196
+ async probe() {
197
+ const dark = (display, capturer) => ({ screenPermission: false, inputPermission: false,
198
+ displayCount: 0, sessionActive: false, linux: { display, capturer, compositor: 'hyprland' } });
199
+ const session = findHyprlandSession(this.runtimeDir);
200
+ if (!session)
201
+ return dark(null, false);
202
+ const tools = this.toolExists('grim') && this.toolExists('wtype');
203
+ let monitors;
204
+ try {
205
+ monitors = await this.monitors();
206
+ }
207
+ catch {
208
+ return dark(session.waylandDisplay, tools);
209
+ } // @silent-fallback-ok — a compositor that does not answer is an inactive session, reported as such.
210
+ return { screenPermission: tools && monitors.length > 0, inputPermission: tools,
211
+ displayCount: Math.max(1, monitors.length), sessionActive: monitors.length > 0, screenLocked: false,
212
+ linux: { display: session.waylandDisplay, capturer: tools, compositor: 'hyprland' } };
213
+ }
214
+ async listDisplays() {
215
+ const displays = (await this.monitors())
216
+ .map(({ id, name, pixelWidth, pixelHeight, main }) => ({ id, name, width: pixelWidth, height: pixelHeight, main }));
217
+ return { displays, currentDisplayId: this.selectedDisplayId, canShowAll: true };
218
+ }
219
+ async selectDisplay(displayId) {
220
+ if (displayId !== null) {
221
+ if (!validDisplayId(displayId))
222
+ return false;
223
+ if (!(await this.monitors()).some(row => row.id === displayId))
224
+ return false;
225
+ }
226
+ this.selectedDisplayId = displayId;
227
+ return true;
228
+ }
229
+ captureTiming() {
230
+ return { count: this.timing.count, totalMs: this.timing.total, maxMs: this.timing.max };
231
+ }
232
+ async capture() {
233
+ this.requireActive();
234
+ const started = Date.now();
235
+ const args = ['-t', 'jpeg', '-q', '70'];
236
+ if (this.selectedDisplayId !== null) {
237
+ const chosen = (await this.monitors()).find(row => row.id === this.selectedDisplayId);
238
+ if (chosen)
239
+ args.push('-o', chosen.name);
240
+ }
241
+ args.push('-');
242
+ const frame = await this.tool('grim', args, FRAME_LIMIT);
243
+ if (frame.length < 4 || frame[0] !== 0xff || frame[1] !== 0xd8
244
+ || frame[frame.length - 2] !== 0xff || frame[frame.length - 1] !== 0xd9) {
245
+ throw new Error('hyprland-desktop-frame-invalid');
246
+ }
247
+ const ms = Date.now() - started;
248
+ this.timing.count++;
249
+ this.timing.total += ms;
250
+ this.timing.max = Math.max(this.timing.max, ms);
251
+ return frame;
252
+ }
253
+ async cursorPosition() {
254
+ const parsed = JSON.parse((await this.tool('hyprctl', ['-j', 'cursorpos'])).toString('utf8'));
255
+ if (typeof parsed.x !== 'number' || typeof parsed.y !== 'number')
256
+ throw new Error('hyprland-desktop-cursor-invalid');
257
+ return { x: parsed.x, y: parsed.y };
258
+ }
259
+ async cursor() {
260
+ this.requireActive();
261
+ const { x, y } = await this.cursorPosition();
262
+ const a = await this.area();
263
+ const clamp = (v) => Math.min(1, Math.max(0, v));
264
+ return { x: clamp((x - a.x) / Math.max(1, a.width - 1)), y: clamp((y - a.y) / Math.max(1, a.height - 1)) };
265
+ }
266
+ /** Connected on demand, so a pointer lost to a compositor restart comes back.
267
+ * Refused outside a session, so nothing can reopen it after Stop. Concurrent
268
+ * callers (input and the heartbeat) share one connection. */
269
+ async connectedPointer() {
270
+ if (this.pointer?.alive)
271
+ return this.pointer;
272
+ if (!this.pointerAllowed)
273
+ throw new Error('hyprland-desktop-input-cancelled');
274
+ // Only within one session: a connect left over from a stopped one will refuse itself.
275
+ if (this.pointerConnecting?.epoch === this.epoch)
276
+ return this.pointerConnecting.pointer;
277
+ const session = this.currentSession();
278
+ const socketPath = path.join(session.runtimeDir, session.waylandDisplay);
279
+ const epoch = this.epoch;
280
+ const created = this.options.pointerFactory?.(socketPath, () => { if (this.pointer === created)
281
+ this.pointer = null; })
282
+ ?? new WaylandVirtualPointer(socketPath, () => { if (this.pointer === created)
283
+ this.pointer = null; });
284
+ const pointer = (async () => {
285
+ await created.connect();
286
+ if (epoch !== this.epoch || !this.pointerAllowed) {
287
+ created.close();
288
+ throw new Error('hyprland-desktop-input-cancelled');
289
+ }
290
+ this.pointer = created;
291
+ return created;
292
+ })();
293
+ const connecting = { epoch, pointer };
294
+ this.pointerConnecting = connecting;
295
+ const clear = () => { if (this.pointerConnecting === connecting)
296
+ this.pointerConnecting = null; };
297
+ pointer.then(clear, clear); // @silent-fallback-ok — bookkeeping only; every caller awaits `pointer` itself and sees its failure.
298
+ return pointer;
299
+ }
300
+ /** The viewer's 0..1 point, sent as a position within the whole layout. */
301
+ async moveTo(x, y, generation) {
302
+ const monitors = await this.monitors();
303
+ this.check(generation);
304
+ const layout = this.layout(monitors);
305
+ const chosen = this.selectedDisplayId !== null ? monitors.find(row => row.id === this.selectedDisplayId) : undefined;
306
+ const a = chosen ?? layout;
307
+ const pointer = await this.connectedPointer();
308
+ this.check(generation);
309
+ pointer.moveAbsolute(a.x + x * (a.width - 1) - layout.x, a.y + y * (a.height - 1) - layout.y, layout.width, layout.height);
310
+ return pointer;
311
+ }
312
+ /** A display that idled off gives grim nothing. Any pointer movement wakes it. */
313
+ async wakeIfAsleep(monitors) {
314
+ if (monitors.every(row => row.awake))
315
+ return;
316
+ const layout = this.layout(monitors);
317
+ const { x, y } = await this.cursorPosition();
318
+ const pointer = await this.connectedPointer();
319
+ // Two positions, because moving to where the pointer already is may not count.
320
+ const atRightEdge = x - layout.x >= layout.width - 1;
321
+ pointer.moveAbsolute(x - layout.x + (atRightEdge ? -1 : 1), y - layout.y, layout.width, layout.height);
322
+ pointer.moveAbsolute(x - layout.x, y - layout.y, layout.width, layout.height);
323
+ }
324
+ async input(action) {
325
+ if (!validDesktopInput(action) || action.kind === 'selectDisplay')
326
+ throw new Error('hyprland-desktop-input-invalid');
327
+ this.requireActive();
328
+ const generation = this.generation;
329
+ const step = this.queue.then(() => this.apply(action, generation));
330
+ this.queue = step.catch(() => undefined); // @silent-fallback-ok — the caller sees this step's own rejection.
331
+ await step;
332
+ }
333
+ /** Throws when Stop has happened since the action was queued. */
334
+ check(generation) {
335
+ if (generation !== this.generation || !this.indicatorActive)
336
+ throw new Error('hyprland-desktop-input-cancelled');
337
+ }
338
+ async apply(action, generation) {
339
+ this.check(generation);
340
+ switch (action.kind) {
341
+ case 'move':
342
+ await this.moveTo(action.x, action.y, generation);
343
+ return;
344
+ case 'click': {
345
+ const pointer = await this.moveTo(action.x, action.y, generation);
346
+ const code = POINTER_BUTTONS[action.button];
347
+ for (let i = 0; i < (action.count ?? 1); i++) {
348
+ this.check(generation);
349
+ // Tracked while pressed: Stop in the gap must let go, the same as a drag.
350
+ this.heldButtons.add(action.button);
351
+ pointer.button(code, true);
352
+ await this.sleep(CLICK_GAP_MS);
353
+ if (generation !== this.generation)
354
+ throw new Error('hyprland-desktop-input-cancelled');
355
+ pointer.button(code, false);
356
+ this.heldButtons.delete(action.button);
357
+ await this.sleep(CLICK_GAP_MS);
358
+ }
359
+ return;
360
+ }
361
+ case 'buttonDown':
362
+ case 'buttonUp': {
363
+ const down = action.kind === 'buttonDown';
364
+ const pointer = await this.moveTo(action.x, action.y, generation);
365
+ this.check(generation);
366
+ if (down)
367
+ this.heldButtons.add(action.button);
368
+ pointer.button(POINTER_BUTTONS[action.button], down);
369
+ if (!down)
370
+ this.heldButtons.delete(action.button);
371
+ return;
372
+ }
373
+ case 'scroll': {
374
+ const pointer = await this.connectedPointer();
375
+ this.check(generation);
376
+ for (const axis of ['dy', 'dx']) {
377
+ const total = this.scrollRest[axis] + action[axis];
378
+ const clicks = Math.trunc(total / SCROLL_STEP);
379
+ this.scrollRest[axis] = total - clicks * SCROLL_STEP;
380
+ if (clicks)
381
+ pointer.scroll(axis === 'dy' ? 'vertical' : 'horizontal', Math.max(-25, Math.min(25, clicks)));
382
+ }
383
+ return;
384
+ }
385
+ case 'type':
386
+ // On stdin, not as an argument: a typed password must not show up in `ps`.
387
+ this.check(generation);
388
+ await this.tool('wtype', ['-'], TEXT_LIMIT, { input: action.text, timeoutMs: COMMAND_TIMEOUT_MS + action.text.length * 20 });
389
+ return;
390
+ case 'keyDown':
391
+ case 'keyUp': {
392
+ // wtype presses and lets go within one run: a key held across runs would
393
+ // be released when its virtual keyboard goes away. So a modifier is kept
394
+ // here and sent with the next key.
395
+ const modifier = MODIFIERS[action.key];
396
+ if (modifier) {
397
+ if (action.kind === 'keyDown')
398
+ this.heldModifiers.add(modifier);
399
+ else
400
+ this.heldModifiers.delete(modifier);
401
+ return;
402
+ }
403
+ const keysym = linuxKeysym(action.key);
404
+ if (action.kind === 'keyUp')
405
+ return;
406
+ const held = [...this.heldModifiers];
407
+ this.check(generation);
408
+ const shifted = held.length === 1 && held[0] === 'shift' ? shiftedCharacter(keysym) : null;
409
+ if (shifted) {
410
+ await this.tool('wtype', ['-'], TEXT_LIMIT, { input: shifted });
411
+ return;
412
+ }
413
+ await this.tool('wtype', [...held.flatMap(name => ['-M', name]), '-k', keysym, ...held.flatMap(name => ['-m', name])]);
414
+ return;
415
+ }
416
+ default:
417
+ throw new Error('hyprland-desktop-input-invalid');
418
+ }
419
+ }
420
+ /** Blocks queued input at once, then lets go of anything still held. */
421
+ cancelInput() {
422
+ this.generation++;
423
+ this.scrollRest = { dx: 0, dy: 0 };
424
+ this.heldModifiers.clear();
425
+ for (const button of this.heldButtons) {
426
+ try {
427
+ this.pointer?.button(POINTER_BUTTONS[button], false);
428
+ }
429
+ catch { /* @silent-fallback-ok — no connection left to release through; the pointer is going away with it. */ }
430
+ }
431
+ this.heldButtons.clear();
432
+ }
433
+ async startIndicator(onUnexpectedExit) {
434
+ if (this.indicatorActive)
435
+ throw new Error('hyprland-desktop-indicator-already-active');
436
+ const epoch = ++this.epoch;
437
+ this.pointerAllowed = true;
438
+ // Stop can arrive during any of these waits, and a failed start owes the same clean-up.
439
+ const stillMine = () => { if (epoch !== this.epoch)
440
+ throw new Error('hyprland-desktop-start-cancelled'); };
441
+ try {
442
+ const monitors = await this.monitors();
443
+ stillMine();
444
+ await this.connectedPointer();
445
+ stillMine();
446
+ await this.wakeIfAsleep(monitors);
447
+ stillMine();
448
+ }
449
+ catch (error) {
450
+ if (epoch === this.epoch)
451
+ this.stopIndicator();
452
+ throw error;
453
+ }
454
+ this.indicatorActive = true;
455
+ this.indicatorLost = onUnexpectedExit;
456
+ // Tell whoever sits at the screen, where a notifier exists. Best effort.
457
+ void this.tool('notify-send', ['-u', 'normal', 'Instar', 'Remote Desktop is connected to this screen.']).catch(() => {
458
+ // @silent-fallback-ok — not every desktop runs a notification daemon.
459
+ });
460
+ const signature = this.session?.signature;
461
+ this.heartbeat = setInterval(() => {
462
+ void (async () => {
463
+ if (findHyprlandSession(this.runtimeDir)?.signature !== signature)
464
+ throw new Error('hyprland-session-changed');
465
+ const monitors = await this.monitors();
466
+ if (epoch === this.epoch)
467
+ await this.wakeIfAsleep(monitors);
468
+ })().catch(() => {
469
+ // @silent-fallback-ok — not silent: a desktop that stops answering ends
470
+ // the grant through onUnexpectedExit, which the stream manager reports.
471
+ // An answer from a session that has already ended changes nothing.
472
+ if (epoch === this.epoch)
473
+ this.loseIndicator();
474
+ });
475
+ }, this.heartbeatMs);
476
+ this.heartbeat.unref?.();
477
+ }
478
+ stopIndicator() {
479
+ this.cancelInput();
480
+ this.epoch++;
481
+ this.pointerAllowed = false;
482
+ this.indicatorActive = false;
483
+ this.indicatorLost = null;
484
+ if (this.heartbeat)
485
+ clearInterval(this.heartbeat);
486
+ this.heartbeat = null;
487
+ this.pointer?.close();
488
+ this.pointer = null;
489
+ }
490
+ loseIndicator() {
491
+ if (!this.indicatorActive)
492
+ return;
493
+ const lost = this.indicatorLost;
494
+ this.stopIndicator();
495
+ lost?.();
496
+ }
497
+ requireActive() {
498
+ if (!this.indicatorActive)
499
+ throw new Error('hyprland-desktop-session-unavailable');
500
+ }
501
+ }
502
+ /** Native Linux's desktop host: Hyprland when this user has a Hyprland session,
503
+ * and otherwise X11. A login can start or end while the agent runs, so this asks
504
+ * at each probe and only stays put while a viewer is connected.
505
+ * `remoteDesktop.linuxDisplay` means X11, whatever else is running. */
506
+ export class LinuxAutoDesktopHost {
507
+ options;
508
+ platform = 'linux';
509
+ x11;
510
+ hyprland;
511
+ runtimeDir;
512
+ env;
513
+ /** A viewer is connected or connecting: the choice stays put. */
514
+ connected = false;
515
+ /** Whichever start is newest; an older one's late failure changes nothing. */
516
+ startToken = 0;
517
+ current;
518
+ constructor(options = {}) {
519
+ this.options = options;
520
+ this.env = options.env ?? process.env;
521
+ this.runtimeDir = options.runtimeDir ?? defaultRuntimeDir(this.env);
522
+ this.x11 = options.x11 ?? new LinuxDesktopHost(options);
523
+ this.hyprland = options.hyprland ?? new HyprlandDesktopHost({ env: this.env, runtimeDir: this.runtimeDir });
524
+ this.current = this.x11;
525
+ }
526
+ pick() {
527
+ if (this.connected)
528
+ return this.current;
529
+ this.current = !this.options.display && findHyprlandSession(this.runtimeDir) ? this.hyprland : this.x11;
530
+ return this.current;
531
+ }
532
+ async probe() {
533
+ const probe = await this.pick().probe();
534
+ // Hyprland is here but nobody has signed in: there is no X display to look
535
+ // for either, and the wording should say what actually fixes it.
536
+ if (this.current === this.x11 && !this.options.display && probe.linux && !probe.linux.display) {
537
+ const installed = this.options.hyprctlInstalled?.() ?? toolOnPath('hyprctl', this.env);
538
+ if (installed)
539
+ return { ...probe, linux: { ...probe.linux, compositor: 'hyprland' } };
540
+ }
541
+ return probe;
542
+ }
543
+ listDisplays() { return this.pick().listDisplays(); }
544
+ selectDisplay(displayId) { return this.pick().selectDisplay(displayId); }
545
+ capture() { return this.current.capture(); }
546
+ captureTiming() { return this.current.captureTiming(); }
547
+ cursor() { return this.current.cursor(); }
548
+ input(action) { return this.current.input(action); }
549
+ cancelInput() { this.current.cancelInput(); }
550
+ async startIndicator(onUnexpectedExit) {
551
+ const host = this.pick();
552
+ const token = ++this.startToken;
553
+ this.connected = true;
554
+ try {
555
+ await host.startIndicator(() => { if (token === this.startToken)
556
+ this.connected = false; onUnexpectedExit(); });
557
+ }
558
+ catch (error) {
559
+ if (token === this.startToken)
560
+ this.connected = false;
561
+ throw error;
562
+ }
563
+ }
564
+ stopIndicator() {
565
+ this.current.stopIndicator();
566
+ this.connected = false;
567
+ }
568
+ }
569
+ //# sourceMappingURL=HyprlandDesktopHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyprlandDesktopHost.js","sourceRoot":"","sources":["../../src/core/HyprlandDesktopHost.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export type LinuxRunner = (file: string, args: string[], options: {
3
3
  env: NodeJS.ProcessEnv;
4
4
  limit: number;
5
5
  timeoutMs: number;
6
+ input?: string;
6
7
  }) => Promise<Buffer>;
7
8
  export declare const defaultLinuxRunner: LinuxRunner;
8
9
  export interface LinuxDesktopHostOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"LinuxDesktopHost.d.ts","sourceRoot":"","sources":["../../src/core/LinuxDesktopHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LinuxDesktopHost.d.ts","sourceRoot":"","sources":["../../src/core/LinuxDesktopHost.ts"],"names":[],"mappings":"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"}