dsh-data-cleaning-agent 0.8.8 → 0.8.9
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 +9 -0
- package/README.en.md +2 -2
- package/README.md +2 -2
- package/lib/client.js +72 -21
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
本文件记录 `dsh-data-cleaning-agent` 的版本变更。格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循 [SemVer](https://semver.org/lang/zh-CN/)。
|
|
4
4
|
|
|
5
|
+
## [0.8.9] - 2026-09-07
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- 按共享 DSH-UX-001 v1.1.2 对齐招投标工作台的阶段菜单:单行五个等宽分栏、上图标下短标题、分隔线及选中蓝色底线;取消数字前缀和横向滚动布局。说明与状态仅保留在内容区和工作台头部。
|
|
9
|
+
- 窄屏缩小图标与字号,长标题在分栏内省略并保留完整可访问名称和悬停提示;阶段导航、质量体检子视图及 Host 工作流保持不变。
|
|
10
|
+
|
|
11
|
+
### Tests
|
|
12
|
+
- 增补五阶段图标/标题结构断言与隔离 Chromium 深浅色布局回归,覆盖 320px 窄屏、普通/展开工作台、长标题防溢出,以及切换阶段不修改 Host 任务。
|
|
13
|
+
|
|
5
14
|
## [0.8.8] - 2026-09-06
|
|
6
15
|
|
|
7
16
|
### Changed
|
package/README.en.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
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.8.
|
|
5
|
+
> Current source version / 当前源码版本: **0.8.9** (stable release)
|
|
6
6
|
|
|
7
|
-
This release aligns the
|
|
7
|
+
This release aligns the workbench stage menu with the tender agent: five equal-width columns in one row, line icons above short labels, and a pale-blue selection with a blue underline. Narrow layouts stay within the panel. All 128 fields, existing workflows, and native DSH input and send behavior are preserved.
|
|
8
8
|
|
|
9
9
|
[](https://github.com/duhu2000/dsh-data-cleaning-agent/actions/workflows/ci.yml)
|
|
10
10
|
[](https://www.npmjs.com/package/dsh-data-cleaning-agent)
|
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> 在 DeepSeek Harness 中清洗、补全、画像企业名单数据的智能体插件:本地 CSV/XLSX/JSON 引擎 + 可选企查查(Qichacha/QCC)MCP 企业数据补全,由企查查(Qichacha/QCC)团队发起并维护。
|
|
4
4
|
>
|
|
5
|
-
> 当前源码版本 / Current source version: **0.8.
|
|
5
|
+
> 当前源码版本 / Current source version: **0.8.9**(正式版本)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
本版将右侧阶段菜单对齐招投标工作台:单行五个等宽分栏、上图标下短标题,选中项采用浅蓝底和蓝色底线;窄屏不换行、不横向溢出。保留企查查蓝界面、全部 128 个字段和原有工作流,不替换 DSH 原生输入和发送机制。
|
|
8
8
|
|
|
9
9
|
[](https://github.com/duhu2000/dsh-data-cleaning-agent/actions/workflows/ci.yml)
|
|
10
10
|
[](https://www.npmjs.com/package/dsh-data-cleaning-agent)
|
package/lib/client.js
CHANGED
|
@@ -63,6 +63,20 @@ window.__ModuleLoader__.load({
|
|
|
63
63
|
h('path', { d: DATABASE_PATH }));
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
// 阶段只展示线性图标和短标题;说明、状态与操作保留在内容区。
|
|
67
|
+
const STAGE_ICON_PATHS = {
|
|
68
|
+
upload: 'M12 16V3m-4 4 4-4 4 4M4 14v6h16v-6',
|
|
69
|
+
check: 'M9 6h11M9 12h11M9 18h11M3 6l1 1 2-2M3 12l1 1 2-2M3 18l1 1 2-2',
|
|
70
|
+
search: 'M16 16l5 5M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0',
|
|
71
|
+
database: DATABASE_PATH,
|
|
72
|
+
table: 'M4 3h16v18H4zM4 8h16M4 13h16M4 17h16M10 8v13',
|
|
73
|
+
};
|
|
74
|
+
function StageIcon({ kind }) {
|
|
75
|
+
return h('svg', { width: 20, height: 20, viewBox: '0 0 24 24', fill: 'none',
|
|
76
|
+
stroke: 'currentColor', strokeWidth: 1.7, strokeLinecap: 'round', strokeLinejoin: 'round',
|
|
77
|
+
'aria-hidden': true, focusable: false }, h('path', { d: STAGE_ICON_PATHS[kind] }));
|
|
78
|
+
}
|
|
79
|
+
|
|
66
80
|
// 搜索仅改变可见字段,绝不清除已选字段或改变 Host 的字段目录。
|
|
67
81
|
function visibleCatalogFields(group, query) {
|
|
68
82
|
const needle = String(query || '').trim().toLowerCase();
|
|
@@ -525,32 +539,65 @@ body:has(.dcAgentPromptBackdrop) { overflow: hidden; }
|
|
|
525
539
|
|
|
526
540
|
.dcAgentStepper {
|
|
527
541
|
display: grid;
|
|
528
|
-
grid-template-columns: repeat(
|
|
529
|
-
|
|
530
|
-
padding: 12px 18px;
|
|
542
|
+
grid-template-columns: repeat(var(--dc-stage-count, 5), minmax(0, 1fr));
|
|
543
|
+
min-width: 0;
|
|
531
544
|
border-bottom: 1px solid var(--dc-border);
|
|
532
|
-
background: var(--dc-
|
|
545
|
+
background: var(--dc-surface);
|
|
533
546
|
}
|
|
534
547
|
|
|
535
548
|
.dcAgentStep {
|
|
549
|
+
position: relative;
|
|
550
|
+
min-width: 0;
|
|
536
551
|
display: flex;
|
|
552
|
+
flex-direction: column;
|
|
537
553
|
align-items: center;
|
|
538
554
|
justify-content: center;
|
|
539
|
-
gap:
|
|
540
|
-
padding:
|
|
541
|
-
border:
|
|
542
|
-
border-
|
|
555
|
+
gap: 8px;
|
|
556
|
+
padding: 12px 4px;
|
|
557
|
+
border: 0;
|
|
558
|
+
border-right: 1px solid var(--dc-border);
|
|
559
|
+
border-radius: 0;
|
|
543
560
|
background: transparent;
|
|
544
561
|
color: var(--dc-muted);
|
|
545
562
|
font-size: 12px;
|
|
563
|
+
font-weight: 600;
|
|
546
564
|
cursor: pointer;
|
|
547
|
-
white-space: nowrap;
|
|
548
565
|
}
|
|
566
|
+
.dcAgentStep:last-child { border-right: 0; }
|
|
567
|
+
.dcAgentStep:hover { background: var(--dc-page); }
|
|
549
568
|
.dcAgentStep.is-active {
|
|
550
569
|
color: var(--dc-action);
|
|
551
|
-
border-color: var(--dc-action);
|
|
552
570
|
background: var(--dc-selected);
|
|
553
571
|
}
|
|
572
|
+
.dcAgentStep.is-active::after {
|
|
573
|
+
content: '';
|
|
574
|
+
position: absolute;
|
|
575
|
+
bottom: 0;
|
|
576
|
+
left: 8px;
|
|
577
|
+
right: 8px;
|
|
578
|
+
height: 3px;
|
|
579
|
+
border-radius: 3px 3px 0 0;
|
|
580
|
+
background: var(--dc-action);
|
|
581
|
+
}
|
|
582
|
+
.dcAgentStepIcon {
|
|
583
|
+
display: grid;
|
|
584
|
+
place-items: center;
|
|
585
|
+
width: 30px;
|
|
586
|
+
height: 30px;
|
|
587
|
+
flex: none;
|
|
588
|
+
border: 1px solid var(--dc-border);
|
|
589
|
+
border-radius: 8px;
|
|
590
|
+
}
|
|
591
|
+
.dcAgentStepIcon svg { display: block; }
|
|
592
|
+
.dcAgentStepLabel {
|
|
593
|
+
display: block;
|
|
594
|
+
width: 100%;
|
|
595
|
+
min-width: 0;
|
|
596
|
+
line-height: 18px;
|
|
597
|
+
white-space: nowrap;
|
|
598
|
+
overflow: hidden;
|
|
599
|
+
text-overflow: ellipsis;
|
|
600
|
+
}
|
|
554
601
|
|
|
555
602
|
.dcAgentWbBody {
|
|
556
603
|
flex: 1 1 auto;
|
|
@@ -818,7 +865,6 @@ body:has(.dcAgentPromptBackdrop) { overflow: hidden; }
|
|
|
818
865
|
@media (max-width: 760px) {
|
|
819
866
|
.dcAgentWorkbench, .dcAgentWorkbench.is-expanded { width: 100vw; max-width: none; min-width: 0; border-radius: 0; }
|
|
820
867
|
.dcAgentOverlay { background: rgba(8, 10, 14, 0.22); pointer-events: auto; }
|
|
821
|
-
.dcAgentStepper { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
822
868
|
.dcAgentQccBadge, .dcAgentJobsPill { display: none; }
|
|
823
869
|
.dcAgentCandidate { grid-template-columns: 1fr; }
|
|
824
870
|
.dcAgentCapabilities { justify-content: flex-start; padding-inline: 12px; }
|
|
@@ -834,15 +880,17 @@ body:has(.dcAgentPromptBackdrop) { overflow: hidden; }
|
|
|
834
880
|
.dcAgentWorkbench { width: 420px; max-width: 48vw; min-width: 360px; }
|
|
835
881
|
.dcAgentQccBadge, .dcAgentJobsPill { display: none; }
|
|
836
882
|
}
|
|
883
|
+
@media (max-width: 360px) {
|
|
884
|
+
.dcAgentStep { font-size: 11px; padding: 10px 3px; gap: 6px; }
|
|
885
|
+
.dcAgentStepIcon { width: 26px; height: 26px; }
|
|
886
|
+
.dcAgentStepIcon svg { width: 18px; height: 18px; }
|
|
887
|
+
}
|
|
837
888
|
/* Distinct levels: management tabs → compact task steps → working content. */
|
|
838
889
|
.dcAgentWorkbench, .dcAgentPromptPanel { font-size: 14px; line-height: 1.5; }
|
|
839
890
|
.dcAgentWbHeader, .dcAgentManagement, .dcAgentStepper { flex: none; }
|
|
840
891
|
.dcAgentManagement { display: flex; gap: 24px; padding: 0 18px; border-bottom: 1px solid var(--dc-border); }
|
|
841
892
|
.dcAgentManagement .dcAgentButton { border: 0; border-bottom: 3px solid transparent; border-radius: 0; padding: 10px 0; background: transparent; }
|
|
842
893
|
.dcAgentManagement .dcAgentButton[aria-pressed="true"] { border-bottom-color: var(--dc-action); color: var(--dc-action); font-weight: 600; }
|
|
843
|
-
.dcAgentStepper { display: flex; overflow-x: auto; gap: 4px; padding: 10px 12px; }
|
|
844
|
-
.dcAgentStep { flex: 0 0 auto; border-color: transparent; padding: 7px 8px; }
|
|
845
|
-
.dcAgentStep.is-active { border-color: transparent; }
|
|
846
894
|
.dcAgentCapability { border-radius: 8px; }
|
|
847
895
|
.dcAgentWbBody { min-height: 0; }
|
|
848
896
|
.dcAgentTable th { background: var(--dc-table-head); color: var(--dc-text); }
|
|
@@ -913,11 +961,11 @@ body:has(.dcAgentPromptBackdrop) { overflow: hidden; }
|
|
|
913
961
|
}
|
|
914
962
|
|
|
915
963
|
const STEPS = [
|
|
916
|
-
{ key: 'upload', label: '导入与核验', icon: '
|
|
917
|
-
{ key: 'rules', label: '规则与体检', icon: '
|
|
918
|
-
{ key: 'match', label: '主体匹配', icon: '
|
|
919
|
-
{ key: 'enrich', label: '字段补全', icon: '
|
|
920
|
-
{ key: 'download', label: '结果下载', icon: '
|
|
964
|
+
{ key: 'upload', label: '导入与核验', icon: 'upload' },
|
|
965
|
+
{ key: 'rules', label: '规则与体检', icon: 'check' },
|
|
966
|
+
{ key: 'match', label: '主体匹配', icon: 'search' },
|
|
967
|
+
{ key: 'enrich', label: '字段补全', icon: 'database' },
|
|
968
|
+
{ key: 'download', label: '结果下载', icon: 'table' },
|
|
921
969
|
];
|
|
922
970
|
|
|
923
971
|
const CAPABILITIES = [
|
|
@@ -3977,15 +4025,18 @@ body:has(.dcAgentPromptBackdrop) { overflow: hidden; }
|
|
|
3977
4025
|
h('button', { type: 'button', className: 'dcAgentButton', 'aria-pressed': step === 'history',
|
|
3978
4026
|
onClick: () => actions.setStep('history') }, '任务历史'),
|
|
3979
4027
|
),
|
|
3980
|
-
step !== 'history' ? h('nav', { className: 'dcAgentStepper', 'aria-label': '清洗流程'
|
|
4028
|
+
step !== 'history' ? h('nav', { className: 'dcAgentStepper', 'aria-label': '清洗流程',
|
|
4029
|
+
style: { '--dc-stage-count': STEPS.length } },
|
|
3981
4030
|
STEPS.map((st) => h('button', {
|
|
3982
4031
|
key: st.key,
|
|
3983
4032
|
type: 'button',
|
|
3984
4033
|
className: `dcAgentStep${(step === 'profile' ? 'rules' : step) === st.key ? ' is-active' : ''}`,
|
|
3985
4034
|
'aria-label': st.label,
|
|
4035
|
+
title: st.label,
|
|
3986
4036
|
'aria-current': (step === 'profile' ? 'rules' : step) === st.key ? 'step' : undefined,
|
|
3987
4037
|
onClick: () => actions.setStep(st.key),
|
|
3988
|
-
},
|
|
4038
|
+
}, h('span', { className: 'dcAgentStepIcon' }, h(StageIcon, { kind: st.icon })),
|
|
4039
|
+
h('span', { className: 'dcAgentStepLabel' }, st.label))),
|
|
3989
4040
|
) : null,
|
|
3990
4041
|
h('div', { className: 'dcAgentWbBody' },
|
|
3991
4042
|
error ? h('div', { className: 'dcAgentError', role: 'alert' }, error) : null,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-data-cleaning-agent",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.9",
|
|
4
4
|
"description": "Clean, complete, and profile enterprise name lists in DeepSeek Harness — a data cleaning & completion agent plugin with local CSV/XLSX/JSON engine and optional Qichacha (QCC) MCP enrichment. Maintained by Qichacha/QCC.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|