sap-ai-dev-toolkit 0.7.3 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -22
- package/package.json +1 -1
- package/src/terminal-ui.mjs +13 -6
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
4
|
<strong>Build, test, and deliver ABAP with AI that understands your SAP landscape.</strong><br>
|
|
5
|
-
Bring
|
|
5
|
+
Bring your favorite AI coding assistant into your SAP development workflow with destination-aware SAP tools.<br>
|
|
6
6
|
Explore real system context, make focused changes, and verify results before delivery.
|
|
7
7
|
</p>
|
|
8
8
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
17
17
|
<img src="https://img.shields.io/badge/SAP-Business%20Application%20Studio-0A6ED1?style=flat-square&logo=sap&logoColor=white" alt="SAP Business Application Studio">
|
|
18
|
-
<img src="https://img.shields.io/badge/
|
|
18
|
+
<img src="https://img.shields.io/badge/AI%20agents-Copilot%20%7C%20Claude%20%7C%20Codex%20%7C%20Cursor%20%7C%20Gemini%20%7C%20opencode-000000?style=flat-square" alt="Works with GitHub Copilot, Claude Code, OpenAI Codex, Cursor, Gemini CLI, and opencode">
|
|
19
19
|
<img src="https://img.shields.io/badge/MCP-enabled-7B61FF?style=flat-square" alt="MCP enabled">
|
|
20
20
|
<img src="https://img.shields.io/badge/SAP%20ADT-connected-0A6ED1?style=flat-square&logo=sap&logoColor=white" alt="SAP ADT connected">
|
|
21
21
|
<img src="https://img.shields.io/badge/ABAP-CDS%20%7C%20RAP-EA4AAA?style=flat-square" alt="ABAP CDS RAP">
|
|
@@ -23,24 +23,19 @@
|
|
|
23
23
|
|
|
24
24
|
<p align="center">
|
|
25
25
|
<a href="#install"><strong>Get started →</strong></a> ·
|
|
26
|
-
<a href="#
|
|
26
|
+
<a href="#agents">Meet the agents</a> ·
|
|
27
27
|
<a href="#bas">Connect your SAP systems</a> ·
|
|
28
28
|
<a href="#tools">Explore the tools</a>
|
|
29
29
|
</p>
|
|
30
30
|
|
|
31
31
|
## From a prompt to SAP-ready work
|
|
32
32
|
|
|
33
|
-
SAP AI Dev Toolkit connects
|
|
33
|
+
SAP AI Dev Toolkit connects your AI coding assistant to the SAP development tools available for each selected destination. Agents can inspect ABAP and CDS, propose changes, run checks, and return the evidence—without losing sight of which SAP system each operation targets.
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Toolkit -->|destination-scoped MCP| VSP[VSP and BAS destination]
|
|
40
|
-
VSP -->|SAP ADT| SAP[SAP system]
|
|
41
|
-
SAP -->|results and diagnostics| Toolkit
|
|
42
|
-
Toolkit --> Chat
|
|
43
|
-
```
|
|
35
|
+
<p align="center">
|
|
36
|
+
<strong>Agent chat</strong> → <strong>destination-scoped MCP</strong> → <strong>VSP + BAS destination</strong> → <strong>SAP ADT</strong> → <strong>your SAP system</strong><br>
|
|
37
|
+
<em>results and diagnostics flow back along the same path</em>
|
|
38
|
+
</p>
|
|
44
39
|
|
|
45
40
|
<p align="center"><strong>Explore → Build → Verify → Prepare for delivery</strong></p>
|
|
46
41
|
|
|
@@ -62,9 +57,9 @@ Then connect a destination in SAP Business Application Studio:
|
|
|
62
57
|
1. Open the Command Palette.
|
|
63
58
|
2. Run **MCP: List Servers**.
|
|
64
59
|
3. Start the server named after your selected BAS destination (the lowercase slug, for example `demo-abap` for destination `DEMO_ABAP`).
|
|
65
|
-
4. In
|
|
60
|
+
4. In your AI assistant's chat, choose the best-fit bundled agent from the agent picker (GitHub Copilot, Claude Code, and opencode install the agents): **SAP Solution Architect**, **ABAP Developer**, **ABAP Runtime Debugger**, **RAP Service Developer**, or **HANA Cloud/HDI Specialist**.
|
|
66
61
|
5. In the Chat tools picker, enable the server for that BAS destination.
|
|
67
|
-
6. Ask
|
|
62
|
+
6. Ask the agent to inspect, build, test, or verify something in your SAP landscape.
|
|
68
63
|
|
|
69
64
|
Use the attached destination-prefixed tools directly in chat. Do not launch `sap-ai-dev` or handcraft MCP JSON-RPC in a terminal to discover or call them.
|
|
70
65
|
|
|
@@ -72,7 +67,7 @@ Use the attached destination-prefixed tools directly in chat. Do not launch `sap
|
|
|
72
67
|
|
|
73
68
|
## 🤖 Available agents and skills
|
|
74
69
|
|
|
75
|
-
**Agents:** Five user-invocable custom agents are included. Select the best fit from the agent picker in GitHub Copilot
|
|
70
|
+
**Agents:** Five user-invocable custom agents are included. Select the best fit from the agent picker in your harness's chat (GitHub Copilot, Claude Code, or opencode), as shown in Quick start.
|
|
76
71
|
|
|
77
72
|
| | Agent | Best for |
|
|
78
73
|
| --- | --- | --- |
|
|
@@ -86,7 +81,7 @@ Use the attached destination-prefixed tools directly in chat. Do not launch `sap
|
|
|
86
81
|
|
|
87
82
|
Agents and skills install for the harnesses you pick during global installation: a multi-select offers GitHub Copilot and Claude Code pre-checked, plus OpenAI Codex, Cursor, Gemini CLI, and opencode. In non-interactive installs they are installed for GitHub Copilot only. Repository-scoped installation instructions appear below.
|
|
88
83
|
|
|
89
|
-
## ✨ Your SAP development cockpit, inside
|
|
84
|
+
## ✨ Your SAP development cockpit, inside your AI assistant
|
|
90
85
|
|
|
91
86
|
`sap-ai-dev-toolkit` installs `sap-ai-dev`, discovers your BAS destinations, and exposes a curated SAP development toolset through MCP. Instead of manually switching between chat, terminal commands, repository searches, ADT screens, and SAP checks, describe the outcome you want and let the appropriate bundled agent coordinate the available tools.
|
|
92
87
|
|
|
@@ -156,7 +151,7 @@ The catalog below covers source inspection, data, editing, quality, transports,
|
|
|
156
151
|
|
|
157
152
|
## 🧠 Five agents, fourteen focused skills
|
|
158
153
|
|
|
159
|
-
The package ships with five custom agents plus fourteen task-focused
|
|
154
|
+
The package ships with five custom agents plus fourteen task-focused Agent Skills:
|
|
160
155
|
|
|
161
156
|
| | Skill | Best for |
|
|
162
157
|
| --- | --- | --- |
|
|
@@ -217,7 +212,7 @@ The configured identity must be a separate least-privileged read-only HANA user.
|
|
|
217
212
|
|
|
218
213
|
## 💡 Example requests
|
|
219
214
|
|
|
220
|
-
Once the destination server is enabled in
|
|
215
|
+
Once the destination server is enabled in your chat's tools picker, ask for outcomes instead of manually orchestrating individual SAP operations:
|
|
221
216
|
|
|
222
217
|
> Find every reference to `ZCL_ORDER`, explain the impact of changing method `CREATE_ORDER`, and show me the callers before editing anything.
|
|
223
218
|
|
|
@@ -313,11 +308,11 @@ At the end of a global install, the color-coded summary shows the MCP config pat
|
|
|
313
308
|
3. Select the generated server name shown in the report and choose **Start Server**.
|
|
314
309
|
4. Use **MCP: Open User Configuration** to inspect or edit the generated entries. Each entry is isolated to its destination.
|
|
315
310
|
|
|
316
|
-
<a id="
|
|
311
|
+
<a id="agents"></a>
|
|
317
312
|
|
|
318
|
-
## 🤖
|
|
313
|
+
## 🤖 ABAP agents and skills for your AI harness
|
|
319
314
|
|
|
320
|
-
The package includes five user-invocable custom agents (**SAP Solution Architect**, **ABAP Developer**, **ABAP Runtime Debugger**, **RAP Service Developer**, and **HANA Cloud/HDI Specialist**) and fourteen task-focused Agent Skills for GitHub Copilot in BAS.
|
|
315
|
+
The package includes five user-invocable custom agents (**SAP Solution Architect**, **ABAP Developer**, **ABAP Runtime Debugger**, **RAP Service Developer**, and **HANA Cloud/HDI Specialist**) and fourteen task-focused Agent Skills for GitHub Copilot, Claude Code, and other supported AI coding harnesses in BAS.
|
|
321
316
|
|
|
322
317
|
### 🧠 How the SAP Solution Architect and ABAP Developer agents work
|
|
323
318
|
|
package/package.json
CHANGED
package/src/terminal-ui.mjs
CHANGED
|
@@ -103,6 +103,13 @@ function truncateToColumns(text, columns) {
|
|
|
103
103
|
return truncateString(value, Math.max(1, columns));
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
// A rendered line can wrap onto several physical terminal rows; redrawing must
|
|
107
|
+
// count those rows or cursor-up clears too little and stale fragments remain.
|
|
108
|
+
function physicalRows(lines, columns) {
|
|
109
|
+
if (columns <= 0) return lines.length;
|
|
110
|
+
return lines.reduce((total, line) => total + Math.max(1, Math.ceil(stringWidth(line) / columns)), 0);
|
|
111
|
+
}
|
|
112
|
+
|
|
106
113
|
function checkboxPageSize(output, choiceCount) {
|
|
107
114
|
const rows = Number.isFinite(output?.rows) ? output.rows : 24;
|
|
108
115
|
return clamp(Math.min(choiceCount, rows - 7), 1, Math.max(1, choiceCount));
|
|
@@ -134,7 +141,7 @@ export async function checkboxPrompt({ message, choices, required = false, short
|
|
|
134
141
|
const pageSize = checkboxPageSize(output, choices.length);
|
|
135
142
|
ensureVisible(pageSize);
|
|
136
143
|
const lines = [];
|
|
137
|
-
lines.push(`${message} (Space: select, ${shortcuts?.all || 'a'}: toggle all, Enter: confirm)
|
|
144
|
+
lines.push(truncateToColumns(`${message} (Space: select, ${shortcuts?.all || 'a'}: toggle all, Enter: confirm)`, columns));
|
|
138
145
|
const end = Math.min(choices.length, top + pageSize);
|
|
139
146
|
for (let index = top; index < end; index += 1) {
|
|
140
147
|
const choice = choices[index];
|
|
@@ -147,12 +154,12 @@ export async function checkboxPrompt({ message, choices, required = false, short
|
|
|
147
154
|
lines.push(truncateToColumns(label, columns));
|
|
148
155
|
}
|
|
149
156
|
if (choices.length > pageSize) {
|
|
150
|
-
lines.push(colorText(` Showing ${top + 1}-${end} of ${choices.length}; use ↑/↓ to scroll.`, 'cyan', output));
|
|
157
|
+
lines.push(truncateToColumns(colorText(` Showing ${top + 1}-${end} of ${choices.length}; use ↑/↓ to scroll.`, 'cyan', output), columns));
|
|
151
158
|
}
|
|
152
|
-
if (error) lines.push(colorText(` ${error}`, 'red', output));
|
|
159
|
+
if (error) lines.push(truncateToColumns(colorText(` ${error}`, 'red', output), columns));
|
|
153
160
|
clearRendered();
|
|
154
161
|
write(`${lines.join('\n')}\n`);
|
|
155
|
-
renderedLines = lines
|
|
162
|
+
renderedLines = physicalRows(lines, columns);
|
|
156
163
|
};
|
|
157
164
|
|
|
158
165
|
return new Promise((resolve, reject) => {
|
|
@@ -237,10 +244,10 @@ export async function textPrompt({ message, secret = false, required = true, pla
|
|
|
237
244
|
const shown = secret ? masked() : value;
|
|
238
245
|
const display = shown || colorText(placeholder, 'cyan', output);
|
|
239
246
|
lines.push(truncateToColumns(`❯ ${display}`, columns));
|
|
240
|
-
if (error) lines.push(colorText(` ${error}`, 'red', output));
|
|
247
|
+
if (error) lines.push(truncateToColumns(colorText(` ${error}`, 'red', output), columns));
|
|
241
248
|
clearRendered();
|
|
242
249
|
write(`${lines.join('\n')}\n`);
|
|
243
|
-
renderedLines = lines
|
|
250
|
+
renderedLines = physicalRows(lines, columns);
|
|
244
251
|
};
|
|
245
252
|
|
|
246
253
|
return new Promise((resolve, reject) => {
|