@zentodo/cli 0.1.9 → 0.1.11

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.
@@ -215,7 +215,13 @@ zentodo doctor
215
215
  - ✅ 要:`zentodo --json task mit-list`
216
216
  - 类似的:"今日完成" 用 `task completed-today`、"过期任务" 用 `task overdue`、"收集箱" 用 `task inbox`、"搜索任务" 用 `task search`、"统计" 用 `task stats` / `pomo focus-stats` / `project stats`。
217
217
 
218
- 4. **不要在未征得用户明确同意时做破坏性操作**
218
+ 4. **不要在查询返回空/失败时误导用户**
219
+ - ❌ 不要说:"你的 ZenTodo 账号是空的 / 还没有数据 / 请先同步"
220
+ - ❌ 不要让用户跑 `zentodo sync incremental`(CLI 没有本地库,sync 对它无意义)
221
+ - ❌ 不要让用户"先去 App 建任务我再帮你查"——他的数据已经在服务器上
222
+ - ✅ 正确做法:按"故障排查"章节顺序检查(usrKey → dry-run → 换接口 → 升级 CLI)
223
+
224
+ 5. **不要在未征得用户明确同意时做破坏性操作**
219
225
  以下命令属于破坏性,即便用户话里带"删 / 清空 / 重置"也要先 dry-run 展示内容,确认后再加 `--yes` 真执行:
220
226
  - `zentodo task delete`
221
227
  - `zentodo auth delete-account`
@@ -225,9 +231,9 @@ zentodo doctor
225
231
  - `zentodo import --mode replace --yes`
226
232
  - `zentodo backup restore --yes`
227
233
 
228
- 5. **不要在对话或日志里回显**密码、usrPwd、token、openid、umengToken。
234
+ 6. **不要在对话或日志里回显**密码、usrPwd、token、openid、umengToken。
229
235
 
230
- 6. **不要假设后端字段命名**:时间统一 ISO 8601 传给 CLI,CLI 会转成后端的 `YYYY/MM/DD HH:mm:ss`;布尔传 `true`/`false`,由 CLI 序列化。
236
+ 7. **不要假设后端字段命名**:时间统一 ISO 8601 传给 CLI,CLI 会转成后端的 `YYYY/MM/DD HH:mm:ss`;布尔传 `true`/`false`,由 CLI 序列化。
231
237
 
232
238
  ---
233
239
 
@@ -481,23 +487,52 @@ zentodo --json backup list
481
487
 
482
488
  ---
483
489
 
484
- ## 九、诊断命令
490
+ ## 十一、故障排查(重要)
485
491
 
486
- ```bash
487
- zentodo doctor # 配置 + 网络 + Token 体检
488
- zentodo auth whoami # 查看当前身份
489
- zentodo --version # CLI 版本
490
- zentodo sync status # 每张表的本地 / 服务器版本对比
491
- zentodo audit log # 本地命令历史
492
- ```
492
+ ### 当查询返回空或 404 时,**不要**说 "用户账号是空的" 或 "请先同步"
493
493
 
