dsh-tender-workbench 0.5.5 → 0.5.7

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
@@ -4,6 +4,17 @@ All notable changes to `dsh-tender-workbench` are documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.5.7] - 2026-09-11
8
+
9
+ - 按 DSH-UX-001 v1.5.2,以 workspaceId + 命名空间 sessionId 创建业务会话,修复新会话落入“未分组”;保留普通会话防复用守卫及 0.5.6 Host 授权契约。
10
+ - 新增所选 Workspace 归组、普通新会话、入口默认关闭、Tab X/宿主收起恢复与三侧栏路径的真实隔离回归;不自动迁移历史会话。
11
+
12
+ ## [0.5.6] - 2026-09-10
13
+
14
+ - 统一 Better Sidebar optional peer、基础/工作台安装预检和运行时降级文案;不自动安装侧栏、不重写工作台容器。
15
+ - 修复 DSH 0.1.2-rc.1 Host 工具的 Session.snapshotEvents() 与 turn/start 轮次绑定,补真实 Session 契约,避免错误拒绝直接用户请求。
16
+ - 补无侧栏/兼容侧栏/已知错误组合的最终 tarball 验收与实际 Host 工具业务 fixture。
17
+
7
18
  ## [0.5.5] - 2026-09-10
8
19
 
9
20
  - 迁移完整 DSH 0.1.2-rc.1 公共接口,移除旧客户端 runtime 与 conversationEvents 硬依赖;补事件定义卸载清理。
