arc-1 0.9.13 → 0.9.15

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 (204) hide show
  1. package/README.md +17 -4
  2. package/dist/adt/class-structure.d.ts +1 -1
  3. package/dist/adt/class-structure.js +1 -1
  4. package/dist/adt/client.d.ts +16 -3
  5. package/dist/adt/client.d.ts.map +1 -1
  6. package/dist/adt/client.js +40 -35
  7. package/dist/adt/client.js.map +1 -1
  8. package/dist/adt/ddic-xml.d.ts +9 -0
  9. package/dist/adt/ddic-xml.d.ts.map +1 -1
  10. package/dist/adt/ddic-xml.js +49 -53
  11. package/dist/adt/ddic-xml.js.map +1 -1
  12. package/dist/adt/devtools.d.ts.map +1 -1
  13. package/dist/adt/devtools.js +46 -15
  14. package/dist/adt/devtools.js.map +1 -1
  15. package/dist/adt/fm-signature.d.ts +1 -1
  16. package/dist/adt/fm-signature.js +1 -1
  17. package/dist/adt/rap-generate.js +1 -1
  18. package/dist/adt/rap-generate.js.map +1 -1
  19. package/dist/adt/rap-handlers.d.ts +1 -1
  20. package/dist/adt/rap-handlers.js +1 -1
  21. package/dist/adt/refactoring.d.ts.map +1 -1
  22. package/dist/adt/refactoring.js +11 -14
  23. package/dist/adt/refactoring.js.map +1 -1
  24. package/dist/adt/server-driven.d.ts +46 -2
  25. package/dist/adt/server-driven.d.ts.map +1 -1
  26. package/dist/adt/server-driven.js +13 -3
  27. package/dist/adt/server-driven.js.map +1 -1
  28. package/dist/adt/xml-parser.d.ts +8 -1
  29. package/dist/adt/xml-parser.d.ts.map +1 -1
  30. package/dist/adt/xml-parser.js +57 -49
  31. package/dist/adt/xml-parser.js.map +1 -1
  32. package/dist/authz/policy.d.ts +1 -1
  33. package/dist/authz/policy.js +1 -1
  34. package/dist/cache/cache.d.ts +1 -0
  35. package/dist/cache/cache.d.ts.map +1 -1
  36. package/dist/cache/cache.js.map +1 -1
  37. package/dist/cache/inactive-list-cache.d.ts +4 -4
  38. package/dist/cache/inactive-list-cache.d.ts.map +1 -1
  39. package/dist/cache/inactive-list-cache.js +19 -12
  40. package/dist/cache/inactive-list-cache.js.map +1 -1
  41. package/dist/cache/memory.d.ts +1 -0
  42. package/dist/cache/memory.d.ts.map +1 -1
  43. package/dist/cache/memory.js +3 -0
  44. package/dist/cache/memory.js.map +1 -1
  45. package/dist/cache/sqlite.d.ts +1 -0
  46. package/dist/cache/sqlite.d.ts.map +1 -1
  47. package/dist/cache/sqlite.js +3 -0
  48. package/dist/cache/sqlite.js.map +1 -1
  49. package/dist/cache/warmup.d.ts.map +1 -1
  50. package/dist/cache/warmup.js +85 -38
  51. package/dist/cache/warmup.js.map +1 -1
  52. package/dist/cli.d.ts +1 -1
  53. package/dist/cli.js +2 -2
  54. package/dist/cli.js.map +1 -1
  55. package/dist/context/compressor.d.ts.map +1 -1
  56. package/dist/context/compressor.js +22 -13
  57. package/dist/context/compressor.js.map +1 -1
  58. package/dist/context/contract.d.ts.map +1 -1
  59. package/dist/context/contract.js +4 -3
  60. package/dist/context/contract.js.map +1 -1
  61. package/dist/context/deps.d.ts.map +1 -1
  62. package/dist/context/deps.js +3 -2
  63. package/dist/context/deps.js.map +1 -1
  64. package/dist/context/grep.d.ts +3 -1
  65. package/dist/context/grep.d.ts.map +1 -1
  66. package/dist/context/grep.js +83 -1
  67. package/dist/context/grep.js.map +1 -1
  68. package/dist/context/method-surgery.d.ts.map +1 -1
  69. package/dist/context/method-surgery.js +3 -2
  70. package/dist/context/method-surgery.js.map +1 -1
  71. package/dist/handlers/activate.d.ts +25 -0
  72. package/dist/handlers/activate.d.ts.map +1 -0
  73. package/dist/handlers/activate.js +334 -0
  74. package/dist/handlers/activate.js.map +1 -0
  75. package/dist/handlers/cache-security.d.ts +22 -0
  76. package/dist/handlers/cache-security.d.ts.map +1 -0
  77. package/dist/handlers/cache-security.js +51 -0
  78. package/dist/handlers/cache-security.js.map +1 -0
  79. package/dist/handlers/cds-hints.d.ts +26 -0
  80. package/dist/handlers/cds-hints.d.ts.map +1 -0
  81. package/dist/handlers/cds-hints.js +380 -0
  82. package/dist/handlers/cds-hints.js.map +1 -0
  83. package/dist/handlers/context.d.ts +10 -0
  84. package/dist/handlers/context.d.ts.map +1 -0
  85. package/dist/handlers/context.js +344 -0
  86. package/dist/handlers/context.js.map +1 -0
  87. package/dist/handlers/diagnose.d.ts +8 -0
  88. package/dist/handlers/diagnose.d.ts.map +1 -0
  89. package/dist/handlers/diagnose.js +274 -0
  90. package/dist/handlers/diagnose.js.map +1 -0
  91. package/dist/handlers/dispatch.d.ts +39 -0
  92. package/dist/handlers/dispatch.d.ts.map +1 -0
  93. package/dist/handlers/dispatch.js +640 -0
  94. package/dist/handlers/dispatch.js.map +1 -0
  95. package/dist/handlers/feature-cache.d.ts +26 -0
  96. package/dist/handlers/feature-cache.d.ts.map +1 -0
  97. package/dist/handlers/feature-cache.js +45 -0
  98. package/dist/handlers/feature-cache.js.map +1 -0
  99. package/dist/handlers/git.d.ts +9 -0
  100. package/dist/handlers/git.d.ts.map +1 -0
  101. package/dist/handlers/git.js +227 -0
  102. package/dist/handlers/git.js.map +1 -0
  103. package/dist/handlers/lint.d.ts +9 -0
  104. package/dist/handlers/lint.d.ts.map +1 -0
  105. package/dist/handlers/lint.js +82 -0
  106. package/dist/handlers/lint.js.map +1 -0
  107. package/dist/handlers/manage.d.ts +10 -0
  108. package/dist/handlers/manage.d.ts.map +1 -0
  109. package/dist/handlers/manage.js +375 -0
  110. package/dist/handlers/manage.js.map +1 -0
  111. package/dist/handlers/navigate.d.ts +8 -0
  112. package/dist/handlers/navigate.d.ts.map +1 -0
  113. package/dist/handlers/navigate.js +188 -0
  114. package/dist/handlers/navigate.js.map +1 -0
  115. package/dist/handlers/object-types.d.ts +103 -0
  116. package/dist/handlers/object-types.d.ts.map +1 -0
  117. package/dist/handlers/object-types.js +476 -0
  118. package/dist/handlers/object-types.js.map +1 -0
  119. package/dist/handlers/query.d.ts +7 -0
  120. package/dist/handlers/query.d.ts.map +1 -0
  121. package/dist/handlers/query.js +190 -0
  122. package/dist/handlers/query.js.map +1 -0
  123. package/dist/handlers/read.d.ts +18 -0
  124. package/dist/handlers/read.d.ts.map +1 -0
  125. package/dist/handlers/read.js +581 -0
  126. package/dist/handlers/read.js.map +1 -0
  127. package/dist/handlers/schemas.d.ts +28 -26
  128. package/dist/handlers/schemas.d.ts.map +1 -1
  129. package/dist/handlers/schemas.js +17 -153
  130. package/dist/handlers/schemas.js.map +1 -1
  131. package/dist/handlers/search.d.ts +24 -0
  132. package/dist/handlers/search.d.ts.map +1 -0
  133. package/dist/handlers/search.js +208 -0
  134. package/dist/handlers/search.js.map +1 -0
  135. package/dist/handlers/shared.d.ts +19 -0
  136. package/dist/handlers/shared.d.ts.map +1 -0
  137. package/dist/handlers/shared.js +23 -0
  138. package/dist/handlers/shared.js.map +1 -0
  139. package/dist/handlers/tool-registry.d.ts +44 -0
  140. package/dist/handlers/tool-registry.d.ts.map +1 -0
  141. package/dist/handlers/tool-registry.js +152 -0
  142. package/dist/handlers/tool-registry.js.map +1 -0
  143. package/dist/handlers/tools.d.ts +9 -0
  144. package/dist/handlers/tools.d.ts.map +1 -1
  145. package/dist/handlers/tools.js +40 -141
  146. package/dist/handlers/tools.js.map +1 -1
  147. package/dist/handlers/transport.d.ts +8 -0
  148. package/dist/handlers/transport.d.ts.map +1 -0
  149. package/dist/handlers/transport.js +281 -0
  150. package/dist/handlers/transport.js.map +1 -0
  151. package/dist/handlers/write/class-surgery.d.ts +18 -0
  152. package/dist/handlers/write/class-surgery.d.ts.map +1 -0
  153. package/dist/handlers/write/class-surgery.js +366 -0
  154. package/dist/handlers/write/class-surgery.js.map +1 -0
  155. package/dist/handlers/write/context.d.ts +43 -0
  156. package/dist/handlers/write/context.d.ts.map +1 -0
  157. package/dist/handlers/write/context.js +5 -0
  158. package/dist/handlers/write/context.js.map +1 -0
  159. package/dist/handlers/write/create.d.ts +8 -0
  160. package/dist/handlers/write/create.d.ts.map +1 -0
  161. package/dist/handlers/write/create.js +603 -0
  162. package/dist/handlers/write/create.js.map +1 -0
  163. package/dist/handlers/write/rap.d.ts +8 -0
  164. package/dist/handlers/write/rap.d.ts.map +1 -0
  165. package/dist/handlers/write/rap.js +235 -0
  166. package/dist/handlers/write/rap.js.map +1 -0
  167. package/dist/handlers/write/update-delete.d.ts +8 -0
  168. package/dist/handlers/write/update-delete.d.ts.map +1 -0
  169. package/dist/handlers/write/update-delete.js +182 -0
  170. package/dist/handlers/write/update-delete.js.map +1 -0
  171. package/dist/handlers/write-helpers.d.ts +155 -0
  172. package/dist/handlers/write-helpers.d.ts.map +1 -0
  173. package/dist/handlers/write-helpers.js +859 -0
  174. package/dist/handlers/write-helpers.js.map +1 -0
  175. package/dist/handlers/write.d.ts +16 -0
  176. package/dist/handlers/write.d.ts.map +1 -0
  177. package/dist/handlers/write.js +210 -0
  178. package/dist/handlers/write.js.map +1 -0
  179. package/dist/handlers/zod-errors.d.ts +1 -1
  180. package/dist/handlers/zod-errors.js +1 -1
  181. package/dist/lint/abaplint-config-cache.d.ts +5 -0
  182. package/dist/lint/abaplint-config-cache.d.ts.map +1 -0
  183. package/dist/lint/abaplint-config-cache.js +29 -0
  184. package/dist/lint/abaplint-config-cache.js.map +1 -0
  185. package/dist/lint/config-builder.d.ts.map +1 -1
  186. package/dist/lint/config-builder.js +3 -4
  187. package/dist/lint/config-builder.js.map +1 -1
  188. package/dist/lint/lint.d.ts +1 -1
  189. package/dist/lint/lint.d.ts.map +1 -1
  190. package/dist/lint/lint.js +3 -2
  191. package/dist/lint/lint.js.map +1 -1
  192. package/dist/server/config.d.ts.map +1 -1
  193. package/dist/server/config.js +22 -8
  194. package/dist/server/config.js.map +1 -1
  195. package/dist/server/mcp-rate-limit.d.ts +1 -1
  196. package/dist/server/mcp-rate-limit.js +1 -1
  197. package/dist/server/server.d.ts +1 -1
  198. package/dist/server/server.js +3 -2
  199. package/dist/server/server.js.map +1 -1
  200. package/package.json +15 -10
  201. package/dist/handlers/intent.d.ts +0 -144
  202. package/dist/handlers/intent.d.ts.map +0 -1
  203. package/dist/handlers/intent.js +0 -6782
  204. package/dist/handlers/intent.js.map +0 -1
