Date: 2025-12-23 Report ID: 002 Subject: Git domain implementation via ZADT_VSP WebSocket handler Status: Complete Version: v2.16.0
VSP now supports abapGit-compatible export of ABAP objects via the ZADT_VSP WebSocket handler. This enables export of 158 object types using abapGit's native serialization, producing ZIP files that are fully compatible with abapGit repositories.
┌─────────────────────────────────────────────────────────────────────────┐
│ vsp (Go Client) │
│ GitTypes() / GitExport() │
│ │ │
│ ▼ │
│ AMDPWebSocketClient.sendGitRequest() │
│ │ │
│ ▼ │
│ JSON Message: {"domain":"git","action":"export","params":{...}} │
└───────────────────────────────┬─────────────────────────────────────────┘
│ WebSocket
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ ZADT_VSP APC Handler (ABAP) │
│ │
│ ZCL_VSP_APC_HANDLER │
│ │ routes to │
│ ▼ │
│ ZCL_VSP_GIT_SERVICE (domain: "git") │
│ │ │
│ ├─► getTypes: ZCL_ABAPGIT_OBJECTS=>supported_list() │
│ │ │
│ └─► export: │
│ 1. Get objects from TADIR │
│ 2. ZCL_ABAPGIT_OBJECTS=>serialize() for each │
│ 3. CL_ABAP_ZIP=>add() files │
│ 4. SSFC_BASE64_ENCODE (ZIP → base64) │
│ 5. Return JSON with base64 ZIP │
└─────────────────────────────────────────────────────────────────────────┘
Since WebSocket/JSON only supports text, binary ZIP data is encoded:
ABAP: xstring (ZIP) ──► SSFC_BASE64_ENCODE ──► string (base64)
│
JSON over WebSocket
│
Go: string (base64) ──► base64.StdEncoding.DecodeString ──► []byte (ZIP)
Overhead: Base64 adds ~33% to payload size (e.g., 23KB ZIP → 31KB base64).
The Git service depends on abapGit being installed on the SAP system:
| Component | Purpose | Required |
|---|---|---|
ZCL_ABAPGIT_OBJECTS |
Object serialization/deserialization | ✅ Yes |
ZCL_ABAPGIT_FACTORY |
Factory for TADIR access | ✅ Yes |
ZIF_ABAPGIT_DEFINITIONS |
Type definitions (ty_tadir, ty_item) | ✅ Yes |
ZCL_ABAPGIT_I18N_PARAMS |
Internationalization parameters | ✅ Yes |
ZCX_ABAPGIT_EXCEPTION |
Exception class | ✅ Yes |
abapGit must be installed via one of:
- abapGit standalone - https://github.com/abapGit/abapGit
- abapGit Developer Edition - SAP standard delivery (S/4HANA 2020+)
VSP detects abapGit availability via GetFeatures tool:
// pkg/adt/features.go
func (p *FeatureProber) ProbeAbapGit(ctx context.Context) FeatureStatus {
// Checks for ZCL_ABAPGIT_OBJECTS class existence
}If abapGit is not installed, Git tools will return an error.
| File | Lines | Purpose |
|---|---|---|
pkg/adt/git.go |
95 | Go WebSocket client for Git operations |
embedded/abap/zcl_vsp_git_service.clas.abap |
397 | ABAP Git service implementation |
| File | Changes |
|---|---|
embedded/abap/zcl_vsp_apc_handler.clas.abap |
Fixed nested JSON parsing, registered git service |
internal/mcp/server.go |
Added GitTypes/GitExport tools (+100 lines) |
Description: Get list of supported abapGit object types
Parameters: none
Returns: List of 158 object types (CLAS, INTF, PROG, DDLS, etc.)
Description: Export ABAP objects as abapGit-compatible ZIP
Parameters:
- packages: Comma-separated package names (e.g., "$ZRAY,$TMP")
- objects: JSON array of objects [{"type":"CLAS","name":"ZCL_TEST"}]
- include_subpackages: Include subpackages (default: true)
Returns: Base64-encoded ZIP with abapGit file structure
Git tools can be disabled via --disabled-groups G:
vsp --disabled-groups G # Disables GitTypes, GitExportThe following object types can be exported via GitExport:
ACID, AIFC, AMSD, APIS, APLO, AQBG, AQQU, AQSG, AREA, ASFC,
AUTH, AVAR, AVAS, BDEF, BGQC, CDBO, CHAR, CHDO, CHKC, CHKO,
CHKV, CLAS, CMOD, CMPT, CUS0, CUS1, CUS2, DCLS, DDLS, DDLX,
DEVC, DIAL, DOCT, DOCV, DOMA, DRAS, DRTY, DRUL, DSFD, DSFI,
DSYS, DTDC, DTEB, DTEL, ECAT, ECSD, ECSP, ECTC, ECTD, ECVO,
EEEC, ENHC, ENHO, ENHS, ENQU, ENSC, EVTB, FDT0, FORM, FTGL,
FUGR, FUGS, G4BA, G4BS, GSMP, HTTP, IAMU, IARP, IASP, IATU,
IAXU, IDOC, IEXT, INTF, IOBJ, IWMO, IWOM, IWPR, IWSG, IWSV,
IWVB, JOBD, MSAG, NONT, NROB, NSPC, OA2P, ODSO, OTGR, PARA,
PDTS, PERS, PINF, PRAG, PROG, RONT, SAJC, SAJT, SAMC, SAPC,
SCP1, SCVI, SFBF, SFBS, SFPF, SFPI, SFSW, SHI3, SHI5, SHI8,
SHLP, SHMA, SICF, SKTD, SMBC, SMIM, SMTG, SOBJ, SOD1, SOD2,
SOTS, SPLO, SPPF, SPRX, SQSC, SRFC, SRVB, SRVD, SSFO, SSST,
STVI, STYL, SUCU, SUSC, SUSH, SUSO, SXCI, SXSD, TABL, TOBJ,
TRAN, TTYP, TYPE, UCSA, UDMO, UENO, VCLS, VIEW, W3HT, W3MI,
WAPA, WDCA, WDCC, WDYA, WDYN, WEBI, XINX, XSLT
Exported ZIP follows abapGit structure:
src/
├── zcl_example.clas.abap # Class source code
├── zcl_example.clas.xml # Class metadata (abapGit XML)
├── zif_example.intf.abap # Interface source
├── zif_example.intf.xml # Interface metadata
├── zprogram.prog.abap # Program source
├── zprogram.prog.xml # Program metadata
└── ...
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_EXAMPLE</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Example Class</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit># List supported object types
vsp git-types
# Export a package
vsp git-export --packages "$ZADT_VSP"
# Export multiple packages
vsp git-export --packages "$ZRAY,$TMP" --include-subpackages
# Export specific objects
vsp git-export --objects '[{"type":"CLAS","name":"ZCL_TEST"},{"type":"INTF","name":"ZIF_TEST"}]'// GitTypes
{"name": "GitTypes"}
// GitExport by package
{
"name": "GitExport",
"arguments": {
"packages": "$ZADT_VSP",
"include_subpackages": true
}
}
// GitExport by objects
{
"name": "GitExport",
"arguments": {
"objects": "[{\"type\":\"CLAS\",\"name\":\"ZCL_TEST\"}]"
}
}Objects: 6
Files: 12
Source size: 109,637 bytes
ZIP size: 23,502 bytes (21.4% of original)
Files:
src/zcl_vsp_amdp_service.clas.abap (30,666 bytes)
src/zcl_vsp_apc_handler.clas.abap (7,747 bytes)
src/zcl_vsp_debug_service.clas.abap (35,303 bytes)
src/zcl_vsp_git_service.clas.abap (13,103 bytes)
src/zcl_vsp_rfc_service.clas.abap (19,207 bytes)
src/zif_vsp_service.intf.abap (704 bytes)
+ 6 .xml metadata files
- Import not implemented -
GitImportrequiresZCL_ABAPGIT_OBJECTS=>deserializewhich needs a virtual repository implementation - Large packages may timeout - For 200+ objects, consider chunked streaming (see Report 001)
- No progress feedback - Single response, no streaming progress updates yet
- Base64 overhead - 33% payload increase for binary transfer
- GitImport - Implement deserialize for importing from ZIP
- Chunked streaming - For large exports (see architecture report)
- Progress updates - WebSocket events during serialization
- Diff support - Compare local vs SAP versions
reports/2025-12-23-001-heavyweight-operations-architecture.md- Chunked streaming designreports/2025-12-22-003-websocket-abapgit-integration.md- Original design documentembedded/abap/zcl_vsp_git_service.clas.abap- ABAP implementationpkg/adt/git.go- Go client implementation