@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 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
- this.fetchImpl = options.fetch || globalThis.fetch;
277
- if (typeof this.fetchImpl !== 'function') {
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: request.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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aurelo_npm/sdk",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Aurelo API-key SDK with stable client identity and backend-driven session rotation.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",