arc-1 0.6.0 → 0.6.2

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 (90) hide show
  1. package/README.md +25 -26
  2. package/dist/adt/btp.d.ts +19 -12
  3. package/dist/adt/btp.d.ts.map +1 -1
  4. package/dist/adt/btp.js +48 -35
  5. package/dist/adt/btp.js.map +1 -1
  6. package/dist/adt/client.d.ts +20 -2
  7. package/dist/adt/client.d.ts.map +1 -1
  8. package/dist/adt/client.js +65 -2
  9. package/dist/adt/client.js.map +1 -1
  10. package/dist/adt/codeintel.d.ts.map +1 -1
  11. package/dist/adt/codeintel.js +1 -10
  12. package/dist/adt/codeintel.js.map +1 -1
  13. package/dist/adt/config.d.ts +2 -0
  14. package/dist/adt/config.d.ts.map +1 -1
  15. package/dist/adt/config.js +2 -0
  16. package/dist/adt/config.js.map +1 -1
  17. package/dist/adt/crud.d.ts +7 -0
  18. package/dist/adt/crud.d.ts.map +1 -1
  19. package/dist/adt/crud.js +35 -3
  20. package/dist/adt/crud.js.map +1 -1
  21. package/dist/adt/ddic-xml.d.ts +78 -0
  22. package/dist/adt/ddic-xml.d.ts.map +1 -0
  23. package/dist/adt/ddic-xml.js +203 -0
  24. package/dist/adt/ddic-xml.js.map +1 -0
  25. package/dist/adt/devtools.d.ts +30 -7
  26. package/dist/adt/devtools.d.ts.map +1 -1
  27. package/dist/adt/devtools.js +215 -76
  28. package/dist/adt/devtools.js.map +1 -1
  29. package/dist/adt/diagnostics.d.ts.map +1 -1
  30. package/dist/adt/diagnostics.js +105 -184
  31. package/dist/adt/diagnostics.js.map +1 -1
  32. package/dist/adt/errors.d.ts +12 -0
  33. package/dist/adt/errors.d.ts.map +1 -1
  34. package/dist/adt/errors.js +42 -0
  35. package/dist/adt/errors.js.map +1 -1
  36. package/dist/adt/features.d.ts.map +1 -1
  37. package/dist/adt/features.js +23 -3
  38. package/dist/adt/features.js.map +1 -1
  39. package/dist/adt/flp.d.ts +43 -0
  40. package/dist/adt/flp.d.ts.map +1 -0
  41. package/dist/adt/flp.js +213 -0
  42. package/dist/adt/flp.js.map +1 -0
  43. package/dist/adt/http.d.ts +2 -0
  44. package/dist/adt/http.d.ts.map +1 -1
  45. package/dist/adt/http.js +162 -4
  46. package/dist/adt/http.js.map +1 -1
  47. package/dist/adt/transport.d.ts +48 -3
  48. package/dist/adt/transport.d.ts.map +1 -1
  49. package/dist/adt/transport.js +222 -32
  50. package/dist/adt/transport.js.map +1 -1
  51. package/dist/adt/types.d.ts +107 -0
  52. package/dist/adt/types.d.ts.map +1 -1
  53. package/dist/adt/ui5-repository.d.ts +19 -0
  54. package/dist/adt/ui5-repository.d.ts.map +1 -0
  55. package/dist/adt/ui5-repository.js +43 -0
  56. package/dist/adt/ui5-repository.js.map +1 -0
  57. package/dist/adt/xml-parser.d.ts +43 -1
  58. package/dist/adt/xml-parser.d.ts.map +1 -1
  59. package/dist/adt/xml-parser.js +208 -3
  60. package/dist/adt/xml-parser.js.map +1 -1
  61. package/dist/handlers/intent.d.ts +20 -6
  62. package/dist/handlers/intent.d.ts.map +1 -1
  63. package/dist/handlers/intent.js +1304 -104
  64. package/dist/handlers/intent.js.map +1 -1
  65. package/dist/handlers/schemas.d.ts +240 -0
  66. package/dist/handlers/schemas.d.ts.map +1 -1
  67. package/dist/handlers/schemas.js +201 -5
  68. package/dist/handlers/schemas.js.map +1 -1
  69. package/dist/handlers/tools.d.ts.map +1 -1
  70. package/dist/handlers/tools.js +339 -49
  71. package/dist/handlers/tools.js.map +1 -1
  72. package/dist/server/config.d.ts.map +1 -1
  73. package/dist/server/config.js +15 -3
  74. package/dist/server/config.js.map +1 -1
  75. package/dist/server/http.d.ts.map +1 -1
  76. package/dist/server/http.js +32 -3
  77. package/dist/server/http.js.map +1 -1
  78. package/dist/server/server.d.ts +1 -1
  79. package/dist/server/server.d.ts.map +1 -1
  80. package/dist/server/server.js +38 -6
  81. package/dist/server/server.js.map +1 -1
  82. package/dist/server/types.d.ts +2 -0
  83. package/dist/server/types.d.ts.map +1 -1
  84. package/dist/server/types.js +5 -3
  85. package/dist/server/types.js.map +1 -1
  86. package/dist/server/xsuaa.d.ts +13 -0
  87. package/dist/server/xsuaa.d.ts.map +1 -1
  88. package/dist/server/xsuaa.js +28 -2
  89. package/dist/server/xsuaa.js.map +1 -1
  90. package/package.json +19 -6
@@ -49,6 +49,10 @@ const SAPREAD_TYPES_ONPREM = [
49
49
  'MESSAGES',
50
50
  'TEXT_ELEMENTS',
51
51
  'VARIANTS',
52
+ 'BSP',
53
+ 'BSP_DEPLOY',
54
+ 'API_STATE',
55
+ 'INACTIVE_OBJECTS',
52
56
  ];
53
57
  /** SAPRead types available on BTP ABAP Environment (no PROG, INCL, VIEW, TEXT_ELEMENTS, VARIANTS) */
