多产品发布中枢(Release Notes Hub)——一个运行在 DeepSeek Harness 之上的独立 AI 产品。统一管理多个产品的版本说明,一键生成公告/推送/邮件三渠道文案变体(草稿),发布前缺失检查与时间线回顾。
红线:只生成草稿,不直接对外发布任何渠道——公告页/推送平台/邮件系统都必须由负责人人工走官方后台操作。
┌────────────────────────────┐ ┌──────────────────────────┐
│ dsh-java-release-app │ SSE │ DeepSeek Harness │
│ Spring Boot 3 (:8121) │──────▶│ 127.0.0.1:8090 │
│ - 产品/版本 REST API │ │ - LLM Agent 编排 │
│ - AI 对话(转发 harness) │◀──────│ - Java Native Plugin │
│ - 发布工作台 Web UI │ tool │ dsh-java-release- │
└────────────────────────────┘ calls │ plugin(5 个工具) │
└──────────────────────────┘
- app(端口 8121):REST API + Web UI + SSE AI 对话(转发 harness
/api/agent/stream) - plugin(Java Native):5 个工具,以
plugin__dsh-java-release-plugin__<tool>暴露给 AI
| 工具 | 作用 |
|---|---|
rh_list_products() |
产品清单:团队、发布次数、最新版本、渠道文案覆盖率 |
rh_add_release(product, version, date, highlights, fixes, breaking) |
登记版本说明(版本号 x.y[.z]、highlights 必填、同版本不可重复) |
rh_channel_variants(product, version) |
渠道文案变体:公告(markdown)/推送(一句话)/邮件(主题+正文),均为草稿 |
rh_missing_check() |
缺失检查:无版本记录的产品 / 未生成渠道文案的版本 / 含破坏性变更但缺迁移提示 |
rh_timeline() |
发布时间线:按日期倒序,附亮点/修复数/破坏性变更/文案就绪标记 |
- 产品面板:产品清单(发布数/最新版本/文案覆盖率徽章)
- 时间线面板:全部版本倒序时间线(文案就绪/缺失标记、破坏性变更高亮)
- 缺失面板:待处理项统计 + 分类明细
- AI 对话:让 AI 登记版本、生成渠道文案、巡检缺失
- 登记版本弹窗:highlights/fixes/breaking 逐行录入
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/products |
产品清单(含发布统计) |
| POST | /api/products |
新增产品 {name, team} |
| POST | /api/releases |
登记版本 {product, version, date, highlights, fixes, breaking} |
| POST | /api/releases/variants |
生成渠道文案 {product, version?} |
| GET | /api/releases/missing |
缺失检查 |
| GET | /api/releases/timeline |
发布时间线 |
| POST | /api/assistant/stream |
SSE AI 对话 {agentId, message} |
# 1. 构建
mvn package -DskipTests
# 2. 启动 app(确保 harness 已在 127.0.0.1:8090 运行)
SERVER__PORT=8121 java -jar dsh-java-release-app/target/dsh-java-release-app-0.1.0-SNAPSHOT.jar --server.port=8121
# 3. 安装插件到 harness
curl -X POST http://127.0.0.1:8090/api/harness/plugins/install -H 'Content-Type: application/json' -d '{
"pluginId": "dsh-java-release-plugin",
"jarName": "dsh-java-release-plugin-0.1.0-SNAPSHOT.jar",
"displayName": "Release Notes Hub",
"pluginVersion": "0.1.0",
"runtimeType": "JAVA_NATIVE",
"sourcePath": "'$PWD'/dsh-java-release-plugin/target/dsh-java-release-plugin-0.1.0-SNAPSHOT.jar",
"entrypoint": "cn.xiaofuge.dsh.cn.xiaofuge.dsh.com.dsh.release.plugin.DshReleaseNotesHubPlugin",
"installMode": "REPLACE"
}'
curl -X POST http://127.0.0.1:8090/api/harness/plugins/activate -H 'Content-Type: application/json' -d '{"pluginId":"dsh-java-release-plugin"}'
# 4. 打开 UI
open http://127.0.0.1:8121NO_PROXY='*' python3 release_hub_e2e.py33 项断言覆盖:种子数据、产品/版本登记校验(重名 409、坏版本号 400、未知产品 404、空 highlights 400、重复版本 409)、三渠道文案变体(公告 markdown/推送一句话/邮件主题+正文、草稿警示)、覆盖率更新、缺失检查(无版本产品/未生成文案)、时间线(倒序/就绪标记/breaking)、SSE AI 全链路(点名调用插件工具、拒绝 shell 绕路、拒绝直接对外发布并提供人工路径)。
| 文件 | 内容 |
|---|---|
screenshots/01-home.png |
发布工作台:4 个产品清单(发布数/最新版本/文案覆盖率) |
screenshots/02-ai-drawer.png |
AI 真实调用 rh_channel_variants + rh_missing_check:三渠道草稿 + "不直接发布"警示 + 缺失项 |
screenshots/03-safety.png |
AI 拒绝直接发布到官网/群发邮件:"必须由负责人通过官方系统操作",给出人工复核路径 |
发布数据持久化在 ~/.dsh-java-release/releases.json(首次启动自动写入 3 个种子产品与 3 条版本记录)。