package/README.en.md CHANGED
@@ -10,9 +10,11 @@ Related agents: [数据清洗补全](https://github.com/duhu2000/dsh-data-cleani
10
10
 
11
11
  `dsh-tender-workbench` is an open-source DeepSeek Harness plugin for finding, screening, reviewing, and delivering tender opportunities. It combines authorized `qcc-tender` data, deterministic screening rules, bounded Agent analysis, explicit human decisions, and immutable Excel/PDF reports in one Session-scoped Better Sidebar workbench.
12
12
 
13
- Current stable version: **0.5.5** (stable release).
13
+ Current stable version: **0.5.7** (stable release).
14
14
 
15
- This release targets the full DSH 0.1.2-rc.1 distribution with Better Sidebar 0.18.1; legacy hosts are no longer supported. Back up the complete Profile and verify dependencies before upgrading; do not overwrite a working local hotfix or an unverified host combination.
15
+ Version 0.5.7 fixes Workspace ownership for new business Sessions. See the [release record](docs/RELEASE-0.5.7.md) for publication status and verification boundaries.
16
+
17
+ Base mode targets the full DSH 0.1.2-rc.1 distribution; Better Sidebar 0.18.1 is optional and only provides the visual workbench. Legacy hosts remain unsupported. Back up the complete Profile and verify dependencies before upgrading.
16
18
 
17
19
  ## What it does
18
20
 
@@ -53,9 +55,9 @@ This release constrains core peers to `~0.1.2-rc.1`; future combinations require
53
55
 
54
56
  - DeepSeek Harness public packages: `0.1.2-rc.1`
55
57
  - `dsh-mcp-connector`: `0.2.31`
56
- - `dsh-better-sidebar`: `0.18.1`
58
+ - Optional visual workbench: `dsh-better-sidebar@0.18.1`; the peer range is not an acceptance claim for untested versions
57
59
 
58
- The active Profile must provide one coherent runtime with public Session Projection, JSONL Session Persistence, Tools, Skill, Sessions, and WebServer services. Better Sidebar must expose the public `targetedOpen` and `stateSubscription` features.
60
+ The active Profile must provide one coherent runtime with public Session Projection, JSONL Session Persistence, Tools, Skill, Sessions, and WebServer services. Only the visual workbench needs Better Sidebar and its `targetedOpen` / `stateSubscription` features; missing or incompatible capabilities do not block conversation activation.
59
61
 
60
62
  Before installing, run `node scripts/check-host-compatibility.mjs --host-root /actual/node_modules/@deepseek-ai/dsh --profile-root /actual/profiles/web`. It only reads package manifests: known incompatible hosts, mixed core packages and old Sidebar fail; unknown combinations are reported as unverified. The Windows mount script requires `-DshHostRoot` and executes this gate before mutation. Upgrade the complete host explicitly after backing up the Profile: `npm install -g @deepseek-ai/dsh@0.1.2-rc.1`.
61
63
 
@@ -66,34 +68,35 @@ An installed and authorized `qcc-tender` MCP connection must expose these exact
66
68
  - `mcp__qcc-tender__search_tenders`
67
69
  - `mcp__qcc-tender__search_proposed_projects`
68
70
 
69
- Without a compatible Better Sidebar provider, conversation entry points and supported Host tools remain available; shortcuts show actionable install/upgrade, enable-tab and restart guidance. No private sidebar is created. Other missing required services, unavailable MCP tools and non-JSONL persistence fail explicitly, with no Web-search or alternate-storage fallback.
71
+ The default preflight accepts Sidebar-free base mode. Add `--workbench` (Windows mount: `-Workbench`) only when explicitly enabling the visual workbench; the Windows flag also checks its enabled bundle before any Profile write. No script automatically installs Sidebar. An already-installed Sidebar 0.17.1 breaking the new host is still blocked, even in base mode. Runtime capability probes and Tab preferences remain separate from manifest inspection.
72
+
73
+ Without Sidebar, native Sessions, input drafts, the prompt builder, action Skills and Host tools remain available. Conversation-driven query, rule preview/confirmation, human review and report generation retain their contracts; actual model orchestration and paid MCP are separate acceptance layers. Existing authorized Excel/PDF artifact links can be downloaded, but visual table/detail/filter controls, batch-review controls, history view and download buttons require the workbench. All five shortcuts only explain this boundary, preserving state without starting tasks. No alternate drawer or native-workbench rewrite is implemented. Other missing required services, unavailable MCP tools and non-JSONL persistence fail explicitly.
70
74
 
71
75
  ## Install
72
76
 
73
- Install the current stable release and its required Provider plugins:
77
+ Install base mode. The connector is needed for authorized QCC queries; Sidebar is not required:
74
78
 
75
79
  ```sh
76
80
  dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
77
- dsh plugin --profile web add 'dsh-better-sidebar@0.18.1'
78
81
  dsh plugin --profile web add dsh-tender-workbench
79
82
  dsh web --no-open
80
83
  ```
81
84
 
82
- To install the exact 0.5.5 release:
85
+ Optionally enable the visual workbench with `dsh plugin --profile web add dsh-better-sidebar@0.18.1`, enable the tender Tab and fully restart the Profile.
86
+
87
+ To install the exact 0.5.7 release:
83
88
 
84
89
  ```sh
85
90
  dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
86
- dsh plugin --profile web add 'dsh-better-sidebar@0.18.1'
87
- dsh plugin --profile web add dsh-tender-workbench@0.5.5
91
+ dsh plugin --profile web add dsh-tender-workbench@0.5.7
88
92
  ```
89
93
 
90
- To install from an independent checkout, install the required Provider plugins first, then run from this repository:
94
+ To install base mode from an independent checkout:
91
95
 
92
96
  ```sh
93
97
  corepack pnpm@11.7.0 install --frozen-lockfile
94
98
  corepack pnpm@11.7.0 run build
95
99
  dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
96
- dsh plugin --profile web add 'dsh-better-sidebar@0.18.1'
97
100
  dsh plugin --profile web add .
98
101
  dsh web --no-open
99
102
  ```
@@ -102,8 +105,7 @@ To install a packed build:
102
105
 
103
106
  ```sh
104
107
  dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
105
- dsh plugin --profile web add 'dsh-better-sidebar@0.18.1'
106
- dsh plugin --profile web add ./dsh-tender-workbench-0.5.2.tgz
108
+ dsh plugin --profile web add ./dsh-tender-workbench-0.5.7.tgz
107
109
  dsh web --no-open
108
110
  ```
109
111
 
@@ -120,11 +122,11 @@ dsh plugin --profile web remove dsh-tender-workbench
120
122
  Upgrade an existing installation by installing the stable version and fully restarting the Web profile:
121
123
 
122
124
  ```sh
123
- dsh plugin --profile web add dsh-tender-workbench@0.5.5
125
+ dsh plugin --profile web add dsh-tender-workbench@0.5.7
124
126
  dsh web --no-open
125
127
  ```
126
128
 
127
- Version 0.5.5 retains the v1.5.0 singleton Tab, five navigation shortcuts and Client-lifetime draft recovery while migrating the client modules and services to the new host. Business schemas are unchanged; history remains Session-local and live MCP connectivity is not verified. Restore a backed-up, fully verified host/plugin combination for rollback, not the original 0.5.4 or an older package alone on the new host.
129
+ Version 0.5.7 creates business Sessions with workspaceId plus a namespaced sessionId, not cwd-only. Current membership wins; a legacy ungrouped Session must match a registered path, and an unregistered selected directory is rejected rather than redirected. Existing ungrouped history is not automatically migrated. The ordinary Session guard and 0.5.6 snapshotEvents/turn-start authorization contract remain intact. Business schemas are unchanged; history remains Session-local and live MCP is not verified. Roll back the complete backed-up host/plugin combination, not an old plugin alone on the new host.
128
130
 
129
131
  ## Using the workbench
130
132
 
package/README.md CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  ## 安装与三分钟上手
4
4
 
5
- > 0.5.5 面向完整 DSH 0.1.2-rc.1 + Better Sidebar 0.18.1。升级前备份完整 Profile 并核对依赖;不要直接覆盖未经验证的宿主组合或仍可用的本地临时补丁。
5
+ > 基础智能体要求完整 DSH 0.1.2-rc.1Better Sidebar 0.18.1 仅用于可选可视化工作台;升级前备份完整 Profile
6
6
 
7
7
  招投标智能体:支持招投标搜索、招标查询、投标查询、标讯查询、拟建项目与项目筛选,辅助商机发现、人工复核及 Excel/PDF 导出,使用客户自备授权的企查查 MCP。
8
8
 
9
9
  ```sh
10
- dsh plugin --profile web add dsh-tender-workbench@0.5.5
10
+ dsh plugin --profile web add dsh-tender-workbench@0.5.7
11
11
  ```
12
12
 
13
13
  请先满足下文的 DSH、连接器及侧边栏依赖要求;安装后完整停止并重启对应 Profile。
@@ -18,7 +18,7 @@ dsh plugin --profile web add dsh-tender-workbench@0.5.5
18
18
 
19
19
  **能力边界:** 投标查询指已授权数据源内的公开标讯查询,不代办投标。无 Web 搜索兜底、订阅或自动 Bid/No-Bid 决策;不提供在线 PDF 预览。
20
20
 
21
- **升级与回滚:** 升级前停止 Profile 并备份任务目录,记录当前精确版本;使用上面的固定版本命令升级,再完整重启。回滚时将版本号替换为升级前记录的版本,并使用升级前任务目录副本;不以旧版直接读取已迁移任务目录。
21
+ **升级与回滚:** 升级前停止 Profile 并备份完整宿主/插件组合及任务目录,记录精确版本;升级后完整重启。回滚需恢复已验证的整套组合和目录副本,不能在新宿主上单独退回原始 0.5.4。
22
22
 
23
23
  相关智能体:[数据清洗补全](https://github.com/duhu2000/dsh-data-cleaning-agent) · [AI填表](https://github.com/duhu2000/dsh-form-fill-agent) · [访前尽调](https://github.com/duhu2000/dsh-pre-duediligence) · [招投标](https://github.com/duhu2000/dsh-tender-workbench)
24
24
 
@@ -27,7 +27,9 @@ dsh plugin --profile web add dsh-tender-workbench@0.5.5
27
27
 
28
28
  > 面向国内招投标团队的 DeepSeek Harness 开源智能体插件:在一个会话级工作台内完成标讯与拟建项目查询、确定性规则初筛、限定范围智能分析、人工复核,以及 Excel/PDF 报告交付。
29
29
  >
30
- > 当前稳定版本:**0.5.5**(正式版本)
30
+ > 当前稳定版本:**0.5.7**(正式版本)
31
+
32
+ 0.5.7 修复新建业务 Session 的 Workspace 归组;发布状态及验收边界见 [发布记录](docs/RELEASE-0.5.7.md)。
31
33
 
32
34
  [![CI](https://github.com/duhu2000/dsh-tender-workbench/actions/workflows/ci.yml/badge.svg)](https://github.com/duhu2000/dsh-tender-workbench/actions/workflows/ci.yml)
33
35
  [![npm](https://img.shields.io/npm/v/dsh-tender-workbench)](https://www.npmjs.com/package/dsh-tender-workbench)
@@ -61,21 +63,22 @@ dsh plugin --profile web add dsh-tender-workbench@0.5.5
61
63
 
62
64
  ## 30 秒开始
63
65
 
64
- 先安装连接器、侧边栏能力和本插件:
66
+ 基础智能体不要求 Better Sidebar。查询企查查数据时还需已安装、已授权的 MCP 连接器;基础安装不默认强装第三方侧栏:
65
67
 
66
68
  ```sh
67
69
  dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
68
- dsh plugin --profile web add 'dsh-better-sidebar@0.18.1'
69
70
  dsh plugin --profile web add dsh-tender-workbench
70
71
  dsh web --no-open
71
72
  ```
72
73
 
73
74
  安装或移除插件后,请完整重启 Web Profile。插件通过 `dsh.bundle.patch` 启用 `cordis.patch.yml`,并注册 `dsh-tender-workbench` Loader。
74
75
 
75
- 安装指定的 `0.5.5` 版本:
76
+ 需要可视化工作台时,再自选安装 `dsh plugin --profile web add dsh-better-sidebar@0.18.1`、在宿主设置启用招投标 Tab,并完整重启。无需侧栏也可使用下方列明的基础功能。
77
+
78
+ 安装指定的 `0.5.7` 版本:
76
79
 
77
80
  ```sh
78
- dsh plugin --profile web add dsh-tender-workbench@0.5.5
81
+ dsh plugin --profile web add dsh-tender-workbench@0.5.7
79
82
  ```
80
83
 
81
84
  移除插件:
@@ -86,7 +89,7 @@ dsh plugin --profile web remove dsh-tender-workbench
86
89
 
87
90
  ## 使用工作台
88
91
 
89
- 插件提供左上角“招投标”入口和会话 Header 恢复入口。点击左上角入口会根据当前工作区、当前 Session 目录或第一个可用工作区的路径创建独立原生会话,显示“招投标智能体”标题与目标图标,默认不打开右侧工作台。点击输入框下方的找机会、筛候选、人工定案、形成交付或任务历史按钮时,才打开对应 Better Sidebar 视图;其他会话保留各自原有标题与标识。
92
+ 插件提供左上角“招投标”入口和会话 Header 恢复入口。入口解析当前 Session 所属 Workspace,以 `workspaceId + sessionId` 创建归入该工作区的独立原生会话。历史未分组会话仅按精确路径匹配已注册 Workspace;没有当前目录时回退首个已注册工作区,有未注册目录时提示先选择工作区,不静默转入别组。业务 ID 命名空间与普通会话守卫防止空白业务会话被“新会话”复用。显示“招投标智能体”标题与目标图标,默认不打开右侧工作台。五个流程按钮才打开对应 Better Sidebar 视图;其他会话保留各自原有标题与标识。
90
93
 
91
94
  页面导航只切换可见阶段,不会修改业务状态或自动执行后续动作。规则建议、编辑、影响预览与确认彼此独立;报告生成前始终展示已复核和待复核范围。宽屏使用主从布局,中窄屏保持相同信息顺序,并保留局部表格滚动与可访问的固定操作区。
92
95
 
@@ -104,10 +107,10 @@ dsh plugin --profile web remove dsh-tender-workbench
104
107
 
105
108
  - DeepSeek Harness 公共包:`0.1.2-rc.1`
106
109
  - `dsh-mcp-connector`:`0.2.31`
107
- - `dsh-better-sidebar`:`0.18.1`
110
+ - 可选工作台依赖 `dsh-better-sidebar`:已验证版本 `0.18.1`,optional peer `~0.18.1` 不是整个区间已验收的承诺
108
111
  - Node.js:`^22.19.0 || >=24.0.0`
109
112
 
110
- 当前 Profile 必须提供同一套公共 Session Projection、JSONL Session Persistence、Tools、Skill、Sessions 和 WebServer 服务;Better Sidebar 必须提供公共 `targetedOpen` 与 `stateSubscription` 能力。
113
+ 当前 Profile 必须提供同一套公共 Session Projection、JSONL Session Persistence、Tools、Skill、Sessions 和 WebServer 服务。只有启用可视化工作台才需要 Better Sidebar,运行时探测公共 `targetedOpen` 与 `stateSubscription` 能力;缺少或能力不全时不等待、不创建自有抽屉。
111
114
 
112
115
  先备份完整 Profile,再由用户明确升级完整宿主(`npm install -g @deepseek-ai/dsh@0.1.2-rc.1`),不能只升级某个 Session 包。安装前从本仓运行只读检查:
113
116
 
@@ -115,7 +118,7 @@ dsh plugin --profile web remove dsh-tender-workbench
115
118
  node scripts/check-host-compatibility.mjs --host-root /实际路径/node_modules/@deepseek-ai/dsh --profile-root /实际路径/profiles/web
116
119
  ```
117
120
 
118
- 预检只读包清单,不读凭证、会话或执行安装。已知旧宿主/混装核心包/旧 Sidebar 会阻断;未知版本提示未验证。Windows 挂载脚本需提供 `-DshHostRoot`,预检失败时不得挂载。context 不是必装依赖;仅当已安装时需检查共存条件:0.36.0 的旧 settingsNamespace 已知不兼容,共存基准为 0.48.0,可在备份后由用户执行 `dsh plugin --profile web add dsh-context@0.48.0`。
121
+ 预检默认是基础模式,缺少侧栏只提示功能边界,不阻断、不自动安装。显式传 `--workbench` 才要求侧栏已安装,版本检查不代替运行时 capability 与 Tab 启用检查。已装 Sidebar 0.17.1 在新宿主上的硬故障仍阻断;未知组合提示未验证。Windows 挂载需 `-DshHostRoot`,默认基础模式;`-Workbench` 额外要求侧栏 bundle 已启用,所有预检均在 Profile 写入前执行。context 不是必装依赖;已装 0.36.0 settingsNamespace 故障仍阻断,共存基准为 0.48.0
119
122
 
120
123
  回滚必须恢复完整已验证的宿主/插件组合,不得在新宿主上单独退回未经修复的 0.5.4 或更早包。真实 QCC、四产品共存与正式环境验收不由启动 smoke 代签。
121
124
 
@@ -126,16 +129,28 @@ node scripts/check-host-compatibility.mjs --host-root /实际路径/node_modules
126
129
 
127
130
  缺少兼容 Better Sidebar 时,对话入口和已支持的 Host 工具保持可用,流程按钮提示安装/升级、启用 Tab 并重启,不创建另一套侧拉。其余必要服务缺失、MCP 工具不可用或会话持久化不是 JSONL 时明确失败;不提供 Web 搜索、其他持久化或 Workspace 存储兜底。
128
131
 
132
+ ### 无侧栏功能边界
133
+
134
+ | 能力 | 无侧栏 | 可视化工作台 |
135
+ | --- | --- | --- |
136
+ | 独立原生会话、普通会话切换、输入草稿、提示词生成/回填 | 可用,不因打开工作台失败而清空 | 相同 |
137
+ | 行为 Skill、工作流状态工具、对话驱动查询 | 可用;实际数据仍需模型和已授权 MCP | 表单配置并显式提交 |
138
+ | 规则预览/确认、人工复核、报告生成工具 | Host 工具保留;需对话明确请求,仍受版本绑定与确认约束 | 规则编辑、表格、批量复核和导出控件 |
139
+ | Excel/PDF Artifact 下载接口 | 已生成的授权下载链接可用;无可视化下载按钮 | 下载按钮可用 |
140
+ | 五个流程按钮、任务历史、表格详情 | 仅明确提示;不执行任务,不创建 Tab | 定位同一 Session 单例 Tab |
141
+
142
+ 工具 fixture 通过不等于真实模型自动编排或付费 QCC 全链路通过;完整工作台原生化仅为后续评估,本版本未实施。
143
+
129
144
  ## 升级与回滚
130
145
 
131
146
  从已有版本升级:
132
147
 
133
148
  ```sh
134
- dsh plugin --profile web add dsh-tender-workbench@0.5.5
149
+ dsh plugin --profile web add dsh-tender-workbench@0.5.7
135
150
  dsh web --no-open
136
151
  ```
137
152
 
138
- 0.5.5 保留 0.5.4v1.5.0 Session 单例 Tab、五入口导航和 Client 生命周期内草稿恢复,正式迁移新版宿主的客户端模块与服务。查询、筛选、复核和报告业务格式不变;历史仍仅限当前 Session,真实 MCP 连接未核验。回退应恢复备份的完整已验证宿主/插件组合,不能在新版宿主上单独安装原始 0.5.4 或更早版本。
153
+ 0.5.7 修复新建业务 SessionWorkspace 归组,不自动搬迁已有未分组历史。保留 0.5.6 可选侧栏、`snapshotEvents()` / `turn/start` 授权绑定、Session 单例 Tab、五入口及草稿恢复。业务数据格式不变,历史仍仅限当前 Session,真实 MCP 连接未核验。回退应恢复备份的完整已验证宿主/插件组合,不能在新版宿主上单独安装原始 0.5.4 或更早版本。
139
154
 
140
155
  ## 本地开发
141
156
 
@@ -150,7 +165,7 @@ corepack pnpm@11.7.0 run check
150
165
 
151
166
  `check` 会执行类型检查、完整 Vitest 测试、生产构建、README/发布状态校验以及 npm tarball 白名单预检。配置 npm Trusted Publishing 后,[发布工作流](.github/workflows/release.yml)可使用 OIDC 和 provenance;手工发布不得声称 provenance。
152
167
 
153
- 省、市、区数据源快照维护在 [resources/area.ts](resources/area.ts)。版本变更见 [CHANGELOG.md](CHANGELOG.md),发布检查见 [0.5.5 发布清单](docs/RELEASE-0.5.5.md)。
168
+ 省、市、区数据源快照维护在 [resources/area.ts](resources/area.ts)。版本变更见 [CHANGELOG.md](CHANGELOG.md),发布检查见 [0.5.7 发布清单](docs/RELEASE-0.5.7.md)。
154
169
 
155
170
  ## 界面演示与市场投稿
156
171
 
@@ -0,0 +1,20 @@
1
+ # dsh-tender-workbench 0.5.7
2
+
3
+ Version: **0.5.7**
4
+ Status: **ready for release**
5
+
6
+ 用户于 2026-09-11 追加授权 commit、push、tag 与 npm 发布。通过精确提交的完整门禁后合并 PR #5,推送新的 v0.5.7 tag,由 release.yml 通过 OIDC 发布;不移动旧 tag,不变更生产 Profile 或全局宿主。
7
+
8
+ ## 范围与边界
9
+
10
+ 采用 DSH-UX-001 v1.5.2 UX-04:入口解析 Workspace 身份并通过公开 sessions.create({ workspaceId, sessionId }) 创建会话。当前显式归属优先;旧未分组会话按已注册路径精确匹配,无当前目录时取首个 Workspace;有未注册目录时提示用户选择/注册,不回退到不相关的组。命名空间 ID 与 ordinary Session guard 防止普通空白复用,不再通过脱离 Workspace 隔离。
11
+
12
+ 保留 0.5.6 的 snapshotEvents() + turn/start、直接用户请求、pending control.nextTool 与预览/确认授权边界,本版不修改 Host 工具实现。Better Sidebar 仍为可选增强,无侧栏保留原生会话/提示词/Host 工具,缺失提示不改变草稿或业务事实,不引入替代容器。
13
+
14
+ 不自动搬迁历史未分组会话、不替换原生容器、不引入 alpha 依赖。真实模型/MCP及四产品同装由协调任务另外验收。回滚需恢复完整已备份的宿主/Profile/任务组合;0.5.6 仍有归组缺陷,不能声称回退后该问题已解决。
15
+
16
+ ## 测试与证据
17
+
18
+ 复用最终 npm pack + 实际 DSH 0.1.2-rc.1 隔离 Profile,三路径 absent / Sidebar 0.18.1 / 已知坏 0.17.1。新测试以两个 Workspace 验证选中组而非首组,断言业务与普通 Session 均保持归组;入口不建 Tab、不展开侧栏,五流程单例,Tab X、Files、宿主收起恢复,合成业务及 Excel/PDF 下载仍通过。
19
+
20
+ 本地 check:43 文件、245 passed / 1 Windows-only skipped;UI 8/8。实际 DSH 无侧栏和 Sidebar 0.18.1 路径通过,旧 Sidebar 0.17.1 预检与实际启动按预期阻断。采用记录、实际结果与限制登记于 docs/WORKSPACE-OWNERSHIP-ADOPTION.md。此清单为发布前状态;发布工作流与 Registry 验证完成后以独立文档提交补充证据。
package/lib/client.js CHANGED
@@ -4708,29 +4708,33 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4708
4708
  return `${TENDER_ENTRY_SESSION_ID_PREFIX}${uuid}`;
4709
4709
  }
4710
4710
  /**
4711
- * Resolve the owning workspace's canonical directory path to seed a
4712
- * `cwd`-owned entry Session. A `cwd`-only create deliberately does NOT attach
4713
- * the Session to the workspace, so DSH's New-Session blank-session reuse skips it.
4711
+ * Resolve Host-owned Workspace identity, not just a directory. Existing
4712
+ * membership wins; a legacy ungrouped Session may match a registered path.
4713
+ * Never register a new Workspace or create an ungrouped business Session here.
4714
4714
  */
4715
- function resolveTenderEntryWorkspacePath(sessions, workspaces) {
4716
- const current = sessions.list.getSnapshot().current;
4715
+ function resolveTenderEntryWorkspaceId(sessions, workspaces) {
4716
+ const sessionSnapshot = sessions.list.getSnapshot();
4717
+ const current = sessionSnapshot.current;
4717
4718
  const workspaceSnapshot = workspaces.list.getSnapshot();
4718
- return (current === void 0 ? void 0 : workspaceSnapshot.items.find((workspace) => workspace.sessionIds.includes(current)))?.path ?? (current === void 0 ? void 0 : sessions.list.getSnapshot().byId[current]?.cwd) ?? workspaceSnapshot.items[0]?.path;
4719
+ const currentWorkspace = current === void 0 ? void 0 : workspaceSnapshot.items.find((workspace) => workspace.sessionIds.includes(current));
4720
+ if (currentWorkspace !== void 0) return currentWorkspace.workspaceId;
4721
+ const cwd = current === void 0 ? void 0 : sessionSnapshot.byId[current]?.cwd;
4722
+ if (cwd !== void 0) return workspaceSnapshot.items.find((workspace) => workspace.path === cwd)?.workspaceId;
4723
+ return workspaceSnapshot.items[0]?.workspaceId;
4719
4724
  }
4720
4725
  /**
4721
- * Create a distinct native Session with `cwd` ownership only (no workspace
4722
- * attachment). This keeps the Session out of the workspace's reusable blank-set,
4723
- * so DSH's 新会话 action mints a fresh default Session instead of reopening the
4724
- * workbench Session.
4726
+ * Create a distinct native Session explicitly attached to its Workspace.
4727
+ * Namespaced identity + ordinary-session-guard prevent New Session reuse;
4728
+ * detaching the business Session from its Workspace is not an isolation method.
4725
4729
  */
4726
4730
  async function createTenderEntrySession(sessions, workspaces, uuid = browserUuid) {
4727
- const cwd = resolveTenderEntryWorkspacePath(sessions, workspaces);
4728
- if (cwd === void 0) throw new TenderSessionEntryError("workspace-unavailable");
4731
+ const workspaceId = resolveTenderEntryWorkspaceId(sessions, workspaces);
4732
+ if (workspaceId === void 0) throw new TenderSessionEntryError("workspace-unavailable");
4729
4733
  const capability = sessions;
4730
4734
  if (typeof capability.create !== "function") throw new TenderSessionEntryError("create-unavailable");
4731
4735
  const requestedId = createTenderEntrySessionId(uuid());
4732
4736
  const createdId = await capability.create({
4733
- cwd,
4737
+ workspaceId,
4734
4738
  sessionId: requestedId
4735
4739
  });
4736
4740
  if (createdId !== requestedId) throw new TenderSessionEntryError("invalid-session-id");
@@ -5900,7 +5904,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5900
5904
  tabId
5901
5905
  ]);
5902
5906
  }
5903
- /** Fail loudly only when the mandatory provider lacks an exercised capability. */
5907
+ /** Probe the optional provider before registering or opening its workbench. */
5904
5908
  function assertBetterSidebarContract(service) {
5905
5909
  for (const method of [
5906
5910
  "registerTab",
@@ -28204,7 +28208,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
28204
28208
  //#region src/client/TenderEntry.tsx
28205
28209
  const SIDEBAR_WORKSPACES_SELECTOR = "[data-slot=\"sidebar.workspaces\"]";
28206
28210
  const TENDER_TOP_MOUNT_SELECTOR = "[data-dsh-tender-top-mount=\"true\"]";
28207
- const SIDEBAR_UNAVAILABLE = "无法打开招投标 Tab。请安装或升级 dsh-better-sidebar(需 targetedOpen / stateSubscription),在宿主设置中启用招投标 Tab,然后重启 DSH。仍可使用对话和已支持的 Host 工具。";
28211
+ const SIDEBAR_UNAVAILABLE = "招投标可视化工作台暂不可用,当前输入和业务记录未改变。仍可使用原生对话、提示词生成和已支持的 Host 工具;流程按钮不会代为执行任务。若需工作台,请选择安装 dsh-better-sidebar@0.18.1(需 targetedOpen / stateSubscription),在宿主设置中启用招投标 Tab,再完整重启 DSH";
28208
28212
  /** Keep the whole focused card visible without scrolling the host conversation. */
28209
28213
  function revealShortcut(button) {
28210
28214
  const menu = button.parentElement;