Dely0/dsh-personal-workbench ↗★ 30

@dely0/dsh-personal-workbench

DSH 个人工作台:日历 + 层级任务 + AI 澄清/拆解/执行/复盘 + AI 智能排序/日报周报 + 桌面提醒 适合想将DSH打造成集日程管理、任务拆解与AI执行于一体的效率终端。

패키지
@dely0/dsh-personal-workbench
호환성
미검증
Harness peer 범위
^0.1.5-rc.1
Cordis peer 범위
^4.0.1
버전
1.15.4
라이선스
MIT
최근 업데이트
2026. 9. 17.

같은 패키지 이름의 다른 저장소

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Dely0/dsh-personal-workbench

dsh-personal-workbench

npm version

A personal workbench plugin for DeepSeek Harness (DSH) Web. Turn your DSH into a calendar + task list + AI assistant workbench.

English · 简体中文


中文

这是什么

dsh-personal-workbench 是一个 DSH 个人工作台插件:

  • 📅 日历(周/月可切换)+ 任务列表(树状层级)
  • ✨ 自然语言快速录入,AI 澄清后自动生成任务
  • 🧠 每个任务可关联多个 AI 会话:澄清 / 咨询 / 拆解 / 执行 / 复盘
  • 🎯 AI 会话前可勾选本机已安装的 Skill,提示词自动注入“加载这些技能”的指令
  • ✅ 任务执行采用“AI 申请完成 → 用户验收”闭环
  • 🗂️ 每个任务一个 AI 会话工作区(默认工作区 + 任务名文件夹)
  • 📝 Markdown 任务描述、复盘记录、变更历史
  • ⏰ 到期提醒(页内横幅)
  • 🗄️ 归档区、任务恢复

数据完全存储在本地 ~/.dsh/workbench,不上传任何服务器。

截图

以下截图来自 v1.14.58 + DSH 0.1.5-rc.1(2026-09-13 实机拍摄)。 面板走官方槽位路径:侧栏入口由宿主渲染,面板从侧栏右侧铺开、不覆盖左侧导航。

今日(任务 + 今日容量)今日排序任务列表
今日任务今日排序任务列表
日历知识库点子
日历知识库点子
快速录入微信接入
快速录入微信接入

功能清单

任务

  • 任务字段:标题、Markdown 描述、类型、状态、优先级、截止时间、AI 策略、提醒、工作区
  • 无限层级子任务;今日 / 日历 / 列表三种视图
  • 任务页筛选/排序:关键词(标题/描述)+ 状态/优先级/类型下拉多选可组合筛选;支持截止时间/优先级/创建时间/标题升降序;筛选保留父子层级,归档列表共用
  • 任务类型、状态、优先级全部由字典表驱动,可自行扩展(设置页“字典管理”已支持新增/编辑/停用类型、状态、优先级、点子类型,默认项受保护)
  • 任务资料夹(1.15.1 起的新口径):任务没填工作区时,资料夹名用 - 而不是标题 —— 改标题不再留下孤儿目录、同名任务不再挤同一目录、标题里的特殊字符也不再直接变成目录名。 判定只看 ID 前缀;用户手填的工作区永不改写(老口径的标题型路径仍能被识别为自动路径, 见 docs/releases/v1.15.1.md 第 1 节)
  • 已完成 / 已取消任务不可再次执行

