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
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EditHandler — edit-rem 命令的编排器
|
|
3
|
-
*
|
|
4
|
-
* 在 daemon 层实现三道防线 + str_replace + 后处理校验。
|
|
5
|
-
* Plugin 只负责原子写入(write_rem_fields)。
|
|
6
|
-
*
|
|
7
|
-
* 防线 1:缓存存在性检查(必须先 read 再 edit)
|
|
8
|
-
* 防线 2:乐观并发检测(当前 JSON 与缓存 JSON 比较)
|
|
9
|
-
* 防线 3:str_replace 精确匹配(old_str 必须唯一匹配)
|
|
10
|
-
*/
|
|
11
|
-
import { RemCache } from './rem-cache.js';
|
|
12
|
-
export interface EditRemPayload {
|
|
13
|
-
remId: string;
|
|
14
|
-
oldStr: string;
|
|
15
|
-
newStr: string;
|
|
16
|
-
}
|
|
17
|
-
export interface EditRemResult {
|
|
18
|
-
ok: boolean;
|
|
19
|
-
changes: string[];
|
|
20
|
-
warnings: string[];
|
|
21
|
-
error?: string;
|
|
22
|
-
appliedChanges?: string[];
|
|
23
|
-
failedField?: string;
|
|
24
|
-
}
|
|
25
|
-
export declare class EditHandler {
|
|
26
|
-
private cache;
|
|
27
|
-
private forwardToPlugin;
|
|
28
|
-
constructor(cache: RemCache, forwardToPlugin: (action: string, payload: Record<string, unknown>) => Promise<unknown>);
|
|
29
|
-
handleEditRem(payload: EditRemPayload): Promise<EditRemResult>;
|
|
30
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GlobeReadHandler — read-globe 请求的业务编排
|
|
3
|
-
*
|
|
4
|
-
* 职责:转发到 Plugin 获取知识库概览,返回结果。
|
|
5
|
-
* globe 是低频操作,不做缓存。
|
|
6
|
-
*/
|
|
7
|
-
import type { DefaultsConfig } from '../config.js';
|
|
8
|
-
export interface GlobeReadResult {
|
|
9
|
-
nodeCount: number;
|
|
10
|
-
outline: string;
|
|
11
|
-
}
|
|
12
|
-
export declare class GlobeReadHandler {
|
|
13
|
-
private forwardToPlugin;
|
|
14
|
-
private defaults;
|
|
15
|
-
constructor(forwardToPlugin: (action: string, payload: Record<string, unknown>) => Promise<unknown>, defaults?: DefaultsConfig);
|
|
16
|
-
handleReadGlobe(payload: Record<string, unknown>): Promise<GlobeReadResult>;
|
|
17
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ReadHandler — read-rem 请求的业务编排
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* 1. 转发到 Plugin 获取完整 RemObject
|
|
6
|
-
* 2. 序列化为 JSON 字符串并缓存(完整版本)
|
|
7
|
-
* 3. 根据 fields/full 参数过滤字段返回给 CLI
|
|
8
|
-
*/
|
|
9
|
-
import { RemCache } from './rem-cache.js';
|
|
10
|
-
export declare class ReadHandler {
|
|
11
|
-
private cache;
|
|
12
|
-
private forwardToPlugin;
|
|
13
|
-
private onLog?;
|
|
14
|
-
constructor(cache: RemCache, forwardToPlugin: (action: string, payload: Record<string, unknown>) => Promise<unknown>, onLog?: ((message: string, level: "info" | "warn" | "error") => void) | undefined);
|
|
15
|
-
handleReadRem(payload: Record<string, unknown>): Promise<unknown>;
|
|
16
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RemCache — LRU 缓存,存储 Rem 的序列化 JSON
|
|
3
|
-
*
|
|
4
|
-
* 缓存存储在 daemon 内存中,生命周期与 daemon 一致。
|
|
5
|
-
* disconnect 关闭 daemon → 缓存自然消失。
|
|
6
|
-
*/
|
|
7
|
-
export declare class RemCache {
|
|
8
|
-
private cache;
|
|
9
|
-
private maxSize;
|
|
10
|
-
constructor(maxSize?: number);
|
|
11
|
-
get(remId: string): string | null;
|
|
12
|
-
/** 获取缓存条目的创建时间(ISO 8601),不存在返回 null */
|
|
13
|
-
getCreatedAt(remId: string): string | null;
|
|
14
|
-
set(remId: string, json: string): void;
|
|
15
|
-
has(remId: string): boolean;
|
|
16
|
-
delete(remId: string): void;
|
|
17
|
-
clear(): void;
|
|
18
|
-
get size(): number;
|
|
19
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TreeEditHandler — edit-tree 请求的业务编排
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* 1. 三道防线(缓存存在、变更检测、str_replace 精确匹配)
|
|
6
|
-
* 2. 解析新旧大纲并 diff
|
|
7
|
-
* 3. 逐项执行操作(通过 forwardToPlugin 调用原子操作)
|
|
8
|
-
* 4. 成功后重新 read-tree 更新缓存
|
|
9
|
-
*/
|
|
10
|
-
import type { DefaultsConfig } from '../config.js';
|
|
11
|
-
import { RemCache } from './rem-cache.js';
|
|
12
|
-
import { type TreeOp } from './tree-parser.js';
|
|
13
|
-
export interface TreeEditPayload {
|
|
14
|
-
remId: string;
|
|
15
|
-
oldStr: string;
|
|
16
|
-
newStr: string;
|
|
17
|
-
}
|
|
18
|
-
export interface TreeEditResult {
|
|
19
|
-
ok: boolean;
|
|
20
|
-
operations: TreeOp[];
|
|
21
|
-
error?: string;
|
|
22
|
-
details?: Record<string, unknown>;
|
|
23
|
-
}
|
|
24
|
-
export declare class TreeEditHandler {
|
|
25
|
-
private cache;
|
|
26
|
-
private forwardToPlugin;
|
|
27
|
-
private defaults;
|
|
28
|
-
constructor(cache: RemCache, forwardToPlugin: (action: string, payload: Record<string, unknown>) => Promise<unknown>, defaults?: DefaultsConfig);
|
|
29
|
-
handleEditTree(payload: TreeEditPayload): Promise<TreeEditResult>;
|
|
30
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* tree-parser.ts — 大纲解析 + diff 算法
|
|
3
|
-
*
|
|
4
|
-
* CLI handlers 层的纯函数。解析 Markdown 大纲文本为树结构,
|
|
5
|
-
* 对比新旧两棵树生成增量操作列表。
|
|
6
|
-
*
|
|
7
|
-
* 不依赖 server / commands / daemon(强约束)。
|
|
8
|
-
*/
|
|
9
|
-
/** 大纲中解析出的节点 */
|
|
10
|
-
export interface OutlineNode {
|
|
11
|
-
/** Rem ID,null = 新增行 */
|
|
12
|
-
remId: string | null;
|
|
13
|
-
/** 缩进级别(0 = 根节点) */
|
|
14
|
-
depth: number;
|
|
15
|
-
/** 去除缩进和行尾标记后的纯内容 */
|
|
16
|
-
rawContent: string;
|
|
17
|
-
/** 原始行文本 */
|
|
18
|
-
rawLine: string;
|
|
19
|
-
/** 子节点 */
|
|
20
|
-
children: OutlineNode[];
|
|
21
|
-
/** 是否为省略占位符行 */
|
|
22
|
-
isElided?: boolean;
|
|
23
|
-
}
|
|
24
|
-
/** diff 操作类型 */
|
|
25
|
-
export type TreeOp = {
|
|
26
|
-
type: 'create';
|
|
27
|
-
content: string;
|
|
28
|
-
parentId: string;
|
|
29
|
-
position: number;
|
|
30
|
-
parentIsMultiline?: boolean;
|
|
31
|
-
} | {
|
|
32
|
-
type: 'delete';
|
|
33
|
-
remId: string;
|
|
34
|
-
} | {
|
|
35
|
-
type: 'move';
|
|
36
|
-
remId: string;
|
|
37
|
-
fromParentId: string;
|
|
38
|
-
toParentId: string;
|
|
39
|
-
position: number;
|
|
40
|
-
fromParentIsMultiline?: boolean;
|
|
41
|
-
toParentIsMultiline?: boolean;
|
|
42
|
-
selfHasPracticeDirection?: boolean;
|
|
43
|
-
} | {
|
|
44
|
-
type: 'reorder';
|
|
45
|
-
parentId: string;
|
|
46
|
-
order: string[];
|
|
47
|
-
};
|
|
48
|
-
export interface TreeDiffResult {
|
|
49
|
-
operations: TreeOp[];
|
|
50
|
-
}
|
|
51
|
-
export interface TreeDiffError {
|
|
52
|
-
type: 'content_modified' | 'orphan_detected' | 'folded_delete' | 'root_modified' | 'indent_skip' | 'elided_modified';
|
|
53
|
-
message: string;
|
|
54
|
-
details: Record<string, unknown>;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* 解析 Markdown 大纲文本为树结构。
|
|
58
|
-
*
|
|
59
|
-
* 使用栈追踪当前路径,根据缩进级别确定父子关系。
|
|
60
|
-
*/
|
|
61
|
-
export declare function parseOutline(text: string): OutlineNode[];
|
|
62
|
-
export interface PowerupPrefixResult {
|
|
63
|
-
cleanContent: string;
|
|
64
|
-
powerups: Record<string, unknown>;
|
|
65
|
-
/** 箭头分隔符后的 backText(有 backText 时) */
|
|
66
|
-
backText?: string;
|
|
67
|
-
/** 箭头分隔符推导的 practiceDirection */
|
|
68
|
-
practiceDirection?: string;
|
|
69
|
-
/** 是否为 multiline(↓ ↑ ↕) */
|
|
70
|
-
isMultiline?: boolean;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* 从新增行的 rawContent 中解析 Markdown 前缀和箭头分隔符,提取属性。
|
|
74
|
-
*
|
|
75
|
-
* 解析顺序与 read-tree 输出的嵌套顺序对称:Header → Todo → Code → 箭头分隔符。
|
|
76
|
-
*
|
|
77
|
-
* 箭头分隔符(v2 格式):
|
|
78
|
-
* 中间箭头(有 backText):` → ` ` ← ` ` ↔ ` ` ↓ ` ` ↑ ` ` ↕ `
|
|
79
|
-
* 尾部箭头(无 backText,multiline):` ↓` ` ↑` ` ↕`
|
|
80
|
-
*
|
|
81
|
-
* ⚠️ 已知限制:使用 indexOf 匹配第一个箭头,如果用户新增行的内容本身包含
|
|
82
|
-
* 箭头字符(如 `A → B → C`),会被误切割为 text + backText。
|
|
83
|
-
* 对于 read→edit 往返的已有行不受影响(序列化/反序列化对称)。
|
|
84
|
-
*/
|
|
85
|
-
export declare function parsePowerupPrefix(rawContent: string): PowerupPrefixResult;
|
|
86
|
-
/** 从行内容判断是否为 multiline 父节点(内容包含 ↓↑↕ 箭头) */
|
|
87
|
-
export declare function isContentMultiline(rawContent: string): boolean;
|
|
88
|
-
/**
|
|
89
|
-
* 对比新旧大纲树,生成操作列表或报错。
|
|
90
|
-
*
|
|
91
|
-
* @param oldRoots 旧大纲解析结果
|
|
92
|
-
* @param newRoots 新大纲解析结果(str_replace 后)
|
|
93
|
-
* @returns 操作列表或错误
|
|
94
|
-
*/
|
|
95
|
-
export declare function diffTrees(oldRoots: OutlineNode[], newRoots: OutlineNode[]): TreeDiffResult | TreeDiffError;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TreeReadHandler — read-tree 请求的业务编排
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* 1. 转发到 Plugin 获取序列化的 Markdown 大纲
|
|
6
|
-
* 2. 以 'tree:' + remId 为 key 缓存大纲文本
|
|
7
|
-
* 3. 返回大纲结果给 CLI command
|
|
8
|
-
*/
|
|
9
|
-
import type { DefaultsConfig } from '../config.js';
|
|
10
|
-
import { RemCache } from './rem-cache.js';
|
|
11
|
-
export interface TreeReadResult {
|
|
12
|
-
rootId: string;
|
|
13
|
-
depth: number;
|
|
14
|
-
nodeCount: number;
|
|
15
|
-
outline: string;
|
|
16
|
-
powerupFiltered?: {
|
|
17
|
-
tags: number;
|
|
18
|
-
children: number;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
export declare class TreeReadHandler {
|
|
22
|
-
private cache;
|
|
23
|
-
private forwardToPlugin;
|
|
24
|
-
private onLog?;
|
|
25
|
-
private defaults;
|
|
26
|
-
constructor(cache: RemCache, forwardToPlugin: (action: string, payload: Record<string, unknown>) => Promise<unknown>, onLog?: ((message: string, level: "info" | "warn" | "error") => void) | undefined, defaults?: DefaultsConfig);
|
|
27
|
-
handleReadTree(payload: Record<string, unknown>): Promise<TreeReadResult>;
|
|
28
|
-
}
|
package/dist/cli/main.d.ts
DELETED
package/dist/cli/protocol.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WS 通信协议类型定义
|
|
3
|
-
*
|
|
4
|
-
* 定义 CLI 守护进程与 Plugin 之间的 WebSocket 消息格式。
|
|
5
|
-
* 与 remnote-plugin 各自独立定义,不共享代码。
|
|
6
|
-
*/
|
|
7
|
-
export type ConnectionStatus = 'disconnected' | 'connecting' | 'connected';
|
|
8
|
-
export interface HelloMessage {
|
|
9
|
-
type: 'hello';
|
|
10
|
-
version: string;
|
|
11
|
-
sdkReady: boolean;
|
|
12
|
-
}
|
|
13
|
-
export interface PingMessage {
|
|
14
|
-
type: 'ping';
|
|
15
|
-
}
|
|
16
|
-
export interface PongMessage {
|
|
17
|
-
type: 'pong';
|
|
18
|
-
}
|
|
19
|
-
export interface BridgeRequest {
|
|
20
|
-
id: string;
|
|
21
|
-
action: string;
|
|
22
|
-
payload: Record<string, unknown>;
|
|
23
|
-
}
|
|
24
|
-
export interface BridgeResponse {
|
|
25
|
-
id: string;
|
|
26
|
-
result?: unknown;
|
|
27
|
-
error?: string;
|
|
28
|
-
}
|
|
29
|
-
export interface StatusResult {
|
|
30
|
-
pluginConnected: boolean;
|
|
31
|
-
sdkReady: boolean;
|
|
32
|
-
uptime: number;
|
|
33
|
-
timeoutRemaining: number;
|
|
34
|
-
}
|
|
35
|
-
export declare function isHelloMessage(msg: unknown): msg is HelloMessage;
|
|
36
|
-
export declare function isPingMessage(msg: unknown): msg is PingMessage;
|
|
37
|
-
export declare function isPongMessage(msg: unknown): msg is PongMessage;
|
|
38
|
-
export declare function isBridgeRequest(msg: unknown): msg is BridgeRequest;
|
|
39
|
-
export declare function isBridgeResponse(msg: unknown): msg is BridgeResponse;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ConfigServer — HTTP 配置管理服务器
|
|
3
|
-
*
|
|
4
|
-
* 绑定 127.0.0.1:<configPort>,提供可视化配置页面。
|
|
5
|
-
* - GET / — 返回内联 HTML/CSS/JS 配置页面
|
|
6
|
-
* - GET /api/config — 返回当前配置 JSON
|
|
7
|
-
* - POST /api/config — 校验 → saveConfig → 返回成功
|
|
8
|
-
* - POST /api/restart — 调用 onRestart() 回调 → 返回成功
|
|
9
|
-
*/
|
|
10
|
-
export interface ConfigServerOptions {
|
|
11
|
-
port: number;
|
|
12
|
-
host?: string;
|
|
13
|
-
projectRoot: string;
|
|
14
|
-
onRestart: () => Promise<void>;
|
|
15
|
-
onLog?: (message: string, level: 'info' | 'warn' | 'error') => void;
|
|
16
|
-
}
|
|
17
|
-
export declare class ConfigServer {
|
|
18
|
-
private server;
|
|
19
|
-
private options;
|
|
20
|
-
constructor(options: ConfigServerOptions);
|
|
21
|
-
private log;
|
|
22
|
-
start(): Promise<void>;
|
|
23
|
-
stop(): Promise<void>;
|
|
24
|
-
private handleRequest;
|
|
25
|
-
private renderPage;
|
|
26
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSocket Server
|
|
3
|
-
*
|
|
4
|
-
* 守护进程的核心基础设施:监听端口,管理 Plugin 和 CLI 命令的连接。
|
|
5
|
-
* - 接受 Plugin 的 hello 握手
|
|
6
|
-
* - 向 Plugin 发送 ping 心跳
|
|
7
|
-
* - 分发 CLI 请求到对应的 handler
|
|
8
|
-
* - 只允许一个 Plugin 连接
|
|
9
|
-
*
|
|
10
|
-
* 业务编排逻辑在 handlers/ 中,本文件只做连接管理和请求分发。
|
|
11
|
-
*/
|
|
12
|
-
import type { StatusResult } from '../protocol.js';
|
|
13
|
-
import type { DefaultsConfig } from '../config.js';
|
|
14
|
-
export interface BridgeServerConfig {
|
|
15
|
-
port: number;
|
|
16
|
-
host?: string;
|
|
17
|
-
pingIntervalMs?: number;
|
|
18
|
-
pongTimeoutMs?: number;
|
|
19
|
-
onLog?: (message: string, level: 'info' | 'warn' | 'error') => void;
|
|
20
|
-
/** 获取守护进程超时剩余秒数(由 daemon 注入) */
|
|
21
|
-
getTimeoutRemaining?: () => number;
|
|
22
|
-
/** 业务默认值(由 daemon 注入) */
|
|
23
|
-
defaults?: DefaultsConfig;
|
|
24
|
-
}
|
|
25
|
-
export declare class BridgeServer {
|
|
26
|
-
private wss;
|
|
27
|
-
private pluginSocket;
|
|
28
|
-
private pluginVersion;
|
|
29
|
-
private pluginSdkReady;
|
|
30
|
-
private pingTimer;
|
|
31
|
-
private pongTimer;
|
|
32
|
-
private startTime;
|
|
33
|
-
private pendingPluginRequests;
|
|
34
|
-
private readHandler;
|
|
35
|
-
private editHandler;
|
|
36
|
-
private treeReadHandler;
|
|
37
|
-
private treeEditHandler;
|
|
38
|
-
private globeReadHandler;
|
|
39
|
-
private contextReadHandler;
|
|
40
|
-
private defaults;
|
|
41
|
-
private config;
|
|
42
|
-
/** 每当收到 CLI 命令请求时触发(用于刷新守护进程超时计时器) */
|
|
43
|
-
onCliRequest?: () => void;
|
|
44
|
-
constructor(config: BridgeServerConfig);
|
|
45
|
-
private log;
|
|
46
|
-
/**
|
|
47
|
-
* 启动 WS Server。返回 Promise,监听成功后 resolve。
|
|
48
|
-
*/
|
|
49
|
-
start(): Promise<void>;
|
|
50
|
-
/**
|
|
51
|
-
* 关闭 WS Server。
|
|
52
|
-
*/
|
|
53
|
-
stop(): Promise<void>;
|
|
54
|
-
private handleConnection;
|
|
55
|
-
private handlePluginHello;
|
|
56
|
-
private handleCliRequest;
|
|
57
|
-
/**
|
|
58
|
-
* 向 Plugin 发送子请求并等待响应。
|
|
59
|
-
* 生成独立的请求 ID,通过 pendingPluginRequests 关联 Promise。
|
|
60
|
-
*/
|
|
61
|
-
forwardToPlugin(action: string, payload: Record<string, unknown>): Promise<unknown>;
|
|
62
|
-
private handlePluginResponse;
|
|
63
|
-
private handlePong;
|
|
64
|
-
private startPingInterval;
|
|
65
|
-
private stopPingInterval;
|
|
66
|
-
/** 获取当前状态(timeoutRemaining 通过构造时注入的回调获取) */
|
|
67
|
-
getStatus(): StatusResult;
|
|
68
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* daemon-client.ts
|
|
3
|
-
*
|
|
4
|
-
* 封装对 remnote-bridge CLI 的子进程调用(--json 模式)。
|
|
5
|
-
* MCP Server 通过此模块与 CLI 守护进程通信。
|
|
6
|
-
*
|
|
7
|
-
* 调用约定(来自 src/cli/main.ts):
|
|
8
|
-
* --json 是全局选项,位于命令名之前。
|
|
9
|
-
* 无 payload:remnote-bridge --json <command>
|
|
10
|
-
* 有 payload:remnote-bridge --json <command> '<JSON>'
|
|
11
|
-
*/
|
|
12
|
-
import type { CliResponse } from './types.js';
|
|
13
|
-
export declare class CliError extends Error {
|
|
14
|
-
/** CLI 返回的 command 字段 */
|
|
15
|
-
readonly command: string;
|
|
16
|
-
/** CLI 返回的完整响应(如果成功解析了 JSON) */
|
|
17
|
-
readonly response?: CliResponse;
|
|
18
|
-
constructor(message: string, command: string, response?: CliResponse);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* 通过子进程调用 remnote-bridge --json 模式。
|
|
22
|
-
*
|
|
23
|
-
* @param command CLI 命令名(如 'read-rem', 'edit-tree', 'health')
|
|
24
|
-
* @param payload JSON 参数对象(无参数的命令可省略)
|
|
25
|
-
* @param options 可选配置
|
|
26
|
-
* @returns 解析后的 CliResponse(ok === true)
|
|
27
|
-
* @throws {CliError} 当 CLI 返回 ok: false 或进程异常时
|
|
28
|
-
*/
|
|
29
|
-
export declare function callCli(command: string, payload?: Record<string, unknown>, options?: {
|
|
30
|
-
timeoutMs?: number;
|
|
31
|
-
}): Promise<CliResponse>;
|
package/dist/mcp/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const SERVER_INSTRUCTIONS = "\n# RemNote Bridge MCP Server \u2014 Agent \u64CD\u4F5C\u624B\u518C\n\nRemNote \u77E5\u8BC6\u5E93\u64CD\u4F5C\u5DE5\u5177\u96C6\u3002\u4F60\u53EF\u4EE5\u901A\u8FC7\u8FD9\u4E9B\u5DE5\u5177\u8BFB\u53D6\u3001\u641C\u7D22\u3001\u7F16\u8F91\u7528\u6237\u7684 RemNote \u7B14\u8BB0\u548C\u77E5\u8BC6\u7ED3\u6784\u3002\u4E0D\u80FD\u64CD\u63A7\u95EA\u5361\uFF08Card/Flashcard\uFF09\u672C\u8EAB\u2014\u2014\u95EA\u5361\u7531 RemNote \u6839\u636E Rem \u5C5E\u6027\u81EA\u52A8\u751F\u6210\uFF1B\u4E5F\u4E0D\u80FD\u7BA1\u7406 Plugin \u6216\u7CFB\u7EDF\u914D\u7F6E\u3002\n\n---\n\n## 1. Core Concepts\n\n### Everything is Rem\n\n\u7528\u6237\u8BF4\u7684\"\u7B14\u8BB0\"\u3001\"\u6587\u6863\"\u3001\"\u6587\u4EF6\u5939\"\u3001\"\u95EA\u5361\"\uFF0C\u5E95\u5C42\u90FD\u662F **Rem**\u3002\u4E0D\u540C\u5F62\u6001\u901A\u8FC7\u5C5E\u6027\u533A\u5206\uFF1A\n\n| \u7528\u6237\u8BF4\u7684 | \u5B9E\u9645\u4E0A\u662F | \u533A\u5206\u65B9\u5F0F |\n|:---------|:---------|:---------|\n| \u7B14\u8BB0 / \u6761\u76EE | Rem | \u6700\u57FA\u672C\u7684\u6570\u636E\u5355\u5143 |\n| \u6587\u6863 / \u9875\u9762 | Rem\uFF08\\`isDocument=true\\`\uFF09 | \u53EF\u72EC\u7ACB\u6253\u5F00\u7684\u9875\u9762 |\n| \u6587\u4EF6\u5939 | Rem\uFF08Document + \u5B50\u8282\u70B9\u5168\u662F Document\uFF09 | UI \u6982\u5FF5\uFF0C\u65E0\u72EC\u7ACB\u6807\u8BB0 |\n| \u95EA\u5361 | Card\u2014\u2014\u7531 Rem \u5C5E\u6027\u81EA\u52A8\u751F\u6210 | **\u4E0D\u53EF\u76F4\u63A5\u64CD\u63A7** |\n\n### Type \u7CFB\u7EDF\n\nRem \u6709\u4E24\u4E2A\u72EC\u7ACB\u7EF4\u5EA6\uFF1A**type**\uFF08\u95EA\u5361\u8BED\u4E49\uFF09\u548C **isDocument**\uFF08\u9875\u9762\u8BED\u4E49\uFF09\uFF0C\u4E8C\u8005\u4E92\u4E0D\u5F71\u54CD\u3002\n\n| type | \u542B\u4E49 | UI \u8868\u73B0 |\n|:-----|:-----|:--------|\n| \\`concept\\` | \u6982\u5FF5\u5B9A\u4E49 | \u6587\u5B57**\u52A0\u7C97** |\n| \\`descriptor\\` | \u63CF\u8FF0/\u5C5E\u6027 | \u6587\u5B57*\u659C\u4F53* |\n| \\`default\\` | \u666E\u901A Rem | \u6B63\u5E38\u5B57\u91CD |\n| \\`portal\\` | \u5D4C\u5165\u5F15\u7528\u5BB9\u5668 | \u7D2B\u8272\u8FB9\u6846\uFF08**\u53EA\u8BFB**\uFF0C\u4E0D\u53EF\u8BBE\u7F6E\uFF09 |\n\n### Separator \u4E0E\u95EA\u5361\u521B\u5EFA\n\n\u5206\u9694\u7B26\u51B3\u5B9A Rem \u7684 type\u3001backText \u548C\u7EC3\u4E60\u65B9\u5411\u3002\u521B\u5EFA\u95EA\u5361\u7684\u672C\u8D28\u662F\u8BBE\u7F6E\u6B63\u786E\u7684\u5206\u9694\u7B26\uFF1A\n\n| \u5206\u9694\u7B26 | type | \u7528\u9014 |\n|:-------|:-----|:-----|\n| \\`::\\` | concept | \u6982\u5FF5\u5B9A\u4E49\uFF08\u53CC\u5411\uFF09 |\n| \\`;;\\` | descriptor | \u63CF\u8FF0\u5C5E\u6027\uFF08\u6B63\u5411\uFF09 |\n| \\`>>\\` | default | \u6B63\u5411\u95EE\u7B54 |\n| \\`<<\\` | default | \u53CD\u5411\u95EE\u7B54 |\n| \\`<>\\` | default | \u53CC\u5411\u95EE\u7B54 |\n| \\`>>>\\` | default | \u591A\u884C\u7B54\u6848\uFF08\u5B50 Rem \u4E3A\u7B54\u6848\uFF09 |\n| \\`{{}}\\` | default | \u5B8C\u5F62\u586B\u7A7A |\n\n\u5B8C\u6574\u5206\u9694\u7B26-\u95EA\u5361\u6620\u5C04\u8868\u89C1 \\`resource://separator-flashcard\\`\u3002\n\n### \u94FE\u63A5\u673A\u5236\n\n| \u673A\u5236 | \u7528\u6237\u64CD\u4F5C | \u8BF4\u660E |\n|:-----|:---------|:-----|\n| Reference \\`[[\\` | \u6587\u672C\u5185\u5F15\u7528 | \u53EA\u662F\u6307\u9488\uFF0C\u4E0D\u540C\u6B65\u7F16\u8F91 |\n| Tag \\`##\\` | \u9644\u52A0\u6807\u7B7E | \u5206\u7C7B\u6807\u8BB0 |\n| Portal \\`((\\` | \u5D4C\u5165\u5B9E\u65F6\u89C6\u56FE | \u7F16\u8F91\u540C\u6B65\uFF0C\u5927\u7EB2\u4E2D\u6807\u4E3A \\`type:portal\\` |\n\n### Powerup \u8FC7\u6EE4\n\nRemNote \u7684\u683C\u5F0F\u8BBE\u7F6E\uFF08\u6807\u9898\u3001\u9AD8\u4EAE\u3001\u4EE3\u7801\u7B49\uFF09\u4F1A\u6CE8\u5165\u9690\u85CF\u7684\u7CFB\u7EDF Tag \u548C\u5B50 Rem\u3002\u8FD9\u4E9B\u566A\u97F3\u6570\u636E**\u9ED8\u8BA4\u81EA\u52A8\u8FC7\u6EE4**\uFF0C\u4F60\u901A\u5E38\u65E0\u9700\u5173\u5FC3\u3002\n\n---\n\n## 2. Session Lifecycle\n\n\u6240\u6709\u64CD\u4F5C\u90FD\u4F9D\u8D56\u4E00\u4E2A\u6D3B\u8DC3\u7684\u4F1A\u8BDD\u3002\u4F1A\u8BDD = \u5B88\u62A4\u8FDB\u7A0B\u7684\u751F\u547D\u5468\u671F\u3002\n\n\\`\\`\\`\nconnect \u2192 \u542F\u52A8 daemon\uFF08\u5E42\u7B49\uFF0C\u91CD\u590D\u8C03\u7528\u5B89\u5168\uFF09\n \u2193\nhealth \u2192 \u786E\u8BA4\u4E09\u5C42\u5C31\u7EEA\uFF08daemon / Plugin / SDK\uFF09\n \u2193\n\u4E1A\u52A1\u64CD\u4F5C\uFF08read / search / edit\uFF09\n \u2193\ndisconnect \u2192 \u5173\u95ED daemon\uFF0C\u6E05\u7A7A\u6240\u6709\u7F13\u5B58\n\\`\\`\\`\n\n**\u5173\u952E\u8981\u70B9**\uFF1A\n- \\`connect\\` \u662F\u6240\u6709\u4E1A\u52A1\u64CD\u4F5C\u7684\u524D\u63D0\uFF0C\u672A connect \u65F6\u4EFB\u4F55\u547D\u4EE4\u90FD\u4F1A\u62A5\"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\"\n- \\`health\\` \u68C0\u67E5\u4E09\u5C42\u72B6\u6001\uFF1Adaemon \u8FD0\u884C \u2192 Plugin \u5DF2\u8FDE\u63A5 \u2192 SDK \u5C31\u7EEA\uFF0C\u4E09\u8005\u5168\u90E8\u901A\u8FC7\u624D\u80FD\u6267\u884C\u4E1A\u52A1\u547D\u4EE4\n- \\`disconnect\\` \u4F1A\u9500\u6BC1\u6240\u6709\u7F13\u5B58\uFF0C\u4E4B\u524D\u7684 read \u7ED3\u679C\u5168\u90E8\u5931\u6548\n- daemon \u9ED8\u8BA4 30 \u5206\u949F\u65E0\u6D3B\u52A8\u81EA\u52A8\u5173\u95ED\n\n---\n\n## 3. Common Scenarios\n\n### \u573A\u666F A\uFF1A\u63A2\u7D22\u77E5\u8BC6\u5E93\n\n> \u7528\u6237\u8BF4\uFF1A\"\u5E2E\u6211\u770B\u770B\u77E5\u8BC6\u5E93\u91CC\u6709\u4EC0\u4E48\"\u3001\"\u6709\u54EA\u4E9B\u6587\u6863\"\n\n\u4F7F\u7528 \\`read_globe\\`\u3002\u5B83\u8FD4\u56DE\u77E5\u8BC6\u5E93\u4E2D\u6240\u6709 Document \u7684\u5C42\u7EA7\u7ED3\u6784\u9E1F\u77B0\u56FE\uFF0C\u975E Document \u5185\u5BB9\u4E0D\u5C55\u5F00\u3002\u8FD9\u662F\u4E86\u89E3\u77E5\u8BC6\u5E93\u6574\u4F53\u7EC4\u7EC7\u7684\u8D77\u70B9\u3002\u62FF\u5230\u611F\u5174\u8DA3\u7684 remId \u540E\uFF0C\u53EF\u4EE5\u7528 \\`read_tree\\` \u6DF1\u5165\u3002\n\n### \u573A\u666F B\uFF1A\u641C\u7D22\u5E76\u6DF1\u5165\n\n> \u7528\u6237\u8BF4\uFF1A\"\u641C\u4E00\u4E0B\u5173\u4E8E X \u7684\u7B14\u8BB0\"\u3001\"\u627E\u627E X \u5728\u54EA\u91CC\"\n\n\u5148\u7528 \\`search\\` \u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u83B7\u5F97\u5339\u914D\u7684 Rem \u5217\u8868\uFF08\u542B remId\uFF09\u3002\u7136\u540E\u6839\u636E\u9700\u8981\uFF1A\n- \u7528 \\`read_rem\\` \u67E5\u770B\u67D0\u6761\u7ED3\u679C\u7684\u8BE6\u7EC6\u5C5E\u6027\n- \u7528 \\`read_tree\\` \u5C55\u5F00\u67D0\u6761\u7ED3\u679C\u7684\u5B50\u6811\u7ED3\u6784\n\n**\u6CE8\u610F**\uFF1A\u4E2D\u6587\u7B49\u65E0\u7A7A\u683C\u8BED\u8A00\u641C\u7D22\u6548\u679C\u8F83\u5DEE\u3002\u5982\u679C\u5B8C\u6574\u8BCD\u641C\u7D22\u65E0\u7ED3\u679C\uFF0C\u5C1D\u8BD5\u7528\u5355\u4E2A\u6700\u5177\u533A\u5206\u5EA6\u7684\u5B57\u641C\u7D22\uFF1B\u5982\u679C\u4ECD\u7136\u65E0\u679C\uFF0C\u6539\u7528 \\`read_globe\\` \u2192 \\`read_tree\\` \u624B\u52A8\u5B9A\u4F4D\u3002\n\n### \u573A\u666F C\uFF1A\u4E86\u89E3\u5F53\u524D\u4E0A\u4E0B\u6587\n\n> \u7528\u6237\u8BF4\uFF1A\"\u6211\u73B0\u5728\u5728\u770B\u4EC0\u4E48\"\u3001\"\u5F53\u524D\u9875\u9762\u662F\u4EC0\u4E48\"\n\n\u4F7F\u7528 \\`read_context\\`\uFF1A\n- **focus \u6A21\u5F0F**\uFF08\u9ED8\u8BA4\uFF09\uFF1A\u4EE5\u7528\u6237\u5F53\u524D\u5149\u6807\u6240\u5728\u7684 Rem \u4E3A\u4E2D\u5FC3\uFF0C\u6784\u5EFA\u9C7C\u773C\u89C6\u56FE\u2014\u2014\u7126\u70B9\u5904\u5B8C\u5168\u5C55\u5F00\uFF0C\u5468\u56F4\u9012\u51CF\u3002\u7126\u70B9\u884C\u4EE5 \\`* \\` \u524D\u7F00\u6807\u8BB0\u3002\u9700\u8981\u7528\u6237\u5728 RemNote \u4E2D\u5DF2\u70B9\u51FB\u67D0\u4E2A Rem\u3002\n- **page \u6A21\u5F0F**\uFF1A\u4EE5\u5F53\u524D\u6253\u5F00\u7684\u9875\u9762\u4E3A\u6839\uFF0C\u5747\u5300\u5C55\u5F00\u5B50\u6811\u3002\n\n\u4E24\u79CD\u6A21\u5F0F\u90FD\u4F1A\u8FD4\u56DE\u9762\u5305\u5C51\u8DEF\u5F84\uFF0C\u5E2E\u52A9\u4F60\u7406\u89E3\u5F53\u524D\u4F4D\u7F6E\u5728\u77E5\u8BC6\u5E93\u4E2D\u7684\u5C42\u7EA7\u3002\n\n### \u573A\u666F D\uFF1A\u4FEE\u6539\u6587\u672C\u6216\u5C5E\u6027\n\n> \u7528\u6237\u8BF4\uFF1A\"\u628A\u8FD9\u4E2A\u6807\u9898\u6539\u6210...\"\u3001\"\u628A\u7C7B\u578B\u6539\u6210\u6982\u5FF5\"\u3001\"\u52A0\u4E2A\u9AD8\u4EAE\"\n\n\u5DE5\u4F5C\u6D41\u7A0B\uFF1A**\u5FC5\u987B\u5148 read \u518D edit**\u3002\n\n1. \\`read_rem\\` \u83B7\u53D6\u76EE\u6807 Rem \u7684 JSON \u5C5E\u6027\uFF08\u5EFA\u7ACB\u7F13\u5B58\uFF09\n2. \u5728\u8FD4\u56DE\u7684 JSON \u6587\u672C\u4E2D\u5B9A\u4F4D\u8981\u4FEE\u6539\u7684\u90E8\u5206\n3. \\`edit_rem\\` \u7528 str_replace \u66FF\u6362\uFF1AoldStr \u7CBE\u786E\u5339\u914D\u539F\u6587\uFF0CnewStr \u662F\u4FEE\u6539\u540E\u7684\u6587\u672C\n\nstr_replace \u64CD\u4F5C\u7684\u662F\u683C\u5F0F\u5316 JSON \u6587\u672C\uFF082 \u7A7A\u683C\u7F29\u8FDB\uFF09\u3002oldStr \u8981\u5305\u542B\u8DB3\u591F\u4E0A\u4E0B\u6587\uFF08\u5982\u5B57\u6BB5\u540D + \u503C\uFF09\uFF0C\u907F\u514D\u6A21\u7CCA\u5339\u914D\u3002\u66FF\u6362\u540E\u5FC5\u987B\u662F\u5408\u6CD5 JSON\u3002\n\n### \u573A\u666F E\uFF1A\u4FEE\u6539\u7ED3\u6784\uFF08\u65B0\u589E/\u5220\u9664/\u79FB\u52A8/\u91CD\u6392\uFF09\n\n> \u7528\u6237\u8BF4\uFF1A\"\u5728\u8FD9\u4E0B\u9762\u52A0\u51E0\u4E2A\u5B50\u9879\"\u3001\"\u5220\u6389\u8FD9\u4E2A\"\u3001\"\u628A\u8FD9\u4E2A\u79FB\u5230\u90A3\u4E0B\u9762\"\n\n\u5DE5\u4F5C\u6D41\u7A0B\uFF1A**\u5FC5\u987B\u5148 read_tree \u518D edit_tree**\u3002\n\n1. \\`read_tree\\` \u83B7\u53D6\u76EE\u6807\u533A\u57DF\u7684 Markdown \u5927\u7EB2\uFF08\u5EFA\u7ACB\u7F13\u5B58\uFF09\n2. \u5728\u5927\u7EB2\u4E2D\u7528 str_replace \u8FDB\u884C\u7ED3\u6784\u4FEE\u6539\uFF1A\n - **\u65B0\u589E**\uFF1A\u63D2\u5165\u65E0 remId \u6CE8\u91CA\u7684\u65B0\u884C\uFF08\u901A\u8FC7\u7F29\u8FDB\u786E\u5B9A\u7236\u5B50\u5173\u7CFB\uFF09\n - **\u5220\u9664**\uFF1A\u79FB\u9664\u5E26 remId \u7684\u884C\uFF08\u5FC5\u987B\u540C\u65F6\u5220\u9664\u6240\u6709\u5B50\u884C\uFF09\n - **\u79FB\u52A8**\uFF1A\u6539\u53D8\u884C\u7684\u7F29\u8FDB\u7EA7\u522B\u6216\u4F4D\u7F6E\n - **\u91CD\u6392**\uFF1A\u8C03\u6362\u540C\u7EA7\u884C\u7684\u987A\u5E8F\n\n**\u7EA2\u7EBF**\uFF1Aedit_tree **\u7981\u6B62\u4FEE\u6539\u5DF2\u6709\u884C\u7684\u6587\u5B57\u5185\u5BB9**\u2014\u2014\u6539\u5185\u5BB9\u5FC5\u987B\u7528 edit_rem\u3002edit_tree \u53EA\u505A\u7ED3\u6784\u64CD\u4F5C\u3002\n\n### \u573A\u666F F\uFF1A\u521B\u5EFA\u95EA\u5361\n\n> \u7528\u6237\u8BF4\uFF1A\"\u521B\u5EFA\u4E00\u4E2A\u6982\u5FF5\u5B9A\u4E49\"\u3001\"\u505A\u4E2A\u6B63\u5411\u95EE\u7B54\u5361\"\n\n\u521B\u5EFA\u95EA\u5361\u7684\u672C\u8D28\u662F\u521B\u5EFA\u5E26\u6B63\u786E\u5206\u9694\u7B26\u7684 Rem\u3002\u901A\u8FC7 \\`edit_tree\\` \u65B0\u589E\u884C\u65F6\u4F7F\u7528\u7BAD\u5934\u5206\u9694\u7B26\uFF1A\n\n- \u6982\u5FF5\u5B9A\u4E49\uFF1A\\`\u65B0\u6982\u5FF5 \u2192 \u5B9A\u4E49\u5185\u5BB9\\`\uFF08\u7136\u540E\u7528 edit_rem \u5C06 type \u6539\u4E3A concept\uFF09\n- \u6B63\u5411\u95EE\u7B54\uFF1A\\`\u95EE\u9898 \u2192 \u7B54\u6848\\`\n- \u591A\u884C\u7B54\u6848\uFF1A\\`\u95EE\u9898 \u2193\\`\uFF08\u5B50\u884C\u81EA\u52A8\u6210\u4E3A\u7B54\u6848\uFF09\n- \u53CC\u5411\u95EE\u7B54\uFF1A\\`\u95EE\u9898 \u2194 \u7B54\u6848\\`\n\n\u5982\u679C\u8981\u4FEE\u6539\u73B0\u6709 Rem \u7684\u95EA\u5361\u884C\u4E3A\uFF08\u6539\u5206\u9694\u7B26\u7C7B\u578B\uFF09\uFF0C\u4F7F\u7528 \\`read_rem\\` \u2192 \\`edit_rem\\` \u4FEE\u6539 type\u3001backText\u3001practiceDirection \u7B49\u5B57\u6BB5\u3002\n\n### \u573A\u666F G\uFF1A\u6392\u67E5\u8FDE\u63A5\u95EE\u9898\n\n> \u7528\u6237\u8BF4\uFF1A\"\u8FDE\u4E0D\u4E0A\"\u3001\"\u547D\u4EE4\u62A5\u9519\u4E86\"\n\n\u4F7F\u7528 \\`health\\` \u68C0\u67E5\u4E09\u5C42\u72B6\u6001\uFF0C\u7136\u540E\u5BF9\u75C7\u5904\u7406\uFF1A\n- daemon \u672A\u8FD0\u884C \u2192 \u6267\u884C \\`connect\\`\n- Plugin \u672A\u8FDE\u63A5 \u2192 \u63D0\u9192\u7528\u6237\u6253\u5F00 RemNote \u5E76\u786E\u8BA4\u63D2\u4EF6\u5DF2\u52A0\u8F7D\n- SDK \u672A\u5C31\u7EEA \u2192 \u7B49\u5F85\u51E0\u79D2\u540E\u91CD\u8BD5 health\n\n---\n\n## 4. Safety Rules\n\n### \u9EC4\u91D1\u6CD5\u5219\uFF1A\u5148 read \u518D edit\n\n- \\`edit_rem\\` \u524D\u5FC5\u987B\u5148 \\`read_rem\\` \u540C\u4E00\u4E2A remId\n- \\`edit_tree\\` \u524D\u5FC5\u987B\u5148 \\`read_tree\\` \u540C\u4E00\u4E2A remId\n\n\u8DF3\u8FC7 read \u76F4\u63A5 edit \u4F1A\u88AB\u62D2\u7EDD\u3002\u8FD9\u4E0D\u662F\u5EFA\u8BAE\uFF0C\u662F\u786C\u6027\u8981\u6C42\u3002\n\n### \u4E09\u9053\u9632\u7EBF\n\n\u6BCF\u6B21 edit \u64CD\u4F5C\u90FD\u7ECF\u8FC7\u4E09\u91CD\u5B89\u5168\u68C0\u67E5\uFF1A\n1. **\u7F13\u5B58\u5B58\u5728**\uFF1A\u5FC5\u987B\u6709\u5BF9\u5E94\u7684 read \u7F13\u5B58\n2. **\u5E76\u53D1\u68C0\u6D4B**\uFF1Aedit \u65F6\u91CD\u65B0\u8BFB\u53D6\u6700\u65B0\u6570\u636E\uFF0C\u4E0E\u7F13\u5B58\u6BD4\u8F83\u3002\u5982\u679C Rem \u5728 read \u4E4B\u540E\u88AB\u5916\u90E8\u4FEE\u6539\uFF0C\u62D2\u7EDD\u7F16\u8F91\u2014\u2014\u4F60\u5FC5\u987B\u91CD\u65B0 read\n3. **\u7CBE\u786E\u5339\u914D**\uFF1AoldStr \u5FC5\u987B\u5728\u76EE\u6807\u6587\u672C\u4E2D\u6070\u597D\u5339\u914D 1 \u6B21\n\n### edit_tree \u7981\u6B62\u4E8B\u9879\n\n- \u7981\u6B62\u4FEE\u6539\u5DF2\u6709\u884C\u7684\u6587\u5B57\u5185\u5BB9\uFF08\u6539\u5185\u5BB9\u7528 edit_rem\uFF09\n- \u7981\u6B62\u5220\u9664\u6839\u8282\u70B9\n- \u7981\u6B62\u5220\u9664\u6709\u9690\u85CF\u5B50\u8282\u70B9\u7684\u884C\uFF08\u5148\u7528\u66F4\u5927 depth \u91CD\u65B0 read_tree\uFF09\n- \u7981\u6B62\u5220\u9664\u7236\u884C\u4F46\u4FDD\u7559\u5B50\u884C\uFF08\u5FC5\u987B\u4E00\u8D77\u5220\uFF09\n- \u7981\u6B62\u4FEE\u6539\u6216\u5220\u9664\u7701\u7565\u5360\u4F4D\u7B26\uFF08\u5148\u7528\u66F4\u5927\u53C2\u6570\u91CD\u65B0 read_tree \u5C55\u5F00\uFF09\n\n\u8BE6\u7EC6\u89C4\u5219\u89C1\u5404\u5DE5\u5177\u7684 description\u3002\n\n---\n\n## 5. Output Format Quick Reference\n\n\\`read_tree\\`\u3001\\`read_globe\\`\u3001\\`read_context\\` \u8FD4\u56DE Markdown \u5927\u7EB2\u683C\u5F0F\u3002\n\n### \u884C\u7ED3\u6784\n\n\\`\\`\\`\n{\u7F29\u8FDB}{Markdown \u524D\u7F00}{\u5185\u5BB9}{\u7BAD\u5934}{backText} <!-- {remId} {\u6807\u8BB0} -->\n\\`\\`\\`\n\n- \u7F29\u8FDB\uFF1A\u6BCF\u7EA7 2 \u7A7A\u683C\n- Markdown \u524D\u7F00\uFF1A\\`# \\`(H1)\u3001\\`## \\`(H2)\u3001\\`### \\`(H3)\u3001\\`- [ ] \\`(\u5F85\u529E)\u3001\\`- [x] \\`(\u5DF2\u5B8C\u6210)\u3001\\`\\\\\\`\\`(\u4EE3\u7801)\n\n### \u5173\u952E\u5143\u6570\u636E\u6807\u8BB0\n\n| \u6807\u8BB0 | \u542B\u4E49 |\n|:-----|:-----|\n| \\`type:concept\\` / \\`type:descriptor\\` / \\`type:portal\\` | Rem \u7C7B\u578B\uFF08default \u4E0D\u6807\u8BB0\uFF09 |\n| \\`doc\\` | \u662F\u6587\u6863\u9875\u9762 |\n| \\`children:N\\` | \u6709 N \u4E2A\u672A\u5C55\u5F00\u7684\u5B50\u8282\u70B9 |\n| \\`tag:Name(id)\\` | \u5DF2\u9644\u52A0\u7684\u6807\u7B7E |\n| \\`role:card-item\\` | \u591A\u884C\u95EA\u5361\u7684\u7B54\u6848\u884C |\n| \\`top\\` | \u77E5\u8BC6\u5E93\u9876\u5C42 Rem |\n\n### \u7BAD\u5934\u542B\u4E49\n\n- **\u5355\u884C\u7BAD\u5934** \\`\u2192\\` \\`\u2190\\` \\`\u2194\\`\uFF1Atext \u4E0E backText \u4E4B\u95F4\u7684\u5206\u9694\uFF0C\u65B9\u5411\u4E3A practiceDirection\n- **\u591A\u884C\u7BAD\u5934** \\`\u2193\\` \\`\u2191\\` \\`\u2195\\`\uFF1A\u8868\u793A\u5B50\u8282\u70B9\u4E3A\u7B54\u6848\u7684\u591A\u884C\u95EA\u5361\n\n### \u7701\u7565\u5360\u4F4D\u7B26\n\n\\`\\`\\`\n<!--...elided 3 siblings (parent:remIdB range:2-4 total:5)-->\n<!--...elided >=10 nodes (parent:remIdB range:5-14 total:20)-->\n\\`\\`\\`\n\n\\`siblings\\` \u4E3A\u7CBE\u786E\u7701\u7565\uFF08\u8D85 maxSiblings\uFF09\uFF0C\\`>=N nodes\\` \u4E3A\u9884\u7B97\u8017\u5C3D\u7684\u975E\u7CBE\u786E\u7701\u7565\u3002\n\n\u8BE6\u7EC6\u683C\u5F0F\u89C4\u8303\u89C1 \\`resource://outline-format\\`\u3002\n\n---\n\n## 6. Error Quick Reference\n\n| \u9519\u8BEF\u4FE1\u606F | \u539F\u56E0 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:-----|:---------|\n| \u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C | \u672A connect \u6216 daemon \u5DF2\u8D85\u65F6 | \u6267\u884C \\`connect\\` |\n| Plugin \u672A\u8FDE\u63A5 | RemNote \u672A\u6253\u5F00\u6216\u63D2\u4EF6\u672A\u52A0\u8F7D | \u63D0\u9192\u7528\u6237\u6253\u5F00 RemNote |\n| has not been read yet | \u672A\u5148\u6267\u884C read | \u5148 read \u540C\u4E00\u4E2A remId\uFF0C\u518D\u91CD\u8BD5 edit |\n| has been modified since last read | Rem \u5728 read \u540E\u88AB\u5916\u90E8\u4FEE\u6539 | \u91CD\u65B0 read \u83B7\u53D6\u6700\u65B0\u72B6\u6001\uFF0C\u518D\u91CD\u8BD5 |\n| old_str not found | oldStr \u5728\u6587\u672C\u4E2D\u4E0D\u5B58\u5728 | \u68C0\u67E5\u662F\u5426\u7CBE\u786E\u5339\u914D\uFF08\u542B\u5F15\u53F7\u3001\u7A7A\u683C\u3001\u6362\u884C\uFF09 |\n| old_str matches N locations | oldStr \u5339\u914D\u591A\u5904 | \u6269\u5927 oldStr \u8303\u56F4\uFF0C\u5305\u542B\u66F4\u591A\u4E0A\u4E0B\u6587\u4EE5\u552F\u4E00\u5B9A\u4F4D |\n| invalid JSON | edit_rem \u66FF\u6362\u540E\u4E0D\u662F\u5408\u6CD5 JSON | \u68C0\u67E5 newStr \u7684\u5F15\u53F7\u3001\u9017\u53F7\u3001\u62EC\u53F7 |\n| Content modification not allowed | edit_tree \u4E2D\u4FEE\u6539\u4E86\u884C\u5185\u5BB9 | \u6539\u7528 \\`edit_rem\\` \u4FEE\u6539\u5185\u5BB9 |\n| orphan_detected | \u5220\u4E86\u7236\u884C\u4F46\u4FDD\u7559\u4E86\u5B50\u884C | \u540C\u65F6\u5220\u9664\u6240\u6709\u5B50\u884C |\n| folded_delete | \u5220\u9664\u6709\u9690\u85CF\u5B50\u8282\u70B9\u7684\u884C | \u7528\u66F4\u5927 depth \u91CD\u65B0 read_tree |\n\n\u5B8C\u6574\u9519\u8BEF\u53C2\u8003\u89C1 \\`resource://error-reference\\`\u3002\n";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const EDIT_TREE_GUIDE_CONTENT = "\n# edit-tree \u64CD\u4F5C\u6307\u5357\n\nedit_tree \u901A\u8FC7 str_replace \u5BF9 Markdown \u5927\u7EB2\u8FDB\u884C\u7ED3\u6784\u7F16\u8F91\uFF08\u884C\u7EA7\u589E/\u5220/\u79FB/\u91CD\u6392\uFF09\uFF0C\u7981\u6B62\u4FEE\u6539\u5DF2\u6709\u884C\u5185\u5BB9\u3002\n\n---\n\n## \u524D\u7F6E\u6761\u4EF6\n\n\u5FC5\u987B\u5148 \\`read_tree\\` \u540C\u4E00\u4E2A remId\uFF0C\u5EFA\u7ACB\u7F13\u5B58\u540E\u624D\u80FD \\`edit_tree\\`\u3002\u8DF3\u8FC7\u4F1A\u89E6\u53D1\u9632\u7EBF 1 \u9519\u8BEF\u3002\n\n---\n\n## \u652F\u6301\u7684\u64CD\u4F5C\n\n### 1. \u65B0\u589E\u884C\n\n\u5728 newStr \u4E2D\u6DFB\u52A0**\u65E0 remId \u6CE8\u91CA**\u7684\u65B0\u884C\u3002\u901A\u8FC7\u7F29\u8FDB\u786E\u5B9A\u7236\u5B50\u5173\u7CFB\u3002\n\n\\`\\`\\`\noldStr:\n \u5B50\u8282\u70B9 A <!--idA-->\n\nnewStr:\n \u65B0\u589E\u8282\u70B9\n \u5B50\u8282\u70B9 A <!--idA-->\n\\`\\`\\`\n\n#### \u65B0\u589E\u884C\u7684 Markdown \u524D\u7F00\n\n| \u524D\u7F00 | \u6548\u679C |\n|------|------|\n| \\`# text\\` | \u521B\u5EFA H1 \u6807\u9898 |\n| \\`## text\\` | \u521B\u5EFA H2 \u6807\u9898 |\n| \\`### text\\` | \u521B\u5EFA H3 \u6807\u9898 |\n| \\`- [ ] text\\` | \u521B\u5EFA\u672A\u5B8C\u6210\u5F85\u529E |\n| \\`- [x] text\\` | \u521B\u5EFA\u5DF2\u5B8C\u6210\u5F85\u529E |\n| \\`\\\\\\`text\\\\\\`\\` | \u521B\u5EFA\u4EE3\u7801\u5757 |\n| \\`---\\` | \u521B\u5EFA\u5206\u9694\u7EBF |\n\n#### \u65B0\u589E\u884C\u7684\u7BAD\u5934\u5206\u9694\u7B26\n\n| \u7BAD\u5934 | \u683C\u5F0F | \u6548\u679C |\n|------|------|------|\n| \\` \u2192 \\` | \\`\u95EE\u9898 \u2192 \u7B54\u6848\\` | \u521B\u5EFA forward \u95EA\u5361\uFF08\u5355\u884C\uFF09 |\n| \\` \u2190 \\` | \\`\u95EE\u9898 \u2190 \u7B54\u6848\\` | \u521B\u5EFA backward \u95EA\u5361\uFF08\u5355\u884C\uFF09 |\n| \\` \u2194 \\` | \\`\u95EE\u9898 \u2194 \u7B54\u6848\\` | \u521B\u5EFA both \u95EA\u5361\uFF08\u5355\u884C\uFF09 |\n| \\` \u2193\\` | \\`\u95EE\u9898 \u2193\\` | \u521B\u5EFA forward \u591A\u884C\u95EA\u5361\uFF08\u5B50\u8282\u70B9\u4E3A\u7B54\u6848\uFF09 |\n| \\` \u2191\\` | \\`\u95EE\u9898 \u2191\\` | \u521B\u5EFA backward \u591A\u884C\u95EA\u5361 |\n| \\` \u2195\\` | \\`\u95EE\u9898 \u2195\\` | \u521B\u5EFA both \u591A\u884C\u95EA\u5361 |\n\n#### \u5D4C\u5957\u65B0\u589E\n\n\u65B0\u589E\u884C\u4E0B\u9762\u53EF\u4EE5\u518D\u5D4C\u5957\u65B0\u589E\u884C\uFF0C\u901A\u8FC7\u7F29\u8FDB\u8868\u793A\u7236\u5B50\u5173\u7CFB\uFF1A\n\n\\`\\`\\`\nnewStr:\n \u7236\u8282\u70B9 \u2193\n \u7B54\u6848\u884C 1\n \u7B54\u6848\u884C 2\n \u5B50\u8282\u70B9 A <!--idA-->\n\\`\\`\\`\n\n\u5D4C\u5957\u65B0\u589E\u884C\u7684\u7236 ID \u901A\u8FC7\u5185\u90E8\u5360\u4F4D\u6807\u8BB0\u7BA1\u7406\uFF0C\u521B\u5EFA\u987A\u5E8F\u4FDD\u8BC1\u4ECE\u6D45\u5230\u6DF1\u3002\n\n### 2. \u5220\u9664\u884C\n\n\u4ECE newStr \u4E2D\u79FB\u9664\u5E26 remId \u7684\u884C\u3002**\u5FC5\u987B\u540C\u65F6\u5220\u9664\u8BE5\u884C\u7684\u6240\u6709\u53EF\u89C1\u5B50\u884C**\uFF0C\u5426\u5219\u62A5 orphan_detected \u9519\u8BEF\u3002\n\n\\`\\`\\`\noldStr:\n \u5B50\u8282\u70B9 A <!--idA-->\n \u5B59\u8282\u70B9 A1 <!--idA1-->\n \u5B50\u8282\u70B9 B <!--idB-->\n\nnewStr:\n \u5B50\u8282\u70B9 B <!--idB-->\n\\`\\`\\`\n\n\u5220\u9664\u64CD\u4F5C\u6309\u6DF1\u5EA6**\u4ECE\u6DF1\u5230\u6D45**\u6267\u884C\uFF08\u5148\u5220\u5B50\u540E\u5220\u7236\uFF09\u3002\n\n### 3. \u79FB\u52A8\u884C\n\n\u6539\u53D8\u884C\u7684\u7F29\u8FDB\u7EA7\u522B\u6216\u4F4D\u7F6E\uFF0C\u4F7F\u5176\u79FB\u52A8\u5230\u65B0\u7684\u7236\u8282\u70B9\u4E0B\uFF1A\n\n\\`\\`\\`\noldStr:\n \u5B50\u8282\u70B9 A <!--idA-->\n \u76EE\u6807\u884C <!--idT-->\n \u5B50\u8282\u70B9 B <!--idB-->\n\nnewStr:\n \u5B50\u8282\u70B9 A <!--idA-->\n \u5B50\u8282\u70B9 B <!--idB-->\n \u76EE\u6807\u884C <!--idT-->\n\\`\\`\\`\n\n### 4. \u91CD\u6392\u884C\n\n\u8C03\u6362\u540C\u7EA7\u884C\u7684\u987A\u5E8F\uFF1A\n\n\\`\\`\\`\noldStr:\n \u5B50\u8282\u70B9 A <!--idA-->\n \u5B50\u8282\u70B9 B <!--idB-->\n \u5B50\u8282\u70B9 C <!--idC-->\n\nnewStr:\n \u5B50\u8282\u70B9 C <!--idC-->\n \u5B50\u8282\u70B9 A <!--idA-->\n \u5B50\u8282\u70B9 B <!--idB-->\n\\`\\`\\`\n\n---\n\n## \u7981\u6B62\u7684\u64CD\u4F5C\n\n| \u64CD\u4F5C | \u9519\u8BEF\u7C7B\u578B | \u9519\u8BEF\u4FE1\u606F | \u66FF\u4EE3\u65B9\u6848 |\n|------|----------|----------|----------|\n| \u4FEE\u6539\u5DF2\u6709\u884C\u5185\u5BB9 | \\`content_modified\\` | Content modification of existing Rem is not allowed in tree edit mode. | \u4F7F\u7528 \\`edit_rem\\` |\n| \u5220\u9664/\u4FEE\u6539\u6839\u8282\u70B9 | \\`root_modified\\` | Root node cannot be changed, deleted or moved. | \u2014 |\n| \u5220\u9664\u6709\u9690\u85CF\u5B50\u8282\u70B9\u7684\u884C | \\`folded_delete\\` | Cannot delete {id} because it has {N} hidden children. | \u7528\u66F4\u5927\u7684 depth \u91CD\u65B0 read_tree |\n| \u5220\u9664\u884C\u4F46\u4FDD\u7559\u5B50\u8282\u70B9 | \\`orphan_detected\\` | Cannot delete {id} because it has children that were not removed. | \u540C\u65F6\u5220\u9664\u6240\u6709\u5B50\u884C |\n| \u5220\u9664/\u4FEE\u6539\u7701\u7565\u5360\u4F4D\u7B26 | \\`elided_modified\\` | Cannot delete or modify elided region directly. | \u7528\u66F4\u5927\u7684 depth/maxSiblings \u91CD\u65B0 read_tree \u5C55\u5F00 |\n| \u7F29\u8FDB\u8DF3\u7EA7 | \\`indent_skip\\` | \u7F29\u8FDB\u8DF3\u7EA7\uFF1A\u884C ... \u7684\u7F29\u8FDB\u7EA7\u522B\u4E3A N\uFF0C\u4F46\u627E\u4E0D\u5230\u4E0A\u4E00\u7EA7\u7684\u7236\u8282\u70B9\u3002 | \u68C0\u67E5\u7F29\u8FDB\u662F\u5426\u6B63\u786E\uFF08\u6BCF\u7EA7 2 \u7A7A\u683C\uFF09 |\n\n---\n\n## \u64CD\u4F5C\u6267\u884C\u987A\u5E8F\n\ndiff \u7B97\u6CD5\u751F\u6210\u7684\u64CD\u4F5C\u6309\u4EE5\u4E0B\u987A\u5E8F\u6392\u5217\u5E76\u6267\u884C\uFF1A\n\n\\`\\`\\`\n1. Create\uFF08\u65B0\u589E\uFF09 \u2014 \u6309\u51FA\u73B0\u987A\u5E8F\uFF0C\u4ECE\u6D45\u5230\u6DF1\n2. Move\uFF08\u79FB\u52A8\uFF09 \u2014 \u7236\u8282\u70B9\u53D8\u66F4\u7684\u884C\n3. Reorder\uFF08\u91CD\u6392\uFF09 \u2014 \u540C\u7236\u8282\u70B9\u5185\u987A\u5E8F\u53D8\u66F4\n4. Delete\uFF08\u5220\u9664\uFF09 \u2014 \u6309\u6DF1\u5EA6\u4ECE\u6DF1\u5230\u6D45\n\\`\\`\\`\n\n---\n\n## practiceDirection \u4FDD\u62A4\u673A\u5236\n\nRemNote SDK \u5B58\u5728\u5DF2\u77E5 bug\uFF1A\\`setIsCardItem(true)\\` \u4F1A\u5077\u5077\u8BBE\u7F6E \\`practiceDirection: \"forward\"\\`\uFF0C\u800C \\`setIsCardItem(false)\\` \u4E0D\u4F1A\u6E05\u9664\u3002\n\n**\u65B0\u589E\u884C\uFF08create\uFF09**\uFF1A\u5F53\u7236\u8282\u70B9\u662F\u591A\u884C\u95EA\u5361\uFF08\u542B \u2193\u2191\u2195 \u7BAD\u5934\uFF09\u65F6\uFF0C\u65B0\u521B\u5EFA\u7684\u5B50\u884C\u9700\u8981 \\`isCardItem: true\\`\u3002\u8BBE\u7F6E\u540E\u7ACB\u5373\u7528 \\`practiceDirection: 'none'\\` \u8986\u76D6 SDK \u526F\u4F5C\u7528\u3002\n\n**\u79FB\u52A8\u884C\uFF08move\uFF09**\uFF1A\n- \u79FB\u5165\u591A\u884C\u7236\u8282\u70B9\uFF1A\u8BBE \\`isCardItem: true\\` + \\`practiceDirection: 'none'\\`\n- \u79FB\u51FA\u591A\u884C\u7236\u8282\u70B9\uFF1A\u8BBE \\`isCardItem: false\\` + \\`practiceDirection: 'none'\\`\n- \u4F8B\u5916\uFF1A\u5982\u679C Rem \u81EA\u8EAB\u6709\u5408\u6CD5\u7684 practiceDirection\uFF08\u7BAD\u5934\u5206\u9694\u7B26\uFF09\uFF0C\u4FDD\u7559\u4E0D\u8986\u76D6\n\n---\n\n## \u793A\u4F8B 1\uFF1A\u5728\u6307\u5B9A\u4F4D\u7F6E\u63D2\u5165\u65B0\u884C\n\n\\`\\`\\`\noldStr:\n \u5B50\u8282\u70B9 A <!--idA-->\n\nnewStr:\n \u65B0\u589E\u884C\n \u5B50\u8282\u70B9 A <!--idA-->\n\\`\\`\\`\n\n\u7ED3\u679C\uFF1A\u5728\u5B50\u8282\u70B9 A \u4E4B\u524D\u63D2\u5165\u4E00\u4E2A\u65B0 Rem\u3002\n\n## \u793A\u4F8B 2\uFF1A\u5220\u9664\u4E00\u4E2A\u5E26\u5B50\u8282\u70B9\u7684\u884C\n\n\\`\\`\\`\noldStr:\n \u5B50\u8282\u70B9 A <!--idA-->\n \u5B59\u8282\u70B9 A1 <!--idA1-->\n \u5B59\u8282\u70B9 A2 <!--idA2-->\n \u5B50\u8282\u70B9 B <!--idB-->\n\nnewStr:\n \u5B50\u8282\u70B9 B <!--idB-->\n\\`\\`\\`\n\n\u7ED3\u679C\uFF1A\u5220\u9664\u5B50\u8282\u70B9 A \u53CA\u5176\u6240\u6709\u5B50\u8282\u70B9\uFF08\u5FC5\u987B\u4E00\u8D77\u5220\u9664\uFF09\u3002\n\n## \u793A\u4F8B 3\uFF1A\u521B\u5EFA\u5E26\u591A\u884C\u95EA\u5361\u7684\u7ED3\u6784\n\n\\`\\`\\`\noldStr:\n \u5B50\u8282\u70B9 A <!--idA-->\n\nnewStr:\n \u4EC0\u4E48\u662F\u7EBF\u6027\u56DE\u5F52\uFF1F \u2193\n \u4E00\u79CD\u57FA\u672C\u7684\u56DE\u5F52\u5206\u6790\u65B9\u6CD5\n \u5047\u8BBE\u56E0\u53D8\u91CF\u4E0E\u81EA\u53D8\u91CF\u5448\u7EBF\u6027\u5173\u7CFB\n \u5B50\u8282\u70B9 A <!--idA-->\n\\`\\`\\`\n\n\u7ED3\u679C\uFF1A\u521B\u5EFA\u4E00\u4E2A\u591A\u884C forward \u95EA\u5361\uFF0C\u95EE\u9898\u4E3A\"\u4EC0\u4E48\u662F\u7EBF\u6027\u56DE\u5F52\uFF1F\"\uFF0C\u4E24\u4E2A\u5B50\u884C\u81EA\u52A8\u6210\u4E3A\u7B54\u6848\uFF08isCardItem=true\uFF09\u3002\n";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const ERROR_REFERENCE_CONTENT = "\n# Error Reference\n\n\u6240\u6709 CLI \u547D\u4EE4\u9519\u8BEF\u7684\u5B8C\u6574\u53C2\u8003\uFF0C\u6309\u7C7B\u522B\u5206\u7EC4\u3002\n\n---\n\n## 1. \u8FDE\u63A5\u4E0E\u4F1A\u8BDD\u9519\u8BEF\n\n| \u9519\u8BEF\u4FE1\u606F | \u89E6\u53D1\u547D\u4EE4 | \u539F\u56E0 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:---------|:-----|:---------|\n| \u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\uFF0C\u8BF7\u5148\u6267\u884C remnote-bridge connect | \u6240\u6709\u4E1A\u52A1\u547D\u4EE4 | \u672A\u6267\u884C connect \u6216 daemon \u5DF2\u8D85\u65F6\u5173\u95ED | \u6267\u884C \\`connect\\` |\n| Plugin \u672A\u8FDE\u63A5 | health / \u4E1A\u52A1\u547D\u4EE4 | RemNote \u672A\u6253\u5F00\u6216\u63D2\u4EF6\u672A\u52A0\u8F7D | \u6253\u5F00 RemNote \u5E76\u786E\u8BA4\u63D2\u4EF6\u52A0\u8F7D |\n| SDK \u672A\u5C31\u7EEA | health | \u77E5\u8BC6\u5E93\u5C1A\u672A\u52A0\u8F7D\u5B8C\u6210 | \u7B49\u5F85\u51E0\u79D2\u540E\u91CD\u8BD5 \\`health\\` |\n| \u8FDE\u63A5\u8D85\u65F6 | connect | daemon \u542F\u52A8\u4F46 Plugin \u672A\u5728\u8D85\u65F6\u65F6\u95F4\u5185\u8FDE\u63A5 | \u786E\u8BA4 RemNote \u5DF2\u6253\u5F00\u3001\u63D2\u4EF6\u5DF2\u52A0\u8F7D\uFF1B\u68C0\u67E5\u7AEF\u53E3\u914D\u7F6E |\n\n---\n\n## 2. \u9632\u7EBF\u9519\u8BEF\uFF08edit_rem / edit_tree \u5171\u7528\uFF09\n\n### \u9632\u7EBF 1\uFF1A\u7F13\u5B58\u5B58\u5728\u6027\n\n| \u9519\u8BEF\u4FE1\u606F | \u89E6\u53D1\u547D\u4EE4 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:---------|:---------|\n| Rem {remId} has not been read yet. Read it first before editing. | edit_rem | \u6267\u884C \\`read_rem\\` \u540C\u4E00\u4E2A remId |\n| Tree rooted at {remId} has not been read yet. Use read-tree first. | edit_tree | \u6267\u884C \\`read_tree\\` \u540C\u4E00\u4E2A remId |\n\n### \u9632\u7EBF 2\uFF1A\u4E50\u89C2\u5E76\u53D1\u68C0\u6D4B\n\n| \u9519\u8BEF\u4FE1\u606F | \u89E6\u53D1\u547D\u4EE4 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:---------|:---------|\n| Rem {remId} has been modified since last read. Please read it again before editing. | edit_rem | \u91CD\u65B0\u6267\u884C \\`read_rem\\` \u83B7\u53D6\u6700\u65B0\u72B6\u6001 |\n| Tree rooted at {remId} has been modified since last read-tree. Please read-tree again. | edit_tree | \u91CD\u65B0\u6267\u884C \\`read_tree\\` \u83B7\u53D6\u6700\u65B0\u72B6\u6001 |\n\n**\u5173\u952E**\uFF1A\u9632\u7EBF 2 \u5931\u8D25\u65F6**\u4E0D\u4F1A\u81EA\u52A8\u66F4\u65B0\u7F13\u5B58**\uFF0C\u5FC5\u987B\u624B\u52A8\u91CD\u65B0 read\u3002\n\n### \u9632\u7EBF 3\uFF1Astr_replace \u7CBE\u786E\u5339\u914D\n\n| \u9519\u8BEF\u4FE1\u606F | \u89E6\u53D1\u547D\u4EE4 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:---------|:---------|\n| old_str not found in the serialized JSON of rem {remId} | edit_rem | \u68C0\u67E5 oldStr \u662F\u5426\u7CBE\u786E\u5339\u914D\uFF08\u542B\u5F15\u53F7\u3001\u7A7A\u683C\u3001\u6362\u884C\uFF09 |\n| old_str not found in the tree outline of {remId} | edit_tree | \u68C0\u67E5 oldStr \u662F\u5426\u7CBE\u786E\u5339\u914D\u7F13\u5B58\u5927\u7EB2 |\n| old_str matches {N} locations in rem {remId}. Make old_str more specific to match exactly once. | edit_rem | \u6269\u5927 oldStr \u8303\u56F4\uFF0C\u5305\u542B\u66F4\u591A\u4E0A\u4E0B\u6587\u4EE5\u552F\u4E00\u5B9A\u4F4D |\n| old_str matches {N} locations in the tree outline of {remId}. Make old_str more specific to match exactly once. | edit_tree | \u6269\u5927 oldStr \u8303\u56F4 |\n\n---\n\n## 3. edit_rem \u4E13\u7528\u9519\u8BEF\n\n| \u9519\u8BEF\u4FE1\u606F | \u539F\u56E0 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:-----|:---------|\n| The replacement produced invalid JSON. Check your new_str for syntax errors. | \u66FF\u6362\u540E\u6587\u672C\u4E0D\u662F\u5408\u6CD5 JSON | \u68C0\u67E5 newStr \u7684\u5F15\u53F7\u3001\u9017\u53F7\u3001\u62EC\u53F7\u5B8C\u6574\u6027 |\n| Failed to update field 'type': Portal \u4E0D\u53EF\u901A\u8FC7 setType() \u8BBE\u7F6E | \u5C1D\u8BD5\u5C06 type \u8BBE\u4E3A portal | Portal \u53EA\u80FD\u901A\u8FC7 SDK \u4E13\u7528 API \u521B\u5EFA\uFF0C\u4E0D\u53EF\u901A\u8FC7 edit_rem \u8BBE\u7F6E |\n| Failed to update field '{field}': ... | SDK setter \u8C03\u7528\u5931\u8D25 | \u68C0\u67E5\u5B57\u6BB5\u503C\u662F\u5426\u5728\u5141\u8BB8\u8303\u56F4\u5185 |\n| Field '{fieldName}' is read-only and was ignored | \u4FEE\u6539\u4E86\u53EA\u8BFB\u5B57\u6BB5 | **\u8B66\u544A**\uFF08\u975E\u963B\u65AD\uFF09\uFF0C\u8BE5\u5B57\u6BB5\u4E0D\u53EF\u4FEE\u6539 |\n| Setting 'todoStatus' without 'isTodo: true' may have no effect | todoStatus \u975E null \u4F46 isTodo=false | \u5148\u5C06 isTodo \u8BBE\u4E3A true |\n\n---\n\n## 4. edit_tree \u4E13\u7528\u9519\u8BEF\n\n| \u9519\u8BEF\u4FE1\u606F | \u9519\u8BEF\u7C7B\u578B | \u539F\u56E0 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:---------|:-----|:---------|\n| Content modification of existing Rem is not allowed in tree edit mode. | \\`content_modified\\` | \u4FEE\u6539\u4E86\u5DF2\u6709\u884C\u7684\u6587\u5B57\u5185\u5BB9 | \u4F7F\u7528 \\`edit_rem\\` \u4FEE\u6539\u5185\u5BB9 |\n| Root node cannot be changed, deleted or moved. | \\`root_modified\\` | \u5C1D\u8BD5\u4FEE\u6539/\u5220\u9664/\u79FB\u52A8\u6839\u8282\u70B9 | \u6839\u8282\u70B9\u4E0D\u53EF\u64CD\u4F5C |\n| Cannot delete {id} because it has {N} hidden children. | \\`folded_delete\\` | \u5220\u9664\u4E86\u6709\u6298\u53E0\uFF08\u672A\u5C55\u5F00\uFF09\u5B50\u8282\u70B9\u7684\u884C | \u7528\u66F4\u5927\u7684 depth \u91CD\u65B0 \\`read_tree\\` |\n| Cannot delete {id} because it has children that were not removed. | \\`orphan_detected\\` | \u5220\u9664\u4E86\u7236\u884C\u4F46\u4FDD\u7559\u4E86\u5B50\u884C | \u5FC5\u987B\u540C\u65F6\u5220\u9664\u6240\u6709\u5B50\u884C |\n| Cannot delete or modify elided region directly. | \\`elided_modified\\` | \u5220\u9664\u6216\u4FEE\u6539\u4E86\u7701\u7565\u5360\u4F4D\u7B26 | \u7528\u66F4\u5927\u7684 depth/maxSiblings \u91CD\u65B0 \\`read_tree\\` \u5C55\u5F00 |\n| \u7F29\u8FDB\u8DF3\u7EA7\uFF1A\u884C ... \u7684\u7F29\u8FDB\u7EA7\u522B\u4E3A N\uFF0C\u4F46\u627E\u4E0D\u5230\u4E0A\u4E00\u7EA7\u7684\u7236\u8282\u70B9\u3002 | \\`indent_skip\\` | \u65B0\u589E\u884C\u7684\u7F29\u8FDB\u4E0D\u6B63\u786E | \u68C0\u67E5\u7F29\u8FDB\uFF08\u6BCF\u7EA7 2 \u7A7A\u683C\uFF09 |\n\n---\n\n## 5. \u8BFB\u53D6\u9519\u8BEF\n\n| \u9519\u8BEF\u4FE1\u606F | \u89E6\u53D1\u547D\u4EE4 | \u539F\u56E0 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:---------|:-----|:---------|\n| Rem not found: {remId} | read_rem / read_tree | remId \u65E0\u6548\u6216 Rem \u5DF2\u88AB\u5220\u9664 | \u4F7F\u7528 \\`search\\` \u91CD\u65B0\u5B9A\u4F4D |\n| \u65E0\u6CD5\u83B7\u53D6\u5F53\u524D\u805A\u7126\u7684 Rem | read_context (focus) | \u7528\u6237\u672A\u5728 RemNote \u4E2D\u70B9\u51FB\u4EFB\u4F55 Rem | \u63D0\u9192\u7528\u6237\u5728 RemNote \u4E2D\u70B9\u51FB\u4E00\u4E2A Rem |\n| \u65E0\u6CD5\u83B7\u53D6\u5F53\u524D\u9875\u9762 | read_context (page) | RemNote \u672A\u6253\u5F00\u6587\u6863\u9875\u9762 | \u63D0\u9192\u7528\u6237\u6253\u5F00\u4E00\u4E2A\u6587\u6863\u9875\u9762 |\n\n---\n\n## 6. \u641C\u7D22\u9519\u8BEF\n\n| \u9519\u8BEF\u4FE1\u606F | \u89E6\u53D1\u547D\u4EE4 | \u539F\u56E0 | \u6062\u590D\u64CD\u4F5C |\n|:---------|:---------|:-----|:---------|\n| \u641C\u7D22\u65E0\u7ED3\u679C | search | \u5173\u952E\u8BCD\u672A\u5339\u914D\u4EFB\u4F55 Rem | \u4E2D\u6587\u641C\u7D22\u5C1D\u8BD5\u5355\u5B57\u7B56\u7565\uFF1B\u6216\u6539\u7528 \\`read_globe\\` \u2192 \\`read_tree\\` \u624B\u52A8\u5B9A\u4F4D |\n\n---\n\n## \u9519\u8BEF\u8BCA\u65AD\u51B3\u7B56\u6811\n\n\\`\\`\\`\n\u547D\u4EE4\u5931\u8D25\n\u251C\u2500 \"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\"\n\u2502 \u2514\u2500 \u6267\u884C connect\n\u2502\n\u251C\u2500 \"Plugin \u672A\u8FDE\u63A5\" / \"SDK \u672A\u5C31\u7EEA\"\n\u2502 \u2514\u2500 \u786E\u8BA4 RemNote \u5DF2\u6253\u5F00 \u2192 health \u68C0\u67E5\n\u2502\n\u251C\u2500 \"has not been read yet\"\n\u2502 \u2514\u2500 \u6267\u884C\u5BF9\u5E94 read \u547D\u4EE4\uFF08read_rem / read_tree\uFF09\n\u2502\n\u251C\u2500 \"has been modified since last read\"\n\u2502 \u2514\u2500 \u91CD\u65B0\u6267\u884C read \u2192 \u7136\u540E\u91CD\u8BD5 edit\n\u2502\n\u251C\u2500 \"old_str not found\"\n\u2502 \u251C\u2500 \u68C0\u67E5\u7A7A\u683C\u3001\u6362\u884C\u3001\u5F15\u53F7\u662F\u5426\u7CBE\u786E\u5339\u914D\n\u2502 \u2514\u2500 \u91CD\u65B0 read \u786E\u8BA4\u5F53\u524D\u5185\u5BB9\n\u2502\n\u251C\u2500 \"old_str matches N locations\"\n\u2502 \u2514\u2500 \u6269\u5927 oldStr\uFF0C\u5305\u542B\u66F4\u591A\u4E0A\u4E0B\u6587\n\u2502\n\u251C\u2500 \"invalid JSON\"\n\u2502 \u2514\u2500 \u68C0\u67E5 newStr \u7684 JSON \u8BED\u6CD5\n\u2502\n\u251C\u2500 \"Content modification not allowed\"\n\u2502 \u2514\u2500 \u6539\u7528 edit_rem \u4FEE\u6539\u5185\u5BB9\n\u2502\n\u251C\u2500 \"orphan_detected\"\n\u2502 \u2514\u2500 \u540C\u65F6\u5220\u9664\u7236\u884C\u7684\u6240\u6709\u5B50\u884C\n\u2502\n\u251C\u2500 \"folded_delete\"\n\u2502 \u2514\u2500 \u7528\u66F4\u5927 depth \u91CD\u65B0 read_tree\n\u2502\n\u251C\u2500 \"Rem not found\"\n\u2502 \u2514\u2500 \u4F7F\u7528 search \u91CD\u65B0\u5B9A\u4F4D\u76EE\u6807 Rem\n\u2502\n\u2514\u2500 \u5176\u4ED6\n \u2514\u2500 \u6267\u884C health \u68C0\u67E5\u7CFB\u7EDF\u72B6\u6001\n\\`\\`\\`\n";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const OUTLINE_FORMAT_CONTENT = "\n# Markdown \u5927\u7EB2\u683C\u5F0F\u89C4\u8303\n\nread_tree / read_globe / read_context \u7684\u8F93\u51FA\u6838\u5FC3\u662F Markdown \u5927\u7EB2\u6587\u672C\u3002edit_tree \u57FA\u4E8E\u6B64\u5927\u7EB2\u8FDB\u884C\u7ED3\u6784\u7F16\u8F91\u3002\n\n---\n\n## 1. \u884C\u7ED3\u6784\n\n\u6BCF\u884C\u7684\u5B8C\u6574\u683C\u5F0F\u4E3A\uFF1A\n\n\\`\\`\\`\n{\u7F29\u8FDB}{Markdown \u524D\u7F00}{\u5185\u5BB9}{\u7BAD\u5934\u5206\u9694\u7B26}{backText} <!-- {remId} {\u5143\u6570\u636E\u6807\u8BB0} -->\n\\`\\`\\`\n\n- **\u7F29\u8FDB**\uFF1A\u6BCF\u7EA7 2 \u4E2A\u7A7A\u683C\uFF0C\u6839\u8282\u70B9 0 \u4E2A\u7A7A\u683C\n- **remId**\uFF1A\u8BE5\u884C\u5BF9\u5E94\u7684 Rem ID\uFF08edit_tree \u65B0\u589E\u884C\u65E0 remId\uFF09\n- **\u5143\u6570\u636E\u6807\u8BB0**\uFF1A\u7A7A\u683C\u5206\u9694\u7684\u5C5E\u6027\u6807\u8BB0\n\n---\n\n## 2. Markdown \u524D\u7F00\n\n| \u524D\u7F00 | \u542B\u4E49 | \u5BF9\u5E94\u5B57\u6BB5 |\n|:-----|:-----|:---------|\n| \\`# \\` | H1 \u6807\u9898 | fontSize: 'H1' |\n| \\`## \\` | H2 \u6807\u9898 | fontSize: 'H2' |\n| \\`### \\` | H3 \u6807\u9898 | fontSize: 'H3' |\n| \\`- [ ] \\` | \u672A\u5B8C\u6210\u5F85\u529E | isTodo: true, todoStatus: 'Unfinished' |\n| \\`- [x] \\` | \u5DF2\u5B8C\u6210\u5F85\u529E | isTodo: true, todoStatus: 'Finished' |\n| \\`\\\\\\`...\\\\\\`\\` | \u4EE3\u7801\u5757 | isCode: true |\n| \\`---\\` | \u5206\u9694\u7EBF | Divider Powerup |\n\n---\n\n## 3. \u7BAD\u5934\u5206\u9694\u7B26\n\n### \u6709 backText \u7684\u7BAD\u5934\n\n| \u7BAD\u5934 | \u683C\u5F0F | practiceDirection |\n|:-----|:-----|:------------------|\n| \\` \u2192 \\` | text \u2192 backText | forward |\n| \\` \u2190 \\` | text \u2190 backText | backward |\n| \\` \u2194 \\` | text \u2194 backText | both |\n\n### \u591A\u884C\u95EA\u5361\u7684\u7BAD\u5934\n\n| \u7BAD\u5934 | \u683C\u5F0F | practiceDirection | \u8BF4\u660E |\n|:-----|:-----|:------------------|:-----|\n| \\` \u2193\\`\uFF08\u5C3E\u90E8\uFF09 | text \u2193 | forward | \u65E0 backText |\n| \\` \u2191\\`\uFF08\u5C3E\u90E8\uFF09 | text \u2191 | backward | \u65E0 backText |\n| \\` \u2195\\`\uFF08\u5C3E\u90E8\uFF09 | text \u2195 | both | \u65E0 backText |\n| \\` \u2193 \\` | text \u2193 backText | forward | \u6709 backText |\n| \\` \u2191 \\` | text \u2191 backText | backward | \u6709 backText |\n| \\` \u2195 \\` | text \u2195 backText | both | \u6709 backText |\n\n---\n\n## 4. \u5143\u6570\u636E\u6807\u8BB0\n\n| \u6807\u8BB0 | \u542B\u4E49 | \u4F55\u65F6\u51FA\u73B0 |\n|:-----|:-----|:---------|\n| \\`type:concept\\` | concept \u7C7B\u578B | type \u4E0D\u4E3A default \u65F6 |\n| \\`type:descriptor\\` | descriptor \u7C7B\u578B | type \u4E0D\u4E3A default \u65F6 |\n| \\`type:portal\\` | Portal \u7C7B\u578B | type \u4E3A portal \u65F6 |\n| \\`refs:id1,id2,...\\` | Portal \u5F15\u7528\u7684 Rem | \u4EC5 portal |\n| \\`doc\\` | isDocument = true | \u72EC\u7ACB\u4E8E type |\n| \\`top\\` | \u9876\u5C42 Rem | \u65E0\u7236\u8282\u70B9 |\n| \\`children:N\\` | \u6298\u53E0\u5B50\u8282\u70B9\u6570 | \u6DF1\u5EA6\u8D85\u9650\u4E14\u6709\u5B50\u8282\u70B9 |\n| \\`role:card-item\\` | \u591A\u884C\u7B54\u6848\u884C | isCardItem = true |\n| \\`tag:Name(id)\\` | \u6807\u7B7E | \u6BCF\u4E2A tag \u4E00\u4E2A |\n\n---\n\n## 5. \u7701\u7565\u5360\u4F4D\u7B26\n\n### \u7CBE\u786E\u7701\u7565\uFF08sibling \u88C1\u526A\uFF09\n\\`\\`\\`\n<!--...elided {N} siblings (parent:{parentId} range:{from}-{to} total:{total})-->\n\\`\\`\\`\n\n### \u975E\u7CBE\u786E\u7701\u7565\uFF08\u9884\u7B97\u8017\u5C3D\uFF09\n\\`\\`\\`\n<!--...elided >={N} nodes (parent:{parentId} range:{from}-{to} total:{total})-->\n\\`\\`\\`\n\n---\n\n## 6. \u5B8C\u6574\u793A\u4F8B\n\n\\`\\`\\`markdown\n# \u6570\u636E\u7ED3\u6784 <!--kLr type:concept doc top-->\n ## \u7EBF\u6027\u7ED3\u6784 <!--ABC type:concept-->\n \u6570\u7EC4 \u2192 Array <!--DEF-->\n \u94FE\u8868 \u2193 <!--GHI type:concept-->\n \u5355\u5411\u94FE\u8868 <!--JKL role:card-item-->\n \u53CC\u5411\u94FE\u8868 <!--MNO role:card-item-->\n - [x] \u590D\u4E60\u5B8C\u6210 <!--PQR-->\n ## \u6811\u7ED3\u6784 <!--VWX type:concept children:8-->\n <!--...elided 3 siblings (parent:kLr range:3-5 total:6)-->\n \u5D4C\u5165\u89C6\u56FE <!--p01 type:portal refs:ref1,ref2-->\n \u91CD\u8981\u6982\u5FF5 <!--QRS tag:\u6570\u5B66(tag01) tag:\u57FA\u7840(tag02)-->\n\\`\\`\\`\n";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const REM_OBJECT_FIELDS_CONTENT = "\n# RemObject \u5B57\u6BB5\u53C2\u8003\n\nRemObject \u662F\u672C\u9879\u76EE\u5BF9 RemNote Rem \u7684\u6807\u51C6\u5316\u8868\u793A\uFF0C\u5305\u542B 51 \u4E2A\u5B57\u6BB5\u3002\n\n---\n\n## \u5B57\u6BB5\u5206\u7C7B\n\n| \u6807\u8BB0 | \u542B\u4E49 | \u6570\u91CF | \u8F93\u51FA\u6761\u4EF6 |\n|:-----|:-----|:-----|:---------|\n| RW | \u53EF\u8BFB\u53EF\u5199 | 20 | \u9ED8\u8BA4\u8F93\u51FA |\n| R | \u53EA\u8BFB | 14 | \u9ED8\u8BA4\u8F93\u51FA |\n| R-F | \u53EA\u8BFB\u4F4E\u9891 | 17 | \u4EC5 \\`--full\\` \u8F93\u51FA |\n\n---\n\n## \u6838\u5FC3\u6807\u8BC6\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`id\\` | \\`string\\` | R | Rem \u552F\u4E00 ID |\n\n## \u5185\u5BB9\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`text\\` | \\`RichText\\` | RW | \u6B63\u9762\u6587\u672C\uFF08RichText \u6570\u7EC4\uFF09 |\n| \\`backText\\` | \\`RichText \\| null\\` | RW | \u80CC\u9762\u6587\u672C\u3002null=\u65E0\u80CC\u9762\uFF1B\u8BBE\u503C\u5373\u4EA7\u751F\u95EA\u5361\u6B63\u53CD\u9762\u7ED3\u6784 |\n\n## \u7C7B\u578B\u7CFB\u7EDF\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`type\\` | \\`RemTypeValue\\` | RW | \\`concept\\` / \\`descriptor\\` / \\`default\\` / \\`portal\\` |\n| \\`isDocument\\` | \\`boolean\\` | RW | \u662F\u5426\u4F5C\u4E3A\u72EC\u7ACB\u6587\u6863\u9875\u9762\u3002\u72EC\u7ACB\u4E8E type |\n\n## \u7ED3\u6784\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`parent\\` | \\`string \\| null\\` | RW | \u7236 Rem ID\u3002null=\u9876\u7EA7 |\n| \\`children\\` | \\`string[]\\` | R | \u5B50 Rem ID \u6709\u5E8F\u6570\u7EC4 |\n\n## \u683C\u5F0F / \u663E\u793A\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`fontSize\\` | \\`FontSize \\| null\\` | RW | \u6807\u9898\u5927\u5C0F\uFF1A\\`H1\\` / \\`H2\\` / \\`H3\\`\u3002null=\u666E\u901A |\n| \\`highlightColor\\` | \\`HighlightColor \\| null\\` | RW | \u9AD8\u4EAE\u989C\u8272\uFF089 \u79CD\uFF09\u3002null=\u65E0\u9AD8\u4EAE |\n\n## \u72B6\u6001\u6807\u8BB0\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`isTodo\\` | \\`boolean\\` | RW | \u662F\u5426\u5F85\u529E\u3002\u8BBE\u4E3A true \u65F6\u81EA\u52A8\u521D\u59CB\u5316 todoStatus |\n| \\`todoStatus\\` | \\`TodoStatus \\| null\\` | RW | \\`Finished\\` / \\`Unfinished\\`\u3002\u9700\u5148 isTodo=true |\n| \\`isCode\\` | \\`boolean\\` | RW | \u662F\u5426\u4EE3\u7801\u5757 |\n| \\`isQuote\\` | \\`boolean\\` | RW | \u662F\u5426\u5F15\u7528\u5757 |\n| \\`isListItem\\` | \\`boolean\\` | RW | \u662F\u5426\u5217\u8868\u9879\uFF08\u6709\u5E8F\u5217\u8868\u6837\u5F0F\uFF09 |\n| \\`isCardItem\\` | \\`boolean\\` | RW | \u662F\u5426\u5361\u7247\u9879\uFF08\u591A\u884C\u7B54\u6848\u884C\u6807\u8BB0\uFF09 |\n| \\`isTable\\` | \\`boolean\\` | R | \u662F\u5426\u8868\u683C\uFF08\u53EA\u8BFB\uFF09 |\n| \\`isSlot\\` | \\`boolean\\` | RW | \u662F\u5426 Powerup \u63D2\u69FD\u3002\u4E0E isProperty \u5E95\u5C42\u76F8\u540C |\n| \\`isProperty\\` | \\`boolean\\` | RW | \u662F\u5426 Tag \u5C5E\u6027\uFF08\u8868\u683C\u5217\uFF09\u3002\u4E0E isSlot \u5E95\u5C42\u76F8\u540C |\n\n## Powerup \u7CFB\u7EDF\u6807\u8BC6\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`isPowerup\\` | \\`boolean\\` | R-F | \u662F\u5426 Powerup |\n| \\`isPowerupEnum\\` | \\`boolean\\` | R-F | \u662F\u5426 Powerup \u679A\u4E3E |\n| \\`isPowerupProperty\\` | \\`boolean\\` | R-F | \u662F\u5426 Powerup \u5C5E\u6027 |\n| \\`isPowerupPropertyListItem\\` | \\`boolean\\` | R-F | \u662F\u5426 Powerup \u5C5E\u6027\u5217\u8868\u9879 |\n| \\`isPowerupSlot\\` | \\`boolean\\` | R-F | \u662F\u5426 Powerup \u63D2\u69FD |\n\n## Portal \u4E13\u7528\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`portalType\\` | \\`PortalType \\| null\\` | R | Portal \u5B50\u7C7B\u578B\u3002\u4EC5 type=portal \u65F6\u6709\u503C |\n| \\`portalDirectlyIncludedRem\\` | \\`string[]\\` | R | Portal \u76F4\u63A5\u5305\u542B\u7684 Rem ID |\n\n## \u5C5E\u6027\u7C7B\u578B\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`propertyType\\` | \\`PropertyTypeValue \\| null\\` | R | \u5C5E\u6027\u6570\u636E\u7C7B\u578B\uFF08\u5F53\u6B64 Rem \u662F Tag \u7684\u5C5E\u6027\u65F6\uFF09 |\n\n## \u7EC3\u4E60\u8BBE\u7F6E\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`enablePractice\\` | \\`boolean\\` | RW | \u662F\u5426\u542F\u7528\u95F4\u9694\u91CD\u590D\u7EC3\u4E60 |\n| \\`practiceDirection\\` | \\`PracticeDirection\\` | RW | \u7EC3\u4E60\u65B9\u5411\uFF1A\\`forward\\` / \\`backward\\` / \\`both\\` / \\`none\\` |\n\n## \u5173\u8054 \u2014 \u76F4\u63A5\u5173\u7CFB\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`tags\\` | \\`string[]\\` | RW | \u6807\u7B7E Rem ID \u6570\u7EC4\u3002\u5199\u5165\u65F6\u4F7F\u7528 diff \u673A\u5236\uFF08add/remove\uFF09 |\n| \\`sources\\` | \\`string[]\\` | RW | \u6765\u6E90 Rem ID \u6570\u7EC4\u3002\u5199\u5165\u65F6\u4F7F\u7528 diff \u673A\u5236 |\n| \\`aliases\\` | \\`string[]\\` | R | \u522B\u540D Rem ID \u6570\u7EC4 |\n\n## \u5173\u8054 \u2014 \u5F15\u7528\u5173\u7CFB\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`remsBeingReferenced\\` | \\`string[]\\` | R | \u672C Rem \u5F15\u7528\u7684\u5176\u4ED6 Rem |\n| \\`deepRemsBeingReferenced\\` | \\`string[]\\` | R-F | \u672C Rem \u6DF1\u5C42\u5F15\u7528\u7684 Rem |\n| \\`remsReferencingThis\\` | \\`string[]\\` | R | \u5F15\u7528\u672C Rem \u7684 Rem\uFF08\u53CD\u5411\u94FE\u63A5\uFF09 |\n\n## \u5173\u8054 \u2014 \u6807\u7B7E\u4F53\u7CFB\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`taggedRem\\` | \\`string[]\\` | R | \u88AB\u672C Rem \u6807\u8BB0\u7684 Rem\uFF08\u672C Rem \u4F5C\u4E3A tag \u65F6\uFF09 |\n| \\`ancestorTagRem\\` | \\`string[]\\` | R-F | \u7956\u5148\u6807\u7B7E Rem\uFF08\u6807\u7B7E\u7EE7\u627F\u94FE\uFF09 |\n| \\`descendantTagRem\\` | \\`string[]\\` | R-F | \u540E\u4EE3\u6807\u7B7E Rem\uFF08\u6807\u7B7E\u7EE7\u627F\u94FE\uFF09 |\n\n## \u5173\u8054 \u2014 \u5C42\u7EA7\u904D\u5386\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`descendants\\` | \\`string[]\\` | R | \u6240\u6709\u540E\u4EE3 Rem |\n| \\`siblingRem\\` | \\`string[]\\` | R | \u5144\u5F1F Rem |\n| \\`portalsAndDocumentsIn\\` | \\`string[]\\` | R-F | \u6240\u5728\u7684 Portal \u548C\u6587\u6863 |\n| \\`allRemInDocumentOrPortal\\` | \\`string[]\\` | R-F | \u6587\u6863/Portal \u4E2D\u7684\u6240\u6709 Rem |\n| \\`allRemInFolderQueue\\` | \\`string[]\\` | R-F | \u6587\u4EF6\u5939\u961F\u5217\u4E2D\u7684 Rem |\n\n## \u4F4D\u7F6E / \u7EDF\u8BA1\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`positionAmongstSiblings\\` | \\`number \\| null\\` | RW | \u5728\u5144\u5F1F\u95F4\u7684\u4F4D\u7F6E\uFF080 \u8D77\u59CB\uFF09 |\n| \\`timesSelectedInSearch\\` | \\`number\\` | R-F | \u641C\u7D22\u4E2D\u88AB\u9009\u6B21\u6570 |\n| \\`lastTimeMovedTo\\` | \\`number\\` | R-F | \u4E0A\u6B21\u79FB\u52A8\u65F6\u95F4\uFF08\u6BEB\u79D2\u65F6\u95F4\u6233\uFF09 |\n| \\`schemaVersion\\` | \\`number\\` | R-F | Schema \u7248\u672C\u53F7 |\n\n## \u961F\u5217\u89C6\u56FE\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`embeddedQueueViewMode\\` | \\`boolean\\` | R-F | \u5D4C\u5165\u5F0F\u961F\u5217\u89C6\u56FE\u6A21\u5F0F |\n\n## \u5143\u6570\u636E / \u65F6\u95F4\u6233\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u6743\u9650 | \u8BF4\u660E |\n|------|------|:----:|------|\n| \\`createdAt\\` | \\`number\\` | R | \u521B\u5EFA\u65F6\u95F4\uFF08\u6BEB\u79D2\u65F6\u95F4\u6233\uFF09 |\n| \\`updatedAt\\` | \\`number\\` | R | \u6700\u540E\u66F4\u65B0\u65F6\u95F4\uFF08\u6BEB\u79D2\u65F6\u95F4\u6233\uFF09 |\n| \\`localUpdatedAt\\` | \\`number\\` | R-F | \u672C\u5730\u6700\u540E\u66F4\u65B0\u65F6\u95F4 |\n| \\`lastPracticed\\` | \\`number\\` | R-F | \u4E0A\u6B21\u7EC3\u4E60\u65F6\u95F4 |\n\n---\n\n## \u53EF\u7F16\u8F91\u5B57\u6BB5\u7EA6\u675F\u8868\n\n\u4EE5\u4E0B\u4E3A 20 \u4E2A\u53EF\u7F16\u8F91\u5B57\u6BB5\uFF08RW\uFF09\u53CA\u5176\u5199\u5165\u7EA6\u675F\uFF1A\n\n| \u5B57\u6BB5 | SDK setter | \u503C\u7C7B\u578B | \u7EA6\u675F / \u7279\u6B8A\u5904\u7406 |\n|------|-----------|--------|-----------------|\n| \\`text\\` | \\`rem.setText()\\` | RichText | RichText \u6570\u7EC4 |\n| \\`backText\\` | \\`rem.setBackText()\\` | RichText \\| null | null \u2192 \\`setBackText([])\\`\uFF08\u6E05\u9664\u80CC\u9762\uFF09\uFF1B\u5B57\u7B26\u4E32 \u2192 \u5305\u88C5\u4E3A \\`[string]\\` |\n| \\`type\\` | \\`rem.setType()\\` | RemTypeValue | \\`portal\\` \u4E0D\u53EF\u8BBE\u7F6E\uFF08\u53EA\u80FD\u901A\u8FC7 \\`createPortal()\\` \u521B\u5EFA\uFF09 |\n| \\`isDocument\\` | \\`rem.setIsDocument()\\` | boolean | \u2014 |\n| \\`parent\\` | \\`rem.setParent(parentId, position?)\\` | string \\| null | \u4E0E \\`positionAmongstSiblings\\` \u8054\u52A8 |\n| \\`fontSize\\` | \\`rem.setFontSize()\\` | FontSize \\| null | null \u2192 \\`setFontSize(undefined)\\`\uFF08\u6062\u590D\u666E\u901A\u5927\u5C0F\uFF09 |\n| \\`highlightColor\\` | \\`rem.setHighlightColor()\\` / \\`rem.removePowerup('h')\\` | HighlightColor \\| null | null \u2192 \\`removePowerup('h')\\`\uFF08SDK \u4E0D\u63A5\u53D7 null\uFF09 |\n| \\`isTodo\\` | \\`rem.setIsTodo()\\` | boolean | \u8BBE\u4E3A true \u65F6\u81EA\u52A8\u521D\u59CB\u5316 todoStatus |\n| \\`todoStatus\\` | \\`rem.setTodoStatus()\\` | TodoStatus \\| null | null \u2192 \u8DF3\u8FC7\uFF08\u6E05\u9664 todo \u5E94\u901A\u8FC7 \\`isTodo=false\\`\uFF09 |\n| \\`isCode\\` | \\`rem.setIsCode()\\` | boolean | \u2014 |\n| \\`isQuote\\` | \\`rem.setIsQuote()\\` | boolean | \u2014 |\n| \\`isListItem\\` | \\`rem.setIsListItem()\\` | boolean | \u2014 |\n| \\`isCardItem\\` | \\`rem.setIsCardItem()\\` | boolean | \u2014 |\n| \\`isSlot\\` | \\`rem.setIsSlot()\\` | boolean | \u4E0E \\`isProperty\\` \u5E95\u5C42\u76F8\u540C |\n| \\`isProperty\\` | \\`rem.setIsProperty()\\` | boolean | \u4E0E \\`isSlot\\` \u5E95\u5C42\u76F8\u540C |\n| \\`enablePractice\\` | \\`rem.setEnablePractice()\\` | boolean | \u2014 |\n| \\`practiceDirection\\` | \\`rem.setPracticeDirection()\\` | PracticeDirection | \\`forward\\` / \\`backward\\` / \\`both\\` / \\`none\\` |\n| \\`tags\\` | \\`rem.addTag()\\` / \\`rem.removeTag()\\` | string[] | **Diff \u673A\u5236**\uFF1A\u5BF9\u6BD4\u5F53\u524D vs \u76EE\u6807\uFF0C\u589E\u5220\u5DEE\u5F02\u9879 |\n| \\`sources\\` | \\`rem.addSource()\\` / \\`rem.removeSource()\\` | string[] | **Diff \u673A\u5236**\uFF1A\u5BF9\u6BD4\u5F53\u524D vs \u76EE\u6807\uFF0C\u589E\u5220\u5DEE\u5F02\u9879 |\n| \\`positionAmongstSiblings\\` | \\`rem.setParent(parent, position)\\` | number \\| null | \u4E0E \\`parent\\` \u8054\u52A8 |\n\n### parent + positionAmongstSiblings \u8054\u52A8\n\n\u8FD9\u4E24\u4E2A\u5B57\u6BB5\u901A\u8FC7\u540C\u4E00\u4E2A SDK \u8C03\u7528 \\`rem.setParent(parentId, position)\\` \u5199\u5165\uFF1A\n\n| \u573A\u666F | \u884C\u4E3A |\n|------|------|\n| \u4E24\u4E2A\u5B57\u6BB5\u90FD\u53D8\u66F4 | \u5408\u5E76\u4E3A\u4E00\u6B21 \\`setParent(newParent, newPosition)\\` \u8C03\u7528 |\n| \u53EA\u6709 \\`parent\\` \u53D8\u66F4 | \\`setParent(newParent)\\` \u4E0D\u5E26 position\uFF08\u4FDD\u6301\u672B\u5C3E\uFF09 |\n| \u53EA\u6709 \\`positionAmongstSiblings\\` \u53D8\u66F4 | \u83B7\u53D6\u5F53\u524D parent \u2192 \\`setParent(currentParent, newPosition)\\` |\n\n### tags / sources Diff \u673A\u5236\n\n\u5199\u5165 \\`tags\\` \u6216 \\`sources\\` \u65F6\uFF0C\u4E0D\u662F\u6574\u4F53\u66FF\u6362\uFF0C\u800C\u662F\u8BA1\u7B97\u5DEE\u5F02\uFF1A\n\n\\`\\`\\`\ncurrentTags = await rem.getTagRems()\ntargetIds = payload \u4E2D\u7684 tags \u5B57\u6BB5\ncurrentSet = Set(currentTags.map(r => r._id))\ntargetSet = Set(targetIds)\n\n// \u589E\u52A0\u7F3A\u5C11\u7684\nfor id in targetIds:\n if id not in currentSet: await rem.addTag(id)\n\n// \u5220\u9664\u591A\u4F59\u7684\nfor id in currentSet:\n if id not in targetSet: await rem.removeTag(id)\n\\`\\`\\`\n\n---\n\n## \u53EA\u8BFB\u5B57\u6BB5\u5217\u8868\n\n\u4EE5\u4E0B 31 \u4E2A\u5B57\u6BB5\u5728 str_replace \u4E2D\u88AB\u4FEE\u6539\u65F6\uFF0C**\u53EA\u4EA7\u751F\u8B66\u544A\uFF0C\u4E0D\u6267\u884C\u5199\u5165**\uFF1A\n\n\\`\\`\\`\nid,\nchildren,\nisTable,\nportalType, portalDirectlyIncludedRem,\npropertyType,\naliases,\nremsBeingReferenced, deepRemsBeingReferenced, remsReferencingThis,\ntaggedRem, ancestorTagRem, descendantTagRem,\ndescendants, siblingRem,\nportalsAndDocumentsIn, allRemInDocumentOrPortal, allRemInFolderQueue,\ntimesSelectedInSearch, lastTimeMovedTo, schemaVersion,\nembeddedQueueViewMode,\ncreatedAt, updatedAt, localUpdatedAt, lastPracticed,\nisPowerup, isPowerupEnum, isPowerupProperty,\nisPowerupPropertyListItem, isPowerupSlot\n\\`\\`\\`\n\n\u8B66\u544A\u683C\u5F0F\uFF1A\\`\"Field '{fieldName}' is read-only and was ignored\"\\`\n\n---\n\n## \u679A\u4E3E\u7C7B\u578B\u901F\u67E5\u8868\n\n### RemTypeValue\n\n| \u503C | \u542B\u4E49 | UI \u8868\u73B0 |\n|----|------|---------|\n| \\`concept\\` | \u6982\u5FF5\uFF08\u53CC\u5411\u95EA\u5361\uFF09 | \u6587\u5B57\u52A0\u7C97 |\n| \\`descriptor\\` | \u63CF\u8FF0\uFF08\u5355\u5411\u95EA\u5361\uFF09 | \u6B63\u5E38\u5B57\u91CD |\n| \\`default\\` | \u666E\u901A Rem | \u6B63\u5E38\u5B57\u91CD |\n| \\`portal\\` | \u5D4C\u5165\u5F15\u7528\u5BB9\u5668 | \u7D2B\u8272\u5DE6\u8FB9\u6846\uFF08\u53EA\u8BFB\uFF0C\u4E0D\u53EF\u901A\u8FC7 setType \u8BBE\u7F6E\uFF09 |\n\n### FontSize\n\n| \u503C | UI \u8868\u73B0 |\n|----|---------|\n| \\`H1\\` | \u8D85\u5927\u7C97\u4F53 |\n| \\`H2\\` | \u5927\u7C97\u4F53 |\n| \\`H3\\` | \u4E2D\u7C97\u4F53 |\n\n### TodoStatus\n\n| \u503C | UI \u8868\u73B0 |\n|----|---------|\n| \\`Finished\\` | \u84DD\u8272\u5DF2\u52FE\u9009 + \u6587\u672C\u5220\u9664\u7EBF |\n| \\`Unfinished\\` | \u7A7A\u5FC3\u672A\u52FE\u9009 |\n\n### HighlightColor\n\n\\`\\`\\`\nRed | Orange | Yellow | Green | Blue | Purple | Gray | Brown | Pink\n\\`\\`\\`\n\n### PortalType\n\n| \u503C | \u542B\u4E49 |\n|----|------|\n| \\`portal\\` | \u6807\u51C6 Portal |\n| \\`embedded_queue\\` | \u5D4C\u5165\u5F0F\u961F\u5217\u89C6\u56FE |\n| \\`scaffold\\` | \u811A\u624B\u67B6\u6A21\u5F0F |\n| \\`search_portal\\` | \u641C\u7D22 Portal |\n\n### PracticeDirection\n\n| \u503C | \u542B\u4E49 |\n|----|------|\n| \\`forward\\` | \u6B63\u5411\uFF1A\u770B text \u56DE\u5FC6 backText |\n| \\`backward\\` | \u53CD\u5411\uFF1A\u770B backText \u56DE\u5FC6 text |\n| \\`both\\` | \u53CC\u5411\uFF1A\u6B63\u53CD\u4E24\u4E2A\u65B9\u5411\u90FD\u7EC3\u4E60 |\n| \\`none\\` | \u4E0D\u751F\u6210\u95EA\u5361 |\n\n### PropertyTypeValue\n\n\\`\\`\\`\ntext | number | date | checkbox | single_select | multi_select | url | image | title | definition | created_at | last_updated | 0\n\\`\\`\\`\n\n\\`0\\` \u8868\u793A\u9690\u5F0F\u6587\u672C\u7C7B\u578B\uFF08IMPLICIT_TEXT\uFF09\u3002\n\n---\n\n## RichText \u683C\u5F0F\n\nRemObject \u4E2D\u7684 \\`text\\` \u548C \\`backText\\` \u5B57\u6BB5\u4F7F\u7528 RichText \u683C\u5F0F\u2014\u2014\u4E00\u4E2A JSON \u6570\u7EC4\uFF0C\u6BCF\u4E2A\u5143\u7D20\u4E3A\u7EAF\u5B57\u7B26\u4E32\u6216\u5E26 \\`i\\` \u5B57\u6BB5\u7684\u683C\u5F0F\u5316\u5BF9\u8C61\u3002\n\n### \u5143\u7D20\u7C7B\u578B\n\n| \\`i\\` \u503C | \u542B\u4E49 | \u6838\u5FC3\u5B57\u6BB5 |\n|--------|------|----------|\n| \uFF08\u7EAF string\uFF09 | \u7EAF\u6587\u672C\u7247\u6BB5 | \u2014 |\n| \\`\"m\"\\` | \u5E26\u683C\u5F0F\u6587\u672C | \\`text\\` + \u683C\u5F0F\u6807\u8BB0 |\n| \\`\"q\"\\` | Rem \u5F15\u7528 | \\`_id\\`\uFF08\u88AB\u5F15\u7528 Rem ID\uFF09 |\n| \\`\"i\"\\` | \u56FE\u7247 | \\`url\\`, \\`width\\`, \\`height\\` |\n| \\`\"x\"\\` | LaTeX | \\`text\\` |\n| \\`\"a\"\\` | \u97F3\u9891 | \\`url\\` |\n\n### \u884C\u5185\u683C\u5F0F\u6807\u8BB0\uFF08\\`i:\"m\"\\` \u5143\u7D20\u5185\uFF09\n\n| \u5B57\u6BB5 | \u7C7B\u578B | \u542B\u4E49 |\n|------|------|------|\n| \\`b\\` | \\`true\\` | \u52A0\u7C97 |\n| \\`l\\` | \\`true\\` | \u659C\u4F53 |\n| \\`u\\` | \\`true\\` | \u4E0B\u5212\u7EBF |\n| \\`h\\` | \\`number\\` | \u9AD8\u4EAE\u989C\u8272\uFF081=\u7EA2, 2=\u6A59, 3=\u9EC4, 4=\u7EFF, 5=\u84DD, 6=\u7D2B\uFF09 |\n| \\`tc\\` | \\`number\\` | \u6587\u5B57\u989C\u8272 |\n| \\`code\\` | \\`true\\` | \u884C\u5185\u4EE3\u7801 |\n| \\`cId\\` | \\`string\\` | \u5B8C\u5F62\u586B\u7A7A ID |\n| \\`iUrl\\` | \\`string\\` | \u5916\u90E8\u94FE\u63A5 URL |\n\n### \u5E8F\u5217\u5316\u786E\u5B9A\u6027\n\nRichText \u5BF9\u8C61\u5143\u7D20\u5185\u90E8\u6309 **key \u5B57\u6BCD\u5E8F\u6392\u5217**\uFF08Plugin \u7AEF \\`sortRichTextKeys()\\` \u5904\u7406\uFF09\uFF0C\u786E\u4FDD\u540C\u4E00\u5185\u5BB9\u7684\u5E8F\u5217\u5316 JSON \u59CB\u7EC8\u4E00\u81F4\u3002\u8FD9\u5BF9 \\`edit_rem\\` \u7684 str_replace \u548C\u4E50\u89C2\u5E76\u53D1\u68C0\u6D4B\u81F3\u5173\u91CD\u8981\u3002\n";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const SEPARATOR_FLASHCARD_CONTENT = "\n# Separator & Flashcard Reference\n\n\u7528\u6237\u5728 RemNote \u4E2D\u8F93\u5165\u7684\u5206\u9694\u7B26\u51B3\u5B9A\u4E86 Rem \u7684 type\u3001backText \u548C\u9ED8\u8BA4 practiceDirection\u3002\u7406\u89E3\u5206\u9694\u7B26\u662F\u7406\u89E3\u7528\u6237\u521B\u5EFA\u95EA\u5361\u610F\u56FE\u7684\u5173\u952E\u3002\n\n---\n\n## \u5206\u9694\u7B26\u5B8C\u6574\u6620\u5C04\u8868\n\n| \u5206\u9694\u7B26 | \u7528\u6237\u8F93\u5165\u793A\u4F8B | type | backText | \u9ED8\u8BA4 practiceDirection | \u7528\u9014 |\n|:-------|:-------------|:-----|:---------|:-----------------------|:-----|\n| \uFF08\u65E0\uFF09 | \\`\u666E\u901A\u6587\u672C\\` | \\`default\\` | \\`null\\` | \u2014 | \u65E0\u95EA\u5361\u884C\u4E3A |\n| \\`::\\` | \\`\u6982\u5FF5 :: \u5B9A\u4E49\\` | \\`concept\\` | \u540E\u534A\u90E8\u5206 | \\`both\\` | \u6982\u5FF5\u5B9A\u4E49\uFF08CDF \u6846\u67B6\uFF09 |\n| \\`;;\\` | \\`\u5C5E\u6027 ;; \u503C\\` | \\`descriptor\\` | \u540E\u534A\u90E8\u5206 | \\`forward\\` | \u63CF\u8FF0\u5C5E\u6027\uFF08CDF \u6846\u67B6\uFF09 |\n| \\`>>\\` | \\`\u95EE\u9898 >> \u7B54\u6848\\` | \\`default\\` | \u540E\u534A\u90E8\u5206 | \\`forward\\` | \u6B63\u5411\u95EE\u7B54 |\n| \\`<<\\` | \\`\u95EE\u9898 << \u7B54\u6848\\` | \\`default\\` | \u540E\u534A\u90E8\u5206 | \\`backward\\` | \u53CD\u5411\u95EE\u7B54 |\n| \\`<>\\` | \\`\u95EE\u9898 <> \u7B54\u6848\\` | \\`default\\` | \u540E\u534A\u90E8\u5206 | \\`both\\` | \u53CC\u5411\u95EE\u7B54 |\n| \\`>>>\\` | \\`\u95EE\u9898 >>>\\` | \\`default\\` | \\`null\\` | \\`forward\\` | \u591A\u884C\u7B54\u6848\uFF08\u5B50 Rem \u4E3A\u7B54\u6848\uFF09 |\n| \\`::>\\` | \\`\u6982\u5FF5 ::>\\` | \\`concept\\` | \\`null\\` | \\`both\\` | \u6982\u5FF5\u578B\u591A\u884C\u7B54\u6848 |\n| \\`;;>\\` | \\`\u5C5E\u6027 ;;>\\` | \\`descriptor\\` | \\`null\\` | \\`forward\\` | \u63CF\u8FF0\u578B\u591A\u884C\u7B54\u6848 |\n| \\`{{}}\\` | \\`The {{capital}} of France is Paris\\` | \\`default\\` | \\`null\\` | \\`forward\\` | \u5B8C\u5F62\u586B\u7A7A\uFF08Cloze\uFF09 |\n\n---\n\n## \u5927\u7EB2\u4E2D\u7684\u7BAD\u5934\u5206\u9694\u7B26\n\n\u5728 Markdown \u5927\u7EB2\uFF08read_tree / edit_tree\uFF09\u4E2D\uFF0C\u5206\u9694\u7B26\u88AB\u7F16\u7801\u4E3A Unicode \u7BAD\u5934\uFF1A\n\n### \u5355\u884C\u7BAD\u5934\uFF08\u6709 backText\uFF09\n\n| \u7BAD\u5934 | \u542B\u4E49 | practiceDirection | \u5BF9\u5E94\u5206\u9694\u7B26 |\n|:-----|:-----|:------------------|:-----------|\n| \\` \u2192 \\` | \u6B63\u5411 | \\`forward\\` | \\`>>\\` / \\`;;\\` |\n| \\` \u2190 \\` | \u53CD\u5411 | \\`backward\\` | \\`<<\\` |\n| \\` \u2194 \\` | \u53CC\u5411 | \\`both\\` | \\`<>\\` / \\`::\\` |\n\n### \u591A\u884C\u7BAD\u5934\uFF08\u5B50 Rem \u4E3A\u7B54\u6848\uFF09\n\n| \u7BAD\u5934 | \u542B\u4E49 | practiceDirection | \u5BF9\u5E94\u5206\u9694\u7B26 |\n|:-----|:-----|:------------------|:-----------|\n| \\` \u2193\\` | \u6B63\u5411\u591A\u884C | \\`forward\\` | \\`>>>\\` / \\`;;>\\` |\n| \\` \u2191\\` | \u53CD\u5411\u591A\u884C | \\`backward\\` | \u2014 |\n| \\` \u2195\\` | \u53CC\u5411\u591A\u884C | \\`both\\` | \\`::>\\` |\n\n**\u6CE8\u610F**\uFF1A\u7BAD\u5934\u7F16\u7801\u7684\u662F \\`practiceDirection\\`\uFF0C\u4E0D\u7F16\u7801 \\`type\\`\u3002type \u7531\u5143\u6570\u636E\u6807\u8BB0 \\`type:concept\\` / \\`type:descriptor\\` \u627F\u8F7D\u3002\n\n---\n\n## practiceDirection \u53D6\u503C\n\n| \u503C | \u542B\u4E49 | \u95EA\u5361\u751F\u6210 |\n|:---|:-----|:---------|\n| \\`forward\\` | \u6B63\u5411\uFF1A\u770B text \u56DE\u5FC6 backText | \u751F\u6210\u6B63\u5411\u5361 |\n| \\`backward\\` | \u53CD\u5411\uFF1A\u770B backText \u56DE\u5FC6 text | \u751F\u6210\u53CD\u5411\u5361 |\n| \\`both\\` | \u53CC\u5411\uFF1A\u6B63\u53CD\u4E24\u4E2A\u65B9\u5411\u90FD\u7EC3\u4E60 | \u751F\u6210\u6B63\u5411+\u53CD\u5411\u4E24\u5F20\u5361 |\n| \\`none\\` | \u4E0D\u751F\u6210\u95EA\u5361 | \u4E0D\u751F\u6210\u5361 |\n\n---\n\n## CDF\uFF08Concept-Descriptor Framework\uFF09\n\nRemNote \u63A8\u8350\u7684\u77E5\u8BC6\u7ED3\u6784\u5316\u65B9\u6CD5\uFF1A\n\n- **Concept**\uFF08\\`::\\`\uFF09\uFF1A\u9700\u8981\u7406\u89E3\u7684\u6838\u5FC3\u6982\u5FF5\u2014\u2014\"X \u662F\u4EC0\u4E48\uFF1F\"\n- **Descriptor**\uFF08\\`;;\\`\uFF09\uFF1A\u6982\u5FF5\u7684\u5C5E\u6027/\u63CF\u8FF0\u2014\u2014\"X \u7684 Y \u662F\u4EC0\u4E48\uFF1F\"\n\n\u5178\u578B\u7ED3\u6784\uFF1A\n\n\\`\\`\\`\n\u7EBF\u6027\u56DE\u5F52 :: \u6700\u57FA\u672C\u7684\u56DE\u5F52\u6A21\u578B \u2190 Concept (type:concept, both)\n \u5047\u8BBE ;; \u56E0\u53D8\u91CF\u4E0E\u81EA\u53D8\u91CF\u5448\u7EBF\u6027\u5173\u7CFB \u2190 Descriptor (type:descriptor, forward)\n \u635F\u5931\u51FD\u6570 ;; \u5747\u65B9\u8BEF\u5DEE (MSE) \u2190 Descriptor (type:descriptor, forward)\n\\`\\`\\`\n\n---\n\n## \u901A\u8FC7 CLI \u521B\u5EFA\u95EA\u5361\n\n### \u4F7F\u7528 edit_tree \u65B0\u589E\u884C\n\n\u901A\u8FC7\u7BAD\u5934\u5206\u9694\u7B26\u521B\u5EFA\uFF1A\n\n| \u8981\u521B\u5EFA\u7684\u95EA\u5361\u7C7B\u578B | edit_tree \u65B0\u589E\u884C\u683C\u5F0F | \u989D\u5916\u6B65\u9AA4 |\n|:-----------------|:--------------------|:---------|\n| \u6B63\u5411\u95EE\u7B54 | \\`\u95EE\u9898 \u2192 \u7B54\u6848\\` | \u2014 |\n| \u53CD\u5411\u95EE\u7B54 | \\`\u95EE\u9898 \u2190 \u7B54\u6848\\` | \u2014 |\n| \u53CC\u5411\u95EE\u7B54 | \\`\u95EE\u9898 \u2194 \u7B54\u6848\\` | \u2014 |\n| \u6982\u5FF5\u5B9A\u4E49 | \\`\u6982\u5FF5 \u2194 \u5B9A\u4E49\\` | \u7528 edit_rem \u5C06 type \u6539\u4E3A \\`concept\\` |\n| \u63CF\u8FF0\u5C5E\u6027 | \\`\u5C5E\u6027 \u2192 \u503C\\` | \u7528 edit_rem \u5C06 type \u6539\u4E3A \\`descriptor\\` |\n| \u591A\u884C\u6B63\u5411 | \\`\u95EE\u9898 \u2193\\`\uFF08\u5B50\u884C\u4E3A\u7B54\u6848\uFF09 | \u2014 |\n| \u591A\u884C\u53CC\u5411 | \\`\u95EE\u9898 \u2195\\`\uFF08\u5B50\u884C\u4E3A\u7B54\u6848\uFF09 | \u2014 |\n\n### \u4F7F\u7528 edit_rem \u4FEE\u6539\u73B0\u6709\u95EA\u5361\n\n\u4FEE\u6539\u95EA\u5361\u884C\u4E3A\u7684\u76F8\u5173\u5B57\u6BB5\uFF1A\n\n| \u5B57\u6BB5 | \u4F5C\u7528 | \u793A\u4F8B |\n|:-----|:-----|:-----|\n| \\`type\\` | \u6539\u53D8\u7C7B\u578B\u8BED\u4E49 | \\`\"default\"\\` \u2192 \\`\"concept\"\\` |\n| \\`backText\\` | \u8BBE\u7F6E/\u4FEE\u6539/\u6E05\u9664\u80CC\u9762 | \\`null\\` \u2192 \\`[\"\u7B54\u6848\u6587\u672C\"]\\` |\n| \\`practiceDirection\\` | \u6539\u53D8\u7EC3\u4E60\u65B9\u5411 | \\`\"forward\"\\` \u2192 \\`\"both\"\\` |\n| \\`enablePractice\\` | \u542F\u7528/\u7981\u7528\u95F4\u9694\u91CD\u590D | \\`false\\` \u2192 \\`true\\` |\n| \\`isCardItem\\` | \u6807\u8BB0\u4E3A\u591A\u884C\u7B54\u6848\u884C | \\`false\\` \u2192 \\`true\\` |\n\n---\n\n## \u5B8C\u5F62\u586B\u7A7A\uFF08Cloze\uFF09\n\n\u5B8C\u5F62\u586B\u7A7A\u901A\u8FC7 RichText \u4E2D\u7684 \\`cId\\` \u6807\u8BB0\u5B9E\u73B0\uFF1A\n\n\\`\\`\\`json\n[\n \"The \",\n { \"i\": \"m\", \"cId\": \"cloze1\", \"text\": \"capital\" },\n \" of France is Paris\"\n]\n\\`\\`\\`\n\n\\`cId\\` \u662F\u5B8C\u5F62\u586B\u7A7A\u6807\u8BB0\u2014\u2014\u88AB\u6807\u8BB0\u7684\u6587\u672C\u5728\u7EC3\u4E60\u65F6\u4F1A\u88AB\u906E\u76D6\u3002\u901A\u8FC7 edit_rem \u64CD\u4F5C RichText \u6765\u521B\u5EFA/\u4FEE\u6539\u5B8C\u5F62\u586B\u7A7A\u3002\n";
|
package/dist/mcp/types.d.ts
DELETED