WePush Next
WePush Next 是与 Classic 完全独立的新产品线。Classic 与 Next 可以按需拥有重复代码,彼此不建立共享源码依赖。
产品定位:WePush Next 是开源、可下载、可安装、由用户自行部署和运维的消息推送产品。项目不建设官方公共 SaaS、注册计费订阅、公共租户平台或云 KMS/Secret Manager 集成。正式范围和分版本计划见《产品目标、边界与路线图》。
当前版本:
1.1.0Stable。Desktop 与安装包按项目约定不使用商业代码签名;下载后必须验证同一 Release 中的SHA256SUMS。发行边界和升级承诺见UNSIGNED-NOTICE.md、《兼容性策略》、《升级与回滚指南》与docs/releases/1.1.0.md。
第一次下载和使用请从《WePush Next 对外使用指南》开始。渠道账号、模板、Recipient、SecretRef、限流和错误语义见《内置 Provider 指南》。
下载与安装
正式发行物统一位于 next-v1.1.0 GitHub Release:
| 使用方式 | 选择的发行物 |
|---|---|
| 推荐的 Standalone 安装 | 与操作系统、架构匹配的 wepush-next-1.1.0-<os>-<arch> 完整包,已包含 Java Runtime |
| 已有 Java 21+ 或分组件部署 | wepush-next-1.1.0.tar.gz 或 wepush-next-1.1.0.zip 精简包 |
| 只使用管理界面 | 与操作系统、架构匹配的 wepush-next-desktop-1.1.0-<os>-<arch> |
| Java 集成 | wepush-next-java-sdk-1.1.0.zip |
| 运营商短信 Agent 插件 | wepush-provider-{cmpp,smgp,sgip,smpp}-1.1.0.zip 及 wepush-provider-trusted-key-1.1.0.env |
下载后先验证 SHA256SUMS。安装运营商插件时,还必须校验信任公钥文件及各插件的旁路 .sha256;不要从插件 ZIP 或第三方页面获取替代公钥。完整资产说明和升级步骤见 1.1.0 Release Notes。
完整包解压后执行统一 Standalone 安装入口:
# Linux / macOS
sudo ./install/install.sh
# Windows 管理员 PowerShell
Set-ExecutionPolicy -Scope Process Bypass
& .\install\install.ps1
安装完成前会检查 Service Readiness、Flyway 数据库版本和本地 Provider Dry Run。需要便携运行或已有 Java 21+ 时,可选择精简包;分组件部署仍可直接使用 install/<os>/install.* service|agent|all。
验证 Java 工程
cd next
./mvnw verify
完整构建、三平台安装、Server/HA、Agent Enrollment、插件升级和恢复步骤见 docs/deployment-and-operations.md。安全问题请按 SECURITY.md 私下报告。
启动 Service
cd next
./mvnw -pl service/service-app -am package -DskipTests
java -jar service/service-app/target/wepush-next-service.jar
Service 默认只监听 127.0.0.1:18990。启动后可访问:
http://127.0.0.1:18990/actuator/healthhttp://127.0.0.1:18990/api/v1/system/infohttp://127.0.0.1:18990/api/v1/providershttp://127.0.0.1:18990/api/v1/agentshttp://127.0.0.1:18990/openapi.yaml
本地无认证模式只允许监听回环地址;将 WEPUSH_BIND_ADDRESS 改为非回环地址时必须同时开启 WEPUSH_SECURITY_ENABLED=true 并配置足够强度的 WEPUSH_BOOTSTRAP_TOKEN,否则 Service 拒绝启动。
Standalone 数据默认保存到 .local/data/wepush-next.db,可通过 WEPUSH_DATABASE_PATH 指定其他位置。Service 首次启动会运行 Flyway 迁移并创建 ws_default 工作区。
Secret 默认使用本地信封加密:密文进入 SQLite,主密钥单独保存到 .local/secrets/master-key.json。可通过 WEPUSH_MASTER_KEY_PATH 修改路径,或使用 WEPUSH_MASTER_KEY_BASE64 注入 32-byte Base64 主密钥。已有密文但主密钥缺失、权限不安全或认证失败时,Service 会失败关闭,不会生成新密钥覆盖。
Artifact 默认保存到 .local/artifacts,SQLite 只保存元数据、SHA-256、大小和生命周期状态。可通过 WEPUSH_ARTIFACT_ROOT 修改根目录;临时结果导出默认保留 24 小时,可通过 WEPUSH_EXPORT_RETENTION 使用 ISO-8601 Duration 调整。Service 会按 WEPUSH_RETENTION_INTERVAL 周期回收过期且未 Pin/Legal Hold 的文件。
启动 WebUI 开发环境
cd next/ui
pnpm install
pnpm check
pnpm dev
WebUI 默认运行在 http://127.0.0.1:5173,开发代理连接本地 Service。界面、API Client、Schema Renderer、设计 Token 与 Electron Desktop 外壳均在同一个 pnpm Workspace 内。
启动 Agent
cd next
./mvnw -pl agent/agent-app -am package -DskipTests
java -jar agent/agent-app/target/wepush-next-agent.jar
Agent 默认主动连接 127.0.0.1:19090 的 gRPC 双向控制流,发送 Hello 和周期心跳,断线后使用带抖动的指数退避重连;Sequence 与 Lease Fence Journal 默认保存在 .local/agent/agent-state.properties。
常用环境变量:
WEPUSH_AGENT_ID:稳定 Agent 身份,默认local-agent。WEPUSH_SERVICE_HOST/WEPUSH_AGENT_GRPC_PORT:Service gRPC 地址,默认127.0.0.1:19090。WEPUSH_AGENT_GRPC_TOKEN:仅用于回环开发/Bootstrap 的共享 Token;正式 Agent 使用 Enrollment Credential。WEPUSH_AGENT_GRPC_PLAINTEXT:本地开发默认true;远端部署应关闭并使用 TLS。WEPUSH_AGENT_STATE_PATH:Agent Journal 文件位置。
Service 的 gRPC 端口默认只绑定回环地址。暴露到非回环地址时强制 TLS,HTTP Lease/Artifact 与 gRPC 都拒绝匿名 Agent;正式生产通过一次性 Enrollment 获取长期 Credential 和客户端证书,并使用 mTLS。共享 Token 只保留为回环开发兼容入口。
要把 Run 交给独立 Agent 执行,Service 使用以下配置启动:
WEPUSH_EXECUTION_MODE=remote \
WEPUSH_AGENT_PUBLIC_BASE_URL=http://127.0.0.1:18990 \
java -jar service/service-app/target/wepush-next-service.jar
远端模式会按 Provider ID/版本和可用容量选择在线 Agent,持久化带 Epoch/Fencing Token 的 Lease。Agent 校验冻结 Execution Spec 与 Audience 的 SHA-256 后 ACK,随后使用同一 Core Engine 执行,并经 gRPC 回传事件、Item Result、命令确认和 Run Summary。
需要 Secret 的远端 Run 会使用 Agent 在 Hello 中发布的会话级 X25519 公钥。Service 只解析冻结配置中实际引用的最小 Secret 集,使用一次性 X25519、HKDF-SHA-256 和 AES-256-GCM 加密,并绑定 Agent、Run、Lease、Epoch、Fencing Token 与过期时间。Agent 仅在内存中解密,运行结束立即清零,不写入 Journal。正式跨主机部署仍应关闭明文 gRPC 并配置 TLS;Secret Envelope 不替代 Agent 身份认证和传输层安全。
Java SDKs
Next 提供两种独立 SDK。Remote SDK 通过 HTTP 调用 Service,只依赖公开 service-api,不依赖 Core、Engine 或具体 Provider:
稳定发行包在 sdk/ 中附带可安装到本地 Maven Repository 的 POM/JAR,步骤见 sdk/README.md。
try (var client = WePushClient.builder()
.endpoint(URI.create("http://127.0.0.1:18990"))
.build()) {
var system = client.system().info();
var providers = client.providers().list();
var agents = client.agents().list();
var workspace = client.workspace("ws_default");
var runs = workspace.runs();
var artifacts = workspace.runArtifacts(runs.getFirst().id());
}
Embedded SDK 则在调用方 JVM 内直接运行 Engine,显式装配所需 Provider,不启动 Service、Agent 或数据库:
var store = new InMemoryExecutionStore();
try (var engine = WePushEngine.builder()
.provider(new HttpProviderFactory())
.resultSink(store)
.eventSink(store)
.build()) {
var summary = engine.start(spec, recipients)
.completion().toCompletableFuture().join();
}
从源码安装、依赖声明和完整示例见 sdk/README.md 与 sdk/embedded-java/README.md。1.1.0 发行包和独立 Java SDK 附件同时提供 Remote SDK、Embedded SDK、HTTP Provider 与标准渠道 Provider;CMPP、SMGP、SGIP、SMPP 则作为独立签名 Agent 插件发布,不进入 Embedded SDK 的默认依赖。
1.1.0 已交付基线
- Core API、Provider SPI、虚拟线程 Engine,以及 HTTP、SMTP Email、飞书/钉钉/企微机器人、阿里云短信、微信公众号、小程序和企业微信应用消息 Provider;CMPP、SMGP、SGIP、SMPP 以四个独立签名插件交付。
- Agent Protocol、Protobuf/gRPC 双向控制流、Sequence/Fencing Runtime、持久 Journal、加密 Secret Envelope、远端 Core 执行适配与常驻 Agent 包。
- Service 分层、SQLite/PostgreSQL/Flyway、Workspace 资源治理、跨 Run 账号认证熔断、资源编辑/不可变修订/分页、流式 Audience Import、正式发送确认、关联重发、真实总览、Agent 注册/心跳/持久 Lease、信封加密 Secret Store、Result/Command/Artifact 持久化、SSE,以及可切换的内嵌/远端执行器。
- PostgreSQL
LISTEN/NOTIFY低延迟唤醒、结构化脱敏诊断包、手动版本检查、Nginx/Traefik/Kubernetes 自建模板,以及 Agent Presigned Multipart Artifact(最大 5 TiB)。 - 相互独立的 Remote Java SDK、Embedded Java SDK 和 TypeScript API Client。
- React WebUI、亮色/暗色/跟随系统主题、低分辨率和键盘可访问性、动态 Provider/SecretRef Schema、渠道消息示例、资源生命周期、CSV/TXT 导入、Dry Run/正式确认/结果/失败重发闭环、真实 Workspace 和运行总览、动态 API 文档、Electron 安全外壳和共享前端 packages。
- 一体化 Standalone/离线 Windows 安装、含 Java Runtime 完整包、正式备份恢复、升级健康门与自动回退;Desktop 提供本机 Service 运维、系统安全 Token 存储和签名插件 Stage/Activate/Rollback。
- 架构、单元、契约、浏览器 E2E、Desktop 冒烟、三平台安装/恢复/失败升级以及定时长稳矩阵。
产品范围和迭代优先级以 docs/product-scope-and-roadmap.md 为准;模块边界和实现细节以 docs/architecture-and-high-level-design.md、docs/detailed-design.md、docs/implementation-status.md、docs/deployment-and-operations.md 及 docs/adr/ 为准。