abapgit-agent 1.1.6 → 1.3.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/.github/workflows/release.yml +3 -1
- package/API.md +261 -0
- package/CLAUDE.md +384 -0
- package/README.md +16 -2
- package/RELEASE_NOTES.md +93 -8
- package/abap/CLAUDE.md +282 -6
- package/abap/copilot-instructions.md +79 -0
- package/abap/zcl_abgagt_agent.clas.abap +2 -2
- package/abap/zcl_abgagt_cmd_factory.clas.abap +2 -0
- package/abap/zcl_abgagt_command_inspect.clas.abap +255 -36
- package/abap/zcl_abgagt_command_tree.clas.abap +237 -0
- package/abap/zcl_abgagt_command_tree.clas.xml +15 -0
- package/abap/zcl_abgagt_command_view.clas.abap +240 -0
- package/abap/zcl_abgagt_command_view.clas.xml +15 -0
- package/abap/zcl_abgagt_resource_tree.clas.abap +70 -0
- package/abap/zcl_abgagt_resource_tree.clas.xml +15 -0
- package/abap/zcl_abgagt_resource_view.clas.abap +68 -0
- package/abap/zcl_abgagt_resource_view.clas.xml +15 -0
- package/abap/zcl_abgagt_rest_handler.clas.abap +2 -0
- package/abap/zcl_abgagt_util.clas.abap +2 -2
- package/abap/zcl_abgagt_viewer_clas.clas.abap +58 -0
- package/abap/zcl_abgagt_viewer_clas.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_ddls.clas.abap +83 -0
- package/abap/zcl_abgagt_viewer_ddls.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_dtel.clas.abap +98 -0
- package/abap/zcl_abgagt_viewer_dtel.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_factory.clas.abap +41 -0
- package/abap/zcl_abgagt_viewer_factory.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_intf.clas.abap +58 -0
- package/abap/zcl_abgagt_viewer_intf.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_stru.clas.abap +59 -0
- package/abap/zcl_abgagt_viewer_stru.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_tabl.clas.abap +59 -0
- package/abap/zcl_abgagt_viewer_tabl.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_ttyp.clas.abap +93 -0
- package/abap/zcl_abgagt_viewer_ttyp.clas.xml +15 -0
- package/abap/zif_abgagt_command.intf.abap +3 -1
- package/abap/zif_abgagt_viewer.intf.abap +12 -0
- package/abap/zif_abgagt_viewer.intf.xml +15 -0
- package/bin/abapgit-agent +605 -38
- package/docs/commands.md +27 -8
- package/docs/tree-command.md +303 -0
- package/docs/view-command.md +501 -0
- package/package.json +1 -1
- package/src/abap-client.js +22 -0
- package/src/agent.js +27 -0
package/docs/commands.md
CHANGED
|
@@ -11,7 +11,9 @@ All available CLI commands for abapGit Agent.
|
|
|
11
11
|
| [import](import-command.md) | ✅ | Import objects from ABAP package to git |
|
|
12
12
|
| [pull](pull-command.md) | ✅ | Pull and activate objects in ABAP |
|
|
13
13
|
| [inspect](inspect-command.md) | ✅ | Syntax check ABAP source files |
|
|
14
|
+
| [tree](tree-command.md) | ✅ | Display package hierarchy tree |
|
|
14
15
|
| [unit](unit-command.md) | ✅ | Run AUnit tests |
|
|
16
|
+
| [view](view-command.md) | ✅ | View ABAP object source code from system |
|
|
15
17
|
| [health](health-command.md) | ✅ | Health check |
|
|
16
18
|
| [status](status-command.md) | ✅ | Status check |
|
|
17
19
|
|
|
@@ -23,21 +25,24 @@ All available CLI commands for abapGit Agent.
|
|
|
23
25
|
|
|
24
26
|
```bash
|
|
25
27
|
# 1. Initialize local configuration
|
|
26
|
-
abapgit-agent init --folder /src --package ZMY_PACKAGE
|
|
28
|
+
abapgit-agent init --folder /src/ --package ZMY_PACKAGE
|
|
27
29
|
|
|
28
30
|
# 2. Edit .abapGitAgent with credentials
|
|
29
31
|
vim .abapGitAgent
|
|
30
32
|
|
|
31
|
-
# 3.
|
|
33
|
+
# 3. Commit and push new files to git
|
|
34
|
+
git add . && git commit -m "Initial commit" && git push origin main
|
|
35
|
+
|
|
36
|
+
# 4. Create online repository in ABAP
|
|
32
37
|
abapgit-agent create
|
|
33
38
|
|
|
34
|
-
#
|
|
39
|
+
# 5. Import objects from ABAP package to git
|
|
35
40
|
abapgit-agent import
|
|
36
41
|
|
|
37
|
-
#
|
|
38
|
-
git
|
|
42
|
+
# 6. Pull new objects imported from ABAP package
|
|
43
|
+
git pull origin main
|
|
39
44
|
|
|
40
|
-
#
|
|
45
|
+
# 7. Activate in ABAP
|
|
41
46
|
abapgit-agent pull
|
|
42
47
|
```
|
|
43
48
|
|
|
@@ -58,6 +63,13 @@ abapgit-agent inspect --files abap/zcl_my_class.clas.abap
|
|
|
58
63
|
# Run unit tests
|
|
59
64
|
abapgit-agent unit --files abap/zcl_my_test.clas.testclasses.abap
|
|
60
65
|
|
|
66
|
+
# Display package hierarchy
|
|
67
|
+
abapgit-agent tree --package $MY_PACKAGE
|
|
68
|
+
|
|
69
|
+
# View object definitions (classes, interfaces, tables, data elements)
|
|
70
|
+
abapgit-agent view --objects ZCL_MY_CLASS
|
|
71
|
+
abapgit-agent view --objects SFLIGHT --type TABL
|
|
72
|
+
|
|
61
73
|
# Check configuration
|
|
62
74
|
abapgit-agent status
|
|
63
75
|
|
|
@@ -77,6 +89,12 @@ abapgit-agent health
|
|
|
77
89
|
│
|
|
78
90
|
▼
|
|
79
91
|
┌─────────────────────────────────────────────────┐
|
|
92
|
+
│ git add && git commit && git push │
|
|
93
|
+
│ └── Push initial files to git │
|
|
94
|
+
└─────────────────────────────────────────────────┘
|
|
95
|
+
│
|
|
96
|
+
▼
|
|
97
|
+
┌─────────────────────────────────────────────────┐
|
|
80
98
|
│ create │
|
|
81
99
|
│ └── Creates online repo in ABAP │
|
|
82
100
|
└─────────────────────────────────────────────────┘
|
|
@@ -84,12 +102,13 @@ abapgit-agent health
|
|
|
84
102
|
▼
|
|
85
103
|
┌─────────────────────────────────────────────────┐
|
|
86
104
|
│ import │
|
|
87
|
-
│ └── Stages, commits, pushes objects to git
|
|
105
|
+
│ └── Stages, commits, pushes objects to git │
|
|
88
106
|
└─────────────────────────────────────────────────┘
|
|
89
107
|
│
|
|
90
108
|
▼
|
|
91
109
|
┌─────────────────────────────────────────────────┐
|
|
92
|
-
│ git
|
|
110
|
+
│ git pull │
|
|
111
|
+
│ └── Pull imported objects from ABAP package │
|
|
93
112
|
└─────────────────────────────────────────────────┘
|
|
94
113
|
│
|
|
95
114
|
▼
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# tree Command Requirements
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Display the package hierarchy tree from an ABAP system, showing parent packages, sub-packages, and object counts.
|
|
6
|
+
|
|
7
|
+
## Command
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Basic usage
|
|
11
|
+
abapgit-agent tree --package $ZMY_PACKAGE
|
|
12
|
+
|
|
13
|
+
# With object breakdown
|
|
14
|
+
abapgit-agent tree --package $ZMY_PACKAGE --include-objects
|
|
15
|
+
|
|
16
|
+
# Limit depth
|
|
17
|
+
abapgit-agent tree --package $ZMY_PACKAGE --depth 3
|
|
18
|
+
|
|
19
|
+
# JSON output for scripting (pure machine-readable)
|
|
20
|
+
abapgit-agent tree --package $ZMY_PACKAGE --json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Prerequisite
|
|
24
|
+
|
|
25
|
+
- `.abapGitAgent` exists with valid credentials
|
|
26
|
+
- Package must exist in the ABAP system
|
|
27
|
+
|
|
28
|
+
## Parameters
|
|
29
|
+
|
|
30
|
+
| Parameter | Required | Description |
|
|
31
|
+
|-----------|----------|-------------|
|
|
32
|
+
| `--package` | Yes | ABAP package name (e.g., `$ZMY_PACKAGE`, `ZMY_PACKAGE`) |
|
|
33
|
+
| `--depth` | No | Maximum depth to traverse (default: 3) |
|
|
34
|
+
| `--include-objects` | No | Include object counts breakdown |
|
|
35
|
+
| `--json` | No | Output raw JSON only (for scripting) |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Tasks
|
|
40
|
+
|
|
41
|
+
### 1. Validate Parameters
|
|
42
|
+
|
|
43
|
+
- `--package` must be specified
|
|
44
|
+
- Package name must be valid (1-30 characters, start with letter or `$`)
|
|
45
|
+
|
|
46
|
+
### 2. Load Configuration
|
|
47
|
+
|
|
48
|
+
Read `.abapGitAgent` for credentials
|
|
49
|
+
|
|
50
|
+
### 3. Fetch CSRF Token
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
GET /health (with X-CSRF-Token: fetch)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 4. Make Tree Request
|
|
57
|
+
|
|
58
|
+
**Endpoint:** `POST /tree`
|
|
59
|
+
|
|
60
|
+
**Request Body:**
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"package": "$ZMY_PACKAGE",
|
|
64
|
+
"depth": 3,
|
|
65
|
+
"include_objects": true
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 5. Display Results
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Output
|
|
74
|
+
|
|
75
|
+
### Basic Tree
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
79
|
+
|
|
80
|
+
📦 $ZMAIN_PACKAGE (Main Package)
|
|
81
|
+
├─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
82
|
+
│ ├─ 📦 $ZMAIN_SUB1_A (Sub Package 1A)
|
|
83
|
+
│ └─ 📦 $ZMAIN_SUB1_B (Sub Package 1B)
|
|
84
|
+
└─ 📦 $ZMAIN_SUB2 (Sub Package 2)
|
|
85
|
+
└─ 📦 $ZMAIN_SUB2_A (Sub Package 2A)
|
|
86
|
+
|
|
87
|
+
📊 Summary
|
|
88
|
+
PACKAGES: 6
|
|
89
|
+
OBJECTS: 127
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### With Object Counts
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
96
|
+
|
|
97
|
+
📦 $ZMAIN_PACKAGE (Main Package)
|
|
98
|
+
├─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
99
|
+
│ ├─ 📦 $ZMAIN_SUB1_A (Sub Package 1A)
|
|
100
|
+
│ └─ 📦 $ZMAIN_SUB1_B (Sub Package 1B)
|
|
101
|
+
└─ 📦 $ZMAIN_SUB2 (Sub Package 2)
|
|
102
|
+
└─ 📦 $ZMAIN_SUB2_A (Sub Package 2A)
|
|
103
|
+
|
|
104
|
+
📊 Summary
|
|
105
|
+
PACKAGES: 6
|
|
106
|
+
OBJECTS: 127
|
|
107
|
+
TYPES: CLAS=10 INTF=2 PROG=11 FUGR=1 TABL=3
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### With Parent Package
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
114
|
+
|
|
115
|
+
⬆️ Parent: $ZSAP_BASE (SAP Base Package)
|
|
116
|
+
|
|
117
|
+
📦 $ZMAIN_PACKAGE (Main Package)
|
|
118
|
+
└─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
119
|
+
|
|
120
|
+
📊 Summary
|
|
121
|
+
PACKAGES: 2
|
|
122
|
+
OBJECTS: 15
|
|
123
|
+
TYPES: CLAS=5 PROG=10
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### JSON Output
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"SUCCESS": true,
|
|
131
|
+
"COMMAND": "TREE",
|
|
132
|
+
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
133
|
+
"MESSAGE": "Tree retrieved successfully",
|
|
134
|
+
"PARENT_PACKAGE": "$ZSAP_BASE",
|
|
135
|
+
"NODES": [
|
|
136
|
+
{
|
|
137
|
+
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
138
|
+
"PARENT": "",
|
|
139
|
+
"DESCRIPTION": "$ZMAIN_PACKAGE",
|
|
140
|
+
"DEPTH": 0,
|
|
141
|
+
"OBJECT_COUNT": 11
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"PACKAGE": "$ZMAIN_SUB1",
|
|
145
|
+
"PARENT": "$ZMAIN_PACKAGE",
|
|
146
|
+
"DESCRIPTION": "Sub Package 1",
|
|
147
|
+
"DEPTH": 1,
|
|
148
|
+
"OBJECT_COUNT": 10
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"PACKAGE": "$ZMAIN_SUB1_A",
|
|
152
|
+
"PARENT": "$ZMAIN_SUB1",
|
|
153
|
+
"DESCRIPTION": "Sub Package 1A",
|
|
154
|
+
"DEPTH": 2,
|
|
155
|
+
"OBJECT_COUNT": 3
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"TOTAL_PACKAGES": 6,
|
|
159
|
+
"TOTAL_OBJECTS": 127,
|
|
160
|
+
"OBJECTS": [
|
|
161
|
+
{ "OBJECT": "CLAS", "COUNT": 10 },
|
|
162
|
+
{ "OBJECT": "INTF", "COUNT": 2 },
|
|
163
|
+
{ "OBJECT": "PROG", "COUNT": 11 },
|
|
164
|
+
{ "OBJECT": "FUGR", "COUNT": 1 },
|
|
165
|
+
{ "OBJECT": "TABL", "COUNT": 3 }
|
|
166
|
+
],
|
|
167
|
+
"ERROR": ""
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Response Fields:**
|
|
172
|
+
|
|
173
|
+
| Field | Type | Description |
|
|
174
|
+
|-------|------|-------------|
|
|
175
|
+
| `SUCCESS` | boolean | Whether the request succeeded |
|
|
176
|
+
| `COMMAND` | string | Command name ("TREE") |
|
|
177
|
+
| `PACKAGE` | string | Root package name |
|
|
178
|
+
| `MESSAGE` | string | Status message |
|
|
179
|
+
| `PARENT_PACKAGE` | string | Parent package (empty if root) |
|
|
180
|
+
| `NODES` | array | Flat list of all packages with parent refs |
|
|
181
|
+
| `TOTAL_PACKAGES` | number | Total packages in tree |
|
|
182
|
+
| `TOTAL_OBJECTS` | number | Total objects in tree |
|
|
183
|
+
| `OBJECTS` | array | Object counts by type [{OBJECT, COUNT}] |
|
|
184
|
+
| `ERROR` | string | Error message (empty if success) |
|
|
185
|
+
|
|
186
|
+
**Node Structure:**
|
|
187
|
+
|
|
188
|
+
Each entry in `NODES` array:
|
|
189
|
+
|
|
190
|
+
| Field | Type | Description |
|
|
191
|
+
|-------|------|-------------|
|
|
192
|
+
| `PACKAGE` | string | Package name |
|
|
193
|
+
| `PARENT` | string | Parent package name |
|
|
194
|
+
| `DESCRIPTION` | string | Package description |
|
|
195
|
+
| `DEPTH` | number | Depth in tree (0 = root) |
|
|
196
|
+
| `OBJECT_COUNT` | number | Objects in this package |
|
|
197
|
+
|
|
198
|
+
**Note:** The `NODES` array is flat - children are identified by `PARENT` reference. The CLI builds the tree display by grouping nodes by depth and parent.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Response Structure
|
|
203
|
+
|
|
204
|
+
### JSON Mode
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"SUCCESS": true,
|
|
209
|
+
"COMMAND": "TREE",
|
|
210
|
+
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
211
|
+
"MESSAGE": "Tree retrieved successfully",
|
|
212
|
+
"PARENT_PACKAGE": "$ZSAP_BASE",
|
|
213
|
+
"NODES": [...],
|
|
214
|
+
"TOTAL_PACKAGES": 6,
|
|
215
|
+
"TOTAL_OBJECTS": 127,
|
|
216
|
+
"OBJECTS": [
|
|
217
|
+
{ "OBJECT": "CLAS", "COUNT": 10 },
|
|
218
|
+
{ "OBJECT": "INTF", "COUNT": 2 }
|
|
219
|
+
],
|
|
220
|
+
"ERROR": ""
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
See [JSON Output](#json-output-pure-scripting) for full schema.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Error Handling
|
|
229
|
+
|
|
230
|
+
| Error | Message |
|
|
231
|
+
|-------|---------|
|
|
232
|
+
| Package not found | `Package <name> does not exist in the system` |
|
|
233
|
+
| Invalid package name | `Invalid package name: <name>` |
|
|
234
|
+
| Access denied | `Access denied to package information` |
|
|
235
|
+
| Depth too large | `Depth value too large (max: 10)` |
|
|
236
|
+
|
|
237
|
+
### Error Output
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
❌ Package not found: $ZNONEXISTENT
|
|
241
|
+
|
|
242
|
+
Error: Package $ZNONEXISTENT does not exist in the system.
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Example
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Basic usage
|
|
251
|
+
abapgit-agent tree --package $ZMY_PACKAGE
|
|
252
|
+
|
|
253
|
+
# With object breakdown
|
|
254
|
+
abapgit-agent tree --package $ZMY_PACKAGE --include-objects
|
|
255
|
+
|
|
256
|
+
# Shallow tree (depth 1)
|
|
257
|
+
abapgit-agent tree --package $ZMY_PACKAGE --depth 1
|
|
258
|
+
|
|
259
|
+
# JSON for scripting
|
|
260
|
+
abapgit-agent tree --package $ZMY_PACKAGE --json > tree.json
|
|
261
|
+
|
|
262
|
+
# CI/CD usage with jq
|
|
263
|
+
COUNT=$(abapgit-agent tree --package $ZMY_PACKAGE --json | jq '.TOTAL_OBJECTS')
|
|
264
|
+
echo "Package contains $COUNT objects"
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Implementation
|
|
270
|
+
|
|
271
|
+
### ABAP Tables Used
|
|
272
|
+
|
|
273
|
+
| Table | Purpose |
|
|
274
|
+
|-------|---------|
|
|
275
|
+
| **TDEVC** | Package definitions (contains `PARENTCL` for hierarchy) |
|
|
276
|
+
| **TADIR** | Object directory (for object counts per package) |
|
|
277
|
+
|
|
278
|
+
### Query Logic
|
|
279
|
+
|
|
280
|
+
```abap
|
|
281
|
+
" Get root package with parent
|
|
282
|
+
SELECT SINGLE devclass parentcl FROM tdevc
|
|
283
|
+
INTO ls_package
|
|
284
|
+
WHERE devclass = lv_package.
|
|
285
|
+
|
|
286
|
+
" Get direct sub-packages recursively (up to depth)
|
|
287
|
+
SELECT devclass parentcl FROM tdevc
|
|
288
|
+
INTO TABLE lt_direct_subs
|
|
289
|
+
WHERE parentcl = iv_parent.
|
|
290
|
+
|
|
291
|
+
" Get object count per package
|
|
292
|
+
SELECT COUNT(*) FROM tadir
|
|
293
|
+
INTO lv_count
|
|
294
|
+
WHERE devclass = iv_package
|
|
295
|
+
AND object NOT IN ('DEVC', 'PACK').
|
|
296
|
+
|
|
297
|
+
" Get object counts by type
|
|
298
|
+
SELECT object COUNT(*) AS count FROM tadir
|
|
299
|
+
INTO TABLE lt_counts
|
|
300
|
+
WHERE devclass = iv_package
|
|
301
|
+
AND object NOT IN ('DEVC', 'PACK')
|
|
302
|
+
GROUP BY object.
|
|
303
|
+
```
|