本文说明正式分发物、构建方式、干净环境验证与发布流程。运行原理见
docs/panelagent-core.md;MCP 接入见 docs/mcp.md;Web 工作台见
docs/web-workbench.md。
| 入口 | 安装形态 | 依赖 |
|---|---|---|
CLI pa(init/查询/生成/诊断/skill 分发) |
wheel(核心) | 仅 pydantic |
stdio MCP 服务器 pa mcp |
wheel + mcp extra |
mcp>=1.29.1,<2 |
pa serve(FastAPI 后端)+ pa web(Web 工作台) |
wheel + backend extra(serve);web 另需独立构建的 Node 产物 |
见下 |
scripts/build-release.py 产出(dist/,已 gitignore):
panelagent-0.2.0-py3-none-any.whl 核心包:panelagent(含 web.py、seed、skills)
+ backend 包 + 根级领域模块
panelagent-0.2.0.tar.gz sdist(wheel 的构建来源)
panelagent-skills-0.2.0.zip 用户 skill 独立档案(供不装 wheel 的宿主)
panelagent-web-0.2.0.tar.gz 可搬迁 Web 产物(仅 --with-web;平台相关)
CLI 与 MCP 不依赖 backend extra 或 Node;backend extra 才引入
FastAPI/pandas 等重依赖。Python extra 只有一个 backend,没有 web
extra——pa web 启动的是独立构建的 Next standalone 产物。
- 版本单一来源:
panelagent/__init__.py的__version__,pyproject 以setuptools.dynamic读取。改版本只改这一处。 - wheel 无条件附带:
backend/包、根级领域模块data_preprocessing/panel_generator/llm_api_client/spectral_viewer(backend 经importlib惰性加载;只有[backend]extra 才装其第三方 依赖)。开发脚本launcher.py、_convert_txt.py不打包。 - package-data:
panelagent/data/seed/(光谱/别名/亮度/仪器快照)与panelagent/data/skills/(用户 skill)。config/是仓库编辑源,不 进 wheel;pa init在无--config-dir时使用包内 seed。
python3 scripts/build-release.py # wheel+sdist+skills + 全部验证
python3 scripts/build-release.py --with-web # 另跑 npm run build:bundle 并归档
python3 scripts/build-release.py --skip-verify # 只构建+内容审计
python3 scripts/build-release.py --verify-dir /tmp/panelagent-0.2.0-verify
# 干净房 venv/目录持久保留,供下游验证(如 pa web 全链)- 脚本自建隔离构建 venv(钉住
build==1.2.2、setuptools==77.0.3、wheel==0.45.1、pip==24.0),并以SOURCE_DATE_EPOCH(环境变量 → git HEAD 提交时间 → 固定回退值)固定全部时间戳:sdist 会被重写为 排序条目+固定 mtime/gzip 头,wheel+sdist 在同一源码状态下字节可 复现(已背靠背验证)。多代理仓库中若构建间隙有文件落盘,产物自然 不同——以 SOURCE_DATE_EPOCH 对应的提交为复现锚点。 - Web 产物(
--with-web):在临时目录构建 Next standalone,再生成panelagent-web-<version>.tar.gz;新构建成功后原子替换同名档案,保留dist/panelagent-web/手动构建目录。Web 包与 Node 版本/平台相关, 每个目标平台应分别构建。本次包在 Linux x86_64、Node 22 上验收。 独立构建用cd frontend && npm run build:bundle;已有输出目录时可 通过npm run build:bundle -- /new/output/path指定新目录。
| extra | 内容 |
|---|---|
| (默认) | pydantic>=2 |
mcp |
mcp>=1.29.1,<2 |
backend |
镜像 backend/requirements.txt(fastapi、uvicorn[standard]、pydantic、pydantic-settings、python-multipart、pandas、numpy、scipy、openai、openpyxl、xlrd(.xls 上传)、python-dotenv、itsdangerous) |
dev |
pytest>=8、ruff>=0.6 |
同步义务(改动一侧时必须同步另一侧):
backend/requirements.txt↔ pyproject[project.optional-dependencies].backend。config/*.json↔panelagent/data/seed/(既有规则,见 panelagent-core.md)。panelagent/data/skills/↔ skill 档案(构建时自动包含)。
后端运行数据已改为 SQLite;project_root() 仅保留给历史开发工具,
安装包运行不依赖仓库配置文件。构建脚本覆盖 backend 安装与导入,服务
启动和实际 Web 链路的验证结果见第 8 节。
editable 安装会掩盖缺文件,因此验证全部基于"干净 venv + wheel 安装 + cwd 离开仓库 + HOME 重定向":
- wheel 内容审计:必须含 seed 五件、skills(SKILL.md)、
backend/app/**、四个领域模块、panelagent/web.py、LICENSE、 METADATA 版本与Provides-Extra: mcp/backend;必须不含config/、tests/、frontend/、docs/、__pycache__、.env。 - sdist 审计:pyproject/LICENSE/MANIFEST/seed/backend/领域模块在, 且 wheel 由该 sdist 构建。
- 干净房 core+mcp:
pa init(seed 必须来自 wheel,不碰仓库config/)→pa db stats→pa marker list(发现)→pa panel generate(含成功候选)→pa panel diagnose→ 原生 JSON-RPC stdio 握手(initialize → tools/list 恰好 10 个工具 → db_stats 调用)→pip check→ 版本断言(wheel 元数据 ==panelagent.__version__)。 - 干净房 backend:安装
wheel[backend]→pip check→import backend.app.main与四个领域模块 importlib 加载。 - skill 分发:
pa skill install --dest DIR落出SKILL.md。
发布准备(本仓库内完成,脚本即覆盖):
python3 scripts/build-release.py # 产出并验证 dist/ 全部产物
python3 -m twine check \
dist/panelagent-<version>-py3-none-any.whl \
dist/panelagent-<version>.tar.gz # 精确指定:dist/ 里还混有 root 的 Web 目录/zip公网发布是人工决策与人工执行的动作,本仓库脚本绝不包含:不打
git tag、不 twine upload、不发布任何渠道。需要发布时由维护者人工:
bump 版本 → 复跑构建验证 → 审阅 CHANGELOG → 打 tag → twine upload dist/panelagent-<version>*(PyPI 凭据由维护者环境提供)。
python3 -m pip install panelagent-0.2.0-py3-none-any.whl # CLI 核心
python3 -m pip install "panelagent-0.2.0-py3-none-any.whl[mcp]" # + stdio MCP
python3 -m pip install "panelagent-0.2.0-py3-none-any.whl[backend]" # + FastAPI 后端- 初始化实验室库:
pa init --db /path/lab.db [--csv Library=inv.csv](不传--config-dir即使用包内 seed)。发现命令:pa library list、pa instrument list、pa marker list --library Mouse(均支持--json)。 - MCP 宿主配置:
command指向安装了本包的解释器,args为["-m", "panelagent", "mcp", "--db", "/abs/path/lab.db"](示例见examples/mcp-client.json)。 - 用户 skill:
pa skill install --dest ~/.agents/skills(写入<dest>/panelagent-cli/,--force覆盖自有文件)。 - Web:先在目标平台
cd frontend && npm run build:bundle得到dist/panelagent-web/,再pa web --web-dir DIR。同机需[backend,mcp]extras;数据库缺失时pa web会自动初始化新库 (PANELAGENT_DB/--db指定路径,可用pa init预先导入库存)。
- Python 全量在 2026-09-07 提交前复核为 314 passed;后端/内核 Ruff、前端 TypeScript、ESLint、OpenAPI 漂移检查通过。
- 浏览器 36 项通过,覆盖工作台、API 边界、恢复、库存导入、管理员质量维护、设置和历史。
- 在源码目录之外的全新虚拟环境安装 wheel,运行搬迁的 Next standalone:库存上传、质量修改立即被真实 MCP 读取、生成候选、保存共享历史和 390px 页面布局通过。
- 同一安装环境完成
pa serve独立启动;真实 MCP + 本地模拟模型验证条件绑定、错误与取消恢复。模拟模型不产生外部模型费用,此结果不代表对每家模型服务的兼容性保证。 - 发行物准备在本地
dist/(Git 忽略),尚未打发行 tag 或上传公开分发平台;源码提交不包含这些构建产物。
运行 python3 scripts/build-cli-installer.py,产出
dist/panelagent-cli-0.2.0-install.zip。包内包含本地 wheel、跨平台 Python
安装脚本、自检脚本、使用指南和校验文件;首次安装依赖仍需联网。
详见 CLI 安装测试指南。