Files
吴让宇 c5905a5b1e refactor: 本仓升为唯一源(原 sap-cli 源码仓归档)
方向反转:此前 SKILL.md 是「模板渲染产物」、sap-cli 是源;现 sap-cli 归档,
sap-cli-skill 承接开发与分发,SKILL.md 回归手工维护的正本。

迁移(来自 sap-cli,共 104 文件):
- tests/           692 例测试(15 个文件的内联 sys.path 改指 assets/)
- openspec/        SDD 规格与归档变更(42 文件)
- docs/            开发文档与 ADT 原理(含 dev/CLAUDE.md、AGENTS.md)
- .claude/         rules 副本 + settings.json(供 Claude Code)
- .github/ .hermes/ .pre-commit-config.yaml .editorconfig CLAUDE.md
- scripts/ 保持仅 setup.py(pack_skill.py 已随旧仓归档,不迁)

修复(迁移暴露的真实缺陷):
- assets/pyproject.toml 的 build-backend 写作 `setuptools.backends._legacy:_Backend`,
  该模块在 setuptools 中不存在 → `pip install -e` 从来装不上。改为 build_meta。
  实测:临时 venv 安装成功,sap-cli --help 正常列出 31 个命令
- pyproject readme 指向不存在的 assets/README.md(editable 安装会失败)→ 改内联文本
- pyproject urls 改指 sap-cli-skill

机制调整:
- .github/workflows/ci.yml 适配 assets/ 布局;顶部注明该工作流仅 GitHub 执行,
  本仓在 Gitee 不会自动跑
- pre-commit 增本地测试门禁(Gitee 上真正生效的那道)
- .gitignore 合并旧仓完整规则(保留 log/ 下 md 知识库入库,只忽略运行日志)
- 大文件上限 100KB→1MB(架构图 512KB)

守卫测试 tests/unit/test_repo_guards.py(10 → 18 例):
- SKILL.md 须记录 parser 全部 CLI 命令 / 铁律 1-5 须为真实小节标题 / 示例不得违反铁律 5
- references/ 规则齐备;.claude/rules 与 references 必须一致(实测抓到一次真实漂移)
- VERSION == sapcli.__version__ == README 版本
- 仓内不得再出现 pack_skill.py / skill-src(防废弃流程回潮)

698 tests OK;editable 安装与 CLI 入口经临时 venv 实测通过。
docs/RELEASING.md 重写为单源开发流程。
2026-09-11 00:40:15 +08:00

131 lines
4.2 KiB
Markdown
Raw Permalink 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.
# CLAUDE.md
sap-cli 是一个 Python CLI 工具,通过 SAP ADT REST API 在本地编辑器编写 ABAP 代码并同步到 SAP 系统。
**版本**: 2.3.0 | **命令数**: 26 | **对象类型**: 16
## 运行方式
```bash
cd D:/Codespace/sap-cli
python main.py <command> [options]
# 或
python -m sapcli <command> [options]
```
## 规则体系(必须遵守)
| 规则文件 | 核心内容 |
|----------|----------|
| [`sap-tool-constraints.md`](.claude/rules/sap-tool-constraints.md) | 🚫 禁止绕过 sap-cli 直接操作 SAP、禁止修改标准对象、禁止操作系统表 |
| [`error-handling.md`](.claude/rules/error-handling.md) | 命令失败时的诊断流程和处理原则 |
> ⚠️ **这些规则由 Hooks 强制执行**,违反会被直接拦截。
## 命令速查
### CRUD(对象生命周期)
```bash
python main.py create --name ZMY_CLASS --type class --corr_nr DEVK901XXX
python main.py delete --name ZMY_CLASS --type class
python main.py download --name ZMY_CLASS --type class --path ./out
python main.py info --name ZMY_CLASS --type class
python main.py sync --name ZMY_CLASS --type class --path ./src/classes/zmy_class.abap --corr_nr DEVK901XXX
python main.py activate --name ZMY_CLASS --type class
```
### 批量操作
```bash
python main.py init --path D:/Codespace/SAPilot/src
python main.py refresh --path D:/Codespace/SAPilot/src
python main.py sync --all --path D:/Codespace/SAPilot/src --corr_nr DEVK901362
python main.py sync --all --path D:/Codespace/SAPilot/src --corr_nr DEVK901362 --dry-run
```
### 数据查询
```bash
python main.py show-table --name ZSAPILOT_OBJ # 表结构(字段列表)
python main.py read-table --name ZSAPILOT_OBJ # 表数据(freestyle SQL
python main.py read-table --name ZSAPILOT_OBJ --max-rows 50
python main.py list --type class --package ZSAPILOT # 列出对象
python main.py whereused --name ZMY_CLASS --type class # Where-Used
python main.py search --pattern "sapilot" --type class # 源码搜索
```
### 远程执行
```bash
python main.py run-program --name ZSAPILOT_SETUP # 执行 ABAP 程序
python main.py diff --name ZMY_CLASS --type class --path ./src/classes/zmy_class.abap
```
### 传输请求
```bash
python main.py transport list
python main.py transport info --corr_nr DEVK901362
python main.py transport release --corr_nr DEVK901362
python main.py transport objects --corr_nr DEVK901362
```
### 配置与认证
```bash
python main.py config show
python main.py config list-profiles
python main.py config set host s4h.example.com
python main.py auth login
python main.py auth status
```
### 其他
```bash
python main.py check --name ZMY_CLASS --type class # ATC 代码检查
python main.py format --name ZMY_CLASS --type class # Pretty Printer
python main.py package info --name ZSAPILOT
python main.py cds download --name ZMY_CDS
python main.py analyze --path ./src # 依赖分析
python main.py scaffold --type alv-report --name ZMY_RPT # 项目模板
```
## 支持的对象类型(16 种)
`report` `class` `interface` `function` `functiongroup` `domain` `dataelement` `table` `structure` `tabletype` `include` `cdsview` `messageclass` `view` `searchhelp` `lockobject`
## 关键参数
| 参数 | 说明 |
|------|------|
| `--corr_nr DEVK901XXX` | 传输请求号(必带,否则触发交互提示) |
| `--path <file_or_dir>` | 本地文件或项目目录路径 |
| `--dry-run` | 预览不执行 |
| `--definition <json>` | DDIC 对象创建定义(JSON 文件) |
| `--profile <name>` | 使用指定配置 profile |
| `--verify-ssl` | 启用 SSL 验证(默认关闭) |
## 批量同步依赖排序
```
domain(10) → dataelement(20) → table(30) → tabletype(40) → interface(50) → class(60) → function(70) → report(80)
```
## 配置文件
- `config.ini` — SAP 连接配置(host, client, user, password
- 测试环境配置复用此文件
## 文档索引
| 文档 | 用途 |
|------|------|
| `README.md` | 价值说明、快速开始 |
| `FEATURES.md` | 命令矩阵、对象类型全景 |
| `docs/guide.md` | 详细命令用法、参数、输出示例 |
| `docs/adt/` | ADT REST API 学习笔记 |
| `docs/NW740-COMPATIBILITY.md` | NW 7.40 真实系统兼容性矩阵 |
| `docs/dev/` | 开发者文档 |