ITADN
abapify/adt-cli
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

abapify — SAP 的 ADT CLI 与 SDK

CI adt-cli on npm License: MIT

abapify 是一个 TypeScript monorepo,用于与 SAP ABAP Development Tools (ADT) 通信。 它提供了一个 CLI(adt)、一个用于编程使用的类型化 SDK、一个将 ADT 暴露给 AI 助手的 MCP 服务器, 以及一系列用于常见工作流的 CLI 插件(ATC、abapGit、gCTS、单元测试、diff、export)。

它存在的原因:SAP ADT 是一个功能丰富的 REST 接口,但没有 第一方的 CLI 或 npm SDK。abapify 为你提供了一个——类型化、 可脚本化、CI 友好,且无需离开 JS 生态系统。

快速开始

CLI

# Install
npm i -g @abapify/adt-cli
# or, run it one-shot
npx @abapify/adt-cli --help

# Configure a connection
adt login --url https://your-sap-system.example.com

# Do things
adt search "Z*" --type class
adt get class ZCL_MY_CLASS
adt atc run --package ZMYPKG --output sarif
adt export push ./src        # deploy local source to SAP
adt abapgit push              # serialize & push via abapGit

请参阅 CLI 参考, 了解所有命令和标志。

SDK

npm i @abapify/adt-client @abapify/adt-auth
import { createAdtClient } from '@abapify/adt-client';
import { basicAuth } from '@abapify/adt-auth';

const client = createAdtClient({
  baseUrl: 'https://your-sap-system.example.com',
  auth: basicAuth({ user: 'DEVELOPER', password: process.env.SAP_PASSWORD! }),
});

const classes = await client.repository.nodeContents({
  parent_type: 'DEVC/K',
  parent_name: 'ZMYPKG',
});

MCP 服务器(用于 AI 助手)

# stdio transport
npx @abapify/adt-mcp

# or HTTP transport
docker run --rm -p 3000:3000 ghcr.io/abapify/adt-mcp:latest

每个 CLI 命令都有一个对应的 MCP 工具 — 参见 MCP 文档

文档

完整文档位于 adt-cli.netlify.app

来源:

  • 公开文档 — website/docs/,渲染到上述站点。
  • 维护者文档 — docs/,未渲染(设计笔记、规划、历史)。

软件包

