abapgit-agent 1.5.0 → 1.6.1

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 (119) hide show
  1. package/README.md +1 -0
  2. package/abap/guidelines/00_index.md +36 -0
  3. package/abap/guidelines/01_sql.md +88 -0
  4. package/abap/guidelines/02_exceptions.md +176 -0
  5. package/abap/guidelines/03_testing.md +269 -0
  6. package/abap/guidelines/04_cds.md +136 -0
  7. package/abap/guidelines/05_classes.md +58 -0
  8. package/abap/guidelines/06_objects.md +110 -0
  9. package/abap/guidelines/07_json.md +24 -0
  10. package/abap/guidelines/08_abapgit.md +222 -0
  11. package/abap/guidelines/09_unit_testable_code.md +568 -0
  12. package/bin/abapgit-agent +513 -38
  13. package/bin/abgagt +24 -0
  14. package/package.json +8 -2
  15. package/src/abap-client.js +65 -2
  16. package/src/agent.js +57 -3
  17. package/src/config.js +1 -1
  18. package/src/ref-search.js +1037 -0
  19. package/.abapGitAgent.example +0 -11
  20. package/.github/workflows/release.yml +0 -60
  21. package/API.md +0 -710
  22. package/CLAUDE.md +0 -1058
  23. package/CLAUDE_MEM.md +0 -88
  24. package/ERROR_HANDLING.md +0 -30
  25. package/INSTALL.md +0 -155
  26. package/RELEASE_NOTES.md +0 -143
  27. package/abap/CLAUDE.md +0 -1010
  28. package/abap/copilot-instructions.md +0 -79
  29. package/abap/package.devc.xml +0 -10
  30. package/abap/zcl_abgagt_agent.clas.abap +0 -420
  31. package/abap/zcl_abgagt_agent.clas.xml +0 -15
  32. package/abap/zcl_abgagt_cmd_factory.clas.abap +0 -48
  33. package/abap/zcl_abgagt_cmd_factory.clas.xml +0 -15
  34. package/abap/zcl_abgagt_command_create.clas.abap +0 -95
  35. package/abap/zcl_abgagt_command_create.clas.xml +0 -15
  36. package/abap/zcl_abgagt_command_import.clas.abap +0 -138
  37. package/abap/zcl_abgagt_command_import.clas.xml +0 -15
  38. package/abap/zcl_abgagt_command_inspect.clas.abap +0 -456
  39. package/abap/zcl_abgagt_command_inspect.clas.testclasses.abap +0 -121
  40. package/abap/zcl_abgagt_command_inspect.clas.xml +0 -16
  41. package/abap/zcl_abgagt_command_preview.clas.abap +0 -386
  42. package/abap/zcl_abgagt_command_preview.clas.xml +0 -15
  43. package/abap/zcl_abgagt_command_pull.clas.abap +0 -80
  44. package/abap/zcl_abgagt_command_pull.clas.testclasses.abap +0 -87
  45. package/abap/zcl_abgagt_command_pull.clas.xml +0 -16
  46. package/abap/zcl_abgagt_command_tree.clas.abap +0 -237
  47. package/abap/zcl_abgagt_command_tree.clas.xml +0 -15
  48. package/abap/zcl_abgagt_command_unit.clas.abap +0 -297
  49. package/abap/zcl_abgagt_command_unit.clas.xml +0 -15
  50. package/abap/zcl_abgagt_command_view.clas.abap +0 -240
  51. package/abap/zcl_abgagt_command_view.clas.xml +0 -15
  52. package/abap/zcl_abgagt_resource_create.clas.abap +0 -71
  53. package/abap/zcl_abgagt_resource_create.clas.xml +0 -15
  54. package/abap/zcl_abgagt_resource_health.clas.abap +0 -25
  55. package/abap/zcl_abgagt_resource_health.clas.xml +0 -15
  56. package/abap/zcl_abgagt_resource_import.clas.abap +0 -66
  57. package/abap/zcl_abgagt_resource_import.clas.xml +0 -15
  58. package/abap/zcl_abgagt_resource_inspect.clas.abap +0 -63
  59. package/abap/zcl_abgagt_resource_inspect.clas.xml +0 -15
  60. package/abap/zcl_abgagt_resource_preview.clas.abap +0 -67
  61. package/abap/zcl_abgagt_resource_preview.clas.xml +0 -15
  62. package/abap/zcl_abgagt_resource_pull.clas.abap +0 -71
  63. package/abap/zcl_abgagt_resource_pull.clas.xml +0 -15
  64. package/abap/zcl_abgagt_resource_tree.clas.abap +0 -70
  65. package/abap/zcl_abgagt_resource_tree.clas.xml +0 -15
  66. package/abap/zcl_abgagt_resource_unit.clas.abap +0 -64
  67. package/abap/zcl_abgagt_resource_unit.clas.xml +0 -15
  68. package/abap/zcl_abgagt_resource_view.clas.abap +0 -68
  69. package/abap/zcl_abgagt_resource_view.clas.xml +0 -15
  70. package/abap/zcl_abgagt_rest_handler.clas.abap +0 -32
  71. package/abap/zcl_abgagt_rest_handler.clas.xml +0 -15
  72. package/abap/zcl_abgagt_util.clas.abap +0 -93
  73. package/abap/zcl_abgagt_util.clas.testclasses.abap +0 -84
  74. package/abap/zcl_abgagt_util.clas.xml +0 -16
  75. package/abap/zcl_abgagt_viewer_clas.clas.abap +0 -58
  76. package/abap/zcl_abgagt_viewer_clas.clas.xml +0 -15
  77. package/abap/zcl_abgagt_viewer_ddls.clas.abap +0 -83
  78. package/abap/zcl_abgagt_viewer_ddls.clas.xml +0 -15
  79. package/abap/zcl_abgagt_viewer_dtel.clas.abap +0 -98
  80. package/abap/zcl_abgagt_viewer_dtel.clas.xml +0 -15
  81. package/abap/zcl_abgagt_viewer_factory.clas.abap +0 -41
  82. package/abap/zcl_abgagt_viewer_factory.clas.xml +0 -15
  83. package/abap/zcl_abgagt_viewer_intf.clas.abap +0 -58
  84. package/abap/zcl_abgagt_viewer_intf.clas.xml +0 -15
  85. package/abap/zcl_abgagt_viewer_stru.clas.abap +0 -59
  86. package/abap/zcl_abgagt_viewer_stru.clas.xml +0 -15
  87. package/abap/zcl_abgagt_viewer_tabl.clas.abap +0 -59
  88. package/abap/zcl_abgagt_viewer_tabl.clas.xml +0 -15
  89. package/abap/zcl_abgagt_viewer_ttyp.clas.abap +0 -93
  90. package/abap/zcl_abgagt_viewer_ttyp.clas.xml +0 -15
  91. package/abap/zif_abgagt_agent.intf.abap +0 -53
  92. package/abap/zif_abgagt_agent.intf.xml +0 -15
  93. package/abap/zif_abgagt_cmd_factory.intf.abap +0 -7
  94. package/abap/zif_abgagt_cmd_factory.intf.xml +0 -15
  95. package/abap/zif_abgagt_command.intf.abap +0 -26
  96. package/abap/zif_abgagt_command.intf.xml +0 -15
  97. package/abap/zif_abgagt_util.intf.abap +0 -28
  98. package/abap/zif_abgagt_util.intf.xml +0 -15
  99. package/abap/zif_abgagt_viewer.intf.abap +0 -12
  100. package/abap/zif_abgagt_viewer.intf.xml +0 -15
  101. package/docs/commands.md +0 -142
  102. package/docs/create-command.md +0 -129
  103. package/docs/health-command.md +0 -89
  104. package/docs/import-command.md +0 -195
  105. package/docs/init-command.md +0 -189
  106. package/docs/inspect-command.md +0 -169
  107. package/docs/list-command.md +0 -289
  108. package/docs/preview-command.md +0 -528
  109. package/docs/pull-command.md +0 -202
  110. package/docs/status-command.md +0 -68
  111. package/docs/tree-command.md +0 -303
  112. package/docs/unit-command.md +0 -167
  113. package/docs/view-command.md +0 -501
  114. package/img/claude.png +0 -0
  115. package/scripts/claude-integration.js +0 -351
  116. package/scripts/release.js +0 -298
  117. package/scripts/release.sh +0 -60
  118. package/scripts/test-integration.js +0 -139
  119. package/scripts/unrelease.js +0 -277
