arc-1 0.9.13 → 0.9.15
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 -4
- package/dist/adt/class-structure.d.ts +1 -1
- package/dist/adt/class-structure.js +1 -1
- package/dist/adt/client.d.ts +16 -3
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +40 -35
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/ddic-xml.d.ts +9 -0
- package/dist/adt/ddic-xml.d.ts.map +1 -1
- package/dist/adt/ddic-xml.js +49 -53
- package/dist/adt/ddic-xml.js.map +1 -1
- package/dist/adt/devtools.d.ts.map +1 -1
- package/dist/adt/devtools.js +46 -15
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/fm-signature.d.ts +1 -1
- package/dist/adt/fm-signature.js +1 -1
- package/dist/adt/rap-generate.js +1 -1
- package/dist/adt/rap-generate.js.map +1 -1
- package/dist/adt/rap-handlers.d.ts +1 -1
- package/dist/adt/rap-handlers.js +1 -1
- package/dist/adt/refactoring.d.ts.map +1 -1
- package/dist/adt/refactoring.js +11 -14
- package/dist/adt/refactoring.js.map +1 -1
- package/dist/adt/server-driven.d.ts +46 -2
- package/dist/adt/server-driven.d.ts.map +1 -1
- package/dist/adt/server-driven.js +13 -3
- package/dist/adt/server-driven.js.map +1 -1
- package/dist/adt/xml-parser.d.ts +8 -1
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +57 -49
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/authz/policy.d.ts +1 -1
- package/dist/authz/policy.js +1 -1
- package/dist/cache/cache.d.ts +1 -0
- package/dist/cache/cache.d.ts.map +1 -1
- package/dist/cache/cache.js.map +1 -1
- package/dist/cache/inactive-list-cache.d.ts +4 -4
- package/dist/cache/inactive-list-cache.d.ts.map +1 -1
- package/dist/cache/inactive-list-cache.js +19 -12
- package/dist/cache/inactive-list-cache.js.map +1 -1
- package/dist/cache/memory.d.ts +1 -0
- package/dist/cache/memory.d.ts.map +1 -1
- package/dist/cache/memory.js +3 -0
- package/dist/cache/memory.js.map +1 -1
- package/dist/cache/sqlite.d.ts +1 -0
- package/dist/cache/sqlite.d.ts.map +1 -1
- package/dist/cache/sqlite.js +3 -0
- package/dist/cache/sqlite.js.map +1 -1
- package/dist/cache/warmup.d.ts.map +1 -1
- package/dist/cache/warmup.js +85 -38
- package/dist/cache/warmup.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/context/compressor.d.ts.map +1 -1
- package/dist/context/compressor.js +22 -13
- package/dist/context/compressor.js.map +1 -1
- package/dist/context/contract.d.ts.map +1 -1
- package/dist/context/contract.js +4 -3
- package/dist/context/contract.js.map +1 -1
- package/dist/context/deps.d.ts.map +1 -1
- package/dist/context/deps.js +3 -2
- package/dist/context/deps.js.map +1 -1
- package/dist/context/grep.d.ts +3 -1
- package/dist/context/grep.d.ts.map +1 -1
- package/dist/context/grep.js +83 -1
- package/dist/context/grep.js.map +1 -1
- package/dist/context/method-surgery.d.ts.map +1 -1
- package/dist/context/method-surgery.js +3 -2
- package/dist/context/method-surgery.js.map +1 -1
- package/dist/handlers/activate.d.ts +25 -0
- package/dist/handlers/activate.d.ts.map +1 -0
- package/dist/handlers/activate.js +334 -0
- package/dist/handlers/activate.js.map +1 -0
- package/dist/handlers/cache-security.d.ts +22 -0
- package/dist/handlers/cache-security.d.ts.map +1 -0
- package/dist/handlers/cache-security.js +51 -0
- package/dist/handlers/cache-security.js.map +1 -0
- package/dist/handlers/cds-hints.d.ts +26 -0
- package/dist/handlers/cds-hints.d.ts.map +1 -0
- package/dist/handlers/cds-hints.js +380 -0
- package/dist/handlers/cds-hints.js.map +1 -0
- package/dist/handlers/context.d.ts +10 -0
- package/dist/handlers/context.d.ts.map +1 -0
- package/dist/handlers/context.js +344 -0
- package/dist/handlers/context.js.map +1 -0
- package/dist/handlers/diagnose.d.ts +8 -0
- package/dist/handlers/diagnose.d.ts.map +1 -0
- package/dist/handlers/diagnose.js +274 -0
- package/dist/handlers/diagnose.js.map +1 -0
- package/dist/handlers/dispatch.d.ts +39 -0
- package/dist/handlers/dispatch.d.ts.map +1 -0
- package/dist/handlers/dispatch.js +640 -0
- package/dist/handlers/dispatch.js.map +1 -0
- package/dist/handlers/feature-cache.d.ts +26 -0
- package/dist/handlers/feature-cache.d.ts.map +1 -0
- package/dist/handlers/feature-cache.js +45 -0
- package/dist/handlers/feature-cache.js.map +1 -0
- package/dist/handlers/git.d.ts +9 -0
- package/dist/handlers/git.d.ts.map +1 -0
- package/dist/handlers/git.js +227 -0
- package/dist/handlers/git.js.map +1 -0
- package/dist/handlers/lint.d.ts +9 -0
- package/dist/handlers/lint.d.ts.map +1 -0
- package/dist/handlers/lint.js +82 -0
- package/dist/handlers/lint.js.map +1 -0
- package/dist/handlers/manage.d.ts +10 -0
- package/dist/handlers/manage.d.ts.map +1 -0
- package/dist/handlers/manage.js +375 -0
- package/dist/handlers/manage.js.map +1 -0
- package/dist/handlers/navigate.d.ts +8 -0
- package/dist/handlers/navigate.d.ts.map +1 -0
- package/dist/handlers/navigate.js +188 -0
- package/dist/handlers/navigate.js.map +1 -0
- package/dist/handlers/object-types.d.ts +103 -0
- package/dist/handlers/object-types.d.ts.map +1 -0
- package/dist/handlers/object-types.js +476 -0
- package/dist/handlers/object-types.js.map +1 -0
- package/dist/handlers/query.d.ts +7 -0
- package/dist/handlers/query.d.ts.map +1 -0
- package/dist/handlers/query.js +190 -0
- package/dist/handlers/query.js.map +1 -0
- package/dist/handlers/read.d.ts +18 -0
- package/dist/handlers/read.d.ts.map +1 -0
- package/dist/handlers/read.js +581 -0
- package/dist/handlers/read.js.map +1 -0
- package/dist/handlers/schemas.d.ts +28 -26
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +17 -153
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/search.d.ts +24 -0
- package/dist/handlers/search.d.ts.map +1 -0
- package/dist/handlers/search.js +208 -0
- package/dist/handlers/search.js.map +1 -0
- package/dist/handlers/shared.d.ts +19 -0
- package/dist/handlers/shared.d.ts.map +1 -0
- package/dist/handlers/shared.js +23 -0
- package/dist/handlers/shared.js.map +1 -0
- package/dist/handlers/tool-registry.d.ts +44 -0
- package/dist/handlers/tool-registry.d.ts.map +1 -0
- package/dist/handlers/tool-registry.js +152 -0
- package/dist/handlers/tool-registry.js.map +1 -0
- package/dist/handlers/tools.d.ts +9 -0
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +40 -141
- package/dist/handlers/tools.js.map +1 -1
- package/dist/handlers/transport.d.ts +8 -0
- package/dist/handlers/transport.d.ts.map +1 -0
- package/dist/handlers/transport.js +281 -0
- package/dist/handlers/transport.js.map +1 -0
- package/dist/handlers/write/class-surgery.d.ts +18 -0
- package/dist/handlers/write/class-surgery.d.ts.map +1 -0
- package/dist/handlers/write/class-surgery.js +366 -0
- package/dist/handlers/write/class-surgery.js.map +1 -0
- package/dist/handlers/write/context.d.ts +43 -0
- package/dist/handlers/write/context.d.ts.map +1 -0
- package/dist/handlers/write/context.js +5 -0
- package/dist/handlers/write/context.js.map +1 -0
- package/dist/handlers/write/create.d.ts +8 -0
- package/dist/handlers/write/create.d.ts.map +1 -0
- package/dist/handlers/write/create.js +603 -0
- package/dist/handlers/write/create.js.map +1 -0
- package/dist/handlers/write/rap.d.ts +8 -0
- package/dist/handlers/write/rap.d.ts.map +1 -0
- package/dist/handlers/write/rap.js +235 -0
- package/dist/handlers/write/rap.js.map +1 -0
- package/dist/handlers/write/update-delete.d.ts +8 -0
- package/dist/handlers/write/update-delete.d.ts.map +1 -0
- package/dist/handlers/write/update-delete.js +182 -0
- package/dist/handlers/write/update-delete.js.map +1 -0
- package/dist/handlers/write-helpers.d.ts +155 -0
- package/dist/handlers/write-helpers.d.ts.map +1 -0
- package/dist/handlers/write-helpers.js +859 -0
- package/dist/handlers/write-helpers.js.map +1 -0
- package/dist/handlers/write.d.ts +16 -0
- package/dist/handlers/write.d.ts.map +1 -0
- package/dist/handlers/write.js +210 -0
- package/dist/handlers/write.js.map +1 -0
- package/dist/handlers/zod-errors.d.ts +1 -1
- package/dist/handlers/zod-errors.js +1 -1
- package/dist/lint/abaplint-config-cache.d.ts +5 -0
- package/dist/lint/abaplint-config-cache.d.ts.map +1 -0
- package/dist/lint/abaplint-config-cache.js +29 -0
- package/dist/lint/abaplint-config-cache.js.map +1 -0
- package/dist/lint/config-builder.d.ts.map +1 -1
- package/dist/lint/config-builder.js +3 -4
- package/dist/lint/config-builder.js.map +1 -1
- package/dist/lint/lint.d.ts +1 -1
- package/dist/lint/lint.d.ts.map +1 -1
- package/dist/lint/lint.js +3 -2
- package/dist/lint/lint.js.map +1 -1
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +22 -8
- package/dist/server/config.js.map +1 -1
- package/dist/server/mcp-rate-limit.d.ts +1 -1
- package/dist/server/mcp-rate-limit.js +1 -1
- package/dist/server/server.d.ts +1 -1
- package/dist/server/server.js +3 -2
- package/dist/server/server.js.map +1 -1
- package/package.json +15 -10
- package/dist/handlers/intent.d.ts +0 -144
- package/dist/handlers/intent.d.ts.map +0 -1
- package/dist/handlers/intent.js +0 -6782
- package/dist/handlers/intent.js.map +0 -1
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAPTransport handler — CTS transport management (create, release, list, history, targets,
|
|
3
|
+
* layers).
|
|
4
|
+
*/
|
|
5
|
+
import { AdtApiError } from '../adt/errors.js';
|
|
6
|
+
import { createTransport, createTransportWithTarget, deleteTransport, getObjectTransports, getTransport, getTransportInfo, listTransportLayers, listTransports, listTransportTargets, reassignTransport, releaseTransport, releaseTransportRecursive, supportsExplicitTransportTarget, } from '../adt/transport.js';
|
|
7
|
+
import { objectUrlForType } from './object-types.js';
|
|
8
|
+
import { errorResult, textResult } from './shared.js';
|
|
9
|
+
// ─── SAPTransport Handler ────────────────────────────────────────────
|
|
10
|
+
export async function handleSAPTransport(client, args) {
|
|
11
|
+
const action = String(args.action ?? '');
|
|
12
|
+
switch (action) {
|
|
13
|
+
case 'list': {
|
|
14
|
+
const user = args.user || client.username;
|
|
15
|
+
const status = args.status ?? 'D';
|
|
16
|
+
const transports = await listTransports(client.http, client.safety, user, status === '*' ? undefined : status);
|
|
17
|
+
return textResult(JSON.stringify(transports, null, 2));
|
|
18
|
+
}
|
|
19
|
+
case 'get': {
|
|
20
|
+
const id = String(args.id ?? '');
|
|
21
|
+
if (!id)
|
|
22
|
+
return errorResult('Transport ID is required for "get" action.');
|
|
23
|
+
const transport = await getTransport(client.http, client.safety, id);
|
|
24
|
+
if (!transport)
|
|
25
|
+
return textResult(`Transport ${id} not found.`);
|
|
26
|
+
return textResult(JSON.stringify(transport, null, 2));
|
|
27
|
+
}
|
|
28
|
+
case 'create': {
|
|
29
|
+
const description = String(args.description ?? '');
|
|
30
|
+
if (!description)
|
|
31
|
+
return errorResult('Description is required for "create" action.');
|
|
32
|
+
// Distinguish "target omitted" from "target present but empty": an explicit but
|
|
33
|
+
// blank target is a caller mistake, not a request to use the package/layer path.
|
|
34
|
+
const targetProvided = args.target !== undefined && args.target !== null;
|
|
35
|
+
const explicitTarget = targetProvided ? String(args.target).trim() : undefined;
|
|
36
|
+
if (targetProvided && !explicitTarget) {
|
|
37
|
+
return errorResult('"target" was provided but is empty. Pass a transport target — a system (C11), ' +
|
|
38
|
+
'system.client (C11.021), or target group (/GROUP/) — or omit target to let SAP resolve it from the package.');
|
|
39
|
+
}
|
|
40
|
+
// Shared guidance when this release's ADT stack can't set an explicit target.
|
|
41
|
+
const targetUnsupportedMsg = "This system's ADT stack does not support setting an explicit transport target — the tm:root/newrequest " +
|
|
42
|
+
'action is not implemented (an ADT-framework limitation on SAP_BASIS 7.50, verified on SP02 and SP32, ' +
|
|
43
|
+
'independent of STMS/CTC config). It works on newer ABAP Platform / S/4HANA releases. Workaround here: ' +
|
|
44
|
+
'create the request without "target", then set the Transportziel manually in SE09/SE10 (SAP GUI), which ' +
|
|
45
|
+
'works when CTC and the target group are configured.';
|
|
46
|
+
let id;
|
|
47
|
+
if (explicitTarget) {
|
|
48
|
+
// Discovery-gate first — the same capability SAP's own Eclipse client checks: the TM
|
|
49
|
+
// resource that sets an explicit target is advertised in ADT discovery only on releases
|
|
50
|
+
// that implement it (the transportorganizer Accept type on cts/transportrequests). When
|
|
51
|
+
// discovery is loaded and the capability is absent (NW 7.50/7.51), fail fast with guidance
|
|
52
|
+
// rather than POST a request the backend rejects with "user action is not supported".
|
|
53
|
+
if (supportsExplicitTransportTarget(client.http) === false) {
|
|
54
|
+
return errorResult(targetUnsupportedMsg);
|
|
55
|
+
}
|
|
56
|
+
// Explicit transport target (Transportziel / TR_TARGET): a system (C11),
|
|
57
|
+
// system.client (C11.021), or target group (/TRG/). Routed via the tm:root/
|
|
58
|
+
// newrequest endpoint — the only ADT path that sets the target directly. The
|
|
59
|
+
// group and system.client forms require extended transport control (CTC).
|
|
60
|
+
try {
|
|
61
|
+
id = await createTransportWithTarget(client.http, client.safety, description, explicitTarget, client.username);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
if (err instanceof AdtApiError && (err.statusCode === 400 || err.statusCode === 404)) {
|
|
65
|
+
// SAP validates the target server-side: a4h (7.58) returns 400 "Target 'X'
|
|
66
|
+
// does not exist"; other releases may use 404.
|
|
67
|
+
if (/does not exist/i.test(err.message)) {
|
|
68
|
+
return errorResult(`Transport target "${explicitTarget}" does not exist on this system. Valid targets are a ` +
|
|
69
|
+
'system (e.g. C11), system.client (C11.021), or a target group (/GROUP/) — the group and ' +
|
|
70
|
+
'system.client forms require extended transport control (CTC) to be active. Use ' +
|
|
71
|
+
'SAPTransport(action="targets") to list the targets this system actually offers.');
|
|
72
|
+
}
|
|
73
|
+
// Fallback for when discovery was not loaded: NW 7.50/7.51 reject tm:root/newrequest
|
|
74
|
+
// with "user action is not supported" (the gate above pre-empts this when discovery is known).
|
|
75
|
+
if (/user action/i.test(err.message) && /not supported/i.test(err.message)) {
|
|
76
|
+
return errorResult(targetUnsupportedMsg);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const targetPackage = args.package ? String(args.package) : undefined;
|
|
84
|
+
const transportLayer = args.transportLayer ? String(args.transportLayer) : undefined;
|
|
85
|
+
id = await createTransport(client.http, client.safety, description, targetPackage, undefined, transportLayer);
|
|
86
|
+
}
|
|
87
|
+
if (!id)
|
|
88
|
+
return errorResult('Transport creation succeeded but no transport ID was returned. Check the SAP system manually.');
|
|
89
|
+
// Read the new request back (best-effort) to report its actual transport target.
|
|
90
|
+
// An empty target means the request is local ("Local Change Requests") — the #1
|
|
91
|
+
// source of "why does it always create a local transport?" confusion — so we
|
|
92
|
+
// surface it explicitly instead of just echoing the ID.
|
|
93
|
+
const created = await getTransport(client.http, client.safety, id).catch(() => null);
|
|
94
|
+
const target = created?.target?.trim() ?? '';
|
|
95
|
+
const targetDesc = created?.targetDesc?.trim() ?? '';
|
|
96
|
+
if (!created)
|
|
97
|
+
return textResult(`Created transport request: ${id}`);
|
|
98
|
+
if (target) {
|
|
99
|
+
return textResult(`Created transport request: ${id}\nTransport target: ${target}${targetDesc ? ` (${targetDesc})` : ''}`);
|
|
100
|
+
}
|
|
101
|
+
return textResult(`Created transport request: ${id}\n` +
|
|
102
|
+
`Transport target: <none>${targetDesc ? ` — "${targetDesc}"` : ''}. This is a LOCAL request — it cannot be transported onward.\n\n` +
|
|
103
|
+
'To create a request that targets another system, either:\n' +
|
|
104
|
+
' • set an explicit target — pass target=<system | system.client | /group/> (e.g. target="/TRG/" or "C11"); ' +
|
|
105
|
+
'the group and system.client forms require extended transport control (CTC) to be active; or\n' +
|
|
106
|
+
' • let SAP resolve it from the package transport layer + STMS consolidation route (pass transportLayer=<layer> to override the layer).\n' +
|
|
107
|
+
'Both require the SAP system to actually have transport routes/targets configured (a Basis task). ' +
|
|
108
|
+
'On a standalone system with no routes, every request is local — expected, and no ADT/Eclipse/SE10 client can change it.');
|
|
109
|
+
}
|
|
110
|
+
case 'layers': {
|
|
111
|
+
// Discovery: list valid values for create's `transportLayer`. Lets a client pick a
|
|
112
|
+
// real layer instead of guessing. Read-only (no allowTransportWrites required).
|
|
113
|
+
let layers;
|
|
114
|
+
try {
|
|
115
|
+
layers = await listTransportLayers(client.http, client.safety);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
// The package transport-layer value help is 7.52+; NW 7.50/7.51 return 404
|
|
119
|
+
// "No suitable resource found" (verified live on npl 7.50). Surface that clearly
|
|
120
|
+
// instead of a raw 404, so the caller knows discovery is unavailable on this release.
|
|
121
|
+
if (err instanceof AdtApiError && err.isNotFound) {
|
|
122
|
+
return errorResult('Transport-layer discovery is not available on this SAP release — the value help ' +
|
|
123
|
+
'(/sap/bc/adt/packages/valuehelps/transportlayers) returned 404 (typically NW < 7.52). ' +
|
|
124
|
+
'Create requests without transportLayer; the route/target is governed by the package + STMS on these releases.');
|
|
125
|
+
}
|
|
126
|
+
throw err;
|
|
127
|
+
}
|
|
128
|
+
const routed = layers.filter((l) => l.target);
|
|
129
|
+
const summary = layers.length
|
|
130
|
+
? routed.length
|
|
131
|
+
? `${layers.length} transport layer(s); ${routed.length} carry a target. Pass one as transportLayer= on create.`
|
|
132
|
+
: `${layers.length} transport layer(s), but none expose a consolidation target — created requests will be local on this system.`
|
|
133
|
+
: 'No transport layers are defined on this system — every request will be local.';
|
|
134
|
+
return textResult(JSON.stringify({ transportLayers: layers, summary }, null, 2));
|
|
135
|
+
}
|
|
136
|
+
case 'targets': {
|
|
137
|
+
// Discovery: list valid values for create's `target` (Transportziel / TR_TARGET) via the
|
|
138
|
+
// official ADT target value help. Read-only (no allowTransportWrites required).
|
|
139
|
+
// Gate on the same capability as create's target path: NW 7.50 returns an empty list
|
|
140
|
+
// (HTTP 200) from the value help rather than 404, so the discovery accept type — not the
|
|
141
|
+
// HTTP status — is the reliable "is target discovery meaningful here?" signal.
|
|
142
|
+
if (supportsExplicitTransportTarget(client.http) === false) {
|
|
143
|
+
return errorResult("Transport-target discovery is not available on this SAP release — its ADT stack doesn't support " +
|
|
144
|
+
'explicit transport targets (verified on NW 7.50). Set the target in SE09/SE10 instead.');
|
|
145
|
+
}
|
|
146
|
+
let targets;
|
|
147
|
+
try {
|
|
148
|
+
targets = await listTransportTargets(client.http, client.safety);
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
// Fallback when discovery wasn't loaded: some releases 404 the value help.
|
|
152
|
+
if (err instanceof AdtApiError && err.isNotFound) {
|
|
153
|
+
return errorResult('Transport-target discovery is not available on this SAP release — the value help ' +
|
|
154
|
+
'(/sap/bc/adt/cts/transportrequests/valuehelp/target) returned 404. Set the target in SE09/SE10 instead.');
|
|
155
|
+
}
|
|
156
|
+
throw err;
|
|
157
|
+
}
|
|
158
|
+
const summary = targets.length
|
|
159
|
+
? `${targets.length} valid transport target(s). Pass one as target= on create.`
|
|
160
|
+
: 'No transport targets are configured on this system (so created requests are local).';
|
|
161
|
+
return textResult(JSON.stringify({ transportTargets: targets, summary }, null, 2));
|
|
162
|
+
}
|
|
163
|
+
case 'release': {
|
|
164
|
+
const id = String(args.id ?? '');
|
|
165
|
+
if (!id)
|
|
166
|
+
return errorResult('Transport ID is required for "release" action.');
|
|
167
|
+
await releaseTransport(client.http, client.safety, id);
|
|
168
|
+
return textResult(`Released transport request: ${id}`);
|
|
169
|
+
}
|
|
170
|
+
case 'delete': {
|
|
171
|
+
const id = String(args.id ?? '');
|
|
172
|
+
if (!id)
|
|
173
|
+
return errorResult('Transport ID is required for "delete" action.');
|
|
174
|
+
const recursive = Boolean(args.recursive ?? false);
|
|
175
|
+
const removeLockedObjects = Boolean(args.removeLockedObjects ?? false);
|
|
176
|
+
try {
|
|
177
|
+
await deleteTransport(client.http, client.safety, id, recursive, removeLockedObjects);
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
// ADT refuses to delete a request/task that still holds locked objects (e.g. a deleted
|
|
181
|
+
// object's lingering record). Point the caller at removeLockedObjects instead of a raw [?/009].
|
|
182
|
+
if (!removeLockedObjects && e instanceof Error && /locked objects/i.test(e.message)) {
|
|
183
|
+
return errorResult(`${e.message}\n\nThe request still holds locked object(s). ` +
|
|
184
|
+
`Retry with removeLockedObjects=true to strip them first:\n` +
|
|
185
|
+
` SAPTransport(action="delete", id="${id}", removeLockedObjects=true)`);
|
|
186
|
+
}
|
|
187
|
+
throw e;
|
|
188
|
+
}
|
|
189
|
+
const extras = [recursive ? 'recursive' : '', removeLockedObjects ? 'removed locked objects' : '']
|
|
190
|
+
.filter(Boolean)
|
|
191
|
+
.join(', ');
|
|
192
|
+
return textResult(`Deleted transport request: ${id}${extras ? ` (${extras})` : ''}`);
|
|
193
|
+
}
|
|
194
|
+
case 'reassign': {
|
|
195
|
+
const id = String(args.id ?? '');
|
|
196
|
+
if (!id)
|
|
197
|
+
return errorResult('Transport ID is required for "reassign" action.');
|
|
198
|
+
const owner = String(args.owner ?? '');
|
|
199
|
+
if (!owner)
|
|
200
|
+
return errorResult('Owner is required for "reassign" action.');
|
|
201
|
+
const recursive = Boolean(args.recursive ?? false);
|
|
202
|
+
await reassignTransport(client.http, client.safety, id, owner, recursive);
|
|
203
|
+
return textResult(`Reassigned transport ${id} to ${owner}${recursive ? ' (recursive)' : ''}`);
|
|
204
|
+
}
|
|
205
|
+
case 'release_recursive': {
|
|
206
|
+
const id = String(args.id ?? '');
|
|
207
|
+
if (!id)
|
|
208
|
+
return errorResult('Transport ID is required for "release_recursive" action.');
|
|
209
|
+
const result = await releaseTransportRecursive(client.http, client.safety, id);
|
|
210
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
211
|
+
}
|
|
212
|
+
case 'check': {
|
|
213
|
+
// Check transport requirements for an object/package combination.
|
|
214
|
+
// Does NOT require allowTransportWrites — this is a read-only check.
|
|
215
|
+
const objectType = String(args.type ?? '');
|
|
216
|
+
const objectName = String(args.name ?? '');
|
|
217
|
+
const pkg = String(args.package ?? '');
|
|
218
|
+
if (!objectType || !objectName)
|
|
219
|
+
return errorResult('"type" and "name" are required for "check" action.');
|
|
220
|
+
if (!pkg)
|
|
221
|
+
return errorResult('"package" is required for "check" action.');
|
|
222
|
+
const objectUrl = objectUrlForType(objectType, objectName);
|
|
223
|
+
const info = await getTransportInfo(client.http, client.safety, objectUrl, pkg, 'I');
|
|
224
|
+
const summary = info.isLocal
|
|
225
|
+
? `Package "${pkg}" is local — no transport required.`
|
|
226
|
+
: info.recording
|
|
227
|
+
? `Package "${pkg}" requires a transport for object creation.`
|
|
228
|
+
: `Package "${pkg}" does not require transport recording.`;
|
|
229
|
+
return textResult(JSON.stringify({
|
|
230
|
+
package: pkg,
|
|
231
|
+
transportRequired: !info.isLocal && info.recording,
|
|
232
|
+
isLocal: info.isLocal,
|
|
233
|
+
deliveryUnit: info.deliveryUnit,
|
|
234
|
+
existingTransports: info.existingTransports,
|
|
235
|
+
...(info.lockedTransport ? { lockedTransport: info.lockedTransport } : {}),
|
|
236
|
+
summary,
|
|
237
|
+
}, null, 2));
|
|
238
|
+
}
|
|
239
|
+
case 'history': {
|
|
240
|
+
const objectType = String(args.type ?? '');
|
|
241
|
+
const objectName = String(args.name ?? '');
|
|
242
|
+
if (!objectType || !objectName) {
|
|
243
|
+
return errorResult('"type" and "name" are required for "history" action.');
|
|
244
|
+
}
|
|
245
|
+
const objectUrl = objectUrlForType(objectType, objectName);
|
|
246
|
+
const primary = await getObjectTransports(client.http, client.safety, objectUrl);
|
|
247
|
+
let candidateTransports = primary.candidateTransports;
|
|
248
|
+
// Fallback: if per-object transport lookup is empty, derive the package via
|
|
249
|
+
// the object metadata endpoint and ask transportchecks for candidate transports.
|
|
250
|
+
if (primary.relatedTransports.length === 0 && candidateTransports.length === 0) {
|
|
251
|
+
try {
|
|
252
|
+
const pkg = await client.resolveObjectPackage(objectUrl);
|
|
253
|
+
if (pkg && pkg !== '$TMP') {
|
|
254
|
+
const info = await getTransportInfo(client.http, client.safety, objectUrl, pkg, '');
|
|
255
|
+
candidateTransports = info.existingTransports;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
// best-effort-fallback
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const lockOwner = primary.relatedTransports[0]?.owner;
|
|
263
|
+
const summary = primary.lockedTransport
|
|
264
|
+
? `Object ${objectName} is locked in transport ${primary.lockedTransport}${lockOwner ? ` by ${lockOwner}` : ''}.`
|
|
265
|
+
: candidateTransports.length > 0
|
|
266
|
+
? `Object ${objectName} has no active lock; ${candidateTransports.length} transport(s) available for assignment.`
|
|
267
|
+
: `Object ${objectName} has no related or candidate transports (likely $TMP / local object).`;
|
|
268
|
+
const history = {
|
|
269
|
+
object: { type: objectType, name: objectName, uri: objectUrl },
|
|
270
|
+
...(primary.lockedTransport ? { lockedTransport: primary.lockedTransport } : {}),
|
|
271
|
+
relatedTransports: primary.relatedTransports,
|
|
272
|
+
candidateTransports,
|
|
273
|
+
summary,
|
|
274
|
+
};
|
|
275
|
+
return textResult(JSON.stringify(history, null, 2));
|
|
276
|
+
}
|
|
277
|
+
default:
|
|
278
|
+
return errorResult(`Unknown SAPTransport action: ${action}. Supported: list, get, create, release, delete, reassign, release_recursive, check, history`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/handlers/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAPWrite actions — class-section surgery (issue #303).
|
|
3
|
+
*
|
|
4
|
+
* These actions share a common shape: fetch objectstructure → optional diff/refuse → splice into
|
|
5
|
+
* /source/main (or /includes/<inc> when include= is set) → PUT under lock → no auto-activate.
|
|
6
|
+
* Pre-write lint runs on the SPLICED FULL source (not the partial input fragment) because a raw
|
|
7
|
+
* DEFINITION block alone fails abaplint with "Expected CLASSIMPLEMENTATION" (verified live on a4h);
|
|
8
|
+
* lint is skipped for include= writes (same precedent as the `update include=` path).
|
|
9
|
+
*/
|
|
10
|
+
import { type ToolResult } from '../shared.js';
|
|
11
|
+
import type { SapWriteContext } from './context.js';
|
|
12
|
+
export declare function writeActionEditMethod(ctx: SapWriteContext): Promise<ToolResult>;
|
|
13
|
+
export declare function writeActionEditClassDefinition(ctx: SapWriteContext): Promise<ToolResult>;
|
|
14
|
+
export declare function writeActionEditMethodSignature(ctx: SapWriteContext): Promise<ToolResult>;
|
|
15
|
+
export declare function writeActionAddMethod(ctx: SapWriteContext): Promise<ToolResult>;
|
|
16
|
+
export declare function writeActionDeleteMethod(ctx: SapWriteContext): Promise<ToolResult>;
|
|
17
|
+
export declare function writeActionChangeMethodVisibility(ctx: SapWriteContext): Promise<ToolResult>;
|
|
18
|
+
//# sourceMappingURL=class-surgery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-surgery.d.ts","sourceRoot":"","sources":["../../../src/handlers/write/class-surgery.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwBH,OAAO,EAAe,KAAK,UAAU,EAAc,MAAM,cAAc,CAAC;AAExE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAoIrF;AAED,wBAAsB,8BAA8B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAuG9F;AAED,wBAAsB,8BAA8B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAkE9F;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAiGpF;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA6DvF;AAED,wBAAsB,iCAAiC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAsFjG"}
|