remnote-bridge 0.1.11 → 0.1.13

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 (70) hide show
  1. package/dist/cli/addon/addon-manager.js +163 -0
  2. package/dist/cli/addon/registry.js +24 -0
  3. package/dist/cli/commands/addon.js +149 -0
  4. package/dist/cli/commands/clean.js +121 -52
  5. package/dist/cli/commands/connect.js +72 -33
  6. package/dist/cli/commands/disconnect.js +19 -19
  7. package/dist/cli/commands/edit-rem.js +8 -36
  8. package/dist/cli/commands/edit-tree.js +3 -20
  9. package/dist/cli/commands/health.js +19 -18
  10. package/dist/cli/commands/read-context.js +3 -20
  11. package/dist/cli/commands/read-globe.js +3 -20
  12. package/dist/cli/commands/read-rem.js +6 -32
  13. package/dist/cli/commands/read-tree.js +3 -20
  14. package/dist/cli/commands/search.js +97 -21
  15. package/dist/cli/config.js +148 -72
  16. package/dist/cli/daemon/daemon.js +104 -24
  17. package/dist/cli/daemon/dev-server.js +9 -1
  18. package/dist/cli/daemon/pid.js +36 -22
  19. package/dist/cli/daemon/registry.js +160 -0
  20. package/dist/cli/daemon/send-request.js +11 -11
  21. package/dist/cli/daemon/static-server.js +97 -34
  22. package/dist/cli/handlers/edit-handler.js +49 -140
  23. package/dist/cli/handlers/read-handler.js +9 -9
  24. package/dist/cli/handlers/rem-cache.js +10 -5
  25. package/dist/cli/handlers/tree-parser.js +16 -9
  26. package/dist/cli/main.js +67 -19
  27. package/dist/cli/protocol.js +18 -4
  28. package/dist/cli/server/config-server.js +280 -14
  29. package/dist/cli/server/ws-server.js +93 -44
  30. package/dist/cli/utils/output.js +29 -0
  31. package/dist/mcp/format.js +43 -0
  32. package/dist/mcp/index.js +0 -55
  33. package/dist/mcp/instructions.js +424 -216
  34. package/dist/mcp/resources/edit-rem-guide.js +37 -158
  35. package/dist/mcp/resources/edit-tree-guide.js +1 -1
  36. package/dist/mcp/resources/error-reference.js +9 -13
  37. package/dist/mcp/resources/rem-object-fields.js +6 -6
  38. package/dist/mcp/tools/edit-tools.js +69 -8
  39. package/dist/mcp/tools/infra-tools.js +44 -8
  40. package/dist/mcp/tools/read-tools.js +136 -20
  41. package/package.json +2 -2
  42. package/remnote-plugin/dist/bridge_widget-sandbox.js +17 -17
  43. package/remnote-plugin/dist/bridge_widget.js +17 -17
  44. package/remnote-plugin/dist/index-sandbox.js +31 -31
  45. package/remnote-plugin/dist/index.js +31 -31
  46. package/remnote-plugin/dist/manifest.json +1 -1
  47. package/remnote-plugin/package.json +1 -1
  48. package/remnote-plugin/public/manifest.json +1 -1
  49. package/remnote-plugin/src/bridge/multi-connection-manager.ts +151 -0
  50. package/remnote-plugin/src/bridge/websocket-client.ts +62 -16
  51. package/remnote-plugin/src/services/index.ts +0 -8
  52. package/remnote-plugin/src/services/read-rem.ts +1 -9
  53. package/remnote-plugin/src/services/search.ts +13 -10
  54. package/remnote-plugin/src/settings.ts +9 -7
  55. package/remnote-plugin/src/utils/index.ts +0 -5
  56. package/remnote-plugin/src/widgets/bridge_widget.tsx +105 -20
  57. package/remnote-plugin/src/widgets/index.tsx +41 -44
  58. package/remnote-plugin/webpack.config.js +35 -0
  59. package/skills/remnote-bridge/SKILL.md +45 -40
  60. package/skills/remnote-bridge/instructions/addon.md +134 -0
  61. package/skills/remnote-bridge/instructions/clean.md +110 -0
  62. package/skills/remnote-bridge/instructions/connect.md +80 -37
  63. package/skills/remnote-bridge/instructions/disconnect.md +22 -9
  64. package/skills/remnote-bridge/instructions/edit-rem.md +113 -327
  65. package/skills/remnote-bridge/instructions/health.md +23 -13
  66. package/skills/remnote-bridge/instructions/install-skill.md +58 -0
  67. package/skills/remnote-bridge/instructions/overall.md +99 -35
  68. package/skills/remnote-bridge/instructions/read-rem.md +15 -15
  69. package/skills/remnote-bridge/instructions/search.md +77 -18
  70. package/skills/remnote-bridge/instructions/setup.md +5 -6
@@ -1,12 +1,26 @@
1
1
  # search
2
2
 
