stelo 1.0.1
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/LICENSE +184 -0
- package/README.md +853 -0
- package/dist/accessibility.d.ts +227 -0
- package/dist/accessibility.d.ts.map +1 -0
- package/dist/accessibility.js +602 -0
- package/dist/accessibility.js.map +1 -0
- package/dist/agent.d.ts +870 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +1107 -0
- package/dist/agent.js.map +1 -0
- package/dist/audio-stream.d.ts +114 -0
- package/dist/audio-stream.d.ts.map +1 -0
- package/dist/audio-stream.js +167 -0
- package/dist/audio-stream.js.map +1 -0
- package/dist/clipboard.d.ts +99 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +352 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/config.d.ts +183 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +477 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +213 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +387 -0
- package/dist/context.js.map +1 -0
- package/dist/cortex.d.ts +548 -0
- package/dist/cortex.d.ts.map +1 -0
- package/dist/cortex.js +1479 -0
- package/dist/cortex.js.map +1 -0
- package/dist/errors.d.ts +133 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +278 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +227 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +429 -0
- package/dist/events.js.map +1 -0
- package/dist/executor.d.ts +212 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +545 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +167 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +159 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +533 -0
- package/dist/integration.js.map +1 -0
- package/dist/keyboard.d.ts +276 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +404 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/logger.d.ts +198 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +516 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware.d.ts +183 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +493 -0
- package/dist/middleware.js.map +1 -0
- package/dist/monitor.d.ts +136 -0
- package/dist/monitor.d.ts.map +1 -0
- package/dist/monitor.js +341 -0
- package/dist/monitor.js.map +1 -0
- package/dist/mouse.d.ts +290 -0
- package/dist/mouse.d.ts.map +1 -0
- package/dist/mouse.js +466 -0
- package/dist/mouse.js.map +1 -0
- package/dist/plugin.d.ts +157 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +409 -0
- package/dist/plugin.js.map +1 -0
- package/dist/process.d.ts +106 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +326 -0
- package/dist/process.js.map +1 -0
- package/dist/recorder.d.ts +100 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +258 -0
- package/dist/recorder.js.map +1 -0
- package/dist/safety.d.ts +59 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +98 -0
- package/dist/safety.js.map +1 -0
- package/dist/scheduler.d.ts +152 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +615 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/screen.d.ts +96 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +154 -0
- package/dist/screen.js.map +1 -0
- package/dist/session.d.ts +209 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +479 -0
- package/dist/session.js.map +1 -0
- package/dist/stream.d.ts +168 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +298 -0
- package/dist/stream.js.map +1 -0
- package/dist/telemetry.d.ts +223 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +433 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +165 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/bezier.d.ts +51 -0
- package/dist/utils/bezier.d.ts.map +1 -0
- package/dist/utils/bezier.js +117 -0
- package/dist/utils/bezier.js.map +1 -0
- package/dist/utils/helpers.d.ts +90 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +143 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validation.d.ts +254 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +478 -0
- package/dist/validation.js.map +1 -0
- package/dist/vision.d.ts +719 -0
- package/dist/vision.d.ts.map +1 -0
- package/dist/vision.js +1197 -0
- package/dist/vision.js.map +1 -0
- package/dist/window.d.ts +80 -0
- package/dist/window.d.ts.map +1 -0
- package/dist/window.js +170 -0
- package/dist/window.js.map +1 -0
- package/dist/workflow.d.ts +224 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +578 -0
- package/dist/workflow.js.map +1 -0
- package/index.d.ts +840 -0
- package/index.js +495 -0
- package/package.json +91 -0
|
@@ -0,0 +1,602 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Stelo — Accessibility & UI Automation Helpers
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// High-level UI element interaction wrappers built on top of the existing
|
|
6
|
+
// window, screen, keyboard, mouse, and vision primitives.
|
|
7
|
+
// Provides form filling, dialog handling, UI pattern detection, and
|
|
8
|
+
// common accessibility workflows.
|
|
9
|
+
// ============================================================================
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.accessibility = void 0;
|
|
12
|
+
const events_1 = require("./events");
|
|
13
|
+
const logger_1 = require("./logger");
|
|
14
|
+
// ── Internal ─────────────────────────────────────────────────────────────────
|
|
15
|
+
const _log = logger_1.logger.child('accessibility');
|
|
16
|
+
function getNative() {
|
|
17
|
+
try {
|
|
18
|
+
return require('../index.js');
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function delay(ms) {
|
|
25
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
26
|
+
}
|
|
27
|
+
function getCenter(bounds) {
|
|
28
|
+
return {
|
|
29
|
+
x: bounds.x + Math.floor(bounds.width / 2),
|
|
30
|
+
y: bounds.y + Math.floor(bounds.height / 2),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// ── Public API ───────────────────────────────────────────────────────────────
|
|
34
|
+
exports.accessibility = {
|
|
35
|
+
// ── Click Helpers ──────────────────────────────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* Click on a UI region with smart targeting.
|
|
38
|
+
*/
|
|
39
|
+
async clickRegion(bounds, options) {
|
|
40
|
+
const native = getNative();
|
|
41
|
+
if (!native)
|
|
42
|
+
throw new Error('Native bindings not available');
|
|
43
|
+
const center = options?.center !== false;
|
|
44
|
+
let x, y;
|
|
45
|
+
if (center) {
|
|
46
|
+
const c = getCenter(bounds);
|
|
47
|
+
x = c.x + (options?.offsetX ?? 0);
|
|
48
|
+
y = c.y + (options?.offsetY ?? 0);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
x = bounds.x + (options?.offsetX ?? 0);
|
|
52
|
+
y = bounds.y + (options?.offsetY ?? 0);
|
|
53
|
+
}
|
|
54
|
+
if (options?.delayMs) {
|
|
55
|
+
await delay(options.delayMs);
|
|
56
|
+
}
|
|
57
|
+
if (options?.smooth) {
|
|
58
|
+
native.mouseMoveSmooth(x, y, 300, 'easeInOutCubic');
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
native.mouseMove(x, y);
|
|
62
|
+
}
|
|
63
|
+
await delay(50);
|
|
64
|
+
const button = options?.rightClick ? 'right' : 'left';
|
|
65
|
+
if (options?.doubleClick) {
|
|
66
|
+
native.mouseDoubleClick(button);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
native.mouseClick(button);
|
|
70
|
+
}
|
|
71
|
+
events_1.events.emit('accessibility.click', 'accessibility', {
|
|
72
|
+
x, y,
|
|
73
|
+
button,
|
|
74
|
+
doubleClick: !!options?.doubleClick,
|
|
75
|
+
}, { source: 'accessibility' });
|
|
76
|
+
},
|
|
77
|
+
/**
|
|
78
|
+
* Click on screen coordinates with optional smooth movement.
|
|
79
|
+
*/
|
|
80
|
+
async clickAt(x, y, options) {
|
|
81
|
+
return exports.accessibility.clickRegion({ x, y, width: 1, height: 1 }, { ...options, center: false });
|
|
82
|
+
},
|
|
83
|
+
// ── Text Input ─────────────────────────────────────────────────────────
|
|
84
|
+
/**
|
|
85
|
+
* Click on a field region and type text into it.
|
|
86
|
+
*/
|
|
87
|
+
async typeInto(bounds, text, options) {
|
|
88
|
+
const native = getNative();
|
|
89
|
+
if (!native)
|
|
90
|
+
throw new Error('Native bindings not available');
|
|
91
|
+
// Click the field
|
|
92
|
+
await exports.accessibility.clickRegion(bounds, { smooth: true });
|
|
93
|
+
await delay(options?.delayMs ?? 100);
|
|
94
|
+
// Clear existing text
|
|
95
|
+
if (options?.clearFirst !== false) {
|
|
96
|
+
native.keyboardHotkey(['control', 'a']);
|
|
97
|
+
await delay(50);
|
|
98
|
+
}
|
|
99
|
+
// Type
|
|
100
|
+
if (options?.humanized) {
|
|
101
|
+
native.keyboardTypeHumanized(text, 80, 30, 3);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
native.keyboardType(text);
|
|
105
|
+
}
|
|
106
|
+
if (options?.tabAfter) {
|
|
107
|
+
await delay(50);
|
|
108
|
+
native.keyboardPress('tab');
|
|
109
|
+
}
|
|
110
|
+
events_1.events.emit('accessibility.type_into', 'accessibility', {
|
|
111
|
+
text: text.length > 20 ? text.slice(0, 20) + '...' : text,
|
|
112
|
+
region: bounds,
|
|
113
|
+
}, { source: 'accessibility' });
|
|
114
|
+
},
|
|
115
|
+
// ── Form Automation ────────────────────────────────────────────────────
|
|
116
|
+
/**
|
|
117
|
+
* Fill out a form by tabbing through fields and entering values.
|
|
118
|
+
* Assumes the first field is already focused or you provide a startRegion.
|
|
119
|
+
*/
|
|
120
|
+
async fillForm(fields, options) {
|
|
121
|
+
const native = getNative();
|
|
122
|
+
if (!native)
|
|
123
|
+
throw new Error('Native bindings not available');
|
|
124
|
+
const delayMs = options?.delayBetweenMs ?? 200;
|
|
125
|
+
// Click start region if provided
|
|
126
|
+
if (options?.startRegion) {
|
|
127
|
+
await exports.accessibility.clickRegion(options.startRegion, { smooth: true });
|
|
128
|
+
await delay(delayMs);
|
|
129
|
+
}
|
|
130
|
+
// Sort by tabIndex if provided
|
|
131
|
+
const sorted = [...fields].sort((a, b) => (a.tabIndex ?? 0) - (b.tabIndex ?? 0));
|
|
132
|
+
for (const field of sorted) {
|
|
133
|
+
switch (field.type) {
|
|
134
|
+
case 'checkbox': {
|
|
135
|
+
// Press space to toggle
|
|
136
|
+
native.keyboardPress('space');
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case 'dropdown': {
|
|
140
|
+
// Open dropdown and type value
|
|
141
|
+
native.keyboardPress('space');
|
|
142
|
+
await delay(100);
|
|
143
|
+
native.keyboardType(field.value);
|
|
144
|
+
await delay(100);
|
|
145
|
+
native.keyboardPress('enter');
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
case 'password':
|
|
149
|
+
case 'text':
|
|
150
|
+
default: {
|
|
151
|
+
// Select all and type
|
|
152
|
+
native.keyboardHotkey(['control', 'a']);
|
|
153
|
+
await delay(50);
|
|
154
|
+
if (options?.humanized) {
|
|
155
|
+
native.keyboardTypeHumanized(field.value, 80, 30, 3);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
native.keyboardType(field.value);
|
|
159
|
+
}
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
await delay(delayMs);
|
|
164
|
+
native.keyboardPress('tab');
|
|
165
|
+
await delay(100);
|
|
166
|
+
}
|
|
167
|
+
_log.info('Form filled', { fieldCount: fields.length });
|
|
168
|
+
events_1.events.emit('accessibility.form_filled', 'accessibility', {
|
|
169
|
+
fieldCount: fields.length,
|
|
170
|
+
fieldLabels: fields.map((f) => f.label),
|
|
171
|
+
}, { source: 'accessibility' });
|
|
172
|
+
},
|
|
173
|
+
/**
|
|
174
|
+
* Submit the current form (Enter key).
|
|
175
|
+
*/
|
|
176
|
+
async submitForm() {
|
|
177
|
+
const native = getNative();
|
|
178
|
+
if (!native)
|
|
179
|
+
return;
|
|
180
|
+
native.keyboardPress('enter');
|
|
181
|
+
events_1.events.emit('accessibility.form_submit', 'accessibility', {}, { source: 'accessibility' });
|
|
182
|
+
},
|
|
183
|
+
// ── Dialog Handling ────────────────────────────────────────────────────
|
|
184
|
+
/**
|
|
185
|
+
* Detect dialogs/popups by looking for small newly-focused windows.
|
|
186
|
+
*/
|
|
187
|
+
detectDialogs() {
|
|
188
|
+
const native = getNative();
|
|
189
|
+
if (!native)
|
|
190
|
+
return [];
|
|
191
|
+
try {
|
|
192
|
+
const windows = native.windowGetAll();
|
|
193
|
+
const dialogs = [];
|
|
194
|
+
// Heuristic: small windows, focused or recently appeared
|
|
195
|
+
for (const w of windows) {
|
|
196
|
+
// Typical dialog heuristics
|
|
197
|
+
const isSmall = w.width < 800 && w.height < 600;
|
|
198
|
+
const hasDialogTitle = /error|warning|confirm|alert|save|open|dialog|prompt|message/i.test(w.title || '');
|
|
199
|
+
if (isSmall || hasDialogTitle) {
|
|
200
|
+
let dialogType = 'unknown';
|
|
201
|
+
const titleLower = (w.title || '').toLowerCase();
|
|
202
|
+
if (/error|exception|crash/i.test(titleLower))
|
|
203
|
+
dialogType = 'error';
|
|
204
|
+
else if (/confirm|are you sure/i.test(titleLower))
|
|
205
|
+
dialogType = 'confirm';
|
|
206
|
+
else if (/save/i.test(titleLower))
|
|
207
|
+
dialogType = 'save';
|
|
208
|
+
else if (/open/i.test(titleLower))
|
|
209
|
+
dialogType = 'open';
|
|
210
|
+
else if (/alert|warning|notice/i.test(titleLower))
|
|
211
|
+
dialogType = 'alert';
|
|
212
|
+
else if (/input|prompt|enter/i.test(titleLower))
|
|
213
|
+
dialogType = 'prompt';
|
|
214
|
+
dialogs.push({
|
|
215
|
+
title: w.title,
|
|
216
|
+
windowId: w.id,
|
|
217
|
+
type: dialogType,
|
|
218
|
+
buttons: [], // Would need OCR/vision to detect buttons
|
|
219
|
+
message: undefined,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return dialogs;
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
_log.error('Dialog detection failed', err);
|
|
227
|
+
return [];
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
/**
|
|
231
|
+
* Dismiss a dialog by pressing Enter (OK), Escape (Cancel), or a specific key.
|
|
232
|
+
*/
|
|
233
|
+
async dismissDialog(action = 'ok') {
|
|
234
|
+
const native = getNative();
|
|
235
|
+
if (!native)
|
|
236
|
+
return;
|
|
237
|
+
switch (action) {
|
|
238
|
+
case 'ok':
|
|
239
|
+
native.keyboardPress('enter');
|
|
240
|
+
break;
|
|
241
|
+
case 'cancel':
|
|
242
|
+
case 'close':
|
|
243
|
+
native.keyboardPress('escape');
|
|
244
|
+
break;
|
|
245
|
+
case 'yes':
|
|
246
|
+
native.keyboardHotkey(['alt', 'y']);
|
|
247
|
+
break;
|
|
248
|
+
case 'no':
|
|
249
|
+
native.keyboardHotkey(['alt', 'n']);
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
await delay(200);
|
|
253
|
+
events_1.events.emit('accessibility.dialog_dismiss', 'accessibility', { action }, { source: 'accessibility' });
|
|
254
|
+
},
|
|
255
|
+
/**
|
|
256
|
+
* Wait for a dialog to appear, then optionally dismiss it.
|
|
257
|
+
*/
|
|
258
|
+
async waitForDialog(options) {
|
|
259
|
+
const timeoutMs = options?.timeoutMs ?? 10000;
|
|
260
|
+
const intervalMs = options?.intervalMs ?? 500;
|
|
261
|
+
const start = Date.now();
|
|
262
|
+
while (Date.now() - start < timeoutMs) {
|
|
263
|
+
const dialogs = exports.accessibility.detectDialogs();
|
|
264
|
+
if (dialogs.length > 0) {
|
|
265
|
+
if (options?.autoDismiss) {
|
|
266
|
+
await exports.accessibility.dismissDialog(options.autoDismiss);
|
|
267
|
+
}
|
|
268
|
+
return dialogs[0];
|
|
269
|
+
}
|
|
270
|
+
await delay(intervalMs);
|
|
271
|
+
}
|
|
272
|
+
return null;
|
|
273
|
+
},
|
|
274
|
+
// ── Navigation Helpers ─────────────────────────────────────────────────
|
|
275
|
+
/**
|
|
276
|
+
* Tab to the next UI element.
|
|
277
|
+
*/
|
|
278
|
+
async tabNext(count = 1) {
|
|
279
|
+
const native = getNative();
|
|
280
|
+
if (!native)
|
|
281
|
+
return;
|
|
282
|
+
for (let i = 0; i < count; i++) {
|
|
283
|
+
native.keyboardPress('tab');
|
|
284
|
+
await delay(100);
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
/**
|
|
288
|
+
* Shift-Tab to the previous UI element.
|
|
289
|
+
*/
|
|
290
|
+
async tabPrevious(count = 1) {
|
|
291
|
+
const native = getNative();
|
|
292
|
+
if (!native)
|
|
293
|
+
return;
|
|
294
|
+
for (let i = 0; i < count; i++) {
|
|
295
|
+
native.keyboardHotkey(['shift', 'tab']);
|
|
296
|
+
await delay(100);
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
/**
|
|
300
|
+
* Navigate using arrow keys.
|
|
301
|
+
*/
|
|
302
|
+
async navigate(direction, count = 1) {
|
|
303
|
+
const native = getNative();
|
|
304
|
+
if (!native)
|
|
305
|
+
return;
|
|
306
|
+
for (let i = 0; i < count; i++) {
|
|
307
|
+
native.keyboardPress(direction);
|
|
308
|
+
await delay(50);
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
/**
|
|
312
|
+
* Scroll within the active window.
|
|
313
|
+
*/
|
|
314
|
+
async scroll(direction, amount = 3) {
|
|
315
|
+
const native = getNative();
|
|
316
|
+
if (!native)
|
|
317
|
+
return;
|
|
318
|
+
const delta = direction === 'up' ? amount : -amount;
|
|
319
|
+
native.mouseScroll(delta);
|
|
320
|
+
},
|
|
321
|
+
/**
|
|
322
|
+
* Press Escape to close/cancel the current focus.
|
|
323
|
+
*/
|
|
324
|
+
async escape() {
|
|
325
|
+
const native = getNative();
|
|
326
|
+
if (!native)
|
|
327
|
+
return;
|
|
328
|
+
native.keyboardPress('escape');
|
|
329
|
+
},
|
|
330
|
+
// ── Menu Interaction ───────────────────────────────────────────────────
|
|
331
|
+
/**
|
|
332
|
+
* Open a menu via Alt key + menu key, then navigate to an item.
|
|
333
|
+
*/
|
|
334
|
+
async openMenu(menuKey, itemKeys) {
|
|
335
|
+
const native = getNative();
|
|
336
|
+
if (!native)
|
|
337
|
+
return;
|
|
338
|
+
// Open menu bar with Alt
|
|
339
|
+
native.keyboardPress('alt');
|
|
340
|
+
await delay(200);
|
|
341
|
+
// Type menu accelerator
|
|
342
|
+
native.keyboardPress(menuKey);
|
|
343
|
+
await delay(200);
|
|
344
|
+
// Navigate to item
|
|
345
|
+
if (itemKeys) {
|
|
346
|
+
for (const key of itemKeys) {
|
|
347
|
+
native.keyboardPress(key);
|
|
348
|
+
await delay(150);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
/**
|
|
353
|
+
* Open context menu (right-click menu) at current position or specified coords.
|
|
354
|
+
*/
|
|
355
|
+
async contextMenu(x, y) {
|
|
356
|
+
const native = getNative();
|
|
357
|
+
if (!native)
|
|
358
|
+
return;
|
|
359
|
+
if (x !== undefined && y !== undefined) {
|
|
360
|
+
native.mouseMove(x, y);
|
|
361
|
+
await delay(50);
|
|
362
|
+
}
|
|
363
|
+
native.mouseClick('right');
|
|
364
|
+
await delay(200);
|
|
365
|
+
},
|
|
366
|
+
// ── Clipboard Shortcuts ────────────────────────────────────────────────
|
|
367
|
+
/**
|
|
368
|
+
* Select all content in the focused element.
|
|
369
|
+
*/
|
|
370
|
+
async selectAll() {
|
|
371
|
+
const native = getNative();
|
|
372
|
+
if (!native)
|
|
373
|
+
return;
|
|
374
|
+
native.keyboardHotkey(['control', 'a']);
|
|
375
|
+
},
|
|
376
|
+
/**
|
|
377
|
+
* Copy selected content.
|
|
378
|
+
*/
|
|
379
|
+
async copy() {
|
|
380
|
+
const native = getNative();
|
|
381
|
+
if (!native)
|
|
382
|
+
return;
|
|
383
|
+
native.keyboardHotkey(['control', 'c']);
|
|
384
|
+
},
|
|
385
|
+
/**
|
|
386
|
+
* Paste from clipboard.
|
|
387
|
+
*/
|
|
388
|
+
async paste() {
|
|
389
|
+
const native = getNative();
|
|
390
|
+
if (!native)
|
|
391
|
+
return;
|
|
392
|
+
native.keyboardHotkey(['control', 'v']);
|
|
393
|
+
},
|
|
394
|
+
/**
|
|
395
|
+
* Cut selected content.
|
|
396
|
+
*/
|
|
397
|
+
async cut() {
|
|
398
|
+
const native = getNative();
|
|
399
|
+
if (!native)
|
|
400
|
+
return;
|
|
401
|
+
native.keyboardHotkey(['control', 'x']);
|
|
402
|
+
},
|
|
403
|
+
/**
|
|
404
|
+
* Undo last action.
|
|
405
|
+
*/
|
|
406
|
+
async undo() {
|
|
407
|
+
const native = getNative();
|
|
408
|
+
if (!native)
|
|
409
|
+
return;
|
|
410
|
+
native.keyboardHotkey(['control', 'z']);
|
|
411
|
+
},
|
|
412
|
+
/**
|
|
413
|
+
* Redo last undone action.
|
|
414
|
+
*/
|
|
415
|
+
async redo() {
|
|
416
|
+
const native = getNative();
|
|
417
|
+
if (!native)
|
|
418
|
+
return;
|
|
419
|
+
native.keyboardHotkey(['control', 'y']);
|
|
420
|
+
},
|
|
421
|
+
// ── Window Helpers ─────────────────────────────────────────────────────
|
|
422
|
+
/**
|
|
423
|
+
* Snap the active window (Win+Arrow shortcuts on Windows).
|
|
424
|
+
*/
|
|
425
|
+
async snapWindow(position) {
|
|
426
|
+
const native = getNative();
|
|
427
|
+
if (!native)
|
|
428
|
+
return;
|
|
429
|
+
const platform = native.getPlatform?.() ?? process.platform;
|
|
430
|
+
if (platform === 'win32') {
|
|
431
|
+
switch (position) {
|
|
432
|
+
case 'left':
|
|
433
|
+
native.keyboardHotkey(['meta', 'left']);
|
|
434
|
+
break;
|
|
435
|
+
case 'right':
|
|
436
|
+
native.keyboardHotkey(['meta', 'right']);
|
|
437
|
+
break;
|
|
438
|
+
case 'maximize':
|
|
439
|
+
native.keyboardHotkey(['meta', 'up']);
|
|
440
|
+
break;
|
|
441
|
+
case 'minimize':
|
|
442
|
+
native.keyboardHotkey(['meta', 'down']);
|
|
443
|
+
break;
|
|
444
|
+
case 'restore':
|
|
445
|
+
native.keyboardHotkey(['meta', 'down']);
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
else if (platform === 'darwin') {
|
|
450
|
+
// macOS uses different shortcuts (system dependent)
|
|
451
|
+
const active = native.windowGetActive();
|
|
452
|
+
if (active) {
|
|
453
|
+
switch (position) {
|
|
454
|
+
case 'maximize':
|
|
455
|
+
native.windowMaximize(active.id);
|
|
456
|
+
break;
|
|
457
|
+
case 'minimize':
|
|
458
|
+
native.windowMinimize(active.id);
|
|
459
|
+
break;
|
|
460
|
+
case 'restore':
|
|
461
|
+
native.windowRestore(active.id);
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
await delay(300);
|
|
467
|
+
},
|
|
468
|
+
/**
|
|
469
|
+
* Switch between windows using Alt+Tab.
|
|
470
|
+
*/
|
|
471
|
+
async switchWindow(count = 1) {
|
|
472
|
+
const native = getNative();
|
|
473
|
+
if (!native)
|
|
474
|
+
return;
|
|
475
|
+
for (let i = 0; i < count; i++) {
|
|
476
|
+
native.keyboardHotkey(['alt', 'tab']);
|
|
477
|
+
await delay(300);
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
/**
|
|
481
|
+
* Take a screenshot of the active window area.
|
|
482
|
+
*/
|
|
483
|
+
captureActiveWindow() {
|
|
484
|
+
const native = getNative();
|
|
485
|
+
if (!native)
|
|
486
|
+
return null;
|
|
487
|
+
try {
|
|
488
|
+
const active = native.windowGetActive();
|
|
489
|
+
if (!active)
|
|
490
|
+
return null;
|
|
491
|
+
return native.screenCapture(active.x, active.y, active.width, active.height);
|
|
492
|
+
}
|
|
493
|
+
catch (err) {
|
|
494
|
+
_log.error('Failed to capture active window', err);
|
|
495
|
+
return null;
|
|
496
|
+
}
|
|
497
|
+
},
|
|
498
|
+
// ── Search ─────────────────────────────────────────────────────────────
|
|
499
|
+
/**
|
|
500
|
+
* Open OS search (Windows: Win key, macOS: Cmd+Space).
|
|
501
|
+
*/
|
|
502
|
+
async openSearch() {
|
|
503
|
+
const native = getNative();
|
|
504
|
+
if (!native)
|
|
505
|
+
return;
|
|
506
|
+
const platform = native.getPlatform?.() ?? process.platform;
|
|
507
|
+
if (platform === 'win32') {
|
|
508
|
+
native.keyboardPress('meta');
|
|
509
|
+
}
|
|
510
|
+
else if (platform === 'darwin') {
|
|
511
|
+
native.keyboardHotkey(['command', 'space']);
|
|
512
|
+
}
|
|
513
|
+
await delay(500);
|
|
514
|
+
},
|
|
515
|
+
/**
|
|
516
|
+
* Open an application by typing into OS search.
|
|
517
|
+
*/
|
|
518
|
+
async launchApp(appName) {
|
|
519
|
+
await exports.accessibility.openSearch();
|
|
520
|
+
await delay(300);
|
|
521
|
+
const native = getNative();
|
|
522
|
+
if (!native)
|
|
523
|
+
return;
|
|
524
|
+
native.keyboardType(appName);
|
|
525
|
+
await delay(500);
|
|
526
|
+
native.keyboardPress('enter');
|
|
527
|
+
await delay(1000);
|
|
528
|
+
events_1.events.emit('accessibility.launch_app', 'accessibility', { appName }, { source: 'accessibility' });
|
|
529
|
+
},
|
|
530
|
+
// ── Composite Actions ──────────────────────────────────────────────────
|
|
531
|
+
/**
|
|
532
|
+
* Find text on screen using Ctrl+F, search for it, then close the search bar.
|
|
533
|
+
*/
|
|
534
|
+
async findOnScreen(text, options) {
|
|
535
|
+
const native = getNative();
|
|
536
|
+
if (!native)
|
|
537
|
+
return;
|
|
538
|
+
native.keyboardHotkey(['control', 'f']);
|
|
539
|
+
await delay(300);
|
|
540
|
+
native.keyboardType(text);
|
|
541
|
+
await delay(200);
|
|
542
|
+
native.keyboardPress('enter');
|
|
543
|
+
if (options?.closeAfter) {
|
|
544
|
+
await delay(200);
|
|
545
|
+
native.keyboardPress('escape');
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
/**
|
|
549
|
+
* Save current document (Ctrl+S).
|
|
550
|
+
*/
|
|
551
|
+
async save() {
|
|
552
|
+
const native = getNative();
|
|
553
|
+
if (!native)
|
|
554
|
+
return;
|
|
555
|
+
native.keyboardHotkey(['control', 's']);
|
|
556
|
+
await delay(200);
|
|
557
|
+
},
|
|
558
|
+
/**
|
|
559
|
+
* Open a file (Ctrl+O).
|
|
560
|
+
*/
|
|
561
|
+
async openFile() {
|
|
562
|
+
const native = getNative();
|
|
563
|
+
if (!native)
|
|
564
|
+
return;
|
|
565
|
+
native.keyboardHotkey(['control', 'o']);
|
|
566
|
+
await delay(500);
|
|
567
|
+
},
|
|
568
|
+
/**
|
|
569
|
+
* Print (Ctrl+P).
|
|
570
|
+
*/
|
|
571
|
+
async print() {
|
|
572
|
+
const native = getNative();
|
|
573
|
+
if (!native)
|
|
574
|
+
return;
|
|
575
|
+
native.keyboardHotkey(['control', 'p']);
|
|
576
|
+
await delay(500);
|
|
577
|
+
},
|
|
578
|
+
/**
|
|
579
|
+
* Wait for a window with a given title to appear.
|
|
580
|
+
*/
|
|
581
|
+
async waitForWindow(title, options) {
|
|
582
|
+
const native = getNative();
|
|
583
|
+
if (!native)
|
|
584
|
+
return false;
|
|
585
|
+
const timeoutMs = options?.timeoutMs ?? 10000;
|
|
586
|
+
const intervalMs = options?.intervalMs ?? 500;
|
|
587
|
+
const start = Date.now();
|
|
588
|
+
while (Date.now() - start < timeoutMs) {
|
|
589
|
+
try {
|
|
590
|
+
const windows = native.windowFind(title);
|
|
591
|
+
if (windows && windows.length > 0)
|
|
592
|
+
return true;
|
|
593
|
+
}
|
|
594
|
+
catch {
|
|
595
|
+
// Window not found yet
|
|
596
|
+
}
|
|
597
|
+
await delay(intervalMs);
|
|
598
|
+
}
|
|
599
|
+
return false;
|
|
600
|
+
},
|
|
601
|
+
};
|
|
602
|
+
//# sourceMappingURL=accessibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../ts/accessibility.ts"],"names":[],"mappings":"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"}
|