diff --git a/README.md b/README.md index 2470a42..534ce8b 100644 --- a/README.md +++ b/README.md @@ -37,5 +37,5 @@ SAP-CLI-SKILL 是一个让 AI 助手直接操作 SAP ABAP 系统的技能。 --- -**当前版本**: 2.4.0 +**当前版本**: 2.5.0 **维护者**: SwiftCode Creative Technology \ No newline at end of file diff --git a/SKILL.md b/SKILL.md index 081343f..022d2c4 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,7 +1,7 @@ --- name: sap-cli description: "SAP ABAP ADT CLI for AI agents. Trigger when: operating ABAP objects, syncing code to/from SAP, managing transports, querying DDIC, running ABAP programs, reading SAP tables, or any SAP development task via terminal." -version: "2.4.0" +version: "2.5.0" author: WuRangyu license: MIT triggers: @@ -21,9 +21,10 @@ Python CLI wrapping the SAP ADT REST API. Manages the full lifecycle of ABAP dev ```bash # 1. Single object: download → edit → sync -python main.py download --name ZMY_CLASS --type class --path ./src -# edit ./src/zmy_class.abap -python main.py sync --name ZMY_CLASS --type class --path ./src/zmy_class.abap --corr_nr DEVK901XXX +# 注意:--path 必须给到「对象类型目录」(src/TMP/<对象类型>),见铁律 5 +python main.py download --name ZMY_CLASS --type class --path ./src/TMP/class +# edit ./src/TMP/class/zmy_class.abap +python main.py sync --name ZMY_CLASS --type class --path ./src/TMP/class/zmy_class.abap --corr_nr DEVK901XXX # 2. Batch project sync (auto dependency-ordered) python main.py init --path ./my_project # add objects under src/ @@ -152,6 +153,24 @@ Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by 多会话并发操作同一批对象会相互覆盖。**派下一个会话前,先确认前一个已退出**(`ps aux | grep [h]ermes`)。长任务用 `background=true, notify=true`,等完成通知再派下一步。 +### 铁律 5:src 目录三层结构(开发包 → 开发对象 → 代码) + +源码仓 `src/` 下**只允许这一种层次**,三层缺一不可: + +``` +src/ +└── TMP/ ← 第 1 层:开发包,本地开发固定用 TMP + └── <对象类型>/ ← 第 2 层:开发对象 = 对象类型,一个类型一个目录 + └── zxxx.abap ← 第 3 层:代码文件,文件名 = 对象名(download 产出小写,扫描大小写不敏感) +``` + +- 第 1 层**固定写 `TMP`**(本地开发包):对应 SAP 端 `$TMP` 本地包,目录名去掉 `$` 以免 shell 把 `$TMP` 当变量展开。对象正式归入传输包时,该层目录改名为包名(如 `ZIDTR`),层次不变 +- 第 2 层目录即开发对象类型的落地:`report` / `class` / `interface` / `function` / `domain` / `dataelement` / `table` / `structure` / `tabletype` / `include` …(完整清单见下方「📦 Gitee仓库规范 → 目录结构」) +- **禁止**:`.abap` 平铺在 `src/` 根下;禁止跳过开发包层直接把对象类型目录放 `src/` 下;禁止在对象类型目录下再嵌套子目录(函数模块的命名按下方结构图 `function/ZGROUP_ZFUNC.abap`) +- **`download --path` 要给到对象类型目录**:该命令只把文件写进给定目录,**不会自动建开发包层/对象层**。`--path ./src/TMP/class` 正确;`--path ./src` 会产出平铺目录,不合格 +- 反例(2026-09-10 实测):`sap-cem-bip/src/` 25 个 `.abap` 平铺在根下,既无开发包层也无对象类型层 → 不合格,需归位 +- ⚠️ 已知工具缺口:`init` / `sync --all` 的扫描器(`sapcli/scanner.py`)只认**项目根目录下**的**复数**类型目录(`classes/` `reports/` `functions/<组名>/…`),不认 `src/<开发包>/<对象类型>/` 三层。用批量功能前须先对齐工具,否则扫不到对象;逐对象 `download` / `sync` 不受影响 + ### 2026-09-10 S4T 事故问题总结 | # | 问题 | 后果 | 对策(已固化) | @@ -163,6 +182,7 @@ Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by | 5 | 批量生成 DDIC 的工具报表反复 500/转储 | 34 分钟会话耗尽,零交付 | 逐个落对象;`run-program` 不稳定见下方「DDIC 落地方案」 | | 6 | 多个会话并发改同一批对象 | 相互覆盖,效率崩盘 | 铁律 4(单工作者) | | 7 | 未读技能就试错(`delete` 交互确认) | 白撞 EOFError 一轮 | 动手前先读 SKILL.md 与 references | +| 8 | `download --path ./src` 平铺下载,不建开发包/对象层 | 25 个 .abap 堆在 `src/` 根下,结构不合格需返工归位 | 铁律 5(src 三层结构 + `--path` 指向对象类型目录) | ## 🔄 Standard Workflow(SAP 对象操作标准流程) @@ -203,6 +223,8 @@ Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by ### 目录结构(ADT 层级) +> ⛔ **本节即铁律 5 的唯一合法层次**:`src/TMP/<对象类型>/<代码文件>`(本地开发固定 `TMP`,对象有正式包后用包名)。`.abap` 平铺在 `src/` 根下、或跳过开发包层,均为不合格。 + 每个 SAP 项目的 Gitee 仓库按 ADT 层级组织源码: ```