@mcp-abap-adt/core 4.7.1 → 4.8.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 +14 -0
- package/dist/handlers/system/readonly/handleRuntimeGetDumpById.d.ts +14 -4
- package/dist/handlers/system/readonly/handleRuntimeGetDumpById.d.ts.map +1 -1
- package/dist/handlers/system/readonly/handleRuntimeGetDumpById.js +82 -9
- package/dist/handlers/system/readonly/handleRuntimeGetDumpById.js.map +1 -1
- package/dist/handlers/system/readonly/handleRuntimeListDumps.d.ts +11 -1
- package/dist/handlers/system/readonly/handleRuntimeListDumps.d.ts.map +1 -1
- package/dist/handlers/system/readonly/handleRuntimeListDumps.js +49 -3
- package/dist/handlers/system/readonly/handleRuntimeListDumps.js.map +1 -1
- package/docs/user-guide/AVAILABLE_TOOLS.md +7 -3
- package/docs/user-guide/AVAILABLE_TOOLS_READONLY.md +7 -3
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [4.8.1] - 2026-04-02
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- Add build (tsc) step to pre-commit hook to catch type errors before commit
|
|
9
|
+
|
|
10
|
+
## [4.8.0] - 2026-04-02
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- `RuntimeListDumps`: new `from` / `to` parameters (YYYYMMDDHHMMSS system local time) for server-side time-range filtering. Response is now a structured `dumps` array with `dump_id`, `datetime`, `error`, `title`, and `user` fields — replaces the raw atom feed payload.
|
|
14
|
+
- `RuntimeGetDumpById`: dump lookup by `datetime` + `user` without knowing the dump ID. Pass `datetime` (ISO or `"YYYY-MM-DD HH:MM:SS"`) and `user` to resolve the dump automatically using a ±2-minute server-side window and ±60-second client-side match. `dump_id` is now optional.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- `RuntimeGetDumpById`: `dump_id` parameter is no longer required — provide either `dump_id` or `datetime` + `user`.
|
|
18
|
+
|
|
5
19
|
## [4.7.1] - 2026-04-01
|
|
6
20
|
|
|
7
21
|
### Fixed
|
|
@@ -2,13 +2,21 @@ import type { HandlerContext } from '../../../lib/handlers/interfaces';
|
|
|
2
2
|
export declare const TOOL_DEFINITION: {
|
|
3
3
|
readonly name: "RuntimeGetDumpById";
|
|
4
4
|
readonly available_in: readonly ["onprem", "cloud"];
|
|
5
|
-
readonly description: "[runtime] Read a specific ABAP runtime dump
|
|
5
|
+
readonly description: "[runtime] Read a specific ABAP runtime dump. Identify the dump by datetime + user (preferred, e.g. from a CALM event), or pass dump_id directly if already known.";
|
|
6
6
|
readonly inputSchema: {
|
|
7
7
|
readonly type: "object";
|
|
8
8
|
readonly properties: {
|
|
9
|
+
readonly datetime: {
|
|
10
|
+
readonly type: "string";
|
|
11
|
+
readonly description: "Dump datetime (ISO or \"YYYY-MM-DD HH:MM:SS\"). Combined with user, uniquely identifies the dump. Preferred over dump_id.";
|
|
12
|
+
};
|
|
13
|
+
readonly user: {
|
|
14
|
+
readonly type: "string";
|
|
15
|
+
readonly description: "SAP username whose dump to read. Required when using datetime lookup.";
|
|
16
|
+
};
|
|
9
17
|
readonly dump_id: {
|
|
10
18
|
readonly type: "string";
|
|
11
|
-
readonly description: "
|
|
19
|
+
readonly description: "Full runtime dump ID. Use only when already known; prefer datetime + user otherwise.";
|
|
12
20
|
};
|
|
13
21
|
readonly view: {
|
|
14
22
|
readonly type: "string";
|
|
@@ -17,11 +25,13 @@ export declare const TOOL_DEFINITION: {
|
|
|
17
25
|
readonly default: "default";
|
|
18
26
|
};
|
|
19
27
|
};
|
|
20
|
-
readonly required: readonly [
|
|
28
|
+
readonly required: readonly [];
|
|
21
29
|
};
|
|
22
30
|
};
|
|
23
31
|
interface RuntimeGetDumpByIdArgs {
|
|
24
|
-
dump_id
|
|
32
|
+
dump_id?: string;
|
|
33
|
+
datetime?: string;
|
|
34
|
+
user?: string;
|
|
25
35
|
view?: 'default' | 'summary' | 'formatted';
|
|
26
36
|
}
|
|
27
37
|
export declare function handleRuntimeGetDumpById(context: HandlerContext, args: RuntimeGetDumpByIdArgs): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleRuntimeGetDumpById.d.ts","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleRuntimeGetDumpById.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"handleRuntimeGetDumpById.d.ts","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleRuntimeGetDumpById.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAKvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiClB,CAAC;AAEX,UAAU,sBAAsB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;CAC5C;AAkFD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,sBAAsB;;;;;;GAyC7B"}
|
|
@@ -4,17 +4,26 @@ exports.TOOL_DEFINITION = void 0;
|
|
|
4
4
|
exports.handleRuntimeGetDumpById = handleRuntimeGetDumpById;
|
|
5
5
|
const adt_clients_1 = require("@mcp-abap-adt/adt-clients");
|
|
6
6
|
const utils_1 = require("../../../lib/utils");
|
|
7
|
+
const handleRuntimeListDumps_1 = require("./handleRuntimeListDumps");
|
|
7
8
|
const runtimePayloadParser_1 = require("./runtimePayloadParser");
|
|
8
9
|
exports.TOOL_DEFINITION = {
|
|
9
10
|
name: 'RuntimeGetDumpById',
|
|
10
11
|
available_in: ['onprem', 'cloud'],
|
|
11
|
-
description: '[runtime] Read a specific ABAP runtime dump
|
|
12
|
+
description: '[runtime] Read a specific ABAP runtime dump. Identify the dump by datetime + user (preferred, e.g. from a CALM event), or pass dump_id directly if already known.',
|
|
12
13
|
inputSchema: {
|
|
13
14
|
type: 'object',
|
|
14
15
|
properties: {
|
|
16
|
+
datetime: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Dump datetime (ISO or "YYYY-MM-DD HH:MM:SS"). Combined with user, uniquely identifies the dump. Preferred over dump_id.',
|
|
19
|
+
},
|
|
20
|
+
user: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'SAP username whose dump to read. Required when using datetime lookup.',
|
|
23
|
+
},
|
|
15
24
|
dump_id: {
|
|
16
25
|
type: 'string',
|
|
17
|
-
description: '
|
|
26
|
+
description: 'Full runtime dump ID. Use only when already known; prefer datetime + user otherwise.',
|
|
18
27
|
},
|
|
19
28
|
view: {
|
|
20
29
|
type: 'string',
|
|
@@ -23,24 +32,88 @@ exports.TOOL_DEFINITION = {
|
|
|
23
32
|
default: 'default',
|
|
24
33
|
},
|
|
25
34
|
},
|
|
26
|
-
required: [
|
|
35
|
+
required: [],
|
|
27
36
|
},
|
|
28
37
|
};
|
|
38
|
+
function parseDatetimeToMs(raw) {
|
|
39
|
+
const trimmed = raw.trim();
|
|
40
|
+
// "2026-03-31 18:53:47" — space-separated, treat as UTC
|
|
41
|
+
const spaceForm = trimmed.match(/^(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2}:\d{2})$/);
|
|
42
|
+
if (spaceForm) {
|
|
43
|
+
return Date.parse(`${spaceForm[1]}T${spaceForm[2]}Z`);
|
|
44
|
+
}
|
|
45
|
+
// ISO with or without Z/offset — let Date handle it
|
|
46
|
+
const ms = Date.parse(trimmed);
|
|
47
|
+
if (!isNaN(ms))
|
|
48
|
+
return ms;
|
|
49
|
+
throw new Error(`Cannot parse datetime: "${raw}"`);
|
|
50
|
+
}
|
|
51
|
+
function datetimeToSapLocal(raw) {
|
|
52
|
+
// Convert UTC datetime to YYYYMMDDHHMMSS (best-effort, no TZ conversion —
|
|
53
|
+
// caller should pass system-local time if known, or we use UTC as fallback)
|
|
54
|
+
const ms = parseDatetimeToMs(raw);
|
|
55
|
+
if (isNaN(ms))
|
|
56
|
+
return undefined;
|
|
57
|
+
const d = new Date(ms);
|
|
58
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
59
|
+
return (d.getUTCFullYear().toString() +
|
|
60
|
+
pad(d.getUTCMonth() + 1) +
|
|
61
|
+
pad(d.getUTCDate()) +
|
|
62
|
+
pad(d.getUTCHours()) +
|
|
63
|
+
pad(d.getUTCMinutes()) +
|
|
64
|
+
pad(d.getUTCSeconds()));
|
|
65
|
+
}
|
|
66
|
+
async function resolveDumpId(context, datetime, user) {
|
|
67
|
+
const targetMs = parseDatetimeToMs(datetime);
|
|
68
|
+
// Build from/to window (±2 min) in YYYYMMDDHHMMSS for server-side filtering
|
|
69
|
+
const fromMs = targetMs - 2 * 60_000;
|
|
70
|
+
const toMs = targetMs + 2 * 60_000;
|
|
71
|
+
const fromSap = datetimeToSapLocal(new Date(fromMs).toISOString());
|
|
72
|
+
const toSap = datetimeToSapLocal(new Date(toMs).toISOString());
|
|
73
|
+
const listResult = await (0, handleRuntimeListDumps_1.handleRuntimeListDumps)(context, {
|
|
74
|
+
user,
|
|
75
|
+
from: fromSap,
|
|
76
|
+
to: toSap,
|
|
77
|
+
top: 20,
|
|
78
|
+
});
|
|
79
|
+
if (listResult.isError) {
|
|
80
|
+
const msg = listResult.content[0]?.text ?? 'unknown error';
|
|
81
|
+
throw new Error(`Failed to list dumps for user "${user}": ${msg}`);
|
|
82
|
+
}
|
|
83
|
+
const text = listResult.content.find((c) => c.type === 'text')?.text;
|
|
84
|
+
const data = JSON.parse(text);
|
|
85
|
+
const dumps = data.dumps ?? [];
|
|
86
|
+
// Find closest match within ±60 seconds
|
|
87
|
+
let best;
|
|
88
|
+
for (const d of dumps) {
|
|
89
|
+
const dMs = parseDatetimeToMs(d.datetime);
|
|
90
|
+
const diff = Math.abs(dMs - targetMs);
|
|
91
|
+
if (diff <= 60_000 && (!best || diff < best.diff)) {
|
|
92
|
+
best = { dump_id: d.dump_id, diff };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!best) {
|
|
96
|
+
throw new Error(`No dump found for user="${user}" near datetime="${datetime}" (±60s). Available: ${dumps.map((d) => d.datetime).join(', ')}`);
|
|
97
|
+
}
|
|
98
|
+
return best.dump_id;
|
|
99
|
+
}
|
|
29
100
|
async function handleRuntimeGetDumpById(context, args) {
|
|
30
101
|
const { connection, logger } = context;
|
|
31
102
|
try {
|
|
32
|
-
|
|
33
|
-
|
|
103
|
+
let dumpId = args?.dump_id?.trim();
|
|
104
|
+
if (!dumpId) {
|
|
105
|
+
if (!args?.datetime || !args?.user) {
|
|
106
|
+
throw new Error('Provide either "dump_id" or both "datetime" and "user"');
|
|
107
|
+
}
|
|
108
|
+
dumpId = await resolveDumpId(context, args.datetime, args.user);
|
|
34
109
|
}
|
|
35
110
|
const view = args.view ?? 'default';
|
|
36
111
|
const runtimeClient = new adt_clients_1.AdtRuntimeClient(connection, logger);
|
|
37
|
-
const response = await runtimeClient.getRuntimeDumpById(
|
|
38
|
-
view,
|
|
39
|
-
});
|
|
112
|
+
const response = await runtimeClient.getRuntimeDumpById(dumpId, { view });
|
|
40
113
|
return (0, utils_1.return_response)({
|
|
41
114
|
data: JSON.stringify({
|
|
42
115
|
success: true,
|
|
43
|
-
dump_id:
|
|
116
|
+
dump_id: dumpId,
|
|
44
117
|
view,
|
|
45
118
|
status: response.status,
|
|
46
119
|
payload: (0, runtimePayloadParser_1.parseRuntimePayloadToJson)(response.data),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleRuntimeGetDumpById.js","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleRuntimeGetDumpById.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"handleRuntimeGetDumpById.js","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleRuntimeGetDumpById.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { HandlerContext } from '../../../lib/handlers/interfaces';
|
|
|
2
2
|
export declare const TOOL_DEFINITION: {
|
|
3
3
|
readonly name: "RuntimeListDumps";
|
|
4
4
|
readonly available_in: readonly ["onprem", "cloud"];
|
|
5
|
-
readonly description: "[runtime] List ABAP runtime dumps with optional user filter and paging. Returns
|
|
5
|
+
readonly description: "[runtime] List ABAP runtime dumps with optional user filter and paging. Returns structured list with dump_id, datetime, error type, title, and user.";
|
|
6
6
|
readonly inputSchema: {
|
|
7
7
|
readonly type: "object";
|
|
8
8
|
readonly properties: {
|
|
@@ -10,6 +10,14 @@ export declare const TOOL_DEFINITION: {
|
|
|
10
10
|
readonly type: "string";
|
|
11
11
|
readonly description: "Optional username filter. If omitted, dumps for all users are returned.";
|
|
12
12
|
};
|
|
13
|
+
readonly from: {
|
|
14
|
+
readonly type: "string";
|
|
15
|
+
readonly description: "Start of time range in YYYYMMDDHHMMSS format (system local time). Narrows results to dumps on or after this datetime.";
|
|
16
|
+
};
|
|
17
|
+
readonly to: {
|
|
18
|
+
readonly type: "string";
|
|
19
|
+
readonly description: "End of time range in YYYYMMDDHHMMSS format (system local time). Narrows results to dumps on or before this datetime.";
|
|
20
|
+
};
|
|
13
21
|
readonly inlinecount: {
|
|
14
22
|
readonly type: "string";
|
|
15
23
|
readonly enum: readonly ["allpages", "none"];
|
|
@@ -33,6 +41,8 @@ export declare const TOOL_DEFINITION: {
|
|
|
33
41
|
};
|
|
34
42
|
interface RuntimeListDumpsArgs {
|
|
35
43
|
user?: string;
|
|
44
|
+
from?: string;
|
|
45
|
+
to?: string;
|
|
36
46
|
inlinecount?: 'allpages' | 'none';
|
|
37
47
|
top?: number;
|
|
38
48
|
skip?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleRuntimeListDumps.d.ts","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleRuntimeListDumps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAIvE,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"handleRuntimeListDumps.d.ts","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleRuntimeListDumps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAIvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ClB,CAAC;AAEX,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA6CD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,oBAAoB;;;;;;GAkD3B"}
|
|
@@ -8,7 +8,7 @@ const runtimePayloadParser_1 = require("./runtimePayloadParser");
|
|
|
8
8
|
exports.TOOL_DEFINITION = {
|
|
9
9
|
name: 'RuntimeListDumps',
|
|
10
10
|
available_in: ['onprem', 'cloud'],
|
|
11
|
-
description: '[runtime] List ABAP runtime dumps with optional user filter and paging. Returns
|
|
11
|
+
description: '[runtime] List ABAP runtime dumps with optional user filter and paging. Returns structured list with dump_id, datetime, error type, title, and user.',
|
|
12
12
|
inputSchema: {
|
|
13
13
|
type: 'object',
|
|
14
14
|
properties: {
|
|
@@ -16,6 +16,14 @@ exports.TOOL_DEFINITION = {
|
|
|
16
16
|
type: 'string',
|
|
17
17
|
description: 'Optional username filter. If omitted, dumps for all users are returned.',
|
|
18
18
|
},
|
|
19
|
+
from: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'Start of time range in YYYYMMDDHHMMSS format (system local time). Narrows results to dumps on or after this datetime.',
|
|
22
|
+
},
|
|
23
|
+
to: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'End of time range in YYYYMMDDHHMMSS format (system local time). Narrows results to dumps on or before this datetime.',
|
|
26
|
+
},
|
|
19
27
|
inlinecount: {
|
|
20
28
|
type: 'string',
|
|
21
29
|
enum: ['allpages', 'none'],
|
|
@@ -37,30 +45,68 @@ exports.TOOL_DEFINITION = {
|
|
|
37
45
|
required: [],
|
|
38
46
|
},
|
|
39
47
|
};
|
|
48
|
+
function extractDumpId(href) {
|
|
49
|
+
const match = href.match(/\/runtime\/dump\/(.+)$/);
|
|
50
|
+
return match ? decodeURIComponent(match[1]) : href;
|
|
51
|
+
}
|
|
52
|
+
function parseDumpEntries(payload) {
|
|
53
|
+
const feed = payload?.['atom:feed'];
|
|
54
|
+
if (!feed)
|
|
55
|
+
return [];
|
|
56
|
+
const raw = feed['atom:entry'];
|
|
57
|
+
if (!raw)
|
|
58
|
+
return [];
|
|
59
|
+
const entries = Array.isArray(raw) ? raw : [raw];
|
|
60
|
+
return entries.map((e) => {
|
|
61
|
+
const links = Array.isArray(e['atom:link'])
|
|
62
|
+
? e['atom:link']
|
|
63
|
+
: [e['atom:link']];
|
|
64
|
+
const selfLink = links.find((l) => l?.rel === 'self');
|
|
65
|
+
const dump_id = selfLink?.href ? extractDumpId(selfLink.href) : '';
|
|
66
|
+
const cats = Array.isArray(e['atom:category'])
|
|
67
|
+
? e['atom:category']
|
|
68
|
+
: [e['atom:category']];
|
|
69
|
+
const error = cats[0]?.term ?? '';
|
|
70
|
+
return {
|
|
71
|
+
dump_id,
|
|
72
|
+
datetime: e['atom:published'] ?? '',
|
|
73
|
+
error,
|
|
74
|
+
title: e['atom:title'] ?? '',
|
|
75
|
+
user: e['atom:author']?.['atom:name'] ?? '',
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
}
|
|
40
79
|
async function handleRuntimeListDumps(context, args) {
|
|
41
80
|
const { connection, logger } = context;
|
|
42
81
|
try {
|
|
43
82
|
const runtimeClient = new adt_clients_1.AdtRuntimeClient(connection, logger);
|
|
44
|
-
const { user, inlinecount, top, skip, orderby } = args || {};
|
|
83
|
+
const { user, from, to, inlinecount, top, skip, orderby } = args || {};
|
|
45
84
|
const response = user
|
|
46
85
|
? await runtimeClient.listRuntimeDumpsByUser(user, {
|
|
86
|
+
from,
|
|
87
|
+
to,
|
|
47
88
|
inlinecount,
|
|
48
89
|
top,
|
|
49
90
|
skip,
|
|
50
91
|
orderby,
|
|
51
92
|
})
|
|
52
93
|
: await runtimeClient.listRuntimeDumps({
|
|
94
|
+
from,
|
|
95
|
+
to,
|
|
53
96
|
inlinecount,
|
|
54
97
|
top,
|
|
55
98
|
skip,
|
|
56
99
|
orderby,
|
|
57
100
|
});
|
|
101
|
+
const payload = (0, runtimePayloadParser_1.parseRuntimePayloadToJson)(response.data);
|
|
102
|
+
const dumps = parseDumpEntries(payload);
|
|
58
103
|
return (0, utils_1.return_response)({
|
|
59
104
|
data: JSON.stringify({
|
|
60
105
|
success: true,
|
|
61
106
|
user_filter: user || null,
|
|
107
|
+
count: dumps.length,
|
|
108
|
+
dumps,
|
|
62
109
|
status: response.status,
|
|
63
|
-
payload: (0, runtimePayloadParser_1.parseRuntimePayloadToJson)(response.data),
|
|
64
110
|
}, null, 2),
|
|
65
111
|
status: response.status,
|
|
66
112
|
statusText: response.statusText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleRuntimeListDumps.js","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleRuntimeListDumps.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"handleRuntimeListDumps.js","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleRuntimeListDumps.ts"],"names":[],"mappings":"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"}
|
|
@@ -944,12 +944,14 @@ Generated from code in `src/handlers/**` (not from docs).
|
|
|
944
944
|
|
|
945
945
|
<a id="runtimegetdumpbyid-read-only-system"></a>
|
|
946
946
|
#### RuntimeGetDumpById (Read-Only / System)
|
|
947
|
-
**Description:** [runtime] Read a specific ABAP runtime dump
|
|
947
|
+
**Description:** [runtime] Read a specific ABAP runtime dump. Identify the dump by datetime + user (preferred, e.g. from a CALM event), or pass dump_id directly if already known.
|
|
948
948
|
|
|
949
949
|
**Source:** `src/handlers/system/readonly/handleRuntimeGetDumpById.ts`
|
|
950
950
|
|
|
951
951
|
**Parameters:**
|
|
952
|
-
- `
|
|
952
|
+
- `datetime` (string, optional) - Dump datetime (ISO or "YYYY-MM-DD HH:MM:SS"). Combined with user, uniquely identifies the dump. Preferred over dump_id.
|
|
953
|
+
- `dump_id` (string, optional) - Full runtime dump ID. Use only when already known; prefer datetime + user otherwise.
|
|
954
|
+
- `user` (string, optional) - SAP username whose dump to read. Required when using datetime lookup.
|
|
953
955
|
- `view` (string, optional (default: default)) - Dump view mode: default payload, summary section, or formatted long text.
|
|
954
956
|
|
|
955
957
|
---
|
|
@@ -972,14 +974,16 @@ Generated from code in `src/handlers/**` (not from docs).
|
|
|
972
974
|
|
|
973
975
|
<a id="runtimelistdumps-read-only-system"></a>
|
|
974
976
|
#### RuntimeListDumps (Read-Only / System)
|
|
975
|
-
**Description:** [runtime] List ABAP runtime dumps with optional user filter and paging. Returns
|
|
977
|
+
**Description:** [runtime] List ABAP runtime dumps with optional user filter and paging. Returns structured list with dump_id, datetime, error type, title, and user.
|
|
976
978
|
|
|
977
979
|
**Source:** `src/handlers/system/readonly/handleRuntimeListDumps.ts`
|
|
978
980
|
|
|
979
981
|
**Parameters:**
|
|
982
|
+
- `from` (string, optional) - Start of time range in YYYYMMDDHHMMSS format (system local time). Narrows results to dumps on or after this datetime.
|
|
980
983
|
- `inlinecount` (string, optional) - Include total count metadata.
|
|
981
984
|
- `orderby` (string, optional) - ADT order by expression.
|
|
982
985
|
- `skip` (number, optional) - Number of records to skip.
|
|
986
|
+
- `to` (string, optional) - End of time range in YYYYMMDDHHMMSS format (system local time). Narrows results to dumps on or before this datetime.
|
|
983
987
|
- `top` (number, optional) - Maximum number of records to return.
|
|
984
988
|
- `user` (string, optional) - Optional username filter. If omitted, dumps for all users are returned.
|
|
985
989
|
|
|
@@ -655,12 +655,14 @@ Generated from code in `src/handlers/**` (not from docs).
|
|
|
655
655
|
|
|
656
656
|
<a id="runtimegetdumpbyid-read-only-system"></a>
|
|
657
657
|
#### RuntimeGetDumpById (Read-Only / System)
|
|
658
|
-
**Description:** [runtime] Read a specific ABAP runtime dump
|
|
658
|
+
**Description:** [runtime] Read a specific ABAP runtime dump. Identify the dump by datetime + user (preferred, e.g. from a CALM event), or pass dump_id directly if already known.
|
|
659
659
|
|
|
660
660
|
**Source:** `src/handlers/system/readonly/handleRuntimeGetDumpById.ts`
|
|
661
661
|
|
|
662
662
|
**Parameters:**
|
|
663
|
-
- `
|
|
663
|
+
- `datetime` (string, optional) - Dump datetime (ISO or "YYYY-MM-DD HH:MM:SS"). Combined with user, uniquely identifies the dump. Preferred over dump_id.
|
|
664
|
+
- `dump_id` (string, optional) - Full runtime dump ID. Use only when already known; prefer datetime + user otherwise.
|
|
665
|
+
- `user` (string, optional) - SAP username whose dump to read. Required when using datetime lookup.
|
|
664
666
|
- `view` (string, optional (default: default)) - Dump view mode: default payload, summary section, or formatted long text.
|
|
665
667
|
|
|
666
668
|
---
|
|
@@ -683,14 +685,16 @@ Generated from code in `src/handlers/**` (not from docs).
|
|
|
683
685
|
|
|
684
686
|
<a id="runtimelistdumps-read-only-system"></a>
|
|
685
687
|
#### RuntimeListDumps (Read-Only / System)
|
|
686
|
-
**Description:** [runtime] List ABAP runtime dumps with optional user filter and paging. Returns
|
|
688
|
+
**Description:** [runtime] List ABAP runtime dumps with optional user filter and paging. Returns structured list with dump_id, datetime, error type, title, and user.
|
|
687
689
|
|
|
688
690
|
**Source:** `src/handlers/system/readonly/handleRuntimeListDumps.ts`
|
|
689
691
|
|
|
690
692
|
**Parameters:**
|
|
693
|
+
- `from` (string, optional) - Start of time range in YYYYMMDDHHMMSS format (system local time). Narrows results to dumps on or after this datetime.
|
|
691
694
|
- `inlinecount` (string, optional) - Include total count metadata.
|
|
692
695
|
- `orderby` (string, optional) - ADT order by expression.
|
|
693
696
|
- `skip` (number, optional) - Number of records to skip.
|
|
697
|
+
- `to` (string, optional) - End of time range in YYYYMMDDHHMMSS format (system local time). Narrows results to dumps on or before this datetime.
|
|
694
698
|
- `top` (number, optional) - Maximum number of records to return.
|
|
695
699
|
- `user` (string, optional) - Optional username filter. If omitted, dumps for all users are returned.
|
|
696
700
|
|
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": "4.
|
|
4
|
+
"version": "4.8.1",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"yaml": "^2.8.1"
|
|
137
137
|
},
|
|
138
138
|
"dependencies": {
|
|
139
|
-
"@mcp-abap-adt/adt-clients": "^3.
|
|
139
|
+
"@mcp-abap-adt/adt-clients": "^3.14.1",
|
|
140
140
|
"@mcp-abap-adt/auth-broker": "^1.0.5",
|
|
141
141
|
"@mcp-abap-adt/auth-providers": "^1.0.5",
|
|
142
142
|
"@mcp-abap-adt/auth-stores": "^1.0.4",
|