54
58
  const SAPREAD_TYPES_BTP = [
@@ -70,20 +74,47 @@ const SAPREAD_TYPES_BTP = [
70
74
  'SYSTEM',
71
75
  'COMPONENTS',
72
76
  'MESSAGES',
77
+ 'BSP',
78
+ 'BSP_DEPLOY',
79
+ 'API_STATE',
80
+ 'INACTIVE_OBJECTS',
73
81
  ];
74
- const SAPREAD_DESC_ONPREM = 'Read SAP ABAP objects. Types: PROG, CLAS, INTF, FUNC, FUGR (use expand_includes=true to get all include sources), INCL, DDLS, DDLX (CDS metadata extensions — UI annotations), BDEF, SRVD, SRVB (service bindings — returns structured binding info: OData version, publish status, service definition ref), TABL, VIEW, STRU (DDIC structures like BAPIRET2 — returns CDS-like source), DOMA (DDIC domains — returns type info, value table, fixed values), DTEL (data elements — returns domain, labels, search help), TRAN (transaction codes — returns description, program, package), TABLE_CONTENTS, DEVC, SOBJ (BOR business objects — returns method catalog or full implementation), SYSTEM, COMPONENTS, MESSAGES, TEXT_ELEMENTS, VARIANTS. For CLAS: omit include to get the full class source (definition + implementation combined). The include param is optional — use it only to read class-local sections: definitions (local types), implementations (local helper classes), macros, testclasses (ABAP Unit). For CLAS with method param: use method="*" to list all methods with signatures and visibility, or method="method_name" to read a single method implementation (95% fewer tokens than full source). For SOBJ: returns BOR method catalog; use method param to read a specific method implementation.';
75
- const SAPREAD_DESC_BTP = 'Read SAP ABAP objects (BTP ABAP Environment). Types: CLAS, INTF, FUNC (released/custom only), FUGR (released/custom only), DDLS (CDS views — primary data model on BTP), DDLX (CDS metadata extensions — UI annotations for Fiori Elements), BDEF (RAP behavior definitions), SRVD (service definitions), SRVB (service bindings — returns structured binding info: OData version, publish status, service definition ref), TABL (custom tables only), STRU (DDIC structures — returns CDS-like source), DOMA (DDIC domains — type info, value table, fixed values), DTEL (data elements — domain, labels, search help), TABLE_CONTENTS (custom tables and released CDS only — SAP standard tables are blocked), DEVC, SYSTEM, COMPONENTS, MESSAGES (custom message classes only). For CLAS: omit include to get the full class source. The include param reads class-local sections: definitions, implementations, macros, testclasses. For CLAS with method param: use method="*" to list all methods with signatures and visibility, or method="method_name" to read a single method (95% fewer tokens). Note: PROG, INCL, VIEW, TRAN, TEXT_ELEMENTS, VARIANTS are not available on BTP — use CLAS with IF_OO_ADT_CLASSRUN for console applications, and DDLS for data models instead of classic views.';
82
+ const SAPREAD_DESC_ONPREM = 'Read SAP ABAP objects. Types: PROG, CLAS, INTF, FUNC, FUGR (use expand_includes=true to get all include sources), INCL, DDLS, DDLX (CDS metadata extensions — UI annotations), BDEF, SRVD, SRVB (service bindings — returns structured binding info: OData version, publish status, service definition ref), TABL, VIEW, STRU (DDIC structures like BAPIRET2 — returns CDS-like source), DOMA (DDIC domains — returns type info, value table, fixed values), DTEL (data elements — returns domain, labels, search help), TRAN (transaction codes — returns description, program, package), TABLE_CONTENTS, DEVC, SOBJ (BOR business objects — returns method catalog or full implementation), SYSTEM, COMPONENTS, MESSAGES, TEXT_ELEMENTS, VARIANTS. For CLAS: omit include to get the full class source (definition + implementation combined). The include param is optional — use it only to read class-local sections: definitions (local types), implementations (local helper classes), macros, testclasses (ABAP Unit). For CLAS with method param: use method="*" to list all methods with signatures and visibility, or method="method_name" to read a single method implementation (95% fewer tokens than full source). For SOBJ: returns BOR method catalog; use method param to read a specific method implementation. BSP (deployed UI5/Fiori apps — list apps, browse files, read content; use name to browse app structure, include for subfolder or file), BSP_DEPLOY (query deployed UI5 apps via ABAP Repository OData Service — returns name, package, description). API_STATE (API release state — checks if an object is released for ABAP Cloud / S/4HANA Clean Core; returns contract states C0-C4, successor info; use objectType param for non-class objects). INACTIVE_OBJECTS (list all objects pending activation — no name param needed; use before SAPActivate batch_activate to see what needs activating).';
83
+ const SAPREAD_DESC_BTP = 'Read SAP ABAP objects (BTP ABAP Environment). Types: CLAS, INTF, FUNC (released/custom only), FUGR (released/custom only), DDLS (CDS views — primary data model on BTP), DDLX (CDS metadata extensions — UI annotations for Fiori Elements), BDEF (RAP behavior definitions), SRVD (service definitions), SRVB (service bindings — returns structured binding info: OData version, publish status, service definition ref), TABL (custom tables only), STRU (DDIC structures — returns CDS-like source), DOMA (DDIC domains — type info, value table, fixed values), DTEL (data elements — domain, labels, search help), TABLE_CONTENTS (custom tables and released CDS only — SAP standard tables are blocked), DEVC, SYSTEM, COMPONENTS, MESSAGES (custom message classes only). For CLAS: omit include to get the full class source. The include param reads class-local sections: definitions, implementations, macros, testclasses. For CLAS with method param: use method="*" to list all methods with signatures and visibility, or method="method_name" to read a single method (95% fewer tokens). Note: PROG, INCL, VIEW, TRAN, TEXT_ELEMENTS, VARIANTS are not available on BTP — use CLAS with IF_OO_ADT_CLASSRUN for console applications, and DDLS for data models instead of classic views. BSP (deployed UI5/Fiori apps — list apps, browse files, read content; use name to browse app structure, include for subfolder or file), BSP_DEPLOY (query deployed UI5 apps via ABAP Repository OData Service — returns name, package, description). API_STATE (API release state — checks if an object is released for ABAP Cloud / Clean Core; returns contract states C0-C4, successor info; essential for cloud development; use objectType param for non-class objects). INACTIVE_OBJECTS (list all objects pending activation — no name param needed; use before SAPActivate batch_activate to see what needs activating).';
76
84
  // ─── SAPWrite Types ─────────────────────────────────────────────────
77
- const SAPWRITE_TYPES_ONPREM = ['PROG', 'CLAS', 'INTF', 'FUNC', 'INCL', 'DDLS', 'DDLX', 'BDEF', 'SRVD'];
78
- const SAPWRITE_TYPES_BTP = ['CLAS', 'INTF', 'DDLS', 'DDLX', 'BDEF', 'SRVD'];
79
- const SAPWRITE_DESC_ONPREM = 'Create or update ABAP source code. Handles lock/modify/unlock automatically. Supports PROG, CLAS, INTF, FUNC, INCL, DDLS, DDLX, BDEF, SRVD. ' +
85
+ const SAPWRITE_TYPES_ONPREM = [
86
+ 'PROG',
87
+ 'CLAS',
88
+ 'INTF',
89
+ 'FUNC',
90
+ 'INCL',
91
+ 'DDLS',
92
+ 'DDLX',
93
+ 'BDEF',
94
+ 'SRVD',
95
+ 'SRVB',
96
+ 'TABL',
97
+ 'DOMA',
98
+ 'DTEL',
99
+ 'MSAG',
100
+ ];
101
+ const SAPWRITE_TYPES_BTP = ['CLAS', 'INTF', 'DDLS', 'DDLX', 'BDEF', 'SRVD', 'SRVB', 'TABL', 'DOMA', 'DTEL', 'MSAG'];
102
+ const SAPWRITE_DESC_ONPREM = 'Create or update ABAP source code and DDIC metadata. Handles lock/modify/unlock automatically. Supports PROG, CLAS, INTF, FUNC, INCL, DDLS, DDLX, BDEF, SRVD, SRVB, TABL, DOMA, DTEL, MSAG. ' +
103
+ 'TABL uses source-based writes via /source/main (define table syntax), similar to DDLS/BDEF/SRVD. ' +
104
+ 'DOMA/DTEL use metadata XML writes (not /source/main): provide DDIC fields like dataType, length, fixedValues, typeKind, labels, searchHelp. ' +
105
+ 'MSAG (message classes) use metadata XML writes: provide "messages" array with {number, shortText} entries. Create empty then update, or provide messages at creation. ' +
106
+ 'SRVB (service bindings) use metadata XML writes: provide serviceDefinition (SRVD name) plus optional bindingType/category. ' +
80
107
  'For edit_method: surgically replace a single method body in a CLAS without sending the full class source. ' +
81
108
  'Provide just the new method implementation code in "source" — 95% fewer tokens than full-class updates. ' +
82
- 'For batch_create: create and activate multiple objects in a single call — ideal for RAP stacks. Pass "objects" array with dependency order.';
83
- const SAPWRITE_DESC_BTP = 'Create or update ABAP source code (BTP ABAP Environment). Handles lock/modify/unlock automatically. Supports CLAS, INTF, DDLS, DDLX, BDEF, SRVD. ' +
109
+ 'For batch_create: create and activate multiple objects in a single call — ideal for RAP stacks (TABL → DDLS → BDEF → SRVD). Pass "objects" array with dependency order.';
110
+ const SAPWRITE_DESC_BTP = 'Create or update ABAP source code and DDIC metadata (BTP ABAP Environment). Handles lock/modify/unlock automatically. Supports CLAS, INTF, DDLS, DDLX, BDEF, SRVD, SRVB, TABL, DOMA, DTEL, MSAG. ' +
111
+ 'TABL supports custom table source writes via /source/main (define table syntax). ' +
112
+ 'DOMA/DTEL use metadata XML writes (not /source/main): provide DDIC fields like dataType, length, fixedValues, typeKind, labels, searchHelp. ' +
113
+ 'MSAG (message classes) use metadata XML writes: provide "messages" array with {number, shortText} entries. ' +
114
+ 'SRVB (service bindings) use metadata XML writes: provide serviceDefinition (SRVD name) plus optional bindingType/category. ' +
84
115
  'Must use ABAP Cloud language version (no classic statements). Only Z*/Y* namespace allowed on BTP. ' +
85
116
  'For edit_method: surgically replace a single method body in a CLAS without sending the full class source. ' +
86
- 'For batch_create: create and activate multiple objects in a single call — ideal for RAP stacks.';
117
+ 'For batch_create: create and activate multiple objects in a single call — ideal for RAP stacks (TABL → DDLS → BDEF → SRVD).';
87
118
  // ─── SAPContext Types ───────────────────────────────────────────────
88
119
  const SAPCONTEXT_TYPES_ONPREM = ['CLAS', 'INTF', 'PROG', 'FUNC', 'DDLS'];
89
120
  const SAPCONTEXT_TYPES_BTP = ['CLAS', 'INTF', 'DDLS'];
@@ -102,7 +133,10 @@ const SAPCONTEXT_DESC_ONPREM = 'Get compressed dependency context for an ABAP ob
102
133
  'Filtering: SAP standard objects (CL_ABAP_*, IF_ABAP_*, CX_SY_*) are excluded — the LLM already knows standard SAP APIs. ' +
103
134
  'Custom objects (Z*, Y*) are prioritized.\n\n' +
104
135
  'Use SAPContext BEFORE writing code that modifies or extends existing objects. ' +
105
- 'Use SAPRead to get the full source of the target object, then SAPContext to understand its dependencies.';
136
+ 'Use SAPRead to get the full source of the target object, then SAPContext to understand its dependencies.\n\n' +
137
+ 'For CDS analysis: Use SAPContext instead of reading each view in the dependency chain individually. ' +
138
+ 'A single SAPContext call on a consumption view (e.g., ZC_*) returns all dependent interface views, tables, and associations — ' +
139
+ 'replacing 5-10 separate SAPRead calls. Only use targeted SAPRead for metadata extensions (DDLX) or service bindings (SRVB) that SAPContext does not cover.';
106
140
  const SAPCONTEXT_DESC_BTP = 'Get compressed dependency context for an ABAP object or CDS entity (BTP ABAP Environment). Returns only the public API contracts ' +
107
141
  '(method signatures, interface definitions, type declarations) of all objects that the target depends on — ' +
108
142
  'NOT the full source code. This is the most token-efficient way to understand dependencies.\n\n' +
@@ -113,7 +147,10 @@ const SAPCONTEXT_DESC_BTP = 'Get compressed dependency context for an ABAP objec
113
147
  "Each dependency's full source is included. Essential for CDS unit test generation.\n\n" +
114
148
  'On BTP: released SAP objects (CL_ABAP_*, IF_ABAP_*) are included since they form the primary development API surface. ' +
115
149
  'Custom objects (Z*, Y*) are also included.\n\n' +
116
- 'Use SAPContext BEFORE writing code that modifies or extends existing objects.';
150
+ 'Use SAPContext BEFORE writing code that modifies or extends existing objects.\n\n' +
151
+ 'For CDS analysis: Use SAPContext instead of reading each view in the dependency chain individually. ' +
152
+ 'A single SAPContext call on a consumption view returns all dependent interface views, tables, and associations — ' +
153
+ 'replacing 5-10 separate SAPRead calls.';
117
154
  // ─── SAPQuery ───────────────────────────────────────────────────────
118
155
  const SAPQUERY_DESC_ONPREM = 'Execute ABAP SQL queries against SAP tables. Returns structured data with column names and rows. ' +
119
156
  'Powerful for reverse-engineering: query metadata tables like DD02L (table catalog), DD03L (field catalog), ' +
@@ -135,28 +172,52 @@ const SAPSEARCH_DESC_BTP = 'Search for ABAP objects or search within source code
135
172
  '2. Source code search (searchType="source_code"): Full-text search within ABAP source code.\n\n' +
136
173
  "Tips: On BTP, focus on classes (CL_*), interfaces (IF_*), CDS views (I_*), and custom Z/Y objects.\n\nNote: Searches object names only (classes, CDS views, etc.) — field/column names are not searchable here. To find fields by name, use SAPRead(type='DDLS', include='elements') for CDS views.";
137
174
  // ─── SAPTransport ───────────────────────────────────────────────────
138
- const SAPTRANSPORT_DESC_ONPREM = 'Manage CTS transport requests: list, get details, create, and release.';
139
- const SAPTRANSPORT_DESC_BTP = 'Manage transport requests (BTP ABAP Environment): list, get details, create, and release. ' +
175
+ const SAPTRANSPORT_DESC_ONPREM = 'Manage CTS transport requests (SE09/SE10 equivalent). ' +
176
+ 'Actions: list (defaults to current user, modifiable transports both Workbench and Customizing), ' +
177
+ 'get (details with tasks and objects), create (K=Workbench, W=Customizing, T=Transport of Copies), ' +
178
+ 'release, delete, reassign (change owner), release_recursive (release tasks first, then parent), ' +
179
+ 'check (check if a package requires a transport — provide type, name, package). ' +
180
+ 'Transport IDs look like A4HK900123. Status: D=modifiable, R=released.';
181
+ const SAPTRANSPORT_DESC_BTP = 'Manage transport requests (BTP ABAP Environment, SE09/SE10 equivalent). ' +
182
+ 'Actions: list (defaults to current user, modifiable transports — both Workbench and Customizing), ' +
183
+ 'get (details with tasks and objects), create (K=Workbench, W=Customizing, T=Transport of Copies), ' +
184
+ 'release, delete, reassign (change owner), release_recursive (release tasks first, then parent), ' +
185
+ 'check (check if a package requires a transport — provide type, name, package). ' +
140
186
  'On BTP, transport release triggers a gCTS push to the software component Git repository. ' +
141
187
  'Import into target systems is done via the Manage Software Components app or Cloud Transport Management Service (cTMS), not via this tool.';
142
188
  // ─── SAPManage ──────────────────────────────────────────────────────
143
189
  const SAPMANAGE_DESC_ONPREM = 'Probe and report SAP system capabilities. Use this BEFORE attempting operations that depend on optional ' +
144
- 'features (abapGit, RAP/CDS, AMDP, HANA, UI5/Fiori, CTS transports).\n\n' +
190
+ 'features (abapGit, RAP/CDS, AMDP, HANA, UI5/Fiori, CTS transports, FLP customization). Also handles package (DEVC) lifecycle operations.\n\n' +
145
191
  'Actions:\n' +
146
192
  '- "features": Get cached feature status from last probe (fast, no SAP round-trip). ' +
147
193
  'Returns which features are available, their mode (auto/on/off), and when they were last probed.\n' +
148
- '- "probe": Re-probe the SAP system now (makes 7 parallel requests, ~1-2s). ' +
149
- 'Use this on first use or if you suspect feature availability has changed.\n\n' +
194
+ '- "probe": Re-probe the SAP system now (makes 8 parallel requests, ~1-2s). ' +
195
+ 'Use this on first use or if you suspect feature availability has changed.\n' +
196
+ '- "cache_stats": Show object cache health and warmup state.\n' +
197
+ '- "create_package": Create a package (DEVC) via ADT packages API.\n' +
198
+ '- "delete_package": Delete an existing package.\n' +
199
+ '- "flp_list_catalogs": List FLP business catalogs.\n' +
200
+ '- "flp_list_groups": List FLP groups.\n' +
201
+ '- "flp_list_tiles": List tiles in a catalog (requires "catalogId").\n' +
202
+ '- "flp_create_catalog": Create a business catalog (requires "domainId", "title").\n' +
203
+ '- "flp_create_group": Create a group (requires "groupId", "title").\n' +
204
+ '- "flp_create_tile": Create a tile in a catalog (requires "catalogId", "tile").\n' +
205
+ '- "flp_add_tile_to_group": Add a catalog tile to a group (requires "groupId", "catalogId", "tileInstanceId").\n' +
206
+ '- "flp_delete_catalog": Delete a business catalog (requires "catalogId").\n\n' +
150
207
  'Returns JSON with features, each having: id, available (bool), mode, message, and probedAt timestamp. ' +
151
208
  'Also returns systemType ("btp" or "onprem") for understanding available capabilities. ' +
152
209
  '"available: false" means do NOT attempt operations that depend on it.';
153
210
  const SAPMANAGE_DESC_BTP = 'Probe and report SAP system capabilities (BTP ABAP Environment). ' +
154
- 'Returns feature status and system type.\n\n' +
211
+ 'Returns feature status and system type. Also handles package (DEVC) lifecycle operations.\n\n' +
155
212
  'Actions:\n' +
156
213
  '- "features": Get cached feature status from last probe.\n' +
157
- '- "probe": Re-probe the SAP system now.\n\n' +
214
+ '- "probe": Re-probe the SAP system now.\n' +
215
+ '- "cache_stats": Show object cache health and warmup state.\n' +
216
+ '- "create_package": Create a package (DEVC) via ADT packages API.\n' +
217
+ '- "delete_package": Delete an existing package.\n' +
218
+ '- FLP actions: flp_list_catalogs, flp_list_groups, flp_list_tiles, flp_create_catalog, flp_create_group, flp_create_tile, flp_add_tile_to_group, flp_delete_catalog.\n\n' +
158
219
  'Returns JSON with features and systemType="btp". On BTP, RAP/CDS and transports are always available. ' +
159
- 'abapGit, AMDP, UI5/BSP may not be available depending on the BTP ABAP configuration.';
220
+ 'abapGit, AMDP, UI5/BSP, and FLP customization may not be available depending on the BTP ABAP configuration.';
160
221
  // ─── SAPSearch Builder ─────────────────────────────────────────────
161
222
  /** Strip source_code-specific lines from a SAPSearch description when textSearch is unavailable */
162
223
  function stripSourceCodeLines(desc) {
@@ -263,6 +324,10 @@ export function getToolDefinitions(config, textSearchAvailable) {
263
324
  },
264
325
  maxRows: { type: 'number', description: 'For TABLE_CONTENTS: max rows to return (default 100)' },
265
326
  sqlFilter: { type: 'string', description: 'For TABLE_CONTENTS: SQL WHERE clause filter' },
327
+ objectType: {
328
+ type: 'string',
329
+ description: 'For API_STATE: SAP object type (CLAS, INTF, PROG, FUGR, TABL, DDLS, etc.) — auto-detected from name if omitted',
330
+ },
266
331
  },
267
332
  required: ['type'],
268
333
  },
