@mcp-abap-adt/llm-agent 5.0.0 → 5.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 (46) hide show
  1. package/README.md +12 -1
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/smart-agent/agent.d.ts +5 -29
  7. package/dist/smart-agent/agent.d.ts.map +1 -1
  8. package/dist/smart-agent/agent.js +2 -7
  9. package/dist/smart-agent/agent.js.map +1 -1
  10. package/dist/smart-agent/api-adapters/anthropic-adapter.d.ts +11 -0
  11. package/dist/smart-agent/api-adapters/anthropic-adapter.d.ts.map +1 -0
  12. package/dist/smart-agent/api-adapters/anthropic-adapter.js +354 -0
  13. package/dist/smart-agent/api-adapters/anthropic-adapter.js.map +1 -0
  14. package/dist/smart-agent/api-adapters/index.d.ts +3 -0
  15. package/dist/smart-agent/api-adapters/index.d.ts.map +1 -0
  16. package/dist/smart-agent/api-adapters/index.js +3 -0
  17. package/dist/smart-agent/api-adapters/index.js.map +1 -0
  18. package/dist/smart-agent/api-adapters/openai-adapter.d.ts +11 -0
  19. package/dist/smart-agent/api-adapters/openai-adapter.d.ts.map +1 -0
  20. package/dist/smart-agent/api-adapters/openai-adapter.js +277 -0
  21. package/dist/smart-agent/api-adapters/openai-adapter.js.map +1 -0
  22. package/dist/smart-agent/builder.d.ts +8 -0
  23. package/dist/smart-agent/builder.d.ts.map +1 -1
  24. package/dist/smart-agent/builder.js +22 -0
  25. package/dist/smart-agent/builder.js.map +1 -1
  26. package/dist/smart-agent/interfaces/agent-contracts.d.ts +30 -0
  27. package/dist/smart-agent/interfaces/agent-contracts.d.ts.map +1 -0
  28. package/dist/smart-agent/interfaces/agent-contracts.js +8 -0
  29. package/dist/smart-agent/interfaces/agent-contracts.js.map +1 -0
  30. package/dist/smart-agent/interfaces/api-adapter.d.ts +38 -0
  31. package/dist/smart-agent/interfaces/api-adapter.d.ts.map +1 -0
  32. package/dist/smart-agent/interfaces/api-adapter.js +9 -0
  33. package/dist/smart-agent/interfaces/api-adapter.js.map +1 -0
  34. package/dist/smart-agent/interfaces/index.d.ts +2 -0
  35. package/dist/smart-agent/interfaces/index.d.ts.map +1 -1
  36. package/dist/smart-agent/interfaces/index.js +2 -0
  37. package/dist/smart-agent/interfaces/index.js.map +1 -1
  38. package/dist/smart-agent/plugins/types.d.ts +4 -0
  39. package/dist/smart-agent/plugins/types.d.ts.map +1 -1
  40. package/dist/smart-agent/plugins/types.js +9 -0
  41. package/dist/smart-agent/plugins/types.js.map +1 -1
  42. package/dist/smart-agent/smart-server.d.ts +6 -0
  43. package/dist/smart-agent/smart-server.d.ts.map +1 -1
  44. package/dist/smart-agent/smart-server.js +82 -2
  45. package/dist/smart-agent/smart-server.js.map +1 -1
  46. package/package.json +2 -2
