5 Commits
Author SHA1 Message Date
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00
admin 5d0745c470 项目管理界面:修列宽塌陷 + 工作区维度纠偏 + 卡片信息重排
一、修「卡片挤到一起去了」(用户 2026-10-06 报)
  真因=**嵌套 grid**:renderAll 写 `<div class="cols">` 而容器 `#cols` 本身就带
  `class="cols"` ⇒ 内层作为外层一个 grid item 先被压到 `min-width:auto`(399px),
  再在 399px 里自己切 4 列 ⇒ 每列 89px、卡片 67px,整块挤在左边一条。
  实测:col 89px / card 67px / 页高 3192px ⇒ 修后 card 377px / 页高 1415px。
  处置:renderAll 只铺列,⛔ 不再包一层。

二、修「卡片上下之间的距离太远」
  grid 默认 `align-items:stretch` ⇒ 12 张卡都在「已完成」、另三列空着却四列等高,
  整页虚胖。改 `align-items:start` ⇒ 每列各自撑高。卡片 gap 9→6、padding 10→8、
  `.col` 的 `min-height:160px`→0。

三、**工作区 / 目标 两个维度纠偏**(用户纠正:「下拉框是选工作区的 跟目标没关系」)
  改前:下拉写「全部(N 个目标)」而 N 取的是 `projects.length`=工作区条数 ⇒ 混了维度。
  改后:① 标签「项目」→「工作区」;② 选项文字=**目录名(+目标名)**;
        ③ 计数=「N 个工作区」;④ 概要条分开报「工作区 3 个 / 其中已登记目标 2 个」;
        ⑤ 装了机制的工作区**一律列出**(含未登记目标的,用户:「加载机制就可以显示」)。

四、修「显示的是目录名,应该是真正名称」
  `name = short or title` ⇒ 登记过 short 的区一律显示短名(`vibe-product`)。
  改 `title or short`;都没有 ⇒ 「未登记目标 · <dir>」(⛔ 不再印「(未命名 · …)」——
  用户原话「未命名 看不懂个是什么」)。
  ⚠️ 核实过:这不是收工操作的副作用(goal.json 的 title/short 收工前后逐字一致)。

五、卡片信息重排(用户:「工作区名称放到卡片下面」)
  末行单列工作区名(等宽字体)+ 本工作区角标;工作区名从 badge 堆里挪出来。
  本工作区卡片换色突出:判定来自服务端 `self`(启动器注入
  `DSH_PM_BOARD_SELF_WS`=启动器上两级),⛔ 前端不硬编码目录名。

六、修时间戳显示成 `1791957640.7257342`
  台账 `t_start`/`t_end` 有两种形态(ISO 串 / **纯数字 Unix 秒**),原 fmtWhen 只认前者,
  不匹配就**原样返回** ⇒ 印出一串乱数字。补:纯数字(1e9~4e9)走 Date 转本地时间。

另:A 方案(收工 vibe-product)已执行并取证 —— `--set-life 已完成` 自动调
supervise_stop,pid 432 真退出(tasklist 查无)、日志 35s 增量 0 字节(收工前每 32s +1357B)。
2026-10-06 09:38:28 +08:00
admin d97fb0fe84 项目管理界面:统一视图 + 提示收进「!」 + 数据时效可见
用户口径(2026-10-06 逐字)
- 「没安装机制的工作区不显示  黄字描述都放到 !号的图标中,不显示在工作台」
- 「这里分类不要按照工作区分了,记住 项目管理是统一管理」

改动
1. 统一视图(默认「全部」)
   - ⛔ 删掉「按工作区分块」,改为**一张四列看板**汇总本机所有目标的卡片
   - 归属改由**卡片上的「目标」标签**体现(.badge.goal),⛔ 不靠分区
   - 选择器默认「全部(N 个目标)」;选单个目标仍可切到单项目视图
   - 顺带删掉随分区一起废掉的样式(projgroup/pghead/lane* 等,共 15 行死代码)

2. 提示一律收进右上角「!」图标
   - 工作台上去掉所有黄字横幅(原来是 notice 容器)
   - 「!」无内容时淡显且不可点;有内容时点开弹层、点外面/Esc 关闭
   - 未装机制的工作区**彻底不显示**(含原来那行「扫到但没装机制 N 个目录」)
     ⚠️ 后端仍保留 `skipped` 字段(只给 CLI/取证用),UI 不再展示

