feat: add concise todo note cli

This commit is contained in:
Codex
2026-07-10 06:19:26 +02:00
parent 1510e800fa
commit 4e4fb61003
8 changed files with 490 additions and 24 deletions
+21 -16
View File
@@ -4,6 +4,8 @@ UniDesk 的统一 CLI 实现入口是根目录 `scripts/cli.ts`,运行方式
主 server 必须在 PATH 上提供 `/root/.local/bin/trans` 可执行 wrapper,内容委托 repo 内版本化 `scripts/trans` 并执行 `bun scripts/ssh-cli.ts ssh "$@"`;交互 shell 可额外提供 alias,但非交互 Codex `exec` 和脚本不能依赖 alias 展开。
主 server 同时提供 `/root/.local/bin/unidesk`,委托版本化 `scripts/unidesk` 执行根 CLI。高频人工入口优先写 `unidesk <command>`;仓库内验证和未安装 wrapper 的 checkout 使用等价的 `bun scripts/cli.ts <command>`
`trans` wrapper 是 SSH/WSL/k3s 透传的唯一默认入口:人工/Codex 远端操作、长期参考文档、AGENTS 索引、CLI help、非交互脚本和非交互 `exec` 都必须直接调主 server PATH 上的 `/root/.local/bin/trans`;禁止把 `bun scripts/cli.ts ssh ...``bun scripts/cli.ts trans ...` 或任何带 `bun scripts/cli.ts` 前缀的透传写法作为默认入口。`bun scripts/cli.ts help``config``server``provider``microservice` 等普通根 CLI 子命令不受这条限制,仍使用 `bun scripts/cli.ts <command>`,避免透传命令和根子命令在调用前缀上互相混淆。
CLI 可以从 `master` 快速演进,但必须兼容 `deploy.json` 固定的 CI/CD server 和生产运行面。CLI/server 能力协商、unsupported-version 失败语义和 release-line 边界由 `docs/reference/release-governance.md` 与 [GitHub issue #6](https://github.com/pikasTech/unidesk/issues/6) 约束。
@@ -175,26 +177,29 @@ UniDesk/HWLAB Web 开发、HWLAB `web-probe run|script|observe|screenshot`、fak
`microservice proxy` 是面向人工验证和受控调试的私有后端入口。默认 method 为 GET;使用 `--body-json JSON``--body-file path``--body-stdin` 时默认 method 切换为 POST,也可显式加 `--method POST|PUT|PATCH|DELETE`,但 GET/HEAD 不允许携带请求体。所有请求仍受 config 中的 `allowedMethods``allowedPathPrefixes` 限制。为了避免 Pipeline snapshot 这类超大业务 JSON 造成 CLI 输出爆炸,响应 body 超过默认阈值时会返回 `bodyOmitted=true``bodyPreview``bodyBytes``rawHint``--raw` 仍受默认硬限额保护,需要完整 body 时显式添加 `--raw --full`,或用 `--max-body-bytes <N>` 调整预览阈值。正式 frontend 展示仍应优先使用业务控件和 `__unideskArrayLimit` 这类展示级裁剪参数,而不是默认倾倒完整 JSON。
**Todo Note 写操作 CLI 范式(2026-06-01 [#190](https://github.com/pikasTech/unidesk/issues/190) 固化)**Todo Note microservice 写不走 REST 集合(如 `/api/instances/:id/todos`),所有 task 写都走 action 队列 `POST /api/instances/:id/actions` + body `{action: {type, ...}}`。常见范式:
## Todo Note Resource CLI
Todo Note 的人工与秘书入口是 `unidesk todo-note`。命令内部通过 backend-core 私有代理访问 NC01 服务,调用者不拼 `/api/...` 或 JSON action body。默认输出是有界表格,显式 `--json` 才返回结构化对象:
```bash
# 标记完成 / 取消完成
bun scripts/cli.ts microservice proxy todo-note \
/api/instances/<id>/actions --method POST \
--body-json '{"action":{"type":"toggleTodoCompleted","todoId":"todo_xxx"}}'
# 新增 todo
bun scripts/cli.ts microservice proxy todo-note \
/api/instances/<id>/actions --method POST \
--body-json '{"action":{"type":"addTodo","title":"..."}}'
# 改名 / 改 reminder / 删除 / 移动:换 type 即可,见 docs/reference/microservices.md
# 撤销 / 重做
bun scripts/cli.ts microservice proxy todo-note /api/instances/<id>/undo --method POST
bun scripts/cli.ts microservice proxy todo-note /api/instances/<id>/redo --method POST
unidesk todo-note list
unidesk todo-note show 大论文
unidesk todo-note show HWLAB --all --limit 80
unidesk todo-note add 大论文 --title "跟踪外审意见" [--parent <todo-id>]
unidesk todo-note update 大论文 <todo-id|精确标题> --title "新标题"
unidesk todo-note complete 大论文 <todo-id|精确标题>
unidesk todo-note reopen 大论文 <todo-id|精确标题>
unidesk todo-note remind 大论文 <todo-id|精确标题> --at 2026-07-31T18:00:00+08:00
unidesk todo-note remind 大论文 <todo-id|精确标题> --clear
unidesk todo-note delete 大论文 <todo-id|精确标题> --confirm
unidesk todo-note undo 大论文
unidesk todo-note redo 大论文
unidesk todo-note health
```
看到 `404 {"error":"Todo Note is running in backend-only mode"}` 时**第一反应**是路径错(用了不存在的 REST 端点被 catch-all 兜底),不是 mode 锁了写;详见 `docs/reference/microservices.md` 的 Todo Note
`complete``reopen` 是幂等命令:目标已经处于期望状态时返回 `CHANGED=false`,不会反向切换。列表支持名称或 instance id;todo 支持 id 或唯一精确标题,标题重名时必须使用 id。`microservice proxy todo-note ...` 仅保留底层诊断、迁移和尚未产品化的 API 调试,不是日常维护入口
看到底层诊断返回 `404 {"error":"Todo Note is running in backend-only mode"}` 时**第一反应**是路径错(用了不存在的 REST 端点被 catch-all 兜底),不是 mode 锁了写;详见 `docs/reference/microservices.md` 的 Todo Note 段。
**Todo Note 错路径结构化诊断(issue #198)**:旧 Gitee/CC01 runtime 的 catch-all handler 会把未注册路径回成 `404 {"ok":false,"error":"Todo Note is running in backend-only mode"}`,与 `TODO_NOTE_BACKEND_ONLY=1` 的真实语义(只关 Vite 前端)混淆。当前 vendored NC01 服务直接返回明确 route-not-foundbackend-core/CLI 仍保留旧特征改写作为迁移兼容兜底:
+1 -1
View File
@@ -35,7 +35,7 @@
推荐读取顺序如下:
- 当前待办:`bun scripts/cli.ts microservice proxy todo-note /api/instances`,必要时再查看具体实例
- 当前待办:`unidesk todo-note list`,必要时用 `unidesk todo-note show <列表>` 查看未完成项;维护使用 `add|update|complete|reopen|remind|delete` 资源命令,不手写 API path 或 JSON body
- 之前日程:先用 `bun scripts/cli.ts decision diary months``bun scripts/cli.ts decision diary list --month YYYY-MM` 找到日期,再用 `bun scripts/cli.ts decision diary show YYYY-MM-DD` 读取具体条目。
- 系统定时日程:`bun scripts/cli.ts schedule list``bun scripts/cli.ts schedule runs --limit N`