@absolutejs/absolute 0.19.0-beta.436 → 0.19.0-beta.438

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.
Files changed (42) hide show
  1. package/dist/ai/client/index.js +74 -1
  2. package/dist/ai/client/index.js.map +3 -3
  3. package/dist/ai/index.js +234 -2
  4. package/dist/ai/index.js.map +4 -4
  5. package/dist/ai-client/angular/ai/index.js +73 -0
  6. package/dist/ai-client/react/ai/index.js +369 -126
  7. package/dist/ai-client/vue/ai/index.js +73 -0
  8. package/dist/angular/ai/index.js +74 -1
  9. package/dist/angular/ai/index.js.map +3 -3
  10. package/dist/angular/index.js +4 -3
  11. package/dist/angular/index.js.map +4 -4
  12. package/dist/angular/server.js +2 -2
  13. package/dist/angular/server.js.map +1 -1
  14. package/dist/build.js +2 -2
  15. package/dist/build.js.map +1 -1
  16. package/dist/client/index.js +2 -1
  17. package/dist/client/index.js.map +3 -3
  18. package/dist/index.js +4 -3
  19. package/dist/index.js.map +4 -4
  20. package/dist/react/ai/index.js +623 -294
  21. package/dist/react/ai/index.js.map +12 -8
  22. package/dist/react/index.js +3 -2
  23. package/dist/react/index.js.map +4 -4
  24. package/dist/src/ai/client/ragClient.d.ts +8 -1
  25. package/dist/src/ai/rag/chat.d.ts +134 -2
  26. package/dist/src/react/ai/index.d.ts +3 -0
  27. package/dist/src/react/ai/useRAG.d.ts +45 -0
  28. package/dist/src/react/ai/useRAGChunkPreview.d.ts +11 -0
  29. package/dist/src/react/ai/useRAGDocuments.d.ts +10 -0
  30. package/dist/src/react/ai/useRAGIndexAdmin.d.ts +30 -0
  31. package/dist/svelte/ai/index.js +74 -1
  32. package/dist/svelte/ai/index.js.map +3 -3
  33. package/dist/svelte/index.js +3 -2
  34. package/dist/svelte/index.js.map +4 -4
  35. package/dist/types/ai.d.ts +74 -0
  36. package/dist/vue/ai/index.js +74 -1
  37. package/dist/vue/ai/index.js.map +3 -3
  38. package/dist/vue/components/index.js +11 -2
  39. package/dist/vue/components/index.js.map +3 -3
  40. package/dist/vue/index.js +13 -3
  41. package/dist/vue/index.js.map +5 -5
  42. package/package.json +1 -1
@@ -740,6 +740,79 @@ var createRAGClient = (options) => {
740
740
  }
741
741
  return parseJson(response);
742
742
  },
