dsh-data-cleaning-agent 0.5.3 → 0.6.1
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 +66 -0
- package/README.en.md +17 -8
- package/README.md +15 -7
- package/docs/COMPATIBILITY.md +28 -7
- package/docs/G5-HOST-BRIDGE.md +34 -8
- package/docs/QCC-ENRICHMENT-DESIGN.md +4 -2
- package/docs/QCC-PHASES-ROADMAP.md +3 -2
- package/docs/RELEASE-0.5.3.md +10 -3
- package/docs/RELEASE-0.6.0.md +57 -0
- package/docs/RELEASE-0.6.1.md +50 -0
- package/docs/UI-WORKFLOW-V2-ACCEPTANCE.md +84 -0
- package/docs/UI-WORKFLOW-V2-MIGRATION.md +62 -0
- package/docs/UI-WORKFLOW-V2.md +173 -0
- package/docs/USER-GUIDE.md +11 -8
- package/lib/artifacts.js +239 -0
- package/lib/client.js +1298 -306
- package/lib/engine.js +1 -1
- package/lib/index.js +10 -5
- package/lib/jobs.js +1 -1
- package/lib/qcc-command.js +276 -0
- package/lib/qcc.js +39 -1
- package/lib/skill-enrich.js +7 -2
- package/lib/tools.js +1 -1
- package/lib/web.js +268 -1
- package/lib/workflow-contract.js +263 -0
- package/lib/workflow.js +452 -0
- package/package.json +7 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,72 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.6.1] - 2026-09-04
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- 修复 DSH Code Mode 下同源 Web 路由直接调用动态 QCC 工具会被 ToolRuntime 拒绝的问题:新增
|
|
11
|
+
`data_cleaning_qcc_run` Agent-owned 高层工具,工作台仅在 Host 暂存明细并向原生会话发送不含企业
|
|
12
|
+
名单的 commandId;真实 QCC 调用以父执行 token/Session 的 nested execution 运行。
|
|
13
|
+
- 当宿主不提供工具注册能力时 fail closed,并在 capabilities 中报告
|
|
14
|
+
`agentCommandToolRegistered:false`,不会暂存或误执行付费任务。
|
|
15
|
+
- 历史任务恢复下载页改为读取 Host 持久化的匹配/补全摘要;进程重启后不再把已补全数和待核验数
|
|
16
|
+
显示为“—”。
|
|
17
|
+
|
|
18
|
+
### Verified
|
|
19
|
+
- DSH `0.1.1-rc.2` 真实连接环境完成一次且仅一次主体检索:唯一精确匹配
|
|
20
|
+
`企查查科技股份有限公司`(统一社会信用代码 `91320594088140947F`);未查询工商详情、未重试。
|
|
21
|
+
- 同一公开主体通过工作台完整执行 Agent-owned 批次:实际 2 次 QCC 调用,1/1 精确补全,回填
|
|
22
|
+
信用代码、法定代表人、注册资本、成立日期与登记状态;0 待核验、0 失败、无重试。
|
|
23
|
+
- 结果 CSV/XLSX 与异常清单 CSV/XLSX 四件套均生成成功,下载后 checksum 与 Host 元数据一致,
|
|
24
|
+
XLSX 结构校验通过;重启 DSH Host 后任务、统计和四件套仍可从任务历史恢复。
|
|
25
|
+
- `npm run check` 通过,174/174 自动化测试全绿。
|
|
26
|
+
|
|
27
|
+
## [0.6.0] - 2026-09-04
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
- 启动 v2 五步工作流:上传数据、规则确认、数据匹配、清洗补全、下载数据;新增共享字段目录、
|
|
31
|
+
映射锚点和可审计匹配状态契约。
|
|
32
|
+
- 新增 `dc_workflows_v2` Host 元数据存储与同源 `/data-cleaning/api/workflow/*` API,支持 taskId
|
|
33
|
+
隔离、revision 并发保护、任务恢复及阶段推进。
|
|
34
|
+
- 上传/粘贴解析、数据预览、自动字段映射、任务目标、匹配规则与字段选择正式接入 taskId 工作流;
|
|
35
|
+
规则确认后自动生成本地质量体检并推进匹配阶段。
|
|
36
|
+
- 提示词生成器升级为数据来源、匹配规则、清洗与补全、确认描述四步向导,并把解析数据和任务草稿
|
|
37
|
+
通过会话事件桥安全传入同一 Host 任务。
|
|
38
|
+
- 增加中央七阶段业务首页、最近任务恢复、输入框下五能力入口,以及 taskId 驱动的右侧五步工作台。
|
|
39
|
+
- 新增 Host 耐久制品层:每个任务生成清洗补全结果与异常清单的 CSV/XLSX 四个文件,提供列表、生成、
|
|
40
|
+
checksum 校验下载 API;XLSX 为可由 Excel/SheetJS 读取的真实工作簿。
|
|
41
|
+
- 新增 v2 升级/迁移/回滚说明和 T6~T9 双基线、视觉、恢复及发布准备验收文档。
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
- Client 原始数据按 taskId 隔离,不再使用跨任务模块级共享 session;同一会话并发创建与写操作分别
|
|
45
|
+
通过 coalescing 和串行队列避免重复任务及 revision 冲突。
|
|
46
|
+
- 当前基础企业匹配、补全、预览和 CSV 下载复用 G5 Host Bridge,并保留零调用估算、客户自带 QCC
|
|
47
|
+
账号确认、幂等键与调用上限门。
|
|
48
|
+
- 下载页改为读取 Host 四类耐久制品;已经完成的历史任务无需恢复浏览器原始行即可跨 Host 重启下载。
|
|
49
|
+
- 本地确定性清洗可从规则确认/质量体检直接进入 `export_ready`,不会为零 QCC 调用强造匹配步骤。
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
- 修复中央业务首页条件调用组件导致真实 DSH 页面出现 React #310 的 Hooks 顺序问题。
|
|
53
|
+
- 修复提示词数据集与任务草稿事件并发时可能创建两个 Host taskId 的竞态。
|
|
54
|
+
- 修复规则按钮文案承诺“运行质量体检”但只切换页面的问题;现在规则确认后立即生成并持久化摘要。
|
|
55
|
+
- 修复 `partial` 任务在显式重试后无新候选时走入非法匹配状态的问题;现在可继续补全并回到
|
|
56
|
+
`export_ready`。
|
|
57
|
+
- 修复从中央首页最近任务打开工作台时只传阶段、未携带 taskId,导致误创建新草稿的问题。
|
|
58
|
+
|
|
59
|
+
### Verified
|
|
60
|
+
- `npm test` 165/165 通过;DSH `0.1.1-rc.2` 隔离 Host 43182 实际渲染 T3~T5,并完成
|
|
61
|
+
2 行 CSV 的上传、自动映射、规则确认与质量体检,任务达到 `diagnosed / match`。
|
|
62
|
+
- 最新 tarball 在 rc.2(43190)与 alpha.2(43191)均完成四类制品创建、真实 XLSX 反向解析和
|
|
63
|
+
跨 Host 重启恢复;rc.2 完成浅色、深色和 820×900 窄屏视觉回归。未执行真实 QCC 调用。
|
|
64
|
+
|
|
65
|
+
### Security
|
|
66
|
+
- v2 Host KV 只保存任务元数据、数字汇总和制品引用,不持久化原始企业名单、候选详情、QCC 原始响应或凭据。
|
|
67
|
+
- 工作流契约和任务元数据 API 不执行 QCC 工具;真实补全继续受零调用估算、用户付费确认、幂等键和调用上限保护。
|
|
68
|
+
- 制品 ID 与路径严格校验,文件名去除控制字符,单制品限 32 MiB;下载前验证 SHA-256,运行制品目录
|
|
69
|
+
已从 Git 和 npm 包排除。
|
|
70
|
+
- CSV 导出会中和以 `= + - @` 开头的外部文本,防止 Excel/LibreOffice 公式注入;XLSX Base64
|
|
71
|
+
读取上限覆盖编码后的 4/3 体积膨胀,解码后仍执行 32 MiB 硬限制。
|
|
72
|
+
|
|
7
73
|
## [0.5.3] - 2026-09-03
|
|
8
74
|
|
|
9
75
|
> UI 二次对齐版本;不改变 Host/QCC 工具契约或计费安全门。
|
package/README.en.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> A data cleaning & completion agent plugin for DeepSeek Harness: local CSV/XLSX/JSON engine plus optional Qichacha (QCC) MCP enterprise-data enrichment. Initiated and maintained by the Qichacha (QCC) team.
|
|
4
4
|
>
|
|
5
|
-
> Current source version / 当前源码版本: **0.
|
|
5
|
+
> Current source version / 当前源码版本: **0.6.1** (stable release)
|
|
6
6
|
|
|
7
7
|
[](https://github.com/duhu2000/dsh-data-cleaning-agent/actions/workflows/ci.yml)
|
|
8
8
|
[](https://www.npmjs.com/package/dsh-data-cleaning-agent)
|
|
@@ -46,7 +46,8 @@ near the top of the sidebar. It opens a dedicated native DSH session with a busi
|
|
|
46
46
|
product/workflow introduction, and a prompt builder at the upper-left of the composer. The builder
|
|
47
47
|
accepts pasted entities, locally parsed spreadsheet data, or image attachments and writes an editable
|
|
48
48
|
task brief back to the native composer. Five workflow actions (upload, profile, match, enrich, history)
|
|
49
|
-
sit below the composer and open the
|
|
49
|
+
sit below the composer and open the five-step workbench (upload, rules, match, enrich, download)
|
|
50
|
+
on demand. Completed tasks expose four durable Host artifacts: result and exception-list CSV/XLSX.
|
|
50
51
|
|
|
51
52
|
Without the `dsh` CLI, use the install script:
|
|
52
53
|
|
|
@@ -68,6 +69,8 @@ Or let an agent install it for you:
|
|
|
68
69
|
| Parse | web `/data-cleaning/api/mvp/parse` | CSV / XLSX / JSON |
|
|
69
70
|
| Async jobs | web `/data-cleaning/api/mvp/jobs` | job state machine + persistent storage |
|
|
70
71
|
| UI | web `/data-cleaning/` | upload → clean/complete → export |
|
|
72
|
+
| Five-step tasks | web `/data-cleaning/api/workflow/*` | taskId/revision, rules, match, enrich, recovery, and state audit |
|
|
73
|
+
| Durable artifacts | Host workspace `.dsh-data-cleaning-artifacts/v1` | result/exception CSV+XLSX, checksum verification, restart-safe download |
|
|
71
74
|
| In-app entry | top "Data Cleaning & Completion" entry + five actions below the composer | dedicated business home in the center; opens the Mockup-aligned workbench on demand |
|
|
72
75
|
| Prompt builder | `conversation.input.overlay` | text / spreadsheet / image intake, cleaning and enrichment selection, editable native-composer draft |
|
|
73
76
|
| Tool cards | `tool.call.toolview` (`data_clean_rows`/`data_complete_rows`/`data_profile`) | render clean/complete/profile result cards in-conversation with running/done/failed state |
|
|
@@ -75,8 +78,8 @@ Or let an agent install it for you:
|
|
|
75
78
|
| Skill | `data-cleaning` | guides the model through the workflow |
|
|
76
79
|
| QCC Skill enrichment | `enterprise-enrichment` | 0.4.0: company panorama, ownership, governance, and historical registration |
|
|
77
80
|
| 0.4.0 preflight | web `/data-cleaning/api/phase2/capabilities` | Read-only 16+4 dynamic-tool check; makes no QCC or paid calls |
|
|
78
|
-
| QCC Host Bridge | web `/data-cleaning/api/g5/*` |
|
|
79
|
-
| Three-domain enrichment | web `/data-cleaning/api/phase3/*` | 0.5.0: risk 38 + IPR 18 + operation 35, zero-call estimate, user-owned QCC quota confirmation, candidate review, recovery/retry, and two CSV exports |
|
|
81
|
+
| QCC Host Bridge | `data_cleaning_qcc_run` + web `/data-cleaning/api/g5/*` | Web stages commands in the Host; an Agent-owned high-level tool uses nested execution for dynamic QCC tools; real OAuth/QCC path, natural-expiry refresh, and fault injection verified |
|
|
82
|
+
| Three-domain enrichment | web `/data-cleaning/api/phase3/*` | 0.5.0: risk 38 + IPR 18 + operation 35, zero-call estimate, user-owned QCC quota confirmation, candidate review, recovery/retry, and two CSV exports (no domain expansion in 0.6.0) |
|
|
80
83
|
|
|
81
84
|
## Qichacha MCP enrichment (status and roadmap)
|
|
82
85
|
|
|
@@ -86,10 +89,12 @@ Besides local deterministic completion, the plugin supports Qichacha MCP enterpr
|
|
|
86
89
|
`qcc-dsh-mcp-oauth`, the Skill guides the model to call
|
|
87
90
|
`mcp__qcc-company__get_company_by_query` / `mcp__qcc-company__get_company_registration_info`
|
|
88
91
|
per company name and feed the fresh registration data back into the completion tool.
|
|
89
|
-
- **Plan B (
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
92
|
+
- **Plan B (Agent-owned batch, since 0.4.0)**: in DSH Code Mode, the workbench stages rows in the
|
|
93
|
+
local Host and sends only a typed commandId intent, containing no company list, to the native
|
|
94
|
+
conversation. The Agent calls `data_cleaning_qcc_run` exactly once; the bridge then dispatches
|
|
95
|
+
dynamic QCC tools as nested executions using the parent execution token and Session. This path
|
|
96
|
+
supports batch enrichment, idempotency, candidate-resolution resume, manual retry of retryable
|
|
97
|
+
failures, and metadata-only auditing. Command staging requires `confirmPaidCalls:true`. The flag means the current user
|
|
93
98
|
confirms use of their own QCC account quota; it does not transfer the charge to the plugin maintainer.
|
|
94
99
|
Ambiguous candidates are never auto-selected. A loopback-only, fail-closed E2E runner is ready. On 2026-09-01 an isolated rc.2
|
|
95
100
|
Host passed real OAuth, restart recovery, and 400 QCC calls across 20 public companies. Natural-expiry
|
|
@@ -112,6 +117,10 @@ See [the Phase-3 acceptance record](docs/PHASE3-ACCEPTANCE.md) and
|
|
|
112
117
|
See [the 0.5.1 release record](docs/RELEASE-0.5.1.md) for the README fix and release-text gate.
|
|
113
118
|
See [the 0.5.2 release record](docs/RELEASE-0.5.2.md) for native DSH UI alignment, verification, and rollback.
|
|
114
119
|
See [the 0.5.3 release record](docs/RELEASE-0.5.3.md) for the business landing view and prompt builder.
|
|
120
|
+
See [the 0.6.1 release record](docs/RELEASE-0.6.1.md) for the Agent-owned QCC workbench,
|
|
121
|
+
session isolation, recovered statistics, and real end-to-end validation.
|
|
122
|
+
See [the 0.6.0 release record](docs/RELEASE-0.6.0.md) for the taskId workflow, durable artifacts,
|
|
123
|
+
restart recovery, and dual-baseline validation.
|
|
115
124
|
|
|
116
125
|
See [docs/PLAN-OSS.md](docs/PLAN-OSS.md) for details.
|
|
117
126
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 在 DeepSeek Harness 中清洗、补全、画像企业名单数据的智能体插件:本地 CSV/XLSX/JSON 引擎 + 可选企查查(Qichacha/QCC)MCP 企业数据补全,由企查查(Qichacha/QCC)团队发起并维护。
|
|
4
4
|
>
|
|
5
|
-
> 当前源码版本 / Current source version: **0.
|
|
5
|
+
> 当前源码版本 / Current source version: **0.6.1**(正式版本)
|
|
6
6
|
|
|
7
7
|
[](https://github.com/duhu2000/dsh-data-cleaning-agent/actions/workflows/ci.yml)
|
|
8
8
|
[](https://www.npmjs.com/package/dsh-data-cleaning-agent)
|
|
@@ -39,7 +39,8 @@ dsh plugin --profile web add dsh-data-cleaning-agent
|
|
|
39
39
|
重启后,「数据清洗补全」入口会显示在侧边栏顶部的「新会话」与「工作区」之间。点击后打开专属的
|
|
40
40
|
DSH 原生会话:首页标题、产品说明与工作流会替换通用探索页;输入框左上角提供提示词生成器,支持
|
|
41
41
|
粘贴名单、解析 Excel/CSV/JSON 或附加图片并选择清洗动作、补全字段。上传清洗、质量体检、匹配核验、
|
|
42
|
-
|
|
42
|
+
字段补全和任务历史五个入口位于输入框下方,右侧工作台承载“上传数据 → 规则确认 → 数据匹配 →
|
|
43
|
+
清洗补全 → 下载数据”五步闭环。完成后可下载结果与异常清单的 CSV/XLSX 四类 Host 耐久制品。
|
|
43
44
|
|
|
44
45
|
没有 `dsh` CLI 时,也可以用安装脚本:
|
|
45
46
|
|
|
@@ -61,6 +62,8 @@ bash <(curl -fsSL https://raw.githubusercontent.com/duhu2000/dsh-data-cleaning-a
|
|
|
61
62
|
| 解析 | web `/data-cleaning/api/mvp/parse` | CSV / XLSX / JSON |
|
|
62
63
|
| 异步任务 | web `/data-cleaning/api/mvp/jobs` | 任务状态机 + 持久化存储 |
|
|
63
64
|
| UI | web `/data-cleaning/` | 上传 → 清洗/补全 → 导出 |
|
|
65
|
+
| 五步任务 | web `/data-cleaning/api/workflow/*` | taskId/revision、规则、匹配、补全、恢复与状态审计 |
|
|
66
|
+
| 耐久制品 | Host 工作区 `.dsh-data-cleaning-artifacts/v1` | 结果/异常 CSV+XLSX,checksum 校验,跨 Host 重启下载 |
|
|
64
67
|
| 应用内入口 | 侧栏顶部「数据清洗补全」+ 输入框下方五能力按钮 | 中央业务首页与原生对话,右侧按需打开 Mockup 对齐工作台 |
|
|
65
68
|
| 提示词生成 | `conversation.input.overlay` | 文本 / Excel / 图片录入、清洗项与补全维度选择,生成后回填原生输入框供人工修改 |
|
|
66
69
|
| 工具卡片 | `tool.call.toolview`(`data_clean_rows`/`data_complete_rows`/`data_profile`) | 对话内渲染清洗/补全/画像结果卡,含运行/已完成/失败状态 |
|
|
@@ -68,8 +71,8 @@ bash <(curl -fsSL https://raw.githubusercontent.com/duhu2000/dsh-data-cleaning-a
|
|
|
68
71
|
| Skill | `data-cleaning` | 引导模型按工作流调度上述工具 |
|
|
69
72
|
| 企查查 Skill 补全 | `enterprise-enrichment` | 0.4.0:工商全景、股权穿透与历史工商 |
|
|
70
73
|
| 0.4.0 工具预检 | web `/data-cleaning/api/phase2/capabilities` | 只读检查 16+4 动态工具,不发起 QCC/付费调用 |
|
|
71
|
-
| QCC Host Bridge | web `/data-cleaning/api/g5/*` |
|
|
72
|
-
| 三域补全 | web `/data-cleaning/api/phase3/*` | 0.5.0:风险 38 + 知产 18 + 经营 35;零调用估算、显式付费确认、候选复核、恢复/重试与双 CSV
|
|
74
|
+
| QCC Host Bridge | `data_cleaning_qcc_run` + web `/data-cleaning/api/g5/*` | Web 仅在 Host 暂存任务;Agent-owned 高层工具以 nested execution 调用动态 QCC 工具;真实 OAuth/QCC 主路径、自然到期刷新与故障注入均已验收 |
|
|
75
|
+
| 三域补全 | web `/data-cleaning/api/phase3/*` | 0.5.0:风险 38 + 知产 18 + 经营 35;零调用估算、显式付费确认、候选复核、恢复/重试与双 CSV 导出(当前按用户要求暂不扩展工具域) |
|
|
73
76
|
|
|
74
77
|
## 企查查 MCP 补全(状态与路线图)
|
|
75
78
|
|
|
@@ -80,9 +83,11 @@ bash <(curl -fsSL https://raw.githubusercontent.com/duhu2000/dsh-data-cleaning-a
|
|
|
80
83
|
`mcp__qcc-company__get_company_registration_info`,把返回的最新工商信息回填到补全工具。
|
|
81
84
|
0.4.0 已将 16 个工商工具和 4 个历史工商工具固化为可测契约,
|
|
82
85
|
按 `panorama` / `ownership` / `governance` / `history` 维度组按需调用;未显式选择时不会默认打满全部付费工具。
|
|
83
|
-
- **方案 B
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
- **方案 B(Agent-owned 批量,0.4.0 起)**:DSH Code Mode 下,工作台先把名单安全暂存在本机
|
|
87
|
+
Host,并只把不含企业名单的 commandId 类型化意图发送到原生会话;Agent 随后准确调用一次
|
|
88
|
+
`data_cleaning_qcc_run`,Bridge 使用该父执行的 token/Session 以 nested execution 调度动态 QCC 工具。
|
|
89
|
+
该路径实现批量补全、请求幂等、多候选人工确认续跑、retryable 失败人工重试与安全审计。
|
|
90
|
+
暂存命令前要求 `confirmPaidCalls:true`;该字段表示当前用户确认
|
|
86
91
|
使用自己的 QCC 账号额度,不代表插件开发者代客户付款;多候选绝不自动选择。
|
|
87
92
|
默认关闭的本机 E2E Runner 已就绪;2026-09-01 已在隔离 rc.2 Host 完成真实 OAuth、跨重启恢复和
|
|
88
93
|
20 家公开企业的 400 次 QCC 调用;自然过期 token 的真实刷新、动态工具恢复及 1 行续期后调用也已通过。
|
|
@@ -108,6 +113,9 @@ bash <(curl -fsSL https://raw.githubusercontent.com/duhu2000/dsh-data-cleaning-a
|
|
|
108
113
|
0.5.1 文档补丁与防回归发布门见 [docs/RELEASE-0.5.1.md](docs/RELEASE-0.5.1.md)。
|
|
109
114
|
0.5.2 DSH 原生 UI 对齐范围、验收与回滚见 [docs/RELEASE-0.5.2.md](docs/RELEASE-0.5.2.md)。
|
|
110
115
|
0.5.3 业务首页、提示词生成和输入框下方流程栏见 [docs/RELEASE-0.5.3.md](docs/RELEASE-0.5.3.md)。
|
|
116
|
+
0.6.1 Agent-owned QCC 工作台、会话隔离、恢复统计及真实闭环验收见
|
|
117
|
+
[docs/RELEASE-0.6.1.md](docs/RELEASE-0.6.1.md)。0.6.0 五步 taskId 工作流、耐久制品、
|
|
118
|
+
跨重启恢复与双基线验收见 [docs/RELEASE-0.6.0.md](docs/RELEASE-0.6.0.md)。
|
|
111
119
|
|
|
112
120
|
## 本地开发
|
|
113
121
|
|
package/docs/COMPATIBILITY.md
CHANGED
|
@@ -33,6 +33,11 @@ MVP 路由、Phase-3 capabilities、estimate 与未确认 enrich 阻断均通过
|
|
|
33
33
|
`conversation.createDraftImages` / `input.shell(sessionId).addImages` 做运行时探测,视为隔离兼容层,
|
|
34
34
|
不承诺 alpha 实验面稳定。
|
|
35
35
|
|
|
36
|
+
2026-09-04 已发布的 0.6.0 v2 工作流在 rc.2(43190)与 alpha.2(43191)完成发布 tarball
|
|
37
|
+
隔离安装:两条基线均创建 `dc_workflows_v2` 任务与结果/异常 CSV+XLSX 四类制品,停止并重启 Host
|
|
38
|
+
后可按原 taskId 下载,XLSX 反向解析工作表为“清洗补全结果”。稳定发布判断仍以 rc.2 为主,
|
|
39
|
+
alpha.2 只作兼容探针。全程未触碰生产 43120,未调用 QCC。
|
|
40
|
+
|
|
36
41
|
## 2. Node 运行时
|
|
37
42
|
|
|
38
43
|
- 本包 `engines.node` 声明 `>=20`。
|
|
@@ -51,7 +56,7 @@ MVP 路由、Phase-3 capabilities、estimate 与未确认 enrich 阻断均通过
|
|
|
51
56
|
| 存储 | `ctx.storageDomain` | `open({name,version,tables})` → `table('jobs')` |
|
|
52
57
|
| web 路由 | `webServer.register({kind:'prefix', path, handler})` | 最长前缀匹配;前缀需以 `/` 结尾且匹配 `pathname.startsWith(prefix + '/')` |
|
|
53
58
|
| 同源守卫 | `isTrusted(req)` | `sec-fetch-site !== 'cross-site'` 且 origin 为 127.0.0.1/localhost |
|
|
54
|
-
|
|
|
59
|
+
| Agent-owned 动态工具调用 | `ctx.tools.register()` 高层工具 + `ctx.tools.get()` + 带 `parent/agent/rootCallId` 的 `ctx.tools.execute()` | rc.2 Code Mode 实测要求 nested execution;每次调用重新解析,不缓存动态 MCP 工具 |
|
|
55
60
|
|
|
56
61
|
## 4. 与企查查 MCP OAuth 插件的共存
|
|
57
62
|
|
|
@@ -59,7 +64,7 @@ MVP 路由、Phase-3 capabilities、estimate 与未确认 enrich 阻断均通过
|
|
|
59
64
|
| --- | --- | --- |
|
|
60
65
|
| 工具名前缀 | `qcc_oauth_*` + 规范 `mcp__qcc-*`;0.1.7 实测为 legacy `mcp__company__*` 等 | `data_clean_rows` / `data_complete_rows` / `data_profile` |
|
|
61
66
|
| Skill | — | `data-cleaning`、`enterprise-enrichment` |
|
|
62
|
-
| 存储域 | 自有 grant store | `dc_tasks_v1` |
|
|
67
|
+
| 存储域 | 自有 grant store | `dc_tasks_v1` + `dc_workflows_v2` |
|
|
63
68
|
| 能否共存 | ✅ | ✅(工具名 / Skill 名 / 存储域 / 条目 id 全独立) |
|
|
64
69
|
|
|
65
70
|
- `enterprise-enrichment` Skill 本身**不重造 OAuth**:它只调用
|
|
@@ -67,8 +72,9 @@ MVP 路由、Phase-3 capabilities、estimate 与未确认 enrich 阻断均通过
|
|
|
67
72
|
`mcp__qcc-company__*` / `mcp__qcc-risk__*`(授权成功后由 mcp-client 动态提供)。
|
|
68
73
|
- 若 qcc-dsh-mcp-oauth 未安装或未授权,`enterprise-enrichment` Skill 的第一步
|
|
69
74
|
`qcc_oauth_status` 即会中断并引导用户先连接,不会假装补全。
|
|
70
|
-
- G5 Host Bridge 不读取 grant/token,也不访问 mcp-client 私有 client
|
|
71
|
-
|
|
75
|
+
- G5 Host Bridge 不读取 grant/token,也不访问 mcp-client 私有 client。Web 路由只暂存已确认任务,
|
|
76
|
+
原生会话中的 `data_cleaning_qcc_run` 高层工具持有 Agent 父执行上下文,再经共享 `ctx.tools`
|
|
77
|
+
nested execution 调用动态注册的 `mcp__qcc-*` 工具。G5-2 增加幂等、候选续跑、人工重试与安全审计;
|
|
72
78
|
run 明细仅驻留 Host 内存。Bridge 会把 OAuth 0.1.7 的 legacy `mcp__company__*` / `mcp__history__*`
|
|
73
79
|
映射到规范名称,并在 capabilities 中同时报告两者。
|
|
74
80
|
- 0.5.0 三域 Bridge 同时兼容 `mcp__qcc-{risk,ipr,operation}__*`、OAuth 0.1.7 实测 legacy
|
|
@@ -102,9 +108,20 @@ Portal、原生会话、五能力按钮、跨 scope 状态桥、窄桌面布局
|
|
|
102
108
|
插件只做运行时能力探测并保留 `sessions.create` 安全降级,不承诺 alpha 实验面稳定。Portal 失败时
|
|
103
109
|
仍保留 footer 降级按钮。
|
|
104
110
|
|
|
105
|
-
0.5.3
|
|
106
|
-
|
|
107
|
-
|
|
111
|
+
0.5.3 新增业务首页和提示词生成器,并把流程栏移出输入框。0.6.0 v2 已在 rc.2 真实页面完成
|
|
112
|
+
浅色、深色及 820×900 窄屏回归;窄屏页面无横向溢出,最近完成任务可恢复原 taskId 并显示四个
|
|
113
|
+
Host 制品下载按钮。alpha.2 继续只检查 Host/路由/制品 Bridge,不作为精确视觉基线。
|
|
114
|
+
|
|
115
|
+
### 4.4 0.6.0 v2 制品兼容面(2026-09-04)
|
|
116
|
+
|
|
117
|
+
| 能力 | rc.2 | alpha.2 | 备注 |
|
|
118
|
+
| --- | --- | --- | --- |
|
|
119
|
+
| `dc_workflows_v2` schema 2 | ✅ | ✅ | taskId + revision;原始行不进入 KV |
|
|
120
|
+
| `ctx.fs.writeText/readBytes` | ✅ | ✅ | 当前已验证的公共 Host seam |
|
|
121
|
+
| 结果/异常 CSV | ✅ | ✅ | UTF-8 文本,工作区本地保存 |
|
|
122
|
+
| 结果/异常 XLSX | ✅ | ✅ | Base64 over writeText;下载恢复真实 ZIP 字节 |
|
|
123
|
+
| checksum / 跨重启下载 | ✅ | ✅ | SHA-256;同一 taskId/artifactId |
|
|
124
|
+
| 深浅色/窄屏实际 UI | ✅ | 探针 | rc.2 为视觉基线,alpha.2 不作稳定视觉承诺 |
|
|
108
125
|
|
|
109
126
|
### 4.3 0.5.0 三域兼容面
|
|
110
127
|
|
|
@@ -127,3 +144,7 @@ Profile 装载与 Host 注册冒烟;受应用内浏览器本机 URL 策略限
|
|
|
127
144
|
- `/data-cleaning/api/phase3/*` 为 0.5.0 已发布能力;单批最多 100 行、并发最多 4、默认/硬调用上限
|
|
128
145
|
500/2000。run 只保留在 Host 内存 30 分钟,Host 重启不恢复。
|
|
129
146
|
- alpha.2 的实际 UI 只作兼容探针;0.5.0 的稳定发布与回滚判断以 rc.2 为准。
|
|
147
|
+
- v2 单制品上限 32 MiB、单次最多 100,000 行和 256 列;当前 Host 未验证稳定 `writeBytes`,
|
|
148
|
+
XLSX 因此以 Base64 文本落盘。未来切换二进制 seam 必须保留旧 `v1` 制品读取兼容。
|
|
149
|
+
- v2 已生成制品可跨 Host 重启恢复,但浏览器 runtime 中尚未导出的原始行不会持久化;恢复中途任务
|
|
150
|
+
仍需用户重新提供输入。制品只在当前工作区,不承诺跨设备同步。
|
package/docs/G5-HOST-BRIDGE.md
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
# G5 Host Bridge:方案 B 批量补全基础层
|
|
2
2
|
|
|
3
3
|
- 日期:2026-09-02
|
|
4
|
-
- 状态:**G5-2.1~G5-2.5、真实 OAuth/QCC 主路径、token 自然到期刷新与 401/429/配额故障注入已验收**
|
|
4
|
+
- 状态:**G5-2.1~G5-2.5、Agent-owned nested execution、真实 OAuth/QCC 主路径、token 自然到期刷新与 401/429/配额故障注入已验收**
|
|
5
5
|
- 发布状态:✅ 已随 `v0.4.0` 发布到 npm 与 GitHub Release
|
|
6
6
|
- 决策依据:`docs/adr/0002-programmatic-mcp-tool-execution.md`
|
|
7
7
|
|
|
8
8
|
## 本阶段交付
|
|
9
9
|
|
|
10
|
-
`lib/qcc.js`
|
|
10
|
+
`lib/qcc-command.js` 与 `lib/qcc.js` 基于 DSH 公共工具运行时实现 Host Bridge。2026-09-04
|
|
11
|
+
在真实 rc.2 Code Mode 验证发现:动态 MCP 工具必须作为 Agent-owned 父工具调用的 nested execution
|
|
12
|
+
运行,普通 Web handler 不能直接成为其父执行。因此正式 UI 路径采用「Host 暂存 + 类型化会话意图 +
|
|
13
|
+
高层工具」:
|
|
11
14
|
|
|
12
15
|
1. 仅允许 `qcc_oauth_*`、规范 `mcp__qcc-*__*` 与 OAuth 0.1.7 已验证 legacy serverName,拒绝任意工具代理。
|
|
13
16
|
2. 每次调用重新解析工具,兼容 OAuth 刷新造成的注销/重注册窗口;只对 `UNKNOWN_TOOL` 做一次安全重试,其他失败不自动重试,避免重复计费。
|
|
@@ -15,19 +18,26 @@
|
|
|
15
18
|
4. 解析 MCP `structuredContent` 或 QCC 文本 JSON,复用一期字段契约。
|
|
16
19
|
5. 批量输入按企业名去重调用;唯一精确主体才继续工商/风险补全,多候选进入 `reviewQueue`,未匹配保留为 `unresolved`。
|
|
17
20
|
6. 单企业失败隔离,不中断其他企业;原始/补全明细只在 Host/Web 同源边界内流转。
|
|
21
|
+
7. Web 暂存任务不产生 QCC 调用;发送给模型的提示只含 commandId/taskId/kind,不含企业名单和字段值。
|
|
22
|
+
8. `data_cleaning_qcc_run` 由 Agent 调用一次,并把父执行的 `token / agent / rootCallId` 传给每个
|
|
23
|
+
动态 QCC nested execution;重复调用同一 commandId 复用同一 Promise/结果,不重复计费。
|
|
18
24
|
|
|
19
25
|
## 数据流
|
|
20
26
|
|
|
21
27
|
```text
|
|
22
|
-
同源 Web
|
|
23
|
-
→
|
|
24
|
-
|
|
28
|
+
同源 Web 请求(显式确认使用当前用户自己的 QCC 额度)
|
|
29
|
+
→ Host 暂存 rows,返回不含 rows 的 commandId 类型化提示(零 QCC 调用)
|
|
30
|
+
→ 原生 conversation.send(prompt)
|
|
31
|
+
→ Agent 调用一次 data_cleaning_qcc_run(commandId)
|
|
32
|
+
→ QccHostBridge.enrichRows
|
|
33
|
+
→ 企业名去重 + 受控并发(1–4)
|
|
25
34
|
→ ctx.tools.get(每次重新解析)
|
|
26
|
-
→ ctx.tools.execute(
|
|
35
|
+
→ ctx.tools.execute(..., parent=exec.token, agent=exec.agent)
|
|
27
36
|
├─ 唯一精确 → 锁定信用代码 → 工商详情 → 可选风险扫描
|
|
28
37
|
├─ 多候选 → reviewQueue,停止该主体下游调用
|
|
29
38
|
└─ 未匹配 → unresolved
|
|
30
|
-
→
|
|
39
|
+
→ 高层工具只向对话返回摘要
|
|
40
|
+
→ 同源 UI 轮询 commandId,取得 Host run 明细并进入候选/补全/导出
|
|
31
41
|
```
|
|
32
42
|
|
|
33
43
|
## Web 契约
|
|
@@ -38,8 +48,21 @@
|
|
|
38
48
|
|
|
39
49
|
只检查工具是否注册,不调用 OAuth 或任何计费 QCC 工具。返回 Bridge marker、连接态推断和批量限制。
|
|
40
50
|
同时声明 `idempotencyRequired / candidateResume / manualRetry`,run 状态仅为 `host-memory`。
|
|
51
|
+
还会返回 `agentCommandTool / agentCommandToolRegistered / agentOwnedExecutionRequired`;若当前 Host
|
|
52
|
+
不支持工具注册,命令准备接口以 `503 QCC_AGENT_COMMAND_UNAVAILABLE` 关闭,不会产生 QCC 调用。
|
|
41
53
|
|
|
42
|
-
###
|
|
54
|
+
### Agent-owned 命令(正式工作台路径)
|
|
55
|
+
|
|
56
|
+
- `POST /data-cleaning/api/g5/commands`:要求 `confirmPaidCalls:true`,把 enrich/resolve/retry 输入暂存
|
|
57
|
+
在 Host;返回 commandId 与不含企业名单的可见会话提示,本步骤 `paidCalls:false`。
|
|
58
|
+
- `data_cleaning_qcc_run({commandId})`:只能在 Agent tool execution 内运行,缺少父执行 token/Session
|
|
59
|
+
时返回 `QCC_AGENT_EXECUTION_REQUIRED`。
|
|
60
|
+
- `GET /data-cleaning/api/g5/commands/<commandId>`:同源读取 prepared/running/completed/failed 和完成后的
|
|
61
|
+
Host run,不调用 QCC。
|
|
62
|
+
|
|
63
|
+
命令默认 30 分钟过期、最多 50 个;同一 commandId 在运行中和完成后都不会重复派发。
|
|
64
|
+
|
|
65
|
+
### 兼容批量端点(非 Code Mode UI 主路径)
|
|
43
66
|
|
|
44
67
|
`POST /data-cleaning/api/g5/enrich`
|
|
45
68
|
|
|
@@ -57,6 +80,9 @@
|
|
|
57
80
|
|
|
58
81
|
约束:
|
|
59
82
|
|
|
83
|
+
- 该端点保留给 Mock/Contract、Runner 与非 Code Mode 兼容场景;rc.2 Code Mode 的工作台不得用它
|
|
84
|
+
直接派发动态 QCC 工具,应使用上面的 Agent-owned 命令路径。
|
|
85
|
+
|
|
60
86
|
- `confirmPaidCalls` 必须严格为 `true`,否则在任何工具调用前返回 `QCC_CONFIRM_REQUIRED`。
|
|
61
87
|
- `idempotencyKey` 必填;相同键与相同请求复用首个结果,不重复调用工具;同键不同请求返回冲突。
|
|
62
88
|
- 单批最多 100 行,并发范围 1–4;重复企业只检索一次。
|
|
@@ -208,8 +208,10 @@ content:
|
|
|
208
208
|
## 9. 与方案 B 的边界与预留
|
|
209
209
|
|
|
210
210
|
- 方案 A 不改 `lib/`(最多可选加 `data_rows_to_csv` 工具)。
|
|
211
|
-
- 方案 B 已新增 `lib/qcc.js
|
|
212
|
-
|
|
211
|
+
- 方案 B 已新增 `lib/qcc.js` 与 `lib/qcc-command.js`:工作台通过同源 Web 路由把名单暂存在
|
|
212
|
+
Host,只向原生会话发送 commandId;`data_cleaning_qcc_run` 持有 Agent 父执行 token/Session 后,
|
|
213
|
+
才可通过公共 `ctx.tools.execute()` 以 nested execution 调度动态 MCP 工具。G5-2 幂等、候选续跑、
|
|
214
|
+
人工重试与安全 Runner 的 Mock/Contract 已通过。
|
|
213
215
|
禁止访问 mcp-client 私有 client;真实 OAuth/QCC 主路径已验收,token 到期刷新与
|
|
214
216
|
2026-09-02 已完成自然过期 token refresh 与 401/429/配额故障注入验收;
|
|
215
217
|
故障注入使用本地 ToolRuntime,不重复真实付费批次。
|
|
@@ -191,8 +191,9 @@ v1 字段契约(方案 A):
|
|
|
191
191
|
### 4.4 三期并行 · 方案 B 批量后端
|
|
192
192
|
|
|
193
193
|
一期/二期/三期均为模型中介式(模型逐个调 QCC 工具)。当名单规模进入百级/千级,模型逐调成本高,
|
|
194
|
-
方案 B 已启动:插件内 `lib/qcc.js`
|
|
195
|
-
|
|
194
|
+
方案 B 已启动:插件内 `lib/qcc-command.js` 注册 Agent-owned 高层工具,由 `lib/qcc.js` 使用父执行
|
|
195
|
+
token/Session,经公共 `ctx.tools.execute()` 以 nested execution 调用 mcp-client 动态注册的工具;
|
|
196
|
+
Web 路由只暂存任务,不直接派发动态 QCC 工具,也不访问 `ctx.loader` 条目或 mcp-client 私有 client。
|
|
196
197
|
|
|
197
198
|
- Spike #7:rc.2 / alpha.2 双基线 PASS。
|
|
198
199
|
- G5-2:在 G5-1 基础上完成默认关闭 E2E Runner、脱敏、请求幂等、多候选确认续跑、
|
package/docs/RELEASE-0.5.3.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> 版本:**0.5.3**
|
|
4
4
|
>
|
|
5
|
-
>
|
|
5
|
+
> 状态:**✅ 已发布;npm `latest`、Git tag 与 GitHub Release 均为 `0.5.3`。**
|
|
6
6
|
>
|
|
7
|
-
>
|
|
7
|
+
> 发布时间:2026-09-03T10:36:28Z
|
|
8
8
|
|
|
9
9
|
## 目标
|
|
10
10
|
|
|
@@ -52,8 +52,15 @@
|
|
|
52
52
|
> 本轮应用内浏览器首次打开时已确认顶部菜单文案;隔离 Host 重启后,本机 URL 被浏览器安全策略阻止二次访问,
|
|
53
53
|
> 因此标题、流程栏位置、弹层及深浅色/窄屏保留为发布后人工观察项,未用替代浏览器绕过。
|
|
54
54
|
|
|
55
|
+
发布结果:
|
|
56
|
+
|
|
57
|
+
- `v0.5.3` annotated tag 指向 `f7eac00`;Release workflow `33745170057` 全绿;
|
|
58
|
+
- npm 公共 Registry 返回 `latest=0.5.3`,包含 38 个文件,SHA-1 为 `d349a593d8b45efc794456bf5854e4ec583ca70f`;
|
|
59
|
+
- npm provenance predicate 为 SLSA v1;
|
|
60
|
+
- GitHub Release 为非 draft、非 prerelease:https://github.com/duhu2000/dsh-data-cleaning-agent/releases/tag/v0.5.3 。
|
|
61
|
+
|
|
55
62
|
## 升级与回滚
|
|
56
63
|
|
|
57
|
-
-
|
|
64
|
+
- 升级:安装 `dsh-data-cleaning-agent@0.5.3` 并完全重启 DSH;不覆盖客户 OAuth grant 或 Key。
|
|
58
65
|
- 回滚:重新安装 `dsh-data-cleaning-agent@0.5.2` 并完全重启 DSH。
|
|
59
66
|
- 0.5.3 不修改 Host 路由、QCC 工具契约、存储 schema 或导出格式,回滚无需数据迁移。
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# 0.6.0 五步工作流与耐久制品发布记录
|
|
2
|
+
|
|
3
|
+
> 版本:**0.6.0**
|
|
4
|
+
> 发布日期:2026-09-04
|
|
5
|
+
> 发布来源:`v0.6.0` Tag 触发 GitHub Actions,使用 npm OIDC Trusted Publishing。
|
|
6
|
+
|
|
7
|
+
## 目标
|
|
8
|
+
|
|
9
|
+
0.6.0 将 0.5.3 的业务首页升级为可恢复的完整企业数据清洗补全系统:
|
|
10
|
+
|
|
11
|
+
1. 主流程固定为上传数据、规则确认、数据匹配、清洗补全、下载数据五步;
|
|
12
|
+
2. 每个会话绑定独立 taskId,并用 revision 防止并发覆盖;
|
|
13
|
+
3. 上传解析、字段映射、质量体检、候选核验和补全状态统一进入 Host 工作流;
|
|
14
|
+
4. 完成任务生成结果与异常清单的 CSV/XLSX 四类耐久制品;
|
|
15
|
+
5. 浏览器原始行丢失或 Host 重启后,仍可按 taskId 恢复任务并下载既有制品。
|
|
16
|
+
|
|
17
|
+
## 兼容与安全
|
|
18
|
+
|
|
19
|
+
- 稳定发布基线为 DSH `0.1.1-rc.2`;`0.1.2-alpha.2` 只作兼容探针。
|
|
20
|
+
- Host KV 只保存任务元数据、数字摘要和制品引用,不保存原始企业名单、候选详情、QCC 原始响应或凭据。
|
|
21
|
+
- 制品写入用户工作区 `.dsh-data-cleaning-artifacts/v1/`,不进入 Git 或 npm 包。
|
|
22
|
+
- 下载前验证 SHA-256;路径和 ID 严格校验;CSV 中和公式型外部文本。
|
|
23
|
+
- QCC 继续采用 BYO 账号:客户使用自己的企查查 MCP 连接与额度,插件不共享 Key、不代付。
|
|
24
|
+
- 历史域、人员域和招投标域仍不进入本版本新增范围。
|
|
25
|
+
|
|
26
|
+
## 验收证据
|
|
27
|
+
|
|
28
|
+
- `npm run check` 全绿,165/165 自动测试通过;
|
|
29
|
+
- npm dry-run 包 45 个文件全部命中白名单;
|
|
30
|
+
- rc.2(43190)和 alpha.2(43191)均完成四类制品生成、真实 XLSX 反向解析和跨 Host 重启恢复;
|
|
31
|
+
- rc.2 完成浅色、深色和 820×900 窄屏真实页面回归,无页面横向溢出;
|
|
32
|
+
- 最近任务恢复显示原 taskId 和四个下载按钮,不会误创建新草稿;
|
|
33
|
+
- 未触碰生产端口 43120,未执行新的真实 QCC 调用。
|
|
34
|
+
|
|
35
|
+
## 升级与回滚
|
|
36
|
+
|
|
37
|
+
- 升级:安装 `dsh-data-cleaning-agent@0.6.0` 并完全重启 DSH。
|
|
38
|
+
- 回滚:重新安装 `dsh-data-cleaning-agent@0.5.3` 并完全重启 DSH。
|
|
39
|
+
- 回滚不会删除 `dc_workflows_v2` 或工作区制品;0.5.3 会忽略这些新增数据。
|
|
40
|
+
- 完整说明见 `docs/UI-WORKFLOW-V2-MIGRATION.md`。
|
|
41
|
+
|
|
42
|
+
## 外部发布核验
|
|
43
|
+
|
|
44
|
+
- PR [#1](https://github.com/duhu2000/dsh-data-cleaning-agent/pull/1) 全部 CI 通过后合并;
|
|
45
|
+
`v0.6.0` 指向合并提交 `084efd0`。
|
|
46
|
+
- Release workflow [33817341580](https://github.com/duhu2000/dsh-data-cleaning-agent/actions/runs/33817341580)
|
|
47
|
+
全绿,npm OIDC publish 与 GitHub Release 两个发布步骤均成功。
|
|
48
|
+
- npm `latest` 为 `0.6.0`;发布时间为 2026-09-03T23:23:12Z(北京时间 2026-09-04 07:23)。
|
|
49
|
+
- tarball SHA-1:`559db5f3de6ef799b0d7549d0bebb144e8cfb91d`。
|
|
50
|
+
- tarball integrity:
|
|
51
|
+
`sha512-ib83dgrBNnubouISvnzJb/zbjuBnJXEuee/fVgSzlZZcZLdA/5aB8fb4YF0L+DmOINIJfb44akUMBnBajv7lVg==`。
|
|
52
|
+
- npm Registry 返回 SLSA v1 provenance attestation;隔离安装后的 `npm audit signatures` 验证
|
|
53
|
+
10 个 Registry 签名和 1 个 attestation。
|
|
54
|
+
- 从公共 Registry 全新安装 `dsh-data-cleaning-agent@0.6.0` 成功;包版本、五步工作流契约和
|
|
55
|
+
`WorkflowArtifactStore` 导入验证通过。
|
|
56
|
+
- GitHub Release [v0.6.0](https://github.com/duhu2000/dsh-data-cleaning-agent/releases/tag/v0.6.0)
|
|
57
|
+
已发布,非 draft、非 prerelease。
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# 0.6.1 Agent-owned QCC 工作台修复发布记录
|
|
2
|
+
|
|
3
|
+
> 版本:**0.6.1**
|
|
4
|
+
> 发布日期:2026-09-04
|
|
5
|
+
> 发布来源:`v0.6.1` Tag 触发 GitHub Actions,使用 npm OIDC Trusted Publishing。
|
|
6
|
+
|
|
7
|
+
## 目标
|
|
8
|
+
|
|
9
|
+
0.6.1 是 0.6.0 的兼容性补丁,不扩大企查查工具域,重点修复真实 DSH Code Mode 下的工作台调度和
|
|
10
|
+
多智能体共存:
|
|
11
|
+
|
|
12
|
+
1. Web 工作台只在 Host 暂存企业名单,并向原生会话发送不含明细的 commandId 类型化意图;
|
|
13
|
+
2. Agent 准确调用一次 `data_cleaning_qcc_run`,Bridge 使用父执行 token/Session,以 nested execution
|
|
14
|
+
调用动态 QCC 工具;
|
|
15
|
+
3. 新会话及其它智能体入口默认不显示数据清洗补全内容,点击本插件入口后才进入独立业务子系统;
|
|
16
|
+
4. 本地清洗任务跳过 QCC 匹配页,统计卡只渲染可读标量;
|
|
17
|
+
5. Host 重启恢复任务时,下载页继续显示已补全数和待核验数。
|
|
18
|
+
|
|
19
|
+
## 兼容与安全
|
|
20
|
+
|
|
21
|
+
- 稳定发布基线仍为 DSH `0.1.1-rc.2`;`0.1.2-alpha.2` 只作兼容探针。
|
|
22
|
+
- 工作台命令缺少 Agent 父执行上下文时 fail closed,不从普通 Web handler 直接派发动态 QCC 工具。
|
|
23
|
+
- 暂存命令默认 30 分钟过期、最多 50 个;同一 commandId 重放复用同一 Promise/结果,不重复计费。
|
|
24
|
+
- 企业名单与字段值不进入可见提示词;OAuth token、QCC 原始响应和凭据不进入仓库或审计日志。
|
|
25
|
+
- QCC 继续采用 BYO 账号:客户使用自己的企查查 MCP 连接与额度,插件不共享 Key、不代付。
|
|
26
|
+
- 历史域、人员域和招投标域继续延期,本补丁不新增这些工具或权限依赖。
|
|
27
|
+
|
|
28
|
+
## 验收证据
|
|
29
|
+
|
|
30
|
+
- `npm run check` 全绿,174/174 自动化测试通过;
|
|
31
|
+
- npm dry-run 包全部命中白名单;
|
|
32
|
+
- PR #2 的 Linux Node 22、Linux Node 24、Windows Node 24 和 PR 打包检查均通过;
|
|
33
|
+
- DSH `0.1.1-rc.2` 真实工作台完成上传、映射、质量体检、零调用估算、额度确认、Agent-owned 调度、
|
|
34
|
+
主体定位、工商补全、结果回填与四件套导出;
|
|
35
|
+
- 公开主体批次实际 2 次 QCC 调用,1/1 精确补全、0 待核验、0 失败、无重试;
|
|
36
|
+
- 结果 CSV/XLSX 与异常清单 CSV/XLSX checksum 一致,XLSX 可反向解析;Host 重启后任务、统计和
|
|
37
|
+
四件套仍可从任务历史恢复。
|
|
38
|
+
|
|
39
|
+
## 升级与回滚
|
|
40
|
+
|
|
41
|
+
- 升级:安装 `dsh-data-cleaning-agent@0.6.1` 并完全重启 DSH。
|
|
42
|
+
- 回滚:重新安装 `dsh-data-cleaning-agent@0.6.0` 并完全重启 DSH。
|
|
43
|
+
- 本补丁不引入数据库迁移;回滚不会删除 `dc_workflows_v2` 或工作区耐久制品。
|
|
44
|
+
- 完整迁移说明见 `docs/UI-WORKFLOW-V2-MIGRATION.md`。
|
|
45
|
+
|
|
46
|
+
## 外部发布核验
|
|
47
|
+
|
|
48
|
+
Tag 推送后必须确认 Release workflow 全绿、npm `latest=0.6.1`、provenance 存在、GitHub Release
|
|
49
|
+
非 draft/非 prerelease,并从公共 Registry 在全新隔离目录安装验证。实际 workflow run、tarball
|
|
50
|
+
哈希与公共安装结果将在发布完成后的仓库进度记录中补充。
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# 数据清洗补全 v2 · T6~T9 验收与发布准备
|
|
2
|
+
|
|
3
|
+
> 验收日期:2026-09-04
|
|
4
|
+
> 分支:`feat/ui-workflow-v2`,基线 `main@0be4de3`
|
|
5
|
+
> 状态:本地开发与验收完成,作为 `0.6.0` 发布门;本文不替代 npm/GitHub 外部发布核验。
|
|
6
|
+
|
|
7
|
+
## 1. 验收范围
|
|
8
|
+
|
|
9
|
+
| 任务 | 交付 | 结论 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| T6 | Host 耐久制品、真实 XLSX、异常清单、双基线、视觉回归、迁移/回滚 | 通过 |
|
|
12
|
+
| T7 | 匹配摘要、候选人工核验、部分失败显式重试、补全后导出 | 通过 |
|
|
13
|
+
| T8 | 四类制品下载、taskId 历史恢复、跨 Host 重启下载 | 通过 |
|
|
14
|
+
| T9 | 自动化门禁、tarball 白名单、兼容与发布决策 | 通过;版本确定为 0.6.0 |
|
|
15
|
+
|
|
16
|
+
## 2. T6 制品契约
|
|
17
|
+
|
|
18
|
+
每个完成任务生成四个工作区本地制品:
|
|
19
|
+
|
|
20
|
+
1. 清洗补全结果 CSV;
|
|
21
|
+
2. 清洗补全结果 XLSX;
|
|
22
|
+
3. 异常清单 CSV;
|
|
23
|
+
4. 异常清单 XLSX。
|
|
24
|
+
|
|
25
|
+
DSH rc.2 / alpha.2 当前验证的 `ctx.fs` 只公开 `writeText` 与 `readBytes`,未验证稳定的二进制写接口。
|
|
26
|
+
因此 CSV 以 UTF-8 文本保存,真实 XLSX 字节以 Base64 文本保存,下载时解码并校验 SHA-256。该策略被
|
|
27
|
+
隔离在 `lib/artifacts.js`,以后 Host 提供稳定 `writeBytes` 时可只替换适配层。
|
|
28
|
+
|
|
29
|
+
限制:单制品最大 32 MiB、单次最多 100,000 行、最多 256 列。制品目录是
|
|
30
|
+
`.dsh-data-cleaning-artifacts/v1/<taskId>/`,已加入 Git 忽略规则,不进入 npm 包。
|
|
31
|
+
CSV 会中和公式型外部文本;XLSX Base64 的读取上限按编码膨胀计算,解码后仍执行 32 MiB 硬限制。
|
|
32
|
+
|
|
33
|
+
## 3. 双基线跨重启实测
|
|
34
|
+
|
|
35
|
+
| DSH | 隔离端口 | 初次运行 | 重启恢复 | XLSX |
|
|
36
|
+
| --- | ---: | --- | --- | --- |
|
|
37
|
+
| `0.1.1-rc.2` | 43190 | seam、任务、四制品通过 | 同一 taskId/制品通过 | ZIP magic `PK`;工作表“清洗补全结果” |
|
|
38
|
+
| `0.1.2-alpha.2` | 43191 | seam、任务、四制品通过 | 同一 taskId/制品通过 | ZIP magic `PK`;工作表“清洗补全结果” |
|
|
39
|
+
|
|
40
|
+
实测使用合成的两行数据和隔离 Profile;未触碰生产端口 `43120`,未调用 QCC,未产生企查查费用。
|
|
41
|
+
|
|
42
|
+
## 4. T7 匹配与补全闭环
|
|
43
|
+
|
|
44
|
+
- 字段映射必须包含企业名称、统一社会信用代码或注册号之一。
|
|
45
|
+
- `exact / candidate / confirmed / unresolved / failed` 数量受总数约束,不显示无来源置信度。
|
|
46
|
+
- 多候选进入人工核验;`partial` 可显式重试并回到 `export_ready`。
|
|
47
|
+
- QCC 估算为零调用;真正执行前仍要求 `confirmPaidCalls:true`、幂等键与调用上限。
|
|
48
|
+
- 用户使用自己连接的 QCC MCP 账号并承担其账号额度/费用;插件不共享 Key、不代付。
|
|
49
|
+
|
|
50
|
+
## 5. T8 恢复与下载
|
|
51
|
+
|
|
52
|
+
- 最近任务入口会把完整 taskId 注入工作台,不会误创建新草稿。
|
|
53
|
+
- 已完成任务即使浏览器 runtime 中没有原始行,也能从 Host 读取四类制品并下载。
|
|
54
|
+
- 下载响应使用固定同源路由、受控文件名、内容类型、长度与 `nosniff`,读取时验证 checksum。
|
|
55
|
+
- v2 不再登记 `browser-download:` 伪引用。
|
|
56
|
+
|
|
57
|
+
## 6. 视觉回归
|
|
58
|
+
|
|
59
|
+
真实 rc.2 页面已验证:
|
|
60
|
+
|
|
61
|
+
- 浅色桌面:首页、原生 Composer、输入框下五能力、右侧非模态工作台位置正确;
|
|
62
|
+
- 深色:首页、按钮、五步状态、下载制品信息可读;
|
|
63
|
+
- 820×900 窄屏:`scrollWidth === viewport width`,页面无横向溢出;右栏按窄屏安全覆盖中央内容;
|
|
64
|
+
- 完成任务恢复后显示原 taskId、输入行数及四个下载按钮。
|
|
65
|
+
|
|
66
|
+
## 7. 自动化与发布门
|
|
67
|
+
|
|
68
|
+
发布候选必须同时满足:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm run check
|
|
72
|
+
git diff --check
|
|
73
|
+
npm pack --dry-run --json --cache .npm-cache
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
并复核 tarball 不包含测试、OAuth/Key、真实名单、QCC 原始响应、`.dsh-data-cleaning-artifacts/` 或
|
|
77
|
+
`_scratch/`。2026-09-04 最新本地门禁结果为 `npm run check` 全绿、165/165 测试通过、npm tarball
|
|
78
|
+
44 个文件全部命中白名单,`git diff --check` 无错误。
|
|
79
|
+
|
|
80
|
+
## 8. 版本决策与剩余发布动作
|
|
81
|
+
|
|
82
|
+
版本确定为 **0.6.0**,原因是新增 Host 工作流 API、持久化 domain、耐久制品和完整五步业务流程。
|
|
83
|
+
发布按顺序执行:最终代码审查 → 版本/README/Changelog 快照 → commit/push → Tag → OIDC npm 发布 →
|
|
84
|
+
GitHub Release → 公共 Registry 全新安装。验收记录本身不等于外部平台已经完成发布。
|