chore: 从零开始重构(首个提交)

This commit is contained in:
zh 2026-09-22 17:46:56 +08:00
commit b878fd6f41
4 changed files with 229 additions and 0 deletions

30
.dockerignore Normal file
View File

@ -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

86
.env.example Normal file
View File

@ -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/<id>/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

77
.gitignore vendored Normal file
View File

@ -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

36
README.md Normal file
View File

@ -0,0 +1,36 @@
# 多系统智能体平台 · 重构分支
> 本分支**从零开始**,不继承原仓库的提交历史。
## 这是什么
原 `main` 是「APS 产品 + 内嵌智能体层」的混合实现。本次重构把它拆成两件事:
- **平台**:客户端 + 平台服务 + Core + 引擎适配 + Provider 契约。从零重写,TypeScript / Node。
- **APS**:作为独立业务系统,以现有代码搬迁适配(Python),通过 Provider 契约接入平台。
## 分支约定
| 分支 | 用途 |
| --- | --- |
| `rewrite/platform`(本分支) | 重构实现;提交历史从首个提交开始 |
| `main` | 原实现,只读参考;切换前另存为 `legacy/main` 并设为只读 |
- 旧代码参考用 `git show main:<path>`,或另开 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 建立。