@@ -1,202 +0,0 @@
1
- # pull Command Requirements
2
-
3
- ## Overview
4
-
5
- Pull and activate ABAP objects from git repository.
6
-
7
- ## Command
8
-
9
- ```bash
10
- # Auto-detect git remote and branch from current directory
11
- abapgit-agent pull
12
-
13
- # Pull specific files only (fast)
14
- abapgit-agent pull --files zcl_my_class.clas.abap,zcl_other.clas.abap
15
-
16
- # Pull from specific branch
17
- abapgit-agent pull --branch develop
18
-
19
- # Pull from specific URL
20
- abapgit-agent pull --url https://github.com/org/repo.git
21
-
22
- # With transport request
23
- abapgit-agent pull --transport DEVK900001
24
-
25
- # Combined options
26
- abapgit-agent pull --branch develop --files src/zcl_my_class.clas.abap --transport DEVK900001
27
-
28
- # Using transport from config/environment (no --transport flag needed)
29
- abapgit-agent pull
30
- ```
31
-
32
- ## Prerequisite
33
-
34
- - Current folder is git repo root (unless `--url` specified)
35
- - Git remote is configured (unless `--url` specified)
36
- - `.abapGitAgent` exists with valid credentials
37
-
38
- ## Parameters
39
-
40
- | Parameter | Required | Description |
41
- |-----------|----------|-------------|
42
- | `--url` | No | Git repository URL (auto-detected if not specified) |
43
- | `--branch` | No | Branch name (default: current branch) |
44
- | `--files` | No | Comma-separated list of files to pull |
45
- | `--transport` | No | Transport request (config/env takes priority if not specified) |
46
-
47
- ## Transport Request Precedence
48
-
49
- The transport request is determined in this order:
50
-
51
- | Priority | Source | Example |
52
- |----------|--------|---------|
53
- | 1 | CLI `--transport` argument | `--transport DEVK900001` |
54
- | 2 | Config file `transport` | `"transport": "DEVK900001"` in `.abapGitAgent` |
55
- | 3 | Environment variable `ABAP_TRANSPORT` | `export ABAP_TRANSPORT="DEVK900001"` |
56
- | 4 (default) | Not set | abapGit creates/uses default |
57
-
58
- ---
59
-
60
- ## Tasks
61
-
62
- ### 1. Detect Git Remote URL
63
-
64
- ```bash
65
- git remote get-url origin
66
- ```
67
-
68
- ### 2. Detect Current Branch
69
-
70
- ```bash
71
- git branch --show-current
72
- ```
73
-
74
- Or from `.git/HEAD`
75
-
76
- ### 3. Load Configuration
77
-
78
- Read `.abapGitAgent` for credentials
79
-
80
- ### 4. Fetch CSRF Token
81
-
82
- ```bash
83
- GET /health (with X-CSRF-Token: fetch)
84
- ```
85
-
86
- ### 5. Make Pull Request
87
-
88
- **Endpoint:** `POST /pull`
89
-
90
- **Request Body:**
91
- ```json
92
- {
93
- "url": "https://github.com/org/repo.git",
94
- "branch": "main",
95
- "username": "git-user",
96
- "password": "git-token",
97
- "files": ["zcl_my_class.clas.abap"],
98
- "transport_request": "DEVK900001"
99
- }
100
- ```
101
-
102
- ### 6. Display Results
103
-
104
- ---
105
-
106
- ## Output
107
-
108
- ### Success
109
-
110
- ```
111
- ✅ Pull completed successfully!
112
- Job ID: CAIS20260208115649
113
- Message: Pull completed successfully
114
-
115
- 📋 Pull Log (N messages):
116
- ────────────────────────────────────────────────────────────────────────────────
117
- Icon │Object │Message
118
- ─────┼────────────────────────────┼─────────────────────────────────────────
119
- ✅ │CLAS ZCL_MY_CLASS │Object ZCL_MY_CLASS imported
120
- ...
121
-
122
- 📦 Activated Objects (N):
123
- ────────────────────────────────────────────────────────────────────────────────
124
- ✅ CLAS ZCL_MY_CLASS
125
- ...
126
- ```
127
-
128
- ### With Errors
129
-
130
- ```
131
- ❌ Pull completed with errors!
132
- Job ID: CAIS20260208115649
133
- Message: Pull completed with errors
134
-
135
- 📋 Error Details:
136
- ────────────────────────────────────────────────────────────────────────────────
137
- CLAS ZCL_MY_CLASS: Error updating where-used list
138
-
139
- 📋 Pull Log (N messages):
140
- ...
141
-
142
- ❌ Failed Objects Log (M entries):
143
- ────────────────────────────────────────────────────────────────────────────────
144
- ❌ CLAS ZCL_MY_CLASS: Error message text
145
- Exception: Exception details
146
- ```
147
-
148
- ---
149
-
150
- ## File Format
151
-
152
- Files are parsed to extract `(obj_type, obj_name)`:
153
-
154
- | File Pattern | Object Type | Object Name |
155
- |--------------|-------------|-------------|
156
- | `zcl_my_class.clas.abap` | CLAS | ZCL_MY_CLASS |
157
- | `zif_my_intf.intf.abap` | INTF | ZIF_MY_INTF |
158
- | `src/zcl_my_class.clas.abap` | CLAS | ZCL_MY_CLASS |
159
-
160
- ---
161
-
162
- ## Response Structure
163
-
164
- ```json
165
- {
166
- "success": "X",
167
- "job_id": "CAIS20260208115649",
168
- "message": "Pull completed successfully",
169
- "activated_count": 15,
170
- "failed_count": 1,
171
- "activated_objects": [
172
- { "obj_type": "CLAS", "obj_name": "ZCL_MY_CLASS" }
173
- ],
174
- "failed_objects": [
175
- { "obj_type": "CLAS", "obj_name": "ZCL_OTHER", "text": "Error message" }
176
- ],
177
- "log_messages": [...]
178
- }
179
- ```
180
-
181
- ---
182
-
183
- ## Key Behaviors
184
-
185
- 1. **Activated Objects** - Only includes objects that completed successfully (no errors in log)
186
- 2. **Failed Objects Log** - Shows all error messages (duplicates allowed for multiple errors per object)
187
- 3. **Error Details** - When errors occur, displays error detail section at the top
188
-
189
- ---
190
-
191
- ## Example
192
-
193
- ```bash
194
- # Full pull
195
- abapgit-agent pull
196
-
197
- # Fast pull - specific files
198
- abapgit-agent pull --files abap/zcl_my_class.clas.abap
199
-
200
- # With transport
201
- abapgit-agent pull --files abap/zcl_my_class.clas.abap --transport DEVK900001
202
- ```
@@ -1,68 +0,0 @@
1
- # status Command Requirements
2
-
3
- ## Overview
4
-
5
- Check if ABAP integration is configured for the current repository.
6
-
7
- ## Command
8
-
9
- ```bash
10
- abapgit-agent status
11
- ```
12
-
13
- ## Tasks
14
-
15
- ### 1. Check Configuration File
16
-
17
- Check if `.abapGitAgent` exists in current directory:
18
-
19
- ```bash
20
- test -f .abapGitAgent
21
- ```
22
-
23
- ### 2. Display Status
24
-
25
- | Status | Output |
26
- |--------|--------|
27
- | Configured | `✅ ABAP Git Agent is ENABLED` with config location |
28
- | Not configured | `❌ ABAP Git Agent is NOT configured` |
29
-
30
- ---
31
-
32
- ## Output Examples
33
-
34
- ### Configured
35
-
36
- ```
37
- ✅ ABAP Git Agent is ENABLED
38
- Config location: /path/to/repo/.abapGitAgent
39
- ```
40
-
41
- ### Not Configured
42
-
43
- ```
44
- ❌ ABAP Git Agent is NOT configured
45
- ```
46
-
47
- ---
48
-
49
- ## Used By
50
-
51
- - `create` command - validates configuration exists before creating repo
52
-
53
- ## Related Files
54
-
55
- | File | Description |
56
- |------|-------------|
57
- | `.abapGitAgent` | Configuration file with ABAP connection details |
58
- | `.abapGitAgent.sample` | Template file |
59
-
60
- ---
61
-
62
- ## Example
63
-
64
- ```bash
65
- $ abapgit-agent status
66
- ✅ ABAP Git Agent is ENABLED
67
- Config location: /Users/user/project/.abapGitAgent
68
- ```
@@ -1,303 +0,0 @@
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
- ```