3
- > 在知识库中按文本搜索 Rem,返回匹配结果列表。
3
+ > 在知识库中搜索 Rem,返回匹配结果列表。支持 SDK 全文搜索和 RAG 语义搜索。
4
4
 
5
5
  ---
6
6
 
7
7
  ## 功能
8
8
 
9
- `search` 调用 RemNote SDK 的全文搜索 API(`plugin.search.search()`),在当前知识库中搜索包含关键词的 Rem,返回匹配结果的 ID、文本和文档标记。
9
+ `search` 在当前知识库中搜索包含关键词的 Rem。搜索方式由配置驱动:
10
+
11
+ - **RAG 语义搜索**:在 `~/.remnote-bridge/config.json` 中启用 `addons.remnote-rag`(`enabled: true`),并在 `~/.remnote-bridge/addons/remnote-rag/config.json` 中配置 API Key,系统自动使用语义向量搜索(中文支持更好)
12
+ - **SDK 全文搜索**:addon 未启用、未安装、或调用失败时自动降级
13
+
14
+ 安装与管理 addon:`remnote-bridge addon install remnote-rag` / `remnote-bridge addon list`。
15
+
16
+ ### 搜索来源(source 字段)
17
+
18
+ | source | 说明 | 返回字段 |
19
+ |--------|------|----------|
20
+ | `"rag"` | 语义向量搜索(remnote-rag 已启用且可用) | remId, text, backText, ancestorPath, type, isDocument, tags, score |
21
+ | `"sdk"` | SDK 全文搜索(默认降级) | remId, text, isDocument |
22
+
23
+ 降级场景:addon 未启用、remnote-rag 未安装、向量库未索引、子进程超时(10s)、返回异常。
10
24
 
11
25
  ---
12
26
 
@@ -42,7 +56,7 @@ remnote-bridge search <query> [--limit <N>]
42
56
  ### JSON 模式
43
57
 
44
58
  ```bash
45
- remnote-bridge search --json '{"query":"机器学习","numResults":10}'
59
+ remnote-bridge search --json '{"query":"机器学习","limit":10}'
46
60
  ```
47
61
 
48
62
  ---
@@ -52,13 +66,39 @@ remnote-bridge search --json '{"query":"机器学习","numResults":10}'
52
66
  | 字段 | 类型 | 必需 | 说明 |
53
67
  |------|------|:----:|------|
54
68
  | `query` | string | 是 | 搜索关键词(不能为空) |
55
- | `numResults` | number | 否 | 结果数量上限(默认 20) |
69
+ | `limit` | number | 否 | 结果数量上限(默认 20) |
56
70
 
57
71
  ---
58
72
 
59
73
  ## JSON 输出
60
74
 
61
- ### 成功
75
+ ### 成功(RAG 模式)
76
+
77
+ ```json
78
+ {
79
+ "ok": true,
80
+ "command": "search",
81
+ "data": {
82
+ "query": "机器学习",
83
+ "results": [
84
+ {
85
+ "remId": "kLrIOHJLyMd8Y2lyA",
86
+ "text": "支持向量机的核心思想",
87
+ "backText": "最大化分类间隔",
88
+ "ancestorPath": ["机器学习", "监督学习"],
89
+ "type": "concept",
90
+ "isDocument": false,
91
+ "tags": ["统计学习"],
92
+ "score": 0.87
93
+ }
94
+ ],
95
+ "totalFound": 1,
96
+ "source": "rag"
97
+ }
98
+ }
99
+ ```
100
+
101
+ ### 成功(SDK 降级模式)
62
102
 
63
103
  ```json
64
104
  {
@@ -70,7 +110,8 @@ remnote-bridge search --json '{"query":"机器学习","numResults":10}'
70
110
  { "remId": "kLrIOHJLyMd8Y2lyA", "text": "机器学习笔记", "isDocument": true },
71
111
  { "remId": "abc123def456", "text": "监督学习与机器学习的关系", "isDocument": false }
72
112
  ],
73
- "totalFound": 2
113
+ "totalFound": 2,
114
+ "source": "sdk"
74
115
  },
75
116
  "timestamp": "2026-03-06T10:00:00.000Z"
76
117
  }
@@ -118,30 +159,48 @@ remnote-bridge search --json '{"query":"机器学习","numResults":10}'
118
159
  ## 内部流程
119
160
 
120
161
  ```
