feat: 微信公众号技能包重命名(weixin_public_account)并增强功能

- 将 wechat_official_account 重命名为 weixin_public_account,符合中文命名规范
- 新增 DOCX 文档生成技能、聊天历史、请求 ID 中间件
- 增强工作流、热点服务、文章服务等模块功能
- 前端同步重命名组件和 API
- 新增架构文档 AR13/AR14、专员文档更新
- 补充测试用例(seed_specialists_test, db_migration_test)

Co-Authored-AI: yes
This commit is contained in:
eaiadmin
2026-09-24 21:13:19 +08:00
parent 593323a934
commit 89ae31c998
60 changed files with 7251 additions and 967 deletions
@@ -56,7 +56,7 @@ GW02 给出了"对话 vs 结构化 UI"的分界原则。本文件把它落到具
---
### 2.2 公众号创作专员(wechat-official-account)
### 2.2 公众号创作专员(weixin-public-account)
| 维度 | 分析 |
|---|---|
@@ -5,7 +5,7 @@
> 关联文档:
> - `GW02_对话式AI工作台与传统UI分界判断.md`
> - `GW03_专员工作交互形式分析.md`
> - `docs/05_Object_Catalog/specialists/wechat-official-account/`(对象目录)
> - `docs/05_Object_Catalog/specialists/weixin-public-account/`(对象目录)
---
@@ -50,7 +50,7 @@
| 层级 | 组件 | 说明 |
|------|------|------|
| Manifest | manifest.js (26行) | 专员定义 + InteractionCard |
| API 封装 | officialAccount.js (33行) | 6个API函数 |
| API 封装 | weixinPublicAccount.js (33行) | 6个API函数 |
| 内置注册 | builtin.js 注册 | 作为第4个内置专员注册 |
| 项目模板 | content-operations 绑定 | 绑定公众号创作专员 |
@@ -58,7 +58,7 @@
| 缺失项 | 级别 | 说明 |
|--------|------|------|
| **专属路由页面** | 必须 | `/apps/wechat-official-account` 无对应前端页面 |
| **专属路由页面** | 必须 | `/apps/weixin-public-account` 无对应前端页面 |
| **工作流配置页** | 必须 | 创建任务时输入业务域、关键词、受众、目标、语气等 |
| **工作流步骤面板** | 必须 | 选题候选卡片选择、标题选择、提纲编辑、正文编辑 |
| **配图管理 UI** | 必须 | 配图提示词查看、图片预览、图片重生成 |
@@ -138,7 +138,7 @@
需要实现的前端页面结构:
```
/apps/wechat-official-account
/apps/weixin-public-account
├── 创建页:输入业务域、关键词、受众、目标、语气、字数要求
├── 工作流页(主页面)
│ ├── 左侧:步骤导航栏(9步进度条)
@@ -305,14 +305,14 @@ AI 不仅给热度标签(爆热/高/中高/中),还给出预估阅读量
## 5. 已知 Bug
### 5.1 `isOfficialAccountStep` 缺少 `page_markdown` case
### 5.1 `isWeixinPublicAccountStep` 缺少 `page_markdown` case
后端工作流引擎的 `isOfficialAccountStep` 函数(约第 919-924 行)的 switch 语句中缺少对 `officialAccountStepKeyPageMD` 的检查,而 `officialAccountNextStep` 函数(约第 950-968 行)会将其作为 `preview_export` 的下一步。这意味着执行分页 MD 步骤时会返回 "工作流步骤不存在" 错误。
后端工作流引擎的 `isWeixinPublicAccountStep` 函数(约第 919-924 行)的 switch 语句中缺少对 `weixinPublicAccountStepKeyPageMD` 的检查,而 `weixinPublicAccountNextStep` 函数(约第 950-968 行)会将其作为 `preview_export` 的下一步。这意味着执行分页 MD 步骤时会返回 "工作流步骤不存在" 错误。
**修复方法:** 在 `isOfficialAccountStep` 的 switch 中添加:
**修复方法:** 在 `isWeixinPublicAccountStep` 的 switch 中添加:
```go
case officialAccountStepKeyPageMD:
case weixinPublicAccountStepKeyPageMD:
return true
```
@@ -323,12 +323,12 @@ case officialAccountStepKeyPageMD:
### 6.1 目录结构
```
frontend/src/specialists/packages/wechat-official-account/
frontend/src/specialists/packages/weixin-public-account/
├── manifest.js ← 已存在,不需改
├── views/
│ ├── OfficialAccountCreatePage.vue ← 创建任务页
│ ├── OfficialAccountWorkbenchPage.vue ← 工作流主页面(核心)
│ └── OfficialAccountPreviewPage.vue ← 预览页(可选,可嵌入 Workbench)
│ ├── WeixinPublicAccountCreatePage.vue ← 创建任务页
│ ├── WeixinPublicAccountWorkbenchPage.vue ← 工作流主页面(核心)
│ └── WeixinPublicAccountPreviewPage.vue ← 预览页(可选,可嵌入 Workbench)
├── components/
│ ├── WorkflowStepNav.vue ← 步骤导航(9步进度条)
│ ├── TopicCandidateCard.vue ← 选题候选卡片
@@ -340,16 +340,16 @@ frontend/src/specialists/packages/wechat-official-account/
│ ├── PreviewPanel.vue ← 预览面板
│ └── BottomPanel.vue ← 底部面板
├── composables/
│ ├── useOfficialAccountWorkflow.js ← 工作流状态管理
│ └── useOfficialAccountExport.js ← 导出逻辑
│ ├── useWeixinPublicAccountWorkflow.js ← 工作流状态管理
│ └── useWeixinPublicAccountExport.js ← 导出逻辑
└── api/
└── officialAccount.js ← 已存在,不需改
└── weixinPublicAccount.js ← 已存在,不需改
```
### 6.2 核心交互流程伪代码
```javascript
// OfficialAccountWorkbenchPage.vue
// WeixinPublicAccountWorkbenchPage.vue
<template>
<div class="workbench">
<!-- 左侧:步骤导航 -->
@@ -421,12 +421,12 @@ frontend/src/specialists/packages/wechat-official-account/
```javascript
// 1. 用户从专员市场或通用助手点击"公众号创作专员"
// 2. 跳转到 /apps/wechat-official-account
// 2. 跳转到 /apps/weixin-public-account
// 3. 展示创建表单(或对话式启动)
// 4. 填写表单 → 创建任务 → 跳转到工作流页
// 表单提交
const task = await createOfficialAccountTask({
const task = await createWeixinPublicAccountTask({
business_domain: 'ai',
keyword: '智能体',
audience: '技术从业者',
@@ -448,7 +448,7 @@ await fetchWorkflow(task.id)
// 用户选择选题后,自动进入下一步
async function handleSelectTopic(topic) {
// 保存选题
await updateOfficialAccountTask(taskId, { selected_topic: topic })
await updateWeixinPublicAccountTask(taskId, { selected_topic: topic })
// 执行下一步:标题生成
await executeStep(taskId, 'title_generation', { topic })
// 刷新工作流
@@ -471,7 +471,7 @@ async function handleSelectTopic(topic) {
| 组件 | 预估工作量 | 说明 |
|------|-----------|------|
| 创建表单 | 1天 | 业务域、关键词、受众、目标、语气、字数 |
| 路由配置 | 0.5天 | `/apps/wechat-official-account` 路由 |
| 路由配置 | 0.5天 | `/apps/weixin-public-account` 路由 |
| 步骤导航 | 1天 | 9步进度条,状态指示 |
| 选题卡片 | 1.5天 | 候选展示、选择、刷新热点 |
| 标题卡片 | 0.5天 | 3个标题候选、选择 |
@@ -185,13 +185,13 @@ SpecialistPanel 是一个**只读面板**,它的职责是:
- SpecialistPanel 根据 `currentStep` 动态渲染不同组件
- 对话消息中展示工作流摘要
- 面板中展示完整交互
- 两个区域的同步通过 `fetchOfficialAccountWorkflow` API + 定时刷新
- 两个区域的同步通过 `fetchWeixinPublicAccountWorkflow` API + 定时刷新
---
### 方案 B:独立工作台页面
**思路:** 用户从对话框点击"用公众号创作专员处理"后,跳转到 `/apps/wechat-official-account` 独立页面。
**思路:** 用户从对话框点击"用公众号创作专员处理"后,跳转到 `/apps/weixin-public-account` 独立页面。
```
┌────────────────────────────────────────────────────────────────────┐
@@ -410,8 +410,8 @@ SpecialistPanel 是一个**只读面板**,它的职责是:
<!-- 新增:交互式步骤 -->
<div v-if="tab === 'interactive'">
<OfficialAccountStepInteractive
v-if="currentSpecialistKey === 'wechat-official-account'"
<WeixinPublicAccountStepInteractive
v-if="currentSpecialistKey === 'weixin-public-account'"
:step="currentStep"
:workflow-state="workflowState"
@select="handleStepSelect"
@@ -443,7 +443,7 @@ messages.value.push({
```
当用户点击卡片中的"选择这个"时:
1. 调用 `executeOfficialAccountWorkflowStep(stepKey, { topic: selectedTopic })`
1. 调用 `executeWeixinPublicAccountWorkflowStep(stepKey, { topic: selectedTopic })`
2. 工作流自动推进到下一步
3. 新的结果卡片出现在消息流中