AI

  • 快速录入澄清:一句话 → 官方会话区进行需求澄清 → 生成待确认草稿。 可同时附带图片(PNG/JPEG/WebP/GIF,最多 10 张)与 PDF / DOCX(最多 4 份、单份 ≤ 5MB, 正文由服务端抽取后随提示词一起交给 AI);也能直接粘贴或拖入。 拖入不支持的文件、超过大小/份数上限时逐条给出中文原因,不会静默丢弃
  • 模型选择器(快速录入内):为本次澄清会话选模型(含 reasoning effort)。 宿主目录里没有模型的"收不收图"信息,所以由工作台补一张能力对照表: 选中未声明 image 的模型还带了图,会在发送前给出可读中文拒绝 (否则宿主会把图片悄悄换成一行占位文字,AI 根本看不到图)
  • /workbench 斜杠命令:在官方输入框打 / 就能看到 workbench(走宿主原生命令注册, 因此进原生 / 菜单);执行后当前会话直接进入澄清流程。 命令侧会先按 - 建好任务资料夹,并把同一个 id 写进提示词
  • AI 咨询:对任务提问、要建议(不执行)
  • AI 拆解:生成子任务提案树,确认后落库
  • AI 执行:任意节点(含父任务)且 AI 策略为“可执行”时均可执行;AI 完成后提交验收申请,用户验收后才算完成;父任务验收通过时未完成子任务会级联完成
  • 验收「暂存」:验收弹窗除「验收通过 / 驳回」外新增「暂存(先验证)」——草稿仍是待确认状态,但不再自动弹窗打断你;你先去跑回归测试,之后从「待处理」弹窗的「已暂存」段点「继续验收」唤回。仅验收类草稿(完成验收申请 / 复盘草稿)支持暂存
  • 驳回有痕、AI 可见:驳回或暂存都会写入任务事件与任务共享记忆;workbench_request_completion 支持 feedback 参数,返回里会告知「本次是第几次提交、上次被驳回/暂存于何时、原因」,AI 不必等你口头转述
  • 草稿通知推送微信:AI 提交草稿(验收申请 / 复盘 / 日报周报 / 知识 / 点子提案)时可经微信推送,复用任务提醒同一条通道与策略(静默时段、小时/日上限、汇总、熔断、未装 dsh-im 静默降级);默认只开「验收申请」与「复盘草稿」,可在设置页按类型开关
  • Skill 选择器(AI 会话前加载技能):发起 AI 执行/协助/拆解/复盘/排序/报告等会话前,提示词弹窗内可直接勾选本机已安装的 DSH Skill(支持按名称/描述搜索、多选、点击标签移除);选中项会以“请加载这些技能”的指令注入到提示词开头,技能正文由 AI 通过 skill 工具按需加载。技能目录来自宿主 skills 注册表(GET /api/workbench/skills),宿主未安装该服务时选择器自动隐藏、行为与旧版完全一致
  • 状态聚合:所有子任务完成后父任务自动完成(递归到根);直接完成父任务会级联完成后代
  • 任务共享记忆:同一任务/子树下的多个 AI 会话共享上下文,父任务会话自动加载整棵子树记忆,避免跨会话失忆
  • 存量修复:提供 pnpm repair / POST /api/workbench/maintenance/repair-parents 幂等补齐历史父任务完成状态
  • AI 智能排序(任意日期):今日/日历任一日期一键生成执行顺序提案,确认后应用(不修改任务字段)
  • AI 日报/周报:基于任务事件与完成记录自动生成报告草稿,确认后保存并可回看、删除
  • 系统级桌面提醒:任务到期时在浏览器已授权的情况下发送系统通知(页面可最小化)
  • 重复任务:任务可设置每天/每周/每月重复,到期自动生成实例(模板归档即停止)
  • 个人知识库 / 错题集:经验教训、决策、笔记、片段沉淀为可搜索知识条目(**分类 Tab + 关键词搜索(标题/正文/标签)
    • 标签筛选 + 排序 + 分页,并按时间自适应分组**),复盘一键沉淀,AI 可提交知识草稿
  • 知识库会被会话 AI 自动用起来(1.15.2):按「任务标题+描述」在会话开始、按你的提问在每回合收尾各检索一次, 命中条目在下一回合以「【工作台知识库】…」出现在会话里(看得见命中了哪几条,也能看出它没被引用); 四个时机(开工前 / 报错时 / 写码前 / 验收前)AI 还会主动再查一次。可关闭:设置页有全局开关、 单会话可 turn_off;另有「召回日志」面板逐条记录检索了什么关键词、命中哪几条、是否被引用。 打分口径刻意做了两档闸门:过阈门的给完整块,没过的只给一行提示(明说"未达注入闸门、仅供参考"), 完全不相关的什么都不插 —— 宁可少给,也不拿噪声把提示词灌满
  • 点子文件夹:点子按「文件夹」组织——AI 可自动关联成文件夹,也能手动新建空文件夹、改名、删除、合并(A 并入 B),并把点子归入/移出一个或多个文件夹(多对多);「未归类」区收散点子,文件夹可整体转成任务树
  • 今日容量:今日页顶部把当天要做的事按预计耗时 × 优先级摊成一条时间轴,并与你设置的「每天可投入时长」(默认 6.5 小时,点击数字即可改)对比,一眼看出今天塞不塞得下。 (1.15.2)算法不再是个黑盒:点「⌄ 规则」展开就能看到七条口径(算哪些任务、截止时间如何沿任务树继承、 今天到期 / 无截止在推进怎么算、逾期默认不计入、没填耗时按默认多少算、全天任务为什么不改变计算)和一本 逐条账本(每条任务的分钟数 + 出处标记,表尾合计 = 已排);逾期任务单独成区并可一键计入(开关默认关)。 每条任务可自定义「预计耗时(1–1440 分钟)」,改完不刷新就能看到「已排」变化;没填的按可配置的默认耗时 (缺省 30 分钟,在设置里改)计入,账本里逐条标「按默认 N」。全天任务只影响显示与重复锚点,不改变容量计算。
  • 会话标题栏入口:通过 DSH 官方槽位 conversation.session.header.actions 在每个会话标题栏注册「工作台」按钮(切换开关,再点收起);DSH 侧栏入口同时保留
  • 知识库增强(AI 总结本地文档 + 文件链接):知识库页面支持弹窗浏览选择本地文件,也可直接填写本地文档路径或 file://;后端读取文档内容并让 AI 总结为知识草稿;知识条目可保存 file_link 并一键调用系统默认程序打开/追溯本地文件
  • 点子 / 点子王:灵感卡片快速记录;AI 自动找关联生成“点子王”;AI 头脑风暴后可确认转为任务
  • AI 复盘:已完成任务一键复盘,结论确认后写回任务
  • 同一任务只保留一个复盘会话;重复复盘进入同一会话

