@dinoxx/dinox-cli 1.0.19 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +756 -472
  2. package/dist/auth/userInfo.d.ts +10 -1
  3. package/dist/auth/userInfo.js +66 -17
  4. package/dist/cli.js +0 -2
  5. package/dist/commands/auth/index.js +29 -14
  6. package/dist/commands/boxes/index.js +272 -52
  7. package/dist/commands/boxes/model.d.ts +34 -0
  8. package/dist/commands/boxes/model.js +78 -0
  9. package/dist/commands/boxes/operations.d.ts +86 -0
  10. package/dist/commands/boxes/operations.js +415 -0
  11. package/dist/commands/boxes/repo.d.ts +13 -6
  12. package/dist/commands/boxes/repo.js +272 -149
  13. package/dist/commands/boxes/store.d.ts +22 -0
  14. package/dist/commands/boxes/store.js +143 -0
  15. package/dist/commands/graph/index.js +2 -36
  16. package/dist/commands/mcp/noteContentTools.d.ts +222 -0
  17. package/dist/commands/mcp/noteContentTools.js +390 -0
  18. package/dist/commands/mcp/server.d.ts +3 -0
  19. package/dist/commands/mcp/server.js +45 -16
  20. package/dist/commands/mcp/tools.js +3 -1
  21. package/dist/commands/mcp/types.d.ts +6 -2
  22. package/dist/commands/meta/index.js +6 -22
  23. package/dist/commands/meta/repo.d.ts +0 -3
  24. package/dist/commands/meta/repo.js +1 -4
  25. package/dist/commands/notes/actions.d.ts +2 -0
  26. package/dist/commands/notes/actions.js +149 -55
  27. package/dist/commands/notes/bulk.d.ts +34 -0
  28. package/dist/commands/notes/bulk.js +204 -0
  29. package/dist/commands/notes/contentEngine.d.ts +95 -0
  30. package/dist/commands/notes/contentEngine.js +652 -0
  31. package/dist/commands/notes/contentPatch.d.ts +84 -0
  32. package/dist/commands/notes/contentPatch.js +337 -0
  33. package/dist/commands/notes/contentPatchCommand.d.ts +3 -0
  34. package/dist/commands/notes/contentPatchCommand.js +126 -0
  35. package/dist/commands/notes/descriptors.js +192 -40
  36. package/dist/commands/notes/export.d.ts +21 -0
  37. package/dist/commands/notes/export.js +224 -0
  38. package/dist/commands/notes/metadataMutation.d.ts +28 -0
  39. package/dist/commands/notes/metadataMutation.js +127 -0
  40. package/dist/commands/notes/repo.d.ts +20 -0
  41. package/dist/commands/notes/repo.js +135 -18
  42. package/dist/commands/notes/runtime.d.ts +3 -12
  43. package/dist/commands/notes/runtime.js +4 -30
  44. package/dist/commands/notes/searchSql.js +1 -1
  45. package/dist/commands/prompt/index.js +15 -45
  46. package/dist/commands/prompt/repo.js +2 -2
  47. package/dist/commands/runtime.d.ts +26 -0
  48. package/dist/commands/runtime.js +76 -0
  49. package/dist/commands/schema/renderSkills.js +20 -7
  50. package/dist/commands/schema/spec.d.ts +1 -2
  51. package/dist/commands/schema/spec.js +2 -3
  52. package/dist/commands/schema/types.d.ts +0 -13
  53. package/dist/commands/storage/index.js +30 -60
  54. package/dist/commands/storage/repo.d.ts +1 -1
  55. package/dist/commands/storage/repo.js +20 -1
  56. package/dist/commands/sync.js +4 -2
  57. package/dist/commands/tags/content.d.ts +32 -0
  58. package/dist/commands/tags/content.js +243 -0
  59. package/dist/commands/tags/index.js +285 -49
  60. package/dist/commands/tags/model.d.ts +38 -0
  61. package/dist/commands/tags/model.js +100 -0
  62. package/dist/commands/tags/operations.d.ts +105 -0
  63. package/dist/commands/tags/operations.js +438 -0
  64. package/dist/commands/tags/repo.d.ts +5 -1
  65. package/dist/commands/tags/repo.js +142 -218
  66. package/dist/commands/tags/store.d.ts +28 -0
  67. package/dist/commands/tags/store.js +166 -0
  68. package/dist/commands/todo/index.js +30 -61
  69. package/dist/commands/writeDryRun.d.ts +25 -0
  70. package/dist/commands/writeDryRun.js +31 -1
  71. package/dist/config/paths.d.ts +2 -1
  72. package/dist/config/paths.js +11 -1
  73. package/dist/config/resolve.js +9 -7
  74. package/dist/daemon/index.d.ts +2 -0
  75. package/dist/daemon/index.js +176 -58
  76. package/dist/powersync/runtime.d.ts +2 -1
  77. package/dist/powersync/runtime.js +15 -3
  78. package/dist/powersync/schema/content.d.ts +2 -0
  79. package/dist/powersync/schema/content.js +2 -0
  80. package/dist/powersync/schema/index.d.ts +2 -0
  81. package/dist/skills/check.d.ts +1 -1
  82. package/dist/skills/check.js +27 -2
  83. package/dist/utils/authToken.d.ts +2 -0
  84. package/dist/utils/authToken.js +7 -2
  85. package/dist/utils/noteContentEngine.d.ts +333 -0
  86. package/dist/utils/noteContentEngine.js +740 -0
  87. package/dist/utils/tiptapMarkdownSchema.js +31 -0
  88. package/package.json +4 -8
package/README.md CHANGED
@@ -1,840 +1,1124 @@
1
- # Dinox CLI 使用说明(普通用户版)
1
+ # Dinox CLI 用户手册
2
2
 
3
- `dino` 是一个命令行工具,用来管理你的 Dinox 数据(笔记、标签、卡片盒等)。
3
+ `dino` 是 Dinox 的命令行工具,用来在本地管理和同步你的 Dinox 数据,包括:笔记、待办、标签、卡片盒、Prompt、知识图谱,以及适合脚本和 AI 助手调用的结构化命令输出。
4
4
 
5
- 如果你不熟悉技术细节也没关系,按这份文档一步一步操作就能用。
5
+ 这份 README 按“先上手、再进阶、最后查表”的顺序重写,尽量做到:
6
6
 
7
- ---
7
+ - 先让你快速跑通第一次使用
8
+ - 再教你完成最常见的日常操作
9
+ - 最后给出完整命令速查,方便回头查阅
10
+
11
+ 如果你只想尽快开始,先看“5 分钟快速上手”。
8
12
 
9
- ## 1. 先看你要做什么
13
+ ---
10
14
 
11
- 常见需求:
15
+ ## 目录
12
16
 
