remnote-bridge 0.1.0 → 0.1.2
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 +21 -0
- package/README.md +229 -0
- package/dist/cli/commands/install-skill.js +51 -11
- package/dist/cli/main.js +12 -4
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/instructions.js +57 -20
- package/dist/mcp/resources/separator-flashcard.js +31 -29
- package/package.json +12 -5
- package/{skill → skills/remnote-bridge}/SKILL.md +64 -34
- package/{docs/instruction → skills/remnote-bridge/instructions}/connect.md +24 -0
- package/{docs/instruction → skills/remnote-bridge/instructions}/overall.md +52 -35
- package/dist/cli/commands/connect.d.ts +0 -12
- package/dist/cli/commands/disconnect.d.ts +0 -11
- package/dist/cli/commands/edit-rem.d.ts +0 -13
- package/dist/cli/commands/edit-tree.d.ts +0 -14
- package/dist/cli/commands/health.d.ts +0 -12
- package/dist/cli/commands/install-skill.d.ts +0 -6
- package/dist/cli/commands/read-context.d.ts +0 -20
- package/dist/cli/commands/read-globe.d.ts +0 -16
- package/dist/cli/commands/read-rem.d.ts +0 -16
- package/dist/cli/commands/read-tree.d.ts +0 -17
- package/dist/cli/commands/search.d.ts +0 -12
- package/dist/cli/config.d.ts +0 -55
- package/dist/cli/daemon/daemon.d.ts +0 -11
- package/dist/cli/daemon/dev-server.d.ts +0 -26
- package/dist/cli/daemon/pid.d.ts +0 -34
- package/dist/cli/daemon/send-request.d.ts +0 -24
- package/dist/cli/handlers/context-read-handler.d.ts +0 -18
- package/dist/cli/handlers/edit-handler.d.ts +0 -30
- package/dist/cli/handlers/globe-read-handler.d.ts +0 -17
- package/dist/cli/handlers/read-handler.d.ts +0 -16
- package/dist/cli/handlers/rem-cache.d.ts +0 -19
- package/dist/cli/handlers/tree-edit-handler.d.ts +0 -30
- package/dist/cli/handlers/tree-parser.d.ts +0 -95
- package/dist/cli/handlers/tree-read-handler.d.ts +0 -28
- package/dist/cli/main.d.ts +0 -7
- package/dist/cli/protocol.d.ts +0 -39
- package/dist/cli/server/config-server.d.ts +0 -26
- package/dist/cli/server/ws-server.d.ts +0 -68
- package/dist/cli/utils/output.d.ts +0 -11
- package/dist/mcp/daemon-client.d.ts +0 -31
- package/dist/mcp/index.d.ts +0 -7
- package/dist/mcp/instructions.d.ts +0 -1
- package/dist/mcp/resources/edit-tree-guide.d.ts +0 -1
- package/dist/mcp/resources/error-reference.d.ts +0 -1
- package/dist/mcp/resources/outline-format.d.ts +0 -1
- package/dist/mcp/resources/rem-object-fields.d.ts +0 -1
- package/dist/mcp/resources/separator-flashcard.d.ts +0 -1
- package/dist/mcp/tools/edit-tools.d.ts +0 -5
- package/dist/mcp/tools/infra-tools.d.ts +0 -5
- package/dist/mcp/tools/read-tools.d.ts +0 -5
- package/dist/mcp/types.d.ts +0 -12
- package/remnote-plugin/src/test-scripts/AGENTS.md +0 -46
- package/remnote-plugin/src/test-scripts/test-actions.ts +0 -230
- package/remnote-plugin/src/test-scripts/test-powerup-rendering.ts +0 -722
- package/remnote-plugin/src/test-scripts/test-rem-type-mapping.ts +0 -283
- package/remnote-plugin/src/test-scripts/test-richtext-builder.ts +0 -207
- package/remnote-plugin/src/test-scripts/test-richtext-matrix.ts +0 -332
- package/remnote-plugin/src/test-scripts/test-richtext-remaining.ts +0 -245
- package/remnote-plugin/src/test-scripts/test-rw-fields.ts +0 -399
- /package/{docs/instruction → skills/remnote-bridge/instructions}/disconnect.md +0 -0
- /package/{docs/instruction → skills/remnote-bridge/instructions}/edit-rem.md +0 -0
- /package/{docs/instruction → skills/remnote-bridge/instructions}/edit-tree.md +0 -0
- /package/{docs/instruction → skills/remnote-bridge/instructions}/health.md +0 -0
- /package/{docs/instruction → skills/remnote-bridge/instructions}/read-context.md +0 -0
- /package/{docs/instruction → skills/remnote-bridge/instructions}/read-globe.md +0 -0
- /package/{docs/instruction → skills/remnote-bridge/instructions}/read-rem.md +0 -0
- /package/{docs/instruction → skills/remnote-bridge/instructions}/read-tree.md +0 -0
- /package/{docs/instruction → skills/remnote-bridge/instructions}/search.md +0 -0
|
@@ -7,21 +7,21 @@ description: "RemNote 知识库操作指南。通过 remnote-bridge 命令行工
|
|
|
7
7
|
|
|
8
8
|
本 skill 指导 AI Agent 通过 remnote-bridge 操作 RemNote 知识库。
|
|
9
9
|
|
|
10
|
-
**详细命令文档**位于 `
|
|
10
|
+
**详细命令文档**位于 `instructions/` 目录下,执行具体命令前务必先读取对应文件:
|
|
11
11
|
|
|
12
12
|
| 命令 | 文档路径 |
|
|
13
13
|
|:-----|:---------|
|
|
14
|
-
| connect | `
|
|
15
|
-
| disconnect | `
|
|
16
|
-
| health | `
|
|
17
|
-
| read-rem | `
|
|
18
|
-
| edit-rem | `
|
|
19
|
-
| read-tree | `
|
|
20
|
-
| edit-tree | `
|
|
21
|
-
| read-globe | `
|
|
22
|
-
| read-context | `
|
|
23
|
-
| search | `
|
|
24
|
-
| 全局概览 | `
|
|
14
|
+
| connect | `instructions/connect.md` |
|
|
15
|
+
| disconnect | `instructions/disconnect.md` |
|
|
16
|
+
| health | `instructions/health.md` |
|
|
17
|
+
| read-rem | `instructions/read-rem.md` |
|
|
18
|
+
| edit-rem | `instructions/edit-rem.md` |
|
|
19
|
+
| read-tree | `instructions/read-tree.md` |
|
|
20
|
+
| edit-tree | `instructions/edit-tree.md` |
|
|
21
|
+
| read-globe | `instructions/read-globe.md` |
|
|
22
|
+
| read-context | `instructions/read-context.md` |
|
|
23
|
+
| search | `instructions/search.md` |
|
|
24
|
+
| 全局概览 | `instructions/overall.md` |
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
@@ -42,7 +42,7 @@ RemNote 中所有内容的基本单元都是 **Rem**。文档、文件夹、闪
|
|
|
42
42
|
|
|
43
43
|
两个独立维度:
|
|
44
44
|
|
|
45
|
-
- **type**(闪卡语义):`concept
|
|
45
|
+
- **type**(闪卡语义):`concept`(加粗)、`descriptor`(斜体)、`default`(普通)、`portal`(只读)
|
|
46
46
|
- **isDocument**(页面语义):与 type 完全独立
|
|
47
47
|
|
|
48
48
|
### CDF 框架(Concept-Descriptor Framework)
|
|
@@ -55,19 +55,30 @@ RemNote 推荐的知识结构化方法:
|
|
|
55
55
|
损失函数 ;; 均方误差 (MSE) ← Descriptor
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
###
|
|
58
|
+
### 闪卡的 CLI 操作方式
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
|
65
|
-
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
60
|
+
闪卡由 `type`、`backText`、`practiceDirection` 三个字段控制。通过 CLI 操作闪卡,修改的是这些**字段**。
|
|
61
|
+
|
|
62
|
+
**禁止**:在文本中插入分隔符(`::`、`;;`、`>>`、`<<` 等)来创建闪卡。分隔符是 RemNote 编辑器的输入语法,CLI 无法识别。
|
|
63
|
+
|
|
64
|
+
| 闪卡操作 | CLI 方法 |
|
|
65
|
+
|:---------|:---------|
|
|
66
|
+
| 创建概念定义 | `edit-tree` 新增行 `概念 ↔ 定义`,再 `edit-rem` 设 `type: "concept"` |
|
|
67
|
+
| 创建正向问答 | `edit-tree` 新增行 `问题 → 答案` |
|
|
68
|
+
| 创建多行答案 | `edit-tree` 新增行 `问题 ↓`(子行自动成为答案) |
|
|
69
|
+
| 改变闪卡类型 | `edit-rem` 修改 `type`、`backText`、`practiceDirection` |
|
|
70
|
+
|
|
71
|
+
### 理解用户意图:分隔符映射
|
|
72
|
+
|
|
73
|
+
用户在 RemNote 编辑器中通过分隔符创建闪卡。当用户提到这些分隔符时,理解其意图并映射到上述 CLI 操作:
|
|
74
|
+
|
|
75
|
+
| 用户说 / 编辑器分隔符 | 对应 type | 对应 practiceDirection |
|
|
76
|
+
|:----------------------|:----------|:----------------------|
|
|
77
|
+
| `::` | concept | both |
|
|
78
|
+
| `;;` | descriptor | forward |
|
|
79
|
+
| `>>` / `<<` / `<>` | default | forward / backward / both |
|
|
80
|
+
| `>>>` / `::>` / `;;>` | default / concept / descriptor | 多行(子 Rem 为答案) |
|
|
81
|
+
| `{{}}` | default | forward(完形填空) |
|
|
71
82
|
|
|
72
83
|
### 三种链接机制
|
|
73
84
|
|
|
@@ -141,16 +152,35 @@ Rem 的属性(文本、类型、格式、标签) → edit-rem (前置
|
|
|
141
152
|
|
|
142
153
|
## 3. 标准工作流
|
|
143
154
|
|
|
155
|
+
### ⚠️ connect 后需要用户配合(重要)
|
|
156
|
+
|
|
157
|
+
`connect` 成功只意味着 daemon 和 webpack-dev-server 已启动,**Plugin 并未自动连接**。用户必须在 RemNote 中完成操作,Plugin 才能连接到 daemon:
|
|
158
|
+
|
|
159
|
+
**首次使用**(RemNote 从未加载过此插件):
|
|
160
|
+
1. 打开 RemNote 桌面端或网页端
|
|
161
|
+
2. 点击左侧边栏底部的插件图标(拼图形状)
|
|
162
|
+
3. 点击「开发你的插件」(Develop Your Plugin)
|
|
163
|
+
4. 在输入框中填入 `http://localhost:8080`(即 connect 输出的 webpack-dev-server 地址)
|
|
164
|
+
5. 等待插件加载完成
|
|
165
|
+
|
|
166
|
+
**非首次使用**(之前已加载过此插件):
|
|
167
|
+
- 只需**刷新 RemNote 页面**即可(浏览器 F5 或 Cmd+R),插件会自动重新连接
|
|
168
|
+
|
|
169
|
+
**你必须**:执行 `connect` 后,**立即告知用户需要完成上述操作**,不要直接调用业务命令。引导用户完成后,用 `health` 确认三层就绪再继续。
|
|
170
|
+
|
|
171
|
+
### 完整流程
|
|
172
|
+
|
|
144
173
|
```
|
|
145
174
|
1. connect -- 启动会话(幂等,重复调用安全)
|
|
146
|
-
2.
|
|
147
|
-
3.
|
|
175
|
+
2. ⚠️ 引导用户在 RemNote 中加载插件(首次填端口,非首次刷新页面)
|
|
176
|
+
3. health -- 确认三层就绪:daemon → Plugin → SDK(链式依赖)
|
|
177
|
+
4. read-globe -- 了解知识库结构(首次探索)
|
|
148
178
|
或 read-context -- 了解用户当前上下文
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
179
|
+
5. search "关键词" -- 定位目标 Rem(结果不进缓存!)
|
|
180
|
+
6. read-tree <id> -- 展开子树 → 写入缓存(edit-tree 的前置)
|
|
181
|
+
7. read-rem <id> -- 读取属性 → 写入缓存(edit-rem 的前置)
|
|
182
|
+
8. edit-rem / edit-tree -- 执行修改
|
|
183
|
+
9. disconnect -- 结束会话(缓存全部清空,幂等)
|
|
154
184
|
```
|
|
155
185
|
|
|
156
186
|
**超时**:daemon 默认 30 分钟无 CLI 交互自动关闭,每次请求重置计时器。长时间操作间可用 health 保活。
|
|
@@ -299,12 +329,12 @@ read-tree / read-globe / read-context 输出 Markdown 大纲,edit-tree 基于
|
|
|
299
329
|
|
|
300
330
|
### 新增行格式
|
|
301
331
|
|
|
302
|
-
新增行可用 Markdown
|
|
332
|
+
新增行可用 Markdown 前缀和箭头:
|
|
303
333
|
|
|
304
334
|
```markdown
|
|
305
335
|
# 新标题
|
|
306
336
|
新闪卡 → 答案
|
|
307
|
-
|
|
337
|
+
问题 ↔ 回答
|
|
308
338
|
- [ ] 新待办
|
|
309
339
|
`代码块`
|
|
310
340
|
```
|
|
@@ -18,6 +18,30 @@ daemon 启动后脱离父进程(detached),CLI 进程退出但 daemon 继
|
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
+
## ⚠️ connect 后需要用户配合
|
|
22
|
+
|
|
23
|
+
`connect` 成功只意味着 daemon 和 webpack-dev-server 已启动,**Plugin 并未自动连接**。用户必须在 RemNote 中完成以下操作:
|
|
24
|
+
|
|
25
|
+
### 首次使用(RemNote 从未加载过此插件)
|
|
26
|
+
|
|
27
|
+
1. 打开 RemNote 桌面端或网页端
|
|
28
|
+
2. 点击左侧边栏底部的插件图标(拼图形状)
|
|
29
|
+
3. 点击「开发你的插件」(Develop Your Plugin)
|
|
30
|
+
4. 在输入框中填入 `http://localhost:8080`(即 connect 输出的 webpack-dev-server 地址)
|
|
31
|
+
5. 等待插件加载完成
|
|
32
|
+
|
|
33
|
+
### 非首次使用(之前已加载过此插件)
|
|
34
|
+
|
|
35
|
+
只需**刷新 RemNote 页面**即可(浏览器 F5 或 Cmd+R),插件会自动重新连接到已启动的 daemon。
|
|
36
|
+
|
|
37
|
+
### AI Agent 注意事项
|
|
38
|
+
|
|
39
|
+
- 执行 `connect` 后,**必须立即告知用户完成上述操作**
|
|
40
|
+
- **禁止在 connect 后直接调用业务命令**——此时 Plugin 尚未连接,命令会报 "Plugin 未连接" 错误
|
|
41
|
+
- 引导用户完成操作后,用 `health` 确认三层就绪(daemon → Plugin → SDK),再执行业务命令
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
21
45
|
## 用法
|
|
22
46
|
|
|
23
47
|
### 人类模式
|
|
@@ -51,7 +51,7 @@ Agent 的核心任务是将用户的自然语言请求翻译为 CLI 命令。以
|
|
|
51
51
|
| 用户表述 | 操作类型 | CLI 命令 |
|
|
52
52
|
|:---------|:---------|:---------|
|
|
53
53
|
| "改文本"、"改标题"、"改颜色"、"改类型" | 修改 Rem 属性 | `edit-rem` |
|
|
54
|
-
| "创建一个概念定义
|
|
54
|
+
| "创建一个概念定义"、"做个 :: 卡" | 新增行(edit-tree 箭头)+ 改 type(edit-rem) | `edit-tree` + `edit-rem` |
|
|
55
55
|
| "新增一个子节点"、"添加笔记" | 结构操作:新增 | `edit-tree` |
|
|
56
56
|
| "删除这个"、"移除" | 结构操作:删除 | `edit-tree` |
|
|
57
57
|
| "移动到…下面" | 结构操作:移动 | `edit-tree` |
|
|
@@ -66,42 +66,52 @@ Rem 有两个**独立维度**的类型:
|
|
|
66
66
|
|
|
67
67
|
#### type 字段(闪卡语义)
|
|
68
68
|
|
|
69
|
-
| type 值 |
|
|
70
|
-
|
|
71
|
-
| `concept` |
|
|
72
|
-
| `descriptor` |
|
|
73
|
-
| `default` |
|
|
74
|
-
| `portal` |
|
|
69
|
+
| type 值 | 含义 | UI 表现 | CLI 设置方式 |
|
|
70
|
+
|:--------|:-----|:--------|:-------------|
|
|
71
|
+
| `concept` | 概念定义 | 文字**加粗** | `edit-rem` 设 `type: "concept"` |
|
|
72
|
+
| `descriptor` | 描述/属性 | 文字*斜体* | `edit-rem` 设 `type: "descriptor"` |
|
|
73
|
+
| `default` | 普通 Rem | 正常字重 | `edit-rem` 设 `type: "default"` |
|
|
74
|
+
| `portal` | 嵌入引用容器 | 紫色左边框 | **只读**,不可通过 CLI 设置 |
|
|
75
75
|
|
|
76
76
|
#### isDocument 字段(页面语义)
|
|
77
77
|
|
|
78
78
|
`isDocument` 与 `type` 完全独立——一个 `concept` 类型的 Rem 可以同时是 Document。
|
|
79
79
|
|
|
80
|
-
### 2.4
|
|
80
|
+
### 2.4 闪卡的 CLI 操作方式
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
闪卡由 `type`、`backText`、`practiceDirection` 三个字段控制。通过 CLI 操作闪卡,修改的是这些**字段**和大纲**箭头**。
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|:-------|:-----|:---------|:---------|:-----|
|
|
86
|
-
| (无) | `default` | `null` | — | 无闪卡行为 |
|
|
87
|
-
| `::` | `concept` | 后半部分 | `both` | 概念定义(CDF 框架) |
|
|
88
|
-
| `;;` | `descriptor` | 后半部分 | `forward` | 描述属性(CDF 框架) |
|
|
89
|
-
| `>>` | `default` | 后半部分 | `forward` | 正向问答 |
|
|
90
|
-
| `<<` | `default` | 后半部分 | `backward` | 反向问答 |
|
|
91
|
-
| `<>` | `default` | 后半部分 | `both` | 双向问答 |
|
|
92
|
-
| `>>>` | `default` | `null` | `forward` | 多行答案(子 Rem 为答案) |
|
|
93
|
-
| `::>` | `concept` | `null` | `both` | 概念型多行答案 |
|
|
94
|
-
| `;;>` | `descriptor` | `null` | `forward` | 描述型多行答案 |
|
|
95
|
-
| `{{}}` | `default` | `null` | `forward` | 完形填空(Cloze) |
|
|
84
|
+
**禁止**:在文本中插入分隔符(`::`、`;;`、`>>`、`<<` 等)来创建闪卡。分隔符是 RemNote 编辑器的输入语法,CLI 无法识别。
|
|
96
85
|
|
|
97
|
-
|
|
86
|
+
| 闪卡操作 | CLI 方法 |
|
|
87
|
+
|:---------|:---------|
|
|
88
|
+
| 创建概念定义 | `edit-tree` 新增行 `概念 ↔ 定义`,再 `edit-rem` 设 `type: "concept"` |
|
|
89
|
+
| 创建正向问答 | `edit-tree` 新增行 `问题 → 答案` |
|
|
90
|
+
| 创建反向问答 | `edit-tree` 新增行 `问题 ← 答案` |
|
|
91
|
+
| 创建双向问答 | `edit-tree` 新增行 `问题 ↔ 答案` |
|
|
92
|
+
| 创建多行答案 | `edit-tree` 新增行 `问题 ↓`(子行自动成为答案) |
|
|
93
|
+
| 改变闪卡类型/方向 | `edit-rem` 修改 `type`、`backText`、`practiceDirection` |
|
|
98
94
|
|
|
99
|
-
|
|
95
|
+
`practiceDirection` 的取值:`forward`(正向)、`backward`(反向)、`both`(双向)、`none`(不练习)。
|
|
96
|
+
|
|
97
|
+
### 2.5 理解用户意图:编辑器分隔符映射
|
|
98
|
+
|
|
99
|
+
用户在 RemNote 编辑器中通过分隔符创建闪卡。当用户提到这些分隔符时,理解其意图并映射到上述 CLI 操作:
|
|
100
|
+
|
|
101
|
+
| 用户说 / 编辑器分隔符 | 对应 type | 对应 practiceDirection |
|
|
102
|
+
|:----------------------|:----------|:----------------------|
|
|
103
|
+
| `::` | concept | both |
|
|
104
|
+
| `;;` | descriptor | forward |
|
|
105
|
+
| `>>` / `<<` / `<>` | default | forward / backward / both |
|
|
106
|
+
| `>>>` / `::>` / `;;>` | default / concept / descriptor | 多行(子 Rem 为答案) |
|
|
107
|
+
| `{{}}` | default | forward(完形填空) |
|
|
108
|
+
|
|
109
|
+
**CDF(Concept-Descriptor Framework)**:RemNote 推荐的知识结构化方法——`Concept`(type:concept)是需要理解的概念,`Descriptor`(type:descriptor)是概念的属性/描述。在 CLI 大纲中的表现:
|
|
100
110
|
|
|
101
111
|
```
|
|
102
|
-
线性回归
|
|
103
|
-
假设
|
|
104
|
-
损失函数
|
|
112
|
+
线性回归 ↔ 最基本的回归模型 <!--id1 type:concept-->
|
|
113
|
+
假设 → 因变量与自变量呈线性关系 <!--id2 type:descriptor-->
|
|
114
|
+
损失函数 → 均方误差 (MSE) <!--id3 type:descriptor-->
|
|
105
115
|
```
|
|
106
116
|
|
|
107
117
|
### 2.5 三种链接机制
|
|
@@ -170,11 +180,17 @@ RemNote SDK → 知识库
|
|
|
170
180
|
一次**会话(Session)= 守护进程的生命周期**。
|
|
171
181
|
|
|
172
182
|
```
|
|
173
|
-
connect → daemon 启动
|
|
183
|
+
connect → daemon 启动
|
|
184
|
+
↓
|
|
185
|
+
⚠️ 用户在 RemNote 中加载插件(首次填端口,非首次刷新页面)
|
|
186
|
+
↓
|
|
187
|
+
health → 确认三层就绪 → 会话可用
|
|
174
188
|
↕ (业务命令:read-rem, edit-tree, search, ...)
|
|
175
189
|
disconnect → daemon 关闭 → 会话结束,缓存清空
|
|
176
190
|
```
|
|
177
191
|
|
|
192
|
+
> **重要**:`connect` 成功只意味着 daemon 已启动,Plugin 并未自动连接。首次使用需用户在 RemNote「开发你的插件」中填入 `http://localhost:8080`;非首次只需刷新 RemNote 页面。必须引导用户完成此步后再用 `health` 确认就绪。
|
|
193
|
+
|
|
178
194
|
`connect` 启动三个服务:
|
|
179
195
|
|
|
180
196
|
| 服务 | 默认端口 | 用途 |
|
|
@@ -322,18 +338,19 @@ Agent 需要根据用户意图选择正确的读取命令:
|
|
|
322
338
|
|
|
323
339
|
```
|
|
324
340
|
1. connect ← 启动会话
|
|
325
|
-
2.
|
|
326
|
-
3.
|
|
341
|
+
2. ⚠️ 引导用户在 RemNote 中加载插件(首次填端口,非首次刷新页面)
|
|
342
|
+
3. health ← 确认系统就绪(daemon → Plugin → SDK 三层全通过)
|
|
343
|
+
4. read-globe ← 了解知识库结构(首次探索)
|
|
327
344
|
或 read-context ← 了解用户当前上下文
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
345
|
+
5. search "关键词" ← 定位目标 Rem(中文搜索可能需单字策略,详见 search.md)
|
|
346
|
+
6. read-tree <id> ← 展开目标区域的子树
|
|
347
|
+
7. read-rem <id> ← 读取详细属性(编辑前必需)
|
|
348
|
+
8. edit-rem <id> ... ← 修改 Rem 属性
|
|
332
349
|
或 edit-tree <id> ...← 修改树结构
|
|
333
|
-
|
|
350
|
+
9. disconnect ← 结束会话
|
|
334
351
|
```
|
|
335
352
|
|
|
336
|
-
**注意**:步骤
|
|
353
|
+
**注意**:步骤 7 是 `edit-rem` 的强制前置条件,步骤 6 是 `edit-tree` 的强制前置条件。跳过会触发防线 1 错误。步骤 2 是必须的——connect 后不引导用户加载插件就直接调用业务命令,会报"Plugin 未连接"错误。
|
|
337
354
|
|
|
338
355
|
---
|
|
339
356
|
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* connect 命令
|
|
3
|
-
*
|
|
4
|
-
* 启动后台守护进程(WS Server + webpack-dev-server),等待 Plugin 连接。
|
|
5
|
-
* - 已在运行 → 打印提示,退出码 0
|
|
6
|
-
* - stale PID → 清理后正常启动
|
|
7
|
-
* - 启动失败 → 退出码 1
|
|
8
|
-
*/
|
|
9
|
-
export interface ConnectOptions {
|
|
10
|
-
json?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare function connectCommand(options?: ConnectOptions): Promise<void>;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* disconnect 命令
|
|
3
|
-
*
|
|
4
|
-
* 停止守护进程,释放端口和资源。
|
|
5
|
-
* - 守护进程运行中 → 发送 SIGTERM,等待退出
|
|
6
|
-
* - 守护进程未运行 → 打印提示,退出码 0
|
|
7
|
-
*/
|
|
8
|
-
export interface DisconnectOptions {
|
|
9
|
-
json?: boolean;
|
|
10
|
-
}
|
|
11
|
-
export declare function disconnectCommand(options?: DisconnectOptions): Promise<void>;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* edit-rem 命令
|
|
3
|
-
*
|
|
4
|
-
* 通过 str_replace 编辑 Rem 的 JSON 序列化。
|
|
5
|
-
* 三道防线保证安全:缓存存在性、并发检测、精确匹配。
|
|
6
|
-
* - 退出码:0 成功 / 1 业务错误 / 2 守护进程不可达
|
|
7
|
-
*/
|
|
8
|
-
export interface EditRemOptions {
|
|
9
|
-
json?: boolean;
|
|
10
|
-
oldStr: string;
|
|
11
|
-
newStr: string;
|
|
12
|
-
}
|
|
13
|
-
export declare function editRemCommand(remId: string, options: EditRemOptions): Promise<void>;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* edit-tree 命令
|
|
3
|
-
*
|
|
4
|
-
* 通过 str_replace 编辑 Rem 子树结构(行级增/删/移/重排)。
|
|
5
|
-
* - 禁止修改已有行内容(走 edit-rem)
|
|
6
|
-
* - --json 结构化 JSON 输出
|
|
7
|
-
* - 退出码:0 成功 / 1 业务错误 / 2 守护进程不可达
|
|
8
|
-
*/
|
|
9
|
-
export interface EditTreeOptions {
|
|
10
|
-
json?: boolean;
|
|
11
|
-
oldStr: string;
|
|
12
|
-
newStr: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function editTreeCommand(remId: string, options: EditTreeOptions): Promise<void>;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* health 命令
|
|
3
|
-
*
|
|
4
|
-
* 检查守护进程、Plugin 连接、SDK 状态,输出 ✅/❌ 列表。
|
|
5
|
-
* - 全部健康 → 退出码 0
|
|
6
|
-
* - 部分不健康 → 退出码 1
|
|
7
|
-
* - 守护进程不可达 → 退出码 2
|
|
8
|
-
*/
|
|
9
|
-
export interface HealthOptions {
|
|
10
|
-
json?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare function healthCommand(options?: HealthOptions): Promise<void>;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* read-context 命令
|
|
3
|
-
*
|
|
4
|
-
* 读取当前上下文视图。
|
|
5
|
-
* - --mode focus|page(默认 focus)
|
|
6
|
-
* - --ancestor-levels N 向上追溯几层祖先(默认 2,仅 focus 模式)
|
|
7
|
-
* - --depth N 展开深度(默认 3,仅 page 模式)
|
|
8
|
-
* - --max-nodes N 全局节点上限(默认 200)
|
|
9
|
-
* - --max-siblings N 每个父节点下展示的 children 上限(默认 20)
|
|
10
|
-
* - --json 结构化 JSON 输出
|
|
11
|
-
*/
|
|
12
|
-
export interface ReadContextOptions {
|
|
13
|
-
json?: boolean;
|
|
14
|
-
mode?: string;
|
|
15
|
-
ancestorLevels?: string;
|
|
16
|
-
depth?: string;
|
|
17
|
-
maxNodes?: string;
|
|
18
|
-
maxSiblings?: string;
|
|
19
|
-
}
|
|
20
|
-
export declare function readContextCommand(options?: ReadContextOptions): Promise<void>;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* read-globe 命令
|
|
3
|
-
*
|
|
4
|
-
* 读取知识库全局概览(仅 Document 层级)。
|
|
5
|
-
* - --depth N 控制 Document 嵌套深度(默认 -1 无限)
|
|
6
|
-
* - --max-nodes N 全局节点上限(默认 200)
|
|
7
|
-
* - --max-siblings N 每个父节点下展示的 children 上限(默认 20)
|
|
8
|
-
* - --json 结构化 JSON 输出
|
|
9
|
-
*/
|
|
10
|
-
export interface ReadGlobeOptions {
|
|
11
|
-
json?: boolean;
|
|
12
|
-
depth?: string;
|
|
13
|
-
maxNodes?: string;
|
|
14
|
-
maxSiblings?: string;
|
|
15
|
-
}
|
|
16
|
-
export declare function readGlobeCommand(options?: ReadGlobeOptions): Promise<void>;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* read-rem 命令
|
|
3
|
-
*
|
|
4
|
-
* 读取单个 Rem 的完整 JSON 对象。
|
|
5
|
-
* - 默认输出 [RW] + [R] 字段(34 个)
|
|
6
|
-
* - --full 输出全部 51 个字段(含 [R-F])
|
|
7
|
-
* - --fields 指定输出字段子集
|
|
8
|
-
* - 退出码:0 成功 / 1 业务错误 / 2 守护进程不可达
|
|
9
|
-
*/
|
|
10
|
-
export interface ReadRemOptions {
|
|
11
|
-
json?: boolean;
|
|
12
|
-
fields?: string;
|
|
13
|
-
full?: boolean;
|
|
14
|
-
includePowerup?: boolean;
|
|
15
|
-
}
|
|
16
|
-
export declare function readRemCommand(remId: string, options?: ReadRemOptions): Promise<void>;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* read-tree 命令
|
|
3
|
-
*
|
|
4
|
-
* 读取 Rem 子树并序列化为带缩进的 Markdown 大纲。
|
|
5
|
-
* - --depth N 控制展开深度(默认 3,-1 = 全部展开)
|
|
6
|
-
* - --json 结构化 JSON 输出
|
|
7
|
-
* - 退出码:0 成功 / 1 业务错误 / 2 守护进程不可达
|
|
8
|
-
*/
|
|
9
|
-
export interface ReadTreeOptions {
|
|
10
|
-
json?: boolean;
|
|
11
|
-
depth?: string;
|
|
12
|
-
maxNodes?: string;
|
|
13
|
-
maxSiblings?: string;
|
|
14
|
-
ancestorLevels?: string;
|
|
15
|
-
includePowerup?: boolean;
|
|
16
|
-
}
|
|
17
|
-
export declare function readTreeCommand(remId: string, options?: ReadTreeOptions): Promise<void>;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* search 命令
|
|
3
|
-
*
|
|
4
|
-
* 在知识库中按文本搜索 Rem。
|
|
5
|
-
* - --limit N 结果数量上限(默认 20)
|
|
6
|
-
* - --json 结构化 JSON 输出
|
|
7
|
-
*/
|
|
8
|
-
export interface SearchOptions {
|
|
9
|
-
json?: boolean;
|
|
10
|
-
limit?: string;
|
|
11
|
-
}
|
|
12
|
-
export declare function searchCommand(query: string, options?: SearchOptions): Promise<void>;
|
package/dist/cli/config.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 配置加载
|
|
3
|
-
*
|
|
4
|
-
* 从项目根目录读取 .remnote-bridge.json,合并默认值。
|
|
5
|
-
* 文件不存在时使用全部默认值,不报错。
|
|
6
|
-
*/
|
|
7
|
-
export interface DefaultsConfig {
|
|
8
|
-
maxNodes: number;
|
|
9
|
-
maxSiblings: number;
|
|
10
|
-
cacheMaxSize: number;
|
|
11
|
-
readTreeDepth: number;
|
|
12
|
-
readTreeAncestorLevels: number;
|
|
13
|
-
readTreeIncludePowerup: boolean;
|
|
14
|
-
readGlobeDepth: number;
|
|
15
|
-
readContextMode: 'focus' | 'page';
|
|
16
|
-
readContextAncestorLevels: number;
|
|
17
|
-
readContextDepth: number;
|
|
18
|
-
searchNumResults: number;
|
|
19
|
-
}
|
|
20
|
-
export declare const DEFAULT_DEFAULTS: Readonly<DefaultsConfig>;
|
|
21
|
-
export interface BridgeConfig {
|
|
22
|
-
wsPort: number;
|
|
23
|
-
devServerPort: number;
|
|
24
|
-
configPort: number;
|
|
25
|
-
daemonTimeoutMinutes: number;
|
|
26
|
-
defaults: DefaultsConfig;
|
|
27
|
-
}
|
|
28
|
-
export declare const DEFAULT_CONFIG: Readonly<BridgeConfig>;
|
|
29
|
-
/**
|
|
30
|
-
* 查找项目根目录(monorepo 根:包含 .git 目录的最近祖先)
|
|
31
|
-
*
|
|
32
|
-
* 从 startDir 向上查找 .git 目录,找到即返回。
|
|
33
|
-
* 到达文件系统根仍未找到时回退到 cwd。
|
|
34
|
-
*/
|
|
35
|
-
export declare function findProjectRoot(startDir?: string): string;
|
|
36
|
-
/**
|
|
37
|
-
* 加载配置。不存在时返回默认值。
|
|
38
|
-
*/
|
|
39
|
-
export declare function loadConfig(projectRoot?: string): BridgeConfig;
|
|
40
|
-
/**
|
|
41
|
-
* 获取配置文件路径
|
|
42
|
-
*/
|
|
43
|
-
export declare function configFilePath(projectRoot?: string): string;
|
|
44
|
-
/**
|
|
45
|
-
* 原子写入配置文件(写临时文件 → rename)
|
|
46
|
-
*/
|
|
47
|
-
export declare function saveConfig(filePath: string, config: BridgeConfig): void;
|
|
48
|
-
/**
|
|
49
|
-
* PID 文件路径
|
|
50
|
-
*/
|
|
51
|
-
export declare function pidFilePath(projectRoot?: string): string;
|
|
52
|
-
/**
|
|
53
|
-
* 日志文件路径
|
|
54
|
-
*/
|
|
55
|
-
export declare function logFilePath(projectRoot?: string): string;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* webpack-dev-server 子进程管理
|
|
3
|
-
*
|
|
4
|
-
* 在 remnote-plugin 目录下启动 npm run dev。
|
|
5
|
-
*/
|
|
6
|
-
export interface DevServerOptions {
|
|
7
|
-
pluginDir: string;
|
|
8
|
-
port: number;
|
|
9
|
-
onLog?: (message: string, level: 'info' | 'warn' | 'error') => void;
|
|
10
|
-
onExit?: (code: number | null) => void;
|
|
11
|
-
}
|
|
12
|
-
export declare class DevServerManager {
|
|
13
|
-
private child;
|
|
14
|
-
private options;
|
|
15
|
-
constructor(options: DevServerOptions);
|
|
16
|
-
/**
|
|
17
|
-
* 启动 webpack-dev-server。
|
|
18
|
-
* 如果 remnote-plugin 目录不存在,抛出错误。
|
|
19
|
-
*/
|
|
20
|
-
start(): void;
|
|
21
|
-
/**
|
|
22
|
-
* 停止 webpack-dev-server。
|
|
23
|
-
*/
|
|
24
|
-
stop(): Promise<void>;
|
|
25
|
-
isRunning(): boolean;
|
|
26
|
-
}
|
package/dist/cli/daemon/pid.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PID 文件管理
|
|
3
|
-
*
|
|
4
|
-
* 写入、读取、stale 检测、清理。
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* 写入 PID 文件
|
|
8
|
-
*/
|
|
9
|
-
export declare function writePid(filePath: string, pid: number): void;
|
|
10
|
-
/**
|
|
11
|
-
* 读取 PID 文件。文件不存在返回 null。
|
|
12
|
-
*/
|
|
13
|
-
export declare function readPid(filePath: string): number | null;
|
|
14
|
-
/**
|
|
15
|
-
* 删除 PID 文件
|
|
16
|
-
*/
|
|
17
|
-
export declare function removePid(filePath: string): void;
|
|
18
|
-
/**
|
|
19
|
-
* 检查进程是否存活
|
|
20
|
-
*/
|
|
21
|
-
export declare function isProcessAlive(pid: number): boolean;
|
|
22
|
-
/**
|
|
23
|
-
* 检查守护进程状态。返回:
|
|
24
|
-
* - { running: true, pid } — 守护进程正在运行
|
|
25
|
-
* - { running: false } — 守护进程未运行(无 PID 文件或 stale)
|
|
26
|
-
*
|
|
27
|
-
* 若 PID 文件存在但进程已死(stale),自动清理 PID 文件。
|
|
28
|
-
*/
|
|
29
|
-
export declare function checkDaemon(pidPath: string): {
|
|
30
|
-
running: true;
|
|
31
|
-
pid: number;
|
|
32
|
-
} | {
|
|
33
|
-
running: false;
|
|
34
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Daemon 通信工具 — CLI 命令向守护进程发送请求的通用方法
|
|
3
|
-
*
|
|
4
|
-
* 封装 WS 连接建立、请求发送、响应等待、超时处理的完整流程。
|
|
5
|
-
* 所有业务命令(health、read-rem、edit-rem 等)均通过此函数与 daemon 通信。
|
|
6
|
-
*/
|
|
7
|
-
export declare class DaemonNotRunningError extends Error {
|
|
8
|
-
constructor();
|
|
9
|
-
}
|
|
10
|
-
export declare class DaemonUnreachableError extends Error {
|
|
11
|
-
constructor(cause: string);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* 向守护进程发送请求并等待响应。
|
|
15
|
-
*
|
|
16
|
-
* 流程:读取 PID 文件 → 建立 WS 连接 → 发送 BridgeRequest → 等待 BridgeResponse → 关闭连接
|
|
17
|
-
*
|
|
18
|
-
* @throws DaemonNotRunningError — PID 文件不存在或进程已死
|
|
19
|
-
* @throws DaemonUnreachableError — WS 连接失败
|
|
20
|
-
* @throws Error — daemon 返回 error 字段或响应超时
|
|
21
|
-
*/
|
|
22
|
-
export declare function sendDaemonRequest(action: string, payload?: Record<string, unknown>, options?: {
|
|
23
|
-
timeout?: number;
|
|
24
|
-
}): Promise<unknown>;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ContextReadHandler — read-context 请求的业务编排
|
|
3
|
-
*
|
|
4
|
-
* 职责:转发到 Plugin 获取上下文视图,返回结果。
|
|
5
|
-
*/
|
|
6
|
-
import type { DefaultsConfig } from '../config.js';
|
|
7
|
-
export interface ContextReadResult {
|
|
8
|
-
nodeCount: number;
|
|
9
|
-
outline: string;
|
|
10
|
-
breadcrumb: string[];
|
|
11
|
-
mode: 'focus' | 'page';
|
|
12
|
-
}
|
|
13
|
-
export declare class ContextReadHandler {
|
|
14
|
-
private forwardToPlugin;
|
|
15
|
-
private defaults;
|
|
16
|
-
constructor(forwardToPlugin: (action: string, payload: Record<string, unknown>) => Promise<unknown>, defaults?: DefaultsConfig);
|
|
17
|
-
handleReadContext(payload: Record<string, unknown>): Promise<ContextReadResult>;
|
|
18
|
-
}
|