数据与安全

  • SQLite(~/.dsh/workbench/workbench.db)+ 每日 JSON 备份规划
  • 所有工作台 API 均挂载在 /api/workbench/* 且仅允许 loopback 访问
  • 请求围栏只有一份实现(src/api/http.ts:loopback 判定 + 响应 + 体积上限在流式读取途中拦截), 并有源码扫描测试证明"不存在第二处实现"(原先四份逐字相同的副本,改一处就会漏掉另外三处)
  • 所有工作台响应带 cache-control: no-store 与 x-content-type-options: nosniff (返回的是用户私有数据,不该被缓存;也不该让浏览器按内容猜 MIME)
  • 附件解析带解压炸弹护栏:解压前按声明值拦、解压时 maxOutputLength、解压后复核实际长度; base64 走 canonical 校验(宽松解码会静默丢弃非法字符)
  • 不读取、不上传 DSH 之外的任何数据

安装

前置条件

  • DeepSeek Harness 0.1.5-rc.1 及以上 Web 版 (这是硬边界:低于它面板整块不启动,理由见「兼容性与已知限制」)
  • Node.js ^22.19.0 或 >=24.0.0
  • pnpm >=11.7.0 ⚠️ **装完必须重启 dsh web`,刷新页面不够。**

客户端 bundle 由 dsh-client-modules 在宿主启动时读进内存 Map (bundleResource() 只查那张 Map),所以"装好了 → 刷新浏览器"拿到的是旧代码, 连 URL 上的 rev 都对不上。同理,升级/回退之后也都要重启。

从 npm 安装(推荐)

dsh plugin --profile web add @dely0/dsh-personal-workbench

或使用 npm 直接安装到项目:

npm install @dely0/dsh-personal-workbench

从 GitHub 安装

dsh plugin --profile web add git+https://github.com/Dely0/dsh-personal-workbench.git

或安装 Release tarball:

dsh plugin --profile web add file:/path/to/dsh-personal-workbench-.tgz

安装后重启 dsh web,浏览器硬刷新(Ctrl+Shift+R)。

从源码开发

git clone https://github.com/Dely0/dsh-personal-workbench.git
cd dsh-personal-workbench
pnpm install
pnpm check      # 类型检查 + 构建
pnpm test       # 最小回归测试(使用构建产物)

以开发模式挂载:

pnpm build
dsh plugin --profile web add link:/path/to/dsh-personal-workbench

开发模式修改代码后需要重新 pnpm build 并重启 dsh web。

参与开发:先读这份 skill

本仓库自带一份给 AI 编码助手用的开发规范 skill: .dsh/skills/dsh-plugin-change/。

它在 DSH 的项目级 skill 根下,clone 下来即自动被发现(优先级高于用户级 skill), 所以你和你的 AI 助手在改这个仓库时,会按同一套规矩走。内容包括:

  • 架构硬约束:两半两入口、依赖方向(哪些模块不许 import React / 不许碰 DOM)、 允许写哪些 DOM 的白名单、文件规模红线、数据库写入契约, 以及一张"不许做 / 必须做 / 谁拦它"的速查表;
  • 编码规范:单一权威源与派生、纯逻辑与组件解耦、政策要变成"会失败的测试"、 失败必须可观测、幂等与副作用时机、静默丢件的禁区、可选服务分两级、删除与重构的顺序;
  • 交付流程:装盘/版本回退的门禁、"客户端改动必须重启宿主"、 验收判据为什么会变成假阴性、发布与回滚纪律;
  • 事故档案:13 起真实事故的"现象 → 根因 → 下次怎么避免"。

这些不是风格偏好,每条都对应一次真实事故(整机 DSH 起不来、面板整块消失、发布后前端崩溃)。 如果你用别的 AI 编码工具,也可以直接把 SKILL.md 及其 references/ 喂给它 —— 内容与工具无关,讲的是这个代码库的规矩。

兼容性与已知限制

滚动维护的已知问题与待办清单见 docs/issues/2026-09-13-outstanding-issues.md。 本节只讲当前版本的依赖与支持边界。历史结论(DOM 降级腿、家族互斥)已随 v1.14.53 删除, 别照着旧文档配环境。

一句话依赖结论

项要求说明
DSH0.1.5-rc.1 及以上(Web 版)低于此版本客户端面板整块不启动(刻意如此,见下)
Node^22.19.0 或 >=24.0.0与 package.json 的 engines 一致
pnpm>=11.7.0 **服务端能力不受此限制**:任务/日历/知识库/点子、提醒、日报周报与 workbench_*` 工具

只需要 0.1.0-rc.6+。所以老宿主上你仍能用 AI 侧的工具与提醒,只是看不到面板界面。

支持的能力矩阵

能力需要的 DSH 版本拿不到时
服务端能力:任务/日历/知识库/点子、AI 会话关联、提醒、日报周报、workbench_* 工具0.1.0-rc.6+—
面板本体:sidebar.panellist + main + shell.overlay0.1.5-rc.1+面板整块不启动(打可读日志)
layout.selectPanel(面板选中状态由宿主单值状态管理)0.1.5-rc.1+同上
会话标题栏入口(官方槽位 conversation.session.header.actions)0.1.5-rc.1+无该按钮;侧栏面板行仍可用
官方 uiWorkspace.connectWorkspace(AI 会话切工作区)0.1.5-rc.1+回落 workspaces.openPath
微信提醒可选插件 @xmanrui/dsh-im静默降级为页内提醒 + 桌面通知
技能选择器宿主 skills 注册表选择器自动隐藏

历史说明(仅供对照,已不适用):v1.14.0–v1.14.52 曾支持 DSH 0.1.1-rc.1, 走的是"往侧栏 DOM 注入入口行 + 自建覆盖层"的降级腿。那条腿连同社区 「sidebar-entry 家族约定」(data-dsh- -entry / dsh-panel-activate / 摘兄弟 data-dsh-*-active)在 v1.14.53 整体删除。定稿设计见 docs/design/2026-09-13-client-architecture-official-only.md。

唯一的入口与面板路径(v1.14.53 起)

  1. 侧栏面板行注册到官方槽位 sidebar.panellist(kind=list、scope=root)—— 行按钮、Tooltip、aria-label/aria-current、行高与折叠态圆形全部由宿主 PanelRow 渲染, 本插件只提供图标(WorkbenchPanelIcon)。
  2. 中央面板注册到官方键槽 main,但只放一个返回 null 的空占位 —— 它存在的唯一理由是让 layout.selectPanel(id) 的校验通过。
  3. 真内容注册到 shell.overlay(框架级浮层,始终挂载)。 为什么不放 main:main 是键槽,activePanelId 一变宿主就卸载整棵子树, 而我们这棵树里装着跨页面常驻的草稿弹框 —— 关面板会连弹框一起消失 (用户实测"只能回到工作台页面才看得到弹框")。
  4. 面板显隐只有一个答案:decidePanel()(src/client/panelState.ts,纯函数 + 表驱动单测)。 宿主状态可读时只信 activePanelId,不可读时才退回本地意图。 data-open 属性由同一个函数派生(panelDataOpen()),所以"决策"与"投影"不可能打架。

没有第二条路径。 本插件不往宿主侧栏注入任何 DOM(test/clientInvariants.test.mjs 的 I6 钉住)。

判定"面板该不该显示"的只有一处实现(decidePanel());没有"走哪条路径"的选择逻辑了 —— officialSlotDecision() / officialPathConfirmed() 随降级腿一起删除。能力不满足就明确不启动。

硬规则:可选服务一律软探测

任何 DSH 服务,只要不是所有受支持版本都有,就必须 ctx.get('x') 软探测,绝不放进 inject、也绝不直接 ctx.x。 cordis 的 inject 语义是"缺一个就整个插件 pending", 把它当成"可选依赖"用会让插件在旧宿主上整体加载失败(前端表现为 Failed to load plugins)。

这条规则来自三次真实事故:v1.10.1 的 uiWorkspace、v1.13.0 的 runtime.slots、 v1.13.3 的再次根治;v1.13.1 的标题栏入口则是因为直接读 ctx.slots 而崩。

边界要分清:slots / layout / commands 是前置条件, 所以它们进 inject —— 拿不到就整块不启动(明说原因),而不是偷偷降级; uiWorkspace / dshIm / skills / modelDirectories / llm 是可选增强,一律软探测、缺了只是少一个能力。

⚠️ 一个容易搞反的点:ctx.get('x') 的确不需要把 x 写进 inject(cordis 的 get 文档原话是 "without the inject requirement";会抛 cannot get property "x" without inject 的是代理属性访问那条路)。 但服务端与客户端同一个 get 语义下,只有当提供方 fiber 处于活动态时才拿得到 —— 所以"要不要进 inject"仍应按上面这两级来分:缺了功能就不成立的进, 只是锦上添花的软探测(modelDirectories 就是后者:写进 inject 会让没装 dsh-client-ui-model-selection 的机器上整个面板 pending,丢整块换一个下拉框)。

其它

  • 入口只有一个:宿主渲染的侧栏面板行(sidebar.panellist)。会话标题栏按钮同样走官方槽位 conversation.session.header.actions。
  • 面板互斥由 DSH 宿主的 activePanelId 保证(layout.selectPanel 是单值状态)。 若同时使用不使用官方槽位、而以 DOM 接管中栏的插件(如 dsh-client-ui-task-board / dsh-ssh / dsh-mnemon),可能出现两个面板同时激活 —— 这是宿主缺少统一面板机制导致的已知限制,不是本插件的缺陷:那些插件没向宿主注册面板, 宿主的 activePanelId 无从知晓它们存在。因此本插件不做跨插件 DOM 协调: 不读、不写任何兄弟插件的 data-dsh-* 属性,也不广播/监听 dsh-panel-activate。 本插件只写两个自带属性(且幂等):与;test/clientInvariants.test.mjs 的 I4/I5 把这两条钉住。
  • 微信提醒依赖 @xmanrui/dsh-im:软探测(ctx.get('dshIm')),未安装或未配置投递目标时静默降级为页内提醒 + 桌面通知,不影响其它功能。
  • 技能目录依赖宿主 skills 注册表:未安装时 Skill 选择器自动隐藏。
  • 仅支持单用户本地使用;无云同步、无多用户权限体系。
  • AI 能力依赖你在 DSH 中已配置的模型与凭证;执行/咨询等会真实消耗 token。

遗留问题与已知限制

已知问题、待办与"已确认不是问题"的清单集中在 docs/issues/2026-09-13-outstanding-issues.md(滚动更新)。 下面只列与本版本最相关的两条:

  1. .pwtest/ 里有一批脚本是"架构变更前"写的(约 80 个长期迭代产物)。 家族互斥与 DOM 降级腿已在 v1.14.53 删除,verify-mutex-family.mjs / verify-board-takeover.mjs / verify-board-overlap.mjs / verify-stable.mjs 仍断言那些已删除的行为,跑起来会失败但那是假失败,别当成回归。 verify-acceptance.mjs 里示范了正确做法(反转判据 + 写清原因)。
  2. 客户端改动必须重启 dsh web 才生效 —— 不是"刷新页面即可"。 dsh-client-modules 的 bundleResource() 只从宿主启动时建好的内存 Map 取 bundle。 本地迭代走 node scripts/dev-install.mjs --apply(构建 → 打包到带构建戳的新路径 → 装盘 → 三道门禁),不要再改 package.json 的 version(版本号只在发布时增长); 装完重启 dsh web 并硬刷新浏览器。 ⚠️ 装盘产物是否真的刷新,只信 node scripts/check-installed-fingerprint.mjs(逐文件 SHA256): 实测同一 file: 路径下 pnpm 会复用已解包的文件(锁文件 integrity 变了、lib/ 还是旧的), 所以每次装盘都要落到一个没装过的新路径。

版本历史

详细发行说明(含依赖/支持边界、验收证据、踩坑记录):docs/releases/v1.15.3.md; 更早的见 docs/releases/。

版本要点
1.15.4文档版(与 v1.15.3 功能完全相同,无代码改动):补上 v1.15.3 贡献者的致谢(中英双段)与 THIRD_PARTY_NOTICES.md 条目。⚠️ 这个版本是一个判断失误,不要当先例 —— 事后确定的规矩是「只改文档/配置/测试等非编译内容时不单独发版,跟随下一个有代码改动的版本一起发布」;当时误以为"npm 页面渲染包内 README、又不能覆盖已发布版本,所以只能补发版本号",事实成立但结论错了(正确做法是发版前把文档核对干净)。规矩已写进 docs/release-checklist.md 第 5 节。
1.15.3合入社区反馈的三个缺陷修复(来自 @SnowNight777 的 #4 / #5 / #7 与 PR #6 / #8,提交作者署名保留)。任务提醒:原先只有"草稿确认时的父任务"与"手动接口"两条路径建提醒记录,于是草稿拆出的子任务 / POST 建任务 / PATCH 改截止时间建出来的任务永远不会提醒 —— 现在三处统一按「显式 offset → 类型默认 → 优先级默认」补建,PATCH 只在没有生效中提醒时补,避免重复(提醒按 offset_minutes 存、按 dueAt − offset 现算,不是存绝对时间,所以不会留下过期时间戳)。投递目标缓存:status().configured 读的是只在 resolveTarget() 里填充的内存缓存,而 GET /reminders/channel 只调 listOptions() ⇒ 重启后设置页把已绑定目标误报「未配置」,且 isTargetConfigured 为假让包括启动补发在内的所有任务提醒被静默跳过 —— 现在改为「缓存命中 → 数据库有显式绑定」两级(末行不要用 available() 兜底:那会让没绑过目标的用户从"安静地不做事"变成"安静地反复投递失败",由 test/reminderWiring.test.mjs 钉住)。复用型会话(计划 / 日报周报 / 点子关联 / 点子头脑风暴):登记或引用的会话被归档或删除后,点下去没有任何反应、且那行陈旧引用永不更新(该链路从此开不出会话)—— 根因是客户端拿着旧 session_id 直接切、不验可用性;新增纯判据 aiSessionReuse.ts#isAiSessionReusable()(归档集命中 / 列表 ready 却查不到 → 不可复用;列表 pending 或旧宿主缺快照 → 不下结论,零回归),覆盖五处裸切(含报告行自己的 sessionId 回退这条独立路径),不成立时落回新建或给明确提示。用例 521 → 534。
1.15.2本版对应父任务**「工作台插件 v1.15.2 版本优化」及其 5 个子任务 + 1 条同期独立任务**(完整对照见 docs/releases/v1.15.2.md §0)。① 快速录入的模型选择框被遮挡(P1):根因不是 z-index 而是裁剪 —— 浮层挂在弹窗滚动容器(overflow:auto)里、只会朝上开,真浏览器实测常见窗口可见比例仅 48%、1000×400 时菜单顶边 -94px 画到视口外;改为 portal 到 body + fixed + 纯函数 placePopover() 摆放(翻转/收敛/保证在视口内)+ 滚动·缩放·异步长高重算 + Esc 只关浮层 + ↑↓ 键盘。② 快速录入的默认工作区被上一次执行的任务污染(P1):根因不是"执行时写坏了存储",而是 openQuickEntry() 从当前选中任务派生默认值,而点「AI 执行」前 selected 必然就是那个任务、且面板收起不卸载 React 树;改为纯函数 decideQuickWorkspaceDefault(上次手动选择 → 系统默认 → 空,输入里没有任何任务/选中项)+ 只有用户动过输入框才写最近列表 + 「不再记住这个目录」出口。③ 今日容量的算法被摆到台面上(P2,本版最大一项):原先「已排 0 min」是个黑盒(内联在 4987 行组件里、无测试、逾期完全不参与),现在抽出纯函数唯一权威源 capacity.ts,界面给出七条口径 + 逐条账本(表尾合计 = 已排)、逾期单独成区并可一键计入(默认不计入)、每条任务可自定义耗时(改完不刷新即见效)、没填耗时按可配置的默认耗时计入并逐条标注、全天任务不改变容量计算。④ 知识库分类改 Tab(P2):下拉 → Tab + 关键词搜索(标题/正文/标签)+ 标签筛选 + 排序 + 分页 + 自适应时间分组;一并修「选择文件只能选 C 盘」;知识库类型颜色来自迁移 16 回填(根因是种子 config 为空、圆点取不到色)。任务列表按"与知识库一致"这一半做了类型改 Tab(Ctrl/Cmd 多选),搜索框/虚拟滚动/置顶/最近使用经澄清后取消(见该说明 §4 末尾)。点子页改 2 列卡片瀑布。⑤ 知识库被会话 AI 自动调用(P1):四个时机自动检索、命中条目在会话里可见、可全局/单会话关闭、有召回日志与"是否被引用"回报;打分口径被两轮实测逼出来,含两档闸门让未达阈门的条目也留一行提示。另:知识草稿覆盖不再静默(回执与界面列出被替换的标题,同期独立任务)、dev-install 不再删掉刚打好的包、私有信息清理。SCHEMA_VERSION 15 → 18(迁移 16/17/18)。用例 240 → 521。
1.15.1任务资料夹改用 -(旧口径按标题:改标题成孤儿、同名挤一个目录、特殊字符变目录名),澄清阶段先预留任务 ID 并复用它落库;**不再为每个任务注册