@@ -0,0 +1,354 @@
1
+ // src/smart-agent/api-adapters/anthropic-adapter.ts
2
+ import { randomUUID } from 'node:crypto';
3
+ import { AdapterValidationError, } from '../interfaces/api-adapter.js';
4
+ import { toToolCallDelta } from '../utils/tool-call-deltas.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Helpers
7
+ // ---------------------------------------------------------------------------
8
+ function mapStopReason(r) {
9
+ switch (r) {
10
+ case 'stop':
11
+ return 'end_turn';
12
+ case 'tool_calls':
13
+ return 'tool_use';
14
+ case 'error':
15
+ return 'end_turn';
16
+ default:
17
+ return 'max_tokens';
18
+ }
19
+ }
20
+ function sse(event, data) {
21
+ return { event, data: JSON.stringify(data) };
22
+ }
23
+ // ---------------------------------------------------------------------------
24
+ // AnthropicApiAdapter
25
+ // ---------------------------------------------------------------------------
26
+ export class AnthropicApiAdapter {
27
+ name = 'anthropic';
28
+ // -------------------------------------------------------------------------
29
+ // normalizeRequest
30
+ // -------------------------------------------------------------------------
31
+ normalizeRequest(request) {
32
+ if (typeof request !== 'object' || request === null) {
33
+ throw new AdapterValidationError('Request body must be a JSON object');
34
+ }
35
+ const body = request;
36
+ if (!Array.isArray(body.messages)) {
37
+ throw new AdapterValidationError('messages must be a non-empty array');
38
+ }
39
+ if (body.messages.length === 0) {
40
+ throw new AdapterValidationError('messages must be a non-empty array');
41
+ }
42
+ const messages = [];
43
+ // Extract system field (Anthropic has it separate from messages)
44
+ if (typeof body.system === 'string' && body.system) {
45
+ messages.push({ role: 'system', content: body.system });
46
+ }
47
+ else if (Array.isArray(body.system)) {
48
+ // system can be an array of content blocks [{type: "text", text: "..."}]
49
+ const systemText = body.system
50
+ .filter((b) => b.type === 'text')
51
+ .map((b) => b.text)
52
+ .join('\n');
53
+ if (systemText) {
54
+ messages.push({ role: 'system', content: systemText });
55
+ }
56
+ }
57
+ // Convert Anthropic messages to normalized format
58
+ for (const msg of body.messages) {
59
+ const role = msg.role;
60
+ if (role === 'user') {
61
+ if (typeof msg.content === 'string') {
62
+ messages.push({ role: 'user', content: msg.content });
63
+ }
64
+ else if (Array.isArray(msg.content)) {
65
+ const blocks = msg.content;
66
+ const textParts = [];
67
+ for (const block of blocks) {
68
+ if (block.type === 'text') {
69
+ textParts.push(block.text);
70
+ }
71
+ else if (block.type === 'tool_result') {
72
+ // tool_result blocks become separate tool messages
73
+ const toolContent = typeof block.content === 'string'
74
+ ? block.content
75
+ : JSON.stringify(block.content);
76
+ messages.push({
77
+ role: 'tool',
78
+ content: toolContent,
79
+ tool_call_id: block.tool_use_id,
80
+ });
81
+ }
82
+ }
83
+ if (textParts.length > 0) {
84
+ messages.push({ role: 'user', content: textParts.join('\n') });
85
+ }
86
+ }
87
+ }
88
+ else if (role === 'assistant') {
89
+ if (typeof msg.content === 'string') {
90
+ messages.push({ role: 'assistant', content: msg.content });
91
+ }
92
+ else if (Array.isArray(msg.content)) {
93
+ const blocks = msg.content;
94
+ const textParts = [];
95
+ const toolCalls = [];
96
+ for (const block of blocks) {
97
+ if (block.type === 'text') {
98
+ textParts.push(block.text);
99
+ }
100
+ else if (block.type === 'tool_use') {
101
+ toolCalls.push({
102
+ id: block.id,
103
+ type: 'function',
104
+ function: {
105
+ name: block.name,
106
+ arguments: JSON.stringify(block.input),
107
+ },
108
+ });
109
+ }
110
+ }
111
+ const assistantMsg = {
112
+ role: 'assistant',
113
+ content: textParts.join('\n') || null,
114
+ };
115
+ if (toolCalls.length > 0) {
116
+ assistantMsg.tool_calls = toolCalls;
117
+ }
118
+ messages.push(assistantMsg);
119
+ }
120
+ }
121
+ }
122
+ const options = {};
123
+ if (body.temperature !== undefined)
124
+ options.temperature = body.temperature;
125
+ if (body.max_tokens !== undefined)
126
+ options.maxTokens = body.max_tokens;
127
+ if (body.top_p !== undefined)
128
+ options.topP = body.top_p;
129
+ if (Array.isArray(body.tools))
130
+ options.externalTools = body.tools;
131
+ if (typeof body.model === 'string')
132
+ options.model = body.model;
133
+ const id = `msg_${randomUUID()}`;
134
+ const context = {
135
+ adapterName: this.name,
136
+ protocol: {
137
+ id,
138
+ model: body.model ?? 'smart-agent',
139
+ },
140
+ };
141
+ return {
142
+ messages,
143
+ stream: body.stream === true,
144
+ options,
145
+ context,
146
+ };
147
+ }
148
+ // -------------------------------------------------------------------------
149
+ // formatResult
150
+ // -------------------------------------------------------------------------
151
+ formatResult(response, context) {
152
+ const { id, model } = context.protocol;
153
+ const content = [];
154
+ if (response.content) {
155
+ content.push({ type: 'text', text: response.content });
156
+ }
157
+ if (response.toolCalls) {
158
+ for (const tc of response.toolCalls) {
159
+ content.push({
160
+ type: 'tool_use',
161
+ id: tc.id,
162
+ name: tc.function.name,
163
+ input: JSON.parse(tc.function.arguments),
164
+ });
165
+ }
166
+ }
167
+ // Ensure at least one content block
168
+ if (content.length === 0) {
169
+ content.push({ type: 'text', text: '' });
170
+ }
171
+ return {
172
+ id,
173
+ type: 'message',
174
+ role: 'assistant',
175
+ model,
176
+ content,
177
+ stop_reason: mapStopReason(response.stopReason),
178
+ usage: {
179
+ input_tokens: response.usage?.promptTokens ?? 0,
180
+ output_tokens: response.usage?.completionTokens ?? 0,
181
+ },
182
+ };
183
+ }
184
+ // -------------------------------------------------------------------------
185
+ // formatError
186
+ // -------------------------------------------------------------------------
187
+ formatError(error, _context) {
188
+ return {
189
+ type: 'error',
190
+ error: {
191
+ type: 'api_error',
192
+ message: error.message,
193
+ },
194
+ };
195
+ }
196
+ // -------------------------------------------------------------------------
197
+ // transformStream
198
+ // -------------------------------------------------------------------------
199
+ async *transformStream(source, context) {
200
+ const { id, model } = context.protocol;
201
+ let messageStarted = false;
202
+ let blockIndex = 0;
203
+ let blockOpen = false;
204
+ let blockType = 'text';
205
+ let lastUsage = null;
206
+ // Helpers to emit block lifecycle events
207
+ const openTextBlock = () => {
208
+ blockOpen = true;
209
+ blockType = 'text';
210
+ return sse('content_block_start', {
211
+ type: 'content_block_start',
212
+ index: blockIndex,
213
+ content_block: { type: 'text', text: '' },
214
+ });
215
+ };
216
+ const closeBlock = () => {
217
+ blockOpen = false;
218
+ const evt = sse('content_block_stop', {
219
+ type: 'content_block_stop',
220
+ index: blockIndex,
221
+ });
222
+ blockIndex++;
223
+ return evt;
224
+ };
225
+ const emitMessageStart = () => {
226
+ messageStarted = true;
227
+ return sse('message_start', {
228
+ type: 'message_start',
229
+ message: {
230
+ id,
231
+ type: 'message',
232
+ role: 'assistant',
233
+ model,
234
+ content: [],
235
+ stop_reason: null,
236
+ usage: { input_tokens: 0, output_tokens: 0 },
237
+ },
238
+ });
239
+ };
240
+ for await (const chunk of source) {
241
+ // Error chunk
242
+ if (!chunk.ok) {
243
+ if (!messageStarted)
244
+ yield emitMessageStart();
245
+ if (blockOpen)
246
+ yield closeBlock();
247
+ yield sse('message_delta', {
248
+ type: 'message_delta',
249
+ delta: { stop_reason: 'end_turn' },
250
+ usage: lastUsage ?? { input_tokens: 0, output_tokens: 0 },
251
+ });
252
+ yield sse('message_stop', { type: 'message_stop' });
253
+ return;
254
+ }
255
+ const val = chunk.value;
256
+ // Skip heartbeat-only and timing-only chunks
257
+ if (!val.content &&
258
+ !val.toolCalls &&
259
+ !val.finishReason &&
260
+ !val.usage &&
261
+ (val.heartbeat || val.timing)) {
262
+ continue;
263
+ }
264
+ // Capture usage
265
+ if (val.usage) {
266
+ lastUsage = {
267
+ input_tokens: val.usage.promptTokens,
268
+ output_tokens: val.usage.completionTokens,
269
+ };
270
+ }
271
+ // Skip chunks that carry only usage
272
+ if (!val.content && !val.toolCalls && !val.finishReason) {
273
+ continue;
274
+ }
275
+ // Ensure message_start is emitted
276
+ if (!messageStarted)
277
+ yield emitMessageStart();
278
+ // Text content
279
+ if (val.content) {
280
+ if (!blockOpen || blockType !== 'text') {
281
+ if (blockOpen)
282
+ yield closeBlock();
283
+ yield openTextBlock();
284
+ }
285
+ yield sse('content_block_delta', {
286
+ type: 'content_block_delta',
287
+ index: blockIndex,
288
+ delta: { type: 'text_delta', text: val.content },
289
+ });
290
+ }
291
+ // Tool calls
292
+ if (val.toolCalls) {
293
+ // Close text block if open
294
+ if (blockOpen && blockType === 'text') {
295
+ yield closeBlock();
296
+ }
297
+ for (const call of val.toolCalls) {
298
+ const tc = toToolCallDelta(call, 0);
299
+ // Open tool_use block
300
+ blockOpen = true;
301
+ blockType = 'tool_use';
302
+ yield sse('content_block_start', {
303
+ type: 'content_block_start',
304
+ index: blockIndex,
305
+ content_block: {
306
+ type: 'tool_use',
307
+ id: tc.id ?? `toolu_${randomUUID()}`,
308
+ name: tc.name ?? '',
309
+ },
310
+ });
311
+ // Emit input_json_delta
312
+ if (tc.arguments) {
313
+ yield sse('content_block_delta', {
314
+ type: 'content_block_delta',
315
+ index: blockIndex,
316
+ delta: {
317
+ type: 'input_json_delta',
318
+ partial_json: tc.arguments,
319
+ },
320
+ });
321
+ }
322
+ // Close tool_use block
323
+ yield closeBlock();
324
+ }
325
+ }
326
+ // Finish reason
327
+ if (val.finishReason) {
328
+ if (blockOpen)
329
+ yield closeBlock();
330
+ yield sse('message_delta', {
331
+ type: 'message_delta',
332
+ delta: {
333
+ stop_reason: mapStopReason(val.finishReason),
334
+ },
335
+ usage: lastUsage ?? { input_tokens: 0, output_tokens: 0 },
336
+ });
337
+ yield sse('message_stop', { type: 'message_stop' });
338
+ return;
339
+ }
340
+ }
341
+ // Stream ended without finishReason — emit closing events
342
+ if (!messageStarted)
343
+ yield emitMessageStart();
344
+ if (blockOpen)
345
+ yield closeBlock();
346
+ yield sse('message_delta', {
347
+ type: 'message_delta',
348
+ delta: { stop_reason: 'end_turn' },
349
+ usage: lastUsage ?? { input_tokens: 0, output_tokens: 0 },
350
+ });
351
+ yield sse('message_stop', { type: 'message_stop' });
352
+ }
353
+ }
354
+ //# sourceMappingURL=anthropic-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-adapter.js","sourceRoot":"","sources":["../../../src/smart-agent/api-adapters/anthropic-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { AnthropicApiAdapter } from './anthropic-adapter.js';
2
+ export { OpenAiApiAdapter } from './openai-adapter.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/api-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { AnthropicApiAdapter } from './anthropic-adapter.js';
2
+ export { OpenAiApiAdapter } from './openai-adapter.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smart-agent/api-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { OrchestratorError, SmartAgentResponse } from '../interfaces/agent-contracts.js';
2
+ import { type ApiRequestContext, type ApiSseEvent, type ILlmApiAdapter, type NormalizedRequest } from '../interfaces/api-adapter.js';
3
+ import type { LlmStreamChunk, Result } from '../interfaces/types.js';
4
+ export declare class OpenAiApiAdapter implements ILlmApiAdapter {
5
+ readonly name = "openai";
6
+ normalizeRequest(request: unknown): NormalizedRequest;
7
+ formatResult(response: SmartAgentResponse, context: ApiRequestContext): unknown;
8
+ formatError(error: OrchestratorError, _context: ApiRequestContext): unknown;
9
+ transformStream(source: AsyncIterable<Result<LlmStreamChunk, OrchestratorError>>, context: ApiRequestContext): AsyncIterable<ApiSseEvent>;
10
+ }
11
+ //# sourceMappingURL=openai-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/api-adapters/openai-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA0BrE,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,IAAI,YAAY;IAMzB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB;IAiDrD,YAAY,CACV,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,iBAAiB,GACzB,OAAO;IAyCV,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAcpE,eAAe,CACpB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,EAChE,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAAC,WAAW,CAAC;CAuL9B"}