From b878fd6f4128460bfca4222fb8d4c13656a43770 Mon Sep 17 00:00:00 2001 From: zh Date: Tue, 22 Sep 2026 17:46:56 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BB=8E=E9=9B=B6=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E9=87=8D=E6=9E=84=EF=BC=88=E9=A6=96=E4=B8=AA=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 30 ++++++++++++++++++ .env.example | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++ .gitignore | 77 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 36 +++++++++++++++++++++ 4 files changed, 229 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 README.md diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..de6c4a4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,30 @@ +.git +.idea +.vscode +.serena +.aps + +.env +.env.local +.env.*.local + +.venv +venv +__pycache__/ +**/__pycache__/ +*.py[cod] +.pytest_cache/ + +node_modules/ +**/node_modules/ +apps/web/dist/ +apps/desktop/ +*.tsbuildinfo + +server/data/ +demand/ + +*.log +.codex-*.log +Thumbs.db +.DS_Store diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..4acd2de --- /dev/null +++ b/.env.example @@ -0,0 +1,86 @@ +# ============================================================ +# APS 智能体 · 环境配置模板(复制为 .env 后填写,.env 已被 gitignore) +# 密钥只存环境,绝不入库(plan.md §14.4) +# ============================================================ + +# ---- 大模型 Provider(OpenAI 兼容;配置后开放问答/意图语义更强)---- +# 可选:deepseek | kimi | moonshot | doubao | openai | compatible +# 留空或密钥缺失时:快路 + 项目盘点离线作答(仍可分析数据,不甩「听不懂」) +LLM_PROVIDER= +# API 密钥 +LLM_API_KEY= +# 接口地址(可覆盖默认): +# deepseek → https://api.deepseek.com/v1 +# kimi → https://api.moonshot.cn/v1 +# doubao → https://ark.cn-beijing.volces.com/api/v3 (模型填接入点 ID) +# openai → https://api.openai.com/v1 +# 其它兼容网关 → 填完整 /v1 根路径,LLM_PROVIDER=compatible +LLM_BASE_URL= +# 模型名:deepseek-chat / moonshot-v1-8k / gpt-4o-mini / 豆包 endpoint id 等 +LLM_MODEL= + +# ---- 运行形态(桌面 ~/.aps,Web 用仓库 data)---- +# desktop | web(默认 web) +APS_MODE=web +# 显式主目录(覆盖默认:desktop→%USERPROFILE%\.aps,web→server/data) +# APS_HOME= +# Skill 单文件兼容(测试用);正式为 APS_HOME/skills//manifest.json +# APS_SKILLS_PATH= +# Web 端演示数据懒播种:1=租户首次打开工作区且无项目时自动创建演示项目(镜像默认开) +# APS_WEB_DEMO_SEED=1 + +# ---- 后端服务 ---- +APS_PORT=8000 +APS_WORLD_PATH=server/data/world.json + +# ---- 用户认证与租户隔离(JMS) ---- +# jms:调用真实 JMS 登录接口;unconfigured:关闭 Web 认证和业务 API +# 统一登录开关:1=启用 Web 登录/桌面授权; 0=本地免登录管理员(仅限开发/演示) +APS_AUTH_ENABLED=1 +APS_AUTH_PROVIDER=jms +APS_AUTH_COOKIE_SECURE=0 +APS_AUTH_TTL_SECONDS=28800 +# 门禁审批队列与一次性执行凭据(file 默认兼容;database 显式启用共享 MySQL) +APS_APPROVAL_BACKEND=file +# APS_APPROVAL_PATH= +# database 后端必须显式配置 APS_DATABASE_URL,且不得同时配置 APS_APPROVAL_PATH;连接失败不回退 file +# SQLite 仅限测试:APS_APPROVAL_DATABASE_ALLOW_SQLITE=1(共享部署禁止使用) +APS_APPROVAL_TTL_SECONDS=86400 +APS_EXECUTION_GRANT_TTL_SECONDS=300 +APS_APPROVAL_INITIATOR_ROLES=planner,approver,admin +APS_APPROVAL_ROLES=planner,approver,admin +APS_APPROVAL_VIEW_ROLES=planner,approver,admin,auditor +JMS_AUTH_BASE_URL= +# 可选:固定为单一租户(部署时写死企业,用户仍可手填名称校验) +# 公开租户列表已取消;登录页手填企业名称直接提交 +JMS_AUTH_TENANT_CODE= +JMS_AUTH_TENANT_NAME= +# 至少 32 个随机字符,只用于签名本系统的 HttpOnly 会话,不发送给 JMS +JMS_AUTH_SESSION_SECRET= +# 可选:固定 JMS 登录响应中的 tokenName;配置后会严格校验 +# JMS_AUTH_TOKEN_NAME= +JMS_AUTH_TIMEOUT_SECONDS=10 +# 可选:企业自己的账号申请页面;未配置时提示联系企业管理员开通 +# JMS_AUTH_ACCOUNT_REQUEST_URL=https://example.com/account-request + +# ---- 桌面客户端授权 ---- +# Web 用户认证与桌面授权相互独立。正式环境接入授权中心前保持 unconfigured(默认拒绝)。 +# mock 仅用于本地桌面开发,内置六类可跨开发设备复用的 APS-*-DEMO 授权码。 +APS_LICENSE_PROVIDER=unconfigured +# APS_MOCK_LICENSE_CODES={"MY-HOUR-CODE":"hour","MY-PERM-CODE":"permanent"} +# mock 模式必须显式配置随机签名密钥和租户标识;npm run dev:desktop 会为本地开发自动生成。 +# APS_MOCK_LICENSE_SECRET= +# APS_MOCK_LICENSE_TENANT_UUID= + +# ---- 现场数据目录(可选;未配置时不绑定任何机器目录)---- +# KANGNI_DATA_DIR= +# KANGNI_ROUTE_XLSX= +# RUIYANG_DEMO_DIR= + +# ---- 数据库 ---- +# 未配置时继续使用 APS_DB_PATH 指定的 SQLite;接入 jms_mes 后填写 MySQL URL +# APS_DATABASE_URL=mysql+pymysql://user:password@127.0.0.1:3306/jms_mes?charset=utf8mb4 +APS_DB_PATH=server/data/master.db + +# 生产环境填写实际前端来源,逗号分隔 +APS_CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..12bbc92 --- /dev/null +++ b/.gitignore @@ -0,0 +1,77 @@ +# ============================================================ +# APS 智能体 · Git 忽略清单 +# ============================================================ +# ---- Python ---- +__pycache__/ +*.py[cod] +.venv/ +.sidecar-venv/ +venv/ +.pytest_cache/ +# ---- Node / 前端 ---- +node_modules/ +*.tsbuildinfo +apps/web/dist/ +apps/desktop/release/ +apps/desktop/node_modules/ +build/ +dist/sidecar/ +dist/sbom/ +# ---- 环境与密钥(密钥绝不入库)---- +.env +# ---- 运行时数据(世界状态由种子自动生成)---- +server/data/ +# 用户级桌面目录(勿提交) +.aps/ +# ---- 需求材料(原始 docx/ppt/pdf 与本地提取文本,不入库)---- +demand/ +# ---- Pi 兜底 PoC:运行产物与本机配置不入库(代码/文档/测试脚本入库)---- +poc/pi-fallback/runtime/node_modules/ +poc/pi-fallback/runtime/pi-home/ +poc/pi-fallback/runs/ +poc/pi-fallback/smoke/site*/ +poc/pi-fallback/smoke/*.log +poc/pi-fallback/smoke/*.sse +poc/pi-fallback/probes/*.out +poc/pi-fallback/probes/*.marker +# ---- 本地运行日志(勿提交)---- +.codex-*.log +_shots/*.log +_shots/v2-discard/ +# ---- IDE / 系统 ---- +.idea/ +.vscode/ +.serena/ +Thumbs.db +.DS_Store + +# ---- Local build, test, and generated delivery artifacts ---- +*.log +*.err.log +*.bak* +.pytest-*.txt +.tmp-* +apps/desktop/build-logs/ +outputs/ +artifacts/ +apps/*.dxf +tests/golden/_*.json +beihai-shipyard-aps-data/ + +# ---- Generated presentation and media drafts (do not commit) ---- +/video/ +/_refs/ +*.mp4 +*.mov +*.avi +*.mkv +*.webm +*.wmv +*.m4v +*.mp3 +*.wav +/APS智能体演讲稿*.md +/APS智能体演示讲解稿.md +/Pi-Agent兜底能力详细方案.md +/Pi-Agent接入计划.md +/Pi-Agent接入详细计划.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..f1506c6 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# 多系统智能体平台 · 重构分支 + +> 本分支**从零开始**,不继承原仓库的提交历史。 + +## 这是什么 + +原 `main` 是「APS 产品 + 内嵌智能体层」的混合实现。本次重构把它拆成两件事: + +- **平台**:客户端 + 平台服务 + Core + 引擎适配 + Provider 契约。从零重写,TypeScript / Node。 +- **APS**:作为独立业务系统,以现有代码搬迁适配(Python),通过 Provider 契约接入平台。 + +## 分支约定 + +| 分支 | 用途 | +| --- | --- | +| `rewrite/platform`(本分支) | 重构实现;提交历史从首个提交开始 | +| `main` | 原实现,只读参考;切换前另存为 `legacy/main` 并设为只读 | + +- 旧代码参考用 `git show main:`,或另开 worktree 检出 `main`。 +- 移植旧逻辑时在提交信息里写明来源,例如 `移植自 main:server/aps_domain/flex.py`——孤儿历史下 `git blame` 追不到来源。 +- 切换时以本分支强推覆盖 `main`(`--force-with-lease`);切换前必须先把 `main` 备份为 `legacy/main`。 + +## 设计文档 + +设计文档在飞书评审中,评审通过后随本分支的后续提交入库(任务表 A0.10)。在此之前仓库里没有设计文档是正常的。 + +## 目录规划 + +``` +client/ 客户端(桌面 Electron 与浏览器共用) +server/ 平台服务(entry / app / agent / core / provider-sdk / workflows) +providers/ Provider 适配器(aps / erp / ems) +contracts/ 客户端与服务端共享的契约 +``` + +骨架随 A1 建立。