arc-1 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +222 -0
  3. package/bin/arc1.js +12 -0
  4. package/dist/adt/btp.d.ts +122 -0
  5. package/dist/adt/btp.d.ts.map +1 -0
  6. package/dist/adt/btp.js +392 -0
  7. package/dist/adt/btp.js.map +1 -0
  8. package/dist/adt/client.d.ts +89 -0
  9. package/dist/adt/client.d.ts.map +1 -0
  10. package/dist/adt/client.js +208 -0
  11. package/dist/adt/client.js.map +1 -0
  12. package/dist/adt/codeintel.d.ts +38 -0
  13. package/dist/adt/codeintel.d.ts.map +1 -0
  14. package/dist/adt/codeintel.js +61 -0
  15. package/dist/adt/codeintel.js.map +1 -0
  16. package/dist/adt/config.d.ts +65 -0
  17. package/dist/adt/config.d.ts.map +1 -0
  18. package/dist/adt/config.js +35 -0
  19. package/dist/adt/config.js.map +1 -0
  20. package/dist/adt/cookies.d.ts +27 -0
  21. package/dist/adt/cookies.d.ts.map +1 -0
  22. package/dist/adt/cookies.js +67 -0
  23. package/dist/adt/cookies.js.map +1 -0
  24. package/dist/adt/crud.d.ts +35 -0
  25. package/dist/adt/crud.d.ts.map +1 -0
  26. package/dist/adt/crud.js +87 -0
  27. package/dist/adt/crud.js.map +1 -0
  28. package/dist/adt/devtools.d.ts +32 -0
  29. package/dist/adt/devtools.d.ts.map +1 -0
  30. package/dist/adt/devtools.js +154 -0
  31. package/dist/adt/devtools.js.map +1 -0
  32. package/dist/adt/errors.d.ts +49 -0
  33. package/dist/adt/errors.d.ts.map +1 -0
  34. package/dist/adt/errors.js +80 -0
  35. package/dist/adt/errors.js.map +1 -0
  36. package/dist/adt/features.d.ts +44 -0
  37. package/dist/adt/features.d.ts.map +1 -0
  38. package/dist/adt/features.js +173 -0
  39. package/dist/adt/features.js.map +1 -0
  40. package/dist/adt/http.d.ts +116 -0
  41. package/dist/adt/http.d.ts.map +1 -0
  42. package/dist/adt/http.js +374 -0
  43. package/dist/adt/http.js.map +1 -0
  44. package/dist/adt/safety.d.ts +70 -0
  45. package/dist/adt/safety.d.ts.map +1 -0
  46. package/dist/adt/safety.js +222 -0
  47. package/dist/adt/safety.js.map +1 -0
  48. package/dist/adt/transport.d.ts +18 -0
  49. package/dist/adt/transport.d.ts.map +1 -0
  50. package/dist/adt/transport.js +66 -0
  51. package/dist/adt/transport.js.map +1 -0
  52. package/dist/adt/types.d.ts +91 -0
  53. package/dist/adt/types.d.ts.map +1 -0
  54. package/dist/adt/types.js +9 -0
  55. package/dist/adt/types.js.map +1 -0
  56. package/dist/adt/xml-parser.d.ts +109 -0
  57. package/dist/adt/xml-parser.d.ts.map +1 -0
  58. package/dist/adt/xml-parser.js +283 -0
  59. package/dist/adt/xml-parser.js.map +1 -0
  60. package/dist/cache/cache.d.ts +61 -0
  61. package/dist/cache/cache.d.ts.map +1 -0
  62. package/dist/cache/cache.js +14 -0
  63. package/dist/cache/cache.js.map +1 -0
  64. package/dist/cache/memory.d.ts +25 -0
  65. package/dist/cache/memory.d.ts.map +1 -0
  66. package/dist/cache/memory.js +69 -0
  67. package/dist/cache/memory.js.map +1 -0
  68. package/dist/cache/sqlite.d.ts +26 -0
  69. package/dist/cache/sqlite.d.ts.map +1 -0
  70. package/dist/cache/sqlite.js +130 -0
  71. package/dist/cache/sqlite.js.map +1 -0
  72. package/dist/cli.d.ts +14 -0
  73. package/dist/cli.d.ts.map +1 -0
  74. package/dist/cli.js +101 -0
  75. package/dist/cli.js.map +1 -0
  76. package/dist/context/compressor.d.ts +33 -0
  77. package/dist/context/compressor.d.ts.map +1 -0
  78. package/dist/context/compressor.js +208 -0
  79. package/dist/context/compressor.js.map +1 -0
  80. package/dist/context/contract.d.ts +14 -0
  81. package/dist/context/contract.d.ts.map +1 -0
  82. package/dist/context/contract.js +202 -0
  83. package/dist/context/contract.js.map +1 -0
  84. package/dist/context/deps.d.ts +32 -0
  85. package/dist/context/deps.d.ts.map +1 -0
  86. package/dist/context/deps.js +240 -0
  87. package/dist/context/deps.js.map +1 -0
  88. package/dist/context/types.d.ts +56 -0
  89. package/dist/context/types.d.ts.map +1 -0
  90. package/dist/context/types.js +10 -0
  91. package/dist/context/types.js.map +1 -0
  92. package/dist/handlers/intent.d.ts +46 -0
  93. package/dist/handlers/intent.d.ts.map +1 -0
  94. package/dist/handlers/intent.js +539 -0
  95. package/dist/handlers/intent.js.map +1 -0
  96. package/dist/handlers/tools.d.ts +21 -0
  97. package/dist/handlers/tools.d.ts.map +1 -0
  98. package/dist/handlers/tools.js +260 -0
  99. package/dist/handlers/tools.js.map +1 -0
  100. package/dist/index.d.ts +10 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +16 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/lint/lint.d.ts +35 -0
  105. package/dist/lint/lint.d.ts.map +1 -0
  106. package/dist/lint/lint.js +67 -0
  107. package/dist/lint/lint.js.map +1 -0
  108. package/dist/server/audit.d.ts +96 -0
  109. package/dist/server/audit.d.ts.map +1 -0
  110. package/dist/server/audit.js +27 -0
  111. package/dist/server/audit.js.map +1 -0
  112. package/dist/server/config.d.ts +19 -0
  113. package/dist/server/config.d.ts.map +1 -0
  114. package/dist/server/config.js +101 -0
  115. package/dist/server/config.js.map +1 -0
  116. package/dist/server/context.d.ts +20 -0
  117. package/dist/server/context.d.ts.map +1 -0
  118. package/dist/server/context.js +20 -0
  119. package/dist/server/context.js.map +1 -0
  120. package/dist/server/elicit.d.ts +43 -0
  121. package/dist/server/elicit.d.ts.map +1 -0
  122. package/dist/server/elicit.js +183 -0
  123. package/dist/server/elicit.js.map +1 -0
  124. package/dist/server/http.d.ts +34 -0
  125. package/dist/server/http.d.ts.map +1 -0
  126. package/dist/server/http.js +328 -0
  127. package/dist/server/http.js.map +1 -0
  128. package/dist/server/logger.d.ts +57 -0
  129. package/dist/server/logger.d.ts.map +1 -0
  130. package/dist/server/logger.js +129 -0
  131. package/dist/server/logger.js.map +1 -0
  132. package/dist/server/server.d.ts +25 -0
  133. package/dist/server/server.d.ts.map +1 -0
  134. package/dist/server/server.js +307 -0
  135. package/dist/server/server.js.map +1 -0
  136. package/dist/server/sinks/btp-auditlog.d.ts +48 -0
  137. package/dist/server/sinks/btp-auditlog.d.ts.map +1 -0
  138. package/dist/server/sinks/btp-auditlog.js +232 -0
  139. package/dist/server/sinks/btp-auditlog.js.map +1 -0
  140. package/dist/server/sinks/file.d.ts +22 -0
  141. package/dist/server/sinks/file.d.ts.map +1 -0
  142. package/dist/server/sinks/file.js +59 -0
  143. package/dist/server/sinks/file.js.map +1 -0
  144. package/dist/server/sinks/stderr.d.ts +19 -0
  145. package/dist/server/sinks/stderr.d.ts.map +1 -0
  146. package/dist/server/sinks/stderr.js +63 -0
  147. package/dist/server/sinks/stderr.js.map +1 -0
  148. package/dist/server/sinks/types.d.ts +14 -0
  149. package/dist/server/sinks/types.d.ts.map +1 -0
  150. package/dist/server/sinks/types.js +8 -0
  151. package/dist/server/sinks/types.js.map +1 -0
  152. package/dist/server/types.d.ts +54 -0
  153. package/dist/server/types.d.ts.map +1 -0
  154. package/dist/server/types.js +42 -0
  155. package/dist/server/types.js.map +1 -0
  156. package/dist/server/xsuaa.d.ts +77 -0
  157. package/dist/server/xsuaa.d.ts.map +1 -0
  158. package/dist/server/xsuaa.js +364 -0
  159. package/dist/server/xsuaa.js.map +1 -0
  160. package/package.json +66 -0
