abapgit-agent 1.1.5 → 1.2.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 (38) hide show
  1. package/.github/workflows/release.yml +9 -22
  2. package/CLAUDE.md +248 -0
  3. package/README.md +16 -2
  4. package/RELEASE_NOTES.md +80 -8
  5. package/abap/CLAUDE.md +72 -6
  6. package/abap/copilot-instructions.md +51 -0
  7. package/abap/zcl_abgagt_cmd_factory.clas.abap +2 -0
  8. package/abap/zcl_abgagt_command_tree.clas.abap +237 -0
  9. package/abap/zcl_abgagt_command_tree.clas.xml +15 -0
  10. package/abap/zcl_abgagt_command_view.clas.abap +238 -0
  11. package/abap/zcl_abgagt_command_view.clas.xml +15 -0
  12. package/abap/zcl_abgagt_resource_tree.clas.abap +70 -0
  13. package/abap/zcl_abgagt_resource_tree.clas.xml +15 -0
  14. package/abap/zcl_abgagt_resource_view.clas.abap +68 -0
  15. package/abap/zcl_abgagt_resource_view.clas.xml +15 -0
  16. package/abap/zcl_abgagt_rest_handler.clas.abap +2 -0
  17. package/abap/zcl_abgagt_viewer_clas.clas.abap +58 -0
  18. package/abap/zcl_abgagt_viewer_clas.clas.xml +15 -0
  19. package/abap/zcl_abgagt_viewer_dtel.clas.abap +98 -0
  20. package/abap/zcl_abgagt_viewer_dtel.clas.xml +15 -0
  21. package/abap/zcl_abgagt_viewer_factory.clas.abap +41 -0
  22. package/abap/zcl_abgagt_viewer_factory.clas.xml +15 -0
  23. package/abap/zcl_abgagt_viewer_intf.clas.abap +58 -0
  24. package/abap/zcl_abgagt_viewer_intf.clas.xml +15 -0
  25. package/abap/zcl_abgagt_viewer_stru.clas.abap +59 -0
  26. package/abap/zcl_abgagt_viewer_stru.clas.xml +15 -0
  27. package/abap/zcl_abgagt_viewer_tabl.clas.abap +59 -0
  28. package/abap/zcl_abgagt_viewer_tabl.clas.xml +15 -0
  29. package/abap/zif_abgagt_command.intf.abap +3 -1
  30. package/abap/zif_abgagt_viewer.intf.abap +11 -0
  31. package/abap/zif_abgagt_viewer.intf.xml +15 -0
  32. package/bin/abapgit-agent +397 -0
  33. package/docs/commands.md +27 -8
  34. package/docs/tree-command.md +303 -0
  35. package/docs/view-command.md +409 -0
  36. package/package.json +1 -1
  37. package/src/abap-client.js +22 -0
  38. package/src/agent.js +27 -0