@@ -291,7 +356,9 @@ export function getToolDefinitions(config, textSearchAvailable) {
291
356
  type: {
292
357
  type: 'string',
293
358
  enum: btp ? SAPWRITE_TYPES_BTP : SAPWRITE_TYPES_ONPREM,
294
- description: 'Object type (for create/update/delete/edit_method)',
359
+ description: btp
360
+ ? 'Object type (for create/update/delete/edit_method). Supported: CLAS, INTF, DDLS, DDLX, BDEF, SRVD, TABL, DOMA, DTEL.'
361
+ : 'Object type (for create/update/delete/edit_method). Supported: PROG, CLAS, INTF, FUNC, INCL, DDLS, DDLX, BDEF, SRVD, TABL, DOMA, DTEL.',
295
362
  },
296
363
  name: { type: 'string', description: 'Object name (for create/update/delete/edit_method)' },
297
364
  source: { type: 'string', description: 'ABAP source code (for create/update/edit_method)' },
@@ -303,8 +370,59 @@ export function getToolDefinitions(config, textSearchAvailable) {
303
370
  type: 'string',
304
371
  description: 'Object description for create action (defaults to name if omitted). Max 60 chars for most types.',
305
372
  },
306
- package: { type: 'string', description: 'Package for new objects (default $TMP)' },
307
- transport: { type: 'string', description: 'Transport request number (for transportable packages)' },
373
+ package: {
374
+ type: 'string',
375
+ description: 'Package for new objects (default $TMP). Non-$TMP packages require a transport number.',
376
+ },
377
+ transport: {
378
+ type: 'string',
379
+ description: 'Transport request number. Required for non-$TMP packages. Use SAPTransport(action="list") to find or SAPTransport(action="create") to create one.',
380
+ },
381
+ dataType: { type: 'string', description: 'DOMA/DTEL: ABAP data type (e.g., CHAR, NUMC, DEC)' },
382
+ length: { type: 'number', description: 'DOMA/DTEL: data type length' },
383
+ decimals: { type: 'number', description: 'DOMA/DTEL: decimal places' },
384
+ outputLength: { type: 'number', description: 'DOMA: output length' },
385
+ conversionExit: { type: 'string', description: 'DOMA: conversion exit (e.g., ALPHA)' },
386
+ signExists: { type: 'boolean', description: 'DOMA: signed values allowed' },
387
+ lowercase: { type: 'boolean', description: 'DOMA: lowercase characters allowed' },
388
+ fixedValues: {
389
+ type: 'array',
390
+ description: 'DOMA: fixed value ranges',
391
+ items: {
392
+ type: 'object',
393
+ properties: {
394
+ low: { type: 'string', description: 'Low value (required)' },
395
+ high: { type: 'string', description: 'High value for ranges (optional)' },
396
+ description: { type: 'string', description: 'Value description (optional)' },
397
+ },
398
+ required: ['low'],
399
+ },
400
+ },
401
+ valueTable: { type: 'string', description: 'DOMA: value table reference (e.g., T001)' },
402
+ typeKind: {
403
+ type: 'string',
404
+ enum: ['domain', 'predefinedAbapType'],
405
+ description: 'DTEL: type source (domain reference or predefined ABAP type)',
406
+ },
407
+ typeName: { type: 'string', description: 'DTEL: domain/type name reference (for typeKind=domain)' },
408
+ domainName: { type: 'string', description: 'DTEL: alias for typeName when referencing a domain' },
409
+ shortLabel: { type: 'string', description: 'DTEL: short field label' },
410
+ mediumLabel: { type: 'string', description: 'DTEL: medium field label' },
411
+ longLabel: { type: 'string', description: 'DTEL: long field label' },
412
+ headingLabel: { type: 'string', description: 'DTEL: heading field label' },
413
+ searchHelp: { type: 'string', description: 'DTEL: search help name' },
414
+ searchHelpParameter: { type: 'string', description: 'DTEL: search help parameter' },
415
+ setGetParameter: { type: 'string', description: 'DTEL: SET/GET parameter ID' },
416
+ defaultComponentName: { type: 'string', description: 'DTEL: default component name' },
417
+ changeDocument: { type: 'boolean', description: 'DTEL: enable change document flag' },
418
+ serviceDefinition: { type: 'string', description: 'SRVB: service definition name (SRVD) to bind to' },
419
+ bindingType: { type: 'string', description: 'SRVB: binding type (default: ODATA)' },
420
+ category: {
421
+ type: 'string',
422
+ enum: ['0', '1'],
423
+ description: 'SRVB: binding category (0=UI, 1=Web API; default: 0)',
424
+ },
425
+ version: { type: 'string', description: 'SRVB: service version (default: 0001)' },
308
426
  objects: {
309
427
  type: 'array',
310
428
  items: {
@@ -313,17 +431,58 @@ export function getToolDefinitions(config, textSearchAvailable) {
313
431
  type: {
314
432
  type: 'string',
315
433
  enum: btp ? SAPWRITE_TYPES_BTP : SAPWRITE_TYPES_ONPREM,
316
- description: 'Object type',
434
+ description: 'Object type (includes TABL for RAP stack bootstrapping)',
317
435
  },
318
436
  name: { type: 'string', description: 'Object name' },
319
437
  source: { type: 'string', description: 'ABAP source code (optional — some objects have no source)' },
320
438
  description: { type: 'string', description: 'Object description (defaults to name if omitted)' },
439
+ dataType: { type: 'string', description: 'DOMA/DTEL: ABAP data type' },
440
+ length: { type: 'number', description: 'DOMA/DTEL: data type length' },
441
+ decimals: { type: 'number', description: 'DOMA/DTEL: decimal places' },
442
+ outputLength: { type: 'number', description: 'DOMA: output length' },
443
+ conversionExit: { type: 'string', description: 'DOMA: conversion exit' },
444
+ signExists: { type: 'boolean', description: 'DOMA: signed values allowed' },
445
+ lowercase: { type: 'boolean', description: 'DOMA: lowercase allowed' },
446
+ fixedValues: {
447
+ type: 'array',
448
+ description: 'DOMA: fixed value ranges',
449
+ items: {
450
+ type: 'object',
451
+ properties: {
452
+ low: { type: 'string' },
453
+ high: { type: 'string' },
454
+ description: { type: 'string' },
455
+ },
456
+ required: ['low'],
457
+ },
458
+ },
459
+ valueTable: { type: 'string', description: 'DOMA: value table' },
460
+ typeKind: { type: 'string', enum: ['domain', 'predefinedAbapType'], description: 'DTEL: type mode' },
461
+ typeName: { type: 'string', description: 'DTEL: domain/type name reference' },
462
+ domainName: { type: 'string', description: 'DTEL: alias for typeName' },
463
+ shortLabel: { type: 'string', description: 'DTEL: short field label' },
464
+ mediumLabel: { type: 'string', description: 'DTEL: medium field label' },
465
+ longLabel: { type: 'string', description: 'DTEL: long field label' },
466
+ headingLabel: { type: 'string', description: 'DTEL: heading field label' },
467
+ searchHelp: { type: 'string', description: 'DTEL: search help' },
468
+ searchHelpParameter: { type: 'string', description: 'DTEL: search help parameter' },
469
+ setGetParameter: { type: 'string', description: 'DTEL: SET/GET parameter ID' },
470
+ defaultComponentName: { type: 'string', description: 'DTEL: default component name' },
471
+ changeDocument: { type: 'boolean', description: 'DTEL: change document flag' },
472
+ serviceDefinition: { type: 'string', description: 'SRVB: service definition (SRVD)' },
473
+ bindingType: { type: 'string', description: 'SRVB: binding type (default ODATA)' },
474
+ category: {
475
+ type: 'string',
476
+ enum: ['0', '1'],
477
+ description: 'SRVB: binding category (0=UI, 1=Web API)',
478
+ },
479
+ version: { type: 'string', description: 'SRVB: service version (default 0001)' },
321
480
  },
322
481
  required: ['type', 'name'],
323
482
  },
324
483
  description: 'For batch_create: ordered list of objects to create and activate. Each object needs type, name, and source (if applicable). ' +
325
- 'Objects are created and activated in array order — put dependencies first (e.g., CDS view before projection, BDEF after CDS views). ' +
326
- 'Example: [{type:"DDLS",name:"ZI_TRAVEL",source:"..."},{type:"BDEF",name:"ZI_TRAVEL",source:"..."},{type:"SRVD",name:"ZSD_TRAVEL",source:"..."}]',
484
+ 'Objects are created and activated in array order — put dependencies first (e.g., TABL before DDLS, BDEF after DDLS). ' +
485
+ 'Example: [{type:"TABL",name:"ZTRAVEL",source:"..."},{type:"DDLS",name:"ZI_TRAVEL",source:"..."},{type:"BDEF",name:"ZI_TRAVEL",source:"..."},{type:"SRVD",name:"ZSD_TRAVEL",source:"..."}]',
327
486
  },
328
487
  },
