@solazah/solazah-runtime 0.0.156 → 0.0.157

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.
@@ -68,25 +68,60 @@ export default class SystemBrowser {
68
68
  private transport;
69
69
  constructor(transport?: IpcRenderer);
70
70
  bridge: {
71
+ /**
72
+ * 返回浏览器桥接的连接状态。
73
+ *
74
+ * @returns {connected 是否有扩展连着, clients 连进来的客户端数, browsers 已连接的浏览器种类列表(chrome/edge/unknown)}。
75
+ */
71
76
  status: () => Promise<{
72
77
  connected: boolean;
73
78
  clients: number;
74
79
  browsers: SystemBrowserKind[];
75
80
  }>;
81
+ /**
82
+ * 向扩展发一次 ping 探活。
83
+ *
84
+ * @returns {pong: true, ts} 探活响应。
85
+ * @throws 未连接扩展时抛错。
86
+ */
76
87
  ping: () => Promise<{
77
88
  pong: boolean;
78
89
  ts: number;
79
90
  }>;
80
91
  };
81
92
  tabs: {
93
+ /**
94
+ * 列出浏览器标签页。
95
+ *
96
+ * @param query chrome.tabs.QueryInfo(如 {active, currentWindow})过滤条件;可另带 browser 字段(chrome/edge)指定目标浏览器,不传走默认浏览器。
97
+ * @returns {tabs} 标签页列表。
98
+ * @throws 浏览器扩展未连接或调用超时时抛错。
99
+ */
82
100
  list: (query?: chrome.tabs.QueryInfo & {
83
101
  browser?: SystemBrowserKind;
84
102
  }) => Promise<{
85
103
  tabs: SystemBrowserTab[];
86
104
  }>;
105
+ /**
106
+ * 按 tabId 取单个标签页详情。
107
+ *
108
+ * @param tabId 标签页 ID。
109
+ * @returns {tab} 标签页详情。
110
+ * @throws 标签不存在时抛错。
111
+ */
87
112
  get: (tabId: number) => Promise<{
88
113
  tab: SystemBrowserTab;
89
114
  }>;
115
+ /**
116
+ * 新建标签页。
117
+ *
118
+ * @param params.url 新标签页的 URL。
119
+ * @param params.active 是否激活新标签页,默认 true。
120
+ * @param params.windowId 目标窗口 ID。
121
+ * @param params.pinned 是否固定标签页。
122
+ * @returns {tab} 新建的标签页。
123
+ * @throws 浏览器扩展未连接或调用超时时抛错。
124
+ */
90
125
  create: (params: {
91
126
  url?: string;
92
127
  active?: boolean;
@@ -95,6 +130,17 @@ export default class SystemBrowser {
95
130
  }) => Promise<{
96
131
  tab: SystemBrowserTab;
97
132
  }>;
133
+ /**
134
+ * 更新指定标签页。
135
+ *
136
+ * @param params.tabId 要更新的标签页 ID。
137
+ * @param params.url 新 URL。
138
+ * @param params.active 激活状态。
139
+ * @param params.pinned 是否固定。
140
+ * @param params.muted 是否静音。
141
+ * @returns {tab} 更新后的标签页。
142
+ * @throws 浏览器扩展未连接或调用超时时抛错。
143
+ */
98
144
  update: (params: {
99
145
  tabId: number;
100
146
  url?: string;
@@ -104,22 +150,61 @@ export default class SystemBrowser {
104
150
  }) => Promise<{
105
151
  tab: SystemBrowserTab;
106
152
  }>;
153
+ /**
154
+ * 关闭标签页。
155
+ *
156
+ * @param params.tabId 单个标签页 ID。
157
+ * @param params.tabIds 批量标签页 ID 列表。
158
+ * @returns {removed} 已关闭的标签页 ID 列表。
159
+ * @throws 浏览器扩展未连接或调用超时时抛错。
160
+ */
107
161
  remove: (params: {
108
162
  tabId?: number;
109
163
  tabIds?: number[];
110
164
  }) => Promise<{
111
165
  removed: number[];
112
166
  }>;
167
+ /**
168
+ * 激活(切到前台)指定标签页,并把浏览器 OS 窗口提到最前(绕过 Windows 防偷焦点)。
169
+ *
170
+ * @param tabId 标签页 ID。
171
+ * @returns {tab} 激活的标签页。
172
+ * @throws 浏览器扩展未连接或调用超时时抛错。
173
+ */
113
174
  activate: (tabId: number) => Promise<{
114
175
  tab: SystemBrowserTab;
115
176
  }>;
177
+ /**
178
+ * 重新加载标签页。
179
+ *
180
+ * @param params.tabId 标签页 ID。
181
+ * @param params.bypassCache 为 true 时强制忽略缓存刷新。
182
+ * @returns 无返回。
183
+ * @throws 浏览器扩展未连接或调用超时时抛错。
184
+ */
116
185
  reload: (params: {
117
186
  tabId: number;
118
187
  bypassCache?: boolean;
119
188
  }) => Promise<void>;
189
+ /**
190
+ * 复制指定标签页。
191
+ *
192
+ * @param tabId 标签页 ID。
193
+ * @returns {tab} 新标签页(失败为 null)。
194
+ * @throws 浏览器扩展未连接或调用超时时抛错。
195
+ */
120
196
  duplicate: (tabId: number) => Promise<{
121
197
  tab: SystemBrowserTab | null;
122
198
  }>;
199
+ /**
200
+ * 把标签页移到目标位置。
201
+ *
202
+ * @param params.tabId 标签页 ID。
203
+ * @param params.index 目标位置索引。
204
+ * @param params.windowId 目标窗口 ID,传了则跨窗口移动。
205
+ * @returns {tab} 移动后的标签页。
206
+ * @throws 浏览器扩展未连接或调用超时时抛错。
207
+ */
123
208
  move: (params: {
124
209
  tabId: number;
125
210
  index: number;
@@ -129,12 +214,33 @@ export default class SystemBrowser {
129
214
  }>;
130
215
  };
131
216
  scripting: {
217
+ /**
218
+ * 在指定标签页里对一段 JavaScript 表达式求值并返回结果。
219
+ *
220
+ * @param params.tabId 标签页 ID。
221
+ * @param params.expression 要执行的 JavaScript 表达式。
222
+ * @param params.world 执行世界:MAIN(页面主世界)或 ISOLATED(扩展隔离世界),默认 ISOLATED。
223
+ * @param params.allFrames 为 true 则在所有 iframe 里执行。
224
+ * @returns 表达式求值结果。
225
+ * @throws 浏览器扩展未连接或调用超时时抛错。
226
+ */
132
227
  eval: (params: {
133
228
  tabId: number;
134
229
  expression: string;
135
230
  world?: "MAIN" | "ISOLATED";
136
231
  allFrames?: boolean;
137
232
  }) => Promise<any>;
233
+ /**
234
+ * 在指定标签页里执行一段函数体并返回其返回值。
235
+ *
236
+ * @param params.tabId 标签页 ID。
237
+ * @param params.code 要执行的函数体代码。
238
+ * @param params.args 传入函数的参数数组。
239
+ * @param params.world 执行世界:MAIN 或 ISOLATED,默认 ISOLATED。
240
+ * @param params.allFrames 为 true 则在所有 iframe 里执行。
241
+ * @returns 函数返回值。
242
+ * @throws 浏览器扩展未连接或调用超时时抛错。
243
+ */
138
244
  execute: (params: {
139
245
  tabId: number;
140
246
  code: string;
@@ -142,11 +248,29 @@ export default class SystemBrowser {
142
248
  allFrames?: boolean;
143
249
  args?: any[];
144
250
  }) => Promise<any>;
251
+ /**
252
+ * 向指定标签页注入一段 CSS。
253
+ *
254
+ * @param params.tabId 标签页 ID。
255
+ * @param params.css 要注入的 CSS 字符串。
256
+ * @param params.allFrames 为 true 则注入到所有 iframe。
257
+ * @returns 无返回。
258
+ * @throws 浏览器扩展未连接或调用超时时抛错。
259
+ */
145
260
  insertCSS: (params: {
146
261
  tabId: number;
147
262
  css: string;
148
263
  allFrames?: boolean;
149
264
  }) => Promise<void>;
265
+ /**
266
+ * 移除此前注入到标签页的 CSS。
267
+ *
268
+ * @param params.tabId 标签页 ID。
269
+ * @param params.css 要移除的 CSS 字符串(需与注入时一致)。
270
+ * @param params.allFrames 为 true 则从所有 iframe 移除。
271
+ * @returns 无返回。
272
+ * @throws 浏览器扩展未连接或调用超时时抛错。
273
+ */
150
274
  removeCSS: (params: {
151
275
  tabId: number;
152
276
  css: string;
@@ -154,16 +278,44 @@ export default class SystemBrowser {
154
278
  }) => Promise<void>;
155
279
  };
156
280
  page: {
281
+ /**
282
+ * 提取标签页里元素的文本。
283
+ *
284
+ * @param params.tabId 标签页 ID。
285
+ * @param params.selector 可选 CSS 选择器,不传则取整页文本。
286
+ * @param params.allFrames 为 true 则涵盖所有 iframe。
287
+ * @returns 页面/元素文本。
288
+ * @throws 浏览器扩展未连接或调用超时时抛错。
289
+ */
157
290
  text: (params: {
158
291
  tabId: number;
159
292
  selector?: string;
160
293
  allFrames?: boolean;
161
294
  }) => Promise<any>;
295
+ /**
296
+ * 点击标签页里 selector 匹配的元素。
297
+ *
298
+ * @param params.tabId 标签页 ID。
299
+ * @param params.selector 目标元素的 CSS 选择器。
300
+ * @param params.allFrames 为 true 则在所有 iframe 里查找并点击。
301
+ * @returns 无返回。
302
+ * @throws 浏览器扩展未连接或调用超时时抛错。
303
+ */
162
304
  click: (params: {
163
305
  tabId: number;
164
306
  selector: string;
165
307
  allFrames?: boolean;
166
308
  }) => Promise<any>;
309
+ /**
310
+ * 把值填入标签页里 selector 匹配的输入元素。
311
+ *
312
+ * @param params.tabId 标签页 ID。
313
+ * @param params.selector 目标输入元素的 CSS 选择器。
314
+ * @param params.value 要填入的值。
315
+ * @param params.allFrames 为 true 则在所有 iframe 里查找并填充。
316
+ * @returns 无返回。
317
+ * @throws 浏览器扩展未连接或调用超时时抛错。
318
+ */
167
319
  fill: (params: {
168
320
  tabId: number;
169
321
  selector: string;
@@ -172,12 +324,29 @@ export default class SystemBrowser {
172
324
  }) => Promise<any>;
173
325
  };
174
326
  cookies: {
327
+ /**
328
+ * 从浏览器读取单条 cookie。
329
+ *
330
+ * @param params.url cookie 所属 URL。
331
+ * @param params.name cookie 名称。
332
+ * @returns {cookie} 单条 cookie(不存在为 null)。
333
+ * @throws 浏览器扩展未连接或调用超时时抛错。
334
+ */
175
335
  get: (params: {
176
336
  url: string;
177
337
  name: string;
178
338
  }) => Promise<{
179
339
  cookie: SystemBrowserCookie | null;
180
340
  }>;
341
+ /**
342
+ * 批量读取浏览器 cookie。
343
+ *
344
+ * @param params.url 按 URL 过滤。
345
+ * @param params.domain 按域名过滤。
346
+ * @param params.name 按名称过滤。
347
+ * @returns {cookies} cookie 列表。
348
+ * @throws 浏览器扩展未连接或调用超时时抛错。
349
+ */
181
350
  getAll: (params?: {
182
351
  url?: string;
183
352
  domain?: string;
@@ -187,6 +356,18 @@ export default class SystemBrowser {
187
356
  }>;
188
357
  };
189
358
  http: {
359
+ /**
360
+ * 在浏览器扩展上下文里发 HTTP 请求(自动复用浏览器登录态/cookie)。
361
+ *
362
+ * @param params.url 目标 URL。
363
+ * @param params.method HTTP 方法,默认 GET。
364
+ * @param params.headers 自定义请求头。
365
+ * @param params.body 请求体。
366
+ * @param params.credentials Cookie 策略:include、same-origin 或 omit,默认 include。
367
+ * @param params.timeoutMs 超时毫秒,默认 30000。
368
+ * @returns {status, statusText, ok, url, redirected, headers, body} HTTP 响应。
369
+ * @throws 浏览器扩展未连接或调用超时时抛错。
370
+ */
190
371
  fetch: (params: {
191
372
  url: string;
192
373
  method?: string;
@@ -197,20 +378,49 @@ export default class SystemBrowser {
197
378
  }) => Promise<SystemBrowserHttpResponse>;
198
379
  };
199
380
  bookmarks: {
381
+ /**
382
+ * 取完整书签树。
383
+ *
384
+ * @param params.browser 浏览器种类(chrome/edge),不传走默认浏览器。
385
+ * @returns {tree} 书签树(嵌套结构,children 为子节点)。
386
+ * @throws 浏览器扩展未连接或调用超时时抛错。
387
+ */
200
388
  tree: (params?: {
201
389
  browser?: SystemBrowserKind;
202
390
  }) => Promise<{
203
391
  tree: SystemBrowserBookmark[];
204
392
  }>;
393
+ /**
394
+ * 列出某个书签文件夹的直接子项。
395
+ *
396
+ * @param params.parentId 父文件夹 ID。
397
+ * @param params.browser 浏览器种类(chrome/edge),不传走默认浏览器。
398
+ * @returns {items} 书签列表。
399
+ * @throws 浏览器扩展未连接或调用超时时抛错。
400
+ */
205
401
  list: (params?: {
206
402
  parentId?: string;
207
403
  browser?: SystemBrowserKind;
208
404
  }) => Promise<{
209
405
  items: SystemBrowserBookmark[];
210
406
  }>;
407
+ /**
408
+ * 按 id 取单个书签节点。
409
+ *
410
+ * @param id 书签 ID。
411
+ * @returns {item} 书签节点(不存在为 null)。
412
+ * @throws 浏览器扩展未连接或调用超时时抛错。
413
+ */
211
414
  get: (id: string) => Promise<{
212
415
  item: SystemBrowserBookmark | null;
213
416
  }>;
417
+ /**
418
+ * 搜索书签。
419
+ *
420
+ * @param query 关键词字符串,或 {query, url, title, browser} 条件对象(browser 字段可指定浏览器)。
421
+ * @returns {items} 搜索结果列表。
422
+ * @throws 浏览器扩展未连接或调用超时时抛错。
423
+ */
214
424
  search: (query: string | {
215
425
  query?: string;
216
426
  url?: string;
@@ -219,6 +429,16 @@ export default class SystemBrowser {
219
429
  }) => Promise<{
220
430
  items: SystemBrowserBookmark[];
221
431
  }>;
432
+ /**
433
+ * 在浏览器中创建一个书签或文件夹。不传 url 则创建的是文件夹。
434
+ *
435
+ * @param params.parentId 父文件夹 ID;省略则创建在"其他书签"根目录。
436
+ * @param params.title 书签/文件夹标题;省略则用页面标题或 URL 作为标题。
437
+ * @param params.url 书签指向的 URL;不传则创建文件夹。
438
+ * @param params.index 在父文件夹中的插入位置(0 起始);不传则追加到末尾。
439
+ * @returns 包含新创建书签/文件夹节点的 {item} 对象。
440
+ * @throws 浏览器扩展未连接或调用超时时抛错。
441
+ */
222
442
  create: (params: {
223
443
  parentId?: string;
224
444
  title?: string;
@@ -227,6 +447,15 @@ export default class SystemBrowser {
227
447
  }) => Promise<{
228
448
  item: SystemBrowserBookmark;
229
449
  }>;
450
+ /**
451
+ * 更新指定书签的标题和/或 URL。
452
+ *
453
+ * @param params.id 要更新的书签 ID。
454
+ * @param params.title 新标题;省略则保持原标题不变。
455
+ * @param params.url 新 URL;省略则保持原 URL 不变。
456
+ * @returns 包含更新后书签节点的 {item} 对象。
457
+ * @throws 书签不存在、浏览器扩展未连接或调用超时时抛错。
458
+ */
230
459
  update: (params: {
231
460
  id: string;
232
461
  title?: string;
@@ -234,6 +463,15 @@ export default class SystemBrowser {
234
463
  }) => Promise<{
235
464
  item: SystemBrowserBookmark;
236
465
  }>;
466
+ /**
467
+ * 将书签移动到指定父文件夹的指定位置。
468
+ *
469
+ * @param params.id 要移动的书签 ID。
470
+ * @param params.parentId 目标父文件夹 ID;省略则留在当前文件夹内仅调整位置。
471
+ * @param params.index 目标位置索引(0 起始);省略则追加到文件夹末尾。
472
+ * @returns 包含移动后书签节点的 {item} 对象。
473
+ * @throws 书签不存在、浏览器扩展未连接或调用超时时抛错。
474
+ */
237
475
  move: (params: {
238
476
  id: string;
239
477
  parentId?: string;
@@ -241,7 +479,21 @@ export default class SystemBrowser {
241
479
  }) => Promise<{
242
480
  item: SystemBrowserBookmark;
243
481
  }>;
482
+ /**
483
+ * 删除指定书签或空文件夹。非空文件夹请用 removeTree 递归删除。
484
+ *
485
+ * @param id 要删除的书签或空文件夹的 ID。
486
+ * @returns 无返回。
487
+ * @throws 文件夹非空、书签不存在、浏览器扩展未连接或调用超时时抛错。
488
+ */
244
489
  remove: (id: string) => Promise<void>;
490
+ /**
491
+ * 递归删除指定文件夹及其包含的所有子书签和子文件夹。
492
+ *
493
+ * @param id 要递归删除的文件夹 ID。
494
+ * @returns 无返回。
495
+ * @throws 书签不存在、浏览器扩展未连接或调用超时时抛错。
496
+ */
245
497
  removeTree: (id: string) => Promise<void>;
246
498
  };
247
499
  /**
@@ -2,7 +2,23 @@ import { default as IpcRenderer } from './IpcRenderer';
2
2
  export default class SystemClipboard {
3
3
  private transport;
4
4
  constructor(transport?: IpcRenderer);
5
+ /**
6
+ * 读取系统剪贴板当前内容,按 text → image → fileName → fileUrl 顺序依次探测,返回第一个命中的结果或 null。
7
+ *
8
+ * @returns 剪贴板数据对象 `{type, content}`;图片以 dataURL 字符串返回;无任何内容时返回 null。
9
+ */
5
10
  read: () => Promise<any>;
11
+ /**
12
+ * 将内容写入系统剪贴板。content 为空时不做任何操作。
13
+ *
14
+ * @param content 剪贴板数据对象 `{type, content}`,type 支持 `text` / `image` / `fileName`。
15
+ * @returns 无返回
16
+ */
6
17
  write: (content: any) => Promise<any>;
18
+ /**
19
+ * 清空系统剪贴板全部内容。
20
+ *
21
+ * @returns 无返回
22
+ */
7
23
  clear: () => Promise<any>;
8
24
  }
@@ -2,6 +2,18 @@ import { default as IpcRenderer } from './IpcRenderer';
2
2
  export default class SystemKeyboard {
3
3
  private transport;
4
4
  constructor(transport?: IpcRenderer);
5
+ /**
6
+ * 向当前前台窗口焦点处合成键入文本,走 Unicode 注入,绕过键盘布局与输入法,CJK/emoji 可直接输入。
7
+ *
8
+ * @param text 要键入的文本字符串。
9
+ * @returns 无返回
10
+ */
5
11
  type: (text: string) => Promise<any>;
12
+ /**
13
+ * 抓取当前选区内容。优先用系统无障碍接口直读焦点元素选区(不动剪贴板);
14
+ * 直读拿不到时兜底:暂存原剪贴板 → 模拟复制键 → 轮询读取新内容 → 还原原剪贴板。
15
+ *
16
+ * @returns 选区内容对象 {type, content},type 为 text/image/fileName/fileUrl 之一;无内容时返回 null。
17
+ */
6
18
  copy: () => Promise<any>;
7
19
  }
@@ -3,11 +3,58 @@ import { Point } from '@computer-use/nut-js';
3
3
  export default class SystemMouse {
4
4
  private transport;
5
5
  constructor(transport?: IpcRenderer);
6
+ /**
7
+ * 通过 OCR 文字识别在屏幕上定位指定文本,将鼠标移至其中心并左键单击一次。
8
+ *
9
+ * @param text 要查找的文本内容,由底层 OCR 引擎在屏幕上逐词匹配。
10
+ * @param providerData 透传给 OCR 识别器的可选附加数据(如语言、区域等)。
11
+ * @returns 操作完成后兑现的 Promise。
12
+ * @throws 屏幕上未找到指定文本时抛错。
13
+ */
6
14
  clickText: (text: string) => Promise<any>;
15
+ /**
16
+ * 将 base64 图像作为模板在屏幕上等待匹配,定位后左键单击其中心。
17
+ * 若 base64String 为空则直接返回,不执行任何操作。
18
+ *
19
+ * @param base64String 截图模板的 base64 编码字符串,可选 data URI 前缀。
20
+ * @returns 操作完成后兑现的 Promise;base64String 为空时返回 undefined。
21
+ * @throws 屏幕上等待超时仍未匹配到图像时抛错。
22
+ */
7
23
  click: (base64String: string) => Promise<any>;
24
+ /**
25
+ * 在指定屏幕坐标处左键单击一次。
26
+ *
27
+ * @param point 屏幕坐标 `{x, y}`,原点为屏幕左上角。
28
+ * @returns 操作完成后兑现的 Promise。
29
+ */
8
30
  clickAt: (point: Point) => Promise<any>;
31
+ /**
32
+ * 将 base64 图像作为模板在屏幕上等待匹配,定位后将鼠标移至其中心,不点击。
33
+ *
34
+ * @param base64String 截图模板的 base64 编码字符串,可选 data URI 前缀。
35
+ * @returns 操作完成后兑现的 Promise。
36
+ * @throws 屏幕上等待超时仍未匹配到图像时抛错。
37
+ */
9
38
  move: (base64String: string) => Promise<any>;
39
+ /**
40
+ * 将鼠标移至指定屏幕坐标,不点击。
41
+ *
42
+ * @param point 屏幕坐标 `{x, y}`,原点为屏幕左上角。
43
+ * @returns 操作完成后兑现的 Promise。
44
+ */
10
45
  moveTo: (point: Point) => Promise<any>;
46
+ /**
47
+ * 在指定屏幕坐标处左键双击。
48
+ *
49
+ * @param point 屏幕坐标 `{x, y}`,原点为屏幕左上角。
50
+ * @returns 操作完成后兑现的 Promise。
51
+ */
11
52
  doubleClickAt: (point: Point) => Promise<any>;
53
+ /**
54
+ * 在指定屏幕坐标处右键单击一次。
55
+ *
56
+ * @param point 屏幕坐标 `{x, y}`,原点为屏幕左上角。
57
+ * @returns 操作完成后兑现的 Promise。
58
+ */
12
59
  rightClickAt: (point: Point) => Promise<any>;
13
60
  }
@@ -10,8 +10,30 @@ export interface SystemNotificationOptions {
10
10
  export default class SystemNotification {
11
11
  private transport;
12
12
  constructor(transport?: IpcRenderer);
13
+ /**
14
+ * 检测当前平台是否支持系统原生通知。
15
+ *
16
+ * @returns 支持返回 true,不支持返回 false。
17
+ */
13
18
  isSupported: () => Promise<boolean>;
19
+ /**
20
+ * 显示一条系统原生通知,并向调用方 webContents 推送后续的点击/关闭事件。
21
+ *
22
+ * 平台不支持时静默返回 null,不抛错。
23
+ * 通知被点击时向调用方 webContents 发送 "notification.clicked",
24
+ * 被关闭时发送 "notification.closed",参数均为该通知 id。
25
+ * 同时也会在主进程事件总线上发布同名事件供其他组件订阅。
26
+ *
27
+ * @param options 通知配置:title 必填;body/silent/subtitle 可选(subtitle 仅 macOS 生效)。
28
+ * @returns 通知 id(UUID 字符串);平台不支持通知时返回 null。
29
+ */
14
30
  show: (options: SystemNotificationOptions) => Promise<string | null>;
31
+ /**
32
+ * 按 id 关闭一条已显示的系统通知。
33
+ *
34
+ * @param id 通知 id(由 show 方法返回的 UUID 字符串)。
35
+ * @returns 命中并成功关闭返回 true;对应 id 不存在返回 false。
36
+ */
15
37
  close: (id: string) => Promise<boolean>;
16
38
  onClicked: (handler: (id: string) => void) => Promise<Electron.IpcRenderer>;
17
39
  onClosed: (handler: (id: string) => void) => Promise<Electron.IpcRenderer>;
@@ -2,5 +2,12 @@ import { default as IpcRenderer } from './IpcRenderer';
2
2
  export default class SystemOCR {
3
3
  private transport;
4
4
  constructor(transport?: IpcRenderer);
5
+ /**
6
+ * 调用本地 OCR 引擎识别图片并返回文本块数组。
7
+ *
8
+ * @param base64String Base64 编码的图片数据。
9
+ * @returns 文本块数组。
10
+ * @throws 图片解码失败或 OCR 引擎未就绪时抛错。
11
+ */
5
12
  recognize: (base64String: string) => Promise<any>;
6
13
  }
@@ -3,12 +3,69 @@ import { Point } from '@computer-use/nut-js';
3
3
  export default class SystemScreen {
4
4
  private transport;
5
5
  constructor(transport?: IpcRenderer);
6
+ /**
7
+ * 冻结光标所在显示器的截图底图,收集该屏上的窗口分数矩形与光标 CSS 坐标,打包为采集场景数据。
8
+ * 纯数据通道,不显示浮层;插件拿到数据后自行渲染全屏浮层,底图中不会包含浮层自身。
9
+ * 若当前已有进行中的采集会话且存在已冻结场景,直接复用上次场景(避免把当前浮层抓进新底图)。
10
+ *
11
+ * @returns 采集场景数据 `CaptureSource`,含底图 Data URL (`image`)、屏幕边界 (`bounds`)、
12
+ * 窗口分数矩形列表 (`windows`,各矩形以屏幕宽高归一化为 0~1 浮点数)、
13
+ * 光标在该屏内的 CSS 坐标 (`cursor`);截图失败时返回 null。
14
+ */
6
15
  captureScene: () => Promise<any>;
16
+ /**
17
+ * 截取指定显示器(或光标所在显示器)的完整画面,返回 Data URL。
18
+ * 截图尺寸按物理像素(display.size × scaleFactor),保证 retina/高分屏清晰度。
19
+ *
20
+ * @param displayId 目标显示器 id;省略则截取光标当前所在的显示器。
21
+ * @returns 截图的 JPEG Data URL;未找到显示器或截图源时返回 null。
22
+ */
7
23
  captureDisplay: (displayId?: number) => Promise<any>;
24
+ /**
25
+ * 列出当前所有显示器信息,包含 id、逻辑像素边界、缩放因子、是否主屏。
26
+ *
27
+ * @returns 显示器信息数组 `DisplayInfo[]`,每项含 `id`、`bounds`、`scaleFactor`、`primary`。
28
+ */
8
29
  listDisplays: () => Promise<any>;
30
+ /**
31
+ * 获取当前鼠标光标在屏幕原生坐标系中的位置。
32
+ *
33
+ * @returns 光标坐标 `{x, y}`,原点为所有显示器拼接后的左上角。
34
+ */
9
35
  getCursorPoint: () => Promise<any>;
36
+ /**
37
+ * 在当前屏幕中查找与给定模板图片匹配的区域,返回匹配区域中心坐标。
38
+ * 使用 nut-js 图像匹配引擎在屏幕中搜索模板。
39
+ *
40
+ * @param base64String 模板图片的 Base64 编码字符串(支持 `data:image/...;base64,` 前缀)。
41
+ * @returns 匹配区域中心在屏幕原生坐标系中的坐标 `{x, y}`。
42
+ * @throws 未找到匹配区域时抛错。
43
+ */
10
44
  find: (base64String: string) => Promise<any>;
45
+ /**
46
+ * 持续监视屏幕,等待指定模板图片出现后返回其中心坐标。
47
+ * 会阻塞直到匹配成功或 nut-js 内部超时。推送而非直接返回 —— 匹配成功前调用方一直挂起。
48
+ *
49
+ * @param base64String 模板图片的 Base64 编码字符串(支持 `data:image/...;base64,` 前缀)。
50
+ * @returns 匹配区域中心在屏幕原生坐标系中的坐标 `{x, y}`。
51
+ * @throws 超时仍未匹配到图片时抛错。
52
+ */
11
53
  waitFor: (base64String: any) => Promise<any>;
54
+ /**
55
+ * 持续监视屏幕,等待指定文字出现后返回其中心坐标。
56
+ * 通过 OCR 识别屏幕文字后匹配,会阻塞直到匹配成功或超时。推送而非直接返回。
57
+ *
58
+ * @param text 要查找的目标文字(支持 OCR 识别的自然语言)。
59
+ * @param providerData 可选的 provider 特定搜索参数,如限定 OCR 识别区域。
60
+ * @returns 匹配文字区域中心在屏幕原生坐标系中的坐标 `{x, y}`。
61
+ * @throws 超时仍未匹配到文字时抛错。
62
+ */
12
63
  waitForText: (text: string) => Promise<any>;
64
+ /**
65
+ * 读取屏幕上指定坐标点的像素颜色(RGBA)。
66
+ *
67
+ * @param point 屏幕原生坐标系中的坐标 `{x, y}`。
68
+ * @returns 该点的 RGBA 颜色值 `{R, G, B, A}`,各通道 0–255。
69
+ */
13
70
  colorAt: (point: Point) => Promise<any>;
14
71
  }
@@ -2,10 +2,39 @@ import { default as IpcRenderer } from './IpcRenderer';
2
2
  export default class SystemSetting {
3
3
  private transport;
4
4
  constructor(transport?: IpcRenderer);
5
+ /**
6
+ * 获取合并后的全部系统设置键值表。合并顺序:打包默认(DEFAULT_SETTINGS) → 文件(开发环境 settings.local.json,生产环境 ~/.solazah/settings.json) → 数据库;
7
+ * 开发环境中文件覆盖数据库,生产环境中数据库覆盖文件,保证用户运行时的改动优先。
8
+ *
9
+ * @returns 合并后的设置键值表,键为设置 key、值为对应值。
10
+ * @throws 数据库读取或文件 I/O 失败时抛错。
11
+ */
5
12
  getSettings: () => Promise<any>;
13
+ /**
14
+ * 按 key 取单个设置项的值。从 getSettings 合并后的设置表中查找,未命中返回 undefined。
15
+ *
16
+ * @param key 设置项的键名,如 `system.theme`、`system.autoStart`。
17
+ * @returns 该 key 对应的值;key 不存在时返回 undefined。
18
+ * @throws 数据库读取或文件 I/O 失败时抛错。
19
+ */
6
20
  getSettingValue: (key: string) => Promise<any>;
21
+ /**
22
+ * 批量保存多个设置项。逐条写入数据库(已有同 key 记录则更新、无则新建),每条落库后广播 {@link SystemSettingChangedEvent},
23
+ * 使开机自启/主题/浏览器/copilot 等监听者即时应用变更。
24
+ *
25
+ * @param values 键值对对象,键为设置 key、值为要保存的值。各条 enabled 默认 true,除非显式传 false。
26
+ * @returns 无返回
27
+ * @throws 数据库写入失败时抛错(已成功写入的条目不会回滚)。
28
+ */
7
29
  saveSettings: (values: {
8
30
  [x: string]: any;
9
31
  }) => Promise<any>;
32
+ /**
33
+ * 保存单个设置项。数据库已有同 key 记录则更新、无则新建,落库后广播 {@link SystemSettingChangedEvent}。
34
+ *
35
+ * @param settingInput 包含 `key`(设置键名)、`value`(设置值)、`enabled`(是否启用,可选;undefined 或 truthy 视为 true,仅显式传 false 才禁用)的对象。
36
+ * @returns 无返回
37
+ * @throws 数据库写入失败时抛错。
38
+ */
10
39
  saveSetting: (settingInput: any) => Promise<any>;
11
40
  }