@@ -0,0 +1,240 @@
1
+ /**
2
+ * AST-based dependency extraction from ABAP source code.
3
+ *
4
+ * Uses @abaplint/core to parse ABAP into an AST, then walks the tree
5
+ * to find all external references (classes, interfaces, function modules,
6
+ * exception classes). This is more accurate than the Go version's regex
7
+ * approach — no false positives from string literals or comments.
8
+ *
9
+ * Extracted dependency kinds:
10
+ * - inheritance: CLASS ... INHERITING FROM <name>
11
+ * - interface: INTERFACES <name>
12
+ * - type_ref: TYPE REF TO <name>, NEW <name>(), CAST <name>()
13
+ * - static_call: <name>=>method()
14
+ * - function_call: CALL FUNCTION '<name>'
15
+ * - exception: RAISING <name>, CATCH <name>
16
+ */
17
+ import { Config, Expressions, MemoryFile, Registry, Statements, Version } from '@abaplint/core';
18
+ import { detectFilename } from '../lint/lint.js';
19
+ /**
20
+ * abaplint version for parsing.
21
+ * We use Cloud (the superset of all on-prem versions) so that source code
22
+ * from ANY SAP release (7.00 through 7.58, S/4HANA, BTP ABAP Environment)
23
+ * parses successfully. Lower versions silently produce no AST structure
24
+ * when they encounter unknown syntax (e.g. v740sp02 fails on ENUM types,
25
+ * GLOBAL FRIENDS, and other 7.50+ features found in /DMO/ demo objects).
26
+ * Since we only extract dependencies here (no linting), the permissive
27
+ * parser is the correct choice.
28
+ */
29
+ const ABAPLINT_VERSION = Version.Cloud;
30
+ /** ABAP built-in types that are never external dependencies */
31
+ const BUILTIN_TYPES = new Set([
32
+ 'STRING',
33
+ 'XSTRING',
34
+ 'I',
35
+ 'INT8',
36
+ 'P',
37
+ 'C',
38
+ 'N',
39
+ 'D',
40
+ 'T',
41
+ 'F',
42
+ 'X',
43
+ 'DECFLOAT16',
44
+ 'DECFLOAT34',
45
+ 'ABAP_BOOL',
46
+ 'ABAP_TRUE',
47
+ 'ABAP_FALSE',
48
+ 'SY',
49
+ 'SYST',
50
+ 'ANY',
51
+ 'DATA',
52
+ 'CLIKE',
53
+ 'CSEQUENCE',
54
+ 'NUMERIC',
55
+ 'SIMPLE',
56
+ 'XSEQUENCE',
57
+ 'TABLE',
58
+ 'STANDARD TABLE',
59
+ 'SORTED TABLE',
60
+ 'HASHED TABLE',
61
+ 'REF TO',
62
+ ]);
63
+ /** SAP standard prefixes that we filter out by default */
64
+ const SAP_STANDARD_PREFIXES = ['CL_ABAP_', 'IF_ABAP_', 'CX_SY_', 'CL_GUI_', 'CL_SALV_', 'CL_BCS_', 'CL_OS_'];
65
+ /**
66
+ * Check if a name is a built-in ABAP type (not an external dependency).
67
+ */
68
+ function isBuiltinType(name) {
69
+ return BUILTIN_TYPES.has(name.toUpperCase());
70
+ }
71
+ /**
72
+ * Check if a name is a SAP standard object that should be filtered.
73
+ */
74
+ function isSapStandard(name) {
75
+ const upper = name.toUpperCase();
76
+ return SAP_STANDARD_PREFIXES.some((prefix) => upper.startsWith(prefix));
77
+ }
78
+ /**
79
+ * Check if a name is a custom object (Z* or Y* namespace).
80
+ */
81
+ function isCustomObject(name) {
82
+ const upper = name.toUpperCase();
83
+ return upper.startsWith('Z') || upper.startsWith('Y');
84
+ }
85
+ /**
86
+ * Extract dependencies from ABAP source using @abaplint/core AST.
87
+ *
88
+ * Parses the source, walks the AST to find all external references,
89
+ * filters out built-in types and self-references, deduplicates,
90
+ * and sorts (custom objects first).
91
+ *
92
+ * @param source - ABAP source code
93
+ * @param objectName - Name of the object being analyzed (filtered from results)
94
+ * @param filterSapStandard - Whether to filter SAP standard objects (default true)
95
+ * @returns Deduplicated, sorted list of dependencies
96
+ */
97
+ export function extractDependencies(source, objectName, filterSapStandard = true, abaplintVersion) {
98
+ // Normalize CRLF → LF (SAP ADT returns CRLF which can break abaplint parsing)
99
+ const normalizedSource = source.replace(/\r\n/g, '\n');
100
+ const config = Config.getDefault(abaplintVersion ?? ABAPLINT_VERSION);
101
+ const filename = detectFilename(normalizedSource, objectName);
102
+ const reg = new Registry(config);
103
+ reg.addFile(new MemoryFile(filename, normalizedSource));
104
+ reg.parse();
105
+ const rawDeps = [];
106
+ for (const obj of reg.getObjects()) {
107
+ const file = obj.getMainABAPFile?.();
108
+ if (!file)
109
+ continue;
110
+ const structure = file.getStructure();
111
+ if (!structure)
112
+ continue;
113
+ // 1. INHERITING FROM — via SuperClassName expression
114
+ const superClasses = structure.findAllExpressionsRecursive(Expressions.SuperClassName);
115
+ for (const node of superClasses) {
116
+ addDep(rawDeps, node.concatTokens(), 'inheritance', node.getFirstToken().getRow());
117
+ }
118
+ // 2. INTERFACES — via InterfaceDef statement
119
+ const intfDefs = structure.findAllStatements(Statements.InterfaceDef);
120
+ for (const stmt of intfDefs) {
121
+ const intfNames = stmt.findAllExpressions(Expressions.InterfaceName);
122
+ for (const node of intfNames) {
123
+ addDep(rawDeps, node.concatTokens(), 'interface', stmt.getFirstToken().getRow());
124
+ }
125
+ }
126
+ // 3. ClassName expressions — covers TYPE REF TO, NEW, CAST, CATCH, RAISING, static calls
127
+ const classNames = structure.findAllExpressionsRecursive(Expressions.ClassName);
128
+ for (const node of classNames) {
129
+ const name = node.concatTokens();
130
+ addDep(rawDeps, name, 'type_ref', node.getFirstToken().getRow());
131
+ }
132
+ // 4. TypeName expressions — covers DATA ... TYPE <name>, TYPES ... TYPE <name>
133
+ const typeNames = structure.findAllExpressionsRecursive(Expressions.TypeName);
134
+ for (const node of typeNames) {
135
+ const name = node.concatTokens();
136
+ // TypeName can be multi-part (e.g., "zcl_class=>ty_type") — take the first segment
137
+ const firstSegment = name.split('=>')[0].split('->')[0].split('-')[0].split('~')[0].trim();
138
+ if (firstSegment) {
139
+ addDep(rawDeps, firstSegment, 'type_ref', node.getFirstToken().getRow());
140
+ }
141
+ }
142
+ // 5. MethodCallChain — for static calls (ClassName=>method)
143
+ const chains = structure.findAllExpressionsRecursive(Expressions.MethodCallChain);
144
+ for (const node of chains) {
145
+ const text = node.concatTokens();
146
+ const match = text.match(/^(\w[\w/]*)=>/);
147
+ if (match) {
148
+ addDep(rawDeps, match[1], 'static_call', node.getFirstToken().getRow());
149
+ }
150
+ }
151
+ // 6. CALL FUNCTION — via CallFunction statement + FunctionName expression
152
+ const callFuncs = structure.findAllStatements(Statements.CallFunction);
153
+ for (const stmt of callFuncs) {
154
+ const funcNames = stmt.findAllExpressions(Expressions.FunctionName);
155
+ for (const node of funcNames) {
156
+ // Function name is typically in quotes: 'Z_DELIVERY_FM'
157
+ const name = node.concatTokens().replace(/'/g, '').trim();
158
+ if (name) {
159
+ addDep(rawDeps, name, 'function_call', stmt.getFirstToken().getRow());
160
+ }
161
+ }
162
+ }
163
+ // 7. CATCH — exception classes via ClassName in Catch statements
164
+ const catches = structure.findAllStatements(Statements.Catch);
165
+ for (const stmt of catches) {
166
+ const exNames = stmt.findAllExpressionsRecursive(Expressions.ClassName);
167
+ for (const node of exNames) {
168
+ addDep(rawDeps, node.concatTokens(), 'exception', stmt.getFirstToken().getRow());
169
+ }
170
+ }
171
+ // 8. NEW and CAST — via dedicated expression types (v7.40+)
172
+ const newObjs = structure.findAllExpressionsRecursive(Expressions.NewObject);
173
+ for (const node of newObjs) {
174
+ const typeNode = node.findFirstExpression?.(Expressions.TypeNameOrInfer);
175
+ if (typeNode) {
176
+ const name = typeNode.concatTokens();
177
+ if (name !== '#') {
178
+ addDep(rawDeps, name, 'type_ref', node.getFirstToken().getRow());
179
+ }
180
+ }
181
+ }
182
+ const casts = structure.findAllExpressionsRecursive(Expressions.Cast);
183
+ for (const node of casts) {
184
+ const typeNode = node.findFirstExpression?.(Expressions.TypeNameOrInfer);
185
+ if (typeNode) {
186
+ const name = typeNode.concatTokens();
187
+ if (name !== '#') {
188
+ addDep(rawDeps, name, 'type_ref', node.getFirstToken().getRow());
189
+ }
190
+ }
191
+ }
192
+ }
193
+ // Deduplicate and filter
194
+ return deduplicateAndFilter(rawDeps, objectName, filterSapStandard);
195
+ }
196
+ /** Add a dependency to the raw list */
197
+ function addDep(deps, name, kind, line) {
198
+ const trimmed = name.trim();
199
+ if (trimmed && !isBuiltinType(trimmed)) {
200
+ deps.push({ name: trimmed, kind, line });
201
+ }
202
+ }
203
+ /**
204
+ * Deduplicate dependencies, filter self-references and optionally SAP standard,
205
+ * then sort (custom objects first, alphabetically within each group).
206
+ */
207
+ function deduplicateAndFilter(rawDeps, objectName, filterSapStandard) {
208
+ const seen = new Set();
209
+ const result = [];
210
+ const selfName = objectName.toUpperCase();
211
+ for (const dep of rawDeps) {
212
+ const upper = dep.name.toUpperCase();
213
+ // Skip self-references
214
+ if (upper === selfName)
215
+ continue;
216
+ // Skip built-ins (double-check)
217
+ if (isBuiltinType(dep.name))
218
+ continue;
219
+ // Skip SAP standard if filtering enabled
220
+ if (filterSapStandard && isSapStandard(dep.name))
221
+ continue;
222
+ // Deduplicate — keep the first occurrence (preserves most meaningful kind)
223
+ if (seen.has(upper))
224
+ continue;
225
+ seen.add(upper);
226
+ result.push(dep);
227
+ }
228
+ // Sort: custom objects (Z*, Y*) first, then others, alphabetically within each group
229
+ result.sort((a, b) => {
230
+ const aCustom = isCustomObject(a.name);
231
+ const bCustom = isCustomObject(b.name);
232
+ if (aCustom && !bCustom)
233
+ return -1;
234
+ if (!aCustom && bCustom)
235
+ return 1;
236
+ return a.name.toUpperCase().localeCompare(b.name.toUpperCase());
237
+ });
238
+ return result;
239
+ }
240
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../ts-src/context/deps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Types for the SAPContext dependency compression pipeline.
3
+ *
4
+ * The pipeline works in three stages:
5
+ * 1. deps.ts — Extract dependency names from ABAP source (AST-based)
6
+ * 2. contract.ts — Extract public API contracts from dependency source
7
+ * 3. compressor.ts — Orchestrate: fetch sources, compress, format output
8
+ */
9
+ /** A dependency found in ABAP source code */
10
+ export interface Dependency {
11
+ /** Object name (e.g., ZCL_ITEM, ZIF_ORDER) */
12
+ name: string;
13
+ /** How the dependency is used */
14
+ kind: DependencyKind;
15
+ /** Source line where the reference was found (1-based) */
16
+ line: number;
17
+ }
18
+ /** How a dependency is referenced in ABAP source */
19
+ export type DependencyKind = 'inheritance' | 'interface' | 'type_ref' | 'static_call' | 'function_call' | 'exception';
20
+ /** Compressed contract for a single dependency */
21
+ export interface Contract {
22
+ /** Object name */
23
+ name: string;
24
+ /** Inferred object type */
25
+ type: 'CLAS' | 'INTF' | 'FUNC' | 'UNKNOWN';
26
+ /** Number of public methods (for stats line) */
27
+ methodCount: number;
28
+ /** Compressed source — public API only */
29
+ source: string;
30
+ /** Full uncompressed source — used for recursive dependency extraction */
31
+ fullSource?: string;
32
+ /** Whether fetching/extraction succeeded */
33
+ success: boolean;
34
+ /** Error message if fetch/extraction failed */
35
+ error?: string;
36
+ }
37
+ /** Full context compression result */
38
+ export interface ContextResult {
39
+ /** Target object name */
40
+ objectName: string;
41
+ /** Target object type */
42
+ objectType: string;
43
+ /** Dependencies found in source */
44
+ depsFound: number;
45
+ /** Dependencies resolved (contracts fetched) */
46
+ depsResolved: number;
47
+ /** Dependencies filtered (SAP standard, self-refs, built-ins) */
48
+ depsFiltered: number;
49
+ /** Dependencies that failed to resolve */
50
+ depsFailed: number;
51
+ /** Total lines in output */
52
+ totalLines: number;
53
+ /** Formatted output prologue */
54
+ output: string;
55
+ }
56
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../ts-src/context/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oDAAoD;AACpD,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,WAAW,GACX,UAAU,GACV,aAAa,GACb,eAAe,GACf,WAAW,CAAC;AAEhB,kDAAkD;AAClD,MAAM,WAAW,QAAQ;IACvB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3C,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Types for the SAPContext dependency compression pipeline.
3
+ *
4
+ * The pipeline works in three stages:
5
+ * 1. deps.ts — Extract dependency names from ABAP source (AST-based)
6
+ * 2. contract.ts — Extract public API contracts from dependency source
7
+ * 3. compressor.ts — Orchestrate: fetch sources, compress, format output
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../ts-src/context/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Intent-based tool handler for ARC-1.
3
+ *
4
+ * Routes MCP tool calls to the appropriate ADT client methods.
5
+ * Each of the 11 tools (SAPRead, SAPSearch, etc.) dispatches
6
+ * based on its `type` or `action` parameter.
7
+ *
8
+ * Error handling: all errors are caught and returned as MCP error
9
+ * responses. Internal details (stack traces, SAP XML) are NOT
10
+ * leaked to the LLM — only user-friendly error messages.
11
+ */
12
+ import type { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
13
+ import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
14
+ import type { AdtClient } from '../adt/client.js';
15
+ import type { ServerConfig } from '../server/types.js';
16
+ /** MCP tool call result */
17
+ export interface ToolResult {
18
+ content: Array<{
19
+ type: 'text';
20
+ text: string;
21
+ }>;
22
+ isError?: boolean;
23
+ }
24
+ /**
25
+ * Scope required for each tool.
26
+ *
27
+ * Scope enforcement is ADDITIVE to the safety system:
28
+ * - Safety system (readOnly, allowedOps, etc.) gates operations at the ADT client level
29
+ * - Scopes gate operations at the MCP tool level (only enforced when authInfo is present)
30
+ * - Both must pass for an operation to succeed
31
+ *
32
+ * A user with `write` scope but `readOnly=true` in config still can't write.
33
+ */
34
+ export declare const TOOL_SCOPES: Record<string, string>;
35
+ /**
36
+ * Handle an MCP tool call.
37
+ *
38
+ * @param authInfo - Authenticated user context from MCP SDK (XSUAA/OIDC/API key).
39
+ * When present, scope enforcement is active. When absent (stdio, no auth),
40
+ * all tools are allowed (backward compatibility).
41
+ * @param server - MCP Server instance for elicitation support.
42
+ */
43
+ export declare function handleToolCall(client: AdtClient, _config: ServerConfig, toolName: string, args: Record<string, unknown>, authInfo?: AuthInfo, _server?: Server): Promise<ToolResult>;
44
+ /** Reset cached features (for testing) */
45
+ export declare function resetCachedFeatures(): void;
46
+ //# sourceMappingURL=intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../ts-src/handlers/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAalD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,2BAA2B;AAC3B,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAY9C,CAAC;AAuCF;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA2HrB;AA4XD,0CAA0C;AAC1C,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}