@copilotz/chat-adapter 0.7.8 → 0.8.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.
- package/dist/index.d.ts +14 -13
- package/dist/index.js +78 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -21,8 +21,8 @@ type RunErrorInterceptor = (error: unknown) => SpecialChatState | null | undefin
|
|
|
21
21
|
|
|
22
22
|
declare const apiUrl: (path: string) => string;
|
|
23
23
|
declare const apiUrlObject: (path: string) => URL;
|
|
24
|
-
type RequestHeadersProvider = () => Record<string, string> | Promise<Record<string, string>>;
|
|
25
|
-
declare const withAuthHeaders: (headers?: Record<string, string>, getRequestHeaders?: RequestHeadersProvider) => Promise<Record<string, string>>;
|
|
24
|
+
type RequestHeadersProvider$1 = () => Record<string, string> | Promise<Record<string, string>>;
|
|
25
|
+
declare const withAuthHeaders: (headers?: Record<string, string>, getRequestHeaders?: RequestHeadersProvider$1) => Promise<Record<string, string>>;
|
|
26
26
|
type RestThread = {
|
|
27
27
|
id: string;
|
|
28
28
|
name?: string | null;
|
|
@@ -83,7 +83,7 @@ type RunOptions = {
|
|
|
83
83
|
participants?: string[] | null;
|
|
84
84
|
/** Explicit target agent for this message (who should respond). Maps to MessagePayload.target. */
|
|
85
85
|
targetAgent?: string | null;
|
|
86
|
-
getRequestHeaders?: RequestHeadersProvider;
|
|
86
|
+
getRequestHeaders?: RequestHeadersProvider$1;
|
|
87
87
|
} & StreamCallbacks;
|
|
88
88
|
type CopilotzStreamResult = {
|
|
89
89
|
text: string;
|
|
@@ -101,11 +101,11 @@ declare class CopilotzRequestError extends Error {
|
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
103
|
declare function runCopilotzStream(options: RunOptions): Promise<CopilotzStreamResult>;
|
|
104
|
-
declare function fetchThreads(userId: string, getRequestHeaders?: RequestHeadersProvider): Promise<RestThread[]>;
|
|
105
|
-
declare function fetchAgents(getRequestHeaders?: RequestHeadersProvider): Promise<AgentOption[]>;
|
|
106
|
-
declare function fetchThreadMessages(threadId: string, getRequestHeaders?: RequestHeadersProvider): Promise<RestMessage[]>;
|
|
107
|
-
declare function updateThread(threadId: string, updates: Partial<RestThread>, getRequestHeaders?: RequestHeadersProvider): Promise<any>;
|
|
108
|
-
declare function deleteThread(threadId: string, getRequestHeaders?: RequestHeadersProvider): Promise<boolean>;
|
|
104
|
+
declare function fetchThreads(userId: string, getRequestHeaders?: RequestHeadersProvider$1): Promise<RestThread[]>;
|
|
105
|
+
declare function fetchAgents(getRequestHeaders?: RequestHeadersProvider$1): Promise<AgentOption[]>;
|
|
106
|
+
declare function fetchThreadMessages(threadId: string, getRequestHeaders?: RequestHeadersProvider$1): Promise<RestMessage[]>;
|
|
107
|
+
declare function updateThread(threadId: string, updates: Partial<RestThread>, getRequestHeaders?: RequestHeadersProvider$1): Promise<any>;
|
|
108
|
+
declare function deleteThread(threadId: string, getRequestHeaders?: RequestHeadersProvider$1): Promise<boolean>;
|
|
109
109
|
|
|
110
110
|
interface CopilotzChatProps {
|
|
111
111
|
userId: string;
|
|
@@ -167,7 +167,7 @@ interface CopilotzChatProps {
|
|
|
167
167
|
/** Multi-agent: ID of the agent this message is directed at */
|
|
168
168
|
targetAgentId?: string | null;
|
|
169
169
|
onTargetAgentChange?: (agentId: string | null) => void;
|
|
170
|
-
getRequestHeaders?: RequestHeadersProvider;
|
|
170
|
+
getRequestHeaders?: RequestHeadersProvider$1;
|
|
171
171
|
className?: string;
|
|
172
172
|
eventInterceptor?: EventInterceptor;
|
|
173
173
|
runErrorInterceptor?: RunErrorInterceptor;
|
|
@@ -196,7 +196,7 @@ interface UseCopilotzOptions {
|
|
|
196
196
|
participants?: string[] | null;
|
|
197
197
|
/** Explicit target agent for each message. When set, maps to MessagePayload.target. */
|
|
198
198
|
targetAgentName?: string | null;
|
|
199
|
-
getRequestHeaders?: RequestHeadersProvider;
|
|
199
|
+
getRequestHeaders?: RequestHeadersProvider$1;
|
|
200
200
|
eventInterceptor?: EventInterceptor;
|
|
201
201
|
runErrorInterceptor?: RunErrorInterceptor;
|
|
202
202
|
}
|
|
@@ -224,7 +224,8 @@ declare function useCopilotz({ userId, userName, userAvatar, assistantName, agen
|
|
|
224
224
|
reset: () => void;
|
|
225
225
|
};
|
|
226
226
|
|
|
227
|
-
|
|
227
|
+
type RequestHeadersProvider = () => Record<string, string> | Promise<Record<string, string>>;
|
|
228
|
+
declare function getAssetDataUrl(refOrId: string, getRequestHeaders?: RequestHeadersProvider): Promise<{
|
|
228
229
|
dataUrl: string;
|
|
229
230
|
mime?: string;
|
|
230
231
|
assetId: string;
|
|
@@ -232,6 +233,6 @@ declare function getAssetDataUrl(refOrId: string): Promise<{
|
|
|
232
233
|
type WithMetadata = {
|
|
233
234
|
metadata?: Record<string, unknown> | null;
|
|
234
235
|
};
|
|
235
|
-
declare function resolveAssetsInMessages<T extends WithMetadata>(messages: T[]): Promise<T[]>;
|
|
236
|
+
declare function resolveAssetsInMessages<T extends WithMetadata>(messages: T[], getRequestHeaders?: RequestHeadersProvider): Promise<T[]>;
|
|
236
237
|
|
|
237
|
-
export { CopilotzChat, CopilotzRequestError, type EventInterceptor, type EventInterceptorResult, type RenderSpecialState, type RequestHeadersProvider, type RunErrorInterceptor, type SpecialChatState, type SpecialStateControls, apiUrl, apiUrlObject, deleteThread, fetchAgents, fetchThreadMessages, fetchThreads, getAssetDataUrl, resolveAssetsInMessages, runCopilotzStream, updateThread, useCopilotz, withAuthHeaders };
|
|
238
|
+
export { CopilotzChat, CopilotzRequestError, type EventInterceptor, type EventInterceptorResult, type RenderSpecialState, type RequestHeadersProvider$1 as RequestHeadersProvider, type RunErrorInterceptor, type SpecialChatState, type SpecialStateControls, apiUrl, apiUrlObject, deleteThread, fetchAgents, fetchThreadMessages, fetchThreads, getAssetDataUrl, resolveAssetsInMessages, runCopilotzStream, updateThread, useCopilotz, withAuthHeaders };
|
package/dist/index.js
CHANGED
|
@@ -1104,12 +1104,35 @@ var rawBase2 = typeof rawBaseValue2 === "string" && rawBaseValue2.length > 0 ? r
|
|
|
1104
1104
|
var normalizedBase2 = rawBase2.replace(/\/$/, "");
|
|
1105
1105
|
var API_BASE2 = normalizedBase2.startsWith("http") || normalizedBase2.startsWith("/") ? normalizedBase2 : `/${normalizedBase2}`;
|
|
1106
1106
|
var apiUrl2 = (path) => `${API_BASE2}${path}`;
|
|
1107
|
+
var runtimeProcess2 = typeof process !== "undefined" ? process : void 0;
|
|
1108
|
+
var API_KEY2 = (() => {
|
|
1109
|
+
const env = import.meta.env ?? {};
|
|
1110
|
+
const candidates = [
|
|
1111
|
+
env.VITE_API_KEY,
|
|
1112
|
+
env.VITE_COPILOTZ_API_KEY,
|
|
1113
|
+
runtimeProcess2?.env?.COPILOTZ_API_KEY,
|
|
1114
|
+
runtimeProcess2?.env?.API_KEY
|
|
1115
|
+
];
|
|
1116
|
+
return candidates.find(
|
|
1117
|
+
(value) => typeof value === "string" && value.length > 0
|
|
1118
|
+
);
|
|
1119
|
+
})();
|
|
1120
|
+
var withAssetAuthHeaders = async (headers = {}, getRequestHeaders) => {
|
|
1121
|
+
const providedHeaders = getRequestHeaders ? await getRequestHeaders() : void 0;
|
|
1122
|
+
if (providedHeaders && Object.keys(providedHeaders).length > 0) {
|
|
1123
|
+
return { ...headers, ...providedHeaders };
|
|
1124
|
+
}
|
|
1125
|
+
if (API_KEY2) {
|
|
1126
|
+
return { ...headers, Authorization: `Bearer ${API_KEY2}` };
|
|
1127
|
+
}
|
|
1128
|
+
return headers;
|
|
1129
|
+
};
|
|
1107
1130
|
var extractAssetId = (refOrId) => refOrId.startsWith("asset://") ? refOrId.slice("asset://".length) : refOrId;
|
|
1108
|
-
async function getAssetDataUrl(refOrId) {
|
|
1131
|
+
async function getAssetDataUrl(refOrId, getRequestHeaders) {
|
|
1109
1132
|
const id = extractAssetId(refOrId);
|
|
1110
1133
|
const res = await fetch(apiUrl2(`/v1/assets/${encodeURIComponent(id)}?format=dataUrl`), {
|
|
1111
1134
|
method: "GET",
|
|
1112
|
-
headers: { Accept: "application/json" }
|
|
1135
|
+
headers: await withAssetAuthHeaders({ Accept: "application/json" }, getRequestHeaders)
|
|
1113
1136
|
});
|
|
1114
1137
|
if (!res.ok) {
|
|
1115
1138
|
const text = await res.text().catch(() => res.statusText);
|
|
@@ -1130,11 +1153,11 @@ async function getAssetDataUrl(refOrId) {
|
|
|
1130
1153
|
assetId: expectString2(data.assetId, "asset response.data.assetId")
|
|
1131
1154
|
};
|
|
1132
1155
|
}
|
|
1133
|
-
async function resolveAssetsInMessages(messages) {
|
|
1156
|
+
async function resolveAssetsInMessages(messages, getRequestHeaders) {
|
|
1134
1157
|
const inFlightByRef = /* @__PURE__ */ new Map();
|
|
1135
1158
|
const resolveAssetRef = (assetRef) => {
|
|
1136
1159
|
if (!inFlightByRef.has(assetRef)) {
|
|
1137
|
-
inFlightByRef.set(assetRef, getAssetDataUrl(assetRef));
|
|
1160
|
+
inFlightByRef.set(assetRef, getAssetDataUrl(assetRef, getRequestHeaders));
|
|
1138
1161
|
}
|
|
1139
1162
|
return inFlightByRef.get(assetRef);
|
|
1140
1163
|
};
|
|
@@ -1151,15 +1174,23 @@ async function resolveAssetsInMessages(messages) {
|
|
|
1151
1174
|
const newAttachments = await Promise.all(attachments.map(async (att, index) => {
|
|
1152
1175
|
const assetRef = typeof att.assetRef === "string" ? att.assetRef : void 0;
|
|
1153
1176
|
if (!assetRef) return att;
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1177
|
+
try {
|
|
1178
|
+
const { dataUrl, mime } = await resolveAssetRef(assetRef);
|
|
1179
|
+
const mimeType = typeof att.mimeType === "string" ? att.mimeType : mime || getMimeTypeFromDataUrl(dataUrl) || "application/octet-stream";
|
|
1180
|
+
const inferredKind = getAttachmentKindFromMimeType(mimeType);
|
|
1181
|
+
return {
|
|
1182
|
+
...att,
|
|
1183
|
+
kind: inferredKind,
|
|
1184
|
+
dataUrl,
|
|
1185
|
+
mimeType
|
|
1186
|
+
};
|
|
1187
|
+
} catch (error) {
|
|
1188
|
+
return {
|
|
1189
|
+
...att,
|
|
1190
|
+
assetUnavailable: true,
|
|
1191
|
+
assetError: error instanceof Error ? error.message : String(error)
|
|
1192
|
+
};
|
|
1193
|
+
}
|
|
1163
1194
|
}));
|
|
1164
1195
|
const newMeta = { ...meta, attachments: newAttachments };
|
|
1165
1196
|
return { ...msg, metadata: newMeta };
|
|
@@ -1472,7 +1503,10 @@ var convertServerMessage = (msg, options = {}) => {
|
|
|
1472
1503
|
};
|
|
1473
1504
|
var prepareHydratedMessages = async (rawMessages, options = {}) => {
|
|
1474
1505
|
rawMessages.forEach(assertRestMessageContract);
|
|
1475
|
-
const resolvedMessages = await resolveAssetsInMessages(
|
|
1506
|
+
const resolvedMessages = await resolveAssetsInMessages(
|
|
1507
|
+
rawMessages,
|
|
1508
|
+
options.getRequestHeaders
|
|
1509
|
+
);
|
|
1476
1510
|
resolvedMessages.forEach((msg) => {
|
|
1477
1511
|
if (msg.senderType === "tool") {
|
|
1478
1512
|
const metadata = msg.metadata ?? void 0;
|
|
@@ -1503,6 +1537,14 @@ var createEmptyMessagePageInfo = () => ({
|
|
|
1503
1537
|
oldestMessageId: null,
|
|
1504
1538
|
newestMessageId: null
|
|
1505
1539
|
});
|
|
1540
|
+
var createPendingAssistantActivity = () => ({
|
|
1541
|
+
items: [{
|
|
1542
|
+
id: "thinking",
|
|
1543
|
+
kind: "thinking",
|
|
1544
|
+
status: "active",
|
|
1545
|
+
startedAt: nowTs()
|
|
1546
|
+
}]
|
|
1547
|
+
});
|
|
1506
1548
|
function useCopilotz({
|
|
1507
1549
|
userId,
|
|
1508
1550
|
userName,
|
|
@@ -1717,9 +1759,10 @@ function useCopilotz({
|
|
|
1717
1759
|
senderOptions: senderOptionsRef.current,
|
|
1718
1760
|
createId: generateId,
|
|
1719
1761
|
now: nowTs,
|
|
1720
|
-
onToolOutput: processToolOutput
|
|
1762
|
+
onToolOutput: processToolOutput,
|
|
1763
|
+
getRequestHeaders
|
|
1721
1764
|
});
|
|
1722
|
-
}, [processToolOutput]);
|
|
1765
|
+
}, [getRequestHeaders, processToolOutput]);
|
|
1723
1766
|
const loadThreadMessages = useCallback2(async (threadId) => {
|
|
1724
1767
|
const requestId = messagesRequestRef.current + 1;
|
|
1725
1768
|
messagesRequestRef.current = requestId;
|
|
@@ -2293,7 +2336,8 @@ function useCopilotz({
|
|
|
2293
2336
|
timestamp: timestamp + 1,
|
|
2294
2337
|
isStreaming: true,
|
|
2295
2338
|
isComplete: false,
|
|
2296
|
-
sender: assistantSender
|
|
2339
|
+
sender: assistantSender,
|
|
2340
|
+
activity: createPendingAssistantActivity()
|
|
2297
2341
|
};
|
|
2298
2342
|
setMessages((prev) => [...prev, userMessage, assistantPlaceholder]);
|
|
2299
2343
|
setSpecialState(null);
|
|
@@ -2375,7 +2419,21 @@ function useCopilotz({
|
|
|
2375
2419
|
setCurrentThreadExternalId(bootstrapThreadExternalId);
|
|
2376
2420
|
setThreadExternalIdMap((prev) => ({ ...prev, [bootstrapThreadExternalId]: bootstrapThreadExternalId }));
|
|
2377
2421
|
setThreadMetadataMap((prev) => ({ ...prev, [bootstrapThreadExternalId]: {} }));
|
|
2378
|
-
|
|
2422
|
+
const assistantSender = preferredAgentRef.current ? resolveAgentSender(
|
|
2423
|
+
{ id: preferredAgentRef.current, name: preferredAgentRef.current },
|
|
2424
|
+
senderOptionsRef.current
|
|
2425
|
+
) : resolveAssistantFallbackSender(senderOptionsRef.current);
|
|
2426
|
+
const assistantMessageId = generateId();
|
|
2427
|
+
setMessages([{
|
|
2428
|
+
id: assistantMessageId,
|
|
2429
|
+
role: "assistant",
|
|
2430
|
+
content: "",
|
|
2431
|
+
timestamp: nowTs(),
|
|
2432
|
+
isStreaming: true,
|
|
2433
|
+
isComplete: false,
|
|
2434
|
+
sender: assistantSender,
|
|
2435
|
+
activity: createPendingAssistantActivity()
|
|
2436
|
+
}]);
|
|
2379
2437
|
setMessagePageInfo(createEmptyMessagePageInfo());
|
|
2380
2438
|
persistedToolUpdatesRef.current = [];
|
|
2381
2439
|
setSpecialState(null);
|
|
@@ -2386,6 +2444,8 @@ function useCopilotz({
|
|
|
2386
2444
|
toolCalls: bootstrap.initialToolCalls,
|
|
2387
2445
|
userId: uid,
|
|
2388
2446
|
agentName: preferredAgentRef.current,
|
|
2447
|
+
assistantMessageId,
|
|
2448
|
+
assistantSender,
|
|
2389
2449
|
threadMetadata: {
|
|
2390
2450
|
name: defaultThreadName || "Main Thread"
|
|
2391
2451
|
}
|