Kaynağa Gözat

release: v1.3.1 — 发行三档(wheel/.so/二进制) + 多平台二进制 CI + secrets bug 修复

版本号四处对齐 1.3.1(agentpaas/lambdagent pyproject + app.py 3 处)。
RELEASE_NOTES 增 v1.3.1。回归 334+566 全绿。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kenny67nju 2 ay önce
ebeveyn
işleme
1852f7fb0c

+ 38 - 0
RELEASE_NOTES.md

@@ -1,5 +1,43 @@
 # Release Notes
 
+## v1.3.1 — 2026-06-13
+
+**发行与源码保护** —— 三档分发方式 + 多平台二进制 CI,外加一个潜在 bug 修复。
+
+### 源码保护三档(`setup.sh`)
+
+代码要在用户机器上跑,Python 无法做到绝对不可逆;本版把"现实可达的最强保护"补齐:
+
+| 命令 | 产物 | 防护 | 用户需 Python |
+|---|---|---|---|
+| `--build` | 普通 wheel | 不混淆(止泄露仓库/测试/内部文档) | 是 |
+| `--build-secure` | `.so` wheel | Nuitka 编译,**逻辑不可反编译** | 是 |
+| `--build-binary` | 单文件二进制 | 机器码 + 内嵌一切(前端/内置包) | **否,双击即用** |
+
+- `--package` 自动优先用编译版组装「不含源码」的 `release/`。
+- 实测:`.so` wheel 与单文件二进制均在干净/无 Python 环境启动服务、加载内嵌 Web UI、
+  首启自动安装全部 10 个内置包;docstring 已剥离。
+- **诚实边界**:开源版 Nuitka 不加密字符串常量(日志/prompt 仍可 `strings` 提取);
+  编译产物绑定平台+架构;chromadb/PDF 外部工具未内嵌。详见手册「源码保护」。
+
+### 多平台二进制 CI
+
+- `.github/workflows/build-binary.yml`:打 `v*` tag 自动构建 macOS arm64 / macOS Intel /
+  Linux / Windows* 二进制并附到 GitHub Release;也可 `workflow_dispatch` 手动。
+- 已验证:Linux x86_64 ✓、macOS arm64 ✓(Windows 为实验性,*nix 脚本待 Windows 适配)。
+
+### Bug 修复
+
+- **`secrets` 子包撞名(latent bug)**:`agentpaas.secrets`(AES 加密 vault,全仓零引用的
+  死代码)与 stdlib `secrets` 同名。CPython 绝对导入下 stdlib 胜出故线上正常,但会在
+  Nuitka 打包等场景遮蔽 stdlib,导致 `from secrets import token_hex` 失败。重命名为
+  `agentpaas.secretvault`。
+- **Web UI 路径解析**:`_resolve_webui_dist` 增加 frozen/打包布局候选(源码与 dev 模式不变)。
+- **editable 安装 bug**:`setup.sh` 原 `pip install -e ".[all]"` 指向无 pyproject 的根目录,
+  改为 `./lambdagent`;并新增「发行/源码」双模式自动识别。
+
+回归 334 + 566 全绿;CI 6 job 绿。
+
 ## v1.3.0 — 2026-06-13
 
 **从「能跑」到「好用」的工作台升级** — 智能体有了记忆、有了统一入口、能接外部工具

+ 1 - 1
agentpaas/pyproject.toml

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "agentpaas"
-version = "1.3.0"
+version = "1.3.1"
 description = "Agent Platform as a Service — powered by lambdagent"
 readme = "README.md"
 license = "BUSL-1.1"

+ 3 - 3
agentpaas/src/agentpaas/api/app.py

@@ -29,7 +29,7 @@ async def _lifespan(_app: FastAPI):
 app = FastAPI(
     title="AgentPaaS",
     description="Agent Platform as a Service — powered by lambdagent",
-    version="1.3.0",
+    version="1.3.1",
     docs_url="/docs",
     redoc_url="/redoc",
     lifespan=_lifespan,
@@ -301,7 +301,7 @@ async def _on_startup():
 
 @app.get("/health")
 async def health():
-    return {"status": "ok", "version": "1.3.0"}
+    return {"status": "ok", "version": "1.3.1"}
 
 # Serve built Web UI static files when webui-dist/ exists.
 #
@@ -367,7 +367,7 @@ else:
     async def root():
         return {
             "service": "AgentPaaS",
-            "version": "1.3.0",
+            "version": "1.3.1",
             "docs": "/docs",
             "ui": "Run `cd webui && npm install && npm run build` to enable the Web UI.",
             "description": "Agent Platform as a Service — Every agent is a Lambda term.",

+ 1 - 1
lambdagent/pyproject.toml

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "lambdagent"
-version = "1.3.0"
+version = "1.3.1"
 description = "A Lambda Calculus Agent DSL — every agent is a function, every composition is function composition, every loop is a Y combinator."
 readme = "README.md"
 license = "BUSL-1.1"