@dinoxx/dinox-cli 1.0.18 → 1.0.20

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