@mcp-abap-adt/core 6.11.0 → 6.11.1
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/CHANGELOG.md +6 -0
- package/dist/handlers/program/readonly/handleGetProgFullCode.js +4 -4
- package/dist/handlers/program/readonly/handleReadProgram.d.ts.map +1 -1
- package/dist/handlers/program/readonly/handleReadProgram.js +16 -0
- package/dist/handlers/program/readonly/handleReadProgram.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [6.11.1] - 2026-05-29
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- **`ReadProgram` returned a silent `{ success: true, source_code: null }` for include names.** LLM agents loading a report's full source call `ReadProgram` on the include names returned by `GetIncludesList`, get `null`, read it as a permission/inactive-object problem rather than "wrong tool", and stall. A readable main program (`PROG/P`) always returns source; when both source and metadata come back empty the name is an include (`PROG/I`). `ReadProgram` now returns a structured `{ success: false, error: "include_name_passed", suggestion: "GetInclude(\"<name>\")" }` so the caller gets an actionable signal at the point of failure. (#91)
|
|
9
|
+
- **`GetProgFullCode` read include source via the wrong content key.** `handleGetInclude` returns `{ type: 'text', text }`, but two call sites read `c.data`: the recursive `collectIncludes` helper (so nested includes were never discovered) and the `FUGR` branch (so every function-group include came back as `code: null`). All sites now read `c.text`. (#91)
|
|
10
|
+
|
|
5
11
|
## [6.11.0] - 2026-05-28
|
|
6
12
|
|
|
7
13
|
### Added
|
|
@@ -78,8 +78,8 @@ async function handleGetProgFullCode(context, args) {
|
|
|
78
78
|
if (Array.isArray(includeResult?.content) &&
|
|
79
79
|
includeResult.content.length > 0) {
|
|
80
80
|
const c = includeResult.content[0];
|
|
81
|
-
if (c.type === 'text' && '
|
|
82
|
-
code = c.
|
|
81
|
+
if (c.type === 'text' && 'text' in c)
|
|
82
|
+
code = c.text;
|
|
83
83
|
}
|
|
84
84
|
// Find nested includes in code (ABAP: INCLUDE <name>. or 'INCLUDE <name> .')
|
|
85
85
|
const includeRegex = /^\s*INCLUDE\s+([A-Z0-9_/]+)\s*\.\s*$/gim;
|
|
@@ -236,8 +236,8 @@ async function handleGetProgFullCode(context, args) {
|
|
|
236
236
|
if (Array.isArray(incResult?.content) &&
|
|
237
237
|
incResult.content.length > 0) {
|
|
238
238
|
const c = incResult.content[0];
|
|
239
|
-
if (c.type === 'text' && '
|
|
240
|
-
incCode = c.
|
|
239
|
+
if (c.type === 'text' && 'text' in c)
|
|
240
|
+
incCode = c.text;
|
|
241
241
|
}
|
|
242
242
|
codeObjects.push({
|
|
243
243
|
OBJECT_TYPE: 'PROG/I',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleReadProgram.d.ts","sourceRoot":"","sources":["../../../../src/handlers/program/readonly/handleReadProgram.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAOvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;CAqBlB,CAAC;AAEX,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;CAAE;;;;;;
|
|
1
|
+
{"version":3,"file":"handleReadProgram.d.ts","sourceRoot":"","sources":["../../../../src/handlers/program/readonly/handleReadProgram.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAOvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;CAqBlB,CAAC;AAEX,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;CAAE;;;;;;GA8EhE"}
|
|
@@ -60,6 +60,22 @@ async function handleReadProgram(context, args) {
|
|
|
60
60
|
catch (e) {
|
|
61
61
|
logger?.warn(`Could not read metadata for ${programName}: ${e?.message}`);
|
|
62
62
|
}
|
|
63
|
+
// A readable main program (PROG/P) always returns source. If both source
|
|
64
|
+
// and metadata are empty, the name is almost certainly an include
|
|
65
|
+
// (PROG/I) — surface that as a structured error with a redirect instead of
|
|
66
|
+
// a misleading { success: true, source_code: null } that the model reads
|
|
67
|
+
// as a permission/inactive-object problem rather than "wrong tool".
|
|
68
|
+
if (source_code === null && metadata === null) {
|
|
69
|
+
return (0, utils_1.return_response)({
|
|
70
|
+
data: JSON.stringify({
|
|
71
|
+
success: false,
|
|
72
|
+
error: 'include_name_passed',
|
|
73
|
+
program_name: programName,
|
|
74
|
+
message: `No main-program source found for "${programName}". If this is an include (e.g. a name returned by GetIncludesList), call GetInclude("${programName}") instead.`,
|
|
75
|
+
suggestion: `GetInclude("${programName}")`,
|
|
76
|
+
}, null, 2),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
63
79
|
return (0, utils_1.return_response)({
|
|
64
80
|
data: JSON.stringify({
|
|
65
81
|
success: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleReadProgram.js","sourceRoot":"","sources":["../../../../src/handlers/program/readonly/handleReadProgram.ts"],"names":[],"mappings":";;;AA+BA,
|
|
1
|
+
{"version":3,"file":"handleReadProgram.js","sourceRoot":"","sources":["../../../../src/handlers/program/readonly/handleReadProgram.ts"],"names":[],"mappings":"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"}
|