remnote-bridge 0.1.7 → 0.1.8
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/README.md +30 -6
- package/dist/cli/commands/connect.js +31 -2
- package/dist/cli/commands/health.js +111 -1
- package/dist/cli/commands/setup.js +112 -0
- package/dist/cli/daemon/daemon.js +101 -20
- package/dist/cli/daemon/headless-browser.js +291 -0
- package/dist/cli/daemon/static-server.js +84 -0
- package/dist/cli/main.js +22 -6
- package/dist/cli/server/ws-server.js +62 -1
- package/dist/mcp/daemon-client.js +4 -1
- package/dist/mcp/instructions.js +52 -5
- package/dist/mcp/tools/infra-tools.js +39 -9
- package/package.json +5 -1
- package/remnote-plugin/dist/bridge-icon.svg +8 -0
- package/remnote-plugin/dist/bridge_widget-sandbox.js +65 -0
- package/remnote-plugin/dist/bridge_widget.js +65 -0
- package/remnote-plugin/dist/index-sandbox.css +591 -0
- package/remnote-plugin/dist/index-sandbox.js +64 -0
- package/remnote-plugin/dist/index.css +591 -0
- package/remnote-plugin/dist/index.html +9 -0
- package/remnote-plugin/dist/index.js +64 -0
- package/remnote-plugin/dist/manifest.json +22 -0
- package/skills/remnote-bridge/SKILL.md +48 -4
- package/skills/remnote-bridge/instructions/connect.md +40 -10
- package/skills/remnote-bridge/instructions/disconnect.md +1 -1
- package/skills/remnote-bridge/instructions/health.md +67 -1
- package/skills/remnote-bridge/instructions/overall.md +1 -1
- package/skills/remnote-bridge/instructions/setup.md +130 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifestVersion": 1,
|
|
3
|
+
"id": "unofficial_remnote_bridge",
|
|
4
|
+
"name": "Unofficial RemNote Bridge",
|
|
5
|
+
"author": "baobao700508",
|
|
6
|
+
"repoUrl": "https://github.com/baobao700508/unofficial-remnote-bridge-cli",
|
|
7
|
+
"version": {
|
|
8
|
+
"major": 0,
|
|
9
|
+
"minor": 1,
|
|
10
|
+
"patch": 0
|
|
11
|
+
},
|
|
12
|
+
"theme": [],
|
|
13
|
+
"enableOnMobile": false,
|
|
14
|
+
"description": "Unofficial RemNote Bridge 桥接插件:通过 WebSocket 将 RemNote API 暴露给外部 CLI/MCP 调用",
|
|
15
|
+
"requestNative": false,
|
|
16
|
+
"requiredScopes": [
|
|
17
|
+
{
|
|
18
|
+
"type": "All",
|
|
19
|
+
"level": "ReadCreateModifyDelete"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -11,6 +11,7 @@ description: "RemNote 知识库操作指南。通过 remnote-bridge 命令行工
|
|
|
11
11
|
|
|
12
12
|
| 命令 | 文档路径 |
|
|
13
13
|
|:-----|:---------|
|
|
14
|
+
| setup | `instructions/setup.md` |
|
|
14
15
|
| connect | `instructions/connect.md` |
|
|
15
16
|
| disconnect | `instructions/disconnect.md` |
|
|
16
17
|
| health | `instructions/health.md` |
|
|
@@ -246,15 +247,15 @@ Rem 的属性(文本、类型、格式、标签) → edit-rem (前置
|
|
|
246
247
|
|
|
247
248
|
## 3. 标准工作流
|
|
248
249
|
|
|
249
|
-
### ⚠️ connect
|
|
250
|
+
### ⚠️ 标准模式:connect 后需要用户配合
|
|
250
251
|
|
|
251
|
-
`connect` 成功只意味着 daemon 和
|
|
252
|
+
`connect` 成功只意味着 daemon 和 Plugin 服务已启动,**Plugin 并未自动连接**。用户必须在 RemNote 中完成操作,Plugin 才能连接到 daemon:
|
|
252
253
|
|
|
253
254
|
**首次使用**(RemNote 从未加载过此插件):
|
|
254
255
|
1. 打开 RemNote 桌面端或网页端
|
|
255
256
|
2. 点击左侧边栏底部的插件图标(拼图形状)
|
|
256
257
|
3. 点击「开发你的插件」(Develop Your Plugin)
|
|
257
|
-
4. 在输入框中填入 `http://localhost:8080`(即 connect 输出的
|
|
258
|
+
4. 在输入框中填入 `http://localhost:8080`(即 connect 输出的 Plugin 服务地址)
|
|
258
259
|
5. 等待插件加载完成
|
|
259
260
|
|
|
260
261
|
**非首次使用**(之前已加载过此插件):
|
|
@@ -262,7 +263,50 @@ Rem 的属性(文本、类型、格式、标签) → edit-rem (前置
|
|
|
262
263
|
|
|
263
264
|
**你必须**:执行 `connect` 后,**立即告知用户需要完成上述操作**,不要直接调用业务命令。引导用户完成后,用 `health` 确认三层就绪再继续。
|
|
264
265
|
|
|
265
|
-
###
|
|
266
|
+
### Headless 模式:自动连接
|
|
267
|
+
|
|
268
|
+
标准模式每次 connect 后都需要用户手动操作 RemNote。Headless 模式通过 setup(一次性)+ headless Chrome 实现自动连接,后续 connect 无需用户介入。
|
|
269
|
+
|
|
270
|
+
#### 首次使用(setup)
|
|
271
|
+
|
|
272
|
+
setup 会弹出 Chrome 窗口,用户需要完成两件事:
|
|
273
|
+
1. **登录 RemNote**
|
|
274
|
+
2. **配置 dev plugin**:插件图标 → 开发你的插件 → 填入 `http://localhost:8080`
|
|
275
|
+
|
|
276
|
+
完成后**彻底退出 Chrome**(macOS 必须 Cmd+Q,仅关窗口不够)。
|
|
277
|
+
|
|
278
|
+
**Agent 交互方式**:
|
|
279
|
+
```
|
|
280
|
+
1. 调用 setup
|
|
281
|
+
2. 立即告知用户:
|
|
282
|
+
"已打开 Chrome 浏览器。请完成以下操作:
|
|
283
|
+
1. 登录 RemNote
|
|
284
|
+
2. 在 RemNote 中配置开发插件:点击左下角插件图标 → 开发你的插件 → 输入 http://localhost:8080
|
|
285
|
+
3. 完成后彻底退出 Chrome(macOS 请按 Cmd+Q)"
|
|
286
|
+
3. 等待 setup 返回(阻塞,最长 10 分钟)
|
|
287
|
+
4. 成功 → 进入下一步 connect --headless
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
setup 只需执行一次。之后每次连接直接用 `connect --headless`。
|
|
291
|
+
|
|
292
|
+
#### 后续使用(connect --headless)
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
1. connect --headless -- 启动 daemon + headless Chrome 自动加载 RemNote 和 Plugin
|
|
296
|
+
2. health -- 等待三层就绪(Plugin 需要 10-30 秒连接,可多次轮询)
|
|
297
|
+
3. 业务操作
|
|
298
|
+
4. disconnect -- 结束会话
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**无需任何用户操作**——headless Chrome 在后台自动完成登录和 Plugin 加载。
|
|
302
|
+
|
|
303
|
+
#### 排查
|
|
304
|
+
|
|
305
|
+
- `health --diagnose`:截图 + Chrome 状态 + console 错误(确认页面是否正常加载)
|
|
306
|
+
- `health --reload`:重载 headless Chrome 页面(Plugin 未连接时尝试)
|
|
307
|
+
- 如果 Plugin 始终不连接,可能是 RemNote 登录 session 过期,需重新 setup
|
|
308
|
+
|
|
309
|
+
### 完整流程(标准模式)
|
|
266
310
|
|
|
267
311
|
```
|
|
268
312
|
1. connect -- 启动会话(幂等,重复调用安全)
|
|
@@ -11,23 +11,52 @@
|
|
|
11
11
|
| 服务 | 默认端口 | 用途 |
|
|
12
12
|
|------|----------|------|
|
|
13
13
|
| WS Server | 3002 | CLI 命令 ↔ daemon ↔ Plugin 的双向通信 |
|
|
14
|
-
|
|
|
14
|
+
| Plugin 服务 | 8080 | 将 remnote-plugin 加载到 RemNote 浏览器(默认静态服务器,`--dev` 时为 webpack-dev-server) |
|
|
15
15
|
| ConfigServer | 3003 | HTTP 配置管理界面 |
|
|
16
16
|
|
|
17
17
|
daemon 启动后脱离父进程(detached),CLI 进程退出但 daemon 继续运行。
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## 两种模式
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
### 标准模式(默认)
|
|
24
|
+
|
|
25
|
+
启动 daemon 后需要用户手动在 RemNote 中加载 Plugin。适用于用户已打开 RemNote 的场景。
|
|
26
|
+
|
|
27
|
+
### Headless 模式(`--headless`)
|
|
28
|
+
|
|
29
|
+
自动启动 headless Chrome 加载 Plugin,无需用户操作。适用于无 GUI 环境或全自动连接场景。
|
|
30
|
+
|
|
31
|
+
**前置条件**:必须先执行 `setup` 完成 RemNote 登录。
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# 首次:先 setup 登录
|
|
35
|
+
remnote-bridge setup
|
|
36
|
+
|
|
37
|
+
# 然后启动 headless 连接
|
|
38
|
+
remnote-bridge connect --headless
|
|
39
|
+
|
|
40
|
+
# JSON 模式
|
|
41
|
+
remnote-bridge --json connect --headless
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Headless 模式下 Plugin 可能需要 10-30 秒才能连接到 daemon,使用 `health` 确认就绪。
|
|
45
|
+
|
|
46
|
+
排查工具:`health --diagnose`(截图+状态+console 错误)、`health --reload`(重载 Chrome 页面)。
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## ⚠️ 标准模式:connect 后需要用户配合
|
|
51
|
+
|
|
52
|
+
`connect`(不传 `--headless`)成功只意味着 daemon 和 Plugin 服务已启动,**Plugin 并未自动连接**。用户必须在 RemNote 中完成以下操作:
|
|
24
53
|
|
|
25
54
|
### 首次使用(RemNote 从未加载过此插件)
|
|
26
55
|
|
|
27
56
|
1. 打开 RemNote 桌面端或网页端
|
|
28
57
|
2. 点击左侧边栏底部的插件图标(拼图形状)
|
|
29
58
|
3. 点击「开发你的插件」(Develop Your Plugin)
|
|
30
|
-
4. 在输入框中填入 `http://localhost:8080`(即 connect 输出的
|
|
59
|
+
4. 在输入框中填入 `http://localhost:8080`(即 connect 输出的 Plugin 服务地址)
|
|
31
60
|
5. 等待插件加载完成
|
|
32
61
|
|
|
33
62
|
### 非首次使用(之前已加载过此插件)
|
|
@@ -55,7 +84,7 @@ remnote-bridge connect
|
|
|
55
84
|
```
|
|
56
85
|
守护进程已启动(PID: 12345)
|
|
57
86
|
WS Server: ws://127.0.0.1:3002
|
|
58
|
-
|
|
87
|
+
Plugin 服务: http://localhost:8080
|
|
59
88
|
配置页面: http://127.0.0.1:3003
|
|
60
89
|
超时: 30 分钟无 CLI 交互后自动关闭
|
|
61
90
|
```
|
|
@@ -125,7 +154,7 @@ remnote-bridge --json connect
|
|
|
125
154
|
3. daemon 内部按顺序启动:
|
|
126
155
|
├─ WS Server(必须成功,否则 daemon 退出)
|
|
127
156
|
├─ ConfigServer(非关键,失败不阻塞)
|
|
128
|
-
└─ webpack-dev-server
|
|
157
|
+
└─ Plugin 服务(默认静态服务器;--dev 时为 webpack-dev-server + 依赖自动安装 + 崩溃重试)
|
|
129
158
|
|
|
130
159
|
4. daemon 写入 PID 文件
|
|
131
160
|
|
|
@@ -140,8 +169,9 @@ remnote-bridge --json connect
|
|
|
140
169
|
|
|
141
170
|
## Windows 注意事项
|
|
142
171
|
|
|
143
|
-
-
|
|
144
|
-
-
|
|
172
|
+
- **默认模式秒级启动**:使用预构建 plugin,无需安装依赖
|
|
173
|
+
- **`--dev` 模式首次较慢**:会自动安装 remnote-plugin 的依赖(约 600+ 个包),在 Windows 上可能需要 30-60 秒。connect 命令的超时为 60 秒
|
|
174
|
+
- **`--dev` 依赖自动修复**:如果 webpack-dev-server 因依赖损坏而崩溃,daemon 会自动执行清洁重装(删除 node_modules + package-lock.json 后重新安装)并重试,最多重试 2 次,无需手动干预
|
|
145
175
|
- **端口残留**:多次 connect 失败后可能出现端口被占用(`EADDRINUSE`),先执行 `remnote-bridge disconnect`,如仍有残留可通过 `netstat -ano | findstr 3002` 定位 PID 后 `taskkill /F /PID <pid>` 强制终止
|
|
146
176
|
|
|
147
177
|
---
|
|
@@ -165,7 +195,7 @@ daemon 启动后开始计时,默认 **30 分钟无 CLI 交互**自动关闭(
|
|
|
165
195
|
| 退出码 | 含义 |
|
|
166
196
|
|--------|------|
|
|
167
197
|
| 0 | 启动成功,或已在运行 |
|
|
168
|
-
| 1 | 启动失败(超时、端口冲突、
|
|
198
|
+
| 1 | 启动失败(超时、端口冲突、Plugin 服务异常等) |
|
|
169
199
|
|
|
170
200
|
---
|
|
171
201
|
|
|
@@ -174,7 +204,7 @@ daemon 启动后开始计时,默认 **30 分钟无 CLI 交互**自动关闭(
|
|
|
174
204
|
| 配置项 | 默认值 | 说明 |
|
|
175
205
|
|--------|--------|------|
|
|
176
206
|
| wsPort | 3002 | WS Server 监听端口 |
|
|
177
|
-
| devServerPort | 8080 |
|
|
207
|
+
| devServerPort | 8080 | Plugin 服务端口 |
|
|
178
208
|
| configPort | 3003 | ConfigServer 端口 |
|
|
179
209
|
| daemonTimeoutMinutes | 30 | 无活动自动关闭的分钟数 |
|
|
180
210
|
|
|
@@ -57,6 +57,18 @@ remnote-bridge health
|
|
|
57
57
|
remnote-bridge --json health
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
+
### Headless 诊断模式
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# 截图 + 详细状态 + console 错误 + 排查建议
|
|
64
|
+
remnote-bridge health --diagnose
|
|
65
|
+
|
|
66
|
+
# 重载 headless Chrome 页面
|
|
67
|
+
remnote-bridge health --reload
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`--diagnose` 和 `--reload` 不能同时使用,仅在 headless 模式下可用。
|
|
71
|
+
|
|
60
72
|
---
|
|
61
73
|
|
|
62
74
|
## JSON 输出
|
|
@@ -149,11 +161,65 @@ daemon 运行 → Plugin 连接 → SDK 就绪
|
|
|
149
161
|
|
|
150
162
|
---
|
|
151
163
|
|
|
164
|
+
## Headless 模式附加输出
|
|
165
|
+
|
|
166
|
+
### health 基础输出(headless 模式下额外字段)
|
|
167
|
+
|
|
168
|
+
headless 模式下 `health` 基础输出额外包含 `headless` 对象:
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
{
|
|
172
|
+
"ok": true,
|
|
173
|
+
"command": "health",
|
|
174
|
+
"exitCode": 0,
|
|
175
|
+
"daemon": { "running": true, "pid": 12345, "reachable": true, "uptime": 300 },
|
|
176
|
+
"plugin": { "connected": true },
|
|
177
|
+
"sdk": { "ready": true },
|
|
178
|
+
"timeoutRemaining": 1500,
|
|
179
|
+
"headless": {
|
|
180
|
+
"status": "running",
|
|
181
|
+
"chromeConnected": true,
|
|
182
|
+
"pageUrl": "http://localhost:8080",
|
|
183
|
+
"reloadCount": 0,
|
|
184
|
+
"lastError": null,
|
|
185
|
+
"recentConsoleErrors": []
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### --diagnose 输出
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"ok": true,
|
|
195
|
+
"command": "health",
|
|
196
|
+
"mode": "diagnose",
|
|
197
|
+
"headless": { "status": "running", "chromeConnected": true, "pageUrl": "...", "reloadCount": 0, "lastError": null, "recentConsoleErrors": [] },
|
|
198
|
+
"screenshotPath": "/Users/xxx/.remnote-bridge/headless-screenshot-1234567890.png",
|
|
199
|
+
"pluginConnected": true,
|
|
200
|
+
"sdkReady": true
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### --reload 输出
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"ok": true,
|
|
209
|
+
"command": "health",
|
|
210
|
+
"mode": "reload"
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
152
216
|
## 常见问题诊断
|
|
153
217
|
|
|
154
218
|
| 症状 | 可能原因 | 解决方案 |
|
|
155
219
|
|------|----------|----------|
|
|
156
220
|
| daemon 未运行 | 未执行 connect / 已超时关闭 | 执行 `connect` |
|
|
157
221
|
| daemon 运行但不可达 | WS 端口被占用或配置不匹配 | 检查 `.remnote-bridge.json` 中的 `wsPort` |
|
|
158
|
-
| Plugin
|
|
222
|
+
| Plugin 未连接(标准模式) | RemNote 未打开 / Plugin 未安装 / URL 不匹配 | 打开 RemNote,确认 Plugin 中的 WS URL 设置 |
|
|
223
|
+
| Plugin 未连接(headless 模式) | Chrome 页面加载异常 | `health --diagnose` 查看截图和状态,`health --reload` 重载页面 |
|
|
159
224
|
| SDK 未就绪 | 知识库加载中 / Plugin 异常 | 等待几秒后重试,或刷新 RemNote 页面 |
|
|
225
|
+
| Chrome 状态 crashed | headless Chrome 崩溃或断开 | `health --reload` 尝试恢复,或 disconnect + connect --headless 重启 |
|
|
@@ -206,7 +206,7 @@ disconnect → daemon 关闭 → 会话结束,缓存清空
|
|
|
206
206
|
| 服务 | 默认端口 | 用途 |
|
|
207
207
|
|:-----|:---------|:-----|
|
|
208
208
|
| WS Server | 3002 | CLI ↔ daemon ↔ Plugin 通信 |
|
|
209
|
-
|
|
|
209
|
+
| Plugin 服务 | 8080 | 加载 Plugin 到 RemNote(默认静态服务器,`--dev` 时为 webpack-dev-server) |
|
|
210
210
|
| ConfigServer | 3003 | HTTP 配置界面 |
|
|
211
211
|
|
|
212
212
|
超时机制:daemon 默认 **30 分钟无活动**自动关闭。每次收到 CLI 请求时重置计时器。
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# setup
|
|
2
|
+
|
|
3
|
+
> 启动 Chrome 浏览器让用户登录 RemNote,保存登录凭证到本地 profile。这是 headless 模式(`connect --headless`)的前置步骤。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 功能
|
|
8
|
+
|
|
9
|
+
`setup` 启动一个有界面的 Chrome 窗口(使用独立 profile 目录 `~/.remnote-bridge/chrome-profile`),打开 RemNote 登录页面。用户在浏览器中完成登录后关闭 Chrome,命令写入 `.setup-done` 标记并返回。
|
|
10
|
+
|
|
11
|
+
后续 `connect --headless` 使用相同 profile 目录,复用已保存的登录凭证,实现免登录的 headless 连接。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 前置条件
|
|
16
|
+
|
|
17
|
+
- 需要**桌面环境(GUI)**,无 GUI 环境会报错
|
|
18
|
+
- 需要系统安装 Chrome/Chromium
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 用法
|
|
23
|
+
|
|
24
|
+
### 人类模式
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
remnote-bridge setup
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
输出示例:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
正在启动 Chrome...
|
|
34
|
+
请在浏览器中登录 RemNote,完成后关闭浏览器窗口。
|
|
35
|
+
setup 完成!
|
|
36
|
+
profile 目录: /Users/xxx/.remnote-bridge/chrome-profile
|
|
37
|
+
现在可以使用 `remnote-bridge connect --headless` 启动无头连接。
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### JSON 模式
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
remnote-bridge --json setup
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## JSON 输出
|
|
49
|
+
|
|
50
|
+
### 首次 setup
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"ok": true,
|
|
55
|
+
"command": "setup",
|
|
56
|
+
"profileDir": "/Users/xxx/.remnote-bridge/chrome-profile",
|
|
57
|
+
"alreadyDone": false
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 已完成 setup
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"ok": true,
|
|
66
|
+
"command": "setup",
|
|
67
|
+
"profileDir": "/Users/xxx/.remnote-bridge/chrome-profile",
|
|
68
|
+
"alreadyDone": true
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 失败
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"ok": false,
|
|
77
|
+
"command": "setup",
|
|
78
|
+
"error": "未检测到桌面环境(无 DISPLAY/WAYLAND_DISPLAY),setup 需要 GUI 才能登录"
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## AI Agent 使用流程
|
|
85
|
+
|
|
86
|
+
setup 会弹出 Chrome 窗口,用户需要完成两件事:登录 RemNote + 配置 dev plugin。
|
|
87
|
+
|
|
88
|
+
### 交互步骤
|
|
89
|
+
|
|
90
|
+
1. 调用 `setup`
|
|
91
|
+
2. **立即告知用户**:
|
|
92
|
+
> 已打开 Chrome 浏览器。请完成以下操作:
|
|
93
|
+
> 1. 登录 RemNote
|
|
94
|
+
> 2. 在 RemNote 中配置开发插件:点击左下角插件图标 → 开发你的插件 → 输入 `http://localhost:8080`
|
|
95
|
+
> 3. 完成后彻底退出 Chrome(macOS 请按 Cmd+Q,仅关窗口不够)
|
|
96
|
+
3. 等待 `setup` 命令返回(阻塞式,超时 600 秒)
|
|
97
|
+
4. 收到成功 → 继续执行 `connect --headless`
|
|
98
|
+
|
|
99
|
+
### setup 之后
|
|
100
|
+
|
|
101
|
+
`setup` 只需执行一次。登录凭证和 plugin 配置都已保存,之后每次只需 `connect --headless` 即可自动连接,无需用户操作。
|
|
102
|
+
|
|
103
|
+
如果后续 headless 模式下 Plugin 始终不连接,可能是 RemNote 登录 session 过期,需重新 setup(删除 `~/.remnote-bridge/chrome-profile/.setup-done` 后重新执行)。
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 幂等性
|
|
108
|
+
|
|
109
|
+
已完成 setup 后重复调用返回 `ok: true, alreadyDone: true`,不会再次打开 Chrome。
|
|
110
|
+
|
|
111
|
+
如需重新登录(切换账号),删除 `~/.remnote-bridge/chrome-profile/.setup-done` 文件后重新执行。
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 退出码
|
|
116
|
+
|
|
117
|
+
| 退出码 | 含义 |
|
|
118
|
+
|--------|------|
|
|
119
|
+
| 0 | 成功(首次完成或已完成) |
|
|
120
|
+
| 1 | 失败(无 GUI、无 Chrome、超时等) |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 产生的文件
|
|
125
|
+
|
|
126
|
+
| 文件 | 位置 | 说明 |
|
|
127
|
+
|------|------|------|
|
|
128
|
+
| Chrome profile | `~/.remnote-bridge/chrome-profile/` | Chrome 用户数据(含登录凭证) |
|
|
129
|
+
| `.setup-done` | `~/.remnote-bridge/chrome-profile/.setup-done` | setup 完成标记(JSON,含时间戳) |
|
|
130
|
+
|