@dozimple/abap-adt 1.0.0-rc.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 (75) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +19 -0
  4. package/README.es.md +356 -0
  5. package/README.md +356 -0
  6. package/SECURITY.md +68 -0
  7. package/THIRD_PARTY_NOTICES.md +134 -0
  8. package/config/systems.example.json +39 -0
  9. package/dist/core/activation.js +18 -0
  10. package/dist/core/atc.js +94 -0
  11. package/dist/core/audit.js +93 -0
  12. package/dist/core/catalog.en.js +92 -0
  13. package/dist/core/catalog.js +139 -0
  14. package/dist/core/checks.js +19 -0
  15. package/dist/core/config.js +136 -0
  16. package/dist/core/confirm.js +43 -0
  17. package/dist/core/connection.js +159 -0
  18. package/dist/core/credentials.js +44 -0
  19. package/dist/core/datapolicy.js +175 -0
  20. package/dist/core/diff.js +115 -0
  21. package/dist/core/edits.js +31 -0
  22. package/dist/core/errors.js +68 -0
  23. package/dist/core/feeds.js +60 -0
  24. package/dist/core/notes.js +18 -0
  25. package/dist/core/objects.js +143 -0
  26. package/dist/core/output.js +27 -0
  27. package/dist/core/policy.js +126 -0
  28. package/dist/core/prompts.js +89 -0
  29. package/dist/core/registry.js +316 -0
  30. package/dist/core/revisions.js +97 -0
  31. package/dist/core/sidecar.js +85 -0
  32. package/dist/core/sql.js +54 -0
  33. package/dist/core/telemetry.js +42 -0
  34. package/dist/core/tool.js +5 -0
  35. package/dist/core/transport.js +109 -0
  36. package/dist/index.js +55 -0
  37. package/dist/scripts/audit-verify.js +19 -0
  38. package/dist/scripts/smoke.js +87 -0
  39. package/dist/tools/core/activate.js +27 -0
  40. package/dist/tools/core/api_release_state.js +58 -0
  41. package/dist/tools/core/atc_quickfix.js +159 -0
  42. package/dist/tools/core/co_change.js +73 -0
  43. package/dist/tools/core/create_transport.js +44 -0
  44. package/dist/tools/core/ddic_type_info.js +81 -0
  45. package/dist/tools/core/dumps.js +55 -0
  46. package/dist/tools/core/edit_preflight.js +112 -0
  47. package/dist/tools/core/function_modules.js +75 -0
  48. package/dist/tools/core/gateway_errors.js +45 -0
  49. package/dist/tools/core/get_source.js +70 -0
  50. package/dist/tools/core/inactive_objects.js +29 -0
  51. package/dist/tools/core/object_versions.js +35 -0
  52. package/dist/tools/core/package_contents.js +59 -0
  53. package/dist/tools/core/run_atc.js +117 -0
  54. package/dist/tools/core/run_unit_tests.js +60 -0
  55. package/dist/tools/core/search_objects.js +26 -0
  56. package/dist/tools/core/sql_query.js +25 -0
  57. package/dist/tools/core/support.js +95 -0
  58. package/dist/tools/core/syntax_check.js +35 -0
  59. package/dist/tools/core/table_contents.js +57 -0
  60. package/dist/tools/core/text_elements.js +108 -0
  61. package/dist/tools/core/transaction_info.js +43 -0
  62. package/dist/tools/core/transport_contents.js +49 -0
  63. package/dist/tools/core/transport_diff.js +111 -0
  64. package/dist/tools/core/where_used.js +37 -0
  65. package/dist/tools/core/write_source.js +95 -0
  66. package/dist/tools/docs/docs.js +159 -0
  67. package/dist/tools/local/growth.js +104 -0
  68. package/dist/tools/local/sap_systems.js +65 -0
  69. package/dist/tools/transport-risk/_service.js +63 -0
  70. package/dist/tools/transport-risk/risk_extras.js +90 -0
  71. package/dist/tools/transport-risk/transport_risk.js +42 -0
  72. package/docs/THREAT_MODEL.md +70 -0
  73. package/docs/TOOLS.md +980 -0
  74. package/package.json +68 -0
  75. package/scripts/set-password.sh +31 -0
