dsh-worktodo 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,80 @@
2
2
 
3
3
  > 本文提到的 `tools/`、`docs/` 等路径都在**仓库**里,不在 npm 发布包内:<https://github.com/olimc2016/dsh-worktodo>
4
4
 
5
+ ## 0.2.0
6
+
7
+ > 这一版是**五轮设计评审后的定稿实现**:快速添加按「两行布局 + 边说边解析」重做,参考滴答清单的成熟做法。
8
+
9
+ ### 新增
10
+
11
+ - **两行布局的快速添加**:第一行「待办内容 + 添加」;第二行**更小**,放「日期 / 时间 / 优先级」三项——
12
+ 显示的是**当前值**(如 `2026-10-13`、`15:00`、`优先级 · 无`),点开才出选择器。没有加号,输入框始终在。
13
+ - **自然语言日期**(`src/parse-due.mjs`,**人类面板与 `worktodo_*` 工具共用同一份实现**,零依赖):
14
+ - `今天 / 明天 / 后天 / 大后天`、`周X / 周1 / 星期一 / 礼拜一 / 下周一`、`3天后 / +3d / 五天后`、
15
+ `10月20日 / 2026-10-20`、`今晚 / 明早 / 中午 / 下午`(带默认钟点)、`下午3点 / 3点半 / 15:00 / 上午10点`;
16
+ - **只选时间=今天**;**识别不到就不设日期**(不硬塞"今天");
17
+ - 识别结果**从标题里摘掉**("交周报 明天下午3点" → 标题「交周报」),并在第二行标 **· 识别**,可点 ✕ 撤销;
18
+ - **保守优先**:`买3个苹果`、`发 2 封邮件` 一律不识别(宁漏不误吞);
19
+ - 多个星期几取**最后**一个(`周一例会改到周三` → 周三,标题留「周一例会改到」)。
20
+ - **四档优先级**:高 / 中 / 低 / **无**(**新建默认「无」**);排序 高 → 中 → 低 → 无(未定优先级排在最后,但仍在「已完成」之前)。
21
+ - **列表行优先级呈现**:高=红色左缘 + 实心红旗;中=琥珀旗;低=灰旗;**无=什么都不显示**(默认档不制造噪音)。
22
+
23
+ ### 数据模型
24
+
25
+ - 新增可选字段 `dueTime`(`HH:MM`,必须配 `due`;清掉日期会连带清掉时间);
26
+ - `priority` 新增 `none`;**现有记录(`normal`)保持"中"不变**,不擅自改用户既有语义。
27
+
28
+ ### 说明
29
+
30
+ - 0.1.6 的「通栏大加号 + 常展开表单」**不是定稿设计,不发布**(留在 npm 暂存队列里未批准)。
31
+
32
+ ## 0.1.6
33
+
34
+ ### 新增
35
+
36
+ - **大加号 + 日历/时钟 + 彩色小红旗**:新增待办改成「一个大加号按钮」,平时只占一行,点开才展开表单:
37
+ 标题、**原生日历选日期**(`type=date`,点一下就是日历)、**原生时钟选时间**(`type=time`,需先选日期)、
38
+ **三个不同颜色的小红旗**选优先级(高=红、普通=琥珀、低=灰),外加「添加 / 取消」两个按钮。
39
+ - **截止时间(数据模型)**:新增可选字段 `dueTime`(`HH:MM`),与 `due` 配套:
40
+ - `normalizeDueTime` 接受 `14:30` / `9:05` / `1430` / `14`,非法值显式报错;
41
+ - **没有日期就没有时间**——清掉截止日期会连带清掉时间,避免出现"有时间没日期"的怪状态;
42
+ - 同一天内按时间排序(有时间的在前,没时间的垫后);
43
+ - 行内编辑也支持时间;`worktodo_add` / `worktodo_add_many` / `worktodo_update` 与工具文本都带上它。
44
+
45
+ ## 0.1.5
46
+
47
+ ### 新增
48
+
49
+ - **面板角落的版本信息**:页脚显示当前安装的版本(`版本 v0.1.5`);若有新版,旁边同时出现
50
+ 「有新版本 vX.Y.Z」,鼠标悬停给出更新命令。版本由宿主提供(`/worktodo/list` 载荷的 `version` 字段),
51
+ 客户端不自己猜。
52
+ - **更新检查**(自动更新的可见部分):宿主在启动后、以及缓存过期时(默认 6 小时)后台查询 npm registry 的
53
+ `dist-tags.latest`;结果**只用于提示**,不下载也不安装,失败静默、绝不阻塞任何请求。
54
+ 单元测试用 `WORKTODO_NO_UPDATE_CHECK=1` 完全关掉它(测试不该打网络)。
55
+ 自动执行升级(发现新版后后台跑 `dsh plugin add`,重启生效)是下一步。
56
+
57
+ ### 测试
58
+
59
+ - `smoke-host` 新增 1 例:`/list` 载荷的 `version`/`update` 字段齐全且 `hasUpdate` 在关闭检查时为 false。
60
+
61
+ ## 0.1.4
62
+
63
+ ### 修复(重要)
64
+
65
+ - **插件时好时坏地加载失败**:`src/store.mjs` 里探测官方存储服务的写法是
66
+
67
+ ```js
68
+ ctx.get('storageDomain') ?? ctx.storageDomain // ← 错
69
+ ```
70
+
71
+ 当 `storageDomain` **尚未注册**时,`ctx.get()` 返回 `undefined`,于是落到 `ctx.storageDomain`——
72
+ 而直接访问未在 `inject` 里声明的服务会被 cordis 守卫**抛错**(`cannot get property "storageDomain" without inject`)。
73
+ 异常一路冒到 `apply`,**整个插件挂载失败**:工具消失、路由全 404。
74
+ 因为服务注册与服务初始化存在竞态,表现就是「有时能起来、有时起不来」,重启也不一定好。
75
+
76
+ 现在只保留安全的 `ctx.get('storageDomain')`(探测不到就回退 JSON 文件),并补了回归用例
77
+ ——它用一个「访问 `storageDomain` 就抛错」的假 ctx 模拟 cordis 守卫,**旧写法下这条测试必红**。
78
+
5
79
  ## 0.1.3
6
80
 
7
81
  ### 新增
@@ -108,7 +182,7 @@
108
182
  - 新增可观测性:`/worktodo/health` 现在报告运行中的实际 `version` 与
109
183
  `tools: { status, registered, names, error }`——工具静默没注册这类问题不用再翻日志猜。
110
184
 
111
- ### 测试(172 例,均不需要启动 DSH)
185
+ ### 测试(175 例,均不需要启动 DSH)
112
186
 
113
187
  - `tools/verify-records.mjs`(22):日期归一化与相对日期、状态/优先级同义词、完成时间维护、
114
188
  引用解析(id / 标题 / 前缀 / 歧义)、分组边界(本周日 vs 下周一)、统计口径、筛选、坏记录修复。
package/README.en.md CHANGED
@@ -95,7 +95,7 @@ Pin your own path in `cordis.patch.yml`:
95
95
  ```bash
96
96
  pnpm install # esbuild ships a prebuilt binary; no approve-builds needed
97
97
  pnpm run build # build lib/client.js (browser half)
98
- pnpm test # 172 cases: data model / storage / service / host wiring and tools / client contract / client bundle / CI contract / privacy gate / catalog gate
98
+ pnpm test # 175 cases: data model / storage / service / host wiring and tools / client contract / client bundle / CI contract / privacy gate / catalog gate
99
99
  pnpm run watch # incremental client build
100
100
  ```
101
101