dsh-tender-workbench 0.5.1 → 0.5.3
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 +10 -0
- package/README.en.md +23 -8
- package/README.md +38 -8
- package/docs/RELEASE-0.5.3.md +8 -0
- package/lib/client.js +15 -2
- package/lib/client.js.map +1 -1
- package/lib/types/client/TenderEntry.d.ts.map +1 -1
- package/package.json +16 -4
- package/docs/RELEASE-0.5.1.md +0 -23
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@ All notable changes to `dsh-tender-workbench` are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.5.3] - 2026-09-08
|
|
8
|
+
|
|
9
|
+
- 改善搜索元数据、安装说明、能力边界与四产品互链;无运行时或依赖变更。
|
|
10
|
+
|
|
11
|
+
## [0.5.2] - 2026-09-07
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- 首页输入框下方四个快捷入口对齐共享规范 v1.1.3:上图标、下文字的描边卡片,单行排列、窄屏内部横向滚动,浅深色与悬停/键盘焦点沿用企查查蓝;保留点击才打开工作台的交互。
|
|
16
|
+
|
|
7
17
|
## [0.5.1] - 2026-09-06
|
|
8
18
|
|
|
9
19
|
### Fixed
|
package/README.en.md
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
# dsh-tender-workbench
|
|
2
2
|
|
|
3
|
+
Tender search and bid intelligence in DeepSeek Harness with proposed project search, rule screening, human review and Excel/PDF exports using user-authorized Qichacha MCP.
|
|
4
|
+
|
|
5
|
+
Install a pinned release using the command in the [Chinese quick start](README.md), review the preview or evidence before confirming, and keep the previous version and task-directory backup for rollback. Qichacha calls use the customer's authorized account.
|
|
6
|
+
|
|
7
|
+
Related agents: [数据清洗补全](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)
|
|
8
|
+
|
|
3
9
|
[中文](README.md) | **English**
|
|
4
10
|
|
|
5
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.
|
|
6
12
|
|
|
7
|
-
Current stable version: **0.5.
|
|
13
|
+
Current stable version: **0.5.3** (stable release).
|
|
8
14
|
|
|
9
15
|
## What it does
|
|
10
16
|
|
|
@@ -67,12 +73,12 @@ dsh plugin --profile web add dsh-tender-workbench
|
|
|
67
73
|
dsh web --no-open
|
|
68
74
|
```
|
|
69
75
|
|
|
70
|
-
To install the exact 0.5.
|
|
76
|
+
To install the exact 0.5.2 release:
|
|
71
77
|
|
|
72
78
|
```sh
|
|
73
79
|
dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
|
|
74
80
|
dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
|
|
75
|
-
dsh plugin --profile web add dsh-tender-workbench@0.5.
|
|
81
|
+
dsh plugin --profile web add dsh-tender-workbench@0.5.3
|
|
76
82
|
```
|
|
77
83
|
|
|
78
84
|
To install from an independent checkout, install the required Provider plugins first, then run from this repository:
|
|
@@ -91,7 +97,7 @@ To install a packed build:
|
|
|
91
97
|
```sh
|
|
92
98
|
dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
|
|
93
99
|
dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
|
|
94
|
-
dsh plugin --profile web add ./dsh-tender-workbench-0.5.
|
|
100
|
+
dsh plugin --profile web add ./dsh-tender-workbench-0.5.2.tgz
|
|
95
101
|
dsh web --no-open
|
|
96
102
|
```
|
|
97
103
|
|
|
@@ -108,15 +114,24 @@ dsh plugin --profile web remove dsh-tender-workbench
|
|
|
108
114
|
Upgrade an existing installation by installing the stable version and fully restarting the Web profile:
|
|
109
115
|
|
|
110
116
|
```sh
|
|
111
|
-
dsh plugin --profile web add dsh-tender-workbench@0.5.
|
|
117
|
+
dsh plugin --profile web add dsh-tender-workbench@0.5.3
|
|
112
118
|
dsh web --no-open
|
|
113
119
|
```
|
|
114
120
|
|
|
115
|
-
Version 0.5.1
|
|
121
|
+
Version 0.5.2 aligns below-composer shortcuts with shared UI specification v1.1.3: outlined cards with an icon above each label, light/dark styling, a single horizontally scrollable row on narrow screens, and fully visible keyboard-focused cards. The workbench stays closed on entry and opens only on an explicit shortcut click, as in 0.5.1. Session isolation, global sidebar preferences, history and Artifact schemas remain unchanged. To roll back, reinstall `dsh-tender-workbench@0.5.1` and restart the profile. Published versions and tags remain immutable.
|
|
116
122
|
|
|
117
123
|
## Using the workbench
|
|
118
124
|
|
|
119
|
-
The
|
|
125
|
+
The top-left “招投标” launcher creates a distinct native Session using the current, recent, or first available workspace path. It shows the “招投标智能体” title and goal icon without opening the workbench. Below-composer shortcuts explicitly open the query, screening, review, or delivery view; the Session Header recovery action remains available. Other Sessions retain their original branding.
|
|
126
|
+
|
|
127
|
+
## Interface examples and marketplace submission
|
|
128
|
+
|
|
129
|
+
These screenshots show the actual 0.5.2 React components in an isolated host fixture, visibly labeled as isolated UI validation without DSH/MCP connections. They contain no customer information or real business responses. They do not demonstrate live DSH/QCC operation or marketplace one-click installation.
|
|
130
|
+
|
|
131
|
+

|
|
132
|
+

|
|
133
|
+
|
|
134
|
+
See [submission status and isolated install/uninstall evidence](docs/MARKET-SUBMISSION.md). An open PR is not a completed marketplace listing.
|
|
120
135
|
|
|
121
136
|
Navigation only changes the visible workbench phase. It does not mutate business state or run a later action. Criteria are proposed, edited, previewed, and confirmed as distinct steps. Agent recommendations never become user decisions automatically. Report generation always shows the reviewed and pending scope before creating a delivery snapshot.
|
|
122
137
|
|
|
@@ -137,7 +152,7 @@ The build emits the Host loader at `lib/index.js`, the Client bundle at `lib/cli
|
|
|
137
152
|
|
|
138
153
|
The province, city, and district source snapshot is maintained in [resources/area.ts](resources/area.ts).
|
|
139
154
|
|
|
140
|
-
See [CHANGELOG.md](CHANGELOG.md) and [the 0.5.
|
|
155
|
+
See [CHANGELOG.md](CHANGELOG.md) and [the 0.5.2 release checklist](docs/RELEASE-0.5.2.md) for the stable-release scope and operational checks.
|
|
141
156
|
|
|
142
157
|
## Current scope
|
|
143
158
|
|
package/README.md
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
# dsh-tender-workbench
|
|
2
2
|
|
|
3
|
+
## 安装与三分钟上手
|
|
4
|
+
|
|
5
|
+
招投标智能体:支持招投标搜索、招标查询、投标查询、标讯查询、拟建项目与项目筛选,辅助商机发现、人工复核及 Excel/PDF 导出,使用客户自备授权的企查查 MCP。
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
dsh plugin --profile web add dsh-tender-workbench@0.5.3
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
请先满足下文的 DSH、连接器及侧边栏依赖要求;安装后完整停止并重启对应 Profile。
|
|
12
|
+
|
|
13
|
+
进入“招投标”,设置地区、关键词和时间范围,使用已授权的 qcc-tender 查询。检查规则影响预览并确认筛选条件,人工复核记录后选择导出 Excel 或 PDF。三分钟用于熟悉操作,不承诺查询或报告一定在三分钟完成。
|
|
14
|
+
|
|
15
|
+
**流程样例(示意,非真实调用结果):** 地区/日期/关键词 → 标讯与拟建项目 → 规则影响预览 → 人工复核 → Excel/PDF(未完成复核会标注部分交付)。
|
|
16
|
+
|
|
17
|
+
**能力边界:** 投标查询指已授权数据源内的公开标讯查询,不代办投标。无 Web 搜索兜底、订阅或自动 Bid/No-Bid 决策;不提供在线 PDF 预览。
|
|
18
|
+
|
|
19
|
+
**升级与回滚:** 升级前停止 Profile 并备份任务目录,记录当前精确版本;使用上面的固定版本命令升级,再完整重启。回滚时将版本号替换为升级前记录的版本,并使用升级前任务目录副本;不以旧版直接读取已迁移任务目录。
|
|
20
|
+
|
|
21
|
+
相关智能体:[数据清洗补全](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)
|
|
22
|
+
|
|
23
|
+
|
|
3
24
|
**中文** | [English](README.en.md)
|
|
4
25
|
|
|
5
26
|
> 面向国内招投标团队的 DeepSeek Harness 开源智能体插件:在一个会话级工作台内完成标讯与拟建项目查询、确定性规则初筛、限定范围智能分析、人工复核,以及 Excel/PDF 报告交付。
|
|
6
27
|
>
|
|
7
|
-
> 当前稳定版本:**0.5.
|
|
28
|
+
> 当前稳定版本:**0.5.3**(正式版本)
|
|
8
29
|
|
|
9
30
|
[](https://github.com/duhu2000/dsh-tender-workbench/actions/workflows/ci.yml)
|
|
10
31
|
[](https://www.npmjs.com/package/dsh-tender-workbench)
|
|
@@ -49,10 +70,10 @@ dsh web --no-open
|
|
|
49
70
|
|
|
50
71
|
安装或移除插件后,请完整重启 Web Profile。插件通过 `dsh.bundle.patch` 启用 `cordis.patch.yml`,并注册 `dsh-tender-workbench` Loader。
|
|
51
72
|
|
|
52
|
-
安装指定的 `0.5.
|
|
73
|
+
安装指定的 `0.5.3` 版本:
|
|
53
74
|
|
|
54
75
|
```sh
|
|
55
|
-
dsh plugin --profile web add dsh-tender-workbench@0.5.
|
|
76
|
+
dsh plugin --profile web add dsh-tender-workbench@0.5.3
|
|
56
77
|
```
|
|
57
78
|
|
|
58
79
|
移除插件:
|
|
@@ -63,7 +84,7 @@ dsh plugin --profile web remove dsh-tender-workbench
|
|
|
63
84
|
|
|
64
85
|
## 使用工作台
|
|
65
86
|
|
|
66
|
-
插件提供左上角“招投标”入口和会话 Header
|
|
87
|
+
插件提供左上角“招投标”入口和会话 Header 恢复入口。点击左上角入口会根据当前工作区、最近工作区或第一个可用工作区的路径创建独立原生会话,显示“招投标智能体”标题与目标图标,默认不打开右侧工作台。点击输入框下方的项目查询、规则筛选、人工复核或结果交付按钮时,才打开对应 Better Sidebar 视图;其他会话保留各自原有标题与标识。
|
|
67
88
|
|
|
68
89
|
页面导航只切换可见阶段,不会修改业务状态或自动执行后续动作。规则建议、编辑、影响预览与确认彼此独立;报告生成前始终展示已复核和待复核范围。宽屏使用主从布局,中窄屏保持相同信息顺序,并保留局部表格滚动与可访问的固定操作区。
|
|
69
90
|
|
|
@@ -98,11 +119,11 @@ dsh plugin --profile web remove dsh-tender-workbench
|
|
|
98
119
|
从已有版本升级:
|
|
99
120
|
|
|
100
121
|
```sh
|
|
101
|
-
dsh plugin --profile web add dsh-tender-workbench@0.5.
|
|
122
|
+
dsh plugin --profile web add dsh-tender-workbench@0.5.3
|
|
102
123
|
dsh web --no-open
|
|
103
124
|
```
|
|
104
125
|
|
|
105
|
-
|
|
126
|
+
0.5.3 更新搜索与安装文档,保留 0.5.2 的运行时行为。0.5.2 对齐共享规范 v1.1.3:首页输入框下方四个快捷入口采用上图标、下文字的描边卡片,支持浅深色、窄屏单行横向滚动与键盘聚焦完整可见。延续 0.5.1 的默认收起行为:「招投标」菜单仅进入独立会话,点击下方按钮才打开工作台。不修改宿主全局侧栏偏好、历史布局或业务数据。如需回退,可安装 `dsh-tender-workbench@0.5.1` 并重启 Profile。npm 版本与公开 Git 标签保持不可变。
|
|
106
127
|
|
|
107
128
|
## 本地开发
|
|
108
129
|
|
|
@@ -117,9 +138,18 @@ corepack pnpm@11.7.0 run check
|
|
|
117
138
|
|
|
118
139
|
`check` 会执行类型检查、完整 Vitest 测试、生产构建、README/发布状态校验以及 npm tarball 白名单预检。配置 npm Trusted Publishing 后,[发布工作流](.github/workflows/release.yml)可使用 OIDC 和 provenance;手工发布不得声称 provenance。
|
|
119
140
|
|
|
120
|
-
省、市、区数据源快照维护在 [resources/area.ts](resources/area.ts)。版本变更见 [CHANGELOG.md](CHANGELOG.md),发布检查见 [0.5.
|
|
141
|
+
省、市、区数据源快照维护在 [resources/area.ts](resources/area.ts)。版本变更见 [CHANGELOG.md](CHANGELOG.md),发布检查见 [0.5.3 发布清单](docs/RELEASE-0.5.3.md)。
|
|
142
|
+
|
|
143
|
+
## 界面演示与市场投稿
|
|
144
|
+
|
|
145
|
+
以下为 0.5.2 实际 React 组件在隔离宿主夹具中的截图,画面标注“隔离 UI 验证 · 不连接 DSH / MCP”。无客户信息、生产会话或真实业务响应;仅展示界面,不代表真实 DSH 启动、QCC 查询或市场一键安装验收。
|
|
146
|
+
|
|
147
|
+

|
|
148
|
+

|
|
149
|
+
|
|
150
|
+
市场投稿状态及隔离安装/卸载证据见 [市场登记](docs/MARKET-SUBMISSION.md)。提交 PR 不等于已经上架。
|
|
121
151
|
|
|
122
|
-
##
|
|
152
|
+
## 业务范围限制
|
|
123
153
|
|
|
124
154
|
当前版本不提供在线 PDF 预览、交付版本对比、已成功文件的重复生成、订阅、CRM 跟进、企业画像、来源准确性核验或 Bid/No-Bid 决策。查询、分类、分析和复核都可以作为合法结束点;只有用户明确操作后,后续阶段才会继续。
|
|
125
155
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# dsh-tender-workbench 0.5.3
|
|
2
|
+
|
|
3
|
+
Version: **0.5.3**
|
|
4
|
+
Status: **release candidate**
|
|
5
|
+
|
|
6
|
+
本次仅优化搜索发现与安装转化:更新 npm description/keywords、README 安装首屏、真实能力边界、示意流程、升级回滚与四产品互链。运行时功能与依赖版本不变。
|
|
7
|
+
|
|
8
|
+
发布前执行项目完整 check;发布后核验 npm 精确版本、latest、README 与 provenance。回滚可安装 dsh-tender-workbench@0.5.2,使用升级前任务目录副本。
|
package/lib/client.js
CHANGED
|
@@ -4762,7 +4762,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4762
4762
|
}
|
|
4763
4763
|
//#endregion
|
|
4764
4764
|
//#region \0dsh-tender-workbench-css:/home/runner/work/dsh-tender-workbench/dsh-tender-workbench/src/client/workbench-entry.module.css.mjs
|
|
4765
|
-
const css$2 = ".X4SUna_topMount{flex:none;width:100%;min-width:0}.X4SUna_topEntry{box-sizing:border-box;width:100%;padding-right:var(--dsh-sidebar-inline-padding,12px)}.X4SUna_headerButton{color:var(--text-secondary,#475467);cursor:pointer;font:inherit;background:0 0;border:0;justify-content:center;align-items:center;gap:6px;display:inline-flex}.X4SUna_sidebarButton:disabled{cursor:wait;opacity:.62}.X4SUna_sidebarButton{box-sizing:border-box;white-space:nowrap;border-radius:6px;flex:none;justify-content:flex-start;gap:8px;width:100%;min-width:0;height:42px;margin:0 0 8px;padding:0 10px;overflow:hidden}.X4SUna_sidebarRail{border-radius:50%;justify-content:center;width:36px;height:36px;padding:0}.X4SUna_sidebarError{color:#b42318;overflow-wrap:anywhere;padding:2px 12px 7px;font-size:11px;line-height:16px;display:block}.X4SUna_headerButton{border:1px solid var(--border-color,#e5e7eb);border-radius:999px;min-height:26px;padding:4px 8px;font-size:11px}.X4SUna_headerButton[data-workbench-status=running]{border-color:var(--qcc-border);color:var(--qcc-action)}.X4SUna_headerButton[data-workbench-status=failed],.X4SUna_headerButton[data-workbench-status=unavailable]{color:#b42318;border-color:#d92d2066}.X4SUna_topEntry[data-wide=false] .X4SUna_sidebarError{clip:rect(0, 0, 0, 0);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.X4SUna_sidebarButton>svg{color:var(--qcc-action)}.X4SUna_sidebarButton:hover,.X4SUna_sidebarButton[aria-current=page]{color:var(--qcc-action);background:var(--qcc-selected)}.X4SUna_headerButton{color:var(--qcc-action);border-color:var(--qcc-border);border-radius:6px}.X4SUna_headerButton:hover,.X4SUna_headerButton:focus-visible{color:var(--qcc-hover);background:var(--qcc-selected)}.X4SUna_heroMount{width:100%;min-width:0}.X4SUna_hero{text-align:center;margin:0 auto 16px}.X4SUna_heroRow{justify-content:center;align-items:center;gap:12px;display:flex}.X4SUna_heroRow h1{color:var(--qcc-text);margin:0;font-family:inherit;font-size:28px;font-weight:650;line-height:1.3}.X4SUna_heroLogo{width:48px;height:48px;color:var(--qcc-action);background:var(--qcc-selected);border-radius:12px;flex:none;place-items:center;display:grid}.X4SUna_hero p{color:var(--qcc-muted);margin:12px 16px 0;font-size:14px;line-height:1.6}.X4SUna_shortcutMount{flex:none;width:100%;min-width:0}.X4SUna_shortcuts{flex-wrap:
|
|
4765
|
+
const css$2 = ".X4SUna_topMount{flex:none;width:100%;min-width:0}.X4SUna_topEntry{box-sizing:border-box;width:100%;padding-right:var(--dsh-sidebar-inline-padding,12px)}.X4SUna_headerButton{color:var(--text-secondary,#475467);cursor:pointer;font:inherit;background:0 0;border:0;justify-content:center;align-items:center;gap:6px;display:inline-flex}.X4SUna_sidebarButton:disabled{cursor:wait;opacity:.62}.X4SUna_sidebarButton{box-sizing:border-box;white-space:nowrap;border-radius:6px;flex:none;justify-content:flex-start;gap:8px;width:100%;min-width:0;height:42px;margin:0 0 8px;padding:0 10px;overflow:hidden}.X4SUna_sidebarRail{border-radius:50%;justify-content:center;width:36px;height:36px;padding:0}.X4SUna_sidebarError{color:#b42318;overflow-wrap:anywhere;padding:2px 12px 7px;font-size:11px;line-height:16px;display:block}.X4SUna_headerButton{border:1px solid var(--border-color,#e5e7eb);border-radius:999px;min-height:26px;padding:4px 8px;font-size:11px}.X4SUna_headerButton[data-workbench-status=running]{border-color:var(--qcc-border);color:var(--qcc-action)}.X4SUna_headerButton[data-workbench-status=failed],.X4SUna_headerButton[data-workbench-status=unavailable]{color:#b42318;border-color:#d92d2066}.X4SUna_topEntry[data-wide=false] .X4SUna_sidebarError{clip:rect(0, 0, 0, 0);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.X4SUna_sidebarButton>svg{color:var(--qcc-action)}.X4SUna_sidebarButton:hover,.X4SUna_sidebarButton[aria-current=page]{color:var(--qcc-action);background:var(--qcc-selected)}.X4SUna_headerButton{color:var(--qcc-action);border-color:var(--qcc-border);border-radius:6px}.X4SUna_headerButton:hover,.X4SUna_headerButton:focus-visible{color:var(--qcc-hover);background:var(--qcc-selected)}.X4SUna_heroMount{width:100%;min-width:0}.X4SUna_hero{text-align:center;margin:0 auto 16px}.X4SUna_heroRow{justify-content:center;align-items:center;gap:12px;display:flex}.X4SUna_heroRow h1{color:var(--qcc-text);margin:0;font-family:inherit;font-size:28px;font-weight:650;line-height:1.3}.X4SUna_heroLogo{width:48px;height:48px;color:var(--qcc-action);background:var(--qcc-selected);border-radius:12px;flex:none;place-items:center;display:grid}.X4SUna_hero p{color:var(--qcc-muted);margin:12px 16px 0;font-size:14px;line-height:1.6}.X4SUna_shortcutMount{flex:none;width:100%;min-width:0}.X4SUna_shortcuts{box-sizing:border-box;scrollbar-width:none;flex-wrap:nowrap;justify-content:safe center;align-items:center;gap:8px;width:100%;min-width:0;max-width:780px;margin:18px auto 0;padding:5px 16px;display:flex;overflow-x:auto}.X4SUna_shortcuts::-webkit-scrollbar{display:none}.X4SUna_shortcuts button{box-sizing:border-box;border:1px solid var(--qcc-border);min-width:108px;min-height:54px;color:var(--qcc-muted);background:var(--qcc-surface);font:inherit;white-space:nowrap;cursor:pointer;border-radius:8px;flex-direction:column;flex:none;justify-content:center;align-items:center;gap:5px;padding:7px 12px;font-size:12px;line-height:1.4;display:inline-flex}.X4SUna_shortcutIcon{width:17px;height:17px;display:inline-flex}.X4SUna_shortcutIcon svg{width:17px;height:17px}.X4SUna_shortcuts button:hover:not(:disabled),.X4SUna_shortcuts button:focus-visible{color:var(--qcc-action);background:var(--qcc-selected)}.X4SUna_promptEntry{z-index:40;pointer-events:none;position:absolute;inset:0}[data-composer-card]:has(.X4SUna_promptEntry){padding-top:48px}.X4SUna_promptEntry .X4SUna_promptTrigger{pointer-events:auto;position:absolute;top:10px;left:16px}.X4SUna_promptEntry .X4SUna_promptNotice{position:absolute;top:16px;left:140px;right:16px}.X4SUna_promptTrigger{border:1px solid var(--qcc-border);background:var(--qcc-selected);color:var(--qcc-action);font:inherit;cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:6px 10px;font-size:12px;display:inline-flex}.X4SUna_promptNotice{color:var(--qcc-muted);font-size:12px}.X4SUna_backdrop{z-index:2000;pointer-events:auto;box-sizing:border-box;background:#0a18286b;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.X4SUna_dialog{background:var(--qcc-surface);width:min(720px,100%);min-height:0;max-height:calc(100dvh - 48px);color:var(--qcc-text);border:1px solid var(--qcc-border);border-radius:12px;grid-template-rows:auto minmax(0,1fr) auto;font:14px/1.6 PingFang SC,Microsoft YaHei,sans-serif;display:grid;overflow:hidden;box-shadow:0 20px 60px #00000038}.X4SUna_dialog *{box-sizing:border-box}.X4SUna_dialogHeader{border-bottom:1px solid var(--qcc-border);justify-content:space-between;align-items:flex-start;gap:12px;padding:20px 24px;display:flex}.X4SUna_dialogHeader h2{margin:0;font-size:20px}.X4SUna_dialogHeader p{color:var(--qcc-muted);margin:8px 0 0;font-size:12px}.X4SUna_dialog button{border:1px solid var(--qcc-border);min-height:36px;color:var(--qcc-text);background:var(--qcc-surface);font:inherit;cursor:pointer;border-radius:6px;padding:8px 12px}.X4SUna_dialog button:hover{color:var(--qcc-action);background:var(--qcc-selected)}.X4SUna_dialog .X4SUna_closeButton{flex:none;width:36px;padding:0;font-size:22px}.X4SUna_dialogBody{overscroll-behavior:contain;gap:20px;min-height:0;padding:24px;display:grid;overflow:auto}.X4SUna_dialogBody fieldset{border:0;min-width:0;margin:0;padding:0}.X4SUna_dialogBody legend{padding:0 0 8px;font-weight:600}.X4SUna_scopeGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.X4SUna_scopeGrid label{border:1px solid var(--qcc-border);cursor:pointer;border-radius:8px;align-items:center;gap:8px;padding:12px;display:flex}.X4SUna_scopeGrid label[data-selected=true]{border-color:var(--qcc-action);color:var(--qcc-action);background:var(--qcc-selected)}.X4SUna_scopeGrid input{accent-color:var(--qcc-action);margin:0}.X4SUna_formField{flex-wrap:wrap;gap:8px;font-weight:600;display:flex}.X4SUna_formField span{color:var(--qcc-muted);font-size:12px;font-weight:400}.X4SUna_formField :where(input,textarea,select){border:1px solid var(--qcc-border);width:100%;min-width:0;color:var(--qcc-text);background:var(--qcc-surface);font:inherit;border-radius:6px;padding:10px 12px;font-weight:400}.X4SUna_formField textarea{resize:vertical}.X4SUna_fieldGrid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.X4SUna_formHint{color:var(--qcc-muted);margin:0;font-size:12px}.X4SUna_promptPreview{border:1px solid var(--qcc-border);background:var(--qcc-page);border-radius:8px;padding:12px}.X4SUna_promptPreview summary{color:var(--qcc-action);cursor:pointer}.X4SUna_promptPreview pre{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit}.X4SUna_dialogFooter{border-top:1px solid var(--qcc-border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:16px 24px;display:flex}.X4SUna_dialogFooter>:where(span,p){color:var(--qcc-muted);margin:0;font-size:12px}.X4SUna_dialogActions{flex-wrap:wrap;gap:8px;display:flex}.X4SUna_dialog .X4SUna_action{border-color:var(--qcc-action);color:var(--qcc-on-action);background:var(--qcc-action)}.X4SUna_dialog .X4SUna_action:hover{border-color:var(--qcc-hover);color:var(--qcc-on-action);background:var(--qcc-hover)}@media (width<=600px){.X4SUna_heroRow h1{font-size:22px}.X4SUna_heroLogo{border-radius:8px;width:40px;height:40px}.X4SUna_heroLogo svg{width:24px;height:24px}.X4SUna_shortcuts{justify-content:flex-start;padding-inline:12px}.X4SUna_shortcuts button{min-width:92px;padding:7px 10px}.X4SUna_backdrop{padding:12px}.X4SUna_dialog{max-height:calc(100dvh - 24px)}.X4SUna_dialogHeader,.X4SUna_dialogBody,.X4SUna_dialogFooter{padding:16px}.X4SUna_fieldGrid{grid-template-columns:1fr}.X4SUna_scopeGrid{gap:4px}.X4SUna_scopeGrid label{gap:4px;padding:8px 4px;font-size:12px}.X4SUna_formField :where(input,textarea,select){font-size:16px}}";
|
|
4766
4766
|
const tagId$2 = "dsh-tender-workbench/workbench-entry.module.css";
|
|
4767
4767
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
|
|
4768
4768
|
const tag = document.createElement("style");
|
|
@@ -4793,6 +4793,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4793
4793
|
"promptPreview": "X4SUna_promptPreview",
|
|
4794
4794
|
"promptTrigger": "X4SUna_promptTrigger",
|
|
4795
4795
|
"scopeGrid": "X4SUna_scopeGrid",
|
|
4796
|
+
"shortcutIcon": "X4SUna_shortcutIcon",
|
|
4796
4797
|
"shortcutMount": "X4SUna_shortcutMount",
|
|
4797
4798
|
"shortcuts": "X4SUna_shortcuts",
|
|
4798
4799
|
"sidebarButton": "X4SUna_sidebarButton",
|
|
@@ -28060,6 +28061,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
28060
28061
|
//#region src/client/TenderEntry.tsx
|
|
28061
28062
|
const SIDEBAR_WORKSPACES_SELECTOR = "[data-slot=\"sidebar.workspaces\"]";
|
|
28062
28063
|
const TENDER_TOP_MOUNT_SELECTOR = "[data-dsh-tender-top-mount=\"true\"]";
|
|
28064
|
+
/** Keep the whole focused card visible without scrolling the host conversation. */
|
|
28065
|
+
function revealShortcut(button) {
|
|
28066
|
+
const menu = button.parentElement;
|
|
28067
|
+
if (!menu || menu.scrollWidth <= menu.clientWidth) return;
|
|
28068
|
+
const card = button.getBoundingClientRect();
|
|
28069
|
+
const row = menu.getBoundingClientRect();
|
|
28070
|
+
const inset = 5;
|
|
28071
|
+
if (card.left < row.left + inset) menu.scrollLeft += card.left - row.left - inset;
|
|
28072
|
+
else if (card.right > row.right - inset) menu.scrollLeft += card.right - row.right + inset;
|
|
28073
|
+
}
|
|
28063
28074
|
/** Only this session's own DOM is branded; no root/single brand slot. */
|
|
28064
28075
|
function TenderHeroTitleBridge({ sessionId, useSession, openPhase }) {
|
|
28065
28076
|
const anchorRef = (0, react.useRef)(null);
|
|
@@ -28107,11 +28118,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
28107
28118
|
]
|
|
28108
28119
|
].map(([phase, label, icon]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
28109
28120
|
type: "button",
|
|
28121
|
+
onFocus: (event) => revealShortcut(event.currentTarget),
|
|
28110
28122
|
onClick: () => openPhase(phase),
|
|
28111
28123
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
28124
|
+
className: workbench_entry_module_css_default.shortcutIcon,
|
|
28112
28125
|
"aria-hidden": "true",
|
|
28113
28126
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WorkbenchIcon, { name: icon })
|
|
28114
|
-
}), label]
|
|
28127
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: label })]
|
|
28115
28128
|
}, phase))
|
|
28116
28129
|
});
|
|
28117
28130
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|