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.
- package/README.md +17 -4
- package/dist/adt/class-structure.d.ts +1 -1
- package/dist/adt/class-structure.js +1 -1
- package/dist/adt/client.d.ts +16 -3
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +40 -35
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/ddic-xml.d.ts +9 -0
- package/dist/adt/ddic-xml.d.ts.map +1 -1
- package/dist/adt/ddic-xml.js +49 -53
- package/dist/adt/ddic-xml.js.map +1 -1
- package/dist/adt/devtools.d.ts.map +1 -1
- package/dist/adt/devtools.js +46 -15
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/fm-signature.d.ts +1 -1
- package/dist/adt/fm-signature.js +1 -1
- package/dist/adt/rap-generate.js +1 -1
- package/dist/adt/rap-generate.js.map +1 -1
- package/dist/adt/rap-handlers.d.ts +1 -1
- package/dist/adt/rap-handlers.js +1 -1
- package/dist/adt/refactoring.d.ts.map +1 -1
- package/dist/adt/refactoring.js +11 -14
- package/dist/adt/refactoring.js.map +1 -1
- package/dist/adt/server-driven.d.ts +46 -2
- package/dist/adt/server-driven.d.ts.map +1 -1
- package/dist/adt/server-driven.js +13 -3
- package/dist/adt/server-driven.js.map +1 -1
- package/dist/adt/xml-parser.d.ts +8 -1
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +57 -49
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/authz/policy.d.ts +1 -1
- package/dist/authz/policy.js +1 -1
- package/dist/cache/cache.d.ts +1 -0
- package/dist/cache/cache.d.ts.map +1 -1
- package/dist/cache/cache.js.map +1 -1
- package/dist/cache/inactive-list-cache.d.ts +4 -4
- package/dist/cache/inactive-list-cache.d.ts.map +1 -1
- package/dist/cache/inactive-list-cache.js +19 -12
- package/dist/cache/inactive-list-cache.js.map +1 -1
- package/dist/cache/memory.d.ts +1 -0
- package/dist/cache/memory.d.ts.map +1 -1
- package/dist/cache/memory.js +3 -0
- package/dist/cache/memory.js.map +1 -1
- package/dist/cache/sqlite.d.ts +1 -0
- package/dist/cache/sqlite.d.ts.map +1 -1
- package/dist/cache/sqlite.js +3 -0
- package/dist/cache/sqlite.js.map +1 -1
- package/dist/cache/warmup.d.ts.map +1 -1
- package/dist/cache/warmup.js +85 -38
- package/dist/cache/warmup.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/context/compressor.d.ts.map +1 -1
- package/dist/context/compressor.js +22 -13
- package/dist/context/compressor.js.map +1 -1
- package/dist/context/contract.d.ts.map +1 -1
- package/dist/context/contract.js +4 -3
- package/dist/context/contract.js.map +1 -1
- package/dist/context/deps.d.ts.map +1 -1
- package/dist/context/deps.js +3 -2
- package/dist/context/deps.js.map +1 -1
- package/dist/context/grep.d.ts +3 -1
- package/dist/context/grep.d.ts.map +1 -1
- package/dist/context/grep.js +83 -1
- package/dist/context/grep.js.map +1 -1
- package/dist/context/method-surgery.d.ts.map +1 -1
- package/dist/context/method-surgery.js +3 -2
- package/dist/context/method-surgery.js.map +1 -1
- package/dist/handlers/activate.d.ts +25 -0
- package/dist/handlers/activate.d.ts.map +1 -0
- package/dist/handlers/activate.js +334 -0
- package/dist/handlers/activate.js.map +1 -0
- package/dist/handlers/cache-security.d.ts +22 -0
- package/dist/handlers/cache-security.d.ts.map +1 -0
- package/dist/handlers/cache-security.js +51 -0
- package/dist/handlers/cache-security.js.map +1 -0
- package/dist/handlers/cds-hints.d.ts +26 -0
- package/dist/handlers/cds-hints.d.ts.map +1 -0
- package/dist/handlers/cds-hints.js +380 -0
- package/dist/handlers/cds-hints.js.map +1 -0
- package/dist/handlers/context.d.ts +10 -0
- package/dist/handlers/context.d.ts.map +1 -0
- package/dist/handlers/context.js +344 -0
- package/dist/handlers/context.js.map +1 -0
- package/dist/handlers/diagnose.d.ts +8 -0
- package/dist/handlers/diagnose.d.ts.map +1 -0
- package/dist/handlers/diagnose.js +274 -0
- package/dist/handlers/diagnose.js.map +1 -0
- package/dist/handlers/dispatch.d.ts +39 -0
- package/dist/handlers/dispatch.d.ts.map +1 -0
- package/dist/handlers/dispatch.js +640 -0
- package/dist/handlers/dispatch.js.map +1 -0
- package/dist/handlers/feature-cache.d.ts +26 -0
- package/dist/handlers/feature-cache.d.ts.map +1 -0
- package/dist/handlers/feature-cache.js +45 -0
- package/dist/handlers/feature-cache.js.map +1 -0
- package/dist/handlers/git.d.ts +9 -0
- package/dist/handlers/git.d.ts.map +1 -0
- package/dist/handlers/git.js +227 -0
- package/dist/handlers/git.js.map +1 -0
- package/dist/handlers/lint.d.ts +9 -0
- package/dist/handlers/lint.d.ts.map +1 -0
- package/dist/handlers/lint.js +82 -0
- package/dist/handlers/lint.js.map +1 -0
- package/dist/handlers/manage.d.ts +10 -0
- package/dist/handlers/manage.d.ts.map +1 -0
- package/dist/handlers/manage.js +375 -0
- package/dist/handlers/manage.js.map +1 -0
- package/dist/handlers/navigate.d.ts +8 -0
- package/dist/handlers/navigate.d.ts.map +1 -0
- package/dist/handlers/navigate.js +188 -0
- package/dist/handlers/navigate.js.map +1 -0
- package/dist/handlers/object-types.d.ts +103 -0
- package/dist/handlers/object-types.d.ts.map +1 -0
- package/dist/handlers/object-types.js +476 -0
- package/dist/handlers/object-types.js.map +1 -0
- package/dist/handlers/query.d.ts +7 -0
- package/dist/handlers/query.d.ts.map +1 -0
- package/dist/handlers/query.js +190 -0
- package/dist/handlers/query.js.map +1 -0
- package/dist/handlers/read.d.ts +18 -0
- package/dist/handlers/read.d.ts.map +1 -0
- package/dist/handlers/read.js +581 -0
- package/dist/handlers/read.js.map +1 -0
- package/dist/handlers/schemas.d.ts +28 -26
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +17 -153
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/search.d.ts +24 -0
- package/dist/handlers/search.d.ts.map +1 -0
- package/dist/handlers/search.js +208 -0
- package/dist/handlers/search.js.map +1 -0
- package/dist/handlers/shared.d.ts +19 -0
- package/dist/handlers/shared.d.ts.map +1 -0
- package/dist/handlers/shared.js +23 -0
- package/dist/handlers/shared.js.map +1 -0
- package/dist/handlers/tool-registry.d.ts +44 -0
- package/dist/handlers/tool-registry.d.ts.map +1 -0
- package/dist/handlers/tool-registry.js +152 -0
- package/dist/handlers/tool-registry.js.map +1 -0
- package/dist/handlers/tools.d.ts +9 -0
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +40 -141
- package/dist/handlers/tools.js.map +1 -1
- package/dist/handlers/transport.d.ts +8 -0
- package/dist/handlers/transport.d.ts.map +1 -0
- package/dist/handlers/transport.js +281 -0
- package/dist/handlers/transport.js.map +1 -0
- package/dist/handlers/write/class-surgery.d.ts +18 -0
- package/dist/handlers/write/class-surgery.d.ts.map +1 -0
- package/dist/handlers/write/class-surgery.js +366 -0
- package/dist/handlers/write/class-surgery.js.map +1 -0
- package/dist/handlers/write/context.d.ts +43 -0
- package/dist/handlers/write/context.d.ts.map +1 -0
- package/dist/handlers/write/context.js +5 -0
- package/dist/handlers/write/context.js.map +1 -0
- package/dist/handlers/write/create.d.ts +8 -0
- package/dist/handlers/write/create.d.ts.map +1 -0
- package/dist/handlers/write/create.js +603 -0
- package/dist/handlers/write/create.js.map +1 -0
- package/dist/handlers/write/rap.d.ts +8 -0
- package/dist/handlers/write/rap.d.ts.map +1 -0
- package/dist/handlers/write/rap.js +235 -0
- package/dist/handlers/write/rap.js.map +1 -0
- package/dist/handlers/write/update-delete.d.ts +8 -0
- package/dist/handlers/write/update-delete.d.ts.map +1 -0
- package/dist/handlers/write/update-delete.js +182 -0
- package/dist/handlers/write/update-delete.js.map +1 -0
- package/dist/handlers/write-helpers.d.ts +155 -0
- package/dist/handlers/write-helpers.d.ts.map +1 -0
- package/dist/handlers/write-helpers.js +859 -0
- package/dist/handlers/write-helpers.js.map +1 -0
- package/dist/handlers/write.d.ts +16 -0
- package/dist/handlers/write.d.ts.map +1 -0
- package/dist/handlers/write.js +210 -0
- package/dist/handlers/write.js.map +1 -0
- package/dist/handlers/zod-errors.d.ts +1 -1
- package/dist/handlers/zod-errors.js +1 -1
- package/dist/lint/abaplint-config-cache.d.ts +5 -0
- package/dist/lint/abaplint-config-cache.d.ts.map +1 -0
- package/dist/lint/abaplint-config-cache.js +29 -0
- package/dist/lint/abaplint-config-cache.js.map +1 -0
- package/dist/lint/config-builder.d.ts.map +1 -1
- package/dist/lint/config-builder.js +3 -4
- package/dist/lint/config-builder.js.map +1 -1
- package/dist/lint/lint.d.ts +1 -1
- package/dist/lint/lint.d.ts.map +1 -1
- package/dist/lint/lint.js +3 -2
- package/dist/lint/lint.js.map +1 -1
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +22 -8
- package/dist/server/config.js.map +1 -1
- package/dist/server/mcp-rate-limit.d.ts +1 -1
- package/dist/server/mcp-rate-limit.js +1 -1
- package/dist/server/server.d.ts +1 -1
- package/dist/server/server.js +3 -2
- package/dist/server/server.js.map +1 -1
- package/package.json +15 -10
- package/dist/handlers/intent.d.ts +0 -144
- package/dist/handlers/intent.d.ts.map +0 -1
- package/dist/handlers/intent.js +0 -6782
- package/dist/handlers/intent.js.map +0 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAPSearch handler — repository search (text, tadir lookup, info-system) + query transliteration
|
|
3
|
+
* helpers.
|
|
4
|
+
*/
|
|
5
|
+
import { AdtApiError } from '../adt/errors.js';
|
|
6
|
+
import { classifyTextSearchError } from '../adt/features.js';
|
|
7
|
+
import { cachedFeatures } from './feature-cache.js';
|
|
8
|
+
import { normalizeObjectType } from './object-types.js';
|
|
9
|
+
import { errorResult, textResult } from './shared.js';
|
|
10
|
+
// ─── Search Helpers ─────────────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Transliterate non-ASCII characters in search queries.
|
|
13
|
+
* SAP object names are ASCII-only, so umlauts and accented characters
|
|
14
|
+
* never appear in object names. This prevents wasted searches with
|
|
15
|
+
* German terms like "*Schätzung*" that silently return empty results.
|
|
16
|
+
*/
|
|
17
|
+
export function transliterateQuery(query) {
|
|
18
|
+
// Explicit German umlaut replacements (must come before NFD decomposition)
|
|
19
|
+
let result = query
|
|
20
|
+
.replace(/ä/g, 'AE')
|
|
21
|
+
.replace(/Ä/g, 'AE')
|
|
22
|
+
.replace(/ö/g, 'OE')
|
|
23
|
+
.replace(/Ö/g, 'OE')
|
|
24
|
+
.replace(/ü/g, 'UE')
|
|
25
|
+
.replace(/Ü/g, 'UE')
|
|
26
|
+
.replace(/ß/g, 'SS');
|
|
27
|
+
// General fallback: strip remaining diacritics (é→e, ñ→n, etc.)
|
|
28
|
+
result = result.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
29
|
+
return { normalized: result, changed: result !== query };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Detect if a search query looks like a field/column name rather than
|
|
33
|
+
* an object name. Field names are short, uppercase, and typically don't
|
|
34
|
+
* start with Z/Y (which are custom object prefixes).
|
|
35
|
+
*/
|
|
36
|
+
export function looksLikeFieldName(query) {
|
|
37
|
+
// Wildcard patterns are object searches, not field names
|
|
38
|
+
if (query.includes('*'))
|
|
39
|
+
return false;
|
|
40
|
+
if (query.length === 0 || query.length > 15)
|
|
41
|
+
return false;
|
|
42
|
+
// Must be uppercase letters, digits, underscores only
|
|
43
|
+
if (!/^[A-Z0-9_]+$/.test(query))
|
|
44
|
+
return false;
|
|
45
|
+
// Z/Y prefix → more likely an object name
|
|
46
|
+
if (/^[ZY]/.test(query))
|
|
47
|
+
return false;
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
export async function handleSAPSearch(client, args) {
|
|
51
|
+
const rawQuery = String(args.query ?? '');
|
|
52
|
+
const maxResults = Number(args.maxResults ?? 100);
|
|
53
|
+
const searchType = String(args.searchType ?? 'object');
|
|
54
|
+
if (searchType === 'tadir_lookup') {
|
|
55
|
+
const names = extractLookupNames(rawQuery, args.names);
|
|
56
|
+
if (names.length === 0) {
|
|
57
|
+
return errorResult('SAPSearch(searchType="tadir_lookup") requires names[] or query with at least one name.');
|
|
58
|
+
}
|
|
59
|
+
const objectTypes = extractLookupObjectTypes(args.objectType, args.objectTypes);
|
|
60
|
+
const rawSource = typeof args.source === 'string' ? args.source.toLowerCase() : 'adt';
|
|
61
|
+
const source = rawSource === 'db' || rawSource === 'both' ? rawSource : 'adt';
|
|
62
|
+
// Stamp each match with provenance so a merged 'both' result is unambiguous and
|
|
63
|
+
// viewer tooling can colour-code ghost rows. The DB path already stamps `_origin:'db'`
|
|
64
|
+
// (see `lookupObjectsViaDb`); we stamp ADT matches here.
|
|
65
|
+
const tagOrigin = (lookups, origin) => lookups.map((l) => ({
|
|
66
|
+
...l,
|
|
67
|
+
matches: l.matches.map((m) => ({ ...m, _origin: m._origin ?? origin })),
|
|
68
|
+
}));
|
|
69
|
+
let finalLookups;
|
|
70
|
+
const wildcardNames = names.filter((name) => name.includes('*'));
|
|
71
|
+
const warnings = [];
|
|
72
|
+
let splitBrain = [];
|
|
73
|
+
if (source === 'adt') {
|
|
74
|
+
finalLookups = tagOrigin(await client.lookupObjects(names, { maxResults, objectTypes }), 'adt');
|
|
75
|
+
}
|
|
76
|
+
else if (source === 'db') {
|
|
77
|
+
// The 'db' path bypasses ADT info-system entirely; `lookupObjectsViaDb` already
|
|
78
|
+
// tags matches with `_origin:'db'`. Safety/scope gating runs at handleToolCall
|
|
79
|
+
// and in client.runQuery (FreeSQL operation), so unauthorized callers never reach here.
|
|
80
|
+
finalLookups = await client.lookupObjectsViaDb(names, { maxResults, objectTypes });
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// 'both' — parallel ADT + DB, merge per name with dedupe.
|
|
84
|
+
const [adtLookups, dbLookups] = await Promise.all([
|
|
85
|
+
client.lookupObjects(names, { maxResults, objectTypes }).then((r) => tagOrigin(r, 'adt')),
|
|
86
|
+
client.lookupObjectsViaDb(names, { maxResults, objectTypes }),
|
|
87
|
+
]);
|
|
88
|
+
const dbByName = new Map(dbLookups.map((l) => [l.name.toUpperCase(), l]));
|
|
89
|
+
const adtByName = new Map(adtLookups.map((l) => [l.name.toUpperCase(), l]));
|
|
90
|
+
finalLookups = names.map((rawName) => {
|
|
91
|
+
const upper = rawName.toUpperCase();
|
|
92
|
+
const adt = adtByName.get(upper);
|
|
93
|
+
const db = dbByName.get(upper);
|
|
94
|
+
const adtMatches = adt?.matches ?? [];
|
|
95
|
+
const dbMatches = db?.matches ?? [];
|
|
96
|
+
// Dedupe by (baseObjectType, objectName) — TADIR stores bare types ('DDLS')
|
|
97
|
+
// while ADT info-system returns slash-form ('DDLS/DF'). Stripping the suffix
|
|
98
|
+
// keeps the same logical object from appearing twice in the merged matches.
|
|
99
|
+
// Preserve the more-specific slash form when both originate from ADT+DB.
|
|
100
|
+
const seen = new Map();
|
|
101
|
+
const baseKey = (m) => `${(m.objectType.split('/')[0] || m.objectType).toUpperCase()}\x00${m.objectName.toUpperCase()}`;
|
|
102
|
+
for (const m of adtMatches)
|
|
103
|
+
seen.set(baseKey(m), m);
|
|
104
|
+
for (const m of dbMatches) {
|
|
105
|
+
const k = baseKey(m);
|
|
106
|
+
if (!seen.has(k))
|
|
107
|
+
seen.set(k, m);
|
|
108
|
+
}
|
|
109
|
+
const mergedMatches = [...seen.values()];
|
|
110
|
+
// Split-brain detection: an object is divergent if exactly one source has matches.
|
|
111
|
+
// (Zero matches on both sides = consistent absence; matches on both = consistent presence.)
|
|
112
|
+
if (adtMatches.length > 0 !== dbMatches.length > 0) {
|
|
113
|
+
splitBrain.push(rawName);
|
|
114
|
+
}
|
|
115
|
+
return { name: rawName, found: mergedMatches.length > 0, matches: mergedMatches };
|
|
116
|
+
});
|
|
117
|
+
// Compose human-friendly warnings per split-brain name. Keep them grounded in
|
|
118
|
+
// the most common cause (TADIR ghost from aborted create/delete) so LLM clients
|
|
119
|
+
// can suggest the right cleanup path without inventing a new pointer.
|
|
120
|
+
for (const name of splitBrain) {
|
|
121
|
+
const adt = adtByName.get(name.toUpperCase());
|
|
122
|
+
const db = dbByName.get(name.toUpperCase());
|
|
123
|
+
const adtHas = (adt?.matches.length ?? 0) > 0;
|
|
124
|
+
const dbHas = (db?.matches.length ?? 0) > 0;
|
|
125
|
+
if (dbHas && !adtHas) {
|
|
126
|
+
warnings.push(`${name} exists in TADIR (DB) but ADT cannot resolve it — likely a TADIR ghost from an aborted create/delete cycle. Consider RS_DD_TADIR_CLEANUP or manual SE03 cleanup.`);
|
|
127
|
+
}
|
|
128
|
+
else if (adtHas && !dbHas) {
|
|
129
|
+
warnings.push(`${name} resolves via ADT but is not present in the TADIR row scan — likely a release-time mismatch or a type filter excluding the row. Re-run with broader objectTypes or no filter to confirm.`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Dedupe split-brain names (defensive; merge loop should already avoid duplicates).
|
|
134
|
+
splitBrain = [...new Set(splitBrain)];
|
|
135
|
+
if (wildcardNames.length > 0) {
|
|
136
|
+
warnings.push(`tadir_lookup performs exact-name lookup; wildcard characters are treated literally for: ${wildcardNames.join(', ')}`);
|
|
137
|
+
}
|
|
138
|
+
const missing = finalLookups.filter((l) => !l.found).map((l) => l.name);
|
|
139
|
+
const matchCount = finalLookups.reduce((count, lookup) => count + lookup.matches.length, 0);
|
|
140
|
+
const payload = { count: matchCount, lookups: finalLookups, missing };
|
|
141
|
+
if (splitBrain.length > 0)
|
|
142
|
+
payload.splitBrain = splitBrain;
|
|
143
|
+
if (warnings.length > 0)
|
|
144
|
+
payload.warnings = warnings;
|
|
145
|
+
return textResult(JSON.stringify(payload, null, 2));
|
|
146
|
+
}
|
|
147
|
+
if (searchType === 'source_code') {
|
|
148
|
+
// Source code search: do NOT transliterate — source can contain umlauts in strings/comments
|
|
149
|
+
if (cachedFeatures?.textSearch && !cachedFeatures.textSearch.available) {
|
|
150
|
+
return errorResult(`Source code search is not available on this SAP system. ${cachedFeatures.textSearch.reason ?? ''}` +
|
|
151
|
+
`\nUse SAPSearch with searchType="object" to search by object name instead, or use SAPQuery to search metadata tables.`);
|
|
152
|
+
}
|
|
153
|
+
const objectType = args.objectType ? normalizeObjectType(String(args.objectType)) : undefined;
|
|
154
|
+
const packageName = args.packageName;
|
|
155
|
+
try {
|
|
156
|
+
const results = await client.searchSource(rawQuery, maxResults, objectType, packageName);
|
|
157
|
+
return textResult(JSON.stringify(results, null, 2));
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
if (err instanceof AdtApiError) {
|
|
161
|
+
const permanentCodes = [401, 403, 404, 501];
|
|
162
|
+
if (permanentCodes.includes(err.statusCode)) {
|
|
163
|
+
const classified = classifyTextSearchError(err.statusCode);
|
|
164
|
+
return errorResult(`Source code search is not available on this SAP system. ${classified.reason ?? ''}` +
|
|
165
|
+
`\nUse SAPSearch with searchType="object" to search by object name instead, or use SAPQuery to search metadata tables.`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
throw err;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Object search: transliterate non-ASCII (SAP object names are ASCII-only)
|
|
172
|
+
const { normalized: query, changed: wasTransliterated } = transliterateQuery(rawQuery);
|
|
173
|
+
const transliterationNote = wasTransliterated
|
|
174
|
+
? `Note: Query contained non-ASCII characters. Transliterated "${rawQuery}" → "${query}" (SAP object names are ASCII-only).\n\n`
|
|
175
|
+
: '';
|
|
176
|
+
const results = await client.searchObject(query, maxResults);
|
|
177
|
+
if (Array.isArray(results) && results.length === 0) {
|
|
178
|
+
let hint = '[]' +
|
|
179
|
+
'\n\n' +
|
|
180
|
+
transliterationNote +
|
|
181
|
+
'No objects found. If searching for custom objects, try Z* or Y* prefixes (e.g., "Z*ESTIM*"). ' +
|
|
182
|
+
'If you already found objects in a package, use SAPRead with type=DEVC to list all package contents instead of more searches.';
|
|
183
|
+
if (looksLikeFieldName(query)) {
|
|
184
|
+
const stripped = query.replace(/\*/g, '');
|
|
185
|
+
hint += `\nThis looks like a field/column name. Use SAPQuery("SELECT fieldname, rollname, domname FROM dd03l WHERE fieldname = '${stripped}'") or SAPRead(type='DDLS', include='elements') to find fields.`;
|
|
186
|
+
}
|
|
187
|
+
return textResult(hint);
|
|
188
|
+
}
|
|
189
|
+
return textResult(transliterationNote + JSON.stringify(results, null, 2));
|
|
190
|
+
}
|
|
191
|
+
function extractLookupNames(query, rawNames) {
|
|
192
|
+
const fromNames = Array.isArray(rawNames) ? rawNames.map((n) => String(n).trim()).filter(Boolean) : [];
|
|
193
|
+
const fromQuery = query
|
|
194
|
+
.split(/[,\s]+/)
|
|
195
|
+
.map((n) => n.trim())
|
|
196
|
+
.filter(Boolean);
|
|
197
|
+
return [...new Set([...fromNames, ...fromQuery].map((n) => n.toUpperCase()))];
|
|
198
|
+
}
|
|
199
|
+
function extractLookupObjectTypes(rawObjectType, rawObjectTypes) {
|
|
200
|
+
const types = Array.isArray(rawObjectTypes)
|
|
201
|
+
? rawObjectTypes.map((t) => normalizeObjectType(String(t))).filter(Boolean)
|
|
202
|
+
: [];
|
|
203
|
+
if (typeof rawObjectType === 'string' && rawObjectType.trim()) {
|
|
204
|
+
types.push(normalizeObjectType(rawObjectType));
|
|
205
|
+
}
|
|
206
|
+
return [...new Set(types)];
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/handlers/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared primitives for the intent handlers: the MCP tool-result type and its two constructors.
|
|
3
|
+
*
|
|
4
|
+
* `textResult`/`errorResult` are used by every handler, so they live in a dependency-free module
|
|
5
|
+
* that handler modules can import without pulling in the whole dispatcher.
|
|
6
|
+
*/
|
|
7
|
+
/** MCP tool call result */
|
|
8
|
+
export interface ToolResult {
|
|
9
|
+
content: Array<{
|
|
10
|
+
type: 'text';
|
|
11
|
+
text: string;
|
|
12
|
+
}>;
|
|
13
|
+
isError?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function textResult(text: string): ToolResult;
|
|
16
|
+
export declare function errorResult(message: string): ToolResult;
|
|
17
|
+
/** True when an error body carries an Open-SQL parser/grammar signature (SAPQuery + error hints). */
|
|
18
|
+
export declare function hasSqlParserSignature(text: string): boolean;
|
|
19
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/handlers/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,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,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAEvD;AAED,qGAAqG;AACrG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAU3D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared primitives for the intent handlers: the MCP tool-result type and its two constructors.
|
|
3
|
+
*
|
|
4
|
+
* `textResult`/`errorResult` are used by every handler, so they live in a dependency-free module
|
|
5
|
+
* that handler modules can import without pulling in the whole dispatcher.
|
|
6
|
+
*/
|
|
7
|
+
export function textResult(text) {
|
|
8
|
+
return { content: [{ type: 'text', text }] };
|
|
9
|
+
}
|
|
10
|
+
export function errorResult(message) {
|
|
11
|
+
return { content: [{ type: 'text', text: message }], isError: true };
|
|
12
|
+
}
|
|
13
|
+
/** True when an error body carries an Open-SQL parser/grammar signature (SAPQuery + error hints). */
|
|
14
|
+
export function hasSqlParserSignature(text) {
|
|
15
|
+
const normalized = text.toLowerCase();
|
|
16
|
+
return (normalized.includes('only one select statement is allowed') ||
|
|
17
|
+
normalized.includes('only select statement is allowed') ||
|
|
18
|
+
normalized.includes('invalid query string') ||
|
|
19
|
+
normalized.includes('due to grammar') ||
|
|
20
|
+
normalized.includes('is invalid here') ||
|
|
21
|
+
normalized.includes('is invalid at this position'));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/handlers/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACtC,OAAO,CACL,UAAU,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC3D,UAAU,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACvD,UAAU,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC3C,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACtC,UAAU,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for the per-tool object-type lists.
|
|
3
|
+
*
|
|
4
|
+
* Before this module these arrays were hand-duplicated in both `tools.ts` (JSON Schema enums
|
|
5
|
+
* for LLM clients) and `schemas.ts` (Zod runtime validation), with no check that the two copies
|
|
6
|
+
* agreed. Drift here is a correctness bug: a type advertised to the LLM but rejected by Zod (or
|
|
7
|
+
* vice-versa). Both files now import from here, and `tests/unit/handlers/registry-sync.test.ts`
|
|
8
|
+
* asserts the JSON-Schema enums, the Zod enums, and the dispatch switch all stay in agreement.
|
|
9
|
+
*
|
|
10
|
+
* Each tool has ONE `*_TYPE_TABLE` listing every type with a `btp` flag (true = available on BTP
|
|
11
|
+
* ABAP Environment). The ONPREM (superset) and BTP arrays are DERIVED from that table, so they can
|
|
12
|
+
* never disagree and there is no separate on-prem-only list to keep in sync.
|
|
13
|
+
*
|
|
14
|
+
* To add/remove a SAPRead/SAPWrite/SAPContext type:
|
|
15
|
+
* 1. Add/remove ONE row in the matching `*_TYPE_TABLE` below, with its `btp` flag. (Exception:
|
|
16
|
+
* server-driven types — their rows derive from `SDO_TYPES`, so register the type in
|
|
17
|
+
* src/adt/server-driven.ts instead and both tables pick it up.)
|
|
18
|
+
* 2. Add/remove the matching `case` in the tool's handler module: SAPRead → src/handlers/read.ts,
|
|
19
|
+
* SAPWrite → src/handlers/write.ts (note write routes by URL via objectBasePath/server-driven,
|
|
20
|
+
* not a per-type switch — see the registry-sync write-routing guard), SAPContext →
|
|
21
|
+
* src/handlers/context.ts.
|
|
22
|
+
* 3. Add/remove the ACTION_POLICY entry if it needs a non-default scope (src/authz/policy.ts).
|
|
23
|
+
* The registry-sync + validate:policy checks will fail loudly if any of these drift.
|
|
24
|
+
*
|
|
25
|
+
* The derived arrays keep literal element types (`.map`/`.filter` over an `as const` table), so both
|
|
26
|
+
* `z.enum(...)` (needs a readonly string list) and the JSON-Schema `enum: [...]` consume the exact
|
|
27
|
+
* same literal set, in table order.
|
|
28
|
+
*/
|
|
29
|
+
/** All SAPRead object types available on on-premise (the superset). */
|
|
30
|
+
export declare const SAPREAD_TYPES_ONPREM: ("PROG" | "CLAS" | "INTF" | "INCL" | "FUGR" | "DDLS" | "DCLS" | "BDEF" | "SRVD" | "DDLX" | "SRVB" | "TABL" | "DOMA" | "DTEL" | "MSAG" | "DEVC" | "TRAN" | "VIEW" | "SKTD" | "FUNC" | "DESD" | "DTSC" | "CSNM" | "EVTB" | "EVTO" | "COTA" | "TABLE_CONTENTS" | "TABLE_QUERY" | "SOBJ" | "SYSTEM" | "COMPONENTS" | "MESSAGES" | "TEXT_ELEMENTS" | "VARIANTS" | "BSP" | "BSP_DEPLOY" | "API_STATE" | "INACTIVE_OBJECTS" | "AUTH" | "FEATURE_TOGGLE" | "FTG2" | "ENHO" | "VERSIONS" | "VERSION_SOURCE")[];
|
|
31
|
+
/** SAPRead types available on BTP ABAP Environment (the `btp: true` rows). */
|
|
32
|
+
export declare const SAPREAD_TYPES_BTP: ("CLAS" | "INTF" | "FUGR" | "DDLS" | "DCLS" | "BDEF" | "SRVD" | "DDLX" | "SRVB" | "TABL" | "DOMA" | "DTEL" | "MSAG" | "DEVC" | "SKTD" | "FUNC" | "DESD" | "DTSC" | "CSNM" | "EVTB" | "EVTO" | "COTA" | "TABLE_CONTENTS" | "TABLE_QUERY" | "SYSTEM" | "COMPONENTS" | "MESSAGES" | "BSP" | "BSP_DEPLOY" | "API_STATE" | "INACTIVE_OBJECTS")[];
|
|
33
|
+
/** All SAPWrite object types available on on-premise (the superset). */
|
|
34
|
+
export declare const SAPWRITE_TYPES_ONPREM: ("PROG" | "CLAS" | "INTF" | "INCL" | "FUGR" | "DDLS" | "DCLS" | "BDEF" | "SRVD" | "DDLX" | "SRVB" | "TABL" | "DOMA" | "DTEL" | "MSAG" | "SKTD" | "TABL/DT" | "TABL/DS" | "FUNC" | "DESD" | "DTSC" | "CSNM" | "EVTB" | "EVTO" | "COTA")[];
|
|
35
|
+
/** SAPWrite types available on BTP ABAP Environment (the `btp: true` rows). */
|
|
36
|
+
export declare const SAPWRITE_TYPES_BTP: ("CLAS" | "INTF" | "DDLS" | "DCLS" | "BDEF" | "SRVD" | "DDLX" | "SRVB" | "TABL" | "DOMA" | "DTEL" | "MSAG" | "SKTD" | "TABL/DT" | "TABL/DS" | "DESD" | "DTSC" | "CSNM" | "EVTB" | "EVTO" | "COTA")[];
|
|
37
|
+
/** SAPContext types on on-premise. */
|
|
38
|
+
export declare const SAPCONTEXT_TYPES_ONPREM: ("PROG" | "CLAS" | "INTF" | "DDLS" | "FUNC")[];
|
|
39
|
+
/** SAPContext types on BTP. */
|
|
40
|
+
export declare const SAPCONTEXT_TYPES_BTP: ("CLAS" | "INTF" | "DDLS")[];
|
|
41
|
+
export type SapReadType = (typeof SAPREAD_TYPES_ONPREM)[number];
|
|
42
|
+
export type SapWriteType = (typeof SAPWRITE_TYPES_ONPREM)[number];
|
|
43
|
+
export type SapContextType = (typeof SAPCONTEXT_TYPES_ONPREM)[number];
|
|
44
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/handlers/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAiFH,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,ueAAsB,CAAC;AACxD,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,6UAAmB,CAAC;AA8BlD,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,0OAAuB,CAAC;AAC1D,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,sMAAoB,CAAC;AAYpD,sCAAsC;AACtC,eAAO,MAAM,uBAAuB,gDAAyB,CAAC;AAC9D,+BAA+B;AAC/B,eAAO,MAAM,oBAAoB,8BAAsB,CAAC;AAIxD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for the per-tool object-type lists.
|
|
3
|
+
*
|
|
4
|
+
* Before this module these arrays were hand-duplicated in both `tools.ts` (JSON Schema enums
|
|
5
|
+
* for LLM clients) and `schemas.ts` (Zod runtime validation), with no check that the two copies
|
|
6
|
+
* agreed. Drift here is a correctness bug: a type advertised to the LLM but rejected by Zod (or
|
|
7
|
+
* vice-versa). Both files now import from here, and `tests/unit/handlers/registry-sync.test.ts`
|
|
8
|
+
* asserts the JSON-Schema enums, the Zod enums, and the dispatch switch all stay in agreement.
|
|
9
|
+
*
|
|
10
|
+
* Each tool has ONE `*_TYPE_TABLE` listing every type with a `btp` flag (true = available on BTP
|
|
11
|
+
* ABAP Environment). The ONPREM (superset) and BTP arrays are DERIVED from that table, so they can
|
|
12
|
+
* never disagree and there is no separate on-prem-only list to keep in sync.
|
|
13
|
+
*
|
|
14
|
+
* To add/remove a SAPRead/SAPWrite/SAPContext type:
|
|
15
|
+
* 1. Add/remove ONE row in the matching `*_TYPE_TABLE` below, with its `btp` flag. (Exception:
|
|
16
|
+
* server-driven types — their rows derive from `SDO_TYPES`, so register the type in
|
|
17
|
+
* src/adt/server-driven.ts instead and both tables pick it up.)
|
|
18
|
+
* 2. Add/remove the matching `case` in the tool's handler module: SAPRead → src/handlers/read.ts,
|
|
19
|
+
* SAPWrite → src/handlers/write.ts (note write routes by URL via objectBasePath/server-driven,
|
|
20
|
+
* not a per-type switch — see the registry-sync write-routing guard), SAPContext →
|
|
21
|
+
* src/handlers/context.ts.
|
|
22
|
+
* 3. Add/remove the ACTION_POLICY entry if it needs a non-default scope (src/authz/policy.ts).
|
|
23
|
+
* The registry-sync + validate:policy checks will fail loudly if any of these drift.
|
|
24
|
+
*
|
|
25
|
+
* The derived arrays keep literal element types (`.map`/`.filter` over an `as const` table), so both
|
|
26
|
+
* `z.enum(...)` (needs a readonly string list) and the JSON-Schema `enum: [...]` consume the exact
|
|
27
|
+
* same literal set, in table order.
|
|
28
|
+
*/
|
|
29
|
+
import { SDO_TYPES } from '../adt/server-driven.js';
|
|
30
|
+
/**
|
|
31
|
+
* Pull the on-prem (all rows) + BTP (btp:true rows) type arrays out of an `as const` type table.
|
|
32
|
+
* The return type is annotated explicitly — inside the generic body `r.type` is seen as plain
|
|
33
|
+
* `string` (property access resolves via the constraint), so without the annotation every derived
|
|
34
|
+
* array and union would silently widen from literal types to `string`, losing compile-time typo
|
|
35
|
+
* protection for consumers. Throws on a duplicate `type` row at module load: Zod's z.enum would
|
|
36
|
+
* silently dedupe it while the JSON-Schema `enum:` shipped to LLM clients would carry the
|
|
37
|
+
* duplicate — strict clients reject such a schema, and no equality test could catch it because
|
|
38
|
+
* every comparison derives from this same table.
|
|
39
|
+
*/
|
|
40
|
+
function deriveTypeArrays(table) {
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
for (const row of table) {
|
|
43
|
+
if (seen.has(row.type))
|
|
44
|
+
throw new Error(`tool-registry: duplicate type row '${row.type}' in a *_TYPE_TABLE`);
|
|
45
|
+
seen.add(row.type);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
onprem: table.map((r) => r.type),
|
|
49
|
+
btp: table.filter((r) => r.btp).map((r) => r.type),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// ─── SAPRead ────────────────────────────────────────────────────────
|
|
53
|
+
const SAPREAD_TYPE_TABLE = [
|
|
54
|
+
{ type: 'PROG', btp: false },
|
|
55
|
+
{ type: 'CLAS', btp: true },
|
|
56
|
+
{ type: 'INTF', btp: true },
|
|
57
|
+
{ type: 'FUNC', btp: true },
|
|
58
|
+
{ type: 'FUGR', btp: true },
|
|
59
|
+
{ type: 'INCL', btp: false },
|
|
60
|
+
{ type: 'DDLS', btp: true },
|
|
61
|
+
{ type: 'DCLS', btp: true },
|
|
62
|
+
{ type: 'DDLX', btp: true },
|
|
63
|
+
{ type: 'BDEF', btp: true },
|
|
64
|
+
{ type: 'SRVD', btp: true },
|
|
65
|
+
{ type: 'SRVB', btp: true },
|
|
66
|
+
{ type: 'SKTD', btp: true },
|
|
67
|
+
{ type: 'TABL', btp: true },
|
|
68
|
+
{ type: 'VIEW', btp: false },
|
|
69
|
+
{ type: 'DOMA', btp: true },
|
|
70
|
+
{ type: 'DTEL', btp: true },
|
|
71
|
+
{ type: 'TRAN', btp: false },
|
|
72
|
+
{ type: 'TABLE_CONTENTS', btp: true },
|
|
73
|
+
{ type: 'TABLE_QUERY', btp: true },
|
|
74
|
+
{ type: 'DEVC', btp: true },
|
|
75
|
+
{ type: 'SOBJ', btp: false },
|
|
76
|
+
{ type: 'SYSTEM', btp: true },
|
|
77
|
+
{ type: 'COMPONENTS', btp: true },
|
|
78
|
+
// MSAG is the canonical TADIR R3TR type for message classes (table T100). 'MESSAGES' is kept as a
|
|
79
|
+
// deprecated alias for one minor release; both resolve to the same handler. See
|
|
80
|
+
// research/abap-types/types/msag.md and docs/plans/completed/audit-symmetry-and-ftg2-rename.md.
|
|
81
|
+
{ type: 'MSAG', btp: true },
|
|
82
|
+
{ type: 'MESSAGES', btp: true },
|
|
83
|
+
{ type: 'TEXT_ELEMENTS', btp: false },
|
|
84
|
+
{ type: 'VARIANTS', btp: false },
|
|
85
|
+
{ type: 'BSP', btp: true },
|
|
86
|
+
{ type: 'BSP_DEPLOY', btp: true },
|
|
87
|
+
{ type: 'API_STATE', btp: true },
|
|
88
|
+
{ type: 'INACTIVE_OBJECTS', btp: true },
|
|
89
|
+
{ type: 'AUTH', btp: false },
|
|
90
|
+
// FTG2 is an ARC-1-private invented identifier (see research/abap-types/types/ftg2.md).
|
|
91
|
+
// FEATURE_TOGGLE is the new canonical name; FTG2 stays as deprecated alias for one minor.
|
|
92
|
+
{ type: 'FEATURE_TOGGLE', btp: false },
|
|
93
|
+
{ type: 'FTG2', btp: false },
|
|
94
|
+
{ type: 'ENHO', btp: false },
|
|
95
|
+
{ type: 'VERSIONS', btp: false },
|
|
96
|
+
{ type: 'VERSION_SOURCE', btp: false },
|
|
97
|
+
// Server-driven objects (ABAP Platform 2025 / SAP_BASIS 8.16+) — generic AFF read path,
|
|
98
|
+
// discovery-gated (src/adt/server-driven.ts). Rows DERIVE from SDO_TYPES, so registering a type
|
|
99
|
+
// there is the only step: btp is true by construction (SDO types are 8.16+; runtime availability
|
|
100
|
+
// is discovery-gated), and deriveTypeArrays' duplicate guard throws if a hand row ever collides.
|
|
101
|
+
...SDO_TYPES.map((t) => ({ type: t, btp: true })),
|
|
102
|
+
];
|
|
103
|
+
const sapReadTypes = deriveTypeArrays(SAPREAD_TYPE_TABLE);
|
|
104
|
+
/** All SAPRead object types available on on-premise (the superset). */
|
|
105
|
+
export const SAPREAD_TYPES_ONPREM = sapReadTypes.onprem;
|
|
106
|
+
/** SAPRead types available on BTP ABAP Environment (the `btp: true` rows). */
|
|
107
|
+
export const SAPREAD_TYPES_BTP = sapReadTypes.btp;
|
|
108
|
+
// ─── SAPWrite ───────────────────────────────────────────────────────
|
|
109
|
+
const SAPWRITE_TYPE_TABLE = [
|
|
110
|
+
{ type: 'PROG', btp: false },
|
|
111
|
+
{ type: 'CLAS', btp: true },
|
|
112
|
+
{ type: 'INTF', btp: true },
|
|
113
|
+
{ type: 'FUNC', btp: false },
|
|
114
|
+
{ type: 'FUGR', btp: false },
|
|
115
|
+
{ type: 'INCL', btp: false },
|
|
116
|
+
{ type: 'DDLS', btp: true },
|
|
117
|
+
{ type: 'DCLS', btp: true },
|
|
118
|
+
{ type: 'DDLX', btp: true },
|
|
119
|
+
{ type: 'BDEF', btp: true },
|
|
120
|
+
{ type: 'SRVD', btp: true },
|
|
121
|
+
{ type: 'SRVB', btp: true },
|
|
122
|
+
{ type: 'SKTD', btp: true },
|
|
123
|
+
{ type: 'TABL', btp: true },
|
|
124
|
+
// Subtype routing for create — see docs/plans/completed/fix-tabl-ds-create-routing.md.
|
|
125
|
+
{ type: 'TABL/DT', btp: true },
|
|
126
|
+
{ type: 'TABL/DS', btp: true },
|
|
127
|
+
{ type: 'DOMA', btp: true },
|
|
128
|
+
{ type: 'DTEL', btp: true },
|
|
129
|
+
{ type: 'MSAG', btp: true },
|
|
130
|
+
// Server-driven objects (8.16+) — write via the generic blue:blueSource + AFF JSON engine.
|
|
131
|
+
// Rows derive from SDO_TYPES exactly like the SAPRead table above.
|
|
132
|
+
...SDO_TYPES.map((t) => ({ type: t, btp: true })),
|
|
133
|
+
];
|
|
134
|
+
const sapWriteTypes = deriveTypeArrays(SAPWRITE_TYPE_TABLE);
|
|
135
|
+
/** All SAPWrite object types available on on-premise (the superset). */
|
|
136
|
+
export const SAPWRITE_TYPES_ONPREM = sapWriteTypes.onprem;
|
|
137
|
+
/** SAPWrite types available on BTP ABAP Environment (the `btp: true` rows). */
|
|
138
|
+
export const SAPWRITE_TYPES_BTP = sapWriteTypes.btp;
|
|
139
|
+
// ─── SAPContext ─────────────────────────────────────────────────────
|
|
140
|
+
const SAPCONTEXT_TYPE_TABLE = [
|
|
141
|
+
{ type: 'CLAS', btp: true },
|
|
142
|
+
{ type: 'INTF', btp: true },
|
|
143
|
+
{ type: 'PROG', btp: false },
|
|
144
|
+
{ type: 'FUNC', btp: false },
|
|
145
|
+
{ type: 'DDLS', btp: true },
|
|
146
|
+
];
|
|
147
|
+
const sapContextTypes = deriveTypeArrays(SAPCONTEXT_TYPE_TABLE);
|
|
148
|
+
/** SAPContext types on on-premise. */
|
|
149
|
+
export const SAPCONTEXT_TYPES_ONPREM = sapContextTypes.onprem;
|
|
150
|
+
/** SAPContext types on BTP. */
|
|
151
|
+
export const SAPCONTEXT_TYPES_BTP = sapContextTypes.btp;
|
|
152
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/handlers/tool-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/handlers/tools.d.ts
CHANGED
|
@@ -18,10 +18,19 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import type { ResolvedFeatures } from '../adt/types.js';
|
|
20
20
|
import type { ServerConfig } from '../server/types.js';
|
|
21
|
+
/** MCP tool behavior annotations (a subset of the spec; all optional, all advisory hints). */
|
|
22
|
+
export interface ToolAnnotations {
|
|
23
|
+
readOnlyHint?: boolean;
|
|
24
|
+
destructiveHint?: boolean;
|
|
25
|
+
idempotentHint?: boolean;
|
|
26
|
+
openWorldHint?: boolean;
|
|
27
|
+
title?: string;
|
|
28
|
+
}
|
|
21
29
|
export interface ToolDefinition {
|
|
22
30
|
name: string;
|
|
23
31
|
description: string;
|
|
24
32
|
inputSchema: Record<string, unknown>;
|
|
33
|
+
annotations?: ToolAnnotations;
|
|
25
34
|
}
|
|
26
35
|
export declare function getToolDefinitions(config: ServerConfig, textSearchAvailable?: boolean, resolvedFeatures?: ResolvedFeatures): ToolDefinition[];
|
|
27
36
|
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/handlers/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/handlers/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYvD,8FAA8F;AAC9F,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAgbD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,mBAAmB,CAAC,EAAE,OAAO,EAC7B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,cAAc,EAAE,CA6nClB"}
|