cicy-desktop 2.1.237 → 2.1.239
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/package.json +9 -16
- package/src/sidecar/cicy-code.js +32 -9
- package/src/sidecar/container-scripts/cicy-code-update.sh +6 -1
- package/src/sidecar/host-mihomo.js +40 -10
- package/src/sidecar/runtime.js +144 -64
- package/src/tabbrowser/tab-shell.html +5 -1
- package/.kiro/steering/dev-workflow.md +0 -166
- package/AGENTS.md +0 -275
- package/CLAUDE_HANDOFF.md +0 -168
- package/DESIGN.md +0 -66
- package/DOCKER.md +0 -85
- package/Dockerfile +0 -46
- package/TODO-anti-detection.md +0 -326
- package/copy-to-desktop.sh +0 -26
- package/docs/AUTOMATION-API.md +0 -342
- package/docs/REQUEST_MONITORING.md +0 -435
- package/docs/REST-API-FEATURE.md +0 -155
- package/docs/REST-API.md +0 -276
- package/docs/backend-selector-design.md +0 -204
- package/docs/chrome-proxy.md +0 -142
- package/docs/cicy-desktop-current-execution-bridge.md +0 -509
- package/docs/feature-distributed-multi-agent.md +0 -555
- package/docs/worklog-2026-03-27.md +0 -108
- package/docs/yaml.md +0 -255
- package/generate-openapi.js +0 -162
- package/jest.config.js +0 -13
- package/jest.setup.global.js +0 -16
- package/jest.teardown.global.js +0 -10
- package/service.sh +0 -164
- package/update-desktop.sh +0 -33
|
@@ -1,509 +0,0 @@
|
|
|
1
|
-
# CiCy Desktop 当前执行桥接架构说明
|
|
2
|
-
|
|
3
|
-
## 一句话结论
|
|
4
|
-
|
|
5
|
-
`cicy-desktop` 现在已经不是一个简单的 Electron 壳子,而是一个已经可工作的本地自动化执行节点:
|
|
6
|
-
|
|
7
|
-
- 它已经有本地认证
|
|
8
|
-
- 已经有 REST RPC / MCP SSE 服务
|
|
9
|
-
- 已经有工具注册中心
|
|
10
|
-
- 已经有 BrowserWindow / 账户隔离
|
|
11
|
-
- 已经有 Chrome CDP 控制
|
|
12
|
-
- 已经有页面 JS 执行和部分页面注入
|
|
13
|
-
- 已经有系统窗口控制能力
|
|
14
|
-
|
|
15
|
-
但它现在**还没有真正打通云端 worker agent 调度链路**。也就是说,`Desktop 本地执行能力` 已经有了,缺的是 `云端任务下发 / 回传 / 心跳 / 状态机` 这一层。
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 1. 当前代码里已经存在的核心能力
|
|
20
|
-
|
|
21
|
-
### 1.1 本地 Desktop Daemon 已存在
|
|
22
|
-
|
|
23
|
-
`src/main.js` 已经启动了一个本地服务进程,而不是只打开一个 Electron 窗口。
|
|
24
|
-
|
|
25
|
-
它现在提供:
|
|
26
|
-
|
|
27
|
-
- `GET /mcp` + `POST /messages`:MCP SSE 通道
|
|
28
|
-
- `POST /rpc/tools/call`:统一 RPC 调用入口
|
|
29
|
-
- `GET /rpc/tools`:工具列表
|
|
30
|
-
- `POST /rpc/<tool>`:每个工具的直接调用入口
|
|
31
|
-
- `POST /rpc/upload/*`:上传文件
|
|
32
|
-
- `POST /rpc/exec/:type`:远程提交脚本执行
|
|
33
|
-
|
|
34
|
-
所以从架构上说,`cicy-desktop` 现在已经具备“本地 agent server”形态。
|
|
35
|
-
|
|
36
|
-
### 1.2 本地鉴权已存在
|
|
37
|
-
|
|
38
|
-
`src/utils/auth.js` 已实现:
|
|
39
|
-
|
|
40
|
-
- 从 `~/global.json` 读取 `api_token`
|
|
41
|
-
- 不存在时自动生成
|
|
42
|
-
- 支持 `Bearer` 和 `Basic Auth`
|
|
43
|
-
|
|
44
|
-
这说明它已经能作为受保护的本地 worker 服务存在。
|
|
45
|
-
|
|
46
|
-
### 1.3 工具注册中心已存在
|
|
47
|
-
|
|
48
|
-
`src/tools/index.js` + `src/main.js` 已经形成统一工具注册机制。
|
|
49
|
-
|
|
50
|
-
现在工具并不是散的,而是统一挂在 tool registry 下,外部和内部最终都走同一套 handler:
|
|
51
|
-
|
|
52
|
-
- window tools
|
|
53
|
-
- cdp tools
|
|
54
|
-
- exec js
|
|
55
|
-
- automation tools
|
|
56
|
-
- system tools
|
|
57
|
-
- account tools
|
|
58
|
-
- clipboard tools
|
|
59
|
-
- download tools
|
|
60
|
-
- hook tools
|
|
61
|
-
|
|
62
|
-
这点很关键,因为后面无论你是走 HTTP、MCP、IPC,最终都可以复用这一层,不需要重写执行器。
|
|
63
|
-
|
|
64
|
-
### 1.4 BrowserWindow + 账户隔离已存在
|
|
65
|
-
|
|
66
|
-
`src/utils/window-utils.js` 已经做了:
|
|
67
|
-
|
|
68
|
-
- `partition: persist:sandbox-${accountIdx}`
|
|
69
|
-
- 多账户 Cookie / Storage 隔离
|
|
70
|
-
- 单窗口复用模式
|
|
71
|
-
- URL 级窗口状态恢复
|
|
72
|
-
- 每个窗口自动挂 debugger
|
|
73
|
-
- 代理设置
|
|
74
|
-
- 权限处理
|
|
75
|
-
|
|
76
|
-
这意味着“一个桌面节点服务多个账户 / 多个 worker 页面”的基础已经有了。
|
|
77
|
-
|
|
78
|
-
### 1.5 Chrome CDP 控制已存在
|
|
79
|
-
|
|
80
|
-
`src/main.js` 设置了:
|
|
81
|
-
|
|
82
|
-
- `remote-debugging-port = 9221`
|
|
83
|
-
|
|
84
|
-
`src/utils/cdp-utils.js` 和 `src/tools/cdp-tools.js` 已经做了:
|
|
85
|
-
|
|
86
|
-
- `webContents.debugger.attach("1.3")`
|
|
87
|
-
- `webContents.debugger.sendCommand(...)`
|
|
88
|
-
- 鼠标点击/双击
|
|
89
|
-
- 键盘按键
|
|
90
|
-
- 文本输入
|
|
91
|
-
- 滚动
|
|
92
|
-
- 任意 CDP command
|
|
93
|
-
|
|
94
|
-
所以你现在真正可依赖的主执行层,确实应该是 `Chrome CDP`。
|
|
95
|
-
|
|
96
|
-
### 1.6 页面执行层已存在
|
|
97
|
-
|
|
98
|
-
`src/tools/exec-js.js` 和 `src/tools/automation-tools.js` 已经提供:
|
|
99
|
-
|
|
100
|
-
- `exec_js`
|
|
101
|
-
- `exec_js_file`
|
|
102
|
-
- `electron_click`
|
|
103
|
-
- `electron_type`
|
|
104
|
-
- `electron_wait_for`
|
|
105
|
-
- `electron_evaluate`
|
|
106
|
-
- 读取页面内容/属性
|
|
107
|
-
|
|
108
|
-
这层适合补 DOM 级逻辑,或者做站点定制化流程。
|
|
109
|
-
|
|
110
|
-
### 1.7 系统层能力已存在
|
|
111
|
-
|
|
112
|
-
`src/tools/system-tools.js` 已经做了:
|
|
113
|
-
|
|
114
|
-
- 枚举系统窗口
|
|
115
|
-
- 聚焦窗口
|
|
116
|
-
- 读取系统信息
|
|
117
|
-
- 系统截图
|
|
118
|
-
- Linux 下通过 `wmctrl` / `xdotool` 做系统窗口控制
|
|
119
|
-
|
|
120
|
-
这说明 `cicy-desktop` 已经不只是“浏览器自动化”,而是“浏览器优先、桌面兜底”的本地执行桥。
|
|
121
|
-
|
|
122
|
-
### 1.8 页面注入与站点 Hook 能力已存在
|
|
123
|
-
|
|
124
|
-
`src/utils/window-utils.js` 会在 `dom-ready` 后:
|
|
125
|
-
|
|
126
|
-
- 为受信任页面注入 `window.electronRPC`
|
|
127
|
-
- 为每个域名加载 `~/data/electron/extension/inject/<domain>.js`
|
|
128
|
-
- 默认脚本来自 `src/extension/inject.js`
|
|
129
|
-
|
|
130
|
-
另外 `src/tools/hook-chatgpt.js`、`src/tools/hook-gemini.js` 已经证明:
|
|
131
|
-
|
|
132
|
-
- 可以做站点专属 hook
|
|
133
|
-
- 可以读 IndexedDB
|
|
134
|
-
- 可以走剪贴板桥接
|
|
135
|
-
- 可以在指定页面做定制增强
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 2. 当前真实可用的执行链路
|
|
140
|
-
|
|
141
|
-
### 2.1 外部控制面 -> Desktop
|
|
142
|
-
|
|
143
|
-
这是当前已经成立的链路:
|
|
144
|
-
|
|
145
|
-
```text
|
|
146
|
-
Remote Controller / CLI / Agent
|
|
147
|
-
-> HTTP RPC or MCP SSE
|
|
148
|
-
-> cicy-desktop local server
|
|
149
|
-
-> tool registry
|
|
150
|
-
-> tool handler
|
|
151
|
-
-> BrowserWindow / CDP / system command
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
这是目前最稳的链路。
|
|
155
|
-
|
|
156
|
-
### 2.2 页面内 JS -> Electron IPC -> Tool Registry
|
|
157
|
-
|
|
158
|
-
当前代码也已经部分成立这条链:
|
|
159
|
-
|
|
160
|
-
```text
|
|
161
|
-
Page JS
|
|
162
|
-
-> window.electronRPC(...) / window._g.rpc(...)
|
|
163
|
-
-> ipcRenderer.invoke("rpc", toolName, args)
|
|
164
|
-
-> ipcMain.handle("rpc", ...)
|
|
165
|
-
-> tool registry
|
|
166
|
-
-> tool handler
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
这条链在 `src/main.js` 的 `ipcMain.handle("rpc")` 已经做通了。
|
|
170
|
-
|
|
171
|
-
### 2.3 Tool -> Chrome CDP
|
|
172
|
-
|
|
173
|
-
当前核心浏览器执行链:
|
|
174
|
-
|
|
175
|
-
```text
|
|
176
|
-
tool handler
|
|
177
|
-
-> sendCDP(...)
|
|
178
|
-
-> webContents.debugger.sendCommand(...)
|
|
179
|
-
-> Chromium
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
这条链现在是最应该作为虚拟员工主执行层的能力。
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
|
|
186
|
-
## 3. 一个非常关键的现实边界
|
|
187
|
-
|
|
188
|
-
### 3.1 `preload-rpc.js` 存在,但当前没有接到 BrowserWindow
|
|
189
|
-
|
|
190
|
-
仓库里有:
|
|
191
|
-
|
|
192
|
-
- `src/preload-rpc.js`
|
|
193
|
-
|
|
194
|
-
它暴露了:
|
|
195
|
-
|
|
196
|
-
- `window.electronRPC.invoke(...)`
|
|
197
|
-
|
|
198
|
-
但是当前 `createWindow()` 里**没有把这个 preload 挂进 `webPreferences.preload`**。
|
|
199
|
-
|
|
200
|
-
这意味着:
|
|
201
|
-
|
|
202
|
-
- 这个 preload bridge 文件是存在的
|
|
203
|
-
- 但当前不是主链路
|
|
204
|
-
- 当前真正生效的是运行时注入,而不是稳定 preload
|
|
205
|
-
|
|
206
|
-
### 3.2 当前 `window.electronRPC` 不是对所有站点都稳定可用
|
|
207
|
-
|
|
208
|
-
`src/utils/window-utils.js` 当前策略是:
|
|
209
|
-
|
|
210
|
-
- 受信任 URL:`localhost` 或 `*.de5.net`
|
|
211
|
-
- 这些页面会启用 `nodeIntegration`
|
|
212
|
-
- 并额外注入 `window.electronRPC`
|
|
213
|
-
|
|
214
|
-
对于普通公网站点:
|
|
215
|
-
|
|
216
|
-
- `nodeIntegration` 默认是关的
|
|
217
|
-
- `contextIsolation` 默认是开的
|
|
218
|
-
- `src/extension/inject.js` 里 `require("electron")` 很可能拿不到
|
|
219
|
-
|
|
220
|
-
也就是说:
|
|
221
|
-
|
|
222
|
-
- 对任意公网网站,`页面自己调用 ipcRenderer` 这件事目前**不是稳定能力**
|
|
223
|
-
- 现在最稳的是:`主进程/工具层直接控制页面`
|
|
224
|
-
- 如果要走你说的 `ws -> client js -> electron ipcRenderer -> rpc`,需要先把 preload 这层正式接上
|
|
225
|
-
|
|
226
|
-
这个点很重要,不然会把“某些域名能用的注入”误判成“所有页面都能稳定走 renderer bridge”。
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
## 4. 当前没有真正落地的部分
|
|
231
|
-
|
|
232
|
-
我直接按代码说结论。
|
|
233
|
-
|
|
234
|
-
### 4.1 没找到真实的云端 worker 调度实现
|
|
235
|
-
|
|
236
|
-
我在 `src/` 里没有找到已落地的:
|
|
237
|
-
|
|
238
|
-
- WebSocket 长连接 worker client
|
|
239
|
-
- 向 master 注册 worker
|
|
240
|
-
- 心跳上报
|
|
241
|
-
- 任务拉取 / ACK / 重试
|
|
242
|
-
- 任务状态机
|
|
243
|
-
- 云端 agent session 绑定
|
|
244
|
-
|
|
245
|
-
### 4.2 `feature-distributed-multi-agent.md` 目前是设计稿,不是现状
|
|
246
|
-
|
|
247
|
-
`docs/feature-distributed-multi-agent.md` 里写了:
|
|
248
|
-
|
|
249
|
-
- master node
|
|
250
|
-
- worker node
|
|
251
|
-
- Redis
|
|
252
|
-
- Bull
|
|
253
|
-
- 心跳
|
|
254
|
-
- 调度
|
|
255
|
-
- 任务队列
|
|
256
|
-
|
|
257
|
-
但从当前 `src/` 代码来看,这些还没有真正落地。
|
|
258
|
-
|
|
259
|
-
所以这份文档应该被视为:
|
|
260
|
-
|
|
261
|
-
- 方向设计稿
|
|
262
|
-
- 不是当前已完成实现
|
|
263
|
-
|
|
264
|
-
### 4.3 当前没有云端到本地的“常驻任务循环”
|
|
265
|
-
|
|
266
|
-
现在 `cicy-desktop` 更像是:
|
|
267
|
-
|
|
268
|
-
- 一个被动等待调用的本地执行服务
|
|
269
|
-
|
|
270
|
-
而不是:
|
|
271
|
-
|
|
272
|
-
- 一个主动连接云端、持续领取任务、持续回传结果的 worker client
|
|
273
|
-
|
|
274
|
-
这就是“能力有了,但没打通”的核心原因。
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## 5. 结合当前代码,Desktop 在整个虚拟员工系统中的正确角色
|
|
279
|
-
|
|
280
|
-
你前面说得对,应该定成下面这个角色:
|
|
281
|
-
|
|
282
|
-
### 5.1 Chrome CDP 是主执行层
|
|
283
|
-
|
|
284
|
-
真正干活的主能力应该是:
|
|
285
|
-
|
|
286
|
-
- 页面打开
|
|
287
|
-
- 元素交互
|
|
288
|
-
- 输入
|
|
289
|
-
- 滚动
|
|
290
|
-
- 网络监听
|
|
291
|
-
- 页面状态读取
|
|
292
|
-
|
|
293
|
-
这些都应该优先走:
|
|
294
|
-
|
|
295
|
-
- `webContents.debugger.sendCommand`
|
|
296
|
-
- `executeJavaScript`
|
|
297
|
-
|
|
298
|
-
也就是 `CDP first, DOM/JS second`。
|
|
299
|
-
|
|
300
|
-
### 5.2 Electron Desktop 是本地特权桥
|
|
301
|
-
|
|
302
|
-
Desktop 的职责不应该定义成“大脑”,而应该定义成:
|
|
303
|
-
|
|
304
|
-
- 本地 worker 宿主
|
|
305
|
-
- 本地认证和安全边界
|
|
306
|
-
- Chromium / BrowserWindow 宿主
|
|
307
|
-
- CDP 和系统能力桥
|
|
308
|
-
- 多账户和本地缓存宿主
|
|
309
|
-
- 必要时的系统级兜底执行器
|
|
310
|
-
|
|
311
|
-
### 5.3 页面内 client JS 只能是补充层,不该是唯一主链路
|
|
312
|
-
|
|
313
|
-
页面 JS 适合做:
|
|
314
|
-
|
|
315
|
-
- 某站点 DOM helper
|
|
316
|
-
- 某站点页面内状态抽取
|
|
317
|
-
- 某站点 IndexedDB 读取
|
|
318
|
-
- 某站点专用组件点击和观察
|
|
319
|
-
|
|
320
|
-
页面 JS 不适合单独承担:
|
|
321
|
-
|
|
322
|
-
- 全局任务调度
|
|
323
|
-
- 可靠心跳
|
|
324
|
-
- 跨站统一 agent runtime
|
|
325
|
-
|
|
326
|
-
因为页面会跳转、站点脚本会变、权限模型也不稳定。
|
|
327
|
-
|
|
328
|
-
---
|
|
329
|
-
|
|
330
|
-
## 6. 基于现有代码,最小打通方案
|
|
331
|
-
|
|
332
|
-
这里不写空想,只写最贴近当前代码的最短路径。
|
|
333
|
-
|
|
334
|
-
### 方案 A:推荐方案
|
|
335
|
-
|
|
336
|
-
```text
|
|
337
|
-
Cloud Agent / Scheduler
|
|
338
|
-
-> WebSocket / SSE / HTTP task stream
|
|
339
|
-
-> cicy-desktop main process worker client
|
|
340
|
-
-> tool registry
|
|
341
|
-
-> CDP / JS / system tools
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
这个方案的特点:
|
|
345
|
-
|
|
346
|
-
- 不依赖页面是否支持 `ipcRenderer`
|
|
347
|
-
- 不依赖特定域名注入
|
|
348
|
-
- 直接复用现在的 tool registry
|
|
349
|
-
- 结构最稳
|
|
350
|
-
|
|
351
|
-
这个方案下,Electron renderer 只是浏览器页面本身,不承担云端调度职责。
|
|
352
|
-
|
|
353
|
-
### 方案 B:按你说的桥接方案来做
|
|
354
|
-
|
|
355
|
-
```text
|
|
356
|
-
Cloud Agent
|
|
357
|
-
-> WS
|
|
358
|
-
-> client js
|
|
359
|
-
-> ipcRenderer
|
|
360
|
-
-> ipcMain.handle("rpc")
|
|
361
|
-
-> tool registry
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
这个方案并非不能做,但要先补齐两个前提:
|
|
365
|
-
|
|
366
|
-
- 把 `src/preload-rpc.js` 正式接到 BrowserWindow
|
|
367
|
-
- 把 WS client 放到 preload / isolated world,而不是普通页面脚本
|
|
368
|
-
|
|
369
|
-
否则现在这种基于页面注入的 `require("electron")`,在公网站点上不稳定。
|
|
370
|
-
|
|
371
|
-
### 我建议的落地方向
|
|
372
|
-
|
|
373
|
-
如果你的目标是“虚拟员工长期稳定打工”,推荐:
|
|
374
|
-
|
|
375
|
-
- 调度链放主进程
|
|
376
|
-
- 页面 hook 只做站点增强
|
|
377
|
-
- preload 只做最薄 IPC 桥
|
|
378
|
-
|
|
379
|
-
这更贴近你现有代码,也更稳。
|
|
380
|
-
|
|
381
|
-
---
|
|
382
|
-
|
|
383
|
-
## 7. 要真正“打通”到 worker agent,还缺什么
|
|
384
|
-
|
|
385
|
-
按现有代码,最少还要补这几块:
|
|
386
|
-
|
|
387
|
-
### 7.1 Worker 身份与注册
|
|
388
|
-
|
|
389
|
-
- worker_id
|
|
390
|
-
- device_id
|
|
391
|
-
- token / secret
|
|
392
|
-
- 当前版本
|
|
393
|
-
- 当前机器资源
|
|
394
|
-
|
|
395
|
-
### 7.2 长连接任务通道
|
|
396
|
-
|
|
397
|
-
- WebSocket 或长轮询
|
|
398
|
-
- 领取任务
|
|
399
|
-
- ACK
|
|
400
|
-
- 心跳
|
|
401
|
-
- cancel
|
|
402
|
-
- reconnect
|
|
403
|
-
|
|
404
|
-
### 7.3 任务执行器
|
|
405
|
-
|
|
406
|
-
把云端任务格式映射到现有 tool registry,例如:
|
|
407
|
-
|
|
408
|
-
- open window
|
|
409
|
-
- wait dom ready
|
|
410
|
-
- cdp click
|
|
411
|
-
- exec js
|
|
412
|
-
- system fallback
|
|
413
|
-
|
|
414
|
-
### 7.4 任务结果与观测
|
|
415
|
-
|
|
416
|
-
- stdout / step log
|
|
417
|
-
- screenshot
|
|
418
|
-
- request log
|
|
419
|
-
- last url / title
|
|
420
|
-
- success / fail
|
|
421
|
-
- retryable / non-retryable
|
|
422
|
-
|
|
423
|
-
### 7.5 账户和窗口复用策略
|
|
424
|
-
|
|
425
|
-
要明确:
|
|
426
|
-
|
|
427
|
-
- 一个任务对应哪个 `accountIdx`
|
|
428
|
-
- 一个 worker 是否复用已有窗口
|
|
429
|
-
- 同站点是否复用 session
|
|
430
|
-
- 哪些任务必须新开隔离窗口
|
|
431
|
-
|
|
432
|
-
### 7.6 稳定的 renderer bridge
|
|
433
|
-
|
|
434
|
-
如果你坚持让 client JS 参与调度,需要:
|
|
435
|
-
|
|
436
|
-
- 正式启用 preload
|
|
437
|
-
- 固定暴露 `window.electronRPC`
|
|
438
|
-
- 不再依赖普通页面里 `require("electron")`
|
|
439
|
-
|
|
440
|
-
---
|
|
441
|
-
|
|
442
|
-
## 8. 现阶段我对这套系统的定稿判断
|
|
443
|
-
|
|
444
|
-
### 已经做成的
|
|
445
|
-
|
|
446
|
-
- Desktop 本地执行节点
|
|
447
|
-
- 本地 RPC/MCP 服务
|
|
448
|
-
- BrowserWindow 多账户隔离
|
|
449
|
-
- CDP 主控能力
|
|
450
|
-
- 页面 JS 执行能力
|
|
451
|
-
- 系统级兜底能力
|
|
452
|
-
- 页面注入与 hook 扩展点
|
|
453
|
-
|
|
454
|
-
### 还没做成的
|
|
455
|
-
|
|
456
|
-
- 云端调度到本地 worker 的真实闭环
|
|
457
|
-
- 稳定的跨站 renderer/preload bridge
|
|
458
|
-
- 任务状态机和结果回传链路
|
|
459
|
-
- 真正的多 worker / 多 agent 分布式运行面
|
|
460
|
-
|
|
461
|
-
### 正确理解
|
|
462
|
-
|
|
463
|
-
现在不是“`cicy-desktop` 没能力”。
|
|
464
|
-
|
|
465
|
-
而是:
|
|
466
|
-
|
|
467
|
-
- `执行器` 已经基本成形
|
|
468
|
-
- `调度层` 还没接上
|
|
469
|
-
|
|
470
|
-
---
|
|
471
|
-
|
|
472
|
-
## 9. 建议你后面把文档和实现统一成下面这句话
|
|
473
|
-
|
|
474
|
-
> `cicy-desktop` 是虚拟员工的本地执行宿主,主执行层使用 Chrome CDP,Electron 负责本地权限桥接、窗口宿主、多账户隔离和系统级兜底;云端调度层后续通过 worker 长连接接入,而不是把 Electron 本身当成调度中心。
|
|
475
|
-
|
|
476
|
-
---
|
|
477
|
-
|
|
478
|
-
## 10. 如果按当前代码继续推进,我建议的实施顺序
|
|
479
|
-
|
|
480
|
-
### 第一阶段
|
|
481
|
-
|
|
482
|
-
- 先补 worker 长连接
|
|
483
|
-
- 先让云端能给 desktop 发 task
|
|
484
|
-
- 直接在 main process 调用现有 tool registry
|
|
485
|
-
|
|
486
|
-
### 第二阶段
|
|
487
|
-
|
|
488
|
-
- 把 `preload-rpc.js` 正式挂上
|
|
489
|
-
- 固化 renderer bridge
|
|
490
|
-
- 把页面内 hook 变成站点增强层
|
|
491
|
-
|
|
492
|
-
### 第三阶段
|
|
493
|
-
|
|
494
|
-
- 再做多 worker / 多 agent / 队列 / 调度
|
|
495
|
-
- 再把 `feature-distributed-multi-agent.md` 里的设计逐步落地
|
|
496
|
-
|
|
497
|
-
---
|
|
498
|
-
|
|
499
|
-
## 11. 当前最重要的非空想结论
|
|
500
|
-
|
|
501
|
-
你现在最该复用的,不是重新发明一个浏览器自动化壳子。
|
|
502
|
-
|
|
503
|
-
你最该做的是:
|
|
504
|
-
|
|
505
|
-
- 承认 `cicy-desktop` 已经是本地执行器
|
|
506
|
-
- 以 `tool registry + CDP + BrowserWindow isolation` 为基础
|
|
507
|
-
- 把云端任务调度接到它上面
|
|
508
|
-
|
|
509
|
-
这才是“结合已经做的继续往前推”,而不是重写一遍。
|