mcp server
sap-nexus-agent
Capability-ontology-driven SAP capability supplier. One call answers one business question; endpoint chains, as-of consistency and approvals are enforced server-side. Orchestration is delegated to any
Set up
Runs on your computer. Pick your agent and operating system.
This project does not publish an install method we can turn into a config. Follow the README instead.
README
synced Oct 28, 2026把 SAP 业务问题沉淀为业务语义级能力:端点链、
asOf时点一致性、基数归约与审批裁决全部由服务端强制,覆盖域之外显式拒答而非降级凑答。Harness 只做能力选择与展示,换宿主不会换出第二套业务语义。
能力本体建模 · 编译期派生 · 业务语义级能力 · 服务端强制治理 · 全链路血缘 · 可替换 Harness
Apache-2.0 · 自托管 · 无厂商锁定 · SAP On-Prem
English · 中文
快速开始 · 目标架构 · 当前架构 · 核心特性 · 目标达成状态 · Harness 可见面 · 已注册能力 · 技术栈
SAP Nexus Agent 的目标是做 SAP 能力的供应方,而不是又一个 SAP Agent。四方各管一件事:能力本体(YAML 单一来源)定义业务对象与业务口径;编译期派生管线离线产出 Capability Manifest,请求期零本体查询;SAP 域能力层暴露业务语义级能力——一次调用回答一个业务问题,内部固化端点链、asOf 一致性与基数归约;Harness(dsh / MCP client / 自有 CLI)只做能力选择、展示与澄清,可整体替换。唯一安全边界是远程 Java Gateway,bindingId、RFC 名、服务 URL、HTTP 方法与凭证引用永不可由 harness 提供或覆盖。
核心原则:事实先于叙事;能力即边界。
上述四方分工中,能力本体与编译期派生管线为目标态,当前实现状态见「目标达成状态」。
快速开始
前置依赖
- Java 17(无需单独安装 Gradle,仓库自带
services/gateway/gradlew) - Python 3.12+
- Node.js 20+
- PostgreSQL 16+(主数据实体解析的只读检索投影;启用
ENTITY_RESOLUTION_MODE=on时需要,pg_trgm 来自postgresql-contrib) - SAP JCo 3 库(用于 SAP 实时执行)
- SAP On-Prem 连接与凭证(用于实时冒烟测试)
- OpenAI-compatible LLM 端点与 API Key(DSH Chat / harness-dsh 使用;Rule 模式与离线测试不需要)
无 SAP 连接或凭证时,可运行下方「验证基线」的完整离线测试套件、call-plan eval 与 registry 校验,但无法进行交互式查询——Python Agent CLI 即便使用 --intent-mode rule(免 LLM key)仍会连接 Gateway 执行;DSH Chat / harness-dsh 另需 LLM key。
准备 Python 环境
仓库没有 requirements.txt;agent 包按 agent/pyproject.toml 以 editable 方式安装(test extra 提供 jsonschema,另需 pytest 运行下方测试命令——pytest 未在 pyproject 中声明):
python3 -m venv .venv # 需 Python 3.12+
.venv/bin/python -m pip install -e "agent[test]" pytest
环境配置
cp .env.example .env
# 填入 SAP 连接参数(统一为 SAP_ASHOST + SAP_HTTP_PORT / SAP_SYSNR + 共享身份,无 SAP_URL / SAP_REST2RFC_*);
# DSH 使用时另需 LLM_*(或 dsh 专用覆盖 SAP_NEXUS_LLM_*)
# 主数据实体解析(描述→候选→选择→真实编码绑定):ENTITY_RESOLUTION_MODE=on + PG_MASTERDATA_*(见 master-data/README.md)
验证基线(截至 2026-09-26)
.venv/bin/python scripts/validate-registry-contract.py registry/capabilities.yaml
.venv/bin/python -m pytest agent/tests
PYTHONPATH=agent scripts/verify-agent-callplan-evidence.sh
npm --prefix frontend run verify
npm --prefix frontend run release-gate -- --profile all
当前基线:
- Registry 合约校验:
Registry contract valid(deprecation warning 均为extraction.matchers→binding.sources迁移提示,不影响合约有效性) - Agent 测试套件:全量通过(含少量既有 skip / xfail)
- Frontend:
verify(typecheck + vitest + next build)全绿 - Call-plan Eval:全部通过(dry-run、derived-parameter 中的 PENDING 项均有用例内书面归因,属设计保留而非失败)
- Live 等价(gated,需
SAP_REST2RFC_LIVE=1):三个 list 能力迁移后经 SICF 与 JCo 基准逐行、全字段等价(直接 SICF ↔ Gateway 一致) - Offline release gate:2026-08-19 达成最高连续等级
L3_ACTION_GOVERNED(历史里程碑;各 hard gate 均无泄漏/绕过,血缘完整;liveSmoke按离线门禁设计不执行真实 SAP 调用;报告见runtime/evals/results/agent-release-l3-2026-08-19T13-09-48-499Z.json;2026-08-10 旧报告的取证说明见路线图 §1.1.4)
PYTHONPATH=agent 用于直接验证当前源码树。
启动服务
一键启动(脚本在前台运行,日志在 runtime/dev-services/logs/,Ctrl+C 停止全部;另有 ./start.sh stop / restart):
npm --prefix frontend install # 首次需要:start.sh 要求 frontend/node_modules 存在
./start.sh
启动后打开 http://127.0.0.1:3000/,根路径自动跳转 /chat(DSH Chat);旧版证据 Workbench 仍在 /workbench。脚本不设置发行版专属的 JAVA_HOME 默认值,未设置时使用系统 Java(须为 17)。
主数据实体解析另需本地 PostgreSQL:sudo service postgresql start,一次性迁移/角色/导入步骤见 master-data/README.md;ENTITY_RESOLUTION_MODE 保持 off(默认)时无需 PG,旧编码路径行为完全保持。也可以按下面分步手动启动:
终端 1 — Gateway:
set -a; . ./.env; set +a
cd services/gateway
./gradlew --no-daemon bootRun
如系统默认 JDK 不是 17,先自行 export JAVA_HOME=<JDK 17 路径>(不要再写死发行版专属路径)。
终端 2 — OData 微服务(采购订单能力需要):
cd services/odata-service
PYTHONPATH=. python -m odata_service.server # :8081
终端 3 — DSH Chat(推荐入口,需要 LLM key):
set -a; . ./.env; set +a
SAP_NEXUS_AGENT_ROOT=$(pwd) \
SAP_NEXUS_GATEWAY_URL=http://127.0.0.1:8080 \
npm --prefix frontend run dev
打开 http://127.0.0.1:3000/chat(根路径自动跳转;经典 Workbench 仍在 /workbench)。
可选 — harness-dsh 独立 CLI(另开终端,需先启动上面的 Next facade):
cd harness-dsh
npm ci && npm run build
cp .env.example .env # OpenAI-compatible 端点/key;SAP_NEXUS_FACADE_URL 默认 http://127.0.0.1:3000
npm start -- "A100 在 1000 工厂够不够用、在途多少?"
可选 — Python Agent CLI(不经 harness,Rule 模式无需 LLM key,但仍需可达的 Gateway 与 SAP 连通):
PYTHONPATH=agent .venv/bin/python -m sap_nexus_agent.cli \
"A100 在 1000 还有多少可用库存?" \
--gateway-url http://127.0.0.1:8080 --intent-mode rule
目标架构(Agent 建设目标)
下图是本项目的目标架构(Agent 建设目标),不是当前仓库现状;当前实现见下一节「当前架构概览(现状)」。架构图只画目标形态,不含进度、数量或日期;仅当分层、层间责任、契约红线或派生关系发生变化时才更新。实现进度统一记录在下方「目标达成状态」与实施路线图 §1.1。读图主线:定义在顶、推理在编译期、治理在能力内、体验可替换。立场为「四方各管一件事」:能力本体(YAML 单一来源)、编译期派生管线(离线产出 Capability Manifest)、SAP 域能力层(业务语义级、核心资产)、Harness(可替换的编排与展示)。
当前架构概览(现状)
体验层 · Harness(可替换)
┌──────────────────────────────┐ ┌──────────────────────────────────┐
│ harness-dsh CLI(独立 Node 包) │ │ DSH Chat Workbench(/chat) │
│ dsh T-A-O 循环 · 钉 0.1.5-rc.1 │ │ 浏览器 + 服务端 in-process dsh │
└──────────────┬───────────────┘ └────────────────┬─────────────────┘
│ HTTP POST /api/semantic-tools │ 进程内直接调用
└──────────────────┬─────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Next.js 服务端(:3000) │
│ Semantic Tool Facade(契约 v2 · 形状校验 · 技术键注入 fail-closed) │
│ executeSemanticTool = 服务端治理唯一入口(HTTP facade 与 dsh 共用) │
│ agent-runtime-adapter:spawn Python Agent 子进程 │
│ Composition Runtime:PlanExecutor · durable node ledger · │
│ Projection · Recommendation · grounded Narrative · governed Action │
└────────────────────────────────┬────────────────────────────────────┘
│ registered capabilityId only
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Java Gateway(:8080 · 唯一安全边界) │
│ 参数校验(能力本体约束)· 执行器路由(JCO_RFC / ODATA / REST_JSON) │
│ TechnicalExecutionResult · 结果归一化 · 脱敏 / 审计 │
└─────────┬──────────────────────────────┬────────────────────────┬────────┘
▼ ▼ ▼
┌──────────────────────┐ ┌──────────────────────────┐ ┌──────────────────────┐
│ SAP JCo(RFC/BAPI) │ │ odata-service(:8081) │ │ SICF rest2rfc │
└──────────┬───────────┘ │ Python 只读微服务 · │ │ 纯 ABAP 动态反射网关 │
│ │ $filter 组装 │ │ (SAP 系统内部) │
│ └────────────┬─────────────┘ └──────────┬───────────┘
└──────────────┬───────────────┘ │
▼ ▼
SAP On-Prem 系统
旁路:Python Agent CLI(sap_nexus_agent.cli)可不经 harness 直连 Gateway(rule / llm intent);
经典 Workbench /workbench 与 DSH Chat 共用同一 agent-runtime + composition 治理链。
当前架构限制(设计选择,非缺陷)
- Run/Session、principal ownership、approval、lease/idempotency 与 cursor SSE 已 durable 化;但当前本地 JSONL/file store 和 placeholder principal 仍不是 shared multi-worker/HA store 或生产身份系统(多宿主前必须替换,见目标架构支撑面)
- 编译期派生管线(Capability Manifest)、业务口径本体(
Definition)、字段级 FactType schema 与关系图尚在目标态规划中,当前 registry 仍是端点级能力注册表 - Knowledge/RAG、自由 Tool Calling、通用 Dynamic Planner、多 WRITE/Saga 和自动补偿仍为 Reserved / Not In Scope
- 图数据库和 OWL 推理运行时为预留方向,当前 JSON Schema + Registry Validator 承担一致性职责
核心特性
业务语义级工具面与服务端强制治理(核心差异点)
- 业务语义级工具面(Semantic Tool 契约 v2):harness 只见 4 个业务工具(见下文「Harness 可见面」),不出现
capabilityId/rfcName/bindingId/ URL / 凭证;技术键注入在 facade 层 fail-closed - 同一条服务端强制治理链:HTTP facade 与 in-process dsh handler 共用
executeSemanticTool,意图选择、CallPlan、校验、审批全部在服务端;harness 进程内没有任何直连 Gateway / RFC / 绑定 / 凭证的调用面(harness-dsh/tests/architecture.test.ts锁定)
主数据实体解析(描述 → 候选 → 选择 → 真实编码)
- 本体驱动的实体解析:用户只给出物料/客户/供应商的描述或简称时,系统经注册的
MD.*.Search只读能力从本地 PostgreSQL 检索投影搜索真实候选(固定参数化 SQL + pg_trgm 补充),以一等ENTITY_CHOICE状态展示候选卡片(按钮或"第二个 / 苏州那家 / 都不是"),确认后把真实编码绑定到原业务能力参数并恢复执行。模型无权编造编码;编码形状检查不替代存在性与权限检查 - 保守确认与失效语义:仅"精确编码 + 可见 + 有效"可直接绑定(附验证证据),其余一律用户确认;快照/配置/权限漂移使旧选择安全失效。
ENTITY_RESOLUTION_MODE(默认off)关闭时旧编码路径行为完全保持 - PG 是只读检索投影,不是第二权威源:full snapshot 原子发布、幂等导入、只读角色;维护入口
maintainCLI(upsert/deactivate/export 均经受治理批次,见master-data/README.md)
可替换 Harness(DSH 打样)
- 两个 harness 形态:
harness-dsh/独立 Node CLI(dsh T-A-O 循环,经 HTTP 调 semantic-tool facade)与 Next.js 内置的 DSH Chat(/chat,服务端 in-process dsh runtime,支持流式推理轨迹、工具卡与审批交互);根路径/已 307 跳转至/chat - 版本 pin:
@deepseek-ai/dsh-*精确钉0.1.5-rc.1、@deepseek-ai/cordis钉4.0.2;preview 期任何升级都是独立变更评审
当前语义层:端点级能力注册表
以下字段与机制均为已实现的端点级能力注册表语义;能力本体(业务对象 / 业务口径 Definition / 关系图)尚未落地——状态见「目标达成状态」。
- Capability Ontology — 每个 SAP 操作(查询/写入)被建模为形式化能力,包含
ontologyIri、semanticType、输入/输出语义类型、事实类型引用 - 语义参数映射 — 能力输入参数通过
semanticName/semanticType关联到本体概念(如MaterialNumber、Plant),与 SAP 技术参数(MATERIAL、PLANT)解耦 - 执行器绑定 — 能力绑定到特定执行器(
JCO_RFC/ODATA),通过白名单bindingId控制,运行时拒绝替换 - 本体约束 runtime —
constraint_runtime.py基于 rdflib + pyshacl:构建期 codegen 从 registry 生成 SHACL 形状并绑定 snapshot,请求期做参数形状校验与前置条件 SPARQL 求值(查询计划预编译缓存);严格 resolve/enforce 分离——只回答"形状是否满足",阻断与执行仍由确定性代码负责。更重的图平台(Semantica)经spikes/semantica-shadow评估后当前不引入 - OWL 预留 —
ontologyIri和semanticType为更重的本体推理预留迁移路径;当前一致性门禁由 JSON Schema + Registry Validator + 上述 SHACL runtime 共同承担 - 声明式意图解析 — Rule 模式意图解析完全声明驱动(
registry/capabilities.yaml的intent块 +registry/semantic-types.yaml语义类型目录),添加新能力无需修改 Agent 代码
治理与安全
- fail-closed — 不支持的执行器类型(
CDS_ADT/SQL_READ)默认拒绝执行;凭据缺失或非法时任何执行器均 fail-closed - 参数注入防护 — 调用者不得提供或覆盖
rfcName、bindingId、服务 URL、HTTP 方法、凭证引用、原生 SQL、CDS 对象等;semantic-tool facade 对技术键做任意深度扫描 - READ 安全边界 — READ 能力不得调用
BAPI_TRANSACTION_COMMIT或BAPI_TRANSACTION_ROLLBACK - WRITE 人工审批 — WRITE 能力(采购申请创建 /
propose_replenishment提案)必须存在已记录的人工确认(exact-subject)才执行;审批 subject 由服务端计算与校验 - 全链路审计 — 每次执行生成 TraceSpan / JSONL trace,记录意图→CallPlan→验证→执行→证据→叙述的完整链路
执行器家族
| 类型 | 状态 | 说明 |
|---|---|---|
JCO_RFC | ✅ Live | 通过 SAP JCo 直接执行 RFC/BAPI |
ODATA | ✅ Live | Gateway 薄反向代理 → Python odata-service(:8081)→ SAP OData |
REST_JSON | ✅ Live | 经 Basic Auth POST 调用 SAP 内部纯 ABAP rest2rfc SICF 网关,registry 映射驱动 |
CDS_ADT | 🔒 Fail-closed | 架构预留 |
SQL_READ | 🔒 Fail-closed | 架构预留 |
目标达成状态(S1–S5)
对照目标架构的 S1–S5 建设序列评估当前实现(2026-09-26 复核);完整状态表见路线图 §1.1,测试与门禁的具体数字只记录在上方「验证基线」。
- 序列进度:S1 补证据已完成 · S2(对象主键 + 字段级 schema)未开始 · S3(业务口径 + 关系入本体 + 编译期派生管线)未开始 · S4 能力粒度上移已完成,但越过了 S2/S3 · S5 多宿主验证部分完成(跨宿主一致性门禁已通过;MCP 暴露与第三方 harness 未做)。
- 层级达成:Harness 体验层、契约边界(四条红线)、SAP 域能力层(4 个业务语义工具,3 读 1 写)、Java Gateway 与执行器(JCO_RFC/ODATA/REST_JSON 均 live)已建成;编译期派生管线与运行时状态层部分(已有手写版本化 JSON Schema 契约
contractVersion=2;本地 JSONL 存储 + placeholder principal);能力本体层(对象/口径/关系)与离线决策回流未动——本体是唯一未上岗的一层。 - 三条结构性要求:① 能力粒度「已达成,但错位」(4 个业务工具存在,但声明在服务端代码而非本体,端点级已不对外);② 语义资产未达成(字段级 schema、业务口径、关系均为空,工具描述仍手写);③ 身份与审批部分(审批句柄与服务端身份注入已有,调用主体仍占位、存储仍本地)。
- 下一步是回填而非新建:① CI 门禁要求新增能力输出字段引用
Definition口径 id(允许占位 id 先行);② 尽早切分ontology-core(开源)/ontology-tenant(不公开),本体近空时成本最低;③ 将 4 个已有能力的口径(可用库存 / 逾期 / 信用敞口)从代码逐条上提,同步产出字段级 schema 与首条跨域 link。 - 唯一实质断点:业务口径固化在服务端代码里,「改一行本体即改变 Agent 行为、零代码改动」的自检判据尚不通过。
- 离线端到端治理编排主链可用:意图 → CallPlan → 校验/执行 → ExecutionResult → ReasoningFact → 叙述 → durable Workbench 回放 → plan-aware single Action continuation;TypeScript composition coordinator 已接通 PlanExecutor、OutputProjection、Recommendation、grounded Narrative(单能力
CallPlan主链保持可用)。 - Python Agent 职责:LLM-first intent、closed-set recall、五态决策和 PlanGraph v2 authoring;作为 Next 服务端按需 spawn 的子进程运行,也可经 CLI 独立运行。
- Release gate 里程碑:offline L1/L2/L3 gate 于 2026-08-19 达成最高连续等级
L3_ACTION_GOVERNED;规模、四项 hard gates 数值与复现命令见「验证基线」,2026-08-10 旧报告的取证说明见路线图 §1.1.4。 - SAP 连通性:7 个业务能力均有真实 SAP 执行路径——MM 域经 JCo/OData;SD/FI 三个 list 能力已迁移到 REST_JSON(2026-09-25),经 SAP 内部纯 ABAP rest2rfc SICF 网关返回,迁移后 live 逐行、全字段等价(AP/AR/SD 均已实测)。JCo/ODATA/REST_JSON 三路共用统一地址模型
SAP_ASHOST+SAP_HTTP_PORT(OData 与 SICF 同 ICM 端口)/SAP_SYSNR(JCo)+ 共享身份;连接值与凭据只存在于 Gateway 受控配置。3 个MD.*.Search经PG_MASTERDATA_READ访问本地 PG 投影。任何 live WRITE 仍需 exact-subject Human Approval。
Harness 可见面:业务语义工具(契约 v2)
harness 只能命名业务工具与槽位;工具内部由服务端从已注册能力中选择能力链,harness 不构造调用图。
| 语义工具 | 必填槽位 | 性质 | 服务端能力链(registry 选择) |
|---|---|---|---|
diagnose_material_supply | — | READ | 库存可用性 + 在途采购订单(MM.Inventory.GetAvailability · MM.PurchaseOrder.GetList) |
review_customer_exposure | customerNumber(AR 未清项另需公司代码) | READ | 销售订单净值 + 应收未清项(SD.SalesOrder.GetList · FI.AR.GetOpenItems) |
review_vendor_exposure | vendor · companyCode | READ | 应付未清项(FI.AP.GetOpenItems) |
propose_replenishment | material · plant · requiredQuantity · targetDate · purchasingGroup | WRITE 草案 | 缺口诊断 → 采购申请提案;执行前 exact-subject 人工审批(MM.PR.CreateDraft) |
注:表中为当前服务端实际选择的能力链。目标架构中
review_vendor_exposure的内部链另含采购订单端点,尚未内化;harness 可见面已从 7 个端点级工具降为这 4 个业务语义级工具(可见面治理封顶 15)。
当前已注册能力(服务端内部)
| 能力 ID | 名称 | 执行器 | SAP 端点 | 状态 |
|---|---|---|---|---|
MM.Inventory.GetAvailability | 库存/需求清单查询(MD04) | JCO_RFC | BAPI_MATERIAL_STOCK_REQ_LIST | ✅ active |
MM.PurchaseOrder.GetList | 采购订单列表查询 | ODATA | API_PURCHASEORDER_PROCESS_SRV | ✅ active |
MM.Material.GetInfo | 物料主数据查询(基本单位/采购组) | JCO_RFC | BAPI_MATERIAL_GET_DETAIL | ✅ active |
MM.PR.CreateDraft | 采购申请创建 | JCO_RFC | BAPI_PR_CREATE | ✅ active(需人工审批) |
SD.SalesOrder.GetList | 销售订单列表查询(VA05 风格) | REST_JSON | BAPI_SALESORDER_GETLIST | ✅ active(live 等价已证) |
FI.AR.GetOpenItems | 客户应收未清项查询 | REST_JSON | BAPI_AR_ACC_GETOPENITEMS | ✅ active(live 等价已证) |
FI.AP.GetOpenItems | 供应商应付未清项查询 | REST_JSON | BAPI_AP_ACC_GETOPENITEMS | ✅ active(live 等价已证) |
MD.Material.Search | 物料主数据检索(描述/别名/属性) | PG_MASTERDATA_READ | 本地 PostgreSQL 只读投影 | ✅ active |
MD.Customer.Search | 客户主数据检索 | PG_MASTERDATA_READ | 本地 PostgreSQL 只读投影 | ✅ active |
MD.Supplier.Search | 供应商主数据检索 | PG_MASTERDATA_READ | 本地 PostgreSQL 只读投影 | ✅ active |
共 10 个能力:9 个只读(kind: Function,sideEffect: none)+ 1 个写入(MM.PR.CreateDraft,执行前必须存在已记录的人工确认)。其中 7 个直连 SAP,3 个 MD.*.Search 经 PG_MASTERDATA_READ 访问本地 PG 检索投影(SAP 主数据的导入投影,不是第二权威源)。
仓库结构
agent/ Python Agent 包:意图、CallPlan/PlanGraph v2、测试与评估
frontend/ Next.js:DSH Chat(/chat)、经典 Workbench(/workbench)、
semantic-tool facade、服务端 dsh runtime、composition runtime
harness-dsh/ 可替换 harness 打样:独立 Node CLI(dsh T-A-O,钉 0.1.5-rc.1)
services/
gateway/ Java Spring Boot SAP Gateway(多模块 core/jco/odata/rest/masterdata/app,唯一安全边界)
odata-service/ Python OData 只读微服务(:8081)
master-data/ 主数据实体解析:物理映射、合成 fixtures、PG 启动/迁移/导入/维护说明(README)
db/migrations/ 主数据投影 PG schema 迁移(快照注册表、只读视图、pg_trgm 索引、只读角色)
tests/live/ Gated live 等价验证(默认 skip,SAP_REST2RFC_LIVE=1 启用)
registry/ 能力注册表和执行器绑定目录(YAML 单一来源)
schemas/ JSON Schema 契约
ontology/ 离线 OWL 本体骨架(预留)
openspec/ Classic 工作流规格与变更归档
runtime/ 运行时 trace、dev-services、gateway-jco 与 release-gate 结果
evals/ Agent 评估用例
scripts/ 验证和注册表检查脚本
docs/
wiki/ 架构、路线图、技术选型文档(事实来源)
comet/ Native 工作流变更归档
runbooks/ 22 份历史 runbook(已归档,仅作补充查询,非事实来源)
技术栈
| 层 | 技术 |
|---|---|
| Harness | DSH Chat(Next 内置 dsh runtime,SSE 流式)+ harness-dsh 独立 CLI;@deepseek-ai/dsh-* 精确钉 0.1.5-rc.1、cordis 4.0.2;harness 可替换 |
| Agent | Python package + OpenAI-compatible LLM(默认 DeepSeek deepseek-chat)+ Rule 混合 |
| 服务端编排 | React/Next.js 服务端:Semantic Tool Facade、Composition Runtime、durable JSONL store |
| Gateway | Java 17 / Spring Boot / Gradle 多模块(唯一安全边界) |
| SAP 连接 | SAP JCo 3 (RFC) + SAP OData (HTTP,经 odata-service) + SICF rest2rfc (HTTP/JSON,REST_JSON);三路共用统一地址与凭据(SAP_ASHOST + SAP_HTTP_PORT / SAP_SYSNR) |
| 主数据投影 | PostgreSQL 16 + pg_trgm:快照注册表、原子 full-snapshot 发布、只读角色;PG_MASTERDATA_READ executor(Gateway masterdata 模块,HikariCP + pgjdbc) |
| 前端 | React / Next.js / TypeScript |
| 能力注册 | YAML + JSON Schema |
| 本体 | YAML + JSON Schema + 不可变内存图;OWL 骨架 offline;图数据库与编译期派生管线为目标态 |
| Runtime State | 本地 JSONL/file 持久化的 Run/Session/Approval + JSONL trace;非 shared multi-worker/HA store;共享/量产 durable runtime 待独立 change |
| 认证与授权 | placeholder principal,尚未产品化;共享环境需 server-owned principal / tenant / role / data scope / ApprovalActor |
文档
许可
本项目采用 Apache-2.0 许可证。
快速导航
| AGENTS.md / CLAUDE.md | 项目级 Agent 行为规则 |
| registry/ | 能力注册表(10 个已注册能力) |
| harness-dsh/ | 可替换 harness(DSH CLI) |
| frontend/src/server/dsh/ | 服务端 dsh runtime 与语义工具接线 |
| ontology/ | OWL 本体骨架 |
| evals/ | 评估用例 |