package/README.md ADDED
@@ -0,0 +1,356 @@
1
+ <div align="center">
2
+
3
+ # abap-adt-doZimple
4
+
5
+ **English** · [Español](README.es.md)
6
+
7
+ [![CI](../../actions/workflows/ci.yml/badge.svg)](../../actions/workflows/ci.yml) ![Node 22+](https://img.shields.io/badge/node-22%2B-2f7d32) ![MCP](https://img.shields.io/badge/MCP-stdio-5a4fcf) ![SAP](https://img.shields.io/badge/SAP-ECC%20%7C%20S%2F4HANA-0a6ed1) ![License](https://img.shields.io/badge/license-Apache--2.0-blue)
8
+
9
+ **AI that works on your SAP system with the rules of a senior consultant.**
10
+
11
+ An [MCP](https://modelcontextprotocol.io) server by **[DoZimple](https://dozimple.cl)** that gives AI agents —
12
+ Claude Code, Kiro or any MCP client — secure, verifiable access to SAP ABAP systems: review code and transport
13
+ requests, run ATC and ABAP Unit, diagnose incidents, query the official documentation and, where authorized, save
14
+ changes in the right transport after a human confirms them.
15
+
16
+ **45 tools · 9 functional groups · 3 guided flows · ECC 6.0 (NW 7.50) and S/4HANA**
17
+
18
+ [Features](#features-by-group) · [Full tool reference](docs/TOOLS.md) ·
19
+ [Security](SECURITY.md) · [Threat model](docs/THREAT_MODEL.md) · [DoZimple Transport Risk](#dozimple-transport-risk) · [Credits](#credits) · [Contact](https://dozimple.cl)
20
+
21
+ </div>
22
+
23
+ ---
24
+
25
+ ## What you can ask
26
+
27
+ > “What does transport DEVK900123 really change, and which objects usually travel with it but are missing?”
28
+ >
29
+ > “Run ATC on ZDEMO_REPORT, explain the P1 findings with their SAP note and propose the fix SAP offers.”
30
+ >
31
+ > “Can I use `COND` on this 7.50 system? If not, rewrite the method with compatible syntax and validate it against SAP.”
32
+ >
33
+ > “Last night's billing job failed: dumps, job log and application log, and tell me the probable cause.”
34
+ >
35
+ > “Is this release of four transports ready for production? Explain it in business terms for the PMO.”
36
+
37
+ The agent picks the tools, chains them and answers with evidence. Every answer states which system it comes from,
38
+ and **a failure is never presented as an empty result or as success**.
39
+
40
+ ## Why it is different
41
+
42
+ | | Usual approach | **abap-adt-doZimple** |
43
+ |---|---|---|
44
+ | Systems | One per instance, no roles | Every system in the landscape, with a policy per role: DEV / QAS / PRD |
45
+ | Writes | Saves wherever SAP decides, or cannot write at all | Development only, explicit transport, preview and human confirmation; stops on another transport's CTS lock |
46
+ | Verification | abaplint or nothing | SAP's real syntax check, also on code not saved yet |
47
+ | Parameters | A misspelled parameter is silently ignored and the call runs anyway | **Unknown parameters are rejected with the list of accepted ones**: a misspelled `transprot` never runs without the transport you meant |
48
+ | Results on failure | Empty lists or misleading “OK” | Typed error saying what could not be checked and why |
49
+ | Releases | Hard-coded endpoints | Capabilities read from each system's ADT discovery |
50
+ | IDE | Often requires the IDE open | Standalone server, no IDE |
51
+ | Third parties | Dependencies mixed with credentials | Components isolated in their own process and filtered |
52
+ | Data | Whatever the SAP user can read goes to the model | Security and HR tables blocked (also through views and CDS); personal data masked on production-data systems |
53
+
54
+ ## Overview
55
+
56
+ <!-- groups:start -->
57
+ | Group | What for | Tools |
58
+ |---|---|---|
59
+ | [Code review and transports](#g-revision) | Know what a transport really changes and what it may break, before releasing it. | 5 |
60
+ | [Quality, ATC and remediation](#g-calidad) | Find, understand and fix findings with SAP's real syntax check and quick fixes. | 5 |
61
+ | [Repository exploration](#g-exploracion) | Read and understand any ABAP object and its relations, on ECC and S/4HANA. | 9 |
62
+ | [Data queries](#g-datos) | Query tables with ABAP SQL, read-only, with sensitive and personal data protected. | 2 |
63
+ | [Incident diagnosis](#g-diagnostico) | One conversation for what used to take ST22, SM37, SLG1 and /IWFND/ERROR_LOG. | 4 |
64
+ | [SAP documentation](#g-documentacion) | Answer from official documentation and check which syntax exists in each release. | 7 |
65
+ | [Controlled writes](#g-escritura) | Save changes only in development, in the right transport, previewed and confirmed by a human. | 4 |
66
+ | [DoZimple Transport Risk](#g-transport-risk) | Decide whether a whole release can go to QA or production, with the why in business terms. | 7 |
67
+ | [Operations and growth](#g-operacion) | See what works on each system and decide the next tool with data. | 4 |
68
+ <!-- groups:end -->
69
+
70
+ ## Architecture
71
+
72
+ ```mermaid
73
+ flowchart LR
74
+ subgraph Client["MCP client (Claude Code, Kiro…)"]
75
+ A[AI agent]
76
+ end
77
+ subgraph Srv["abap-adt-doZimple (stdio, no ports)"]
78
+ R["Registry and policy<br/>system · role · capability · module<br/>confirmation · audit"]
79
+ T["45 tools + 3 flows"]
80
+ K[("OS keychain")]
81
+ D["Docs component<br/>(isolated process)"]
82
+ end
83
+ subgraph SAP["SAP systems"]
84
+ DEV["DEV — read and, if authorized, write"]
85
+ QAS["QAS / PRD — read only"]
86
+ TR["DoZimple Transport Risk<br/>(SAP component)"]
87
+ end
88
+ A <-->|MCP| R --> T
89
+ T -->|ADT over HTTPS| DEV
90
+ T -->|ADT over HTTPS| QAS
91
+ T -->|ICF service| TR
92
+ T --> D
93
+ R -.credentials.-> K
94
+ D -.filtered queries.-> W[(SAP documentation)]
95
+ ```
96
+
97
+ ## Features by group
98
+
99
+ Summary per group; each tool's details — parameters, types, defaults, requirements and credits — are in the
100
+ **[full reference](docs/TOOLS.md)** (in Spanish).
101
+
102
+ <!-- tools:start -->
103
+ <a id="g-revision"></a>
104
+ ### Code review and transports
105
+
106
+ *Know what a transport really changes and what it may break, before releasing it.*
107
+
108
+ | Tool | What it does | Access |
109
+ |---|---|---|
110
+ | [`transport_diff`](docs/TOOLS.md#revision) | **What a transport changed (code diff).** Code review of a transport: for each source object (programs, includes, classes, interfaces, function modules, CDS) compares the version recorded with that transport against the previous one and shows a unified diff. | read |
111
+ | [`transport_contents`](docs/TOOLS.md#revision) | **Transport contents.** Header, tasks (owner and status) and objects of a transport request, read from E070/E07T/E071. | read |
112
+ | [`co_change`](docs/TOOLS.md#revision) | **What usually travels with this object?** Looks at the transports that touched an object and counts which other objects travelled with it, most frequent first. | read |
113
+ | [`inactive_objects`](docs/TOOLS.md#revision) | **Inactive objects.** Objects saved but not activated by the connection user, with their transport. | read |
114
+ | [`edit_preflight`](docs/TOOLS.md#revision) | **Before editing: which transport will it land in?** Tells, BEFORE changing an object, which transport the change will end up in and why: CTS lock by another transport, local object ($TMP), repair (different original system), or free with your open transports. | read |
115
+
116
+ <a id="g-calidad"></a>
117
+ ### Quality, ATC and remediation
118
+
119
+ *Find, understand and fix findings with SAP's real syntax check and quick fixes.*
120
+
121
+ | Tool | What it does | Access |
122
+ |---|---|---|
123
+ | [`run_atc`](docs/TOOLS.md#calidad) | **Run ATC.** Runs the ABAP Test Cockpit on an object or a transport and lists numbered findings (priority, line, check, message) with SAP's P1/P2/P3 totals. | read |
124
+ | [`atc_quickfix`](docs/TOOLS.md#calidad) | **SAP-proposed fixes.** The fixes SAP offers (the same as Ctrl+1 in Eclipse) for an ATC finding or a line: create text symbol, extract constant, etc. | read |
125
+ | [`api_release_state`](docs/TOOLS.md#calidad) | **Is this API released? What is its successor?** Release state of an SAP object (class, function module/BAPI, table, CDS…) by contract C0–C4 and its released successor, read from the system itself. | read |
126
+ | [`syntax_check`](docs/TOOLS.md#calidad) | **SAP syntax check.** SAP's real syntax check (not abaplint), also on code not saved yet. | read |
127
+ | [`run_unit_tests`](docs/TOOLS.md#calidad) | **Run ABAP Unit.** Runs the ABAP Unit tests of a class or program (harmless and short only) and returns the result per method, with each failure in detail. | executes (DEV) |
128
+
129
+ <a id="g-exploracion"></a>
130
+ ### Repository exploration
131
+
132
+ *Read and understand any ABAP object and its relations, on ECC and S/4HANA.*
133
+
134
+ | Tool | What it does | Access |
135
+ |---|---|---|
136
+ | [`search_objects`](docs/TOOLS.md#exploracion) | **Search ABAP objects.** Searches repository objects by name (supports * wildcards). | read |
137
+ | [`get_source`](docs/TOOLS.md#exploracion) | **Read ABAP source.** Reads the source of any object: program, include, class (and its includes), interface, function module (without knowing its group), CDS, table/structure, etc. | read |
138
+ | [`where_used`](docs/TOOLS.md#exploracion) | **Where used.** Where-used list of an object: who references it, with package and owner. | read |
139
+ | [`object_versions`](docs/TOOLS.md#exploracion) | **Object versions.** Version history of an object (date, author, transport). | read |
140
+ | [`package_contents`](docs/TOOLS.md#exploracion) | **Package contents.** Objects of a development package grouped by type, with subpackages (TADIR/TDEVC, any release). | read |
141
+ | [`ddic_type_info`](docs/TOOLS.md#exploracion) | **Data element, domain or table type.** Definition of a DDIC type: data element (domain, type, length, texts), domain (type, length, fixed values, value table) or table type (line type, key). | read |
142
+ | [`transaction_info`](docs/TOOLS.md#exploracion) | **What a transaction runs.** Program, screen and parameters of a transaction (TSTC/TSTCP), with its text. | read |
143
+ | [`function_modules`](docs/TOOLS.md#exploracion) | **Function modules of a group.** Lists the function modules of a function group with their text and whether they are RFC or update modules; given a module, finds its group and siblings. Works with /XXX/ namespaces. | read |
144
+ | [`text_elements`](docs/TOOLS.md#exploracion) | **Text symbols and selection texts.** Reads the text symbols (TEXT-001…), selection texts or headings of a program, class or function group. | read |
145
+
146
+ <a id="g-datos"></a>
147
+ ### Data queries
148
+
149
+ *Query tables with ABAP SQL, read-only, with sensitive and personal data protected.*
150
+
151
+ | Tool | What it does | Access |
152
+ |---|---|---|
153
+ | [`sql_query`](docs/TOOLS.md#datos) | **ABAP SQL query.** Runs an ABAP SQL SELECT (WHERE, JOIN, ORDER BY, subqueries) through ADT data preview, with personal columns masked and row caps on production-data systems. | read |
154
+ | [`table_contents`](docs/TOOLS.md#datos) | **Table contents.** Rows of a table, view or CDS, with optional columns and filter. | read |
155
+
156
+ <a id="g-diagnostico"></a>
157
+ ### Incident diagnosis
158
+
159
+ *One conversation for what used to take ST22, SM37, SLG1 and /IWFND/ERROR_LOG.*
160
+
161
+ | Tool | What it does | Access |
162
+ |---|---|---|
163
+ | [`dumps`](docs/TOOLS.md#diagnostico) | **Dumps (ST22).** Lists runtime dumps: date, error, program, user and short text. | read |
164
+ | [`jobs`](docs/TOOLS.md#diagnostico) | **Background jobs (SM37).** Background jobs by name (supports *), user, status and date, with their steps (program and variant). | read |
165
+ | [`application_log`](docs/TOOLS.md#diagnostico) | **Application log (SLG1) headers.** Application log headers (BALHDR) by object/subobject, external number, user and date, with error and warning counts. | read |
166
+ | [`gateway_errors`](docs/TOOLS.md#diagnostico) | **SAP Gateway errors (/IWFND/ERROR_LOG).** Lists SAP Gateway (OData) errors: service, error, user, date. | read |
167
+
168
+ <a id="g-documentacion"></a>
169
+ ### SAP documentation
170
+
171
+ *Answer from official documentation and check which syntax exists in each release.*
172
+
173
+ | Tool | What it does | Access |
174
+ |---|---|---|
175
+ | [`abap_feature_matrix`](docs/TOOLS.md#documentacion) | **Since which release does this syntax exist?** Availability of each ABAP language feature per release (7.40 … 7.58, 2025). | local |
176
+ | [`docs_search`](docs/TOOLS.md#documentacion) | **Search ABAP documentation.** Searches the official ABAP keyword documentation (standard and cloud), Clean ABAP, the DSAG guide, ABAP cheat sheets and RAP samples, locally. | local |
177
+ | [`docs_fetch`](docs/TOOLS.md#documentacion) | **Read a documentation page.** Returns the full content of a document by the id docs_search gives. | local |
178
+ | [`clean_core_objects`](docs/TOOLS.md#documentacion) | **Released objects catalog (Clean Core).** Searches SAP's public catalog (abap-atc-cr-cv-s4hc, local) for released/deprecated objects by name or topic, with Clean Core level (A released … D all) and successors. | local |
179
+ | [`clean_core_object`](docs/TOOLS.md#documentacion) | **Clean Core state of an SAP object.** Release state, Clean Core level and successor of an SAP object according to the public catalog (local). | local |
180
+ | [`abap_lint`](docs/TOOLS.md#documentacion) | **abaplint on a snippet.** Runs abaplint locally (code never leaves the machine) on an ABAP snippet or source. | local |
181
+ | [`docs_community_search`](docs/TOOLS.md#documentacion) | **Search SAP Community.** Searches SAP Community (blogs and questions) by error message, class or concept. | local |
182
+
183
+ <a id="g-escritura"></a>
184
+ ### Controlled writes
185
+
186
+ *Save changes only in development, in the right transport, previewed and confirmed by a human.*
187
+
188
+ | Tool | What it does | Access |
189
+ |---|---|---|
190
+ | [`write_source`](docs/TOOLS.md#escritura) | **Save source to SAP.** Replaces the FULL source of an existing object (or class include) in the given transport, after a preview with syntax check and diff and a human confirmation. | writes (authorized DEV) |
191
+ | [`activate`](docs/TOOLS.md#escritura) | **Activate object.** Activates an object and returns SAP's messages as they are (errors with line, warnings, objects left inactive). | writes (authorized DEV) |
192
+ | [`write_text_elements`](docs/TOOLS.md#escritura) | **Create or change text symbols.** Adds or changes text symbols (or selection texts) of a program/class/group, merging with the existing ones: nothing not mentioned is deleted. | writes (authorized DEV) |
193
+ | [`create_transport`](docs/TOOLS.md#escritura) | **Create transport request.** Creates a workbench request for an object's package BEFORE the first edit, so the change lands in the ticket's transport and not in a reused task. | writes (authorized DEV) |
194
+
195
+ <a id="g-transport-risk"></a>
196
+ ### DoZimple Transport Risk
197
+
198
+ *Decide whether a whole release can go to QA or production, with the why in business terms.*
199
+
200
+ | Tool | What it does | Access |
201
+ |---|---|---|
202
+ | [`analyze_transport_risk`](docs/TOOLS.md#transport-risk) | **Transport risk.** Tells whether a transport (or a release of several, comma-separated) is safe to move to QA or production: unreleased tasks, import status, dependencies that don't travel, positional access, CTS locks, import queue. | read |
203
+ | [`import_health`](docs/TOOLS.md#transport-risk) | **Import health.** Health of the imports into a target (QA or production): answers “how are the releases to production going?”. | read |
204
+ | [`failure_ranking`](docs/TOOLS.md#transport-risk) | **Objects that fail most on import.** Ranking of objects by import failure history in a target. | read |
205
+ | [`change_audit`](docs/TOOLS.md#transport-risk) | **Change audit evidence.** Evidence for a change management audit on a target: what went in, with which ticket, initiative and origin. | read |
206
+ | [`object_transport_history`](docs/TOOLS.md#transport-risk) | **Transport history of an object.** Which transports touched an object, when, and which already reached the target. | read |
207
+ | [`remote_source`](docs/TOOLS.md#transport-risk) | **Source on the target.** The source of an object AS IT IS in QA or production, read through TMS (like “Retrieve remote versions”). | read |
208
+ | [`transport_source_check`](docs/TOOLS.md#transport-risk) | **Transport code against the target.** Compares the code of a transport's objects with the target: objects missing there (R3.4) and version drift — signatures, fields or parameters that differ and don't travel in the transport (R3.5). | read |
209
+
210
+ <a id="g-operacion"></a>
211
+ ### Operations and growth
212
+
213
+ *See what works on each system and decide the next tool with data.*
214
+
215
+ | Tool | What it does | Access |
216
+ |---|---|---|
217
+ | [`sap_systems`](docs/TOOLS.md#operacion) | **SAP systems and available tools.** Lists the configured systems (role, writes, data class, modules) and, optionally, checks connectivity and which tools work on each. | local |
218
+ | [`report_gap`](docs/TOOLS.md#operacion) | **Record a missing tool.** Records a need no tool covers (e.g. something you had to do manually in a transaction), to decide what to build next. | local |
219
+ | [`close_gap`](docs/TOOLS.md#operacion) | **Close a recorded gap.** Marks a gap recorded with report_gap as resolved, with a note (a tool now covers it, or the note turned out to be wrong); nothing is deleted. | local |
220
+ | [`usage_stats`](docs/TOOLS.md#operacion) | **Tool usage and gaps.** Summary of the local log: calls per tool, failure rate and type, systems, and the gaps recorded with report_gap. | local |
221
+
222
+ <!-- tools:end -->
223
+
224
+ ## Guided flows
225
+
226
+ <!-- prompts:start -->
227
+ They show up as commands in the MCP client (in Claude Code: `/mcp__abap-adt-doZimple__<name>`) and chain the tools
228
+ with the working rules of a senior consultant.
229
+
230
+ | Flow | What it does | Chain |
231
+ |---|---|---|
232
+ | `revisar_pase` — Review a transport before release | Full review of a transport: code, missing companions, locks and, with the risk module, its analysis. | transport_contents → transport_diff → inactive_objects → co_change + edit_preflight → analyze_transport_risk (if module) → three-layer report: business, consultant, Basis |
233
+ | `remediar_atc` — Remediate ATC findings of an object | ATC → documentation and SAP note → released successor → fix → syntax → save in the transport. | edit_preflight → run_atc (BEFORE) → explain + api_release_state + where_used/object_versions → CHANGE/INVESTIGATE/KEEP classification → atc_quickfix → syntax_check → write_source in the transport (with human OK) → run_atc (AFTER) and P1 reduction |
234
+ | `diagnosticar_ticket` — Diagnose an incident | Dumps, jobs, application log and Gateway errors around an incident. | dumps → jobs → application_log → gateway_errors → transaction_info / get_source / object_versions / transport_contents → probable cause with evidence and what could not be checked |
235
+ <!-- prompts:end -->
236
+
237
+ ## DoZimple Transport Risk
238
+
239
+ The most valuable module for operations: **before releasing, it tells whether a transport or a whole release can go
240
+ to QA or production, and why not**, in three layers — a business verdict for the PMO, what to review for the
241
+ consultant, and release actions for Basis.
242
+
243
+ - **Whole releases, not single transports:** what travels in one transport covers the others; it computes the import
244
+ sequence and detects mutual dependencies and collisions between transports.
245
+ - **What breaks silently:** positional access to structures that change, code and dictionary dependencies that don't
246
+ travel and don't exist on the target, version drift.
247
+ - **The real state of the landscape:** target import queue, CTS locks, transports of copies that drag other people's
248
+ changes, import health and the objects that fail most.
249
+ - **Evidence for change management audits.**
250
+
251
+ It works on any ABAP stack with CTS (ECC and S/4HANA) and is read-only on every system. It requires a **proprietary
252
+ DoZimple SAP component** (ICF service in development and read-only RFCs on the targets), which is not distributed in
253
+ this repository.
254
+
255
+ **Want it in your landscape? → [dozimple.cl](https://dozimple.cl)**
256
+
257
+ ## Security
258
+
259
+ Designed to pass a Security and Basis review without exceptions. Details: **[SECURITY.md](SECURITY.md)** and the
260
+ **[threat model](docs/THREAT_MODEL.md)** (STRIDE and OWASP Top 10 for LLM applications).
261
+
262
+ - **No network surface:** stdio only; no ports are opened.
263
+ - **Credentials in the OS keychain** (macOS Keychain or Linux Secret Service), never in files, logs or responses.
264
+ - **Policy per role:** QA and production are never written; development only with explicit authorization.
265
+ - **Strict parameters:** an unknown or misspelled parameter is an error listing the accepted ones, never silently ignored.
266
+ - **No write without human confirmation:** a preview with SAP's syntax check and the real diff, confirmed through MCP
267
+ elicitation or a single-use token bound to those exact arguments.
268
+ - **Hash-chained audit log** of every write and execution, fail-closed (no log, no write), verifiable with
269
+ `npm run audit:verify`.
270
+ - **SAP credential material and HR data blocked** in SQL queries, also through views and CDS, even if the SAP user is
271
+ authorized. Validated against a real S/4HANA 2023 system, where standard views and CDS read USR02 without naming it.
272
+ - **Personal data masked and row caps** on systems with production data.
273
+ - **No customer data to the internet:** online documentation search is off by default and, when enabled, every query
274
+ with objects, transports, systems, users or customer names is blocked.
275
+ - **Third parties isolated** in their own process with a minimal environment.
276
+ - **Controlled supply chain:** 4 production dependencies pinned to exact versions, no install scripts, verified
277
+ registry signatures, CycloneDX SBOM, audit and secret scanning on every commit and in CI.
278
+
279
+ ## Compatibility
280
+
281
+ | | |
282
+ |---|---|
283
+ | SAP | ECC 6.0 / NetWeaver 7.50 and later, and S/4HANA on-premise or private cloud, through ADT (`/sap/bc/adt`). Tested live on S/4HANA 2023 (SAP_BASIS 7.58) and ECC 6.0 EHP8 (SAP_BASIS 7.50). Release-dependent features (e.g. API release state) are detected per system |
284
+ | MCP clients | Claude Code, Kiro and any MCP client over stdio |
285
+ | Platform | Node.js 22+. Credentials in the macOS Keychain, the Linux Secret Service or environment variables |
286
+
287
+ ## Installation
288
+
289
+ ```sh
290
+ npm ci && npm run build
291
+ mkdir -p ~/.config/abap-adt-dozimple
292
+ cp config/systems.example.json ~/.config/abap-adt-dozimple/systems.json # systems, roles and permissions (chmod 600)
293
+ scripts/set-password.sh MY_DEV # prompts for the password; stored in the keychain
294
+ npm run smoke -- MY_DEV # read-only validation
295
+ ```
296
+
297
+ MCP client registration:
298
+
299
+ ```json
300
+ { "mcpServers": { "abap-adt-doZimple": { "command": "node", "args": ["/path/to/abap-adt-doZimple/dist/index.js"] } } }
301
+ ```
302
+
303
+ **SAP documentation** group (optional): install [mcp-sap-docs](https://github.com/marianfoo/mcp-sap-docs)
304
+ (Apache-2.0, `abap` variant) in a separate folder and declare how to start it in `sidecars.docs` of `systems.json`
305
+ (see `config/systems.example.json`). It runs as an isolated process; online search stays off unless `allowOnline`.
306
+
307
+ See [CONTRIBUTING.md](CONTRIBUTING.md). To contribute or extend: `git config core.hooksPath .githooks` (secret and customer-data scanner before every commit)
308
+ and the [`nueva-tool`](.claude/skills/nueva-tool/SKILL.md) guide — adding a tool means adding one file. Code comments
309
+ and tool descriptions are in Spanish; contributions in English are welcome.
310
+
311
+ ## Credits
312
+
313
+ abap-adt-doZimple is built on other people's work, and says so: each tool lists its credits in the
314
+ [reference](docs/TOOLS.md). **Dependency**: its code is used. **Data**: third-party content that is queried.
315
+ **Idea**: a design studied and reimplemented without copying code. **Algorithm**: a published method.
316
+
317
+ <!-- credits:start -->
318
+ | Project | Author / holder | License | Type | Used in |
319
+ |---|---|---|---|---|
320
+ | [abap-adt-api](https://github.com/marcellourbani/abap-adt-api) | Marcello Urbani | MIT | dependency | all (core), `transport_diff`, `transport_contents`, `inactive_objects`, `edit_preflight`, `run_atc` and 22 more |
321
+ | [Model Context Protocol TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk) | Model Context Protocol | MIT | dependency | all (core) |
322
+ | [mcp-sap-docs](https://github.com/marianfoo/mcp-sap-docs) | Marian Zeis (marianfoo) | Apache-2.0 | dependency | `abap_feature_matrix`, `docs_search`, `docs_fetch`, `clean_core_objects`, `clean_core_object`, `abap_lint` and 1 more |
323
+ | [abaplint](https://github.com/abaplint/abaplint) | Lars Hvam and contributors | MIT | dependency | `abap_lint` |
324
+ | [zod](https://github.com/colinhacks/zod) | Colin McDonnell and contributors | MIT | dependency | all (core) |
325
+ | [ABAP Keyword Documentation](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm) | SAP SE | © SAP SE | data | `docs_search`, `docs_fetch` |
326
+ | [ABAP Cheat Sheets](https://github.com/SAP-samples/abap-cheat-sheets) | SAP (SAP-samples) | Apache-2.0 | data | `docs_search` |
327
+ | [Clean ABAP (SAP Style Guides)](https://github.com/SAP/styleguides) | SAP | per repository | data | `docs_search` |
328
+ | [DSAG ABAP-Leitfaden](https://github.com/marianfoo/DSAG-ABAP-Guide) | DSAG e.V. | per repository | data | `docs_search` |
329
+ | [ABAP Feature Matrix](https://software-heroes.com/en/abap-feature-matrix) | Software-Heroes | © Software-Heroes | data | `abap_feature_matrix` |
330
+ | [Released objects / Cloudification Repository (abap-atc-cr-cv-s4hc)](https://github.com/SAP/abap-atc-cr-cv-s4hc) | SAP | Apache-2.0 | data | `clean_core_objects`, `clean_core_object` |
331
+ | [SAP Community / SAP Help Portal](https://community.sap.com) | SAP SE and community authors | SAP terms | data | `docs_community_search` |
332
+ | [ABAP Remote FS (vscode_abap_remote_fs)](https://github.com/marcellourbani/vscode_abap_remote_fs) | Marcello Urbani | MIT | idea | `syntax_check` |
333
+ | [mcp-abap-adt](https://github.com/mario-andreschak/mcp-abap-adt) | mario-andreschak | MIT | idea | `search_objects`, `get_source`, `package_contents`, `ddic_type_info`, `transaction_info`, `table_contents` |
334
+ | [ARC-1](https://github.com/arc-mcp/arc-1) | arc-mcp (Marian Zeis and contributors) | MIT | idea | `transport_diff`, `atc_quickfix`, `gateway_errors` |
335
+ | [vibing-steampunk](https://github.com/oisee/vibing-steampunk) | oisee and contributors | MIT | idea | `co_change`, `api_release_state`, `jobs`, `application_log` |
336
+ | [ABAP Accelerator for Amazon Q Developer](https://github.com/aws-solutions-library-samples/guidance-for-deploying-sap-abap-accelerator-for-amazon-q-developer) | AWS Solutions Library Samples | MIT-0 | idea | all (core), `usage_stats` |
337
+ | [An O(ND) Difference Algorithm and Its Variations (1986)](https://doi.org/10.1007/BF01840446) | Eugene W. Myers | published algorithm | algorithm | `transport_diff`, `atc_quickfix` |
338
+ <!-- credits:end -->
339
+
340
+ Full dependency licenses: [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). If you are the author of one of these
341
+ projects and want to adjust how you are credited, reach us at [dozimple.cl](https://dozimple.cl).
342
+
343
+ ## About DoZimple
344
+
345
+ **[DoZimple](https://dozimple.cl)** — technology that connects operations, data and innovation. SAP consulting and
346
+ development (ABAP, CDS, OData, RAP, Fiori), integration and SAP BTP, software and portals connected to the ERP, and
347
+ applied artificial intelligence over controlled sources, with reproducible answers and human review.
348
+
349
+ This MCP server is an example of how we work: useful AI, with control, traceability and security by design.
350
+ **Let's talk → [dozimple.cl](https://dozimple.cl)**
351
+
352
+ ## License
353
+
354
+ [Apache-2.0](LICENSE) — © 2026 [DoZimple](https://dozimple.cl). See also [NOTICE](NOTICE). The DoZimple Transport Risk
355
+ SAP component is proprietary and not part of this repository. SAP, ABAP and S/4HANA are trademarks of SAP SE; this
356
+ project is not affiliated with SAP SE.
package/SECURITY.md ADDED
@@ -0,0 +1,68 @@
1
+ # Seguridad — abap-adt-doZimple
2
+
3
+ Criterio del proyecto: **nada que afecte la ciberseguridad** de los clientes ni de DoZimple. Un cambio que debilite
4
+ algo de este documento no se acepta aunque añada funcionalidad. Análisis completo (STRIDE, OWASP Top 10 para
5
+ aplicaciones LLM, riesgos residuales): **[docs/THREAT_MODEL.md](docs/THREAT_MODEL.md)**.
6
+
7
+ ## Controles
8
+
9
+ | Activo | Amenaza | Control |
10
+ |---|---|---|
11
+ | Credenciales SAP | Filtrado en archivos, logs, respuestas o procesos hijo | Llavero de macOS o Secret Service en Linux (`execFile` sin shell); opción `--strict` para que el llavero pregunte en cada lectura; la configuración no admite contraseñas; nunca en logs ni respuestas; los procesos hijo reciben un entorno explícito mínimo (`PATH`, `HOME`, `TMPDIR`, idioma y terminal) |
12
+ | Sistemas SAP | Cambios no deseados por un agente | `read` / `exec` / `write` por tool; `write` solo en DEV con `allowWrite`; QAS y PRD nunca; tools de escritura ocultas si ningún sistema la permite; sin liberar, importar ni borrar |
13
+ | Escrituras | El agente escribe sin que la persona vea qué | **Confirmación obligatoria**: por elicitación MCP si el cliente la soporta; si no, en dos fases con vista previa (sintaxis de SAP + diff real) y token de un solo uso atado a tool, sistema y argumentos exactos (10 min). Anotación `destructiveHint` para que el cliente también pida permiso |
14
+ | Trazabilidad | Una escritura sin rastro, o un rastro retocado | **Registro de auditoría** local encadenado por hash (`audit.jsonl`): intención, resultado y denegaciones de toda escritura y ejecución, con usuario SAP, sistema, forma de confirmación y huella sha256 del contenido (nunca el contenido). Sin registro no se escribe. `npm run audit:verify` detecta alteraciones |
15
+ | ABAP Unit | Un test con efectos (BD, llamadas externas) | Solo tests `RISK LEVEL HARMLESS` y `DURATION SHORT`, pedido explícitamente; solo en DEV |
16
+ | Orden de transporte | El cambio cae en una orden ajena | `decideTransport`: orden explícita; si hay bloqueo CTS de otra orden, se para sin escribir |
17
+ | Material de seguridad en SAP | Lectura de hashes, almacén seguro, PSE, secretos OAuth o dumps | Veto de USR02/USH02/USRPWDHISTORY, RSECTAB/RSECACTB, SSF_PSE_*, USRACL, SNAP, OA2C_* y columnas de hash, **también a través de vistas (DD26S) y CDS (DDLDEPENDENCY + fuente DDL), hasta 3 niveles** |
18
+ | Datos de personal | Infotipos y nómina | PA\*, PB\*, PCL1-5 y HRPY_\* vetados, también vía vistas y CDS |
19
+ | Datos personales de negocio | Exposición masiva a un proveedor LLM | Clase de datos por sistema (`test` / `masked` / `prod`; por defecto DEV = test, QAS/PRD = prod). En masked/prod: **columnas personales enmascaradas** (nombres, direcciones, teléfonos, correos, identificadores fiscales, cuentas bancarias, fechas de nacimiento), prohibido usarlas en WHERE, alias o expresiones, y **tope de filas** por sistema (200 en prod, configurable) |
20
+ | Parámetros de las tools | Un parámetro mal escrito o inventado que se ignora en silencio (p. ej. la orden de transporte) | Esquemas estrictos: un parámetro no declarado es error y la tool no se ejecuta; el esquema publicado declara `additionalProperties: false` |
21
+ | SQL | Escritura, varias sentencias o inyección en filtros | Solo `SELECT`/`WITH`, sin `;`; vista previa de ADT de solo lectura; literales escapados; en `table_contents` el filtro no admite subconsultas, UNION, comentarios ni comillas sin cerrar |
22
+ | Configuración | Alguien redirige el servidor o habilita la escritura | `systems.json` se rechaza si lo pueden modificar grupo u otros usuarios, o si es de otro usuario; el sistema por defecto por variable de entorno se identifica como tal en cada respuesta, y si no existe es error |
23
+ | Red | Exposición de un puerto | Solo stdio; no se abre ningún puerto |
24
+ | TLS | Intercepción (MitM) | Verificación por defecto; `caFile` para certificados propios; `allowSelfSigned` marcado con ⚠ |
25
+ | Datos de clientes | Salida a internet vía documentación | Online apagado por defecto; si se habilita, `assertPublicQuery` bloquea objetos Z/Y, namespaces, órdenes, sistemas, SID, usuarios, dominios y términos configurados; `docs_fetch` solo acepta ids con forma de documento, y los online pasan el mismo filtro |
26
+ | Inyección de instrucciones | Fuente, textos o datos de SAP o de la web que intentan dirigir al agente | Toda respuesta de SAP y de documentación se marca como dato, nunca instrucciones; ninguna escritura sin confirmación humana con vista previa |
27
+ | Dependencias | Vulnerabilidades o código malicioso | 4 dependencias de producción con versión exacta y lockfile; `ignore-scripts` (sin scripts de instalación); `npm audit` y `npm audit signatures` (firmas y procedencia) en CI; SBOM CycloneDX como artefacto de cada build; acciones de CI fijadas por commit; Dependabot |
28
+ | Terceros | Un MCP externo con acceso a credenciales | Solo como proceso hijo aislado, tras revisión, con entorno mínimo; sus tools pasan por la política de este servidor |
29
+ | Estado local | Lectura por otros usuarios del equipo | Carpetas `700`, archivos `600`; el registro de uso no guarda argumentos |
30
+ | Repositorio | Credenciales o datos de clientes en el historial | `scripts/scan-sensitive.mjs` en `pre-commit` y en CI; los términos prohibidos se leen de la configuración local, nunca se listan en el repo; secret scanning con push protection |
31
+
32
+ ## Recomendaciones de despliegue
33
+
34
+ - **`scripts/set-password.sh --strict`** (macOS) en equipos compartidos y para las credenciales de productivo: el
35
+ llavero pide confirmación en cada lectura. No es el valor por defecto a propósito: un aviso por lectura empuja a
36
+ guardar la contraseña en variables de entorno, que es peor. La solución de fondo prevista es certificado de
37
+ cliente / SSO ([roadmap](docs/THREAT_MODEL.md#roadmap-de-seguridad)).
38
+ - **No autoaprobar** en el cliente MCP las tools de escritura (`write_source`, `activate`, `write_text_elements`,
39
+ `create_transport`): la confirmación del servidor es la segunda barrera, no la única.
40
+ - Un **usuario SAP personal** por consultor, con las autorizaciones de su rol. El servidor restringe; no amplía.
41
+ - Clasificar cada sistema con `dataClass` si su realidad no coincide con el rol (p. ej. un DEV con copia de productivo
42
+ → `"dataClass": "prod"`).
43
+ - Revisar periódicamente `npm run audit:verify` y conservar `audit.jsonl` según la política de retención del equipo.
44
+
45
+ ## Verificación
46
+
47
+ ```sh
48
+ npm run security # npm audit + firmas del registro + escáner de credenciales y datos de clientes
49
+ npm test # incluye los tests de política y de seguridad (test/security.test.ts)
50
+ npm run audit:verify # integridad del registro de auditoría local
51
+ npm run sbom # SBOM CycloneDX de las dependencias de producción
52
+ ```
53
+
54
+ ## Reportar una vulnerabilidad / Reporting a vulnerability
55
+
56
+ **Español.** Escribe a **security@dozimple.cl** o usa la
57
+ [notificación privada de vulnerabilidades](../../security/advisories/new) de GitHub. Incluye versión o commit,
58
+ pasos para reproducir e impacto. Confirmamos la recepción en 5 días hábiles. Aplicamos **divulgación coordinada a
59
+ 90 días**: publicamos la corrección y el aviso dentro de ese plazo, o antes si hay un parche; te pedimos no publicar
60
+ detalles hasta entonces. Con gusto te damos crédito en el aviso.
61
+
62
+ **English.** Email **security@dozimple.cl** or use GitHub
63
+ [private vulnerability reporting](../../security/advisories/new). Include version or commit, reproduction steps and
64
+ impact. We acknowledge within 5 business days and follow **90-day coordinated disclosure**: the fix and advisory are
65
+ published within that window (sooner if a patch is ready); please keep details private until then. We are happy to
66
+ credit you in the advisory.
67
+
68
+ Nunca envíes credenciales ni datos de clientes en un reporte. / Never include credentials or customer data in a report.
@@ -0,0 +1,134 @@
1
+ # Avisos de software de terceros
2
+
3
+ abap-adt-doZimple (© DoZimple, https://dozimple.cl) usa en producción los siguientes paquetes de terceros, cada uno bajo su licencia. Generado desde `npm ls --omit=dev`.
4
+
5
+ | Paquete | Versión | Licencia |
6
+ |---|---|---|
7
+ | @hono/node-server | 2.1.1 | MIT |
8
+ | @modelcontextprotocol/sdk | 1.30.0 | MIT |
9
+ | @nodable/entities | 3.0.0 | MIT |
10
+ | @scarf/scarf | 1.4.0 | Apache-2.0 |
11
+ | abap-adt-api | 8.4.3 | MIT |
12
+ | accepts | 2.0.0 | MIT |
13
+ | agent-base | 6.0.2 | MIT |
14
+ | ajv | 8.20.0 | MIT |
15
+ | ajv-formats | 3.0.1 | MIT |
16
+ | anynum | 1.0.1 | MIT |
17
+ | asynckit | 0.4.0 | MIT |
18
+ | axios | 1.20.0 | MIT |
19
+ | body-parser | 2.3.0 | MIT |
20
+ | bytes | 3.1.2 | MIT |
21
+ | call-bind-apply-helpers | 1.0.2 | MIT |
22
+ | call-bound | 1.0.4 | MIT |
23
+ | combined-stream | 1.0.8 | MIT |
24
+ | content-disposition | 1.1.0 | MIT |
25
+ | content-type | 1.0.5 | MIT |
26
+ | content-type | 2.1.0 | MIT |
27
+ | cookie | 0.7.2 | MIT |
28
+ | cookie-signature | 1.2.2 | MIT |
29
+ | cors | 2.8.6 | MIT |
30
+ | cross-spawn | 7.0.6 | MIT |
31
+ | debug | 4.4.3 | MIT |
32
+ | delayed-stream | 1.0.0 | MIT |
33
+ | depd | 2.0.0 | MIT |
34
+ | dunder-proto | 1.0.1 | MIT |
35
+ | ee-first | 1.1.1 | MIT |
36
+ | encodeurl | 2.0.0 | MIT |
37
+ | es-define-property | 1.0.1 | MIT |
38
+ | es-errors | 1.3.0 | MIT |
39
+ | es-object-atoms | 1.1.2 | MIT |
40
+ | es-set-tostringtag | 2.1.0 | MIT |
41
+ | escape-html | 1.0.3 | MIT |
42
+ | etag | 1.8.1 | MIT |
43
+ | eventsource | 3.0.7 | MIT |
44
+ | eventsource-parser | 3.1.1 | MIT |
45
+ | express | 5.2.1 | MIT |
46
+ | express-rate-limit | 8.7.0 | MIT |
47
+ | fast-deep-equal | 3.1.3 | MIT |
48
+ | fast-uri | 3.1.7 | BSD-3-Clause |
49
+ | fast-xml-builder | 1.3.1 | MIT |
50
+ | fast-xml-parser | 5.11.1 | MIT |
51
+ | finalhandler | 2.1.1 | MIT |
52
+ | follow-redirects | 1.16.0 | MIT |
53
+ | form-data | 4.0.6 | MIT |
54
+ | forwarded | 0.2.0 | MIT |
55
+ | fp-ts | 2.16.11 | MIT |
56
+ | fresh | 2.0.0 | MIT |
57
+ | function-bind | 1.1.2 | MIT |
58
+ | get-intrinsic | 1.3.0 | MIT |
59
+ | get-proto | 1.0.1 | MIT |
60
+ | gopd | 1.2.0 | MIT |
61
+ | has-symbols | 1.1.0 | MIT |
62
+ | has-tostringtag | 1.0.2 | MIT |
63
+ | hasown | 2.0.4 | MIT |
64
+ | hono | 4.13.7 | MIT |
65
+ | html-entities | 2.6.0 | MIT |
66
+ | http-errors | 2.0.1 | MIT |
67
+ | https-proxy-agent | 5.0.1 | MIT |
68
+ | iconv-lite | 0.7.3 | MIT |
69
+ | inherits | 2.0.4 | ISC |
70
+ | io-ts | 2.2.22 | MIT |
71
+ | io-ts-reporters | 2.0.1 | MIT |
72
+ | ip-address | 10.7.0 | MIT |
73
+ | ipaddr.js | 1.9.1 | MIT |
74
+ | is-promise | 4.0.0 | MIT |
75
+ | is-unsafe | 2.0.2 | MIT |
76
+ | isexe | 2.0.0 | ISC |
77
+ | jose | 6.2.12 | MIT |
78
+ | json-schema-traverse | 1.0.0 | MIT |
79
+ | json-schema-typed | 8.0.2 | BSD-2-Clause |
80
+ | math-intrinsics | 1.1.0 | MIT |
81
+ | media-typer | 1.1.1 | MIT |
82
+ | merge-descriptors | 2.0.0 | MIT |
83
+ | mime-db | 1.54.0 | MIT |
84
+ | mime-db | 1.52.0 | MIT |
85
+ | mime-types | 3.0.2 | MIT |
86
+ | mime-types | 2.1.35 | MIT |
87
+ | ms | 2.1.3 | MIT |
88
+ | negotiator | 1.1.0 | MIT |
89
+ | object-assign | 4.1.1 | MIT |
90
+ | object-inspect | 1.13.4 | MIT |
91
+ | on-finished | 2.4.1 | MIT |
92
+ | once | 1.4.0 | ISC |
93
+ | parseurl | 1.3.3 | MIT |
94
+ | path-expression-matcher | 1.6.2 | MIT |
95
+ | path-key | 3.1.1 | MIT |
96
+ | path-to-regexp | 8.4.2 | MIT |
97
+ | pkce-challenge | 5.0.1 | MIT |
98
+ | proxy-addr | 2.0.7 | MIT |
99
+ | proxy-from-env | 2.1.0 | MIT |
100
+ | qs | 6.16.0 | BSD-3-Clause |
101
+ | range-parser | 1.3.0 | MIT |
102
+ | raw-body | 3.0.2 | MIT |
103
+ | require-from-string | 2.0.2 | MIT |
104
+ | router | 2.2.0 | MIT |
105
+ | safer-buffer | 2.1.2 | MIT |
106
+ | send | 1.2.1 | MIT |
107
+ | serve-static | 2.2.1 | MIT |
108
+ | setprototypeof | 1.2.0 | ISC |
109
+ | shebang-command | 2.0.0 | MIT |
110
+ | shebang-regex | 3.0.0 | MIT |
111
+ | side-channel | 1.1.1 | MIT |
112
+ | side-channel-list | 1.0.1 | MIT |
113
+ | side-channel-map | 1.0.1 | MIT |
114
+ | side-channel-weakmap | 1.0.2 | MIT |
115
+ | sprintf-js | 1.1.3 | BSD-3-Clause |
116
+ | statuses | 2.0.2 | MIT |
117
+ | strnum | 2.4.2 | MIT |
118
+ | toidentifier | 1.0.1 | MIT |
119
+ | type-is | 2.1.0 | MIT |
120
+ | unpipe | 1.0.0 | MIT |
121
+ | vary | 1.1.2 | MIT |
122
+ | which | 2.0.2 | ISC |
123
+ | wrappy | 1.0.2 | ISC |
124
+ | xml-naming | 0.3.0 | MIT |
125
+ | zod | 3.25.76 | MIT |
126
+ | zod-to-json-schema | 3.25.2 | ISC |
127
+
128
+ ## Ideas de diseño reconocidas
129
+
130
+ Sin código copiado; ideas reimplementadas a partir de proyectos MIT: selección de versiones para el diff de órdenes (ARC-1), estado de liberación de APIs y análisis de co-cambio (vibing-steampunk), resolución de sistema con origen declarado y presupuesto de salida (AWS ABAP Accelerator, MIT-0).
131
+
132
+ ## Componente opcional no incluido
133
+
134
+ `mcp-sap-docs` (Apache-2.0) no forma parte de este repositorio: se instala por separado y se ejecuta como proceso aislado.
@@ -0,0 +1,39 @@
1
+ {
2
+ "$comment": "Copiar a ~/.config/abap-adt-dozimple/systems.json. Sin contraseñas: van al llavero con scripts/set-password.sh <id>. defaultSystem es opcional; sin él, cada llamada debe indicar system (o ABAP_DZ_DEFAULT_SYSTEM en el .mcp.json del proyecto). dataClass (test|masked|prod) y maxRows son opcionales: por defecto DEV = test y QAS/PRD = prod (columnas personales enmascaradas, 200 filas). Permisos del archivo: chmod 600.",
3
+ "systems": [
4
+ {
5
+ "id": "MI_DEV",
6
+ "description": "Cliente X — desarrollo",
7
+ "sid": "DEV",
8
+ "url": "https://host:44300",
9
+ "client": "100",
10
+ "user": "USUARIO",
11
+ "language": "ES",
12
+ "role": "DEV",
13
+ "allowWrite": false,
14
+ "modules": []
15
+ },
16
+ {
17
+ "id": "MI_PRD",
18
+ "description": "Cliente X — productivo (solo lectura siempre)",
19
+ "sid": "PRD",
20
+ "url": "https://host-prd:44300",
21
+ "client": "300",
22
+ "user": "USUARIO",
23
+ "role": "PRD",
24
+ "dataClass": "prod",
25
+ "maxRows": 200
26
+ }
27
+ ],
28
+ "sidecars": {
29
+ "docs": {
30
+ "command": "/ruta/a/vendor/mcp-sap-docs-run.sh",
31
+ "args": [],
32
+ "allowOnline": false,
33
+ "blockTerms": [
34
+ "NombreCliente1",
35
+ "NombreCliente2"
36
+ ]
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Activa y lo cuenta tal cual: errores, avisos y objetos que quedan
3
+ * inactivos. Un fallo nunca se presenta como «ya estaba activo».
4
+ */
5
+ export async function activateObject(c, obj) {
6
+ const r = await c.activate(obj.name, obj.uri);
7
+ const errors = r.messages.filter((m) => ["E", "A", "X"].includes(m.type?.toUpperCase()));
8
+ const lines = r.messages.map((m) => ` ${m.type}${m.line ? ` L${m.line}` : ""} ${m.shortText}${m.objDescr ? ` [${m.objDescr}]` : ""}`);
9
+ const inactive = r.inactive
10
+ .map((i) => i.object?.["adtcore:name"])
11
+ .filter(Boolean);
12
+ const ok = r.success && errors.length === 0;
13
+ const text = (ok ? `${obj.name} activado.` : `${obj.name} NO se activó.`) +
14
+ (lines.length ? `\n\nMensajes:\n${lines.join("\n")}` : "") +
15
+ (inactive.length ? `\n\nQuedan inactivos (actívalos juntos si dependen entre sí): ${inactive.join(", ")}` : "");
16
+ return { ok, text };
17
+ }
18
+ //# sourceMappingURL=activation.js.map