{"id":34600570,"url":"https://github.com/oisee/vibing-steampunk","last_synced_at":"2026-04-05T01:02:43.809Z","repository":{"id":327223968,"uuid":"1107891811","full_name":"oisee/vibing-steampunk","owner":"oisee","description":"vs-punk: ADT to MCP bridge - Vibe code in ABAP / AMDP","archived":false,"fork":false,"pushed_at":"2026-03-01T16:38:23.000Z","size":22299,"stargazers_count":141,"open_issues_count":21,"forks_count":39,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-01T18:55:03.650Z","etag":null,"topics":["abap","adt","mcp","vibe-coding"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oisee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-01T18:40:26.000Z","updated_at":"2026-03-01T16:35:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oisee/vibing-steampunk","commit_stats":null,"previous_names":["oisee/vibing-steamer"],"tags_count":46,"template":false,"template_full_name":null,"purl":"pkg:github/oisee/vibing-steampunk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oisee%2Fvibing-steampunk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oisee%2Fvibing-steampunk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oisee%2Fvibing-steampunk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oisee%2Fvibing-steampunk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oisee","download_url":"https://codeload.github.com/oisee/vibing-steampunk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oisee%2Fvibing-steampunk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30291839,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["abap","adt","mcp","vibe-coding"],"created_at":"2025-12-24T12:38:47.428Z","updated_at":"2026-04-05T01:02:43.748Z","avatar_url":"https://github.com/oisee.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vibing Steampunk (vsp)\n\n**AI-Agentic Development Unlocked for ABAP** — ECC, S/4HANA, everywhere ADT is available.\n\n\u003e **ADT ↔ MCP Bridge**: Gives Claude (and other AI assistants) full access to SAP ADT APIs.\n\u003e Read code, write code, debug, deploy, run tests — all through natural language (or DSL for automation).\n\u003e\n\u003e See also: [OData ↔ MCP Bridge](https://github.com/oisee/odata_mcp_go) for SAP data access.\n\u003e\n\u003e **Want to review or test?** Start here: **[Reviewer Guide](docs/reviewer-guide.md)** — 8 hands-on tasks, no SAP needed.\n\n![Vibing ABAP Developer](./media/vibing-steampunk.png)\n\n## 100 Stars!\n\nRead the milestone article: **[Agentic ABAP at 100 Stars: The Numbers, The Community, and What's Cooking](articles/2026-02-18-100-stars-celebration.md)**\n\n## What's New — Token Efficiency Sprint\n\n\u003e **Sprint goal:** make every token count. Built-in ABAP understanding, compressed dependency context, and a single-tool mode that opens the door for local/small models.\n\nThe full version history is in [CHANGELOG.md](CHANGELOG.md).\n\n### Hyperfocused Mode — 1 Tool to Rule Them All\n\nSingle `SAP(action, target, params)` tool replaces up to 129 individual tool definitions.\n\n```\nSAP(action=\"read\",   target=\"CLAS ZCL_TRAVEL\")\nSAP(action=\"edit\",   target=\"CLAS ZCL_TRAVEL\", params={\"source\": \"...\"})\nSAP(action=\"create\", target=\"DEVC\", params={\"name\": \"$ZOZIK\", \"description\": \"New pkg\"})\nSAP(action=\"help\",   target=\"debug\")\n```\n\n| Metric | Focused (100 tools) | Expert (147 tools) | Hyperfocused (1 tool) |\n|--------|-------------------:|-------------------:|----------------------:|\n| MCP schema tokens | ~14,000 | ~40,000 | **~200** |\n| Reduction | — | — | **99.5%** |\n\nAll safety controls (`--read-only`, `--allowed-ops`, `--allowed-packages`) work identically — the universal tool routes through the same handler → ADT client → `checkSafety()` chain.\n\n\u003e *Thanks to [Filipp Gnilyak](https://github.com/nickel-f) for the hyperfocused mode concept.*\n\n### Context Compression — Built-in ABAP Understanding\n\n`GetSource` auto-appends a **compressed dependency prologue** — public API signatures of every referenced class, interface, and FM. One MCP call = source + full surrounding context.\n\n**How it works:**\n\n```mermaid\ngraph LR\n    A[\"GetSource\u003cbr/\u003eZCL_TRAVEL\"] --\u003e B[\"10 regex patterns\u003cbr/\u003escan source\"]\n    B --\u003e C[\"TYPE REF TO\u003cbr/\u003eNEW · =\u003e · ~\u003cbr/\u003eINHERITING FROM\u003cbr/\u003eINTERFACES\u003cbr/\u003eCALL FUNCTION\u003cbr/\u003eCAST · RAISING\"]\n    C --\u003e D[\"Fetch deps\u003cbr/\u003e5 parallel\"]\n    D --\u003e E[\"Extract contract\u003cbr/\u003ePUBLIC SECTION only\"]\n    E --\u003e F[\"Source +\u003cbr/\u003eCompressed Prologue\"]\n```\n\n**Compression by object type:**\n\n| What | Keeps | Strips | Typical ratio |\n|------|-------|--------|:-------------:|\n| **Class** | `CLASS DEFINITION` + `PUBLIC SECTION` | Protected, Private, Implementation | **7–30x** |\n| **Interface** | Full `INTERFACE...ENDINTERFACE` | — | 1x (already compact) |\n| **Function Module** | `FUNCTION` line + `*\"` signature block | Body | **5–15x** |\n\n**Real-world example** — `ZCL_ABAPGIT_ADT_LINK` (abapGit codebase):\n- 8 dependencies detected → 8 resolved, 0 failed\n- Dependencies include: `ZIF_ABAPGIT_DEFINITIONS` (massive interface), `ZCX_ABAPGIT_EXCEPTION`, `CL_WB_OBJECT` (14 methods), `IF_ADT_URI_MAPPER` (8 methods), etc.\n- All compressed to **public signatures only** — no implementation bodies, no private sections\n\n### Method-Level Surgery — Read and Edit Individual Methods\n\nWhy pull an entire 1000-line class when you only need one 30-line method?\n\n```\n# Read just the FACTORIAL method — not the whole class\nSAP(action=\"read\", target=\"CLAS ZCL_CALCULATOR\", params={\"method\": \"FACTORIAL\"})\n\n# Edit just that method — vsp handles the rest\nSAP(action=\"edit\", target=\"CLAS ZCL_CALCULATOR\", params={\n  \"method\": \"FACTORIAL\",\n  \"source\": \"  METHOD factorial.\\n    ...\\n  ENDMETHOD.\"\n})\n```\n\n**What happens under the hood on edit:**\n\n```mermaid\nsequenceDiagram\n    participant LLM as AI Agent\n    participant VSP as vsp\n    participant SAP as SAP System\n\n    LLM-\u003e\u003eVSP: SAP(edit, CLAS ZCL_FOO, method=BAR, source=...)\n    VSP-\u003e\u003eSAP: GetClassMethods() → find BAR boundaries\n    VSP-\u003e\u003eSAP: GetClassSource() → full class\n    Note over VSP: Replace lines 42-58\u003cbr/\u003ewith new METHOD block\n    VSP-\u003e\u003eSAP: SyntaxCheck(full reconstructed source)\n    VSP-\u003e\u003eSAP: Lock → UpdateSource → Unlock → Activate\n    VSP-\u003e\u003eLLM: ✓ Method BAR updated, class activated\n```\n\nThe AI only sends/receives the method block (~30 lines). vsp fetches the full class internally, splices in the new method at the right line range, validates, and pushes back. **95% token reduction** vs full-class round-trips.\n\n**Context compression scopes to the method too** — when reading a single method, dependency analysis runs on _that method's code only_, so the prologue contains exactly the types and interfaces relevant to the method you're working on, not the entire class's dependency tree.\n\n| Operation | Tokens (full class) | Tokens (method-level) | Savings |\n|-----------|:-------------------:|:---------------------:|:-------:|\n| Read source | ~1,000 | ~50 | **20x** |\n| Read + context | ~1,600 | ~250 | **6x** |\n| Edit round-trip | ~2,000 | ~100 | **20x** |\n\n\u003e *Built-in ABAP parser based on [abaplint](https://github.com/abaplint/abaplint) by [Lars Hvam](https://github.com/larshp) — the same parser that powers abaplint's 392 ABAP statement types.*\n\n### Native Go ABAP Lexer — abaplint in Go\n\nThe [abaplint](https://github.com/abaplint/abaplint) lexer has been mechanically ported from TypeScript to native Go (`pkg/abaplint`). This is the same lexer that powers abaplint — 48 token types, all 6 lexer modes (normal, string, backtick, template, comment, pragma), with full whitespace-context encoding.\n\n**Verified via oracle-based differential testing** against the real TypeScript abaplint:\n\n```\n=== DIFFERENTIAL KPI ===\nFiles:   29/29 passed (100.0%)\nTokens:  22,612 total\n  Full match:  22,612 (100.0%)  — str + type + row + col\n  Str match:   22,612 (100.0%)\n  Type match:  22,612 (100.0%)\n  Pos match:   22,612 (100.0%)\n```\n\nZero dependencies, zero FFI. Pure Go, ~3.5M tokens/sec, ready for lint rules in Phase 2.\n\n### ABAP LSP — Real-Time Diagnostics\n\n`vsp lsp --stdio` gives Claude Code (and other editors) **automatic** error detection and navigation for ABAP files. No explicit tool calls — the LSP pushes diagnostics on every save and compressed dependency context on file open.\n\nSee [LSP setup](#abap-lsp-for-claude-code) for configuration.\n\n### WASM-to-ABAP Compiler — Run Any Language on SAP\n\nCompile WebAssembly binaries to native ABAP. Three paths, one goal:\n\n```\n.wasm binary → pkg/wasmcomp (Go)  → ABAP source files     ← AOT compiler\n.ts source   → pkg/ts2abap (Go)   → clean OO ABAP classes  ← direct transpiler\n.wasm binary → zcl_wasm_compiler  → ABAP (on SAP itself!)  ← self-hosting, 785 lines\n```\n\n**Proven on SAP A4H:** QuickJS (1,410 functions) compiled to 101K lines ABAP. abaplint parser (26.5MB) compiled to 396K lines. Self-hosting compiler parses WASM, generates ABAP, and executes via `GENERATE SUBROUTINE POOL` — all within SAP.\n\n| What | Size | Status |\n|------|:----:|:------:|\n| QuickJS → ABAP | 101K lines | Compiled |\n| abaplint → ABAP | 396K lines | Compiled |\n| abaplint lexer (TS→ABAP) | 495 lines | Running on SAP |\n| Self-hosting compiler | 785 lines | Running on SAP |\n| Batch deploy | `vsp deploy *.clas.abap` | 40 classes, 0 failures |\n\n\u003e *Branch: `feat/wasm-abap`. See [reports/2026-03-20-001](reports/2026-03-20-001-wasm-abap-achievement.md) for full details.*\n\n### Full CLI Toolchain — SAP from the Terminal\n\n28 commands. No SAP GUI, no Eclipse, no IDE. Most work with standard ADT; `lint`/`parse`/`compile` work fully offline.\n\n```bash\nvsp query T000 --top 5                           # query tables\nvsp grep \"SELECT.*mara\" --package '$TMP'          # search source code\nvsp graph CLAS ZCL_FOO --direction callers        # who uses this class?\nvsp deps '$ZFINANCE' --format summary             # transport readiness check\nvsp lint --file myclass.clas.abap                 # offline ABAP linter\nvsp compile wasm program.wasm --class ZCL_DEMO    # WASM→ABAP compiler\nvsp parse --stdin --format json \u003c source.abap     # ABAP parser\nvsp context CLAS ZCL_FOO --depth 2                # compressed deps (2 levels)\nvsp system info                                   # system version + ZADT_VSP check\n```\n\n`graph` and `deps` use WBCROSSGT/CROSS tables as fallback when ADT call graph API is unavailable — works on any SAP system with ADT.\n\nSee **[CLI Guide](docs/cli-guide.md)** for the complete reference with feature requirements matrix.\n\n### Other Highlights\n- **Lua Scripting Engine**: `vsp lua` — interactive REPL + scripts with 50+ SAP bindings. Query tables, lint code, parse ABAP, debug with breakpoints, record execution, replay state. See [example scripts](examples/scripts/).\n- **YAML Workflows**: `vsp workflow run pipeline.yaml` — CI/CD automation with variable substitution, step chaining, and error handling. See [example workflows](examples/workflows/).\n- **Bootstrap from CLI**: `vsp install abapgit` + `vsp install zadt-vsp` — deploy dependencies to SAP systems directly from the command line. No SAP GUI needed.\n\n## Key Features\n\n| Feature | Description |\n|---------|-------------|\n| **Hyperfocused Mode** | `--mode hyperfocused`: 1 universal SAP tool, **~200 tokens** vs ~40K for 122 |\n| **Context Compression** | Auto-compressed dependency contracts — 7–30x compression, built-in ABAP parser |\n| **ABAP LSP** | Built-in Language Server — real-time diagnostics, go-to-definition, context push |\n| **AI Debugger** | Breakpoints, listener, attach, step, inspect stack \u0026 variables |\n| **RAP OData E2E** | Create CDS views, Service Definitions, Bindings → Publish OData services |\n| **Focused Mode** | 88 curated tools optimized for AI assistants |\n| **AI-Powered RCA** | Root cause analysis with dumps, traces, profiler + code intelligence |\n| **DSL \u0026 Workflows** | Fluent Go API + YAML automation for CI/CD pipelines |\n| **ExecuteABAP** | Run arbitrary ABAP code via unit test wrapper |\n| **Code Analysis** | Call graphs, object structure, find definition/references |\n| **System Introspection** | System info, installed components, CDS dependencies |\n| **Diagnostics** | Short dumps (RABAX), ABAP profiler (ATRA), SQL traces (ST05) |\n| **File Deployment** | Bypass token limits - deploy large files directly from filesystem |\n| **Surgical Edits** | `EditSource` tool matches Claude's Edit pattern for precise changes |\n\n## Quick Start\n\n```bash\n#Download binary from releases\ncurl -LO https://github.com/oisee/vibing-steampunk/releases/latest/download/vsp-linux-amd64\nchmod +x vsp-linux-amd64\n\n#Or build from source\ngit clone https://github.com/oisee/vibing-steampunk.git \u0026\u0026 cd vibing-steampunk\nmake build\n```\n### Windows 11 with VS Code + Claude Code extension:\n#### 1. Get the latest vsp release:\nhttps://github.com/oisee/vibing-steampunk/releases.\n\nIf you have trouble downloading executable files in your browser, use `curl -o url` or `wget` to download the file. Name the file `vsp.exe`.\n\nPut the file in a local folder and open the folder in VS Code.\n\nAdd the vsp folder to your `PATH` environment variable for your user. Either through command line or Windows Registry Editor `regedit`. Add the vsp folder to `KEY_CURRENT_USER\\Environment\\Path`.\n\nRestart your VS Code to recognize the updated `PATH` before progressing to the next steps.\n\n#### 2. Initialize the config files:\nOpen a terminal in VS Code, then run `./vsp config init` to create config template files:\n-\t`.env.example`\n-\t`.vsp.json.example`\n-\t`.mcp.json.example`\n\n#### 3. Adjust your config files:\n Make sure you delete the comment lines. Refer to the example files in this `README`.\n\n#### 4. Set up authentication\n\n**For basic auth:** Set up a password for your user to allow for basic authentication. Go to `SU01 \u003e Logon Data`, generate an initial password. Then log in again (without SNC/SSO in SAPGUI) and change the initial password. You are now set up for basic authentication via config file in vsp. Set your environment variables `SAP_USER` and `SAP_PASSWORD` accordingly.\n\nYou now need to obtain the SAP hostname for your `SAP_URL` environment variable: Log in to any web-based application (e.g. Fiori Launchpad) and obtain the URL from your browser. Attention: `SAP_URL` is not **not** your message/group server from SAP Logon!\n\n**Alternatively use cookie authentication:**\nIf you cannot set a password for your user, you may still use cookie authentication to access your SAP system from vsp. \n\nExtract cookies manually and save them in `cookies.txt` in your vsp folder. Use cookies `SAP_SESSIONID_SYS_CLI` and `sap-usercontext` on your previously determined URL (caution: use `https://` prefix for secure connections). Refer to below guide on how to manually extract cookies from your browser.\n\n**Template cookie file:**\n```\n# Netscape HTTP Cookie File\n# https://curl.haxx.se/rfc/cookie_spec.html\n\nhttps://your.domain.com\tFALSE\t/\tTRUE\t0\tSAP_SESSIONID_SYS_CLI  YOUR_CONTENT\nhttps://your.domain.com\tFALSE\t/\tTRUE\t0\tsap-usercontext        YOUR_CONTENT\n```\nReplace the hostname, `SYS` with your system ID (e.g. DS1) and `CLI` with your client number (e.g. 100).\n\n**For BTP/Cloud based systems**: Use cookies `__VCAP_ID__` and `JSESSIONID` on your domain `https://xyz.ondemand.com`. This also works for BTP trial accounts. Also refer to \u003ca href=\"https://medium.com/@warren_eiserman/vibe-steam-punk-vsp-for-abap-cloud-mac-claude-2864d601978f\"\u003ethis article\u003c/a\u003e.\n\n**Obtaining cookies from your browser session:**\n\nThe easiest way to do so is to use Edge as it allows you to display cookie contents from its settings page. From there you can copy \u0026 paste them into the newly created `cookies.txt` file.\n\nOpen any transaction in WebDynpro or Fiori Launchpad. For older environments like ECC it should work with BRF+ transactions that open in a browser. Login with your credentials. Once logged in it’s a matter of extracting the created session cookies.\n\nIn Edge, go to `Settings \u003e Privacy, search and services \u003e Cookies \u003e See all cookies and site data`. Search for your top-level domain. There should be two cookies for your system as described above (`SAP_SESSIONID` and `sap-usercontext` or `VCAP_ID` and `JSESSIONID` if your system is cloud-based). Copy the content values for each cookie to your local file and save.\n\nThe created cookies are session cookies. They will eventually expire after a timeout and the values in cookies.txt need to be updated. Usually Claude will tell you if this is the case.\n\n#### 5. Test the connection: \nUse the terminal with this command: `./vsp -s dev search \"zcl_*\" --type CLAS --max 50`.\n\nYou will get prompted with a list of found objects if the connection could be established. \n\n\n## CLI Coding Agents\n\nVSP works with **8 CLI coding agents** — not just Claude! Full setup guides with config templates:\n\n| Agent | LLM | Free? | Config |\n|-------|-----|-------|--------|\n| **Gemini CLI** | Gemini 2.5 Pro/Flash | Yes (1000 req/day) | `.gemini/settings.json` |\n| **Claude Code** | Claude Opus/Sonnet 4.6 | No ($20+/mo) | `.mcp.json` |\n| **GitHub Copilot** | Claude, GPT-5, Gemini | No ($10+/mo) | `.copilot/mcp-config.json` |\n| **OpenAI Codex** | GPT-5-Codex, GPT-4.1 | No ($20+/mo) | `.mcp.json` |\n| **Qwen Code** | Qwen3-Coder | Yes (1000 req/day) | `.qwen/settings.json` |\n| **OpenCode** | 75+ models (BYOK) | Yes (own key) | `opencode.json` |\n| **Goose** | 75+ providers (BYOK) | Yes (own key) | `~/.config/goose/config.yaml` |\n| **Mistral Vibe** | Devstral 2, local models | Yes (Ollama) | `.vibe/config.toml` |\n\n**[Full setup guide with config examples](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)\n\n## CLI Mode\n\nvsp works in two modes:\n1. **MCP Server Mode** (default) - Exposes tools via Model Context Protocol for Claude\n2. **CLI Mode** - Direct command-line operations without MCP\n\n### CLI Commands\n\n```bash\n# Source operations\nvsp -s a4h source CLAS ZCL_MY_CLASS              # read source\nvsp -s a4h source read CLAS ZCL_MY_CLASS          # same, explicit\nvsp -s a4h source write CLAS ZCL_FOO \u003c file.abap  # write from stdin\nvsp -s a4h source edit CLAS ZCL_FOO --old \"X\" --new \"Y\"  # surgical edit\nvsp -s a4h source context CLAS ZCL_FOO            # source + dependency contracts\nvsp -s a4h context CLAS ZCL_FOO                   # shortcut for above\n\n# Search\nvsp -s a4h search \"ZCL_*\"\nvsp -s dev search \"Z*ORDER*\" --type CLAS --max 50\n\n# Testing \u0026 code quality\nvsp -s a4h test CLAS ZCL_MY_CLASS                 # run unit tests\nvsp -s a4h test --package '$TMP'                  # package-level tests\nvsp -s a4h atc CLAS ZCL_MY_CLASS                  # ATC code check\n\n# Deployment\nvsp -s a4h deploy zcl_test.clas.abap '$TMP'       # deploy file to SAP\nvsp -s a4h export '$ZORK' '$ZLLM' -o packages.zip # export abapGit ZIP\n\n# Bootstrap SAP system (no SAP GUI needed)\nvsp -s a4h install abapgit                        # install abapGit\nvsp -s a4h install zadt-vsp                       # install ZADT_VSP handler\nvsp -s a4h install abapgit --edition full         # full dev edition (576 objects)\nvsp -s a4h install list                           # show installable components\n\n# Transport management\nvsp -s a4h transport list                         # list transports\nvsp -s a4h transport get A4HK900094               # transport details\n\n# System management\nvsp systems                                       # list configured systems\nvsp config init                                   # create example configs\n\n# Start ABAP LSP server (for Claude Code / editors)\nvsp lsp --stdio\n```\n\n### System Profiles (`.vsp.json`)\n\nConfigure multiple SAP systems in `.vsp.json`:\n\n```json\n{\n  \"default\": \"dev\",\n  \"systems\": {\n    \"dev\": {\n      \"url\": \"http://dev.example.com:50000\",\n      \"user\": \"DEVELOPER\",\n      \"client\": \"001\"\n    },\n    \"a4h\": {\n      \"url\": \"http://a4h.local:50000\",\n      \"user\": \"ADMIN\",\n      \"client\": \"001\",\n      \"insecure\": true\n    },\n    \"prod\": {\n      \"url\": \"https://prod.example.com:44300\",\n      \"user\": \"READONLY\",\n      \"client\": \"100\",\n      \"read_only\": true,\n      \"cookie_file\": \"/path/to/cookies.txt\"\n    }\n  }\n}\n```\n\n**Password Resolution:**\n- Set via environment variable: `VSP_\u003cSYSTEM\u003e_PASSWORD` (e.g., `VSP_DEV_PASSWORD`)\n- Or use cookie authentication: `cookie_file` or `cookie_string`\n\n**Config Locations** (searched in order):\n1. `.vsp.json` (current directory)\n2. `.vsp/systems.json`\n3. `~/.vsp.json`\n4. `~/.vsp/systems.json`\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eMCP Server Configuration\u003c/strong\u003e\u003c/summary\u003e\n\n### CLI Flags\n```bash\nvsp --url https://host:44300 --user admin --password secret\nvsp --url https://host:44300 --cookie-file cookies.txt\nvsp --mode expert          # Enable all 147 tools\nvsp --mode hyperfocused    # Single SAP tool (~200 tokens instead of ~40K)\n```\n\n### Environment Variables\n```bash\nexport SAP_URL=https://host:44300\nexport SAP_USER=developer\nexport SAP_PASSWORD=secret\nexport SAP_CLIENT=001\n```\n\n### .env File\n```bash\n# .env (auto-loaded from current directory)\nSAP_URL=https://host:44300\nSAP_USER=developer\nSAP_PASSWORD=secret\n```\n\n| Flag | Env Variable | Description |\n|------|--------------|-------------|\n| `--url` | `SAP_URL` | SAP system URL |\n| `--user` | `SAP_USER` | Username |\n| `--password` | `SAP_PASSWORD` | Password |\n| `--client` | `SAP_CLIENT` | Client (default: 001) |\n| `--mode` | `SAP_MODE` | `focused` (default) or `expert` |\n| `--cookie-file` | `SAP_COOKIE_FILE` | Netscape cookie file |\n| `--insecure` | `SAP_INSECURE` | Skip TLS verification |\n| `--terminal-id` | `SAP_TERMINAL_ID` | SAP GUI terminal ID for cross-tool debugging |\n| `--allow-transportable-edits` | `SAP_ALLOW_TRANSPORTABLE_EDITS` | Enable editing transportable objects |\n| `--allowed-transports` | `SAP_ALLOWED_TRANSPORTS` | Whitelist transports (wildcards: `A4HK*`) |\n| `--allowed-packages` | `SAP_ALLOWED_PACKAGES` | Whitelist packages (wildcards: `Z*,$TMP`) |\n\n\u003c/details\u003e\n\n## Usage with Claude\n\n### Claude Desktop\n\nAdd to `~/.config/claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"abap-adt\": {\n      \"command\": \"/path/to/vsp\",\n      \"env\": {\n        \"SAP_URL\": \"https://your-sap-host:44300\",\n        \"SAP_USER\": \"your-username\",\n        \"SAP_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Claude Code\n\nAdd `.mcp.json` to your project:\n\n```json\n{\n  \"mcpServers\": {\n    \"abap-adt\": {\n      \"command\": \"/path/to/vsp\",\n      \"env\": {\n        \"SAP_URL\": \"https://your-sap-host:44300\",\n        \"SAP_USER\": \"your-username\",\n        \"SAP_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### ABAP LSP for Claude Code\n\nvsp includes a built-in LSP server that gives Claude Code **automatic** error detection when editing ABAP files — no explicit tool calls needed.\n\n**Add to Claude Code settings** (`.claude/settings.json` or global settings):\n\n```json\n{\n  \"lsp\": {\n    \"abap\": {\n      \"command\": \"vsp\",\n      \"args\": [\"lsp\", \"--stdio\"],\n      \"extensionToLanguage\": {\n        \".abap\": \"abap\",\n        \".asddls\": \"abap\",\n        \".asbdef\": \"abap\"\n      }\n    }\n  }\n}\n```\n\nSAP credentials are resolved from environment variables or `.env` file — same as MCP mode.\n\n**Supported LSP features:**\n\n| Feature | Method | Source |\n|---------|--------|--------|\n| Real-time syntax errors | `textDocument/publishDiagnostics` | ADT SyntaxCheck |\n| Go-to-definition | `textDocument/definition` | ADT FindDefinition |\n\n**Supported file patterns** (abapGit naming convention):\n\n| Extension | Object Type |\n|-----------|-------------|\n| `.clas.abap` | Class (main source) |\n| `.clas.testclasses.abap` | Class test includes |\n| `.clas.locals_def.abap` | Class local definitions |\n| `.prog.abap` | Program / Report |\n| `.intf.abap` | Interface |\n| `.fugr.abap` | Function Group |\n| `.ddls.asddls` | CDS View |\n\nNamespace convention (`#dmo#cl_flight.clas.abap` → `/DMO/CL_FLIGHT`) is handled automatically.\n\n### Transportable Packages Configuration\n\nTo work with transportable packages (non-`$` prefixed), you **must** explicitly enable transport support:\n\n```json\n{\n  \"mcpServers\": {\n    \"abap-adt\": {\n      \"command\": \"/path/to/vsp\",\n      \"env\": {\n        \"SAP_URL\": \"https://your-sap-host:44300\",\n        \"SAP_USER\": \"your-username\",\n        \"SAP_PASSWORD\": \"your-password\",\n        \"SAP_CLIENT\": \"001\",\n        \"SAP_ALLOW_TRANSPORTABLE_EDITS\": \"true\",\n        \"SAP_ALLOWED_TRANSPORTS\": \"DEVK*,A4HK*\",\n        \"SAP_ALLOWED_PACKAGES\": \"ZPROD,$TMP,$*,Z*\"\n      }\n    }\n  }\n}\n```\n\n| Env Variable | Purpose |\n|-------------|---------|\n| `SAP_ALLOW_TRANSPORTABLE_EDITS` | Enable editing objects in transportable packages |\n| `SAP_ENABLE_TRANSPORTS` | Enable full transport management (create, release) |\n| `SAP_ALLOWED_TRANSPORTS` | Whitelist transport patterns (wildcards supported) |\n| `SAP_ALLOWED_PACKAGES` | Whitelist package patterns (wildcards supported) |\n\n**CreatePackage with software component:**\n```\nCreatePackage(\n  name=\"ZPROD_005\",\n  description=\"Sub-package\",\n  parent=\"ZPROD\",\n  transport=\"DEVK900123\",\n  software_component=\"HOME\"\n)\n```\n\nWithout these flags, operations on transportable packages will be blocked by the safety system.\n\n## Tool Modes\n\nOne axis, three values — `--mode` or `SAP_MODE`:\n\n```mermaid\ngraph LR\n    F[\"focused\u003cbr/\u003e100 tools\u003cbr/\u003e~14K tokens\u003cbr/\u003e\u003ci\u003edefault\u003c/i\u003e\"] --\u003e E[\"expert\u003cbr/\u003e147 tools\u003cbr/\u003e~40K tokens\"]\n    E --\u003e H[\"hyperfocused\u003cbr/\u003e1 tool\u003cbr/\u003e~200 tokens\"]\n    style H fill:#2d6a4f,color:#fff\n    style F fill:#264653,color:#fff\n    style E fill:#264653,color:#fff\n```\n\n| Aspect | Focused (default) | Expert | Hyperfocused |\n|--------|:-:|:-:|:-:|\n| **Tools** | 81 essential | 122 complete | 1 universal `SAP()` |\n| **Schema tokens** | ~14K | ~40K | ~200 |\n| **How AI calls it** | `GetSource(type, name)` | Same, + granular tools | `SAP(action, target, params)` |\n| **Documentation** | In tool schemas | In tool schemas | `SAP(action=\"help\")` |\n| **Best for** | Large-context agents | Edge cases, debugging | Local models, fast iteration |\n| **Safety controls** | All apply | All apply | All apply (same code path) |\n\n```bash\nvsp --mode focused       # default — 88 curated tools\nvsp --mode expert        # all 147 tools individually\nvsp --mode hyperfocused  # single SAP(action, target, params) tool\n```\n\n## DSL \u0026 Automation\n\n### YAML Workflows\n\n```yaml\n# ci-pipeline.yaml\nname: CI Pipeline\nvars:\n  package: \"$TMP\"\nsteps:\n  - action: search\n    query: \"ZCL_*\"\n    types: [class]\n    package: \"{{ .package }}\"\n    save_as: classes\n\n  - action: test\n    objects: \"{{ .classes }}\"\n    parallel: 4\n\n  - action: fail_if\n    condition: tests_failed\n    message: \"Unit tests failed\"\n```\n\n```bash\nvsp workflow run ci-pipeline.yaml --var package='$ZRAY'\n```\n\n### Go Library\n\n```go\n// Fluent search\nobjects, _ := dsl.Search(client).\n    Query(\"ZCL_*\").Classes().InPackage(\"$TMP\").Execute(ctx)\n\n// Test orchestration\nsummary, _ := dsl.Test(client).\n    Objects(objects...).Parallel(4).Run(ctx)\n\n// Batch import from directory (abapGit-compatible)\nresult, _ := dsl.Import(client).\n    FromDirectory(\"./src/\").\n    ToPackage(\"$ZRAY\").\n    RAPOrder().  // DDLS → BDEF → Classes → SRVD\n    Execute(ctx)\n\n// Export classes with all includes\nresult, _ := dsl.Export(client).\n    Classes(\"ZCL_TRAVEL\", \"ZCL_BOOKING\").\n    ToDirectory(\"./backup/\").\n    Execute(ctx)\n\n// RAP deployment pipeline\npipeline := dsl.RAPPipeline(client, \"./src/\", \"$ZRAY\", \"ZTRAVEL_SB\")\n```\n\nSee [docs/DSL.md](docs/DSL.md) for complete documentation.\n\n## RAP OData Service Creation\n\nVSP supports full RAP OData E2E development since v2.6.0. Create complete OData services via AI assistant:\n\n### Step-by-Step Workflow\n\n**1. Create CDS View (DDLS)**\n```\nWriteSource(\n  object_type=\"DDLS\",\n  name=\"ZTRAVEL\",\n  package=\"$TMP\",\n  description=\"Travel Entity\",\n  source=`\n@EndUserText.label: 'Travel'\n@AccessControl.authorizationCheck: #NOT_REQUIRED\ndefine root view entity ZTRAVEL as select from ztravel_tab {\n  key travel_id as TravelId,\n  description as Description,\n  start_date as StartDate,\n  end_date as EndDate,\n  status as Status\n}\n`\n)\n```\n\n**2. Create Behavior Definition (BDEF)**\n```\nWriteSource(\n  object_type=\"BDEF\",\n  name=\"ZTRAVEL\",\n  package=\"$TMP\",\n  description=\"Travel Behavior\",\n  source=`\nmanaged implementation in class ZBP_TRAVEL unique;\nstrict ( 2 );\n\ndefine behavior for ZTRAVEL alias Travel\npersistent table ztravel_tab\nlock master\nauthorization master ( instance )\n{\n  field ( readonly ) TravelId;\n  field ( mandatory ) Description;\n\n  create;\n  update;\n  delete;\n\n  mapping for ztravel_tab {\n    TravelId = travel_id;\n    Description = description;\n    StartDate = start_date;\n    EndDate = end_date;\n    Status = status;\n  }\n}\n`\n)\n```\n\n**3. Create Service Definition (SRVD)**\n```\nWriteSource(\n  object_type=\"SRVD\",\n  name=\"ZTRAVEL_SD\",\n  package=\"$TMP\",\n  description=\"Travel Service Definition\",\n  source=`\n@EndUserText.label: 'Travel Service'\ndefine service ZTRAVEL_SD {\n  expose ZTRAVEL;\n}\n`\n)\n```\n\n**4. Create Service Binding (SRVB)**\n```\nWriteSource(\n  object_type=\"SRVB\",\n  name=\"ZTRAVEL_SB\",\n  package=\"$TMP\",\n  description=\"Travel OData V4 Binding\",\n  service_definition=\"ZTRAVEL_SD\",\n  binding_version=\"V4\"\n)\n```\n\n### Binding Options\n\n| Parameter | Values | Description |\n|-----------|--------|-------------|\n| `binding_version` | `V2`, `V4` | OData protocol version |\n| `binding_category` | `0`, `1` | `0`=Web API, `1`=UI |\n\n### For Transportable Packages\n\nAdd `transport` parameter to all WriteSource calls:\n```\nWriteSource(\n  object_type=\"DDLS\",\n  name=\"ZTRAVEL\",\n  package=\"ZPROD\",\n  transport=\"DEVK900123\",\n  ...\n)\n```\n\n### Related\n- [RAP OData Lessons Report](reports/2025-12-08-003-rap-odata-service-lessons.md)\n- DSL Pipeline: `dsl.RAPPipeline(client, \"./src/\", \"$PKG\", \"ZSRV_SB\")`\n\n## ExecuteABAP\n\nRun arbitrary ABAP code via unit test wrapper:\n\n```\nExecuteABAP:\n  code: |\n    DATA(lv_msg) = |Hello from SAP at { sy-datum }|.\n    lv_result = lv_msg.\n```\n\n**Risk levels:** `harmless` (read-only), `dangerous` (write), `critical` (full access)\n\nSee [ExecuteABAP Report](reports/2025-12-05-004-execute-abap-implementation.md) for details.\n\n## AI-Powered Root Cause Analysis\n\nvsp enables AI assistants to investigate production issues autonomously:\n\n```\nUser: \"Investigate the ZERODIVIDE crash in production\"\n\nAI Workflow:\n  1. GetDumps      → Find recent crashes by exception type\n  2. GetDump       → Analyze stack trace and variable values\n  3. GetSource     → Read code at crash location\n  4. GetCallGraph  → Trace call hierarchy\n  5. GrepPackages  → Find similar patterns\n  6. Analysis      → Identify root cause\n  7. Propose Fix   → Generate solution + test case\n```\n\n**Example Output:**\n\u003e \"The crash occurs in `ZCL_PRICING=\u003eCALCULATE_RATIO` when `LV_TOTAL=0`.\n\u003e This happens for archived orders with no line items. Here's the fix...\"\n\nSee [AI-Powered RCA Workflows](reports/2025-12-05-013-ai-powered-rca-workflows.md) for the complete vision.\n\n## Tools Reference\n\n**52 Focused Mode Tools:**\n- **Search:** SearchObject, GrepObjects, GrepPackages\n- **Read:** GetSource, GetTable, GetTableContents, RunQuery, GetPackage, GetFunctionGroup, GetCDSDependencies\n- **Debugger:** DebuggerListen, DebuggerAttach, DebuggerDetach, DebuggerStep, DebuggerGetStack, DebuggerGetVariables\n  - *Note: Breakpoints now managed via WebSocket (ZADT_VSP)*\n- **Write:** WriteSource, EditSource, ImportFromFile, ExportToFile, MoveObject\n- **Dev:** SyntaxCheck, RunUnitTests, RunATCCheck, LockObject, UnlockObject\n- **Intelligence:** FindDefinition, FindReferences, GetContext\n- **System:** GetSystemInfo, GetInstalledComponents, GetCallGraph, GetObjectStructure, GetFeatures\n- **Diagnostics:** GetDumps, GetDump, ListTraces, GetTrace, GetSQLTraceState, ListSQLTraces\n- **Git:** GitTypes, GitExport (requires abapGit on SAP)\n- **Reports:** RunReport, GetVariants, GetTextElements, SetTextElements\n- **Install:** InstallZADTVSP, InstallAbapGit, ListDependencies\n\nSee [README_TOOLS.md](README_TOOLS.md) for complete tool documentation (147 tools).\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCapability Matrix\u003c/strong\u003e\u003c/summary\u003e\n\n| Capability | ADT (Eclipse) | abap-adt-api (TS) | **vsp** |\n|------------|:-------------:|:-----------------:|:-------:|\n| Programs, Classes, Interfaces | Y | Y | **Y** |\n| Functions, Function Groups | Y | Y | **Y** |\n| Tables, Structures | Y | Y | **Y** |\n| CDS Views | Y | Y | **Y** |\n| Syntax Check, Activation | Y | Y | **Y** |\n| Unit Tests | Y | Y | **Y** |\n| CRUD Operations | Y | Y | **Y** |\n| Find Definition/References | Y | Y | **Y** |\n| Code Completion | Y | Y | **Y** |\n| ATC Checks | Y | Y | **Y** |\n| Call Graph | Y | Y | **Y** |\n| System Info | Y | Y | **Y** |\n| Surgical Edit (Edit pattern) | - | - | **Y** |\n| File-based Deploy | - | - | **Y** |\n| ExecuteABAP | - | - | **Y** |\n| RAP OData (DDLS/SRVD/SRVB) | Y | - | **Y** |\n| OData Service Publish | Y | - | **Y** |\n| abapGit Export | Y | - | **Y** (WebSocket) |\n| Debugging | Y | Y | N |\n\n\u003c/details\u003e\n\n## Credits\n\n| Project | Author | Contribution |\n|---------|--------|--------------|\n| [abap-adt-api](https://github.com/marcellourbani/abap-adt-api) | Marcello Urbani | TypeScript ADT library, definitive API reference |\n| [mcp-abap-adt](https://github.com/mario-andreschak/mcp-abap-adt) | Mario Andreschak | First MCP server for ABAP ADT |\n\n**vsp** is a Go rewrite with:\n- Single binary, zero dependencies\n- 62 tools (vs 13 original)\n- ~50x faster startup\n\n## Optional: WebSocket Handler (ZADT_VSP)\n\nvsp can optionally deploy a WebSocket handler to SAP for enhanced functionality like RFC calls:\n\n```bash\n# 1. Create package\nvsp CreatePackage --name '$ZADT_VSP' --description 'VSP WebSocket Handler'\n\n# 2. Deploy objects (embedded in binary)\nvsp WriteSource --object_type INTF --name ZIF_VSP_SERVICE --package '$ZADT_VSP' \\\n    --source \"$(cat embedded/abap/zif_vsp_service.intf.abap)\"\nvsp WriteSource --object_type CLAS --name ZCL_VSP_RFC_SERVICE --package '$ZADT_VSP' \\\n    --source \"$(cat embedded/abap/zcl_vsp_rfc_service.clas.abap)\"\nvsp WriteSource --object_type CLAS --name ZCL_VSP_APC_HANDLER --package '$ZADT_VSP' \\\n    --source \"$(cat embedded/abap/zcl_vsp_apc_handler.clas.abap)\"\n\n# 3. Manually create APC app in SAPC + activate in SICF\n#    See embedded/abap/README.md for details\n```\n\n**After deployment**, connect via WebSocket to call RFCs:\n```json\n{\"id\":\"1\",\"domain\":\"rfc\",\"action\":\"call\",\"params\":{\"function\":\"BAPI_USER_GET_DETAIL\",\"USERNAME\":\"TESTUSER\"}}\n```\n\nSee [WebSocket Handler Report](reports/2025-12-18-002-websocket-rfc-handler.md) for complete documentation.\n\n## Documentation\n\n| Document | Description |\n|----------|-------------|\n| [docs/architecture.md](docs/architecture.md) | Architecture diagrams (Mermaid) |\n| [README_TOOLS.md](README_TOOLS.md) | Complete tool reference (94 tools) |\n| [MCP_USAGE.md](MCP_USAGE.md) | AI agent usage guide |\n| [docs/DSL.md](docs/DSL.md) | DSL \u0026 workflow documentation |\n| [ARCHITECTURE.md](ARCHITECTURE.md) | Technical architecture (detailed) |\n| [CLAUDE.md](CLAUDE.md) | AI development guidelines |\n| [embedded/abap/README.md](embedded/abap/README.md) | WebSocket handler deployment |\n| [docs/cli-agents/](docs/cli-agents/README.md) | CLI coding agents setup guide (8 agents, 4 languages) |\n| [Roadmap: Quick/Mid/Far Wins](reports/2026-01-02-005-roadmap-quick-mid-far-wins.md) | Prioritized feature backlog |\n| [Observations Since v2.12.5](reports/2025-12-22-observations-since-v2.12.5.md) | Recent changes \u0026 research summary |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSQL Query Notes\u003c/strong\u003e\u003c/summary\u003e\n\nUses **ABAP SQL syntax**, not standard SQL:\n\n| Feature | Status |\n|---------|--------|\n| `ORDER BY col ASCENDING` | Works |\n| `ORDER BY col DESCENDING` | Works |\n| `ORDER BY col ASC/DESC` | **FAILS** - use ASCENDING/DESCENDING |\n| `LIMIT n` | **FAILS** - use `max_rows` parameter |\n\n\u003c/details\u003e\n\n## Development\n\n```bash\n# Build\nmake build          # Current platform\nmake build-all      # All 9 platforms\n\n# Test\ngo test ./...                              # Unit tests (249)\ngo test -tags=integration -v ./pkg/adt/    # Integration tests (21+)\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eArchitecture\u003c/strong\u003e\u003c/summary\u003e\n\n```\nvibing-steampunk/\n├── cmd/vsp/main.go           # CLI (cobra/viper)\n├── pkg/adt/\n│   ├── client.go             # ADT client + read ops\n│   ├── crud.go               # CRUD operations\n│   ├── devtools.go           # Syntax check, activate, tests\n│   ├── codeintel.go          # Definition, refs, completion\n│   ├── workflows.go          # High-level workflows\n│   └── http.go               # HTTP transport (CSRF, auth)\n├── internal/mcp/server.go    # MCP tool handlers (62 tools)\n├── internal/lsp/             # ABAP LSP server (diagnostics, go-to-def)\n└── pkg/dsl/                  # DSL \u0026 workflow engine\n```\n\n\u003c/details\u003e\n\n## Project Status\n\n| Metric | Value |\n|--------|-------|\n| **Tools** | 122 (81 focused, 122 expert) |\n| **Unit Tests** | 270+ |\n| **Platforms** | 9 (Linux, macOS, Windows × amd64/arm64/386) |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eRoadmap\u003c/strong\u003e\u003c/summary\u003e\n\n### Completed (v2.15.0)\n- [x] DSL \u0026 Workflow Engine\n- [x] CDS Dependency Analysis (`GetCDSDependencies`)\n- [x] ATC Code Quality Checks (`RunATCCheck`)\n- [x] ExecuteABAP (code injection via unit tests)\n- [x] System Info \u0026 Components (`GetSystemInfo`, `GetInstalledComponents`)\n- [x] Call Graph \u0026 Object Structure (`GetCallGraph`, `GetObjectStructure`)\n- [x] Short Dumps / Runtime Errors - `GetDumps`, `GetDump` (RABAX)\n- [x] ABAP Profiler / Traces - `ListTraces`, `GetTrace` (ATRA)\n- [x] SQL Trace - `GetSQLTraceState`, `ListSQLTraces` (ST05)\n- [x] **RAP OData E2E** - DDLS, SRVD, SRVB create + publish (v2.6.0)\n- [x] **External Breakpoints** - Line, exception, statement, message (v2.7.0)\n- [x] **Debug Session** - Listener, attach, detach, step, stack, variables (v2.8.0)\n- [x] **Tool Group Disablement** - `--disabled-groups 5THD` (v2.10.0)\n- [x] **UI5/BSP Read** - `UI5ListApps`, `UI5GetApp`, `UI5GetFileContent` (v2.10.1)\n- [x] **Feature Detection** - `GetFeatures` tool + system capability probing (v2.12.4)\n- [x] **WriteSource SRVB** - Create Service Bindings via unified API (v2.12.4)\n- [x] **Call Graph \u0026 RCA** - GetCallersOf, GetCalleesOf, TraceExecution (v2.13.0)\n- [x] **Lua Scripting** - REPL, 40+ bindings, debug session management (v2.14.0)\n- [x] **WebSocket Debugging** - ZADT_VSP handler, TPDAPI integration (v2.15.0)\n- [x] **Force Replay** - Variable history, state injection (v2.15.0)\n\n### Parked (Needs Further Work)\n- [ ] **AMDP Debugger** - Experimental: Session works, breakpoint triggering under investigation ([Report](reports/2025-12-22-001-amdp-debugging-investigation.md))\n- [ ] **UI5/BSP Write** - ADT filestore is read-only, needs custom plugin via `/UI5/CL_REPOSITORY_LOAD`\n- [x] **abapGit Export** - WebSocket integration complete (v2.16.0) - GitTypes, GitExport tools ([Report](reports/2025-12-23-002-abapgit-websocket-integration-complete.md))\n- [ ] **abapGit Import** - Requires `ZCL_ABAPGIT_OBJECTS=\u003edeserialize` with virtual repository\n\n### Planned\n- [ ] API Release State (ARS) - Contract stability checks\n- [ ] Message Server Logs\n- [ ] Background Job Management\n\n### Future Considerations\n- [ ] AMDP Session Persistence (enable full HANA debugging)\n- [ ] Graph Traversal \u0026 Analysis (code dependency graphs)\n- [ ] Test Intelligence (smart test execution based on changes)\n- [ ] Standard API Surface Scraper\n\n**Research Reports:**\n- [AMDP Session Architecture](reports/2025-12-05-019-amdp-session-architecture.md) - Session binding analysis \u0026 solutions\n- [Native ADT Features](reports/2025-12-05-005-native-adt-features-deep-dive.md) - Comprehensive ADT capability analysis\n- [ADT Debugger API](reports/2025-12-05-012-adt-debugger-api-deep-dive.md) - External debugging REST API\n- [AI-Powered RCA](reports/2025-12-05-013-ai-powered-rca-workflows.md) - Vision for AI-assisted debugging\n\n\u003c/details\u003e\n\n## Lua Scripting (New in v2.14)\n\nAutomate debugging workflows with Lua scripts:\n\n```bash\n# Interactive REPL\nvsp lua\n\n# Run a script\nvsp lua examples/scripts/debug-session.lua\n\n# Execute inline\nvsp lua -e 'print(json.encode(searchObject(\"ZCL_*\", 10)))'\n```\n\n**Example: Set breakpoint and debug**\n```lua\n-- Set breakpoint\nlocal bpId = setBreakpoint(\"ZTEST_PROGRAM\", 42)\nprint(\"Breakpoint: \" .. bpId)\n\n-- Wait for debuggee\nlocal event = listen(60)\nif event then\n    attach(event.id)\n    print(\"Stack:\")\n    for i, frame in ipairs(getStack()) do\n        print(\"  \" .. frame.program .. \":\" .. frame.line)\n    end\n    stepOver()\n    detach()\nend\n```\n\n**Available Functions:**\n- **Search**: `searchObject`, `grepObjects`\n- **Source**: `getSource`, `writeSource`, `editSource`\n- **Debug**: `setBreakpoint`, `listen`, `attach`, `detach`, `stepOver`, `stepInto`, `stepReturn`, `continue_`, `getStack`, `getVariables`\n- **Checkpoints**: `saveCheckpoint`, `getCheckpoint`, `listCheckpoints`, `injectCheckpoint`\n- **Diagnostics**: `getDumps`, `getDump`, `runUnitTests`, `syntaxCheck`\n- **Call Graph**: `getCallGraph`, `getCallersOf`, `getCalleesOf`\n- **Utilities**: `print`, `sleep`, `json.encode`, `json.decode`\n\nSee `examples/scripts/` for more examples.\n\n## RCA, Replay \u0026 Test Extraction\n\n### The Vision: AI-Powered Debugging Pipeline\n\n```\n┌─────────────────────────────────────────────────────────────────────────────┐\n│  1. SET BREAKPOINT    →  2. RUN PROGRAM    →  3. CAPTURE CONTEXT           │\n│     setBreakpoint()       (trigger via         saveCheckpoint()             │\n│     on FM/method          unit test/RFC)       for each hit                 │\n├─────────────────────────────────────────────────────────────────────────────┤\n│  4. EXTRACT TEST CASES  →  5. AI NORMALIZE  →  6. GENERATE UNIT TESTS      │\n│     inputs + outputs       deduplicate,         ABAP Unit classes           │\n│     from checkpoints       explain patterns     with mocks                  │\n└─────────────────────────────────────────────────────────────────────────────┘\n```\n\n### Example: Capture FM Execution for Test Generation\n\n```lua\n-- Step 1: Set breakpoint on function module entry\nlocal bpId = setBreakpoint(\"SAPL\u003cFGROUP\u003e\", 10)  -- Entry point\n\n-- Step 2: Prepare to capture multiple executions\nlocal captures = {}\n\n-- Step 3: Loop to capture test cases\nfor i = 1, 10 do\n    local event = listen(120)  -- Wait for debuggee\n    if not event then break end\n\n    attach(event.id)\n\n    -- Capture input parameters at entry\n    local vars = getVariables()\n    local testCase = {\n        id = i,\n        inputs = extractInputs(vars),  -- IV_*, IT_*, IS_*\n        timestamp = os.time()\n    }\n\n    -- Step to end to capture outputs\n    continue_()\n    local event2 = listen(5)\n    if event2 then\n        attach(event2.id)\n        testCase.outputs = extractOutputs(getVariables())  -- EV_*, ET_*, ES_*, RETURN\n    end\n\n    -- Save checkpoint for replay\n    saveCheckpoint(\"testcase_\" .. i, testCase)\n    table.insert(captures, testCase)\n\n    detach()\nend\n\n-- Step 4: Export for AI processing\nprint(json.encode(captures))\n```\n\n### AI Processing Pipeline\n\nAfter capturing test cases, AI can:\n\n1. **Normalize \u0026 Deduplicate** - Group similar inputs, identify unique scenarios\n2. **Explain Patterns** - \"TestCase 3 tests error path when IV_AMOUNT \u003c 0\"\n3. **Generate Unit Tests** - Create ABAP Unit test class with proper mocks\n\n```\nUser: \"Analyze captured test cases and generate unit tests\"\n\nAI Workflow:\n  1. Load checkpoints     → listCheckpoints(\"testcase_*\")\n  2. Analyze patterns     → Cluster by input signatures\n  3. Identify edge cases  → Empty tables, zero values, error conditions\n  4. Generate mock specs  → Which FMs/DB tables need mocking\n  5. Create ABAP Unit     → ZCL_TEST_\u003cFM\u003e with test methods\n  6. Deploy tests         → WriteSource to SAP system\n```\n\n### What Works Today (v2.14)\n\n| Feature | Status | Command/Function |\n|---------|--------|------------------|\n| Set breakpoints | ✅ | `setBreakpoint(program, line)` |\n| Listen for debuggee | ✅ | `listen(timeout)` |\n| Attach/detach | ✅ | `attach(id)`, `detach()` |\n| Step execution | ✅ | `stepOver()`, `stepInto()`, `continue_()` |\n| Get variables | ✅ | `getVariables()` |\n| Get stack trace | ✅ | `getStack()` |\n| Save checkpoints | ✅ | `saveCheckpoint(name, data)` |\n| Load checkpoints | ✅ | `getCheckpoint(name)` |\n| Call graph analysis | ✅ | `getCallersOf()`, `getCalleesOf()` |\n| Short dump analysis | ✅ | `getDumps()`, `getDump(id)` |\n\n### Coming in Future Phases\n\n| Feature | Phase | Description |\n|---------|-------|-------------|\n| Variable history recording | 5.2 | ✅ Track all variable changes during execution |\n| Force Replay (state injection) | 5.5 | ✅ Inject saved state into live debug session |\n| Test case extraction | 6.1 | Automated input/output extraction from recordings |\n| ABAP test generator | 6.3 | Generate ABAP Unit classes from test cases |\n| Mock framework | 6.4 | ZCL_VSP_MOCK for DB/RFC mocking |\n| Isolated playground | 7.1 | Fast test execution with mocked dependencies |\n| Time-travel debugging | 8.1 | Navigate backwards through execution |\n\n### Related Documentation\n\n| Document | Description |\n|----------|-------------|\n| [VISION.md](VISION.md) | The dream: AI as a senior developer |\n| [ROADMAP.md](ROADMAP.md) | Detailed implementation timeline |\n| [TAS \u0026 Scripting](reports/2025-12-21-001-tas-scripting-time-travel-vision.md) | Technical design for TAS-style debugging |\n| [Test Extraction](reports/2025-12-21-002-test-extraction-isolated-replay.md) | Playground and mock architecture |\n| [Force Replay](reports/2025-12-21-003-force-replay-state-injection.md) | State injection design |\n| [**Implications Analysis**](reports/2025-12-21-004-test-extraction-implications.md) | Paradigm shift: archaeology → observation |\n| [AI-Powered RCA](reports/2025-12-05-013-ai-powered-rca-workflows.md) | Root cause analysis workflows |\n\n---\n\n## Vision \u0026 Roadmap\n\n**Where we're going:** TAS-style debugging, time-travel, AI-powered RCA\n\n| Phase | Target | Features |\n|-------|--------|----------|\n| 5 | Q1 2026 | Lua scripting ✅, variable history, checkpoints, Force Replay |\n| 6 | Q2 2026 | Test case extraction, ABAP test generator, mock framework |\n| 7 | Q3 2026 | Isolated playground with mocks, patch \u0026 re-run |\n| 8 | Q4 2026 | Time-travel debugging, temporal queries |\n| 9+ | 2027 | AI-suggested breakpoints, multi-agent debugging, self-healing |\n\n**Read more:**\n- [VISION.md](VISION.md) - The dream: AI as a senior developer\n- [ROADMAP.md](ROADMAP.md) - Detailed implementation plan\n- [TAS \u0026 Scripting Report](reports/2025-12-21-001-tas-scripting-time-travel-vision.md) - Full technical design\n- [Test Extraction Report](reports/2025-12-21-002-test-extraction-isolated-replay.md) - Playground architecture\n\n## License\n\nMIT\n\n## Contributing\n\nContributions welcome! See [ARCHITECTURE.md](ARCHITECTURE.md) and [CLAUDE.md](CLAUDE.md) for guidelines.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foisee%2Fvibing-steampunk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foisee%2Fvibing-steampunk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foisee%2Fvibing-steampunk/lists"}