@aurelo_npm/sdk 0.1.0 → 0.1.2
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/dist/index.d.ts +60 -0
- package/dist/index.js +110 -3
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -26,11 +26,48 @@ export interface AureloSession {
|
|
|
26
26
|
status: 'active' | 'closed' | 'rotation_required';
|
|
27
27
|
rotationReason?: string;
|
|
28
28
|
}
|
|
29
|
+
export interface AureloExposedTool {
|
|
30
|
+
type?: 'function' | 'mcp' | 'hosted' | 'custom' | 'extension' | 'http' | string;
|
|
31
|
+
name?: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
inputSchema?: Record<string, unknown>;
|
|
34
|
+
input_schema?: Record<string, unknown>;
|
|
35
|
+
parameters?: Record<string, unknown>;
|
|
36
|
+
function?: {
|
|
37
|
+
name: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
parameters?: Record<string, unknown>;
|
|
40
|
+
};
|
|
41
|
+
server_label?: string;
|
|
42
|
+
server_url?: string;
|
|
43
|
+
server_description?: string;
|
|
44
|
+
allowed_tools?: string[];
|
|
45
|
+
require_approval?: unknown;
|
|
46
|
+
runtime?: {
|
|
47
|
+
kind?: 'extension' | 'mcp' | 'http' | 'local' | string;
|
|
48
|
+
clientId?: string;
|
|
49
|
+
serverUrl?: string;
|
|
50
|
+
endpoint?: string;
|
|
51
|
+
url?: string;
|
|
52
|
+
[key: string]: unknown;
|
|
53
|
+
};
|
|
54
|
+
[key: string]: unknown;
|
|
55
|
+
}
|
|
56
|
+
export interface AureloRequestContext {
|
|
57
|
+
tools?: unknown[];
|
|
58
|
+
exposedTools?: AureloExposedTool[];
|
|
59
|
+
toolStackId?: string;
|
|
60
|
+
permissionsVersion?: string | number;
|
|
61
|
+
contextId?: string;
|
|
62
|
+
contextVersion?: string | number;
|
|
63
|
+
[key: string]: unknown;
|
|
64
|
+
}
|
|
29
65
|
export interface AureloResponseRequest {
|
|
30
66
|
model: string;
|
|
31
67
|
input?: unknown;
|
|
32
68
|
stream?: boolean;
|
|
33
69
|
metadata?: Record<string, unknown>;
|
|
70
|
+
context?: AureloRequestContext;
|
|
34
71
|
[key: string]: unknown;
|
|
35
72
|
}
|
|
36
73
|
export interface AureloReconnectRequest {
|
|
@@ -38,6 +75,8 @@ export interface AureloReconnectRequest {
|
|
|
38
75
|
cursor?: string | number;
|
|
39
76
|
model?: string;
|
|
40
77
|
input?: unknown;
|
|
78
|
+
metadata?: Record<string, unknown>;
|
|
79
|
+
context?: AureloRequestContext;
|
|
41
80
|
signal?: AbortSignal;
|
|
42
81
|
}
|
|
43
82
|
export interface AureloQueueMessageRequest {
|
|
@@ -48,6 +87,25 @@ export interface AureloQueueMessageRequest {
|
|
|
48
87
|
publicModel?: string;
|
|
49
88
|
model?: string;
|
|
50
89
|
metadata?: Record<string, unknown>;
|
|
90
|
+
context?: AureloRequestContext;
|
|
91
|
+
signal?: AbortSignal;
|
|
92
|
+
}
|
|
93
|
+
export interface AureloToolResultRequest {
|
|
94
|
+
sessionId?: string;
|
|
95
|
+
requestId?: string;
|
|
96
|
+
callId?: string;
|
|
97
|
+
toolCallId?: string;
|
|
98
|
+
previousResponseId?: string;
|
|
99
|
+
previous_response_id?: string;
|
|
100
|
+
model?: string;
|
|
101
|
+
publicModel?: string;
|
|
102
|
+
stream?: boolean;
|
|
103
|
+
context?: AureloRequestContext;
|
|
104
|
+
tools?: unknown[];
|
|
105
|
+
output?: unknown;
|
|
106
|
+
result?: unknown;
|
|
107
|
+
error?: unknown;
|
|
108
|
+
metadata?: Record<string, unknown>;
|
|
51
109
|
signal?: AbortSignal;
|
|
52
110
|
}
|
|
53
111
|
export interface AureloStreamEvent {
|
|
@@ -121,6 +179,8 @@ export declare class AureloSDK {
|
|
|
121
179
|
continueResponse(message: string, request?: Omit<AureloQueueMessageRequest, 'message'> & AureloReconnectRequest): AsyncGenerator<AureloStreamEvent>;
|
|
122
180
|
private streamEventsFromResponse;
|
|
123
181
|
reconnect(request?: AureloReconnectRequest): Promise<Response>;
|
|
182
|
+
submitToolResult(request: AureloToolResultRequest): Promise<Response | unknown>;
|
|
183
|
+
streamToolResult(request: AureloToolResultRequest): AsyncGenerator<AureloStreamEvent>;
|
|
124
184
|
private handleSseLine;
|
|
125
185
|
private readErrorPayload;
|
|
126
186
|
private readResponsePayload;
|
package/dist/index.js
CHANGED
|
@@ -172,6 +172,31 @@ function isTerminalResponseType(type) {
|
|
|
172
172
|
function isAureloSdkError(value) {
|
|
173
173
|
return value instanceof AureloSDKError;
|
|
174
174
|
}
|
|
175
|
+
function definedEntries(values) {
|
|
176
|
+
return Object.fromEntries(Object.entries(values).filter(([, value]) => value !== undefined && value !== null && value !== ''));
|
|
177
|
+
}
|
|
178
|
+
function buildContinuationMetadata(request) {
|
|
179
|
+
const context = request.context || {};
|
|
180
|
+
return definedEntries({
|
|
181
|
+
...(request.metadata || {}),
|
|
182
|
+
toolStackId: context.toolStackId,
|
|
183
|
+
permissionsVersion: context.permissionsVersion,
|
|
184
|
+
contextId: context.contextId,
|
|
185
|
+
contextVersion: context.contextVersion,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
function buildContinuationContext(request) {
|
|
189
|
+
const context = request.context || {};
|
|
190
|
+
const nextContext = definedEntries({
|
|
191
|
+
tools: context.tools,
|
|
192
|
+
exposedTools: context.exposedTools,
|
|
193
|
+
toolStackId: context.toolStackId,
|
|
194
|
+
permissionsVersion: context.permissionsVersion,
|
|
195
|
+
contextId: context.contextId,
|
|
196
|
+
contextVersion: context.contextVersion,
|
|
197
|
+
});
|
|
198
|
+
return Object.keys(nextContext).length ? nextContext : undefined;
|
|
199
|
+
}
|
|
175
200
|
function getPayloadErrorMessage(payload) {
|
|
176
201
|
if (!payload || typeof payload !== 'object') {
|
|
177
202
|
return '';
|
|
@@ -273,10 +298,11 @@ export class AureloSDK {
|
|
|
273
298
|
this.apiKey = String(options.apiKey).trim();
|
|
274
299
|
this.baseUrl = normalizeBaseUrl(options.baseUrl || 'https://aurelo.tech');
|
|
275
300
|
this.queueUrl = String(options.queueUrl || defaultQueueUrl(this.baseUrl)).trim();
|
|
276
|
-
|
|
277
|
-
if (typeof
|
|
301
|
+
const resolvedFetch = options.fetch || globalThis.fetch;
|
|
302
|
+
if (typeof resolvedFetch !== 'function') {
|
|
278
303
|
throw new Error('AureloSDK requires fetch. Pass options.fetch in this runtime.');
|
|
279
304
|
}
|
|
305
|
+
this.fetchImpl = resolvedFetch.bind(globalThis);
|
|
280
306
|
this.storage = options.storage || createDefaultStorage();
|
|
281
307
|
if (options.clientId) {
|
|
282
308
|
this.clientIdValue = normalizeClientId(options.clientId);
|
|
@@ -435,6 +461,7 @@ export class AureloSDK {
|
|
|
435
461
|
requestId: queueRequest.requestId || session.requestId,
|
|
436
462
|
publicModel: queueRequest.publicModel || queueRequest.model,
|
|
437
463
|
metadata,
|
|
464
|
+
context: queueRequest.context,
|
|
438
465
|
}),
|
|
439
466
|
signal: queueRequest.signal,
|
|
440
467
|
});
|
|
@@ -520,16 +547,21 @@ export class AureloSDK {
|
|
|
520
547
|
return this.createResponseWithRotationRetry(request, options);
|
|
521
548
|
}
|
|
522
549
|
try {
|
|
550
|
+
const continuationMetadata = buildContinuationMetadata(request);
|
|
551
|
+
const continuationContext = buildContinuationContext(request);
|
|
523
552
|
await this.queueMessage({
|
|
524
553
|
message,
|
|
525
554
|
model: request.model,
|
|
526
555
|
publicModel: request.model,
|
|
527
|
-
metadata:
|
|
556
|
+
metadata: continuationMetadata,
|
|
557
|
+
context: continuationContext,
|
|
528
558
|
signal: options.signal,
|
|
529
559
|
});
|
|
530
560
|
return this.reconnect({
|
|
531
561
|
model: request.model,
|
|
532
562
|
input: request.input,
|
|
563
|
+
metadata: continuationMetadata,
|
|
564
|
+
context: continuationContext,
|
|
533
565
|
signal: options.signal,
|
|
534
566
|
});
|
|
535
567
|
}
|
|
@@ -568,6 +600,7 @@ export class AureloSDK {
|
|
|
568
600
|
input: message,
|
|
569
601
|
stream: true,
|
|
570
602
|
metadata: request.metadata,
|
|
603
|
+
context: request.context,
|
|
571
604
|
}, { signal: request.signal });
|
|
572
605
|
yield* this.streamEventsFromResponse(response);
|
|
573
606
|
return;
|
|
@@ -620,6 +653,7 @@ export class AureloSDK {
|
|
|
620
653
|
const storedCursor = await this.getReconnectCursor(session.sessionId);
|
|
621
654
|
const cursor = request.cursor ?? storedCursor ?? 0;
|
|
622
655
|
const metadata = {
|
|
656
|
+
...(request.metadata || {}),
|
|
623
657
|
clientId: fullClientId(session.clientId),
|
|
624
658
|
requestId: session.requestId,
|
|
625
659
|
sessionId: session.sessionId,
|
|
@@ -633,6 +667,7 @@ export class AureloSDK {
|
|
|
633
667
|
aureloAction: 'reconnect',
|
|
634
668
|
cursor,
|
|
635
669
|
},
|
|
670
|
+
context: request.context,
|
|
636
671
|
};
|
|
637
672
|
const response = await this.fetchImpl(`${this.baseUrl}/v1/responses`, {
|
|
638
673
|
method: 'POST',
|
|
@@ -654,6 +689,8 @@ export class AureloSDK {
|
|
|
654
689
|
model: body.model,
|
|
655
690
|
input: body.input,
|
|
656
691
|
stream: true,
|
|
692
|
+
metadata: request.metadata,
|
|
693
|
+
context: request.context,
|
|
657
694
|
}, { signal: request.signal });
|
|
658
695
|
}
|
|
659
696
|
throw new AureloSDKError(`Aurelo reconnect failed with HTTP ${response.status}`, {
|
|
@@ -665,6 +702,76 @@ export class AureloSDK {
|
|
|
665
702
|
}
|
|
666
703
|
return response;
|
|
667
704
|
}
|
|
705
|
+
async submitToolResult(request) {
|
|
706
|
+
const session = request.sessionId
|
|
707
|
+
? { ...(await this.getSession()), sessionId: request.sessionId }
|
|
708
|
+
: await this.getSession();
|
|
709
|
+
const callId = String(request.callId || request.toolCallId || '').trim();
|
|
710
|
+
if (!callId) {
|
|
711
|
+
throw new Error('AureloSDK submitToolResult requires callId.');
|
|
712
|
+
}
|
|
713
|
+
const metadata = {
|
|
714
|
+
...(request.metadata || {}),
|
|
715
|
+
aureloAction: 'tool_result',
|
|
716
|
+
clientId: fullClientId(session.clientId),
|
|
717
|
+
requestId: request.requestId || session.requestId,
|
|
718
|
+
sessionId: session.sessionId,
|
|
719
|
+
callId,
|
|
720
|
+
previousResponseId: request.previousResponseId || request.previous_response_id,
|
|
721
|
+
model: request.model || request.publicModel,
|
|
722
|
+
};
|
|
723
|
+
const previousResponseId = request.previousResponseId || request.previous_response_id;
|
|
724
|
+
const response = await this.fetchImpl(`${this.baseUrl}/v1/responses`, {
|
|
725
|
+
method: 'POST',
|
|
726
|
+
headers: {
|
|
727
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
728
|
+
'Content-Type': 'application/json',
|
|
729
|
+
},
|
|
730
|
+
body: JSON.stringify({
|
|
731
|
+
model: request.model || request.publicModel,
|
|
732
|
+
publicModel: request.publicModel || request.model,
|
|
733
|
+
previousResponseId,
|
|
734
|
+
previous_response_id: previousResponseId,
|
|
735
|
+
stream: request.stream !== false,
|
|
736
|
+
sessionId: session.sessionId,
|
|
737
|
+
requestId: request.requestId || session.requestId,
|
|
738
|
+
callId,
|
|
739
|
+
tools: request.tools || request.context?.tools,
|
|
740
|
+
context: request.context,
|
|
741
|
+
output: request.output,
|
|
742
|
+
result: request.result,
|
|
743
|
+
error: request.error,
|
|
744
|
+
metadata,
|
|
745
|
+
}),
|
|
746
|
+
signal: request.signal,
|
|
747
|
+
});
|
|
748
|
+
if (!response.ok) {
|
|
749
|
+
const payload = await this.readErrorPayload(response);
|
|
750
|
+
const rotation = shouldRotate(payload);
|
|
751
|
+
if (rotation.rotate) {
|
|
752
|
+
await this.rotateSession(rotation.reason || 'backend_rotation');
|
|
753
|
+
}
|
|
754
|
+
throw new AureloSDKError(`Aurelo tool result submit failed with HTTP ${response.status}`, {
|
|
755
|
+
status: response.status,
|
|
756
|
+
reason: rotation.reason,
|
|
757
|
+
rotateSession: rotation.rotate,
|
|
758
|
+
payload,
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
const contentType = response.headers.get('content-type') || '';
|
|
762
|
+
if (contentType.includes('text/event-stream')) {
|
|
763
|
+
return response;
|
|
764
|
+
}
|
|
765
|
+
return this.readResponsePayload(response);
|
|
766
|
+
}
|
|
767
|
+
async *streamToolResult(request) {
|
|
768
|
+
const result = await this.submitToolResult({ ...request, stream: true });
|
|
769
|
+
if (result instanceof Response) {
|
|
770
|
+
yield* this.streamEventsFromResponse(result);
|
|
771
|
+
return;
|
|
772
|
+
}
|
|
773
|
+
yield { type: 'event', raw: '', data: result };
|
|
774
|
+
}
|
|
668
775
|
async handleSseLine(line) {
|
|
669
776
|
const trimmed = line.trim();
|
|
670
777
|
if (!trimmed) {
|