DSH Java Native Plugin 独立 AI 产品系列 #16。Markdown 锻造厂:结构体检、死链检查、TOC 生成、风格 lint、字数统计。
独立 AI 产品:整个应用就是 Markdown 质量工作台。AI 与右侧工作台共享同一套工具能力,可体检/检查/生成/诊断任意 Markdown 文档。
| 能力 | 说明 |
|---|---|
| 结构体检 | 标题树 + 层级跳跃检测(h1 直接到 h3)、代码块/表格/列表/图片/链接计数、多个 h1 问题 |
| 链接检查 | 外链(http 明文提醒)、内链(空格问题)、锚点(是否真有对应标题,GitHub slug 规则) |
| TOC 生成 | 带锚点目录,maxLevel 控制深度,自动跳过文档主标题,以新内容返回 |
| 风格 lint | 超长行(>120)/行尾空白/硬 Tab/代码块缺语言/层级超 h6/缺 h1,逐条行号+改法 |
| 字数统计 | 中文字数/英文词数/总词数/阅读时长(400词/分)/行数/元素计数 |
工具前缀:plugin__dsh-java-markdown-plugin__md_
md_structure_scan(markdown)— 结构体检md_check_links(markdown)— 链接检查md_generate_toc(markdown, maxLevel)— TOC 生成md_lint_style(markdown)— 风格 lintmd_word_stats(markdown)— 字数统计
- 只分析不改写正文;TOC/修复建议以新内容返回,由用户决定插入位置。
- lint 发现的问题必须给理由与改法,不擅自"顺手改掉"。
- 用户没贴文档时 AI 先索要原文,不臆造文档内容(T7 验证)。
dsh-java-markdown/
├── dsh-java-markdown-app/ # Spring Boot 应用 (port 8103)
│ ├── controller/ # REST: /api/md/* + /api/assistant/stream (SSE)
│ ├── service/ # MarkdownForgeService(纯文本分析,无三方依赖)
│ └── static/ # 前端(结构/链接/TOC/字数 四工作台 + AI 对话)
└── dsh-java-markdown-plugin/ # Java Native Plugin(5 个 md_* 工具)
mvn package -DskipTests
SERVER__PORT= java -jar dsh-java-markdown-app/target/dsh-java-markdown-app-0.1.0-SNAPSHOT.jar --server.port=8103
cp dsh-java-markdown-plugin/target/dsh-java-markdown-plugin-0.1.0-SNAPSHOT.jar ~/.dsh/standalone/plugins/dsh-java-markdown-plugin.jar
curl -X POST http://127.0.0.1:8090/api/harness/plugins/install -H 'Content-Type: application/json' \
-d '{"pluginId":"dsh-java-markdown-plugin","jarName":"dsh-java-markdown-plugin.jar","displayName":"DSH Markdown Forge Plugin","pluginVersion":"0.1.0","runtimeType":"JAVA_NATIVE","sourcePath":"'"$HOME"'/.dsh/standalone/plugins/dsh-java-markdown-plugin.jar","entrypoint":"cn.xiaofuge.dsh.markdown.plugin.DshMarkdownForgePlugin","installMode":"REPLACE"}'
curl -X POST http://127.0.0.1:8090/api/harness/plugins/activate -H 'Content-Type: application/json' \
-d '{"pluginId":"dsh-java-markdown-plugin"}'
python3 md_forge_e2e.py # 8/8 PASS- T0 结构:4 标题/2 代码块计数 + h1→h3 跳跃检测
- T1 链接:3 引用(外链 https 通过 + 坏锚点揪出)
- T2 TOC:3 条目跳过主标题 + maxLevel=2 过滤 h3
- T3 lint:超长行(127字符) + 行尾空格 + 缺语言标注
- T4 字数:中文 101 字 + 阅读时长 + 元素计数
- T5 空 markdown 400
- T6 AI 走 SSE 调用
md_structure_scan/md_word_stats/md_generate_toc - T7 安全红线:用户没贴文档时 AI 先索要
screenshots/01-home.png— 主界面(结构工作台)screenshots/02-ai-drawer.png— AI 结构体检 + 链接健康度报告screenshots/03-safety.png— 风格 Lint:2 处问题逐条标注(行号/类型/改法)