@@ -0,0 +1,366 @@
1
+ /**
2
+ * SAPWrite actions — class-section surgery (issue #303).
3
+ *
4
+ * These actions share a common shape: fetch objectstructure → optional diff/refuse → splice into
5
+ * /source/main (or /includes/<inc> when include= is set) → PUT under lock → no auto-activate.
6
+ * Pre-write lint runs on the SPLICED FULL source (not the partial input fragment) because a raw
7
+ * DEFINITION block alone fails abaplint with "Expected CLASSIMPLEMENTATION" (verified live on a4h);
8
+ * lint is skipped for include= writes (same precedent as the `update include=` path).
9
+ */
10
+ import { diffMethodSets, extractMethodNameFromClause, findSectionAnchor, insertMethodPair, moveMethodDefinition, removeMethodPair, spliceClassDefinition, spliceMethodSignature, } from '../../adt/class-structure.js';
11
+ import { safeUpdateSource } from '../../adt/crud.js';
12
+ import { mapSapReleaseToAbaplintVersion } from '../../adt/features.js';
13
+ import { spliceMethod } from '../../context/method-surgery.js';
14
+ import { cachedFeatures } from '../feature-cache.js';
15
+ import { CLASS_WRITE_INCLUDES, classIncludeUrl, detectLocalHandlerInclude, stripIncludeHeader, } from '../object-types.js';
16
+ import { resolveVersionAndDraftInfo } from '../read.js';
17
+ import { errorResult, textResult } from '../shared.js';
18
+ import { runPreWriteLint, runPreWriteSyntaxCheck } from '../write-helpers.js';
19
+ export async function writeActionEditMethod(ctx) {
20
+ const { client, args, config, cachingLayer, cacheSecurity, type, name, source, include, transport, lintOverride, checkOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, } = ctx;
21
+ const method = String(args.method ?? '');
22
+ if (!method)
23
+ return errorResult('"method" is required for edit_method action.');
24
+ if (!source)
25
+ return errorResult('"source" (new method body) is required for edit_method action.');
26
+ if (type !== 'CLAS')
27
+ return errorResult('edit_method is only supported for type=CLAS.');
28
+ await enforcePackageForExistingObject();
29
+ // ── Resolve which class section the method body lives in ──
30
+ // Order:
31
+ // 1. Explicit `include` parameter wins (must be a valid CLAS include).
32
+ // If the user passed something but normalization rejected it,
33
+ // report it the same way `case 'update'` does.
34
+ // 2. Auto-detect from local-class prefix in `method` specifier
35
+ // (lhc_*/lcl_* → implementations, ltc_* → testclasses). This is
36
+ // transparent to RAP-skill callers passing `lhc_project~approve_project`.
37
+ // 3. Fall through to MAIN (existing behavior — covers global classes
38
+ // and `zif_order~create` style interface methods).
39
+ if (args.include !== undefined && !include) {
40
+ return errorResult(`Invalid CLAS include "${String(args.include)}". Valid values: ${CLASS_WRITE_INCLUDES.join(', ')}.`);
41
+ }
42
+ const detectedInclude = include ? undefined : detectLocalHandlerInclude(method);
43
+ const resolvedInclude = include ?? detectedInclude;
44
+ // Fetch the source that contains the method.
45
+ // Note: include reads bypass the source cache because the cache key is
46
+ // `(type, name, active|inactive)` and does not differentiate by include.
47
+ // Mixing MAIN and CCIMP bytes under the same key would silently corrupt
48
+ // subsequent reads. Future enhancement: extend cache key with include.
49
+ let currentSource;
50
+ if (resolvedInclude) {
51
+ // **Draft-aware include reads (PR-D review fix, P1).**
52
+ // After `SAPWrite update include=...` or `scaffold_rap_handlers`, the
53
+ // edited CCDEF/CCIMP lives as an inactive draft; the active include
54
+ // is often still the empty placeholder. Reading "active" here would
55
+ // splice against stale content (and frequently "method not found").
56
+ // Use the standard inactive-list lookup to pick the right version —
57
+ // same auto-resolution semantics SAPRead exposes via `version='auto'`.
58
+ const { effectiveVersion } = await resolveVersionAndDraftInfo(client, cachingLayer, 'CLAS', name, 'auto', cacheSecurity);
59
+ const fetched = await client.getClass(name, resolvedInclude, { version: effectiveVersion });
60
+ currentSource = stripIncludeHeader(fetched.source);
61
+ // If the include itself has no draft (only MAIN does), SAP returns the
62
+ // active include body for `?version=inactive`. That's correct — we
63
+ // splice whatever the editor would see. If the include source isn't
64
+ // available at all (response contains the "not available" placeholder
65
+ // injected by client.getClass on 404), splice will surface a clean
66
+ // "method not found" with the include name.
67
+ }
68
+ else {
69
+ currentSource = cachingLayer
70
+ ? (await cachingLayer.getSource('CLAS', name, (ifNoneMatch) => client.getClass(name, undefined, { ifNoneMatch })))
71
+ .source
72
+ : (await client.getClass(name)).source;
73
+ }
74
+ // Use detected ABAP version from probe if available
75
+ const abaplintVer = cachedFeatures?.abapRelease
76
+ ? mapSapReleaseToAbaplintVersion(cachedFeatures.abapRelease)
77
+ : undefined;
78
+ // Splice in the new method body
79
+ const spliced = spliceMethod(currentSource, name, method, source, abaplintVer);
80
+ if (!spliced.success) {
81
+ // Augment the error with which include was searched, so the LLM can
82
+ // either correct the method specifier or override include= explicitly.
83
+ const where = resolvedInclude ? `include "${resolvedInclude}"` : 'main source';
84
+ const baseError = spliced.error ?? `Failed to splice method "${method}" in ${name}.`;
85
+ const hint = detectedInclude ? ` (auto-routed via "${method}" prefix; pass include= explicitly to override).` : '';
86
+ return errorResult(`${baseError} Searched ${where} of ${name}.${hint}`);
87
+ }
88
+ // Pre-write lint + server-side syntax check on the spliced source.
89
+ //
90
+ // Skip BOTH for include= writes. abaplint cannot parse a CCIMP/CCDEF
91
+ // fragment as a complete class (the DEFINITION/IMPLEMENTATION halves
92
+ // live in different files), so it would block legitimate writes with
93
+ // "Expected CLASSDEFINITION" errors. The existing `case 'update'` include=
94
+ // path also bypasses these checks for the same reason — keep parity.
95
+ // The full-class activation pass after the write is the authoritative
96
+ // syntax check.
97
+ let lintWarnings = { blocked: false };
98
+ let checkNotes = '';
99
+ if (!resolvedInclude) {
100
+ lintWarnings = runPreWriteLint(spliced.newSource, type, name, config, lintOverride);
101
+ if (lintWarnings.blocked)
102
+ return lintWarnings.result;
103
+ checkNotes = await runPreWriteSyntaxCheck(client, type, spliced.newSource, objectUrl, config, checkOverride);
104
+ }
105
+ // Write the full source back (existing lock/modify/unlock flow).
106
+ // For include writes, the parent class lock auto-applies; the include URL
107
+ // takes the body. See `compare/eclipse-adt/api/05-lock-create-update-transport.md`.
108
+ const writeUrl = resolvedInclude ? classIncludeUrl(name, resolvedInclude) : srcUrl;
109
+ await safeUpdateSource(client.http, client.safety, objectUrl, writeUrl, spliced.newSource, transport, cachedFeatures?.abapRelease);
110
+ invalidateWrittenObject(type, name);
111
+ const where = resolvedInclude ? ` (include: ${resolvedInclude})` : '';
112
+ const msg = `Successfully updated method "${method}" in ${type} ${name}${where}.`;
113
+ const extras = [lintWarnings.warnings, checkNotes].filter(Boolean).join('\n\n');
114
+ return extras ? textResult(`${msg}\n\n${extras}`) : textResult(msg);
115
+ }
116
+ export async function writeActionEditClassDefinition(ctx) {
117
+ const { client, args, config, type, name, source, hasSource, include, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
118
+ if (type !== 'CLAS')
119
+ return errorResult('edit_class_definition is only supported for type=CLAS.');
120
+ if (!hasSource)
121
+ return errorResult('"source" (new CLASS DEFINITION block) is required for edit_class_definition.');
122
+ if (includeProvided && !include) {
123
+ return errorResult(`Invalid CLAS include "${String(args.include)}". Valid values: ${CLASS_WRITE_INCLUDES.join(', ')}.`);
124
+ }
125
+ await enforcePackageForExistingObject();
126
+ const writeUrl = include ? classIncludeUrl(name, include) : srcUrl;
127
+ let spliced;
128
+ if (include) {
129
+ // include= path: whole-replace the local include (CCDEF/CCIMP/macros/
130
+ // testclasses). The structure-based diff/refuse doesn't apply — the
131
+ // /objectstructure endpoint reports the GLOBAL class, not the local
132
+ // include's split DEFINITION/IMPLEMENTATION halves. SAP activation is the
133
+ // validator here (same precedent as `update include=`). No structure or
134
+ // source fetch is needed: the caller's `source` IS the new include body.
135
+ spliced = source.endsWith('\n') ? source : `${source}\n`;
136
+ }
137
+ else {
138
+ // MAIN path: fetch structure + source at the same effective version so
139
+ // the spliced line ranges align with the bytes being edited.
140
+ const { structure, main } = await fetchClassStructureAndMain(name);
141
+ // Refuse-policy: compute the method-set diff against the NEW DEFINITION.
142
+ const diff = diffMethodSets(structure, source);
143
+ const missingImpls = [];
144
+ const orphanImpls = [];
145
+ for (const add of diff.added) {
146
+ // Exempt declarations that never have a METHOD…ENDMETHOD body.
147
+ if (add.isAbstract || add.isEvent || add.isInterface || add.isAlias)
148
+ continue;
149
+ // Does IMPLEMENTATION already have a METHOD <name> header? Match the
150
+ // method name followed by a word-boundary so AMDP / event-handler /
151
+ // multi-line headers (`METHOD x BY DATABASE PROCEDURE…`, `METHOD x FOR
152
+ // EVENT…`, `METHOD x\n IMPORTING…`) are recognized — NOT only the bare
153
+ // `METHOD x.` form. \b after the name prevents matching a longer name
154
+ // with the same prefix (METHOD x_helper for added X).
155
+ const re = new RegExp(`^\\s*METHOD\\s+${add.name}\\b`, 'im');
156
+ if (!re.test(main))
157
+ missingImpls.push(add.name);
158
+ }
159
+ for (const rem of diff.removed) {
160
+ if (rem.implementation) {
161
+ // Was concrete, still has impl range — caller didn't remove the body.
162
+ orphanImpls.push(rem.name);
163
+ }
164
+ }
165
+ if (missingImpls.length > 0 || orphanImpls.length > 0) {
166
+ const parts = [];
167
+ if (missingImpls.length > 0) {
168
+ parts.push(`Cannot apply edit_class_definition: the new DEFINITION declares method(s) ${missingImpls.join(', ')} but the existing IMPLEMENTATION block has no matching METHOD…ENDMETHOD body. Either include a METHOD <name>. ENDMETHOD. block per added method in your new source, or use SAPWrite(action="add_method", name="${name}", method="<METHODS clause>") to insert each one atomically.`);
169
+ }
170
+ if (orphanImpls.length > 0) {
171
+ parts.push(`Cannot apply edit_class_definition: the new DEFINITION removes method(s) ${orphanImpls.join(', ')} but the existing IMPLEMENTATION block still has METHOD…ENDMETHOD bodies for them (orphan implementation). Either remove those METHOD blocks in your edit, or use SAPWrite(action="delete_method", name="${name}", method="<name>") to drop each one atomically.`);
172
+ }
173
+ return errorResult(parts.join('\n\n'));
174
+ }
175
+ spliced = spliceClassDefinition(main, structure, source);
176
+ }
177
+ // Pre-write lint on the spliced full source (MAIN path only — include=
178
+ // fragments can't be lint-parsed standalone).
179
+ if (!include) {
180
+ const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
181
+ if (lintWarnings.blocked)
182
+ return lintWarnings.result;
183
+ }
184
+ await safeUpdateSource(client.http, client.safety, objectUrl, writeUrl, spliced, transport, cachedFeatures?.abapRelease);
185
+ invalidateWrittenObject(type, name);
186
+ const whereLabel = include ? ` (include: ${include})` : '';
187
+ return textResult(`Successfully updated DEFINITION of ${type} ${name}${whereLabel}. Active version unchanged until activation; read with SAPRead(version="inactive") to verify, then SAPActivate.`);
188
+ }
189
+ export async function writeActionEditMethodSignature(ctx) {
190
+ const { client, args, type, name, source, hasSource, includeProvided, transport, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
191
+ if (type !== 'CLAS')
192
+ return errorResult('edit_method_signature is only supported for type=CLAS.');
193
+ const methodSpecifier = String(args.method ?? '').trim();
194
+ if (!methodSpecifier) {
195
+ return errorResult('"method" (the method NAME to re-sign) is required for edit_method_signature.');
196
+ }
197
+ if (!hasSource) {
198
+ return errorResult('"source" (the new METHODS clause) is required for edit_method_signature.');
199
+ }
200
+ // MAIN-only action: include= is rejected at the schema layer (this action is
201
+ // not in SAPWRITE_INCLUDE_AWARE_ACTIONS). Defensive guard for direct CLI calls
202
+ // that bypass Zod.
203
+ if (includeProvided) {
204
+ return errorResult('edit_method_signature targets the global class DEFINITION (/source/main). For local-class (CCDEF) signatures, use edit_class_definition with include=definitions.');
205
+ }
206
+ await enforcePackageForExistingObject();
207
+ const { structure, main } = await fetchClassStructureAndMain(name);
208
+ const upperName = methodSpecifier.toUpperCase();
209
+ const method = structure.methods.find((m) => m.name === upperName);
210
+ if (!method) {
211
+ const available = structure.methods.map((m) => m.name).join(', ');
212
+ const hint = methodSpecifier.includes('~')
213
+ ? ' Interface-qualified names (e.g. "zif_x~m") are not addressable here — objectstructure lists the implementing method under its bare name; for interface/local-handler bodies use edit_method.'
214
+ : '';
215
+ return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
216
+ }
217
+ const spliced = spliceMethodSignature(main, method, source);
218
+ // No pre-write lint: edit_method_signature changes ONLY the declaration; the
219
+ // method body still references the old signature until the caller follows up
220
+ // with edit_method. Linting the spliced full source here would flag legitimate
221
+ // in-progress renames (e.g. "param `name` not declared"). SAP activation is the
222
+ // authoritative check — same rationale as the include= lint skip on edit_method.
223
+ await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced, transport, cachedFeatures?.abapRelease);
224
+ invalidateWrittenObject(type, name);
225
+ return textResult(`Successfully updated signature of method "${method.name}" in ${type} ${name}. Active version unchanged until activation; if the body still references the old signature, follow up with edit_method, then SAPActivate.`);
226
+ }
227
+ export async function writeActionAddMethod(ctx) {
228
+ const { client, args, config, type, name, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
229
+ if (type !== 'CLAS')
230
+ return errorResult('add_method is only supported for type=CLAS.');
231
+ const clause = String(args.method ?? '');
232
+ if (!clause.trim()) {
233
+ return errorResult('"method" (the full METHODS clause, e.g. "METHODS greet IMPORTING who TYPE string.") is required for add_method.');
234
+ }
235
+ const methodName = extractMethodNameFromClause(clause);
236
+ if (!methodName) {
237
+ return errorResult('Could not extract method name from the METHODS clause. Provide a clause starting with "METHODS <name>" or "CLASS-METHODS <name>".');
238
+ }
239
+ // Interface-qualified names (lhc_x~y, zif_x~m) can't be added to a global
240
+ // class's DEFINITION/IMPLEMENTATION — `~` is interface-method scope and would
241
+ // produce invalid ABAP in the METHOD stub. Reject with a clear pointer.
242
+ if (methodName.includes('~')) {
243
+ return errorResult(`add_method cannot add the interface-qualified method "${methodName}" to a global class. Implement the interface via "INTERFACES <name>." in the DEFINITION (use edit_class_definition), then provide the body with edit_method.`);
244
+ }
245
+ const visibility = args.visibility ?? 'public';
246
+ const isAbstract = args.abstract === true;
247
+ // MAIN-only action: include= is rejected at the schema layer (not in
248
+ // SAPWRITE_INCLUDE_AWARE_ACTIONS). Defensive guard for direct CLI calls.
249
+ if (includeProvided) {
250
+ return errorResult('add_method targets the global class DEFINITION (/source/main). For local-class (CCDEF) method additions, use edit_class_definition with include=definitions.');
251
+ }
252
+ await enforcePackageForExistingObject();
253
+ const { structure, main } = await fetchClassStructureAndMain(name);
254
+ // Refuse if method already exists (would silently duplicate).
255
+ if (structure.methods.some((m) => m.name === methodName)) {
256
+ return errorResult(`Method "${methodName}" already exists in CLAS ${name}. Use SAPWrite(action="edit_method_signature", method="${methodName}", source="<new METHODS clause>") to change its signature.`);
257
+ }
258
+ // A concrete (non-abstract) method needs an IMPLEMENTATION block to receive
259
+ // its METHOD…ENDMETHOD stub. A purely-abstract class has no IMPLEMENTATION
260
+ // half, so inserting a concrete declaration there would leave it unimplemented.
261
+ if (!isAbstract && !structure.classImplementationBlock) {
262
+ return errorResult(`CLAS ${name} has no IMPLEMENTATION block (purely abstract class). Pass abstract=true to add an abstract method, or add the IMPLEMENTATION half first via edit_class_definition.`);
263
+ }
264
+ // Refuse with hint if the target visibility section header is missing.
265
+ const anchor = findSectionAnchor(main, structure, visibility);
266
+ if (!anchor) {
267
+ return errorResult(`No ${visibility.toUpperCase()} SECTION exists in CLAS ${name}. Use SAPWrite(action="edit_class_definition") to add the section header first, then re-run add_method.`);
268
+ }
269
+ const spliced = insertMethodPair(main, structure, {
270
+ decl: clause,
271
+ visibility,
272
+ methodName,
273
+ isAbstract,
274
+ });
275
+ const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
276
+ if (lintWarnings.blocked)
277
+ return lintWarnings.result;
278
+ await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced, transport, cachedFeatures?.abapRelease);
279
+ invalidateWrittenObject(type, name);
280
+ const stubNote = isAbstract ? ' (abstract — no IMPL stub inserted)' : '';
281
+ return textResult(`Successfully added method "${methodName}" (${visibility}) to ${type} ${name}${stubNote}. Active version unchanged until activation; SAPActivate next.`);
282
+ }
283
+ export async function writeActionDeleteMethod(ctx) {
284
+ const { client, args, config, type, name, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
285
+ if (type !== 'CLAS')
286
+ return errorResult('delete_method is only supported for type=CLAS.');
287
+ const methodSpecifier = String(args.method ?? '').trim();
288
+ if (!methodSpecifier) {
289
+ return errorResult('"method" (the method NAME to delete) is required for delete_method.');
290
+ }
291
+ // MAIN-only action: include= is rejected at the schema layer (not in
292
+ // SAPWRITE_INCLUDE_AWARE_ACTIONS). Defensive guard for direct CLI calls.
293
+ if (includeProvided) {
294
+ return errorResult('delete_method targets the global class DEFINITION (/source/main). For local-class (CCDEF/CCIMP) method removal, use edit_class_definition with include=...');
295
+ }
296
+ await enforcePackageForExistingObject();
297
+ const { structure, main } = await fetchClassStructureAndMain(name);
298
+ const upperName = methodSpecifier.toUpperCase();
299
+ const method = structure.methods.find((m) => m.name === upperName);
300
+ if (!method) {
301
+ const available = structure.methods.map((m) => m.name).join(', ');
302
+ const hint = methodSpecifier.includes('~')
303
+ ? ' Interface-qualified names (e.g. "zif_x~m") are not addressable here; objectstructure lists methods under their bare names.'
304
+ : '';
305
+ return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
306
+ }
307
+ const spliced = removeMethodPair(main, method);
308
+ const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
309
+ if (lintWarnings.blocked)
310
+ return lintWarnings.result;
311
+ await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced, transport, cachedFeatures?.abapRelease);
312
+ invalidateWrittenObject(type, name);
313
+ const where = method.implementation ? ' (DEFINITION + IMPLEMENTATION)' : ' (DEFINITION only — was ABSTRACT)';
314
+ return textResult(`Successfully deleted method "${method.name}" from ${type} ${name}${where}. Active version unchanged until activation; SAPActivate next.`);
315
+ }
316
+ export async function writeActionChangeMethodVisibility(ctx) {
317
+ const { client, args, config, type, name, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
318
+ // Body-preserving visibility move (issue #303 follow-up). Moves the METHODS
319
+ // clause from its current section to the target section; the IMPLEMENTATION
320
+ // block is never touched, so the method body survives. This is the safe
321
+ // alternative to delete_method + add_method (which discards the body).
322
+ if (type !== 'CLAS')
323
+ return errorResult('change_method_visibility is only supported for type=CLAS.');
324
+ const methodSpecifier = String(args.method ?? '').trim();
325
+ if (!methodSpecifier) {
326
+ return errorResult('"method" (the method NAME to move) is required for change_method_visibility.');
327
+ }
328
+ const target = args.visibility;
329
+ if (!target) {
330
+ return errorResult('"visibility" (target section: public, protected, or private) is required for change_method_visibility.');
331
+ }
332
+ // MAIN-only action: include= is rejected at the schema layer (not in
333
+ // SAPWRITE_INCLUDE_AWARE_ACTIONS). Defensive guard for direct CLI calls.
334
+ if (includeProvided) {
335
+ return errorResult('change_method_visibility targets the global class DEFINITION (/source/main). For local-class (CCDEF) methods, use edit_class_definition with include=definitions.');
336
+ }
337
+ await enforcePackageForExistingObject();
338
+ const { structure, main } = await fetchClassStructureAndMain(name);
339
+ const upperName = methodSpecifier.toUpperCase();
340
+ const method = structure.methods.find((m) => m.name === upperName);
341
+ if (!method) {
342
+ const available = structure.methods.map((m) => m.name).join(', ');
343
+ const hint = methodSpecifier.includes('~')
344
+ ? ' Interface-qualified names (e.g. "zif_x~m") are not addressable here; objectstructure lists methods under their bare names.'
345
+ : '';
346
+ return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
347
+ }
348
+ // Idempotent: already in the requested section → no write.
349
+ if (method.visibility === target) {
350
+ return textResult(`Method "${method.name}" is already in the ${target.toUpperCase()} SECTION of ${type} ${name}. No change made.`);
351
+ }
352
+ // The target section header must already exist (same constraint as add_method).
353
+ const anchor = findSectionAnchor(main, structure, target);
354
+ if (!anchor) {
355
+ return errorResult(`No ${target.toUpperCase()} SECTION exists in CLAS ${name}. Use SAPWrite(action="edit_class_definition") to add the section header first, then re-run change_method_visibility.`);
356
+ }
357
+ // DEFINITION-only move — IMPLEMENTATION (the method body) is preserved verbatim.
358
+ const spliced = moveMethodDefinition(main, method, anchor.afterLine);
359
+ const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
360
+ if (lintWarnings.blocked)
361
+ return lintWarnings.result;
362
+ await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced, transport, cachedFeatures?.abapRelease);
363
+ invalidateWrittenObject(type, name);
364
+ return textResult(`Successfully moved method "${method.name}" from ${method.visibility.toUpperCase()} to ${target.toUpperCase()} SECTION of ${type} ${name} (IMPLEMENTATION preserved). Active version unchanged until activation; SAPActivate next.`);
365
+ }
366
+ //# sourceMappingURL=class-surgery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-surgery.js","sourceRoot":"","sources":["../../../src/handlers/write/class-surgery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Shared context for the per-action SAPWrite handlers.
3
+ */
4
+ import type { AdtClient } from '../../adt/client.js';
5
+ import type { ClassStructure } from '../../adt/types.js';
6
+ import type { CachingLayer } from '../../cache/caching-layer.js';
7
+ import type { ServerConfig } from '../../server/types.js';
8
+ import type { CacheSecurityContext } from '../cache-security.js';
9
+ import type { ClassWriteInclude } from '../object-types.js';
10
+ import type { SourceVersion } from '../read.js';
11
+ /**
12
+ * Built once by handleSAPWrite after its prologue and passed to each writeAction*. Fields are
13
+ * `readonly`: the action handlers consume the resolved request, they never re-resolve it — and the
14
+ * three closures capture the prologue's locals, so reassigning a field here would silently desync
15
+ * them (e.g. invalidateWrittenObject would key the cache off the old name).
16
+ */
17
+ export interface SapWriteContext {
18
+ readonly client: AdtClient;
19
+ readonly args: Record<string, unknown>;
20
+ readonly config: ServerConfig;
21
+ readonly cachingLayer: CachingLayer | undefined;
22
+ readonly cacheSecurity: CacheSecurityContext;
23
+ readonly type: string;
24
+ readonly name: string;
25
+ readonly source: string;
26
+ readonly hasSource: boolean;
27
+ readonly include: ClassWriteInclude | undefined;
28
+ readonly includeProvided: boolean;
29
+ readonly transport: string | undefined;
30
+ readonly lintOverride: boolean | undefined;
31
+ readonly preflightOverride: boolean | undefined;
32
+ readonly checkOverride: boolean | undefined;
33
+ readonly objectUrl: string;
34
+ readonly srcUrl: string;
35
+ readonly invalidateWrittenObject: (objType?: string, objName?: string) => void;
36
+ readonly enforcePackageForExistingObject: () => Promise<string | undefined>;
37
+ readonly fetchClassStructureAndMain: (clsName: string) => Promise<{
38
+ structure: ClassStructure;
39
+ main: string;
40
+ effectiveVersion: SourceVersion;
41
+ }>;
42
+ }
43
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/handlers/write/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/E,QAAQ,CAAC,+BAA+B,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5E,QAAQ,CAAC,0BAA0B,EAAE,CACnC,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;QAAE,SAAS,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;CAC5F"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared context for the per-action SAPWrite handlers.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/handlers/write/context.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * SAPWrite actions — create + batch_create.
3
+ */
4
+ import { type ToolResult } from '../shared.js';
5
+ import type { SapWriteContext } from './context.js';
6
+ export declare function writeActionCreate(ctx: SapWriteContext): Promise<ToolResult>;
7
+ export declare function writeActionBatchCreate(ctx: SapWriteContext): Promise<ToolResult>;
8
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/handlers/write/create.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkCH,OAAO,EAAe,KAAK,UAAU,EAAc,MAAM,cAAc,CAAC;AAgBxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkBpD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAiTjF;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAqatF"}