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.
Files changed (46) hide show
  1. package/.github/workflows/release.yml +3 -1
  2. package/API.md +261 -0
  3. package/CLAUDE.md +384 -0
  4. package/README.md +16 -2
  5. package/RELEASE_NOTES.md +93 -8
  6. package/abap/CLAUDE.md +282 -6
  7. package/abap/copilot-instructions.md +79 -0
  8. package/abap/zcl_abgagt_agent.clas.abap +2 -2
  9. package/abap/zcl_abgagt_cmd_factory.clas.abap +2 -0
  10. package/abap/zcl_abgagt_command_inspect.clas.abap +255 -36
  11. package/abap/zcl_abgagt_command_tree.clas.abap +237 -0
  12. package/abap/zcl_abgagt_command_tree.clas.xml +15 -0
  13. package/abap/zcl_abgagt_command_view.clas.abap +240 -0
  14. package/abap/zcl_abgagt_command_view.clas.xml +15 -0
  15. package/abap/zcl_abgagt_resource_tree.clas.abap +70 -0
  16. package/abap/zcl_abgagt_resource_tree.clas.xml +15 -0
  17. package/abap/zcl_abgagt_resource_view.clas.abap +68 -0
  18. package/abap/zcl_abgagt_resource_view.clas.xml +15 -0
  19. package/abap/zcl_abgagt_rest_handler.clas.abap +2 -0
  20. package/abap/zcl_abgagt_util.clas.abap +2 -2
  21. package/abap/zcl_abgagt_viewer_clas.clas.abap +58 -0
  22. package/abap/zcl_abgagt_viewer_clas.clas.xml +15 -0
  23. package/abap/zcl_abgagt_viewer_ddls.clas.abap +83 -0
  24. package/abap/zcl_abgagt_viewer_ddls.clas.xml +15 -0
  25. package/abap/zcl_abgagt_viewer_dtel.clas.abap +98 -0
  26. package/abap/zcl_abgagt_viewer_dtel.clas.xml +15 -0
  27. package/abap/zcl_abgagt_viewer_factory.clas.abap +41 -0
  28. package/abap/zcl_abgagt_viewer_factory.clas.xml +15 -0
  29. package/abap/zcl_abgagt_viewer_intf.clas.abap +58 -0
  30. package/abap/zcl_abgagt_viewer_intf.clas.xml +15 -0
  31. package/abap/zcl_abgagt_viewer_stru.clas.abap +59 -0
  32. package/abap/zcl_abgagt_viewer_stru.clas.xml +15 -0
  33. package/abap/zcl_abgagt_viewer_tabl.clas.abap +59 -0
  34. package/abap/zcl_abgagt_viewer_tabl.clas.xml +15 -0
  35. package/abap/zcl_abgagt_viewer_ttyp.clas.abap +93 -0
  36. package/abap/zcl_abgagt_viewer_ttyp.clas.xml +15 -0
  37. package/abap/zif_abgagt_command.intf.abap +3 -1
  38. package/abap/zif_abgagt_viewer.intf.abap +12 -0
  39. package/abap/zif_abgagt_viewer.intf.xml +15 -0
  40. package/bin/abapgit-agent +605 -38
  41. package/docs/commands.md +27 -8
  42. package/docs/tree-command.md +303 -0
  43. package/docs/view-command.md +501 -0
  44. package/package.json +1 -1
  45. package/src/abap-client.js +22 -0
  46. 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. Create online repository in ABAP
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
- # 4. Import objects from ABAP package to git
39
+ # 5. Import objects from ABAP package to git
35
40
  abapgit-agent import
36
41
 
37
- # 5. Push to git
38
- git push origin main
42
+ # 6. Pull new objects imported from ABAP package
43
+ git pull origin main
39
44
 
40
- # 6. Activate in ABAP
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 push
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
+ ```