# EveryPublish 交付文档(技术栈定版 · 页面构成 · 日计划) > 2026-08-20 · 开发顺序:网站端(含API) → 客户端(Windows) → 联调交付(含两个用户确认检查点)。基础仓库已拉取:apps/web(Tencent/tdesign-react-starter,MIT)。技术栈定版见 docs/tech-stack.md(MySQL + 前后端 Go 统一)。 ## 1. 技术栈定版 | 层 | 选型 | 依据 | |---|---|---| | 网页端 | React 18 + TDesign React(Tencent starter,MIT) | 已拉取预览:Vite + TS + Router6 + Redux Toolkit + axios;自带后台页面与 mock,无需装饰 | | 网页端后端(服务器) | **Go**(gin + coder/websocket + asynq + GORM) | 见 Rust/Go 对比;与 agent-core 同语言共享协议模块;页面层仍为 React+TDesign | | 客户端 UI | **WinUI 3(C#/.NET 8)原生** | 系统原生控件,无需自写 UI;QR 用 QRCoder 本地渲染 token | | 客户端核心 | **Go**(WSS 客户端 + go-rod CDP 自动化 + 凭据保险库) | 单二进制、无运行时、可二期抽 Windows 服务/跑 VPS | | 数据库/队列 | **MySQL 8.x(GORM)+ Redis(asynq)** | 任务队列/排期靠 Redis;MySQL 存业务数据 | | 素材存储 | 一期服务器本地盘(签名直链);二期 OSS | StorageDriver 抽象预留 | ### 1.1 Rust 还是 Go:结论选 Go | 维度 | Go | Rust | |---|---|---| | 本项目规模 | 性能绰绰有余(WS 网关 goroutine-per-conn,千级连接轻松) | 性能过剩,无收益 | | 开发与 AI 协作 | AI 生成质量高、迭代快、编译秒级 | borrow checker 调试成本高、编译慢 | | 单二进制部署 | 静态编译、零依赖(Windows 端尤其省心) | 更小,但构建链复杂 | | 浏览器自动化 | go-rod(CDP)成熟可用 | 生态弱 | | Windows 常驻/服务 | kardianos/service 简单 | 复杂度高 | | 生态(队列/WS/DB) | asynq / coder-websocket / GORM(MySQL) 齐全 | 可选少 | **性能保障**:①WSS 网关 goroutine-per-conn,单机万级并发无压力;②GORM(MySQL 连接池)+ Redis 承载队列;③大文件绝不走 WSS(签名直链),网关只传 <1KB 消息;④服务无状态可水平扩展;⑤验收硬指标:任务下发 <300ms(tools/diag-connection.mjs 实测基线)。 ## 2. 样式方案 - **网页端**:TDesign starter 默认主题(企业后台风格,深浅色可切换),全部页面用 TDesign 组件,不写自定义样式;示例页清理后按菜单骨架填充。 - **客户端**:WinUI 3 Fluent 原生风格(与 Windows 11 一致),托盘用 H.NotifyIcon.WinUI(或 Win32 interop),扫码/挑战用对话框页。 ## 3. 网页端页面构成 ### 3.1 用户端(客户工作台) | 菜单 | 页面 | 关键功能 | 角色 | |---|---|---|---| | 工作台 | 仪表盘 | 今日发布统计、待处理挑战数、Agent 在线状态、最近任务 | 全部 | | 发布管理 | 任务列表 / 新建发布 / 排期日历 / 任务详情 | 状态筛选、批量重试/取消;选素材→平台账号→标题话题→定时/立即→提交审核;月/周视图;事件时间线+回执截图+失败原因 | 运营/审核/管理员 | | 素材库 | 素材列表 / 上传 / 预览 | 拖拽上传(multipart+进度)、分组标签、sha256、删除 | 运营/审核 | | 账号管理 | 账号台账 / 绑定向导 / 挑战弹窗 | 平台/绑定状态/健康度/代理/最后活跃;发起扫码→QR 弹窗;重新扫码/解绑 | 管理员 | | 审核中心 | 待审列表 | 分平台预览、通过/驳回+批注(可配置跳过) | 审核/管理员 | | 通知与挑战 | 挑战中心 / 通知列表 | QR 从 token 本地渲染、验证码输入、APP确认指引、超时挂起/一键重发 | 相关角色 | | 成员与权限 | 成员列表 / 邀请 | 邀请链接、角色分配 | 管理员 | | 设置 | 工作区资料 / 安全 / 通知渠道 / Agent 设备 | 2FA 开关(默认关)、企微/钉钉/邮件、设备列表与吊销 | 管理员 | | 审计日志 | 日志列表 | 谁在何时做了什么、筛选 | 管理员 | ### 3.2 平台端(admin 角色,同部署加一个角色即可) | 菜单 | 页面 | 功能 | |---|---|---| | 租户管理 | 客户列表/详情 | 状态、配额(简单)、停用 | | Agent 总览 | 设备列表 | 在线/版本/强制吊销/远程指令 | | 渠道状态(后置) | 适配器列表 | 平台模块状态、灰度 | | 风控台账(后置) | 事件列表 | 风控/冷却记录 | ## 4. 调用方式设计 ```mermaid flowchart LR subgraph WEB["网页端 React+TDesign"] U["用户端页面 / 平台端admin"] end subgraph SRV["Go 服务器"] API["REST /api/*"] WS["WSS 网关"] end subgraph CLIENT["Windows 客户端"] UI["WinUI 3 壳 C#"] -->|"localhost HTTP+随机token"| CORE["agent-core Go"] end U -->|"REST(axios) + 实时WS(JWT)"| API U -->|"实时状态推送"| WS CORE -->|"WSS Ed25519设备签名"| WS CORE -->|"素材直链下载(签名token)"| API CORE -->|"CDP 驱动系统Chrome/Edge"| CH["浏览器"] ``` - ① 网页端 → 服务器:REST(axios,JWT 15min + refresh 轮换)+ 原生 WebSocket(实时状态推送)。 - ② 客户端 WinUI 壳 → agent-core:localhost HTTP/WS + 随机 token(仅回环,配对时写入本地配置)。 - ③ agent-core → 服务器:WSS + Ed25519 设备签名(配对码注册公钥)。 - ④ 素材:multipart 上传 + 签名直链下载(大文件不走 WSS)。 ## 5. 后台常驻方案(Windows) - **开机自启**:安装时写注册表 HKCU Run。 - **最小化到托盘**:H.NotifyIcon.WinUI / Win32 Shell_NotifyIcon。 - **进程模型**:WinUI 主进程(UI)spawn agent-core 子进程(随机端口+token);主进程做 watchdog——心跳检测、崩溃自拉起、3 次失败弹窗提示。 - **断线自愈**:core 内 WSS 指数退避重连(1s/5s/15s/60s)。 - **二期**:core 抽离为 Windows 服务(kardianos/service),支持无 UI 部署与客户 VPS 形态。 ## 6. 开发日计划(1 人 + AI,顺序开发,D1-D13 + 2 天缓冲) ### 阶段一 网站端(D1-D7) | 日 | 任务 | 验收标准 | |---|---|---| | D1 | 预览与工程化:starter 跑通 → 依赖升级评估(Vite2→5/TS4.8→5) → 清理示例页与 mock → 按页面清单搭菜单/路由空壳;Go 后端初始化(health/配置/DB/Redis) | dev 无报错、菜单空壳可点、/health 200、DB 连上 | | D2 | 认证与工作区 API:Argon2 登录/refresh 轮换/登出(2FA 代码留位默认关)、成员/邀请/角色、审计埋点 | 单测过;前端登录页真实登录 | | D3 | 业务 API:账号台账(bind→challenge)、素材(multipart+签名直链+sha256)、任务 CRUD+状态机+排期、审核动作、通知 | 单测+接口文档;curl 全接口可跑 | | D4 | WSS 网关(hello 验签/心跳/断线、task.push/ack/result、challenge 双向) + 假执行器脚本 + 前端实时推送 | localhost 假执行器闭环:任务→下发→执行→回传→页面变绿,<300ms | | D5 | 页面①:登录、仪表盘、成员、设置 | 页面与真实 API 联通 | | D6 | 页面②:素材库、账号台账+绑定挑战弹窗、任务列表+新建+排期日历 | 全流程可点通(与假执行器) | | D7 | 页面③:审核中心、挑战中心(QR 本地渲染+验证码)、通知、审计 + admin(租户列表/Agent 总览) | 角色权限正确、admin 入口可用 | > **检查点①(暂停)**:D7 完成后暂停目标 → 执行网页端手动测试(§7 第 1-5 项 + 全页面冒烟)→ 输出测试报告 → 等待用户确认通过后再进入阶段二。 ### 阶段二 客户端(D8-D11) | 日 | 任务 | 验收标准 | |---|---|---| | D8 | agent-core(Go):WSS 客户端(重连/幂等)、凭据保险库(加密)、执行器框架、代理配置、挑战处理 + 假平台执行器 | core 单测过;与服务器假执行闭环 | | D9 | WinUI 3 壳:托盘、配对引导、扫码/挑战窗口、状态页;localhost 调 core;开机自启+watchdog;打包脚本 | Windows 实机:安装→配对→假任务→回传 | | D10 | 真实平台:B站(投稿协议,无浏览器)先行 | B站真实发布成功 | | D11 | 抖音/快手/小红书(go-rod CDP:系统 Chrome、独立档案、指纹、代理绑定;参考 social-auto-upload) | 三平台真实发布+截图回执(可先交付可跑子集) | > **检查点②(暂停)**:D11 完成后暂停目标 → 打包并交付用户测试(附测试清单)→ 等待用户确认测试通过后再进入阶段三联调。 ### 阶段三 联调与交付(D12-D13) | 日 | 任务 | 验收标准 | |---|---|---| | D12 | 内网联调+异常注入:断线重连/重复任务/登录过期挑战/失败退避;延迟基线 | 验收清单全过 | | D13 | 打包(安装器+自动更新)、内部试用、修复、部署手册 | 新机安装走通、交付物齐 | | D14-15 | 缓冲(主要给平台逆向) | — | ## 7. 最终验收清单 1. 登录/刷新/登出/角色权限正常(2FA 默认关)。 2. 任务全生命周期:草稿→审核→排期→队列→执行→成功/失败→重试。 3. 任务下发 <300ms;断线重连 <10s 恢复;同任务不重复执行(幂等)。 4. 挑战全流程:扫码/验证码/APP确认/超时挂起/一键重发。 5. 素材:上传、签名直链下载、sha256 校验。 6. 四平台真实发布成功 + 回执截图入库。 7. Windows 新机:安装→配对→绑定账号→真实发布。 8. 凭据不出本机;审计日志完整。 9. 安装包 + 自动更新可用。 ## 8. 交付物清单 - 代码:web/(网页端)、server/(Go 服务器)、client/(WinUI+agent-core)。 - 文档:docs/prd.md(需求)、docs/tech-stack.md(技术栈)、docs/system-design.md(设计)、docs/logic-diagrams.md(逻辑图)、docs/page-wireframes.md(页面线框图)、docs/frontend-guide.md(前端指南)、本交付文档(排期)、部署手册、验收报告。 - 工具:tools/diag-connection.mjs 联调诊断。 ## 9. 风险与应对 | 风险 | 应对 | |---|---| | starter 依赖过旧(Vite2/TS4.8) | D1 升级评估,必要则升 Vite5+TS5,锁定 LTS Node | | 平台逆向不可预测 | D14-15 缓冲;B站先行;卡住降级为可跑子集 | | WinUI 托盘无官方控件 | H.NotifyIcon.WinUI 或 Win32 interop(D9 前验证) | | 系统 Chrome 版本兼容 | go-rod 用 CDP,绑定系统 Edge 兜底 |