329
488
  required: ['action'],
@@ -332,13 +491,29 @@ export function getToolDefinitions(config, textSearchAvailable) {
332
491
  tools.push({
333
492
  name: 'SAPActivate',
334
493
  description: 'Activate (publish) ABAP objects. Supports single object or batch activation.\n' +
335
- 'For batch: pass "objects" array with {type, name} entries to activate multiple objects in one call. ' +
336
- 'Essential for RAP stacks where DDLS, BDEF, SRVD, DDLX, and SRVB depend on each other and must be activated together.',
494
+ 'ALWAYS prefer batch activation when activating 2+ objects — pass "objects" array with {type, name} entries. ' +
495
+ 'Batch activation is more efficient (one SAP round-trip) and works for ANY combination of objects, not just dependent ones. ' +
496
+ 'It is required for RAP stacks where DDLS, BDEF, SRVD depend on each other, but equally useful for unrelated objects like multiple DTELs or DOMAs.\n' +
497
+ 'For publish_srvb/unpublish_srvb: publish or unpublish an OData service binding (SRVB) — makes the OData service available for consumption.',
337
498
  inputSchema: {
338
499
  type: 'object',
339
500
  properties: {
340
- name: { type: 'string', description: 'Object name (for single activation)' },
501
+ action: {
502
+ type: 'string',
503
+ enum: ['activate', 'publish_srvb', 'unpublish_srvb'],
504
+ description: 'Action to perform. "activate" (default): activate ABAP objects. ' +
505
+ '"publish_srvb": publish a service binding to make OData service available. ' +
506
+ '"unpublish_srvb": unpublish a service binding.',
507
+ },
508
+ name: { type: 'string', description: 'Object name (for single activation or publish/unpublish)' },
341
509
  type: { type: 'string', description: 'Object type (PROG, CLAS, DDLS, DDLX, BDEF, SRVD, SRVB, etc.)' },
510
+ version: { type: 'string', description: 'Service version for publish/unpublish (default: "0001")' },
511
+ preaudit: {
512
+ type: 'boolean',
513
+ description: 'Request pre-activation audit from SAP (default: true). ' +
514
+ 'When true, SAP checks for issues before activating and returns warnings/errors. ' +
515
+ 'Set to false to skip pre-audit for faster activation when confident the code is correct.',
516
+ },
342
517
  objects: {
343
518
  type: 'array',
344
519
  items: {
@@ -349,8 +524,8 @@ export function getToolDefinitions(config, textSearchAvailable) {
349
524
  },
350
525
  required: ['type', 'name'],
351
526
  },
352
- description: 'For batch activation: array of objects to activate together. ' +
353
- 'Use for RAP stacks: [{type:"DDLS",name:"ZI_TRAVEL"},{type:"CLAS",name:"ZBP_I_TRAVEL"},{type:"BDEF",name:"ZI_TRAVEL"},{type:"DDLS",name:"ZC_TRAVEL"},{type:"BDEF",name:"ZC_TRAVEL"},{type:"DDLX",name:"ZC_TRAVEL"},{type:"SRVD",name:"ZSD_TRAVEL"}]',
527
+ description: 'Batch activation: array of objects to activate in one call. Use whenever activating 2+ objects. ' +
528
+ 'Works for any mix of types — e.g., [{type:"DOMA",name:"Z_DOM"},{type:"DTEL",name:"Z_DEL"}] or RAP stacks like [{type:"DDLS",name:"ZI_TRAVEL"},{type:"BDEF",name:"ZI_TRAVEL"},{type:"SRVD",name:"ZSD_TRAVEL"}].',
354
529
  },
355
530
  },
356
531
  },
@@ -359,14 +534,14 @@ export function getToolDefinitions(config, textSearchAvailable) {
359
534
  tools.push({
360
535
  name: 'SAPNavigate',
361
536
  description: btp
362
- ? 'Navigate code (BTP ABAP Environment): find definitions, references (where-used), and code completion. Use for "go to definition", "where is this used?", and auto-complete. For references: uses the full scope-based Where-Used API returning detailed results with line numbers, snippets, and package info. Optional objectType filter narrows results to a specific ADT type in slash format (e.g., CLAS/OC, PROG/P). On BTP, navigation scope is limited to released SAP objects and custom Z/Y objects.'
363
- : 'Navigate code: find definitions, references (where-used), and code completion. Use for "go to definition", "where is this used?", and auto-complete. For references: uses the full scope-based Where-Used API returning detailed results with line numbers, snippets, and package info. Optional objectType filter narrows results to a specific ADT type in slash format (e.g., CLAS/OC, PROG/P). You can use type+name instead of uri (e.g., type="CLAS", name="ZCL_ORDER") for a where-used list without needing the full ADT URI.',
537
+ ? 'Navigate code (BTP ABAP Environment): find definitions, references (where-used), code completion, and class hierarchy. Use for "go to definition", "where is this used?", "what does this class inherit?", and auto-complete. For references: uses the full scope-based Where-Used API returning detailed results with line numbers, snippets, and package info. Optional objectType filter narrows results to a specific ADT type in slash format (e.g., CLAS/OC, PROG/P). On BTP, navigation scope is limited to released SAP objects and custom Z/Y objects.'
538
+ : 'Navigate code: find definitions, references (where-used), code completion, and class hierarchy. Use for "go to definition", "where is this used?", "what does this class inherit?", and auto-complete. For references: uses the full scope-based Where-Used API returning detailed results with line numbers, snippets, and package info. Optional objectType filter narrows results to a specific ADT type in slash format (e.g., CLAS/OC, PROG/P). For hierarchy: returns superclass, implemented interfaces, and direct subclasses via SEOMETAREL. You can use type+name instead of uri (e.g., type="CLAS", name="ZCL_ORDER") for a where-used list without needing the full ADT URI.',
364
539
  inputSchema: {
365
540
  type: 'object',
366
541
  properties: {
367
542
  action: {
368
543
  type: 'string',
369
- enum: ['definition', 'references', 'completion'],
544
+ enum: ['definition', 'references', 'completion', 'hierarchy'],
370
545
  description: 'Navigation action',
371
546
  },
372
547
  uri: {
@@ -388,18 +563,23 @@ export function getToolDefinitions(config, textSearchAvailable) {
388
563
  },
389
564
  required: ['action'],
390
565
  },
391
- }, {
392
- name: 'SAPQuery',
393
- description: btp ? SAPQUERY_DESC_BTP : SAPQUERY_DESC_ONPREM,
394
- inputSchema: {
395
- type: 'object',
396
- properties: {
397
- sql: { type: 'string', description: 'ABAP SQL SELECT statement' },
398
- maxRows: { type: 'number', description: 'Maximum rows (default 100)' },
566
+ });
567
+ // SAPQuery — only registered when free SQL is allowed
568
+ if (!config.blockFreeSQL) {
569
+ tools.push({
570
+ name: 'SAPQuery',
571
+ description: btp ? SAPQUERY_DESC_BTP : SAPQUERY_DESC_ONPREM,
572
+ inputSchema: {
573
+ type: 'object',
574
+ properties: {
575
+ sql: { type: 'string', description: 'ABAP SQL SELECT statement' },
576
+ maxRows: { type: 'number', description: 'Maximum rows (default 100)' },
577
+ },
578
+ required: ['sql'],
399
579
  },
400
- required: ['sql'],
401
- },
402
- }, {
580
+ });
581
+ }
582
+ tools.push({
403
583
  name: 'SAPLint',
404
584
  description: 'Run local abaplint rules on ABAP source code. System-aware: auto-selects cloud or on-prem rules based on detected system type.\n\n' +
405
585
  'Actions:\n' +
@@ -518,8 +698,86 @@ export function getToolDefinitions(config, textSearchAvailable) {
518
698
  properties: {
519
699
  action: {
520
700
  type: 'string',
521
- enum: ['features', 'probe', 'cache_stats'],
522
- description: 'Action: "features" for cached status, "probe" to re-check SAP system, "cache_stats" for object cache statistics',
701
+ enum: [
702
+ 'features',
703
+ 'probe',
704
+ 'cache_stats',
705
+ 'create_package',
706
+ 'delete_package',
707
+ 'flp_list_catalogs',
708
+ 'flp_list_groups',
709
+ 'flp_list_tiles',
710
+ 'flp_create_catalog',
711
+ 'flp_create_group',
712
+ 'flp_create_tile',
713
+ 'flp_add_tile_to_group',
714
+ 'flp_delete_catalog',
715
+ ],
716
+ description: 'Action to execute. Includes package lifecycle (create/delete) and FLP actions for catalogs/groups/tiles via PAGE_BUILDER_CUST OData service.',
717
+ },
718
+ name: {
719
+ type: 'string',
720
+ description: 'Package name (required for create_package and delete_package).',
721
+ },
722
+ description: {
723
+ type: 'string',
724
+ description: 'Package description (required for create_package).',
725
+ },
726
+ superPackage: {
727
+ type: 'string',
728
+ description: 'Parent package for create_package (defaults to empty root package).',
729
+ },
730
+ softwareComponent: {
731
+ type: 'string',
732
+ description: 'Software component for create_package (default: LOCAL).',
733
+ },
734
+ transportLayer: {
735
+ type: 'string',
736
+ description: 'Transport layer for create_package (optional; required by some transportable landscapes).',
737
+ },
738
+ packageType: {
739
+ type: 'string',
740
+ enum: ['development', 'structure', 'main'],
741
+ description: 'Package type for create_package (default: development).',
742
+ },
743
+ transport: {
744
+ type: 'string',
745
+ description: 'Optional transport request (corrNr) for create_package or delete_package.',
746
+ },
747
+ catalogId: {
748
+ type: 'string',
749
+ description: 'FLP catalog identifier — accepts either full ID (X-SAP-UI2-CATALOGPAGE:MY_CAT) or domain ID (MY_CAT). Required for flp_list_tiles, flp_create_tile, flp_add_tile_to_group, flp_delete_catalog.',
750
+ },
751
+ groupId: {
752
+ type: 'string',
753
+ description: 'FLP group/page identifier (required for flp_create_group, flp_add_tile_to_group).',
754
+ },
755
+ title: {
756
+ type: 'string',
757
+ description: 'Title for FLP catalog/group creation.',
758
+ },
759
+ domainId: {
760
+ type: 'string',
761
+ description: 'Domain ID for FLP catalog creation (e.g., ZARC1_SALES).',
762
+ },
763
+ tileInstanceId: {
764
+ type: 'string',
765
+ description: 'Tile instance ID in the source catalog (required for flp_add_tile_to_group).',
766
+ },
767
+ tile: {
768
+ type: 'object',
769
+ description: 'Tile definition for flp_create_tile.',
770
+ properties: {
771
+ id: { type: 'string', description: 'Tile ID (client-side logical id).' },
772
+ title: { type: 'string', description: 'Display title.' },
773
+ icon: { type: 'string', description: 'Optional icon URI.' },
774
+ semanticObject: { type: 'string', description: 'Semantic object for intent navigation.' },
775
+ semanticAction: { type: 'string', description: 'Semantic action for intent navigation.' },
776
+ url: { type: 'string', description: 'Optional target URL.' },
777
+ subtitle: { type: 'string', description: 'Optional subtitle text.' },
778
+ info: { type: 'string', description: 'Optional info text.' },
779
+ },
780
+ required: ['id', 'title', 'semanticObject', 'semanticAction'],
523
781
  },
524
782
  },
525
783
  required: ['action'],
@@ -534,10 +792,42 @@ export function getToolDefinitions(config, textSearchAvailable) {
534
792
  inputSchema: {
535
793
  type: 'object',
536
794
  properties: {
537
- action: { type: 'string', enum: ['list', 'get', 'create', 'release'], description: 'Transport action' },
538
- id: { type: 'string', description: 'Transport request ID (for get/release)' },
539
- description: { type: 'string', description: 'Description (for create)' },
540
- user: { type: 'string', description: 'Filter by user (for list)' },
795
+ action: {
796
+ type: 'string',
797
+ enum: ['list', 'get', 'create', 'release', 'delete', 'reassign', 'release_recursive', 'check'],
798
+ description: 'list: show transports (defaults to current user, modifiable only). ' +
799
+ 'get: fetch transport details including tasks and objects. ' +
800
+ 'create: create a new transport request. ' +
801
+ 'release: release a single transport or task. ' +
802
+ 'delete: delete a transport (use recursive=true to delete tasks first). ' +
803
+ 'reassign: change transport owner (use recursive=true for tasks too). ' +
804
+ 'release_recursive: release all unreleased tasks first, then the transport itself. ' +
805
+ 'check: check if a transport is needed for a package/object (requires type, name, package).',
806
+ },
807
+ id: {
808
+ type: 'string',
809
+ description: 'Transport request ID, e.g. A4HK900123 (required for get/release/delete/reassign/release_recursive)',
810
+ },
811
+ description: { type: 'string', description: 'Transport description text (required for create)' },
812
+ name: { type: 'string', description: 'Object name (for check action)' },
813
+ package: { type: 'string', description: 'Package name (for check action)' },
814
+ user: {
815
+ type: 'string',
816
+ description: 'SAP username to filter by (for list). Defaults to the current SAP user. Use "*" to list all users.',
817
+ },
818
+ status: {
819
+ type: 'string',
820
+ description: 'Transport status filter (for list). D=modifiable (default), R=released, "*"=all statuses.',
821
+ },
822
+ type: {
823
+ type: 'string',
824
+ description: 'For create: transport type K=Workbench (default), W=Customizing, T=Transport of Copies. For check: object type (PROG, CLAS, DDLS, etc.)',
825
+ },
826
+ owner: { type: 'string', description: 'New owner SAP username (required for reassign)' },
827
+ recursive: {
828
+ type: 'boolean',
829
+ description: 'Apply recursively to child tasks (for delete/reassign). release_recursive always recurses.',
830
+ },
541
831
  },
542
832
  required: ['action'],
543
833
  },