dsh-data-cleaning-agent 0.9.9 → 0.9.10

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,12 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.9.10] - 2026-09-13
8
+
9
+ - 修复首页先挂载于 settling 阶段导致 Logo 与标题替换被跳过的问题;监听宿主阶段及文本节点变化,显示“数据清洗补全智能体”。
10
+ - 兼容“探索未知之境”文案,保留 0.9.9 同级标题分支适配;不再降级到 document.body 全局改写。
11
+ - 新增延迟 Hero 挂载、标题刷新和离开会话恢复回归;真实 DSH 页面仍需登录后验收。
12
+
7
13
  ## [0.9.9] - 2026-09-13
8
14
 
9
15
  - 原生首页标题桥接适配新版 Host 的 composer sibling slot;菜单进入数据清洗补全后稳定显示“数据清洗补全智能体”,不再回退为“探索未至之境”。
package/README.en.md CHANGED
@@ -10,7 +10,9 @@ Related agents: [数据清洗补全](https://github.com/duhu2000/dsh-data-cleani
10
10
 
11
11
  > 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.
12
12
  >
13
- > Current source version / 当前源码版本: **0.9.9** (stable release)
13
+ > Current source version / 当前源码版本: **0.9.10** (stable release)
14
+
15
+ 0.9.10 observes the Host settling-to-hero transition so the database logo and product title appear even after delayed layout. Unknown structures do not trigger global headline rewriting. Rollback version: 0.9.9.
14
16
 
15
17
  0.9.9 restores the “数据清洗补全智能体” native home title when newer Host builds place the plugin marker and Hero headline in sibling composer branches. The bridge remains reversible and isolated from other business plugins. The 0.9.8 read-only Profile history and origin Workspace/Session guarantees remain unchanged. Rollback: `dsh plugin --profile web add dsh-data-cleaning-agent@0.9.8`. Live DSH A/B verification remains a post-install user check.
16
18
 
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  数据清洗补全智能体:面向 Excel/CSV/JSON 企业名单,提供数据清洗、表格清洗、清洗补全、去重、企业数据补全与字段补全,支持企查查 MCP 和结果导出。
10
10
 
11
11
  ```sh
12
- dsh plugin --profile web add dsh-data-cleaning-agent@0.9.9
12
+ dsh plugin --profile web add dsh-data-cleaning-agent@0.9.10
13
13
  ```
14
14
 
15
15
  请先满足下文的 DSH、连接器及侧边栏依赖要求;安装后完整停止并重启对应 Profile。
@@ -27,7 +27,9 @@ dsh plugin --profile web add dsh-data-cleaning-agent@0.9.9
27
27
 
28
28
  > 在 DeepSeek Harness 中清洗、补全、画像企业名单数据的智能体插件:本地 CSV/XLSX/JSON 引擎 + 可选企查查(Qichacha/QCC)MCP 企业数据补全,由企查查(Qichacha/QCC)团队发起并维护。
29
29
  >
30
- > 当前源码版本 / Current source version: **0.9.9**(正式版本)
30
+ > 当前源码版本 / Current source version: **0.9.10**(正式版本)
31
+
32
+ 0.9.10 补齐首页 settling → hero 阶段监听,避免首次挂载漏掉 Logo 与标题替换;兼容“探索未知之境”,未知结构不做全局标题改写。回滚版本为 0.9.9。
31
33
 
32
34
  0.9.9 修复新版 Host composer sibling slot 下的原生首页标题定位,进入数据清洗补全后稳定显示“数据清洗补全智能体”,并保持对其它业务插件的标题隔离。0.9.8 的 Profile 历史只读、来源工作区/会话校验与旧记录边界全部保留。回滚:`dsh plugin --profile web add dsh-data-cleaning-agent@0.9.8`。真实 DSH A/B 验收仍以安装后的用户验证为准,详见发布说明。
33
35
 
@@ -0,0 +1,24 @@
1
+ # 0.9.10 · Delayed home branding
2
+
3
+ ## Scope
4
+
5
+ Preserves 0.9.9 sibling-branch compatibility and 0.9.8 Session ownership. Adds observation
6
+ of Host settling-to-hero layout transitions and headline text-node updates. The home displays
7
+ the blue database logo plus “数据清洗补全智能体”. Both Chinese Host headline variants work.
8
+ Unknown layout never falls back to rewriting document.body. Cleanup restores native branding.
9
+
10
+ ## Verification and boundary
11
+
12
+ Node regression covers delayed mounting, text refresh, reversible cleanup and ordinary-session
13
+ isolation. Real React/Chromium matrix exercises settling-to-hero before checking logo placement,
14
+ light/dark responsive layouts and active/ordinary Session transitions. Existing workflow tests
15
+ remain mandatory. Run npm run check and npm run test:ui before release.
16
+
17
+ The live localhost DSH tab still requires authentication; no live-host success is claimed.
18
+ After upgrading/restarting, click 数据清洗补全, confirm logo/title, then switch to an ordinary
19
+ Session and confirm native branding. No paid MCP, OCR or production data is used in tests.
20
+
21
+ ## Publishing
22
+
23
+ Use PR/main CI gates before annotated v0.9.10, existing GitHub OIDC/provenance workflow,
24
+ then registry version/gitHead and tarball read-back. Rollback: 0.9.9 (may miss delayed hero).
package/lib/client.js CHANGED
@@ -2722,18 +2722,19 @@ body:has(.dcAgentPromptBackdrop) { overflow: hidden; }
2722
2722
  if (!scope?.querySelectorAll) return false;
2723
2723
  const spans = [...scope.querySelectorAll('span')];
2724
2724
  return spans.some((element) => element.dataset?.dcAgentHeroTitle === 'true'
2725
- || ['探索未至之境', 'Into the Unknown'].includes(element.textContent?.trim()))
2725
+ || ['探索未至之境', '探索未知之境', 'Into the Unknown'].includes(element.textContent?.trim()))
2726
2726
  || Boolean(scope.querySelector?.('[class*="headlineText"]'));
