@mcp-abap-adt/core 6.11.1 → 6.11.2

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 CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [6.11.2] - 2026-05-29
6
+
7
+ ### Fixed
8
+ - **`ReadProgram` could still return a silent `{ success: true, source_code: null }` for non-main-program names.** The 6.11.1 heuristic only fired when *both* source and metadata came back empty; when the `programs` endpoint returned metadata for a non-`PROG/P` object (e.g. an include) the response slipped through to a misleading `success: true` with `source_code: null`. `ReadProgram` now parses `adtcore:type` from the metadata and rejects anything other than a main program (`PROG/P`) with a structured `{ success: false, error: "invalid_object_type", object_type, message }`. No tool redirect is emitted — choosing the right tool is the consumer's decision. The tool description now states it works only for main programs (`PROG/P`). (#91)
9
+
5
10
  ## [6.11.1] - 2026-05-29
6
11
 
7
12
  ### Fixed
@@ -2,7 +2,7 @@ import type { HandlerContext } from '../../../lib/handlers/interfaces';
2
2
  export declare const TOOL_DEFINITION: {
3
3
  readonly name: "ReadProgram";
4
4
  readonly available_in: readonly ["onprem", "legacy"];
5
- readonly description: "Operation: Read, Create, Update. Subject: Program. Will be useful for reading, creating, or updating program. [read-only] Read ABAP program (report) source code and metadata. Answers: \"show program code\", \"display report source\", \"view program X\", \"get program source\". Returns source code, package, responsible, description.";
5
+ readonly description: "Operation: Read, Create, Update. Subject: Program. Will be useful for reading, creating, or updating program. [read-only] Read ABAP MAIN PROGRAM (report) source code and metadata. Works ONLY for main programs (adtcore type PROG/P); include names (PROG/I) and other object types are rejected with error \"invalid_object_type\". Answers: \"show program code\", \"display report source\", \"view program X\", \"get program source\". Returns source code, package, responsible, description.";
6
6
  readonly inputSchema: {
7
7
  readonly type: "object";
8
8
  readonly properties: {
@@ -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;;;;;;GA8EhE"}
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;;;;;;GA0FhE"}
@@ -7,7 +7,7 @@ const utils_1 = require("../../../lib/utils");
7
7
  exports.TOOL_DEFINITION = {
8
8
  name: 'ReadProgram',
9
9
  available_in: ['onprem', 'legacy'],
10
- description: 'Operation: Read, Create, Update. Subject: Program. Will be useful for reading, creating, or updating program. [read-only] Read ABAP program (report) source code and metadata. Answers: "show program code", "display report source", "view program X", "get program source". Returns source code, package, responsible, description.',
10
+ description: 'Operation: Read, Create, Update. Subject: Program. Will be useful for reading, creating, or updating program. [read-only] Read ABAP MAIN PROGRAM (report) source code and metadata. Works ONLY for main programs (adtcore type PROG/P); include names (PROG/I) and other object types are rejected with error "invalid_object_type". Answers: "show program code", "display report source", "view program X", "get program source". Returns source code, package, responsible, description.',
11
11
  inputSchema: {
12
12
  type: 'object',
13
13
  properties: {
@@ -60,19 +60,30 @@ 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) {
63
+ // ReadProgram only reads main programs (PROG/P). Detect the actual object
64
+ // type from the metadata and reject anything else (e.g. includes PROG/I) so
65
+ // the caller gets a structured "invalid_object_type" error instead of a
66
+ // misleading { success: true, source_code: null } that reads as a
67
+ // permission/inactive-object problem rather than "wrong object type".
68
+ // No redirect/suggestion is emitted choosing the right tool is the
69
+ // consumer's decision; we only report what the object is.
70
+ const objectType = metadata
71
+ ? (/adtcore:type="([^"]+)"/.exec(metadata)?.[1] ?? null)
72
+ : null;
73
+ const isMainProgram = objectType === 'PROG/P';
74
+ // When metadata is missing entirely we cannot read it as a main program
75
+ // either (the programs endpoint returned nothing usable for both source
76
+ // and metadata) — treat that as the same error.
77
+ if (!isMainProgram || (source_code === null && metadata === null)) {
69
78
  return (0, utils_1.return_response)({
70
79
  data: JSON.stringify({
71
80
  success: false,
72
- error: 'include_name_passed',
81
+ error: 'invalid_object_type',
73
82
  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}")`,
83
+ object_type: objectType,
84
+ message: objectType
85
+ ? `"${programName}" has object type ${objectType}, not a main program (PROG/P). ReadProgram reads only main programs (PROG/P).`
86
+ : `No main-program (PROG/P) source or metadata found for "${programName}". ReadProgram reads only main programs (PROG/P).`,
76
87
  }, null, 2),
77
88
  });
78
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handleReadProgram.js","sourceRoot":"","sources":["../../../../src/handlers/program/readonly/handleReadProgram.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handleReadProgram.js","sourceRoot":"","sources":["../../../../src/handlers/program/readonly/handleReadProgram.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/core",
3
3
  "mcpName": "io.github.fr0ster/mcp-abap-adt",
4
- "version": "6.11.1",
4
+ "version": "6.11.2",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {