@attrove/sdk 0.1.12 → 0.1.13
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 +5 -2
- package/cjs/constants.js +1 -1
- package/cjs/resources/messages.js +3 -0
- package/cjs/resources/query.js +160 -7
- package/cjs/types/index.js +77 -66
- package/cjs/utils/streaming.js +16 -0
- package/esm/constants.d.ts +1 -1
- package/esm/constants.js +1 -1
- package/esm/resources/messages.d.ts.map +1 -1
- package/esm/resources/messages.js +3 -0
- package/esm/resources/messages.js.map +1 -1
- package/esm/resources/query.d.ts +12 -6
- package/esm/resources/query.d.ts.map +1 -1
- package/esm/resources/query.js +160 -7
- package/esm/resources/query.js.map +1 -1
- package/esm/types/index.d.ts +117 -45
- package/esm/types/index.d.ts.map +1 -1
- package/esm/types/index.js +77 -66
- package/esm/types/index.js.map +1 -1
- package/esm/utils/streaming.d.ts +9 -1
- package/esm/utils/streaming.d.ts.map +1 -1
- package/esm/utils/streaming.js +16 -0
- package/esm/utils/streaming.js.map +1 -1
- package/package.json +1 -1
package/esm/resources/query.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Provides methods for RAG (Retrieval-Augmented Generation) queries.
|
|
5
5
|
*/
|
|
6
|
-
import { HttpClient } from
|
|
7
|
-
import { QueryOptions, QueryResponse, SearchOptions, SearchResponse } from
|
|
6
|
+
import { HttpClient } from '../utils/fetch.js';
|
|
7
|
+
import { QueryOptions, QueryResponse, SearchOptions, SearchResponse } from '../types/index.js';
|
|
8
8
|
/**
|
|
9
9
|
* Query resource for RAG operations.
|
|
10
10
|
*
|
|
@@ -46,7 +46,7 @@ export declare class QueryResource {
|
|
|
46
46
|
*
|
|
47
47
|
* // With filters
|
|
48
48
|
* const response = await attrove.query('Latest updates', {
|
|
49
|
-
* integrationIds: ['
|
|
49
|
+
* integrationIds: ['int_xxx'],
|
|
50
50
|
* includeSources: true
|
|
51
51
|
* });
|
|
52
52
|
* ```
|
|
@@ -55,12 +55,13 @@ export declare class QueryResource {
|
|
|
55
55
|
/**
|
|
56
56
|
* Semantic search across the user's context.
|
|
57
57
|
*
|
|
58
|
-
* Returns raw matching messages grouped by conversation,
|
|
59
|
-
*
|
|
58
|
+
* Returns raw matching messages (grouped by conversation), plus matched meetings
|
|
59
|
+
* and calendar events, without AI summarization.
|
|
60
|
+
* Use this when you need full control over how results are displayed and processed.
|
|
60
61
|
*
|
|
61
62
|
* @param query - The search query (semantic, not keyword-based)
|
|
62
63
|
* @param options - Search options including filters, date range, etc.
|
|
63
|
-
* @returns Matching messages grouped by conversation
|
|
64
|
+
* @returns Matching messages grouped by conversation, plus matched meetings and calendar events
|
|
64
65
|
*
|
|
65
66
|
* @throws {AuthenticationError} If the API key is invalid or expired
|
|
66
67
|
* @throws {ValidationError} If the search parameters are invalid
|
|
@@ -79,6 +80,11 @@ export declare class QueryResource {
|
|
|
79
80
|
* senderDomains: ['acme.com'],
|
|
80
81
|
* includeBodyText: true
|
|
81
82
|
* });
|
|
83
|
+
*
|
|
84
|
+
* // Expand meeting and event detail fields
|
|
85
|
+
* const richResults = await attrove.search('standup action items', {
|
|
86
|
+
* expand: ['summary', 'action_items', 'description']
|
|
87
|
+
* });
|
|
82
88
|
* ```
|
|
83
89
|
*/
|
|
84
90
|
search(query: string, options?: SearchOptions): Promise<SearchResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../packages/sdk/src/resources/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../packages/sdk/src/resources/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EASf,MAAM,mBAAmB,CAAC;AAwQ3B;;;;;GAKG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM;IAGjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACG,KAAK,CACT,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,aAAa,CAAC;IAsCzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,cAAc,CAAC;CAuC3B"}
|
package/esm/resources/query.js
CHANGED
|
@@ -3,6 +3,146 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Provides methods for RAG (Retrieval-Augmented Generation) queries.
|
|
5
5
|
*/
|
|
6
|
+
function normalizeOptionalId(value) {
|
|
7
|
+
return value == null ? null : String(value);
|
|
8
|
+
}
|
|
9
|
+
function normalizeRequiredId(value) {
|
|
10
|
+
return String(value);
|
|
11
|
+
}
|
|
12
|
+
function normalizeKeyMessage(message) {
|
|
13
|
+
return {
|
|
14
|
+
message_id: normalizeRequiredId(message.message_id),
|
|
15
|
+
thread_id: normalizeOptionalId(message.thread_id),
|
|
16
|
+
conversation_id: normalizeOptionalId(message.conversation_id),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function normalizeThreadMessage(message) {
|
|
20
|
+
return {
|
|
21
|
+
message_id: normalizeRequiredId(message.message_id),
|
|
22
|
+
received_at: message.received_at,
|
|
23
|
+
integration_type: normalizeIntegrationType(message.integration_type),
|
|
24
|
+
integration_type_generic: message.integration_type_generic,
|
|
25
|
+
sender_name: message.sender_name,
|
|
26
|
+
recipient_names: message.recipient_names,
|
|
27
|
+
body_text: message.body_text,
|
|
28
|
+
thread_id: normalizeOptionalId(message.thread_id),
|
|
29
|
+
thread_message_count: message.thread_message_count,
|
|
30
|
+
thread_position: message.thread_position,
|
|
31
|
+
parent_message_id: normalizeOptionalId(message.parent_message_id),
|
|
32
|
+
conversation_type: message.conversation_type,
|
|
33
|
+
conversation_id: normalizeOptionalId(message.conversation_id),
|
|
34
|
+
conversation_participants: message.conversation_participants,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const VALID_MEETING_PROVIDERS = new Set([
|
|
38
|
+
'google_meet',
|
|
39
|
+
'zoom',
|
|
40
|
+
'teams',
|
|
41
|
+
'unknown',
|
|
42
|
+
]);
|
|
43
|
+
function normalizeMeetingProvider(provider) {
|
|
44
|
+
if (VALID_MEETING_PROVIDERS.has(provider)) {
|
|
45
|
+
return provider;
|
|
46
|
+
}
|
|
47
|
+
// prettier-ignore
|
|
48
|
+
console.warn(`[Attrove SDK] Unknown meeting provider "${provider}" normalized to "unknown". SDK may need updating.`);
|
|
49
|
+
return 'unknown';
|
|
50
|
+
}
|
|
51
|
+
const VALID_INTEGRATION_TYPES = new Set([
|
|
52
|
+
'slack',
|
|
53
|
+
'gmail',
|
|
54
|
+
'outlook',
|
|
55
|
+
'google_calendar',
|
|
56
|
+
'outlook_calendar',
|
|
57
|
+
'unknown',
|
|
58
|
+
]);
|
|
59
|
+
function normalizeIntegrationType(type) {
|
|
60
|
+
if (VALID_INTEGRATION_TYPES.has(type)) {
|
|
61
|
+
return type;
|
|
62
|
+
}
|
|
63
|
+
// prettier-ignore
|
|
64
|
+
console.warn(`[Attrove SDK] Unknown integration type "${type}" normalized to "unknown". SDK may need updating.`);
|
|
65
|
+
return 'unknown';
|
|
66
|
+
}
|
|
67
|
+
function normalizeSearchMeeting(meeting) {
|
|
68
|
+
return {
|
|
69
|
+
id: meeting.id,
|
|
70
|
+
title: meeting.title,
|
|
71
|
+
meeting_code: meeting.meeting_code,
|
|
72
|
+
start_time: meeting.start_time,
|
|
73
|
+
end_time: meeting.end_time,
|
|
74
|
+
summary: meeting.summary,
|
|
75
|
+
short_summary: meeting.short_summary,
|
|
76
|
+
action_items: meeting.action_items,
|
|
77
|
+
attendees: meeting.attendees,
|
|
78
|
+
meeting_link: meeting.meeting_link,
|
|
79
|
+
has_transcript: meeting.has_transcript,
|
|
80
|
+
provider: normalizeMeetingProvider(meeting.provider),
|
|
81
|
+
event_id: meeting.event_id,
|
|
82
|
+
created_at: meeting.created_at,
|
|
83
|
+
updated_at: meeting.updated_at,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function normalizeSearchEvent(event) {
|
|
87
|
+
let attendees;
|
|
88
|
+
if (Array.isArray(event.attendees)) {
|
|
89
|
+
attendees = event.attendees;
|
|
90
|
+
}
|
|
91
|
+
else if (event.attendees !== undefined && event.attendees !== null) {
|
|
92
|
+
// prettier-ignore
|
|
93
|
+
console.warn(`[Attrove SDK] Event ${event.id} has non-array attendees (${typeof event.attendees}), ignoring.`);
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
id: event.id,
|
|
97
|
+
calendar_id: event.calendar_id,
|
|
98
|
+
title: event.title,
|
|
99
|
+
description: event.description,
|
|
100
|
+
start_time: event.start_time,
|
|
101
|
+
end_time: event.end_time,
|
|
102
|
+
location: event.location,
|
|
103
|
+
status: event.status,
|
|
104
|
+
all_day: event.all_day,
|
|
105
|
+
organizer_entity_id: event.organizer_entity_id,
|
|
106
|
+
attendee_entity_ids: event.attendee_entity_ids,
|
|
107
|
+
attendees,
|
|
108
|
+
html_link: event.html_link,
|
|
109
|
+
event_link: event.event_link,
|
|
110
|
+
created_at: event.created_at,
|
|
111
|
+
updated_at: event.updated_at,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function normalizeSearchResponse(response) {
|
|
115
|
+
const conversations = response.conversations || {};
|
|
116
|
+
if (!response.conversations) {
|
|
117
|
+
// prettier-ignore
|
|
118
|
+
console.warn('[Attrove SDK] Search response missing conversations field, defaulting to empty object.');
|
|
119
|
+
}
|
|
120
|
+
const normalizedConversations = {};
|
|
121
|
+
for (const [conversationId, conversation] of Object.entries(conversations)) {
|
|
122
|
+
const normalizedThreads = {};
|
|
123
|
+
for (const [threadId, messages] of Object.entries(conversation.threads || {})) {
|
|
124
|
+
normalizedThreads[threadId] = (messages || []).map(normalizeThreadMessage);
|
|
125
|
+
}
|
|
126
|
+
normalizedConversations[conversationId] = {
|
|
127
|
+
conversation_name: conversation.conversation_name,
|
|
128
|
+
threads: normalizedThreads,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (!response.key_messages) {
|
|
132
|
+
// prettier-ignore
|
|
133
|
+
console.warn('[Attrove SDK] Search response missing key_messages field, defaulting to empty array.');
|
|
134
|
+
}
|
|
135
|
+
const result = {
|
|
136
|
+
key_messages: (response.key_messages || []).map(normalizeKeyMessage),
|
|
137
|
+
conversations: normalizedConversations,
|
|
138
|
+
key_meetings: (response.key_meetings || []).map(normalizeSearchMeeting),
|
|
139
|
+
key_events: (response.key_events || []).map(normalizeSearchEvent),
|
|
140
|
+
};
|
|
141
|
+
if (response.warnings && response.warnings.length > 0) {
|
|
142
|
+
result.warnings = response.warnings;
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
6
146
|
/**
|
|
7
147
|
* Query resource for RAG operations.
|
|
8
148
|
*
|
|
@@ -45,7 +185,7 @@ export class QueryResource {
|
|
|
45
185
|
*
|
|
46
186
|
* // With filters
|
|
47
187
|
* const response = await attrove.query('Latest updates', {
|
|
48
|
-
* integrationIds: ['
|
|
188
|
+
* integrationIds: ['int_xxx'],
|
|
49
189
|
* includeSources: true
|
|
50
190
|
* });
|
|
51
191
|
* ```
|
|
@@ -68,25 +208,28 @@ export class QueryResource {
|
|
|
68
208
|
body.allow_bot_messages = options.allowBotMessages;
|
|
69
209
|
}
|
|
70
210
|
if (options.includeSources) {
|
|
71
|
-
body.expand =
|
|
211
|
+
body.expand = 'sources';
|
|
72
212
|
}
|
|
73
213
|
const response = await this.http.post(`/v1/users/${this.userId}/query`, body);
|
|
74
214
|
return {
|
|
75
215
|
answer: response.answer,
|
|
76
216
|
history: response.history,
|
|
77
217
|
used_message_ids: response.used_message_ids,
|
|
218
|
+
used_meeting_ids: response.used_meeting_ids ?? [],
|
|
219
|
+
used_event_ids: response.used_event_ids ?? [],
|
|
78
220
|
sources: response.sources,
|
|
79
221
|
};
|
|
80
222
|
}
|
|
81
223
|
/**
|
|
82
224
|
* Semantic search across the user's context.
|
|
83
225
|
*
|
|
84
|
-
* Returns raw matching messages grouped by conversation,
|
|
85
|
-
*
|
|
226
|
+
* Returns raw matching messages (grouped by conversation), plus matched meetings
|
|
227
|
+
* and calendar events, without AI summarization.
|
|
228
|
+
* Use this when you need full control over how results are displayed and processed.
|
|
86
229
|
*
|
|
87
230
|
* @param query - The search query (semantic, not keyword-based)
|
|
88
231
|
* @param options - Search options including filters, date range, etc.
|
|
89
|
-
* @returns Matching messages grouped by conversation
|
|
232
|
+
* @returns Matching messages grouped by conversation, plus matched meetings and calendar events
|
|
90
233
|
*
|
|
91
234
|
* @throws {AuthenticationError} If the API key is invalid or expired
|
|
92
235
|
* @throws {ValidationError} If the search parameters are invalid
|
|
@@ -105,10 +248,16 @@ export class QueryResource {
|
|
|
105
248
|
* senderDomains: ['acme.com'],
|
|
106
249
|
* includeBodyText: true
|
|
107
250
|
* });
|
|
251
|
+
*
|
|
252
|
+
* // Expand meeting and event detail fields
|
|
253
|
+
* const richResults = await attrove.search('standup action items', {
|
|
254
|
+
* expand: ['summary', 'action_items', 'description']
|
|
255
|
+
* });
|
|
108
256
|
* ```
|
|
109
257
|
*/
|
|
110
258
|
async search(query, options = {}) {
|
|
111
259
|
const body = { query };
|
|
260
|
+
const expandFields = new Set(options.expand || []);
|
|
112
261
|
if (options.integrationIds?.length) {
|
|
113
262
|
body.integration_ids = options.integrationIds;
|
|
114
263
|
}
|
|
@@ -131,9 +280,13 @@ export class QueryResource {
|
|
|
131
280
|
body.entity_ids = options.entityIds;
|
|
132
281
|
}
|
|
133
282
|
if (options.includeBodyText) {
|
|
134
|
-
|
|
283
|
+
expandFields.add('body_text');
|
|
284
|
+
}
|
|
285
|
+
if (expandFields.size > 0) {
|
|
286
|
+
body.expand = Array.from(expandFields).join(',');
|
|
135
287
|
}
|
|
136
|
-
|
|
288
|
+
const response = await this.http.post(`/v1/users/${this.userId}/search`, body);
|
|
289
|
+
return normalizeSearchResponse(response);
|
|
137
290
|
}
|
|
138
291
|
}
|
|
139
292
|
//# sourceMappingURL=query.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../../packages/sdk/src/resources/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../../packages/sdk/src/resources/query.ts"],"names":[],"mappings":"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"}
|