494
- 如果 CLI 命令找不到,先检查:
495
- ```bash
496
- which zentodo # POSIX
497
- where zentodo # Windows
498
- ```
494
+ ZenTodo 是**远端服务**,数据一直在服务器数据库里。CLI 是无状态客户端,直接查后端,**不需要** `sync incremental` 这种本地对齐操作。
495
+
496
+ 查询结果异常时按以下顺序排查:
497
+
498
+ 1. **先确认 CLI 有 usrKey**:
499
+ ```bash
500
+ zentodo auth whoami
501
+ ```
502
+ 输出里 `user_key` 应该是纯数字(例如 `466`),如果是对象 `{ data: 466, ... }` 就是老版 CLI 的 bug,升级到最新版:
503
+ ```bash
504
+ npm install -g @zentodo/cli@latest --registry https://registry.npmmirror.com
505
+ ```
506
+ 升级后第一次运行任何命令会自动把 config.json 里的坏数据修正。
507
+
508
+ 2. **dry-run 看实际发的请求**:
509
+ ```bash
510
+ zentodo --dry-run --json task list
511
+ ```
512
+ 如果 `fields` 里 `usrKey=[object Object]` 或者没有 `usrKey` → 走第 1 步升级。
513
+
514
+ 3. **绕过 CLI 直接验证**(仅限诊断,正常使用别这样):
515
+ ```bash
516
+ curl -X POST "http://ztdfwq.qmlist.net:8082/zentodoserver/taskController/getAllTaskByUserId" \
517
+ -d "usrKey=你的usrKey" \
518
+ -H "Content-Type: application/x-www-form-urlencoded"
519
+ ```
520
+ 如果这样能拿到数据但 `zentodo` 命令不行 → CLI 有 bug,升级或提 issue。
521
+
522
+ 4. **换接口试**:某些旧接口(极少数)依赖 Session Cookie,CLI 调会被 302 重定向到 `/login`。这**不是 session 过期**,是本来就没 session。直接换一个有 `usrKey` 参数的同义接口即可。常见替代:
523
+ - `project list-all` → 如果 302,说明是旧版后端,用 `project list-active` / `list-archived`
524
+ - `task calendar` → 等价于 `task list` 后客户端按日期过滤(最新版后端已改好直接支持 usrKey)
525
+
526
+ 5. **404 / 接口不存在**:新加的接口(如 `task.mit-list`、`task.overdue`、`task.inbox`、`task.stats`、`pomo.focus-stats`)需要后端更新。如果服务器是旧版,降级到用 `task list-all` 后在客户端过滤。但**不要**因此告诉用户"账号是空的"——空列表是空列表,404 是服务器没部署新接口,两回事。
527
+
528
+ ### **绝对不要**
529
+
530
+ - **不要**在查不到数据时说"你的 ZenTodo 账号是空账号"或"请先在 App 里创建"——数据几乎一定在服务器上,是 CLI 或接口的问题
531
+ - **不要**让用户运行 `sync incremental` 来"同步数据"——CLI 没有本地库,sync 对它没意义
532
+ - **不要**让用户重新登录,除非 `zentodo auth whoami` 明确显示 `user_key` 为空
533
+
534
+ ---
499
535
 
500
- 找不到就走"前置条件"的 npm install 再试。
501
536
 
502
537
  ---
503
538
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zentodo/cli",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "ZenTodo 命令行工具 — 为 AI Agent 和开发者设计,覆盖任务、项目、番茄钟、日记、同步等全部能力。安装后自动配置 Claude Agent Skill。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -215,7 +215,13 @@ zentodo doctor
215
215
  - ✅ 要:`zentodo --json task mit-list`
216
216
  - 类似的:"今日完成" 用 `task completed-today`、"过期任务" 用 `task overdue`、"收集箱" 用 `task inbox`、"搜索任务" 用 `task search`、"统计" 用 `task stats` / `pomo focus-stats` / `project stats`。
217
217
 
218
- 4. **不要在未征得用户明确同意时做破坏性操作**
218
+ 4. **不要在查询返回空/失败时误导用户**
219
+ - ❌ 不要说:"你的 ZenTodo 账号是空的 / 还没有数据 / 请先同步"
220
+ - ❌ 不要让用户跑 `zentodo sync incremental`(CLI 没有本地库,sync 对它无意义)
221
+ - ❌ 不要让用户"先去 App 建任务我再帮你查"——他的数据已经在服务器上
222
+ - ✅ 正确做法:按"故障排查"章节顺序检查(usrKey → dry-run → 换接口 → 升级 CLI)
223
+
224
+ 5. **不要在未征得用户明确同意时做破坏性操作**
219
225
  以下命令属于破坏性,即便用户话里带"删 / 清空 / 重置"也要先 dry-run 展示内容,确认后再加 `--yes` 真执行:
220
226
  - `zentodo task delete`
221
227
  - `zentodo auth delete-account`
@@ -225,9 +231,9 @@ zentodo doctor
225
231
  - `zentodo import --mode replace --yes`
226
232
  - `zentodo backup restore --yes`
227
233
 
228
- 5. **不要在对话或日志里回显**密码、usrPwd、token、openid、umengToken。
234
+ 6. **不要在对话或日志里回显**密码、usrPwd、token、openid、umengToken。
229
235
 
