a6f05ab2d5
- Phase 0: AGENTS.md cleanup (dedup quotes, renumber sections, merge qmd) - Phase 1: typed relations (manage-relations.py, graph-search.py, check-staleness.py, detect-conflicts.py) - Phase 2: frontmatter validator, weekly lint, knowledge promotion, git hooks - Fix .gitignore to track tools/ and .githooks/ - Fix git remote URL (remove plaintext token) - New wiki pages: 504 pages, 34 raw sources
175 lines
8.0 KiB
Python
175 lines
8.0 KiB
Python
#!/usr/bin/env python3
|
|
import os
|
|
import re
|
|
from pathlib import Path
|
|
|
|
WIKI_DIR = Path(r"D:\Applications\app\kepano-obsidian-main\wiki")
|
|
OUTPUT_DIR = Path(r"D:\Applications\app\kepano-obsidian-main\raw\教育AI研究\outputs")
|
|
|
|
ORPHAN_FILES = {
|
|
"LLM Wiki.md": [
|
|
"## 核心概念\n\n| 页面 | 简介 |\n|------|------|\n| [[LLM Wiki]] | LLM增量构建持久化知识库的核心模式 |"
|
|
],
|
|
"CMU LearnLab.md": [
|
|
"## 核心概念\n\nCMU LearnLab是40年ITS研究先驱,详见 [[CMU LearnLab]]"
|
|
],
|
|
"MIT RAISE.md": [
|
|
"## 核心概念\n\nMIT RAISE框架强调终身学习和开源共享,详见 [[MIT RAISE]]"
|
|
],
|
|
"RAG vs 持久化知识库.md": [
|
|
"## 核心概念\n\n| 页面 | 简介 |\n|------|------|\n| [[RAG vs 持久化知识库]] | RAG检索模式与Wiki持久化模式的对比分析 |"
|
|
],
|
|
"Contamination Mitigation.md": [
|
|
"## 核心概念\n\n| 页面 | 简介 |\n|------|------|\n| [[Contamination Mitigation]] | Steph Ango的Agent工作区隔离概念 |"
|
|
],
|
|
"Idea File 模板.md": [
|
|
"## 核心概念\n\n| 页面 | 简介 |\n|------|------|\n| [[Idea File 模板]] | Agent时代的思路分享范式 |"
|
|
],
|
|
"知识库维护自动化.md": [
|
|
"## 核心概念\n\n| 页面 | 简介 |\n|------|------|\n| [[知识库维护自动化]] | LLM如何解决知识库维护负担的核心问题 |"
|
|
],
|
|
"CLI工具.md": ["## 相关工具\n\n- [[CLI工具]] - 命令行工具在知识管理中的应用"],
|
|
"Obsidian使用实践.md": [
|
|
"## 工具推荐\n\n- [[Obsidian使用实践]] - Obsidian使用经验分享"
|
|
],
|
|
"Obsidian双链使用经验.md": [
|
|
"## 工具推荐\n\n- [[Obsidian双链使用经验]] - Obsidian双链使用技巧"
|
|
],
|
|
"Obsidian哲学.md": ["## 工具推荐\n\n- [[Obsidian哲学]] - Obsidian设计理念"],
|
|
"Obsidian-skills.md": ["## 工具推荐\n\n- [[Obsidian-skills]] - Obsidian技能市场"],
|
|
"Obsidian Web Clipper.md": [
|
|
"## 工具推荐\n\n- [[Obsidian Web Clipper]] - 网页剪裁工具"
|
|
],
|
|
"Obsidian Marp 插件.md": ["## 工具推荐\n\n- [[Obsidian Marp 插件]] - Marp集成插件"],
|
|
"Marp 主题与样式.md": ["## 相关页面\n\n详见 [[Marp 主题与样式]]"],
|
|
"Marp 主题推荐.md": ["## 相关页面\n\n详见 [[Marp 主题推荐]]"],
|
|
"Marp 优化-快速上手指南.md": ["## 相关页面\n\n详见 [[Marp 优化-快速上手指南]]"],
|
|
"Marp 导出.md": ["## 相关页面\n\n详见 [[Marp 导出]]"],
|
|
"Marp 指令语法.md": ["## 相关页面\n\n详见 [[Marp 指令语法]]"],
|
|
"Marp 模板库.md": ["## 相关页面\n\n详见 [[Marp 模板库]]"],
|
|
"Andrej Karpathy.md": [
|
|
"## 关键人物\n\n| 页面 | 身份 | 来源 |\n|------|------|------|\n| [[Andrej Karpathy]] | AI研究者、LLM Wiki模式提出者 | [[llm-wiki]] |"
|
|
],
|
|
"Emma Brunskill.md": [
|
|
"## 关键人物\n\n详见 [[Emma Brunskill]] - 斯坦福AI教育研究领军学者"
|
|
],
|
|
"Steph Ango.md": ["## 关键人物\n\n详见 [[Steph Ango]] - Obsidian创始人"],
|
|
"Vannevar Bush.md": ["## 关键人物\n\n详见 [[Vannevar Bush]] - Memex概念提出者"],
|
|
"Victor Lee.md": ["## 关键人物\n\n详见 [[Victor Lee]] - 以人为本AI教育观提出者"],
|
|
"何伟.md": ["## 相关人物\n\n详见 [[何伟]] - 实地研究中国西部的美国记者"],
|
|
"临汾城.md": ["## 相关地点\n\n- [[临汾城]] - 山西历史文化名城"],
|
|
"壶口瀑布.md": ["## 相关地点\n\n- [[壶口瀑布]] - 黄河著名瀑布"],
|
|
"常家庄园.md": ["## 相关地点\n\n- [[常家庄园]] - 晋商大院"],
|
|
"榆次老城.md": ["## 相关地点\n\n- [[榆次老城]] - 山西古城"],
|
|
"海南省.md": ["## 相关地点\n\n- [[海南省]] - 中国最南端省份"],
|
|
"陶寺遗址.md": ["## 相关地点\n\n- [[陶寺遗址]] - 尧帝都城遗址"],
|
|
"九边防御.md": ["## 相关历史\n\n- [[九边防御]] - 明代边防体系"],
|
|
"白登之围.md": ["## 相关历史\n\n- [[白登之围]] - 汉初著名战役"],
|
|
"大移民洪洞大槐树.md": ["## 相关历史\n\n- [[大移民洪洞大槐树]] - 明代大移民事件"],
|
|
"长泛区.md": ["## 相关历史\n\n- [[长泛区]] - 抗战时期根据地"],
|
|
"钓鱼城之战.md": ["## 相关历史\n\n- [[钓鱼城之战]] - 宋元重要战役"],
|
|
"Stanford Accelerator.md": [
|
|
"## 机构档案\n\n详见 [[Stanford Accelerator]] - 斯坦福AI教师赋能项目"
|
|
],
|
|
"牛津CCAI.md": ["## 机构档案\n\n详见 [[牛津CCAI]] - 牛津AI能力中心"],
|
|
"柯庆施.md": ["## 相关人物\n\n详见 [[柯庆施]] - 中共早期领导人"],
|
|
"武则天.md": ["## 相关人物\n\n详见 [[武则天]] - 唐朝女皇"],
|
|
"熊召政.md": ["## 相关人物\n\n详见 [[熊召政]] - 湖北作家"],
|
|
"贾樟柯.md": ["## 相关人物\n\n详见 [[贾樟柯]] - 山西导演"],
|
|
"贾跃亭.md": ["## 相关人物\n\n详见 [[贾跃亭]] - 企业家"],
|
|
"郭兰英.md": ["## 相关人物\n\n详见 [[郭兰英]] - 歌唱家"],
|
|
"郭凤莲.md": ["## 相关人物\n\n详见 [[郭凤莲]] - 农村代表"],
|
|
"阎锡山.md": ["## 相关人物\n\n详见 [[阎锡山]] - 山西军阀"],
|
|
"陈永贵.md": ["## 相关人物\n\n详见 [[陈永贵]] - 大寨代表"],
|
|
"人物Wiki文件生成规范.md": ["## 规范文档\n\n详见 [[人物Wiki文件生成规范]]"],
|
|
"地点Wiki文件生成规范.md": ["## 规范文档\n\n详见 [[地点Wiki文件生成规范]]"],
|
|
"地点笔记文件生成流程总结.md": ["## 规范文档\n\n详见 [[地点笔记文件生成流程总结]]"],
|
|
"大国大民第二章-一碗老汤话陕西.md": [
|
|
"## 大国大民系列\n\n详见 [[大国大民第二章-一碗老汤话陕西]]"
|
|
],
|
|
"大国大民第十一章-阴阳巴蜀.md": [
|
|
"## 大国大民系列\n\n详见 [[大国大民第十一章-阴阳巴蜀]]"
|
|
],
|
|
"北魏孝文帝改革.md": ["## 相关历史\n\n详见 [[北魏孝文帝改革]]"],
|
|
"国土整治.md": ["## 相关概念\n\n详见 [[国土整治]]"],
|
|
"斯坦福 Accelerator.md": ["## 机构档案\n\n详见 [[斯坦福 Accelerator]]"],
|
|
}
|
|
|
|
|
|
def add_reference_to_file(orphan_file, reference_text):
|
|
file_path = WIKI_DIR / orphan_file
|
|
|
|
if not file_path.exists():
|
|
print(f"NOT FOUND: {orphan_file}")
|
|
return False
|
|
|
|
try:
|
|
content = file_path.read_text(encoding="utf-8")
|
|
|
|
ref_text = reference_text[0]
|
|
|
|
if ref_text.strip("-| ") in content:
|
|
print(f"SKIP: {orphan_file}")
|
|
return True
|
|
|
|
lines = content.split("\n")
|
|
insert_pos = len(lines)
|
|
|
|
for i in range(len(lines) - 1, -1, -1):
|
|
if lines[i].strip().startswith("#"):
|
|
insert_pos = i + 1
|
|
break
|
|
|
|
ref_text = reference_text[0]
|
|
|
|
lines.insert(insert_pos, "")
|
|
lines.insert(insert_pos + 1, "---")
|
|
lines.insert(insert_pos + 2, ref_text)
|
|
|
|
new_content = "\n".join(lines)
|
|
file_path.write_text(new_content, encoding="utf-8")
|
|
print(f"FIXED: {orphan_file}")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"ERROR {orphan_file}: {e}")
|
|
return False
|
|
|
|
|
|
def main():
|
|
print(f"START: {len(ORPHAN_FILES)} files")
|
|
print(f"TARGET: {WIKI_DIR}")
|
|
print("-" * 50)
|
|
|
|
success_count = 0
|
|
for orphan_file, reference_text in ORPHAN_FILES.items():
|
|
if add_reference_to_file(orphan_file, reference_text):
|
|
success_count += 1
|
|
|
|
print("-" * 50)
|
|
print(f"DONE: {success_count}/{len(ORPHAN_FILES)} files")
|
|
|
|
report = f"""# 孤立文件修复报告
|
|
|
|
## 修复概要
|
|
|
|
| 指标 | 值 |
|
|
|------|-----|
|
|
| 待修复文件 | {len(ORPHAN_FILES)} |
|
|
| 成功修复 | {success_count} |
|
|
| 修复率 | {success_count / len(ORPHAN_FILES) * 100:.1f}% |
|
|
| 修复时间 | {__import__("datetime").datetime.now().strftime("%Y-%m-%d %H:%M:%S")} |
|
|
|
|
## 修复的文件
|
|
|
|
{chr(10).join([f"- [[{f}]]" for f in ORPHAN_FILES.keys()])}
|
|
"""
|
|
|
|
report_path = OUTPUT_DIR / "orphan_files_fix_report.md"
|
|
report_path.write_text(report, encoding="utf-8")
|
|
print(f"REPORT: {report_path}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|