743
+ async documents(kind) {
744
+ const query = kind ? `?kind=${encodeURIComponent(kind)}` : "";
745
+ const response = await fetchImpl(`${basePath}/documents${query}`);
746
+ if (!response.ok) {
747
+ throw new Error(await toErrorMessage(response));
748
+ }
749
+ return parseJson(response);
750
+ },
751
+ async createDocument(input) {
752
+ const response = await fetchImpl(`${basePath}/documents`, {
753
+ body: JSON.stringify(input),
754
+ headers: jsonHeaders,
755
+ method: "POST"
756
+ });
757
+ if (!response.ok) {
758
+ return {
759
+ ok: false,
760
+ error: await toErrorMessage(response)
761
+ };
762
+ }
763
+ return parseJson(response);
764
+ },
765
+ async documentChunks(id) {
766
+ const response = await fetchImpl(`${basePath}/documents/${encodeURIComponent(id)}/chunks`);
767
+ if (!response.ok) {
768
+ const error = await toErrorMessage(response);
769
+ return { ok: false, error };
770
+ }
771
+ return parseJson(response);
772
+ },
773
+ async deleteDocument(id) {
774
+ const response = await fetchImpl(`${basePath}/documents/${encodeURIComponent(id)}`, {
775
+ method: "DELETE"
776
+ });
777
+ if (!response.ok) {
778
+ return {
779
+ ok: false,
780
+ error: await toErrorMessage(response)
781
+ };
782
+ }
783
+ return parseJson(response);
784
+ },
785
+ async reseed() {
786
+ const response = await fetchImpl(`${basePath}/reseed`, {
787
+ method: "POST"
788
+ });
789
+ if (!response.ok) {
790
+ return {
791
+ ok: false,
792
+ error: await toErrorMessage(response)
793
+ };
794
+ }
795
+ return parseJson(response);
796
+ },
797
+ async reset() {
798
+ const response = await fetchImpl(`${basePath}/reset`, {
799
+ method: "POST"
800
+ });
801
+ if (!response.ok) {
802
+ return {
803
+ ok: false,
804
+ error: await toErrorMessage(response)
805
+ };
806
+ }
807
+ return parseJson(response);
808
+ },
809
+ async backends() {
810
+ const response = await fetchImpl(`${basePath}/backends`);
811
+ if (!response.ok) {
812
+ throw new Error(await toErrorMessage(response));
813
+ }
814
+ return parseJson(response);
815
+ },
743
816
  async clearIndex() {
744
817
  const response = await fetchImpl(`${basePath}/index`, {
745
818
  method: "DELETE"
@@ -629,11 +629,206 @@ var useAIStream = (path, conversationId) => {
629
629
  send
630
630
  };
631
631
  };
632
+ // src/react/ai/useRAGChunkPreview.ts
633
+ import { useCallback as useCallback2, useMemo, useState } from "react";
634
+ // src/ai/client/ragClient.ts
635
+ var jsonHeaders = {
636
+ "Content-Type": "application/json"
637
+ };
638
+ var normalizeBasePath = (path) => path.endsWith("/") ? path.slice(0, -1) : path;
639
+ var parseJson = async (response) => {
640
+ const payload = await response.json();
641
+ return payload;
642
+ };
643
+ var toErrorMessage = async (response) => {
644
+ try {
645
+ const payload = await response.json();
646
+ if (typeof payload.error === "string" && payload.error) {
647
+ return payload.error;
648
+ }
649
+ } catch {}
650
+ return `Request failed with status ${response.status}`;
651
+ };
652
+ var createRAGClient = (options) => {
653
+ const basePath = normalizeBasePath(options.path);
654
+ const fetchImpl = options.fetch ?? fetch;
655
+ return {
656
+ async ingest(chunks) {
657
+ const response = await fetchImpl(`${basePath}/ingest`, {
658
+ body: JSON.stringify({ chunks }),
659
+ headers: jsonHeaders,
660
+ method: "POST"
661
+ });
662
+ if (!response.ok) {
663
+ return {
664
+ ok: false,
665
+ error: await toErrorMessage(response)
666
+ };
667
+ }
668
+ return parseJson(response);
669
+ },
670
+ async ingestDocuments(input) {
671
+ const response = await fetchImpl(`${basePath}/ingest`, {
672
+ body: JSON.stringify(input),
673
+ headers: jsonHeaders,
674
+ method: "POST"
675
+ });
676
+ if (!response.ok) {
677
+ return {
678
+ ok: false,
679
+ error: await toErrorMessage(response)
680
+ };
681
+ }
682
+ return parseJson(response);
683
+ },
684
+ async search(input) {
685
+ const response = await fetchImpl(`${basePath}/search`, {
686
+ body: JSON.stringify(input),
687
+ headers: jsonHeaders,
688
+ method: "POST"
689
+ });
690
+ if (!response.ok) {
691
+ throw new Error(await toErrorMessage(response));
692
+ }
693
+ const payload = await parseJson(response);
694
+ if (!payload.ok) {
695
+ throw new Error(payload.error ?? "RAG search failed");
696
+ }
697
+ return payload.results ?? [];
698
+ },
699
+ async status() {
700
+ const response = await fetchImpl(`${basePath}/status`);
701
+ if (!response.ok) {
702
+ throw new Error(await toErrorMessage(response));
703
+ }
704
+ return parseJson(response);
705
+ },
706
+ async documents(kind) {
707
+ const query = kind ? `?kind=${encodeURIComponent(kind)}` : "";
708
+ const response = await fetchImpl(`${basePath}/documents${query}`);
709
+ if (!response.ok) {
710
+ throw new Error(await toErrorMessage(response));
711
+ }
712
+ return parseJson(response);
713
+ },
714
+ async createDocument(input) {
715
+ const response = await fetchImpl(`${basePath}/documents`, {
716
+ body: JSON.stringify(input),
717
+ headers: jsonHeaders,
718
+ method: "POST"
719
+ });
720
+ if (!response.ok) {
721
+ return {
722
+ ok: false,
723
+ error: await toErrorMessage(response)
724
+ };
725
+ }
726
+ return parseJson(response);
727
+ },
728
+ async documentChunks(id) {
729
+ const response = await fetchImpl(`${basePath}/documents/${encodeURIComponent(id)}/chunks`);
730
+ if (!response.ok) {
731
+ const error = await toErrorMessage(response);
732
+ return { ok: false, error };
733
+ }
734
+ return parseJson(response);
735
+ },
736
+ async deleteDocument(id) {
737
+ const response = await fetchImpl(`${basePath}/documents/${encodeURIComponent(id)}`, {
738
+ method: "DELETE"
739
+ });
740
+ if (!response.ok) {
741
+ return {
742
+ ok: false,
743
+ error: await toErrorMessage(response)
744
+ };
745
+ }
746
+ return parseJson(response);
747
+ },
748
+ async reseed() {
749
+ const response = await fetchImpl(`${basePath}/reseed`, {
750
+ method: "POST"
751
+ });
752
+ if (!response.ok) {
753
+ return {
754
+ ok: false,
755
+ error: await toErrorMessage(response)
756
+ };
757
+ }
758
+ return parseJson(response);
759
+ },
760
+ async reset() {
761
+ const response = await fetchImpl(`${basePath}/reset`, {
762
+ method: "POST"
763
+ });
764
+ if (!response.ok) {
765
+ return {
766
+ ok: false,
767
+ error: await toErrorMessage(response)
768
+ };
769
+ }
770
+ return parseJson(response);
771
+ },
772
+ async backends() {
773
+ const response = await fetchImpl(`${basePath}/backends`);
774
+ if (!response.ok) {
775
+ throw new Error(await toErrorMessage(response));
776
+ }
777
+ return parseJson(response);
778
+ },
779
+ async clearIndex() {
780
+ const response = await fetchImpl(`${basePath}/index`, {
781
+ method: "DELETE"
782
+ });
783
+ if (!response.ok) {
784
+ throw new Error(await toErrorMessage(response));
785
+ }
786
+ return parseJson(response);
787
+ }
788
+ };
789
+ };
790
+ // src/react/ai/useRAGChunkPreview.ts
791
+ var useRAGChunkPreview = (path) => {
792
+ const client = useMemo(() => createRAGClient({ path }), [path]);
793
+ const [preview, setPreview] = useState(null);
794
+ const [isLoading, setIsLoading] = useState(false);
795
+ const [error, setError] = useState(null);
796
+ const inspect = useCallback2(async (id) => {
797
+ setIsLoading(true);
798
+ setError(null);
799
+ try {
800
+ const response = await client.documentChunks(id);
801
+ if (!response.ok) {
802
+ throw new Error(response.error);
803
+ }
804
+ setPreview(response);
805
+ return response;
806
+ } catch (err) {
807
+ const message = err instanceof Error ? err.message : "Failed to load RAG chunk preview";
808
+ setError(message);
809
+ throw err;
810
+ } finally {
811
+ setIsLoading(false);
812
+ }
813
+ }, [client]);
814
+ const clear = useCallback2(() => {
815
+ setPreview(null);
816
+ setError(null);
817
+ setIsLoading(false);
818
+ }, []);
819
+ return {
820
+ clear,
821
+ error,
822
+ inspect,
823
+ isLoading,
824
+ preview
825
+ };
826
+ };
632
827
  // src/react/ai/useRAG.ts
633
- import { useMemo as useMemo7 } from "react";
828
+ import { useMemo as useMemo10 } from "react";
634
829
 
635
830
  // src/react/ai/useRAGCitations.ts
636
- import { useMemo } from "react";
831
+ import { useMemo as useMemo2 } from "react";
637
832
 
638
833
  // src/ai/rag/presentation.ts
639
834
  var buildSourceGroupKey = (source) => source.source ?? source.title ?? source.chunkId;
@@ -727,8 +922,8 @@ var resolveRAGStreamStage = ({
727
922
 
728
923
  // src/react/ai/useRAGCitations.ts
729
924
  var useRAGCitations = (sources) => {
730
- const citations = useMemo(() => buildRAGCitations(sources), [sources]);
731
- const sourceGroups = useMemo(() => buildRAGSourceGroups(sources), [sources]);
925
+ const citations = useMemo2(() => buildRAGCitations(sources), [sources]);
926
+ const sourceGroups = useMemo2(() => buildRAGSourceGroups(sources), [sources]);
732
927
  return {
733
928
  citations,
734
929
  hasCitations: citations.length > 0,
@@ -736,102 +931,56 @@ var useRAGCitations = (sources) => {
736
931
  };
737
932
  };
738
933
 
739
- // src/react/ai/useRAGIngest.ts
740
- import { useCallback as useCallback2, useMemo as useMemo2, useState } from "react";
741
-
742
- // src/ai/client/ragClient.ts
743
- var jsonHeaders = {
744
- "Content-Type": "application/json"
745
- };
746
- var normalizeBasePath = (path) => path.endsWith("/") ? path.slice(0, -1) : path;
747
- var parseJson = async (response) => {
748
- const payload = await response.json();
749
- return payload;
750
- };
751
- var toErrorMessage = async (response) => {
752
- try {
753
- const payload = await response.json();
754
- if (typeof payload.error === "string" && payload.error) {
755
- return payload.error;
934
+ // src/react/ai/useRAGDocuments.ts
935
+ import { useCallback as useCallback3, useMemo as useMemo3, useState as useState2 } from "react";
936
+ var useRAGDocuments = (path) => {
937
+ const client = useMemo3(() => createRAGClient({ path }), [path]);
938
+ const [documents, setDocuments] = useState2([]);
939
+ const [isLoading, setIsLoading] = useState2(false);
940
+ const [error, setError] = useState2(null);
941
+ const [lastResponse, setLastResponse] = useState2(null);
942
+ const load = useCallback3(async (kind) => {
943
+ setIsLoading(true);
944
+ setError(null);
945
+ try {
946
+ const response = await client.documents(kind);
947
+ setDocuments(response.documents);
948
+ setLastResponse(response);
949
+ return response;
950
+ } catch (err) {
951
+ const message = err instanceof Error ? err.message : "Failed to load RAG documents";
952
+ setError(message);
953
+ throw err;
954
+ } finally {
955
+ setIsLoading(false);
756
956
  }
757
- } catch {}
758
- return `Request failed with status ${response.status}`;
759
- };
760
- var createRAGClient = (options) => {
761
- const basePath = normalizeBasePath(options.path);
762
- const fetchImpl = options.fetch ?? fetch;
957
+ }, [client]);
958
+ const reset = useCallback3(() => {
959
+ setDocuments([]);
960
+ setError(null);
961
+ setLastResponse(null);
962
+ setIsLoading(false);
963
+ }, []);
763
964
  return {
764
- async ingest(chunks) {
765
- const response = await fetchImpl(`${basePath}/ingest`, {
766
- body: JSON.stringify({ chunks }),
767
- headers: jsonHeaders,
768
- method: "POST"
769
- });
770
- if (!response.ok) {
771
- return {
772
- ok: false,
773
- error: await toErrorMessage(response)
774
- };
775
- }
776
- return parseJson(response);
777
- },
778
- async ingestDocuments(input) {
779
- const response = await fetchImpl(`${basePath}/ingest`, {
780
- body: JSON.stringify(input),
781
- headers: jsonHeaders,
782
- method: "POST"
783
- });
784
- if (!response.ok) {
785
- return {
786
- ok: false,
787
- error: await toErrorMessage(response)
788
- };
789
- }
790
- return parseJson(response);
791
- },
792
- async search(input) {
793
- const response = await fetchImpl(`${basePath}/search`, {
794
- body: JSON.stringify(input),
795
- headers: jsonHeaders,
796
- method: "POST"
797
- });
798
- if (!response.ok) {
799
- throw new Error(await toErrorMessage(response));
800
- }
801
- const payload = await parseJson(response);
802
- if (!payload.ok) {
803
- throw new Error(payload.error ?? "RAG search failed");
804
- }
805
- return payload.results ?? [];
806
- },
807
- async status() {
808
- const response = await fetchImpl(`${basePath}/status`);
809
- if (!response.ok) {
810
- throw new Error(await toErrorMessage(response));
811
- }
812
- return parseJson(response);
813
- },
814
- async clearIndex() {
815
- const response = await fetchImpl(`${basePath}/index`, {
816
- method: "DELETE"
817
- });
818
- if (!response.ok) {
819
- throw new Error(await toErrorMessage(response));
820
- }
821
- return parseJson(response);
822
- }
965
+ documents,
966
+ error,
967
+ isLoading,
968
+ lastResponse,
969
+ load,
970
+ reset
823
971
  };
824
972
  };
825
973
 
826
974
  // src/react/ai/useRAGIngest.ts
975
+ import { useCallback as useCallback4, useMemo as useMemo4, useState as useState3 } from "react";
827
976
  var useRAGIngest = (path) => {
828
- const client = useMemo2(() => createRAGClient({ path }), [path]);
829
- const [error, setError] = useState(null);
830
- const [isIngesting, setIsIngesting] = useState(false);
831
- const [lastIngestCount, setLastIngestCount] = useState(null);
832
- const [lastDocumentCount, setLastDocumentCount] = useState(null);
833
- const [lastResponse, setLastResponse] = useState(null);
834
- const ingestChunks = useCallback2(async (chunks) => {
977
+ const client = useMemo4(() => createRAGClient({ path }), [path]);
978
+ const [error, setError] = useState3(null);
979
+ const [isIngesting, setIsIngesting] = useState3(false);
980
+ const [lastIngestCount, setLastIngestCount] = useState3(null);
981
+ const [lastDocumentCount, setLastDocumentCount] = useState3(null);
982
+ const [lastResponse, setLastResponse] = useState3(null);
983
+ const ingestChunks = useCallback4(async (chunks) => {
835
984
  setIsIngesting(true);
836
985
  setError(null);
837
986
  try {
@@ -851,7 +1000,7 @@ var useRAGIngest = (path) => {
851
1000
  setIsIngesting(false);
852
1001
  }
853
1002
  }, [client]);
854
- const ingestDocuments = useCallback2(async (input) => {
1003
+ const ingestDocuments = useCallback4(async (input) => {
855
1004
  setIsIngesting(true);
856
1005
  setError(null);
857
1006
  try {
@@ -871,7 +1020,7 @@ var useRAGIngest = (path) => {
871
1020
  setIsIngesting(false);
872
1021
  }
873
1022
  }, [client]);
874
- const clearIndex = useCallback2(async () => {
1023
+ const clearIndex = useCallback4(async () => {
875
1024
  setIsIngesting(true);
876
1025
  setError(null);
877
1026
  try {
@@ -887,7 +1036,7 @@ var useRAGIngest = (path) => {
887
1036
  setIsIngesting(false);
888
1037
  }
889
1038
  }, [client]);
890
- const reset = useCallback2(() => {
1039
+ const reset = useCallback4(() => {
891
1040
  setError(null);
892
1041
  setLastDocumentCount(null);
893
1042
  setLastIngestCount(null);
@@ -907,16 +1056,101 @@ var useRAGIngest = (path) => {
907
1056
  };
908
1057
  };
909
1058
 
1059
+ // src/react/ai/useRAGIndexAdmin.ts
1060
+ import { useCallback as useCallback5, useMemo as useMemo5, useState as useState4 } from "react";
1061
+ var useRAGIndexAdmin = (path) => {
1062
+ const client = useMemo5(() => createRAGClient({ path }), [path]);
1063
+ const [isLoading, setIsLoading] = useState4(false);
1064
+ const [error, setError] = useState4(null);
1065
+ const [lastMutation, setLastMutation] = useState4(null);
1066
+ const [backends, setBackends] = useState4(null);
1067
+ const run = useCallback5(async (operation) => {
1068
+ setIsLoading(true);
1069
+ setError(null);
1070
+ try {
1071
+ return await operation();
1072
+ } catch (err) {
1073
+ const message = err instanceof Error ? err.message : "RAG index administration failed";
1074
+ setError(message);
1075
+ throw err;
1076
+ } finally {
1077
+ setIsLoading(false);
1078
+ }
1079
+ }, []);
1080
+ const deleteDocument = useCallback5(async (id) => run(async () => {
1081
+ const response = await client.deleteDocument(id);
1082
+ setLastMutation(response);
1083
+ if (!response.ok) {
1084
+ throw new Error(response.error ?? "Failed to delete document");
1085
+ }
1086
+ return response;
1087
+ }), [client, run]);
1088
+ const createDocument = useCallback5(async (input) => run(async () => {
1089
+ const response = await client.createDocument(input);
1090
+ setLastMutation(response);
1091
+ if (!response.ok) {
1092
+ throw new Error(response.error ?? "Failed to create document");
1093
+ }
1094
+ return response;
1095
+ }), [client, run]);
1096
+ const reseed = useCallback5(async () => run(async () => {
1097
+ const response = await client.reseed();
1098
+ setLastMutation(response);
1099
+ if (!response.ok) {
1100
+ throw new Error(response.error ?? "Failed to reseed index");
1101
+ }
1102
+ return response;
1103
+ }), [client, run]);
1104
+ const reset = useCallback5(async () => run(async () => {
1105
+ const response = await client.reset();
1106
+ setLastMutation(response);
1107
+ if (!response.ok) {
1108
+ throw new Error(response.error ?? "Failed to reset index");
1109
+ }
1110
+ return response;
1111
+ }), [client, run]);
1112
+ const loadBackends = useCallback5(async () => run(async () => {
1113
+ const response = await client.backends();
1114
+ setBackends(response);
1115
+ return response;
1116
+ }), [client, run]);
1117
+ const clearIndex = useCallback5(async () => run(async () => {
1118
+ const response = await client.clearIndex();
1119
+ const mutation = { ok: response.ok };
1120
+ setLastMutation(mutation);
1121
+ return mutation;
1122
+ }), [client, run]);
1123
+ const resetState = useCallback5(() => {
1124
+ setIsLoading(false);
1125
+ setError(null);
1126
+ setLastMutation(null);
1127
+ setBackends(null);
1128
+ }, []);
1129
+ return {
1130
+ backends,
1131
+ clearIndex,
1132
+ createDocument,
1133
+ deleteDocument,
1134
+ error,
1135
+ isLoading,
1136
+ lastMutation,
1137
+ loadBackends,
1138
+ reseed,
1139
+ reset,
1140
+ resetState
1141
+ };
1142
+ };
1143
+
910
1144
  // src/react/ai/useRAGSearch.ts
911
- import { useCallback as useCallback3, useMemo as useMemo3, useState as useState2 } from "react";
1145
+ import { useCallback as useCallback6, useMemo as useMemo6, useState as useState5 } from "react";
912
1146
  var useRAGSearch = (path) => {
913
- const client = useMemo3(() => createRAGClient({ path }), [path]);
914
- const [results, setResults] = useState2([]);
915
- const [error, setError] = useState2(null);
916
- const [isSearching, setIsSearching] = useState2(false);
917
- const [hasSearched, setHasSearched] = useState2(false);
918
- const [lastRequest, setLastRequest] = useState2(null);
919
- const search = useCallback3(async (input) => {
1147
+ const client = useMemo6(() => createRAGClient({ path }), [path]);
1148
+ const [results, setResults] = useState5([]);
1149
+ const [error, setError] = useState5(null);
1150
+ const [isSearching, setIsSearching] = useState5(false);
1151
+ const [hasSearched, setHasSearched] = useState5(false);
1152
+ const [lastRequest, setLastRequest] = useState5(null);
1153
+ const search = useCallback6(async (input) => {
920
1154
  setIsSearching(true);
921
1155
  setError(null);
922
1156
  setLastRequest(input);
@@ -933,7 +1167,7 @@ var useRAGSearch = (path) => {
933
1167
  setIsSearching(false);
934
1168
  }
935
1169
  }, [client]);
936
- const reset = useCallback3(() => {
1170
+ const reset = useCallback6(() => {
937
1171
  setError(null);
938
1172
  setHasSearched(false);
939
1173
  setLastRequest(null);
@@ -952,11 +1186,11 @@ var useRAGSearch = (path) => {
952
1186
  };
953
1187
 
954
1188
  // src/react/ai/useRAGSources.ts
955
- import { useMemo as useMemo4 } from "react";
1189
+ import { useMemo as useMemo7 } from "react";
956
1190
  var useRAGSources = (messages) => {
957
- const latestAssistantMessage = useMemo4(() => getLatestAssistantMessage(messages), [messages]);
958
- const sources = useMemo4(() => getLatestRAGSources(messages), [messages]);
959
- const sourceGroups = useMemo4(() => buildRAGSourceGroups(sources), [sources]);
1191
+ const latestAssistantMessage = useMemo7(() => getLatestAssistantMessage(messages), [messages]);
1192
+ const sources = useMemo7(() => getLatestRAGSources(messages), [messages]);
1193
+ const sourceGroups = useMemo7(() => buildRAGSourceGroups(sources), [sources]);
960
1194
  return {
961
1195
  hasSources: sources.length > 0,
962
1196
  latestAssistantMessage,
@@ -966,14 +1200,14 @@ var useRAGSources = (messages) => {
966
1200
  };
967
1201
 
968
1202
  // src/react/ai/useRAGStatus.ts
969
- import { useCallback as useCallback4, useEffect as useEffect3, useMemo as useMemo5, useState as useState3 } from "react";
1203
+ import { useCallback as useCallback7, useEffect as useEffect3, useMemo as useMemo8, useState as useState6 } from "react";
970
1204
  var useRAGStatus = (path, autoLoad = true) => {
971
- const client = useMemo5(() => createRAGClient({ path }), [path]);
972
- const [status, setStatus] = useState3();
973
- const [capabilities, setCapabilities] = useState3();
974
- const [error, setError] = useState3(null);
975
- const [isLoading, setIsLoading] = useState3(autoLoad);
976
- const refresh = useCallback4(async () => {
1205
+ const client = useMemo8(() => createRAGClient({ path }), [path]);
1206
+ const [status, setStatus] = useState6();
1207
+ const [capabilities, setCapabilities] = useState6();
1208
+ const [error, setError] = useState6(null);
1209
+ const [isLoading, setIsLoading] = useState6(autoLoad);
1210
+ const refresh = useCallback7(async () => {
977
1211
  setIsLoading(true);
978
1212
  setError(null);
979
1213
  try {
@@ -989,7 +1223,7 @@ var useRAGStatus = (path, autoLoad = true) => {
989
1223
  setIsLoading(false);
990
1224
  }
991
1225
  }, [client]);
992
- const reset = useCallback4(() => {
1226
+ const reset = useCallback7(() => {
993
1227
  setCapabilities(undefined);
994
1228
  setError(null);
995
1229
  setIsLoading(false);
@@ -1013,19 +1247,19 @@ var useRAGStatus = (path, autoLoad = true) => {
1013
1247
  };
1014
1248
 
1015
1249
  // src/react/ai/useRAGStream.ts
1016
- import { useCallback as useCallback5, useMemo as useMemo6 } from "react";
1250
+ import { useCallback as useCallback8, useMemo as useMemo9 } from "react";
1017
1251
  var useRAGStream = (path, conversationId) => {
1018
1252
  const stream = useAIStream(path, conversationId);
1019
- const latestAssistantMessage = useMemo6(() => getLatestAssistantMessage(stream.messages), [stream.messages]);
1020
- const sources = useMemo6(() => getLatestRAGSources(stream.messages), [stream.messages]);
1021
- const sourceGroups = useMemo6(() => buildRAGSourceGroups(sources), [sources]);
1022
- const citations = useMemo6(() => buildRAGCitations(sources), [sources]);
1023
- const stage = useMemo6(() => resolveRAGStreamStage({
1253
+ const latestAssistantMessage = useMemo9(() => getLatestAssistantMessage(stream.messages), [stream.messages]);
1254
+ const sources = useMemo9(() => getLatestRAGSources(stream.messages), [stream.messages]);
1255
+ const sourceGroups = useMemo9(() => buildRAGSourceGroups(sources), [sources]);
1256
+ const citations = useMemo9(() => buildRAGCitations(sources), [sources]);
1257
+ const stage = useMemo9(() => resolveRAGStreamStage({
1024
1258
  error: stream.error,
1025
1259
  isStreaming: stream.isStreaming,
1026
1260
  messages: stream.messages
1027
1261
  }), [stream.error, stream.isStreaming, stream.messages]);
1028
- const query = useCallback5((content, attachments) => {
1262
+ const query = useCallback8((content, attachments) => {
1029
1263
  stream.send(content, attachments);
1030
1264
  }, [stream]);
1031
1265
  return {
@@ -1045,17 +1279,23 @@ var useRAG = (path, options = {}) => {
1045
1279
  const search = useRAGSearch(path);
1046
1280
  const ingest = useRAGIngest(path);
1047
1281
  const status = useRAGStatus(path, options.autoLoadStatus ?? true);
1282
+ const documents = useRAGDocuments(path);
1283
+ const chunkPreview = useRAGChunkPreview(path);
1284
+ const index = useRAGIndexAdmin(path);
1048
1285
  const stream = useRAGStream(options.streamPath ?? path, options.conversationId);
1049
1286
  const sources = useRAGSources(stream.messages);
1050
1287
  const citations = useRAGCitations(sources.sources);
1051
- return useMemo7(() => ({
1288
+ return useMemo10(() => ({
1052
1289
  citations,
1290
+ chunkPreview,
1291
+ documents,
1053
1292
  ingest,
1293
+ index,
1054
1294
  search,
1055
1295
  sources,
1056
1296
  status,
1057
1297
  stream
1058
- }), [citations, ingest, search, sources, status, stream]);
1298
+ }), [citations, chunkPreview, documents, ingest, index, search, sources, status, stream]);
1059
1299
  };
1060
1300
  export {
1061
1301
  useRAGStream,
@@ -1063,7 +1303,10 @@ export {
1063
1303
  useRAGSources,
1064
1304
  useRAGSearch,
1065
1305
  useRAGIngest,
1306
+ useRAGIndexAdmin,
1307
+ useRAGDocuments,
1066
1308
  useRAGCitations,
1309
+ useRAGChunkPreview,
1067
1310
  useRAG,
1068
1311
  useAIStream,
1069
1312
  AIStreamProvider