aps-agent/docs/architecture/modules.md

155 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 可重生模块登记(REGEN)
> 与 `server/agent_core/registry.py` 的 `scan_modules()` 对齐(文件头 `moduleId: xxx, 可重生`)。
> 增删改名带 `moduleId` 的模块 → **同轮**更新本表 + [`../CHANGELOG.md`](../CHANGELOG.md)。
> UI 实时扫描来自 `/api/gov/modules`;本表补充「黄金测试 + 重生提示词要点」。
## 登记表(按层)
### agent-core
| moduleId | 文件 | 黄金测试 | 重生提示词要点 |
| --- | --- | --- | --- |
| core-audit | server/agent_core/audit.py | test_m2_state | 链式哈希 prev+body → sha256;GENESIS |
| core-harness | server/agent_core/harness.py | test_gov_api | 封闭 _POWER_MAP;未登记默认 P3;一次性令牌 |
| core-fallback-lane | server/agent_core/fallback_lane.py | test_pi_primary_chat / test_fallback_lane | Pi 是唯一自然语言入口(无规则/关键词快路);封闭 `IntentName` 工具目录 + `_PRIMARY_TOOL_PARAM_SCHEMAS` 参数校验;P0 只读 / P2 确认卡 / P3 白名单 fail-closed;失败显式返回,不回落本地话术 |
| core-agent-mesh | server/agent_core/mesh.py | test_mesh_approval_resume | Goal/任务分发;P2/P3 卡挂起为 `AWAITING_APPROVAL`;审批后 `resume_goal_after_confirmation()` 恢复分发,`confirmationResolutions` 幂等 |
| core-providers | server/agent_core/providers.py | — | OpenAI 兼容;超时/非法降级 |
| core-registry | server/agent_core/registry.py | test_gov_api | 扫描 moduleId;剪枝 node_modules/dist 等 |
| core-plan-runtime | server/agent_core/plan_runtime.py | test_plan_runtime | L0-L3 不可变版本日志;同输入哈希追加重生;默认 3 次熔断 |
| server-agent-core | server/agent_core/__init__.py | — | 包声明 |
### domain
| moduleId | 文件 | 黄金测试 | 重生提示词要点 |
| --- | --- | --- | --- |
| domain-orders | server/aps_domain/orders.py | test_order_management | 订单投影与 P2 写入纯领域逻辑;页面/对话共用 |
| domain-masterdata | server/aps_domain/masterdata.py | test_master_data | 资源树/物料BOM/日历维保投影 + 五个 master.* P2 写动作(产线/物料/维保/BOM明细/工艺步骤);停用资源只标 INACTIVE 不物理删除 |
| domain-mrp | server/aps_domain/mrp.py | test_mrp | 订单分解:BOM 净需求→采购建议(前置期倒排);外协步骤→委外建议;DRAFT 幂等替换 |
| domain-flex | server/aps_domain/flex.py | test_pool_engine | 柔性排产领域服务:能力池投影 + PoolEngine 触发(P1)+ 交期承诺模拟(沙盒);只读/沙盒不碰主干 |
| domain-reports | server/aps_domain/reports.py | test_m3_knowledge | 冻结快照→模板;数字只取快照 |
| domain-scenario | server/aps_domain/scenario.py | test_m2_state | 深拷贝沙盒;永不碰主干 |
| domain-views | server/aps_domain/views.py | test_rule_engine | 甘特/负荷/交期/KPI 投影 |
| domain-workflow | server/aps_domain/workflow.py | test_m2_state | 意图→动作;P2 出卡;写前建档;`_stage_pending_adoption()` 把只读分析冻结为 `import.commit` 采用卡 |
| domain-project-analyze | server/aps_domain/project_analyze.py | test_project_analyze_readonly | `apply=False` 使用只读项目上下文和 deepcopy 预览,不 seed/不写世界;返回 `readOnly` + `pendingAdoption` |
| domain-folder-pack | server/aps_domain/folder_pack.py | test_project_analyze_readonly | `apply_sql=False` 仅解析 SQL 预览,不把 SQL 写进项目世界 |
| domain-readiness | server/aps_domain/readiness.py | test_readiness | 工时来源优先级(实测>推断>模板>设备>待维护);TIME_UNMAINTAINED 不再默默兜底 |
| domain-sop-rules | server/aps_domain/sop_rules.py | test_sop_rules | `compile_sop_by_asset(kb_assets, asset_id)` 按明确资产精确编译;缺 assetId fail-closed,不用原始问句猜 SOP |
| server-aps-domain | server/aps_domain/__init__.py | — | 包声明 |
### knowledge
| moduleId | 文件 | 黄金测试 | 重生提示词要点 |
| --- | --- | --- | --- |
| server-knowledge | server/knowledge/__init__.py | — | 包导出 |
| knowledge-assets | server/knowledge/assets.py | test_m3_knowledge | JSON 资产库;同名版本递增;chunks |
| knowledge-retrieval | server/knowledge/retrieval.py | test_m3_knowledge / test_embedding_fallback | hybrid:向量+bigram;命中必带出处 |
| knowledge-ingest | server/knowledge/ingest.py | test_knowledge_ingest | PDF/docx/md 切块入库 |
| knowledge-embedding | server/knowledge/embedding.py | test_embedding_fallback | local→api→none |
| knowledge-preferences | server/knowledge/preferences.py | test_m3_knowledge | 采用2分/试排1分;窗口200 |
| knowledge-routing-templates | server/knowledge/routing_templates.py | test_routing_templates | 内置模板幂等种子;应用时补 T-TPL 班组能力;工时标「模板」 |
### engine
| moduleId | 文件 | 黄金测试 | 重生提示词要点 |
| --- | --- | --- | --- |
| engines-base | server/engines/base.py | test_rule_engine | ISchedulingEngine + EngineParams |
| engines-queries | server/engines/queries.py | test_rule_engine | 主数据只读查询 |
| engines-rule | server/engines/rule_engine.py | test_rule_engine | 策略排序→占槽;跨天;冲突只扫本版 |
| engines-ga | server/engines/ga_engine.py | test_ga_engine | 固定种子 GA;订单序+完整产线联合搜索;复用班次占槽 |
| engines-pool | server/engines/pool_engine.py | test_pool_engine | 柔性:能力池选设备+虚拟产线组装+瓶颈锚;设备级占槽;模具换型/移动耗时 |
| engines-external | server/engines/external_engine.py | test_external_engine | 中性 DTO→HTTP/local skill→写 flex* |
| core-skills | server/agent_core/skills.py | test_external_engine | SkillManifest 注册/健康检查 |
| integrations-algo-stub | server/integrations/algo_skill_stub.py | test_external_engine | local://stub 确定性解 |
| domain-scheduling-dto | server/aps_domain/scheduling_dto.py | test_external_engine | Problem/Solution 双向映射 |
| server-engines | server/engines/__init__.py | test_rule_engine | CP/GA/HYBRID/EXTERNAL;导出 PoolEngine |
### state
| moduleId | 文件 | 黄金测试 | 重生提示词要点 |
| --- | --- | --- | --- |
| server-state | server/state/__init__.py | — | 导出 |
| state-checkpoints | server/state/checkpoints.py | test_m2_state | 成对快照;容量淘汰;原子写 |
| state-seed | server/state/seed.py | test_rule_engine | 演示工厂;固定 Random(42);APS_SEED_PACK 重放数据包 |
| state-store | server/state/store.py | test_m2_state / test_db_projection | 单文件 JSON 原子写 + SQLite 主数据双向同步(指纹脏检查) |
| state-packs | server/state/packs.py | test_db_projection | 数据包导出/重放;日期按 baseDate→今天平移 |
### db / importers
| moduleId | 文件 | 黄金测试 | 重生提示词要点 |
| --- | --- | --- | --- |
| db-models | server/db/models.py | test_db_projection | 通用宽表 master_records(payload JSON)+ project_settings + 模板表 |
| db-database | server/db/database.py | test_db_projection | 懒加载 engine;APS_DB_PATH 覆盖;reset_engine 供测试 |
| db-sync | server/db/sync.py | test_db_projection | world↔DB 投影;多项目隔离;master_fingerprint |
| importers-excel | server/importers/excel_importer.py | test_excel_importer | profile 驱动;导入后入库+投影 |
| importers-profiles | server/importers/profiles/*.json | test_excel_importer | 客户口径全在配置;代码零硬编码 |
### gateway / contract
| moduleId | 文件 | 黄金测试 | 重生提示词要点 |
| --- | --- | --- | --- |
| gateway-app | server/gateway/app.py | test_gov_api | HTTP/SSE;P2 确认通道;Mesh 审批恢复 best-effort 钩子;SOP 编译/暂存端点 |
| gateway-golden | server/gateway/golden.py | test_gov_api | pytest 子进程;run 须 to_thread |
| gateway-plan-api | server/gateway/plan_api.py | test_plan_runtime | Plan 创建/读取/历史/重生;P1 只追加治理草稿,不写世界状态 |
| server-gateway | server/gateway/__init__.py | — | 包声明 |
| server-main | server/main.py | — | uvicorn 入口 |
| server-contracts | server/contracts.py | test_gov_api | 意图/UIBlock 封闭枚举 |
| server-root | server/__init__.py | — | 包声明 |
| server-timeutil | server/timeutil.py | test_rule_engine | 与 legacy 时间语义对齐 |
### ui(React)
| moduleId | 文件 | 黄金测试 | 重生提示词要点 |
| --- | --- | --- | --- |
| web-app | apps/web/src/App.tsx | 构建 | Shell;executeCommand 汇聚 |
| web-api-client | apps/web/src/api/client.ts | 构建 | REST + SSE;`postSopStage(sessionId, assetId)` → `/api/sop/stage` |
| web-types | apps/web/src/api/types.ts | 构建 | 与 contracts 镜像 |
| web-chat | apps/web/src/chat/ChatPanel.tsx | 构建 | 确认卡/方案卡 |
| web-project-panel | apps/web/src/projects/ProjectPanel.tsx | 构建 | 项目树 |
| web-project-store | apps/web/src/projects/store.ts | 构建 | localStorage |
| web-project-types | apps/web/src/projects/types.ts | 构建 | 类型 |
| web-timeline | apps/web/src/timeline/TimelineRail.tsx | 构建 | 回滚口令合成 |
| web-viewport | apps/web/src/viewport/ViewportPanel.tsx | 构建 | 模式+KPI |
| web-gantt | apps/web/src/viewport/GanttView.tsx | 构建 | 甘特 |
| web-load | apps/web/src/viewport/LoadView.tsx | 构建 | 负荷 |
| web-due | apps/web/src/viewport/DueView.tsx | 构建 | 交期 |
| web-splitter | apps/web/src/shell/VSplitter.tsx | 构建 | 分隔条 |
| web-kebab | apps/web/src/shell/KebabMenu.tsx | 构建 | ⋯ 菜单 |
| web-dialog | apps/web/src/shell/AppDialog.tsx | 构建 | 应用内对话框 |
| web-gov-console | apps/web/src/gov/GovConsole.tsx | 构建 | 治理覆盖层;SOP 候选 `/api/sop/compilable` + 编译暂存 |
| web-mesh-panel | apps/web/src/mesh/MeshPanel.tsx | 构建 | Goal/任务/消息面板;`AWAITING_APPROVAL` 显示「待人工审批」并列出 `confirmationIds` |
| web-orders | apps/web/src/orders/OrderPanel.tsx | 构建 + test_order_management | 订单列表/编辑器;写入动作只暂存确认卡 |
| web-master | apps/web/src/master/MasterPanel.tsx | 构建 + test_master_data | 主数据三页签(资源/物料BOM/日历维保);复用订单面板骨架;写入只暂存确认卡 |
| web-cmd-palette | apps/web/src/shell/CommandPalette.tsx | 构建 | Ctrl+K |
| web-main | apps/web/src/main.tsx | 构建 | 入口 + antd ConfigProvider 暗色主题(#F97316) |
| web-styles | apps/web/src/styles.css | 构建 | 设计令牌 |
| web-skill-console | apps/web/src/skills/SkillConsole.tsx | 构建 | Codex 式双面板;启停/登记走 P2 |
| web-knowledge | apps/web/src/knowledge/KnowledgePanel.tsx | 构建 | 资产/检索调试/模板库/索引状态 |
> `shared/schemas/*.json` 无 moduleId,由 contracts / web-types 双侧约束。
## 变更记录
| 日期 | 变更 |
| --- | --- |
| 2026-07-31 | Plan 治理:登记 `core-plan-runtime` / `gateway-plan-api`,黄金测试新增 `test_plan_runtime` |
| 2026-07-16 | 初版;M3 扩至 knowledge/reports |
| 2026-07-16 | 迁入 `architecture/modules.md` |
| 2026-07-16 | OR-01:登记 `domain-orders` / `web-orders`,黄金测试扩至订单管理 |
| 2026-07-16 | MD-01/02/03:登记 `domain-masterdata` / `web-master`,黄金测试扩至主数据 |
| 2026-07-16 | MRP:登记 `domain-mrp`;`web-orders` 扩分解建议视图;`web-master` 扩 BOM/路线编辑 |
| 2026-07-22 | 柔性排产:登记 `engines-pool` / `domain-flex`,黄金测试新增 `test_pool_engine`(9 项) |
| 2026-07-23 | 通用平台:登记 `db-*` / `importers-*` / `state-packs` / `domain-readiness` / `core-dialog`(已于 2026-09-11 删除) / `knowledge-routing-templates` / `web-skill-console` / `web-knowledge` |
| 2026-09-13 | Pi 参数 schema 闭包;只读分析 → P2 采用;Mesh 审批恢复;SOP 控制台接线 |
## Round 65 新增排产内核
- `server/aps_domain/closed_loop_problem.py`:纯函数商务需求/BOM/供应图与阻断建模。
- `server/aps_domain/supply_netting.py`:跨订单全局供应净算与 pegging 守恒。
- `server/aps_domain/closed_loop_runtime.py`:W1 -> SchedulingProblemV2 -> 候选求解 -> Validator -> 原子物化。
- `server/aps_domain/scheduling_problem_v2.py` / `scheduling_validator.py`:本地/外部算法共享的版本化契约和独立校验器。
- `server/aps_domain/mes.py`:完整 V2 与当前多资源 evidence 重算,见 `test_mes_evidence_v2.py`。
- `server/aps_domain/orders.py` / `server/gateway/app.py`:FLEX -> sales 投影语义幂等,订单 GET 的 MRP 预览运行在深拷贝上。
- `tests/e2e/round65_closed_loop_server.py` / `apps/web/e2e/closed-loop-scheduling.spec.ts`:生产 app + 内存 world 的真实浏览器闭环验收。