121
- 1. CLI 解析参数(query, numResults
122
- 2. sendRequest → WS → daemon → forwardToPlugin('search', { query, numResults })
123
- 3. Plugin 端:
124
- ├─ plugin.search.search([query], undefined, { numResults })
125
- ├─ 遍历结果 Rem:
126
- ├─ plugin.richText.toMarkdown(rem.text) Markdown 文本
127
- ├─ 换行符替换为空格(保持单行)
128
- │ └─ rem.isDocument() → 是否文档
129
- └─ 返回 { query, results, totalFound }
130
- 4. CLI 格式化输出
162
+ 1. CLI 解析参数(query, limit
163
+ 2. 检查配置:addons.remnote-rag.enabled
164
+ ├─ 未启用 → 跳到步骤 4
165
+ └─ 已启用 继续步骤 3
166
+ 3. 尝试 RAG 搜索:
167
+ ├─ execFile('remnote-rag', ['search', '--json', payload])
168
+ ├─ remnote-rag 从 ~/.remnote-bridge/addons/remnote-rag/config.json 读取配置
169
+ ├─ 超时 10s
170
+ ├─ 成功 返回 RAG 结果(source: "rag")
171
+ └─ 失败 → 继续到步骤 4(静默降级)
172
+ 4. 降级到 SDK 搜索:
173
+ ├─ sendRequest → WS → daemon → forwardToPlugin('search', ...)
174
+ ├─ Plugin 端调用 plugin.search.search()
175
+ └─ 返回 SDK 结果(source: "sdk")
176
+ 5. CLI 格式化输出
131
177
  ```
132
178
 
133
179
  ---
134
180
 
135
181
  ## 结果字段说明
136
182
 
183
+ ### 通用字段(两种模式都有)
184
+
137
185
  | 字段 | 类型 | 说明 |
138
186
  |------|------|------|
139
187
  | `query` | string | 原始搜索关键词 |
140
188
  | `results` | array | 结果数组 |
141
189
  | `results[].remId` | string | 匹配 Rem 的 ID |
142
- | `results[].text` | string | Rem 正面文本(Markdown 格式,单行) |
190
+ | `results[].text` | string | Rem 正面文本 |
143
191
  | `results[].isDocument` | boolean | 是否为文档页面 |
144
192
  | `totalFound` | number | 返回的结果数量 |
193
+ | `source` | string | 搜索来源:`"rag"` 或 `"sdk"` |
194
+
195
+ ### RAG 模式额外字段
196
+
197
+ | 字段 | 类型 | 说明 |
198
+ |------|------|------|
199
+ | `results[].backText` | string \| null | Rem 背面文本 |
200
+ | `results[].ancestorPath` | string[] | 祖先路径名称数组(从根到父级) |
201
+ | `results[].type` | string | Rem 类型:`"concept"` / `"descriptor"` / `"default"` |
202
+ | `results[].tags` | string[] | 标签名称数组 |
203
+ | `results[].score` | number | 语义相关性分数(0-1,越高越相关) |
145
204
 
146
205
  ---
147
206
 
@@ -191,6 +250,6 @@ RemNote 的 Web 版搜索索引按单字符拆分非空格语言的文本。搜
191
250
  ## 注意事项
192
251
 
193
252
  - 搜索结果的 `text` 字段是 Markdown 格式的单行文本(多行换行符已替换为空格)
194
- - `totalFound` 等于 `results.length`,即实际返回的数量(受 `numResults` 限制)
253
+ - `totalFound` 等于 `results.length`,即实际返回的数量(受 `limit` 限制)
195
254
  - 搜索不会触发缓存写入——search 结果不进入 RemCache
196
255
  - 如需获取某个搜索结果的完整属性,需对其 `remId` 执行 `read-rem`
@@ -83,22 +83,21 @@ remnote-bridge --json setup
83
83
 
84
84
  ## AI Agent 使用流程
85
85
 
86
- setup 会弹出 Chrome 窗口,用户需要完成两件事:登录 RemNote + 配置 dev plugin
86
+ setup 会弹出 Chrome 窗口,用户只需**登录 RemNote**,然后彻底退出 Chrome
87
+
88
+ setup 只负责保存登录凭证——配置 dev plugin 是 connect 之后的事(见 `connect.md` 标准模式说明)。
87
89
 
88
90
  ### 交互步骤
89
91
 
90
92
  1. 调用 `setup`
91
93
  2. **立即告知用户**:
92
- > 已打开 Chrome 浏览器。请完成以下操作:
93
- > 1. 登录 RemNote
94
- > 2. 在 RemNote 中配置开发插件:点击左下角插件图标 → 开发你的插件 → 输入 `http://localhost:8080`
95
- > 3. 完成后彻底退出 Chrome(macOS 请按 Cmd+Q,仅关窗口不够)
94
+ > 已打开 Chrome 浏览器。请登录 RemNote,完成后彻底退出 Chrome(macOS 请按 Cmd+Q,仅关窗口不够)
96
95
  3. 等待 `setup` 命令返回(阻塞式,超时 600 秒)
97
96
  4. 收到成功 → 继续执行 `connect --headless`
98
97
 
99
98
  ### setup 之后
100
99
 
101
- `setup` 只需执行一次。登录凭证和 plugin 配置都已保存,之后每次只需 `connect --headless` 即可自动连接,无需用户操作。
100
+ `setup` 只需执行一次。登录凭证已保存,之后每次只需 `connect --headless` 即可自动连接,无需用户操作。
102
101
 
103
102
  如果后续 headless 模式下 Plugin 始终不连接,可能是 RemNote 登录 session 过期,需重新 setup(删除 `~/.remnote-bridge/chrome-profile/.setup-done` 后重新执行)。
104
103