@burtson-labs/bandit-engine 2.0.166 → 2.0.168
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/chat-7LOFYEWE.mjs +15 -0
- package/dist/chat-provider.js +154 -38
- package/dist/chat-provider.js.map +1 -1
- package/dist/chat-provider.mjs +5 -5
- package/dist/{chunk-M4DWPNZZ.mjs → chunk-4SXXEGEK.mjs} +145 -30
- package/dist/chunk-4SXXEGEK.mjs.map +1 -0
- package/dist/{chunk-Q2DINRIU.mjs → chunk-62IYSU3I.mjs} +5 -4
- package/dist/chunk-62IYSU3I.mjs.map +1 -0
- package/dist/{chunk-6KRAPGXE.mjs → chunk-CABOLDNR.mjs} +2 -2
- package/dist/{chunk-MM3NRLVR.mjs → chunk-E5WMDLE3.mjs} +2 -2
- package/dist/{chunk-IB2LPSQQ.mjs → chunk-JD6C64CT.mjs} +2 -2
- package/dist/{chunk-33OSALGS.mjs → chunk-KAXUI5H7.mjs} +155 -41
- package/dist/chunk-KAXUI5H7.mjs.map +1 -0
- package/dist/{chunk-A6W6XIDD.mjs → chunk-QI67R5F6.mjs} +5 -5
- package/dist/{chunk-75OBTJPN.mjs → chunk-R3NOM2DG.mjs} +4 -4
- package/dist/{chunk-YH5YWK4K.mjs → chunk-SZJB5FLZ.mjs} +2 -2
- package/dist/{chunk-YH5YWK4K.mjs.map → chunk-SZJB5FLZ.mjs.map} +1 -1
- package/dist/{chunk-WSZE3DDJ.mjs → chunk-YGOLNWXJ.mjs} +9 -6
- package/dist/chunk-YGOLNWXJ.mjs.map +1 -0
- package/dist/index.d.mts +56 -4
- package/dist/index.d.ts +56 -4
- package/dist/index.js +309 -68
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -10
- package/dist/management/management.js +308 -68
- package/dist/management/management.js.map +1 -1
- package/dist/management/management.mjs +8 -8
- package/dist/modals/chat-modal/chat-modal.js +159 -42
- package/dist/modals/chat-modal/chat-modal.js.map +1 -1
- package/dist/modals/chat-modal/chat-modal.mjs +4 -4
- package/dist/{modelStore-F6JQUXGG.mjs → modelStore-TFNX4GEC.mjs} +2 -2
- package/dist/{public-0EYmtpGD.d.ts → public-DJa4Db00.d.mts} +9 -0
- package/dist/{public-0EYmtpGD.d.mts → public-DJa4Db00.d.ts} +9 -0
- package/dist/public-types.d.mts +1 -1
- package/dist/public-types.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chat-RCMZYACB.mjs +0 -15
- package/dist/chunk-33OSALGS.mjs.map +0 -1
- package/dist/chunk-M4DWPNZZ.mjs.map +0 -1
- package/dist/chunk-Q2DINRIU.mjs.map +0 -1
- package/dist/chunk-WSZE3DDJ.mjs.map +0 -1
- /package/dist/{chat-RCMZYACB.mjs.map → chat-7LOFYEWE.mjs.map} +0 -0
- /package/dist/{chunk-6KRAPGXE.mjs.map → chunk-CABOLDNR.mjs.map} +0 -0
- /package/dist/{chunk-MM3NRLVR.mjs.map → chunk-E5WMDLE3.mjs.map} +0 -0
- /package/dist/{chunk-IB2LPSQQ.mjs.map → chunk-JD6C64CT.mjs.map} +0 -0
- /package/dist/{chunk-A6W6XIDD.mjs.map → chunk-QI67R5F6.mjs.map} +0 -0
- /package/dist/{chunk-75OBTJPN.mjs.map → chunk-R3NOM2DG.mjs.map} +0 -0
- /package/dist/{modelStore-F6JQUXGG.mjs.map → modelStore-TFNX4GEC.mjs.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
indexedDBService_default,
|
|
3
3
|
usePackageSettingsStore
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SZJB5FLZ.mjs";
|
|
5
5
|
import {
|
|
6
6
|
authenticationService,
|
|
7
7
|
useAIProviderStore
|
|
@@ -213,4 +213,4 @@ var aiProviderInitService = AIProviderInitService.getInstance();
|
|
|
213
213
|
export {
|
|
214
214
|
aiProviderInitService
|
|
215
215
|
};
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
216
|
+
//# sourceMappingURL=chunk-CABOLDNR.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
indexedDBService_default,
|
|
3
3
|
usePackageSettingsStore
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SZJB5FLZ.mjs";
|
|
5
5
|
import {
|
|
6
6
|
authenticationService
|
|
7
7
|
} from "./chunk-GRPTCHFN.mjs";
|
|
@@ -387,4 +387,4 @@ export {
|
|
|
387
387
|
discoverMcpTools,
|
|
388
388
|
useMCPToolsStore
|
|
389
389
|
};
|
|
390
|
-
//# sourceMappingURL=chunk-
|
|
390
|
+
//# sourceMappingURL=chunk-E5WMDLE3.mjs.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
markdownSanitizeSchema,
|
|
7
7
|
maybeHandleFileLinkClick,
|
|
8
8
|
renderLowlightChildren
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-62IYSU3I.mjs";
|
|
10
10
|
|
|
11
11
|
// src/components/StreamingMarkdown.tsx
|
|
12
12
|
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -513,4 +513,4 @@ export {
|
|
|
513
513
|
isNativeShell,
|
|
514
514
|
isStandalonePwa
|
|
515
515
|
};
|
|
516
|
-
//# sourceMappingURL=chunk-
|
|
516
|
+
//# sourceMappingURL=chunk-JD6C64CT.mjs.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
indexedDBService_default,
|
|
3
3
|
useModelStore,
|
|
4
4
|
usePackageSettingsStore
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-SZJB5FLZ.mjs";
|
|
6
6
|
import {
|
|
7
7
|
AUTH_TOKEN_CHANGED_EVENT,
|
|
8
8
|
TOKEN_KEY,
|
|
@@ -2090,7 +2090,7 @@ var useKnowledgeStore = create6((set, get) => ({
|
|
|
2090
2090
|
}));
|
|
2091
2091
|
|
|
2092
2092
|
// src/util.ts
|
|
2093
|
-
var toTitleCase = (
|
|
2093
|
+
var toTitleCase = (str2) => str2.toLowerCase().split(" ").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
|
|
2094
2094
|
var generateSeed = () => Math.floor(Math.random() * 1e4);
|
|
2095
2095
|
var fetchAndConvertToBase64 = async (src) => {
|
|
2096
2096
|
const response = await fetch(src);
|
|
@@ -2802,6 +2802,93 @@ var EmbeddingService = class {
|
|
|
2802
2802
|
};
|
|
2803
2803
|
var embeddingService = new EmbeddingService();
|
|
2804
2804
|
|
|
2805
|
+
// src/services/vectorDatabase/knowledgeFiles.ts
|
|
2806
|
+
var KNOWLEDGE_PAGE_LIMIT_MAX = 200;
|
|
2807
|
+
var MEDIA_MIME_PREFIXES = ["image/", "video/", "audio/"];
|
|
2808
|
+
var MEDIA_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
2809
|
+
"png",
|
|
2810
|
+
"jpg",
|
|
2811
|
+
"jpeg",
|
|
2812
|
+
"gif",
|
|
2813
|
+
"webp",
|
|
2814
|
+
"bmp",
|
|
2815
|
+
"tif",
|
|
2816
|
+
"tiff",
|
|
2817
|
+
"heic",
|
|
2818
|
+
"heif",
|
|
2819
|
+
"svg",
|
|
2820
|
+
"ico",
|
|
2821
|
+
"avif",
|
|
2822
|
+
"mp4",
|
|
2823
|
+
"mov",
|
|
2824
|
+
"m4v",
|
|
2825
|
+
"webm",
|
|
2826
|
+
"avi",
|
|
2827
|
+
"mkv",
|
|
2828
|
+
"mp3",
|
|
2829
|
+
"wav",
|
|
2830
|
+
"m4a",
|
|
2831
|
+
"aac",
|
|
2832
|
+
"ogg",
|
|
2833
|
+
"flac"
|
|
2834
|
+
]);
|
|
2835
|
+
var TEMP_NAME = /^(~WRD\d*|~\$|~\w+\.tmp$)|\.tmp$/i;
|
|
2836
|
+
var str = (value) => typeof value === "string" ? value : "";
|
|
2837
|
+
var recordName = (record) => str(record.filename) || str(record.fileName) || str(record.name);
|
|
2838
|
+
var recordMime = (record) => (str(record.mimeType) || str(record.contentType) || str(record.type)).toLowerCase();
|
|
2839
|
+
var isLikelyKnowledgeFile = (record) => {
|
|
2840
|
+
const name = recordName(record);
|
|
2841
|
+
if (TEMP_NAME.test(name)) return false;
|
|
2842
|
+
const ext = name.includes(".") ? name.split(".").pop().toLowerCase() : "";
|
|
2843
|
+
if (MEDIA_EXTENSIONS.has(ext)) return false;
|
|
2844
|
+
const mime = recordMime(record);
|
|
2845
|
+
if (MEDIA_MIME_PREFIXES.some((prefix) => mime.startsWith(prefix))) return false;
|
|
2846
|
+
return true;
|
|
2847
|
+
};
|
|
2848
|
+
var toRecords = (value) => Array.isArray(value) ? value.filter((item) => !!item && typeof item === "object" && !Array.isArray(item)) : [];
|
|
2849
|
+
var num = (value, fallback) => typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
2850
|
+
var parseKnowledgeFileList = (body, request) => {
|
|
2851
|
+
if (body && typeof body === "object" && !Array.isArray(body) && "total" in body) {
|
|
2852
|
+
const envelope = body;
|
|
2853
|
+
const files2 = toRecords(envelope.files);
|
|
2854
|
+
const total = num(envelope.total, files2.length);
|
|
2855
|
+
const skip = num(envelope.skip, request.skip);
|
|
2856
|
+
const scope = envelope.scope === "all" ? "all" : "knowledge";
|
|
2857
|
+
return {
|
|
2858
|
+
files: files2,
|
|
2859
|
+
total,
|
|
2860
|
+
hasMore: typeof envelope.hasMore === "boolean" ? envelope.hasMore : skip + files2.length < total,
|
|
2861
|
+
scope,
|
|
2862
|
+
serverScoped: true,
|
|
2863
|
+
knowledgeFilterUnavailable: envelope.knowledgeFilterUnavailable === true,
|
|
2864
|
+
hiddenCount: 0
|
|
2865
|
+
};
|
|
2866
|
+
}
|
|
2867
|
+
const raw = body && typeof body === "object" && !Array.isArray(body) ? toRecords(body.files) : toRecords(body);
|
|
2868
|
+
const hasMore = raw.length >= request.limit;
|
|
2869
|
+
if (request.scope === "all") {
|
|
2870
|
+
return {
|
|
2871
|
+
files: raw,
|
|
2872
|
+
total: request.skip + raw.length,
|
|
2873
|
+
hasMore,
|
|
2874
|
+
scope: "all",
|
|
2875
|
+
serverScoped: false,
|
|
2876
|
+
knowledgeFilterUnavailable: false,
|
|
2877
|
+
hiddenCount: 0
|
|
2878
|
+
};
|
|
2879
|
+
}
|
|
2880
|
+
const files = raw.filter(isLikelyKnowledgeFile);
|
|
2881
|
+
return {
|
|
2882
|
+
files,
|
|
2883
|
+
total: files.length,
|
|
2884
|
+
hasMore,
|
|
2885
|
+
scope: "knowledge",
|
|
2886
|
+
serverScoped: false,
|
|
2887
|
+
knowledgeFilterUnavailable: false,
|
|
2888
|
+
hiddenCount: raw.length - files.length
|
|
2889
|
+
};
|
|
2890
|
+
};
|
|
2891
|
+
|
|
2805
2892
|
// src/services/vectorDatabase/vectorDatabaseService.ts
|
|
2806
2893
|
var VectorDatabaseService = class {
|
|
2807
2894
|
baseUrl;
|
|
@@ -3562,36 +3649,44 @@ var VectorDatabaseService = class {
|
|
|
3562
3649
|
}
|
|
3563
3650
|
}
|
|
3564
3651
|
/**
|
|
3565
|
-
*
|
|
3652
|
+
* One page of the Knowledge file list from the gateway (see ./knowledgeFiles).
|
|
3653
|
+
*
|
|
3654
|
+
* No fallback to the file storage API here: its listing is the whole Drive (every product's
|
|
3655
|
+
* files), which is exactly what Knowledge must not show. A failure surfaces to the caller.
|
|
3566
3656
|
*/
|
|
3567
|
-
async
|
|
3657
|
+
async listKnowledgeFiles(skip = 0, limit = 50, scope = "knowledge") {
|
|
3568
3658
|
if (!this.isAvailable()) {
|
|
3569
|
-
return [];
|
|
3659
|
+
return parseKnowledgeFileList([], { skip, limit, scope });
|
|
3660
|
+
}
|
|
3661
|
+
const safeSkip = Math.max(0, Math.floor(skip));
|
|
3662
|
+
const safeLimit = Math.min(KNOWLEDGE_PAGE_LIMIT_MAX, Math.max(1, Math.floor(limit)));
|
|
3663
|
+
const query = new URLSearchParams({
|
|
3664
|
+
skip: String(safeSkip),
|
|
3665
|
+
limit: String(safeLimit),
|
|
3666
|
+
scope
|
|
3667
|
+
});
|
|
3668
|
+
debugLogger.debug("Fetching knowledge files from Gateway API", { skip: safeSkip, limit: safeLimit, scope });
|
|
3669
|
+
const response = await fetch(`${this.baseUrl}/embedding/files?${query.toString()}`, {
|
|
3670
|
+
method: "GET",
|
|
3671
|
+
headers: this.getHeaders()
|
|
3672
|
+
});
|
|
3673
|
+
if (!response.ok) {
|
|
3674
|
+
throw new Error(`Couldn't list documents (gateway answered ${response.status})`);
|
|
3570
3675
|
}
|
|
3676
|
+
const body = await response.json();
|
|
3677
|
+
return parseKnowledgeFileList(body, { skip: safeSkip, limit: safeLimit, scope });
|
|
3678
|
+
}
|
|
3679
|
+
/**
|
|
3680
|
+
* Get the user's Knowledge files (first page, knowledge scope). Kept for existing callers;
|
|
3681
|
+
* prefer listKnowledgeFiles for totals and paging.
|
|
3682
|
+
*/
|
|
3683
|
+
async getUserFiles(skip = 0, limit = 50) {
|
|
3571
3684
|
try {
|
|
3572
|
-
|
|
3573
|
-
|
|
3574
|
-
method: "GET",
|
|
3575
|
-
headers: this.getHeaders()
|
|
3576
|
-
});
|
|
3577
|
-
if (!response.ok) {
|
|
3578
|
-
debugLogger.warn("Gateway API files endpoint failed, falling back to file storage API", {
|
|
3579
|
-
status: response.status
|
|
3580
|
-
});
|
|
3581
|
-
return await this.getUserFilesFromFileStorage(skip, limit);
|
|
3582
|
-
}
|
|
3583
|
-
const result = await response.json();
|
|
3584
|
-
debugLogger.debug("Gateway API files response", result);
|
|
3585
|
-
if (Array.isArray(result)) {
|
|
3586
|
-
return this.toRecordArray(result);
|
|
3587
|
-
}
|
|
3588
|
-
if (result && Array.isArray(result.files)) {
|
|
3589
|
-
return this.toRecordArray(result.files);
|
|
3590
|
-
}
|
|
3591
|
-
return [];
|
|
3685
|
+
const page = await this.listKnowledgeFiles(skip, limit, "knowledge");
|
|
3686
|
+
return page.files;
|
|
3592
3687
|
} catch (error) {
|
|
3593
|
-
debugLogger.error("
|
|
3594
|
-
return
|
|
3688
|
+
debugLogger.error("Failed to fetch knowledge files from Gateway API", { error });
|
|
3689
|
+
return [];
|
|
3595
3690
|
}
|
|
3596
3691
|
}
|
|
3597
3692
|
/**
|
|
@@ -4796,6 +4891,7 @@ var knowledgeDocToVectorDocument = (doc) => ({
|
|
|
4796
4891
|
isTeamContent: doc.isTeamContent ?? false,
|
|
4797
4892
|
contentSource: doc.contentSource ?? (doc.isTeamContent ? "team" : "user")
|
|
4798
4893
|
});
|
|
4894
|
+
var optionalString = (value) => typeof value === "string" && value.length > 0 ? value : void 0;
|
|
4799
4895
|
var rawFileRecordToVectorDocument = (record) => {
|
|
4800
4896
|
if (!record || typeof record !== "object") {
|
|
4801
4897
|
return null;
|
|
@@ -4810,10 +4906,12 @@ var rawFileRecordToVectorDocument = (record) => {
|
|
|
4810
4906
|
const mimeType = typeof record.mimeType === "string" ? record.mimeType : "application/octet-stream";
|
|
4811
4907
|
const uploadedBy = typeof record.uploadedBy === "string" ? record.uploadedBy : "unknown";
|
|
4812
4908
|
const uploadedAt = typeof record.uploadedAt === "string" ? record.uploadedAt : (/* @__PURE__ */ new Date()).toISOString();
|
|
4813
|
-
const
|
|
4814
|
-
const isTeamContent = typeof record.isTeamContent === "boolean" ? record.isTeamContent :
|
|
4815
|
-
const
|
|
4909
|
+
const teamSid = optionalString(record.teamSid);
|
|
4910
|
+
const isTeamContent = typeof record.isTeamContent === "boolean" ? record.isTeamContent : !!teamSid;
|
|
4911
|
+
const isUserContent = typeof record.isUserContent === "boolean" ? record.isUserContent : !isTeamContent;
|
|
4912
|
+
const contentSource = record.contentSource === "team" || record.contentSource === void 0 && isTeamContent ? "team" : "user";
|
|
4816
4913
|
const score = typeof record.score === "number" ? record.score : void 0;
|
|
4914
|
+
const size = typeof record.size === "number" && Number.isFinite(record.size) && record.size >= 0 ? record.size : void 0;
|
|
4817
4915
|
return {
|
|
4818
4916
|
id,
|
|
4819
4917
|
filename,
|
|
@@ -4824,7 +4922,12 @@ var rawFileRecordToVectorDocument = (record) => {
|
|
|
4824
4922
|
isUserContent,
|
|
4825
4923
|
isTeamContent,
|
|
4826
4924
|
contentSource,
|
|
4827
|
-
score
|
|
4925
|
+
score,
|
|
4926
|
+
size,
|
|
4927
|
+
bucket: optionalString(record.bucket),
|
|
4928
|
+
teamSid,
|
|
4929
|
+
userEmail: optionalString(record.userEmail),
|
|
4930
|
+
preview
|
|
4828
4931
|
};
|
|
4829
4932
|
};
|
|
4830
4933
|
var useVectorStore = () => {
|
|
@@ -5376,22 +5479,32 @@ var useVectorStore = () => {
|
|
|
5376
5479
|
useEffect2(() => {
|
|
5377
5480
|
initializeVectorService();
|
|
5378
5481
|
}, [initializeVectorService]);
|
|
5379
|
-
const
|
|
5482
|
+
const getKnowledgeDocumentsPage = useCallback2(async (skip = 0, limit = 50, scope = "knowledge") => {
|
|
5380
5483
|
if (!status.isEnabled || status.migrationRequired) {
|
|
5381
|
-
return
|
|
5484
|
+
return {
|
|
5485
|
+
documents: [],
|
|
5486
|
+
total: 0,
|
|
5487
|
+
hasMore: false,
|
|
5488
|
+
scope,
|
|
5489
|
+
serverScoped: false,
|
|
5490
|
+
knowledgeFilterUnavailable: false,
|
|
5491
|
+
hiddenCount: 0
|
|
5492
|
+
};
|
|
5382
5493
|
}
|
|
5494
|
+
const { files, ...meta } = await vectorDatabaseService.listKnowledgeFiles(skip, limit, scope);
|
|
5495
|
+
const documents = files.map(rawFileRecordToVectorDocument).filter((doc) => doc !== null);
|
|
5496
|
+
debugLogger.info("Retrieved knowledge documents", { count: documents.length, total: meta.total, scope: meta.scope });
|
|
5497
|
+
return { documents, ...meta };
|
|
5498
|
+
}, [status.isEnabled, status.migrationRequired]);
|
|
5499
|
+
const getUserDocuments = useCallback2(async (skip = 0, limit = 50) => {
|
|
5383
5500
|
try {
|
|
5384
|
-
const
|
|
5385
|
-
|
|
5386
|
-
debugLogger.info("Retrieved user documents from vector database", {
|
|
5387
|
-
count: documents.length
|
|
5388
|
-
});
|
|
5389
|
-
return documents;
|
|
5501
|
+
const page = await getKnowledgeDocumentsPage(skip, limit, "knowledge");
|
|
5502
|
+
return page.documents;
|
|
5390
5503
|
} catch (error) {
|
|
5391
5504
|
debugLogger.error("Failed to get user documents", { error });
|
|
5392
5505
|
return [];
|
|
5393
5506
|
}
|
|
5394
|
-
}, [
|
|
5507
|
+
}, [getKnowledgeDocumentsPage]);
|
|
5395
5508
|
const deleteDocument = useCallback2(async (fileId) => {
|
|
5396
5509
|
if (!status.isEnabled || status.migrationRequired) {
|
|
5397
5510
|
return {
|
|
@@ -5488,6 +5601,7 @@ var useVectorStore = () => {
|
|
|
5488
5601
|
uploadDocument,
|
|
5489
5602
|
searchDocuments,
|
|
5490
5603
|
getUserDocuments,
|
|
5604
|
+
getKnowledgeDocumentsPage,
|
|
5491
5605
|
deleteDocument,
|
|
5492
5606
|
downloadVectorFile,
|
|
5493
5607
|
getFilePreview,
|
|
@@ -5892,4 +6006,4 @@ export {
|
|
|
5892
6006
|
useNotification,
|
|
5893
6007
|
NotificationProvider
|
|
5894
6008
|
};
|
|
5895
|
-
//# sourceMappingURL=chunk-
|
|
6009
|
+
//# sourceMappingURL=chunk-KAXUI5H7.mjs.map
|