@veewo/dsh-better-tasks 0.0.0-stage → 0.4.4

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 dsh-better-tasks contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,65 @@
1
- # Temporary Holding Version
1
+ # Better Tasks for DSH Desktop
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ DSH 侧栏任务泳道:共享原生 Pin、独立任务输入、Final 预览与任务卡片问答。
4
+
5
+ ## 按 DSH 版本安装
6
+
7
+ **当前 rc.3 分发组合:DSH Desktop `0.2.2-rc.3` + Better Tasks `0.4.4`(Pre-release)。**
8
+
9
+ 修复子/孙 agent 仍运行时任务卡误显示 idle;选中会话标题使用 DSH 主题蓝色。安装必须取齐[rc.3 完整七包](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.3-tasks-v0.4.4>),按[rc.3 安装说明](<docs/install-rc3.md>)处理;npm 主包不是完整运行时组合。以下 rc.2 入口保留供仍在使用 rc.2 的用户。
10
+
11
+ 0.4.1 包含新任务排序与斜杠提交修复,必须同步更新主包和本 Release 的 conversation fork,见[安装说明](<docs/install.md>)。旧 [0.4.0 组合](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.2-tasks-v0.4.0>)保留供回滚。
12
+
13
+ | DSH Desktop 运行时 | Better Tasks | 完整安装入口 |
14
+ |---|---|---|
15
+ | `0.2.2-rc.3` | `0.4.4` | [dsh-v0.2.2-rc.3-tasks-v0.4.4](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.3-tasks-v0.4.4>)(会话活跃态与选中标题修复) |
16
+ | `0.2.2-rc.2` | `0.4.1` | [dsh-v0.2.2-rc.2-tasks-v0.4.1](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.2-tasks-v0.4.1>)(含输入框回退修复) |
17
+ | `0.2.1-rc.2` | `0.3.2` | [历史插件](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/v0.3.2>) + [对应 fork 库](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/better-tasks-forks-0.2.1-rc.2-r1>) |
18
+ | `0.2.0-rc.2` | `0.3.1` | [历史发行版](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/v0.3.1>) |
19
+
20
+ 新 tag 统一为 **`dsh-v<DSH版本>-tasks-v<Tasks版本>`**。先确认 Desktop「关于」中的完整运行时版本,再选对应 Release;同一 DSH 线的 Tasks 更新会创建新的组合 tag,旧包保留供回滚。不要跨 rc.1 / rc.2 / rc.3 混装,也不要仅按 GitHub 的 Latest 或 npm latest 安装。
21
+
22
+ **完整安装 = 插件本体 + 同一 Release 的六个 UI fork,共 7 个 `.tgz`。** 源码 ZIP 和单独 npm 包都不是完整安装包。六个 fork 保留原生包名,属于本项目兼容性修改,并非 DeepSeek 官方发行包。
23
+
24
+ 1. 从[当前 Release](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.2-tasks-v0.4.1>)取齐七包、`release-manifest.json`、`SHA256SUMS.txt` 和 `INSTALL.md`。
25
+ 2. 按[安装说明](<docs/install.md>)校验并备份自己的 Profile,配置 `nodeLinker: isolated` 与六个精确的 `publicHoistPattern`。
26
+ 3. 完全退出 Desktop(含托盘),安装七包,再手动启动验收。升级与卸载见[回滚说明](<docs/rollback.md>)。
27
+
28
+ 本次完整 Release 包含最新 `ui-user-questions` 修复。较早的 `better-tasks-forks-0.2.2-rc.2` 是历史 fork 库,不含这次最终修复,不要与本次七包混用。
29
+
30
+ ## Features
31
+
32
+ - Switch between the native Session browser and a task swimlane in the same sidebar; native search, Workspace grouping, rename, archive and directory operations remain.
33
+ - Native Pin membership is shared with official Session rows. Better Tasks persists a separate task-card order, not a second membership truth. New Session paths use the same native action and auto-Pin lifecycle hook.
34
+ - Cards keep the native running StateDot, localized relative time and current main-view selection. Clicking a card immediately opens its Session. Double-clicking its non-interactive area toggles Final: close immediately when expanded; open only when a current, nonempty Final preview is available.
35
+ - Final is a bounded, read-only Host projection (up to 4000 Unicode code points). The currently browsed task does not automatically expand Final for a new idle cycle; manual choices win, and navigation does not retroactively expand it. Cold startup catalog fallback/hydration does not erase saved choices or lower the consumed activity watermark.
36
+ - Independent native input surfaces let pinned idle tasks receive messages, commands and skill insertion without changing the main view. Hidden input retains its draft. Ordinary native questions can be answered inside cards through the same draft/settlement owner; plan-review approval stays in its native panel.
37
+ - Host-backed settings configure detail/question text size (11–16), default disclosures, native/tasks view, task/project title emphasis, and auto/single/double columns. Auto uses two independent vertical flows only above 528px. Input remains subordinate to expanded Final, rather than pretending every disclosure is display-independent.
38
+ - Native layout owns sidebar width and collapse. Its last positive width is retained. Windows caption controls remain reachable at zero-width collapse; macOS uses the legal frame-owned `shell.leading` reopen/New Session seat. Browser-style rails keep their existing behavior.
39
+
40
+ ## Distribution and provenance
41
+
42
+ Each combined release freezes one plugin version and six forks built for the exact upstream DSH tag. Original package names, ModuleLoader identities and licenses are retained; nothing is published to the upstream `@deepseek-ai` npm scope. The release includes sanitized archive/client SHA-256 values and upstream provenance. Existing tags and download URLs are never overwritten.
43
+
44
+ Source patches live under [src-patches](<src-patches/>), project-owned modules under [src-overlay](<src-overlay/>), and per-line upstream source facts in [versions](<provenance/versions.json>). For the forward-port procedure see [upgrading DSH](<docs/upgrading-dsh-version.md>) and [fork layers](<docs/fork-layers.md>). Release assets contain no real Profile backups, Session stores, credentials, runtime logs or workflow state.
45
+
46
+ ## Development
47
+
48
+ **仅在 `main` 上开发和提交**;不再维护按功能、发布或 DSH 版本划分的长期分支。已有分支仅保留历史引用。支持版本只由 `main` 上不可变的 `dsh-v<DSH版本>-tasks-v<Tasks版本>` annotated tag 与完整 Release 标记,`main` 的最新提交不等于已经发布或适配完成,详见[发布规范](<docs/release.md>)。
49
+
50
+ rc.3 的 HOC 与六个 fork 来源见[0.4.2 适配记录](<docs/dsh-0.2.2-rc.3-support.md>);0.4.4 在其基础上加入[会话活跃状态与选中标题修复](<docs/task-session-activity.md>)。精确七包哈希及启动结果随 Release 的 `validation.json` 交付。rc.2 入口保持不变,不混装旧 rc.3 产物或仅按 npm latest 安装。
51
+
52
+ 侧栏新增按钮、调整排版或适配新 DSH 前,先遵循[侧栏排版与适配规范](<docs/sidebar-layout.md>);数字、原生语义样式与版本合同分层维护。
53
+
54
+ Use Node **24+** for the source-contract tests (`stripTypeScriptTypes`) and install developer dependencies:
55
+
56
+ ```powershell
57
+ npm ci --ignore-scripts
58
+ npm run test:prepare # stage pinned, patched TS test sources; does not rebuild fork artifacts
59
+ npm test # build the main client, then run unit/contract tests
60
+ npm run check
61
+ ```
62
+
63
+ `npm run build:fork` is a deliberate source-fork rebuild for development, not a routine main release step. It uses the pinned upstream tag and official preset; revalidate changed bytes before deployment. `.srcbuild/` is generated and ignored. Never point a real Profile at the mutable checkout.
64
+
65
+ Technical unit/package/startup checks do not replace user acceptance. Desktop candidates must cold-start in isolated storage with Cindy disabled, and every sandbox process/listener must be removed before real installation. Functional and appearance acceptance belong to the user; the agent does not automatically restart the real Desktop.
@@ -0,0 +1,32 @@
1
+ # Removable fork layer. The six fork payloads are installed as profile dependencies from the
2
+ # better-tasks fork library release (see README); this patch disables the app's own rows and
3
+ # mounts the forks by their native package names, which the profile resolves at its root.
4
+ - id: ui-layout
5
+ disabled: true
6
+ - id: ui-sidebar
7
+ disabled: true
8
+ - id: ui-workspace
9
+ disabled: true
10
+ - id: ui-user-questions
11
+ disabled: true
12
+ - id: ui-input-trigger
13
+ disabled: true
14
+ - id: ui-commands
15
+ disabled: true
16
+ - id: ui-conversation
17
+ disabled: true
18
+ - insert:
19
+ - id: ui-layout-dbt
20
+ name: '@deepseek-ai/dsh-client-ui-layout'
21
+ - id: ui-workspace-dbt
22
+ name: '@deepseek-ai/dsh-client-ui-workspace'
23
+ - id: ui-user-questions-dbt
24
+ name: '@deepseek-ai/dsh-client-ui-user-questions'
25
+ - id: ui-input-trigger
26
+ name: '@deepseek-ai/dsh-client-ui-input-trigger'
27
+ - id: ui-commands
28
+ name: '@deepseek-ai/dsh-client-ui-commands'
29
+ - id: ui-conversation
30
+ name: '@deepseek-ai/dsh-client-ui-conversation'
31
+ - id: better-tasks-ui
32
+ name: '@veewo/dsh-better-tasks'
@@ -0,0 +1,68 @@
1
+ # DSH 0.2.2-rc.3 适配记录
2
+
3
+ > 以下保留 0.4.2 首次适配时的历史评估,不代表当前真实运行时仍是 rc.2。后续 0.4.4 / rc.3 组合加入会话活跃状态与选中标题修复,当前入口见[安装说明](<install-rc3.md>),其独立启动和包哈希证据随该组合发布;不复用本文旧候选的支持身份。
4
+
5
+ 评估/实施日期:2026-11-14。范围:从已发布 DSH `0.2.2-rc.2` / Tasks `0.4.1` 前向适配为 Tasks `0.4.2` / rc.3 候选,不改真实 Profile、不安装或重启真实 Desktop。
6
+
7
+ ## 结论
8
+
9
+ **适配实现在 main,候选组合为 Tasks `0.4.2` / DSH `0.2.2-rc.3`,标识 `dsh-v0.2.2-rc.3-tasks-v0.4.2`。** 主包已接通新会话行 HOC,配合最新源码重建的 rc.3 六包交付;不能把旧 rc.3 fork 或 Tasks 0.4.1 视为该候选。是否完成精确目标启动门禁、清理与包审计,以候选随附 `validation.json` 为准。参见[候选安装](<install-rc3.md>);本页不声称已上传 GitHub/npm 或完成用户验收。
10
+
11
+ 当前公共安装入口仍为 [rc.2 / Tasks 0.4.1](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.2-tasks-v0.4.1>)。此次合并主分支及评估不构成 rc.3 支持声明。
12
+
13
+ ## 1. 官方版本与证据
14
+
15
+ - [官方 Release](<https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.2-rc.3>):2026-11-13 15:56:55(Asia/Shanghai)发布,新增实验性 DeepSeek 会话导入,修复 Windows 应用内更新失败/无法重新打开。
16
+ - [官方对比](<https://github.com/deepseek-ai/deepseek-harness/compare/dsh-v0.2.2-rc.2...dsh-v0.2.2-rc.3>):6 个提交。目标 tag 指向 `38a6a5c965aa99ab525161efb7cc5cf1fe62fced`,与[版本来源登记](<../provenance/versions.json>)一致。
17
+ - 已核对本地目标源码归档 SHA-256:`bf6d668e52a26edf98aa2ef7960e240c8d9afcefbad2b09887a2cb1e14001dd5`。GitHub compare API 的文件列表达到 300 项上限,因此另用两份固定 tag 源码直接比较本项目涉及的目录,不能只依赖 API 前 300 项。
18
+ - 当前真实运行时 manifest 仍为 rc.2;不能用它的 Inspect 或旧沙盒记录证明 rc.3 运行通过。
19
+ - 两份源码的升级指南目录没有增量变化,rc.3 没有新增 `v0.2.2-rc.2` 指南;既有 `v0.2.2-rc.1` 条目属于离开 rc.1 的迁移,不重当成此次 rc.2→rc.3 的新增要求。本轮据目标源码核实下表接点;未调用的账号、CUA、终端等迁移无需改本插件。
20
+
21
+ ## 2. 真正受影响的接口
22
+
23
+ | 接点 | rc.2 → rc.3 的事实 | 本项目动作 |
24
+ |---|---|---|
25
+ | 原生侧栏新会话行 | 新增 `sidebar.session.action`,kind **hoc**、scope **root**、owner `{ wide }`;原生把 Tooltip/新会话按钮作为 `children` 传入 | 替代 root 必须声明该 child 并通过 `renderSlot(name, { wide }, { children })` 渲染;无 occupant 时保留原生按钮,权限仍由 `session/create` 控制 |
26
+ | Workspace picker | 新增 `workspace.picker` factory 与 `workspace.picker.directoryFlow` 子座位,供导入等插件复用;`WorkspacePicker.tsx`、contract、index 改变 | 保留目标上游的新注册和 picker,不复制 rc.2 整份 index 覆盖;现有 rc.3 workspace patch 作为起点 |
27
+ | Workspace 行/导航 | 此次目标源码未改动 rc.2 的行菜单/导航源文件 | 沿用 rc.2 overlay 形状,但重建时纳入最近的原生导航、Pin 等项目修复 |
28
+ | layout/questions/trigger/commands/conversation | 这五包的 `src` 在两个官方 tag 间未变;官方 client 构建预设也未变 | 可沿用源码接点,但不跨版本混用 fork tarball;questions/composer 回退和 conversation 仲裁 Promise 修复必须进入新的 rc.3 构建 |
29
+ | Session 接口 | API session-controller 的 `src` 未变;session-query 导出归档对缺失附件/流清理的实现有修改,但不改我们使用的 listEvents 接口 | 保留 native query/排序适配,不新造 Session 数据或导入业务 |
30
+ | DeepSeek 导入 | 实验性可选 bundle,通过新侧栏 HOC 入口和 workspace factory 工作 | 只恢复标准扩展接点,不硬 inject 导入服务、不默认启用,不复制导入/解析/持久化逻辑 |
31
+
32
+ 官方源码锚点:[侧栏合同](<https://github.com/deepseek-ai/deepseek-harness/blob/dsh-v0.2.2-rc.3/packages/client/ui-sidebar/src/client/contract/slots.ts#L76-L86>)、[HOC 渲染](<https://github.com/deepseek-ai/deepseek-harness/blob/dsh-v0.2.2-rc.3/packages/client/ui-sidebar/src/client/SidebarRoot.tsx#L381-L405>)、[Workspace 注册](<https://github.com/deepseek-ai/deepseek-harness/blob/dsh-v0.2.2-rc.3/packages/client/ui-workspace/src/client/index.ts>)。
33
+
34
+ 已在 [child 声明](<../src/task-model.mjs>)增加 root/hoc,并在[新会话行渲染](<../src/client.js>)使用第三参 `{children}` 透传 Tooltip/新会话按钮;整行仍受 `session/create` 权限保护。新行布局只容纳可选兄弟动作,不改变任务卡或新会话业务。无 occupant 时原生 renderer 原样返回按钮;不注册或硬依赖导入服务,rc.2 没有该 occupant 时同样安全。离线[HOC 回归](<../test/rc3-native-hoc.test.mjs>)执行带来源哈希的目标 renderer 摘录,覆盖无层回退、迟到注册及卸载;[导航回归](<../test/sidebar-navigation.test.mjs>)覆盖权限、children、宽窄状态和原生动作。它们不是完整浏览器或视觉验收。
35
+
36
+ ## 3. 为什么旧 rc.3 产物不能直接用
37
+
38
+ 实施前的[rc.3 六包目录](<../forks-0.2.2-rc.3/>)停在 `e172761`。此后已存在、且本次重建必须纳入的修复是:
39
+
40
+ - `948b0b6`:问答 composer 退出竞选,让原生输入回退;
41
+ - `2d2203a`:原生导航/新会话及默认排序修复;
42
+ - `5c34bef`:Tasks 0.4.1 的实际工作时间排序与斜杠仲裁 Promise/lifetime 修复。
43
+
44
+ 新的源码能复用 rc.2 overlay,不代表旧产物已自动更新。旧多版本文档的“沙盒门禁通过”只是一份历史候选记录,既没有证明最新七包,也不能凭候选包版本名证明 Host 本身运行在 rc.3;更不能替代目标 Desktop 浏览器核心激活证据。上一轮据此标记为 `port-required`;本轮实现升级为 `candidate`,不把状态字段当作独立运行通过凭据。
45
+
46
+ ## 4. 本次实施和验证顺序(全部在 main)
47
+
48
+ 1. 在主包按精确原生合同声明并渲染 HOC;缺 provider 时安全保留新会话,不增加启动等待。保持 rc.2 的现有入口与权限行为,不引入新的任务/Pin/宽度所有者。
49
+ 2. 添加离线单元/合同覆盖:HOC kind/scope、children 透传和无 occupant 回退、权限,及 workspace factory 未被 patch 丢掉。官方导入行为与视觉由用户验收,不增加沙盒功能探针。
50
+ 3. 更新 Tasks 版本与 lockfile;显式指定目标线,依次检查漂移并构建:
51
+
52
+ ```powershell
53
+ node scripts/check-upstream-contract.mjs --from-tag 0.2.2-rc.2 --to-tag 0.2.2-rc.3 --version 0.2.2-rc.3
54
+ node scripts/build-forks-from-source.mjs --build --version 0.2.2-rc.3
55
+ ```
56
+
57
+ 保留[rc.3 workspace patch](<../src-patches/ui-workspace/0.2.2-rc.3-better-tasks.patch>),不要直接修改 rc.2 的共享 patch。默认 source lock 仍为 rc.1,所有目标线命令必须显式传 `--version`,不能把默认测试线当成发布线。
58
+ 4. 全部约定改动完成后,集中做构建、语法、单元/合同、externals/包身份与来源检查。合同扫描的 `attachable` **不是**侧栏 HOC、named factory、权限或完整运行时的通过证明。复核 rc.2 回归,主包共享改动不得使已有支持线退化。
59
+ 5. 按[发布流程](<release.md>)打主包与 **rc.3 六包**,记录目标 runtime/tag、七包字节哈希和来源。用真正的 rc.3 Desktop/Host 和这七包冷启动:独立 Home/Profile/Session/ledger/Electron user-data、禁 Cindy;确认监听、核心浏览器 shell 激活、无启动错误/服务等待,再停止并确认清除所有自有进程/监听。若同时发布更新后的 rc.2 组合,该组合另需自己的证据。
60
+ 6. 只在门禁通过且七包/清单/安装/回滚/验证证据就绪后,从 `main` 创建新的 annotated 组合 tag 和 GitHub Release。旧 tag、旧资产保持不变;真实安装和用户确认重启另行处理。
61
+
62
+ HOC/离线回归、版本和文档修改完成后,统一做构建回归与七包审计,再用从官方签名安装包隔离解出的精确 rc.3 Desktop 验证启动;不执行安装程序、不替换真实应用。完整候选只在门禁通过后交付;实际命令、目标版本、浏览器错误、七包哈希与进程/监听清理结果记录在随包 `validation.json`。真实运行中的 DSH 与 Profile 不改动,功能/外观由用户验收。
63
+
64
+ ## 5. 分支与版本规则
65
+
66
+ `main` 是唯一开发入口;原 `release/0.3.0` 的 Tasks 0.4.1 最新提交以 fast-forward 合入,不 squash、不改写历史。旧分支只保留历史引用,不继续开发。
67
+
68
+ 支持身份只用 `dsh-v<DSH版本>-tasks-v<Tasks版本>` annotated tag。一个 commit 可有多条 DSH 组合 tag,但每个 tag 必须对应自己已验证的七包;源码目录、peer 区间、分支名和 npm latest 均不是支持版本标记。详见[发布规范](<release.md>)。
@@ -0,0 +1,94 @@
1
+ # 安装:DSH 0.2.2-rc.3 / Tasks 0.4.4
2
+
3
+ 组合标识:`dsh-v0.2.2-rc.3-tasks-v0.4.4`。完整七包见[固定版本 Release](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.3-tasks-v0.4.4>)。这是面向 RC 运行时的 Pre-release;npm 主包单独安装不能替代七包组合。以随包 `validation.json` 的目标版本、启动结果与清理结果为准;没有 PASS 记录的组合不得安装。不自动升级或重启真实 Desktop。
4
+
5
+ ## 1. 先确认目标运行时
6
+
7
+ 仅用于 **DSH Desktop `0.2.2-rc.3`**,不是 rc.2。请在 Desktop「关于」确认完整版本;CLI 必须来自同一版本的安装。不要把 rc.3 fork 装进仍在运行的 rc.2,也不要用 npm latest 补包。
8
+
9
+ rc.2 用户保留 [Tasks 0.4.1 七包](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.2-tasks-v0.4.1>),按[rc.2 安装说明](<install.md>)处理。本次 rc.3 适配不覆盖或撤回该版本。先完全退出旧 Desktop,按官方方式升级运行时;升级与本插件安装是两件事。
10
+
11
+ ## 2. 完整候选内容
12
+
13
+ 从固定版本 Release 下载全部独立资产(不是 GitHub 的 Source code ZIP),必须包含以下七包,及 `release-manifest.json`、`SHA256SUMS.txt`、`INSTALL.md`、`ROLLBACK.md`、`validation.json`:
14
+
15
+ - `veewo-dsh-better-tasks-0.4.4.tgz`
16
+ - `deepseek-ai-dsh-client-ui-layout-0.2.2-rc.3.tgz`
17
+ - `deepseek-ai-dsh-client-ui-workspace-0.2.2-rc.3.tgz`
18
+ - `deepseek-ai-dsh-client-ui-user-questions-0.2.2-rc.3.tgz`
19
+ - `deepseek-ai-dsh-client-ui-input-trigger-0.2.2-rc.3.tgz`
20
+ - `deepseek-ai-dsh-client-ui-commands-0.2.2-rc.3.tgz`
21
+ - `deepseek-ai-dsh-client-ui-conversation-0.2.2-rc.3.tgz`
22
+
23
+ 这些是保留原生包名和许可证的项目 fork,不是 DeepSeek 官方包。旧 rc.3 fork 库早于最近修复,不与本候选混用;源码 ZIP 不是安装包。
24
+
25
+ ```powershell
26
+ $ErrorActionPreference = 'Stop'
27
+ # 替换为刚解压且已经核对的组合目录;此步不修改 DSH。
28
+ $downloadDir = (Resolve-Path './dsh-v0.2.2-rc.3-tasks-v0.4.4').Path
29
+ $manifest = Get-Content (Join-Path $downloadDir 'release-manifest.json') -Raw | ConvertFrom-Json
30
+ $validation = Get-Content (Join-Path $downloadDir 'validation.json') -Raw | ConvertFrom-Json
31
+ if ($manifest.tag -ne 'dsh-v0.2.2-rc.3-tasks-v0.4.4' -or
32
+ $manifest.dshVersion -ne '0.2.2-rc.3' -or $manifest.tasksVersion -ne '0.4.4' -or
33
+ $validation.result -ne 'PASS' -or $validation.dshVersion -ne '0.2.2-rc.3' -or
34
+ !$validation.cleanupComplete -or @($manifest.assets).Count -ne 7) {
35
+ throw '候选版本、数量或启动验证不符;不要安装'
36
+ }
37
+ $expected = @('veewo-dsh-better-tasks-0.4.4.tgz')
38
+ $expected += 'layout','workspace','user-questions','input-trigger','commands','conversation' |
39
+ ForEach-Object { "deepseek-ai-dsh-client-ui-$_-0.2.2-rc.3.tgz" }
40
+ if (@(Compare-Object ($expected | Sort-Object) (@($manifest.assets.filename) | Sort-Object)).Count) {
41
+ throw '候选包名不符'
42
+ }
43
+ foreach ($asset in $manifest.assets) {
44
+ $path = Join-Path $downloadDir $asset.filename
45
+ if ((Get-FileHash -LiteralPath $path -Algorithm SHA256).Hash.ToLowerInvariant() -ne $asset.archiveSha256) {
46
+ throw "SHA-256 不匹配:$($asset.filename)"
47
+ }
48
+ }
49
+ '七包与 rc.3 启动证据检查通过'
50
+ ```
51
+
52
+ ## 3. 退出、备份与解析策略
53
+
54
+ 先完成任务,**手动完全退出 Desktop(含托盘)**。备份自己的 Profile 配置和旧七包;保留其余插件。默认 Profile 是 `~/.dsh/profiles/desktop`,自定义 `DSH_HOME` 使用实际路径。不要上传可能含凭据的备份。
55
+
56
+ 在自己的 Profile 中合并以下 `pnpm-workspace.yaml` 设置,保留已有其他配置,不盲目覆盖:
57
+
58
+ ```yaml
59
+ packages:
60
+ - .
61
+ nodeLinker: isolated
62
+ autoInstallPeers: false
63
+ publicHoistPattern:
64
+ - '@deepseek-ai/dsh-client-ui-layout'
65
+ - '@deepseek-ai/dsh-client-ui-workspace'
66
+ - '@deepseek-ai/dsh-client-ui-user-questions'
67
+ - '@deepseek-ai/dsh-client-ui-input-trigger'
68
+ - '@deepseek-ai/dsh-client-ui-commands'
69
+ - '@deepseek-ai/dsh-client-ui-conversation'
70
+ ```
71
+
72
+ 不要 hoist 全部 `@deepseek-ai/*` 核心包,不用关闭安全检查来绕过依赖错误。若此前 linker 不同,先确认绝对 Profile 路径并备份,仅清理其中可重建的依赖目录后重装;不删除 Home、Session 或 ledger。
73
+
74
+ ## 4. 同时安装七包
75
+
76
+ 仍使用刚核验的 `$downloadDir` 和 `$manifest`,通过与 Desktop rc.3 同版本的 CLI 安装:
77
+
78
+ ```powershell
79
+ $specs = @($manifest.assets | ForEach-Object { Join-Path $downloadDir $_.filename })
80
+ dsh plugin --profile desktop add @specs
81
+ if ($LASTEXITCODE -ne 0) { throw '安装失败;保持 Desktop 停止并恢复备份,勿强行启动' }
82
+ ```
83
+
84
+ 六个 fork 必须以 Profile 根依赖安装;主包不捆绑 fork。不要手工把 disable 行重复粘进用户 patch;由 bundle 管理替换层。安装失败不代表磁盘字节已回滚,须核对配置、实际依赖和备份;不要绕过 `not-bundle` 或版本拒绝。
85
+
86
+ ## 5. 启动、可选导入与验收
87
+
88
+ 手动启动同一套 rc.3 Desktop。启动证据仅确认核心 shell/侧栏/Session/Workspace/会话可激活,没有启动错误;**不代替用户功能和外观验收**。
89
+
90
+ 0.4.4 恢复 `sidebar.session.action` 原生 HOC 接点。没有可选 action 时新会话按钮不变;DeepSeek 会话导入仍是官方实验性可选 bundle,默认不由 Better Tasks 启用。需要时在插件页启用官方导入插件,其入口通过标准 HOC 出现在新会话行;工作区选择继续用官方 factory。创建会话权限不足时整行不渲染,Better Tasks 不拥有导入解析或 Session 持久化逻辑。
91
+
92
+ 0.4.4 还修复任务卡仅按主 agent 判断 idle 的问题:原生目录中已知子/孙 agent 仍在运行时保持 running;最后一个停止后恢复 idle。选中的会话标题改为官方主题蓝色,适配两种标题强调方式,卡片本身仍保留原来的状态色。并行开发的排序重构不在本次组合中,六个 fork 沿用 0.4.2 已验证字节。
93
+
94
+ 请自行验收上述状态和选中标题、原生新会话、任务 Pin/排序、独立输入、问答和斜杠提交;遇到异常保留那次 Console 堆栈。回滚见随包 `ROLLBACK.md` 或[回滚说明](<rollback.md>):先退出、恢复匹配 rc.3 的完整七包与配置;如退回 rc.2,必须把 DSH 运行时和原 rc.2 七包作为整体恢复,不能只降主包。会话、原生 Pin、排序、外观和设置数据不删除。
@@ -0,0 +1,156 @@
1
+ # 安装 Better Tasks:DSH 0.2.2-rc.2 / Tasks 0.4.1
2
+
3
+ > 本页对应完整 0.4.1 组合。升级必须同步更新主包和本 Release 的 conversation fork;仅重启或仅升级主包不能修复斜杠提交异常。完整命令统一安装本 Release 七包。
4
+
5
+ **当前公开完整安装入口:** [dsh-v0.2.2-rc.2-tasks-v0.4.1](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/dsh-v0.2.2-rc.2-tasks-v0.4.1>)。无需 clone 仓库或编译。
6
+
7
+ ## 1. 先选版本
8
+
9
+ | Desktop 的 DSH 运行时 | Tasks | 安装来源 |
10
+ |---|---|---|
11
+ | `0.2.2-rc.2` | `0.4.1` | 本文对应组合 Release,七包全部从这里取 |
12
+ | `0.2.1-rc.2` | `0.3.2` | [历史插件及其说明](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/v0.3.2>),配对应旧 fork 库 |
13
+ | `0.2.0-rc.2` | `0.3.1` | [历史发行版](<https://github.com/chanyuenpang/dsh-better-tasks/releases/tag/v0.3.1>) |
14
+ | `0.2.2-rc.1` / `0.2.2-rc.3` / 其他 | — | **不要安装本文七包**;需要该运行时单独验证的发行版 |
15
+
16
+ 在 Desktop「关于」确认完整 DSH 运行时版本;若使用 CLI,再核对 `dsh --version`,确保不是另一套安装。本文针对 Desktop 的 `desktop` Profile,不是旧版 Web Profile。Windows 命令在能执行 `dsh plugin` 的 PowerShell 终端运行;若命令不存在,请先配置与当前 Desktop 同版本的 DSH CLI,勿随意装 npm latest。
17
+
18
+ 今后的 tag 固定为 `dsh-v<DSH版本>-tasks-v<Tasks版本>`。先按 DSH 版本挑 Release,再在该线选择所需 Tasks 版本;不要把“Latest”当作所有 DSH 的兼容保证。插件 peer 区间只表示依赖门槛,不代表六个 fork 可以跨线通用。
19
+
20
+ ## 2. 下载并校验(此步不修改 DSH)
21
+
22
+ Release Assets 中应有七个 `.tgz`、`release-manifest.json`、`SHA256SUMS.txt`、`INSTALL.md` 和 `ROLLBACK.md`。GitHub 自动生成的 Source code ZIP/TAR 不是安装包。七包为:
23
+
24
+ - `veewo-dsh-better-tasks-0.4.1.tgz`
25
+ - `deepseek-ai-dsh-client-ui-layout-0.2.2-rc.2.tgz`
26
+ - `deepseek-ai-dsh-client-ui-workspace-0.2.2-rc.2.tgz`
27
+ - `deepseek-ai-dsh-client-ui-user-questions-0.2.2-rc.2.tgz`
28
+ - `deepseek-ai-dsh-client-ui-input-trigger-0.2.2-rc.2.tgz`
29
+ - `deepseek-ai-dsh-client-ui-commands-0.2.2-rc.2.tgz`
30
+ - `deepseek-ai-dsh-client-ui-conversation-0.2.2-rc.2.tgz`
31
+
32
+ 可浏览器手动下载,也可运行以下 PowerShell(不需要 gh 登录):
33
+
34
+ ```powershell
35
+ $ErrorActionPreference = 'Stop'
36
+ $tag = 'dsh-v0.2.2-rc.2-tasks-v0.4.1'
37
+ $base = "https://github.com/chanyuenpang/dsh-better-tasks/releases/download/$tag"
38
+ $downloadDir = Join-Path (Get-Location) $tag
39
+ New-Item -ItemType Directory -Path $downloadDir -Force | Out-Null
40
+ $files = @('release-manifest.json', 'SHA256SUMS.txt', 'INSTALL.md', 'ROLLBACK.md',
41
+ 'veewo-dsh-better-tasks-0.4.1.tgz')
42
+ $slugs = 'layout','workspace','user-questions','input-trigger','commands','conversation'
43
+ $files += $slugs | ForEach-Object { "deepseek-ai-dsh-client-ui-$_-0.2.2-rc.2.tgz" }
44
+ foreach ($file in $files) {
45
+ Invoke-WebRequest -UseBasicParsing -Uri "$base/$file" -OutFile (Join-Path $downloadDir $file)
46
+ }
47
+ # 校验七包,版本组合、文件名和数量不符时停止。
48
+ $manifest = Get-Content (Join-Path $downloadDir 'release-manifest.json') -Raw | ConvertFrom-Json
49
+ if ($manifest.tag -ne $tag -or $manifest.dshVersion -ne '0.2.2-rc.2' -or
50
+ $manifest.tasksVersion -ne '0.4.1' -or @($manifest.assets).Count -ne 7) {
51
+ throw '发行版本或安装包数量不匹配'
52
+ }
53
+ $expectedArchives = @($files | Where-Object { $_ -like '*.tgz' } | Sort-Object)
54
+ $actualArchives = @($manifest.assets | ForEach-Object { $_.filename } | Sort-Object)
55
+ if (@(Compare-Object $expectedArchives $actualArchives).Count -ne 0) { throw '安装包名称不匹配' }
56
+ foreach ($asset in $manifest.assets) {
57
+ $path = Join-Path $downloadDir $asset.filename
58
+ $actual = (Get-FileHash -LiteralPath $path -Algorithm SHA256).Hash.ToLowerInvariant()
59
+ if ($actual -ne $asset.archiveSha256) { throw "SHA-256 不匹配:$($asset.filename)" }
60
+ }
61
+ '七个安装包 SHA-256 校验通过'
62
+ ```
63
+
64
+ 校验用于确认下载完整性,清单与安装包应来自同一可信 Release。早期 `better-tasks-forks-0.2.2-rc.2` 的 questions 包不含本次最终输入框回退修复,请勿混用或从 npm 自动替换为官方同名包。
65
+
66
+ ## 3. 完全退出并备份 Profile
67
+
68
+ 完成正在运行的任务,手动完全退出 Desktop(包括托盘),确认旧进程已退出。安装和升级都在退出后进行,避免热替换 UI。
69
+
70
+ 默认 Profile 是 `~/.dsh/profiles/desktop`;自定义 `DSH_HOME` 时使用实际路径,不要备份/修改错目录。至少备份 `package.json`、`pnpm-lock.yaml`、`pnpm-workspace.yaml`、`cordis.yml` 和 `cordis.patch.yml`(存在的文件),并保留旧的完整安装包。备份只存自己机器,不要上传 GitHub。
71
+
72
+ ```powershell
73
+ $dshHome = if ($env:DSH_HOME) { $env:DSH_HOME } else { Join-Path $HOME '.dsh' }
74
+ $profileDir = Join-Path $dshHome 'profiles/desktop'
75
+ if (!(Test-Path -LiteralPath $profileDir -PathType Container)) { throw "请确认实际 Profile:$profileDir" }
76
+ $backupDir = "$profileDir.before-better-tasks-$(Get-Date -Format yyyyMMdd-HHmmss)"
77
+ New-Item -ItemType Directory -Path $backupDir | Out-Null
78
+ foreach ($file in 'package.json','pnpm-lock.yaml','pnpm-workspace.yaml','cordis.yml','cordis.patch.yml') {
79
+ $path = Join-Path $profileDir $file
80
+ if (Test-Path -LiteralPath $path) { Copy-Item -LiteralPath $path -Destination $backupDir }
81
+ }
82
+ "备份位置:$backupDir"
83
+ ```
84
+
85
+ ## 4. 配置 Profile 模块解析(必需)
86
+
87
+ 编辑自己 Profile 的 `pnpm-workspace.yaml`,**合并**以下配置;保留原有其他包、工作区与插件设置,不要盲目覆盖整个文件:
88
+
89
+ ```yaml
90
+ packages:
91
+ - .
92
+ nodeLinker: isolated
93
+ autoInstallPeers: false
94
+ publicHoistPattern:
95
+ - '@deepseek-ai/dsh-client-ui-layout'
96
+ - '@deepseek-ai/dsh-client-ui-workspace'
97
+ - '@deepseek-ai/dsh-client-ui-user-questions'
98
+ - '@deepseek-ai/dsh-client-ui-input-trigger'
99
+ - '@deepseek-ai/dsh-client-ui-commands'
100
+ - '@deepseek-ai/dsh-client-ui-conversation'
101
+ ```
102
+
103
+ 只有这六个原生包名在 Profile 根部解析到 fork,Desktop 才能加载它们。`nodeLinker: hoisted` 可能丢失插件本身的客户端入口;也不要增加会把整个 `@deepseek-ai/*` 核心依赖提升到根部的通配规则。若与现有插件策略冲突,先停下检查,不要用 `--force` 或关闭 pnpm 安全检查。
104
+
105
+ **仅在此前使用其他 linker 时**:备份后确认 `$profileDir` 为刚才核对的绝对路径,只清理该目录内可重建的 `node_modules`(必要时连同旧 `pnpm-lock.yaml`),再执行下一步。不要删除整个 Profile 或 DSH_HOME;其余用户数据不应动。
106
+
107
+ ## 5. 一起安装七包
108
+
109
+ 沿用上面下载与校验后的 `$downloadDir` 和 `$manifest`:
110
+
111
+ ```powershell
112
+ $specs = @($manifest.assets | ForEach-Object { Join-Path $downloadDir $_.filename })
113
+ dsh plugin --profile desktop add @specs
114
+ if ($LASTEXITCODE -ne 0) { throw '安装失败;不要启动 Desktop,先按回滚说明恢复' }
115
+ ```
116
+
117
+ 也可以在插件管理器支持本地 tarball 的环境中选择这七包,但仍须满足前面的 Profile 配置和完整退出条件。不要只安装插件本体:插件的 patch 会接管侧栏,缺 fork 会造成半安装。不要手工把禁用行粘到用户 patch 中;由插件 bundle 管理可移除的 patch 层。
118
+
119
+ ### 已完整安装时,仅升级维护者提供的本地候选
120
+
121
+ 仅限 DSH 完整运行时版本不变、六个 fork 与候选清单哈希全部一致,且现有七包组合已安装完成的情况。维护者必须同时提供候选的 Tasks 版本、适配 DSH 版本与 SHA-256;不要用开发分支源码 ZIP 代替 tarball,也不要从 npm latest 补齐缺失 fork。
122
+
123
+ 完成前面的退出与备份后,将候选 tarball 路径交给同一 CLI:
124
+
125
+ ```powershell
126
+ # 把下面路径替换为实际收到并核验的候选文件;这是占位示例,不是下载地址。
127
+ $mainPackage = (Resolve-Path './veewo-dsh-better-tasks-<候选版本>.tgz').Path
128
+ dsh plugin --profile desktop add $mainPackage
129
+ if ($LASTEXITCODE -ne 0) { throw '升级失败,先恢复备份' }
130
+ ```
131
+
132
+ 主包单独升级不适用于全新安装或跨 DSH 版本升级。六个 fork 任一不匹配,就回到完整组合安装。不要手工替换运行中的虚拟存储文件或加载可变源码目录。
133
+
134
+ ## 6. 启动与验收
135
+
136
+ 手动启动同一套 Desktop,检查侧栏、Session、Workspace 和会话界面能正常打开,主输入框存在;再由使用者验收任务卡片、Pin、输入、问答等功能。若设置提示 restart required,应完全退出再打开,而不是只刷新页面。
137
+
138
+ 有源码检出时,可选运行 `./scripts/desktop-probe.ps1 -SourceProfile desktop`,期望 `desktop probe: PASS`,安装的客户端插件均出现在 boot manifest。纯 CLI Host 可启动、或仅 manifest 存在,不等于实际 Desktop UI 验收通过。当前公开发行版的验证范围见同一 Release 的 `validation.json`;本地候选的检查记录应与该候选一起提供,不能拿旧 Release 的结果替代。
139
+
140
+ 开发版默认强调任务名、项目名为次要信息;已保存的“强调项目名”设置不会被覆盖。若升级后仍显示旧强调方式,在 Tasks 设置中手动选择“强调任务名”。
141
+
142
+ ## 7. 升级、卸载与故障
143
+
144
+ 升级 DSH 前,先找到与新 DSH 完整版本对应的组合 tag;没有对应发布就先不要带旧 fork 升级。更新同一 DSH 下的 Tasks,也应重新取齐新 Release 七包和校验清单。
145
+
146
+ 卸载与恢复步骤见同一 Release 的 `ROLLBACK.md` 或[固定版本回滚说明](<https://github.com/chanyuenpang/dsh-better-tasks/blob/dsh-v0.2.2-rc.2-tasks-v0.4.1/docs/rollback.md>)。卸载时须连同六个 fork 依赖一起移除,否则它们还会遮蔽官方模块。
147
+
148
+ | 症状 | 优先检查 |
149
+ |---|---|
150
+ | incompatible with dsh | Desktop/CLI 运行时与 tag 是否完全一致;不要绕过 peer 检查 |
151
+ | 侧栏消失或布局服务等待 | 七包是否装齐,是否从同一 Release 取包 |
152
+ | 装了插件但界面未变 | 是否完全退出重启;isolated 与六条 publicHoistPattern 是否准确 |
153
+ | Cannot find package / cordis | 是否把其他 DSH 核心包错误提升到 Profile 根部 |
154
+ | 输入框异常 | 是否用了历史 fork 库的旧 questions 包;请核对本次 SHA-256 |
155
+
156
+ 这六个 fork 是本项目修改的 MIT 兼容包,并非 DeepSeek 官方 npm 发行包。
@@ -0,0 +1,58 @@
1
+ # rc.2 斜杠提交 reading catch:定位与最小修复
2
+
3
+ ## 实包结论
4
+
5
+ 2026-11-13 直接读取 Desktop asar 内 `@deepseek-ai/dsh-api-session-controller@0.2.2-rc.2` 的源码,而非凭版本记忆:
6
+
7
+ - [sessions 接口](<https://github.com/deepseek-ai/deepseek-harness/blob/dsh-v0.2.2-rc.2/packages/api/session-controller/src/client/contract/sessions.ts#L101-L106>)明确返回 `Promise<void>`。
8
+ - [service](<https://github.com/deepseek-ai/deepseek-harness/blob/dsh-v0.2.2-rc.2/packages/api/session-controller/src/client/sessions/service.ts#L360-L365>)直接返回 manager 的结果。
9
+ - [manager](<https://github.com/deepseek-ai/deepseek-harness/blob/dsh-v0.2.2-rc.2/packages/api/session-controller/src/client/sessions/manager.ts#L340-L389>)三种返回都是 Promise:已有 inflight.promise;ready 时 Promise.resolve();新读的 async operation。异步内部 return 不会让外层方法返回 undefined。
10
+
11
+ 所以 [Better Tasks 的 pinned session projections effect](<../src/client.js#L2142-L2156>)不是已证实的根因,不对该后台静默刷新做猜测式修改。
12
+
13
+ 本机磁盘上的 Better Tasks 实际版本为 `0.4.1-local.20261113.2`,不是报障描述的旧 `0.4.0`。它是此前按 rc.2 精确组合重建、隔离启动并安装的候选;仓库基础 package 版本与本地安装候选版本不能混为一谈。未用磁盘版本冒充当前页面加载版本或用户验收证据。
14
+
15
+ ## 已复现的错误
16
+
17
+ 真实已安装的 `dsh-client-ui-conversation` 产物中,主输入框斜杠提交会执行:
18
+
19
+ ```js
20
+ trackOperation(() => this.adjudicate(attempt, draft))
21
+ // adjudicate 启动 .then 回调,但不 return;它的返回值是 undefined。
22
+ // 主输入框没有 detached-surface 的 withOperation 包装时:
23
+ operation().catch(...)
24
+ ```
25
+
26
+ 直接抽取安装产物中的两个原方法,在隔离的内存对象上执行,稳定得到:
27
+
28
+ ```text
29
+ Cannot read properties of undefined (reading 'catch')
30
+ ```
31
+
32
+ 随后 resolve 仲裁 Promise,`adjudicated` 事件仍会产生。这与技能注入成功但同时出现错误 toast 一致;不依赖重扫宿主日志,也不归因于 claw-kit。它证明该输入分支存在同文案缺陷,但没有伪称捕获到了当时浏览器的历史调用栈。
33
+
34
+ 修复仅在 [rc.2 conversation overlay](<../src-overlay/ui-conversation/0.2.2-rc.2/client/input/facade.ts#L793-L813>):将 adjudicate 的返回声明改为 Promise<void>、无 pipeline 分支返回 Promise.resolve()、正常分支 return 原仲裁链。保留原成功/失败派发、disposed/attempt 检查和通知逻辑。不是对 void 包一层 Promise.resolve:后者会让 detached surface 在真正仲裁结束前提前结算。其他运行时 overlay、主包、commands、input-trigger、claw-kit 均未修改。
35
+
36
+ ## 主包全部 catch 审计
37
+
38
+ 以下是当前 [主包源码](<../src/client.js>)中的 9 处,行号与旧 0.4.0 描述有偏移:
39
+
40
+ | 行 | 接收者 | 保证 |
41
+ |---|---|---|
42
+ | 952 | 输入 surface 创建链 | 以 Promise.resolve().then(...) 起始,包含同步抛错转 rejection |
43
+ | 990 | 问答 surface 创建链 | 同上,不直接对 provider 返回值 catch |
44
+ | 1123 | Final 快捷读取链 | Promise.resolve().then(...).then(...);缺内容仍返回 Promise |
45
+ | 1295 | Final HTTP 链 | 浏览器 fetch().then(...).then(...) |
46
+ | 1372 | moveTaskBefore | 注入到 taskPins.moveBefore;该函数返回 enqueue 的 Promise 链 |
47
+ | 1616 | unpinTask | 注入到 taskPins.setPinned;早退、重复请求、正常请求均返回 Promise |
48
+ | 1910 | 切换视图设置 | 已经使用 Promise.resolve(...) |
49
+ | 2037 | 设置写入 | 已经使用 Promise.resolve(...) |
50
+ | 2150 | sessions.refreshProjections | 实际 rc.2 asar 接口、service、manager 三分支均为 Promise |
51
+
52
+ Pin/拖动包装的依据见 [pin-client](<../src/pin-client.mjs#L136-L176>);注入接线见 [mountSidebar](<../src/client.js#L2202-L2216>)。不改变现有后台吞错或交互错误处理语义。
53
+
54
+ ## 验证边界
55
+
56
+ [专门回归](<../test/rc2-slash-adjudication.test.mjs>)执行 rc.2 overlay 的实际两个方法,覆盖主输入框原文斜杠、缺 pipeline、surface 等待仲裁结算、rejection、销毁后的迟到结果和同步 provider 异常。它不冒充完整 Electron 点击验收。验证结果:既有 477 项回归通过;新增测试的字符串拼接装载问题修正后,专项 6/6 通过;最终修复差异与 whitespace 检查通过。
57
+
58
+ 该修复进入 Tasks 0.4.1 / DSH 0.2.2-rc.2 的组合 Release,需要同步更新主包与新构建的 conversation 包;旧 tarball 不会自动更新。精确组合的隔离启动记录随 Release 提供。真实重启和主输入框提交 /knowledge-capture 的功能验收仍由用户进行,不能把源码/离线测试/启动门禁冒充真实点击通过。若安装生效后仍报同文案,必须取得那次 Console 堆栈再定位。
@@ -0,0 +1,65 @@
1
+ # Better Tasks:按 DSH 版本发布
2
+
3
+ ## 当前公开组合与 tag 规则
4
+
5
+ - DSH Desktop 运行时:**0.2.2-rc.3**。
6
+ - Better Tasks npm/package 版本:**0.4.4**。
7
+ - Git tag / GitHub Release:**`dsh-v0.2.2-rc.3-tasks-v0.4.4`**(Pre-release)。
8
+ - 安装入口:[rc.3 安装说明](<install-rc3.md>);旧 rc.2 / Tasks 0.4.1 的[安装说明](<install.md>)和资产保持不变,兼容表见 [README](<../README.md>)。
9
+
10
+ 今后统一使用 `dsh-v<DSH版本>-tasks-v<Tasks版本>`。DSH 版本写完整,保留 rc 后缀;Tasks 版本仍由插件自己的 manifest 管理。同一 Tasks 源码可适配多条 DSH 线,但每条线都要有独立验证的组合 Release。已发布的 tag 与资产 URL 不移动、不覆盖;内容变化应升 Tasks 版本并创建新组合 tag。面向 RC 运行时的本次组合标记为 GitHub Pre-release,不依赖全局 Latest 作为安装入口。
11
+
12
+ ## 唯一开发分支
13
+
14
+ - `main` 是唯一日常开发、修复和适配入口;不新建或继续维护 feature/release/按 DSH 版本划分的长期分支。旧分支只作历史引用,不再接收开发提交。
15
+ - 2026-11-14 将 `release/0.3.0` 的最新已提交代码 `5c34bef`(Tasks 0.4.1)快进合入 `main`,保留全部 19 个提交的历史;GitHub 默认分支仍为 `main`。
16
+ - 支持标记只用 `main` 上的 annotated 组合 tag;源码可以包含尚未发布的新线适配。某条线只有在目标运行时精确组合门禁和完整七包 Release 就绪后,才能宣称支持。
17
+ - 从历史 tag 排查问题用 detached checkout 或只读对比;修复最终仍提交到 `main`,不维护旧版本开发分支,不移动历史 tag。
18
+ - Tasks 0.4.2 是本轮 rc.3 适配候选,见[适配记录](<dsh-0.2.2-rc.3-support.md>)和[候选安装说明](<install-rc3.md>)。公开 rc.2 / Tasks 0.4.1 入口保留;候选的七包与精确 rc.3 启动证据单独交付,不将源码提交或 tag 当成 GitHub/npm 已发布。
19
+
20
+ ## 本次组合与历史内容
21
+
22
+ 0.4.4 / rc.3:在已验证的 0.4.2 上修复子/孙 agent 活跃时任务卡误显示 idle,并用官方主题蓝色标识当前选中会话标题。主包更新,六个 fork 保留 0.4.2 的已验证字节;完整七包有独立最终组合启动证据。0.4.3 是已安装的本地先行候选,不覆盖它的本地包或既有 tag。并行开发的排序重构明确不在这次发布中。GitHub 分发完整七包;npm 只发布 `@veewo/dsh-better-tasks` 主包,不向上游 `@deepseek-ai` scope 发布 fork,且不表示 npm 单包可独立安装。
23
+
24
+ 0.4.2 / rc.3:主包声明 root/hoc 的 `sidebar.session.action`,把原生新会话内容作为第三参 children 交给渲染器;整行受创建权限保护,可选动作不增加服务硬依赖。六个 fork 按精确 rc.3 基线从最新 overlay/patch 重建,保留 workspace picker factory、问答回退、原生 Pin、导航与真实仲裁 Promise。候选使用新的完整七包、清单与独立 rc.3 Desktop 启动证据,不沿用旧 rc.3 库的接受结论。最终结果以随包 `validation.json` 为准。
25
+
26
+ 0.4.1:原生新会话、紧凑导航/More/入口固定;默认强调任务名;按首次实际工作时间补正新任务顺序,保留较晚手动拖拽;rc.2 conversation 返回真实仲裁 Promise,修复斜杠提交 reading catch。主包与 conversation 改变,其他五包沿用已验证字节;不能只按 fork 的上游版本号判断字节一致。
27
+
28
+ 侧栏任务泳道、原生 Pin、Final 预览、独立输入与问答卡片;rc.2 行菜单适配新的 context-menu factory slot,并透传 Workspace/quote/empty-submit 参数。包含最新 questions 修复:问答 composer 选择器失败时退出竞选,让原生输入框回退,不再用区域错误边界吞掉整个输入区。
29
+
30
+ **完整分发是七个独立 tarball,不是 bundledDependencies 或嵌套 Loader 树。** 六个 fork 保留原生包名、ModuleLoader ID、上游版本及许可证,以 Profile 根依赖安装;插件自身依赖不携带 fork。早期 `better-tasks-forks-0.2.2-rc.2` 库保留为历史资产,不覆盖,其中 questions 包并非本次最终修复字节。
31
+
32
+ ## 一次性准备、构建与审计
33
+
34
+ 1. 确认 GitHub 写权限、源码提交和目标运行时。保留用户未提交的工作,仅显式暂存本次发布文件。
35
+ 2. 完成全部代码与文档改动,更新 [安装说明](<install.md>)、[回滚说明](<rollback.md>)、兼容矩阵和 lockfile 根版本,然后统一验证。
36
+ 3. Node 24+ 下准备测试源码并运行 `npm run test:prepare`、`npm test`、`npm run check`;对目标线运行 `node scripts/check-upstream-contract.mjs --from-tag 0.2.2-rc.2 --to-tag 0.2.2-rc.2 --version 0.2.2-rc.2`。测试源码默认线由 source lock 管理,与发布线必须分别说明。
37
+ 4. 使用已审查的六个 rc.2 fork,检查每个包内客户端与 [fork 构建产物](<../forks-0.2.2-rc.2/>) 的哈希一致。不要误打包 npm 官方未修改模块。只有需要改变 fork 字节时才重建 fork,并重新记录来源。
38
+ 5. 在新的 `releases/<组合tag>/` 打包插件本体一次;其余六包复制已验证字节。检查所有 tar 路径和包名、版本、许可、依赖、bundle patch、源码与客户端哈希。公开包仅含代码、文档和许可证,禁止任何 Profile、凭据、Session、日志、备份或工作流状态。
39
+ 6. 生成 `release-manifest.json`:组合 tag、两种版本、上游来源、七个文件名/大小/archiveSha256/clientSha256。只用相对文件名,不泄露本机路径。生成 `SHA256SUMS.txt`,附 `INSTALL.md`、`ROLLBACK.md` 和脱敏 `validation.json`。清单副本保存在 provenance 下供源码 tag 追溯。
40
+
41
+ ## 隔离冷启动门禁
42
+
43
+ 最终七包必须在目标运行时的精确组合中冷启动。独立 DSH_HOME、Profile、Session/ledger 和 Electron user-data;禁用 `dsh-cindy-host`,监听仅 loopback,使用与安装说明相同的 isolated/hoist 策略。不得把沙盒指向真实 Profile 存储。
44
+
45
+ 确认监听地址、实际浏览器核心 shell/侧栏/Session/Workspace/会话激活,无启动错误或可选服务等待死锁,并核对七个 served client 的哈希。只做启动验证,不做功能交互、截图或像素 QA。记录命令、目标版本、隔离 Profile、URL(公开证据移除 token)、浏览器错误与清理结果。退出全部自有沙盒进程并确认监听消失。失败时修复并重跑必要检查,不动真实 DSH。
46
+
47
+ ## 提交、tag 与发布
48
+
49
+ 审查最终 diff,通过后在 `main` 提交准确源码;只推送 `main` 与本次新 annotated tag,不用 `--tags` 批量推送历史标签,不 force push。普通源码/文档提交不创建支持 tag;未完成门禁的新线不得提前打 tag。
50
+
51
+ ```powershell
52
+ # 仅在全部发布门禁通过后执行;版本必须替换为本轮已验证的新组合。
53
+ $dshVersion = '<已验证的DSH完整版本>'
54
+ $tasksVersion = '<新的Tasks版本>'
55
+ $tag = "dsh-v$dshVersion-tasks-v$tasksVersion"
56
+ if ((git branch --show-current) -ne 'main') { throw 'Release must originate from main' }
57
+ git show-ref --verify --quiet "refs/tags/$tag"
58
+ if ($LASTEXITCODE -eq 0) { throw 'Tag already exists; do not move it' }
59
+ git tag -a $tag -m "Better Tasks $tasksVersion for DSH $dshVersion"
60
+ git push origin main
61
+ git push origin "refs/tags/$tag"
62
+ # gh release create 用 --verify-tag,显式上传审计后的资产;先 draft,上传完成再公开。
63
+ ```
64
+
65
+ Release 标题包含 DSH 与 Tasks 两种版本,说明链接固定到该 tag 的安装文档。上传完整七包和清单,不使用会匹配 Profile/日志的递归通配上传。发布后确认非 draft、组合 tag 对应准确提交;匿名逐个下载七包并与清单 SHA-256 对照。GitHub Release 发布与 npm 发布、真实 Profile 安装/重启互相独立,本流程不自动执行后两者。