13
- 1. 登录账号:`dino auth login ...`
14
- 2. 同步数据:`dino sync`
15
- 3. 搜索笔记:`dino note search "关键词"`
16
- 4. 搜索待办:`dino todo search ...`
17
- 5. 新建笔记:`dino note create ...`
18
- 6. 新建标签:`dino tag add ...`
19
- 7. 新建卡片盒:`dino box add ...`
20
- 8. 看当前版本:`dino info`
17
+ - [1. 你可以用 Dinox CLI 做什么](#1-你可以用-dinox-cli-做什么)
18
+ - [2. 安装要求与安装方法](#2-安装要求与安装方法)
19
+ - [3. 5 分钟快速上手](#3-5-分钟快速上手)
20
+ - [4. 使用前必须知道的 6 个规则](#4-使用前必须知道的-6-个规则)
21
+ - [5. 日常操作教程](#5-日常操作教程)
22
+ - [6. 完整命令速查](#6-完整命令速查)
23
+ - [7. AI / 脚本自动化](#7-ai--脚本自动化)
24
+ - [8. 常见问题](#8-常见问题)
25
+ - [9. 配置文件、数据库与环境变量](#9-配置文件数据库与环境变量)
26
+ - [10. 如何查看帮助](#10-如何查看帮助)
21
27
 
22
28
  ---
23
29
 
24
- ## 2. 安装前准备
30
+ ## 1. 你可以用 Dinox CLI 做什么
25
31
 
26
- 你需要先安装 Node.js(建议 LTS,且版本 >= 20)。
32
+ Dinox CLI 适合这几类场景:
27
33
 
28
- 检查是否已安装:
34
+ 1. 在终端里登录 Dinox 账号,并把云端数据同步到本地
35
+ 2. 快速搜索、查看、创建、更新、删除笔记
36
+ 3. 从笔记里的任务列表中搜索待办,或追加/创建待办
37
+ 4. 维护标签、卡片盒、Prompt 等结构化信息
38
+ 5. 查询笔记之间的链接关系和知识图谱
39
+ 6. 用 `--format json` 输出结构化结果,方便脚本和 AI 调用
29
40
 
30
- ```bash
31
- node -v
32
- npm -v
33
- ```
41
+ 你可以把它理解为:
42
+
43
+ - 普通用户:一个更高效的 Dinox 数据管理工具
44
+ - 进阶用户:一个可脚本化的本地知识库命令行入口
45
+ - AI 用户:一个可通过结构化命令和 schema 稳定调用的本地知识库入口
34
46
 
35
47
  ---
36
48
 
37
- ## 3. 安装方法(macOS / Windows)
49
+ ## 2. 安装要求与安装方法
50
+
51
+ ### 2.1 系统要求
38
52
 
39
- ## 3.1 macOS
53
+ 安装前请先确认:
40
54
 
41
- ### 方式 A:普通用户推荐(全局安装)
55
+ - 已安装 Node.js 20 或更高版本
56
+ - 已安装 npm
57
+ - 你的系统可以正常执行全局 npm 命令
42
58
 
43
- 1. 安装 Node.js(若未安装):
59
+ 检查方法:
44
60
 
45
61
  ```bash
46
- brew install node
62
+ node -v
63
+ npm -v
47
64
  ```
48
65
 
49
- 2. 安装 CLI:
66
+ ### 2.2 安装 Dinox CLI
67
+
68
+ 推荐直接全局安装:
50
69
 
51
70
  ```bash
52
71
  npm install -g @dinoxx/dinox-cli
53
72
  ```
54
73
 
55
- 3. 验证:
74
+ 安装完成后,验证是否成功:
56
75
 
57
76
  ```bash
58
77
  dino info
59
78
  ```
60
79
 
61
- ---
62
-
63
- ## 3.2 Windows
80
+ 看到版本号就表示安装成功。
64
81
 
65
- ### 方式 A:普通用户推荐(全局安装)
82
+ > 说明:安装后通常可以使用 `dino` 或 `dinox` 两个命令名,本文统一使用 `dino`。
66
83
 
67
- 1. 安装 Node.js(若未安装):
84
+ ### 2.3 macOS 安装 Node.js(如果你还没装)
68
85
 
69
- ```powershell
70
- winget install OpenJS.NodeJS.LTS
86
+ ```bash
87
+ brew install node
71
88
  ```
72
89
 
73
- 2. 安装 CLI(PowerShell 或 CMD):
90
+ ### 2.4 Windows 安装 Node.js(如果你还没装)
91
+
92
+ PowerShell 中可使用:
74
93
 
75
94
  ```powershell
76
- npm install -g @dinoxx/dinox-cli
95
+ winget install OpenJS.NodeJS.LTS
77
96
  ```
78
97
 
79
- 3. 验证:
98
+ ### 2.5 更新 CLI
80
99
 
81
- ```powershell
82
- dino info
100
+ 后续如果要更新到最新版本,直接执行:
101
+
102
+ ```bash
103
+ dino update
83
104
  ```
84
105
 
106
+ 它会自动根据你当前的安装方式选择合适的包管理器执行更新。
107
+
85
108
  ---
86
109
 
87
- ## 4. 第一次使用(建议照抄)
110
+ ## 3. 5 分钟快速上手
111
+
112
+ 下面是第一次使用最推荐的顺序。你可以直接照着执行。
88
113
 
89
- ## 第 1 步:登录
114
+ ### 第 1 步:登录
90
115
 
91
116
  ```bash
92
- dino auth login "<你的token>"
117
+ dino auth login "<你的 token>"
93
118
  ```
94
119
 
95
- ## 第 2 步:同步
120
+ 说明:
121
+
122
+ - 这里填的是登录 token 本体
123
+ - `dino auth login` 建议传 token 本体,不要加 `Bearer ` 前缀
124
+ - 登录时 CLI 会顺便验证连接是否可用
125
+ - 自动化或 CI 可以改用 `DINOX_TOKEN` 环境变量注入 token;它优先于本地配置,并支持 token 本体或 `Bearer ...`
126
+
127
+ ### 第 2 步:同步数据到本地
96
128
 
97
129
  ```bash
98
130
  dino sync
99
131
  ```
100
132
 
101
- ## 第 3 步:看状态(可选)
133
+ 这一步会把 Dinox 数据同步到本地 SQLite 数据库,后续很多查询都会直接使用本地缓存。
134
+
135
+ ### 第 3 步:确认当前状态
102
136
 
103
137
  ```bash
104
138
  dino auth status
105
139
  ```
106
140
 
141
+ 你会看到当前是否已登录、本地数据库位置、最近同步状态等信息。
142
+
143
+ ### 第 4 步:搜索一条笔记试试
144
+
145
+ ```bash
146
+ dino note search "AI"
147
+ ```
148
+
149
+ ### 第 5 步:新建一条笔记试试
150
+
151
+ ```bash
152
+ dino note create \
153
+ --title "今天的记录" \
154
+ --content "# 标题\n\n这里是正文" \
155
+ --type note
156
+ ```
157
+
158
+ 如果你能顺利完成上面 5 步,说明 CLI 已经可以正常使用。
159
+
107
160
  ---
108
161
 
109
- ## 5. 最常用命令
162
+ ## 4. 使用前必须知道的 6 个规则
163
+
164
+ 很多问题都来自对 CLI 约定不熟。先掌握下面 6 条,会少踩很多坑。
165
+
166
+ ### 规则 1:很多命令默认会优先使用本地数据库
110
167
 
111
- ## 5.1 笔记
168
+ `dino sync` 会把云端数据同步到本地。后续大多数查询命令会基于本地缓存工作。
112
169
 
113
- 搜索笔记:
170
+ 如果你希望明确只使用本地缓存、不触发联网/同步,可以加:
114
171
 
115
172
  ```bash
116
- dino note search "AI"
117
- dino note search "AI" --days 7
118
- dino note search "AI" --from 2026-02-01 --to 2026-02-28
119
- dino note search "AI" --boxes "Inbox"
120
- dino note search --sql 'type = "crawl" AND zettel_boxes IN ("Inbox","Project")'
173
+ --offline
121
174
  ```
122
175
 
123
- 搜索待办(基于 `image_detail` 的 taskList):
176
+ 例如:
124
177
 
125
178
  ```bash
126
- dino todo search
127
- dino todo search "付款"
128
- dino todo search "付款" --status uncompleted --tags "工作,财务"
129
- dino todo search --from 2026-03-01 --to 2026-03-07 --limit 100
179
+ dino note search "项目复盘" --offline
130
180
  ```
131
181
 
132
- 追加待办到现有笔记:
182
+ 适用场景:
183
+
184
+ - 网络不稳定
185
+ - 只想查本地缓存
186
+ - 你已经先手动执行过 `dino sync`
187
+
188
+ ### 规则 2:给脚本或 AI 用时,推荐统一加 `--format json`
189
+
190
+ 例如:
133
191
 
134
192
  ```bash
135
- dino todo append "补交报销单"
136
- dino todo append --note-id <note-id> --task "补交报销单" --task "整理发票"
137
- dino todo append --tasks '["补交报销单","整理发票"]'
193
+ dino note search "AI" --format json
138
194
  ```
139
195
 
140
- 创建新的待办笔记:
196
+ 说明:
197
+
198
+ - `--format json`:推荐的结构化输出
199
+ - `--format yaml`:也支持
200
+ - `--json`:历史兼容参数,等价于 `--format yaml`
201
+
202
+ ### 规则 3:很多写操作都支持 `--dry-run`
203
+
204
+ 如果你想先看“将会发生什么”,但暂时不真正写入数据,可以用:
141
205
 
142
206
  ```bash
143
- dino todo create "补交报销单"
144
- dino todo create --task "补交报销单" --task "整理发票" --title "本周财务待办"
145
- dino todo create --tasks @./todo.txt
207
+ --dry-run
146
208
  ```
147
209
 
148
- 更新待办完成状态:
210
+ 例如:
149
211
 
150
212
  ```bash
151
- dino todo update <task-id> --status completed
152
- dino todo update <task-id> --status uncompleted
213
+ dino note delete <note-id> --dry-run
153
214
  ```
154
215
 
155
- 创建笔记:
216
+ 这对删除、更新、批量修改尤其有用。
217
+
218
+ ### 规则 4:很多参数支持直接从文件读取
219
+
220
+ 凡是写成 `<string|@file>` 或 `<string|@file>` 的参数,通常都支持 `@文件路径` 的写法。
221
+
222
+ 例如从文件读取笔记正文:
156
223
 
157
224
  ```bash
158
- dino note create \
159
- --title "今天的记录" \
160
- --content "# 标题\n\n正文内容"
225
+ dino note create --title "读书笔记" --content @./note.md --type note
161
226
  ```
162
227
 
163
- 按 ID 查看:
228
+ 例如从文件读取待办列表:
164
229
 
165
230
  ```bash
166
- dino note get <note-id>
167
- dino note detail <note-id>
231
+ dino todo create --tasks @./todo.txt
168
232
  ```
169
233
 
170
- 删除笔记(软删除):
234
+ ### 规则 5:列表参数通常有 3 种写法
235
+
236
+ 像 `--tags`、`--boxes`、`--tasks`、`--ids` 这类列表参数,通常支持:
237
+
238
+ 1. JSON 数组
239
+ 2. 逗号分隔
240
+ 3. 换行分隔
241
+
242
+ 例如这三种都可以:
171
243
 
172
244
  ```bash
173
- dino note delete <note-id>
245
+ --tags '["工作","项目A"]'
246
+ --tags "工作,项目A"
247
+ --tags @./tags.txt
174
248
  ```
175
249
 
176
- ## 5.2 标签
250
+ ### 规则 6:标签和卡片盒必须先存在,笔记才能引用它们
177
251
 
178
- 列出标签:
252
+ 例如你先创建笔记时用了一个不存在的标签:
179
253
 
180
254
  ```bash
181
- dino tag list
255
+ dino note create --title "测试" --content "正文" --tags "工作/项目A"
182
256
  ```
183
257
 
184
- 新增标签(两种写法都可以):
258
+ 如果这个标签还不存在,就会报错。正确顺序通常是:
185
259
 
186
260
  ```bash
187
261
  dino tag add "工作/项目A"
188
- dino tag add --name "工作/项目A" --emoji "🧠"
262
+ dino box add "Inbox"
263
+ dino note create --title "测试" --content "正文" --tags "工作/项目A" --boxes "Inbox" --type note
189
264
  ```
190
265
 
191
- ## 5.3 卡片盒
266
+ ---
267
+
268
+ ## 5. 日常操作教程
269
+
270
+ 这一部分按真实使用场景来写。你不需要一开始记住所有命令,先会做日常任务就够了。
271
+
272
+ ### 5.1 搜索笔记
192
273
 
193
- 列出卡片盒:
274
+ #### 按关键词搜索
194
275
 
195
276
  ```bash
196
- dino box list
277
+ dino note search "AI"
197
278
  ```
198
279
 
199
- 新增卡片盒(两种写法都可以):
280
+ #### 搜索最近 7 天的笔记
200
281
 
201
282
  ```bash
202
- dino box add "Inbox"
203
- dino box add --name "Inbox" --description "用于存放待整理的想法和资料"
283
+ dino note search "AI" --days 7
204
284
  ```
205
285
 
206
- `--description` 很有用:它能帮助 AI 更准确地把笔记分到正确卡片盒。
207
-
208
- ## 5.4 Prompt
286
+ #### 按时间范围搜索
209
287
 
210
288
  ```bash
211
- dino prompt list
212
- dino prompt add --name "周报助手" --prompt "请基于本周笔记输出一份简洁周报"
289
+ dino note search "AI" --from 2026-03-01 --to 2026-03-31
213
290
  ```
214
291
 
215
- ## 5.5 配置
292
+ #### 按标签表达式搜索
293
+
294
+ ```bash
295
+ dino note search --tags "(work OR life) AND NOT archived"
296
+ ```
216
297
 
217
- 查看全部配置:
298
+ #### 按卡片盒搜索
218
299
 
219
300
  ```bash
220
- dino config get
301
+ dino note search --boxes "Inbox,Project"
221
302
  ```
222
303
 
223
- 查看某一项:
304
+ #### 只看已收藏或未收藏笔记
224
305
 
225
306
  ```bash
226
- dino config get sync.timeoutMs
307
+ dino note search --starred true
308
+ dino note search --starred false
227
309
  ```
228
310
 
229
- 设置某一项:
311
+ #### 分页与字段裁剪
230
312
 
231
313
  ```bash
232
- dino config set sync.timeoutMs 20000
314
+ dino note search "AI" --limit 20 --offset 0
315
+ dino note search "AI" --fields id,title,summary,created_at
233
316
  ```
234
317
 
235
- ---
318
+ #### 高级 SQL 风格筛选
236
319
 
237
- ## 6. macOS 和 Windows 的使用差异
320
+ ```bash
321
+ dino note search --sql 'type = "crawl" AND zettel_boxes IN ("Inbox","Project")'
322
+ ```
238
323
 
239
- ## 6.1 路径位置不同
324
+ 适合场景:
240
325
 
241
- 配置文件:
326
+ - 你已经很清楚要筛什么字段
327
+ - 希望做更复杂的组合条件查询
242
328
 
243
- 1. macOS: `~/Library/Application Support/dinox/config.json`
244
- 2. Windows: `%APPDATA%\dinox\config.json`
329
+ > 提醒:`--sql` 只支持只读查询条件,不是让你执行任意 SQL。
245
330
 
246
- ## 6.2 多行命令写法不同
331
+ ### 5.2 查看笔记内容
247
332
 
248
- macOS / Linux(bash/zsh)用 `\` 续行:
333
+ #### 只看笔记基础信息
249
334
 
250
335
  ```bash
251
- dino note create \
252
- --title "标题" \
253
- --content "正文"
336
+ dino note get <note-id>
254
337
  ```
255
338
 
256
- Windows PowerShell 用反引号 `` ` `` 续行:
339
+ #### 只拿轻量上下文(适合 AI / 脚本)
257
340
 
258
- ```powershell
259
- dino note create `
260
- --title "标题" `
261
- --content "正文"
341
+ ```bash
342
+ dino note get <note-id> --context-only --format json
262
343
  ```
263
344
 
264
- ## 6.3 `@file` 参数在 Windows 建议加引号
345
+ #### 预览正文前几行
346
+
347
+ ```bash
348
+ dino note preview <note-id>
349
+ dino note preview <note-id> --lines 30
350
+ ```
265
351
 
266
- 比如从文件读取正文:
352
+ #### 查看完整详情
267
353
 
268
354
  ```bash
269
- dino note create --title "测试" --content @./note.md
355
+ dino note detail <note-id>
270
356
  ```
271
357
 
272
- 在 PowerShell 建议写成:
358
+ #### 批量查看多条笔记详情
273
359
 
274
- ```powershell
275
- dino note create --title "测试" --content "@.\note.md"
360
+ ```bash
361
+ dino note detail --ids @./note-ids.txt
276
362
  ```
277
363
 
278
- 这样更稳,不容易被 shell 误解析。
364
+ ### 5.3 创建笔记
279
365
 
280
- ---
366
+ #### 创建最简单的一条笔记
367
+
368
+ ```bash
369
+ dino note create \
370
+ --title "会议记录" \
371
+ --content "今天讨论了发布计划" \
372
+ --type note
373
+ ```
281
374
 
282
- ## 7. 常见问题
375
+ #### 从 Markdown 文件创建
283
376
 
284
- ## Q1:报错 `Missing persisted userId. Run dino auth login first.`
377
+ ```bash
378
+ dino note create \
379
+ --title "周报" \
380
+ --content @./weekly.md \
381
+ --type note
382
+ ```
285
383
 
286
- 你还没有完成登录。执行:
384
+ #### 同时设置标签和卡片盒
287
385
 
288
386
  ```bash
289
- dino auth login "<token>"
387
+ dino note create \
388
+ --title "项目复盘" \
389
+ --content @./review.md \
390
+ --type note \
391
+ --tags "工作/项目A,复盘" \
392
+ --boxes "Project"
290
393
  ```
291
394
 
292
- ## Q2:创建笔记时报 `Unknown tags` 或 `Unknown zettel box names`
395
+ 注意:
396
+
397
+ - `--title` 和 `--content` 是必填项
398
+ - `--type` 可选值只有 `note` 和 `crawl`
399
+ - 如果你不写 `--type`,默认是 `crawl`
400
+ - 如果你想写普通笔记,建议明确加 `--type note`
293
401
 
294
- 说明你填的标签/卡片盒不存在,先创建再重试:
402
+ #### 创建前先预演
295
403
 
296
404
  ```bash
297
- dino tag add "你的标签"
298
- dino box add "你的卡片盒"
405
+ dino note create \
406
+ --title "测试笔记" \
407
+ --content "正文" \
408
+ --type note \
409
+ --dry-run
299
410
  ```
300
411
 
301
- ---
412
+ ### 5.4 整理笔记元数据与正文
302
413
 
303
- ## 8. 完整命令参数参考
414
+ #### `note update`:显式 ID 的全量替换
304
415
 
305
- ## 8.1 全局参数(适用于 CLI)
416
+ ```bash
417
+ dino note update <note-id> --tags "工作,AI" --dry-run
418
+ dino note update <note-id> --boxes "Inbox" --starred true --dry-run
419
+ ```
306
420
 
307
- 以下参数可放在命令前后使用,例如:`dino --format json auth status`。
421
+ `note update` 面向明确的笔记 ID,`--tags` 和 `--boxes` 都是完整替换,不是追加。清空标签或卡片盒时传 `[]`:
308
422
 
309
- | 参数 | 类型 | 说明 |
310
- | --- | --- | --- |
311
- | `--json` | flag | 兼容旧行为,输出 machine-readable YAML(历史保留写法)。 |
312
- | `--format <yaml\|json>` | string | 结构化输出格式。推荐 AI / 脚本使用 `--format json`。 |
313
- | `--offline` | flag | 跳过 connect/sync,仅用本地缓存(仅被支持该参数的命令读取)。 |
314
- | `--sync-timeout <ms>` | integer | 覆盖连接/同步超时毫秒,必须是正整数。 |
315
- | `--verbose` | flag | 预留 verbose 开关。 |
423
+ ```bash
424
+ dino note update <note-id> --tags '[]'
425
+ dino note update <note-id> --boxes '[]'
426
+ ```
316
427
 
317
- ## 8.2 `auth` 命令
428
+ #### `note tag` / `note move`:显式 ID 的增量整理
318
429
 
319
- ### `dino auth login <token>`
430
+ ```bash
431
+ dino note tag <note-id> --add "工作,AI" --dry-run
432
+ dino note tag --ids @./note-ids.txt --remove "Inbox" --dry-run
433
+ dino note move <note-id> --add "Project/Inbox" --dry-run
434
+ dino note move --ids @./note-ids.txt --replace "Project" --dry-run
435
+ ```
320
436
 
321
- 保存授权信息并验证连接。
437
+ `note tag` 管标签,`note move` 管卡片盒归属;它们的 `--add` / `--remove` 会保留现有值,`--replace` 才会覆盖整个列表。`note move` 不移动文件,也不改正文。
322
438
 
323
- | 参数 | 必填 | 说明 |
324
- | --- | --- | --- |
325
- | `<token>` | 是 | 登录 token,直接传 token 字符串(不需要 `Bearer` 前缀)。 |
439
+ #### `note bulk`:按过滤器批量整理
326
440
 
327
- 支持全局参数:`--json`、`--format`、`--sync-timeout`
441
+ ```bash
442
+ dino note bulk --tags "Inbox" --tag-add "AI" --format json --dry-run
443
+ dino note bulk --days 30 --boxes "Work/Inbox" --box-replace "Archive/Review" --expected-count 12 --confirm --format json
444
+ ```
328
445
 
329
- ### `dino auth logout`
446
+ `note bulk` 只接受受控过滤器,不支持 `--sql` 作为写入目标筛选。真实写入必须先 dry-run,再带 `--confirm --expected-count <n>`。
330
447
 
331
- 清理已保存登录信息。
448
+ #### `note patch`:结构化编辑正文
332
449
 
333
- | 选项 | 必填 | 说明 |
334
- | --- | --- | --- |
335
- | `--clear-local-db` | 否 | 同时删除本地 SQLite 数据库。 |
450
+ ```bash
451
+ dino note content-read <note-id> --format json
452
+ dino note patch <note-id> --append-section "复盘" --content @./section.md --read-token <token> --format json
453
+ ```
336
454
 
337
- ### `dino auth status`
455
+ `note patch` 只用于正文结构化编辑。真实写入前必须先 `content-read`,并传回 `readToken`;替换媒体、表格、未知节点等受保护 block 时,还需要显式 `--allow-protected-replace`。
338
456
 
339
- 查看当前登录与同步状态。
457
+ #### 收藏状态
340
458
 
341
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
459
+ ```bash
460
+ dino note star <note-id>
461
+ dino note unstar <note-id>
462
+ dino note star --ids @./note-ids.txt
463
+ ```
342
464
 
343
- ## 8.3 `sync` 命令
465
+ ### 5.5 删除笔记
344
466
 
345
- ### `dino sync`
467
+ ```bash
468
+ dino note delete <note-id>
469
+ ```
346
470
 
347
- 连接并执行同步。
471
+ 说明:
348
472
 
349
- 支持全局参数:`--json`、`--format`、`--sync-timeout`
473
+ - 这是软删除,不是物理彻底抹除
474
+ - 建议先加 `--dry-run` 再执行正式删除
350
475
 
351
- ## 8.4 `schema` 命令
476
+ ```bash
477
+ dino note delete <note-id> --dry-run
478
+ ```
352
479
 
353
- ### `dino schema [path]`
480
+ ### 5.6 管理待办任务
354
481
 
355
- 查看命令 schema,了解参数、风险级别、输出结构与示例。推荐 AI / 脚本在不确定调用方式时先查看。
482
+ Dinox 的待办来自笔记内容中的任务列表。CLI 提供了 4 个最常用动作:搜索、追加、创建、更新状态。
356
483
 
357
- | 参数 | 必填 | 说明 |
358
- | --- | --- | --- |
359
- | `[path]` | 否 | 命令路径,例如 `note.search`、`todo.update`、`sync`。不传则列出所有可用 schema。 |
484
+ #### 搜索待办
360
485
 
361
- 支持全局参数:`--json`、`--format`
486
+ ```bash
487
+ dino todo search
488
+ dino todo search "付款"
489
+ dino todo search "付款" --status uncompleted
490
+ dino todo search --from 2026-03-01 --to 2026-03-07 --limit 100
491
+ ```
362
492
 
363
- 示例:
493
+ #### 按标签筛选待办
364
494
 
365
495
  ```bash
366
- dino schema
367
- dino schema note.search
368
- dino schema note.search --format json
496
+ dino todo search --tags "工作,财务"
369
497
  ```
370
498
 
371
- ## 8.5 `note` 命令
499
+ #### 创建一条新的待办笔记
500
+
501
+ ```bash
502
+ dino todo create "补交报销单"
503
+ ```
372
504
 
373
- ### `dino note search [query]`
505
+ #### 一次创建多条待办
374
506
 
375
- 按关键词/标签/创建时间搜索笔记。
507
+ ```bash
508
+ dino todo create --task "补交报销单" --task "整理发票"
509
+ dino todo create --tasks '["补交报销单","整理发票"]'
510
+ dino todo create --tasks @./todo.txt --title "本周财务待办"
511
+ ```
376
512
 
377
- | 参数 | 必填 | 说明 |
378
- | --- | --- | --- |
379
- | `[query]` | 否 | 搜索关键词。可为空。 |
513
+ #### 追加待办到现有笔记
380
514
 
381
- | 选项 | 必填 | 说明 |
382
- | --- | --- | --- |
383
- | `--tags <expr>` | 否 | 标签表达式,支持 `AND` / `OR` / `NOT` 与括号。 |
384
- | `--from <date>` | 否 | 创建时间起点,支持 `YYYY-MM-DD` 或 ISO datetime。 |
385
- | `--to <date>` | 否 | 创建时间终点,支持 `YYYY-MM-DD` 或 ISO datetime。 |
386
- | `--days <n>` | 否 | 最近 N 天(按 `created_at`),不能与 `--from/--to` 同时使用。 |
387
- | `--boxes <string\|@file>` | 否 | 按卡片盒名称筛选(支持 JSON 数组或逗号/换行分隔);会自动解析为 box id 查询。 |
388
- | `--sql <expr>` | 否 | SQL 风格条件表达式;仅支持字段 `id/content_md/summary/tags/zettel_boxes/created_at/type`,其中 `zettel_boxes` 按名称自动转 id。只支持只读 WHERE 条件(禁止 `INSERT/UPDATE/DELETE`、注释和多语句)。 |
389
- | `--include-deleted` | 否 | 包含软删除笔记。 |
515
+ ```bash
516
+ dino todo append "补交报销单"
517
+ dino todo append --note-id <note-id> --task "补交报销单" --task "整理发票"
518
+ dino todo append --note-id <note-id> --tasks @./todo.txt
519
+ ```
390
520
 
391
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
521
+ 说明:
392
522
 
393
- ### `dino note get <id>`
523
+ - 如果不传 `--note-id`,CLI 会自动选一条“适合追加任务”的最近笔记
524
+ - 如果该笔记末尾已有任务列表,会直接并入;没有则会新建任务列表
394
525
 
395
- 按 ID 获取笔记基础信息。
526
+ #### 更新待办状态
396
527
 
397
- | 参数 | 必填 | 说明 |
398
- | --- | --- | --- |
399
- | `[id]` | 否 | 单个笔记 ID(可与 `--ids` 组合,去重后批量更新)。 |
528
+ ```bash
529
+ dino todo update <task-id> --status completed
530
+ dino todo update <task-id> --status uncompleted
531
+ ```
400
532
 
401
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
533
+ 兼容写法也支持:
402
534
 
403
- ### `dino note detail [id]`
535
+ ```bash
536
+ dino todo update <task-id> --status done
537
+ dino todo update <task-id> --status false
538
+ ```
404
539
 
405
- 按 ID 获取笔记完整详情,支持批量读取。
540
+ 但为了可读性,推荐始终使用:
406
541
 
407
- | 参数 | 必填 | 说明 |
408
- | --- | --- | --- |
409
- | `[id]` | 否 | 单个笔记 ID(可与 `--ids` 组合,去重后批量读取)。 |
542
+ - `completed`
543
+ - `uncompleted`
410
544
 
411
- | 选项 | 必填 | 说明 |
412
- | --- | --- | --- |
413
- | `--ids <string\|@file>` | 否 | 笔记 ID 列表(JSON 数组或逗号/换行分隔)。 |
545
+ ### 5.7 管理标签
414
546
 
415
- 说明:`[id]` 与 `--ids` 至少提供一个。
547
+ #### 查看全部标签
416
548
 
417
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
549
+ ```bash
550
+ dino tag list
551
+ ```
418
552
 
419
- ### `dino note create --title <string> --content <string|@file> [options]`
553
+ #### 创建标签
420
554
 
421
- 创建笔记。
555
+ ```bash
556
+ dino tag add "工作/项目A"
557
+ dino tag add --name "工作/项目A" --emoji "🧠"
558
+ ```
422
559
 
423
- | 选项 | 必填 | 说明 |
424
- | --- | --- | --- |
425
- | `--title <string>` | 是 | 笔记标题。 |
426
- | `--content <string|@file>` | 是 | Markdown 内容,可传 `@文件路径`。 |
427
- | `--type <note\|crawl>` | 否 | 笔记类型,默认 `crawl`。 |
428
- | `--tags <string\|@file>` | 否 | 标签列表(JSON 数组或逗号/换行分隔)。 |
429
- | `--boxes <string\|@file>` | 否 | 卡片盒名称列表(JSON 数组或逗号/换行分隔)。 |
430
- | `--dry-run` | 否 | 仅预览将要创建的笔记,不实际写入。 |
560
+ 说明:
431
561
 
432
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
562
+ - 支持层级标签,如 `工作/项目A`
563
+ - 已删除但同名的标签,CLI 会尽量做恢复而不是重复新建
433
564
 
434
- ### `dino note update [id] [options]`
565
+ ### 5.8 管理卡片盒
435
566
 
436
- 按 ID 更新笔记标签/卡片盒(全量替换)。
567
+ #### 查看全部卡片盒
437
568
 
438
- | 参数 | 必填 | 说明 |
439
- | --- | --- | --- |
440
- | `<id>` | 是 | 笔记 ID。 |
569
+ ```bash
570
+ dino box list
571
+ ```
441
572
 
442
- | 选项 | 必填 | 说明 |
443
- | --- | --- | --- |
444
- | `--ids <string\|@file>` | 否 | 批量更新的笔记 ID 列表(JSON 数组或逗号/换行分隔)。 |
445
- | `--tags <string\|@file>` | 否 | 标签列表(JSON 数组或逗号/换行分隔)。传 `[]` 可清空标签。 |
446
- | `--boxes <string\|@file>` | 否 | 卡片盒名称列表(JSON 数组或逗号/换行分隔)。传 `[]` 可清空卡片盒。 |
447
- | `--starred <true\|false>` | 否 | 设置收藏状态。 |
448
- | `--dry-run` | 否 | 仅预览将要执行的变更,不实际写入。 |
573
+ #### 创建卡片盒
449
574
 
450
- 说明:`<id>` 与 `--ids` 至少提供一个;`--tags` 与 `--boxes` 至少提供一个。
575
+ ```bash
576
+ dino box add "Inbox"
577
+ dino box add --name "Inbox" --description "用于存放待整理的想法和资料"
578
+ ```
451
579
 
452
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
580
+ 说明:
453
581
 
454
- ### `dino note delete <id>`
582
+ - `--description` 很值得写
583
+ - 这段说明会帮助 AI 和你自己更准确地理解这个卡片盒的用途
455
584
 
456
- 软删除笔记(`is_del=1`)。
585
+ ### 5.9 管理 Prompt
457
586
 
458
- | 参数 | 必填 | 说明 |
459
- | --- | --- | --- |
460
- | `<id>` | 是 | 笔记 ID。 |
587
+ #### 查看全部 Prompt
461
588
 
462
- | 选项 | 必填 | 说明 |
463
- | --- | --- | --- |
464
- | `--dry-run` | 否 | 仅预览将要执行的删除,不实际写入。 |
589
+ ```bash
590
+ dino prompt list
591
+ ```
465
592
 
466
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
593
+ #### 新建 Prompt
467
594
 
468
- ## 8.6 `tag` 命令
595
+ ```bash
596
+ dino prompt add --name "周报助手" --prompt "请基于本周笔记输出一份简洁周报"
597
+ ```
469
598
 
470
- ### `dino tag list`
599
+ ### 5.10 查看版本与配置
471
600
 
472
- 列出标签。
601
+ #### 查看版本信息
473
602
 
474
- | 选项 | 必填 | 说明 |
475
- | --- | --- | --- |
476
- | `--json` | 否 | 兼容旧行为,输出 machine-readable YAML。 |
477
- | `--format <yaml\|json>` | 否 | 结构化输出格式,推荐 AI / 脚本使用 `json`。 |
478
- | `--offline` | 否 | 跳过 connect/sync,仅用本地缓存。 |
479
- | `--sync-timeout <ms>` | 否 | 覆盖连接/同步超时毫秒。 |
603
+ ```bash
604
+ dino info
605
+ ```
480
606
 
481
- ### `dino tag add [name] [options]`
607
+ #### 查看全部可读配置
482
608
 
483
- 新增标签。
609
+ ```bash
610
+ dino config get
611
+ ```
484
612
 
485
- | 参数 | 必填 | 说明 |
486
- | --- | --- | --- |
487
- | `[name]` | 否 | 标签名/路径(支持斜杠层级)。 |
613
+ #### 查看单个配置项
488
614
 
489
- | 选项 | 必填 | 说明 |
490
- | --- | --- | --- |
491
- | `--name <string>` | 否 | 标签名/路径,可替代位置参数 `[name]`。 |
492
- | `--emoji <string>` | 否 | 标签 emoji。 |
493
- | `--json` | 否 | 兼容旧行为,输出 machine-readable YAML。 |
494
- | `--format <yaml\|json>` | 否 | 结构化输出格式,推荐 AI / 脚本使用 `json`。 |
495
- | `--dry-run` | 否 | 仅预览将要创建或恢复的标签,不实际写入。 |
496
- | `--offline` | 否 | 跳过 connect/sync,仅用本地缓存。 |
497
- | `--sync-timeout <ms>` | 否 | 覆盖连接/同步超时毫秒。 |
615
+ ```bash
616
+ dino config get sync.timeoutMs
617
+ ```
498
618
 
499
- 说明:`[name]` 与 `--name` 至少提供一个;若两者都提供且值不同会报错。
619
+ #### 设置同步超时
500
620
 
501
- ## 8.7 `box` 命令
621
+ ```bash
622
+ dino config set sync.timeoutMs 20000
623
+ ```
502
624
 
503
- ### `dino box list`
625
+ 目前最常用、也是正式开放可写的配置项就是:
504
626
 
505
- 列出卡片盒。
627
+ - `sync.timeoutMs`
506
628
 
507
- | 选项 | 必填 | 说明 |
508
- | --- | --- | --- |
509
- | `--offline` | 否 | 跳过 connect/sync,仅用本地缓存。 |
510
- | `--sync-timeout <ms>` | 否 | 覆盖连接/同步超时毫秒。 |
629
+ ---
511
630
 
512
- ### `dino box add [name] [options]`
631
+ ## 6. 完整命令速查
513
632
 
514
- 新增卡片盒。
633
+ 这一节适合“我已经知道要做什么,只想确认命令怎么写”。
515
634
 
516
- | 参数 | 必填 | 说明 |
517
- | --- | --- | --- |
518
- | `[name]` | 否 | 卡片盒名称。 |
635
+ ### 6.1 全局参数
519
636
 
520
- | 选项 | 必填 | 说明 |
521
- | --- | --- | --- |
522
- | `--name <string>` | 否 | 卡片盒名称,可替代位置参数 `[name]`。 |
523
- | `--description <string>` | 否 | 用途说明(可帮助 AI 路由笔记)。 |
524
- | `--color <string>` | 否 | 卡片盒颜色。 |
525
- | `--json` | 否 | 兼容旧行为,输出 machine-readable YAML。 |
526
- | `--format <yaml\|json>` | 否 | 结构化输出格式,推荐 AI / 脚本使用 `json`。 |
527
- | `--dry-run` | 否 | 仅预览将要创建或恢复的卡片盒,不实际写入。 |
528
- | `--offline` | 否 | 跳过 connect/sync,仅用本地缓存。 |
529
- | `--sync-timeout <ms>` | 否 | 覆盖连接/同步超时毫秒。 |
637
+ 这些参数可以放在很多命令前后使用:
530
638
 
531
- 说明:`[name]` 与 `--name` 至少提供一个;若两者都提供且值不同会报错。
639
+ | 参数 | 说明 |
640
+ | --- | --- |
641
+ | `--format json` | 推荐的结构化输出格式,适合脚本和 AI |
642
+ | `--format yaml` | YAML 结构化输出 |
643
+ | `--json` | 历史兼容写法,等价于 `--format yaml` |
644
+ | `--offline` | 跳过联网/同步,只使用本地缓存 |
645
+ | `--sync-timeout <ms>` | 覆盖同步超时时间,单位毫秒 |
646
+ | `--verbose` | 预留的详细日志开关 |
532
647
 
533
- ## 8.8 `prompt` 命令
648
+ 示例:
534
649
 
535
- ### `dino prompt list`
650
+ ```bash
651
+ dino --format json note search "AI"
652
+ dino note search "AI" --offline --format json
653
+ ```
536
654
 
537
- 列出 Prompt(`name` 与 `prompt`)。
655
+ ### 6.2 `auth`:登录与状态
538
656
 
539
- | 选项 | 必填 | 说明 |
540
- | --- | --- | --- |
541
- | `--offline` | 否 | 跳过 connect/sync,仅用本地缓存。 |
542
- | `--sync-timeout <ms>` | 否 | 覆盖连接/同步超时毫秒。 |
657
+ ```bash
658
+ dino auth login "<token>"
659
+ dino auth status
660
+ dino auth logout
661
+ dino auth logout --clear-local-db
662
+ ```
543
663
 
544
- ### `dino prompt add [options]`
664
+ 用途说明:
545
665
 
546
- 新增 Prompt(写入 `c_cmd`)。
666
+ - `login`:保存 token 并验证连接
667
+ - `status`:查看登录状态、本地库位置、同步状态
668
+ - `logout`:退出登录
669
+ - `logout --clear-local-db`:退出并删除本地 SQLite 缓存
547
670
 
548
- | 选项 | 必填 | 说明 |
549
- | --- | --- | --- |
550
- | `--name <string>` | 是 | Prompt 名称。 |
551
- | `--prompt <string>` | 是 | Prompt 文本内容。 |
552
- | `--json` | 否 | 兼容旧行为,输出 machine-readable YAML。 |
553
- | `--format <yaml\|json>` | 否 | 结构化输出格式,推荐 AI / 脚本使用 `json`。 |
554
- | `--dry-run` | 否 | 仅预览将要创建或恢复的 Prompt,不实际写入。 |
555
- | `--offline` | 否 | 跳过 connect/sync,仅用本地缓存。 |
556
- | `--sync-timeout <ms>` | 否 | 覆盖连接/同步超时毫秒。 |
671
+ ### 6.3 `sync`:手动同步
557
672
 
558
- ## 8.9 `config` 命令
673
+ ```bash
674
+ dino sync
675
+ dino sync --sync-timeout 600000
676
+ ```
559
677
 
560
- ### `dino config get [key]`
678
+ 用途说明:
561
679
 
562
- 读取配置。推荐 AI / 脚本使用 `dino config get [key] --format json`。
680
+ - 主动执行一次连接与同步
681
+ - 首次使用、网络恢复后、或想刷新本地缓存时最常用
563
682
 
564
- | 参数 | 必填 | 说明 |
565
- | --- | --- | --- |
566
- | `[key]` | 否 | 配置键(点路径);不传则返回全部配置。 |
683
+ ### 6.4 `note`:笔记管理
567
684
 
568
- 可读 key:
685
+ #### 搜索与查看
569
686
 
570
- ```text
571
- sync.timeoutMs
687
+ ```bash
688
+ dino note search [query]
689
+ dino note get <id>
690
+ dino note get <id> --context-only
691
+ dino note preview <id> --lines 30
692
+ dino note detail <id>
693
+ dino note detail --ids @./ids.txt
572
694
  ```
573
695
 
574
- ### `dino config set <key> <value>`
696
+ #### 创建与修改
575
697
 
576
- 写入配置。
698
+ ```bash
699
+ dino note create --title "标题" --content @./note.md --type note
700
+ dino note update <id> --tags "工作,AI"
701
+ dino note update <id> --boxes "Inbox"
702
+ dino note update <id> --starred true
703
+ dino note star <id>
704
+ dino note unstar <id>
705
+ dino note delete <id>
706
+ ```
577
707
 
578
- | 参数 | 必填 | 说明 |
579
- | --- | --- | --- |
580
- | `<key>` | 是 | 配置键(点路径)。 |
581
- | `<value>` | 是 | 配置值。 |
708
+ 重点参数:
709
+
710
+ - `note search`
711
+ - `--tags <expr>`:标签表达式
712
+ - `--from <date>` / `--to <date>` / `--days <n>`:时间过滤
713
+ - `--starred <true|false>`:按收藏状态过滤
714
+ - `--boxes <list>`:按卡片盒过滤
715
+ - `--sql <expr>`:高级筛选
716
+ - `--limit <n>` / `--offset <n>`:分页
717
+ - `--fields <list>`:裁剪输出字段
718
+ - `--include-deleted`:包含软删除笔记
719
+ - `note create`
720
+ - `--title`:必填
721
+ - `--content`:必填,可用 `@文件`
722
+ - `--type <note|crawl>`:默认 `crawl`
723
+ - `--tags` / `--boxes`
724
+ - `--dry-run`
725
+ - `note update`
726
+ - `[id]` 或 `--ids`
727
+ - `--tags` / `--boxes` / `--starred`
728
+ - `--dry-run`
729
+
730
+ ### 6.5 `todo`:待办管理
582
731
 
583
- 可写 key:
732
+ ```bash
733
+ dino todo search [query]
734
+ dino todo append [task]
735
+ dino todo create [task]
736
+ dino todo update <task-id> --status completed
737
+ ```
584
738
 
585
- ```text
586
- sync.timeoutMs (必须为正整数)
739
+ 重点参数:
740
+
741
+ - `todo search`
742
+ - `--status <all|completed|uncompleted>`
743
+ - `--tags <list>`
744
+ - `--from <date>` / `--to <date>` / `--days <n>`
745
+ - `--limit <n>`
746
+ - `--scan-limit <n>`
747
+ - `--include-deleted`
748
+ - `todo append`
749
+ - `[task]` / `--task` / `--tasks`
750
+ - `--note-id <id>`
751
+ - `--dry-run`
752
+ - `todo create`
753
+ - `[task]` / `--task` / `--tasks`
754
+ - `--title <string>`
755
+ - `--dry-run`
756
+ - `todo update`
757
+ - `--status <status>` 必填
758
+ - `--dry-run`
759
+
760
+ ### 6.6 `tag`:标签管理
761
+
762
+ ```bash
763
+ dino tag list
764
+ dino tag add "工作/项目A"
765
+ dino tag add --name "工作/项目A" --emoji "🧠"
587
766
  ```
588
767
 
589
- ## 8.10 `info` 命令
768
+ ### 6.7 `box`:卡片盒管理
590
769
 
591
- ### `dino info`
770
+ ```bash
771
+ dino box list
772
+ dino box add "Inbox"
773
+ dino box add --name "Inbox" --description "用于存放待整理资料"
774
+ ```
775
+
776
+ 重点参数:
592
777
 
593
- 显示 CLI 版本信息。
778
+ - `--description <string>`:用途说明
779
+ - `--color <string>`:颜色
780
+ - `--dry-run`
594
781
 
595
- 支持全局参数:`--json`、`--format`
782
+ ### 6.8 `prompt`:Prompt 管理
596
783
 
597
- ## 8.11 `todo` 命令
784
+ ```bash
785
+ dino prompt list
786
+ dino prompt add --name "周报助手" --prompt "请基于本周笔记输出简洁周报"
787
+ ```
598
788
 
599
- ### `dino todo search [query]`
789
+ ### 6.9 `config`:CLI 配置
600
790
 
601
- 搜索待办任务(任务来源:`c_note.image_detail` 中的 taskItem/taskList)。
791
+ ```bash
792
+ dino config get
793
+ dino config get sync.timeoutMs
794
+ dino config set sync.timeoutMs 20000
795
+ ```
602
796
 
603
- | 参数 | 必填 | 说明 |
604
- | --- | --- | --- |
605
- | `[query]` | 否 | 按任务文本模糊匹配(不区分大小写)。 |
797
+ ### 6.10 `graph`:知识图谱查询
606
798
 
607
- | 选项 | 必填 | 说明 |
608
- | --- | --- | --- |
609
- | `--status <status>` | 否 | 任务状态:`all` / `completed` / `uncompleted`(默认 `all`)。 |
610
- | `--tags <string\|@file>` | 否 | 任务标签筛选(JSON 数组或逗号/换行分隔),任务需包含全部标签。 |
611
- | `--from <date>` | 否 | 任务时间范围起点(`YYYY-MM-DD` 或 ISO datetime)。 |
612
- | `--to <date>` | 否 | 任务时间范围终点(`YYYY-MM-DD` 或 ISO datetime)。 |
613
- | `--days <n>` | 否 | 最近 N 天(不能与 `--from/--to` 同时使用)。 |
614
- | `--limit <n>` | 否 | 返回任务数上限(默认 `50`,最大 `500`)。 |
615
- | `--scan-limit <n>` | 否 | 扫描 `c_note` 行数上限(默认 `200`,最大 `5000`)。 |
616
- | `--include-deleted` | 否 | 包含软删除笔记中的任务。 |
799
+ ```bash
800
+ dino graph backlinks <note-id>
801
+ dino graph outlinks <note-id>
802
+ dino graph related <note-id> --depth 2
803
+ dino graph stats
804
+ ```
617
805
 
618
- 输出结构说明(AI 友好):
806
+ 说明:
619
807
 
620
- - 顶层包含 `meta`(查询条件回显、返回数量、是否截断)与 `tasks`(任务数组)。
621
- - 每条任务包含 `task_key`、`note_id`、`note_title`、`status`、层级关系与时间字段。
808
+ - 这些命令用于查看笔记之间的链接关系
809
+ - 在线模式下,CLI 会自动确保 daemon 可用
810
+ - 如果你只想用本地缓存而不启动 daemon,可加 `--offline`
622
811
 
623
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
812
+ 例如:
624
813
 
625
- ### `dino todo append [task]`
814
+ ```bash
815
+ dino graph related <note-id> --depth 2 --offline --format json
816
+ ```
626
817
 
627
- 向笔记末尾追加一个或多个待办任务。
818
+ ### 6.11 `meta`:查看元数据
628
819
 
629
- 说明:
820
+ ```bash
821
+ dino meta stats
822
+ dino meta schema
823
+ ```
630
824
 
631
- - `content_json` 是真源,`image_detail` 会从更新后的 `content_json` 派生回写。
632
- - 若不传 `--note-id`,默认选择 `image_detail` 非空且不为 `[]` 的最新笔记(按 `created_at` 降序)。
633
- - 若笔记末尾已有 `taskList`,会并入该 `taskList`;否则在末尾创建新的 `taskList`。
825
+ 用途说明:
634
826
 
635
- | 参数 | 必填 | 说明 |
636
- | --- | --- | --- |
637
- | `[task]` | 否 | 单个任务文本。 |
827
+ - `meta stats`:看 notes / tags / boxes 等统计信息
828
+ - `meta schema`:看 Dinox 结构化数据 schema,适合 AI / 自动化接入
638
829
 
639
- | 选项 | 必填 | 说明 |
640
- | --- | --- | --- |
641
- | `--task <text>` | 否 | 任务文本(可重复传入)。 |
642
- | `--tasks <string\|@file>` | 否 | 任务列表(JSON 数组或逗号/换行分隔)。 |
643
- | `--note-id <id>` | 否 | 指定目标笔记 ID。 |
644
- | `--dry-run` | 否 | 仅预览将要追加的任务和目标笔记,不实际写入。 |
830
+ ### 6.12 `storage`:自定义存储配置与上传
645
831
 
646
- 说明:`[task]`、`--task`、`--tasks` 至少提供一个。
832
+ ```bash
833
+ dino storage list
834
+ dino storage test
835
+ dino storage test --storage-id <id>
836
+ dino storage upload ./report.pdf
837
+ dino storage upload ./photo.jpg --category images
838
+ dino storage stats
839
+ ```
647
840
 
648
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
841
+ 重点说明:
649
842
 
650
- ### `dino todo create [task]`
843
+ - 这是给 Dinox 的自定义存储配置用的,不是一个“任意云盘命令”
844
+ - `storage list` 会列出当前可用的自定义存储,并标出活动配置
845
+ - `storage test` 会测试目标存储是否可写
846
+ - `storage upload` 会上传本地文件,并写入资源记录
847
+ - 如果不是上传到当前活动存储,可用 `--storage-id <id>` 指定目标
848
+ - `--category` 支持:`images`、`audios`、`files`、`videos`
849
+ - 如果你想自己指定对象 key,可用 `--key <string>`
850
+ - `--dry-run` 非常适合在正式上传前确认目标位置
651
851
 
652
- 创建一篇新笔记,并写入一个或多个待办任务。
852
+ ### 6.13 `schema`:查看命令 schema
653
853
 
654
- 说明:
854
+ ```bash
855
+ dino schema
856
+ dino schema note.search
857
+ dino schema todo.update --format json
858
+ ```
655
859
 
656
- - `content_json` 是真源,`image_detail` 从 `content_json` 派生回写。
657
- - 默认自动生成总结性标题(可用 `--title` 覆盖)。
860
+ 适合场景:
658
861
 
659
- | 参数 | 必填 | 说明 |
660
- | --- | --- | --- |
661
- | `[task]` | 否 | 单个任务文本。 |
862
+ - 你不确定某个命令的参数怎么写
863
+ - 你要让 AI / 脚本可靠调用 CLI
864
+ - 你想快速查看命令风险级别、输出结构、示例
662
865
 
663
- | 选项 | 必填 | 说明 |
664
- | --- | --- | --- |
665
- | `--task <text>` | 否 | 任务文本(可重复传入)。 |
666
- | `--tasks <string\|@file>` | 否 | 任务列表(JSON 数组或逗号/换行分隔)。 |
667
- | `--title <string>` | 否 | 自定义笔记标题。 |
668
- | `--dry-run` | 否 | 仅预览将要创建的待办笔记,不实际写入。 |
866
+ ### 6.14 `daemon`:管理后台进程
669
867
 
670
- 说明:`[task]`、`--task`、`--tasks` 至少提供一个。
868
+ ```bash
869
+ dino daemon start
870
+ dino daemon status
871
+ dino daemon restart
872
+ dino daemon stop
873
+ ```
671
874
 
672
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
875
+ 调试时可以前台运行:
673
876
 
674
- ### `dino todo update <taskId> --status <status>`
877
+ ```bash
878
+ dino daemon start --no-detach
879
+ ```
675
880
 
676
- 更新任务完成状态(按 taskId 定位)。
881
+ `daemon` 是公开 CLI 模块,也可以通过 schema 查询:
677
882
 
678
- 说明:
883
+ ```bash
884
+ dino schema daemon.start --format json
885
+ ```
679
886
 
680
- - 只接受合法状态值:`completed` / `uncompleted`(兼容 `done` / `undone` / `true` / `false` / `1` / `0`)。
681
- - `content_json` 是真源,更新后会同步回写 `image_detail`、`content_md`、`content_text`。
682
- - 若同一个 taskId 出现在多篇笔记,会报错并拒绝更新(避免误改)。
887
+ ### 6.15 `info`:查看版本与技能仓库地址
683
888
 
684
- | 参数 | 必填 | 说明 |
685
- | --- | --- | --- |
686
- | `<taskId>` | 是 | 任务 ID。 |
889
+ ```bash
890
+ dino info
891
+ ```
687
892
 
688
- | 选项 | 必填 | 说明 |
689
- | --- | --- | --- |
690
- | `--status <status>` | 是 | 目标状态。 |
691
- | `--dry-run` | 否 | 仅预览将要更新的任务状态,不实际写入。 |
893
+ ### 6.16 `update`:升级 CLI
692
894
 
693
- 支持全局参数:`--json`、`--format`、`--offline`、`--sync-timeout`
895
+ ```bash
896
+ dino update
897
+ ```
694
898
 
695
899
  ---
696
900
 
697
- ## 9. MCP Server 与 Cursor 配置
901
+ ## 7. AI / 脚本自动化
698
902
 
699
- `dino mcp serve` 会启动一个 HTTP JSON-RPC 服务,提供 Dinox 的 MCP tools 给 AI 客户端调用。
903
+ 如果你希望让 AI 助手或脚本可靠调用 Dinox 数据,推荐直接使用 CLI 命令的结构化输出。
700
904
 
701
- ### 9.1 启动 MCP 服务
702
-
703
- 默认监听本机 `127.0.0.1:45137`:
905
+ ### 7.1 使用 JSON 输出
704
906
 
705
907
  ```bash
706
- dino mcp serve
908
+ dino note search "dinox" --limit 5 --format json
909
+ dino note detail <id> --format json
910
+ dino todo search --status uncompleted --format json
707
911
  ```
708
912
 
709
- 手动指定端口:
913
+ `--format json` 会返回稳定的结构化 envelope,适合被脚本、自动化任务和 AI Agent 解析。
914
+
915
+ ### 7.2 先读取命令 schema
916
+
917
+ 不确定某个命令支持哪些参数、输出哪些字段时,先读取 schema:
710
918
 
711
919
  ```bash
712
- dino mcp serve --host 127.0.0.1 --port 45137
920
+ dino schema
921
+ dino schema note.search --format json
922
+ dino schema todo.update --format json
713
923
  ```
714
924
 
715
- ### 9.2 局域网访问与鉴权
925
+ schema 包含命令路径、风险级别、参数、选项、输出字段和示例。写操作建议先使用 `--dry-run` 确认结果。
716
926
 
717
- 当 `--host` 为非回环地址(例如 `0.0.0.0`)时,必须提供 token:
927
+ ---
928
+
929
+ ## 8. 常见问题
930
+
931
+ ### Q1:报错 `Missing resolved userId for the current authorization`
932
+
933
+ 原因:你还没有完成登录,或当前 `DINOX_TOKEN` 环境变量覆盖了本地 token,CLI 需要先在线解析这个 token 对应的用户身份。
934
+
935
+ 解决:
718
936
 
719
937
  ```bash
720
- dino mcp serve --host 0.0.0.0 --port 45137 --token "<your-token>"
938
+ dino auth login "<token>"
939
+ dino sync
721
940
  ```
722
941
 
723
- 也可以使用环境变量:
942
+ 如果你使用环境变量登录,确认 `DINOX_TOKEN` 已设置后直接运行一次在线命令:
724
943
 
725
944
  ```bash
726
- export DINOX_MCP_TOKEN="<your-token>"
727
- dino mcp serve --host 0.0.0.0 --port 45137
945
+ dino auth status --format json
946
+ dino sync
728
947
  ```
729
948
 
730
- 请求头支持:
949
+ ### Q2:创建笔记时报 `Unknown tags` 或 `Unknown zettel box names`
731
950
 
732
- 1. `Authorization: Bearer <token>`
733
- 2. `x-dinox-token: <token>`
951
+ 原因:你引用了不存在的标签或卡片盒。
734
952
 
735
- ### 9.3 快速连通性验证(curl)
953
+ 解决:先创建,再重试。
736
954
 
737
- 初始化握手:
955
+ ```bash
956
+ dino tag add "你的标签"
957
+ dino box add "你的卡片盒"
958
+ ```
959
+
960
+ ### Q3:我已经同步过了,能不能完全离线查询?
961
+
962
+ 可以。很多读命令都支持:
738
963
 
739
964
  ```bash
740
- curl -X POST http://127.0.0.1:45137 \
741
- -H 'content-type: application/json' \
742
- --data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
965
+ --offline
743
966
  ```
744
967
 
745
- 列出 tools:
968
+ 例如:
746
969
 
747
970
  ```bash
748
- curl -X POST http://127.0.0.1:45137 \
749
- -H 'content-type: application/json' \
750
- --data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
971
+ dino note search "日报" --offline
972
+ dino graph stats --offline --format json
751
973
  ```
752
974
 
753
- 调用 tools(示例:搜索笔记):
975
+ 前提是:你之前至少成功同步过一次,本地缓存里已经有数据。
976
+
977
+ ### Q4:`note update` 为什么不是“追加标签”?
978
+
979
+ 因为它的设计就是“全量替换”。
980
+
981
+ 例如:
754
982
 
755
983
  ```bash
756
- curl -X POST http://127.0.0.1:45137 \
757
- -H 'content-type: application/json' \
758
- --data '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"dinox_search_notes","arguments":{"query":"dinox","limit":5}}}'
984
+ dino note update <note-id> --tags "工作,AI"
759
985
  ```
760
986
 
761
- ### 9.4 Cursor 配置示例
987
+ 执行后,目标笔记的标签会被替换成这两个,而不是在原来基础上追加。
988
+
989
+ 追加标签请使用:
990
+
991
+ ```bash
992
+ dino note tag <note-id> --add "工作,AI"
993
+ ```
762
994
 
763
- 可在以下位置创建 MCP 配置文件(任选其一):
995
+ ### Q5:`todo append` 不传 `--note-id` 时会发生什么?
764
996
 
765
- 1. 项目级:`.cursor/mcp.json`
766
- 2. 全局:`~/.cursor/mcp.json`
997
+ CLI 会自动选一条最近的、适合追加任务的笔记作为目标。
767
998
 
768
- 推荐配置(带 token):
999
+ 如果你不希望它自动选,最稳妥的做法是显式传:
769
1000
 
770
- ```json
771
- {
772
- "mcpServers": {
773
- "dinox": {
774
- "url": "http://127.0.0.1:45137",
775
- "headers": {
776
- "Authorization": "Bearer ${env:DINOX_MCP_TOKEN}"
777
- }
778
- }
779
- }
780
- }
1001
+ ```bash
1002
+ dino todo append --note-id <note-id> --task "补交报销单"
781
1003
  ```
782
1004
 
783
- 若本地仅回环访问且不启用 token,可去掉 `headers` 字段。
1005
+ ### Q6:Windows 下 `@file` 参数解析不稳定怎么办?
784
1006
 
785
- ### 9.5 常见问题
1007
+ 在 PowerShell 中,建议把 `@文件路径` 放进引号里。
786
1008
 
787
- - 报错 `--token (or DINOX_MCP_TOKEN) is required when --host is non-loopback`:表示你使用了非回环 host,但没提供 token。
788
- - 返回 `401 Unauthorized`:检查请求头 token 是否与启动服务时一致。
789
- - 端口冲突:改用 `--port` 指定其他高位端口。
1009
+ 例如:
790
1010
 
791
- ---
1011
+ ```powershell
1012
+ dino note create --title "测试" --content "@.\note.md" --type note
1013
+ ```
792
1014
 
793
- ## 10. 查看帮助
1015
+ ### Q7:怎么知道某个命令到底支持哪些参数?
794
1016
 
795
- 随时可以看帮助:
1017
+ 最直接的方法:
796
1018
 
797
1019
  ```bash
798
- dino --help
799
1020
  dino <命令> --help
800
- dino <命令> <子命令> --help
801
1021
  ```
802
1022
 
803
- 例如:
1023
+ 如果你想看更结构化的 schema:
804
1024
 
805
1025
  ```bash
806
- dino note --help
807
- dino note create --help
1026
+ dino schema
1027
+ dino schema note.search
1028
+ dino schema todo.update --format json
1029
+ ```
1030
+
1031
+ ---
1032
+
1033
+ ## 9. 配置文件、数据库与环境变量
1034
+
1035
+ ### 9.1 默认文件位置
1036
+
1037
+ #### macOS
1038
+
1039
+ - 配置文件:`~/Library/Application Support/dinox/config.json`
1040
+ - 本地数据库:`~/Library/Application Support/dinox/dinox-cli.sqlite`
1041
+
1042
+ #### Windows
1043
+
1044
+ - 配置文件:`%APPDATA%\dinox\config.json`
1045
+ - 本地数据库:`%LOCALAPPDATA%\dinox\dinox-cli.sqlite`
1046
+
1047
+ #### Linux
1048
+
1049
+ - 配置文件:`~/.config/dinox/config.json`
1050
+ - 本地数据库:`~/.local/share/dinox/dinox-cli.sqlite`
1051
+
1052
+ ### 9.2 常用环境变量
1053
+
1054
+ | 环境变量 | 用途 |
1055
+ | --- | --- |
1056
+ | `DINOX_CONFIG_DIR` | 覆盖配置目录 |
1057
+ | `DINOX_DATA_DIR` | 覆盖本地数据目录 |
1058
+ | `DINOX_TOKEN` | 用环境变量注入登录 token,优先级高于本地配置;可传 token 本体或 `Bearer ...` |
1059
+ | `DINOX_SYNC_TIMEOUT_MS` | 覆盖同步超时 |
1060
+
1061
+ ### 9.3 macOS / Linux 与 Windows 的多行命令差异
1062
+
1063
+ #### macOS / Linux(bash / zsh)
1064
+
1065
+ 用反斜杠 `\` 续行:
1066
+
1067
+ ```bash
1068
+ dino note create \
1069
+ --title "标题" \
1070
+ --content "正文" \
1071
+ --type note
1072
+ ```
1073
+
1074
+ #### Windows PowerShell
1075
+
1076
+ 用反引号 `` ` `` 续行:
1077
+
1078
+ ```powershell
1079
+ dino note create `
1080
+ --title "标题" `
1081
+ --content "正文" `
1082
+ --type note
808
1083
  ```
809
1084
 
810
1085
  ---
811
1086
 
812
- ## 11. GitHub Action 自动发布 npm
1087
+ ## 10. 如何查看帮助
813
1088
 
814
- 仓库已内置工作流:`/Users/shanks/Documents/GitHub/dinox-cli/.github/workflows/publish-npm.yml`
1089
+ 任何时候都可以直接看 CLI 帮助:
815
1090
 
816
- ### 11.1 先配置 Secret
1091
+ ```bash
1092
+ dino --help
1093
+ dino help note
1094
+ ```
817
1095
 
818
- 在 GitHub 仓库设置里添加:
1096
+ 更常见的写法是:
819
1097
 
820
- - `NPM_TOKEN`:npm 的 publish token(建议使用 granular token,并开启 bypass 2FA)
1098
+ ```bash
1099
+ dino note --help
1100
+ dino note create --help
1101
+ dino todo --help
1102
+ dino storage upload --help
1103
+ ```
821
1104
 
822
- ### 11.2 手动触发发布
1105
+ 如果你是脚本作者或 AI Agent 开发者,强烈建议搭配这两个命令一起使用:
823
1106
 
824
- 1. 打开 GitHub 仓库 → **Actions** → **Publish NPM**
825
- 2. 点击 **Run workflow**
826
- 3. 选择参数:
827
- - `dry_run`:`true` 只做演练,不真正发布
828
- - `run_tests`:`true` 时会先执行测试
1107
+ ```bash
1108
+ dino schema
1109
+ dino schema <path> --format json
1110
+ ```
829
1111
 
830
- ### 11.3 Push 自动触发
1112
+ ---
831
1113
 
832
- - 每次 push 到默认分支(当前为 `main`)会自动触发发布流程
833
- - 为兼容分支命名迁移,workflow 也监听 `master`,但发布阶段会只允许默认分支执行
834
- - 为防止递归触发,workflow 会跳过 `github-actions[bot]` 自己提交的版本 bump commit
1114
+ 如果你是第一次用,建议按下面顺序熟悉:
835
1115
 
836
- ### 11.4 工作流行为
1116
+ 1. `dino auth login`
1117
+ 2. `dino sync`
1118
+ 3. `dino note search`
1119
+ 4. `dino note create`
1120
+ 5. `dino todo search`
1121
+ 6. `dino tag add` / `dino box add`
1122
+ 7. `dino schema`
837
1123
 
838
- - 只允许在仓库默认分支执行发布(默认分支改名后无需改 workflow 逻辑)
839
- - 调用仓库脚本 `publish-npm.sh` 自动递增 patch 版本并发布
840
- - 发布成功后自动提交 `package.json` 版本变更、打 `vX.Y.Z` tag 并 push 回仓库
1124
+ 这样会最快建立完整使用感。