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.
- package/LICENSE +21 -0
- package/README.md +222 -0
- package/bin/arc1.js +12 -0
- package/dist/adt/btp.d.ts +122 -0
- package/dist/adt/btp.d.ts.map +1 -0
- package/dist/adt/btp.js +392 -0
- package/dist/adt/btp.js.map +1 -0
- package/dist/adt/client.d.ts +89 -0
- package/dist/adt/client.d.ts.map +1 -0
- package/dist/adt/client.js +208 -0
- package/dist/adt/client.js.map +1 -0
- package/dist/adt/codeintel.d.ts +38 -0
- package/dist/adt/codeintel.d.ts.map +1 -0
- package/dist/adt/codeintel.js +61 -0
- package/dist/adt/codeintel.js.map +1 -0
- package/dist/adt/config.d.ts +65 -0
- package/dist/adt/config.d.ts.map +1 -0
- package/dist/adt/config.js +35 -0
- package/dist/adt/config.js.map +1 -0
- package/dist/adt/cookies.d.ts +27 -0
- package/dist/adt/cookies.d.ts.map +1 -0
- package/dist/adt/cookies.js +67 -0
- package/dist/adt/cookies.js.map +1 -0
- package/dist/adt/crud.d.ts +35 -0
- package/dist/adt/crud.d.ts.map +1 -0
- package/dist/adt/crud.js +87 -0
- package/dist/adt/crud.js.map +1 -0
- package/dist/adt/devtools.d.ts +32 -0
- package/dist/adt/devtools.d.ts.map +1 -0
- package/dist/adt/devtools.js +154 -0
- package/dist/adt/devtools.js.map +1 -0
- package/dist/adt/errors.d.ts +49 -0
- package/dist/adt/errors.d.ts.map +1 -0
- package/dist/adt/errors.js +80 -0
- package/dist/adt/errors.js.map +1 -0
- package/dist/adt/features.d.ts +44 -0
- package/dist/adt/features.d.ts.map +1 -0
- package/dist/adt/features.js +173 -0
- package/dist/adt/features.js.map +1 -0
- package/dist/adt/http.d.ts +116 -0
- package/dist/adt/http.d.ts.map +1 -0
- package/dist/adt/http.js +374 -0
- package/dist/adt/http.js.map +1 -0
- package/dist/adt/safety.d.ts +70 -0
- package/dist/adt/safety.d.ts.map +1 -0
- package/dist/adt/safety.js +222 -0
- package/dist/adt/safety.js.map +1 -0
- package/dist/adt/transport.d.ts +18 -0
- package/dist/adt/transport.d.ts.map +1 -0
- package/dist/adt/transport.js +66 -0
- package/dist/adt/transport.js.map +1 -0
- package/dist/adt/types.d.ts +91 -0
- package/dist/adt/types.d.ts.map +1 -0
- package/dist/adt/types.js +9 -0
- package/dist/adt/types.js.map +1 -0
- package/dist/adt/xml-parser.d.ts +109 -0
- package/dist/adt/xml-parser.d.ts.map +1 -0
- package/dist/adt/xml-parser.js +283 -0
- package/dist/adt/xml-parser.js.map +1 -0
- package/dist/cache/cache.d.ts +61 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +14 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/memory.d.ts +25 -0
- package/dist/cache/memory.d.ts.map +1 -0
- package/dist/cache/memory.js +69 -0
- package/dist/cache/memory.js.map +1 -0
- package/dist/cache/sqlite.d.ts +26 -0
- package/dist/cache/sqlite.d.ts.map +1 -0
- package/dist/cache/sqlite.js +130 -0
- package/dist/cache/sqlite.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +101 -0
- package/dist/cli.js.map +1 -0
- package/dist/context/compressor.d.ts +33 -0
- package/dist/context/compressor.d.ts.map +1 -0
- package/dist/context/compressor.js +208 -0
- package/dist/context/compressor.js.map +1 -0
- package/dist/context/contract.d.ts +14 -0
- package/dist/context/contract.d.ts.map +1 -0
- package/dist/context/contract.js +202 -0
- package/dist/context/contract.js.map +1 -0
- package/dist/context/deps.d.ts +32 -0
- package/dist/context/deps.d.ts.map +1 -0
- package/dist/context/deps.js +240 -0
- package/dist/context/deps.js.map +1 -0
- package/dist/context/types.d.ts +56 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +10 -0
- package/dist/context/types.js.map +1 -0
- package/dist/handlers/intent.d.ts +46 -0
- package/dist/handlers/intent.d.ts.map +1 -0
- package/dist/handlers/intent.js +539 -0
- package/dist/handlers/intent.js.map +1 -0
- package/dist/handlers/tools.d.ts +21 -0
- package/dist/handlers/tools.d.ts.map +1 -0
- package/dist/handlers/tools.js +260 -0
- package/dist/handlers/tools.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/lint/lint.d.ts +35 -0
- package/dist/lint/lint.d.ts.map +1 -0
- package/dist/lint/lint.js +67 -0
- package/dist/lint/lint.js.map +1 -0
- package/dist/server/audit.d.ts +96 -0
- package/dist/server/audit.d.ts.map +1 -0
- package/dist/server/audit.js +27 -0
- package/dist/server/audit.js.map +1 -0
- package/dist/server/config.d.ts +19 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +101 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/context.d.ts +20 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +20 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/elicit.d.ts +43 -0
- package/dist/server/elicit.d.ts.map +1 -0
- package/dist/server/elicit.js +183 -0
- package/dist/server/elicit.js.map +1 -0
- package/dist/server/http.d.ts +34 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +328 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/logger.d.ts +57 -0
- package/dist/server/logger.d.ts.map +1 -0
- package/dist/server/logger.js +129 -0
- package/dist/server/logger.js.map +1 -0
- package/dist/server/server.d.ts +25 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +307 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/sinks/btp-auditlog.d.ts +48 -0
- package/dist/server/sinks/btp-auditlog.d.ts.map +1 -0
- package/dist/server/sinks/btp-auditlog.js +232 -0
- package/dist/server/sinks/btp-auditlog.js.map +1 -0
- package/dist/server/sinks/file.d.ts +22 -0
- package/dist/server/sinks/file.d.ts.map +1 -0
- package/dist/server/sinks/file.js +59 -0
- package/dist/server/sinks/file.js.map +1 -0
- package/dist/server/sinks/stderr.d.ts +19 -0
- package/dist/server/sinks/stderr.d.ts.map +1 -0
- package/dist/server/sinks/stderr.js +63 -0
- package/dist/server/sinks/stderr.js.map +1 -0
- package/dist/server/sinks/types.d.ts +14 -0
- package/dist/server/sinks/types.d.ts.map +1 -0
- package/dist/server/sinks/types.js +8 -0
- package/dist/server/sinks/types.js.map +1 -0
- package/dist/server/types.d.ts +54 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +42 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/xsuaa.d.ts +77 -0
- package/dist/server/xsuaa.d.ts.map +1 -0
- package/dist/server/xsuaa.js +364 -0
- package/dist/server/xsuaa.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,539 @@
|
|
|
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 { findDefinition, findReferences, getCompletion } from '../adt/codeintel.js';
|
|
13
|
+
import { createObject, deleteObject, lockObject, safeUpdateSource, unlockObject } from '../adt/crud.js';
|
|
14
|
+
import { activate, runAtcCheck, runUnitTests, syntaxCheck } from '../adt/devtools.js';
|
|
15
|
+
import { AdtApiError, AdtNetworkError, AdtSafetyError } from '../adt/errors.js';
|
|
16
|
+
import { mapSapReleaseToAbaplintVersion, probeFeatures } from '../adt/features.js';
|
|
17
|
+
import { createTransport, getTransport, listTransports, releaseTransport } from '../adt/transport.js';
|
|
18
|
+
import { compressContext } from '../context/compressor.js';
|
|
19
|
+
import { detectFilename, lintAbapSource } from '../lint/lint.js';
|
|
20
|
+
import { sanitizeArgs } from '../server/audit.js';
|
|
21
|
+
import { generateRequestId, requestContext } from '../server/context.js';
|
|
22
|
+
import { logger } from '../server/logger.js';
|
|
23
|
+
/**
|
|
24
|
+
* Scope required for each tool.
|
|
25
|
+
*
|
|
26
|
+
* Scope enforcement is ADDITIVE to the safety system:
|
|
27
|
+
* - Safety system (readOnly, allowedOps, etc.) gates operations at the ADT client level
|
|
28
|
+
* - Scopes gate operations at the MCP tool level (only enforced when authInfo is present)
|
|
29
|
+
* - Both must pass for an operation to succeed
|
|
30
|
+
*
|
|
31
|
+
* A user with `write` scope but `readOnly=true` in config still can't write.
|
|
32
|
+
*/
|
|
33
|
+
export const TOOL_SCOPES = {
|
|
34
|
+
SAPRead: 'read',
|
|
35
|
+
SAPSearch: 'read',
|
|
36
|
+
SAPQuery: 'read',
|
|
37
|
+
SAPNavigate: 'read',
|
|
38
|
+
SAPContext: 'read',
|
|
39
|
+
SAPLint: 'read',
|
|
40
|
+
SAPDiagnose: 'read',
|
|
41
|
+
SAPWrite: 'write',
|
|
42
|
+
SAPActivate: 'write',
|
|
43
|
+
SAPManage: 'write',
|
|
44
|
+
SAPTransport: 'admin',
|
|
45
|
+
};
|
|
46
|
+
function textResult(text) {
|
|
47
|
+
return { content: [{ type: 'text', text }] };
|
|
48
|
+
}
|
|
49
|
+
function errorResult(message) {
|
|
50
|
+
return { content: [{ type: 'text', text: message }], isError: true };
|
|
51
|
+
}
|
|
52
|
+
/** Classify error type for audit logging */
|
|
53
|
+
/** Format error messages with LLM-friendly remediation hints */
|
|
54
|
+
function formatErrorForLLM(err, message, _tool, args) {
|
|
55
|
+
if (err instanceof AdtApiError) {
|
|
56
|
+
if (err.isNotFound) {
|
|
57
|
+
const name = String(args.name ?? '');
|
|
58
|
+
const type = String(args.type ?? '');
|
|
59
|
+
return `${message}\n\nHint: Object "${name}" (type ${type}) was not found. Use SAPSearch with query "${name}" to verify the name exists and check the correct type.`;
|
|
60
|
+
}
|
|
61
|
+
if (err.isUnauthorized || err.isForbidden) {
|
|
62
|
+
return `${message}\n\nHint: Authorization error. The configured SAP user may lack permissions for this object.`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (err instanceof AdtNetworkError) {
|
|
66
|
+
return `${message}\n\nHint: Cannot reach the SAP system. This is a connectivity issue, not a usage error.`;
|
|
67
|
+
}
|
|
68
|
+
return message;
|
|
69
|
+
}
|
|
70
|
+
function classifyError(err) {
|
|
71
|
+
if (err instanceof AdtApiError)
|
|
72
|
+
return 'AdtApiError';
|
|
73
|
+
if (err instanceof AdtNetworkError)
|
|
74
|
+
return 'AdtNetworkError';
|
|
75
|
+
if (err instanceof AdtSafetyError)
|
|
76
|
+
return 'AdtSafetyError';
|
|
77
|
+
if (err instanceof Error)
|
|
78
|
+
return err.constructor.name;
|
|
79
|
+
return 'Unknown';
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Handle an MCP tool call.
|
|
83
|
+
*
|
|
84
|
+
* @param authInfo - Authenticated user context from MCP SDK (XSUAA/OIDC/API key).
|
|
85
|
+
* When present, scope enforcement is active. When absent (stdio, no auth),
|
|
86
|
+
* all tools are allowed (backward compatibility).
|
|
87
|
+
* @param server - MCP Server instance for elicitation support.
|
|
88
|
+
*/
|
|
89
|
+
export async function handleToolCall(client, _config, toolName, args, authInfo, _server) {
|
|
90
|
+
const reqId = generateRequestId();
|
|
91
|
+
const start = Date.now();
|
|
92
|
+
// Build user context for audit logging
|
|
93
|
+
const user = authInfo?.extra?.userName;
|
|
94
|
+
const clientId = authInfo?.clientId;
|
|
95
|
+
// Emit tool_call_start audit event
|
|
96
|
+
logger.emitAudit({
|
|
97
|
+
timestamp: new Date().toISOString(),
|
|
98
|
+
level: 'info',
|
|
99
|
+
event: 'tool_call_start',
|
|
100
|
+
requestId: reqId,
|
|
101
|
+
user,
|
|
102
|
+
clientId,
|
|
103
|
+
tool: toolName,
|
|
104
|
+
args: sanitizeArgs(args),
|
|
105
|
+
});
|
|
106
|
+
// Scope enforcement — only when authInfo is present (XSUAA/OIDC mode)
|
|
107
|
+
if (authInfo) {
|
|
108
|
+
const requiredScope = TOOL_SCOPES[toolName];
|
|
109
|
+
if (requiredScope && !authInfo.scopes.includes(requiredScope)) {
|
|
110
|
+
logger.emitAudit({
|
|
111
|
+
timestamp: new Date().toISOString(),
|
|
112
|
+
level: 'warn',
|
|
113
|
+
event: 'auth_scope_denied',
|
|
114
|
+
requestId: reqId,
|
|
115
|
+
user,
|
|
116
|
+
clientId,
|
|
117
|
+
tool: toolName,
|
|
118
|
+
requiredScope,
|
|
119
|
+
availableScopes: authInfo.scopes,
|
|
120
|
+
});
|
|
121
|
+
return errorResult(`Insufficient scope: '${requiredScope}' required for ${toolName}. Your scopes: [${authInfo.scopes.join(', ')}]`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Run within request context so HTTP-level logs get the requestId
|
|
125
|
+
return requestContext.run({ requestId: reqId, user, tool: toolName }, async () => {
|
|
126
|
+
try {
|
|
127
|
+
let result;
|
|
128
|
+
switch (toolName) {
|
|
129
|
+
case 'SAPRead':
|
|
130
|
+
result = await handleSAPRead(client, args);
|
|
131
|
+
break;
|
|
132
|
+
case 'SAPSearch':
|
|
133
|
+
result = await handleSAPSearch(client, args);
|
|
134
|
+
break;
|
|
135
|
+
case 'SAPQuery':
|
|
136
|
+
result = await handleSAPQuery(client, args);
|
|
137
|
+
break;
|
|
138
|
+
case 'SAPWrite':
|
|
139
|
+
result = await handleSAPWrite(client, args);
|
|
140
|
+
break;
|
|
141
|
+
case 'SAPActivate':
|
|
142
|
+
result = await handleSAPActivate(client, args);
|
|
143
|
+
break;
|
|
144
|
+
case 'SAPNavigate':
|
|
145
|
+
result = await handleSAPNavigate(client, args);
|
|
146
|
+
break;
|
|
147
|
+
case 'SAPLint':
|
|
148
|
+
result = await handleSAPLint(client, args);
|
|
149
|
+
break;
|
|
150
|
+
case 'SAPDiagnose':
|
|
151
|
+
result = await handleSAPDiagnose(client, args);
|
|
152
|
+
break;
|
|
153
|
+
case 'SAPTransport':
|
|
154
|
+
result = await handleSAPTransport(client, args);
|
|
155
|
+
break;
|
|
156
|
+
case 'SAPContext':
|
|
157
|
+
result = await handleSAPContext(client, args);
|
|
158
|
+
break;
|
|
159
|
+
case 'SAPManage':
|
|
160
|
+
result = await handleSAPManage(client, _config, args);
|
|
161
|
+
break;
|
|
162
|
+
default:
|
|
163
|
+
result = errorResult(`Unknown tool: ${toolName}`);
|
|
164
|
+
}
|
|
165
|
+
const durationMs = Date.now() - start;
|
|
166
|
+
const resultSize = result.content.reduce((acc, c) => acc + c.text.length, 0);
|
|
167
|
+
logger.emitAudit({
|
|
168
|
+
timestamp: new Date().toISOString(),
|
|
169
|
+
level: 'info',
|
|
170
|
+
event: 'tool_call_end',
|
|
171
|
+
requestId: reqId,
|
|
172
|
+
user,
|
|
173
|
+
clientId,
|
|
174
|
+
tool: toolName,
|
|
175
|
+
durationMs,
|
|
176
|
+
status: result.isError ? 'error' : 'success',
|
|
177
|
+
errorMessage: result.isError ? result.content[0]?.text : undefined,
|
|
178
|
+
resultSize,
|
|
179
|
+
});
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
184
|
+
const durationMs = Date.now() - start;
|
|
185
|
+
logger.emitAudit({
|
|
186
|
+
timestamp: new Date().toISOString(),
|
|
187
|
+
level: 'error',
|
|
188
|
+
event: 'tool_call_end',
|
|
189
|
+
requestId: reqId,
|
|
190
|
+
user,
|
|
191
|
+
clientId,
|
|
192
|
+
tool: toolName,
|
|
193
|
+
durationMs,
|
|
194
|
+
status: 'error',
|
|
195
|
+
errorClass: classifyError(err),
|
|
196
|
+
errorMessage: message,
|
|
197
|
+
});
|
|
198
|
+
return errorResult(formatErrorForLLM(err, message, toolName, args));
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// ─── Individual Tool Handlers ────────────────────────────────────────
|
|
203
|
+
async function handleSAPRead(client, args) {
|
|
204
|
+
const type = String(args.type ?? '');
|
|
205
|
+
const name = String(args.name ?? '');
|
|
206
|
+
switch (type) {
|
|
207
|
+
case 'PROG':
|
|
208
|
+
return textResult(await client.getProgram(name));
|
|
209
|
+
case 'CLAS':
|
|
210
|
+
return textResult(await client.getClass(name, args.include));
|
|
211
|
+
case 'INTF':
|
|
212
|
+
return textResult(await client.getInterface(name));
|
|
213
|
+
case 'FUNC':
|
|
214
|
+
return textResult(await client.getFunction(String(args.group ?? ''), name));
|
|
215
|
+
case 'FUGR': {
|
|
216
|
+
const fg = await client.getFunctionGroup(name);
|
|
217
|
+
return textResult(JSON.stringify(fg, null, 2));
|
|
218
|
+
}
|
|
219
|
+
case 'INCL':
|
|
220
|
+
return textResult(await client.getInclude(name));
|
|
221
|
+
case 'DDLS':
|
|
222
|
+
return textResult(await client.getDdls(name));
|
|
223
|
+
case 'BDEF':
|
|
224
|
+
return textResult(await client.getBdef(name));
|
|
225
|
+
case 'SRVD':
|
|
226
|
+
return textResult(await client.getSrvd(name));
|
|
227
|
+
case 'TABL':
|
|
228
|
+
return textResult(await client.getTable(name));
|
|
229
|
+
case 'VIEW':
|
|
230
|
+
return textResult(await client.getView(name));
|
|
231
|
+
case 'TABLE_CONTENTS': {
|
|
232
|
+
const maxRows = Number(args.maxRows ?? 100);
|
|
233
|
+
const data = await client.getTableContents(name, maxRows, args.sqlFilter);
|
|
234
|
+
return textResult(JSON.stringify(data, null, 2));
|
|
235
|
+
}
|
|
236
|
+
case 'DEVC': {
|
|
237
|
+
const contents = await client.getPackageContents(name);
|
|
238
|
+
return textResult(JSON.stringify(contents, null, 2));
|
|
239
|
+
}
|
|
240
|
+
case 'SYSTEM':
|
|
241
|
+
return textResult(await client.getSystemInfo());
|
|
242
|
+
case 'COMPONENTS': {
|
|
243
|
+
const components = await client.getInstalledComponents();
|
|
244
|
+
return textResult(JSON.stringify(components, null, 2));
|
|
245
|
+
}
|
|
246
|
+
case 'MESSAGES':
|
|
247
|
+
return textResult(await client.getMessages(name));
|
|
248
|
+
case 'TEXT_ELEMENTS':
|
|
249
|
+
return textResult(await client.getTextElements(name));
|
|
250
|
+
case 'VARIANTS':
|
|
251
|
+
return textResult(await client.getVariants(name));
|
|
252
|
+
default:
|
|
253
|
+
return errorResult(`Unknown SAPRead type: ${type}. Supported: PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, BDEF, SRVD, TABL, VIEW, TABLE_CONTENTS, DEVC, SYSTEM, COMPONENTS, MESSAGES, TEXT_ELEMENTS, VARIANTS`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async function handleSAPSearch(client, args) {
|
|
257
|
+
const query = String(args.query ?? '');
|
|
258
|
+
const maxResults = Number(args.maxResults ?? 100);
|
|
259
|
+
const results = await client.searchObject(query, maxResults);
|
|
260
|
+
return textResult(JSON.stringify(results, null, 2));
|
|
261
|
+
}
|
|
262
|
+
async function handleSAPQuery(client, args) {
|
|
263
|
+
const sql = String(args.sql ?? '');
|
|
264
|
+
const maxRows = Number(args.maxRows ?? 100);
|
|
265
|
+
const data = await client.runQuery(sql, maxRows);
|
|
266
|
+
return textResult(JSON.stringify(data, null, 2));
|
|
267
|
+
}
|
|
268
|
+
async function handleSAPLint(_client, args) {
|
|
269
|
+
const action = String(args.action ?? '');
|
|
270
|
+
switch (action) {
|
|
271
|
+
case 'lint': {
|
|
272
|
+
const source = String(args.source ?? '');
|
|
273
|
+
const name = String(args.name ?? 'UNKNOWN');
|
|
274
|
+
const filename = detectFilename(source, name);
|
|
275
|
+
const issues = lintAbapSource(source, filename);
|
|
276
|
+
return textResult(JSON.stringify(issues, null, 2));
|
|
277
|
+
}
|
|
278
|
+
default:
|
|
279
|
+
return errorResult(`Unknown SAPLint action: ${action}. Supported: lint, atc, syntax`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// ─── Object URL Mapping ──────────────────────────────────────────────
|
|
283
|
+
/** Map object type + name to the ADT object URL used by CRUD/DevTools/etc. */
|
|
284
|
+
function objectUrlForType(type, name) {
|
|
285
|
+
const encoded = encodeURIComponent(name);
|
|
286
|
+
switch (type) {
|
|
287
|
+
case 'PROG':
|
|
288
|
+
return `/sap/bc/adt/programs/programs/${encoded}`;
|
|
289
|
+
case 'CLAS':
|
|
290
|
+
return `/sap/bc/adt/oo/classes/${encoded}`;
|
|
291
|
+
case 'INTF':
|
|
292
|
+
return `/sap/bc/adt/oo/interfaces/${encoded}`;
|
|
293
|
+
case 'FUNC':
|
|
294
|
+
return `/sap/bc/adt/functions/groups/${encoded}`;
|
|
295
|
+
case 'INCL':
|
|
296
|
+
return `/sap/bc/adt/programs/includes/${encoded}`;
|
|
297
|
+
case 'FUGR':
|
|
298
|
+
return `/sap/bc/adt/functions/groups/${encoded}`;
|
|
299
|
+
case 'DDLS':
|
|
300
|
+
return `/sap/bc/adt/ddic/ddl/sources/${encoded}`;
|
|
301
|
+
case 'BDEF':
|
|
302
|
+
return `/sap/bc/adt/bo/behaviordefinitions/${encoded}`;
|
|
303
|
+
case 'SRVD':
|
|
304
|
+
return `/sap/bc/adt/ddic/srvd/sources/${encoded}`;
|
|
305
|
+
case 'TABL':
|
|
306
|
+
return `/sap/bc/adt/ddic/tables/${encoded}`;
|
|
307
|
+
default:
|
|
308
|
+
return `/sap/bc/adt/programs/programs/${encoded}`;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/** Get the source URL for an object (appends /source/main) */
|
|
312
|
+
function sourceUrlForType(type, name) {
|
|
313
|
+
return `${objectUrlForType(type, name)}/source/main`;
|
|
314
|
+
}
|
|
315
|
+
// ─── SAPWrite Handler ────────────────────────────────────────────────
|
|
316
|
+
async function handleSAPWrite(client, args) {
|
|
317
|
+
const action = String(args.action ?? '');
|
|
318
|
+
const type = String(args.type ?? '');
|
|
319
|
+
const name = String(args.name ?? '');
|
|
320
|
+
const source = String(args.source ?? '');
|
|
321
|
+
const transport = args.transport;
|
|
322
|
+
const objectUrl = objectUrlForType(type, name);
|
|
323
|
+
const srcUrl = sourceUrlForType(type, name);
|
|
324
|
+
switch (action) {
|
|
325
|
+
case 'update': {
|
|
326
|
+
await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, source, transport);
|
|
327
|
+
return textResult(`Successfully updated ${type} ${name}.`);
|
|
328
|
+
}
|
|
329
|
+
case 'create': {
|
|
330
|
+
const pkg = String(args.package ?? '$TMP');
|
|
331
|
+
// Build creation XML body
|
|
332
|
+
const body = `<?xml version="1.0" encoding="UTF-8"?>
|
|
333
|
+
<adtcore:objectReferences xmlns:adtcore="http://www.sap.com/adt/core">
|
|
334
|
+
<adtcore:objectReference adtcore:uri="${objectUrl}" adtcore:type="${type}" adtcore:name="${name}" adtcore:packageName="${pkg}"/>
|
|
335
|
+
</adtcore:objectReferences>`;
|
|
336
|
+
const result = await createObject(client.http, client.safety, objectUrl, body, 'application/xml', transport);
|
|
337
|
+
return textResult(`Created ${type} ${name} in package ${pkg}.\n${result}`);
|
|
338
|
+
}
|
|
339
|
+
case 'delete': {
|
|
340
|
+
// Lock, delete, unlock pattern
|
|
341
|
+
await client.http.withStatefulSession(async (session) => {
|
|
342
|
+
const lock = await lockObject(session, client.safety, objectUrl);
|
|
343
|
+
try {
|
|
344
|
+
await deleteObject(session, client.safety, objectUrl, lock.lockHandle, transport);
|
|
345
|
+
}
|
|
346
|
+
finally {
|
|
347
|
+
try {
|
|
348
|
+
await unlockObject(session, objectUrl, lock.lockHandle);
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
// Object may already be deleted — unlock failure is expected
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
return textResult(`Deleted ${type} ${name}.`);
|
|
356
|
+
}
|
|
357
|
+
default:
|
|
358
|
+
return errorResult(`Unknown SAPWrite action: ${action}. Supported: create, update, delete`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// ─── SAPActivate Handler ─────────────────────────────────────────────
|
|
362
|
+
async function handleSAPActivate(client, args) {
|
|
363
|
+
const name = String(args.name ?? '');
|
|
364
|
+
const type = String(args.type ?? '');
|
|
365
|
+
const objectUrl = objectUrlForType(type, name);
|
|
366
|
+
const result = await activate(client.http, client.safety, objectUrl);
|
|
367
|
+
if (result.success) {
|
|
368
|
+
return textResult(`Successfully activated ${type} ${name}.${result.messages.length > 0 ? `\nMessages: ${result.messages.join('; ')}` : ''}`);
|
|
369
|
+
}
|
|
370
|
+
return errorResult(`Activation failed for ${type} ${name}.\nErrors: ${result.messages.join('; ')}`);
|
|
371
|
+
}
|
|
372
|
+
// ─── SAPNavigate Handler ─────────────────────────────────────────────
|
|
373
|
+
async function handleSAPNavigate(client, args) {
|
|
374
|
+
const action = String(args.action ?? '');
|
|
375
|
+
const uri = String(args.uri ?? '');
|
|
376
|
+
const line = Number(args.line ?? 1);
|
|
377
|
+
const column = Number(args.column ?? 1);
|
|
378
|
+
const source = String(args.source ?? '');
|
|
379
|
+
switch (action) {
|
|
380
|
+
case 'definition': {
|
|
381
|
+
const result = await findDefinition(client.http, client.safety, uri, line, column, source);
|
|
382
|
+
if (!result) {
|
|
383
|
+
return textResult('No definition found at this position.');
|
|
384
|
+
}
|
|
385
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
386
|
+
}
|
|
387
|
+
case 'references': {
|
|
388
|
+
const results = await findReferences(client.http, client.safety, uri);
|
|
389
|
+
if (results.length === 0) {
|
|
390
|
+
return textResult('No references found.');
|
|
391
|
+
}
|
|
392
|
+
return textResult(JSON.stringify(results, null, 2));
|
|
393
|
+
}
|
|
394
|
+
case 'completion': {
|
|
395
|
+
const proposals = await getCompletion(client.http, client.safety, uri, line, column, source);
|
|
396
|
+
return textResult(JSON.stringify(proposals, null, 2));
|
|
397
|
+
}
|
|
398
|
+
default:
|
|
399
|
+
return errorResult(`Unknown SAPNavigate action: ${action}. Supported: definition, references, completion`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
// ─── SAPDiagnose Handler ─────────────────────────────────────────────
|
|
403
|
+
async function handleSAPDiagnose(client, args) {
|
|
404
|
+
const action = String(args.action ?? '');
|
|
405
|
+
const name = String(args.name ?? '');
|
|
406
|
+
const type = String(args.type ?? '');
|
|
407
|
+
const objectUrl = objectUrlForType(type, name);
|
|
408
|
+
switch (action) {
|
|
409
|
+
case 'syntax': {
|
|
410
|
+
const result = await syntaxCheck(client.http, client.safety, objectUrl);
|
|
411
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
412
|
+
}
|
|
413
|
+
case 'unittest': {
|
|
414
|
+
const results = await runUnitTests(client.http, client.safety, objectUrl);
|
|
415
|
+
return textResult(JSON.stringify(results, null, 2));
|
|
416
|
+
}
|
|
417
|
+
case 'atc': {
|
|
418
|
+
const variant = args.variant;
|
|
419
|
+
const result = await runAtcCheck(client.http, client.safety, objectUrl, variant);
|
|
420
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
421
|
+
}
|
|
422
|
+
default:
|
|
423
|
+
return errorResult(`Unknown SAPDiagnose action: ${action}. Supported: syntax, unittest, atc`);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
// ─── SAPTransport Handler ────────────────────────────────────────────
|
|
427
|
+
async function handleSAPTransport(client, args) {
|
|
428
|
+
const action = String(args.action ?? '');
|
|
429
|
+
switch (action) {
|
|
430
|
+
case 'list': {
|
|
431
|
+
const user = args.user;
|
|
432
|
+
const transports = await listTransports(client.http, client.safety, user);
|
|
433
|
+
return textResult(JSON.stringify(transports, null, 2));
|
|
434
|
+
}
|
|
435
|
+
case 'get': {
|
|
436
|
+
const id = String(args.id ?? '');
|
|
437
|
+
if (!id)
|
|
438
|
+
return errorResult('Transport ID is required for "get" action.');
|
|
439
|
+
const transport = await getTransport(client.http, client.safety, id);
|
|
440
|
+
if (!transport)
|
|
441
|
+
return textResult(`Transport ${id} not found.`);
|
|
442
|
+
return textResult(JSON.stringify(transport, null, 2));
|
|
443
|
+
}
|
|
444
|
+
case 'create': {
|
|
445
|
+
const description = String(args.description ?? '');
|
|
446
|
+
if (!description)
|
|
447
|
+
return errorResult('Description is required for "create" action.');
|
|
448
|
+
const id = await createTransport(client.http, client.safety, description);
|
|
449
|
+
return textResult(`Created transport request: ${id}`);
|
|
450
|
+
}
|
|
451
|
+
case 'release': {
|
|
452
|
+
const id = String(args.id ?? '');
|
|
453
|
+
if (!id)
|
|
454
|
+
return errorResult('Transport ID is required for "release" action.');
|
|
455
|
+
await releaseTransport(client.http, client.safety, id);
|
|
456
|
+
return textResult(`Released transport request: ${id}`);
|
|
457
|
+
}
|
|
458
|
+
default:
|
|
459
|
+
return errorResult(`Unknown SAPTransport action: ${action}. Supported: list, get, create, release`);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
// ─── SAPContext Handler ───────────────────────────────────────────────
|
|
463
|
+
async function handleSAPContext(client, args) {
|
|
464
|
+
const type = String(args.type ?? '');
|
|
465
|
+
const name = String(args.name ?? '');
|
|
466
|
+
const maxDeps = Number(args.maxDeps ?? 20);
|
|
467
|
+
const depth = Math.min(Math.max(Number(args.depth ?? 1), 1), 3);
|
|
468
|
+
if (!type || !name) {
|
|
469
|
+
return errorResult('Both "type" and "name" are required for SAPContext.');
|
|
470
|
+
}
|
|
471
|
+
// Get source — either provided or fetched from SAP
|
|
472
|
+
let source;
|
|
473
|
+
if (args.source) {
|
|
474
|
+
source = String(args.source);
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
switch (type) {
|
|
478
|
+
case 'CLAS':
|
|
479
|
+
source = await client.getClass(name);
|
|
480
|
+
break;
|
|
481
|
+
case 'INTF':
|
|
482
|
+
source = await client.getInterface(name);
|
|
483
|
+
break;
|
|
484
|
+
case 'PROG':
|
|
485
|
+
source = await client.getProgram(name);
|
|
486
|
+
break;
|
|
487
|
+
case 'FUNC': {
|
|
488
|
+
const group = String(args.group ?? '');
|
|
489
|
+
if (!group) {
|
|
490
|
+
return errorResult('The "group" parameter is required for FUNC type. Use SAPSearch to find the function group.');
|
|
491
|
+
}
|
|
492
|
+
source = await client.getFunction(group, name);
|
|
493
|
+
break;
|
|
494
|
+
}
|
|
495
|
+
default:
|
|
496
|
+
return errorResult(`SAPContext supports types: CLAS, INTF, PROG, FUNC. Got: ${type}`);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
// Use detected ABAP version from probe if available, otherwise Cloud (superset)
|
|
500
|
+
const abaplintVersion = cachedFeatures?.abapRelease
|
|
501
|
+
? mapSapReleaseToAbaplintVersion(cachedFeatures.abapRelease)
|
|
502
|
+
: undefined;
|
|
503
|
+
const result = await compressContext(client, source, name, type, maxDeps, depth, abaplintVersion);
|
|
504
|
+
return textResult(result.output);
|
|
505
|
+
}
|
|
506
|
+
// ─── SAPManage Handler ────────────────────────────────────────────────
|
|
507
|
+
/** Cached feature status — populated on first probe */
|
|
508
|
+
let cachedFeatures;
|
|
509
|
+
async function handleSAPManage(client, config, args) {
|
|
510
|
+
const action = String(args.action ?? '');
|
|
511
|
+
switch (action) {
|
|
512
|
+
case 'features': {
|
|
513
|
+
if (!cachedFeatures) {
|
|
514
|
+
return textResult(JSON.stringify({ message: 'No features probed yet. Use action="probe" to probe the SAP system first.' }));
|
|
515
|
+
}
|
|
516
|
+
return textResult(JSON.stringify(cachedFeatures, null, 2));
|
|
517
|
+
}
|
|
518
|
+
case 'probe': {
|
|
519
|
+
const { defaultFeatureConfig } = await import('../adt/config.js');
|
|
520
|
+
const featureConfig = defaultFeatureConfig();
|
|
521
|
+
// Override with server config feature toggles
|
|
522
|
+
featureConfig.hana = config.featureHana;
|
|
523
|
+
featureConfig.abapGit = config.featureAbapGit;
|
|
524
|
+
featureConfig.rap = config.featureRap;
|
|
525
|
+
featureConfig.amdp = config.featureAmdp;
|
|
526
|
+
featureConfig.ui5 = config.featureUi5;
|
|
527
|
+
featureConfig.transport = config.featureTransport;
|
|
528
|
+
cachedFeatures = await probeFeatures(client.http, featureConfig);
|
|
529
|
+
return textResult(JSON.stringify(cachedFeatures, null, 2));
|
|
530
|
+
}
|
|
531
|
+
default:
|
|
532
|
+
return errorResult(`Unknown SAPManage action: ${action}. Supported: features, probe`);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
/** Reset cached features (for testing) */
|
|
536
|
+
export function resetCachedFeatures() {
|
|
537
|
+
cachedFeatures = undefined;
|
|
538
|
+
}
|
|
539
|
+
//# sourceMappingURL=intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../ts-src/handlers/intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool definitions for ARC-1's 11 intent-based MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Each tool has:
|
|
5
|
+
* - name: The MCP tool name (SAPRead, SAPWrite, etc.)
|
|
6
|
+
* - description: Rich LLM-friendly description
|
|
7
|
+
* - inputSchema: JSON Schema for tool arguments
|
|
8
|
+
*
|
|
9
|
+
* The 11 intent-based design is ARC-1's key differentiator:
|
|
10
|
+
* instead of 200+ individual tools (one per object type per operation),
|
|
11
|
+
* we group by *intent* with a `type` parameter for routing.
|
|
12
|
+
* This keeps the LLM's tool selection simple and the context window small.
|
|
13
|
+
*/
|
|
14
|
+
import type { ServerConfig } from '../server/types.js';
|
|
15
|
+
export interface ToolDefinition {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
inputSchema: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
export declare function getToolDefinitions(config: ServerConfig): ToolDefinition[];
|
|
21
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../ts-src/handlers/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,EAAE,CA4QzE"}
|