abapgit-agent 1.18.1 → 1.19.0
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/abap/CLAUDE.md +2 -3
- package/abap/guidelines/abapgit-xml-only.md +63 -3
- package/abap/guidelines/debug-session.md +2 -3
- package/package.json +2 -1
- package/src/commands/debug.js +23 -40
- package/src/commands/inspect.js +174 -70
- package/src/commands/pull.js +44 -1
- package/src/commands/unit.js +290 -200
- package/src/commands/view.js +46 -1
- package/src/utils/adt-http.js +5 -2
package/src/commands/view.js
CHANGED
|
@@ -246,7 +246,7 @@ Description:
|
|
|
246
246
|
Parameters:
|
|
247
247
|
--objects <obj1,...> Comma-separated object names (required).
|
|
248
248
|
--type <type> Object type: CLAS, INTF, PROG, TABL, STRU, DTEL, TTYP, DOMA,
|
|
249
|
-
DDLS, DCLS, MSAG, FUGR (auto-detected from TADIR if omitted).
|
|
249
|
+
DDLS, DCLS, MSAG, FUGR, SUSO (auto-detected from TADIR if omitted).
|
|
250
250
|
--full Show full source including all method implementations.
|
|
251
251
|
--lines Show dual line numbers (G = global for debug set, [N] = include-local).
|
|
252
252
|
--fm <name> With --full: show only the specified function module (FUGR only).
|
|
@@ -593,6 +593,51 @@ Examples:
|
|
|
593
593
|
console.log(` ${desc}`);
|
|
594
594
|
}
|
|
595
595
|
}
|
|
596
|
+
} else if (objType === 'SUSO' || objType === 'Authorization Object') {
|
|
597
|
+
// SUSO: property box for object class + fields, then activities list
|
|
598
|
+
const classComp = components.filter(c => String(c.FIELD || c.field || '').startsWith('OCLSS'));
|
|
599
|
+
const fieldComps = components.filter(c => String(c.FIELD || c.field || '').startsWith('FIELD_'));
|
|
600
|
+
const actvtComps = components.filter(c => String(c.FIELD || c.field || '').startsWith('ACTVT_'));
|
|
601
|
+
|
|
602
|
+
const propWidth = 16;
|
|
603
|
+
const valueWidth = 42;
|
|
604
|
+
const sep = '┌' + '─'.repeat(propWidth + 2) + '┬' + '─'.repeat(valueWidth + 2) + '┐';
|
|
605
|
+
const mid = '├' + '─'.repeat(propWidth + 2) + '┼' + '─'.repeat(valueWidth + 2) + '┤';
|
|
606
|
+
const end = '└' + '─'.repeat(propWidth + 2) + '┴' + '─'.repeat(valueWidth + 2) + '┘';
|
|
607
|
+
const buildPropRow = (property, value) =>
|
|
608
|
+
'│ ' + String(property || '').padEnd(propWidth) + ' │ ' +
|
|
609
|
+
String(value || '').substring(0, valueWidth).padEnd(valueWidth) + ' │';
|
|
610
|
+
|
|
611
|
+
console.log(` AUTH OBJECT ${objName}:`);
|
|
612
|
+
console.log(sep);
|
|
613
|
+
console.log(buildPropRow('Property', 'Value'));
|
|
614
|
+
console.log(mid);
|
|
615
|
+
|
|
616
|
+
for (const comp of classComp) {
|
|
617
|
+
const desc = comp.DESCRIPTION || comp.description || '';
|
|
618
|
+
const colonIdx = desc.indexOf(': ');
|
|
619
|
+
const value = colonIdx !== -1 ? desc.substring(colonIdx + 2) : desc;
|
|
620
|
+
console.log(buildPropRow('Object class', value));
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
for (const comp of fieldComps) {
|
|
624
|
+
const desc = comp.DESCRIPTION || comp.description || '';
|
|
625
|
+
const colonIdx = desc.indexOf(': ');
|
|
626
|
+
const value = colonIdx !== -1 ? desc.substring(colonIdx + 2) : desc;
|
|
627
|
+
const idx = String(comp.FIELD || comp.field || '').replace('FIELD_', '');
|
|
628
|
+
console.log(buildPropRow(`Field ${idx}`, value));
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
console.log(end);
|
|
632
|
+
|
|
633
|
+
if (actvtComps.length > 0) {
|
|
634
|
+
console.log('');
|
|
635
|
+
console.log(` Allowed activities (${actvtComps.length}):`);
|
|
636
|
+
for (const comp of actvtComps) {
|
|
637
|
+
const desc = comp.DESCRIPTION || comp.description || '';
|
|
638
|
+
console.log(` ${desc}`);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
596
641
|
} else {
|
|
597
642
|
// Build table display for TABL/STRU with Data Element and Description
|
|
598
643
|
const colWidths = {
|
package/src/utils/adt-http.js
CHANGED
|
@@ -166,7 +166,8 @@ class AdtHttp {
|
|
|
166
166
|
return await this._makeRequest(method, urlPath, body, options);
|
|
167
167
|
} catch (error) {
|
|
168
168
|
if (this._isAuthError(error) && !options.isRetry) {
|
|
169
|
-
|
|
169
|
+
// Clear stale session state and refresh
|
|
170
|
+
this.clearSession();
|
|
170
171
|
await this.fetchCsrfToken();
|
|
171
172
|
return await this._makeRequest(method, urlPath, body, { ...options, isRetry: true });
|
|
172
173
|
}
|
|
@@ -178,7 +179,9 @@ class AdtHttp {
|
|
|
178
179
|
if (error.statusCode === 401) return true;
|
|
179
180
|
if (error.statusCode === 403) return true;
|
|
180
181
|
const msg = (error.message || '').toLowerCase();
|
|
181
|
-
|
|
182
|
+
if (msg.includes('csrf') || msg.includes('unauthorized') || msg.includes('forbidden')) return true;
|
|
183
|
+
if (msg.includes('session timed out') || msg.includes('session not found')) return true;
|
|
184
|
+
return false;
|
|
182
185
|
}
|
|
183
186
|
|
|
184
187
|
async _makeRequest(method, urlPath, body = null, options = {}) {
|