oisee/vibing-steampunk

GitHub: oisee/vibing-steampunk

一个基于 Go 重写的 ABAP 分析平台,通过 MCP 与 LSP 提供轻量、脚本化且高度自动化的代码审计与变更管理能力。

Stars: 283 | Forks: 64

# Vibing Steampunk (vsp) **AI-Agentic Development Unlocked for ABAP** — ECC, S/4HANA, everywhere ADT 可用。 ![Vibing ABAP Developer](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/de669544dd194244.png) ## 热门推荐 ### 包分析套件 五个分析命令,回答关于 ABAP 包的实际问题: ``` vsp health --package '$ZDEV' # tests + ATC + boundaries + staleness vsp health --package '$ZDEV' --report html # full HTML report with details vsp slim '$ZDEV' --level methods # dead code detection (method-level) vsp api-surface '$ZDEV' --include-subpackages # Clean Core: which standard APIs do you use? vsp boundaries '$ZDEV' # directional boundary crossing analysis vsp boundaries '$ZDEV' --format mermaid # visual graph with package subgraphs ``` ### 传输与变更历史 ``` vsp changelog '$ZDEV' --since 20260101 # what changed in this package? vsp changes '$ZDEV' --attribute SAPTEST # group transports by CR attribute (E070A) ``` ### 方向边界跨越 不仅仅是“跨越”或“未跨越”——**哪个方向**的依赖流动: | 方向 | 含义 | 判定 | |-----------|---------|---------| | UPWARD | 子 → 父 | OK | | COMMON | 任意 → _00 包 | OK | | SIBLING | 模块 → 模块 | BAD — 提取到公共部分 | | DOWNWARD | 父 → 子 | BAD — 颠倒层级 | | EXTERNAL | 跨层级 | WARN — 隔离违规 | | CIRCULAR | A→B + B→A 兄弟 | BAD — 耦合模块 | 导出为 7 种格式:`text`、`json`、`md`、`mermaid`、`html`、`dot`(Graphviz)、`plantuml`、`graphml`(Gephi/yEd)。 ### 副作用与 LUW 分析 解析器检测 ABAP 源码中的事务模式: | 什么 | 检测到 | |------|----------| | 数据库读/写 | SELECT、INSERT、UPDATE、DELETE、MODIFY | | LUW 所有权 | COMMIT WORK、ROLLBACK WORK | | 延迟执行 | IN UPDATE TASK、IN BACKGROUND TASK | | 异步 | STARTING NEW TASK(aRFC)、SUBMIT VIA JOB | | 外部调用 | RFC DESTINATION、HTTP 客户端、APC/WebSocket | | 事务 | CALL TRANSACTION、LEAVE TO TRANSACTION | | 转换 | CALL TRANSFORMATION | LUW 分类:**safe** / **participant** / **owner** / **unsafe**。 ### 健康报告 包含测试详情、ATC 发现和边界跨越的完整健康报告: ``` vsp health --package '$ZDEV' --details # text with all details vsp health --package '$ZDEV' --report md # → _ZDEV.md vsp health --package '$ZDEV' --report html # → _ZDEV.html vsp health --package '$ZDEV' --report my.html # → my.html ``` 测试在完整的包层级中发现嵌入式本地测试类——与 Eclipse 的 Ctrl+Shift+F10 相同。 ### 更多 - `vsp graph co-change CLAS ZCL_FOO` 用于基于传输的共变分析 - `vsp graph where-used-config ZKEKEKE` 用于启发式 TVARVC 使用发现 - `.vsp.json` `transport_attribute` 用于每系统 CR 相关配置 - **[分析与重构指南](docs/analysis-refactoring-guide.md)** 了解这些命令的作用 - **[图形指南](docs/graph-guide.md)** 获取示例、数据源和当前限制 ## 0x101 星辰! ## 新功能 — 分析与智能冲刺 完整版本历史记录请参考 [CHANGELOG.md](CHANGELOG.md)。 ### 聚焦模式 — 一工具统治所有(推荐) **推荐用于大多数环境。** 单个 `SAP(action, target, params)` 工具替代多达 147 个独立工具定义。令牌开销最小,功能最大。 ``` SAP(action="read", target="CLAS ZCL_TRAVEL") SAP(action="edit", target="CLAS ZCL_TRAVEL", params={"source": "..."}) SAP(action="create", target="DEVC", params={"name": "$ZOZIK", "description": "New pkg"}) SAP(action="help", target="debug") ``` | 指标 | 聚焦(100 个工具) | 专家(147 个工具) | 聚焦(1 个工具) | |--------|-------------------:|-------------------:|----------------------:| | MCP 架构令牌 | ~14,000 | ~40,000 | **~200** | | 减少 | — | — | **99.5%** | 所有安全控制(`--read-only`、`--allowed-ops`、`--allowed-packages`)均按相同方式工作——通用工具通过相同处理程序 → ADT 客户端 → `checkSafety()` 链路由。 ### 上下文压缩 — 内置 ABAP 理解 `GetSource` 自动附加**压缩依赖前言**——每个引用类、接口和 FM 的公共 API 签名。一次 MCP 调用 = 源码 + 完整周边上下文。 **工作原理:** ``` graph LR A["GetSource
ZCL_TRAVEL"] --> B["10 regex patterns
scan source"] B --> C["TYPE REF TO
NEW · => · ~
INHERITING FROM
INTERFACES
CALL FUNCTION
CAST · RAISING"] C --> D["Fetch deps
5 parallel"] D --> E["Extract contract
PUBLIC SECTION only"] E --> F["Source +
Compressed Prologue"] ``` **压缩按对象类型:** | 什么 | 保留 | 剥离 | 典型压缩比 | |------|-------|--------|:-------------:| | **类** | `CLASS DEFINITION` + `PUBLIC SECTION` | 保护、私有、实现 | **7–30x** | | **接口** | 完整的 `INTERFACE...ENDINTERFACE` | — | 1x(已足够紧凑) | | **函数模块** | `FUNCTION` 行 + `*"` 签名块 | 函数体 | **5–15x** | **真实世界示例** — `ZCL_ABAPGIT_ADT_LINK`(abapGit 代码库): - 检测到 8 个依赖项 → 8 个已解析,0 个失败 - 依赖项包括:`ZIF_ABAPGIT_DEFINITIONS`(大型接口)、`ZCX_ABAPGIT_EXCEPTION`、`CL_WB_OBJECT`(14 个方法)、`IF_ADT_URI_MAPPER`(8 个方法)等 - 所有内容仅压缩为**公共签名**——不包含实现体,也不包含私有部分 ### 方法级手术 — 读取并编辑单个方法 为何拉取整个 1000 行类,而只需要一个 30 行方法? ``` # 仅阅读 FACTORIAL 方法 — 而非整个类 SAP(action="read", target="CLAS ZCL_CALCULATOR", params={"method": "FACTORIAL"}) # 仅编辑该方法 — vsp 处理其余部分 SAP(action="edit", target="CLAS ZCL_CALCULATOR", params={ "method": "FACTORIAL", "source": " METHOD factorial.\n ...\n ENDMETHOD." }) ``` **底层发生的情况:** ``` sequenceDiagram participant LLM as AI Agent participant VSP as vsp participant SAP as SAP System LLM->>VSP: SAP(edit, CLAS ZCL_FOO, method=BAR, source=...) VSP->>SAP: GetClassMethods() → find BAR boundaries VSP->>SAP: GetClassSource() → full class Note over VSP: Replace lines 42-58
with new METHOD block VSP->>SAP: SyntaxCheck(full reconstructed source) VSP->>SAP: Lock → UpdateSource → Unlock → Activate VSP->>LLM: ✓ Method BAR updated, class activated ``` AI 仅发送/接收方法块(约 30 行)。vsp 内部获取完整类,在正确行范围拼接新方法,验证后推回。**相比完整类往返,token 减少 95%**。 **上下文压缩也作用于方法级别**——读取单个方法时,依赖分析仅在该方法的代码上运行,因此前言仅包含与你正在处理的方法相关的类型和接口,而非整个类的依赖树。 | 操作 | 完整类令牌数 | 方法级令牌数 | 节省 | |-----------|:-------------------:|:---------------------:|:-------:| | 读取源码 | ~1,000 | ~50 | **20x** | | 读取 + 上下文 | ~1,600 | ~250 | **6x** | | 编辑往返 | ~2,000 | ~100 | **20x** | ### 原生 Go ABAP 词法分析器 — abaplint 的 Go 实现 [abaplint](https://github.com/abaplint/abaplint) 词法分析器已从 TypeScript 机械式移植到原生 Go(`pkg/abaplint`)。这是驱动 abaplint 的同一词法分析器——48 种令牌类型,6 种词法模式(普通、字符串、反引号、模板、注释、指令 pragma),带有完整的空白上下文编码。 **通过 oracle 基础的差异测试验证** 与真实的 TypeScript abaplint 对比: ``` === DIFFERENTIAL KPI === Files: 29/29 passed (100.0%) Tokens: 22,612 total Full match: 22,612 (100.0%) — str + type + row + col Str match: 22,612 (100.0%) Type match: 22,612 (100.0%) Pos match: 22,612 (100.0%) ``` 零依赖,零 FFI。纯 Go,约 3.5M 令牌/秒,准备就绪用于第 2 阶段的 lint 规则。 ### ABAP LSP — 实时诊断 `vsp lsp --stdio` 为 Claude Code(及其他编辑器)提供 **自动** 错误检测和 ABAP 文件的导航功能。无需显式工具调用——LSP 在每次保存时推送诊断,在文件打开时推送压缩的依赖上下文。 请参考 [LSP 设置](#abap-lsp-for-claude-code) 进行配置。 ### WASM 到 ABAP 编译器(研究阶段) 将 WebAssembly 二进制文件编译为本机 ABAP——高级原型,在选定语料库上已验证。三条路径: ``` .wasm binary → pkg/wasmcomp (Go) → ABAP source files ← AOT compiler .ts source → pkg/ts2abap (Go) → clean OO ABAP classes ← direct transpiler .wasm binary → zcl_wasm_compiler → ABAP (on SAP itself!) ← self-hosting, 785 lines ``` **在 SAP A4H 上的演示:** QuickJS(1,410 个函数)编译为 101K 行 ABAP。abaplint 解析器(26.5MB)编译为 396K 行。自托管编译器解析 WASM,生成 ABAP,并通过 `GENERATE SUBROUTINE POOL` 执行——全部在 SAP 内部完成。这是研究/原型工作,并非生产就绪的工具链。 | 什么 | 大小 | 状态 | |------|:----:|:------:| | QuickJS → ABAP | 101K 行 | 已编译 | | abaplint → ABAP | 396K 行 | 已编译 | | abaplint 词法分析器(TS→ABAP) | 495 行 | 在 SAP 上运行 | | 自托管编译器 | 785 行 | 在 SAP 上运行 | | 批量部署 | `vsp deploy *.clas.abap` | 40 个类,0 次失败 | ### 完整的 CLI 工具链 — 从终端操作 SAP 35+ 条命令。无 SAP GUI,无 Eclipse,无 IDE。多数可与标准 ADT 配合使用;`lint`/`parse`/`compile` 完全离线工作。 ``` # 软件包分析 vsp health --package '$ZDEV' # tests + ATC + boundaries + staleness vsp health --package '$ZDEV' --report html # full HTML report vsp slim '$ZDEV' --level methods # dead code detection vsp api-surface '$ZDEV' --include-subpackages # Clean Core API inventory vsp boundaries '$ZDEV' --format mermaid # boundary crossings (visual) vsp boundaries '$ZDEV' --report dot # Graphviz export vsp changelog '$ZDEV' --since 20260101 # transport history vsp changes '$ZDEV' --attribute SAPTEST # CR-level grouping # 图形与依赖关系 vsp graph CLAS ZCL_FOO --direction callers # who uses this class? vsp graph co-change CLAS ZCL_FOO # transport-based co-change vsp graph where-used-config ZKEKEKE # TVARVC readers (heuristic) # 源代码与编辑 vsp source CLAS ZCL_MY_CLASS # read source vsp source CLAS ZCL_MY_CLASS --method GET_DATA # read single method vsp context CLAS ZCL_FOO --depth 2 # source + dependency contracts vsp analyze ZCL_MY_CLASS # 13 lint rules (offline) # 表格与搜索 vsp query T000 --top 5 # query any table vsp search "ZCL_*" --type CLAS --max 50 # object search vsp grep "SELECT.*mara" --package '$TMP' # source code search # 测试与质量 vsp test --package '$ZDEV' # run unit tests vsp atc CLAS ZCL_MY_CLASS # ATC code check # 部署与工具 vsp deploy zcl_test.clas.abap '$TMP' # deploy file to SAP vsp export '$ZORK' '$ZLLM' -o packages.zip # export abapGit ZIP vsp install abapgit # install abapGit on SAP vsp install zadt-vsp # install ZADT_VSP handler # 离线工具 vsp lint --file myclass.clas.abap # offline ABAP linter vsp parse --stdin --format json < source.abap # ABAP parser vsp compile wasm program.wasm --class ZCL_DEMO # WASM→ABAP compiler ``` 请参考 **[CLI 指南](docs/cli-guide.md)** 获取完整参考和功能需求矩阵。 ### 其他亮点 - **Lua 脚本引擎**:`vsp lua` — 交互式 REPL + 脚本,支持 50+ 个 SAP 绑定。查询表、扫描代码、解析 ABAP、设置断点、记录执行、回放状态。参见 [示例脚本](examples/scripts/)。 - **YAML 工作流**:`vsp workflow run pipeline.yaml` — CI/CD 自动化,支持变量替换、步骤串联和错误处理。参见 [示例工作流](examples/workflows/)。 - **从 CLI 引导**:`vsp install abapgit` + `vsp install zadt-vsp` — 直接从命令行将依赖项部署到 SAP 系统。无需 SAP GUI。 ## 核心功能 | 功能 | 描述 | |---------|-------------| | **包健康** | `vsp health` — 测试、ATC、边界跨越、陈旧度整合在一个报告(文本/MD/HTML) | | **死代码检测** | `vsp slim` — 通过 WBCROSSGT 反向引用进行方法级死/内/活跃分类 | | **边界分析** | `vsp boundaries` — 方向边界跨越(UPWARD/SIBLING/DOWNWARD/EXTERNAL/CIRCULAR) | | **副作用检测** | 数据库读/写、COMMIT/ROLLBACK、UPDATE 任务、RFC、异步 — LUW 分类 | | **传输历史** | `vsp changelog` + `vsp changes` — 传输关联和 CR 级分组 | | **API 表面** | `vsp api-surface` — 清洁核心清单:你的代码使用了哪些标准 API? | | **图形导出** | 7 种格式:mermaid、HTML、DOT(Graphviz)、PlantUML、GraphML(Gephi)、JSON、MD | | **静态分析** | `vsp analyze` — 纯 Go 实现的 13 条 lint 规则,无外部依赖 | | **聚焦模式** | 1 个通用 SAP 工具,**约 200 个令牌**,相比 147 个工具的 ~40K 显著减少 | | **上下文压缩** | 自动压缩依赖契约 — 7–30 倍压缩,内置 ABAP 解析器 | | **方法级手术** | 读取/编辑单个方法 — 相比完整类往返节省 95% token | | **ABAP LSP** | 内置语言服务器 — 实时诊断、转到定义、上下文推送 | | **AI 调试器** | 断点、监听器、附加、单步、检视堆栈与变量 | | **RAP OData E2E** | 创建 CDS 视图、行为定义、服务定义、绑定 → 发布 OData 服务 | | **AI 根因分析** | 转储、跟踪、性能分析器 + 代码智能的根原因分析 | | **DSL 与工作流** | 流畅的 Go API + YAML 自动化,用于 CI/CD 流水线 | | **文件部署** | 绕过令牌限制 — 直接从文件系统部署大文件 | | **精准编辑** | `EditSource` 工具匹配 Claude 的编辑模式,实现精确变更 | ## 快速开始 ``` #Download binary from releases curl -LO https://github.com/oisee/vibing-steampunk/releases/latest/download/vsp-linux-amd64 chmod +x vsp-linux-amd64 #Or build from source git clone https://github.com/oisee/vibing-steampunk.git && cd vibing-steampunk make build ``` ### Windows 11 搭配 VS Code + Claude Code 扩展 #### 1. 获取最新的 vsp 发行版: 如果下载可执行文件遇到问题,请使用 `curl -o url` 或 `wget` 下载。将文件命名为 `vsp.exe`。 将文件放入本地文件夹并在 VS Code 中打开该文件夹。 将 vsp 文件夹添加到用户的 `PATH` 环境变量中。可以通过命令行或 Windows 注册表编辑器 `regedit` 完成。将 vsp 文件夹添加到 `KEY_CURRENT_USER\Environment\Path`。 重新启动 VS Code 以识别更新后的 `PATH`,然后继续后续步骤。 #### 2. 初始化配置文件: 在 VS Code 中打开终端,然后运行 `./vsp config init` 以创建配置模板文件: - `.env.example` - `.vsp.json.example` - `.mcp.json.example` #### 3. 调整配置文件: 请务必删除注释行。参考本 `README` 中的示例文件。 #### 4. 设置认证 **基础认证:** 在 `SU01` 中为你的用户设置密码以启用基础认证。生成初始密码,然后再次登录(不使用 SNC/SSO)并更改初始密码。现在可通过配置文件中的基础认证使用 vsp。在 vsp 中设置环境变量 `SAP_USER` 和 `SAP_PASSWORD`。 现在需要获取 SAP 主机名用于 `SAP_URL` 环境变量:登录任意基于 Web 的应用程序(例如 Fiori Launchpad),从浏览器获取 URL。**注意:`SAP_URL` 不是** SAP Logon 中的消息/组服务器! **或者使用 Cookie 认证:** 如果无法为用户设置密码,仍可使用 Cookie 认证访问 SAP 系统。 手动提取 Cookie 并保存为 `cookies.txt` 到 vsp 文件夹。使用 Cookie `SAP_SESSIONID_SYS_CLI` 和 `sap-usercontext`,针对之前确定的 URL(注意:使用 `https://` 前缀进行安全连接)。参考下方指南了解如何从浏览器手动提取 Cookie。 **模板 Cookie 文件:** ``` # Netscape HTTP Cookie 文件 # https://curl.haxx.se/rfc/cookie_spec.html https://your.domain.com FALSE / TRUE 0 SAP_SESSIONID_SYS_CLI YOUR_CONTENT https://your.domain.com FALSE / TRUE 0 sap-usercontext YOUR_CONTENT ``` 将主机名替换为 `SYS`(例如 DS1)和客户端编号替换为 `CLI`(例如 100)。 **对于 BTP/Cloud 系统:** 使用 Cookie `__VCAP_ID__` 和 `JSESSIONID`,域名设为 `https://xyz.ondemand.com`。这也适用于 BTP 试用账户。另请参考[本文](https://medium.com/@warren_eiserman/vibe-steam-punk-vsp-for-abap-cloud-mac-claude-2864d601978f)。 **从浏览器会话获取 Cookie:** 最简单的方法是使用 Edge,因为它允许从设置页面查看 Cookie 内容。打开任意 WebDynpro 或 Fiori Launchpad 交易。对于旧版环境(如 ECC),BRF+ 交易在浏览器中打开时也应适用。登录后按以下步骤操作: 在 Edge 中,转到 `设置 > 隐私、搜索和服务 > Cookie > 查看所有 Cookie 和网站数据`。搜索你的顶级域名。应有该系统的两个 Cookie(如上所述,`SAP_SESSIONID` 和 `sap-usercontext` 或 `VCAP_ID` 和 `JSESSIONID` 如果系统基于云)。将每个 Cookie 的内容值复制到本地文件并保存。 创建的 Cookie 是会话 Cookie。它们最终会因超时而过期,`cookies.txt` 中的值需要更新。通常 Claude 会提示是否需要更新。 #### 5. 测试连接: 在终端中运行命令:`./vsp -s dev search "zcl_*" --type CLAS --max 50`。 如果连接建立成功,将会弹出找到的物件列表。 ## CLI 编码代理 VSP 支持 **8 个 CLI 编码代理**——不仅仅是 Claude!完整设置指南和配置模板如下: | 代理 | 模型访问 | 可用性 | 配置 | |-------|--------------|--------------|--------| | **Gemini CLI** | Gemini 模型 | 免费层级可用;付费/API 支持也可用 | `.gemini/settings.json` | | **Claude Code** | Claude 模型 | 付费使用或订阅支持 | `.mcp.json` | | **GitHub Copilot** | 多模型(取决于计划) | 免费层级可用;付费计划解锁更多限制/模型 | `.copilot/mcp-config.json` | | **OpenAI Codex** | OpenAI 编码模型 / ChatGPT 关联访问 | 有限或计划依赖访问;API 使用也可用 | `codex.toml` | | **Qwen Code** |wen 模型 | 免费层级可用;BYOK/API 支持也可用 | `.qwen/settings.json` | | **OpenCode** | 多提供方 BYOK | 取决于你的提供方/账户 | `opencode.json` | | **Goose** | 多提供方 BYOK | 取决于你的提供方/账户 | `~/.config/goose/config.yaml` | | **Mistral Vibe** | Mistral API 或本地模型 | 本地/Ollama 路径可能免费;API 使用按提供方计费 | `.vibe/config.toml` | 可用性、定价和模型阵容变化迅速。使用前请查阅代理指南和官方产品文档,不要将限制或计划声明复制到下游文档。 **[完整设置指南(含配置示例)](docs/cli-agents/README.md)** | [Русский](docs/cli-agents/README_RU.md) | [Українська](docs/cli-agents/README_UA.md) | [Español](docs/cli-agents/README_ES.md) 关于新的图形分析功能,请参考 **[图形指南](docs/graph-guide.md)**。 ## CLI 模式 vsp 以两种模式运行: 1. **MCP 服务器模式**(默认)——通过模型上下文协议为 Claude 公开工具 2. **CLI 模式**——直接命令行操作,无需 MCP ### CLI 命令 ``` # 源操作 vsp -s a4h source CLAS ZCL_MY_CLASS # read source vsp -s a4h source read CLAS ZCL_MY_CLASS # same, explicit vsp -s a4h source write CLAS ZCL_FOO < file.abap # write from stdin vsp -s a4h source edit CLAS ZCL_FOO --old "X" --new "Y" # surgical edit vsp -s a4h source context CLAS ZCL_FOO # source + dependency contracts vsp -s a4h context CLAS ZCL_FOO # shortcut for above # 搜索 vsp -s a4h search "ZCL_*" vsp -s dev search "Z*ORDER*" --type CLAS --max 50 # 图形分析 vsp -s a4h graph CLAS ZCL_FOO # call graph vsp -s a4h graph co-change CLAS ZCL_FOO # transport-based co-change vsp -s a4h graph co-change PROG ZREPORT --format json vsp -s a4h graph where-used-config ZKEKEKE # TVARVC readers (heuristic) vsp -s a4h graph where-used-config ZKEKEKE --format mermaid > config.mmd # 测试与代码质量 vsp -s a4h test CLAS ZCL_MY_CLASS # run unit tests vsp -s a4h test --package '$TMP' # package-level tests vsp -s a4h atc CLAS ZCL_MY_CLASS # ATC code check # 部署 vsp -s a4h deploy zcl_test.clas.abap '$TMP' # deploy file to SAP vsp -s a4h export '$ZORK' '$ZLLM' -o packages.zip # export abapGit ZIP # 引导 SAP 系统(无需 SAP GUI) vsp -s a4h install abapgit # install abapGit vsp -s a4h install zadt-vsp # install ZADT_VSP handler vsp -s a4h install abapgit --edition full # full dev edition (576 objects) vsp -s a4h install list # show installable components # 传输管理 vsp -s a4h transport list # list transports vsp -s a4h transport get A4HK900094 # transport details # 系统管理 vsp systems # list configured systems vsp config init # create example configs # 启动 ABAP LSP 服务器(适用于 Claude Code / 编辑器) vsp lsp --stdio ``` 图形 MVP 亮点: - `vsp graph co-change ` 用于基于传输的共变分析 - `vsp graph where-used-config ` 用于启发式 TVARVC 使用分析 - `SAP(action="analyze", params={"type":"co_change", ...})` 用于 MCP 共变分析 - `SAP(action="analyze", params={"type":"impact", ...})` 用于反向依赖影响 - `SAP(action="analyze", params={"type":"where_used_config", ...})` 用于 MCP TVARVC 使用 ### 系统配置文件(`.vsp.json`) 在 `.vsp.json` 中配置多个 SAP 系统: ``` { "default": "dev", "systems": { "dev": { "url": "http://dev.example.com:50000", "user": "DEVELOPER", "client": "001" }, "a4h": { "url": "http://a4h.local:50000", "user": "ADMIN", "client": "001", "insecure": true }, "prod": { "url": "https://prod.example.com:44300", "user": "READONLY", "client": "100", "read_only": true, "cookie_file": "/path/to/cookies.txt" } } } ``` **密码解析:** - 通过环境变量设置:`VSP__PASSWORD`(例如 `VSP_DEV_PASSWORD`) - 或使用 Cookie 认证:`cookie_file` 或 `cookie_string` **配置位置**(按顺序搜索): 1. `.vsp.json`(当前目录) 2. `.vsp/systems.json` 3. `~/.vsp.json` 4. `~/.vsp/systems.json`
MCP 服务器配置 ### CLI 标志 ``` vsp --url https://host:44300 --user admin --password secret vsp --url https://host:44300 --cookie-file cookies.txt vsp --mode expert # Enable all 147 tools vsp --mode hyperfocused # Single SAP tool (~200 tokens instead of ~40K) ``` ### 环境变量 ``` export SAP_URL=https://host:44300 export SAP_USER=developer export SAP_PASSWORD=secret export SAP_CLIENT=001 ``` ### .env 文件 ``` # .env(从当前目录自动加载) SAP_URL=https://host:44300 SAP_USER=developer SAP_PASSWORD=secret ``` | 标志 | 环境变量 | 描述 | |------|--------------|-------------| | `--url` | `SAP_URL` | SAP 系统 URL | | `--user` | `SAP_USER` | 用户名 | | `--password` | `SAP_PASSWORD` | 密码 | | `--client` | `SAP_CLIENT` | 客户端(默认:001) | | `--mode` | `SAP_MODE` | `hyperfocused`(推荐)、`focused` 或 `expert` | | `--cookie-file` | `SAP_COOKIE_FILE` | Netscape Cookie 文件 | | `--insecure` | `SAP_INSECURE` | 跳过 TLS 验证 | | `--terminal-id` | `SAP_TERMINAL_ID` | SAP GUI 终端 ID,用于跨工具调试 | | `--allow-transportable-edits` | `SAP_ALLOW_TRANSPORTABLE_EDITS` | 启用可传输对象的编辑 | | `--allowed-transports` | `SAP_ALLOWED_TRANSPORTS` | 白名单传输(支持通配符:`A4HK*`) | | `--allowed-packages` | `SAP_ALLOWED_PACKAGES` | 白名单包(支持通配符:`Z*,$TMP`) |
## 与 Claude 配合使用 ### Claude 桌面 添加到 `~/.config/claude/claude_desktop_config.json`: ``` { "mcpServers": { "abap-adt": { "command": "/path/to/vsp", "env": { "SAP_URL": "https://your-sap-host:44300", "SAP_USER": "your-username", "SAP_PASSWORD": "your-password" } } } } ``` ### Claude Code 将 `.mcp.json` 添加到你的项目: ``` { "mcpServers": { "abap-adt": { "command": "/path/to/vsp", "env": { "SAP_URL": "https://your-sap-host:44300", "SAP_USER": "your-username", "SAP_PASSWORD": "your-password" } } } } ``` ### ABAP LSP(用于 Claude Code) vsp 包含内置的 LSP 服务器,为 Claude Code 提供 **自动** 错误检测(编辑 ABAP 文件时无需显式工具调用)。 **添加到 Claude Code 设置**(`.claude/settings.json` 或全局设置): ``` { "lsp": { "abap": { "command": "vsp", "args": ["lsp", "--stdio"], "extensionToLanguage": { ".abap": "abap", ".asddls": "abap", ".asbdef": "abap" } } } } ``` SAP 凭据从环境变量或 `.env` 文件解析——与 MCP 模式相同。 **支持的 LSP 功能:** | 功能 | 方法 | 来源 | |---------|--------|--------| | 实时语法错误 | `textDocument/publishDiagnostics` | ADT SyntaxCheck | | 转到定义 | `textDocument/definition` | ADT FindDefinition | **支持的文件模式**(遵循 abapGit 命名约定): | 扩展名 | 对象类型 | |-----------|-------------| | `.clas.abap` | 类(主源码) | | `.clas.testclasses.abap` | 类测试包含 | | `.clas.locals_def.abap` | 类局部定义 | | `.prog.abap` | 程序 / 报告 | | `.intf.abap` | 接口 | | `.fugr.abap` | 函数组 | | `.ddls.asddls` | CDS 视图 | 命名空间约定(`#dmo#cl_flight.clas.abap` → `/DMO/CL_FLIGHT`)自动处理。 ### 可传输包配置 要与可传输包(非 `$` 前缀)配合使用,**必须** 显式启用传输支持: ``` { "mcpServers": { "abap-adt": { "command": "/path/to/vsp", "env": { "SAP_URL": "https://your-sap-host:44300", "SAP_USER": "your-username", "SAP_PASSWORD": "your-password", "SAP_CLIENT": "001", "SAP_ALLOW_TRANSPORTABLE_EDITS": "true", "SAP_ALLOWED_TRANSPORTS": "DEVK*,A4HK*", "SAP_ALLOWED_PACKAGES": "ZPROD,$TMP,$*,Z*" } } } } ``` | 环境变量 | 用途 | |-------------|---------| | `SAP_ALLOW_TRANSPORTABLE_EDITS` | 启用编辑可传输对象 | | `SAP_ENABLE_TRANSPORTS` | 启用完整传输管理(创建、发布) | | `SAP_ALLOWED_TRANSPORTS` | 白名单传输模式(支持通配符) | | `SAP_ALLOWED_PACKAGES` | 白名单包模式(支持通配符) | **使用 CreatePackage 并带软件组件:** ``` CreatePackage( name="ZPROD_005", description="Sub-package", parent="ZPROD", transport="DEVK900123", software_component="HOME" ) ``` 未启用这些标志时,对可传输包的操作将被安全系统阻止。 ## 工具模式 一个轴,三个值——`--mode` 或 `SAP_MODE`: ``` graph LR F["focused
100 tools
~14K tokens"] --> E["expert
147 tools
~40K tokens"] E --> H["hyperfocused
1 tool
~200 tokens
recommended"] style H fill:#2d6a4f,color:#fff,stroke:#4ade80,stroke-width:2px style F fill:#264653,color:#fff style E fill:#264653,color:#fff ``` | 方面 | 聚焦 | 专家 | 聚焦(推荐) | |--------|:-:|:-:|:-:| | **工具** | 100 个核心工具 | 147 个完整工具 | 1 个通用 `SAP()` | | **架构令牌** | ~14K | ~40K | **~200** | | AI 调用方式 | `GetSource(type, name)` | 同上,+ 细粒度工具 | `SAP(action, target, params)` | | 文档 | 工具架构 | 工具架构 | `SAP(action="help")` | | 适用场景 | 传统环境 | 边缘情况、调试 | **大多数环境——任意模型,开销最小** | | 安全控制 | 全部适用 | 全部适用 | 全部适用(相同代码路径) | ``` vsp --mode hyperfocused # recommended — single SAP(action, target, params) tool vsp --mode focused # 100 curated tools (individual tool names) vsp --mode expert # all 147 tools individually ``` ## DSL 与自动化 ### YAML 工作流 ``` # ci-pipeline.yaml name: CI Pipeline vars: package: "$TMP" steps: - action: search query: "ZCL_*" types: [class] package: "{{ .package }}" save_as: classes - action: test objects: "{{ .classes }}" parallel: 4 - action: fail_if condition: tests_failed message: "Unit tests failed" ``` ``` vsp workflow run ci-pipeline.yaml --var package='$ZRAY' ``` ### Go 库 ``` // Fluent search objects, _ := dsl.Search(client). Query("ZCL_*").Classes().InPackage("$TMP").Execute(ctx) // Test orchestration summary, _ := dsl.Test(client). Objects(objects...).Parallel(4).Run(ctx) // Batch import from directory (abapGit-compatible) result, _ := dsl.Import(client). FromDirectory("./src/"). ToPackage("$ZRAY"). RAPOrder(). // DDLS → BDEF → Classes → SRVD Execute(ctx) // Export classes with all includes result, _ := dsl.Export(client). Classes("ZCL_TRAVEL", "ZCL_BOOKING"). ToDirectory("./backup/"). Execute(ctx) // RAP deployment pipeline pipeline := dsl.RAPPipeline(client, "./src/", "$ZRAY", "ZTRAVEL_SB") ``` 请参考 [docs/DSL.md](docs/DSL.md) 获取完整文档。 ## RAP OData 服务创建 自 v2.6.0 起,VSP 支持完整的 RAP OData E2E 开发。通过 AI 助手创建完整的 OData 服务: ### 逐步工作流 **1. 创建 CDS 视图(DDLS)** ``` WriteSource( object_type="DDLS", name="ZTRAVEL", package="$TMP", description="Travel Entity", source=` @EndUserText.label: 'Travel' @AccessControl.authorizationCheck: #NOT_REQUIRED define root view entity ZTRAVEL as select from ztravel_tab { key travel_id as TravelId, description as Description, start_date as StartDate, end_date as EndDate, status as Status } ` ) ``` **2. 创建行为定义(BDEF)** ``` WriteSource( object_type="BDEF", name="ZTRAVEL", package="$TMP", description="Travel Behavior", source=` managed implementation in class ZBP_TRAVEL unique; strict ( 2 ); define behavior for ZTRAVEL alias Travel persistent table ztravel_tab lock master authorization master ( instance ) { field ( readonly ) TravelId; field ( mandatory ) Description; create; update; delete; mapping for ztravel_tab { TravelId = travel_id; Description = description; StartDate = start_date; EndDate = end_date; Status = status; } } ` ) ``` **3. 创建服务定义(SRVD)** **4. 创建服务绑定(SRVB)** ``` WriteSource( object_type="SRVB", name="ZTRAVEL_SB", package="$TMP", description="Travel OData V4 Binding", service_definition="ZTRAVEL_SD", binding_version="V4" ) ``` ### 绑定选项 | 参数 | 值 | 描述 | |-----------|--------|-------------| | `binding_version` | `V2`、`V4` | OData 协议版本 | | `binding_category` | `0`、`1` | `0`=Web API,`1`=UI | ### 针对可传输包 对所有 WriteSource 调用添加 `transport` 参数: ``` WriteSource( object_type="DDLS", name="ZTRAVEL", package="ZPROD", transport="DEVK900123", ... ) ``` ### 相关文档 - [RAP OData 课程报告](reports/2025-12-08-003-rap-odata-service-lessons.md) - DSL 流水线:`dsl.RAPPipeline(client, "./src/", "$PKG", "ZSRV_SB")` ## ExecuteABAP 通过单元测试包装器运行任意 ABAP 代码: ``` ExecuteABAP: code: | DATA(lv_msg) = |Hello from SAP at { sy-datum }|. lv_result = lv_msg. ``` **风险等级:** `harmless`(只读)、`dangerous`(写)、`critical`(完全访问) 请参考 [ExecuteABAP 报告](reports/2025-12-05-004-execute-abap-implementation.md) 获取详细信息。 ## AI 驱动的根原因分析 VSP 使 AI 助手能够自主调查生产问题: ``` User: "Investigate the ZERODIVIDE crash in production" AI Workflow: 1. GetDumps → Find recent crashes by exception type 2. GetDump → Analyze stack trace and variable values 3. GetSource → Read code at crash location 4. GetCallGraph → Trace call hierarchy 5. GrepPackages → Find similar patterns 6. Analysis → Identify root cause 7. Propose Fix → Generate solution + test case ``` **示例输出:** 请参考 [AI 驱动的根原因分析工作流](reports/2025-12-05-013-ai-powered-rca-workflows.md) 获取完整流程。 ## 工具参考 **聚焦模式工具(100 个):** - **搜索:** SearchObject、GrepObjects、GrepPackages - **读取:** GetSource、GetTable、GetTableContents、RunQuery、GetPackage、GetFunctionGroup、GetCDSDependencies - **调试:** DebuggerListen、DebuggerAttach、DebuggerDetach、DebuggerStep、DebuggerGetStack、DebuggerGetVariables - *注意:断点现在通过 WebSocket 管理(ZADT_VSP)* - **写入:** WriteSource、EditSource、ImportFromFile、ExportToFile、MoveObject - **开发:** SyntaxCheck、RunUnitTests、RunATCCheck、LockObject、UnlockObject - **智能:** FindDefinition、FindReferences、GetContext - **系统:** GetSystemInfo、GetInstalledComponents、GetCallGraph、GetObjectStructure、GetFeatures - **诊断:** GetDumps、GetDump、ListTraces、GetTrace、GetSQLTraceState、ListSQLTraces - **Git:** GitTypes、GitExport(需要 abapGit 在 SAP 中) - **报告:** RunReport、GetVariants、GetTextElements、SetTextElements - **安装:** InstallZADTVSP、InstallAbapGit、ListDependencies 请参考 [README_TOOLS.md](README_TOOLS.md) 获取完整工具文档(147 个工具)。
能力矩阵 | 能力 | ADT (Eclipse) | abap-adt-api (TS) | **vsp** | |------------|:-------------:|:-----------------:|:-------:| | 程序、类、接口 | Y | Y | **Y** | | 函数、函数组 | Y | Y | **Y** | | 表、结构 | Y | Y | **Y** | | CDS 视图 | Y | Y | **Y** | | 语法检查、激活 | Y | Y | **Y** | | 单元测试 | Y | Y | **Y** | | CRUD 操作 | Y | Y | **Y** | | 查找定义/引用 | Y | Y | **Y** | | 代码补全 | Y | Y | **Y** | | ATC 检查 | Y | Y | **Y** | | 调用图 | Y | Y | **Y** | | 系统信息 | Y | Y | **Y** | | 精准编辑(Edit pattern) | - | - | **Y** | | 文件部署 | - | - | **Y** | | ExecuteABAP | - | - | **Y** | | RAP OData(DDLS/SRVD/SRVB) | Y | - | **Y** | | OData 服务发布 | Y | - | **Y** | | abapGit 导出 | Y | - | **Y**(WebSocket) | | 调试 | Y | Y | N |
## 致谢 | 项目 | 作者 | 贡献 | |-------|--------|--------------| | [abap-adt-api](https://github.com/marcellourbani/abap-adt-api) | Marcello Urbani | TypeScript ADT 库,权威 API 参考 | | [mcp-abap-adt](https://github.com/mario-andreschak/mcp-abap-adt) | Mario Andreschak | 第一个用于 ABAP ADT 的 MCP 服务器 | **vsp** 是 Go 重写版,具备: - 单一二进制文件,零依赖 - 147 个工具(相比原始的 13 个) - 启动速度快约 50 倍 ## 可选:WebSocket 处理器(ZADT_VSP) vsp 可选择性地部署一个 WebSocket 处理器到 SAP,用于增强功能(如 RFC 调用): ``` # 1. 创建软件包 vsp CreatePackage --name '$ZADT_VSP' --description 'VSP WebSocket Handler' # 2. 部署对象(嵌入在二进制文件中) vsp WriteSource --object_type INTF --name ZIF_VSP_SERVICE --package '$ZADT_VSP' \ --source "$(cat embedded/abap/zif_vsp_service.intf.abap)" vsp WriteSource --object_type CLAS --name ZCL_VSP_RFC_SERVICE --package '$ZADT_VSP' \ --source "$(cat embedded/abap/zcl_vsp_rfc_service.clas.abap)" vsp WriteSource --object_type CLAS --name ZCL_VSP_APC_HANDLER --package '$ZADT_VSP' \ --source "$(cat embedded/abap/zcl_vsp_apc_handler.clas.abap)" # 3. 在 SAPC 中手动创建 APC 应用程序并在 SICF 中激活 # 详细信息请参见 embedded/abap/README.md ``` **部署后,通过 WebSocket 连接调用 RFC:** ``` {"id":"1","domain":"rfc","action":"call","params":{"function":"BAPI_USER_GET_DETAIL","USERNAME":"TESTUSER"}} ``` 请参考 [WebSocket 处理器报告](reports/2025-12-18-002-websocket-rfc-handler.md) 获取完整文档。 ## 文档 | 文档 | 描述 | |----------|-------------| | [docs/architecture.md](docs/architecture.md) | 架构图(Mermaid) | | [README_TOOLS.md](README_TOOLS.md) | 完整工具参考(94 个工具) | | [MCP_USAGE.md](MCP_USAGE.md) | AI 代理使用指南 | | [docs/DSL.md](docs/DSL.md) | DSL 与工作流文档 | | [ARCHITECTURE.md](ARCHITECTURE.md) | 技术架构(详细) | | [CLAUDE.md](CLAUDE.md) | AI 开发指南 | | [embedded/abap/README.md](embedded/abap/README.md) | WebSocket 处理器部署 | | [docs/cli-agents/](docs/cli-agents/README.md) | CLI 编码代理设置指南(8 个代理,4 种语言) | | [Roadmap: Quick/Mid/Far Wins](reports/2026-01-02-005-roadmap-quick-mid-far-wins.md) | 优先功能路线图 | | [Observations Since v2.12.5](reports/2025-12-22-observations-since-v2.12.5.md) | 近期变更与研究总结 |
SQL 查询说明 使用 **ABAP SQL 语法**,而非标准 SQL: | 特性 | 状态 | |---------|--------| | `ORDER BY col ASCENDING` | 可用 | | `ORDER BY col DESCENDING` | 可用 | | `ORDER BY col ASC/DESC` | **失败** — 请使用 ASCENDING/DESCENDING | | `LIMIT n` | **失败** — 请使用 `max_rows` 参数 |
## 开发 ``` # 构建 make build # Current platform make build-all # All 9 platforms # 测试 go test ./... # Unit tests (821) go test -tags=integration -v ./pkg/adt/ # Integration tests (34+) ```
架构 ``` vibing-steampunk/ ├── cmd/vsp/main.go # CLI (cobra/viper) ├── pkg/adt/ │ ├── client.go # ADT client + read ops │ ├── crud.go # CRUD operations │ ├── devtools.go # Syntax check, activate, tests │ ├── codeintel.go # Definition, refs, completion │ ├── workflows.go # High-level workflows │ └── http.go # HTTP transport (CSRF, auth) ├── internal/mcp/server.go # MCP tool handlers (147 tools) ├── internal/lsp/ # ABAP LSP server (diagnostics, go-to-def) └── pkg/dsl/ # DSL & workflow engine ```
## 项目状态 | 指标 | 值 | |--------|-------| | **工具** | 147(100 个聚焦,147 个专家) | | **单元测试** | 821 | | **平台** | 9(Linux、macOS、Windows × amd64/arm64/386) |
路线图 ### 已完成(v2.15.0) - [x] DSL & 工作流引擎 - [x] CDS 依赖分析(`GetCDSDependencies`) - [x] ATC 代码质量检查(`RunATCCheck`) - [x] ExecuteABAP(通过单元测试进行代码注入) - [x] 系统信息与组件(`GetSystemInfo`、`GetInstalledComponents`) - [x] 调用图与对象结构(`GetCallGraph`、`ObjectStructure`) - [x] 小转储 / 运行时错误 — `GetDumps`、`GetDump`(RABAX) - [x] ABAP 性能分析 / 跟踪 — `ListTraces`、`GetTrace`(ATRA) - [x] SQL 跟踪 — `GetSQLTraceState`、`ListSQLTraces`(ST05) - [x] **RAP OData E2E** — DDLS、SRVD、SRVB 创建 + 发布(v2.6.0) - [x] **外部断点** — 行、异常、语句、消息(v2.7.0) - [x] **调试会话** — 监听器、附加、分离、单步、堆栈、变量(v2.8.0) - [x] **工具组禁用** — `--disabled-groups 5THD`(v2.10.0) - [x] **UI5/BSP 读取** — `UI5ListApps`、`UI5GetApp`、`UI5GetFileContent`(v2.10.1) - [x] **功能检测** — `GetFeatures` 工具 + 系统能力探测(v2.12.4) - [x] **WriteSource SRVB** — 通过统一 API 创建服务绑定(v2.12.4) - [x] **调用图 & RCA** — GetCallersOf、GetCalleesOf、TraceExecution(v2.13.0) - [x] **Lua 脚本** — REPL、40+ 绑定、调试会话管理(v2.14.0) - [x] **WebSocket 调试** — ZADT_VSP 处理器、TPDAPI 集成(v2.15.0) - [x] **强制重放** — 变量历史、状态注入(v2.15.0) ### 搁置(需要进一步工作) - [ ] **AMDP 调试器** — 实验性:会话已建立,断点触发中([报告](reports/2025-12-22-001-amdp-debugging-investigation.md)) - [ ] **UI5/BSP 写入** — ADT 文件存储为只读,需要自定义插件通过 `/UI5/CL_REPOSITORY_LOAD` - [x] **abapGit 导出** — WebSocket 集成完成(v2.16.0)— GitTypes、GitExport 工具([报告](reports/2025-12-23-002-abapgit-websocket-integration-complete.md)) - [ ] **abapGit 导入** — 需要 `ZCL_ABAPGIT_OBJECTS=>deserialize` 与虚拟存储库 ### 已完成(v2.36.0) - [x] API 发布状态(ARS)— `GetAPIReleaseState` 工具用于 Clean Core 合规性检查 - [x] gCTS 集成 — 10 个工具用于 gCTS 仓库管理 - [x] i18n 工具 — 7 个工具用于翻译管理,支持按请求语言覆盖 - [x] 浏览器 SSO — `--browser-auth` 用于 Kerberos/SAML/Keycloak 认证 - [x] HTTP 流式传输传输 — `--transport http` 用于非 stdio 部署 - [x] mcp-go v0.47.0 — 最新 MCP SDK ### 计划中 - [ ] 消息服务器日志 - [ ] 后台作业管理 ### 未来考虑 - [ ] **AMDP 会话持久化**(启用完整 HANA 调试) - [ ] **图形引擎与边界分析** — 初步实现位于 `pkg/graph/`(边界分析、动态调用检测、11 个测试);SQL/ADT 适配器待完成 - [ ] **测试智能**(基于变更的智能测试执行) - [ ] **标准 API 表面刮削器** **研究报告:** - [AMDP 会话架构](reports/2025-12-05-019-amdp-session-architecture.md) — 会话绑定分析与解决方案 - [原生 ADT 功能](reports/2025-12-05-005-native-adt-features-deep-dive.md) — 全面 ADT 能力分析 - [ADT 调试器 API](reports/2025-12-05-012-adt-debugger-api-deep-dive.md) — 外部调试 REST API - [AI 驱动的根原因分析](reports/2025-12-05-013-ai-powered-rca-workflows.md) — 借助代码智能的根原因分析愿景 ## Lua 脚本(v2.14 新功能) 使用 Lua 脚本自动化调试工作流: ``` # 交互式 REPL vsp lua # 运行脚本 vsp lua examples/scripts/debug-session.lua # 执行内联 vsp lua -e 'print(json.encode(searchObject("ZCL_*", 10)))' ``` **示例:设置断点并调试** ``` -- Set breakpoint local bpId = setBreakpoint("ZTEST_PROGRAM", 42) print("Breakpoint: " .. bpId) -- Wait for debuggee local event = listen(60) if event then attach(event.id) print("Stack:") for i, frame in ipairs(getStack()) do print(" " .. frame.program .. ":" .. frame.line) end stepOver() detach() end ``` **可用函数:** - **搜索:** `searchObject`、`grepObjects` - **源码:** `getSource`、`writeSource`、`editSource` - **调试:** `setBreakpoint`、`listen`、`attach`、`detach`、`stepOver`、`stepInto`、`stepReturn`、`continue_`、`getStack`、`getVariables` - **检查点:** `saveCheckpoint`、`getCheckpoint`、`listCheckpoints`、`injectCheckpoint` - **诊断:** `getDumps`、`getDump`、`runUnitTests`、`syntaxCheck` - **调用图:** `getCallGraph`、`getCallersOf`、`getCalleesOf` - **实用工具:** `print`、`sleep`、`json.encode`、`json.decode` 请参考 `examples/scripts/` 获取更多示例。 ## RCA、重放与测试提取 ### 愿景:AI 驱动的调试流水线 ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ 1. SET BREAKPOINT → 2. RUN PROGRAM → 3. CAPTURE CONTEXT │ │ setBreakpoint() (trigger via saveCheckpoint() │ │ on FM/method unit test/RFC) for each hit │ ├─────────────────────────────────────────────────────────────────────────────┤ │ 4. EXTRACT TEST CASES → 5. AI NORMALIZE → 6. GENERATE UNIT TESTS │ │ inputs + outputs deduplicate, ABAP Unit classes │ │ from checkpoints explain patterns with mocks │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 示例:捕获 FM 执行以生成测试 ``` -- Step 1: Set breakpoint on function module entry local bpId = setBreakpoint("SAPL", 10) -- Entry point -- Step 2: Prepare to capture multiple executions local captures = {} -- Step 3: Loop to capture test cases for i = 1, 10 do local event = listen(120) -- Wait for debuggee if not event then break end attach(event.id) -- Capture input parameters at entry local vars = getVariables() local testCase = { id = i, inputs = extractInputs(vars), -- IV_*, IT_*, IS_* timestamp = os.time() } -- Step to end to capture outputs continue_() local event2 = listen(5) if event2 then attach(event2.id) testCase.outputs = extractOutputs(getVariables()) -- EV_*, ET_*, ES_*, RETURN end -- Save checkpoint for replay saveCheckpoint("testcase_" .. i, testCase) table.insert(captures, testCase) detach() end -- Step 4: Export for AI processing print(json.encode(captures)) ``` ### AI 处理流水线 捕获测试用例后,AI 可以: 1. **归一化与去重** — 分组相似输入,识别唯一场景 2. **解释模式** — “TestCase 3 测试当 IV_AMOUNT < 0 时的错误路径” 3. **生成单元测试** — 创建带有适当 Mock 的 ABAP 单元测试类 ``` User: "Analyze captured test cases and generate unit tests" AI Workflow: 1. Load checkpoints → listCheckpoints("testcase_*") 2. Analyze patterns → Cluster by input signatures 3. Identify edge cases → Empty tables, zero values, error conditions 4. Generate mock specs → Which FMs/DB tables need mocking 5. Create ABAP Unit → ZCL_TEST_ with test methods 6. Deploy tests → WriteSource to SAP system ``` ### 当前可用(v2.14): | 功能 | 状态 | 命令/函数 | |---------|--------|------------------| | 设置断点 | ✅ | `setBreakpoint(program, line)` | | 监听调试器 | ✅ | `listen(timeout)` | | 附加/分离 | ✅ | `attach(id)`, `detach()` | | 单步执行 | ✅ | `stepOver()`, `stepInto()`, `continue_()` | | 获取变量 | ✅ | `getVariables()` | | 获取堆栈跟踪 | ✅ | `getStack()` | | 保存检查点 | ✅ | `saveCheckpoint(name, data)` | | 加载检查点 | ✅ | `getCheckpoint(name)` | | 调用图分析 | ✅ | `getCallersOf()`, `getCalleesOf()` | | 短转储分析 | ✅ | `getDumps()`, `getDump(id)` | ### 即将推出: | 功能 | 阶段 | 描述 | |---------|-------|-------------| | 变量历史记录 | 5.2 | ✅ 跟踪执行期间的所有变量变更 | | 强制重放(状态注入) | 5.5 | ✅ 将保存的状态注入到实时调试会话中 | | 测试用例提取 | 6.1 | 自动提取输入/输出 | | ABAP 测试生成器 | 6.3 | 生成 ABAP 单元测试类 | | Mock 框架 | 6.4 | `ZCL_VSP_MOCK` 用于 DB/RFC Mock | | 隔离沙箱 | 7.1 | 快速测试执行,依赖项 Mock | | 时间旅行调试 | 8.1 | 向后导航执行 | ### 相关文档 | 文档 | 描述 | |----------|-------------| | [VISION.md](VISION.md) | 愿景:AI 作为资深开发者 | | [ROADMAP.md](ROADMAP.md) | 详细实现计划 | | [TAS & Scripting](reports/2025-12-21-001-tas-scripting-time-travel-vision.md) | TAS 风格调试的技术设计 | | [Test Extraction](reports/2025-12-21-002-test-extraction-isolated-replay.md) | 沙箱与 Mock 架构 | | [Force Replay](reports/2025-12-21-003-force-replay-state-injection.md) | 状态设计 | | [**Implications Analysis**](reports/2025-12-21-004-test-extraction-implications.md) | 范式转变:考古学 → 观察 | | [AI-Powered RCA](reports/2025-12-05-013-ai-powered-rca-workflows.md) | 根原因分析工作流 | ## 愿景与路线图 **目标:** TAS 风格调试、时间旅行、AI 驱动的根原因分析 | 阶段 | 目标 | 功能 | |-------|--------|----------| | 5 | Q1 2026 | Lua 脚本 ✅、变量历史记录、检查点、强制重放 | | 6 | Q2 2026 | 测试用例提取、ABAP 测试生成器、Mock 框架 | | 7 | Q3 2026 | 隔离沙箱(带 Mock 的快速测试执行) | | 8 | Q4 2026 | 时间旅行调试、时序查询 | | 9+ | 2027 | AI 建议断点、多智能体调试、自愈 | **阅读更多:** - [VISION.md](VISION.md) — AI 作为资深开发者的梦想 - [ROADMAP.md](ROADMAP.md) — 详细实现计划 - [TAS & Scripting Report](reports/2025-12-21-001-tas-scripting-time-travel-vision.md) — 完整技术设计 - [Test Extraction Report](reports/2025-12-21-002-test-extraction-isolated-replay.md) — 沙箱架构 ## 许可证 MIT ## 贡献 欢迎贡献!请参考 [ARCHITECTURE.md](ARCHITECTURE.md) 和 [CLAUDE.md](CLAUDE.md) 获取指南。
标签:ABAP, ADT, AI工具, AI辅助开发, API表面分析, EVTX分析, Graphviz, MCP, PlantUML, SEO关键词, SOC Prime, Steampunk, Vibe编码, WebSocket, 云安全监控, 代码分析, 传输分析, 依赖分析, 凭证管理, 包健康检查, 包分析, 变更历史, 可视化报告, 开发工具, 方向性依赖, 日志审计, 桥接, 死代码检测, 边界分析, 静态分析, 靶机