nx-kv 0.10.1 → 0.11.1
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 +283 -0
- package/README.md +30 -4
- package/assets/kv-timegoal/SKILL.md +42 -14
- package/assets/kv-timegoal/references/workflow.md +24 -16
- package/assets/nx-kv/SKILL.md +1 -0
- package/assets/nx-kv/references/repo-registry.md +115 -0
- package/package.json +1 -1
- package/src/modules/localtask/board.js +115 -0
- package/src/modules/localtask/index.js +114 -11
- package/src/modules/localtask/service.js +631 -53
- package/src/modules/localtask/view.jsx +1127 -588
- package/src/modules/repos/boards.js +185 -0
- package/src/modules/repos/index.js +273 -0
- package/src/modules/repos/service.js +312 -0
- package/src/modules/repos/view.jsx +511 -0
- package/src/modules/timegoal/index.js +89 -17
- package/src/modules/timegoal/service.js +338 -28
- package/src/runtime/cli.js +45 -3
- package/src/runtime/registry.js +2 -1
- package/src/web/frontend/App.jsx +17 -3
- package/src/web/frontend/registry.js +1 -0
- package/src/web/frontend/style.css +759 -36
- package/src/web/public/assets/{CliHints-B98Zw4uK.js → CliHints-C-BFn59G.js} +1 -1
- package/src/web/public/assets/index-Bi6ABn3T.css +1 -0
- package/src/web/public/assets/{index-57QX-j8y.js → index-CAoAkDuU.js} +2 -2
- package/src/web/public/assets/view-B_8D1S1p.js +10 -0
- package/src/web/public/assets/view-CGbnAQ7o.js +2 -0
- package/src/web/public/assets/{view-_UA707kn.js → view-CuAyOXB0.js} +1 -1
- package/src/web/public/assets/{view-BzY577lO.js → view-D0i4WoOA.js} +1 -1
- package/src/web/public/assets/{view-BskvoBME.js → view-DJbamokf.js} +1 -1
- package/src/web/public/index.html +2 -2
- package/src/web/public/assets/index-BDsJPdhM.css +0 -1
- package/src/web/public/assets/view-Cn7mYuiU.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,289 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.11.1] - 2026-10-23 单个项目目录也能从远程导入 + 面板导入 ref/refs 键修复
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **每个项目目录单独也能从远程导入**。目录看板的每一行操作列现在都有「导入」按钮
|
|
12
|
+
(全局池行同样有),点开就是同一个子弹窗:按主题筛选 + 单条勾选,导入落点是
|
|
13
|
+
**这一行的目录队列**——不用先点开它的队列再导。
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **【面板上点「导入」什么也没发生】**。action 只读 `ctx.ref`(CLI 的 `--ref` flag 名),
|
|
18
|
+
而面板 body 发的是 `refs`;HTTP body 里未声明的键会原样透传,于是 `ctx.ref` 是
|
|
19
|
+
undefined → 后端报「要导入的远程任务不能为空」,面板**静默导了 0 条**。
|
|
20
|
+
现在 `ref` 与 `refs` 两个键都收(合并逻辑抽成纯函数 `mergeImportRefs()`,可单测)。
|
|
21
|
+
|
|
22
|
+
## [0.11.0] - 2026-10-23 远程任务导入 + 仓库上下文迁入 + 面板视觉收敛
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **【本地任务支持从远程清单导入】**。远程 KV 清单上还没人领的任务,现在可以**勾几条
|
|
27
|
+
搬进本机的任务队列**,让本机 agent 领得到:
|
|
28
|
+
- 面板的**全局任务池行**与**队列面板**各一个「从远程导入」入口 → **子弹窗**:
|
|
29
|
+
顶部按**主题**筛选(默认全部未完成),每条一个**勾选框**(默认不勾,用户自己安排),
|
|
30
|
+
底部「导入 N 条」。
|
|
31
|
+
- CLI:`nx-kv localtask import-remote --ref "<远程任务内容整串>" [--topic] [--pick] [--cwd | --global]`。
|
|
32
|
+
按**内容**定位远程那条(不按 id —— 远程 id 会被复用)。
|
|
33
|
+
- **导入完成即回填远程**:那条远程任务被标记为已完成,note 写明
|
|
34
|
+
「已导入到本地队列「<队列名>」(本地 #<id>)」,本地给出提示
|
|
35
|
+
「本地的某一个队列领取了这个任务」。
|
|
36
|
+
- 顺序刻意是**先落本地、再标远程完成**:反过来一旦本地写失败,任务两头都没了。
|
|
37
|
+
- 依赖边界:远程通道在 todo 模块(另一个 store + 登录态),这里用动态 import +
|
|
38
|
+
fail-soft —— 没登录/远程不可达会明说原因,但**不牵连本地任务的其它功能**。
|
|
39
|
+
- **【仓库上下文模块】**(从 nx-rh 整体迁来,远程清单 topic=goal 的 #72):
|
|
40
|
+
仓库登记(name/path/tags/desc/notes)与看板聚合(仓库 ↔ 看板,有序)搬进 nx-kv,
|
|
41
|
+
存在 `~/.nx-kv/repos.json`(`NX_KV_REPOS_STORE` 可覆盖),命令是
|
|
42
|
+
`nx-kv repo ...` / `nx-kv board ...`,面板多一个「仓库」页。
|
|
43
|
+
- **它的用途是给本地任务当上下文**:目录路径对得上已登记仓库时,
|
|
44
|
+
主题视图与 `localtask wait` 的返回里都带上仓库信息(名字/标签/描述/**所属看板**),
|
|
45
|
+
面板上目录行显示一枚「所属看板」chip,投递条上方显示该目录的仓库上下文。
|
|
46
|
+
- nx-rh 侧的仓库模块(命令、面板页、store 字段、registry 注册、system 总览)**已删除**,
|
|
47
|
+
数据先迁走(`~/.nx-rh/store.json.bak-before-kv-migration` 留了备份)。
|
|
48
|
+
- 仓库路径是**本机事实**,所以落本地 store,不上远程 KV(跨机器会看到不存在的路径)。
|
|
49
|
+
- **timegoal 的时长按人话说**:`--duration` 现在接受 `5h` / `90m` / `2d` / `5小时` /
|
|
50
|
+
`1.5h` 这类带单位的写法(纯秒数 `10800` 照旧可用),CLI 与 HTTP 两端一致。
|
|
51
|
+
上限从 **24 小时放宽到 365 天**——"跑一晚上""连续优化几天"是真实需求,
|
|
52
|
+
24 小时的老上限逼着用户改代码而不是改配置。
|
|
53
|
+
- **`timegoal log`**:回看本目录每一轮 check 的记录(现状 / 完成度 / 剩余时间)。
|
|
54
|
+
- **`evalTimegoal` / `check` 新增 `overtimeSec`**:到点后报出「已经超时多久」,
|
|
55
|
+
面板上显示「已到点 · 超时 2:13:45」,不再是一句静止的"已到点"。
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
|
|
59
|
+
- **timegoal 到点即失效**:目标过了截止时刻就**自动失效**——从活动列表/看板/面板里消失,
|
|
60
|
+
不再越堆越多(以前要手动点一次「回收已到点」)。保留期内 `show` / `check` 仍查得到,
|
|
61
|
+
agent 最后一轮照样拿到 `reached:true` + 提示词原文,能写完最终总结再停手;
|
|
62
|
+
超过保留期(默认 7 天)**整条自动删掉**,不需要任何人手动清理。
|
|
63
|
+
失效的目标**不可复活**(`update` 不再能救回来,要继续请用 `set` 开新一局)。
|
|
64
|
+
`timegoal prune` 仍是「彻底清除到点/已归档的目标」的手动出口。
|
|
65
|
+
(早期版本是"保留期后只丢日志、提示词永久保留"——那条已被推翻,见下面「超时了就自动失效」。)
|
|
66
|
+
- **每个 timegoal 的检查日志只保留最近 200 条**:长跑任务每轮都记,不封顶的话
|
|
67
|
+
store 会无限膨胀。`totalChecks` 记总轮次、`logTruncated` 标记历史被截断——
|
|
68
|
+
**截断是可见的**,不会静默丢历史。
|
|
69
|
+
- **面板时间目标编辑器改成「数值 + 单位」**(分钟/小时/天),快捷预设补上「5 小时」,
|
|
70
|
+
去掉 24 小时的输入上限。
|
|
71
|
+
|
|
72
|
+
### 视觉
|
|
73
|
+
|
|
74
|
+
「本地任务」页做了一整轮重做(方向:**工业仪表盘**——暖中性纸面、1px 发丝线、
|
|
75
|
+
机器数据一律等宽、单一墨色主操作 + 三个语义色,状态只靠色点和数字)。
|
|
76
|
+
一批问题都是**实测出来**的,不是凭感觉:
|
|
77
|
+
|
|
78
|
+
- **看板三列等宽**:CSS 里写的 40% / 18% / 19% **根本没生效**——`table-layout: fixed`
|
|
79
|
+
只认 `thead th`,而这几个规则写在 `td` 上,于是 972px 被三列平分。
|
|
80
|
+
现状被压成省略号,操作列白占 196px。类名挂到 `th` 上后列宽立刻生效。
|
|
81
|
+
- **看板行高 93px**(GitLab 的 1.5 倍、Trello 的 2 倍),一屏只看得到 5 个目录。
|
|
82
|
+
目录格从 4 段(名/路径/现状/提交说明)压成 2 行:路径并进名称行且只留末两段、
|
|
83
|
+
祖先目录变暗,提交说明并进现状行。行高降到 **56px**。
|
|
84
|
+
- **逾期的时间目标渲染成灰色「未设置」**:`.board-goal-label.reached` 实测渲染数为 0
|
|
85
|
+
(读时自动归档已经把到期目标移出活动列表了)。现在行内是琥珀色的
|
|
86
|
+
「已到点 · 超时 2:46:07」,逾期是信息,不是背景噪音。
|
|
87
|
+
- **同一列里两种时钟格式**:`剩余 5:47` 和 `剩余 1:05:47` 并排,"5:47" 是 5 分还是
|
|
88
|
+
5 小时?统一成 `h:mm:ss`。
|
|
89
|
+
- **队列表的「删除」按钮被卡片边切掉**:操作列给了 156px,四个按钮实际要 190px,
|
|
90
|
+
最后一个永远点不着。列宽改到 196px,并给外层加横向滚动兜底。
|
|
91
|
+
- **同一页两张表是两种表格语言**:看板表头有浅灰底 + 发丝线,队列表头透明无线,
|
|
92
|
+
像两个产品。队列表头对齐看板。
|
|
93
|
+
- **「投递到」那一行同一句话说了三遍**(下拉旁的说明 + 长占位符 + 按钮文案),
|
|
94
|
+
而且长占位符会被误读成"禁用态"。合成一条输入组:
|
|
95
|
+
`[目标 ▾ | 任务标题,Enter 提交 | 发布到全局池]`。
|
|
96
|
+
- **归档区那张大白卡把版面拦腰截断**(占 130px),折成一行
|
|
97
|
+
「▸ 已到点自动归档 (2) 彻底清除」。
|
|
98
|
+
- 每行加一条 **2px 状态导轨**(等待中=绿、等待已结束=琥珀、选中=墨色),
|
|
99
|
+
一列对齐的色条比一排填充色块省力得多。
|
|
100
|
+
- 徽标从 999px 药丸改成 4px 描边 chip;卡片阴影从 `0 10px 28px` 大模糊改成 1px 发丝环;
|
|
101
|
+
行内按钮常态透明度从 0.5 抬到 0.7(0.5 看着像 disabled)。
|
|
102
|
+
- **顶栏**:原来写死了两个「nx-kv」(纯重复),第二个改成版本号;右侧那格读的是
|
|
103
|
+
`boot.storePath` —— 而 bootstrap 响应里**根本没有这个字段**,所以它永远是空的,
|
|
104
|
+
改成显示真实的本地配置路径。
|
|
105
|
+
- 目标编辑器的控件原来写的是**内联 style**,把统一表单样式盖掉了,全部改成 class。
|
|
106
|
+
|
|
107
|
+
### Changed
|
|
108
|
+
|
|
109
|
+
- **【时间目标到点自动取消】**。以前 wait 只认两种结束:拿到任务,或自己的超时
|
|
110
|
+
(最长 10 分钟)。但如果这个目录挂着**时间目标**,预算到点这一局就该结束了 ——
|
|
111
|
+
agent 等的是"下一条任务",预算用完了就不该在预算外继续空等。现在 wait 会在
|
|
112
|
+
**等待期间**越过目标截止时刻时立刻收尾,走与超时同一条出口
|
|
113
|
+
(`status:"timeout"` + `cancelled:true` + `reason:"goal_expired"`),
|
|
114
|
+
agent 侧不必认识新状态。CLI 会明说「时间目标已到点,本局预算用完」。
|
|
115
|
+
- 探针来自 timegoal 模块(独立 store),**动态 import**、**fail-open**:
|
|
116
|
+
读不到 / 没有目标 / 加载失败一律当作"没有截止时刻",wait 照原样走超时,
|
|
117
|
+
探针坏了绝不能把 wait 卡死。
|
|
118
|
+
- **只认"等待开始时还在跑"的目标**:早就过期的目标不参与自动取消 ——
|
|
119
|
+
否则一个用完预算的目录会永远等不了(每次 wait 都秒回),那不是"到点取消",
|
|
120
|
+
是把目录焊死了。这种情况该由 agent 自己的 `timegoal check`(`reached:true`)处理。
|
|
121
|
+
- **【不再显示超时多少】**。到点的目标以前在看板和归档区显示「已到点 · 超时 2:46:07」
|
|
122
|
+
这样**还在走的超时计时器**——一个已经结束的倒计时摆在眼前只会让人盯着它。
|
|
123
|
+
顺带把「已到点」也一起去掉了(见下条):**到点即失效,面板上不再显示**。
|
|
124
|
+
- **【超时了就自动失效】**。到点的目标现在**到点即失效**:
|
|
125
|
+
- 面板上**彻底消失**——看板行的时间目标格留空(不是「已到点」,也不是谎称「未设置」,
|
|
126
|
+
失效与"从没设过"是两件事),「已到点自动归档」区整个删掉,悬停有说明。
|
|
127
|
+
一个已经结束的目标不该继续占着界面。
|
|
128
|
+
- **不可复活**:`timegoal update` 不再能把已到点的目标救回来(到期就是失效),
|
|
129
|
+
要继续这个目录的工作请用 `timegoal set` 开新一局(起点从现在重算)。
|
|
130
|
+
- **到期自动清**:超过保留期(默认 7 天,`NX_KV_TIMEGOAL_RETENTION_SEC` 可调)
|
|
131
|
+
后**整条删掉**(连提示词原文一起),**不需要任何人再去点「彻底清除」**。
|
|
132
|
+
实际落盘点是下一轮 `timegoal check`(或 set/update/clear)——读路径刻意不写盘,
|
|
133
|
+
避免面板每 1.5s 轮询覆写整个文件、冲掉并发的 CLI 写入。
|
|
134
|
+
- ⚠️ **契约变更**:早期版本在保留期后**只丢日志、提示词永久保留**(防的是
|
|
135
|
+
"机器关机一周回来,agent 最后一轮 check 读不到根指令")。现在改成整条删掉,
|
|
136
|
+
也就是**到期即自动失效**。保留期内(默认 7 天)提示词仍读得到,agent 最后一轮
|
|
137
|
+
收尾不受影响;想留更久就把 `NX_KV_TIMEGOAL_RETENTION_SEC` 调大。
|
|
138
|
+
- **队列里记录「发布 → 被领取」的时间差**。任务本来就有 `createdAt` / `consumedAt`,
|
|
139
|
+
现在服务端把它算成派生字段 `pickupSec`(还没被领的是 `null`——那是"还在等"),
|
|
140
|
+
面板上:
|
|
141
|
+
- 待领取表显示「已等 27 小时 02 分」(发布至今,面板每 1.5s 刷一次);
|
|
142
|
+
- 已领取历史显示「等 1 分 43 秒 被领」(实际差值),和原有的领取审计
|
|
143
|
+
(来自哪个池 / 被谁领走)放在一起——这条任务在队列里躺了多久,一眼可见。
|
|
144
|
+
- 格式带单位("4分31秒" / "1小时02分"),**不用** `m:ss` —— 之前踩过:
|
|
145
|
+
紧凑时钟用在时长上会被读成"5:47 是 5 分还是 5 小时"。
|
|
146
|
+
|
|
147
|
+
### Fixed
|
|
148
|
+
|
|
149
|
+
- **【面板上「这个任务我删不掉」】**。软删除的任务**仍然留在「待领取」表里**:
|
|
150
|
+
视图只按 `status` 过滤、没排除 `deletedAt`,于是点了删除行纹丝不动(`deletedAt`
|
|
151
|
+
又被设成同一个值),再点也没反应。服务端派发本来就按 `!deletedAt` 过滤
|
|
152
|
+
(不会把删掉的任务发给 agent),**只有面板这一层是错的** —— 现在两边口径一致:
|
|
153
|
+
删掉的任务从「待领取」「已领取」两处消失,只在「已删除」区里可恢复/彻底清除。
|
|
154
|
+
拆分口径抽到 `board.js` 的 `splitQueueTasks()`,单测钉住。
|
|
155
|
+
- **队列计数把软删除的行算成了「已领」**:面板用 `total - pending` 算已领,
|
|
156
|
+
而 `total` 含软删除的行(全局池 35-4=31,实际已领 30、已删 1)。改用
|
|
157
|
+
`active.consumed`,并把「已删 N」单列出来。
|
|
158
|
+
- **【本地任务页在浏览器里整页报错——`<CliHints is not defined>`】**。`localtask/view.jsx`
|
|
159
|
+
用了 `<CliHints>` 却从来没 import 它,整个「本地任务」页一直倒在错误边界上,
|
|
160
|
+
点开就是"这个面板出错了"。一行 import 修好。
|
|
161
|
+
- **全局任务池:空池子也能加任务、历史也看得见**。以前全局主题只有真的往池子里
|
|
162
|
+
投过任务才会出现在看板上——池子空着的时候用户**找不到往全局池加第一条任务的
|
|
163
|
+
入口**;而且全局行没有「任务」按钮,全局池的队列根本打不开,已领取的历史也看不到。
|
|
164
|
+
现在目录看板**恒有一行「全局任务」**(视图层合成占位,不写 store),全局行的队列
|
|
165
|
+
可以直接打开,待领取与已领取的历史都列在表里。
|
|
166
|
+
- **提交逻辑不再有"静默投错池子"的中间态**。以前「选中目录」+「勾了全局」两个状态
|
|
167
|
+
各管一半,切目录时勾选还留着,任务会静默投进全局池。现在只有**一个投递目标**
|
|
168
|
+
——工具栏的「投递到」下拉(全局任务池 / 各目录),改哪儿任务就投哪儿,
|
|
169
|
+
提交区还会明写这一条投给谁、谁能领。
|
|
170
|
+
- **队列历史不再淹没"还有几条没人领"**。以前所有任务平铺一张表,历史一多就淹没了
|
|
171
|
+
待领取的那几条。现在队列表拆成两段:**待领取**默认展开,**已领取历史**折叠在下面
|
|
172
|
+
(可展开复盘,含上一轮完成总结),表头也分开显示「待领取 N · 已领取 M · 共 K 条」。
|
|
173
|
+
- **面板的待领取队列改成按"领取顺序"排**(与 CLI 的 `#1 -> #2 -> #3` 一致)。以前面板
|
|
174
|
+
做了倒序,于是**最上面那一行其实最后才被领**,点「提前」把某行提到前面、屏幕上它
|
|
175
|
+
反而下移——看着像坏了,其实顺序反了。
|
|
176
|
+
- **任务删除变成可恢复的软删除**。删除前是最容易让人后悔的一步,而"恢复"只要一条命令:
|
|
177
|
+
`nx-kv localtask task restore --id <编号>`(HTTP `POST /api/localtasks/tasks/restore`)。
|
|
178
|
+
被删的任务仍留在队列里(带 `deletedAt`),面板上有「已删除(N 条,可恢复)」折叠区。
|
|
179
|
+
软删除的任务**不会被 wait 领走**,编号也不会被复用。
|
|
180
|
+
- **删目录队列时,若还有未领取的任务会默认拒绝**(报错里带上条数,`--force` 仍可强删)。
|
|
181
|
+
参考 Kanboard 的泳道保护:队列里还堆着没人领的活,不能一声不吭地清空。
|
|
182
|
+
批量删除新增跳过原因 `has_pending`。
|
|
183
|
+
- **领取审计**:任务记下 `claimedFrom`(local/global 池)与 `claimedBy`/`claimedByName`
|
|
184
|
+
(谁领的)。全局池里的任务被别的目录的 agent 领走时,事后能看出"这条是谁干的"。
|
|
185
|
+
- **看板每行分开显示「待领取 / 已领取 / 已删除」计数**。
|
|
186
|
+
- **`localtask reorder` 连字符写法也认**:`--before-id` / `--after-id` 之前 help 里写着、
|
|
187
|
+
实际一敲就报「未知参数」——文档与实现对不上,用户第一次用就踩。现在两种拼法都可用。
|
|
188
|
+
- **wait 打开的深链能落到正确的页面并选中队列**。`#/localtask?key=…&cwd=…` 之前因为
|
|
189
|
+
前端拿整条 hash(含 query)去比对视图 id,必然对不上 → 弹窗停在不相干的页面、
|
|
190
|
+
也选不中任何主题。现在剥掉 query 再比对,并按 key/cwd 选中并展开对应队列。
|
|
191
|
+
- **CLI `localtask events` 不再必崩**:以前那条命令只做 SSE,直接摸 `ctx.__raw.req`——
|
|
192
|
+
而 `__raw` 只在 HTTP 传输下注入,CLI 进程里是 undefined,跑一次就崩。现在按传输
|
|
193
|
+
分流:HTTP 走 SSE,**CLI 走逐行 NDJSON**(一行一个事件,Ctrl+C 结束)。
|
|
194
|
+
- **CLI `localtask presence` 现在真能报数**:SSE 连接只存在于 `serve` 进程里,
|
|
195
|
+
CLI 查自己的进程内计数**恒为 0**(这条命令形同虚设)。现在 CLI 去问常驻主面板,
|
|
196
|
+
返回值带 `source` 标明数据来自哪儿(`panel` / `self`)。
|
|
197
|
+
- **`--cwd` 与 `--key` 指向不同主题时直接报错**。以前静默以 key 为准——改错一个 key
|
|
198
|
+
就动到了别的目录的队列,没人会发现。两者指向同一主题时(脚本常见写法)照常工作。
|
|
199
|
+
- **「现状」拆成两个字段**:agent 的当前现状(`summary`)与提交方留下的补充说明
|
|
200
|
+
(`submitSummary`)不再抢同一个字段。以前谁后写谁覆盖,面板上的现状会乱跳。
|
|
201
|
+
- **面板首屏还没拿到数据时把话说清楚**("正在连接本机服务…"),别让用户以为面板坏了。
|
|
202
|
+
- **切回浏览器标签时立刻刷新看板**(`visibilitychange` → 重新拉数据)。浏览器会把后台标签的
|
|
203
|
+
定时器节流(实测节流到 ~60s,更久还会冻结页面),1.5s 的轮询可能停摆很久——
|
|
204
|
+
用户切回来看到的应该是**当下**的队列,而不是几分钟前的快照。
|
|
205
|
+
- **正在用的面板不会再被自动释放**。`serve --auto-exit` 的空闲看门狗要靠"最后一次面板
|
|
206
|
+
活动"判断,但活动钩子一直是空函数 → 空闲时长其实从**进程启动**算起,用户正用着面板
|
|
207
|
+
也会在 10 分钟后被杀掉。现在每个面板请求都会上报活动。
|
|
208
|
+
- **`localtask events` 可以划边界了**:新增 `--timeout <秒>`(最长监听多久)与
|
|
209
|
+
`--limit <条>`(最多输出几条),agent 不必再靠 Ctrl+C 掐断长连(对标
|
|
210
|
+
`gh run watch --exit-status`)。两个 flag 都是新增,不给就是原来的无限流。
|
|
211
|
+
- **面板的超时下拉不再空白**:CLI 接受 1-600 任意秒数(`--timeout 90`),但下拉只有
|
|
212
|
+
6 档,值不在档位里时浏览器会显示**空白下拉**,看着像没设置。现在当前值会补成一项。
|
|
213
|
+
- **看板的目录计数不再把全局池算成目录**("N 个目录 + 全局池"),与 CLI `list` 的口径对齐。
|
|
214
|
+
- **presence 现在看得见所有面板**。以前只问默认端口(7877)上的那一个:`serve --port`
|
|
215
|
+
或端口被占自动顺延出来的面板完全看不见 → wait 以为"没人开着面板"而多开一个窗口。
|
|
216
|
+
现在 `serve` 起来时把自己登记进 `~/.nx-kv/panels.json`(**不是 store,不碰 schema**),
|
|
217
|
+
presence 逐个探测所有端口再求和,探不到的登记顺手清掉。
|
|
218
|
+
- **presence 还多报一个 `panelActive`**:SSE 只挂在「本地任务」页,用户切到别的页 SSE 就断了,
|
|
219
|
+
面板明明开着却报 0。现在用「最近有没有面板请求」(App 壳每 15s 打一次 `/api/ping`)兜底。
|
|
220
|
+
- **`localtask add --global --cwd <目录>` 不再静默忽略目录**:照旧按 `--global` 优先,
|
|
221
|
+
但返回值带 `ignoredCwd`,CLI 会明说"你给的 --cwd 未生效,任务进了全局池"
|
|
222
|
+
(gh/kubectl 遇到矛盾参数会直接报错;这里为不打断既有脚本选择"照做 + 明说")。
|
|
223
|
+
- **四条删除路径现在共用同一套判定**(`deleteGuard`):全局共享池 / 等待中 / 有未领取
|
|
224
|
+
任务 → 都要 `--force`。以前「删主题」「批量删除」「prune」各写各的保护规则,
|
|
225
|
+
同一个动作在 CLI 与面板上表现不一致,看着像乱。CLI 命令与路由**一个没动**,
|
|
226
|
+
只是规则收敛到一处(prune 保留它原有的"只清旧脏数据"语义)。
|
|
227
|
+
- **SSE 帧加固**:带 `retry: 3000` 与单调 `id:`,浏览器断线重连能据此续传
|
|
228
|
+
(对齐 opencode 的 SSE 加固做法);另加 `X-Accel-Buffering: no`,避免代理缓冲。
|
|
229
|
+
- **软删除的任务可以彻底清掉**:`localtask remove --id <编号> --purge`(面板「已删除」区
|
|
230
|
+
也有「彻底清除」按钮)。默认仍是可恢复的软删除,`--purge` 才是终态。
|
|
231
|
+
|
|
232
|
+
### Fixed
|
|
233
|
+
|
|
234
|
+
- **【视觉】面板整体重做:从"通用后台模板"改成"仪表盘"**。原来是一套无差别的
|
|
235
|
+
黑白灰 + system-ui + 软阴影,标题、路径、计数、状态全是同一个字号层级,看起来像
|
|
236
|
+
模板而不像工具。现在:
|
|
237
|
+
- **机器数据一律等宽字体**(路径 / 编号 / 计数 / 倒计时),人读文字用无衬线,
|
|
238
|
+
标签用 Windows 自带的 Bahnschrift(DIN 风格窄体)——面板必须离线,所以不引任何
|
|
239
|
+
网络字体。
|
|
240
|
+
- **状态用色点 + 文字**,不再是一排填充色块(那是最"廉价后台"的做法);
|
|
241
|
+
有 agent 在等 = 绿点、等待中 = 琥珀点、全局池 = 墨点。
|
|
242
|
+
- **列标题变成仪表刻度**:小字号、加字距、全大写(拉丁文;**汉字不加字距**——
|
|
243
|
+
汉字加 letter-spacing 会把每个字撑开,像排版事故)。
|
|
244
|
+
- **数字用等宽字形**(tabular-nums),刷新时计数不抖;待领/已领/已删三个数分别加重。
|
|
245
|
+
- **行内操作默认半透明**,hover / 选中 / 聚焦时全亮——把"操作"从视觉噪音里挪出去。
|
|
246
|
+
- **队列表列宽写死**(以前没列宽,操作列把正文压到十几像素,正文竖着排成一根)。
|
|
247
|
+
- **空状态是设计过的**(虚线圆点 + 主副文案),不是"表没了"。
|
|
248
|
+
- 顶栏 tab 从分段胶囊改成下划线式(工具感),全局池徽章从实心黑改成描边徽章。
|
|
249
|
+
- 选中行用左侧一条实心标记 + 极浅底色(比整行高亮克制)。
|
|
250
|
+
- 活着的指示灯会呼吸(尊重 prefers-reduced-motion)。
|
|
251
|
+
- **【视觉】清单页(默认首屏)在窄面板里不再把每条备注压成一根竖线**:
|
|
252
|
+
三个桶(待办/已完成/冻结)在放不下时改为**竖排**(≤900px),备注最多两行。
|
|
253
|
+
以前在侧边栏宽度下,一条「后端 GET /api/v1/user/default-group…」的备注会
|
|
254
|
+
竖着排十几行——整屏没法扫。
|
|
255
|
+
- **草稿串目标**:为 A 目标写的文字,切到 B 目标后还留在输入框里,用户一点提交就把
|
|
256
|
+
**旧草稿投进了新队列**("这条本来要投给全局池"结果进了 nx-kv)。现在换投递目标时
|
|
257
|
+
清空草稿 —— 宁可少一次编辑,也不要投错。
|
|
258
|
+
- **新装的面板没有输入框**:工具栏已经写着投递目标,却找不到 composer(选择器的当前值
|
|
259
|
+
就是目标 → 不触发 change → 面板不开)。现在队列面板**默认打开**,一进来就能写。
|
|
260
|
+
- **到点的时间目标在看板行里显示「未设置」**:归档区明明写着"已到点",行里却说像从没
|
|
261
|
+
设过。现在行里显示「已到点(见归档区)」。
|
|
262
|
+
- **看板行按最近更新排序**:任意一次领取都让整张表重排,行在光标底下跳走。改为按
|
|
263
|
+
目录名排序(全局池仍置顶)。
|
|
264
|
+
- **「投递到」下拉与它控制的输入框隔着一整张表**(归档卡还可能楔在中间):下拉移到
|
|
265
|
+
输入框旁边。
|
|
266
|
+
- **文案里漏出 markdown 星号**(面板上直接显示 `按**目录名**认队列`)→ 去掉。
|
|
267
|
+
- **「超时 1:26」被读成 1 小时 26 分**(紧凑时钟用在了超时时长上)→ 改成人话时长。
|
|
268
|
+
- **「空闲」这个标签没有解释**(它说的是"没有 agent 在等",却挨着待领数)→ 加 tooltip。
|
|
269
|
+
- **归档区承诺「仍可查提示词与日志」却没有日志入口** → 补「日志」按钮(走 timegoal log)。
|
|
270
|
+
- **队列的路径显示会被同名目录覆盖**(队列按目录名识别,路径却"最后写入者赢"):
|
|
271
|
+
现在**第一个路径为准**(稳定),所有用过的路径记进 `cwds`,面板可如实展示。
|
|
272
|
+
- **`wait` 结果把轮询捡走的任务说成「实时回填」**:现在按 `delivered` 判,不再按
|
|
273
|
+
`queued` 反推(跨进程轮询捡走的那条其实来自队列)。
|
|
274
|
+
- **测试偶发失败**(等待中相关的用例用固定 sleep 60ms,机器一忙就漏):改成轮询到
|
|
275
|
+
状态真的出现为止,连跑两遍稳定 168/168。
|
|
276
|
+
- **前端终于有"未定义即报错"的护栏**:全局 `no-undef` 是关掉的(浏览器/Node 全局混用),
|
|
277
|
+
于是「用了没 import 的组件 / hook / 变量」只能靠运行时暴露——真实踩过三次,
|
|
278
|
+
每次都是**整页崩**(`CliHints is not defined`、`useMemo is not defined`、
|
|
279
|
+
`dialog is not defined`),而 lint 与单测全都放行。现在**前端单独开 `no-undef`**
|
|
280
|
+
(显式列出浏览器 + ES 全局表),并补了一条 `tests/unit/frontend-refs.test.mjs`:
|
|
281
|
+
扫描所有 .jsx,断言用到的组件与 React hook 都有来源。
|
|
282
|
+
- **timegoal 的 `getTimegoalLog` 之前只有测试没有实现**(`timegoal log` 命令一并补上)。
|
|
283
|
+
- **timegoal 列表不再吐每个目标的完整提示词**:归档区 N 个目标就是 N×20KB,
|
|
284
|
+
而面板每 1.5s 拉一次 list。列表只给一小段预览,完整原文用 `timegoal show --cwd`
|
|
285
|
+
按目录取(面板的「查看提示词 / 编辑目标」改为按需单取)。
|
|
286
|
+
- **timegoal 的读路径不再写盘**:`list` / `show` 原本会触发整文件覆写,而写盘只在
|
|
287
|
+
单进程内串行——面板每 1.5s 拉一次 list,和并发的 CLI `check` 存在互相覆盖的风险。
|
|
288
|
+
归档状态可从 deadline 推导,不需要读时落盘;只有真正写的路径才写。
|
|
289
|
+
|
|
7
290
|
## [0.10.1] - 2026-10-20
|
|
8
291
|
|
|
9
292
|
### Changed
|
package/README.md
CHANGED
|
@@ -140,6 +140,19 @@ nx-kv localtask add "<任务文本>" --cwd "<目标工作目录>" --json
|
|
|
140
140
|
(批量删除,`--keys/--cwds/--all`;等待中需 `--force`),面板上对应「本地任务」页。
|
|
141
141
|
纯本机协调、存本地文件(`~/.nx-kv/localtasks.json`),**不需登录后端**。
|
|
142
142
|
|
|
143
|
+
**全局共享池(工作窃取)**:除按目录划分的本地队列外,还有一个跨目录共享的
|
|
144
|
+
「全局任务池」。本地队列取不到任务时,任何目录的 `wait` 都自动去全局领
|
|
145
|
+
(显式传 `--cwd` 也不例外)——谁闲谁领。投递用 `--global`:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
nx-kv localtask add "<任务文本>" --global --json # 投进全局池,不限目录
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
面板上「本地任务」页的目录看板**恒有一行「全局任务」**(哪怕池子是空的),
|
|
152
|
+
用工具栏的**「投递到」**下拉直接切到全局池或某个目录,任务就投到那儿——
|
|
153
|
+
只有一个投递目标,不再有"勾了全局但选中的是目录"这种会静默投错池子的中间态。
|
|
154
|
+
全局池的队列也能直接打开,已领取的历史照常列在表里。
|
|
155
|
+
|
|
143
156
|
配套 skill(三件套各管一角;远程清单仍归 nx-kv 主 skill):
|
|
144
157
|
|
|
145
158
|
```bash
|
|
@@ -152,26 +165,39 @@ nx-kv skill install kv-localget # 领取侧:主动领取排给本目录的
|
|
|
152
165
|
|
|
153
166
|
把「AI 持续运行 N 小时」这类长任务**固化到工具里**,而不是散落在外部脚本:
|
|
154
167
|
|
|
155
|
-
每个**工作目录**绑定一个 timegoal =
|
|
168
|
+
每个**工作目录**绑定一个 timegoal = 「持续时长 + 一段完整全局提示词」。
|
|
156
169
|
|
|
157
170
|
```bash
|
|
158
171
|
# 开头设一次:3 小时 + 完整提示词(提示词会被原文固化到 store)
|
|
159
172
|
nx-kv timegoal set --cwd "$PWD" --duration 10800 --prompt "<完整全局提示词>" --json
|
|
160
173
|
|
|
174
|
+
# 时长按人话说:5h / 90m / 2d / 5小时 都认,纯秒数(10800)照样能用
|
|
175
|
+
nx-kv timegoal set --cwd "$PWD" --duration 5h --prompt "<完整全局提示词>" --json
|
|
176
|
+
|
|
161
177
|
# 每轮调一次:算出还剩多少时间,并把提示词【原文】回显给你
|
|
162
|
-
nx-kv timegoal check --cwd "$PWD" --json
|
|
178
|
+
nx-kv timegoal check --cwd "$PWD" --summary "<当前现状>" --progress "<完成度/下一步>" --json
|
|
163
179
|
# → { reached:false, remainingSec:10780, prompt:"<完整提示词原文>", deadline, ... }
|
|
164
180
|
|
|
165
181
|
# 提示词要改(agent 自我迭代 / 用户在面板上改)——只换提示词,保住计时起点
|
|
166
|
-
nx-kv timegoal update --cwd "$PWD" --prompt "<新版>" [--duration
|
|
182
|
+
nx-kv timegoal update --cwd "$PWD" --prompt "<新版>" [--duration 5h] --json
|
|
167
183
|
|
|
168
|
-
# 其余:show(仅查)/ clear(清空)/ list
|
|
184
|
+
# 其余:show(仅查)/ clear(清空)/ list(总览所有目录)/ log(回看每轮检查记录)
|
|
169
185
|
```
|
|
170
186
|
|
|
171
187
|
**为什么需要它**:长对话里 agent 一定会把自己手里的提示词改写、漂移、漏条件。
|
|
172
188
|
`check` 每次把 store 里的**原文**回显出来,agent 就没有"凭记忆发挥"的空间。
|
|
173
189
|
到点时 `reached:true`,agent 据此停手、收尾。
|
|
174
190
|
|
|
191
|
+
**时长上限 365 天**:`--duration` 最低 1 分钟、最高 365 天。24 小时的老上限挡掉了
|
|
192
|
+
"跑一晚上""连续优化几天"这类真实需求,现在不必再切天。
|
|
193
|
+
|
|
194
|
+
**到点自动回收**:目标过了截止时刻就**自动归档**——从看板/列表里消失,不再堆着;
|
|
195
|
+
但 `show` / `check` 仍查得到(agent 最后一轮照样拿到 `reached:true` + 提示词原文,
|
|
196
|
+
好写最终总结),归档满 7 天后自动丢弃**检查日志**、**提示词原文始终保留**。
|
|
197
|
+
`check` 还会报出 `overtimeSec`(已经超时多久),面板上显示「已到点 · 超时 2:13:45」,
|
|
198
|
+
不再是一句静止的"已到点"。每轮的检查日志只保留最近 200 条(总轮次与是否截断都
|
|
199
|
+
看得到,不静默丢历史),长跑任务不会把 store 撑爆。
|
|
200
|
+
|
|
175
201
|
**完全独立的模块**:独立 store(`~/.nx-kv/timegoals.json`)、独立命令族、
|
|
176
202
|
独立循环——不调用 `localtask wait`、不被它调用,两者可以同时跑。
|
|
177
203
|
面板上嵌在「本地任务」页(顶部「时间目标」汇总卡 + 每个主题卡里一行),
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: kv-timegoal
|
|
3
3
|
description: 把"AI 持续运行 N 小时(如 3 小时)"任务固化到 nx-kv 里——用 CLI 设置时间目标 + 完整全局提示词,每轮自动回显提示词原文避免长对话里 agent 漂移(防偏移),到点返回 reached:true,agent 据此停手收尾。timegoal 是独立模块(独立 store、独立循环、独立命令族),与 localtask wait 等任何其它机制都没有关系;UI 上嵌入在「本地任务」主题卡里只是为了方便查看,逻辑上完全不依赖。agent 可通过 `timegoal update` 自己迭代提示词、用户也可在 web 端动态编辑(都不重置计时器)。典型用法:设置 3 小时"调研开源 Redis 差距并逼近生产级数据库"任务;每轮调 subagent 找差距、写 CHANGELOG、调 update 改 prompt,调 check 看是否到点。触发词:timegoal、time goal、时间目标、3 小时、两小时、持续运行、定时任务、跑一晚上、强制 N 小时、N 小时任务、self-improve prompt、自我迭代提示词、agent 改自己的 prompt、到点自动结束、到点停手、循环任务、跑完为止、UX prompt 防漂移、防偏移。
|
|
4
4
|
---
|
|
5
|
-
|
|
6
5
|
# kv-timegoal — 把"持续 N 小时任务"固化到 nx-kv
|
|
7
6
|
|
|
8
7
|
一个带"到期硬出口"的循环:开头一次性 `set`,**完整全局提示词固化进 store**;
|
|
@@ -15,11 +14,15 @@ description: 把"AI 持续运行 N 小时(如 3 小时)"任务固化到 nx-k
|
|
|
15
14
|
|
|
16
15
|
```bash
|
|
17
16
|
nx-kv timegoal set --cwd "$PWD" \
|
|
18
|
-
--duration
|
|
17
|
+
--duration 5h \
|
|
19
18
|
--prompt "<完整全局提示词>" --json
|
|
20
19
|
```
|
|
21
20
|
|
|
22
|
-
- `--duration`
|
|
21
|
+
- `--duration` 持续时长,**1 分钟 - 365 天**。两种写法都认:
|
|
22
|
+
- **带单位**(推荐,跟人说话一致):`5h` / `90m` / `2d` / `5小时` / `1.5h`
|
|
23
|
+
- **纯秒数**:`10800`(= 3 小时,向后兼容)
|
|
24
|
+
- 上限从 24 小时放宽到 365 天:「跑一晚上」「连续优化几天」是真实需求,
|
|
25
|
+
不该被 24 小时卡住。
|
|
23
26
|
- `--prompt` 完整全局提示词,≤20000 字
|
|
24
27
|
- `--cwd` 绑定的目录(缺省用当前目录);**一个目录一个 timegoal**
|
|
25
28
|
|
|
@@ -42,7 +45,7 @@ nx-kv timegoal set --cwd "$PWD" \
|
|
|
42
45
|
|
|
43
46
|
```
|
|
44
47
|
每轮开始:
|
|
45
|
-
nx-kv timegoal check --cwd "$PWD" --json
|
|
48
|
+
nx-kv timegoal check --cwd "$PWD" --summary "<当前现状>" --progress "<完成度/下一步>" --json
|
|
46
49
|
→ { remainingSec, prompt, ... }
|
|
47
50
|
→ 把 prompt 字段当作本轮根指令(不要从对话历史里重新拼)
|
|
48
51
|
|
|
@@ -68,6 +71,7 @@ nx-kv timegoal set --cwd "$PWD" \
|
|
|
68
71
|
"reached": false, // true 即停手信号
|
|
69
72
|
"elapsedSec": 120, // 已用秒
|
|
70
73
|
"remainingSec": 10680, // 还剩秒
|
|
74
|
+
"overtimeSec": 0, // 已超时多少秒(到点后才 > 0)
|
|
71
75
|
"startedAt": "2026-10-19 20:31:12",
|
|
72
76
|
"deadline": "2026-10-19 23:31:12",
|
|
73
77
|
"now": "2026-10-19 20:33:12",
|
|
@@ -82,6 +86,8 @@ nx-kv timegoal set --cwd "$PWD" \
|
|
|
82
86
|
|
|
83
87
|
- 没设过 timegoal → `{hasGoal:false, reached:false, prompt:""}`(需先 `set`)
|
|
84
88
|
- 到点后 `reached:true`,goal 对象仍在;可继续 `check` 看 prompt,直到 `clear`
|
|
89
|
+
- 到点后目标**立即失效**:从活动列表与面板消失(`show`/`check` 在保留期内照样查得到);
|
|
90
|
+
保留期(默认 7 天)到后整条自动删掉(详见下面的「到点之后会发生什么」)
|
|
85
91
|
|
|
86
92
|
## 四条硬规则
|
|
87
93
|
|
|
@@ -99,24 +105,46 @@ nx-kv timegoal set --cwd "$PWD" \
|
|
|
99
105
|
## 完整命令清单
|
|
100
106
|
|
|
101
107
|
```bash
|
|
102
|
-
nx-kv timegoal set --cwd <dir> --duration
|
|
103
|
-
nx-kv timegoal update --cwd <dir> --prompt "<新版>" [--duration
|
|
108
|
+
nx-kv timegoal set --cwd <dir> --duration <5h|10800> --prompt "<...>" # 设/换(新起点)
|
|
109
|
+
nx-kv timegoal update --cwd <dir> --prompt "<新版>" [--duration <5h|秒>] # 改提示词/时长(保起点)
|
|
104
110
|
nx-kv timegoal show --cwd <dir> # 仅查(不算时间)
|
|
105
|
-
nx-kv timegoal check --cwd <dir>
|
|
111
|
+
nx-kv timegoal check --cwd <dir> --summary "<现状>" --progress "<完成度/下一步>" # 算时间 + 回显 prompt + 写一条日志
|
|
106
112
|
nx-kv timegoal clear --cwd <dir> # 清空
|
|
107
|
-
nx-kv timegoal list # 所有有 timegoal
|
|
113
|
+
nx-kv timegoal list # 所有有 timegoal 的目录(到点的单列在归档区)
|
|
114
|
+
nx-kv timegoal log --cwd <dir> # 回看每轮 check 的记录(现状/完成度/剩余)
|
|
108
115
|
```
|
|
109
116
|
|
|
117
|
+
> `check` **必须**带 `--summary` 与 `--progress`:每次检查都会往该目录的 timegoal
|
|
118
|
+
> 日志里追加一条(现状 + 完成度 + 剩余时间)。缺参数会直接报
|
|
119
|
+
> `缺少参数 --summary`——这是刻意设计的:没有现状的日志等于没记。
|
|
120
|
+
> 日志只保留**最近 200 条**,长跑任务不会把 store 撑爆。
|
|
121
|
+
|
|
122
|
+
### 到点之后会发生什么(自动失效)
|
|
123
|
+
|
|
124
|
+
- 目标过了截止时刻 → **立即失效**:从 `list` 的活动列表与面板上消失,
|
|
125
|
+
不再越堆越多(以前要手动点一次「回收已到点」)。
|
|
126
|
+
- 但**保留期内** `show` / `check` **仍然查得到**:agent 最后一轮照样拿到 `reached:true` +
|
|
127
|
+
提示词原文,能写完最终总结再停手。这就是"最后一轮还能读到"的保证。
|
|
128
|
+
- 保留期(默认 **7 天**)到后**整条自动删掉**(连提示词原文一起)——**不需要任何人
|
|
129
|
+
手动清理**。保留期可用 `NX_KV_TIMEGOAL_RETENTION_SEC` 覆盖(想留更久就调大)。
|
|
130
|
+
实际落盘点是下一轮 `check`(或 set/update/clear)。
|
|
131
|
+
- 失效的目标**不可复活**:`update` 会报错。**要继续这个目录的工作,请用 `set` 开新一局**
|
|
132
|
+
(起点从现在重算)。
|
|
133
|
+
- `check` 会额外返回 `overtimeSec`(已经超时多久)——**面板不显示它**(超时长是内部量,
|
|
134
|
+
摆一个已经停掉的钟在眼前只会让人盯着它)。
|
|
135
|
+
- 日志只保留最近 200 条;`totalChecks` 记总轮次、`logTruncated` 标记历史被截断,
|
|
136
|
+
截断是**可见的**,不会静默丢历史。
|
|
137
|
+
|
|
110
138
|
全部命令都支持 `--json`(推荐 agent 用)。
|
|
111
139
|
|
|
112
140
|
`update` 与 `set` 的区别:
|
|
113
141
|
|
|
114
|
-
|
|
|
115
|
-
|
|
|
142
|
+
| | `set` | `update` |
|
|
143
|
+
| ------------------ | ---------------------------- | -------------------------------- |
|
|
116
144
|
| 起点 `startedAt` | **重置**(计时从头算) | **保留**(已用时间仍算数) |
|
|
117
|
-
| 时长
|
|
118
|
-
| prompt
|
|
119
|
-
| 用途
|
|
145
|
+
| 时长 | 必填 | 可选(省略=不变) |
|
|
146
|
+
| prompt | 必填 | 必填 |
|
|
147
|
+
| 用途 | 开一局新的 | 迭代提示词 / 调整时长 |
|
|
120
148
|
|
|
121
149
|
`update` 改时长时:`deadline = startedAt + 新时长`。
|
|
122
150
|
|
|
@@ -130,7 +158,7 @@ nx-kv timegoal list # 所有
|
|
|
130
158
|
- **新建**:填目录 + 时长 + 提示词 → 创建
|
|
131
159
|
- **编辑**:改时长 / 提示词;默认**保留计时起点**,勾「重置起点」才从头计
|
|
132
160
|
- **清空**:删除该目录的 timegoal
|
|
133
|
-
- 状态列显示 `剩 mm:ss
|
|
161
|
+
- 状态列显示 `剩 mm:ss`,每 1.5s 自动刷新;到点后这一格**留空**(目标已失效)
|
|
134
162
|
|
|
135
163
|
**2. 主题卡里的 timegoal 行**:
|
|
136
164
|
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
│ 每一轮:
|
|
37
37
|
▼
|
|
38
38
|
┌───────────────────────────────────────────────────────┐
|
|
39
|
-
│ 1. nx-kv timegoal check --cwd "$PWD"
|
|
39
|
+
│ 1. nx-kv timegoal check --cwd "$PWD" \ │
|
|
40
|
+
│ --summary "<本轮现状>" --progress "<完成度/下一步>" │
|
|
40
41
|
│ ↓ 拿到 {remainingSec, prompt} │
|
|
41
42
|
│ 2. 把 prompt 字段当本轮根指令 │
|
|
42
43
|
│ 3. 干活(按 prompt 指令): │
|
|
@@ -81,8 +82,8 @@
|
|
|
81
82
|
硬性约束:
|
|
82
83
|
- 严禁超过本轮剩余时间预算(remainingSec < 30 时立刻停手、写总结、不开新轮)
|
|
83
84
|
- 严禁自己改 deadline;想缩短就 `timegoal clear` 再 `timegoal set`
|
|
84
|
-
- 每轮开始时先 `nx-kv timegoal check --cwd "$PWD" --json
|
|
85
|
-
`prompt` 字段当作本轮根指令;**不要从对话历史里重新拼**——以 store 为准
|
|
85
|
+
- 每轮开始时先 `nx-kv timegoal check --cwd "$PWD" --summary "<本轮现状>" --progress "<完成度/下一步>" --json`,
|
|
86
|
+
把返回里的 `prompt` 字段当作本轮根指令;**不要从对话历史里重新拼**——以 store 为准
|
|
86
87
|
- 写代码必须随附测试;测试失败的修补不计入本轮成果
|
|
87
88
|
```
|
|
88
89
|
|
|
@@ -94,29 +95,33 @@
|
|
|
94
95
|
WORKDIR=/path/to/your-project
|
|
95
96
|
cd "$WORKDIR"
|
|
96
97
|
|
|
97
|
-
# 1. set
|
|
98
|
+
# 1. set(时长可写 10800,也可写 5h)
|
|
98
99
|
nx-kv timegoal set --cwd "$PWD" --duration 10800 \
|
|
99
100
|
--prompt "..." --json
|
|
100
101
|
|
|
101
102
|
# 2. 立刻 check:reached:false
|
|
102
|
-
nx-kv timegoal check --cwd "$PWD" --json
|
|
103
|
+
nx-kv timegoal check --cwd "$PWD" --summary "刚起步" --progress "刚 set 完" --json
|
|
103
104
|
|
|
104
105
|
# 3. sleep 6s
|
|
105
106
|
sleep 6
|
|
106
107
|
|
|
107
108
|
# 4. 再 check:注意 elapsedSec 增加
|
|
108
|
-
nx-kv timegoal check --cwd "$PWD" --json
|
|
109
|
+
nx-kv timegoal check --cwd "$PWD" --summary "跑了一轮" --progress "继续" --json
|
|
109
110
|
|
|
110
111
|
# 5. update:只换 prompt,deadline 不动
|
|
111
112
|
nx-kv timegoal update --cwd "$PWD" --prompt "V2 改得更简洁" --json
|
|
112
113
|
|
|
113
114
|
# 6. check:prompt 已是 V2,deadline 仍是 1 小时后
|
|
114
|
-
nx-kv timegoal check --cwd "$PWD" --json
|
|
115
|
+
nx-kv timegoal check --cwd "$PWD" --summary "改完 prompt" --progress "继续" --json
|
|
115
116
|
|
|
116
117
|
# 7. 等到点(或手动改 store)后:reached:true
|
|
117
118
|
# (实操:把 ~/.nx-kv/timegoals.json 里 startedAt 改成 4 小时前)
|
|
119
|
+
# 到点后目标立即失效(面板上不再显示),但保留期内 show/check 仍查得到 —— 最后一轮照样能读到 prompt
|
|
118
120
|
|
|
119
|
-
# 8.
|
|
121
|
+
# 8. 回看每轮日志(现状 / 完成度 / 剩余)
|
|
122
|
+
nx-kv timegoal log --cwd "$PWD" --json
|
|
123
|
+
|
|
124
|
+
# 9. clear
|
|
120
125
|
nx-kv timegoal clear --cwd "$PWD" --json
|
|
121
126
|
|
|
122
127
|
# 全程不曾、也不需调过 localtask / todo / 等任何其它命令族
|
|
@@ -124,14 +129,17 @@ nx-kv timegoal clear --cwd "$PWD" --json
|
|
|
124
129
|
|
|
125
130
|
## 常见问题
|
|
126
131
|
|
|
127
|
-
| 现象
|
|
128
|
-
|
|
|
129
|
-
| `reached` 没翻
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
|
|
|
134
|
-
|
|
|
132
|
+
| 现象 | 原因 / 做法 |
|
|
133
|
+
| --------------------------------------- | ---------------------------------------------------------------------------- |
|
|
134
|
+
| `reached` 没翻 | 检查客户端时区或 set 时是否给了 `--duration` 过短(默认下限 60s) |
|
|
135
|
+
| check 报"缺少参数 --summary" | 每次 check 都要写一条日志,必须带 `--summary` 与 `--progress` |
|
|
136
|
+
| `reached` 翻 true 但 list 里看不到目标 | 到点即失效(活动列表只留未到点的);保留期内 `show`/`check` 仍查得到,`list --json` 看 `archived` |
|
|
137
|
+
| update 报"已经到点失效" | 目标已失效不可复活;要继续请用 `set` 开新一局(起点从现在重算) |
|
|
138
|
+
| update 失败"主题「X」尚未设置 timegoal" | 先 `set` 再 `update`;`update` 不创建 |
|
|
139
|
+
| clear 返回"无需清空" | 本来就没设过;这是 info 不是 error |
|
|
140
|
+
| 想换目录 | clear 旧的 → set 新的;目录(cwd)是绑定的 |
|
|
141
|
+
| 想中途换 task queue | **与 timegoal 无关**——本模块不参与队列,那是其它事 |
|
|
142
|
+
| 想同时用 localtask 等用户 | **可以同时跑**——两套独立循环、各管各的;timegoal 只关心自身 deadline |
|
|
135
143
|
|
|
136
144
|
## timegoal 的运行边界
|
|
137
145
|
|
package/assets/nx-kv/SKILL.md
CHANGED
|
@@ -146,5 +146,6 @@ $ nx-kv todo get --ref "旧记录" --topic fr # 或按主题收窄
|
|
|
146
146
|
| --- | --- | --- |
|
|
147
147
|
| [[agent-workflow]] | 要**领任务/收单**时——按主题拉待办、读上下文、与用户对齐意图、回填结果的完整 SOP | references/agent-workflow.md |
|
|
148
148
|
| [[todo-commands]] | 要**敲具体命令**、查退出码/数据结构/避坑时 | references/todo-commands.md |
|
|
149
|
+
| [[repo-registry]] | 要**登记本机仓库 / 看仓库看板编排**时——`nx-kv repo ...` / `nx-kv board ...`(仓库上下文也用作本地任务的上下文) | references/repo-registry.md |
|
|
149
150
|
|
|
150
151
|
**不要预先全读**:收单才读前者,查命令才读后者;平时它们不进上下文。
|