2727
2727
  };
2728
2728
  // 新版 Host 会把 list slot 放在 composer seat 的独立分支;marker 不一定再是
2729
2729
  // data-phase=hero 的后代。沿祖先寻找同时包含原生标题的最小范围,保留旧结构兼容。
2730
- let hero = marker?.closest?.('[data-phase="hero"]') ?? null;
2730
+ // Observe the same root while Host layout transitions from settling to hero.
2731
+ let hero = marker?.closest?.('[data-phase="hero"]')
2732
+ ?? marker?.closest?.('[data-phase="settling"]') ?? null;
2731
2733
  if (!hasHeadline(hero)) {
2732
2734
  let scope = marker?.closest?.('[data-composer-seat]') ?? marker?.parentElement ?? null;
2733
- while (scope && !hasHeadline(scope)) scope = scope.parentElement;
2734
- if (scope) hero = scope;
2735
+ while (scope && scope !== document.body && scope !== document.documentElement && !hasHeadline(scope)) scope = scope.parentElement;
2736
+ if (scope && scope !== document.body && scope !== document.documentElement) hero = scope;
2735
2737
  }
2736
- if (!hero && document.body?.querySelectorAll) hero = document.body;
2737
2738
  if (!hero) return () => {};
2738
2739
  const changedTitles = new Map();
2739
2740
  const changedBadges = new Map();
@@ -2750,10 +2751,12 @@ body:has(.dcAgentPromptBackdrop) { overflow: hidden; }
2750
2751
  let observer = null;
2751
2752
 
2752
2753
  const fix = () => {
2754
+ if (hero.getAttribute?.('data-phase') === 'settling') return;
2755
+ if (hero.getAttribute?.('data-phase') === 'active') return;
2753
2756
  let mutated = false;
2754
2757
  const spans = [...hero.querySelectorAll('span')];
2755
2758
  const title = spans.find((element) => element.dataset?.dcAgentHeroTitle === 'true')
2756
- ?? spans.find((element) => ['探索未至之境', 'Into the Unknown'].includes(element.textContent?.trim()))
2759
+ ?? spans.find((element) => ['探索未至之境', '探索未知之境', 'Into the Unknown'].includes(element.textContent?.trim()))
2757
2760
  ?? hero.querySelector?.('[class*="headlineText"]');
2758
2761
  const badge = spans.find((element) => element.dataset?.dcAgentHeroBadge === 'true')
2759
2762
  ?? spans.find((element) => ['预览版', 'Preview'].includes(element.textContent?.trim()));
@@ -2818,7 +2821,8 @@ body:has(.dcAgentPromptBackdrop) { overflow: hidden; }
2818
2821
 
2819
2822
  fix();
2820
2823
  observer = typeof MutationObserver === 'function' ? new MutationObserver(fix) : null;
2821
- observer?.observe?.(hero, { childList: true, subtree: true });
2824
+ observer?.observe?.(hero, { childList: true, subtree: true, characterData: true,
2825
+ attributes: true, attributeFilter: ['data-phase'] });
2822
2826
  return () => {
2823
2827
  observer?.disconnect?.();
2824
2828
  for (const logo of ownedLogos.values()) logo.remove();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-data-cleaning-agent",
3
- "version": "0.9.9",
3
+ "version": "0.9.10",
4
4
  "description": "Data cleaning and data enrichment for CSV/XLSX/JSON enterprise lists in DeepSeek Harness, including spreadsheet cleaning, deduplication, profiling, optional Qichacha MCP and exports.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -20,7 +20,7 @@
20
20
  "install.sh",
21
21
  "marketing",
22
22
  "docs/USER-GUIDE.md",
23
- "docs/RELEASE-0.9.9.md",
23
+ "docs/RELEASE-0.9.10.md",
24
24
  "docs/FIRST-CONTRIBUTION.md",
25
25
  "docs/COMPATIBILITY.md",
26
26
  "docs/UI-V1.5.0-ADOPTION.md",
@@ -1,24 +0,0 @@
1
- # 0.9.9 · Native home title compatibility
2
-
3
- Status: stable release. Date: 2026-09-13.
4
-
5
- ## Scope
6
-
7
- - Adapt the reversible native Hero title bridge to Host layouts where the plugin marker and headline live in sibling branches below the composer container.
8
- - Keep the data-cleaning home title fixed at “数据清洗补全智能体” without modifying another business plugin's headline, prompt UI or input focus.
9
- - Preserve the 0.9.8 Profile history ownership, origin Workspace/Session checks and artifact-download behavior.
10
-
11
- ## Verification
12
-
13
- - The coexistence fixture now exercises a sibling-slot Host structure rather than the obsolete nested Hero structure.
14
- - `npm run check` covers syntax, documentation version consistency, marketing metadata, package allowlist and the full Node test suite.
15
- - The React/Chromium layout matrix remains a separate isolated UI gate; real DSH and production QCC Provider behavior require post-install acceptance.
16
-
17
- ## Install and rollback
18
-
19
- ```sh
20
- dsh plugin --profile web add dsh-data-cleaning-agent@0.9.9
21
- ```
22
-
23
- Rollback package: `dsh plugin --profile web add dsh-data-cleaning-agent@0.9.8`.
24
- Do not move or overwrite existing tags or npm versions.