230
- 6. **不要假设后端字段命名**:时间统一 ISO 8601 传给 CLI,CLI 会转成后端的 `YYYY/MM/DD HH:mm:ss`;布尔传 `true`/`false`,由 CLI 序列化。
236
+ 7. **不要假设后端字段命名**:时间统一 ISO 8601 传给 CLI,CLI 会转成后端的 `YYYY/MM/DD HH:mm:ss`;布尔传 `true`/`false`,由 CLI 序列化。
231
237
 
232
238
  ---
233
239
 
@@ -481,23 +487,52 @@ zentodo --json backup list
481
487
 
482
488
  ---
483
489
 
484
- ## 九、诊断命令
490
+ ## 十一、故障排查(重要)
485
491
 
486
- ```bash
487
- zentodo doctor # 配置 + 网络 + Token 体检
488
- zentodo auth whoami # 查看当前身份
489
- zentodo --version # CLI 版本
490
- zentodo sync status # 每张表的本地 / 服务器版本对比
491
- zentodo audit log # 本地命令历史
492
- ```
492
+ ### 当查询返回空或 404 时,**不要**说 "用户账号是空的" 或 "请先同步"
493
493
 
494
- 如果 CLI 命令找不到,先检查:
495
- ```bash
496
- which zentodo # POSIX
497
- where zentodo # Windows
498
- ```
494
+ ZenTodo 是**远端服务**,数据一直在服务器数据库里。CLI 是无状态客户端,直接查后端,**不需要** `sync incremental` 这种本地对齐操作。
495
+
496
+ 查询结果异常时按以下顺序排查:
497
+
498
+ 1. **先确认 CLI 有 usrKey**:
499
+ ```bash
500
+ zentodo auth whoami
501
+ ```
502
+ 输出里 `user_key` 应该是纯数字(例如 `466`),如果是对象 `{ data: 466, ... }` 就是老版 CLI 的 bug,升级到最新版:
503
+ ```bash
504
+ npm install -g @zentodo/cli@latest --registry https://registry.npmmirror.com
505
+ ```
506
+ 升级后第一次运行任何命令会自动把 config.json 里的坏数据修正。
507
+
508
+ 2. **dry-run 看实际发的请求**:
509
+ ```bash
510
+ zentodo --dry-run --json task list
511
+ ```
512
+ 如果 `fields` 里 `usrKey=[object Object]` 或者没有 `usrKey` → 走第 1 步升级。
513
+
514
+ 3. **绕过 CLI 直接验证**(仅限诊断,正常使用别这样):
515
+ ```bash
516
+ curl -X POST "http://ztdfwq.qmlist.net:8082/zentodoserver/taskController/getAllTaskByUserId" \
517
+ -d "usrKey=你的usrKey" \
518
+ -H "Content-Type: application/x-www-form-urlencoded"
519
+ ```
520
+ 如果这样能拿到数据但 `zentodo` 命令不行 → CLI 有 bug,升级或提 issue。
521
+
522
+ 4. **换接口试**:某些旧接口(极少数)依赖 Session Cookie,CLI 调会被 302 重定向到 `/login`。这**不是 session 过期**,是本来就没 session。直接换一个有 `usrKey` 参数的同义接口即可。常见替代:
523
+ - `project list-all` → 如果 302,说明是旧版后端,用 `project list-active` / `list-archived`
524
+ - `task calendar` → 等价于 `task list` 后客户端按日期过滤(最新版后端已改好直接支持 usrKey)
525
+
526
+ 5. **404 / 接口不存在**:新加的接口(如 `task.mit-list`、`task.overdue`、`task.inbox`、`task.stats`、`pomo.focus-stats`)需要后端更新。如果服务器是旧版,降级到用 `task list-all` 后在客户端过滤。但**不要**因此告诉用户"账号是空的"——空列表是空列表,404 是服务器没部署新接口,两回事。
527
+
528
+ ### **绝对不要**
529
+
530
+ - **不要**在查不到数据时说"你的 ZenTodo 账号是空账号"或"请先在 App 里创建"——数据几乎一定在服务器上,是 CLI 或接口的问题
531
+ - **不要**让用户运行 `sync incremental` 来"同步数据"——CLI 没有本地库,sync 对它没意义
532
+ - **不要**让用户重新登录,除非 `zentodo auth whoami` 明确显示 `user_key` 为空
533
+
534
+ ---
499
535
 
500
- 找不到就走"前置条件"的 npm install 再试。
501
536
 
502
537
  ---
503
538