所有已发布的软件包均发布到 npmjs.org 下的 @abapify/*;内部/仅限开发使用的软件包不会发布。 以下已发布的条目包含 npm 徽章;第一列链接到此 monorepo 中的源代码。

CLI 和插件(面向用户)

npm描述
adt-clinpmadt 命令行界面
adt-mcpnpmMCP 服务器 — 向 AI 助手暴露 ADT 工具
adt-atcnpmATC 插件 — 运行 ABAP Test Cockpit,输出 SARIF / GL CQ
adt-aunitnpmABAP 单元测试插件,用于 CI 的 JUnit XML 输出
adt-diffnpmDiff 插件 — 比较本地序列化文件与 SAP
adt-exportnpmExport 插件 — 将本地源代码部署到 SAP
adt-plugin-abapgitnpmabapGit 序列化格式插件
adt-plugin-gctsnpmgCTS (git-enabled CTS) 插件
adt-plugin-gcts-clinpmadt gcts 命令封装,基于 gCTS REST
adt-tuinpm基于 Ink 的终端 UI 原语
adt-pilotnpmabapify Pilot — 用于 ABAP 代码审查的 Mastra AI 智能体
adt-servernpm支持目标地址的 ADT 边车服务,用于 MCP 和安全 REST 访问

SDK 与核心库

npm描述
adt-clientnpm用于 ADT REST API 的契约驱动 HTTP 客户端
adt-contractsnpm类型化的 ADT REST API 契约定义
adt-schemasnpm从 XSD 生成的 SAP ADT XML 模式
adknpmABAP 开发工具包 — 对象构建与序列化
adt-authnpm认证:Basic、SLC、OAuth、浏览器 SSO
adt-confignpmadt.config.ts / .json 的配置加载器
adt-locksnpmADT 对象的锁定/解锁服务
adt-pluginnpm插件接口契约
adt-rfcnpm基于 SOAP-over-HTTP 的 RFC 传输(/sap/bc/soap/rfc
adt-lintnpm共享的 ABAP lint 和源码整形工具
adt-proxynpm支持 JSON↔XML 转换的 ADT 代理服务器
adt-server-clientnpm为 @abapify/adt-server 生成的客户端

身份验证适配器

npm描述
browser-authnpm共享浏览器 SSO 逻辑
adt-playwrightnpmPlaywright SSO 适配器
adt-puppeteernpmPuppeteer SSO 适配器

基础库

npm描述
abap-astnpmABAP 源代码的类型化 AST 和美化打印器
acdsnpmABAP CDS 解析器 — 分词器 + AST
adt-codegennpm基于钩子的代码生成工具包
asjson-parsernpmABAP asJSON 规范格式解析器
loggernpm共享日志记录器接口
openai-codegennpmOpenAPI → ABAP 客户端代码生成器
specinpm箭头函数 REST 契约规范
ts-xsdnpmXSD 解析器、构建器、TypeScript 类型推断
aclassnpmABAP OO 源代码解析器 — CLASS / INTERFACE 声明

仅限开发

这些包是工作区内部的,不会发布到 npm。

npm描述
adt-fixtures用于跨 monorepo 测试的 SAP ADT XML 测试数据

架构

adt-cli  (Commander.js CLI, plugin loader)
  │
  ├── adt-client  (HTTP client, auth interceptor)
  │     ├── adt-contracts  (speci endpoint definitions)
  │     └── adt-schemas    (XSD-derived TypeScript types)
  │
  ├── adk  (ABAP object construction: parse ADT XML → domain objects)
  │
  ├── adt-locks  (lock/unlock service shared with adk, adt-export)
  │
  ├── adt-auth  (session management: basic / SLC / OAuth / browser SSO)
  │     ├── adt-playwright  (Playwright browser adapter)
  │     └── adt-puppeteer   (Puppeteer browser adapter)
  │
  └── plugins  (opt-in command extensions)
        ├── adt-atc          (ATC runs → SARIF / GitLab Code Quality)
        ├── adt-aunit        (ABAP Unit → JUnit XML)
        ├── adt-diff         (local vs SAP diff)
        ├── adt-export       (file system → SAP deploy)
        ├── adt-plugin-abapgit  (abapGit format serialization)
        └── adt-plugin-gcts-cli (gCTS command wrapper)

类型流: SAP XSD 定义 → ts-xsd 生成 schema 字面量 → adt-schemas 导出它们 → adt-contracts 将它们封装在 speci 端点描述符中 → adt-client 在调用点执行并具备完整的类型推断。 这意味着 CLI、SDK 和 MCP 工具都 共享相同的类型契约——只需修复一次 schema,所有调用方都会 获取该更新。

本地开发

要求:Bun(不是 npm、pnpm 或 yarn——该仓库 使用 bun workspaces 和 workspace:* 协议)。

git clone https://github.com/abapify/adt-cli.git
cd adt-cli
bun install

# Common tasks (all nx-driven)
bunx nx build                 # build every package
bunx nx test                  # run every test
bunx nx typecheck             # type-check every package
bunx nx lint                  # lint + auto-fix
bunx nx run adt-cli:test      # single-package

仓库布局

adt-cli/
├── packages/        # Every @abapify/* package lives here
├── samples/         # Example consumer projects
├── tools/           # Internal Nx plugins (nx-tsdown, nx-vitest, nx-npm-trust, …)
├── docs/            # Maintainer docs (not rendered on the site)
├── website/         # Docusaurus site (→ adt-cli.netlify.app)
├── openspec/        # Specs + proposals for in-flight changes
└── tmp/             # Scratch — gitignored

发布流程

npm 端使用 OIDC 可信发布 —— 任何地方都不存在 NPM_TOKEN 密钥。tools/nx-npm-trust 是注册可信发布者的内部插件(请参阅其 README 了解设置 / 引导 流程)。要发布版本,维护者在 GitHub Actions 上触发 Release 工作流;它根据约定式提交计算下一个版本, 打标签、推送,并触发 publish.yml,后者通过 OIDC 发布所有 30 个包。

贡献

git checkout -b feat/my-change
# make changes
bunx nx affected -t build test typecheck lint
git push origin feat/my-change
# open a pull request against main

AI 编码代理使用的约定记录在 AGENTS.md。各包的 AGENTS.md 文件通过包特定的不变量扩展这些规则。

License

MIT