3. 数据时效可见 + 自动刷新
   - 服务出快照时带 `epoch`;页面读数「数据 N 秒前」**只用服务的 epoch 算**,
     ⛔ 不用本地 Date.now() 顶上(否则刷新一次就"变新",看不出数据其实没动)
   - 超 15 秒 ⇒ 读数转黄(.is-stale),一眼看出"只是轮询、数据没动"
   - 每秒重画时效读数(⛔ 不重新取数)
   - 轮询自适应:数据有变化 ⇒ 3 秒一探;连续 3 次没变 ⇒ 放到 15 秒;一变立刻回收
   - 「刷新」按钮改手动模式:扫描中/已刷新有即时反馈(toast)

4. 操作反馈改一次性 toast(新建/删除/失败),⛔ 不常驻工作台

实测(浏览器侧,强刷新避开缓存)
- 6 张卡片全部落在一张四列板上,标签正确(本机协作 ×1 / vibe-product ×11)
- 四个列标题只出现一次(不再是每区一套)
- 「!」有 1 条内容、默认收起、点击展开、再点关闭
- 时效读数「数据 2 秒前」正常跳动
2026-10-06 09:17:17 +08:00
admin 89f820a0f8 项目管理界面:改为跨工作区 + 增删落地(回收站走 SHFileOperationW)
用户口径:「项目管理管的是本机所有工作区的项目 不是单个工作区的,可以
通过项目管理工具 创建新目标(新工作区),管理目标」。

数据面
- ⛔ 不再拉「单一上游看板」(并非每个区都起着 board.py ⇒ 会静默漏区)
- ✅ 直读各区文件:goal.json / tasks.json / collabd-state.json / collabd.config.json
- 「装了机制」判据=有 collabd.config.json 或 goal.json;跳过的也带出来
  (skipped 列表,同族 P0「作用域不许静默排除」)

增删
- 增:POST /api/create → init_workspace.py(骨架+目标登记)
- 删(轻):POST /api/delete{mode:"goal"} ⇒ goal.json 改名归档(可逆)
- 删(重):POST /api/delete{mode:"ws"} ⇒ 送系统回收站(可逆)

回收站:本机 gio/trash-put/trash 全没有,PowerShell Add-Type 被安全策略
拦 ⇒ 改走纯 ctypes 调 Windows Shell API SHFileOperationW。两个坑:
  ① pFrom 必须手搓双 NUL 结尾缓冲(LPCWSTR 会在第一个 NUL 截断)
  ② 判据⛔ 不是 rc==0 —— 实测成功时 rc 恒为 2(Shell 脏状态)⇒ 假报错。
     真判据=原路径不存在 且 fAnyOperationsAborted 为假

其它修复
- init_workspace.py 子进程输出按 GBK 解码 ⇒ 中文乱码 ⇒ 显式 encoding=utf-8
- 起服务只许触发计划任务(裸 & 活不过工具调用边界,被 SIGTERM)

实测:列表 3 个项目 + 12 个未装机制目录;增删两种粒度 HTTP 端到端全通;
      _pmtest-* 五个测试目录已进回收站且可恢复($I 元数据逐条核对)。
2026-10-06 09:01:10 +08:00
admin 1b68b1ac3f 项目管理界面:照 dsh-task-board 模式新建(目标=项目 · 只读复用现有看板 · 端口20100)
用户逐字:「不动现有任务会话看板 不是让你整体搬是照的他的模式做一个 项目管理的界面
          来管理 执行任务,目标等于项目」

- 新增 交付物/项目管理界面/{project-board.py,.html,-launch.py}
- 映射:目标→项目、任务类别→工作流、台账条目→卡片、会话→可跳转
- 数据源=现有看板已算好的 /board.json(⛔ 不重算、⛔ 不直读台账)
- 列=机制真实四态(待执行/执行中/有阻碍/已完成),⛔ 不硬套它那五列
- 现有看板 20099 / board.py / board.html 零改动
- 坑:pythonw.exe 下 sys.stdout is None ⇒ print/flush 崩(终端好、计划任务死)⇒ 加 _say() 兜
2026-10-06 08:23:15 +08:00