diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md
index 79eef2c..bae1656 100644
--- a/.planning/ROADMAP.md
+++ b/.planning/ROADMAP.md
@@ -68,7 +68,7 @@ Plans:
- [x] 05-03-PLAN.md — 最终目录结构验证和测试 (OUT-01, OUT-02, OUT-03, OUT-04)
#### Phase 6: 代码整合
-**Goal**: 将独立的元数据技能和 Pipeline 模块整合进 kb-workflow
+**Goal**: 将独立的元数据技能和 Pipeline 模块整合进 kb-workflow,消除 sys.path 操作,建立标准 Python 包结构
**Depends on**: Phase 5
**Requirements**: MET-01, MET-02, MET-03, MET-04, MET-05, PIP-01, PIP-02, PIP-03, PIP-04
**Success Criteria** (what must be TRUE):
@@ -76,11 +76,14 @@ Plans:
2. kb_pipeline/ 代码合并入 kb-workflow/ 保持 processors/, platforms/, schemas.py 结构
3. 所有导入路径更新指向新位置,CLI 正常工作
4. 原独立的 kb-bilibili-metadata、kb-zhihu-metadata、kb_pipeline 目录已删除
-**Plans**: 2 plans
+ 5. 所有 sys.path 动态操作已删除或重构
+ 6. Pipeline 类可从 kb_workflow.pipeline 包级别导入
+**Plans**: 3 plans
Plans:
-- [ ] 06-01-PLAN.md — 元数据技能整合 (MET-01, MET-02, MET-03, MET-04, MET-05)
-- [ ] 06-02-PLAN.md — Pipeline 模块整合 (PIP-01, PIP-02, PIP-03, PIP-04)
+- [x] 06-01-PLAN.md — 元数据技能整合 (MET-01, MET-02, MET-03, MET-04, MET-05)
+- [x] 06-02-PLAN.md — Pipeline 模块整合 (PIP-01, PIP-02, PIP-03, PIP-04)
+- [ ] 06-03-PLAN.md — Gap Closure: 消除 sys.path 操作和补充 Pipeline 导出 (MET-05, PIP-04)
## Progress
@@ -94,4 +97,4 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6
| 3. Processors | v1.0 | 3/3 | Complete | 2026-03-15 |
| 4. Pipeline | v1.0 | 2/2 | Complete | 2026-03-15 |
| 5. 归档与目录优化 | v1.1 | 3/3 | Complete | 2026-03-16 |
-| 6. 代码整合 | v1.1 | 0/2 | Not started | - |
+| 6. 代码整合 | v1.1 | 2/3 | In Progress | - |
diff --git a/.planning/phases/06-code-consolidation/06-03-PLAN.md b/.planning/phases/06-code-consolidation/06-03-PLAN.md
new file mode 100644
index 0000000..4e8b654
--- /dev/null
+++ b/.planning/phases/06-code-consolidation/06-03-PLAN.md
@@ -0,0 +1,328 @@
+---
+phase: 06-code-consolidation
+plan: 03
+type: execute
+wave: 1
+depends_on: [06-01, 06-02]
+files_modified:
+ - kb_workflow/kb_workflow.py
+ - kb_workflow/metadata/zhihu_extractor.py
+ - kb_workflow/metadata/zhihu_metadata.py
+ - kb_workflow/pipeline/processors/analyze.py
+ - kb_workflow/pipeline/__init__.py
+autonomous: true
+requirements: [MET-05, PIP-04]
+gap_closure: true
+
+must_haves:
+ truths:
+ - "所有 sys.path.insert 操作已从代码库中删除"
+ - "Pipeline 类可从 kb_workflow.pipeline 包级别导入"
+ - "所有模块使用标准 Python 包导入,无动态路径操作"
+ artifacts:
+ - path: "kb_workflow/kb_workflow.py"
+ provides: "CLI 入口"
+ contains: "无 sys.path 操作"
+ - path: "kb_workflow/metadata/zhihu_extractor.py"
+ provides: "知乎内容提取"
+ contains: "无 sys.path 操作"
+ - path: "kb_workflow/metadata/zhihu_metadata.py"
+ provides: "知乎元数据 CLI"
+ contains: "无 sys.path 操作"
+ - path: "kb_workflow/pipeline/processors/analyze.py"
+ provides: "AI 分析处理器"
+ contains: "无 sys.path 操作"
+ - path: "kb_workflow/pipeline/__init__.py"
+ provides: "Pipeline 包入口"
+ exports: ["Pipeline"]
+ key_links:
+ - from: "kb_workflow/pipeline/__init__.py"
+ to: "kb_workflow/pipeline/pipeline.py"
+ via: "from kb_workflow.pipeline.pipeline import Pipeline"
+ pattern: "from kb_workflow.pipeline.pipeline import Pipeline"
+---
+
+
+消除代码库中遗留的 sys.path 动态操作,完善 Pipeline 类的包级别导出。
+
+Purpose: 完成 Phase 6 的目标 —— 建立干净的 Python 包结构,无动态路径操作
+Output: 5 个文件被修改,所有 sys.path 操作被删除,Pipeline 可从包级别导入
+
+
+
+@/home/starmen1265/.claude/get-shit-done/workflows/execute-plan.md
+@/home/starmen1265/.claude/get-shit-done/templates/summary.md
+
+
+
+@.planning/PROJECT.md
+@.planning/ROADMAP.md
+@.planning/STATE.md
+@.planning/phases/06-code-consolidation/06-VERIFICATION.md
+
+## Gap 来源
+
+06-VERIFICATION.md 发现了以下问题:
+
+1. **sys.path 操作遗留** - 4 处文件中仍有 sys.path.insert 操作
+2. **Pipeline 导出缺失** - Pipeline 类未在 `kb_workflow/pipeline/__init__.py` 中导出
+
+## 当前文件状态
+
+### kb_workflow/kb_workflow.py (第 40-43 行)
+```python
+# Add project root to path for kb_pipeline imports
+project_root = Path(__file__).parent.parent
+if str(project_root) not in sys.path:
+ sys.path.insert(0, str(project_root))
+```
+**问题**: 不再需要,因为 kb_workflow 已是正确的包结构
+
+### kb_workflow/metadata/zhihu_extractor.py (第 12-15 行)
+```python
+# 添加当前目录到 Python 路径以支持绝对导入
+current_dir = os.path.dirname(os.path.abspath(__file__))
+if current_dir not in sys.path:
+ sys.path.insert(0, current_dir)
+```
+**问题**: 不再需要,markdown_converter 可通过相对导入 `.markdown_converter` 访问
+
+### kb_workflow/metadata/zhihu_metadata.py (第 18-21 行)
+```python
+# 添加当前目录到 Python 路径
+current_dir = os.path.dirname(os.path.abspath(__file__))
+if current_dir not in sys.path:
+ sys.path.insert(0, current_dir)
+```
+**问题**: 不再需要,zhihu_extractor 可通过相对导入 `.zhihu_extractor` 访问
+
+### kb_workflow/pipeline/processors/analyze.py (第 16-19 行)
+```python
+# Add kb-deep-analyzer to path for import
+_kb_deep_analyzer_path = Path(__file__).parent.parent.parent / "kb-deep-analyzer"
+if str(_kb_deep_analyzer_path) not in sys.path:
+ sys.path.insert(0, str(_kb_deep_analyzer_path))
+```
+**问题**: 这是为外部项目 kb-deep-analyzer 添加路径,需评估是否保留
+
+### kb_workflow/pipeline/__init__.py
+当前缺少 `from kb_workflow.pipeline.pipeline import Pipeline` 和在 `__all__` 中导出
+
+
+
+
+
+
+ Task 1: 删除 kb_workflow.py 中的 sys.path 操作
+ kb_workflow/kb_workflow.py
+
+ 删除第 40-43 行的 sys.path 操作代码块:
+ ```python
+ # Add project root to path for kb_pipeline imports
+ project_root = Path(__file__).parent.parent
+ if str(project_root) not in sys.path:
+ sys.path.insert(0, str(project_root))
+ ```
+
+ 原因:kb_workflow 现在是正确的 Python 包结构,所有导入都可以通过 `from kb_workflow.pipeline.xxx` 正常工作,不需要动态添加路径。
+
+ 同时更新模块顶部的注释(第 8 行),将 "内部使用 kb_pipeline 包" 改为 "内部使用 kb_workflow.pipeline 包"。
+
+
+ grep -n "sys.path" kb_workflow/kb_workflow.py; test $? -eq 1
+
+ kb_workflow.py 中无 sys.path 相关代码,CLI 仍可正常执行 --help
+
+
+
+ Task 2: 删除 zhihu_extractor.py 中的 sys.path 操作
+ kb_workflow/metadata/zhihu_extractor.py
+
+ 1. 删除第 12-15 行的 sys.path 操作代码块:
+ ```python
+ # 添加当前目录到 Python 路径以支持绝对导入
+ current_dir = os.path.dirname(os.path.abspath(__file__))
+ if current_dir not in sys.path:
+ sys.path.insert(0, current_dir)
+ ```
+
+ 2. 更新第 17-20 行的导入方式,改为纯相对导入:
+ ```python
+ # 旧代码:
+ try:
+ from .markdown_converter import MarkdownConverter
+ except ImportError:
+ from markdown_converter import MarkdownConverter
+
+ # 新代码:
+ from .markdown_converter import MarkdownConverter
+ ```
+
+ 原因:kb_workflow.metadata 已是标准 Python 包,相对导入可以正常工作。
+
+
+ grep -n "sys.path" kb_workflow/metadata/zhihu_extractor.py; test $? -eq 1
+
+ zhihu_extractor.py 中无 sys.path 相关代码,模块可正常导入
+
+
+
+ Task 3: 删除 zhihu_metadata.py 中的 sys.path 操作
+ kb_workflow/metadata/zhihu_metadata.py
+
+ 1. 删除第 18-21 行的 sys.path 操作代码块:
+ ```python
+ # 添加当前目录到 Python 路径
+ current_dir = os.path.dirname(os.path.abspath(__file__))
+ if current_dir not in sys.path:
+ sys.path.insert(0, current_dir)
+ ```
+
+ 2. 更新第 23 行的导入方式,改为相对导入:
+ ```python
+ # 旧代码:
+ from zhihu_extractor import ZhihuPlaywrightExtractor
+
+ # 新代码:
+ from .zhihu_extractor import ZhihuPlaywrightExtractor
+ ```
+
+ 原因:kb_workflow.metadata 已是标准 Python 包,相对导入可以正常工作。
+
+
+ grep -n "sys.path" kb_workflow/metadata/zhihu_metadata.py; test $? -eq 1
+
+ zhihu_metadata.py 中无 sys.path 相关代码,CLI 可正常执行
+
+
+
+ Task 4: 处理 analyze.py 中的 sys.path 操作
+ kb_workflow/pipeline/processors/analyze.py
+
+ 这处 sys.path 操作是为外部项目 kb-deep-analyzer 添加路径。评估后决定:
+
+ **保留但重构**:将 sys.path 操作移到 lazy import 内部,只在需要时执行一次。
+
+ 修改方案:
+ 1. 删除第 16-19 行的顶层 sys.path 操作
+ 2. 在 `_run_analysis` 方法(第 193-214 行)中,在 `from deep_analyzer import ...` 之前动态添加路径
+ 3. 添加模块级标志位 `_deep_analyzer_path_added = False` 确保只添加一次
+
+ 具体实现:
+ ```python
+ # 在文件顶部(删除原来的 sys.path 操作后)
+ _deep_analyzer_path_added = False
+
+ # 在 _run_analysis 方法中,第 204 行之前添加:
+ global _deep_analyzer_path_added
+ if not _deep_analyzer_path_added:
+ _kb_deep_analyzer_path = Path(__file__).parent.parent.parent / "kb-deep-analyzer"
+ if str(_kb_deep_analyzer_path) not in sys.path:
+ sys.path.insert(0, str(_kb_deep_analyzer_path))
+ _deep_analyzer_path_added = True
+ ```
+
+ 原因:kb-deep-analyzer 是外部项目,不在 kb_workflow 包内,需要通过 sys.path 引入。但将其移到 lazy import 内部更干净。
+
+
+ grep -n "sys.path" kb_workflow/pipeline/processors/analyze.py | grep -v "_run_analysis" | wc -l | xargs test 0 -eq
+
+ analyze.py 的 sys.path 操作移到 lazy import 内部,顶层无 sys.path 操作
+
+
+
+ Task 5: 在 pipeline/__init__.py 中导出 Pipeline 类
+ kb_workflow/pipeline/__init__.py
+
+ 在 kb_workflow/pipeline/__init__.py 中添加 Pipeline 类的导入和导出:
+
+ 1. 在导入区域(第 28 行之后)添加:
+ ```python
+ from kb_workflow.pipeline.pipeline import Pipeline
+ ```
+
+ 2. 在 `__all__` 列表中(第 30 行之后)添加:
+ ```python
+ "Pipeline",
+ ```
+
+ 最终 `__all__` 应该包含 "Pipeline" 字符串。
+
+ 注意:确保 Pipeline 类在其他导入之后添加,避免循环导入问题。
+
+
+ python -c "from kb_workflow.pipeline import Pipeline; print('Pipeline import OK')"
+
+ Pipeline 类可从 kb_workflow.pipeline 包级别导入
+
+
+
+ Task 6: 验证所有更改
+ kb_workflow/kb_workflow.py, kb_workflow/metadata/zhihu_extractor.py, kb_workflow/metadata/zhihu_metadata.py, kb_workflow/pipeline/processors/analyze.py, kb_workflow/pipeline/__init__.py
+
+ 运行全面验证:
+
+ 1. 检查所有文件中无顶层 sys.path 操作(analyze.py 除外,其 sys.path 在方法内部):
+ ```bash
+ grep -rn "sys.path" kb_workflow/ --include="*.py" | grep -v "analyze.py" | grep -v ".pyc"
+ ```
+
+ 2. 验证所有核心导入正常工作:
+ ```bash
+ python -c "from kb_workflow.pipeline import Pipeline; print('Pipeline OK')"
+ python -c "from kb_workflow.metadata.zhihu_extractor import ZhihuPlaywrightExtractor; print('ZhihuExtractor OK')"
+ python -c "from kb_workflow import process_command; print('CLI OK')"
+ ```
+
+ 3. 验证 CLI 可执行:
+ ```bash
+ python kb_workflow/kb_workflow.py --help
+ ```
+
+ 4. 运行测试(预期 14 个预先存在的 mock 相关失败):
+ ```bash
+ pytest tests/ -v --tb=short 2>&1 | tail -20
+ ```
+
+
+ python -c "from kb_workflow.pipeline import Pipeline; from kb_workflow.metadata.zhihu_extractor import ZhihuPlaywrightExtractor; from kb_workflow import process_command; print('All imports OK')"
+
+ 所有导入正常,CLI 可执行,无新增测试失败
+
+
+
+
+
+## Gap Closure Verification
+
+| Gap | Status | Verification |
+|-----|--------|-------------|
+| sys.path 操作未完全消除 | CLOSED | `grep -rn "sys.path" kb_workflow/ --include="*.py" | grep -v "analyze.py" | grep -v ".pyc"` 返回空 |
+| Pipeline 未在包级别导出 | CLOSED | `from kb_workflow.pipeline import Pipeline` 成功 |
+
+## Test Commands
+
+```bash
+# 验证无遗留 sys.path(除 analyze.py 内部)
+grep -rn "sys.path" kb_workflow/ --include="*.py" | grep -v "analyze.py" | grep -v ".pyc"
+
+# 验证 Pipeline 导出
+python -c "from kb_workflow.pipeline import Pipeline; print('OK')"
+
+# 验证 CLI
+python kb_workflow/kb_workflow.py --help
+```
+
+
+
+1. kb_workflow/kb_workflow.py 无 sys.path 操作
+2. kb_workflow/metadata/zhihu_extractor.py 无 sys.path 操作
+3. kb_workflow/metadata/zhihu_metadata.py 无 sys.path 操作
+4. kb_workflow/pipeline/processors/analyze.py 的 sys.path 操作移到 lazy import 内部
+5. Pipeline 类可从 kb_workflow.pipeline 包级别导入
+6. 所有现有功能正常工作,无新增测试失败
+
+
+