@@ -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
+ ```
@@ -0,0 +1,409 @@
1
+ # view Command Requirements
2
+
3
+ ## Overview
4
+
5
+ View ABAP object source code directly from the ABAP system. This command retrieves and displays source code for objects that may not exist locally in your git repository, enabling developers to understand class definitions, method signatures, structure components, and data element types without pulling the entire object.
6
+
7
+ **This is the PRIMARY way to explore unfamiliar ABAP objects.**
8
+
9
+ ## Use Cases
10
+
11
+ - **Understand unfamiliar code**: View a class definition from a dependency package
12
+ - **Check method signatures**: See method parameters and return types before calling
13
+ - **Inspect data structures**: View table or structure field definitions
14
+ - **Review interface definitions**: Check interface methods and constants
15
+ - **Quick reference**: Look up definitions without opening SE80 or ADT
16
+
17
+ ## Command
18
+
19
+ ```bash
20
+ # View single object (auto-detect type from TADIR)
21
+ abapgit-agent view --objects ZCL_MY_CLASS
22
+ abapgit-agent view --objects ZIF_MY_INTERFACE
23
+ abapgit-agent view --objects ZMY_TABLE
24
+
25
+ # View with explicit type
26
+ abapgit-agent view --objects ZCL_MY_CLASS --type CLAS
27
+ abapgit-agent view --objects ZIF_MY_INT --type INTF
28
+ abapgit-agent view --objects ZMY_STRUCT --type STRU
29
+ abapgit-agent view --objects ZMY_TABLE --type TABL
30
+ abapgit-agent view --objects ZMY_DTEL --type DTEL
31
+
32
+ # View multiple objects
33
+ abapgit-agent view --objects ZCL_CLASS1,ZCL_CLASS2,ZIF_INTERFACE1
34
+
35
+ # Lowercase names and types are supported
36
+ abapgit-agent view --objects zcl_my_class --type clas
37
+
38
+ # Output as JSON (for scripting/AI processing)
39
+ abapgit-agent view --objects ZCL_MY_CLASS --json
40
+ ```
41
+
42
+ ## Prerequisite
43
+
44
+ - `.abapGitAgent` exists with valid credentials
45
+ - Object must exist in the ABAP system
46
+
47
+ ## Parameters
48
+
49
+ | Parameter | Required | Description |
50
+ |-----------|----------|-------------|
51
+ | `--objects` | Yes | Comma-separated list of object names (e.g., `ZCL_MY_CLASS,ZIF_MY_INTERFACE`) |
52
+ | `--type` | No | Object type for all objects (CLAS, INTF, TABL, STRU, DTEL). Auto-detected from TADIR if not specified |
53
+ | `--json` | No | Output raw JSON only (for scripting) |
54
+
55
+ ---
56
+
57
+ ## Tasks
58
+
59
+ ### 1. Validate Parameters
60
+
61
+ - `--objects` must be specified
62
+ - Object names are converted to uppercase automatically
63
+
64
+ ### 2. Load Configuration
65
+
66
+ Read `.abapGitAgent` for credentials
67
+
68
+ ### 3. Fetch CSRF Token
69
+
70
+ ```bash
71
+ GET /health (with X-CSRF-Token: fetch)
72
+ ```
73
+
74
+ ### 4. Make View Request
75
+
76
+ **Endpoint:** `POST /view`
77
+
78
+ **Request Body:**
79
+ ```json
80
+ {
81
+ "objects": ["ZCL_MY_CLASS", "ZIF_MY_INTERFACE"],
82
+ "type": "CLAS"
83
+ }
84
+ ```
85
+
86
+ ### 5. Display Results
87
+
88
+ ---
89
+
90
+ ## Output
91
+
92
+ ### Class Definition (CLAS)
93
+
94
+ ```
95
+ 📖 ZCL_MY_CLASS (Class)
96
+ Class ZCL_MY_CLASS in $PACKAGE_NAME
97
+
98
+ CLASS zcl_my_class DEFINITION PUBLIC.
99
+
100
+ PUBLIC SECTION.
101
+ INTERFACES: if_interface.
102
+
103
+ METHODS:
104
+ constructor
105
+ IMPORTING
106
+ !iv_name TYPE string OPTIONAL,
107
+ get_value
108
+ RETURNING
109
+ VALUE(rv_result) TYPE string.
110
+ ENDCLASS.
111
+ ```
112
+
113
+ ### Interface Definition (INTF)
114
+
115
+ ```
116
+ 📖 ZIF_MY_INTERFACE (Interface)
117
+ Interface ZIF_MY_INTERFACE in $PACKAGE_NAME
118
+
119
+ INTERFACE zif_my_interface PUBLIC.
120
+
121
+ CONSTANTS:
122
+ gc_value TYPE string VALUE 'test'.
123
+
124
+ METHODS:
125
+ process
126
+ IMPORTING
127
+ !iv_data TYPE any
128
+ RETURNING
129
+ VALUE(rv_result) TYPE abap_bool,
130
+ get_status
131
+ RETURNING
132
+ VALUE(rv_status) TYPE string.
133
+
134
+ ENDINTERFACE.
135
+ ```
136
+
137
+ ### Table Definition (TABL)
138
+
139
+ ```
140
+ 📖 SFLIGHT (Table)
141
+ Table SFLIGHT in SAPBC_DATAMODEL
142
+
143
+ TABLE SFLIGHT:
144
+ |------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
145
+ | Field | Key | Type | Length | Data Elem | Description |
146
+ |------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
147
+ | MANDT | X | CLNT | 3 | MANDT | Client |
148
+ | CARRID | X | CHAR | 3 | S_CARR_ID | Airline Code |
149
+ | CONNID | X | NUMC | 4 | S_CONN_ID | Connection Number |
150
+ | FLDATE | X | DATS | 8 | S_DATE | Flight Date |
151
+ | PRICE | | CURR | 16 | S_PRICE | Airfare |
152
+ | CURRENCY | | CUKY | 5 | S_CURR | Airline Currency |
153
+ |------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
154
+ ```
155
+
156
+ ### Structure Definition (STRU)
157
+
158
+ ```
159
+ 📖 SFLIGHT (Structure)
160
+ Structure SFLIGHT in SAPBC_DATAMODEL
161
+
162
+ STRUCTURE SFLIGHT:
163
+ |------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
164
+ | Field | Key | Type | Length | Data Elem | Description |
165
+ |------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
166
+ | MANDT | X | CLNT | 3 | MANDT | Client |
167
+ | CARRID | X | CHAR | 3 | S_CARR_ID | Airline Code |
168
+ |------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
169
+ ```
170
+
171
+ ### Data Element Definition (DTEL)
172
+
173
+ ```
174
+ 📖 S_CARR_ID (Data Element)
175
+ Airline Code
176
+
177
+ DATA ELEMENT S_CARR_ID:
178
+ ┌────────────────────┬──────────────────────────────────────────┐
179
+ │ Property │ Value │
180
+ ├────────────────────┼──────────────────────────────────────────┤
181
+ │ Data Type │ CHAR │
182
+ │ Length │ 3 │
183
+ │ Description │ Airline Code │
184
+ │ Domain │ S_CARR_ID │
185
+ └────────────────────┴──────────────────────────────────────────┘
186
+ ```
187
+
188
+ ### Multiple Objects
189
+
190
+ ```
191
+ 📖 Viewing 3 Objects
192
+
193
+ 1️⃣ ZCL_CLASS1 (Class)
194
+ └─ Class ZCL_CLASS1 in $PACKAGE
195
+
196
+ 2️⃣ ZIF_INTERFACE1 (Interface)
197
+ └─ Interface ZIF_INTERFACE1 in $PACKAGE
198
+
199
+ 3️⃣ ZMY_TABLE (Table)
200
+ └─ Table ZMY_TABLE in $PACKAGE
201
+ ```
202
+
203
+ ### JSON Output (Pure Scripting)
204
+
205
+ ```json
206
+ {
207
+ "SUCCESS": true,
208
+ "COMMAND": "VIEW",
209
+ "MESSAGE": "Retrieved 1 object(s)",
210
+ "OBJECTS": [
211
+ {
212
+ "NAME": "ZCL_MY_CLASS",
213
+ "TYPE": "CLAS",
214
+ "TYPE_TEXT": "Class",
215
+ "DESCRIPTION": "Class ZCL_MY_CLASS in $PACKAGE",
216
+ "SOURCE": "CLASS zcl_my_class DEFINITION PUBLIC.\n ...",
217
+ "DEFINITION": "",
218
+ "COMPONENTS": []
219
+ }
220
+ ],
221
+ "SUMMARY": {
222
+ "TOTAL": 1,
223
+ "BY_TYPE": ["CLAS"]
224
+ },
225
+ "ERROR": ""
226
+ }
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Response Structure
232
+
233
+ ### JSON Response Schema
234
+
235
+ ```json
236
+ {
237
+ "SUCCESS": boolean,
238
+ "COMMAND": "VIEW",
239
+ "MESSAGE": "string",
240
+ "OBJECTS": [
241
+ {
242
+ "NAME": "string",
243
+ "TYPE": "CLAS|INTF|TABL|STRU|DTEL",
244
+ "TYPE_TEXT": "string",
245
+ "DESCRIPTION": "string",
246
+ "DOMAIN": "string", // For DTEL
247
+ "DOMAIN_TYPE": "string", // For DTEL
248
+ "DOMAIN_LENGTH": number, // For DTEL
249
+ "DOMAIN_DECIMALS": number, // For DTEL
250
+ "SOURCE": "string", // Full ABAP source (CLAS/INTF)
251
+ "NOT_FOUND": boolean, // true if object does not exist
252
+ "COMPONENTS": [ // For TABL/STRU
253
+ {
254
+ "FIELD": "string",
255
+ "KEY": boolean,
256
+ "TYPE": "string",
257
+ "LENGTH": number,
258
+ "DATAELEMENT": "string",
259
+ "DESCRIPTION": "string"
260
+ }
261
+ ]
262
+ }
263
+ ],
264
+ "SUMMARY": {
265
+ "TOTAL": number,
266
+ "BY_TYPE": ["string"]
267
+ },
268
+ "ERROR": "string"
269
+ }
270
+ ```
271
+
272
+ ---
273
+
274
+ ## Error Handling
275
+
276
+ | Error | Message |
277
+ |-------|---------|
278
+ | Object not found | `Object not found: ZCL_NONEXISTENT` |
279
+ | Invalid object type | `Unsupported object type: INVALID` |
280
+
281
+ ### Error Output
282
+
283
+ ```
284
+ ❌ Object not found: ZCL_NONEXISTENT
285
+ ```
286
+
287
+ ---
288
+
289
+ ## Object Type Detection
290
+
291
+ ### Auto-Detection Rules
292
+
293
+ | Object Name Pattern | Default Type |
294
+ |---------------------|--------------|
295
+ | `ZCL_*` or `zcl_*` | CLAS (Class) |
296
+ | `ZIF_*` or `zif_*` | INTF (Interface) |
297
+ | `ZTY_*` or `zty_*` | DTEL (Data Element) |
298
+ | `ZS__*` or `zs__*` | DTEL (Data Element) |
299
+ | Other `Z*` | CLAS (default fallback) |
300
+
301
+ ### Supported Object Types
302
+
303
+ | Type Code | Type Text | Description |
304
+ |-----------|-----------|-------------|
305
+ | `CLAS` | Class | Global ABAP class |
306
+ | `INTF` | Interface | Global interface |
307
+ | `TABL` | Table | Database table |
308
+ | `STRU` | Structure | Structure type |
309
+ | `DTEL` | Data Element | Data element/domain type |
310
+
311
+ ---
312
+
313
+ ## Example
314
+
315
+ ```bash
316
+ # View a class definition
317
+ abapgit-agent view --objects ZCL_ABGAGT_AGENT
318
+
319
+ # View interface
320
+ abapgit-agent view --objects ZIF_ABGAGT_COMMAND
321
+
322
+ # View table structure
323
+ abapgit-agent view --objects SFLIGHT --type TABL
324
+
325
+ # View data element
326
+ abapgit-agent view --objects S_CARR_ID --type DTEL
327
+
328
+ # View multiple objects
329
+ abapgit-agent view --objects ZCL_CONFIG,ZIF_LOGGER,ZCL_UTILS
330
+
331
+ # JSON for programmatic use
332
+ abapgit-agent view --objects ZCL_MY_CLASS --json
333
+
334
+ # Lowercase support
335
+ abapgit-agent view --objects zcl_my_class
336
+ abapgit-agent view --objects sflight --type tabl
337
+ ```
338
+
339
+ ---
340
+
341
+ ## Implementation
342
+
343
+ ### ABAP Tables Used
344
+
345
+ | Table | Purpose |
346
+ |-------|---------|
347
+ | **TADIR** | Object directory (devclass, object type) |
348
+ | **SEOCLASS** | Class/interface metadata |
349
+ | **SEOCOMPODF** | Component definitions |
350
+ | **DD02L** | Table/structure definitions |
351
+ | **DD03L** | Table/structure fields |
352
+ | **DD04L** | Data element definitions |
353
+
354
+ ### Class Source Retrieval (CLAS)
355
+
356
+ ```abap
357
+ " Get class info from TADIR
358
+ SELECT SINGLE obj_name, devclass FROM tadir
359
+ INTO (lv_obj_name, lv_devclass)
360
+ WHERE obj_name = iv_name
361
+ AND object = 'CLAS'.
362
+
363
+ " Get public section source
364
+ CALL METHOD cl_oo_classname_service=>get_pubsec_name
365
+ EXPORTING clsname = lv_name
366
+ RECEIVING result = lv_prog.
367
+
368
+ READ REPORT lv_prog INTO lt_source.
369
+ ```
370
+
371
+ ### Interface Source Retrieval (INTF)
372
+
373
+ ```abap
374
+ " Get interface info from TADIR
375
+ SELECT SINGLE obj_name, devclass FROM tadir
376
+ INTO (lv_obj_name, lv_devclass)
377
+ WHERE obj_name = iv_name
378
+ AND object = 'INTF'.
379
+
380
+ " Get interface section source
381
+ CALL METHOD cl_oo_classname_service=>get_intfsec_name
382
+ EXPORTING clsname = lv_name
383
+ RECEIVING result = lv_prog.
384
+
385
+ READ REPORT lv_prog INTO lt_source.
386
+ ```
387
+
388
+ ### Table/Structure Retrieval (TABL/STRU)
389
+
390
+ ```abap
391
+ " Get fields from DD03L
392
+ SELECT fieldname, keyflag AS key, datatype AS type, leng AS length,
393
+ rollname AS dataelement, ddtext AS description
394
+ FROM dd03l
395
+ INTO TABLE lt_components
396
+ WHERE tabname = iv_name
397
+ AND as4local = 'A'
398
+ ORDER BY position.
399
+ ```
400
+
401
+ ### Data Element Retrieval (DTEL)
402
+
403
+ ```abap
404
+ " Get domain info from DD04V
405
+ SELECT SINGLE rollname, ddtext, datatype, leng, decimals
406
+ FROM dd04v
407
+ INTO (lv_domain, lv_desc, lv_type, lv_len, lv_decimals)
408
+ WHERE rollname = iv_name.
409
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abapgit-agent",
3
- "version": "1.1.5",
3
+ "version": "1.2.0",
4
4
  "description": "ABAP Git Agent - Pull and activate ABAP code via abapGit from any git repository",
5
5
  "main": "src/index.js",
6
6
  "bin": {